diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,25 @@
 
 ## WIP
 
+## [3.3] - 2020-05-07
+  - Move package from `Graphics.Vulkan` to just `Vulkan`, #60
+  - Bump API version to 1.2.140
+  - Make the continuation the last argument to 'bracket' functions, discussion
+    on #49
+  - Begin/End bracket pairs are now called 'useXXX' rather than 'withXXX', #66
+  - Begin/End bracket pairs where it's not necessary to 'End' on an exception
+    have a simplified type, discussion on #49
+  - Clarify optional vector lengths by preserving the length member, #71
+  - Infer lengths of preserved length members when they are 0
+  - Throw an exception when trying to call a null function pointer, #42
+  - Implement HasObjectType class to automate getting VkObjectType, #54
+  - Add constraints to check that structs are correctly extended
+  - Simplify type of `withDescriptorSets`, it no longer requires the user
+    specifying the `DescriptorPool` twice, #81
+  - Wrap with SomeStruct extensible structs in Vector arguments to commands, #82
+
+  Thanks to @dpwiz for helping with this release!
+
 ## [3.2.0.0] - 2020-05-02
   - Update API version 1.2.139
   - Bracket functions now take as an argument a function to consume a pair of
diff --git a/readme.md b/readme.md
--- a/readme.md
+++ b/readme.md
@@ -7,9 +7,26 @@
 access to all the functionality. If you find something you can do in the C
 bindings but not in these high level bindings please raise an issue.
 
-These bindings are intended to be imported qualified and do not feature the
-`Vk` prefixes on commands, structures, members or constants.
+Practically speaking this means:
 
+- No fiddling with `vkGetInstanceProcAddr` or
+  `vkGetDeviceProcAddr` to get function pointers, this is done automatically on
+  instance and device creation<sup>[1](#fun-ptr)</sup>.
+
+- No setting the `sType` member, this is done automatically.
+
+- No passing length/pointer pairs for arrays, `Vector` is used
+  instead<sup>[2](#opt-vec)</sup>.
+
+- No passing pointers for return values, this is done for you and multiple
+  results are returned as elements of a tuple.
+
+- No checking `VkResult` return values for failure, a `VulkanException` will be
+  thrown if a Vulkan command returns an error `VkResult`.
+
+- No manual memory management for command parameters or Vulkan structs. You'll
+  still have to manage buffer and image memory yourself however.
+
 ## Package structure
 
 Types and functions are placed into modules according to the `features` and
@@ -17,10 +34,13 @@
 functions, a best guess has to be made for types. Types and constants are drawn
 in transitively according to the dependencies of the functions.
 
-It should be sufficient to import `Graphics.Vulkan.CoreXX` along with
-`Graphics.Vulkan.Extensions.{whatever extensions you want}`. You might want to
-import `Graphics.Vulkan.Zero` too.
+It should be sufficient to import `Vulkan.CoreXX` along with
+`Vulkan.Extensions.{whatever extensions you want}`. You might want to import
+`Vulkan.Zero` too.
 
+These bindings are intended to be imported qualified and do not feature the
+`Vk` prefixes on commands, structures, members or constants.
+
 ## Things to know
 
 - Documentation is included more or less verbatim from the Vulkan C API
@@ -33,13 +53,13 @@
   operator simply ignores the string on the left.
 
 - There exists a `Zero` type class defined in
-  [Graphics.Vulkan.Zero](src/Graphics/Vulkan/Zero.hs). This is a class for
-  initializing values with all zero contents and empty arrays. It's very handy
-  when initializing structs to use something like `zero { only = _, members =
-  _, i = _, care = _, about = _ }`.
+  [Vulkan.Zero](src/Vulkan/Zero.hs). This is a class for initializing values
+  with all zero contents and empty arrays. It's very handy when initializing
+  structs to use something like `zero { only = _, members = _, i = _, care = _,
+  about = _ }`.
 
 - The library is compiled with `-XStrict` so expect all record members to be
-  strict and unboxed.
+  strict (and unboxed when they're small)
 
 - Calls to Vulkan are marked as `unsafe` by default. This can be turned off by
   setting the `safe-foreign-calls` flag. This is to reduce FFI overhead,
@@ -47,24 +67,18 @@
   code. See the [Haskell
   wiki](https://wiki.haskell.org/Foreign_Function_Interface#Unsafe_calls) for
   more information. This is important to consider if you want to write
-  allocation or debug callbacks in Haskell.
-
-- Vulkan structures are represented as Haskell records, may incur a copy
-  when passing them to and from C (if GHC can't optimise this away), if you
-  need an api where Vulkan structures can be handled without copying please
-  check out the [vulkan-api](https://github.com/achirkin/vulkan#readme)
-  package.
+  allocation or debug callbacks in Haskell. It's also important to be aware
+  that the garbage collector will not run during these calls.
 
 - As encouraged by the Vulkan user guide, commands are linked dynamically (with
   the sole exception of `vkGetInstanceProcAddr`).
   - The function pointers are attached to any dispatchable handle to save you
     the trouble of passing them around.
-  - The function pointers are
-    retrieved by calling `vkGetInstanceProcAddr` and `vkGetDeviceProcAddr`. These
-    are stored in two records `InstanceCmds` and `DeviceCmds` which store
-    instance level and device level commands respectively. These tables can be
-    initialized with the `initInstanceCmds` and `initDeviceCmds` found in
-    [Graphics.Vulkan.Dynamic](src/Graphics/Vulkan/Dynamic.hs).
+  - The function pointers are retrieved by calling `vkGetInstanceProcAddr` and
+    `vkGetDeviceProcAddr`.  These are stored in two records `InstanceCmds` and
+    `DeviceCmds` which store instance level and device level commands
+    respectively. These tables can be initialized with the `initInstanceCmds`
+    and `initDeviceCmds` found in [Vulkan.Dynamic](src/Vulkan/Dynamic.hs).
 
 - There are nice `Read` and `Show` instances for the enums and bitmasks. These
   will, where possible, print and parse the pattern synonyms. For example one
@@ -93,8 +107,7 @@
 ## How the C types relate to Haskell types
 
 These bindings take advantage of the meta information present in the
-specification detailing the validity of structures and arguments. A few
-examples:
+specification detailing the validity of structures and arguments.
 
 - If a structure or set of command parameters in the specification contains a
   pointer to an array and an associated length, this is replaced with a
@@ -109,7 +122,7 @@
 - If a struct has a member which can only have one possible value (the most
   common example is the `sType` member, then this member is elided.
 
-- C string become `ByteString`. This is also the case for fixed length C
+- C strings become `ByteString`. This is also the case for fixed length C
   strings, the library will truncate overly long strings in this case.
 
 - Pointers to `void` accompanied by a length in bytes become `ByteString`
@@ -139,17 +152,66 @@
 
 There are certain sets commands which must be called in pairs, for instance the
 `create` and `destroy` commands for using resources. In order to facilitate
-safe use of these commands, i.e. ensure that the corresponding `destroy`
-command is always called, these bindings expose `with` commands, which use
-`bracket` to. These pairs of commands aren't explicit in the specification, so
-a list of them is maintained in the generation code, if you see something
-missing please open an issue (these pairs are generated in `Bracket.hs`). An
-example is `withInstance` which calls `createInstance` and `destroyInstance`.
+safe use of these commands, (i.e. ensure that the corresponding `destroy`
+command is always called) these bindings expose similarly named commands
+prefixed with `with` (for `Create`/`Destroy` and `Allocate`/`Free` pairs) or
+`use` for (`Begin`/`End` pairs). If the command is used in command buffer
+building then it is additionally prefixed with `cmd`.
 
-At the moment only continuation passing style functions are implemented; it
-shouldn't be too hard to implement these functions using `ResourceT` or
-whatever other resource handling Monad though.
+These are higher order functions which take as their first argument a consumer
+for a pair of `create` and `destroy` commands.  Values which fit this hole
+include `Control.Exception.bracket`, `Control.Monad.Trans.Resource.allocate`
+and `(,)`.
 
+An example is `withInstance` which calls `createInstance` and
+`destroyInstance`. Notice how the `AllocationCallbacks` parameter is
+automatically passed to the `createInstance` and `destroyInstance` command.
+
+```haskell
+createInstance
+  :: forall a m
+   . (PokeChain a, MonadIO m)
+  => InstanceCreateInfo a
+  -> Maybe AllocationCallbacks
+  -> m Instance
+
+destroyInstance
+  :: forall m
+   . MonadIO m
+  => Instance
+  -> Maybe AllocationCallbacks
+  -> m ()
+
+withInstance
+  :: forall a m r
+   . (PokeChain a, MonadIO m)
+  => (m Instance -> (Instance -> m ()) -> r)
+  -> InstanceCreateInfo a
+  -> Maybe AllocationCallbacks
+  -> r
+```
+
+Example usage:
+
+```haskell
+import Control.Monad.Trans.Resource (runResourceT, allocate)
+-- Create an instance and print its value
+main = runResourceT $ do
+  (instanceReleaseKey, inst) <- withInstance allocate zero Nothing
+  liftIO $ print inst
+
+-- Begin a render pass, draw something and end the render pass
+drawTriangle =
+  cmdUseRenderPass buffer renderPassBeginInfo SUBPASS_CONTENTS_INLINE bracket_
+    $ do
+        cmdBindPipeline buffer PIPELINE_BIND_POINT_GRAPHICS graphicsPipeline
+        cmdDraw buffer 3 1 0 0
+```
+
+These pairs of commands aren't explicit in the specification, so
+a list of them is maintained in the generation code, if you see something
+missing please open an issue (these pairs are generated in `VK/Bracket.hs`).
+
 ### Dual use commands
 
 Certain commands, such as `vkEnumerateDeviceLayerProperties` or
@@ -196,17 +258,14 @@
 For instructions on how to regenerate the bindings see [the readme in
 ./generate-new](./generate-new/readme.md).
 
-Set the `build-examples` flag on the `vulkan` package to build the example
-programs. You'll need to supply the following system packages:
+To build the example programs. You'll need to supply the following system
+packages:
 
 - `vulkan-loader` (for `libvulkan.so`)
 - `vulkan-headers` (for `vulkan.h`)
-- `pkg-config` and `SDL2` to build the haskell `sdl2` package.
+- `pkg-config` and `SDL2` to build the Haskell `sdl2` package.
 - `glslang` (for the `glslangValidator` binary, to build the shaders)
 
-- For the sdl example you'll need to use the patched `sdl2` package until this
-  PR makes its way to Hackage: https://github.com/haskell-game/sdl2/pull/209
-
 ## Examples
 
 There exists a package to build some example programs in the `examples`
@@ -218,3 +277,33 @@
 extensions.
 
 This is currently a 64 bit only library.
+
+## See also
+
+The [VulkanMemoryAllocator
+package](https://hackage.haskell.org/package/VulkanMemoryAllocator-0.1.0.0)
+(source in the [VulkanMemoryAllocator directory](./VulkanMemoryAllocator)) has
+similarly styled bindings to the [Vulkan Memory
+Allocator](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)
+library.
+
+The [vulkan-utils](./utils) package (not currently on Hackage) includes a few
+utilities for writing programs using these bindings.
+
+For an alternative take on Haskell bindings to Vulkan see the
+[vulkan-api](https://github.com/achirkin/vulkan#readme) package. `vulkan-api`
+stores Vulkan structs in their C representation as `ByteArray#` whereas this
+library allocates structs on the stack and keeps them alive for just the
+lifetime of any Vulkan command call.
+
+--------
+
+<a name="fun-ptr">1</a>: Note that you'll still have to request any required
+  extensions for the function pointers belonging to that extension to be
+  populated. An exception will be thrown if you try to call a function pointer
+  which is null.
+
+<a name="opt-vec">2</a>: The exception is where the spec allows the application
+  to pass `NULL` for the vector with a non-zero count. In these cases it was
+  deemed clearer to preserve the "count" member and allow the Haskell
+  application to pass a zero-length vector to indicate `NULL`.
diff --git a/src/Graphics/Vulkan.hs b/src/Graphics/Vulkan.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan.hs
+++ /dev/null
@@ -1,19 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan  ( module Graphics.Vulkan.CStruct
-                        , module Graphics.Vulkan.Core10
-                        , module Graphics.Vulkan.Core11
-                        , module Graphics.Vulkan.Core12
-                        , module Graphics.Vulkan.Extensions
-                        , module Graphics.Vulkan.NamedType
-                        , module Graphics.Vulkan.Version
-                        , module Graphics.Vulkan.Zero
-                        ) where
-import Graphics.Vulkan.CStruct
-import Graphics.Vulkan.Core10
-import Graphics.Vulkan.Core11
-import Graphics.Vulkan.Core12
-import Graphics.Vulkan.Extensions
-import Graphics.Vulkan.NamedType
-import Graphics.Vulkan.Version
-import Graphics.Vulkan.Zero
-
diff --git a/src/Graphics/Vulkan/CStruct.hs b/src/Graphics/Vulkan/CStruct.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/CStruct.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.CStruct  ( ToCStruct(..)
-                                , FromCStruct(..)
-                                ) where
-
-import Control.Exception.Base (bracket)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Ptr (Ptr)
-
--- | A class for types which can be marshalled into a C style
--- structure.
-class ToCStruct a where
-  -- | Allocates a C type structure and all dependencies and passes
-  -- it to a continuation. The space is deallocated when this
-  -- continuation returns and the C type structure must not be
-  -- returned out of it.
-  withCStruct :: a -> (Ptr a -> IO b) -> IO b
-  withCStruct x f = allocaBytesAligned (cStructSize @a) (cStructAlignment @a)
-    $ \p -> pokeCStruct p x (f p)
-
-  -- | Write a C type struct into some existing memory and run a
-  -- continuation. The pointed to structure is not necessarily valid
-  -- outside the continuation as additional allocations may have been
-  -- made.
-  pokeCStruct :: Ptr a -> a -> IO b -> IO b
-
-  -- | Allocate space for an "empty" @a@ and populate any univalued
-  -- members with their value.
-  withZeroCStruct :: (Ptr a -> IO b) -> IO b
-  withZeroCStruct f =
-    bracket (callocBytes @a (cStructSize @a)) free $ \p -> pokeZeroCStruct p (f p)
-
-  -- | And populate any univalued members with their value, run a
-  -- function and then clean up any allocated resources.
-  pokeZeroCStruct :: Ptr a -> IO b -> IO b
-
-  -- | The size of this struct, note that this doesn't account for any
-  -- extra pointed-to data
-  cStructSize :: Int
-
-  -- | The required memory alignment for this type
-  cStructAlignment :: Int
-
-
--- | A class for types which can be marshalled from a C style
--- structure.
-class FromCStruct a where
-  -- | Read an @a@ and any other pointed to data from memory
-  peekCStruct :: Ptr a -> IO a
-
diff --git a/src/Graphics/Vulkan/CStruct/Extends.hs b/src/Graphics/Vulkan/CStruct/Extends.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/CStruct/Extends.hs
+++ /dev/null
@@ -1,1407 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.CStruct.Extends  ( BaseOutStructure(..)
-                                        , BaseInStructure(..)
-                                        , Extends
-                                        , PeekChain(..)
-                                        , PokeChain(..)
-                                        , Chain
-                                        , Extendss
-                                        , SomeStruct(..)
-                                        , withSomeCStruct
-                                        , peekSomeCStruct
-                                        , pokeSomeCStruct
-                                        , forgetExtensions
-                                        , Extensible(..)
-                                        , pattern (::&)
-                                        , pattern (:&)
-                                        ) where
-
-import Data.Maybe (fromMaybe)
-import Type.Reflection (typeRep)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Base (join)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Proxy (Proxy(Proxy))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (Ptr)
-import GHC.TypeLits (ErrorMessage(..))
-import GHC.TypeLits (TypeError)
-import Data.Kind (Constraint)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AabbPositionsKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureBuildGeometryInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureBuildOffsetInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureCreateGeometryTypeInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureDeviceAddressInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureGeometryAabbsDataKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureGeometryInstancesDataKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureGeometryKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureGeometryTrianglesDataKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureInstanceKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureMemoryRequirementsInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureVersionKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (AcquireNextImageInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (AcquireProfilingLockInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (AndroidHardwareBufferFormatPropertiesANDROID)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (AndroidHardwareBufferPropertiesANDROID)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (AndroidHardwareBufferUsageANDROID)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_android_surface (AndroidSurfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (ApplicationInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pass (AttachmentDescription)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentDescription2)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentDescriptionStencilLayout)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pass (AttachmentReference)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentReference2)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentReferenceStencilLayout)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (AttachmentSampleLocationsEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BindAccelerationStructureMemoryInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindBufferMemoryDeviceGroupInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindBufferMemoryInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindImageMemoryDeviceGroupInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindImageMemoryInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (BindImageMemorySwapchainInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (BindImagePlaneMemoryInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (BindIndexBufferIndirectCommandNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (BindShaderGroupIndirectCommandNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (BindSparseInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (BindVertexBufferIndirectCommandNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (BufferCopy)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Buffer (BufferCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address (BufferDeviceAddressCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferDeviceAddressInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (BufferImageCopy)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.OtherTypes (BufferMemoryBarrier)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (BufferMemoryRequirementsInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferOpaqueCaptureAddressCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.BufferView (BufferViewCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps (CalibratedTimestampInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints (CheckpointDataNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (ClearAttachment)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (ClearDepthStencilValue)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (ClearRect)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (CoarseSampleLocationNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (CoarseSampleOrderCustomNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBuffer (CommandBufferAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBuffer (CommandBufferBeginInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering (CommandBufferInheritanceConditionalRenderingInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBuffer (CommandBufferInheritanceInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform (CommandBufferInheritanceRenderPassTransformInfoQCOM)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandPool (CommandPoolCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.ImageView (ComponentMapping)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (ComputePipelineCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering (ConditionalRenderingBeginInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (ConformanceVersion)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix (CooperativeMatrixPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureToMemoryInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (CopyDescriptorSet)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyMemoryToAccelerationStructureInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32 (D3D12FenceSubmitInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerMarkerInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerObjectNameInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerObjectTagInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportCallbackCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsLabelEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessengerCallbackDataEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessengerCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsObjectNameInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsObjectTagInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationBufferCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationImageCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationMemoryAllocateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations (DeferredOperationInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (DescriptorBufferInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (DescriptorImageInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (DescriptorPoolCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block (DescriptorPoolInlineUniformBlockCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (DescriptorPoolSize)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (DescriptorSetAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (DescriptorSetLayoutBinding)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetLayoutBindingFlagsCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (DescriptorSetLayoutCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (DescriptorSetLayoutSupport)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountLayoutSupport)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateEntry)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Device (DeviceCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config (DeviceDiagnosticsConfigCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_control (DeviceEventInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupBindSparseInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupCommandBufferBeginInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (DeviceGroupDeviceCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentCapabilitiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupRenderPassBeginInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupSubmitInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupSwapchainCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (DeviceMemoryOpaqueCaptureAddressInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_memory_overallocation_behavior (DeviceMemoryOverallocationCreateInfoAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Device (DeviceQueueCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_global_priority (DeviceQueueGlobalPriorityCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (DeviceQueueInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.OtherTypes (DispatchIndirectCommand)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_control (DisplayEventInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayModeCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayModeParametersKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayModeProperties2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayModePropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr (DisplayNativeHdrSurfaceCapabilitiesAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneCapabilities2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPlaneCapabilitiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneInfo2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneProperties2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPlanePropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_control (DisplayPowerInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display_swapchain (DisplayPresentInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayProperties2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplaySurfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.OtherTypes (DrawIndexedIndirectCommand)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.OtherTypes (DrawIndirectCommand)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_mesh_shader (DrawMeshTasksIndirectCommandNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (DrmFormatModifierPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (DrmFormatModifierPropertiesListEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Event (EventCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence (ExportFenceCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32 (ExportFenceWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExportMemoryAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory (ExportMemoryAllocateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32 (ExportMemoryWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory_win32 (ExportMemoryWin32HandleInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore (ExportSemaphoreCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32 (ExportSemaphoreWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.ExtensionDiscovery (ExtensionProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (Extent3D)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalBufferProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (ExternalFenceProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (ExternalFormatANDROID)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalImageFormatProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalImageFormatPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryBufferCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryImageCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory (ExternalMemoryImageCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalMemoryProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (ExternalSemaphoreProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Fence (FenceCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd (FenceGetFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32 (FenceGetWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_filter_cubic (FilterCubicImageViewImageFormatPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (FormatProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (FormatProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (FramebufferAttachmentImageInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (FramebufferAttachmentsCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pass (FramebufferCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode (FramebufferMixedSamplesCombinationNV)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (GeneratedCommandsInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (GeneratedCommandsMemoryRequirementsInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (GeometryAABBNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (GeometryDataNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (GeometryNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (GeometryTrianglesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (GraphicsPipelineCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsPipelineShaderGroupsCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsShaderGroupCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata (HdrMetadataEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_headless_surface (HeadlessSurfaceCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_MVK_ios_surface (IOSSurfaceCreateInfoMVK)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (ImageBlit)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (ImageCopy)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Image (ImageCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierExplicitCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierListCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list (ImageFormatListCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (ImageFormatProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (ImageFormatProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.OtherTypes (ImageMemoryBarrier)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageMemoryRequirementsInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface (ImagePipeSurfaceCreateInfoFUCHSIA)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (ImagePlaneMemoryRequirementsInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (ImageResolve)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageSparseMemoryRequirementsInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage (ImageStencilUsageCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Image (ImageSubresource)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (ImageSubresourceLayers)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (ImageSubresourceRange)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (ImageSwapchainCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode (ImageViewASTCDecodeModeEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NVX_image_view_handle (ImageViewAddressPropertiesNVX)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.ImageView (ImageViewCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NVX_image_view_handle (ImageViewHandleInfoNVX)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (ImageViewUsageCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (ImportAndroidHardwareBufferInfoANDROID)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd (ImportFenceFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32 (ImportFenceWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd (ImportMemoryFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_external_memory_host (ImportMemoryHostPointerInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32 (ImportMemoryWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory_win32 (ImportMemoryWin32HandleInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd (ImportSemaphoreFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32 (ImportSemaphoreWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (IndirectCommandsLayoutCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (IndirectCommandsLayoutTokenNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (IndirectCommandsStreamNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (InitializePerformanceApiInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (InputAttachmentAspectReference)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (InstanceCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.LayerDiscovery (LayerProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_MVK_macos_surface (MacOSSurfaceCreateInfoMVK)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Memory (MappedMemoryRange)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (MemoryAllocateFlagsInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Memory (MemoryAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.OtherTypes (MemoryBarrier)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedRequirements)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryFdPropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (MemoryGetAndroidHardwareBufferInfoANDROID)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryGetFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryGetWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (MemoryHeap)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_external_memory_host (MemoryHostPointerPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (MemoryOpaqueCaptureAddressAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_memory_priority (MemoryPriorityAllocateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.MemoryManagement (MemoryRequirements)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (MemoryType)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryWin32HandlePropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_metal_surface (MetalSurfaceCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (MultisamplePropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (Offset2D)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (Offset3D)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing (PastPresentationTimingGOOGLE)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceConfigurationAcquireInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PerformanceCounterDescriptionKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PerformanceCounterKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceMarkerInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceOverrideInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PerformanceQuerySubmitInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceStreamMarkerInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceValueINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage (PhysicalDevice16BitStorageFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage (PhysicalDevice8BitStorageFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode (PhysicalDeviceASTCDecodeFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory (PhysicalDeviceCoherentMemoryFeaturesAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives (PhysicalDeviceComputeShaderDerivativesFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering (PhysicalDeviceConditionalRenderingFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization (PhysicalDeviceConservativeRasterizationPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image (PhysicalDeviceCornerSampledImageFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode (PhysicalDeviceCoverageReductionModeFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing (PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable (PhysicalDeviceDepthClipEnableFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (PhysicalDeviceDepthStencilResolveProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles (PhysicalDeviceDiscardRectanglePropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalBufferInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (PhysicalDeviceExternalFenceInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalImageFormatInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_external_memory_host (PhysicalDeviceExternalMemoryHostPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (PhysicalDeviceExternalSemaphoreInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls (PhysicalDeviceFloatControlsProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric (PhysicalDeviceFragmentShaderBarycentricFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock (PhysicalDeviceFragmentShaderInterlockFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (PhysicalDeviceGroupProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceIDProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (PhysicalDeviceImageDrmFormatModifierInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceImageFormatInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_filter_cubic (PhysicalDeviceImageViewImageFormatInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (PhysicalDeviceImagelessFramebufferFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8 (PhysicalDeviceIndexTypeUint8FeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceLimits)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (PhysicalDeviceMaintenance3Properties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_memory_budget (PhysicalDeviceMemoryBudgetPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMemoryPriorityFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceMemoryProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceMemoryProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes (PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_pci_bus_info (PhysicalDevicePCIBusInfoPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryPropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PhysicalDevicePointClippingProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_push_descriptor (PhysicalDevicePushDescriptorPropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingPropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (PhysicalDeviceRayTracingPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test (PhysicalDeviceRepresentativeFragmentTestFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2FeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2PropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (PhysicalDeviceSampleLocationsPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (PhysicalDeviceSamplerFilterMinmaxProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_shader_clock (PhysicalDeviceShaderClockFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties2 (PhysicalDeviceShaderCoreProperties2AMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties (PhysicalDeviceShaderCorePropertiesAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation (PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters (PhysicalDeviceShaderDrawParametersFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8 (PhysicalDeviceShaderFloat16Int8Features)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint (PhysicalDeviceShaderImageFootprintFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2 (PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types (PhysicalDeviceShaderSubgroupExtendedTypesFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImageFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImagePropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceSparseImageFormatInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceSparseProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup (PhysicalDeviceSubgroupProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (PhysicalDeviceSurfaceInfo2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr (PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_tooling_info (PhysicalDeviceToolPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout (PhysicalDeviceUniformBufferStandardLayoutFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers (PhysicalDeviceVariablePointersFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PhysicalDeviceVertexAttributeDivisorFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PhysicalDeviceVertexAttributeDivisorPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12 (PhysicalDeviceVulkan11Features)
-import {-# SOURCE #-} Graphics.Vulkan.Core12 (PhysicalDeviceVulkan11Properties)
-import {-# SOURCE #-} Graphics.Vulkan.Core12 (PhysicalDeviceVulkan12Features)
-import {-# SOURCE #-} Graphics.Vulkan.Core12 (PhysicalDeviceVulkan12Properties)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.PipelineCache (PipelineCacheCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced (PipelineColorBlendAdvancedStateCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineColorBlendAttachmentState)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineColorBlendStateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_pipeline_compiler_control (PipelineCompilerControlCreateInfoAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples (PipelineCoverageModulationStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode (PipelineCoverageReductionStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color (PipelineCoverageToColorStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineDepthStencilStateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles (PipelineDiscardRectangleStateCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineDynamicStateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableInternalRepresentationKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutablePropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableStatisticKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineInputAssemblyStateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.PipelineLayout (PipelineLayoutCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineMultisampleStateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization (PipelineRasterizationConservativeStateCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable (PipelineRasterizationDepthClipStateCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_line_rasterization (PipelineRasterizationLineStateCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineRasterizationStateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_rasterization_order (PipelineRasterizationStateRasterizationOrderAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_transform_feedback (PipelineRasterizationStateStreamCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test (PipelineRepresentativeFragmentTestStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (PipelineSampleLocationsStateCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control (PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PipelineTessellationDomainOriginStateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineTessellationStateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PipelineVertexInputDivisorStateCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineVertexInputStateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportCoarseSampleOrderStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive (PipelineViewportExclusiveScissorStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportShadingRateImageStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (PipelineViewportStateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle (PipelineViewportSwizzleStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling (PipelineViewportWScalingStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GGP_frame_token (PresentFrameTokenGGP)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (PresentInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_incremental_present (PresentRegionKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_incremental_present (PresentRegionsKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing (PresentTimeGOOGLE)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing (PresentTimesInfoGOOGLE)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (ProtectedSubmitInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.PipelineLayout (PushConstantRange)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Query (QueryPoolCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (QueryPoolPerformanceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (QueryPoolPerformanceQueryCreateInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints (QueueFamilyCheckpointPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (QueueFamilyProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (QueueFamilyProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingPipelineCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (RayTracingPipelineCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingPipelineInterfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (RayTracingShaderGroupCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (Rect2D)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_incremental_present (RectLayerKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing (RefreshCycleDurationGOOGLE)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (RenderPassAttachmentBeginInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pass (RenderPassCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (RenderPassCreateInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map (RenderPassFragmentDensityMapCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (RenderPassInputAttachmentAspectCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview (RenderPassMultiviewCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (RenderPassSampleLocationsBeginInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform (RenderPassTransformBeginInfoQCOM)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Sampler (SamplerCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (SamplerReductionModeCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionImageFormatProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.QueueSemaphore (SemaphoreCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd (SemaphoreGetFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32 (SemaphoreGetWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreSignalInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreTypeCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreWaitInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (SetStateFlagsIndirectCommandNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Shader (ShaderModuleCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_validation_cache (ShaderModuleValidationCacheCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_shader_info (ShaderResourceUsageAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_shader_info (ShaderStatisticsInfoAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (ShadingRatePaletteNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (SharedPresentSurfaceCapabilitiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseBufferMemoryBindInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseImageFormatProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (SparseImageFormatProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseImageMemoryBind)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseImageMemoryBindInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseImageMemoryRequirements)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (SparseImageMemoryRequirements2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseImageOpaqueMemoryBindInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseMemoryBind)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (SpecializationInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (SpecializationMapEntry)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (StencilOpState)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface (StreamDescriptorSurfaceCreateInfoGGP)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (StridedBufferRegionKHR)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Queue (SubmitInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassBeginInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pass (SubpassDependency)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassDependency2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pass (SubpassDescription)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassDescription2)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (SubpassDescriptionDepthStencilResolve)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassEndInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (SubpassSampleLocationsEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Image (SubresourceLayout)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCapabilities2EXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (SurfaceCapabilities2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceCapabilitiesFullScreenExclusiveEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_surface (SurfaceCapabilitiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (SurfaceFormat2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_surface (SurfaceFormatKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveWin32InfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities (SurfaceProtectedCapabilitiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_control (SwapchainCounterCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr (SwapchainDisplayNativeHdrCreateInfoAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod (TextureLODGatherFormatPropertiesAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (TimelineSemaphoreSubmitInfo)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (TraceRaysIndirectCommandKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (TransformMatrixKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_validation_cache (ValidationCacheCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_validation_features (ValidationFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_validation_flags (ValidationFlagsEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (VertexInputAttributeDescription)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (VertexInputBindingDescription)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (VertexInputBindingDivisorDescriptionEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NN_vi_surface (ViSurfaceCreateInfoNN)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (Viewport)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle (ViewportSwizzleNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling (ViewportWScalingNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_wayland_surface (WaylandSurfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex (Win32KeyedMutexAcquireReleaseInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex (Win32KeyedMutexAcquireReleaseInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_win32_surface (Win32SurfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (WriteDescriptorSet)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (WriteDescriptorSetAccelerationStructureKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block (WriteDescriptorSetInlineUniformBlockEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata (XYColorEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_xcb_surface (XcbSurfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_xlib_surface (XlibSurfaceCreateInfoKHR)
-import Graphics.Vulkan.Zero (Zero(..))
--- | VkBaseOutStructure - Base structure for a read-only pointer chain
---
--- = Description
---
--- 'BaseOutStructure' can be used to facilitate iterating through a
--- structure pointer chain that returns data back to the application.
---
--- = See Also
---
--- 'BaseOutStructure',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data BaseOutStructure = BaseOutStructure
-  { -- | @sType@ is the structure type of the structure being iterated through.
-    sType :: StructureType
-  , -- | @pNext@ is @NULL@ or a pointer to the next structure in a structure
-    -- chain.
-    next :: Ptr BaseOutStructure
-  }
-  deriving (Typeable)
-deriving instance Show BaseOutStructure
-
-instance ToCStruct BaseOutStructure where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BaseOutStructure{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (sType)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr BaseOutStructure))) (next)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr BaseOutStructure))) (zero)
-    f
-
-instance FromCStruct BaseOutStructure where
-  peekCStruct p = do
-    sType <- peek @StructureType ((p `plusPtr` 0 :: Ptr StructureType))
-    pNext <- peek @(Ptr BaseOutStructure) ((p `plusPtr` 8 :: Ptr (Ptr BaseOutStructure)))
-    pure $ BaseOutStructure
-             sType pNext
-
-instance Storable BaseOutStructure where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BaseOutStructure where
-  zero = BaseOutStructure
-           zero
-           zero
-
-
--- | VkBaseInStructure - Base structure for a read-only pointer chain
---
--- = Description
---
--- 'BaseInStructure' can be used to facilitate iterating through a
--- read-only structure pointer chain.
---
--- = See Also
---
--- 'BaseInStructure',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data BaseInStructure = BaseInStructure
-  { -- | @sType@ is the structure type of the structure being iterated through.
-    sType :: StructureType
-  , -- | @pNext@ is @NULL@ or a pointer to the next structure in a structure
-    -- chain.
-    next :: Ptr BaseInStructure
-  }
-  deriving (Typeable)
-deriving instance Show BaseInStructure
-
-instance ToCStruct BaseInStructure where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BaseInStructure{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (sType)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr BaseInStructure))) (next)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr BaseInStructure))) (zero)
-    f
-
-instance FromCStruct BaseInStructure where
-  peekCStruct p = do
-    sType <- peek @StructureType ((p `plusPtr` 0 :: Ptr StructureType))
-    pNext <- peek @(Ptr BaseInStructure) ((p `plusPtr` 8 :: Ptr (Ptr BaseInStructure)))
-    pure $ BaseInStructure
-             sType pNext
-
-instance Storable BaseInStructure where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BaseInStructure where
-  zero = BaseInStructure
-           zero
-           zero
-
-
-type family Extends (a :: [Type] -> Type) (b :: Type) :: Constraint where
-  Extends AccelerationStructureBuildGeometryInfoKHR DeferredOperationInfoKHR = ()
-  Extends AndroidHardwareBufferPropertiesANDROID AndroidHardwareBufferFormatPropertiesANDROID = ()
-  Extends AttachmentDescription2 AttachmentDescriptionStencilLayout = ()
-  Extends AttachmentReference2 AttachmentReferenceStencilLayout = ()
-  Extends BindBufferMemoryInfo BindBufferMemoryDeviceGroupInfo = ()
-  Extends BindImageMemoryInfo BindImageMemoryDeviceGroupInfo = ()
-  Extends BindImageMemoryInfo BindImageMemorySwapchainInfoKHR = ()
-  Extends BindImageMemoryInfo BindImagePlaneMemoryInfo = ()
-  Extends BindSparseInfo DeviceGroupBindSparseInfo = ()
-  Extends BindSparseInfo TimelineSemaphoreSubmitInfo = ()
-  Extends BufferCreateInfo DedicatedAllocationBufferCreateInfoNV = ()
-  Extends BufferCreateInfo ExternalMemoryBufferCreateInfo = ()
-  Extends BufferCreateInfo BufferOpaqueCaptureAddressCreateInfo = ()
-  Extends BufferCreateInfo BufferDeviceAddressCreateInfoEXT = ()
-  Extends CommandBufferBeginInfo DeviceGroupCommandBufferBeginInfo = ()
-  Extends CommandBufferInheritanceInfo CommandBufferInheritanceConditionalRenderingInfoEXT = ()
-  Extends CommandBufferInheritanceInfo CommandBufferInheritanceRenderPassTransformInfoQCOM = ()
-  Extends ComputePipelineCreateInfo PipelineCreationFeedbackCreateInfoEXT = ()
-  Extends ComputePipelineCreateInfo PipelineCompilerControlCreateInfoAMD = ()
-  Extends CopyAccelerationStructureInfoKHR DeferredOperationInfoKHR = ()
-  Extends CopyAccelerationStructureToMemoryInfoKHR DeferredOperationInfoKHR = ()
-  Extends CopyMemoryToAccelerationStructureInfoKHR DeferredOperationInfoKHR = ()
-  Extends DescriptorPoolCreateInfo DescriptorPoolInlineUniformBlockCreateInfoEXT = ()
-  Extends DescriptorSetAllocateInfo DescriptorSetVariableDescriptorCountAllocateInfo = ()
-  Extends DescriptorSetLayoutCreateInfo DescriptorSetLayoutBindingFlagsCreateInfo = ()
-  Extends DescriptorSetLayoutSupport DescriptorSetVariableDescriptorCountLayoutSupport = ()
-  Extends DeviceCreateInfo PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = ()
-  Extends DeviceCreateInfo (PhysicalDeviceFeatures2 '[]) = ()
-  Extends DeviceCreateInfo PhysicalDeviceVariablePointersFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceMultiviewFeatures = ()
-  Extends DeviceCreateInfo DeviceGroupDeviceCreateInfo = ()
-  Extends DeviceCreateInfo PhysicalDevice16BitStorageFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceShaderSubgroupExtendedTypesFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceSamplerYcbcrConversionFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceProtectedMemoryFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceBlendOperationAdvancedFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceInlineUniformBlockFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceShaderDrawParametersFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceShaderFloat16Int8Features = ()
-  Extends DeviceCreateInfo PhysicalDeviceHostQueryResetFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceDescriptorIndexingFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceTimelineSemaphoreFeatures = ()
-  Extends DeviceCreateInfo PhysicalDevice8BitStorageFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceConditionalRenderingFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceVulkanMemoryModelFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceShaderAtomicInt64Features = ()
-  Extends DeviceCreateInfo PhysicalDeviceVertexAttributeDivisorFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceASTCDecodeFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceTransformFeedbackFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceRepresentativeFragmentTestFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceExclusiveScissorFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceCornerSampledImageFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceComputeShaderDerivativesFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceFragmentShaderBarycentricFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceShaderImageFootprintFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceShadingRateImageFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceMeshShaderFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceRayTracingFeaturesKHR = ()
-  Extends DeviceCreateInfo DeviceMemoryOverallocationCreateInfoAMD = ()
-  Extends DeviceCreateInfo PhysicalDeviceFragmentDensityMapFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceScalarBlockLayoutFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceUniformBufferStandardLayoutFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceDepthClipEnableFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceMemoryPriorityFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceBufferDeviceAddressFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceBufferDeviceAddressFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceImagelessFramebufferFeatures = ()
-  Extends DeviceCreateInfo PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceCooperativeMatrixFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceYcbcrImageArraysFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDevicePerformanceQueryFeaturesKHR = ()
-  Extends DeviceCreateInfo PhysicalDeviceCoverageReductionModeFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = ()
-  Extends DeviceCreateInfo PhysicalDeviceShaderClockFeaturesKHR = ()
-  Extends DeviceCreateInfo PhysicalDeviceIndexTypeUint8FeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceShaderSMBuiltinsFeaturesNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceFragmentShaderInterlockFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceSeparateDepthStencilLayoutsFeatures = ()
-  Extends DeviceCreateInfo PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = ()
-  Extends DeviceCreateInfo PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceTexelBufferAlignmentFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceSubgroupSizeControlFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceLineRasterizationFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDevicePipelineCreationCacheControlFeaturesEXT = ()
-  Extends DeviceCreateInfo PhysicalDeviceVulkan11Features = ()
-  Extends DeviceCreateInfo PhysicalDeviceVulkan12Features = ()
-  Extends DeviceCreateInfo PhysicalDeviceCoherentMemoryFeaturesAMD = ()
-  Extends DeviceCreateInfo PhysicalDeviceDiagnosticsConfigFeaturesNV = ()
-  Extends DeviceCreateInfo DeviceDiagnosticsConfigCreateInfoNV = ()
-  Extends DeviceCreateInfo PhysicalDeviceRobustness2FeaturesEXT = ()
-  Extends DeviceQueueCreateInfo DeviceQueueGlobalPriorityCreateInfoEXT = ()
-  Extends FenceCreateInfo ExportFenceCreateInfo = ()
-  Extends FenceCreateInfo ExportFenceWin32HandleInfoKHR = ()
-  Extends FormatProperties2 DrmFormatModifierPropertiesListEXT = ()
-  Extends FramebufferCreateInfo FramebufferAttachmentsCreateInfo = ()
-  Extends GraphicsPipelineCreateInfo GraphicsPipelineShaderGroupsCreateInfoNV = ()
-  Extends GraphicsPipelineCreateInfo PipelineDiscardRectangleStateCreateInfoEXT = ()
-  Extends GraphicsPipelineCreateInfo PipelineRepresentativeFragmentTestStateCreateInfoNV = ()
-  Extends GraphicsPipelineCreateInfo PipelineCreationFeedbackCreateInfoEXT = ()
-  Extends GraphicsPipelineCreateInfo PipelineCompilerControlCreateInfoAMD = ()
-  Extends ImageCreateInfo DedicatedAllocationImageCreateInfoNV = ()
-  Extends ImageCreateInfo ExternalMemoryImageCreateInfoNV = ()
-  Extends ImageCreateInfo ExternalMemoryImageCreateInfo = ()
-  Extends ImageCreateInfo ImageSwapchainCreateInfoKHR = ()
-  Extends ImageCreateInfo ImageFormatListCreateInfo = ()
-  Extends ImageCreateInfo ExternalFormatANDROID = ()
-  Extends ImageCreateInfo ImageDrmFormatModifierListCreateInfoEXT = ()
-  Extends ImageCreateInfo ImageDrmFormatModifierExplicitCreateInfoEXT = ()
-  Extends ImageCreateInfo ImageStencilUsageCreateInfo = ()
-  Extends ImageFormatProperties2 ExternalImageFormatProperties = ()
-  Extends ImageFormatProperties2 SamplerYcbcrConversionImageFormatProperties = ()
-  Extends ImageFormatProperties2 TextureLODGatherFormatPropertiesAMD = ()
-  Extends ImageFormatProperties2 AndroidHardwareBufferUsageANDROID = ()
-  Extends ImageFormatProperties2 FilterCubicImageViewImageFormatPropertiesEXT = ()
-  Extends ImageMemoryBarrier SampleLocationsInfoEXT = ()
-  Extends ImageMemoryRequirementsInfo2 ImagePlaneMemoryRequirementsInfo = ()
-  Extends ImageViewCreateInfo ImageViewUsageCreateInfo = ()
-  Extends ImageViewCreateInfo SamplerYcbcrConversionInfo = ()
-  Extends ImageViewCreateInfo ImageViewASTCDecodeModeEXT = ()
-  Extends InstanceCreateInfo DebugReportCallbackCreateInfoEXT = ()
-  Extends InstanceCreateInfo ValidationFlagsEXT = ()
-  Extends InstanceCreateInfo ValidationFeaturesEXT = ()
-  Extends InstanceCreateInfo DebugUtilsMessengerCreateInfoEXT = ()
-  Extends MemoryAllocateInfo DedicatedAllocationMemoryAllocateInfoNV = ()
-  Extends MemoryAllocateInfo ExportMemoryAllocateInfoNV = ()
-  Extends MemoryAllocateInfo ImportMemoryWin32HandleInfoNV = ()
-  Extends MemoryAllocateInfo ExportMemoryWin32HandleInfoNV = ()
-  Extends MemoryAllocateInfo ExportMemoryAllocateInfo = ()
-  Extends MemoryAllocateInfo ImportMemoryWin32HandleInfoKHR = ()
-  Extends MemoryAllocateInfo ExportMemoryWin32HandleInfoKHR = ()
-  Extends MemoryAllocateInfo ImportMemoryFdInfoKHR = ()
-  Extends MemoryAllocateInfo MemoryAllocateFlagsInfo = ()
-  Extends MemoryAllocateInfo MemoryDedicatedAllocateInfo = ()
-  Extends MemoryAllocateInfo ImportMemoryHostPointerInfoEXT = ()
-  Extends MemoryAllocateInfo ImportAndroidHardwareBufferInfoANDROID = ()
-  Extends MemoryAllocateInfo MemoryPriorityAllocateInfoEXT = ()
-  Extends MemoryAllocateInfo MemoryOpaqueCaptureAddressAllocateInfo = ()
-  Extends MemoryRequirements2 MemoryDedicatedRequirements = ()
-  Extends PhysicalDeviceExternalSemaphoreInfo SemaphoreTypeCreateInfo = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceVariablePointersFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceMultiviewFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDevice16BitStorageFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderSubgroupExtendedTypesFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceSamplerYcbcrConversionFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceProtectedMemoryFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceBlendOperationAdvancedFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceInlineUniformBlockFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderDrawParametersFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderFloat16Int8Features = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceHostQueryResetFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceDescriptorIndexingFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceTimelineSemaphoreFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDevice8BitStorageFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceConditionalRenderingFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceVulkanMemoryModelFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderAtomicInt64Features = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceVertexAttributeDivisorFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceASTCDecodeFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceTransformFeedbackFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceRepresentativeFragmentTestFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceExclusiveScissorFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceCornerSampledImageFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceComputeShaderDerivativesFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceFragmentShaderBarycentricFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderImageFootprintFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceShadingRateImageFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceMeshShaderFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceRayTracingFeaturesKHR = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceFragmentDensityMapFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceScalarBlockLayoutFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceUniformBufferStandardLayoutFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceDepthClipEnableFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceMemoryPriorityFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceBufferDeviceAddressFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceBufferDeviceAddressFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceImagelessFramebufferFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceCooperativeMatrixFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceYcbcrImageArraysFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDevicePerformanceQueryFeaturesKHR = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceCoverageReductionModeFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderClockFeaturesKHR = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceIndexTypeUint8FeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderSMBuiltinsFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceFragmentShaderInterlockFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceSeparateDepthStencilLayoutsFeatures = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceTexelBufferAlignmentFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceSubgroupSizeControlFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceLineRasterizationFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDevicePipelineCreationCacheControlFeaturesEXT = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceVulkan11Features = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceVulkan12Features = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceCoherentMemoryFeaturesAMD = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceDiagnosticsConfigFeaturesNV = ()
-  Extends PhysicalDeviceFeatures2 PhysicalDeviceRobustness2FeaturesEXT = ()
-  Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceExternalImageFormatInfo = ()
-  Extends PhysicalDeviceImageFormatInfo2 ImageFormatListCreateInfo = ()
-  Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceImageDrmFormatModifierInfoEXT = ()
-  Extends PhysicalDeviceImageFormatInfo2 ImageStencilUsageCreateInfo = ()
-  Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceImageViewImageFormatInfoEXT = ()
-  Extends PhysicalDeviceMemoryProperties2 PhysicalDeviceMemoryBudgetPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = ()
-  Extends PhysicalDeviceProperties2 PhysicalDevicePushDescriptorPropertiesKHR = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceDriverProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceIDProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceMultiviewProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceDiscardRectanglePropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceSubgroupProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDevicePointClippingProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceProtectedMemoryProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceSamplerFilterMinmaxProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceSampleLocationsPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceBlendOperationAdvancedPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceInlineUniformBlockPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceMaintenance3Properties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceFloatControlsProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceExternalMemoryHostPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceConservativeRasterizationPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceShaderCorePropertiesAMD = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceShaderCoreProperties2AMD = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceDescriptorIndexingProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceTimelineSemaphoreProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceVertexAttributeDivisorPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDevicePCIBusInfoPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceDepthStencilResolveProperties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceTransformFeedbackPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceShadingRateImagePropertiesNV = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceMeshShaderPropertiesNV = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceRayTracingPropertiesKHR = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceRayTracingPropertiesNV = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceFragmentDensityMapPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceCooperativeMatrixPropertiesNV = ()
-  Extends PhysicalDeviceProperties2 PhysicalDevicePerformanceQueryPropertiesKHR = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceShaderSMBuiltinsPropertiesNV = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceTexelBufferAlignmentPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceSubgroupSizeControlPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceLineRasterizationPropertiesEXT = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceVulkan11Properties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceVulkan12Properties = ()
-  Extends PhysicalDeviceProperties2 PhysicalDeviceRobustness2PropertiesEXT = ()
-  Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveInfoEXT = ()
-  Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveWin32InfoEXT = ()
-  Extends PipelineColorBlendStateCreateInfo PipelineColorBlendAdvancedStateCreateInfoEXT = ()
-  Extends PipelineMultisampleStateCreateInfo PipelineCoverageToColorStateCreateInfoNV = ()
-  Extends PipelineMultisampleStateCreateInfo PipelineSampleLocationsStateCreateInfoEXT = ()
-  Extends PipelineMultisampleStateCreateInfo PipelineCoverageModulationStateCreateInfoNV = ()
-  Extends PipelineMultisampleStateCreateInfo PipelineCoverageReductionStateCreateInfoNV = ()
-  Extends PipelineRasterizationStateCreateInfo PipelineRasterizationStateRasterizationOrderAMD = ()
-  Extends PipelineRasterizationStateCreateInfo PipelineRasterizationConservativeStateCreateInfoEXT = ()
-  Extends PipelineRasterizationStateCreateInfo PipelineRasterizationStateStreamCreateInfoEXT = ()
-  Extends PipelineRasterizationStateCreateInfo PipelineRasterizationDepthClipStateCreateInfoEXT = ()
-  Extends PipelineRasterizationStateCreateInfo PipelineRasterizationLineStateCreateInfoEXT = ()
-  Extends PipelineShaderStageCreateInfo PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = ()
-  Extends PipelineTessellationStateCreateInfo PipelineTessellationDomainOriginStateCreateInfo = ()
-  Extends PipelineVertexInputStateCreateInfo PipelineVertexInputDivisorStateCreateInfoEXT = ()
-  Extends PipelineViewportStateCreateInfo PipelineViewportWScalingStateCreateInfoNV = ()
-  Extends PipelineViewportStateCreateInfo PipelineViewportSwizzleStateCreateInfoNV = ()
-  Extends PipelineViewportStateCreateInfo PipelineViewportExclusiveScissorStateCreateInfoNV = ()
-  Extends PipelineViewportStateCreateInfo PipelineViewportShadingRateImageStateCreateInfoNV = ()
-  Extends PipelineViewportStateCreateInfo PipelineViewportCoarseSampleOrderStateCreateInfoNV = ()
-  Extends PresentInfoKHR DisplayPresentInfoKHR = ()
-  Extends PresentInfoKHR PresentRegionsKHR = ()
-  Extends PresentInfoKHR DeviceGroupPresentInfoKHR = ()
-  Extends PresentInfoKHR PresentTimesInfoGOOGLE = ()
-  Extends PresentInfoKHR PresentFrameTokenGGP = ()
-  Extends QueryPoolCreateInfo QueryPoolPerformanceCreateInfoKHR = ()
-  Extends QueryPoolCreateInfo QueryPoolPerformanceQueryCreateInfoINTEL = ()
-  Extends QueueFamilyProperties2 QueueFamilyCheckpointPropertiesNV = ()
-  Extends RayTracingPipelineCreateInfoKHR PipelineCreationFeedbackCreateInfoEXT = ()
-  Extends RayTracingPipelineCreateInfoKHR DeferredOperationInfoKHR = ()
-  Extends RayTracingPipelineCreateInfoNV PipelineCreationFeedbackCreateInfoEXT = ()
-  Extends RenderPassBeginInfo DeviceGroupRenderPassBeginInfo = ()
-  Extends RenderPassBeginInfo RenderPassSampleLocationsBeginInfoEXT = ()
-  Extends RenderPassBeginInfo RenderPassAttachmentBeginInfo = ()
-  Extends RenderPassBeginInfo RenderPassTransformBeginInfoQCOM = ()
-  Extends RenderPassCreateInfo RenderPassMultiviewCreateInfo = ()
-  Extends RenderPassCreateInfo RenderPassInputAttachmentAspectCreateInfo = ()
-  Extends RenderPassCreateInfo RenderPassFragmentDensityMapCreateInfoEXT = ()
-  Extends RenderPassCreateInfo2 RenderPassFragmentDensityMapCreateInfoEXT = ()
-  Extends SamplerCreateInfo SamplerYcbcrConversionInfo = ()
-  Extends SamplerCreateInfo SamplerReductionModeCreateInfo = ()
-  Extends SamplerYcbcrConversionCreateInfo ExternalFormatANDROID = ()
-  Extends SemaphoreCreateInfo ExportSemaphoreCreateInfo = ()
-  Extends SemaphoreCreateInfo ExportSemaphoreWin32HandleInfoKHR = ()
-  Extends SemaphoreCreateInfo SemaphoreTypeCreateInfo = ()
-  Extends ShaderModuleCreateInfo ShaderModuleValidationCacheCreateInfoEXT = ()
-  Extends SubmitInfo Win32KeyedMutexAcquireReleaseInfoNV = ()
-  Extends SubmitInfo Win32KeyedMutexAcquireReleaseInfoKHR = ()
-  Extends SubmitInfo D3D12FenceSubmitInfoKHR = ()
-  Extends SubmitInfo DeviceGroupSubmitInfo = ()
-  Extends SubmitInfo ProtectedSubmitInfo = ()
-  Extends SubmitInfo TimelineSemaphoreSubmitInfo = ()
-  Extends SubmitInfo PerformanceQuerySubmitInfoKHR = ()
-  Extends SubpassDescription2 SubpassDescriptionDepthStencilResolve = ()
-  Extends SurfaceCapabilities2KHR DisplayNativeHdrSurfaceCapabilitiesAMD = ()
-  Extends SurfaceCapabilities2KHR SharedPresentSurfaceCapabilitiesKHR = ()
-  Extends SurfaceCapabilities2KHR SurfaceProtectedCapabilitiesKHR = ()
-  Extends SurfaceCapabilities2KHR SurfaceCapabilitiesFullScreenExclusiveEXT = ()
-  Extends SwapchainCreateInfoKHR SwapchainCounterCreateInfoEXT = ()
-  Extends SwapchainCreateInfoKHR DeviceGroupSwapchainCreateInfoKHR = ()
-  Extends SwapchainCreateInfoKHR SwapchainDisplayNativeHdrCreateInfoAMD = ()
-  Extends SwapchainCreateInfoKHR ImageFormatListCreateInfo = ()
-  Extends SwapchainCreateInfoKHR SurfaceFullScreenExclusiveInfoEXT = ()
-  Extends SwapchainCreateInfoKHR SurfaceFullScreenExclusiveWin32InfoEXT = ()
-  Extends WriteDescriptorSet WriteDescriptorSetInlineUniformBlockEXT = ()
-  Extends WriteDescriptorSet WriteDescriptorSetAccelerationStructureKHR = ()
-  Extends a b = TypeError (ShowType a :<>: Text " is not extended by " :<>: ShowType b)
-
-data SomeStruct (a :: [Type] -> Type) where
-  SomeStruct
-    :: forall a es
-     . (Extendss a es, PokeChain es, Show (Chain es))
-    => a es
-    -> SomeStruct a
-
-deriving instance (forall es. Show (Chain es) => Show (a es)) => Show (SomeStruct a)
-
-instance Zero (a '[]) => Zero (SomeStruct a) where
-  zero = SomeStruct (zero :: a '[])
-
-forgetExtensions :: Ptr (a es) -> Ptr (SomeStruct a)
-forgetExtensions = castPtr
-
-withSomeCStruct
-  :: forall a b
-   . (forall es . PokeChain es => ToCStruct (a es))
-  => SomeStruct a
-  -> (forall es . (Extendss a es, PokeChain es) => Ptr (a es) -> IO b)
-  -> IO b
-withSomeCStruct (SomeStruct s) f = withCStruct s f
-
-pokeSomeCStruct
-  :: (forall es . PokeChain es => ToCStruct (a es))
-  => Ptr (SomeStruct a)
-  -> SomeStruct a
-  -> IO b
-  -> IO b
-pokeSomeCStruct p (SomeStruct s) = pokeCStruct (castPtr p) s
-
-peekSomeCStruct
-  :: forall a
-   . (Extensible a, forall es . (Extendss a es, PeekChain es) => FromCStruct (a es))
-  => Ptr (SomeStruct a)
-  -> IO (SomeStruct a)
-peekSomeCStruct p = do
-  head'  <- peekCStruct (castPtr @_ @(a '[]) p)
-  pNext <- peek @(Ptr BaseOutStructure) (p `plusPtr` 8)
-  peekSomeChain @a pNext $ \tail' -> SomeStruct (setNext head' tail')
-
-peekSomeChain
-  :: forall
-       a
-       b
-   . (Extensible a)
-  => Ptr BaseOutStructure
-  -> (  forall es
-      . (Extendss a es, PokeChain es, Show (Chain es))
-     => Chain es
-     -> b
-     )
-  -> IO b
-peekSomeChain p c = if p == nullPtr
-  then pure (c ())
-  else do
-    baseOut <- peek p
-    join
-      $ peekChainHead @a (sType (baseOut :: BaseOutStructure))
-                         (castPtr @BaseOutStructure @() p)
-      $ \head' -> peekSomeChain @a (next (baseOut :: BaseOutStructure))
-                                  (\tail' -> c (head', tail'))
-
-
-peekChainHead
-  :: forall a b
-   . Extensible a
-  => StructureType
-  -> Ptr ()
-  -> (forall e . (Extends a e, ToCStruct e, Show e) => e -> b)
-  -> IO b
-peekChainHead ty p c = case ty of
-  STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR -> go @DisplayPresentInfoKHR
-  STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT -> go @DebugReportCallbackCreateInfoEXT
-  STRUCTURE_TYPE_VALIDATION_FLAGS_EXT -> go @ValidationFlagsEXT
-  STRUCTURE_TYPE_VALIDATION_FEATURES_EXT -> go @ValidationFeaturesEXT
-  STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD -> go @PipelineRasterizationStateRasterizationOrderAMD
-  STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV -> go @DedicatedAllocationImageCreateInfoNV
-  STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV -> go @DedicatedAllocationBufferCreateInfoNV
-  STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV -> go @DedicatedAllocationMemoryAllocateInfoNV
-  STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV -> go @ExternalMemoryImageCreateInfoNV
-  STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV -> go @ExportMemoryAllocateInfoNV
-  STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV -> go @ImportMemoryWin32HandleInfoNV
-  STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV -> go @ExportMemoryWin32HandleInfoNV
-  STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV -> go @Win32KeyedMutexAcquireReleaseInfoNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV -> go @PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV -> go @PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-  STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV -> go @GraphicsPipelineShaderGroupsCreateInfoNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 -> go @(PhysicalDeviceFeatures2 '[])
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR -> go @PhysicalDevicePushDescriptorPropertiesKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES -> go @PhysicalDeviceDriverProperties
-  STRUCTURE_TYPE_PRESENT_REGIONS_KHR -> go @PresentRegionsKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES -> go @PhysicalDeviceVariablePointersFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO -> go @PhysicalDeviceExternalImageFormatInfo
-  STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES -> go @ExternalImageFormatProperties
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES -> go @PhysicalDeviceIDProperties
-  STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO -> go @ExternalMemoryImageCreateInfo
-  STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO -> go @ExternalMemoryBufferCreateInfo
-  STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO -> go @ExportMemoryAllocateInfo
-  STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR -> go @ImportMemoryWin32HandleInfoKHR
-  STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR -> go @ExportMemoryWin32HandleInfoKHR
-  STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR -> go @ImportMemoryFdInfoKHR
-  STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR -> go @Win32KeyedMutexAcquireReleaseInfoKHR
-  STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO -> go @ExportSemaphoreCreateInfo
-  STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR -> go @ExportSemaphoreWin32HandleInfoKHR
-  STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR -> go @D3D12FenceSubmitInfoKHR
-  STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO -> go @ExportFenceCreateInfo
-  STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR -> go @ExportFenceWin32HandleInfoKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES -> go @PhysicalDeviceMultiviewFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES -> go @PhysicalDeviceMultiviewProperties
-  STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO -> go @RenderPassMultiviewCreateInfo
-  STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT -> go @SwapchainCounterCreateInfoEXT
-  STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO -> go @MemoryAllocateFlagsInfo
-  STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO -> go @BindBufferMemoryDeviceGroupInfo
-  STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO -> go @BindImageMemoryDeviceGroupInfo
-  STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO -> go @DeviceGroupRenderPassBeginInfo
-  STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO -> go @DeviceGroupCommandBufferBeginInfo
-  STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO -> go @DeviceGroupSubmitInfo
-  STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO -> go @DeviceGroupBindSparseInfo
-  STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR -> go @ImageSwapchainCreateInfoKHR
-  STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR -> go @BindImageMemorySwapchainInfoKHR
-  STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR -> go @DeviceGroupPresentInfoKHR
-  STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO -> go @DeviceGroupDeviceCreateInfo
-  STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR -> go @DeviceGroupSwapchainCreateInfoKHR
-  STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD -> go @DisplayNativeHdrSurfaceCapabilitiesAMD
-  STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD -> go @SwapchainDisplayNativeHdrCreateInfoAMD
-  STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE -> go @PresentTimesInfoGOOGLE
-  STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV -> go @PipelineViewportWScalingStateCreateInfoNV
-  STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV -> go @PipelineViewportSwizzleStateCreateInfoNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT -> go @PhysicalDeviceDiscardRectanglePropertiesEXT
-  STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT -> go @PipelineDiscardRectangleStateCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX -> go @PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-  STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO -> go @RenderPassInputAttachmentAspectCreateInfo
-  STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR -> go @SharedPresentSurfaceCapabilitiesKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES -> go @PhysicalDevice16BitStorageFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES -> go @PhysicalDeviceSubgroupProperties
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES -> go @PhysicalDeviceShaderSubgroupExtendedTypesFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES -> go @PhysicalDevicePointClippingProperties
-  STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS -> go @MemoryDedicatedRequirements
-  STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO -> go @MemoryDedicatedAllocateInfo
-  STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO -> go @ImageViewUsageCreateInfo
-  STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO -> go @PipelineTessellationDomainOriginStateCreateInfo
-  STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO -> go @SamplerYcbcrConversionInfo
-  STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO -> go @BindImagePlaneMemoryInfo
-  STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO -> go @ImagePlaneMemoryRequirementsInfo
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES -> go @PhysicalDeviceSamplerYcbcrConversionFeatures
-  STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES -> go @SamplerYcbcrConversionImageFormatProperties
-  STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD -> go @TextureLODGatherFormatPropertiesAMD
-  STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO -> go @ProtectedSubmitInfo
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES -> go @PhysicalDeviceProtectedMemoryFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES -> go @PhysicalDeviceProtectedMemoryProperties
-  STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV -> go @PipelineCoverageToColorStateCreateInfoNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES -> go @PhysicalDeviceSamplerFilterMinmaxProperties
-  STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT -> go @SampleLocationsInfoEXT
-  STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT -> go @RenderPassSampleLocationsBeginInfoEXT
-  STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT -> go @PipelineSampleLocationsStateCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT -> go @PhysicalDeviceSampleLocationsPropertiesEXT
-  STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO -> go @SamplerReductionModeCreateInfo
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT -> go @PhysicalDeviceBlendOperationAdvancedFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT -> go @PhysicalDeviceBlendOperationAdvancedPropertiesEXT
-  STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT -> go @PipelineColorBlendAdvancedStateCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT -> go @PhysicalDeviceInlineUniformBlockFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT -> go @PhysicalDeviceInlineUniformBlockPropertiesEXT
-  STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT -> go @WriteDescriptorSetInlineUniformBlockEXT
-  STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT -> go @DescriptorPoolInlineUniformBlockCreateInfoEXT
-  STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV -> go @PipelineCoverageModulationStateCreateInfoNV
-  STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO -> go @ImageFormatListCreateInfo
-  STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT -> go @ShaderModuleValidationCacheCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES -> go @PhysicalDeviceMaintenance3Properties
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES -> go @PhysicalDeviceShaderDrawParametersFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES -> go @PhysicalDeviceShaderFloat16Int8Features
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES -> go @PhysicalDeviceFloatControlsProperties
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES -> go @PhysicalDeviceHostQueryResetFeatures
-  STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT -> go @DeviceQueueGlobalPriorityCreateInfoEXT
-  STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT -> go @DebugUtilsMessengerCreateInfoEXT
-  STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT -> go @ImportMemoryHostPointerInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT -> go @PhysicalDeviceExternalMemoryHostPropertiesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT -> go @PhysicalDeviceConservativeRasterizationPropertiesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD -> go @PhysicalDeviceShaderCorePropertiesAMD
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD -> go @PhysicalDeviceShaderCoreProperties2AMD
-  STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT -> go @PipelineRasterizationConservativeStateCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES -> go @PhysicalDeviceDescriptorIndexingFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES -> go @PhysicalDeviceDescriptorIndexingProperties
-  STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO -> go @DescriptorSetLayoutBindingFlagsCreateInfo
-  STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO -> go @DescriptorSetVariableDescriptorCountAllocateInfo
-  STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT -> go @DescriptorSetVariableDescriptorCountLayoutSupport
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES -> go @PhysicalDeviceTimelineSemaphoreFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES -> go @PhysicalDeviceTimelineSemaphoreProperties
-  STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO -> go @SemaphoreTypeCreateInfo
-  STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO -> go @TimelineSemaphoreSubmitInfo
-  STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT -> go @PipelineVertexInputDivisorStateCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT -> go @PhysicalDeviceVertexAttributeDivisorPropertiesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT -> go @PhysicalDevicePCIBusInfoPropertiesEXT
-  STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID -> go @ImportAndroidHardwareBufferInfoANDROID
-  STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID -> go @AndroidHardwareBufferUsageANDROID
-  STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID -> go @AndroidHardwareBufferFormatPropertiesANDROID
-  STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT -> go @CommandBufferInheritanceConditionalRenderingInfoEXT
-  STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID -> go @ExternalFormatANDROID
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES -> go @PhysicalDevice8BitStorageFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT -> go @PhysicalDeviceConditionalRenderingFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES -> go @PhysicalDeviceVulkanMemoryModelFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES -> go @PhysicalDeviceShaderAtomicInt64Features
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT -> go @PhysicalDeviceVertexAttributeDivisorFeaturesEXT
-  STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV -> go @QueueFamilyCheckpointPropertiesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES -> go @PhysicalDeviceDepthStencilResolveProperties
-  STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE -> go @SubpassDescriptionDepthStencilResolve
-  STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT -> go @ImageViewASTCDecodeModeEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT -> go @PhysicalDeviceASTCDecodeFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT -> go @PhysicalDeviceTransformFeedbackFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT -> go @PhysicalDeviceTransformFeedbackPropertiesEXT
-  STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT -> go @PipelineRasterizationStateStreamCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV -> go @PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-  STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV -> go @PipelineRepresentativeFragmentTestStateCreateInfoNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV -> go @PhysicalDeviceExclusiveScissorFeaturesNV
-  STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV -> go @PipelineViewportExclusiveScissorStateCreateInfoNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV -> go @PhysicalDeviceCornerSampledImageFeaturesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV -> go @PhysicalDeviceComputeShaderDerivativesFeaturesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV -> go @PhysicalDeviceFragmentShaderBarycentricFeaturesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV -> go @PhysicalDeviceShaderImageFootprintFeaturesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV -> go @PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-  STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV -> go @PipelineViewportShadingRateImageStateCreateInfoNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV -> go @PhysicalDeviceShadingRateImageFeaturesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV -> go @PhysicalDeviceShadingRateImagePropertiesNV
-  STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV -> go @PipelineViewportCoarseSampleOrderStateCreateInfoNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV -> go @PhysicalDeviceMeshShaderFeaturesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV -> go @PhysicalDeviceMeshShaderPropertiesNV
-  STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR -> go @WriteDescriptorSetAccelerationStructureKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR -> go @PhysicalDeviceRayTracingFeaturesKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR -> go @PhysicalDeviceRayTracingPropertiesKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV -> go @PhysicalDeviceRayTracingPropertiesNV
-  STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT -> go @DrmFormatModifierPropertiesListEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT -> go @PhysicalDeviceImageDrmFormatModifierInfoEXT
-  STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT -> go @ImageDrmFormatModifierListCreateInfoEXT
-  STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT -> go @ImageDrmFormatModifierExplicitCreateInfoEXT
-  STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO -> go @ImageStencilUsageCreateInfo
-  STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD -> go @DeviceMemoryOverallocationCreateInfoAMD
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT -> go @PhysicalDeviceFragmentDensityMapFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT -> go @PhysicalDeviceFragmentDensityMapPropertiesEXT
-  STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT -> go @RenderPassFragmentDensityMapCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES -> go @PhysicalDeviceScalarBlockLayoutFeatures
-  STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR -> go @SurfaceProtectedCapabilitiesKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES -> go @PhysicalDeviceUniformBufferStandardLayoutFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT -> go @PhysicalDeviceDepthClipEnableFeaturesEXT
-  STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT -> go @PipelineRasterizationDepthClipStateCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT -> go @PhysicalDeviceMemoryBudgetPropertiesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT -> go @PhysicalDeviceMemoryPriorityFeaturesEXT
-  STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT -> go @MemoryPriorityAllocateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES -> go @PhysicalDeviceBufferDeviceAddressFeatures
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT -> go @PhysicalDeviceBufferDeviceAddressFeaturesEXT
-  STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO -> go @BufferOpaqueCaptureAddressCreateInfo
-  STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT -> go @BufferDeviceAddressCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT -> go @PhysicalDeviceImageViewImageFormatInfoEXT
-  STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT -> go @FilterCubicImageViewImageFormatPropertiesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES -> go @PhysicalDeviceImagelessFramebufferFeatures
-  STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO -> go @FramebufferAttachmentsCreateInfo
-  STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO -> go @RenderPassAttachmentBeginInfo
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT -> go @PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV -> go @PhysicalDeviceCooperativeMatrixFeaturesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV -> go @PhysicalDeviceCooperativeMatrixPropertiesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT -> go @PhysicalDeviceYcbcrImageArraysFeaturesEXT
-  STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP -> go @PresentFrameTokenGGP
-  STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT -> go @PipelineCreationFeedbackCreateInfoEXT
-  STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT -> go @SurfaceFullScreenExclusiveInfoEXT
-  STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT -> go @SurfaceFullScreenExclusiveWin32InfoEXT
-  STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT -> go @SurfaceCapabilitiesFullScreenExclusiveEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR -> go @PhysicalDevicePerformanceQueryFeaturesKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR -> go @PhysicalDevicePerformanceQueryPropertiesKHR
-  STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR -> go @QueryPoolPerformanceCreateInfoKHR
-  STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR -> go @PerformanceQuerySubmitInfoKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV -> go @PhysicalDeviceCoverageReductionModeFeaturesNV
-  STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV -> go @PipelineCoverageReductionStateCreateInfoNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL -> go @PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
-  STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL -> go @QueryPoolPerformanceQueryCreateInfoINTEL
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR -> go @PhysicalDeviceShaderClockFeaturesKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT -> go @PhysicalDeviceIndexTypeUint8FeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV -> go @PhysicalDeviceShaderSMBuiltinsPropertiesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV -> go @PhysicalDeviceShaderSMBuiltinsFeaturesNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT -> go @PhysicalDeviceFragmentShaderInterlockFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES -> go @PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-  STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT -> go @AttachmentReferenceStencilLayout
-  STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT -> go @AttachmentDescriptionStencilLayout
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR -> go @PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT -> go @PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT -> go @PhysicalDeviceTexelBufferAlignmentFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT -> go @PhysicalDeviceTexelBufferAlignmentPropertiesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT -> go @PhysicalDeviceSubgroupSizeControlFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT -> go @PhysicalDeviceSubgroupSizeControlPropertiesEXT
-  STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT -> go @PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-  STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO -> go @MemoryOpaqueCaptureAddressAllocateInfo
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT -> go @PhysicalDeviceLineRasterizationFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT -> go @PhysicalDeviceLineRasterizationPropertiesEXT
-  STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT -> go @PipelineRasterizationLineStateCreateInfoEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT -> go @PhysicalDevicePipelineCreationCacheControlFeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES -> go @PhysicalDeviceVulkan11Features
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES -> go @PhysicalDeviceVulkan11Properties
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES -> go @PhysicalDeviceVulkan12Features
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES -> go @PhysicalDeviceVulkan12Properties
-  STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD -> go @PipelineCompilerControlCreateInfoAMD
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD -> go @PhysicalDeviceCoherentMemoryFeaturesAMD
-  STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR -> go @DeferredOperationInfoKHR
-  STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM -> go @RenderPassTransformBeginInfoQCOM
-  STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM -> go @CommandBufferInheritanceRenderPassTransformInfoQCOM
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV -> go @PhysicalDeviceDiagnosticsConfigFeaturesNV
-  STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV -> go @DeviceDiagnosticsConfigCreateInfoNV
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT -> go @PhysicalDeviceRobustness2FeaturesEXT
-  STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT -> go @PhysicalDeviceRobustness2PropertiesEXT
-  t -> throwIO $ IOError Nothing InvalidArgument "peekChainHead" ("Unrecognized struct type: " <> show t) Nothing Nothing
- where
-  go :: forall e . (Typeable e, FromCStruct e, ToCStruct e, Show e) => IO b
-  go =
-    let r = extends @a @e Proxy $ do
-          head' <- peekCStruct @e (castPtr p)
-          pure $ c head'
-    in  fromMaybe
-          (throwIO $ IOError
-            Nothing
-            InvalidArgument
-            "peekChainHead"
-            (  "Illegal struct extension of "
-            <> show (extensibleType @a)
-            <> " with "
-            <> show ty
-            )
-            Nothing
-            Nothing
-          )
-          r
-
-class Extensible (a :: [Type] -> Type) where
-  extensibleType :: StructureType
-  getNext :: a es -> Chain es
-  setNext :: a ds -> Chain es -> a es
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends a e => b) -> Maybe b
-
-type family Chain (xs :: [a]) = (r :: a) | r -> xs where
-  Chain '[]    = ()
-  Chain (x:xs) = (x, Chain xs)
-
--- | A pattern synonym to separate the head of a struct chain from the
--- tail, use in conjunction with ':&' to extract several members.
---
--- @
--- Head{..} ::& () <- returningNoTail a b c
--- -- Equivalent to
--- Head{..} <- returningNoTail @'[] a b c
--- @
---
--- @
--- Head{..} ::& Foo{..} :& Bar{..} :& () <- returningWithTail a b c
--- @
---
--- @
--- myFun (Head{..} :&& Foo{..} :& ())
--- @
-pattern (::&) :: Extensible a => a es' -> Chain es -> a es
-pattern a ::& es <- (\a -> (a, getNext a) -> (a, es))
-  where a ::& es = setNext a es
-infix 6 ::&
-
--- | View the head and tail of a 'Chain', see '::&'
---
--- Equivalent to @(,)@
-pattern (:&) :: e -> Chain es -> Chain (e:es)
-pattern e :& es = (e, es)
-infixr 7 :&
-
-type family Extendss (p :: [Type] -> Type) (xs :: [Type]) :: Constraint where
-  Extendss p '[]      = ()
-  Extendss p (x : xs) = (Extends p x, Extendss p xs)
-
-class PokeChain es where
-  withChain :: Chain es -> (Ptr (Chain es) -> IO a) -> IO a
-  withZeroChain :: (Ptr (Chain es) -> IO a) -> IO a
-
-instance PokeChain '[] where
-  withChain () f = f nullPtr
-  withZeroChain f = f nullPtr
-
-instance (ToCStruct e, PokeChain es) => PokeChain (e:es) where
-  withChain (e, es) f = evalContT $ do
-    t <- ContT $ withChain es
-    h <- ContT $ withCStruct e
-    lift $ linkChain h t
-    lift $ f (castPtr h)
-  withZeroChain f = evalContT $ do
-    t <- ContT $ withZeroChain @es
-    h <- ContT $ withZeroCStruct @e
-    lift $ linkChain h t
-    lift $ f (castPtr h)
-
-class PeekChain es where
-  peekChain :: Ptr (Chain es) -> IO (Chain es)
-
-instance PeekChain '[] where
-  peekChain _ = pure ()
-
-instance (FromCStruct e, PeekChain es) => PeekChain (e:es) where
-  peekChain p = do
-    h <- peekCStruct @e (castPtr p)
-    tPtr <- peek (p `plusPtr` 8)
-    t <- peekChain tPtr
-    pure (h, t)
-
-linkChain :: Ptr a -> Ptr b -> IO ()
-linkChain head' tail' = poke (head' `plusPtr` 8) tail'
-
diff --git a/src/Graphics/Vulkan/CStruct/Extends.hs-boot b/src/Graphics/Vulkan/CStruct/Extends.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/CStruct/Extends.hs-boot
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.CStruct.Extends  ( BaseInStructure
-                                        , BaseOutStructure
-                                        , PeekChain
-                                        , PokeChain
-                                        , Chain
-                                        ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data BaseInStructure
-
-instance ToCStruct BaseInStructure
-instance Show BaseInStructure
-
-instance FromCStruct BaseInStructure
-
-
-data BaseOutStructure
-
-instance ToCStruct BaseOutStructure
-instance Show BaseOutStructure
-
-instance FromCStruct BaseOutStructure
-
-
-class PeekChain (xs :: [Type])
-class PokeChain (xs :: [Type])
-type family Chain (xs :: [a]) = (r :: a) | r -> xs where
-  Chain '[]    = ()
-  Chain (x:xs) = (x, Chain xs)
-
diff --git a/src/Graphics/Vulkan/CStruct/Utils.hs b/src/Graphics/Vulkan/CStruct/Utils.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/CStruct/Utils.hs
+++ /dev/null
@@ -1,107 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.CStruct.Utils  ( pokeFixedLengthByteString
-                                      , pokeFixedLengthNullTerminatedByteString
-                                      , peekByteStringFromSizedVectorPtr
-                                      , lowerArrayPtr
-                                      , advancePtrBytes
-                                      , FixedArray
-                                      ) where
-
-import Foreign.Marshal.Array (allocaArray)
-import Foreign.Marshal.Utils (copyBytes)
-import Foreign.Storable (peekElemOff)
-import Foreign.Storable (pokeElemOff)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.TypeNats (natVal)
-import qualified Data.ByteString (length)
-import Data.ByteString (packCString)
-import Data.ByteString (packCStringLen)
-import Data.ByteString (take)
-import Data.ByteString (unpack)
-import Data.ByteString.Unsafe (unsafeUseAsCString)
-import Data.Vector (ifoldr)
-import qualified Data.Vector (length)
-import qualified Data.Vector.Generic ((++))
-import qualified Data.Vector.Generic (empty)
-import qualified Data.Vector.Generic (fromList)
-import qualified Data.Vector.Generic (length)
-import qualified Data.Vector.Generic (replicate)
-import qualified Data.Vector.Generic (snoc)
-import qualified Data.Vector.Generic (take)
-import Data.Proxy (Proxy(..))
-import Foreign.C.Types (CChar(..))
-import Foreign.Storable (Storable)
-import Foreign.Ptr (Ptr)
-import GHC.TypeNats (type(<=))
-import GHC.TypeNats (KnownNat)
-import Data.Word (Word8)
-import Data.ByteString (ByteString)
-import GHC.TypeNats (Nat)
-import Data.Kind (Type)
-import Data.Vector (Vector)
-import qualified Data.Vector.Generic (Vector)
-
--- | An unpopulated type intended to be used as in @'Ptr' (FixedArray n a)@ to
--- indicate that the pointer points to an array of @n@ @a@s
-data FixedArray (n :: Nat) (a :: Type)
-
--- | Store a 'ByteString' in a fixed amount of space inserting a null
--- character at the end and truncating if necessary.
---
--- If the 'ByteString' is not long enough to fill the space the remaining
--- bytes are unchanged
---
--- Note that if the 'ByteString' is exactly long enough the last byte will
--- still be replaced with 0
-pokeFixedLengthNullTerminatedByteString
-  :: forall n
-   . KnownNat n
-  => Ptr (FixedArray n CChar)
-  -> ByteString
-  -> IO ()
-pokeFixedLengthNullTerminatedByteString to bs =
-  unsafeUseAsCString bs $ \from -> do
-    let maxLength = fromIntegral (natVal (Proxy @n))
-        len       = min maxLength (Data.ByteString.length bs)
-        end       = min (maxLength - 1) len
-    -- Copy the entire string into the buffer
-    copyBytes (lowerArrayPtr to) from len
-    -- Make the last byte (the one following the string, or the
-    -- one at the end of the buffer)
-    pokeElemOff (lowerArrayPtr to) end 0
-
--- | Store a 'ByteString' in a fixed amount of space, truncating if necessary.
---
--- If the 'ByteString' is not long enough to fill the space the remaining
--- bytes are unchanged
-pokeFixedLengthByteString
-  :: forall n
-   . KnownNat n
-  => Ptr (FixedArray n Word8)
-  -> ByteString
-  -> IO ()
-pokeFixedLengthByteString to bs = unsafeUseAsCString bs $ \from -> do
-  let maxLength = fromIntegral (natVal (Proxy @n))
-      len       = min maxLength (Data.ByteString.length bs)
-  copyBytes (lowerArrayPtr to) (castPtr @CChar @Word8 from) len
-
--- | Peek a 'ByteString' from a fixed sized array of bytes
-peekByteStringFromSizedVectorPtr
-  :: forall n
-   . KnownNat n
-  => Ptr (FixedArray n Word8)
-  -> IO ByteString
-peekByteStringFromSizedVectorPtr p = packCStringLen (castPtr p, fromIntegral (natVal (Proxy @n)))
-
--- | Get the pointer to the first element in the array
-lowerArrayPtr
-  :: forall a n
-   . Ptr (FixedArray n a)
-  -> Ptr a
-lowerArrayPtr = castPtr
-
--- | A type restricted 'plusPtr'
-advancePtrBytes :: Ptr a -> Int -> Ptr a
-advancePtrBytes = plusPtr
-
diff --git a/src/Graphics/Vulkan/Core10.hs b/src/Graphics/Vulkan/Core10.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10.hs
+++ /dev/null
@@ -1,76 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10  ( pattern API_VERSION_1_0
-                               , module Graphics.Vulkan.Core10.APIConstants
-                               , module Graphics.Vulkan.Core10.AllocationCallbacks
-                               , module Graphics.Vulkan.Core10.BaseType
-                               , module Graphics.Vulkan.Core10.Buffer
-                               , module Graphics.Vulkan.Core10.BufferView
-                               , module Graphics.Vulkan.Core10.CommandBuffer
-                               , module Graphics.Vulkan.Core10.CommandBufferBuilding
-                               , module Graphics.Vulkan.Core10.CommandPool
-                               , module Graphics.Vulkan.Core10.DescriptorSet
-                               , module Graphics.Vulkan.Core10.Device
-                               , module Graphics.Vulkan.Core10.DeviceInitialization
-                               , module Graphics.Vulkan.Core10.Enums
-                               , module Graphics.Vulkan.Core10.Event
-                               , module Graphics.Vulkan.Core10.ExtensionDiscovery
-                               , module Graphics.Vulkan.Core10.Fence
-                               , module Graphics.Vulkan.Core10.FuncPointers
-                               , module Graphics.Vulkan.Core10.Handles
-                               , module Graphics.Vulkan.Core10.Image
-                               , module Graphics.Vulkan.Core10.ImageView
-                               , module Graphics.Vulkan.Core10.LayerDiscovery
-                               , module Graphics.Vulkan.Core10.Memory
-                               , module Graphics.Vulkan.Core10.MemoryManagement
-                               , module Graphics.Vulkan.Core10.OtherTypes
-                               , module Graphics.Vulkan.Core10.Pass
-                               , module Graphics.Vulkan.Core10.Pipeline
-                               , module Graphics.Vulkan.Core10.PipelineCache
-                               , module Graphics.Vulkan.Core10.PipelineLayout
-                               , module Graphics.Vulkan.Core10.Query
-                               , module Graphics.Vulkan.Core10.Queue
-                               , module Graphics.Vulkan.Core10.QueueSemaphore
-                               , module Graphics.Vulkan.Core10.Sampler
-                               , module Graphics.Vulkan.Core10.Shader
-                               , module Graphics.Vulkan.Core10.SharedTypes
-                               , module Graphics.Vulkan.Core10.SparseResourceMemoryManagement
-                               ) where
-import Graphics.Vulkan.Core10.APIConstants
-import Graphics.Vulkan.Core10.AllocationCallbacks
-import Graphics.Vulkan.Core10.BaseType
-import Graphics.Vulkan.Core10.Buffer
-import Graphics.Vulkan.Core10.BufferView
-import Graphics.Vulkan.Core10.CommandBuffer
-import Graphics.Vulkan.Core10.CommandBufferBuilding
-import Graphics.Vulkan.Core10.CommandPool
-import Graphics.Vulkan.Core10.DescriptorSet
-import Graphics.Vulkan.Core10.Device
-import Graphics.Vulkan.Core10.DeviceInitialization
-import Graphics.Vulkan.Core10.Enums
-import Graphics.Vulkan.Core10.Event
-import Graphics.Vulkan.Core10.ExtensionDiscovery
-import Graphics.Vulkan.Core10.Fence
-import Graphics.Vulkan.Core10.FuncPointers
-import Graphics.Vulkan.Core10.Handles
-import Graphics.Vulkan.Core10.Image
-import Graphics.Vulkan.Core10.ImageView
-import Graphics.Vulkan.Core10.LayerDiscovery
-import Graphics.Vulkan.Core10.Memory
-import Graphics.Vulkan.Core10.MemoryManagement
-import Graphics.Vulkan.Core10.OtherTypes
-import Graphics.Vulkan.Core10.Pass
-import Graphics.Vulkan.Core10.Pipeline
-import Graphics.Vulkan.Core10.PipelineCache
-import Graphics.Vulkan.Core10.PipelineLayout
-import Graphics.Vulkan.Core10.Query
-import Graphics.Vulkan.Core10.Queue
-import Graphics.Vulkan.Core10.QueueSemaphore
-import Graphics.Vulkan.Core10.Sampler
-import Graphics.Vulkan.Core10.Shader
-import Graphics.Vulkan.Core10.SharedTypes
-import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
-import Data.Word (Word32)
-import Graphics.Vulkan.Version (pattern MAKE_VERSION)
-pattern API_VERSION_1_0 :: Word32
-pattern API_VERSION_1_0 = MAKE_VERSION 1 0 0
-
diff --git a/src/Graphics/Vulkan/Core10/APIConstants.hs b/src/Graphics/Vulkan/Core10/APIConstants.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/APIConstants.hs
+++ /dev/null
@@ -1,231 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.APIConstants  ( pattern LOD_CLAMP_NONE
-                                            , LUID_SIZE_KHR
-                                            , QUEUE_FAMILY_EXTERNAL_KHR
-                                            , MAX_DEVICE_GROUP_SIZE_KHR
-                                            , MAX_DRIVER_NAME_SIZE_KHR
-                                            , MAX_DRIVER_INFO_SIZE_KHR
-                                            , SHADER_UNUSED_NV
-                                            , MAX_PHYSICAL_DEVICE_NAME_SIZE
-                                            , pattern MAX_PHYSICAL_DEVICE_NAME_SIZE
-                                            , UUID_SIZE
-                                            , pattern UUID_SIZE
-                                            , LUID_SIZE
-                                            , pattern LUID_SIZE
-                                            , MAX_EXTENSION_NAME_SIZE
-                                            , pattern MAX_EXTENSION_NAME_SIZE
-                                            , MAX_DESCRIPTION_SIZE
-                                            , pattern MAX_DESCRIPTION_SIZE
-                                            , MAX_MEMORY_TYPES
-                                            , pattern MAX_MEMORY_TYPES
-                                            , MAX_MEMORY_HEAPS
-                                            , pattern MAX_MEMORY_HEAPS
-                                            , REMAINING_MIP_LEVELS
-                                            , pattern REMAINING_MIP_LEVELS
-                                            , REMAINING_ARRAY_LAYERS
-                                            , pattern REMAINING_ARRAY_LAYERS
-                                            , WHOLE_SIZE
-                                            , pattern WHOLE_SIZE
-                                            , ATTACHMENT_UNUSED
-                                            , pattern ATTACHMENT_UNUSED
-                                            , QUEUE_FAMILY_IGNORED
-                                            , pattern QUEUE_FAMILY_IGNORED
-                                            , QUEUE_FAMILY_EXTERNAL
-                                            , pattern QUEUE_FAMILY_EXTERNAL
-                                            , QUEUE_FAMILY_FOREIGN_EXT
-                                            , pattern QUEUE_FAMILY_FOREIGN_EXT
-                                            , SUBPASS_EXTERNAL
-                                            , pattern SUBPASS_EXTERNAL
-                                            , MAX_DEVICE_GROUP_SIZE
-                                            , pattern MAX_DEVICE_GROUP_SIZE
-                                            , MAX_DRIVER_NAME_SIZE
-                                            , pattern MAX_DRIVER_NAME_SIZE
-                                            , MAX_DRIVER_INFO_SIZE
-                                            , pattern MAX_DRIVER_INFO_SIZE
-                                            , SHADER_UNUSED_KHR
-                                            , pattern SHADER_UNUSED_KHR
-                                            , pattern NULL_HANDLE
-                                            , IsHandle
-                                            , Bool32(..)
-                                            , PipelineCacheHeaderVersion(..)
-                                            ) where
-
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.BaseType (Bool32(..))
-import Graphics.Vulkan.Core10.Enums.PipelineCacheHeaderVersion (PipelineCacheHeaderVersion(..))
--- No documentation found for TopLevel "VK_LOD_CLAMP_NONE"
-pattern LOD_CLAMP_NONE :: Float
-pattern LOD_CLAMP_NONE = 1000.0
-
-
--- No documentation found for TopLevel "VK_LUID_SIZE_KHR"
-type LUID_SIZE_KHR = LUID_SIZE
-
-
--- No documentation found for TopLevel "VK_QUEUE_FAMILY_EXTERNAL_KHR"
-type QUEUE_FAMILY_EXTERNAL_KHR = QUEUE_FAMILY_EXTERNAL
-
-
--- No documentation found for TopLevel "VK_MAX_DEVICE_GROUP_SIZE_KHR"
-type MAX_DEVICE_GROUP_SIZE_KHR = MAX_DEVICE_GROUP_SIZE
-
-
--- No documentation found for TopLevel "VK_MAX_DRIVER_NAME_SIZE_KHR"
-type MAX_DRIVER_NAME_SIZE_KHR = MAX_DRIVER_NAME_SIZE
-
-
--- No documentation found for TopLevel "VK_MAX_DRIVER_INFO_SIZE_KHR"
-type MAX_DRIVER_INFO_SIZE_KHR = MAX_DRIVER_INFO_SIZE
-
-
--- No documentation found for TopLevel "VK_SHADER_UNUSED_NV"
-type SHADER_UNUSED_NV = SHADER_UNUSED_KHR
-
-
-type MAX_PHYSICAL_DEVICE_NAME_SIZE = 256
-
--- No documentation found for TopLevel "VK_MAX_PHYSICAL_DEVICE_NAME_SIZE"
-pattern MAX_PHYSICAL_DEVICE_NAME_SIZE :: forall a . Integral a => a
-pattern MAX_PHYSICAL_DEVICE_NAME_SIZE = 256
-
-
-type UUID_SIZE = 16
-
--- No documentation found for TopLevel "VK_UUID_SIZE"
-pattern UUID_SIZE :: forall a . Integral a => a
-pattern UUID_SIZE = 16
-
-
-type LUID_SIZE = 8
-
--- No documentation found for TopLevel "VK_LUID_SIZE"
-pattern LUID_SIZE :: forall a . Integral a => a
-pattern LUID_SIZE = 8
-
-
-type MAX_EXTENSION_NAME_SIZE = 256
-
--- No documentation found for TopLevel "VK_MAX_EXTENSION_NAME_SIZE"
-pattern MAX_EXTENSION_NAME_SIZE :: forall a . Integral a => a
-pattern MAX_EXTENSION_NAME_SIZE = 256
-
-
-type MAX_DESCRIPTION_SIZE = 256
-
--- No documentation found for TopLevel "VK_MAX_DESCRIPTION_SIZE"
-pattern MAX_DESCRIPTION_SIZE :: forall a . Integral a => a
-pattern MAX_DESCRIPTION_SIZE = 256
-
-
-type MAX_MEMORY_TYPES = 32
-
--- No documentation found for TopLevel "VK_MAX_MEMORY_TYPES"
-pattern MAX_MEMORY_TYPES :: forall a . Integral a => a
-pattern MAX_MEMORY_TYPES = 32
-
-
-type MAX_MEMORY_HEAPS = 16
-
--- No documentation found for TopLevel "VK_MAX_MEMORY_HEAPS"
-pattern MAX_MEMORY_HEAPS :: forall a . Integral a => a
-pattern MAX_MEMORY_HEAPS = 16
-
-
-type REMAINING_MIP_LEVELS = 0xffffffff
-
--- No documentation found for TopLevel "VK_REMAINING_MIP_LEVELS"
-pattern REMAINING_MIP_LEVELS :: Word32
-pattern REMAINING_MIP_LEVELS = 0xffffffff
-
-
-type REMAINING_ARRAY_LAYERS = 0xffffffff
-
--- No documentation found for TopLevel "VK_REMAINING_ARRAY_LAYERS"
-pattern REMAINING_ARRAY_LAYERS :: Word32
-pattern REMAINING_ARRAY_LAYERS = 0xffffffff
-
-
-type WHOLE_SIZE = 0xffffffffffffffff
-
--- No documentation found for TopLevel "VK_WHOLE_SIZE"
-pattern WHOLE_SIZE :: Word64
-pattern WHOLE_SIZE = 0xffffffffffffffff
-
-
-type ATTACHMENT_UNUSED = 0xffffffff
-
--- No documentation found for TopLevel "VK_ATTACHMENT_UNUSED"
-pattern ATTACHMENT_UNUSED :: Word32
-pattern ATTACHMENT_UNUSED = 0xffffffff
-
-
-type QUEUE_FAMILY_IGNORED = 0xffffffff
-
--- No documentation found for TopLevel "VK_QUEUE_FAMILY_IGNORED"
-pattern QUEUE_FAMILY_IGNORED :: Word32
-pattern QUEUE_FAMILY_IGNORED = 0xffffffff
-
-
-type QUEUE_FAMILY_EXTERNAL = 0xfffffffe
-
--- No documentation found for TopLevel "VK_QUEUE_FAMILY_EXTERNAL"
-pattern QUEUE_FAMILY_EXTERNAL :: Word32
-pattern QUEUE_FAMILY_EXTERNAL = 0xfffffffe
-
-
-type QUEUE_FAMILY_FOREIGN_EXT = 0xfffffffd
-
--- No documentation found for TopLevel "VK_QUEUE_FAMILY_FOREIGN_EXT"
-pattern QUEUE_FAMILY_FOREIGN_EXT :: Word32
-pattern QUEUE_FAMILY_FOREIGN_EXT = 0xfffffffd
-
-
-type SUBPASS_EXTERNAL = 0xffffffff
-
--- No documentation found for TopLevel "VK_SUBPASS_EXTERNAL"
-pattern SUBPASS_EXTERNAL :: Word32
-pattern SUBPASS_EXTERNAL = 0xffffffff
-
-
-type MAX_DEVICE_GROUP_SIZE = 32
-
--- No documentation found for TopLevel "VK_MAX_DEVICE_GROUP_SIZE"
-pattern MAX_DEVICE_GROUP_SIZE :: forall a . Integral a => a
-pattern MAX_DEVICE_GROUP_SIZE = 32
-
-
-type MAX_DRIVER_NAME_SIZE = 256
-
--- No documentation found for TopLevel "VK_MAX_DRIVER_NAME_SIZE"
-pattern MAX_DRIVER_NAME_SIZE :: forall a . Integral a => a
-pattern MAX_DRIVER_NAME_SIZE = 256
-
-
-type MAX_DRIVER_INFO_SIZE = 256
-
--- No documentation found for TopLevel "VK_MAX_DRIVER_INFO_SIZE"
-pattern MAX_DRIVER_INFO_SIZE :: forall a . Integral a => a
-pattern MAX_DRIVER_INFO_SIZE = 256
-
-
-type SHADER_UNUSED_KHR = 0xffffffff
-
--- No documentation found for TopLevel "VK_SHADER_UNUSED_KHR"
-pattern SHADER_UNUSED_KHR :: Word32
-pattern SHADER_UNUSED_KHR = 0xffffffff
-
-
--- | VK_NULL_HANDLE - Reserved non-valid object handle
---
--- = See Also
---
--- No cross-references are available
-pattern NULL_HANDLE :: IsHandle a => a
-pattern NULL_HANDLE <- ((== zero) -> True)
-  where NULL_HANDLE = zero
-
--- | A class for things which can be created with 'NULL_HANDLE'
-class (Eq a, Zero a) => IsHandle a where
-
diff --git a/src/Graphics/Vulkan/Core10/APIConstants.hs-boot b/src/Graphics/Vulkan/Core10/APIConstants.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/APIConstants.hs-boot
+++ /dev/null
@@ -1,28 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.APIConstants  ( LUID_SIZE
-                                            , QUEUE_FAMILY_EXTERNAL
-                                            , MAX_DEVICE_GROUP_SIZE
-                                            , MAX_DRIVER_NAME_SIZE
-                                            , MAX_DRIVER_INFO_SIZE
-                                            , SHADER_UNUSED_KHR
-                                            ) where
-
-
-
-type LUID_SIZE = 8
-
-
-type QUEUE_FAMILY_EXTERNAL = 0xfffffffe
-
-
-type MAX_DEVICE_GROUP_SIZE = 32
-
-
-type MAX_DRIVER_NAME_SIZE = 256
-
-
-type MAX_DRIVER_INFO_SIZE = 256
-
-
-type SHADER_UNUSED_KHR = 0xffffffff
-
diff --git a/src/Graphics/Vulkan/Core10/AllocationCallbacks.hs b/src/Graphics/Vulkan/Core10/AllocationCallbacks.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/AllocationCallbacks.hs
+++ /dev/null
@@ -1,212 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.AllocationCallbacks  (AllocationCallbacks(..)) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.FuncPointers (PFN_vkAllocationFunction)
-import Graphics.Vulkan.Core10.FuncPointers (PFN_vkFreeFunction)
-import Graphics.Vulkan.Core10.FuncPointers (PFN_vkInternalAllocationNotification)
-import Graphics.Vulkan.Core10.FuncPointers (PFN_vkInternalFreeNotification)
-import Graphics.Vulkan.Core10.FuncPointers (PFN_vkReallocationFunction)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
--- | VkAllocationCallbacks - Structure containing callback function pointers
--- for memory allocation
---
--- == Valid Usage
---
--- -   @pfnAllocation@ /must/ be a valid pointer to a valid user-defined
---     'Graphics.Vulkan.Core10.FuncPointers.PFN_vkAllocationFunction'
---
--- -   @pfnReallocation@ /must/ be a valid pointer to a valid user-defined
---     'Graphics.Vulkan.Core10.FuncPointers.PFN_vkReallocationFunction'
---
--- -   @pfnFree@ /must/ be a valid pointer to a valid user-defined
---     'Graphics.Vulkan.Core10.FuncPointers.PFN_vkFreeFunction'
---
--- -   If either of @pfnInternalAllocation@ or @pfnInternalFree@ is not
---     @NULL@, both /must/ be valid callbacks
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkAllocationFunction',
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkFreeFunction',
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkInternalAllocationNotification',
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkInternalFreeNotification',
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkReallocationFunction',
--- 'Graphics.Vulkan.Core10.Memory.allocateMemory',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.createAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.createAccelerationStructureNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.createAndroidSurfaceKHR',
--- 'Graphics.Vulkan.Core10.Buffer.createBuffer',
--- 'Graphics.Vulkan.Core10.BufferView.createBufferView',
--- 'Graphics.Vulkan.Core10.CommandPool.createCommandPool',
--- 'Graphics.Vulkan.Core10.Pipeline.createComputePipelines',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.createDebugReportCallbackEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.createDebugUtilsMessengerEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.createDeferredOperationKHR',
--- 'Graphics.Vulkan.Core10.DescriptorSet.createDescriptorPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.createDescriptorSetLayout',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.createDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR',
--- 'Graphics.Vulkan.Core10.Device.createDevice',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.createDisplayModeKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.createDisplayPlaneSurfaceKHR',
--- 'Graphics.Vulkan.Core10.Event.createEvent',
--- 'Graphics.Vulkan.Core10.Fence.createFence',
--- 'Graphics.Vulkan.Core10.Pass.createFramebuffer',
--- 'Graphics.Vulkan.Core10.Pipeline.createGraphicsPipelines',
--- 'Graphics.Vulkan.Extensions.VK_EXT_headless_surface.createHeadlessSurfaceEXT',
--- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.createIOSSurfaceMVK',
--- 'Graphics.Vulkan.Core10.Image.createImage',
--- 'Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface.createImagePipeSurfaceFUCHSIA',
--- 'Graphics.Vulkan.Core10.ImageView.createImageView',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.createIndirectCommandsLayoutNV',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.createInstance',
--- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.createMacOSSurfaceMVK',
--- 'Graphics.Vulkan.Extensions.VK_EXT_metal_surface.createMetalSurfaceEXT',
--- 'Graphics.Vulkan.Core10.PipelineCache.createPipelineCache',
--- 'Graphics.Vulkan.Core10.PipelineLayout.createPipelineLayout',
--- 'Graphics.Vulkan.Core10.Query.createQueryPool',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV',
--- 'Graphics.Vulkan.Core10.Pass.createRenderPass',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.createRenderPass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR',
--- 'Graphics.Vulkan.Core10.Sampler.createSampler',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversionKHR',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.createSemaphore',
--- 'Graphics.Vulkan.Core10.Shader.createShaderModule',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.createSharedSwapchainsKHR',
--- 'Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface.createStreamDescriptorSurfaceGGP',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.createValidationCacheEXT',
--- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.createViSurfaceNN',
--- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.createWaylandSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.createWin32SurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.createXcbSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.createXlibSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.destroyAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.destroyAccelerationStructureNV',
--- 'Graphics.Vulkan.Core10.Buffer.destroyBuffer',
--- 'Graphics.Vulkan.Core10.BufferView.destroyBufferView',
--- 'Graphics.Vulkan.Core10.CommandPool.destroyCommandPool',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.destroyDebugReportCallbackEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.destroyDebugUtilsMessengerEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.destroyDeferredOperationKHR',
--- 'Graphics.Vulkan.Core10.DescriptorSet.destroyDescriptorPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.destroyDescriptorSetLayout',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplateKHR',
--- 'Graphics.Vulkan.Core10.Device.destroyDevice',
--- 'Graphics.Vulkan.Core10.Event.destroyEvent',
--- 'Graphics.Vulkan.Core10.Fence.destroyFence',
--- 'Graphics.Vulkan.Core10.Pass.destroyFramebuffer',
--- 'Graphics.Vulkan.Core10.Image.destroyImage',
--- 'Graphics.Vulkan.Core10.ImageView.destroyImageView',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.destroyIndirectCommandsLayoutNV',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.destroyInstance',
--- 'Graphics.Vulkan.Core10.Pipeline.destroyPipeline',
--- 'Graphics.Vulkan.Core10.PipelineCache.destroyPipelineCache',
--- 'Graphics.Vulkan.Core10.PipelineLayout.destroyPipelineLayout',
--- 'Graphics.Vulkan.Core10.Query.destroyQueryPool',
--- 'Graphics.Vulkan.Core10.Pass.destroyRenderPass',
--- 'Graphics.Vulkan.Core10.Sampler.destroySampler',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversionKHR',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.destroySemaphore',
--- 'Graphics.Vulkan.Core10.Shader.destroyShaderModule',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.destroySurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.destroySwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.destroyValidationCacheEXT',
--- 'Graphics.Vulkan.Core10.Memory.freeMemory',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.registerDeviceEventEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.registerDisplayEventEXT'
-data AllocationCallbacks = AllocationCallbacks
-  { -- | @pUserData@ is a value to be interpreted by the implementation of the
-    -- callbacks. When any of the callbacks in 'AllocationCallbacks' are
-    -- called, the Vulkan implementation will pass this value as the first
-    -- parameter to the callback. This value /can/ vary each time an allocator
-    -- is passed into a command, even when the same object takes an allocator
-    -- in multiple commands.
-    userData :: Ptr ()
-  , -- | @pfnAllocation@ is a
-    -- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkAllocationFunction' pointer
-    -- to an application-defined memory allocation function.
-    pfnAllocation :: PFN_vkAllocationFunction
-  , -- | @pfnReallocation@ is a
-    -- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkReallocationFunction' pointer
-    -- to an application-defined memory reallocation function.
-    pfnReallocation :: PFN_vkReallocationFunction
-  , -- | @pfnFree@ is a 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkFreeFunction'
-    -- pointer to an application-defined memory free function.
-    pfnFree :: PFN_vkFreeFunction
-  , -- | @pfnInternalAllocation@ is a
-    -- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkInternalAllocationNotification'
-    -- pointer to an application-defined function that is called by the
-    -- implementation when the implementation makes internal allocations.
-    pfnInternalAllocation :: PFN_vkInternalAllocationNotification
-  , -- | @pfnInternalFree@ is a
-    -- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkInternalFreeNotification'
-    -- pointer to an application-defined function that is called by the
-    -- implementation when the implementation frees internal allocations.
-    pfnInternalFree :: PFN_vkInternalFreeNotification
-  }
-  deriving (Typeable)
-deriving instance Show AllocationCallbacks
-
-instance ToCStruct AllocationCallbacks where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AllocationCallbacks{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr (Ptr ()))) (userData)
-    poke ((p `plusPtr` 8 :: Ptr PFN_vkAllocationFunction)) (pfnAllocation)
-    poke ((p `plusPtr` 16 :: Ptr PFN_vkReallocationFunction)) (pfnReallocation)
-    poke ((p `plusPtr` 24 :: Ptr PFN_vkFreeFunction)) (pfnFree)
-    poke ((p `plusPtr` 32 :: Ptr PFN_vkInternalAllocationNotification)) (pfnInternalAllocation)
-    poke ((p `plusPtr` 40 :: Ptr PFN_vkInternalFreeNotification)) (pfnInternalFree)
-    f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 8 :: Ptr PFN_vkAllocationFunction)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr PFN_vkReallocationFunction)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr PFN_vkFreeFunction)) (zero)
-    f
-
-instance FromCStruct AllocationCallbacks where
-  peekCStruct p = do
-    pUserData <- peek @(Ptr ()) ((p `plusPtr` 0 :: Ptr (Ptr ())))
-    pfnAllocation <- peek @PFN_vkAllocationFunction ((p `plusPtr` 8 :: Ptr PFN_vkAllocationFunction))
-    pfnReallocation <- peek @PFN_vkReallocationFunction ((p `plusPtr` 16 :: Ptr PFN_vkReallocationFunction))
-    pfnFree <- peek @PFN_vkFreeFunction ((p `plusPtr` 24 :: Ptr PFN_vkFreeFunction))
-    pfnInternalAllocation <- peek @PFN_vkInternalAllocationNotification ((p `plusPtr` 32 :: Ptr PFN_vkInternalAllocationNotification))
-    pfnInternalFree <- peek @PFN_vkInternalFreeNotification ((p `plusPtr` 40 :: Ptr PFN_vkInternalFreeNotification))
-    pure $ AllocationCallbacks
-             pUserData pfnAllocation pfnReallocation pfnFree pfnInternalAllocation pfnInternalFree
-
-instance Storable AllocationCallbacks where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AllocationCallbacks where
-  zero = AllocationCallbacks
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/AllocationCallbacks.hs-boot b/src/Graphics/Vulkan/Core10/AllocationCallbacks.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/AllocationCallbacks.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.AllocationCallbacks  (AllocationCallbacks) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data AllocationCallbacks
-
-instance ToCStruct AllocationCallbacks
-instance Show AllocationCallbacks
-
-instance FromCStruct AllocationCallbacks
-
diff --git a/src/Graphics/Vulkan/Core10/BaseType.hs b/src/Graphics/Vulkan/Core10/BaseType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/BaseType.hs
+++ /dev/null
@@ -1,349 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.BaseType  ( boolToBool32
-                                        , bool32ToBool
-                                        , Bool32( FALSE
-                                                , TRUE
-                                                , ..
-                                                )
-                                        , SampleMask
-                                        , Flags
-                                        , DeviceSize
-                                        , DeviceAddress
-                                        ) where
-
-import Data.Bool (bool)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
-boolToBool32 :: Bool -> Bool32
-boolToBool32 = bool FALSE TRUE
-
-bool32ToBool :: Bool32 -> Bool
-bool32ToBool = \case
-  FALSE -> False
-  TRUE  -> True
-
-
--- | VkBool32 - Vulkan boolean type
---
--- = Description
---
--- 'TRUE' represents a boolean __True__ (integer 1) value, and 'FALSE' a
--- boolean __False__ (integer 0) value.
---
--- All values returned from a Vulkan implementation in a 'Bool32' will be
--- either 'TRUE' or 'FALSE'.
---
--- Applications /must/ not pass any other values than 'TRUE' or 'FALSE'
--- into a Vulkan implementation where a 'Bool32' is expected.
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureBuildGeometryInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateGeometryTypeInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryInstancesDataKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.CommandBufferInheritanceConditionalRenderingInfoEXT',
--- 'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.DescriptorSetLayoutSupport',
--- 'Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr.DisplayNativeHdrSurfaceCapabilitiesAMD',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.DisplayPresentInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.PerformanceOverrideInfoINTEL',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.PerformanceValueDataINTEL',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode.PhysicalDeviceASTCDecodeFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory.PhysicalDeviceCoherentMemoryFeaturesAMD',
--- 'Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives.PhysicalDeviceComputeShaderDerivativesFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.PhysicalDeviceConditionalRenderingFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.PhysicalDeviceConservativeRasterizationPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image.PhysicalDeviceCornerSampledImageFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.PhysicalDeviceCoverageReductionModeFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing.PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable.PhysicalDeviceDepthClipEnableFeaturesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric.PhysicalDeviceFragmentShaderBarycentricFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock.PhysicalDeviceFragmentShaderInterlockFeaturesEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.PhysicalDeviceImagelessFramebufferFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8.PhysicalDeviceIndexTypeUint8FeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits',
--- 'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
--- 'Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryFeaturesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingFeaturesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2FeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.PhysicalDeviceSamplerFilterMinmaxProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
--- 'Graphics.Vulkan.Extensions.VK_KHR_shader_clock.PhysicalDeviceShaderClockFeaturesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation.PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8.PhysicalDeviceShaderFloat16Int8Features',
--- 'Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint.PhysicalDeviceShaderImageFootprintFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2.PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL',
--- 'Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsFeaturesNV',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types.PhysicalDeviceShaderSubgroupExtendedTypesFeatures',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImageFeaturesNV',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceSparseProperties',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout.PhysicalDeviceUniformBufferStandardLayoutFeatures',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers.PhysicalDeviceVariablePointersFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PhysicalDeviceVertexAttributeDivisorFeaturesEXT',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan11Features',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan11Properties',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Properties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.PipelineCoverageModulationStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color.PipelineCoverageToColorStateCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableInternalRepresentationKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableStatisticValueKHR',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.ProtectedSubmitInfo',
--- 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr.SwapchainDisplayNativeHdrCreateInfoAMD',
--- 'Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.TextureLODGatherFormatPropertiesAMD',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.cmdExecuteGeneratedCommandsNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr.setLocalDimmingAMD',
--- 'Graphics.Vulkan.Core10.Fence.waitForFences'
-newtype Bool32 = Bool32 Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkBool32" "VK_FALSE"
-pattern FALSE = Bool32 0
--- No documentation found for Nested "VkBool32" "VK_TRUE"
-pattern TRUE = Bool32 1
-{-# complete FALSE,
-             TRUE :: Bool32 #-}
-
-instance Show Bool32 where
-  showsPrec p = \case
-    FALSE -> showString "FALSE"
-    TRUE -> showString "TRUE"
-    Bool32 x -> showParen (p >= 11) (showString "Bool32 " . showsPrec 11 x)
-
-instance Read Bool32 where
-  readPrec = parens (choose [("FALSE", pure FALSE)
-                            , ("TRUE", pure TRUE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "Bool32")
-                       v <- step readPrec
-                       pure (Bool32 v)))
-
-
--- | VkSampleMask - Mask of sample coverage information
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'
-type SampleMask = Word32
-
-
--- | VkFlags - Vulkan bitmasks
---
--- = Description
---
--- Bitmasks are passed to many commands and structures to compactly
--- represent options, but 'Flags' is not used directly in the API. Instead,
--- a @Vk*Flags@ type which is an alias of 'Flags', and whose name matches
--- the corresponding @Vk*FlagBits@ that are valid for that type, is used.
---
--- Any @Vk*Flags@ member or parameter used in the API as an input /must/ be
--- a valid combination of bit flags. A valid combination is either zero or
--- the bitwise OR of valid bit flags. A bit flag is valid if:
---
--- -   The bit flag is defined as part of the @Vk*FlagBits@ type, where the
---     bits type is obtained by taking the flag type and replacing the
---     trailing 'Flags' with @FlagBits@. For example, a flag value of type
---     'Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlags'
---     /must/ contain only bit flags defined by
---     'Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'.
---
--- -   The flag is allowed in the context in which it is being used. For
---     example, in some cases, certain bit flags or combinations of bit
---     flags are mutually exclusive.
---
--- Any @Vk*Flags@ member or parameter returned from a query command or
--- otherwise output from Vulkan to the application /may/ contain bit flags
--- undefined in its corresponding @Vk*FlagBits@ type. An application
--- /cannot/ rely on the state of these unspecified bits.
---
--- Only the low-order 31 bits (bit positions zero through 30) are available
--- for use as flag bits.
---
--- Note
---
--- This restriction is due to poorly defined behavior by C compilers given
--- a C enumerant value of @0x80000000@. In some cases adding this enumerant
--- value may increase the size of the underlying @Vk*FlagBits@ type,
--- breaking the ABI.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlags'
-type Flags = Word32
-
-
--- | VkDeviceSize - Vulkan device memory size and offsets
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryAabbsDataKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryTrianglesDataKHR',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferPropertiesANDROID',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.BindAccelerationStructureMemoryInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.BufferCopy',
--- 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
--- 'Graphics.Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
--- 'Graphics.Vulkan.Core10.BufferView.BufferViewCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewAddressPropertiesNVX',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsStreamNV',
--- 'Graphics.Vulkan.Core10.Memory.MappedMemoryRange',
--- 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.MemoryHeap',
--- 'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements',
--- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_memory_budget.PhysicalDeviceMemoryBudgetPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2PropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan11Properties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryRequirements',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseMemoryBind',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.StridedBufferRegionKHR',
--- 'Graphics.Vulkan.Core10.Image.SubresourceLayout',
--- 'Graphics.Vulkan.Core10.MemoryManagement.bindBufferMemory',
--- 'Graphics.Vulkan.Core10.MemoryManagement.bindImageMemory',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureIndirectKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount',
--- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndexedIndirectCountAMD',
--- 'Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCountKHR',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdDrawIndirectByteCountEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount',
--- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndirectCountAMD',
--- 'Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndirectCountKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdFillBuffer',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysIndirectKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdUpdateBuffer',
--- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.cmdWriteBufferMarkerAMD',
--- 'Graphics.Vulkan.Core10.Memory.getDeviceMemoryCommitment',
--- 'Graphics.Vulkan.Core10.Query.getQueryPoolResults',
--- 'Graphics.Vulkan.Core10.Memory.mapMemory'
-type DeviceSize = Word64
-
-
--- | VkDeviceAddress - Vulkan device address type
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.BindIndexBufferIndirectCommandNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.BindVertexBufferIndirectCommandNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.DeviceOrHostAddressConstKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.DeviceOrHostAddressKHR',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewAddressPropertiesNVX'
-type DeviceAddress = Word64
-
diff --git a/src/Graphics/Vulkan/Core10/BaseType.hs-boot b/src/Graphics/Vulkan/Core10/BaseType.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/BaseType.hs-boot
+++ /dev/null
@@ -1,99 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.BaseType  ( Bool32
-                                        , DeviceAddress
-                                        , DeviceSize
-                                        ) where
-
-import Data.Word (Word64)
-
-data Bool32
-
-
--- | VkDeviceAddress - Vulkan device address type
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.BindIndexBufferIndirectCommandNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.BindVertexBufferIndirectCommandNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.DeviceOrHostAddressConstKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.DeviceOrHostAddressKHR',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewAddressPropertiesNVX'
-type DeviceAddress = Word64
-
-
--- | VkDeviceSize - Vulkan device memory size and offsets
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryAabbsDataKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryTrianglesDataKHR',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferPropertiesANDROID',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.BindAccelerationStructureMemoryInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.BufferCopy',
--- 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
--- 'Graphics.Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
--- 'Graphics.Vulkan.Core10.BufferView.BufferViewCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewAddressPropertiesNVX',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsStreamNV',
--- 'Graphics.Vulkan.Core10.Memory.MappedMemoryRange',
--- 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.MemoryHeap',
--- 'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements',
--- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_memory_budget.PhysicalDeviceMemoryBudgetPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2PropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan11Properties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryRequirements',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseMemoryBind',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.StridedBufferRegionKHR',
--- 'Graphics.Vulkan.Core10.Image.SubresourceLayout',
--- 'Graphics.Vulkan.Core10.MemoryManagement.bindBufferMemory',
--- 'Graphics.Vulkan.Core10.MemoryManagement.bindImageMemory',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureIndirectKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount',
--- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndexedIndirectCountAMD',
--- 'Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCountKHR',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdDrawIndirectByteCountEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount',
--- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndirectCountAMD',
--- 'Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndirectCountKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdFillBuffer',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysIndirectKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdUpdateBuffer',
--- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.cmdWriteBufferMarkerAMD',
--- 'Graphics.Vulkan.Core10.Memory.getDeviceMemoryCommitment',
--- 'Graphics.Vulkan.Core10.Query.getQueryPoolResults',
--- 'Graphics.Vulkan.Core10.Memory.mapMemory'
-type DeviceSize = Word64
-
diff --git a/src/Graphics/Vulkan/Core10/Buffer.hs b/src/Graphics/Vulkan/Core10/Buffer.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Buffer.hs
+++ /dev/null
@@ -1,461 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Buffer  ( createBuffer
-                                      , withBuffer
-                                      , destroyBuffer
-                                      , BufferCreateInfo(..)
-                                      ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address (BufferDeviceAddressCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferOpaqueCaptureAddressCreateInfo)
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationBufferCreateInfoNV)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateBuffer))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyBuffer))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryBufferCreateInfo)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.SharingMode (SharingMode)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateBuffer
-  :: FunPtr (Ptr Device_T -> Ptr (BufferCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Buffer -> IO Result) -> Ptr Device_T -> Ptr (BufferCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Buffer -> IO Result
-
--- | vkCreateBuffer - Create a new buffer object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the buffer object.
---
--- -   @pCreateInfo@ is a pointer to a 'BufferCreateInfo' structure
---     containing parameters affecting creation of the buffer.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pBuffer@ is a pointer to a 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle in which the resulting buffer object is returned.
---
--- == Valid Usage
---
--- -   If the @flags@ member of @pCreateInfo@ includes
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT',
---     creating this 'Graphics.Vulkan.Core10.Handles.Buffer' /must/ not
---     cause the total required sparse memory for all currently valid
---     sparse resources on the device to exceed
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@sparseAddressSpaceSize@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'BufferCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pBuffer@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Buffer', 'BufferCreateInfo',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-createBuffer :: forall a io . (PokeChain a, MonadIO io) => Device -> BufferCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Buffer)
-createBuffer device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateBuffer' = mkVkCreateBuffer (pVkCreateBuffer (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPBuffer <- ContT $ bracket (callocBytes @Buffer 8) free
-  r <- lift $ vkCreateBuffer' (deviceHandle (device)) pCreateInfo pAllocator (pPBuffer)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pBuffer <- lift $ peek @Buffer pPBuffer
-  pure $ (pBuffer)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createBuffer' and 'destroyBuffer'
---
--- To ensure that 'destroyBuffer' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withBuffer :: forall a io r . (PokeChain a, MonadIO io) => (io (Buffer) -> ((Buffer) -> io ()) -> r) -> Device -> BufferCreateInfo a -> Maybe AllocationCallbacks -> r
-withBuffer b device pCreateInfo pAllocator =
-  b (createBuffer device pCreateInfo pAllocator)
-    (\(o0) -> destroyBuffer device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyBuffer
-  :: FunPtr (Ptr Device_T -> Buffer -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Buffer -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyBuffer - Destroy a buffer object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @buffer@, either directly or
---     via a 'Graphics.Vulkan.Core10.Handles.BufferView', /must/ have
---     completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @buffer@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @buffer@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @buffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-destroyBuffer :: forall io . MonadIO io => Device -> Buffer -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyBuffer device buffer allocator = liftIO . evalContT $ do
-  let vkDestroyBuffer' = mkVkDestroyBuffer (pVkDestroyBuffer (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyBuffer' (deviceHandle (device)) (buffer) pAllocator
-  pure $ ()
-
-
--- | VkBufferCreateInfo - Structure specifying the parameters of a newly
--- created buffer object
---
--- == Valid Usage
---
--- -   @size@ /must/ be greater than @0@
---
--- -   If @sharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
---     @queueFamilyIndexCount@ @uint32_t@ values
---
--- -   If @sharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     @queueFamilyIndexCount@ /must/ be greater than @1@
---
--- -   If @sharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     each element of @pQueueFamilyIndices@ /must/ be unique and /must/ be
---     less than @pQueueFamilyPropertyCount@ returned by either
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'
---     for the @physicalDevice@ that was used to create @device@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseBinding sparse bindings>
---     feature is not enabled, @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyBuffer sparse buffer residency>
---     feature is not enabled, @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyAliased sparse aliased residency>
---     feature is not enabled, @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT',
---     it /must/ also contain
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'
---     structure, its @handleTypes@ member /must/ only contain bits that
---     are also in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'::@externalMemoryProperties.compatibleHandleTypes@,
---     as returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferProperties'
---     with @pExternalBufferInfo->handleType@ equal to any one of the
---     handle types specified in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
---
--- -   If the protected memory feature is not enabled, @flags@ /must/ not
---     contain
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT'
---
--- -   If any of the bits
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT',
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT'
---     are set,
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT'
---     /must/ not also be set
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV'
---     structure, and the @dedicatedAllocation@ member of the chained
---     structure is 'Graphics.Vulkan.Core10.BaseType.TRUE', then @flags@
---     /must/ not include
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT',
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT'
---
--- -   If
---     'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT'::@deviceAddress@
---     is not zero, @flags@ /must/ include
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
---
--- -   If
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo'::@opaqueCaptureAddress@
---     is not zero, @flags@ /must/ include
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT',
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressCaptureReplay bufferDeviceAddressCaptureReplay>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressCaptureReplayEXT ::bufferDeviceAddressCaptureReplay>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo',
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV',
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlagBits'
---     values
---
--- -   @usage@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlagBits'
---     values
---
--- -   @usage@ /must/ not be @0@
---
--- -   @sharingMode@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SharingMode' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlags',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.SharingMode.SharingMode',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createBuffer'
-data BufferCreateInfo (es :: [Type]) = BufferCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlagBits'
-    -- specifying additional parameters of the buffer.
-    flags :: BufferCreateFlags
-  , -- | @size@ is the size in bytes of the buffer to be created.
-    size :: DeviceSize
-  , -- | @usage@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlagBits'
-    -- specifying allowed usages of the buffer.
-    usage :: BufferUsageFlags
-  , -- | @sharingMode@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.SharingMode.SharingMode' value specifying
-    -- the sharing mode of the buffer when it will be accessed by multiple
-    -- queue families.
-    sharingMode :: SharingMode
-  , -- | @pQueueFamilyIndices@ is a list of queue families that will access this
-    -- buffer (ignored if @sharingMode@ is not
-    -- 'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT').
-    queueFamilyIndices :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (BufferCreateInfo es)
-
-instance Extensible BufferCreateInfo where
-  extensibleType = STRUCTURE_TYPE_BUFFER_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext BufferCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends BufferCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @BufferDeviceAddressCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @BufferOpaqueCaptureAddressCreateInfo = Just f
-    | Just Refl <- eqT @e @ExternalMemoryBufferCreateInfo = Just f
-    | Just Refl <- eqT @e @DedicatedAllocationBufferCreateInfoNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (BufferCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BufferCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr BufferCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (size)
-    lift $ poke ((p `plusPtr` 32 :: Ptr BufferUsageFlags)) (usage)
-    lift $ poke ((p `plusPtr` 36 :: Ptr SharingMode)) (sharingMode)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueFamilyIndices)) :: Word32))
-    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (queueFamilyIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (queueFamilyIndices)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
-    lift $ f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr BufferUsageFlags)) (zero)
-    lift $ poke ((p `plusPtr` 36 :: Ptr SharingMode)) (zero)
-    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
-    lift $ f
-
-instance PeekChain es => FromCStruct (BufferCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @BufferCreateFlags ((p `plusPtr` 16 :: Ptr BufferCreateFlags))
-    size <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    usage <- peek @BufferUsageFlags ((p `plusPtr` 32 :: Ptr BufferUsageFlags))
-    sharingMode <- peek @SharingMode ((p `plusPtr` 36 :: Ptr SharingMode))
-    queueFamilyIndexCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    pQueueFamilyIndices <- peek @(Ptr Word32) ((p `plusPtr` 48 :: Ptr (Ptr Word32)))
-    pQueueFamilyIndices' <- generateM (fromIntegral queueFamilyIndexCount) (\i -> peek @Word32 ((pQueueFamilyIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ BufferCreateInfo
-             next flags size usage sharingMode pQueueFamilyIndices'
-
-instance es ~ '[] => Zero (BufferCreateInfo es) where
-  zero = BufferCreateInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core10/Buffer.hs-boot b/src/Graphics/Vulkan/Core10/Buffer.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Buffer.hs-boot
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Buffer  (BufferCreateInfo) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role BufferCreateInfo nominal
-data BufferCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (BufferCreateInfo es)
-instance Show (Chain es) => Show (BufferCreateInfo es)
-
-instance PeekChain es => FromCStruct (BufferCreateInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/BufferView.hs b/src/Graphics/Vulkan/Core10/BufferView.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/BufferView.hs
+++ /dev/null
@@ -1,390 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.BufferView  ( createBufferView
-                                          , withBufferView
-                                          , destroyBufferView
-                                          , BufferViewCreateInfo(..)
-                                          ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (BufferView)
-import Graphics.Vulkan.Core10.Handles (BufferView(..))
-import Graphics.Vulkan.Core10.Enums.BufferViewCreateFlags (BufferViewCreateFlags)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateBufferView))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyBufferView))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateBufferView
-  :: FunPtr (Ptr Device_T -> Ptr BufferViewCreateInfo -> Ptr AllocationCallbacks -> Ptr BufferView -> IO Result) -> Ptr Device_T -> Ptr BufferViewCreateInfo -> Ptr AllocationCallbacks -> Ptr BufferView -> IO Result
-
--- | vkCreateBufferView - Create a new buffer view object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the buffer view.
---
--- -   @pCreateInfo@ is a pointer to a 'BufferViewCreateInfo' structure
---     containing parameters to be used to create the buffer.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pView@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.BufferView' handle in which the
---     resulting buffer view object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'BufferViewCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pView@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.BufferView' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.BufferView', 'BufferViewCreateInfo',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-createBufferView :: forall io . MonadIO io => Device -> BufferViewCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (BufferView)
-createBufferView device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateBufferView' = mkVkCreateBufferView (pVkCreateBufferView (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPView <- ContT $ bracket (callocBytes @BufferView 8) free
-  r <- lift $ vkCreateBufferView' (deviceHandle (device)) pCreateInfo pAllocator (pPView)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pView <- lift $ peek @BufferView pPView
-  pure $ (pView)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createBufferView' and 'destroyBufferView'
---
--- To ensure that 'destroyBufferView' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withBufferView :: forall io r . MonadIO io => (io (BufferView) -> ((BufferView) -> io ()) -> r) -> Device -> BufferViewCreateInfo -> Maybe AllocationCallbacks -> r
-withBufferView b device pCreateInfo pAllocator =
-  b (createBufferView device pCreateInfo pAllocator)
-    (\(o0) -> destroyBufferView device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyBufferView
-  :: FunPtr (Ptr Device_T -> BufferView -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> BufferView -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyBufferView - Destroy a buffer view object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @bufferView@ /must/ have
---     completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @bufferView@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @bufferView@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @bufferView@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @bufferView@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.BufferView' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.BufferView',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-destroyBufferView :: forall io . MonadIO io => Device -> BufferView -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyBufferView device bufferView allocator = liftIO . evalContT $ do
-  let vkDestroyBufferView' = mkVkDestroyBufferView (pVkDestroyBufferView (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyBufferView' (deviceHandle (device)) (bufferView) pAllocator
-  pure $ ()
-
-
--- | VkBufferViewCreateInfo - Structure specifying parameters of a newly
--- created buffer view
---
--- == Valid Usage
---
--- -   @offset@ /must/ be less than the size of @buffer@
---
--- -   If @range@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @range@ /must/ be
---     greater than @0@
---
--- -   If @range@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @range@ /must/ be
---     an integer multiple of the texel block size of @format@
---
--- -   If @range@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @range@ divided by
---     the texel block size of @format@, multiplied by the number of texels
---     per texel block for that format (as defined in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility Compatible Formats>
---     table), /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTexelBufferElements@
---
--- -   If @range@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.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
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT'
---
--- -   If @buffer@ was created with @usage@ containing
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT',
---     @format@ /must/ be supported for uniform texel buffers, as specified
---     by the
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT'
---     flag in
---     'Graphics.Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
---     returned by
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
---
--- -   If @buffer@ was created with @usage@ containing
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT',
---     @format@ /must/ be supported for storage texel buffers, as specified
---     by the
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT'
---     flag in
---     'Graphics.Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
---     returned by
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>
---     feature is not enabled, @offset@ /must/ be a multiple of
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minTexelBufferOffsetAlignment@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>
---     feature is enabled and if @buffer@ was created with @usage@
---     containing
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT',
---     @offset@ /must/ be a multiple of the lesser of
---     'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT'::@storageTexelBufferOffsetAlignmentBytes@
---     or, if
---     'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT'::@storageTexelBufferOffsetSingleTexelAlignment@
---     is 'Graphics.Vulkan.Core10.BaseType.TRUE', the size of a texel of
---     the requested @format@. If the size of a texel is a multiple of
---     three bytes, then the size of a single component of @format@ is used
---     instead
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>
---     feature is enabled and if @buffer@ was created with @usage@
---     containing
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT',
---     @offset@ /must/ be a multiple of the lesser of
---     'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT'::@uniformTexelBufferOffsetAlignmentBytes@
---     or, if
---     'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT'::@uniformTexelBufferOffsetSingleTexelAlignment@
---     is 'Graphics.Vulkan.Core10.BaseType.TRUE', the size of a texel of
---     the requested @format@. If the size of a texel is a multiple of
---     three bytes, then the size of a single component of @format@ is used
---     instead
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be @0@
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @format@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Enums.BufferViewCreateFlags.BufferViewCreateFlags',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createBufferView'
-data BufferViewCreateInfo = BufferViewCreateInfo
-  { -- | @flags@ is reserved for future use.
-    flags :: BufferViewCreateFlags
-  , -- | @buffer@ is a 'Graphics.Vulkan.Core10.Handles.Buffer' on which the view
-    -- will be created.
-    buffer :: Buffer
-  , -- | @format@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format' describing
-    -- the format of the data elements in the buffer.
-    format :: Format
-  , -- | @offset@ is an offset in bytes from the base address of the buffer.
-    -- Accesses to the buffer view from shaders use addressing that is relative
-    -- to this starting offset.
-    offset :: DeviceSize
-  , -- | @range@ is a size in bytes of the buffer view. If @range@ is equal to
-    -- 'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', the range from
-    -- @offset@ to the end of the buffer is used. If
-    -- 'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE' is used and the
-    -- remaining size of the buffer is not a multiple of the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#texel-block-size texel block size>
-    -- of @format@, the nearest smaller multiple is used.
-    range :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show BufferViewCreateInfo
-
-instance ToCStruct BufferViewCreateInfo where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BufferViewCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr BufferViewCreateFlags)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr Buffer)) (buffer)
-    poke ((p `plusPtr` 32 :: Ptr Format)) (format)
-    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (offset)
-    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (range)
-    f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr Buffer)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Format)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct BufferViewCreateInfo where
-  peekCStruct p = do
-    flags <- peek @BufferViewCreateFlags ((p `plusPtr` 16 :: Ptr BufferViewCreateFlags))
-    buffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer))
-    format <- peek @Format ((p `plusPtr` 32 :: Ptr Format))
-    offset <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
-    range <- peek @DeviceSize ((p `plusPtr` 48 :: Ptr DeviceSize))
-    pure $ BufferViewCreateInfo
-             flags buffer format offset range
-
-instance Storable BufferViewCreateInfo where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BufferViewCreateInfo where
-  zero = BufferViewCreateInfo
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/BufferView.hs-boot b/src/Graphics/Vulkan/Core10/BufferView.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/BufferView.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.BufferView  (BufferViewCreateInfo) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data BufferViewCreateInfo
-
-instance ToCStruct BufferViewCreateInfo
-instance Show BufferViewCreateInfo
-
-instance FromCStruct BufferViewCreateInfo
-
diff --git a/src/Graphics/Vulkan/Core10/CommandBuffer.hs b/src/Graphics/Vulkan/Core10/CommandBuffer.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/CommandBuffer.hs
+++ /dev/null
@@ -1,874 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.CommandBuffer  ( allocateCommandBuffers
-                                             , withCommandBuffers
-                                             , freeCommandBuffers
-                                             , beginCommandBuffer
-                                             , useCommandBuffer
-                                             , endCommandBuffer
-                                             , resetCommandBuffer
-                                             , CommandBufferAllocateInfo(..)
-                                             , CommandBufferInheritanceInfo(..)
-                                             , CommandBufferBeginInfo(..)
-                                             ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Extends (forgetExtensions)
-import Graphics.Vulkan.CStruct.Extends (peekSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (withSomeCStruct)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering (CommandBufferInheritanceConditionalRenderingInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform (CommandBufferInheritanceRenderPassTransformInfoQCOM)
-import Graphics.Vulkan.Core10.Enums.CommandBufferLevel (CommandBufferLevel)
-import Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits (CommandBufferResetFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits (CommandBufferResetFlags)
-import Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits (CommandBufferUsageFlags)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Core10.Handles (CommandPool)
-import Graphics.Vulkan.Core10.Handles (CommandPool(..))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkAllocateCommandBuffers))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkBeginCommandBuffer))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkEndCommandBuffer))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkFreeCommandBuffers))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkResetCommandBuffer))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupCommandBufferBeginInfo)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.Handles (Framebuffer)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlags)
-import Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits (QueryPipelineStatisticFlags)
-import Graphics.Vulkan.Core10.Handles (RenderPass)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.CStruct.Extends (SomeStruct)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkAllocateCommandBuffers
-  :: FunPtr (Ptr Device_T -> Ptr CommandBufferAllocateInfo -> Ptr (Ptr CommandBuffer_T) -> IO Result) -> Ptr Device_T -> Ptr CommandBufferAllocateInfo -> Ptr (Ptr CommandBuffer_T) -> IO Result
-
--- | vkAllocateCommandBuffers - Allocate command buffers from an existing
--- command pool
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the command pool.
---
--- -   @pAllocateInfo@ is a pointer to a 'CommandBufferAllocateInfo'
---     structure describing parameters of the allocation.
---
--- -   @pCommandBuffers@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' 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
---
--- 'allocateCommandBuffers' /can/ be used to create multiple command
--- buffers. If the creation of any of those command buffers fails, the
--- implementation /must/ destroy all successfully created command buffer
--- objects from this command, set all entries of the @pCommandBuffers@
--- array to @NULL@ and return the error.
---
--- When command buffers are first allocated, they are in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pAllocateInfo@ /must/ be a valid pointer to a valid
---     'CommandBufferAllocateInfo' structure
---
--- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
---     @pAllocateInfo->commandBufferCount@
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handles
---
--- -   The value referenced by @pAllocateInfo->commandBufferCount@ /must/
---     be greater than @0@
---
--- == Host Synchronization
---
--- -   Host access to @pAllocateInfo->commandPool@ /must/ be externally
---     synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'CommandBufferAllocateInfo', 'Graphics.Vulkan.Core10.Handles.Device'
-allocateCommandBuffers :: forall io . MonadIO io => Device -> CommandBufferAllocateInfo -> io (("commandBuffers" ::: Vector CommandBuffer))
-allocateCommandBuffers device allocateInfo = liftIO . evalContT $ do
-  let cmds = deviceCmds (device :: Device)
-  let vkAllocateCommandBuffers' = mkVkAllocateCommandBuffers (pVkAllocateCommandBuffers cmds)
-  pAllocateInfo <- ContT $ withCStruct (allocateInfo)
-  pPCommandBuffers <- ContT $ bracket (callocBytes @(Ptr CommandBuffer_T) ((fromIntegral $ commandBufferCount ((allocateInfo) :: CommandBufferAllocateInfo)) * 8)) free
-  r <- lift $ vkAllocateCommandBuffers' (deviceHandle (device)) pAllocateInfo (pPCommandBuffers)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pCommandBuffers <- lift $ generateM (fromIntegral $ commandBufferCount ((allocateInfo) :: CommandBufferAllocateInfo)) (\i -> do
-    pCommandBuffersElem <- peek @(Ptr CommandBuffer_T) ((pPCommandBuffers `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)))
-    pure $ (\h -> CommandBuffer h cmds ) pCommandBuffersElem)
-  pure $ (pCommandBuffers)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'allocateCommandBuffers' and 'freeCommandBuffers'
---
--- To ensure that 'freeCommandBuffers' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withCommandBuffers :: forall io r . MonadIO io => (io (Vector CommandBuffer) -> ((Vector CommandBuffer) -> io ()) -> r) -> Device -> CommandBufferAllocateInfo -> r
-withCommandBuffers b device pAllocateInfo =
-  b (allocateCommandBuffers device pAllocateInfo)
-    (\(o0) -> freeCommandBuffers device (commandPool (pAllocateInfo :: CommandBufferAllocateInfo)) o0)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkFreeCommandBuffers
-  :: FunPtr (Ptr Device_T -> CommandPool -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()) -> Ptr Device_T -> CommandPool -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()
-
--- | vkFreeCommandBuffers - Free command buffers
---
--- = 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 a pointer to an array of handles of command
---     buffers to free.
---
--- = Description
---
--- Any primary command buffer that is in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or executable state>
--- and has any element of @pCommandBuffers@ recorded into it, becomes
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
---
--- == Valid Usage
---
--- -   All elements of @pCommandBuffers@ /must/ not be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
---
--- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
---     @commandBufferCount@ 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
---     handles, each element of which /must/ either be a valid handle or
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @commandPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandPool' 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
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandPool',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-freeCommandBuffers :: forall io . MonadIO io => Device -> CommandPool -> ("commandBuffers" ::: Vector CommandBuffer) -> io ()
-freeCommandBuffers device commandPool commandBuffers = liftIO . evalContT $ do
-  let vkFreeCommandBuffers' = mkVkFreeCommandBuffers (pVkFreeCommandBuffers (deviceCmds (device :: Device)))
-  pPCommandBuffers <- ContT $ allocaBytesAligned @(Ptr CommandBuffer_T) ((Data.Vector.length (commandBuffers)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBuffers `plusPtr` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)) (commandBufferHandle (e))) (commandBuffers)
-  lift $ vkFreeCommandBuffers' (deviceHandle (device)) (commandPool) ((fromIntegral (Data.Vector.length $ (commandBuffers)) :: Word32)) (pPCommandBuffers)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkBeginCommandBuffer
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (CommandBufferBeginInfo a) -> IO Result) -> Ptr CommandBuffer_T -> Ptr (CommandBufferBeginInfo a) -> IO Result
-
--- | vkBeginCommandBuffer - Start recording a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the handle of the command buffer which is to be
---     put in the recording state.
---
--- -   @pBeginInfo@ points to a 'CommandBufferBeginInfo' structure defining
---     additional information about how the command buffer begins
---     recording.
---
--- == Valid Usage
---
--- -   @commandBuffer@ /must/ not be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or pending state>
---
--- -   If @commandBuffer@ was allocated from a
---     'Graphics.Vulkan.Core10.Handles.CommandPool' which did not have the
---     'Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits.COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT'
---     flag set, @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>
---
--- -   If @commandBuffer@ is a secondary command buffer, the
---     @pInheritanceInfo@ member of @pBeginInfo@ /must/ be a valid
---     'CommandBufferInheritanceInfo' structure
---
--- -   If @commandBuffer@ is a secondary command buffer and either the
---     @occlusionQueryEnable@ member of the @pInheritanceInfo@ member of
---     @pBeginInfo@ is 'Graphics.Vulkan.Core10.BaseType.FALSE', or the
---     precise occlusion queries feature is not enabled, the @queryFlags@
---     member of the @pInheritanceInfo@ member @pBeginInfo@ /must/ not
---     contain
---     'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'
---
--- -   If @commandBuffer@ is a primary command buffer, then
---     @pBeginInfo->flags@ /must/ not set both the
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT'
---     and the
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
---     flags
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pBeginInfo@ /must/ be a valid pointer to a valid
---     'CommandBufferBeginInfo' structure
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'CommandBufferBeginInfo'
-beginCommandBuffer :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> CommandBufferBeginInfo a -> io ()
-beginCommandBuffer commandBuffer beginInfo = liftIO . evalContT $ do
-  let vkBeginCommandBuffer' = mkVkBeginCommandBuffer (pVkBeginCommandBuffer (deviceCmds (commandBuffer :: CommandBuffer)))
-  pBeginInfo <- ContT $ withCStruct (beginInfo)
-  r <- lift $ vkBeginCommandBuffer' (commandBufferHandle (commandBuffer)) pBeginInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'beginCommandBuffer' and 'endCommandBuffer'
---
--- To ensure that 'endCommandBuffer' is always called: pass
--- 'Control.Exception.bracket_' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
--- Note that there is no inner resource
-useCommandBuffer :: forall a io r . (PokeChain a, MonadIO io) => (io () -> io () -> r) -> CommandBuffer -> CommandBufferBeginInfo a -> r
-useCommandBuffer b commandBuffer pBeginInfo =
-  b (beginCommandBuffer commandBuffer pBeginInfo)
-    (endCommandBuffer commandBuffer)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkEndCommandBuffer
-  :: FunPtr (Ptr CommandBuffer_T -> IO Result) -> Ptr CommandBuffer_T -> IO Result
-
--- | vkEndCommandBuffer - Finish recording a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer to complete recording.
---
--- = Description
---
--- If there was an error during recording, the application will be notified
--- by an unsuccessful return code returned by 'endCommandBuffer'. If the
--- application wishes to further use the command buffer, the command buffer
--- /must/ be reset. The command buffer /must/ have been in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>,
--- and is moved to the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable state>.
---
--- == Valid Usage
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   If @commandBuffer@ is a primary command buffer, there /must/ not be
---     an active render pass instance
---
--- -   All queries made
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
---     during the recording of @commandBuffer@ /must/ have been made
---     inactive
---
--- -   Conditional rendering /must/ not be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active>
---
--- -   If @commandBuffer@ is a secondary command buffer, there /must/ not
---     be an outstanding
---     'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.cmdBeginDebugUtilsLabelEXT'
---     command recorded to @commandBuffer@ that has not previously been
---     ended by a call to
---     'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.cmdEndDebugUtilsLabelEXT'
---
--- -   If @commandBuffer@ is a secondary command buffer, there /must/ not
---     be an outstanding
---     'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerBeginEXT'
---     command recorded to @commandBuffer@ that has not previously been
---     ended by a call to
---     'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerEndEXT'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-endCommandBuffer :: forall io . MonadIO io => CommandBuffer -> io ()
-endCommandBuffer commandBuffer = liftIO $ do
-  let vkEndCommandBuffer' = mkVkEndCommandBuffer (pVkEndCommandBuffer (deviceCmds (commandBuffer :: CommandBuffer)))
-  r <- vkEndCommandBuffer' (commandBufferHandle (commandBuffer))
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkResetCommandBuffer
-  :: FunPtr (Ptr CommandBuffer_T -> CommandBufferResetFlags -> IO Result) -> Ptr CommandBuffer_T -> CommandBufferResetFlags -> IO Result
-
--- | vkResetCommandBuffer - Reset a command buffer to the initial state
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer to reset. The command buffer
---     /can/ be in any state other than
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending>,
---     and is moved into the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>.
---
--- -   @flags@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits.CommandBufferResetFlagBits'
---     controlling the reset operation.
---
--- = Description
---
--- Any primary command buffer that is in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or executable state>
--- and has @commandBuffer@ recorded into it, becomes
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
---
--- == Valid Usage
---
--- -   @commandBuffer@ /must/ not be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
---
--- -   @commandBuffer@ /must/ have been allocated from a pool that was
---     created with the
---     'Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits.COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits.CommandBufferResetFlagBits'
---     values
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits.CommandBufferResetFlags'
-resetCommandBuffer :: forall io . MonadIO io => CommandBuffer -> CommandBufferResetFlags -> io ()
-resetCommandBuffer commandBuffer flags = liftIO $ do
-  let vkResetCommandBuffer' = mkVkResetCommandBuffer (pVkResetCommandBuffer (deviceCmds (commandBuffer :: CommandBuffer)))
-  r <- vkResetCommandBuffer' (commandBufferHandle (commandBuffer)) (flags)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkCommandBufferAllocateInfo - Structure specifying the allocation
--- parameters for command buffer object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.CommandBufferLevel.CommandBufferLevel',
--- 'Graphics.Vulkan.Core10.Handles.CommandPool',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'allocateCommandBuffers'
-data CommandBufferAllocateInfo = CommandBufferAllocateInfo
-  { -- | @commandPool@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Handles.CommandPool' handle
-    commandPool :: CommandPool
-  , -- | @level@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.CommandBufferLevel.CommandBufferLevel'
-    -- value
-    level :: CommandBufferLevel
-  , -- | @commandBufferCount@ /must/ be greater than @0@
-    commandBufferCount :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show CommandBufferAllocateInfo
-
-instance ToCStruct CommandBufferAllocateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CommandBufferAllocateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr CommandPool)) (commandPool)
-    poke ((p `plusPtr` 24 :: Ptr CommandBufferLevel)) (level)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (commandBufferCount)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr CommandPool)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr CommandBufferLevel)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct CommandBufferAllocateInfo where
-  peekCStruct p = do
-    commandPool <- peek @CommandPool ((p `plusPtr` 16 :: Ptr CommandPool))
-    level <- peek @CommandBufferLevel ((p `plusPtr` 24 :: Ptr CommandBufferLevel))
-    commandBufferCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    pure $ CommandBufferAllocateInfo
-             commandPool level commandBufferCount
-
-instance Storable CommandBufferAllocateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero CommandBufferAllocateInfo where
-  zero = CommandBufferAllocateInfo
-           zero
-           zero
-           zero
-
-
--- | VkCommandBufferInheritanceInfo - Structure specifying command buffer
--- inheritance info
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>
---     feature is not enabled, @occlusionQueryEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>
---     feature is enabled, @queryFlags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'
---     values
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>
---     feature is not enabled, @queryFlags@ /must/ be @0@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineStatisticsQuery pipeline statistics queries>
---     feature is enabled, @pipelineStatistics@ /must/ be a valid
---     combination of
---     'Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'
---     values
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineStatisticsQuery pipeline statistics queries>
---     feature is not enabled, @pipelineStatistics@ /must/ be @0@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.CommandBufferInheritanceConditionalRenderingInfoEXT'
---     or
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   Both of @framebuffer@, and @renderPass@ that are valid handles of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32', 'CommandBufferBeginInfo',
--- 'Graphics.Vulkan.Core10.Handles.Framebuffer',
--- 'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlags',
--- 'Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlags',
--- 'Graphics.Vulkan.Core10.Handles.RenderPass',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data CommandBufferInheritanceInfo (es :: [Type]) = CommandBufferInheritanceInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @renderPass@ is a 'Graphics.Vulkan.Core10.Handles.RenderPass' object
-    -- defining which render passes the
-    -- 'Graphics.Vulkan.Core10.Handles.CommandBuffer' will be
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
-    -- with and /can/ be executed within. If the
-    -- 'Graphics.Vulkan.Core10.Handles.CommandBuffer' will not be executed
-    -- within a render pass instance, @renderPass@ is ignored.
-    renderPass :: RenderPass
-  , -- | @subpass@ is the index of the subpass within the render pass instance
-    -- that the 'Graphics.Vulkan.Core10.Handles.CommandBuffer' will be executed
-    -- within. If the 'Graphics.Vulkan.Core10.Handles.CommandBuffer' will not
-    -- be executed within a render pass instance, @subpass@ is ignored.
-    subpass :: Word32
-  , -- | @framebuffer@ optionally refers to the
-    -- 'Graphics.Vulkan.Core10.Handles.Framebuffer' object that the
-    -- 'Graphics.Vulkan.Core10.Handles.CommandBuffer' will be rendering to if
-    -- it is executed within a render pass instance. It /can/ be
-    -- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' if the framebuffer is
-    -- not known, or if the 'Graphics.Vulkan.Core10.Handles.CommandBuffer' 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.
-    framebuffer :: Framebuffer
-  , -- | @occlusionQueryEnable@ specifies whether the command buffer /can/ be
-    -- executed while an occlusion query is active in the primary command
-    -- buffer. If this is 'Graphics.Vulkan.Core10.BaseType.TRUE', then this
-    -- command buffer /can/ be executed whether the primary command buffer has
-    -- an occlusion query active or not. If this is
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', then the primary command buffer
-    -- /must/ not have an occlusion query active.
-    occlusionQueryEnable :: Bool
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.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
-    -- 'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'
-    -- bit.
-    queryFlags :: QueryControlFlags
-  , -- | @pipelineStatistics@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'
-    -- 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.
-    pipelineStatistics :: QueryPipelineStatisticFlags
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (CommandBufferInheritanceInfo es)
-
-instance Extensible CommandBufferInheritanceInfo where
-  extensibleType = STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO
-  setNext x next = x{next = next}
-  getNext CommandBufferInheritanceInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CommandBufferInheritanceInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @CommandBufferInheritanceRenderPassTransformInfoQCOM = Just f
-    | Just Refl <- eqT @e @CommandBufferInheritanceConditionalRenderingInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (CommandBufferInheritanceInfo es) where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CommandBufferInheritanceInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPass)) (renderPass)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (subpass)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Framebuffer)) (framebuffer)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (occlusionQueryEnable))
-    lift $ poke ((p `plusPtr` 44 :: Ptr QueryControlFlags)) (queryFlags)
-    lift $ poke ((p `plusPtr` 48 :: Ptr QueryPipelineStatisticFlags)) (pipelineStatistics)
-    lift $ f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance PeekChain es => FromCStruct (CommandBufferInheritanceInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    renderPass <- peek @RenderPass ((p `plusPtr` 16 :: Ptr RenderPass))
-    subpass <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    framebuffer <- peek @Framebuffer ((p `plusPtr` 32 :: Ptr Framebuffer))
-    occlusionQueryEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    queryFlags <- peek @QueryControlFlags ((p `plusPtr` 44 :: Ptr QueryControlFlags))
-    pipelineStatistics <- peek @QueryPipelineStatisticFlags ((p `plusPtr` 48 :: Ptr QueryPipelineStatisticFlags))
-    pure $ CommandBufferInheritanceInfo
-             next renderPass subpass framebuffer (bool32ToBool occlusionQueryEnable) queryFlags pipelineStatistics
-
-instance es ~ '[] => Zero (CommandBufferInheritanceInfo es) where
-  zero = CommandBufferInheritanceInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkCommandBufferBeginInfo - Structure specifying a command buffer begin
--- operation
---
--- == Valid Usage
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT',
---     the @renderPass@ member of @pInheritanceInfo@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.RenderPass'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT',
---     the @subpass@ member of @pInheritanceInfo@ /must/ be a valid subpass
---     index within the @renderPass@ member of @pInheritanceInfo@
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT',
---     the @framebuffer@ member of @pInheritanceInfo@ /must/ be either
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', or a valid
---     'Graphics.Vulkan.Core10.Handles.Framebuffer' that is compatible with
---     the @renderPass@ member of @pInheritanceInfo@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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.DeviceGroupCommandBufferBeginInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.CommandBufferUsageFlagBits'
---     values
---
--- = See Also
---
--- 'CommandBufferInheritanceInfo',
--- 'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.CommandBufferUsageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'beginCommandBuffer'
-data CommandBufferBeginInfo (es :: [Type]) = CommandBufferBeginInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.CommandBufferUsageFlagBits'
-    -- specifying usage behavior for the command buffer.
-    flags :: CommandBufferUsageFlags
-  , -- | @pInheritanceInfo@ is a pointer to a 'CommandBufferInheritanceInfo'
-    -- structure, used if @commandBuffer@ is a secondary command buffer. If
-    -- this is a primary command buffer, then this value is ignored.
-    inheritanceInfo :: Maybe (SomeStruct CommandBufferInheritanceInfo)
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (CommandBufferBeginInfo es)
-
-instance Extensible CommandBufferBeginInfo where
-  extensibleType = STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
-  setNext x next = x{next = next}
-  getNext CommandBufferBeginInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CommandBufferBeginInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DeviceGroupCommandBufferBeginInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (CommandBufferBeginInfo es) where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CommandBufferBeginInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr CommandBufferUsageFlags)) (flags)
-    pInheritanceInfo'' <- case (inheritanceInfo) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (CommandBufferInheritanceInfo '[])) $ \cont -> withSomeCStruct @CommandBufferInheritanceInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (CommandBufferInheritanceInfo _)))) pInheritanceInfo''
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ f
-
-instance PeekChain es => FromCStruct (CommandBufferBeginInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @CommandBufferUsageFlags ((p `plusPtr` 16 :: Ptr CommandBufferUsageFlags))
-    pInheritanceInfo <- peek @(Ptr (CommandBufferInheritanceInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (CommandBufferInheritanceInfo a))))
-    pInheritanceInfo' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pInheritanceInfo
-    pure $ CommandBufferBeginInfo
-             next flags pInheritanceInfo'
-
-instance es ~ '[] => Zero (CommandBufferBeginInfo es) where
-  zero = CommandBufferBeginInfo
-           ()
-           zero
-           Nothing
-
diff --git a/src/Graphics/Vulkan/Core10/CommandBuffer.hs-boot b/src/Graphics/Vulkan/Core10/CommandBuffer.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/CommandBuffer.hs-boot
+++ /dev/null
@@ -1,37 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.CommandBuffer  ( CommandBufferAllocateInfo
-                                             , CommandBufferBeginInfo
-                                             , CommandBufferInheritanceInfo
-                                             ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data CommandBufferAllocateInfo
-
-instance ToCStruct CommandBufferAllocateInfo
-instance Show CommandBufferAllocateInfo
-
-instance FromCStruct CommandBufferAllocateInfo
-
-
-type role CommandBufferBeginInfo nominal
-data CommandBufferBeginInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (CommandBufferBeginInfo es)
-instance Show (Chain es) => Show (CommandBufferBeginInfo es)
-
-instance PeekChain es => FromCStruct (CommandBufferBeginInfo es)
-
-
-type role CommandBufferInheritanceInfo nominal
-data CommandBufferInheritanceInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (CommandBufferInheritanceInfo es)
-instance Show (Chain es) => Show (CommandBufferInheritanceInfo es)
-
-instance PeekChain es => FromCStruct (CommandBufferInheritanceInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs b/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs
+++ /dev/null
@@ -1,9572 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.CommandBufferBuilding  ( cmdBindPipeline
-                                                     , cmdSetViewport
-                                                     , cmdSetScissor
-                                                     , cmdSetLineWidth
-                                                     , cmdSetDepthBias
-                                                     , cmdSetBlendConstants
-                                                     , cmdSetDepthBounds
-                                                     , cmdSetStencilCompareMask
-                                                     , cmdSetStencilWriteMask
-                                                     , cmdSetStencilReference
-                                                     , cmdBindDescriptorSets
-                                                     , cmdBindIndexBuffer
-                                                     , cmdBindVertexBuffers
-                                                     , cmdDraw
-                                                     , cmdDrawIndexed
-                                                     , cmdDrawIndirect
-                                                     , cmdDrawIndexedIndirect
-                                                     , cmdDispatch
-                                                     , cmdDispatchIndirect
-                                                     , cmdCopyBuffer
-                                                     , cmdCopyImage
-                                                     , cmdBlitImage
-                                                     , cmdCopyBufferToImage
-                                                     , cmdCopyImageToBuffer
-                                                     , cmdUpdateBuffer
-                                                     , cmdFillBuffer
-                                                     , cmdClearColorImage
-                                                     , cmdClearDepthStencilImage
-                                                     , cmdClearAttachments
-                                                     , cmdResolveImage
-                                                     , cmdSetEvent
-                                                     , cmdResetEvent
-                                                     , cmdWaitEvents
-                                                     , cmdPipelineBarrier
-                                                     , cmdBeginQuery
-                                                     , cmdWithQuery
-                                                     , cmdEndQuery
-                                                     , cmdResetQueryPool
-                                                     , cmdWriteTimestamp
-                                                     , cmdCopyQueryPoolResults
-                                                     , cmdPushConstants
-                                                     , cmdBeginRenderPass
-                                                     , cmdWithRenderPass
-                                                     , cmdNextSubpass
-                                                     , cmdEndRenderPass
-                                                     , cmdExecuteCommands
-                                                     , Viewport(..)
-                                                     , Rect2D(..)
-                                                     , ClearRect(..)
-                                                     , BufferCopy(..)
-                                                     , ImageCopy(..)
-                                                     , ImageBlit(..)
-                                                     , BufferImageCopy(..)
-                                                     , ImageResolve(..)
-                                                     , RenderPassBeginInfo(..)
-                                                     , ClearAttachment(..)
-                                                     ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Foreign.C.Types (CFloat(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.Core10.OtherTypes (BufferMemoryBarrier)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.SharedTypes (ClearColorValue)
-import Graphics.Vulkan.Core10.SharedTypes (ClearDepthStencilValue)
-import Graphics.Vulkan.Core10.SharedTypes (ClearValue)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
-import Graphics.Vulkan.Core10.Handles (DescriptorSet)
-import Graphics.Vulkan.Core10.Handles (DescriptorSet(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBeginQuery))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBeginRenderPass))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBindDescriptorSets))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBindIndexBuffer))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBindPipeline))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBindVertexBuffers))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBlitImage))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdClearAttachments))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdClearColorImage))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdClearDepthStencilImage))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdCopyBuffer))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdCopyBufferToImage))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdCopyImage))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdCopyImageToBuffer))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdCopyQueryPoolResults))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDispatch))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDispatchIndirect))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDraw))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndexed))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndexedIndirect))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndirect))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdEndQuery))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdEndRenderPass))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdExecuteCommands))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdFillBuffer))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdNextSubpass))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdPipelineBarrier))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdPushConstants))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdResetEvent))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdResetQueryPool))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdResolveImage))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetBlendConstants))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetDepthBias))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetDepthBounds))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetEvent))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetLineWidth))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetScissor))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetStencilCompareMask))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetStencilReference))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetStencilWriteMask))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetViewport))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdUpdateBuffer))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdWaitEvents))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdWriteTimestamp))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupRenderPassBeginInfo)
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Event)
-import Graphics.Vulkan.Core10.Handles (Event(..))
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import Graphics.Vulkan.Core10.SharedTypes (Extent3D)
-import Graphics.Vulkan.Core10.Enums.Filter (Filter)
-import Graphics.Vulkan.Core10.Enums.Filter (Filter(..))
-import Graphics.Vulkan.Core10.Handles (Framebuffer)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.Core10.Handles (Image(..))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout)
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout(..))
-import Graphics.Vulkan.Core10.OtherTypes (ImageMemoryBarrier)
-import Graphics.Vulkan.Core10.SharedTypes (ImageSubresourceLayers)
-import Graphics.Vulkan.Core10.SharedTypes (ImageSubresourceRange)
-import Graphics.Vulkan.Core10.Enums.IndexType (IndexType)
-import Graphics.Vulkan.Core10.Enums.IndexType (IndexType(..))
-import Graphics.Vulkan.Core10.OtherTypes (MemoryBarrier)
-import Graphics.Vulkan.Core10.SharedTypes (Offset2D)
-import Graphics.Vulkan.Core10.SharedTypes (Offset3D)
-import Graphics.Vulkan.Core10.Handles (Pipeline)
-import Graphics.Vulkan.Core10.Handles (Pipeline(..))
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint(..))
-import Graphics.Vulkan.Core10.Handles (PipelineLayout)
-import Graphics.Vulkan.Core10.Handles (PipelineLayout(..))
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits)
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlags)
-import Graphics.Vulkan.Core10.Handles (QueryPool)
-import Graphics.Vulkan.Core10.Handles (QueryPool(..))
-import Graphics.Vulkan.Core10.Enums.QueryResultFlagBits (QueryResultFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.QueryResultFlagBits (QueryResultFlags)
-import Graphics.Vulkan.Core10.Handles (RenderPass)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (RenderPassAttachmentBeginInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (RenderPassSampleLocationsBeginInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform (RenderPassTransformBeginInfoQCOM)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits (StencilFaceFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits (StencilFaceFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Core10.Enums.SubpassContents (SubpassContents)
-import Graphics.Vulkan.Core10.Enums.SubpassContents (SubpassContents(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBindPipeline
-  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> IO ()
-
--- | vkCmdBindPipeline - Bind a pipeline object to a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer that the pipeline will be
---     bound to.
---
--- -   @pipelineBindPoint@ is a
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value specifying whether to bind to the compute or graphics bind
---     point. Binding one does not disturb the other.
---
--- -   @pipeline@ is the pipeline to be bound.
---
--- = Description
---
--- Once bound, a pipeline binding affects subsequent graphics or compute
--- commands in the command buffer until a different pipeline is bound to
--- the bind point. The pipeline bound to
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE'
--- controls the behavior of 'cmdDispatch' and 'cmdDispatchIndirect'. The
--- pipeline bound to
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
--- controls the behavior of all
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing drawing commands>.
--- The pipeline bound to
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR'
--- controls the behavior of
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysKHR'. No
--- other commands are affected by the pipeline state.
---
--- == Valid Usage
---
--- -   If @pipelineBindPoint@ is
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE',
---     the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   If @pipelineBindPoint@ is
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS',
---     the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   If @pipelineBindPoint@ is
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE',
---     @pipeline@ /must/ be a compute pipeline
---
--- -   If @pipelineBindPoint@ is
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS',
---     @pipeline@ /must/ be a graphics pipeline
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-variableMultisampleRate variable multisample rate>
---     feature is not supported, @pipeline@ is a graphics pipeline, the
---     current subpass
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments uses no attachments>,
---     and this is not the first call to this function with a graphics
---     pipeline after transitioning to the current subpass, then the sample
---     count specified by this pipeline /must/ match that set in the
---     previous pipeline
---
--- -   If
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
---     is 'Graphics.Vulkan.Core10.BaseType.FALSE', and @pipeline@ is a
---     graphics pipeline created with a
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---     structure having its @sampleLocationsEnable@ member set to
---     'Graphics.Vulkan.Core10.BaseType.TRUE' but without
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
---     enabled then the current render pass instance /must/ have been begun
---     by specifying a
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT'
---     structure whose @pPostSubpassSampleLocations@ member contains an
---     element with a @subpassIndex@ matching the current subpass index and
---     the @sampleLocationsInfo@ member of that element /must/ match the
---     @sampleLocationsInfo@ specified in
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---     when the pipeline was created
---
--- -   This command /must/ not be recorded when transform feedback is
---     active
---
--- -   If @pipelineBindPoint@ is
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR',
---     the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   If @pipelineBindPoint@ is
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR',
---     the @pipeline@ /must/ be a ray tracing pipeline
---
--- -   The @pipeline@ /must/ not have been created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
---     set
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value
---
--- -   @pipeline@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   Both of @commandBuffer@, and @pipeline@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
-cmdBindPipeline :: forall io . MonadIO io => CommandBuffer -> PipelineBindPoint -> Pipeline -> io ()
-cmdBindPipeline commandBuffer pipelineBindPoint pipeline = liftIO $ do
-  let vkCmdBindPipeline' = mkVkCmdBindPipeline (pVkCmdBindPipeline (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdBindPipeline' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (pipeline)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetViewport
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()
-
--- | vkCmdSetViewport - Set the viewport on a command buffer
---
--- = 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 'Viewport' structures
---     specifying viewport parameters.
---
--- = Description
---
--- The viewport parameters taken from element i of @pViewports@ replace the
--- current state for the viewport index @firstViewport@ + i, for i in [0,
--- @viewportCount@).
---
--- == Valid Usage
---
--- -   @firstViewport@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
---
--- -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@
---     and
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
---     inclusive
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @firstViewport@ /must/ be @0@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @viewportCount@ /must/ be @1@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pViewports@ /must/ be a valid pointer to an array of
---     @viewportCount@ valid 'Viewport' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   @viewportCount@ /must/ be greater than @0@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'Viewport'
-cmdSetViewport :: forall io . MonadIO io => CommandBuffer -> ("firstViewport" ::: Word32) -> ("viewports" ::: Vector Viewport) -> io ()
-cmdSetViewport commandBuffer firstViewport viewports = liftIO . evalContT $ do
-  let vkCmdSetViewport' = mkVkCmdSetViewport (pVkCmdSetViewport (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPViewports <- ContT $ allocaBytesAligned @Viewport ((Data.Vector.length (viewports)) * 24) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e) . ($ ())) (viewports)
-  lift $ vkCmdSetViewport' (commandBufferHandle (commandBuffer)) (firstViewport) ((fromIntegral (Data.Vector.length $ (viewports)) :: Word32)) (pPViewports)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetScissor
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()
-
--- | vkCmdSetScissor - Set the dynamic scissor rectangles on a command buffer
---
--- = 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 'Rect2D' structures defining
---     scissor rectangles.
---
--- = Description
---
--- The scissor rectangles taken from element i of @pScissors@ replace the
--- current state for the scissor index @firstScissor@ + i, for i in [0,
--- @scissorCount@).
---
--- Each scissor rectangle is described by a 'Rect2D' 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.
---
--- If a render pass transform is enabled, the (@offset.x@ and @offset.y@)
--- and (@extent.width@ and @extent.height@) values are transformed as
--- described in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>
--- before participating in the scissor test.
---
--- == Valid Usage
---
--- -   @firstScissor@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
---
--- -   The sum of @firstScissor@ and @scissorCount@ /must/ be between @1@
---     and
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
---     inclusive
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @firstScissor@ /must/ be @0@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @scissorCount@ /must/ be @1@
---
--- -   The @x@ and @y@ members of @offset@ member of any element of
---     @pScissors@ /must/ be greater than or equal to @0@
---
--- -   Evaluation of (@offset.x@ + @extent.width@) /must/ not cause a
---     signed integer addition overflow for any element of @pScissors@
---
--- -   Evaluation of (@offset.y@ + @extent.height@) /must/ not cause a
---     signed integer addition overflow for any element of @pScissors@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pScissors@ /must/ be a valid pointer to an array of @scissorCount@
---     'Rect2D' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   @scissorCount@ /must/ be greater than @0@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'Rect2D'
-cmdSetScissor :: forall io . MonadIO io => CommandBuffer -> ("firstScissor" ::: Word32) -> ("scissors" ::: Vector Rect2D) -> io ()
-cmdSetScissor commandBuffer firstScissor scissors = liftIO . evalContT $ do
-  let vkCmdSetScissor' = mkVkCmdSetScissor (pVkCmdSetScissor (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPScissors <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (scissors)) * 16) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (scissors)
-  lift $ vkCmdSetScissor' (commandBufferHandle (commandBuffer)) (firstScissor) ((fromIntegral (Data.Vector.length $ (scissors)) :: Word32)) (pPScissors)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetLineWidth
-  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> IO ()
-
--- | vkCmdSetLineWidth - Set the dynamic line width state
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @lineWidth@ is the width of rasterized line segments.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-wideLines wide lines>
---     feature is not enabled, @lineWidth@ /must/ be @1.0@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdSetLineWidth :: forall io . MonadIO io => CommandBuffer -> ("lineWidth" ::: Float) -> io ()
-cmdSetLineWidth commandBuffer lineWidth = liftIO $ do
-  let vkCmdSetLineWidth' = mkVkCmdSetLineWidth (pVkCmdSetLineWidth (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdSetLineWidth' (commandBufferHandle (commandBuffer)) (CFloat (lineWidth))
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetDepthBias
-  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()
-
--- | vkCmdSetDepthBias - Set the depth bias dynamic state
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @depthBiasConstantFactor@ is a scalar factor controlling the
---     constant depth value added to each fragment.
---
--- -   @depthBiasClamp@ is the maximum (or minimum) depth bias of a
---     fragment.
---
--- -   @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s
---     slope in depth bias calculations.
---
--- = Description
---
--- If @depthBiasEnable@ is 'Graphics.Vulkan.Core10.BaseType.FALSE', no
--- depth bias is applied and the fragment’s depth values are unchanged.
---
--- @depthBiasSlopeFactor@ scales the maximum depth slope of the polygon,
--- and @depthBiasConstantFactor@ scales an implementation-dependent
--- constant that relates to the usable resolution of the depth buffer. The
--- resulting values are summed to produce the depth bias value which is
--- then clamped to a minimum or maximum value specified by
--- @depthBiasClamp@. @depthBiasSlopeFactor@, @depthBiasConstantFactor@, and
--- @depthBiasClamp@ /can/ each be positive, negative, or zero.
---
--- The maximum depth slope m of a triangle is
---
--- \[m = \sqrt{ \left({{\partial z_f} \over {\partial x_f}}\right)^2
---         +  \left({{\partial z_f} \over {\partial y_f}}\right)^2}\]
---
--- where (xf, yf, zf) is a point on the triangle. m /may/ be approximated
--- as
---
--- \[m = \max\left( \left| { {\partial z_f} \over {\partial x_f} } \right|,
---                \left| { {\partial z_f} \over {\partial y_f} } \right|
---        \right).\]
---
--- The minimum resolvable difference r is an implementation-dependent
--- parameter that depends on the depth buffer representation. It is the
--- smallest difference in framebuffer coordinate z values that is
--- guaranteed to remain distinct throughout polygon rasterization and in
--- the depth buffer. All pairs of fragments generated by the rasterization
--- of two polygons with otherwise identical vertices, but @z@f values that
--- differ by r, will have distinct depth values.
---
--- For fixed-point depth buffer representations, r is constant throughout
--- the range of the entire depth buffer. For floating-point depth buffers,
--- there is no single minimum resolvable difference. In this case, the
--- minimum resolvable difference for a given polygon is dependent on the
--- maximum exponent, e, in the range of z values spanned by the primitive.
--- If n is the number of bits in the floating-point mantissa, the minimum
--- resolvable difference, r, for the given primitive is defined as
---
--- -   r = 2e-n
---
--- If a triangle is rasterized using the
--- 'Graphics.Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'
--- polygon mode, then this minimum resolvable difference /may/ not be
--- resolvable for samples outside of the triangle, where the depth is
--- extrapolated.
---
--- If no depth buffer is present, r is undefined.
---
--- The bias value o for a polygon is
---
--- \[\begin{aligned}
--- o &= \mathrm{dbclamp}( m \times \mathtt{depthBiasSlopeFactor} + r \times \mathtt{depthBiasConstantFactor} ) \\
--- \text{where} &\quad \mathrm{dbclamp}(x) =
--- \begin{cases}
---     x                                 & \mathtt{depthBiasClamp} = 0 \ \text{or}\ \texttt{NaN} \\
---     \min(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} > 0 \\
---     \max(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} < 0 \\
--- \end{cases}
--- \end{aligned}\]
---
--- m is computed as described above. If the depth buffer uses a fixed-point
--- representation, m is a function of depth values in the range [0,1], and
--- o is applied to depth values in the same range.
---
--- For fixed-point depth buffers, fragment depth values are always limited
--- to the range [0,1] by clamping after depth bias addition is performed.
--- Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled,
--- fragment depth values are clamped even when the depth buffer uses a
--- floating-point representation.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBiasClamp depth bias clamping>
---     feature is not enabled, @depthBiasClamp@ /must/ be @0.0@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdSetDepthBias :: forall io . MonadIO io => CommandBuffer -> ("depthBiasConstantFactor" ::: Float) -> ("depthBiasClamp" ::: Float) -> ("depthBiasSlopeFactor" ::: Float) -> io ()
-cmdSetDepthBias commandBuffer depthBiasConstantFactor depthBiasClamp depthBiasSlopeFactor = liftIO $ do
-  let vkCmdSetDepthBias' = mkVkCmdSetDepthBias (pVkCmdSetDepthBias (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdSetDepthBias' (commandBufferHandle (commandBuffer)) (CFloat (depthBiasConstantFactor)) (CFloat (depthBiasClamp)) (CFloat (depthBiasSlopeFactor))
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetBlendConstants
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()
-
--- | vkCmdSetBlendConstants - Set the values of blend constants
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @blendConstants@ is a pointer to an array of four values specifying
---     the R, G, B, and A components of the blend constant color used in
---     blending, depending on the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdSetBlendConstants :: forall io . MonadIO io => CommandBuffer -> ("blendConstants" ::: (Float, Float, Float, Float)) -> io ()
-cmdSetBlendConstants commandBuffer blendConstants = liftIO . evalContT $ do
-  let vkCmdSetBlendConstants' = mkVkCmdSetBlendConstants (pVkCmdSetBlendConstants (deviceCmds (commandBuffer :: CommandBuffer)))
-  pBlendConstants <- ContT $ allocaBytesAligned @(FixedArray 4 CFloat) 16 4
-  let pBlendConstants' = lowerArrayPtr pBlendConstants
-  lift $ case (blendConstants) of
-    (e0, e1, e2, e3) -> do
-      poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))
-      poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-      poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
-      poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-  lift $ vkCmdSetBlendConstants' (commandBufferHandle (commandBuffer)) (pBlendConstants)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetDepthBounds
-  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()
-
--- | vkCmdSetDepthBounds - Set the depth bounds test values for a command
--- buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @minDepthBounds@ is the lower bound of the range of depth values
---     used in the depth bounds test.
---
--- -   @maxDepthBounds@ is the upper bound of the range.
---
--- == Valid Usage
---
--- -   Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled
---     @minDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive
---
--- -   Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled
---     @maxDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdSetDepthBounds :: forall io . MonadIO io => CommandBuffer -> ("minDepthBounds" ::: Float) -> ("maxDepthBounds" ::: Float) -> io ()
-cmdSetDepthBounds commandBuffer minDepthBounds maxDepthBounds = liftIO $ do
-  let vkCmdSetDepthBounds' = mkVkCmdSetDepthBounds (pVkCmdSetDepthBounds (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdSetDepthBounds' (commandBufferHandle (commandBuffer)) (CFloat (minDepthBounds)) (CFloat (maxDepthBounds))
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetStencilCompareMask
-  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()
-
--- | vkCmdSetStencilCompareMask - Set the stencil compare mask dynamic state
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @faceMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits'
---     specifying the set of stencil state for which to update the compare
---     mask.
---
--- -   @compareMask@ is the new value to use as the stencil compare mask.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @faceMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits'
---     values
---
--- -   @faceMask@ /must/ not be @0@
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'
-cmdSetStencilCompareMask :: forall io . MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("compareMask" ::: Word32) -> io ()
-cmdSetStencilCompareMask commandBuffer faceMask compareMask = liftIO $ do
-  let vkCmdSetStencilCompareMask' = mkVkCmdSetStencilCompareMask (pVkCmdSetStencilCompareMask (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdSetStencilCompareMask' (commandBufferHandle (commandBuffer)) (faceMask) (compareMask)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetStencilWriteMask
-  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()
-
--- | vkCmdSetStencilWriteMask - Set the stencil write mask dynamic state
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @faceMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits'
---     specifying the set of stencil state for which to update the write
---     mask, as described above for 'cmdSetStencilCompareMask'.
---
--- -   @writeMask@ is the new value to use as the stencil write mask.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @faceMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits'
---     values
---
--- -   @faceMask@ /must/ not be @0@
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'
-cmdSetStencilWriteMask :: forall io . MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("writeMask" ::: Word32) -> io ()
-cmdSetStencilWriteMask commandBuffer faceMask writeMask = liftIO $ do
-  let vkCmdSetStencilWriteMask' = mkVkCmdSetStencilWriteMask (pVkCmdSetStencilWriteMask (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdSetStencilWriteMask' (commandBufferHandle (commandBuffer)) (faceMask) (writeMask)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetStencilReference
-  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()
-
--- | vkCmdSetStencilReference - Set the stencil reference dynamic state
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @faceMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits'
---     specifying the set of stencil state for which to update the
---     reference value, as described above for 'cmdSetStencilCompareMask'.
---
--- -   @reference@ is the new value to use as the stencil reference value.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @faceMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits'
---     values
---
--- -   @faceMask@ /must/ not be @0@
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'
-cmdSetStencilReference :: forall io . MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("reference" ::: Word32) -> io ()
-cmdSetStencilReference commandBuffer faceMask reference = liftIO $ do
-  let vkCmdSetStencilReference' = mkVkCmdSetStencilReference (pVkCmdSetStencilReference (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdSetStencilReference' (commandBufferHandle (commandBuffer)) (faceMask) (reference)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBindDescriptorSets
-  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()
-
--- | vkCmdBindDescriptorSets - Binds descriptor sets to a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer that the descriptor sets will
---     be bound to.
---
--- -   @pipelineBindPoint@ is a
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     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 'Graphics.Vulkan.Core10.Handles.PipelineLayout' 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 a pointer to an array of handles to
---     'Graphics.Vulkan.Core10.Handles.DescriptorSet' 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
---
--- 'cmdBindDescriptorSets' 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>.
---
--- A compatible descriptor set /must/ be bound for all set numbers that any
--- shaders in a pipeline access, at the time that a draw or dispatch
--- command is recorded to execute using that pipeline. However, if none of
--- the shaders in a pipeline statically use any bindings with a particular
--- set number, then no descriptor set need be bound for that set number,
--- even if the pipeline layout includes a non-trivial descriptor set layout
--- for that set number.
---
--- If any of the sets being bound include dynamic uniform or storage
--- buffers, then @pDynamicOffsets@ includes one element for each array
--- element in each dynamic descriptor type binding in each set. Values are
--- taken from @pDynamicOffsets@ in an order such that all entries for set N
--- come before set N+1; within a set, entries are ordered by the binding
--- numbers in the descriptor set layouts; and within a binding array,
--- elements are in order. @dynamicOffsetCount@ /must/ equal the total
--- number of dynamic descriptors in the sets being bound.
---
--- The effective offset used for dynamic uniform and storage buffer
--- bindings is the sum of the relative offset taken from @pDynamicOffsets@,
--- and the base address of the buffer plus base offset in the descriptor
--- set. The range of the dynamic uniform and storage buffer bindings is the
--- buffer range as specified in the descriptor set.
---
--- Each of the @pDescriptorSets@ /must/ be compatible with the pipeline
--- layout specified by @layout@. The layout used to program the bindings
--- /must/ also be compatible with the pipeline used in subsequent graphics
--- or compute commands, as defined in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>
--- section.
---
--- The descriptor set contents bound by a call to 'cmdBindDescriptorSets'
--- /may/ be consumed at the following times:
---
--- -   For descriptor bindings created with the
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---     bit set, the contents /may/ be consumed when the command buffer is
---     submitted to a queue, or during shader execution of the resulting
---     draws and dispatches, or any time in between. Otherwise,
---
--- -   during host execution of the command, or during shader execution of
---     the resulting draws and dispatches, or any time in between.
---
--- Thus, the contents of a descriptor set binding /must/ not be altered
--- (overwritten by an update command, or freed) between the first point in
--- time that it /may/ be consumed, and when the command completes executing
--- on the queue.
---
--- The contents of @pDynamicOffsets@ are consumed immediately during
--- execution of 'cmdBindDescriptorSets'. Once all pending uses have
--- completed, it is legal to update and reuse a descriptor set.
---
--- == Valid Usage
---
--- -   Each element of @pDescriptorSets@ /must/ have been allocated with a
---     'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout' that matches
---     (is the same as, or identically defined as) the
---     'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout' at set /n/ in
---     @layout@, where /n/ is the sum of @firstSet@ and the index into
---     @pDescriptorSets@
---
--- -   @dynamicOffsetCount@ /must/ be equal to the total number of dynamic
---     descriptors in @pDescriptorSets@
---
--- -   The sum of @firstSet@ and @descriptorSetCount@ /must/ be less than
---     or equal to
---     'Graphics.Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'::@setLayoutCount@
---     provided when @layout@ was created
---
--- -   @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s
---     parent 'Graphics.Vulkan.Core10.Handles.CommandPool'’s queue family
---
--- -   Each element of @pDynamicOffsets@ which corresponds to a descriptor
---     binding with type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
---     /must/ be a multiple of
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minUniformBufferOffsetAlignment@
---
--- -   Each element of @pDynamicOffsets@ which corresponds to a descriptor
---     binding with type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
---     /must/ be a multiple of
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minStorageBufferOffsetAlignment@
---
--- -   For each dynamic uniform or storage buffer binding in
---     @pDescriptorSets@, the sum of the effective offset, as defined
---     above, and the range of the binding /must/ be less than or equal to
---     the size of the buffer
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value
---
--- -   @layout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   @pDescriptorSets@ /must/ be a valid pointer to an array of
---     @descriptorSetCount@ valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorSet' handles
---
--- -   If @dynamicOffsetCount@ is not @0@, @pDynamicOffsets@ /must/ be a
---     valid pointer to an array of @dynamicOffsetCount@ @uint32_t@ values
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   @descriptorSetCount@ /must/ be greater than @0@
---
--- -   Each of @commandBuffer@, @layout@, and the elements of
---     @pDescriptorSets@ /must/ have been created, allocated, or retrieved
---     from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.DescriptorSet',
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout'
-cmdBindDescriptorSets :: forall io . MonadIO io => CommandBuffer -> PipelineBindPoint -> PipelineLayout -> ("firstSet" ::: Word32) -> ("descriptorSets" ::: Vector DescriptorSet) -> ("dynamicOffsets" ::: Vector Word32) -> io ()
-cmdBindDescriptorSets commandBuffer pipelineBindPoint layout firstSet descriptorSets dynamicOffsets = liftIO . evalContT $ do
-  let vkCmdBindDescriptorSets' = mkVkCmdBindDescriptorSets (pVkCmdBindDescriptorSets (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPDescriptorSets <- ContT $ allocaBytesAligned @DescriptorSet ((Data.Vector.length (descriptorSets)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorSets `plusPtr` (8 * (i)) :: Ptr DescriptorSet) (e)) (descriptorSets)
-  pPDynamicOffsets <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (dynamicOffsets)) * 4) 4
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicOffsets `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (dynamicOffsets)
-  lift $ vkCmdBindDescriptorSets' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (layout) (firstSet) ((fromIntegral (Data.Vector.length $ (descriptorSets)) :: Word32)) (pPDescriptorSets) ((fromIntegral (Data.Vector.length $ (dynamicOffsets)) :: Word32)) (pPDynamicOffsets)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBindIndexBuffer
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()
-
--- | vkCmdBindIndexBuffer - Bind an index buffer to a command buffer
---
--- = 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 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType'
---     value specifying whether indices are treated as 16 bits or 32 bits.
---
--- == Valid Usage
---
--- -   @offset@ /must/ be less than the size of @buffer@
---
--- -   The sum of @offset@ and the address of the range of
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object that is backing
---     @buffer@, /must/ be a multiple of the type indicated by @indexType@
---
--- -   @buffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT'
---     flag
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @indexType@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'
---
--- -   If @indexType@ is
---     'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-indexTypeUint8 indexTypeUint8>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @indexType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' value
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType'
-cmdBindIndexBuffer :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> IndexType -> io ()
-cmdBindIndexBuffer commandBuffer buffer offset indexType = liftIO $ do
-  let vkCmdBindIndexBuffer' = mkVkCmdBindIndexBuffer (pVkCmdBindIndexBuffer (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdBindIndexBuffer' (commandBufferHandle (commandBuffer)) (buffer) (offset) (indexType)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBindVertexBuffers
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()
-
--- | vkCmdBindVertexBuffers - Bind vertex buffers to a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @firstBinding@ is the index of the first vertex input binding whose
---     state is updated by the command.
---
--- -   @bindingCount@ is the number of vertex input bindings whose state is
---     updated by the command.
---
--- -   @pBuffers@ is a pointer to an array of buffer handles.
---
--- -   @pOffsets@ is a pointer to an array of buffer offsets.
---
--- = Description
---
--- The values taken from elements i of @pBuffers@ and @pOffsets@ replace
--- the current state for the vertex input binding @firstBinding@ + i, for i
--- in [0, @bindingCount@). The vertex input binding is updated to start at
--- the offset indicated by @pOffsets@[i] from the start of the buffer
--- @pBuffers@[i]. All vertex input attributes that use each of these
--- bindings will use these updated addresses in their address calculations
--- for subsequent draw commands. If the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
--- feature is enabled, elements of @pBuffers@ /can/ be
--- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', and /can/ be used by
--- the vertex shader. If a vertex input attribute is bound to a vertex
--- input binding that is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
--- the values taken from memory are considered to be zero, and missing G,
--- B, or A components are
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction filled with (0,0,1)>.
---
--- == Valid Usage
---
--- -   @firstBinding@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
---
--- -   The sum of @firstBinding@ and @bindingCount@ /must/ be less than or
---     equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
---
--- -   All elements of @pOffsets@ /must/ be less than the size of the
---     corresponding element in @pBuffers@
---
--- -   All elements of @pBuffers@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT'
---     flag
---
--- -   Each element of @pBuffers@ that is non-sparse /must/ be bound
---     completely and contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, all elements of @pBuffers@ /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If an element of @pBuffers@ is
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', then the
---     corresponding element of @pOffsets@ /must/ be zero
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@
---     valid or 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     'Graphics.Vulkan.Core10.Handles.Buffer' handles
---
--- -   @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@
---     'Graphics.Vulkan.Core10.BaseType.DeviceSize' values
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   @bindingCount@ /must/ be greater than @0@
---
--- -   Both of @commandBuffer@, and the elements of @pBuffers@ that are
---     valid handles of non-ignored parameters /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdBindVertexBuffers :: forall io . MonadIO io => CommandBuffer -> ("firstBinding" ::: Word32) -> ("buffers" ::: Vector Buffer) -> ("offsets" ::: Vector DeviceSize) -> io ()
-cmdBindVertexBuffers commandBuffer firstBinding buffers offsets = liftIO . evalContT $ do
-  let vkCmdBindVertexBuffers' = mkVkCmdBindVertexBuffers (pVkCmdBindVertexBuffers (deviceCmds (commandBuffer :: CommandBuffer)))
-  let pBuffersLength = Data.Vector.length $ (buffers)
-  let pOffsetsLength = Data.Vector.length $ (offsets)
-  lift $ unless (pOffsetsLength == pBuffersLength) $
-    throwIO $ IOError Nothing InvalidArgument "" "pOffsets and pBuffers must have the same length" Nothing Nothing
-  pPBuffers <- ContT $ allocaBytesAligned @Buffer ((Data.Vector.length (buffers)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (buffers)
-  pPOffsets <- ContT $ allocaBytesAligned @DeviceSize ((Data.Vector.length (offsets)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (offsets)
-  lift $ vkCmdBindVertexBuffers' (commandBufferHandle (commandBuffer)) (firstBinding) ((fromIntegral pBuffersLength :: Word32)) (pPBuffers) (pPOffsets)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDraw
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDraw - Draw primitives
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @vertexCount@ is the number of vertices to draw.
---
--- -   @instanceCount@ is the number of instances to draw.
---
--- -   @firstVertex@ is the index of the first vertex to draw.
---
--- -   @firstInstance@ is the instance ID of the first instance to draw.
---
--- = Description
---
--- When the command is executed, primitives are assembled using the current
--- primitive topology and @vertexCount@ consecutive vertex indices with the
--- first @vertexIndex@ value equal to @firstVertex@. The primitives are
--- drawn @instanceCount@ times with @instanceIndex@ starting with
--- @firstInstance@ and increasing sequentially for each instance. The
--- assembled primitives execute the bound graphics pipeline.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'cmdBindDescriptorSets', /must/ be valid if they are statically used
---     by the 'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the
---     pipeline bind point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   The current render pass /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   Image subresources used as attachments in the current render pass
---     /must/ not be accessed in any way other than as an attachment by
---     this command
---
--- -   If the draw is recorded in a render pass instance with multiview
---     enabled, the maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   If the bound graphics pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   If @commandBuffer@ is a protected command buffer, any resource
---     written to by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     an unprotected resource
---
--- -   If @commandBuffer@ is a protected command buffer, pipeline stages
---     other than the framebuffer-space and compute stages in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point /must/ not write to any resource
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     either valid or 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     buffers bound
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, all vertex input bindings accessed via
---     vertex input variables declared in the vertex shader entry point’s
---     interface /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   For a given vertex buffer binding, any attribute data fetched /must/
---     be entirely contained within the corresponding vertex buffer
---     binding, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdDraw :: forall io . MonadIO io => CommandBuffer -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> io ()
-cmdDraw commandBuffer vertexCount instanceCount firstVertex firstInstance = liftIO $ do
-  let vkCmdDraw' = mkVkCmdDraw (pVkCmdDraw (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDraw' (commandBufferHandle (commandBuffer)) (vertexCount) (instanceCount) (firstVertex) (firstInstance)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDrawIndexed
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()
-
--- | vkCmdDrawIndexed - Issue an indexed draw into a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @indexCount@ is the number of vertices to draw.
---
--- -   @instanceCount@ is the number of instances to draw.
---
--- -   @firstIndex@ is the base index within the index buffer.
---
--- -   @vertexOffset@ is the value added to the vertex index before
---     indexing into the vertex buffer.
---
--- -   @firstInstance@ is the instance ID of the first instance to draw.
---
--- = Description
---
--- When the command is executed, primitives are assembled using the current
--- primitive topology and @indexCount@ vertices whose indices are retrieved
--- from the index buffer. The index buffer is treated as an array of
--- tightly packed unsigned integers of size defined by the
--- 'cmdBindIndexBuffer'::@indexType@ parameter with which the buffer was
--- bound.
---
--- The first vertex index is at an offset of @firstIndex@ * @indexSize@ +
--- @offset@ within the bound index buffer, where @offset@ is the offset
--- specified by 'cmdBindIndexBuffer' and @indexSize@ is the byte size of
--- the type specified by @indexType@. Subsequent index values are retrieved
--- from consecutive locations in the index buffer. Indices are first
--- compared to the primitive restart value, then zero extended to 32 bits
--- (if the @indexType@ is
--- 'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT' or
--- 'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16') and have
--- @vertexOffset@ added to them, before being supplied as the @vertexIndex@
--- value.
---
--- The primitives are drawn @instanceCount@ times with @instanceIndex@
--- starting with @firstInstance@ and increasing sequentially for each
--- instance. The assembled primitives execute the bound graphics pipeline.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'cmdBindDescriptorSets', /must/ be valid if they are statically used
---     by the 'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the
---     pipeline bind point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   The current render pass /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   Image subresources used as attachments in the current render pass
---     /must/ not be accessed in any way other than as an attachment by
---     this command
---
--- -   If the draw is recorded in a render pass instance with multiview
---     enabled, the maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   If the bound graphics pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   If @commandBuffer@ is a protected command buffer, any resource
---     written to by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     an unprotected resource
---
--- -   If @commandBuffer@ is a protected command buffer, pipeline stages
---     other than the framebuffer-space and compute stages in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point /must/ not write to any resource
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     either valid or 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     buffers bound
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, all vertex input bindings accessed via
---     vertex input variables declared in the vertex shader entry point’s
---     interface /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   For a given vertex buffer binding, any attribute data fetched /must/
---     be entirely contained within the corresponding vertex buffer
---     binding, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
---
--- -   (@indexSize@ * (@firstIndex@ + @indexCount@) + @offset@) /must/ be
---     less than or equal to the size of the bound index buffer, with
---     @indexSize@ being based on the type specified by @indexType@, where
---     the index buffer, @indexType@, and @offset@ are specified via
---     'cmdBindIndexBuffer'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdDrawIndexed :: forall io . MonadIO io => CommandBuffer -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> io ()
-cmdDrawIndexed commandBuffer indexCount instanceCount firstIndex vertexOffset firstInstance = liftIO $ do
-  let vkCmdDrawIndexed' = mkVkCmdDrawIndexed (pVkCmdDrawIndexed (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDrawIndexed' (commandBufferHandle (commandBuffer)) (indexCount) (instanceCount) (firstIndex) (vertexOffset) (firstInstance)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDrawIndirect
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDrawIndirect - Issue an indirect draw into a command buffer
---
--- = 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
---
--- 'cmdDrawIndirect' behaves similarly to 'cmdDraw' except that the
--- parameters are read by the device from a buffer during execution.
--- @drawCount@ draws are executed by the command, with parameters taken
--- from @buffer@ starting at @offset@ and increasing by @stride@ bytes for
--- each successive draw. The parameters of each draw are encoded in an
--- array of 'Graphics.Vulkan.Core10.OtherTypes.DrawIndirectCommand'
--- structures. If @drawCount@ is less than or equal to one, @stride@ is
--- ignored.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'cmdBindDescriptorSets', /must/ be valid if they are statically used
---     by the 'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the
---     pipeline bind point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   The current render pass /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   Image subresources used as attachments in the current render pass
---     /must/ not be accessed in any way other than as an attachment by
---     this command
---
--- -   If the draw is recorded in a render pass instance with multiview
---     enabled, the maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   If the bound graphics pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     either valid or 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     buffers bound
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, all vertex input bindings accessed via
---     vertex input variables declared in the vertex shader entry point’s
---     interface /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   For a given vertex buffer binding, any attribute data fetched /must/
---     be entirely contained within the corresponding vertex buffer
---     binding, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @buffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>
---     feature is not enabled, @drawCount@ /must/ be @0@ or @1@
---
--- -   @drawCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>
---     feature is not enabled, all the @firstInstance@ members of the
---     'Graphics.Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures
---     accessed by this command /must/ be @0@
---
--- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
---     @4@ and /must/ be greater than or equal to
---     @sizeof@('Graphics.Vulkan.Core10.OtherTypes.DrawIndirectCommand')
---
--- -   If @drawCount@ is equal to @1@, (@offset@ +
---     @sizeof@('Graphics.Vulkan.Core10.OtherTypes.DrawIndirectCommand'))
---     /must/ be less than or equal to the size of @buffer@
---
--- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
---     @offset@ +
---     @sizeof@('Graphics.Vulkan.Core10.OtherTypes.DrawIndirectCommand'))
---     /must/ be less than or equal to the size of @buffer@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdDrawIndirect :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
-cmdDrawIndirect commandBuffer buffer offset drawCount stride = liftIO $ do
-  let vkCmdDrawIndirect' = mkVkCmdDrawIndirect (pVkCmdDrawIndirect (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDrawIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDrawIndexedIndirect
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDrawIndexedIndirect - Perform an indexed indirect draw
---
--- = 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
---
--- 'cmdDrawIndexedIndirect' behaves similarly to 'cmdDrawIndexed' except
--- that the parameters are read by the device from a buffer during
--- execution. @drawCount@ draws are executed by the command, with
--- parameters taken from @buffer@ starting at @offset@ and increasing by
--- @stride@ bytes for each successive draw. The parameters of each draw are
--- encoded in an array of
--- 'Graphics.Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'
--- structures. If @drawCount@ is less than or equal to one, @stride@ is
--- ignored.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'cmdBindDescriptorSets', /must/ be valid if they are statically used
---     by the 'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the
---     pipeline bind point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   The current render pass /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   Image subresources used as attachments in the current render pass
---     /must/ not be accessed in any way other than as an attachment by
---     this command
---
--- -   If the draw is recorded in a render pass instance with multiview
---     enabled, the maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   If the bound graphics pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     either valid or 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     buffers bound
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, all vertex input bindings accessed via
---     vertex input variables declared in the vertex shader entry point’s
---     interface /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   For a given vertex buffer binding, any attribute data fetched /must/
---     be entirely contained within the corresponding vertex buffer
---     binding, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @buffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>
---     feature is not enabled, @drawCount@ /must/ be @0@ or @1@
---
--- -   @drawCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
---
--- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
---     @4@ and /must/ be greater than or equal to
---     @sizeof@('Graphics.Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>
---     feature is not enabled, all the @firstInstance@ members of the
---     'Graphics.Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'
---     structures accessed by this command /must/ be @0@
---
--- -   If @drawCount@ is equal to @1@, (@offset@ +
---     @sizeof@('Graphics.Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))
---     /must/ be less than or equal to the size of @buffer@
---
--- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
---     @offset@ +
---     @sizeof@('Graphics.Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))
---     /must/ be less than or equal to the size of @buffer@
---
--- -   If
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectCount drawIndirectCount>
---     is not enabled this function /must/ not be used
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdDrawIndexedIndirect :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
-cmdDrawIndexedIndirect commandBuffer buffer offset drawCount stride = liftIO $ do
-  let vkCmdDrawIndexedIndirect' = mkVkCmdDrawIndexedIndirect (pVkCmdDrawIndexedIndirect (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDrawIndexedIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDispatch
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDispatch - Dispatch compute work items
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @groupCountX@ is the number of local workgroups to dispatch in the X
---     dimension.
---
--- -   @groupCountY@ is the number of local workgroups to dispatch in the Y
---     dimension.
---
--- -   @groupCountZ@ is the number of local workgroups to dispatch in the Z
---     dimension.
---
--- = Description
---
--- When the command is executed, a global workgroup consisting of
--- @groupCountX@ × @groupCountY@ × @groupCountZ@ local workgroups is
--- assembled.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'cmdBindDescriptorSets', /must/ be valid if they are statically used
---     by the 'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the
---     pipeline bind point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   If @commandBuffer@ is a protected command buffer, any resource
---     written to by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     an unprotected resource
---
--- -   If @commandBuffer@ is a protected command buffer, pipeline stages
---     other than the framebuffer-space and compute stages in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point /must/ not write to any resource
---
--- -   @groupCountX@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
---
--- -   @groupCountY@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
---
--- -   @groupCountZ@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               | Compute                                                                                                                             |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdDispatch :: forall io . MonadIO io => CommandBuffer -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> io ()
-cmdDispatch commandBuffer groupCountX groupCountY groupCountZ = liftIO $ do
-  let vkCmdDispatch' = mkVkCmdDispatch (pVkCmdDispatch (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDispatch' (commandBufferHandle (commandBuffer)) (groupCountX) (groupCountY) (groupCountZ)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDispatchIndirect
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()
-
--- | vkCmdDispatchIndirect - Dispatch compute work items using indirect
--- parameters
---
--- = 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
---
--- 'cmdDispatchIndirect' behaves similarly to 'cmdDispatch' except that the
--- parameters are read by the device from a buffer during execution. The
--- parameters of the dispatch are encoded in a
--- 'Graphics.Vulkan.Core10.OtherTypes.DispatchIndirectCommand' structure
--- taken from @buffer@ starting at @offset@.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'cmdBindDescriptorSets', /must/ be valid if they are statically used
---     by the 'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the
---     pipeline bind point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @buffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   The sum of @offset@ and the size of
---     'Graphics.Vulkan.Core10.OtherTypes.DispatchIndirectCommand' /must/
---     be less than or equal to the size of @buffer@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               | Compute                                                                                                                             |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdDispatchIndirect :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> io ()
-cmdDispatchIndirect commandBuffer buffer offset = liftIO $ do
-  let vkCmdDispatchIndirect' = mkVkCmdDispatchIndirect (pVkCmdDispatchIndirect (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDispatchIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdCopyBuffer
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()
-
--- | vkCmdCopyBuffer - Copy data between buffer regions
---
--- = 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 'BufferCopy' structures
---     specifying the regions to copy.
---
--- = Description
---
--- Each region in @pRegions@ is copied from the source buffer to the same
--- region of the destination buffer. @srcBuffer@ and @dstBuffer@ /can/ be
--- the same buffer or alias the same memory, but the resulting values are
--- undefined if the copy regions overlap in memory.
---
--- == Valid Usage
---
--- -   The @srcOffset@ member of each element of @pRegions@ /must/ be less
---     than the size of @srcBuffer@
---
--- -   The @dstOffset@ member of each element of @pRegions@ /must/ be less
---     than the size of @dstBuffer@
---
--- -   The @size@ member of each element of @pRegions@ /must/ be less than
---     or equal to the size of @srcBuffer@ minus @srcOffset@
---
--- -   The @size@ member of each element of @pRegions@ /must/ be less than
---     or equal to the size of @dstBuffer@ minus @dstOffset@
---
--- -   The union of the source regions, and the union of the destination
---     regions, specified by the elements of @pRegions@, /must/ not overlap
---     in memory
---
--- -   @srcBuffer@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'
---     usage flag
---
--- -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @dstBuffer@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   If @commandBuffer@ is an unprotected command buffer, then
---     @srcBuffer@ /must/ not be a protected buffer
---
--- -   If @commandBuffer@ is an unprotected command buffer, then
---     @dstBuffer@ /must/ not be a protected buffer
---
--- -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@
---     /must/ not be an unprotected buffer
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @srcBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @dstBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid 'BufferCopy' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support transfer,
---     graphics, or compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @regionCount@ /must/ be greater than @0@
---
--- -   Each of @commandBuffer@, @dstBuffer@, and @srcBuffer@ /must/ have
---     been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer', 'BufferCopy',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdCopyBuffer :: forall io . MonadIO io => CommandBuffer -> ("srcBuffer" ::: Buffer) -> ("dstBuffer" ::: Buffer) -> ("regions" ::: Vector BufferCopy) -> io ()
-cmdCopyBuffer commandBuffer srcBuffer dstBuffer regions = liftIO . evalContT $ do
-  let vkCmdCopyBuffer' = mkVkCmdCopyBuffer (pVkCmdCopyBuffer (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPRegions <- ContT $ allocaBytesAligned @BufferCopy ((Data.Vector.length (regions)) * 24) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (24 * (i)) :: Ptr BufferCopy) (e) . ($ ())) (regions)
-  lift $ vkCmdCopyBuffer' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdCopyImage
-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()
-
--- | vkCmdCopyImage - Copy data between images
---
--- = 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 'ImageCopy' structures
---     specifying the regions to copy.
---
--- = Description
---
--- Each region in @pRegions@ is copied from the source image to the same
--- region of the destination image. @srcImage@ and @dstImage@ /can/ be the
--- same image or alias the same memory.
---
--- The formats of @srcImage@ and @dstImage@ /must/ be compatible. Formats
--- are compatible if they share the same class, as shown in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility Compatible Formats>
--- table. Depth\/stencil formats /must/ match exactly.
---
--- If the format of @srcImage@ or @dstImage@ is a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>,
--- regions of each plane to be copied /must/ be specified separately using
--- the @srcSubresource@ and @dstSubresource@ members of the 'ImageCopy'
--- structure. In this case, the @aspectMask@ of the @srcSubresource@ or
--- @dstSubresource@ that refers to the multi-planar image /must/ be
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
--- or
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'.
--- For the purposes of 'cmdCopyImage', each plane of a multi-planar image
--- is treated as having the format listed in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>
--- for the plane identified by the @aspectMask@ of the corresponding
--- subresource. This applies both to
--- 'Graphics.Vulkan.Core10.Enums.Format.Format' and to coordinates used in
--- the copy, which correspond to texels in the /plane/ rather than how
--- these texels map to coordinates in the image as a whole.
---
--- Note
---
--- For example, the
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- plane of a
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_G8_B8R8_2PLANE_420_UNORM'
--- image is compatible with an image of format
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM' and (less
--- usefully) with the
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- plane of an image of format
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16',
--- as each texel is 2 bytes in size.
---
--- 'cmdCopyImage' allows copying between /size-compatible/ compressed and
--- uncompressed internal formats. Formats are size-compatible if the texel
--- block size of the uncompressed format is equal to the texel block size
--- of the compressed format. Such a copy does not perform on-the-fly
--- compression or decompression. When copying from an uncompressed format
--- to a compressed format, each texel of uncompressed data of the source
--- image is copied as a raw value to the corresponding compressed texel
--- block of the destination image. When copying from a compressed format to
--- an uncompressed format, each compressed texel block of the source image
--- is copied as a raw value to the corresponding texel of uncompressed data
--- in the destination image. Thus, for example, it is legal to copy between
--- a 128-bit uncompressed format and a compressed format which has a
--- 128-bit sized compressed texel block representing 4×4 texels (using 8
--- bits per texel), or between a 64-bit uncompressed format and a
--- compressed format which has a 64-bit sized compressed texel block
--- representing 4×4 texels (using 4 bits per texel).
---
--- When copying between compressed and uncompressed formats the @extent@
--- members represent the texel dimensions of the source image and not the
--- destination. When copying from a compressed image to an uncompressed
--- image the image texel dimensions written to the uncompressed image will
--- be source extent divided by the compressed texel block dimensions. When
--- copying from an uncompressed image to a compressed image the image texel
--- dimensions written to the compressed image will be the source extent
--- multiplied by the compressed texel block dimensions. In both cases the
--- number of bytes read and the number of bytes written will be identical.
---
--- Copying to or from block-compressed images is typically done in
--- multiples of the compressed texel block size. For this reason the
--- @extent@ /must/ be a multiple of the compressed texel block dimension.
--- There is one exception to this rule which is /required/ to handle
--- compressed images created with dimensions that are not a multiple of the
--- compressed texel block dimensions: if the @srcImage@ is compressed,
--- then:
---
--- -   If @extent.width@ is not a multiple of the compressed texel block
---     width, then (@extent.width@ + @srcOffset.x@) /must/ equal the image
---     subresource width.
---
--- -   If @extent.height@ is not a multiple of the compressed texel block
---     height, then (@extent.height@ + @srcOffset.y@) /must/ equal the
---     image subresource height.
---
--- -   If @extent.depth@ is not a multiple of the compressed texel block
---     depth, then (@extent.depth@ + @srcOffset.z@) /must/ equal the image
---     subresource depth.
---
--- Similarly, if the @dstImage@ is compressed, then:
---
--- -   If @extent.width@ is not a multiple of the compressed texel block
---     width, then (@extent.width@ + @dstOffset.x@) /must/ equal the image
---     subresource width.
---
--- -   If @extent.height@ is not a multiple of the compressed texel block
---     height, then (@extent.height@ + @dstOffset.y@) /must/ equal the
---     image subresource height.
---
--- -   If @extent.depth@ is not a multiple of the compressed texel block
---     depth, then (@extent.depth@ + @dstOffset.z@) /must/ equal the image
---     subresource depth.
---
--- This allows the last compressed texel block of the image in each
--- non-multiple dimension to be included as a source or destination of the
--- copy.
---
--- “@_422@” image formats that are not
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
--- are treated as having a 2×1 compressed texel block for the purposes of
--- these rules.
---
--- 'cmdCopyImage' /can/ be used to copy image data between multisample
--- images, but both images /must/ have the same number of samples.
---
--- == Valid Usage
---
--- -   The union of all source regions, and the union of all destination
---     regions, specified by the elements of @pRegions@, /must/ not overlap
---     in memory
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @srcImage@ /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'
---
--- -   @srcImage@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
---     usage flag
---
--- -   If @srcImage@ is non-sparse then the image or /disjoint/ plane to be
---     copied /must/ be bound completely and contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @srcImageLayout@ /must/ specify the layout of the image subresources
---     of @srcImage@ specified in @pRegions@ at the time this command is
---     executed on a 'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   @srcImageLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @dstImage@ /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
---
--- -   @dstImage@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
--- -   If @dstImage@ is non-sparse then the image or /disjoint/ plane that
---     is the destination of the copy /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @dstImageLayout@ /must/ specify the layout of the image subresources
---     of @dstImage@ specified in @pRegions@ at the time this command is
---     executed on a 'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   @dstImageLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
---
--- -   If the 'Graphics.Vulkan.Core10.Enums.Format.Format' of each of
---     @srcImage@ and @dstImage@ is not a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
---     the 'Graphics.Vulkan.Core10.Enums.Format.Format' of each of
---     @srcImage@ and @dstImage@ /must/ be compatible, as defined
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-compatibility above>
---
--- -   In a copy to or from a plane of a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image>,
---     the 'Graphics.Vulkan.Core10.Enums.Format.Format' of the image and
---     plane /must/ be compatible according to
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes the description of compatible planes>
---     for the plane being copied
---
--- -   The sample count of @srcImage@ and @dstImage@ /must/ match
---
--- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
---     /must/ not be a protected image
---
--- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
---     /must/ not be a protected image
---
--- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
---     /must/ not be an unprotected image
---
--- -   The @srcSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was
---     created
---
--- -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
---     each element of @pRegions@ /must/ be less than or equal to the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
---     each element of @pRegions@ /must/ be less than or equal to the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was
---     created
---
--- -   The @srcOffset@ and @extent@ members of each element of @pRegions@
---     /must/ respect the image transfer granularity requirements of
---     @commandBuffer@’s command pool’s queue family, as described in
---     'Graphics.Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
---
--- -   The @dstOffset@ and @extent@ members of each element of @pRegions@
---     /must/ respect the image transfer granularity requirements of
---     @commandBuffer@’s command pool’s queue family, as described in
---     'Graphics.Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
---
--- -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@
---     containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @srcImage@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @srcImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @dstImage@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @dstImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid 'ImageCopy' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support transfer,
---     graphics, or compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @regionCount@ /must/ be greater than @0@
---
--- -   Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Image', 'ImageCopy',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout'
-cmdCopyImage :: forall io . MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageCopy) -> io ()
-cmdCopyImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do
-  let vkCmdCopyImage' = mkVkCmdCopyImage (pVkCmdCopyImage (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPRegions <- ContT $ allocaBytesAligned @ImageCopy ((Data.Vector.length (regions)) * 68) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageCopy) (e) . ($ ())) (regions)
-  lift $ vkCmdCopyImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBlitImage
-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()
-
--- | vkCmdBlitImage - Copy regions of an image, potentially performing format
--- conversion,
---
--- = 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 'ImageBlit' structures
---     specifying the regions to blit.
---
--- -   @filter@ is a 'Graphics.Vulkan.Core10.Enums.Filter.Filter'
---     specifying the filter to apply if the blits require scaling.
---
--- = Description
---
--- 'cmdBlitImage' /must/ not be used for multisampled source or destination
--- images. Use 'cmdResolveImage' for this purpose.
---
--- As the sizes of the source and destination extents /can/ differ in any
--- dimension, texels in the source extent are scaled and filtered to the
--- destination extent. Scaling occurs via the following operations:
---
--- -   For each destination texel, the integer coordinate of that texel is
---     converted to an unnormalized texture coordinate, using the effective
---     inverse of the equations described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-unnormalized-to-integer unnormalized to integer conversion>:
---
---     -   ubase = i + ½
---
---     -   vbase = j + ½
---
---     -   wbase = k + ½
---
--- -   These base coordinates are then offset by the first destination
---     offset:
---
---     -   uoffset = ubase - xdst0
---
---     -   voffset = vbase - ydst0
---
---     -   woffset = wbase - zdst0
---
---     -   aoffset = a - @baseArrayCount@dst
---
--- -   The scale is determined from the source and destination regions, and
---     applied to the offset coordinates:
---
---     -   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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations chapter>,
--- with the filter mode equal to that of @filter@, a mipmap mode of
--- 'Graphics.Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST'
--- and an address mode of
--- 'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'.
--- Implementations /must/ clamp at the edge of the source image, and /may/
--- additionally clamp to the edge of the source region.
---
--- Note
---
--- Due to allowable rounding errors in the generation of the source texture
--- coordinates, it is not always possible to guarantee exactly which source
--- texels will be sampled for a given blit. As rounding errors are
--- implementation dependent, the exact results of a blitting operation are
--- also implementation dependent.
---
--- Blits are done layer by layer starting with the @baseArrayLayer@ member
--- of @srcSubresource@ for the source and @dstSubresource@ for the
--- destination. @layerCount@ layers are blitted to the destination image.
---
--- 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
--- 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' then the value
--- sampled from the source image is taken by doing linear filtering using
--- the interpolated __z__ coordinate. If @filter@ parameter is
--- 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_NEAREST' then the value
--- sampled from the source image is taken from the single nearest slice,
--- with an implementation-dependent arithmetic rounding mode.
---
--- The following filtering and conversion rules apply:
---
--- -   Integer formats /can/ only be converted to other integer formats
---     with the same signedness.
---
--- -   No format conversion is supported between depth\/stencil images. The
---     formats /must/ match.
---
--- -   Format conversions on unorm, snorm, unscaled and packed float
---     formats of the copied aspect of the image are performed by first
---     converting the pixels to float values.
---
--- -   For sRGB source formats, nonlinear RGB values are converted to
---     linear representation prior to filtering.
---
--- -   After filtering, the float values are first clamped and then cast to
---     the destination image format. In case of sRGB destination format,
---     linear RGB values are converted to nonlinear representation before
---     writing the pixel to the image.
---
--- Signed and unsigned integers are converted by first clamping to the
--- representable range of the destination format, then casting the value.
---
--- == Valid Usage
---
--- -   The source region specified by each element of @pRegions@ /must/ be
---     a region that is contained within @srcImage@
---
--- -   The destination region specified by each element of @pRegions@
---     /must/ be a region that is contained within @dstImage@
---
--- -   The union of all destination regions, specified by the elements of
---     @pRegions@, /must/ not overlap in memory with any texel that /may/
---     be sampled during the blit operation
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @srcImage@ /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
---
--- -   @srcImage@ /must/ not use a format listed in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
---
--- -   @srcImage@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
---     usage flag
---
--- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @srcImageLayout@ /must/ specify the layout of the image subresources
---     of @srcImage@ specified in @pRegions@ at the time this command is
---     executed on a 'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   @srcImageLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
---     or 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @dstImage@ /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'
---
--- -   @dstImage@ /must/ not use a format listed in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
---
--- -   @dstImage@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
--- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @dstImageLayout@ /must/ specify the layout of the image subresources
---     of @dstImage@ specified in @pRegions@ at the time this command is
---     executed on a 'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   @dstImageLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
---     or 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
---
--- -   If either of @srcImage@ or @dstImage@ was created with a signed
---     integer 'Graphics.Vulkan.Core10.Enums.Format.Format', the other
---     /must/ also have been created with a signed integer
---     'Graphics.Vulkan.Core10.Enums.Format.Format'
---
--- -   If either of @srcImage@ or @dstImage@ was created with an unsigned
---     integer 'Graphics.Vulkan.Core10.Enums.Format.Format', the other
---     /must/ also have been created with an unsigned integer
---     'Graphics.Vulkan.Core10.Enums.Format.Format'
---
--- -   If either of @srcImage@ or @dstImage@ was created with a
---     depth\/stencil format, the other /must/ have exactly the same format
---
--- -   If @srcImage@ was created with a depth\/stencil format, @filter@
---     /must/ be 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_NEAREST'
---
--- -   @srcImage@ /must/ have been created with a @samples@ value of
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   @dstImage@ /must/ have been created with a @samples@ value of
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If @filter@ is 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR',
---     then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @srcImage@ /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If @filter@ is
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT',
---     then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @srcImage@ /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   If @filter@ is
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT',
---     @srcImage@ /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageType.ImageType' of
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
---
--- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
---     /must/ not be a protected image
---
--- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
---     /must/ not be a protected image
---
--- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
---     /must/ not be an unprotected image
---
--- -   The @srcSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was
---     created
---
--- -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
---     each element of @pRegions@ /must/ be less than or equal to the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
---     each element of @pRegions@ /must/ be less than or equal to the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was
---     created
---
--- -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@
---     containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @srcImage@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @srcImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @dstImage@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @dstImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid 'ImageBlit' structures
---
--- -   @filter@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Filter.Filter' value
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @regionCount@ /must/ be greater than @0@
---
--- -   Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.Filter.Filter',
--- 'Graphics.Vulkan.Core10.Handles.Image', 'ImageBlit',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout'
-cmdBlitImage :: forall io . MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageBlit) -> Filter -> io ()
-cmdBlitImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions filter' = liftIO . evalContT $ do
-  let vkCmdBlitImage' = mkVkCmdBlitImage (pVkCmdBlitImage (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPRegions <- ContT $ allocaBytesAligned @ImageBlit ((Data.Vector.length (regions)) * 80) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (80 * (i)) :: Ptr ImageBlit) (e) . ($ ())) (regions)
-  lift $ vkCmdBlitImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions) (filter')
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdCopyBufferToImage
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()
-
--- | vkCmdCopyBufferToImage - Copy data from a buffer into an image
---
--- = 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 'BufferImageCopy' structures
---     specifying the regions to copy.
---
--- = Description
---
--- Each region in @pRegions@ is copied from the specified region of the
--- source buffer to the specified region of the destination image.
---
--- If the format of @dstImage@ is a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>),
--- regions of each plane to be a target of a copy /must/ be specified
--- separately using the @pRegions@ member of the 'BufferImageCopy'
--- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/
--- be
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
--- or
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'.
--- For the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar
--- image is treated as having the format listed in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>
--- for the plane identified by the @aspectMask@ of the corresponding
--- subresource. This applies both to
--- 'Graphics.Vulkan.Core10.Enums.Format.Format' and to coordinates used in
--- the copy, which correspond to texels in the /plane/ rather than how
--- these texels map to coordinates in the image as a whole.
---
--- == Valid Usage
---
--- -   @srcBuffer@ /must/ be large enough to contain all buffer locations
---     that are accessed according to
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,
---     for each element of @pRegions@
---
--- -   The image region specified by each element of @pRegions@ /must/ be a
---     region that is contained within @dstImage@ if the @dstImage@’s
---     'Graphics.Vulkan.Core10.Enums.Format.Format' is not a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
---     and /must/ be a region that is contained within the plane being
---     copied to if the @dstImage@’s
---     'Graphics.Vulkan.Core10.Enums.Format.Format' is a multi-planar
---     format
---
--- -   The union of all source regions, and the union of all destination
---     regions, specified by the elements of @pRegions@, /must/ not overlap
---     in memory
---
--- -   @srcBuffer@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'
---     usage flag
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @dstImage@ /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
---
--- -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @dstImage@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
--- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @dstImage@ /must/ have a sample count equal to
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   @dstImageLayout@ /must/ specify the layout of the image subresources
---     of @dstImage@ specified in @pRegions@ at the time this command is
---     executed on a 'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   @dstImageLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
---
--- -   If @commandBuffer@ is an unprotected command buffer, then
---     @srcBuffer@ /must/ not be a protected buffer
---
--- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
---     /must/ not be a protected image
---
--- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
---     /must/ not be an unprotected image
---
--- -   The @imageSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was
---     created
---
--- -   The @imageSubresource.baseArrayLayer@ +
---     @imageSubresource.layerCount@ of each element of @pRegions@ /must/
---     be less than or equal to the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was
---     created
---
--- -   The @imageOffset@ and @imageExtent@ members of each element of
---     @pRegions@ /must/ respect the image transfer granularity
---     requirements of @commandBuffer@’s command pool’s queue family, as
---     described in
---     'Graphics.Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
---
--- -   @dstImage@ /must/ not have been created with @flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @srcBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @dstImage@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @dstImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid 'BufferImageCopy' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support transfer,
---     graphics, or compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @regionCount@ /must/ be greater than @0@
---
--- -   Each of @commandBuffer@, @dstImage@, and @srcBuffer@ /must/ have
---     been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout'
-cmdCopyBufferToImage :: forall io . MonadIO io => CommandBuffer -> ("srcBuffer" ::: Buffer) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector BufferImageCopy) -> io ()
-cmdCopyBufferToImage commandBuffer srcBuffer dstImage dstImageLayout regions = liftIO . evalContT $ do
-  let vkCmdCopyBufferToImage' = mkVkCmdCopyBufferToImage (pVkCmdCopyBufferToImage (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPRegions <- ContT $ allocaBytesAligned @BufferImageCopy ((Data.Vector.length (regions)) * 56) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e) . ($ ())) (regions)
-  lift $ vkCmdCopyBufferToImage' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdCopyImageToBuffer
-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()
-
--- | vkCmdCopyImageToBuffer - Copy image data into a buffer
---
--- = 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 'BufferImageCopy' structures
---     specifying the regions to copy.
---
--- = Description
---
--- Each region in @pRegions@ is copied from the specified region of the
--- source image to the specified region of the destination buffer.
---
--- If the 'Graphics.Vulkan.Core10.Enums.Format.Format' of @srcImage@ is a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>,
--- regions of each plane to be a source of a copy /must/ be specified
--- separately using the @pRegions@ member of the 'BufferImageCopy'
--- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/
--- be
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
--- or
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'.
--- For the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar
--- image is treated as having the format listed in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>
--- for the plane identified by the @aspectMask@ of the corresponding
--- subresource. This applies both to
--- 'Graphics.Vulkan.Core10.Enums.Format.Format' and to coordinates used in
--- the copy, which correspond to texels in the /plane/ rather than how
--- these texels map to coordinates in the image as a whole.
---
--- == Valid Usage
---
--- -   The image region specified by each element of @pRegions@ /must/ be a
---     region that is contained within @srcImage@ if the @srcImage@’s
---     'Graphics.Vulkan.Core10.Enums.Format.Format' is not a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
---     and /must/ be a region that is contained within the plane being
---     copied if the @srcImage@’s
---     'Graphics.Vulkan.Core10.Enums.Format.Format' is a multi-planar
---     format
---
--- -   @dstBuffer@ /must/ be large enough to contain all buffer locations
---     that are accessed according to
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,
---     for each element of @pRegions@
---
--- -   The union of all source regions, and the union of all destination
---     regions, specified by the elements of @pRegions@, /must/ not overlap
---     in memory
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @srcImage@ /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'
---
--- -   @srcImage@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
---     usage flag
---
--- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @srcImage@ /must/ have a sample count equal to
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   @srcImageLayout@ /must/ specify the layout of the image subresources
---     of @srcImage@ specified in @pRegions@ at the time this command is
---     executed on a 'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   @srcImageLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
---     or 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
---
--- -   @dstBuffer@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
---     /must/ not be a protected image
---
--- -   If @commandBuffer@ is an unprotected command buffer, then
---     @dstBuffer@ /must/ not be a protected buffer
---
--- -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@
---     /must/ not be an unprotected buffer
---
--- -   The @imageSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @imageSubresource.baseArrayLayer@ +
---     @imageSubresource.layerCount@ of each element of @pRegions@ /must/
---     be less than or equal to the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @imageOffset@ and @imageExtent@ members of each element of
---     @pRegions@ /must/ respect the image transfer granularity
---     requirements of @commandBuffer@’s command pool’s queue family, as
---     described in
---     'Graphics.Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
---
--- -   @srcImage@ /must/ not have been created with @flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @srcImage@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @srcImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @dstBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid 'BufferImageCopy' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support transfer,
---     graphics, or compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @regionCount@ /must/ be greater than @0@
---
--- -   Each of @commandBuffer@, @dstBuffer@, and @srcImage@ /must/ have
---     been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout'
-cmdCopyImageToBuffer :: forall io . MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstBuffer" ::: Buffer) -> ("regions" ::: Vector BufferImageCopy) -> io ()
-cmdCopyImageToBuffer commandBuffer srcImage srcImageLayout dstBuffer regions = liftIO . evalContT $ do
-  let vkCmdCopyImageToBuffer' = mkVkCmdCopyImageToBuffer (pVkCmdCopyImageToBuffer (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPRegions <- ContT $ allocaBytesAligned @BufferImageCopy ((Data.Vector.length (regions)) * 56) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e) . ($ ())) (regions)
-  lift $ vkCmdCopyImageToBuffer' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdUpdateBuffer
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()
-
--- | vkCmdUpdateBuffer - Update a buffer’s contents from host memory
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @dstBuffer@ is a handle to the buffer to be updated.
---
--- -   @dstOffset@ is the byte offset into the buffer to start updating,
---     and /must/ be a multiple of 4.
---
--- -   @dataSize@ is the number of bytes to update, and /must/ be a
---     multiple of 4.
---
--- -   @pData@ is a pointer to the source data for the buffer update, and
---     /must/ be at least @dataSize@ bytes in size.
---
--- = Description
---
--- @dataSize@ /must/ be less than or equal to 65536 bytes. For larger
--- updates, applications /can/ use buffer to buffer
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers copies>.
---
--- Note
---
--- Buffer updates performed with 'cmdUpdateBuffer' first copy the data into
--- command buffer memory when the command is recorded (which requires
--- additional storage and may incur an additional allocation), and then
--- copy the data from the command buffer into @dstBuffer@ when the command
--- is executed on a device.
---
--- The additional cost of this functionality compared to
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers buffer to buffer copies>
--- means it is only recommended for very small amounts of data, and is why
--- it is limited to only 65536 bytes.
---
--- Applications /can/ work around this by issuing multiple
--- 'cmdUpdateBuffer' commands to different ranges of the same buffer, but
--- it is strongly recommended that they /should/ not.
---
--- The source data is copied from the user pointer to the command buffer
--- when the command is called.
---
--- 'cmdUpdateBuffer' is only allowed outside of a render pass. This command
--- is treated as “transfer” operation, for the purposes of synchronization
--- barriers. The
--- 'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
--- /must/ be specified in @usage@ of
--- 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer
--- to be compatible with 'cmdUpdateBuffer'.
---
--- == Valid Usage
---
--- -   @dstOffset@ /must/ be less than the size of @dstBuffer@
---
--- -   @dataSize@ /must/ be less than or equal to the size of @dstBuffer@
---     minus @dstOffset@
---
--- -   @dstBuffer@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @dstOffset@ /must/ be a multiple of @4@
---
--- -   @dataSize@ /must/ be less than or equal to @65536@
---
--- -   @dataSize@ /must/ be a multiple of @4@
---
--- -   If @commandBuffer@ is an unprotected command buffer, then
---     @dstBuffer@ /must/ not be a protected buffer
---
--- -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@
---     /must/ not be an unprotected buffer
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @dstBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support transfer,
---     graphics, or compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @dataSize@ /must/ be greater than @0@
---
--- -   Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdUpdateBuffer :: forall io . MonadIO io => CommandBuffer -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("dataSize" ::: DeviceSize) -> ("data" ::: Ptr ()) -> io ()
-cmdUpdateBuffer commandBuffer dstBuffer dstOffset dataSize data' = liftIO $ do
-  let vkCmdUpdateBuffer' = mkVkCmdUpdateBuffer (pVkCmdUpdateBuffer (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdUpdateBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (dataSize) (data')
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdFillBuffer
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()
-
--- | vkCmdFillBuffer - Fill a region of a buffer with a fixed value
---
--- = 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 'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE'
---     to fill the range from @offset@ to the end of the buffer. If
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE' is used and the
---     remaining size of the buffer is not a multiple of 4, then the
---     nearest smaller multiple is used.
---
--- -   @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
---
--- 'cmdFillBuffer' is treated as “transfer” operation for the purposes of
--- synchronization barriers. The
--- 'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
--- /must/ be specified in @usage@ of
--- 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer
--- to be compatible with 'cmdFillBuffer'.
---
--- == Valid Usage
---
--- -   @dstOffset@ /must/ be less than the size of @dstBuffer@
---
--- -   @dstOffset@ /must/ be a multiple of @4@
---
--- -   If @size@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be
---     greater than @0@
---
--- -   If @size@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be
---     less than or equal to the size of @dstBuffer@ minus @dstOffset@
---
--- -   If @size@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be a
---     multiple of @4@
---
--- -   @dstBuffer@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   If @commandBuffer@ is an unprotected command buffer, then
---     @dstBuffer@ /must/ not be a protected buffer
---
--- -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@
---     /must/ not be an unprotected buffer
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @dstBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support transfer, graphics
---     or compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdFillBuffer :: forall io . MonadIO io => CommandBuffer -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> DeviceSize -> ("data" ::: Word32) -> io ()
-cmdFillBuffer commandBuffer dstBuffer dstOffset size data' = liftIO $ do
-  let vkCmdFillBuffer' = mkVkCmdFillBuffer (pVkCmdFillBuffer (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdFillBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (size) (data')
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdClearColorImage
-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()
-
--- | vkCmdClearColorImage - Clear regions of a color image
---
--- = 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
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.
---
--- -   @pColor@ is a pointer to a
---     'Graphics.Vulkan.Core10.SharedTypes.ClearColorValue' structure
---     containing the values that the image subresource ranges will be
---     cleared to (see
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>
---     below).
---
--- -   @rangeCount@ is the number of image subresource range structures in
---     @pRanges@.
---
--- -   @pRanges@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'
---     structures describing a range of mipmap levels, array layers, and
---     aspects to be cleared, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.
---
--- = Description
---
--- Each specified range in @pRanges@ is cleared to the value specified by
--- @pColor@.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @image@ /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
---
--- -   @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
--- -   @image@ /must/ not use a format listed in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
---
--- -   If @image@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @imageLayout@ /must/ specify the layout of the image subresource
---     ranges of @image@ specified in @pRanges@ at the time this command is
---     executed on a 'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   @imageLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
---
--- -   The
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@aspectMask@
---     members of the elements of the @pRanges@ array /must/ each only
---     include
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
---
--- -   The
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@baseMipLevel@
---     members of the elements of the @pRanges@ array /must/ each be less
---     than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   For each 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'
---     element of @pRanges@, if the @levelCount@ member is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then
---     @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@
---     specified in 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when
---     @image@ was created
---
--- -   The
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@baseArrayLayer@
---     members of the elements of the @pRanges@ array /must/ each be less
---     than the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   For each 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'
---     element of @pRanges@, if the @layerCount@ member is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then
---     @baseArrayLayer@ + @layerCount@ /must/ be less than the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   @image@ /must/ not have a compressed or depth\/stencil format
---
--- -   If @commandBuffer@ is an unprotected command buffer, then @image@
---     /must/ not be a protected image
---
--- -   If @commandBuffer@ is a protected command buffer, then @image@
---     /must/ not be an unprotected image
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @imageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @pColor@ /must/ be a valid pointer to a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ClearColorValue' union
---
--- -   @pRanges@ /must/ be a valid pointer to an array of @rangeCount@
---     valid 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'
---     structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @rangeCount@ /must/ be greater than @0@
---
--- -   Both of @commandBuffer@, and @image@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.ClearColorValue',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'
-cmdClearColorImage :: forall io . MonadIO io => CommandBuffer -> Image -> ImageLayout -> ClearColorValue -> ("ranges" ::: Vector ImageSubresourceRange) -> io ()
-cmdClearColorImage commandBuffer image imageLayout color ranges = liftIO . evalContT $ do
-  let vkCmdClearColorImage' = mkVkCmdClearColorImage (pVkCmdClearColorImage (deviceCmds (commandBuffer :: CommandBuffer)))
-  pColor <- ContT $ withCStruct (color)
-  pPRanges <- ContT $ allocaBytesAligned @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e) . ($ ())) (ranges)
-  lift $ vkCmdClearColorImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pColor ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdClearDepthStencilImage
-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()
-
--- | vkCmdClearDepthStencilImage - Fill regions of a combined depth\/stencil
--- image
---
--- = 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
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.
---
--- -   @pDepthStencil@ is a pointer to a
---     'Graphics.Vulkan.Core10.SharedTypes.ClearDepthStencilValue'
---     structure containing the values that the depth and stencil image
---     subresource ranges will be cleared to (see
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>
---     below).
---
--- -   @rangeCount@ is the number of image subresource range structures in
---     @pRanges@.
---
--- -   @pRanges@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'
---     structures describing a range of mipmap levels, array layers, and
---     aspects to be cleared, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @image@ /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
---
--- -   If the @aspect@ member of any element of @pRanges@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
---     and @image@ was created with
---     <VkImageStencilUsageCreateInfo.html separate stencil usage>,
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---     /must/ have been included in the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
---     used to create @image@
---
--- -   If the @aspect@ member of any element of @pRanges@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
---     and @image@ was not created with
---     <VkImageStencilUsageCreateInfo.html separate stencil usage>,
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---     /must/ have been included in the
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to
---     create @image@
---
--- -   If the @aspect@ member of any element of @pRanges@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---     /must/ have been included in the
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to
---     create @image@
---
--- -   If @image@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @imageLayout@ /must/ specify the layout of the image subresource
---     ranges of @image@ specified in @pRanges@ at the time this command is
---     executed on a 'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   @imageLayout@ /must/ be either of
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
---     or 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
---
--- -   The
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@aspectMask@
---     member of each element of the @pRanges@ array /must/ not include
---     bits other than
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
---
--- -   If the @image@’s format does not have a stencil component, then the
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@aspectMask@
---     member of each element of the @pRanges@ array /must/ not include the
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
---     bit
---
--- -   If the @image@’s format does not have a depth component, then the
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@aspectMask@
---     member of each element of the @pRanges@ array /must/ not include the
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
---     bit
---
--- -   The
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@baseMipLevel@
---     members of the elements of the @pRanges@ array /must/ each be less
---     than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   For each 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'
---     element of @pRanges@, if the @levelCount@ member is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then
---     @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@
---     specified in 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when
---     @image@ was created
---
--- -   The
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@baseArrayLayer@
---     members of the elements of the @pRanges@ array /must/ each be less
---     than the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   For each 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'
---     element of @pRanges@, if the @layerCount@ member is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then
---     @baseArrayLayer@ + @layerCount@ /must/ be less than the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   @image@ /must/ have a depth\/stencil format
---
--- -   If @commandBuffer@ is an unprotected command buffer, then @image@
---     /must/ not be a protected image
---
--- -   If @commandBuffer@ is a protected command buffer, then @image@
---     /must/ not be an unprotected image
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @imageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @pDepthStencil@ /must/ be a valid pointer to a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ClearDepthStencilValue'
---     structure
---
--- -   @pRanges@ /must/ be a valid pointer to an array of @rangeCount@
---     valid 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'
---     structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @rangeCount@ /must/ be greater than @0@
---
--- -   Both of @commandBuffer@, and @image@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.ClearDepthStencilValue',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange'
-cmdClearDepthStencilImage :: forall io . MonadIO io => CommandBuffer -> Image -> ImageLayout -> ClearDepthStencilValue -> ("ranges" ::: Vector ImageSubresourceRange) -> io ()
-cmdClearDepthStencilImage commandBuffer image imageLayout depthStencil ranges = liftIO . evalContT $ do
-  let vkCmdClearDepthStencilImage' = mkVkCmdClearDepthStencilImage (pVkCmdClearDepthStencilImage (deviceCmds (commandBuffer :: CommandBuffer)))
-  pDepthStencil <- ContT $ withCStruct (depthStencil)
-  pPRanges <- ContT $ allocaBytesAligned @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e) . ($ ())) (ranges)
-  lift $ vkCmdClearDepthStencilImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pDepthStencil ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdClearAttachments
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()
-
--- | vkCmdClearAttachments - Clear regions within bound framebuffer
--- attachments
---
--- = 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 'ClearAttachment'
---     structures defining the attachments to clear and the clear values to
---     use. If any attachment to be cleared in the current subpass is
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the
---     clear has no effect on that attachment.
---
--- -   @rectCount@ is the number of entries in the @pRects@ array.
---
--- -   @pRects@ is a pointer to an array of 'ClearRect' structures defining
---     regions within each selected attachment to clear.
---
--- = Description
---
--- 'cmdClearAttachments' /can/ clear multiple regions of each attachment
--- used in the current subpass of a render pass instance. This command
--- /must/ be called only inside a render pass instance, and implicitly
--- selects the images to clear based on the current framebuffer attachments
--- and the command parameters.
---
--- If the render pass has a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>,
--- clears follow the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops operations of fragment density maps>
--- as if each clear region was a primitive which generates fragments. The
--- clear color is applied to all pixels inside each fragment’s area
--- regardless if the pixels lie outside of the clear region. Clears /may/
--- have a different set of supported fragment areas than draws.
---
--- Unlike other
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>,
--- 'cmdClearAttachments' executes as a drawing command, rather than a
--- transfer command, with writes performed by it executing in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primrast-order rasterization order>.
--- Clears to color attachments are executed as color attachment writes, by
--- the
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'
--- stage. Clears to depth\/stencil attachments are executed as
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth writes>
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil writes>
--- by the
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT'
--- and
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'
--- stages.
---
--- == Valid Usage
---
--- -   If the @aspectMask@ member of any element of @pAttachments@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
---     then the @colorAttachment@ member of that element /must/ either
---     refer to a color attachment which is
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/
---     be a valid color attachment
---
--- -   If the @aspectMask@ member of any element of @pAttachments@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',
---     then the current subpass\' depth\/stencil attachment /must/ either
---     be 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or
---     /must/ have a depth component
---
--- -   If the @aspectMask@ member of any element of @pAttachments@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
---     then the current subpass\' depth\/stencil attachment /must/ either
---     be 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or
---     /must/ have a stencil component
---
--- -   The @rect@ member of each element of @pRects@ /must/ have an
---     @extent.width@ greater than @0@
---
--- -   The @rect@ member of each element of @pRects@ /must/ have an
---     @extent.height@ greater than @0@
---
--- -   The rectangular region specified by each element of @pRects@ /must/
---     be contained within the render area of the current render pass
---     instance
---
--- -   The layers specified by each element of @pRects@ /must/ be contained
---     within every attachment that @pAttachments@ refers to
---
--- -   The @layerCount@ member of each element of @pRects@ /must/ not be
---     @0@
---
--- -   If @commandBuffer@ is an unprotected command buffer, then each
---     attachment to be cleared /must/ not be a protected image
---
--- -   If @commandBuffer@ is a protected command buffer, then each
---     attachment to be cleared /must/ not be an unprotected image
---
--- -   If the render pass instance this is recorded in uses multiview, then
---     @baseArrayLayer@ /must/ be zero and @layerCount@ /must/ be one
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pAttachments@ /must/ be a valid pointer to an array of
---     @attachmentCount@ valid 'ClearAttachment' structures
---
--- -   @pRects@ /must/ be a valid pointer to an array of @rectCount@
---     'ClearRect' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   @attachmentCount@ /must/ be greater than @0@
---
--- -   @rectCount@ /must/ be greater than @0@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'ClearAttachment', 'ClearRect',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdClearAttachments :: forall io . MonadIO io => CommandBuffer -> ("attachments" ::: Vector ClearAttachment) -> ("rects" ::: Vector ClearRect) -> io ()
-cmdClearAttachments commandBuffer attachments rects = liftIO . evalContT $ do
-  let vkCmdClearAttachments' = mkVkCmdClearAttachments (pVkCmdClearAttachments (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPAttachments <- ContT $ allocaBytesAligned @ClearAttachment ((Data.Vector.length (attachments)) * 24) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments `plusPtr` (24 * (i)) :: Ptr ClearAttachment) (e) . ($ ())) (attachments)
-  pPRects <- ContT $ allocaBytesAligned @ClearRect ((Data.Vector.length (rects)) * 24) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRects `plusPtr` (24 * (i)) :: Ptr ClearRect) (e) . ($ ())) (rects)
-  lift $ vkCmdClearAttachments' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32)) (pPAttachments) ((fromIntegral (Data.Vector.length $ (rects)) :: Word32)) (pPRects)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdResolveImage
-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()
-
--- | vkCmdResolveImage - Resolve regions of an image
---
--- = 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 'ImageResolve' structures
---     specifying the regions to resolve.
---
--- = Description
---
--- During the resolve the samples corresponding to each pixel location in
--- the source are converted to a single sample before being written to the
--- destination. If the source formats are floating-point or normalized
--- types, the sample values for each pixel are resolved in an
--- implementation-dependent manner. If the source formats are integer
--- types, a single sample’s value is selected for each pixel.
---
--- @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
--- in texels of the sub-regions of the source and destination image data.
--- @extent@ is the size in texels of the source image to resolve in
--- @width@, @height@ and @depth@.
---
--- Resolves are done layer by layer starting with @baseArrayLayer@ member
--- of @srcSubresource@ for the source and @dstSubresource@ for the
--- destination. @layerCount@ layers are resolved to the destination image.
---
--- == Valid Usage
---
--- -   The source region specified by each element of @pRegions@ /must/ be
---     a region that is contained within @srcImage@
---
--- -   The destination region specified by each element of @pRegions@
---     /must/ be a region that is contained within @dstImage@
---
--- -   The union of all source regions, and the union of all destination
---     regions, specified by the elements of @pRegions@, /must/ not overlap
---     in memory
---
--- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @srcImage@ /must/ have a sample count equal to any valid sample
---     count value other than
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @dstImage@ /must/ have a sample count equal to
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   @srcImageLayout@ /must/ specify the layout of the image subresources
---     of @srcImage@ specified in @pRegions@ at the time this command is
---     executed on a 'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   @srcImageLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
---     or 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
---
--- -   @dstImageLayout@ /must/ specify the layout of the image subresources
---     of @dstImage@ specified in @pRegions@ at the time this command is
---     executed on a 'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   @dstImageLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
---     or 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     of @dstImage@ /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
---
--- -   @srcImage@ and @dstImage@ /must/ have been created with the same
---     image format
---
--- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
---     /must/ not be a protected image
---
--- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
---     /must/ not be a protected image
---
--- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
---     /must/ not be an unprotected image
---
--- -   The @srcSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was
---     created
---
--- -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
---     each element of @pRegions@ /must/ be less than or equal to the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
---     each element of @pRegions@ /must/ be less than or equal to the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was
---     created
---
--- -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@
---     containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @srcImage@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @srcImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @dstImage@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @dstImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid 'ImageResolve' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @regionCount@ /must/ be greater than @0@
---
--- -   Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout', 'ImageResolve'
-cmdResolveImage :: forall io . MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageResolve) -> io ()
-cmdResolveImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do
-  let vkCmdResolveImage' = mkVkCmdResolveImage (pVkCmdResolveImage (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPRegions <- ContT $ allocaBytesAligned @ImageResolve ((Data.Vector.length (regions)) * 68) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageResolve) (e) . ($ ())) (regions)
-  lift $ vkCmdResolveImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetEvent
-  :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()
-
--- | vkCmdSetEvent - Set an event object to signaled state
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @event@ is the event that will be signaled.
---
--- -   @stageMask@ specifies the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>
---     used to determine when the @event@ is signaled.
---
--- = Description
---
--- When 'cmdSetEvent' is submitted to a queue, it defines an execution
--- dependency on commands that were submitted before it, and defines an
--- event signal operation which sets the event to the signaled state.
---
--- The first
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--- includes all commands that occur earlier in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
--- The synchronization scope is limited to operations on the pipeline
--- stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
--- specified by @stageMask@.
---
--- The second
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--- includes only the event signal operation.
---
--- If @event@ is already in the signaled state when 'cmdSetEvent' is
--- executed on the device, then 'cmdSetEvent' has no effect, no event
--- signal operation occurs, and no execution dependency is generated.
---
--- == Valid Usage
---
--- -   @stageMask@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   @commandBuffer@’s current device mask /must/ include exactly one
---     physical device
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @event@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Event'
---     handle
---
--- -   @stageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     values
---
--- -   @stageMask@ /must/ not be @0@
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Both of @commandBuffer@, and @event@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Event',
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'
-cmdSetEvent :: forall io . MonadIO io => CommandBuffer -> Event -> ("stageMask" ::: PipelineStageFlags) -> io ()
-cmdSetEvent commandBuffer event stageMask = liftIO $ do
-  let vkCmdSetEvent' = mkVkCmdSetEvent (pVkCmdSetEvent (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdSetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdResetEvent
-  :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()
-
--- | vkCmdResetEvent - Reset an event object to non-signaled state
---
--- = 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.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     specifying the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>
---     used to determine when the @event@ is unsignaled.
---
--- = Description
---
--- When 'cmdResetEvent' is submitted to a queue, it defines an execution
--- dependency on commands that were submitted before it, and defines an
--- event unsignal operation which resets the event to the unsignaled state.
---
--- The first
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--- includes all commands that occur earlier in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
--- The synchronization scope is limited to operations on the pipeline
--- stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
--- specified by @stageMask@.
---
--- The second
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--- includes only the event unsignal operation.
---
--- If @event@ is already in the unsignaled state when 'cmdResetEvent' is
--- executed on the device, then 'cmdResetEvent' has no effect, no event
--- unsignal operation occurs, and no execution dependency is generated.
---
--- == Valid Usage
---
--- -   @stageMask@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   When this command executes, @event@ /must/ not be waited on by a
---     'cmdWaitEvents' command that is currently executing
---
--- -   @commandBuffer@’s current device mask /must/ include exactly one
---     physical device
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @event@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Event'
---     handle
---
--- -   @stageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     values
---
--- -   @stageMask@ /must/ not be @0@
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Both of @commandBuffer@, and @event@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Event',
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'
-cmdResetEvent :: forall io . MonadIO io => CommandBuffer -> Event -> ("stageMask" ::: PipelineStageFlags) -> io ()
-cmdResetEvent commandBuffer event stageMask = liftIO $ do
-  let vkCmdResetEvent' = mkVkCmdResetEvent (pVkCmdResetEvent (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdResetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdWaitEvents
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (ImageMemoryBarrier a) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (ImageMemoryBarrier a) -> IO ()
-
--- | vkCmdWaitEvents - Wait for one or more events and insert a set of memory
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @eventCount@ is the length of the @pEvents@ array.
---
--- -   @pEvents@ is a pointer to an array of event object handles to wait
---     on.
---
--- -   @srcStageMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     specifying the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.
---
--- -   @dstStageMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     specifying the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.
---
--- -   @memoryBarrierCount@ is the length of the @pMemoryBarriers@ array.
---
--- -   @pMemoryBarriers@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.OtherTypes.MemoryBarrier' structures.
---
--- -   @bufferMemoryBarrierCount@ is the length of the
---     @pBufferMemoryBarriers@ array.
---
--- -   @pBufferMemoryBarriers@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.
---
--- -   @imageMemoryBarrierCount@ is the length of the
---     @pImageMemoryBarriers@ array.
---
--- -   @pImageMemoryBarriers@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.
---
--- = Description
---
--- When 'cmdWaitEvents' is submitted to a queue, it defines a memory
--- dependency between prior event signal operations on the same queue or
--- the host, and subsequent commands. 'cmdWaitEvents' /must/ not be used to
--- wait on event signal operations occurring on other queues.
---
--- The first synchronization scope only includes event signal operations
--- that operate on members of @pEvents@, and the operations that
--- happened-before the event signal operations. Event signal operations
--- performed by 'cmdSetEvent' that occur earlier in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
--- are included in the first synchronization scope, if the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>
--- pipeline stage in their @stageMask@ parameter is
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>
--- than or equal to the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>
--- pipeline stage in @srcStageMask@. Event signal operations performed by
--- 'Graphics.Vulkan.Core10.Event.setEvent' are only included in the first
--- synchronization scope if
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'
--- is included in @srcStageMask@.
---
--- The second
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--- includes all commands that occur later in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
--- The second synchronization scope is limited to operations on the
--- pipeline stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
--- specified by @dstStageMask@.
---
--- The first
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
--- specified by @srcStageMask@. Within that, the first access scope only
--- includes the first access scopes defined by elements of the
--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
--- arrays, which each define a set of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.
--- If no memory barriers are specified, then the first access scope
--- includes no accesses.
---
--- The second
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
--- specified by @dstStageMask@. Within that, the second access scope only
--- includes the second access scopes defined by elements of the
--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
--- arrays, which each define a set of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.
--- If no memory barriers are specified, then the second access scope
--- includes no accesses.
---
--- Note
---
--- 'cmdWaitEvents' is used with 'cmdSetEvent' to define a memory dependency
--- between two sets of action commands, roughly in the same way as pipeline
--- barriers, but split into two commands such that work between the two
--- /may/ execute unhindered.
---
--- Unlike 'cmdPipelineBarrier', a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--- /cannot/ be performed using 'cmdWaitEvents'.
---
--- Note
---
--- Applications /should/ be careful to avoid race conditions when using
--- events. There is no direct ordering guarantee between a 'cmdResetEvent'
--- command and a 'cmdWaitEvents' command submitted after it, 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 'cmdSetEvent' with any of the members of
---     @pEvents@ and
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'
---     if any of the members of @pEvents@ was set using
---     'Graphics.Vulkan.Core10.Event.setEvent'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   If @pEvents@ includes one or more events that will be signaled by
---     'Graphics.Vulkan.Core10.Event.setEvent' after @commandBuffer@ has
---     been submitted to a queue, then 'cmdWaitEvents' /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.CommandPoolCreateInfo' structure
---     that was used to create the
---     'Graphics.Vulkan.Core10.Handles.CommandPool' that @commandBuffer@
---     was allocated from, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>
---
--- -   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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   The @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any
---     element of @pBufferMemoryBarriers@ or @pImageMemoryBarriers@ /must/
---     be equal
---
--- -   @commandBuffer@’s current device mask /must/ include exactly one
---     physical device
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- -   The @srcAccessMask@ member of each element of @pMemoryBarriers@
---     /must/ only include access flags that are supported by one or more
---     of the pipeline stages in @srcStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   The @dstAccessMask@ member of each element of @pMemoryBarriers@
---     /must/ only include access flags that are supported by one or more
---     of the pipeline stages in @dstStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   The @srcAccessMask@ member of each element of
---     @pBufferMemoryBarriers@ /must/ only include access flags that are
---     supported by one or more of the pipeline stages in @srcStageMask@,
---     as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   The @dstAccessMask@ member of each element of
---     @pBufferMemoryBarriers@ /must/ only include access flags that are
---     supported by one or more of the pipeline stages in @dstStageMask@,
---     as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   The @srcAccessMask@ member of each element of @pImageMemoryBarriers@
---     /must/ only include access flags that are supported by one or more
---     of the pipeline stages in @srcStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   The @dstAccessMask@ member of any element of @pImageMemoryBarriers@
---     /must/ only include access flags that are supported by one or more
---     of the pipeline stages in @dstStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pEvents@ /must/ be a valid pointer to an array of @eventCount@
---     valid 'Graphics.Vulkan.Core10.Handles.Event' handles
---
--- -   @srcStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     values
---
--- -   @srcStageMask@ /must/ not be @0@
---
--- -   @dstStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     values
---
--- -   @dstStageMask@ /must/ not be @0@
---
--- -   If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a
---     valid pointer to an array of @memoryBarrierCount@ valid
---     'Graphics.Vulkan.Core10.OtherTypes.MemoryBarrier' structures
---
--- -   If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
---     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
---     valid 'Graphics.Vulkan.Core10.OtherTypes.BufferMemoryBarrier'
---     structures
---
--- -   If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@
---     /must/ be a valid pointer to an array of @imageMemoryBarrierCount@
---     valid 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier'
---     structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   @eventCount@ /must/ be greater than @0@
---
--- -   Both of @commandBuffer@, and the elements of @pEvents@ /must/ have
---     been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Event',
--- 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
--- 'Graphics.Vulkan.Core10.OtherTypes.MemoryBarrier',
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'
-cmdWaitEvents :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> ("events" ::: Vector Event) -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> ("memoryBarriers" ::: Vector MemoryBarrier) -> ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier) -> ("imageMemoryBarriers" ::: Vector (ImageMemoryBarrier a)) -> io ()
-cmdWaitEvents commandBuffer events srcStageMask dstStageMask memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do
-  let vkCmdWaitEvents' = mkVkCmdWaitEvents (pVkCmdWaitEvents (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPEvents <- ContT $ allocaBytesAligned @Event ((Data.Vector.length (events)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPEvents `plusPtr` (8 * (i)) :: Ptr Event) (e)) (events)
-  pPMemoryBarriers <- ContT $ allocaBytesAligned @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e) . ($ ())) (memoryBarriers)
-  pPBufferMemoryBarriers <- ContT $ allocaBytesAligned @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e) . ($ ())) (bufferMemoryBarriers)
-  pPImageMemoryBarriers <- ContT $ allocaBytesAligned @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _)) (e) . ($ ())) (imageMemoryBarriers)
-  lift $ vkCmdWaitEvents' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (events)) :: Word32)) (pPEvents) (srcStageMask) (dstStageMask) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (pPImageMemoryBarriers)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdPipelineBarrier
-  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (ImageMemoryBarrier a) -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (ImageMemoryBarrier a) -> IO ()
-
--- | vkCmdPipelineBarrier - Insert a memory dependency
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @srcStageMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     specifying the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>.
---
--- -   @dstStageMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     specifying the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>.
---
--- -   @dependencyFlags@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits'
---     specifying how execution and memory dependencies are formed.
---
--- -   @memoryBarrierCount@ is the length of the @pMemoryBarriers@ array.
---
--- -   @pMemoryBarriers@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.OtherTypes.MemoryBarrier' structures.
---
--- -   @bufferMemoryBarrierCount@ is the length of the
---     @pBufferMemoryBarriers@ array.
---
--- -   @pBufferMemoryBarriers@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.
---
--- -   @imageMemoryBarrierCount@ is the length of the
---     @pImageMemoryBarriers@ array.
---
--- -   @pImageMemoryBarriers@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.
---
--- = Description
---
--- When 'cmdPipelineBarrier' is submitted to a queue, it defines a memory
--- dependency between commands that were submitted before it, and those
--- submitted after it.
---
--- If 'cmdPipelineBarrier' was recorded outside a render pass instance, the
--- first
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--- includes all commands that occur earlier in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
--- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the
--- first synchronization scope includes only commands that occur earlier in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
--- within the same subpass. In either case, the first synchronization scope
--- is limited to operations on the pipeline stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
--- specified by @srcStageMask@.
---
--- If 'cmdPipelineBarrier' was recorded outside a render pass instance, the
--- second
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--- includes all commands that occur later in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
--- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the
--- second synchronization scope includes only commands that occur later in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
--- within the same subpass. In either case, the second synchronization
--- scope is limited to operations on the pipeline stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
--- specified by @dstStageMask@.
---
--- The first
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
--- specified by @srcStageMask@. Within that, the first access scope only
--- includes the first access scopes defined by elements of the
--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
--- arrays, which each define a set of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.
--- If no memory barriers are specified, then the first access scope
--- includes no accesses.
---
--- The second
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
--- specified by @dstStageMask@. Within that, the second access scope only
--- includes the second access scopes defined by elements of the
--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
--- arrays, which each define a set of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.
--- If no memory barriers are specified, then the second access scope
--- includes no accesses.
---
--- If @dependencyFlags@ includes
--- 'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT',
--- then any dependency between
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space>
--- pipeline stages is
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-local>
--- - otherwise it is
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-global>.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   If 'cmdPipelineBarrier' is called within a render pass instance, the
---     render pass /must/ have been created with at least one
---     'Graphics.Vulkan.Core10.Pass.SubpassDependency' instance in
---     'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo'::@pDependencies@
---     that expresses a dependency from the current subpass to itself, and
---     for which @srcStageMask@ contains a subset of the bit values in
---     'Graphics.Vulkan.Core10.Pass.SubpassDependency'::@srcStageMask@,
---     @dstStageMask@ contains a subset of the bit values in
---     'Graphics.Vulkan.Core10.Pass.SubpassDependency'::@dstStageMask@,
---     @dependencyFlags@ is equal to
---     'Graphics.Vulkan.Core10.Pass.SubpassDependency'::@dependencyFlags@,
---     @srcAccessMask@ member of each element of @pMemoryBarriers@ and
---     @pImageMemoryBarriers@ contains a subset of the bit values in
---     'Graphics.Vulkan.Core10.Pass.SubpassDependency'::@srcAccessMask@,
---     and @dstAccessMask@ member of each element of @pMemoryBarriers@ and
---     @pImageMemoryBarriers@ contains a subset of the bit values in
---     'Graphics.Vulkan.Core10.Pass.SubpassDependency'::@dstAccessMask@
---
--- -   If 'cmdPipelineBarrier' is called within a render pass instance,
---     @bufferMemoryBarrierCount@ /must/ be @0@
---
--- -   If 'cmdPipelineBarrier' 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
---     'Graphics.Vulkan.Core10.Pass.SubpassDescription' instance or by the
---     @pDepthStencilResolveAttachment@ member of the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'
---     structure that the current subpass was created with
---
--- -   If 'cmdPipelineBarrier' 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
---     'Graphics.Vulkan.Core10.Pass.SubpassDescription' instance or by the
---     @pDepthStencilResolveAttachment@ member of the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'
---     structure that the current subpass was created with, that refers to
---     the same @image@
---
--- -   If 'cmdPipelineBarrier' is called within a render pass instance, the
---     @oldLayout@ and @newLayout@ members of an element of
---     @pImageMemoryBarriers@ /must/ be equal
---
--- -   If 'cmdPipelineBarrier' is called within a render pass instance, the
---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any
---     element of @pImageMemoryBarriers@ /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.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.CommandPoolCreateInfo' structure
---     that was used to create the
---     'Graphics.Vulkan.Core10.Handles.CommandPool' that @commandBuffer@
---     was allocated from, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>
---
--- -   If 'cmdPipelineBarrier' is called outside of a render pass instance,
---     @dependencyFlags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- -   The @srcAccessMask@ member of each element of @pMemoryBarriers@
---     /must/ only include access flags that are supported by one or more
---     of the pipeline stages in @srcStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   The @dstAccessMask@ member of each element of @pMemoryBarriers@
---     /must/ only include access flags that are supported by one or more
---     of the pipeline stages in @dstStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   For any element of @pBufferMemoryBarriers@, if its
---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,
---     or if its @srcQueueFamilyIndex@ is the queue family index that was
---     used to create the command pool that @commandBuffer@ was allocated
---     from, then its @srcAccessMask@ member /must/ only contain access
---     flags that are supported by one or more of the pipeline stages in
---     @srcStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   For any element of @pBufferMemoryBarriers@, if its
---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,
---     or if its @dstQueueFamilyIndex@ is the queue family index that was
---     used to create the command pool that @commandBuffer@ was allocated
---     from, then its @dstAccessMask@ member /must/ only contain access
---     flags that are supported by one or more of the pipeline stages in
---     @dstStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   For any element of @pImageMemoryBarriers@, if its
---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,
---     or if its @srcQueueFamilyIndex@ is the queue family index that was
---     used to create the command pool that @commandBuffer@ was allocated
---     from, then its @srcAccessMask@ member /must/ only contain access
---     flags that are supported by one or more of the pipeline stages in
---     @srcStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   For any element of @pImageMemoryBarriers@, if its
---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,
---     or if its @dstQueueFamilyIndex@ is the queue family index that was
---     used to create the command pool that @commandBuffer@ was allocated
---     from, then its @dstAccessMask@ member /must/ only contain access
---     flags that are supported by one or more of the pipeline stages in
---     @dstStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @srcStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     values
---
--- -   @srcStageMask@ /must/ not be @0@
---
--- -   @dstStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     values
---
--- -   @dstStageMask@ /must/ not be @0@
---
--- -   @dependencyFlags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits'
---     values
---
--- -   If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a
---     valid pointer to an array of @memoryBarrierCount@ valid
---     'Graphics.Vulkan.Core10.OtherTypes.MemoryBarrier' structures
---
--- -   If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
---     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
---     valid 'Graphics.Vulkan.Core10.OtherTypes.BufferMemoryBarrier'
---     structures
---
--- -   If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@
---     /must/ be a valid pointer to an array of @imageMemoryBarrierCount@
---     valid 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier'
---     structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support transfer,
---     graphics, or compute operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',
--- 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
--- 'Graphics.Vulkan.Core10.OtherTypes.MemoryBarrier',
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'
-cmdPipelineBarrier :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> DependencyFlags -> ("memoryBarriers" ::: Vector MemoryBarrier) -> ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier) -> ("imageMemoryBarriers" ::: Vector (ImageMemoryBarrier a)) -> io ()
-cmdPipelineBarrier commandBuffer srcStageMask dstStageMask dependencyFlags memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do
-  let vkCmdPipelineBarrier' = mkVkCmdPipelineBarrier (pVkCmdPipelineBarrier (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPMemoryBarriers <- ContT $ allocaBytesAligned @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e) . ($ ())) (memoryBarriers)
-  pPBufferMemoryBarriers <- ContT $ allocaBytesAligned @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e) . ($ ())) (bufferMemoryBarriers)
-  pPImageMemoryBarriers <- ContT $ allocaBytesAligned @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _)) (e) . ($ ())) (imageMemoryBarriers)
-  lift $ vkCmdPipelineBarrier' (commandBufferHandle (commandBuffer)) (srcStageMask) (dstStageMask) (dependencyFlags) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (pPImageMemoryBarriers)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBeginQuery
-  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()
-
--- | vkCmdBeginQuery - Begin a query
---
--- = 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.Enums.QueryControlFlagBits.QueryControlFlagBits'
---     specifying constraints on the types of queries that /can/ be
---     performed.
---
--- = Description
---
--- If the @queryType@ of the pool is
--- 'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' and
--- @flags@ contains
--- 'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT',
--- an implementation /must/ return a result that matches the actual number
--- of samples passed. This is described in more detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-occlusion Occlusion Queries>.
---
--- Calling 'cmdBeginQuery' is equivalent to calling
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT'
--- with the @index@ parameter set to zero.
---
--- After beginning a query, that query is considered /active/ within the
--- command buffer it was called in until that same query is ended. Queries
--- active in a primary command buffer when secondary command buffers are
--- executed are considered active for those secondary command buffers.
---
--- == Valid Usage
---
--- -   @queryPool@ /must/ have been created with a @queryType@ that differs
---     from that of any queries that are
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
---     within @commandBuffer@
---
--- -   All queries used by the command /must/ be unavailable
---
--- -   The @queryType@ used to create @queryPool@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries>
---     feature is not enabled, or the @queryType@ used to create
---     @queryPool@ was not
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'
---
--- -   @query@ /must/ be less than the number of queries in @queryPool@
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', the
---     'Graphics.Vulkan.Core10.Handles.CommandPool' that @commandBuffer@
---     was allocated from /must/ support graphics operations
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'
---     and any of the @pipelineStatistics@ indicate graphics operations,
---     the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'
---     and any of the @pipelineStatistics@ indicate compute operations, the
---     'Graphics.Vulkan.Core10.Handles.CommandPool' that @commandBuffer@
---     was allocated from /must/ support compute operations
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If called within a render pass instance, the sum of @query@ and the
---     number of bits set in the current subpass’s view mask /must/ be less
---     than or equal to the number of queries in @queryPool@
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
---     the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
---     then
---     'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackQueries@
---     /must/ be supported
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#profiling-lock profiling lock>
---     /must/ have been held before
---     'Graphics.Vulkan.Core10.CommandBuffer.beginCommandBuffer' was called
---     on @commandBuffer@
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
---     and one of the counters used to create @queryPool@ was
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',
---     the query begin /must/ be the first recorded command in
---     @commandBuffer@
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
---     and one of the counters used to create @queryPool@ was
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',
---     the begin command /must/ not be recorded within a render pass
---     instance
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
---     and another query pool with a @queryType@
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
---     has been used within @commandBuffer@, its parent primary command
---     buffer or secondary command buffer recorded within the same parent
---     primary command buffer as @commandBuffer@, the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-features-performanceCounterMultipleQueryPools performanceCounterMultipleQueryPools>
---     feature /must/ be enabled
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     this command /must/ not be recorded in a command buffer that, either
---     directly or through secondary command buffers, also contains a
---     'cmdResetQueryPool' command affecting the same query
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @queryPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'
---     values
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlags',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool'
-cmdBeginQuery :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> io ()
-cmdBeginQuery commandBuffer queryPool query flags = liftIO $ do
-  let vkCmdBeginQuery' = mkVkCmdBeginQuery (pVkCmdBeginQuery (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdBeginQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query) (flags)
-  pure $ ()
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'cmdBeginQuery' and 'cmdEndQuery'
---
--- To ensure that 'cmdEndQuery' is always called: pass
--- 'Control.Exception.bracket_' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
--- Note that there is no inner resource
-cmdWithQuery :: forall io r . MonadIO io => (io () -> io () -> r) -> CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> r
-cmdWithQuery b commandBuffer queryPool query flags =
-  b (cmdBeginQuery commandBuffer queryPool query flags)
-    (cmdEndQuery commandBuffer queryPool query)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdEndQuery
-  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()
-
--- | vkCmdEndQuery - Ends a query
---
--- = 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
---
--- Calling 'cmdEndQuery' is equivalent to calling
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndQueryIndexedEXT'
--- with the @index@ parameter set to zero.
---
--- As queries operate asynchronously, ending a query does not immediately
--- set the query’s status to available. A query is considered /finished/
--- when the final results of the query are ready to be retrieved by
--- 'Graphics.Vulkan.Core10.Query.getQueryPoolResults' and
--- 'cmdCopyQueryPoolResults', and this is when the query’s status is set to
--- available.
---
--- Once a query is ended the query /must/ finish in finite time, unless the
--- state of the query is changed using other commands, e.g. by issuing a
--- reset of the query.
---
--- == Valid Usage
---
--- -   All queries used by the command /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
---
--- -   @query@ /must/ be less than the number of queries in @queryPool@
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If 'cmdEndQuery' is called within a render pass instance, the sum of
---     @query@ and the number of bits set in the current subpass’s view
---     mask /must/ be less than or equal to the number of queries in
---     @queryPool@
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
---     and one or more of the counters used to create @queryPool@ was
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',
---     the 'cmdEndQuery' /must/ be the last recorded command in
---     @commandBuffer@
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
---     and one or more of the counters used to create @queryPool@ was
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',
---     the 'cmdEndQuery' /must/ not be recorded within a render pass
---     instance
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @queryPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool'
-cmdEndQuery :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> io ()
-cmdEndQuery commandBuffer queryPool query = liftIO $ do
-  let vkCmdEndQuery' = mkVkCmdEndQuery (pVkCmdEndQuery (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdEndQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdResetQueryPool
-  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()
-
--- | vkCmdResetQueryPool - Reset queries in a query pool
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which this command will
---     be recorded.
---
--- -   @queryPool@ is the handle of the query pool managing the queries
---     being reset.
---
--- -   @firstQuery@ is the initial query index to reset.
---
--- -   @queryCount@ is the number of queries to reset.
---
--- = Description
---
--- When executed on a queue, this command sets the status of query indices
--- [@firstQuery@, @firstQuery@ + @queryCount@ - 1] to unavailable.
---
--- If the @queryType@ used to create @queryPool@ was
--- 'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
--- this command sets the status of query indices [@firstQuery@,
--- @firstQuery@ + @queryCount@ - 1] to unavailable for each pass of
--- @queryPool@, as indicated by a call to
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.
---
--- Note
---
--- Because 'cmdResetQueryPool' resets all the passes of the indicated
--- queries, applications must not record a 'cmdResetQueryPool' command for
--- a @queryPool@ created with
--- 'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
--- in a command buffer that needs to be submitted multiple times as
--- indicated by a call to
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.
--- Otherwise applications will never be able to complete the recorded
--- queries.
---
--- == Valid Usage
---
--- -   @firstQuery@ /must/ be less than the number of queries in
---     @queryPool@
---
--- -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or
---     equal to the number of queries in @queryPool@
---
--- -   All queries used by the command /must/ not be active
---
--- -   If @queryPool@ was created with
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     this command /must/ not be recorded in a command buffer that, either
---     directly or through secondary command buffers, also contains begin
---     commands for a query from the set of queries [@firstQuery@,
---     @firstQuery@ + @queryCount@ - 1]
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @queryPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool'
-cmdResetQueryPool :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> io ()
-cmdResetQueryPool commandBuffer queryPool firstQuery queryCount = liftIO $ do
-  let vkCmdResetQueryPool' = mkVkCmdResetQueryPool (pVkCmdResetQueryPool (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdResetQueryPool' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdWriteTimestamp
-  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()
-
--- | vkCmdWriteTimestamp - Write a device timestamp into a query object
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pipelineStage@ is one of the
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',
---     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
---
--- 'cmdWriteTimestamp' latches the value of the timer when all previous
--- commands have completed executing as far as the specified pipeline
--- stage, and writes the timestamp value to memory. When the timestamp
--- value is written, the availability status of the query is set to
--- available.
---
--- Note
---
--- If an implementation is unable to detect completion and latch the timer
--- at any specific stage of the pipeline, it /may/ instead do so at any
--- logically later stage.
---
--- 'cmdCopyQueryPoolResults' /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.getQueryPoolResults'. As with other
--- queries, the query /must/ be reset using 'cmdResetQueryPool' or
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool'
--- before requesting the timestamp value be written to it.
---
--- While 'cmdWriteTimestamp' /can/ be called inside or outside of a render
--- pass instance, 'cmdCopyQueryPoolResults' /must/ only be called outside
--- of a render pass instance.
---
--- Timestamps /may/ only be meaningfully compared if they are written by
--- commands submitted to the same queue.
---
--- Note
---
--- An example of such a comparison is determining the execution time of a
--- sequence of commands.
---
--- If 'cmdWriteTimestamp' is called while executing a render pass instance
--- that has multiview enabled, the timestamp uses N consecutive query
--- indices in the query pool (starting at @query@) where N is the number of
--- bits set in the view mask of the subpass the command is executed in. The
--- resulting query values are determined by an implementation-dependent
--- choice of one of the following behaviors:
---
--- -   The first query is a timestamp value and (if more than one bit is
---     set in the view mask) zero is written to the remaining queries. If
---     two timestamps are written in the same subpass, the sum of the
---     execution time of all views between those commands is the difference
---     between the first query written by each command.
---
--- -   All N queries are timestamp values. If two timestamps are written in
---     the same subpass, the sum of the execution time of all views between
---     those commands is the sum of the difference between corresponding
---     queries written by each command. The difference between
---     corresponding queries /may/ be the execution time of a single view.
---
--- In either case, the application /can/ sum the differences between all N
--- queries to determine the total execution time.
---
--- == Valid Usage
---
--- -   @queryPool@ /must/ have been created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'
---
--- -   The query identified by @queryPool@ and @query@ /must/ be
---     /unavailable/
---
--- -   The command pool’s queue family /must/ support a non-zero
---     @timestampValidBits@
---
--- -   All queries used by the command /must/ be unavailable
---
--- -   If 'cmdWriteTimestamp' is called within a render pass instance, the
---     sum of @query@ and the number of bits set in the current subpass’s
---     view mask /must/ be less than or equal to the number of queries in
---     @queryPool@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pipelineStage@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     value
---
--- -   @queryPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support transfer,
---     graphics, or compute operations
---
--- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool'
-cmdWriteTimestamp :: forall io . MonadIO io => CommandBuffer -> PipelineStageFlagBits -> QueryPool -> ("query" ::: Word32) -> io ()
-cmdWriteTimestamp commandBuffer pipelineStage queryPool query = liftIO $ do
-  let vkCmdWriteTimestamp' = mkVkCmdWriteTimestamp (pVkCmdWriteTimestamp (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdWriteTimestamp' (commandBufferHandle (commandBuffer)) (pipelineStage) (queryPool) (query)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdCopyQueryPoolResults
-  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()
-
--- | vkCmdCopyQueryPoolResults - Copy the results of queries in a query pool
--- to a buffer object
---
--- = 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 'Graphics.Vulkan.Core10.Handles.Buffer' 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.getQueryPoolResults'.
---
--- -   @flags@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits'
---     specifying how and when results are returned.
---
--- = Description
---
--- 'cmdCopyQueryPoolResults' is guaranteed to see the effect of previous
--- uses of 'cmdResetQueryPool' in the same queue, without any additional
--- synchronization. Thus, the results will always reflect the most recent
--- use of the query.
---
--- @flags@ has the same possible values described above for the @flags@
--- parameter of 'Graphics.Vulkan.Core10.Query.getQueryPoolResults', but the
--- different style of execution causes some subtle behavioral differences.
--- Because 'cmdCopyQueryPoolResults' executes in order with respect to
--- other query commands, there is less ambiguity about which use of a query
--- is being requested.
---
--- Results for all requested occlusion queries, pipeline statistics
--- queries, transform feedback queries, and timestamp queries are written
--- as 64-bit unsigned integer values if
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
--- is set or 32-bit unsigned integer values otherwise. Performance queries
--- store results in a tightly packed array whose type is determined by the
--- @unit@ member of the corresponding
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterKHR'.
---
--- If neither of
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT'
--- and
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'
--- are set, results are only written out for queries in the available
--- state.
---
--- If
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT'
--- is set, the implementation will wait for each query’s status to be in
--- the available state before retrieving the numerical results for that
--- query. This is guaranteed to reflect the most recent use of the query on
--- the same queue, assuming that the query is not being simultaneously used
--- by other queues. If the query does not become available in a finite
--- amount of time (e.g. due to not issuing a query since the last reset), a
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST' error /may/
--- occur.
---
--- Similarly, if
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'
--- is set and
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT'
--- is not set, the availability is guaranteed to reflect the most recent
--- use of the query on the same queue, assuming that the query is not being
--- simultaneously used by other queues. As with
--- 'Graphics.Vulkan.Core10.Query.getQueryPoolResults', implementations
--- /must/ guarantee that if they return a non-zero availability value, then
--- the numerical results are valid.
---
--- If
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
--- is set,
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT'
--- is not set, and the query’s status is unavailable, an intermediate
--- result value between zero and the final result value is written for that
--- query.
---
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
--- /must/ not be used if the pool’s @queryType@ is
--- 'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'.
---
--- 'cmdCopyQueryPoolResults' is considered to be a transfer operation, and
--- its writes to buffer memory /must/ be synchronized using
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'
--- and
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_WRITE_BIT'
--- before using the results.
---
--- == Valid Usage
---
--- -   @dstOffset@ /must/ be less than the size of @dstBuffer@
---
--- -   @firstQuery@ /must/ be less than the number of queries in
---     @queryPool@
---
--- -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or
---     equal to the number of queries in @queryPool@
---
--- -   If
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
---     is not set in @flags@ then @dstOffset@ and @stride@ /must/ be
---     multiples of @4@
---
--- -   If
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
---     is set in @flags@ then @dstOffset@ and @stride@ /must/ be multiples
---     of @8@
---
--- -   @dstBuffer@ /must/ have enough storage, from @dstOffset@, to contain
---     the result of each query, as described
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-memorylayout here>
---
--- -   @dstBuffer@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR'::@allowCommandBufferQueryCopies@
---     /must/ be 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT',
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     the @queryPool@ /must/ have been submitted once for each pass as
---     retrieved via a call to
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'
---
--- -   'cmdCopyQueryPoolResults' /must/ not be called if the @queryType@
---     used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_INTEL'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @queryPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   @dstBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits'
---     values
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Each of @commandBuffer@, @dstBuffer@, and @queryPool@ /must/ have
---     been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool',
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlags'
-cmdCopyQueryPoolResults :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> io ()
-cmdCopyQueryPoolResults commandBuffer queryPool firstQuery queryCount dstBuffer dstOffset stride flags = liftIO $ do
-  let vkCmdCopyQueryPoolResults' = mkVkCmdCopyQueryPoolResults (pVkCmdCopyQueryPoolResults (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdCopyQueryPoolResults' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount) (dstBuffer) (dstOffset) (stride) (flags)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdPushConstants
-  :: FunPtr (Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()
-
--- | vkCmdPushConstants - Update the values of push constants
---
--- = 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.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
---     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 a pointer to an array of @size@ bytes containing the
---     new push constant values.
---
--- = Description
---
--- Note
---
--- As @stageFlags@ needs to include all flags the relevant push constant
--- ranges were created with, any flags that are not supported by the queue
--- family that the 'Graphics.Vulkan.Core10.Handles.CommandPool' used to
--- allocate @commandBuffer@ was created on are ignored.
---
--- == Valid Usage
---
--- -   For each byte in the range specified by @offset@ and @size@ and for
---     each shader stage in @stageFlags@, there /must/ be a push constant
---     range in @layout@ that includes that byte and that stage
---
--- -   For each byte in the range specified by @offset@ and @size@ and for
---     each push constant range that overlaps that byte, @stageFlags@
---     /must/ include all stages in that push constant range’s
---     'Graphics.Vulkan.Core10.PipelineLayout.PushConstantRange'::@stageFlags@
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   @size@ /must/ be a multiple of @4@
---
--- -   @offset@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
---
--- -   @size@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
---     minus @offset@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @layout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   @stageFlags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
---     values
---
--- -   @stageFlags@ /must/ not be @0@
---
--- -   @pValues@ /must/ be a valid pointer to an array of @size@ bytes
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   @size@ /must/ be greater than @0@
---
--- -   Both of @commandBuffer@, and @layout@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout',
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'
-cmdPushConstants :: forall io . MonadIO io => CommandBuffer -> PipelineLayout -> ShaderStageFlags -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("values" ::: Ptr ()) -> io ()
-cmdPushConstants commandBuffer layout stageFlags offset size values = liftIO $ do
-  let vkCmdPushConstants' = mkVkCmdPushConstants (pVkCmdPushConstants (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdPushConstants' (commandBufferHandle (commandBuffer)) (layout) (stageFlags) (offset) (size) (values)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBeginRenderPass
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (RenderPassBeginInfo a) -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> Ptr (RenderPassBeginInfo a) -> SubpassContents -> IO ()
-
--- | vkCmdBeginRenderPass - Begin a new render pass
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer in which to record the
---     command.
---
--- -   @pRenderPassBegin@ is a pointer to a 'RenderPassBeginInfo' structure
---     specifying the render pass to begin an instance of, and the
---     framebuffer the instance uses.
---
--- -   @contents@ is a
---     'Graphics.Vulkan.Core10.Enums.SubpassContents.SubpassContents' value
---     specifying how the commands in the first subpass will be provided.
---
--- = Description
---
--- After beginning a render pass instance, the command buffer is ready to
--- record the commands for the first subpass of that render pass.
---
--- == Valid Usage
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If any of the @stencilInitialLayout@ or @stencilFinalLayout@ member
---     of the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
---     structures or the @stencilLayout@ member of the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'
---     structures specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---
--- -   If any of the @initialLayout@ members of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is not
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',
---     then each such @initialLayout@ /must/ be equal to the current layout
---     of the corresponding attachment image subresource of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@
---
--- -   The @srcStageMask@ and @dstStageMask@ members of any element of the
---     @pDependencies@ member of
---     'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo' used to create
---     @renderPass@ /must/ be supported by the capabilities of the queue
---     family identified by the @queueFamilyIndex@ member of the
---     'Graphics.Vulkan.Core10.CommandPool.CommandPoolCreateInfo' used to
---     create the command pool which @commandBuffer@ was allocated from
---
--- -   For any attachment in @framebuffer@ that is used by @renderPass@ and
---     is bound to memory locations that are also bound to another
---     attachment used by @renderPass@, and if at least one of those uses
---     causes either attachment to be written to, both attachments /must/
---     have had the
---     'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'
---     set
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pRenderPassBegin@ /must/ be a valid pointer to a valid
---     'RenderPassBeginInfo' structure
---
--- -   @contents@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SubpassContents.SubpassContents' value
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @commandBuffer@ /must/ be a primary
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Graphics                                                                                                                            |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'RenderPassBeginInfo',
--- 'Graphics.Vulkan.Core10.Enums.SubpassContents.SubpassContents'
-cmdBeginRenderPass :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io ()
-cmdBeginRenderPass commandBuffer renderPassBegin contents = liftIO . evalContT $ do
-  let vkCmdBeginRenderPass' = mkVkCmdBeginRenderPass (pVkCmdBeginRenderPass (deviceCmds (commandBuffer :: CommandBuffer)))
-  pRenderPassBegin <- ContT $ withCStruct (renderPassBegin)
-  lift $ vkCmdBeginRenderPass' (commandBufferHandle (commandBuffer)) pRenderPassBegin (contents)
-  pure $ ()
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'cmdBeginRenderPass' and 'cmdEndRenderPass'
---
--- To ensure that 'cmdEndRenderPass' is always called: pass
--- 'Control.Exception.bracket_' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
--- Note that there is no inner resource
-cmdWithRenderPass :: forall a io r . (PokeChain a, MonadIO io) => (io () -> io () -> r) -> CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> r
-cmdWithRenderPass b commandBuffer pRenderPassBegin contents =
-  b (cmdBeginRenderPass commandBuffer pRenderPassBegin contents)
-    (cmdEndRenderPass commandBuffer)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdNextSubpass
-  :: FunPtr (Ptr CommandBuffer_T -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> SubpassContents -> IO ()
-
--- | vkCmdNextSubpass - Transition to the next subpass of a render pass
---
--- = 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
---     'cmdBeginRenderPass'.
---
--- = Description
---
--- The subpass index for a render pass begins at zero when
--- 'cmdBeginRenderPass' is recorded, and increments each time
--- 'cmdNextSubpass' is recorded.
---
--- Moving to the next subpass automatically performs any multisample
--- resolve operations in the subpass being ended. End-of-subpass
--- multisample resolves are treated as color attachment writes for the
--- purposes of synchronization. This applies to resolve operations for both
--- color and depth\/stencil attachments. That is, they are considered to
--- execute in the
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'
--- pipeline stage and their writes are synchronized with
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.
--- Synchronization between rendering within a subpass and any resolve
--- operations at the end of the subpass occurs automatically, without need
--- for explicit dependencies or pipeline barriers. However, if the resolve
--- attachment is also used in a different subpass, an explicit dependency
--- is needed.
---
--- After transitioning to the next subpass, the application /can/ record
--- the commands for that subpass.
---
--- == Valid Usage
---
--- -   The current subpass index /must/ be less than the number of
---     subpasses in the render pass minus one
---
--- -   This command /must/ not be recorded when transform feedback is
---     active
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @contents@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SubpassContents.SubpassContents' value
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   @commandBuffer@ /must/ be a primary
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.SubpassContents.SubpassContents'
-cmdNextSubpass :: forall io . MonadIO io => CommandBuffer -> SubpassContents -> io ()
-cmdNextSubpass commandBuffer contents = liftIO $ do
-  let vkCmdNextSubpass' = mkVkCmdNextSubpass (pVkCmdNextSubpass (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdNextSubpass' (commandBufferHandle (commandBuffer)) (contents)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdEndRenderPass
-  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()
-
--- | vkCmdEndRenderPass - End the current render pass
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer in which to end the current
---     render pass instance.
---
--- = Description
---
--- Ending a render pass instance performs any multisample resolve
--- operations on the final subpass.
---
--- == Valid Usage
---
--- -   The current subpass index /must/ be equal to the number of subpasses
---     in the render pass minus one
---
--- -   This command /must/ not be recorded when transform feedback is
---     active
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   @commandBuffer@ /must/ be a primary
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdEndRenderPass :: forall io . MonadIO io => CommandBuffer -> io ()
-cmdEndRenderPass commandBuffer = liftIO $ do
-  let vkCmdEndRenderPass' = mkVkCmdEndRenderPass (pVkCmdEndRenderPass (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdEndRenderPass' (commandBufferHandle (commandBuffer))
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdExecuteCommands
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()
-
--- | vkCmdExecuteCommands - Execute a secondary command buffer from a primary
--- command buffer
---
--- = 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 a pointer to an array of @commandBufferCount@
---     secondary command buffer handles, which are recorded to execute in
---     the primary command buffer in the order they are listed in the
---     array.
---
--- = Description
---
--- If any element of @pCommandBuffers@ was not recorded with the
--- 'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
--- flag, and it was recorded into any other primary command buffer which is
--- currently in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable or recording state>,
--- that primary command buffer becomes
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
---
--- == Valid Usage
---
--- -   Each element of @pCommandBuffers@ /must/ have been allocated with a
---     @level@ of
---     'Graphics.Vulkan.Core10.Enums.CommandBufferLevel.COMMAND_BUFFER_LEVEL_SECONDARY'
---
--- -   Each element of @pCommandBuffers@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>
---
--- -   If any element of @pCommandBuffers@ was not recorded with the
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
---     flag, it /must/ not be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
---
--- -   If any element of @pCommandBuffers@ was not recorded with the
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
---     flag, it /must/ not have already been recorded to @commandBuffer@
---
--- -   If any element of @pCommandBuffers@ was not recorded with the
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
---     flag, it /must/ not appear more than once in @pCommandBuffers@
---
--- -   Each element of @pCommandBuffers@ /must/ have been allocated from a
---     'Graphics.Vulkan.Core10.Handles.CommandPool' that was created for
---     the same queue family as the
---     'Graphics.Vulkan.Core10.Handles.CommandPool' from which
---     @commandBuffer@ was allocated
---
--- -   If 'cmdExecuteCommands' is being called within a render pass
---     instance, that render pass instance /must/ have been begun with the
---     @contents@ parameter of 'cmdBeginRenderPass' set to
---     'Graphics.Vulkan.Core10.Enums.SubpassContents.SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS'
---
--- -   If 'cmdExecuteCommands' is being called within a render pass
---     instance, each element of @pCommandBuffers@ /must/ have been
---     recorded with the
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'
---
--- -   If 'cmdExecuteCommands' is being called within a render pass
---     instance, each element of @pCommandBuffers@ /must/ have been
---     recorded with
---     'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@subpass@
---     set to the index of the subpass which the given command buffer will
---     be executed in
---
--- -   If 'cmdExecuteCommands' is being called within a render pass
---     instance, the render passes specified in the
---     @pBeginInfo->pInheritanceInfo->renderPass@ members of the
---     'Graphics.Vulkan.Core10.CommandBuffer.beginCommandBuffer' commands
---     used to begin recording each element of @pCommandBuffers@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the current render pass
---
--- -   If 'cmdExecuteCommands' is being called within a render pass
---     instance, and any element of @pCommandBuffers@ was recorded with
---     'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@framebuffer@
---     not equal to 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', that
---     'Graphics.Vulkan.Core10.Handles.Framebuffer' /must/ match the
---     'Graphics.Vulkan.Core10.Handles.Framebuffer' used in the current
---     render pass instance
---
--- -   If 'cmdExecuteCommands' is being called within a render pass
---     instance that included
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'
---     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of
---     @pCommandBuffers@ /must/ have been recorded with
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'
---     in the @pNext@ chain of
---     'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'
---
--- -   If 'cmdExecuteCommands' is being called within a render pass
---     instance that included
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'
---     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of
---     @pCommandBuffers@ /must/ have been recorded with
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@transform@
---     identical to
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@
---
--- -   If 'cmdExecuteCommands' is being called within a render pass
---     instance that included
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'
---     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of
---     @pCommandBuffers@ /must/ have been recorded with
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@renderArea@
---     identical to 'RenderPassBeginInfo'::@renderArea@
---
--- -   If 'cmdExecuteCommands' is not being called within a render pass
---     instance, each element of @pCommandBuffers@ /must/ not have been
---     recorded with the
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>
---     feature is not enabled, @commandBuffer@ /must/ not have any queries
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
---
--- -   If @commandBuffer@ has a
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,
---     then each element of @pCommandBuffers@ /must/ have been recorded
---     with
---     'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@occlusionQueryEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If @commandBuffer@ has a
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,
---     then each element of @pCommandBuffers@ /must/ have been recorded
---     with
---     'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@queryFlags@
---     having all bits set that are set for the query
---
--- -   If @commandBuffer@ has a
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'
---     query
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,
---     then each element of @pCommandBuffers@ /must/ have been recorded
---     with
---     'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@pipelineStatistics@
---     having all bits set that are set in the
---     'Graphics.Vulkan.Core10.Handles.QueryPool' the query uses
---
--- -   Each element of @pCommandBuffers@ /must/ not begin any query types
---     that are
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
---     in @commandBuffer@
---
--- -   If @commandBuffer@ is a protected command buffer, then each element
---     of @pCommandBuffers@ /must/ be a protected command buffer
---
--- -   If @commandBuffer@ is an unprotected command buffer, then each
---     element of @pCommandBuffers@ /must/ be an unprotected command buffer
---
--- -   This command /must/ not be recorded when transform feedback is
---     active
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
---     @commandBufferCount@ valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handles
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support transfer,
---     graphics, or compute operations
---
--- -   @commandBuffer@ /must/ be a primary
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer'
---
--- -   @commandBufferCount@ /must/ be greater than @0@
---
--- -   Both of @commandBuffer@, and the elements of @pCommandBuffers@
---     /must/ have been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdExecuteCommands :: forall io . MonadIO io => CommandBuffer -> ("commandBuffers" ::: Vector CommandBuffer) -> io ()
-cmdExecuteCommands commandBuffer commandBuffers = liftIO . evalContT $ do
-  let vkCmdExecuteCommands' = mkVkCmdExecuteCommands (pVkCmdExecuteCommands (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPCommandBuffers <- ContT $ allocaBytesAligned @(Ptr CommandBuffer_T) ((Data.Vector.length (commandBuffers)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBuffers `plusPtr` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)) (commandBufferHandle (e))) (commandBuffers)
-  lift $ vkCmdExecuteCommands' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (commandBuffers)) :: Word32)) (pPCommandBuffers)
-  pure $ ()
-
-
--- | VkViewport - Structure specifying a viewport
---
--- = Description
---
--- The framebuffer depth coordinate @z@f /may/ be represented using either
--- a fixed-point or floating-point representation. However, a
--- floating-point representation /must/ be used if the depth\/stencil
--- attachment has a floating-point depth component. If an m-bit fixed-point
--- representation is used, we assume that it represents each value
--- \(\frac{k}{2^m - 1}\), where k ∈ { 0, 1, …​, 2m-1 }, as k (e.g. 1.0 is
--- represented in binary as a string of all ones).
---
--- The viewport parameters shown in the above equations are found from
--- these values as
---
--- -   ox = @x@ + @width@ \/ 2
---
--- -   oy = @y@ + @height@ \/ 2
---
--- -   oz = @minDepth@
---
--- -   px = @width@
---
--- -   py = @height@
---
--- -   pz = @maxDepth@ - @minDepth@.
---
--- If a render pass transform is enabled, the values (px,py) and (ox, oy)
--- defining the viewport are transformed as described in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>
--- before participating in the viewport transform.
---
--- The application /can/ specify a negative term for @height@, which has
--- the effect of negating the y coordinate in clip space before performing
--- the transform. When using a negative @height@, the application /should/
--- also adjust the @y@ value to point to the lower left corner of the
--- viewport instead of the upper left corner. Using the negative @height@
--- allows the application to avoid having to negate the y component of the
--- @Position@ output from the last vertex processing stage in shaders that
--- also target other graphics APIs.
---
--- The width and height of the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxViewportDimensions implementation-dependent maximum viewport dimensions>
--- /must/ be greater than or equal to the width and height of the largest
--- image which /can/ be created and attached to a framebuffer.
---
--- The floating-point viewport bounds are represented with an
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-viewportSubPixelBits implementation-dependent precision>.
---
--- == Valid Usage
---
--- -   @width@ /must/ be greater than @0.0@
---
--- -   @width@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[0]
---
--- -   The absolute value of @height@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[1]
---
--- -   @x@ /must/ be greater than or equal to @viewportBoundsRange@[0]
---
--- -   (@x@ + @width@) /must/ be less than or equal to
---     @viewportBoundsRange@[1]
---
--- -   @y@ /must/ be greater than or equal to @viewportBoundsRange@[0]
---
--- -   @y@ /must/ be less than or equal to @viewportBoundsRange@[1]
---
--- -   (@y@ + @height@) /must/ be greater than or equal to
---     @viewportBoundsRange@[0]
---
--- -   (@y@ + @height@) /must/ be less than or equal to
---     @viewportBoundsRange@[1]
---
--- -   Unless @VK_EXT_depth_range_unrestricted@ extension is enabled
---     @minDepth@ /must/ be between @0.0@ and @1.0@, inclusive
---
--- -   Unless @VK_EXT_depth_range_unrestricted@ extension is enabled
---     @maxDepth@ /must/ be between @0.0@ and @1.0@, inclusive
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo',
--- 'cmdSetViewport'
-data Viewport = Viewport
-  { -- | @x@ and @y@ are the viewport’s upper left corner (x,y).
-    x :: Float
-  , -- No documentation found for Nested "VkViewport" "y"
-    y :: Float
-  , -- | @width@ and @height@ are the viewport’s width and height, respectively.
-    width :: Float
-  , -- No documentation found for Nested "VkViewport" "height"
-    height :: Float
-  , -- | @minDepth@ and @maxDepth@ are the depth range for the viewport. It is
-    -- valid for @minDepth@ to be greater than or equal to @maxDepth@.
-    minDepth :: Float
-  , -- No documentation found for Nested "VkViewport" "maxDepth"
-    maxDepth :: Float
-  }
-  deriving (Typeable)
-deriving instance Show Viewport
-
-instance ToCStruct Viewport where
-  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p Viewport{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (x))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (y))
-    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (width))
-    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (height))
-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (minDepth))
-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxDepth))
-    f
-  cStructSize = 24
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))
-    f
-
-instance FromCStruct Viewport where
-  peekCStruct p = do
-    x <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
-    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
-    width <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))
-    height <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))
-    minDepth <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
-    maxDepth <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))
-    pure $ Viewport
-             ((\(CFloat a) -> a) x) ((\(CFloat a) -> a) y) ((\(CFloat a) -> a) width) ((\(CFloat a) -> a) height) ((\(CFloat a) -> a) minDepth) ((\(CFloat a) -> a) maxDepth)
-
-instance Storable Viewport where
-  sizeOf ~_ = 24
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero Viewport where
-  zero = Viewport
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkRect2D - Structure specifying a two-dimensional subregion
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo',
--- 'ClearRect',
--- 'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.DisplayPresentInfoKHR',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.SharedTypes.Offset2D',
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo',
--- 'RenderPassBeginInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV',
--- 'cmdSetScissor',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.getPhysicalDevicePresentRectanglesKHR'
-data Rect2D = Rect2D
-  { -- | @offset@ is a 'Graphics.Vulkan.Core10.SharedTypes.Offset2D' specifying
-    -- the rectangle offset.
-    offset :: Offset2D
-  , -- | @extent@ is a 'Graphics.Vulkan.Core10.SharedTypes.Extent2D' specifying
-    -- the rectangle extent.
-    extent :: Extent2D
-  }
-  deriving (Typeable)
-deriving instance Show Rect2D
-
-instance ToCStruct Rect2D where
-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p Rect2D{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Offset2D)) (offset) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (extent) . ($ ())
-    lift $ f
-  cStructSize = 16
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Offset2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct Rect2D where
-  peekCStruct p = do
-    offset <- peekCStruct @Offset2D ((p `plusPtr` 0 :: Ptr Offset2D))
-    extent <- peekCStruct @Extent2D ((p `plusPtr` 8 :: Ptr Extent2D))
-    pure $ Rect2D
-             offset extent
-
-instance Zero Rect2D where
-  zero = Rect2D
-           zero
-           zero
-
-
--- | VkClearRect - Structure specifying a clear rectangle
---
--- = Description
---
--- The layers [@baseArrayLayer@, @baseArrayLayer@ + @layerCount@) counting
--- from the base layer of the attachment image view are cleared.
---
--- = See Also
---
--- 'Rect2D', 'cmdClearAttachments'
-data ClearRect = ClearRect
-  { -- | @rect@ is the two-dimensional region to be cleared.
-    rect :: Rect2D
-  , -- | @baseArrayLayer@ is the first layer to be cleared.
-    baseArrayLayer :: Word32
-  , -- | @layerCount@ is the number of layers to clear.
-    layerCount :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show ClearRect
-
-instance ToCStruct ClearRect where
-  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ClearRect{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Rect2D)) (rect) . ($ ())
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (baseArrayLayer)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (layerCount)
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Rect2D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance FromCStruct ClearRect where
-  peekCStruct p = do
-    rect <- peekCStruct @Rect2D ((p `plusPtr` 0 :: Ptr Rect2D))
-    baseArrayLayer <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    layerCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pure $ ClearRect
-             rect baseArrayLayer layerCount
-
-instance Zero ClearRect where
-  zero = ClearRect
-           zero
-           zero
-           zero
-
-
--- | VkBufferCopy - Structure specifying a buffer copy operation
---
--- == Valid Usage
---
--- -   The @size@ /must/ be greater than @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize', 'cmdCopyBuffer'
-data BufferCopy = BufferCopy
-  { -- | @srcOffset@ is the starting offset in bytes from the start of
-    -- @srcBuffer@.
-    srcOffset :: DeviceSize
-  , -- | @dstOffset@ is the starting offset in bytes from the start of
-    -- @dstBuffer@.
-    dstOffset :: DeviceSize
-  , -- | @size@ is the number of bytes to copy.
-    size :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show BufferCopy
-
-instance ToCStruct BufferCopy where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BufferCopy{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (srcOffset)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (dstOffset)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (size)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct BufferCopy where
-  peekCStruct p = do
-    srcOffset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
-    dstOffset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
-    size <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    pure $ BufferCopy
-             srcOffset dstOffset size
-
-instance Storable BufferCopy where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BufferCopy where
-  zero = BufferCopy
-           zero
-           zero
-           zero
-
-
--- | VkImageCopy - Structure specifying an image copy operation
---
--- = Description
---
--- For 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' images,
--- copies are performed slice by slice starting with the @z@ member of the
--- @srcOffset@ or @dstOffset@, and copying @depth@ slices. For images with
--- multiple layers, copies are performed layer by layer starting with the
--- @baseArrayLayer@ member of the @srcSubresource@ or @dstSubresource@ and
--- copying @layerCount@ layers. Image data /can/ be copied between images
--- with different image types. If one image is
--- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' and the other
--- image is 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' with
--- multiple layers, then each slice is copied to or from a different layer.
---
--- Copies involving a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
--- specify the region to be copied in terms of the /plane/ to be copied,
--- not the coordinates of the multi-planar image. This means that copies
--- accessing the R\/B planes of “@_422@” format images /must/ fit the
--- copied region within half the @width@ of the parent image, and that
--- copies accessing the R\/B planes of “@_420@” format images /must/ fit
--- the copied region within half the @width@ and @height@ of the parent
--- image.
---
--- == Valid Usage
---
--- -   If neither the calling command’s @srcImage@ nor the calling
---     command’s @dstImage@ has a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
---     then the @aspectMask@ member of @srcSubresource@ and
---     @dstSubresource@ /must/ match
---
--- -   If the calling command’s @srcImage@ has a
---     'Graphics.Vulkan.Core10.Enums.Format.Format' with
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>
---     then the @srcSubresource@ @aspectMask@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
---
--- -   If the calling command’s @srcImage@ has a
---     'Graphics.Vulkan.Core10.Enums.Format.Format' with
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>
---     then the @srcSubresource@ @aspectMask@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
---
--- -   If the calling command’s @dstImage@ has a
---     'Graphics.Vulkan.Core10.Enums.Format.Format' with
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>
---     then the @dstSubresource@ @aspectMask@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
---
--- -   If the calling command’s @dstImage@ has a
---     'Graphics.Vulkan.Core10.Enums.Format.Format' with
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>
---     then the @dstSubresource@ @aspectMask@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
---
--- -   If the calling command’s @srcImage@ has a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
---     and the @dstImage@ does not have a multi-planar image format, the
---     @dstSubresource@ @aspectMask@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
---
--- -   If the calling command’s @dstImage@ has a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
---     and the @srcImage@ does not have a multi-planar image format, the
---     @srcSubresource@ @aspectMask@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
---
--- -   The number of slices of the @extent@ (for 3D) or layers of the
---     @srcSubresource@ (for non-3D) /must/ match the number of slices of
---     the @extent@ (for 3D) or layers of the @dstSubresource@ (for non-3D)
---
--- -   If either of the calling command’s @srcImage@ or @dstImage@
---     parameters are of 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType'
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', the
---     @baseArrayLayer@ and @layerCount@ members of the corresponding
---     subresource /must/ be @0@ and @1@, respectively
---
--- -   The @aspectMask@ member of @srcSubresource@ /must/ specify aspects
---     present in the calling command’s @srcImage@
---
--- -   The @aspectMask@ member of @dstSubresource@ /must/ specify aspects
---     present in the calling command’s @dstImage@
---
--- -   @srcOffset.x@ and (@extent.width@ + @srcOffset.x@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the source
---     image subresource width
---
--- -   @srcOffset.y@ and (@extent.height@ + @srcOffset.y@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the source
---     image subresource height
---
--- -   If the calling command’s @srcImage@ is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.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
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then
---     @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/ be @1@
---
--- -   If the calling command’s @dstImage@ is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then
---     @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/ be @1@
---
--- -   If the calling command’s @srcImage@ is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then
---     @srcOffset.z@ /must/ be @0@
---
--- -   If the calling command’s @dstImage@ is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then
---     @dstOffset.z@ /must/ be @0@
---
--- -   If both @srcImage@ and @dstImage@ are of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' then
---     @extent.depth@ /must/ be @1@
---
--- -   If the calling command’s @srcImage@ is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and the
---     @dstImage@ is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then
---     @extent.depth@ /must/ equal to the @layerCount@ member of
---     @srcSubresource@
---
--- -   If the calling command’s @dstImage@ is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and the
---     @srcImage@ is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then
---     @extent.depth@ /must/ equal to the @layerCount@ member of
---     @dstSubresource@
---
--- -   @dstOffset.x@ and (@extent.width@ + @dstOffset.x@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the
---     destination image subresource width
---
--- -   @dstOffset.y@ and (@extent.height@ + @dstOffset.y@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the
---     destination image subresource height
---
--- -   If the calling command’s @dstImage@ is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then
---     @dstOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@
---
--- -   @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the
---     destination image subresource depth
---
--- -   If the calling command’s @srcImage@ is a compressed image, or a
---     /single-plane/, “@_422@” image format, all members of @srcOffset@
---     /must/ be a multiple of the corresponding dimensions of the
---     compressed texel block
---
--- -   If the calling command’s @srcImage@ is a compressed image, or a
---     /single-plane/, “@_422@” image format, @extent.width@ /must/ be a
---     multiple of the compressed texel block width or (@extent.width@ +
---     @srcOffset.x@) /must/ equal the source image subresource width
---
--- -   If the calling command’s @srcImage@ is a compressed image, or a
---     /single-plane/, “@_422@” image format, @extent.height@ /must/ be a
---     multiple of the compressed texel block height or (@extent.height@ +
---     @srcOffset.y@) /must/ equal the source image subresource height
---
--- -   If the calling command’s @srcImage@ is a compressed image, or a
---     /single-plane/, “@_422@” image format, @extent.depth@ /must/ be a
---     multiple of the compressed texel block depth or (@extent.depth@ +
---     @srcOffset.z@) /must/ equal the source image subresource depth
---
--- -   If the calling command’s @dstImage@ is a compressed format image, or
---     a /single-plane/, “@_422@” image format, all members of @dstOffset@
---     /must/ be a multiple of the corresponding dimensions of the
---     compressed texel block
---
--- -   If the calling command’s @dstImage@ is a compressed format image, or
---     a /single-plane/, “@_422@” image format, @extent.width@ /must/ be a
---     multiple of the compressed texel block width or (@extent.width@ +
---     @dstOffset.x@) /must/ equal the destination image subresource width
---
--- -   If the calling command’s @dstImage@ is a compressed format image, or
---     a /single-plane/, “@_422@” image format, @extent.height@ /must/ be a
---     multiple of the compressed texel block height or (@extent.height@ +
---     @dstOffset.y@) /must/ equal the destination image subresource height
---
--- -   If the calling command’s @dstImage@ is a compressed format image, or
---     a /single-plane/, “@_422@” image format, @extent.depth@ /must/ be a
---     multiple of the compressed texel block depth or (@extent.depth@ +
---     @dstOffset.z@) /must/ equal the destination image subresource depth
---
--- == Valid Usage (Implicit)
---
--- -   @srcSubresource@ /must/ be a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers'
---     structure
---
--- -   @dstSubresource@ /must/ be a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers'
---     structure
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent3D',
--- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers',
--- 'Graphics.Vulkan.Core10.SharedTypes.Offset3D', 'cmdCopyImage'
-data ImageCopy = ImageCopy
-  { -- | @srcSubresource@ and @dstSubresource@ are
-    -- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structures
-    -- specifying the image subresources of the images used for the source and
-    -- destination image data, respectively.
-    srcSubresource :: ImageSubresourceLayers
-  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
-    -- in texels of the sub-regions of the source and destination image data.
-    srcOffset :: Offset3D
-  , -- No documentation found for Nested "VkImageCopy" "dstSubresource"
-    dstSubresource :: ImageSubresourceLayers
-  , -- No documentation found for Nested "VkImageCopy" "dstOffset"
-    dstOffset :: Offset3D
-  , -- | @extent@ is the size in texels of the image to copy in @width@, @height@
-    -- and @depth@.
-    extent :: Extent3D
-  }
-  deriving (Typeable)
-deriving instance Show ImageCopy
-
-instance ToCStruct ImageCopy where
-  withCStruct x f = allocaBytesAligned 68 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageCopy{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (srcOffset) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (dstOffset) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (extent) . ($ ())
-    lift $ f
-  cStructSize = 68
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct ImageCopy where
-  peekCStruct p = do
-    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))
-    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 16 :: Ptr Offset3D))
-    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers))
-    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 44 :: Ptr Offset3D))
-    extent <- peekCStruct @Extent3D ((p `plusPtr` 56 :: Ptr Extent3D))
-    pure $ ImageCopy
-             srcSubresource srcOffset dstSubresource dstOffset extent
-
-instance Zero ImageCopy where
-  zero = ImageCopy
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkImageBlit - Structure specifying an image blit operation
---
--- = Description
---
--- For each element of the @pRegions@ array, a blit operation is performed
--- the specified source and destination regions.
---
--- == Valid Usage
---
--- -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
---     /must/ match
---
--- -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@
---     /must/ match
---
--- -   If either of the calling command’s @srcImage@ or @dstImage@
---     parameters are of 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType'
---     'Graphics.Vulkan.Core10.Enums.ImageType.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
---     'Graphics.Vulkan.Core10.Enums.ImageType.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
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
---     'Graphics.Vulkan.Core10.Enums.ImageType.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
---     'Graphics.Vulkan.Core10.Enums.ImageType.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
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
---     'Graphics.Vulkan.Core10.Enums.ImageType.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
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers'
---     structure
---
--- -   @dstSubresource@ /must/ be a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers'
---     structure
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers',
--- 'Graphics.Vulkan.Core10.SharedTypes.Offset3D', 'cmdBlitImage'
-data ImageBlit = ImageBlit
-  { -- | @srcSubresource@ is the subresource to blit from.
-    srcSubresource :: ImageSubresourceLayers
-  , -- | @srcOffsets@ is a pointer to an array of two
-    -- 'Graphics.Vulkan.Core10.SharedTypes.Offset3D' structures specifying the
-    -- bounds of the source region within @srcSubresource@.
-    srcOffsets :: (Offset3D, Offset3D)
-  , -- | @dstSubresource@ is the subresource to blit into.
-    dstSubresource :: ImageSubresourceLayers
-  , -- | @dstOffsets@ is a pointer to an array of two
-    -- 'Graphics.Vulkan.Core10.SharedTypes.Offset3D' structures specifying the
-    -- bounds of the destination region within @dstSubresource@.
-    dstOffsets :: (Offset3D, Offset3D)
-  }
-  deriving (Typeable)
-deriving instance Show ImageBlit
-
-instance ToCStruct ImageBlit where
-  withCStruct x f = allocaBytesAligned 80 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageBlit{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())
-    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))
-    case (srcOffsets) of
-      (e0, e1) -> do
-        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())
-        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())
-    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))
-    case (dstOffsets) of
-      (e0, e1) -> do
-        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())
-        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
-    lift $ f
-  cStructSize = 80
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
-    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))
-    case ((zero, zero)) of
-      (e0, e1) -> do
-        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())
-        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
-    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))
-    case ((zero, zero)) of
-      (e0, e1) -> do
-        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())
-        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
-    lift $ f
-
-instance FromCStruct ImageBlit where
-  peekCStruct p = do
-    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))
-    let psrcOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))
-    srcOffsets0 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 0 :: Ptr Offset3D))
-    srcOffsets1 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 12 :: Ptr Offset3D))
-    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers))
-    let pdstOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))
-    dstOffsets0 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 0 :: Ptr Offset3D))
-    dstOffsets1 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 12 :: Ptr Offset3D))
-    pure $ ImageBlit
-             srcSubresource ((srcOffsets0, srcOffsets1)) dstSubresource ((dstOffsets0, dstOffsets1))
-
-instance Zero ImageBlit where
-  zero = ImageBlit
-           zero
-           (zero, zero)
-           zero
-           (zero, zero)
-
-
--- | VkBufferImageCopy - Structure specifying a buffer image copy operation
---
--- = Description
---
--- When copying to or from a depth or stencil aspect, the data in buffer
--- memory uses a layout that is a (mostly) tightly packed representation of
--- the depth or stencil data. Specifically:
---
--- -   data copied to or from the stencil aspect of any depth\/stencil
---     format is tightly packed with one
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_S8_UINT' value per
---     texel.
---
--- -   data copied to or from the depth aspect of a
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM' or
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM_S8_UINT'
---     format is tightly packed with one
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM' value per
---     texel.
---
--- -   data copied to or from the depth aspect of a
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT' or
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT_S8_UINT'
---     format is tightly packed with one
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT' value per
---     texel.
---
--- -   data copied to or from the depth aspect of a
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_X8_D24_UNORM_PACK32' or
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_D24_UNORM_S8_UINT'
---     format is packed with one 32-bit word per texel with the D24 value
---     in the LSBs of the word, and undefined values in the eight MSBs.
---
--- Note
---
--- To copy both the depth and stencil aspects of a depth\/stencil format,
--- two entries in @pRegions@ /can/ be used, where one specifies the depth
--- aspect in @imageSubresource@, and the other specifies the stencil
--- aspect.
---
--- Because depth or stencil aspect buffer to image copies /may/ require
--- format conversions on some implementations, they are not supported on
--- queues that do not support graphics.
---
--- When copying to a depth aspect, and the
--- @VK_EXT_depth_range_unrestricted@ extension is not enabled, the data in
--- buffer memory /must/ be in the range [0,1], or the resulting values are
--- undefined.
---
--- Copies are done layer by layer starting with image layer
--- @baseArrayLayer@ member of @imageSubresource@. @layerCount@ layers are
--- copied from the source image or to the destination image.
---
--- == Valid Usage
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter’s format is not a depth\/stencil format or a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
---     then @bufferOffset@ /must/ be a multiple of the format’s texel block
---     size
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter’s format is a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
---     then @bufferOffset@ /must/ be a multiple of the element size of the
---     compatible format for the format and the @aspectMask@ of the
---     @imageSubresource@ as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>
---
--- -   @bufferOffset@ /must/ be a multiple of @4@
---
--- -   @bufferRowLength@ /must/ be @0@, or greater than or equal to the
---     @width@ member of @imageExtent@
---
--- -   @bufferImageHeight@ /must/ be @0@, or greater than or equal to the
---     @height@ member of @imageExtent@
---
--- -   @imageOffset.x@ and (@imageExtent.width@ + @imageOffset.x@) /must/
---     both be greater than or equal to @0@ and less than or equal to the
---     image subresource width where this refers to the width of the
---     /plane/ of the image involved in the copy in the case of a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
---
--- -   @imageOffset.y@ and (imageExtent.height + @imageOffset.y@) /must/
---     both be greater than or equal to @0@ and less than or equal to the
---     image subresource height where this refers to the height of the
---     /plane/ of the image involved in the copy in the case of a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
---
--- -   If the calling command’s @srcImage@ ('cmdCopyImageToBuffer') or
---     @dstImage@ ('cmdCopyBufferToImage') is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.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@ ('cmdCopyImageToBuffer') or
---     @dstImage@ ('cmdCopyBufferToImage') is of type
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then
---     @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@ /must/ be @1@
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter is a compressed image, or a /single-plane/, “@_422@” image
---     format, @bufferRowLength@ /must/ be a multiple of the compressed
---     texel block width
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter is a compressed image, or a /single-plane/, “@_422@” image
---     format, @bufferImageHeight@ /must/ be a multiple of the compressed
---     texel block height
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter is a compressed image, or a /single-plane/, “@_422@” image
---     format, all members of @imageOffset@ /must/ be a multiple of the
---     corresponding dimensions of the compressed texel block
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter is a compressed image, or a /single-plane/, “@_422@” image
---     format, @bufferOffset@ /must/ be a multiple of the compressed texel
---     block size in bytes
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter is a compressed image, or a /single-plane/, “@_422@” image
---     format, @imageExtent.width@ /must/ be a multiple of the compressed
---     texel block width or (@imageExtent.width@ + @imageOffset.x@) /must/
---     equal the image subresource width
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter is a compressed image, or a /single-plane/, “@_422@” image
---     format, @imageExtent.height@ /must/ be a multiple of the compressed
---     texel block height or (@imageExtent.height@ + @imageOffset.y@)
---     /must/ equal the image subresource height
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter is a compressed image, or a /single-plane/, “@_422@” image
---     format, @imageExtent.depth@ /must/ be a multiple of the compressed
---     texel block depth or (@imageExtent.depth@ + @imageOffset.z@) /must/
---     equal the image subresource depth
---
--- -   The @aspectMask@ member of @imageSubresource@ /must/ specify aspects
---     present in the calling command’s
---     'Graphics.Vulkan.Core10.Handles.Image' parameter
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter’s format is a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
---     then the @aspectMask@ member of @imageSubresource@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
---     (with
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
---     valid only for image formats with three planes)
---
--- -   The @aspectMask@ member of @imageSubresource@ /must/ only have a
---     single bit set
---
--- -   If the calling command’s 'Graphics.Vulkan.Core10.Handles.Image'
---     parameter is of 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType'
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', the
---     @baseArrayLayer@ and @layerCount@ members of @imageSubresource@
---     /must/ be @0@ and @1@, respectively
---
--- == Valid Usage (Implicit)
---
--- -   @imageSubresource@ /must/ be a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers'
---     structure
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent3D',
--- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers',
--- 'Graphics.Vulkan.Core10.SharedTypes.Offset3D', 'cmdCopyBufferToImage',
--- 'cmdCopyImageToBuffer'
-data BufferImageCopy = BufferImageCopy
-  { -- | @bufferOffset@ is the offset in bytes from the start of the buffer
-    -- object where the image data is copied from or to.
-    bufferOffset :: DeviceSize
-  , -- | @bufferRowLength@ and @bufferImageHeight@ specify in texels a subregion
-    -- of a larger two- or three-dimensional image in buffer memory, and
-    -- control the addressing calculations. If either of these values is zero,
-    -- that aspect of the buffer memory is considered to be tightly packed
-    -- according to the @imageExtent@.
-    bufferRowLength :: Word32
-  , -- No documentation found for Nested "VkBufferImageCopy" "bufferImageHeight"
-    bufferImageHeight :: Word32
-  , -- | @imageSubresource@ is a
-    -- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers' used to
-    -- specify the specific image subresources of the image used for the source
-    -- or destination image data.
-    imageSubresource :: ImageSubresourceLayers
-  , -- | @imageOffset@ selects the initial @x@, @y@, @z@ offsets in texels of the
-    -- sub-region of the source or destination image data.
-    imageOffset :: Offset3D
-  , -- | @imageExtent@ is the size in texels of the image to copy in @width@,
-    -- @height@ and @depth@.
-    imageExtent :: Extent3D
-  }
-  deriving (Typeable)
-deriving instance Show BufferImageCopy
-
-instance ToCStruct BufferImageCopy where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BufferImageCopy{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (bufferOffset)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (bufferRowLength)
-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (bufferImageHeight)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (imageSubresource) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (imageOffset) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent3D)) (imageExtent) . ($ ())
-    lift $ f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent3D)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct BufferImageCopy where
-  peekCStruct p = do
-    bufferOffset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
-    bufferRowLength <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    bufferImageHeight <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    imageSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))
-    imageOffset <- peekCStruct @Offset3D ((p `plusPtr` 32 :: Ptr Offset3D))
-    imageExtent <- peekCStruct @Extent3D ((p `plusPtr` 44 :: Ptr Extent3D))
-    pure $ BufferImageCopy
-             bufferOffset bufferRowLength bufferImageHeight imageSubresource imageOffset imageExtent
-
-instance Zero BufferImageCopy where
-  zero = BufferImageCopy
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkImageResolve - Structure specifying an image resolve operation
---
--- == Valid Usage
---
--- -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
---     /must/ only contain
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.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.Enums.ImageType.ImageType'
---     'Graphics.Vulkan.Core10.Enums.ImageType.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
---     'Graphics.Vulkan.Core10.Enums.ImageType.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
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
---     'Graphics.Vulkan.Core10.Enums.ImageType.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
---     'Graphics.Vulkan.Core10.Enums.ImageType.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
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then
---     @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/ be @1@
---
--- == Valid Usage (Implicit)
---
--- -   @srcSubresource@ /must/ be a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers'
---     structure
---
--- -   @dstSubresource@ /must/ be a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers'
---     structure
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent3D',
--- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers',
--- 'Graphics.Vulkan.Core10.SharedTypes.Offset3D', 'cmdResolveImage'
-data ImageResolve = ImageResolve
-  { -- | @srcSubresource@ and @dstSubresource@ are
-    -- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structures
-    -- specifying the image subresources of the images used for the source and
-    -- destination image data, respectively. Resolve of depth\/stencil images
-    -- is not supported.
-    srcSubresource :: ImageSubresourceLayers
-  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
-    -- in texels of the sub-regions of the source and destination image data.
-    srcOffset :: Offset3D
-  , -- No documentation found for Nested "VkImageResolve" "dstSubresource"
-    dstSubresource :: ImageSubresourceLayers
-  , -- No documentation found for Nested "VkImageResolve" "dstOffset"
-    dstOffset :: Offset3D
-  , -- | @extent@ is the size in texels of the source image to resolve in
-    -- @width@, @height@ and @depth@.
-    extent :: Extent3D
-  }
-  deriving (Typeable)
-deriving instance Show ImageResolve
-
-instance ToCStruct ImageResolve where
-  withCStruct x f = allocaBytesAligned 68 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageResolve{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (srcOffset) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (dstOffset) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (extent) . ($ ())
-    lift $ f
-  cStructSize = 68
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct ImageResolve where
-  peekCStruct p = do
-    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))
-    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 16 :: Ptr Offset3D))
-    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers))
-    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 44 :: Ptr Offset3D))
-    extent <- peekCStruct @Extent3D ((p `plusPtr` 56 :: Ptr Extent3D))
-    pure $ ImageResolve
-             srcSubresource srcOffset dstSubresource dstOffset extent
-
-instance Zero ImageResolve where
-  zero = ImageResolve
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkRenderPassBeginInfo - Structure specifying render pass begin info
---
--- = Description
---
--- @renderArea@ is the render area that is affected by the render pass
--- instance. The effects of attachment load, store and multisample resolve
--- operations are restricted to the pixels whose x and y coordinates fall
--- within the render area on all attachments. The render area extends to
--- all layers of @framebuffer@. The application /must/ ensure (using
--- scissor if necessary) that all rendering is contained within the render
--- area. The render area, after any transform specified by
--- 'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@
--- is applied, /must/ be contained within the framebuffer dimensions.
---
--- If
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>
--- is enabled, then @renderArea@ /must/ equal the framebuffer
--- pre-transformed dimensions. After @renderArea@ has been transformed by
--- 'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@,
--- the resulting render area /must/ be equal to the framebuffer dimensions.
---
--- When multiview is enabled, the resolve operation at the end of a subpass
--- applies to all views in the view mask.
---
--- Note
---
--- There /may/ be a performance cost for using a render area smaller than
--- the framebuffer, unless it matches the render area granularity for the
--- render pass.
---
--- == Valid Usage
---
--- -   @clearValueCount@ /must/ be greater than the largest attachment
---     index in @renderPass@ that specifies a @loadOp@ (or @stencilLoadOp@,
---     if the attachment has a depth\/stencil format) of
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'
---
--- -   @renderPass@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo' structure
---     specified when creating @framebuffer@
---
--- -   If the @pNext@ chain does not contain
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'
---     or its @deviceRenderAreaCount@ member is equal to 0,
---     @renderArea.offset.x@ /must/ be greater than or equal to 0
---
--- -   If the @pNext@ chain does not contain
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'
---     or its @deviceRenderAreaCount@ member is equal to 0,
---     @renderArea.offset.y@ /must/ be greater than or equal to 0
---
--- -   If the @pNext@ chain does not contain
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'
---     or its @deviceRenderAreaCount@ member is equal to 0,
---     @renderArea.offset.x@ + @renderArea.offset.width@ /must/ be less
---     than or equal to
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@width@ the
---     @framebuffer@ was created with
---
--- -   If the @pNext@ chain does not contain
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'
---     or its @deviceRenderAreaCount@ member is equal to 0,
---     @renderArea.offset.y@ + @renderArea.offset.height@ /must/ be less
---     than or equal to
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@height@ the
---     @framebuffer@ was created with
---
--- -   If the @pNext@ chain contains
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
---     the @offset.x@ member of each element of @pDeviceRenderAreas@ /must/
---     be greater than or equal to 0
---
--- -   If the @pNext@ chain contains
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
---     the @offset.y@ member of each element of @pDeviceRenderAreas@ /must/
---     be greater than or equal to 0
---
--- -   If the @pNext@ chain contains
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
---     @offset.x@ + @offset.width@ of each element of @pDeviceRenderAreas@
---     /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@width@ the
---     @framebuffer@ was created with
---
--- -   If the @pNext@ chain contains
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
---     @offset.y@ + @offset.height@ of each element of @pDeviceRenderAreas@
---     /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@height@ the
---     @framebuffer@ was created with
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that did not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure, its @attachmentCount@ /must/ be zero
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @attachmentCount@ of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ be equal to the value
---     of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@attachmentImageInfoCount@
---     used to create @framebuffer@
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Extensions.VK_KHR_imageless_framebuffer.FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR',
---     each element of the @pAttachments@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ have been created on
---     the same 'Graphics.Vulkan.Core10.Handles.Device' as @framebuffer@
---     and @renderPass@
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of the @pAttachments@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ be a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of an image created with
---     a value of 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@
---     equal to the @flags@ member of the corresponding element of
---     'Graphics.Vulkan.Extensions.VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfoKHR'::@pAttachments@
---     used to create @framebuffer@
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of the @pAttachments@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ be a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of an image created with
---     a value of 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@usage@
---     equal to the @usage@ member of the corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
---     used to create @framebuffer@
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of the @pAttachments@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ be a
---     'Graphics.Vulkan.Core10.Handles.ImageView' with a width equal to the
---     @width@ member of the corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
---     used to create @framebuffer@
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of the @pAttachments@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ be a
---     'Graphics.Vulkan.Core10.Handles.ImageView' with a height equal to
---     the @height@ member of the corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
---     used to create @framebuffer@
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of the @pAttachments@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ be a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of an image created with
---     a value of
---     'Graphics.Vulkan.Core10.ImageView.ImageViewCreateInfo'::@subresourceRange.layerCount@
---     equal to the @layerCount@ member of the corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
---     used to create @framebuffer@
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of the @pAttachments@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ be a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of an image created with
---     a value of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@viewFormatCount@
---     equal to the @viewFormatCount@ member of the corresponding element
---     of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
---     used to create @framebuffer@
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of the @pAttachments@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ be a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of an image created with
---     a set of elements in
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@pViewFormats@
---     equal to the set of elements in the @pViewFormats@ member of the
---     corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
---     used to create @framebuffer@
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of the @pAttachments@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ be a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of an image created with
---     a value of
---     'Graphics.Vulkan.Core10.ImageView.ImageViewCreateInfo'::@format@
---     equal to the corresponding value of
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription'::@format@ in
---     @renderPass@
---
--- -   If @framebuffer@ was created with a
---     'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value
---     that included
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of the @pAttachments@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
---     structure included in the @pNext@ chain /must/ be a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of an image created with
---     a value of 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@samples@
---     equal to the corresponding value of
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription'::@samples@ in
---     @renderPass@
---
--- -   If the @pNext@ chain includes
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',
---     @renderArea@::@offset@ /must/ equal (0,0)
---
--- -   If the @pNext@ chain includes
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',
---     @renderArea@::@extent@ transformed by
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@
---     /must/ equal the @framebuffer@ dimensions
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT',
---     or
---     'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @renderPass@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.RenderPass' handle
---
--- -   @framebuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Framebuffer' handle
---
--- -   If @clearValueCount@ is not @0@, @pClearValues@ /must/ be a valid
---     pointer to an array of @clearValueCount@
---     'Graphics.Vulkan.Core10.SharedTypes.ClearValue' unions
---
--- -   Both of @framebuffer@, and @renderPass@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.ClearValue',
--- 'Graphics.Vulkan.Core10.Handles.Framebuffer', 'Rect2D',
--- 'Graphics.Vulkan.Core10.Handles.RenderPass',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdBeginRenderPass',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdBeginRenderPass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.cmdBeginRenderPass2KHR'
-data RenderPassBeginInfo (es :: [Type]) = RenderPassBeginInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @renderPass@ is the render pass to begin an instance of.
-    renderPass :: RenderPass
-  , -- | @framebuffer@ is the framebuffer containing the attachments that are
-    -- used with the render pass.
-    framebuffer :: Framebuffer
-  , -- | @renderArea@ is the render area that is affected by the render pass
-    -- instance, and is described in more detail below.
-    renderArea :: Rect2D
-  , -- | @pClearValues@ is a pointer to an array of @clearValueCount@
-    -- 'Graphics.Vulkan.Core10.SharedTypes.ClearValue' structures that contains
-    -- clear values for each attachment, if the attachment uses a @loadOp@
-    -- value of
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'
-    -- or if the attachment has a depth\/stencil format and uses a
-    -- @stencilLoadOp@ value of
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'.
-    -- The array is indexed by attachment number. Only elements corresponding
-    -- to cleared attachments are used. Other elements of @pClearValues@ are
-    -- ignored.
-    clearValues :: Vector ClearValue
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (RenderPassBeginInfo es)
-
-instance Extensible RenderPassBeginInfo where
-  extensibleType = STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
-  setNext x next = x{next = next}
-  getNext RenderPassBeginInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RenderPassBeginInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @RenderPassTransformBeginInfoQCOM = Just f
-    | Just Refl <- eqT @e @RenderPassAttachmentBeginInfo = Just f
-    | Just Refl <- eqT @e @RenderPassSampleLocationsBeginInfoEXT = Just f
-    | Just Refl <- eqT @e @DeviceGroupRenderPassBeginInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (RenderPassBeginInfo es) where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RenderPassBeginInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPass)) (renderPass)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Framebuffer)) (framebuffer)
-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (renderArea) . ($ ())
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (clearValues)) :: Word32))
-    pPClearValues' <- ContT $ allocaBytesAligned @ClearValue ((Data.Vector.length (clearValues)) * 16) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPClearValues' `plusPtr` (16 * (i)) :: Ptr ClearValue) (e) . ($ ())) (clearValues)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr ClearValue))) (pPClearValues')
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPass)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Framebuffer)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (zero) . ($ ())
-    pPClearValues' <- ContT $ allocaBytesAligned @ClearValue ((Data.Vector.length (mempty)) * 16) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPClearValues' `plusPtr` (16 * (i)) :: Ptr ClearValue) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr ClearValue))) (pPClearValues')
-    lift $ f
-
-instance es ~ '[] => Zero (RenderPassBeginInfo es) where
-  zero = RenderPassBeginInfo
-           ()
-           zero
-           zero
-           zero
-           mempty
-
-
--- | VkClearAttachment - Structure specifying a clear attachment
---
--- = Description
---
--- No memory barriers are needed between 'cmdClearAttachments' and
--- preceding or subsequent draw or attachment clear commands in the same
--- subpass.
---
--- The 'cmdClearAttachments' command is not affected by the bound pipeline
--- state.
---
--- Attachments /can/ also be cleared at the beginning of a render pass
--- instance by setting @loadOp@ (or @stencilLoadOp@) of
--- 'Graphics.Vulkan.Core10.Pass.AttachmentDescription' to
--- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR',
--- as described for 'Graphics.Vulkan.Core10.Pass.createRenderPass'.
---
--- == Valid Usage
---
--- -   If @aspectMask@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
---     it /must/ not include
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
---
--- -   @aspectMask@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'
---
--- -   @aspectMask@ /must/ not include
---     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@
---
--- -   @clearValue@ /must/ be a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ClearValue' union
---
--- == Valid Usage (Implicit)
---
--- -   @aspectMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits'
---     values
---
--- -   @aspectMask@ /must/ not be @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.ClearValue',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
--- 'cmdClearAttachments'
-data ClearAttachment = ClearAttachment
-  { -- | @aspectMask@ is a mask selecting the color, depth and\/or stencil
-    -- aspects of the attachment to be cleared.
-    aspectMask :: ImageAspectFlags
-  , -- | @colorAttachment@ is only meaningful if
-    -- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
-    -- is set in @aspectMask@, in which case it is an index to the
-    -- @pColorAttachments@ array in the
-    -- 'Graphics.Vulkan.Core10.Pass.SubpassDescription' structure of the
-    -- current subpass which selects the color attachment to clear.
-    colorAttachment :: Word32
-  , -- | @clearValue@ is the color or depth\/stencil value to clear the
-    -- attachment to, as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values Clear Values>
-    -- below.
-    clearValue :: ClearValue
-  }
-  deriving (Typeable)
-deriving instance Show ClearAttachment
-
-instance ToCStruct ClearAttachment where
-  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ClearAttachment{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)
-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (colorAttachment)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr ClearValue)) (clearValue) . ($ ())
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (zero)
-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr ClearValue)) (zero) . ($ ())
-    lift $ f
-
-instance Zero ClearAttachment where
-  zero = ClearAttachment
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs-boot b/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs-boot
+++ /dev/null
@@ -1,94 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.CommandBufferBuilding  ( BufferCopy
-                                                     , BufferImageCopy
-                                                     , ClearAttachment
-                                                     , ClearRect
-                                                     , ImageBlit
-                                                     , ImageCopy
-                                                     , ImageResolve
-                                                     , Rect2D
-                                                     , RenderPassBeginInfo
-                                                     , Viewport
-                                                     ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data BufferCopy
-
-instance ToCStruct BufferCopy
-instance Show BufferCopy
-
-instance FromCStruct BufferCopy
-
-
-data BufferImageCopy
-
-instance ToCStruct BufferImageCopy
-instance Show BufferImageCopy
-
-instance FromCStruct BufferImageCopy
-
-
-data ClearAttachment
-
-instance ToCStruct ClearAttachment
-instance Show ClearAttachment
-
-
-data ClearRect
-
-instance ToCStruct ClearRect
-instance Show ClearRect
-
-instance FromCStruct ClearRect
-
-
-data ImageBlit
-
-instance ToCStruct ImageBlit
-instance Show ImageBlit
-
-instance FromCStruct ImageBlit
-
-
-data ImageCopy
-
-instance ToCStruct ImageCopy
-instance Show ImageCopy
-
-instance FromCStruct ImageCopy
-
-
-data ImageResolve
-
-instance ToCStruct ImageResolve
-instance Show ImageResolve
-
-instance FromCStruct ImageResolve
-
-
-data Rect2D
-
-instance ToCStruct Rect2D
-instance Show Rect2D
-
-instance FromCStruct Rect2D
-
-
-type role RenderPassBeginInfo nominal
-data RenderPassBeginInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (RenderPassBeginInfo es)
-instance Show (Chain es) => Show (RenderPassBeginInfo es)
-
-
-data Viewport
-
-instance ToCStruct Viewport
-instance Show Viewport
-
-instance FromCStruct Viewport
-
diff --git a/src/Graphics/Vulkan/Core10/CommandPool.hs b/src/Graphics/Vulkan/Core10/CommandPool.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/CommandPool.hs
+++ /dev/null
@@ -1,383 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.CommandPool  ( createCommandPool
-                                           , withCommandPool
-                                           , destroyCommandPool
-                                           , resetCommandPool
-                                           , CommandPoolCreateInfo(..)
-                                           ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Handles (CommandPool)
-import Graphics.Vulkan.Core10.Handles (CommandPool(..))
-import Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits (CommandPoolCreateFlags)
-import Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits (CommandPoolResetFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits (CommandPoolResetFlags)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateCommandPool))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyCommandPool))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkResetCommandPool))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateCommandPool
-  :: FunPtr (Ptr Device_T -> Ptr CommandPoolCreateInfo -> Ptr AllocationCallbacks -> Ptr CommandPool -> IO Result) -> Ptr Device_T -> Ptr CommandPoolCreateInfo -> Ptr AllocationCallbacks -> Ptr CommandPool -> IO Result
-
--- | vkCreateCommandPool - Create a new command pool object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the command pool.
---
--- -   @pCreateInfo@ is a pointer to a 'CommandPoolCreateInfo' structure
---     specifying the state of the command pool object.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pCommandPool@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.CommandPool' handle in which the
---     created pool is returned.
---
--- == Valid Usage
---
--- -   @pCreateInfo->queueFamilyIndex@ /must/ be the index of a queue
---     family available in the logical device @device@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'CommandPoolCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pCommandPool@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.CommandPool' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.CommandPool', 'CommandPoolCreateInfo',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-createCommandPool :: forall io . MonadIO io => Device -> CommandPoolCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (CommandPool)
-createCommandPool device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateCommandPool' = mkVkCreateCommandPool (pVkCreateCommandPool (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPCommandPool <- ContT $ bracket (callocBytes @CommandPool 8) free
-  r <- lift $ vkCreateCommandPool' (deviceHandle (device)) pCreateInfo pAllocator (pPCommandPool)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pCommandPool <- lift $ peek @CommandPool pPCommandPool
-  pure $ (pCommandPool)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createCommandPool' and 'destroyCommandPool'
---
--- To ensure that 'destroyCommandPool' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withCommandPool :: forall io r . MonadIO io => (io (CommandPool) -> ((CommandPool) -> io ()) -> r) -> Device -> CommandPoolCreateInfo -> Maybe AllocationCallbacks -> r
-withCommandPool b device pCreateInfo pAllocator =
-  b (createCommandPool device pCreateInfo pAllocator)
-    (\(o0) -> destroyCommandPool device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyCommandPool
-  :: FunPtr (Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyCommandPool - Destroy a command pool object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- = Description
---
--- When a pool is destroyed, all command buffers allocated from the pool
--- are <vkFreeCommandBuffers.html freed>.
---
--- Any primary command buffer allocated from another
--- 'Graphics.Vulkan.Core10.Handles.CommandPool' that is in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or executable state>
--- and has a secondary command buffer allocated from @commandPool@ recorded
--- into it, becomes
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
---
--- == Valid Usage
---
--- -   All 'Graphics.Vulkan.Core10.Handles.CommandBuffer' objects allocated
---     from @commandPool@ /must/ not be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @commandPool@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @commandPool@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @commandPool@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @commandPool@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.CommandPool'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.CommandPool',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-destroyCommandPool :: forall io . MonadIO io => Device -> CommandPool -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyCommandPool device commandPool allocator = liftIO . evalContT $ do
-  let vkDestroyCommandPool' = mkVkDestroyCommandPool (pVkDestroyCommandPool (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyCommandPool' (deviceHandle (device)) (commandPool) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkResetCommandPool
-  :: FunPtr (Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result) -> Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result
-
--- | vkResetCommandPool - Reset a command pool
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the command pool.
---
--- -   @commandPool@ is the command pool to reset.
---
--- -   @flags@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits.CommandPoolResetFlagBits'
---     controlling the reset operation.
---
--- = 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>.
---
--- Any primary command buffer allocated from another
--- 'Graphics.Vulkan.Core10.Handles.CommandPool' that is in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or executable state>
--- and has a secondary command buffer allocated from @commandPool@ recorded
--- into it, becomes
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
---
--- == Valid Usage
---
--- -   All 'Graphics.Vulkan.Core10.Handles.CommandBuffer' objects allocated
---     from @commandPool@ /must/ not be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @commandPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandPool' handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits.CommandPoolResetFlagBits'
---     values
---
--- -   @commandPool@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- == Host Synchronization
---
--- -   Host access to @commandPool@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandPool',
--- 'Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits.CommandPoolResetFlags',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-resetCommandPool :: forall io . MonadIO io => Device -> CommandPool -> CommandPoolResetFlags -> io ()
-resetCommandPool device commandPool flags = liftIO $ do
-  let vkResetCommandPool' = mkVkResetCommandPool (pVkResetCommandPool (deviceCmds (device :: Device)))
-  r <- vkResetCommandPool' (deviceHandle (device)) (commandPool) (flags)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkCommandPoolCreateInfo - Structure specifying parameters of a newly
--- created command pool
---
--- == Valid Usage
---
--- -   If the protected memory feature is not enabled, the
---     'Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits.COMMAND_POOL_CREATE_PROTECTED_BIT'
---     bit of @flags@ /must/ not be set
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits.CommandPoolCreateFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits.CommandPoolCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createCommandPool'
-data CommandPoolCreateInfo = CommandPoolCreateInfo
-  { -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits.CommandPoolCreateFlagBits'
-    -- indicating usage behavior for the pool and command buffers allocated
-    -- from it.
-    flags :: CommandPoolCreateFlags
-  , -- | @queueFamilyIndex@ designates a queue family as described in section
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-queueprops Queue Family Properties>.
-    -- All command buffers allocated from this command pool /must/ be submitted
-    -- on queues from the same queue family.
-    queueFamilyIndex :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show CommandPoolCreateInfo
-
-instance ToCStruct CommandPoolCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CommandPoolCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr CommandPoolCreateFlags)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (queueFamilyIndex)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct CommandPoolCreateInfo where
-  peekCStruct p = do
-    flags <- peek @CommandPoolCreateFlags ((p `plusPtr` 16 :: Ptr CommandPoolCreateFlags))
-    queueFamilyIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pure $ CommandPoolCreateInfo
-             flags queueFamilyIndex
-
-instance Storable CommandPoolCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero CommandPoolCreateInfo where
-  zero = CommandPoolCreateInfo
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/CommandPool.hs-boot b/src/Graphics/Vulkan/Core10/CommandPool.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/CommandPool.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.CommandPool  (CommandPoolCreateInfo) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data CommandPoolCreateInfo
-
-instance ToCStruct CommandPoolCreateInfo
-instance Show CommandPoolCreateInfo
-
-instance FromCStruct CommandPoolCreateInfo
-
diff --git a/src/Graphics/Vulkan/Core10/DescriptorSet.hs b/src/Graphics/Vulkan/Core10/DescriptorSet.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/DescriptorSet.hs
+++ /dev/null
@@ -1,2358 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.DescriptorSet  ( createDescriptorSetLayout
-                                             , withDescriptorSetLayout
-                                             , destroyDescriptorSetLayout
-                                             , createDescriptorPool
-                                             , withDescriptorPool
-                                             , destroyDescriptorPool
-                                             , resetDescriptorPool
-                                             , allocateDescriptorSets
-                                             , withDescriptorSets
-                                             , freeDescriptorSets
-                                             , updateDescriptorSets
-                                             , DescriptorBufferInfo(..)
-                                             , DescriptorImageInfo(..)
-                                             , WriteDescriptorSet(..)
-                                             , CopyDescriptorSet(..)
-                                             , DescriptorSetLayoutBinding(..)
-                                             , DescriptorSetLayoutCreateInfo(..)
-                                             , DescriptorPoolSize(..)
-                                             , DescriptorPoolCreateInfo(..)
-                                             , DescriptorSetAllocateInfo(..)
-                                             ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Either (Either)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (BufferView)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (DescriptorPool)
-import Graphics.Vulkan.Core10.Handles (DescriptorPool(..))
-import Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits (DescriptorPoolCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block (DescriptorPoolInlineUniformBlockCreateInfoEXT)
-import Graphics.Vulkan.Core10.Enums.DescriptorPoolResetFlags (DescriptorPoolResetFlags)
-import Graphics.Vulkan.Core10.Enums.DescriptorPoolResetFlags (DescriptorPoolResetFlags(..))
-import Graphics.Vulkan.Core10.Handles (DescriptorSet)
-import Graphics.Vulkan.Core10.Handles (DescriptorSet(..))
-import Graphics.Vulkan.Core10.Handles (DescriptorSetLayout)
-import Graphics.Vulkan.Core10.Handles (DescriptorSetLayout(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetLayoutBindingFlagsCreateInfo)
-import Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits (DescriptorSetLayoutCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountAllocateInfo)
-import Graphics.Vulkan.Core10.Enums.DescriptorType (DescriptorType)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkAllocateDescriptorSets))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateDescriptorPool))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateDescriptorSetLayout))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyDescriptorPool))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyDescriptorSetLayout))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkFreeDescriptorSets))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkResetDescriptorPool))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkUpdateDescriptorSets))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout)
-import Graphics.Vulkan.Core10.Handles (ImageView)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Handles (Sampler)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (WriteDescriptorSetAccelerationStructureKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block (WriteDescriptorSetInlineUniformBlockEXT)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_DESCRIPTOR_SET))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateDescriptorSetLayout
-  :: FunPtr (Ptr Device_T -> Ptr (DescriptorSetLayoutCreateInfo a) -> Ptr AllocationCallbacks -> Ptr DescriptorSetLayout -> IO Result) -> Ptr Device_T -> Ptr (DescriptorSetLayoutCreateInfo a) -> Ptr AllocationCallbacks -> Ptr DescriptorSetLayout -> IO Result
-
--- | vkCreateDescriptorSetLayout - Create a new descriptor set layout
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the descriptor set
---     layout.
---
--- -   @pCreateInfo@ is a pointer to a 'DescriptorSetLayoutCreateInfo'
---     structure specifying the state of the descriptor set layout object.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pSetLayout@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout' handle in which
---     the resulting descriptor set layout object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'DescriptorSetLayoutCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSetLayout@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout',
--- 'DescriptorSetLayoutCreateInfo', 'Graphics.Vulkan.Core10.Handles.Device'
-createDescriptorSetLayout :: forall a io . (PokeChain a, MonadIO io) => Device -> DescriptorSetLayoutCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DescriptorSetLayout)
-createDescriptorSetLayout device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateDescriptorSetLayout' = mkVkCreateDescriptorSetLayout (pVkCreateDescriptorSetLayout (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSetLayout <- ContT $ bracket (callocBytes @DescriptorSetLayout 8) free
-  r <- lift $ vkCreateDescriptorSetLayout' (deviceHandle (device)) pCreateInfo pAllocator (pPSetLayout)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSetLayout <- lift $ peek @DescriptorSetLayout pPSetLayout
-  pure $ (pSetLayout)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createDescriptorSetLayout' and 'destroyDescriptorSetLayout'
---
--- To ensure that 'destroyDescriptorSetLayout' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withDescriptorSetLayout :: forall a io r . (PokeChain a, MonadIO io) => (io (DescriptorSetLayout) -> ((DescriptorSetLayout) -> io ()) -> r) -> Device -> DescriptorSetLayoutCreateInfo a -> Maybe AllocationCallbacks -> r
-withDescriptorSetLayout b device pCreateInfo pAllocator =
-  b (createDescriptorSetLayout device pCreateInfo pAllocator)
-    (\(o0) -> destroyDescriptorSetLayout device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyDescriptorSetLayout
-  :: FunPtr (Ptr Device_T -> DescriptorSetLayout -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DescriptorSetLayout -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyDescriptorSetLayout - Destroy a descriptor set layout object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @descriptorSetLayout@ was created, a compatible
---     set of callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @descriptorSetLayout@ was created, @pAllocator@
---     /must/ be @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @descriptorSetLayout@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @descriptorSetLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-destroyDescriptorSetLayout :: forall io . MonadIO io => Device -> DescriptorSetLayout -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyDescriptorSetLayout device descriptorSetLayout allocator = liftIO . evalContT $ do
-  let vkDestroyDescriptorSetLayout' = mkVkDestroyDescriptorSetLayout (pVkDestroyDescriptorSetLayout (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyDescriptorSetLayout' (deviceHandle (device)) (descriptorSetLayout) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateDescriptorPool
-  :: FunPtr (Ptr Device_T -> Ptr (DescriptorPoolCreateInfo a) -> Ptr AllocationCallbacks -> Ptr DescriptorPool -> IO Result) -> Ptr Device_T -> Ptr (DescriptorPoolCreateInfo a) -> Ptr AllocationCallbacks -> Ptr DescriptorPool -> IO Result
-
--- | vkCreateDescriptorPool - Creates a descriptor pool object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the descriptor pool.
---
--- -   @pCreateInfo@ is a pointer to a 'DescriptorPoolCreateInfo' structure
---     specifying the state of the descriptor pool object.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pDescriptorPool@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.DescriptorPool' handle in which the
---     resulting descriptor pool object is returned.
---
--- = Description
---
--- @pAllocator@ controls host memory allocation as described in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
--- chapter.
---
--- The created descriptor pool is returned in @pDescriptorPool@.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'DescriptorPoolCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pDescriptorPool@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.DescriptorPool' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.ERROR_FRAGMENTATION_EXT'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.DescriptorPool',
--- 'DescriptorPoolCreateInfo', 'Graphics.Vulkan.Core10.Handles.Device'
-createDescriptorPool :: forall a io . (PokeChain a, MonadIO io) => Device -> DescriptorPoolCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DescriptorPool)
-createDescriptorPool device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateDescriptorPool' = mkVkCreateDescriptorPool (pVkCreateDescriptorPool (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPDescriptorPool <- ContT $ bracket (callocBytes @DescriptorPool 8) free
-  r <- lift $ vkCreateDescriptorPool' (deviceHandle (device)) pCreateInfo pAllocator (pPDescriptorPool)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pDescriptorPool <- lift $ peek @DescriptorPool pPDescriptorPool
-  pure $ (pDescriptorPool)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createDescriptorPool' and 'destroyDescriptorPool'
---
--- To ensure that 'destroyDescriptorPool' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withDescriptorPool :: forall a io r . (PokeChain a, MonadIO io) => (io (DescriptorPool) -> ((DescriptorPool) -> io ()) -> r) -> Device -> DescriptorPoolCreateInfo a -> Maybe AllocationCallbacks -> r
-withDescriptorPool b device pCreateInfo pAllocator =
-  b (createDescriptorPool device pCreateInfo pAllocator)
-    (\(o0) -> destroyDescriptorPool device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyDescriptorPool
-  :: FunPtr (Ptr Device_T -> DescriptorPool -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DescriptorPool -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyDescriptorPool - Destroy a descriptor pool object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- = 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 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @descriptorPool@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @descriptorPool@ was created, @pAllocator@ /must/
---     be @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @descriptorPool@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @descriptorPool@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.DescriptorPool'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.DescriptorPool',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-destroyDescriptorPool :: forall io . MonadIO io => Device -> DescriptorPool -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyDescriptorPool device descriptorPool allocator = liftIO . evalContT $ do
-  let vkDestroyDescriptorPool' = mkVkDestroyDescriptorPool (pVkDestroyDescriptorPool (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyDescriptorPool' (deviceHandle (device)) (descriptorPool) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkResetDescriptorPool
-  :: FunPtr (Ptr Device_T -> DescriptorPool -> DescriptorPoolResetFlags -> IO Result) -> Ptr Device_T -> DescriptorPool -> DescriptorPoolResetFlags -> IO Result
-
--- | vkResetDescriptorPool - Resets a descriptor pool object
---
--- = 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
---
--- 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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @descriptorPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorPool' 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 'Graphics.Vulkan.Core10.Handles.DescriptorSet'
---     objects allocated from @descriptorPool@ /must/ be externally
---     synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DescriptorPool',
--- 'Graphics.Vulkan.Core10.Enums.DescriptorPoolResetFlags.DescriptorPoolResetFlags',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-resetDescriptorPool :: forall io . MonadIO io => Device -> DescriptorPool -> DescriptorPoolResetFlags -> io ()
-resetDescriptorPool device descriptorPool flags = liftIO $ do
-  let vkResetDescriptorPool' = mkVkResetDescriptorPool (pVkResetDescriptorPool (deviceCmds (device :: Device)))
-  _ <- vkResetDescriptorPool' (deviceHandle (device)) (descriptorPool) (flags)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkAllocateDescriptorSets
-  :: FunPtr (Ptr Device_T -> Ptr (DescriptorSetAllocateInfo a) -> Ptr DescriptorSet -> IO Result) -> Ptr Device_T -> Ptr (DescriptorSetAllocateInfo a) -> Ptr DescriptorSet -> IO Result
-
--- | vkAllocateDescriptorSets - Allocate one or more descriptor sets
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the descriptor pool.
---
--- -   @pAllocateInfo@ is a pointer to a 'DescriptorSetAllocateInfo'
---     structure describing parameters of the allocation.
---
--- -   @pDescriptorSets@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.Handles.DescriptorSet' handles in which the
---     resulting descriptor set objects are returned.
---
--- = 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. Descriptors also become
--- undefined if the underlying resource is destroyed. Descriptor sets
--- containing undefined descriptors /can/ still be bound and used, subject
--- to the following conditions:
---
--- -   For descriptor set bindings created with the
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'
---     bit set, all descriptors in that binding that are dynamically used
---     /must/ have been populated before the descriptor set is
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-binding consumed>.
---
--- -   For descriptor set bindings created without the
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'
---     bit set, all descriptors in that binding that are statically used
---     /must/ have been populated before the descriptor set is
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-binding consumed>.
---
--- -   Descriptor bindings with descriptor type of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
---     /can/ be undefined when the descriptor set is
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-binding consumed>;
---     though values in that block will be undefined.
---
--- -   Entries that are not used by a pipeline /can/ have undefined
---     descriptors.
---
--- If a call to 'allocateDescriptorSets' would cause the total number of
--- descriptor sets allocated from the pool to exceed the value of
--- 'DescriptorPoolCreateInfo'::@maxSets@ used to create
--- @pAllocateInfo->descriptorPool@, then the allocation /may/ fail due to
--- lack of space in the descriptor pool. Similarly, the allocation /may/
--- fail due to lack of space if the call to 'allocateDescriptorSets' would
--- cause the number of any given descriptor type to exceed the sum of all
--- the @descriptorCount@ members of each element of
--- 'DescriptorPoolCreateInfo'::@pPoolSizes@ with a @member@ equal to that
--- type.
---
--- Additionally, the allocation /may/ also fail if a call to
--- 'allocateDescriptorSets' would cause the total number of inline uniform
--- block bindings allocated from the pool to exceed the value of
--- 'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.DescriptorPoolInlineUniformBlockCreateInfoEXT'::@maxInlineUniformBlockBindings@
--- used to create the descriptor pool.
---
--- If the allocation fails due to no more space in the descriptor pool, and
--- not because of system or device memory exhaustion, then
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_POOL_MEMORY' /must/ be
--- returned.
---
--- 'allocateDescriptorSets' /can/ be used to create multiple descriptor
--- sets. If the creation of any of those descriptor sets fails, then the
--- implementation /must/ destroy all successfully created descriptor set
--- objects from this command, set all entries of the @pDescriptorSets@
--- array to 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' and return
--- the error.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pAllocateInfo@ /must/ be a valid pointer to a valid
---     'DescriptorSetAllocateInfo' structure
---
--- -   @pDescriptorSets@ /must/ be a valid pointer to an array of
---     @pAllocateInfo->descriptorSetCount@
---     'Graphics.Vulkan.Core10.Handles.DescriptorSet' handles
---
--- -   The value referenced by @pAllocateInfo->descriptorSetCount@ /must/
---     be greater than @0@
---
--- == Host Synchronization
---
--- -   Host access to @pAllocateInfo->descriptorPool@ /must/ be externally
---     synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_FRAGMENTED_POOL'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_POOL_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DescriptorSet',
--- 'DescriptorSetAllocateInfo', 'Graphics.Vulkan.Core10.Handles.Device'
-allocateDescriptorSets :: forall a io . (PokeChain a, MonadIO io) => Device -> DescriptorSetAllocateInfo a -> io (("descriptorSets" ::: Vector DescriptorSet))
-allocateDescriptorSets device allocateInfo = liftIO . evalContT $ do
-  let vkAllocateDescriptorSets' = mkVkAllocateDescriptorSets (pVkAllocateDescriptorSets (deviceCmds (device :: Device)))
-  pAllocateInfo <- ContT $ withCStruct (allocateInfo)
-  pPDescriptorSets <- ContT $ bracket (callocBytes @DescriptorSet ((fromIntegral . Data.Vector.length . setLayouts $ (allocateInfo)) * 8)) free
-  r <- lift $ vkAllocateDescriptorSets' (deviceHandle (device)) pAllocateInfo (pPDescriptorSets)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pDescriptorSets <- lift $ generateM (fromIntegral . Data.Vector.length . setLayouts $ (allocateInfo)) (\i -> peek @DescriptorSet ((pPDescriptorSets `advancePtrBytes` (8 * (i)) :: Ptr DescriptorSet)))
-  pure $ (pDescriptorSets)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'allocateDescriptorSets' and 'freeDescriptorSets'
---
--- To ensure that 'freeDescriptorSets' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withDescriptorSets :: forall a io r . (PokeChain a, MonadIO io) => (io (Vector DescriptorSet) -> ((Vector DescriptorSet) -> io ()) -> r) -> Device -> DescriptorSetAllocateInfo a -> DescriptorPool -> r
-withDescriptorSets b device pAllocateInfo descriptorPool =
-  b (allocateDescriptorSets device pAllocateInfo)
-    (\(o0) -> freeDescriptorSets device descriptorPool o0)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkFreeDescriptorSets
-  :: FunPtr (Ptr Device_T -> DescriptorPool -> Word32 -> Ptr DescriptorSet -> IO Result) -> Ptr Device_T -> DescriptorPool -> Word32 -> Ptr DescriptorSet -> IO Result
-
--- | vkFreeDescriptorSets - Free one or more descriptor sets
---
--- = 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 a pointer to an array of handles to
---     'Graphics.Vulkan.Core10.Handles.DescriptorSet' objects.
---
--- = Description
---
--- After calling 'freeDescriptorSets', 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@ 'Graphics.Vulkan.Core10.Handles.DescriptorSet'
---     handles, each element of which /must/ either be a valid handle or
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   Each valid handle in @pDescriptorSets@ /must/ have been allocated
---     from @descriptorPool@
---
--- -   @descriptorPool@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT'
---     flag
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @descriptorPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorPool' 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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DescriptorPool',
--- 'Graphics.Vulkan.Core10.Handles.DescriptorSet',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-freeDescriptorSets :: forall io . MonadIO io => Device -> DescriptorPool -> ("descriptorSets" ::: Vector DescriptorSet) -> io ()
-freeDescriptorSets device descriptorPool descriptorSets = liftIO . evalContT $ do
-  let vkFreeDescriptorSets' = mkVkFreeDescriptorSets (pVkFreeDescriptorSets (deviceCmds (device :: Device)))
-  pPDescriptorSets <- ContT $ allocaBytesAligned @DescriptorSet ((Data.Vector.length (descriptorSets)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorSets `plusPtr` (8 * (i)) :: Ptr DescriptorSet) (e)) (descriptorSets)
-  _ <- lift $ vkFreeDescriptorSets' (deviceHandle (device)) (descriptorPool) ((fromIntegral (Data.Vector.length $ (descriptorSets)) :: Word32)) (pPDescriptorSets)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkUpdateDescriptorSets
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (WriteDescriptorSet a) -> Word32 -> Ptr CopyDescriptorSet -> IO ()) -> Ptr Device_T -> Word32 -> Ptr (WriteDescriptorSet a) -> Word32 -> Ptr CopyDescriptorSet -> IO ()
-
--- | vkUpdateDescriptorSets - Update the contents of a descriptor set object
---
--- = 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 'WriteDescriptorSet'
---     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 'CopyDescriptorSet'
---     structures describing the descriptor sets to copy between.
---
--- = 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 'CopyDescriptorSet'
--- 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or executable state>,
--- and any of the descriptor bindings that are updated were not created
--- with the
--- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
--- or
--- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'
--- bits set, that command buffer becomes
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
---
--- == Valid Usage
---
--- -   Descriptor bindings updated by this command which were created
---     without the
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---     or
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'
---     bits set /must/ not be used by any command that was recorded to a
---     command buffer which is in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @descriptorWriteCount@ is not @0@, @pDescriptorWrites@ /must/ be
---     a valid pointer to an array of @descriptorWriteCount@ valid
---     'WriteDescriptorSet' structures
---
--- -   If @descriptorCopyCount@ is not @0@, @pDescriptorCopies@ /must/ be a
---     valid pointer to an array of @descriptorCopyCount@ valid
---     'CopyDescriptorSet' structures
---
--- == Host Synchronization
---
--- -   Host access to @pDescriptorWrites@[].dstSet /must/ be externally
---     synchronized
---
--- -   Host access to @pDescriptorCopies@[].dstSet /must/ be externally
---     synchronized
---
--- = See Also
---
--- 'CopyDescriptorSet', 'Graphics.Vulkan.Core10.Handles.Device',
--- 'WriteDescriptorSet'
-updateDescriptorSets :: forall a io . (PokeChain a, MonadIO io) => Device -> ("descriptorWrites" ::: Vector (WriteDescriptorSet a)) -> ("descriptorCopies" ::: Vector CopyDescriptorSet) -> io ()
-updateDescriptorSets device descriptorWrites descriptorCopies = liftIO . evalContT $ do
-  let vkUpdateDescriptorSets' = mkVkUpdateDescriptorSets (pVkUpdateDescriptorSets (deviceCmds (device :: Device)))
-  pPDescriptorWrites <- ContT $ allocaBytesAligned @(WriteDescriptorSet _) ((Data.Vector.length (descriptorWrites)) * 64) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDescriptorWrites `plusPtr` (64 * (i)) :: Ptr (WriteDescriptorSet _)) (e) . ($ ())) (descriptorWrites)
-  pPDescriptorCopies <- ContT $ allocaBytesAligned @CopyDescriptorSet ((Data.Vector.length (descriptorCopies)) * 56) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDescriptorCopies `plusPtr` (56 * (i)) :: Ptr CopyDescriptorSet) (e) . ($ ())) (descriptorCopies)
-  lift $ vkUpdateDescriptorSets' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (descriptorWrites)) :: Word32)) (pPDescriptorWrites) ((fromIntegral (Data.Vector.length $ (descriptorCopies)) :: Word32)) (pPDescriptorCopies)
-  pure $ ()
-
-
--- | VkDescriptorBufferInfo - Structure specifying descriptor buffer info
---
--- = Description
---
--- Note
---
--- When setting @range@ to
--- 'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', the effective range
--- /must/ not be larger than the maximum range for the descriptor type
--- (<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxUniformBufferRange maxUniformBufferRange>
--- or
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxStorageBufferRange maxStorageBufferRange>).
--- This means that 'Graphics.Vulkan.Core10.APIConstants.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
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
--- and
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @range@ /must/ be
---     greater than @0@
---
--- -   If @range@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @range@ /must/ be
---     less than or equal to the size of @buffer@ minus @offset@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, @buffer@ /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @buffer@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @offset@ /must/ be zero and @range@ /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE'
---
--- == Valid Usage (Implicit)
---
--- -   If @buffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize', 'WriteDescriptorSet'
-data DescriptorBufferInfo = DescriptorBufferInfo
-  { -- | @buffer@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or the
-    -- buffer resource.
-    buffer :: Buffer
-  , -- | @offset@ is the offset in bytes from the start of @buffer@. Access to
-    -- buffer memory via this descriptor uses addressing that is relative to
-    -- this starting offset.
-    offset :: DeviceSize
-  , -- | @range@ is the size in bytes that is used for this descriptor update, or
-    -- 'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE' to use the range from
-    -- @offset@ to the end of the buffer.
-    range :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show DescriptorBufferInfo
-
-instance ToCStruct DescriptorBufferInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorBufferInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Buffer)) (buffer)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (offset)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (range)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct DescriptorBufferInfo where
-  peekCStruct p = do
-    buffer <- peek @Buffer ((p `plusPtr` 0 :: Ptr Buffer))
-    offset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
-    range <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    pure $ DescriptorBufferInfo
-             buffer offset range
-
-instance Storable DescriptorBufferInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DescriptorBufferInfo where
-  zero = DescriptorBufferInfo
-           zero
-           zero
-           zero
-
-
--- | VkDescriptorImageInfo - Structure specifying descriptor image info
---
--- = Description
---
--- Members of 'DescriptorImageInfo' that are not used in an update (as
--- described above) are ignored.
---
--- == Valid Usage
---
--- -   @imageView@ /must/ not be 2D or 2D array image view created from a
---     3D image
---
--- -   If @imageView@ is created from a depth\/stencil image, the
---     @aspectMask@ used to create the @imageView@ /must/ include either
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
---     but not both
---
--- -   @imageLayout@ /must/ match the actual
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' of each
---     subresource accessible from @imageView@ at the time this descriptor
---     is accessed as defined by the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts-matching-rule image layout matching rules>
---
--- -   If @sampler@ is used and the
---     'Graphics.Vulkan.Core10.Enums.Format.Format' of the image is a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
---     the image /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
---     and the @aspectMask@ of the @imageView@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
---     or (for three-plane formats only)
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
---
--- == Valid Usage (Implicit)
---
--- -   Both of @imageView@, and @sampler@ that are valid handles of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'Graphics.Vulkan.Core10.Handles.ImageView',
--- 'Graphics.Vulkan.Core10.Handles.Sampler', 'WriteDescriptorSet'
-data DescriptorImageInfo = DescriptorImageInfo
-  { -- | @sampler@ is a sampler handle, and is used in descriptor updates for
-    -- types
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
-    -- if the binding being updated does not use immutable samplers.
-    sampler :: Sampler
-  , -- | @imageView@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or an
-    -- image view handle, and is used in descriptor updates for types
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'.
-    imageView :: ImageView
-  , -- | @imageLayout@ is the layout that the image subresources accessible from
-    -- @imageView@ will be in at the time this descriptor is accessed.
-    -- @imageLayout@ is used in descriptor updates for types
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'.
-    imageLayout :: ImageLayout
-  }
-  deriving (Typeable)
-deriving instance Show DescriptorImageInfo
-
-instance ToCStruct DescriptorImageInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorImageInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Sampler)) (sampler)
-    poke ((p `plusPtr` 8 :: Ptr ImageView)) (imageView)
-    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (imageLayout)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Sampler)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr ImageView)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (zero)
-    f
-
-instance FromCStruct DescriptorImageInfo where
-  peekCStruct p = do
-    sampler <- peek @Sampler ((p `plusPtr` 0 :: Ptr Sampler))
-    imageView <- peek @ImageView ((p `plusPtr` 8 :: Ptr ImageView))
-    imageLayout <- peek @ImageLayout ((p `plusPtr` 16 :: Ptr ImageLayout))
-    pure $ DescriptorImageInfo
-             sampler imageView imageLayout
-
-instance Storable DescriptorImageInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DescriptorImageInfo where
-  zero = DescriptorImageInfo
-           zero
-           zero
-           zero
-
-
--- | VkWriteDescriptorSet - Structure specifying the parameters of a
--- descriptor set write operation
---
--- = Description
---
--- Only one of @pImageInfo@, @pBufferInfo@, or @pTexelBufferView@ members
--- is used according to the descriptor type specified in the
--- @descriptorType@ member of the containing 'WriteDescriptorSet'
--- structure, or none of them in case @descriptorType@ is
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
--- in which case the source data for the descriptor writes is taken from
--- the
--- 'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT'
--- structure included in the @pNext@ chain of 'WriteDescriptorSet', or if
--- @descriptorType@ is
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR',
--- in which case the source data for the descriptor writes is taken from
--- the
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR'
--- structure in the @pNext@ chain of 'WriteDescriptorSet', as specified
--- below.
---
--- If the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
--- feature is enabled, the buffer, imageView, or bufferView /can/ be
--- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'. Loads from a null
--- descriptor return zero values and stores and atomics to a null
--- descriptor are discarded.
---
--- 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.
---
--- Note
---
--- The same behavior applies to bindings with a descriptor type of
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
--- where @descriptorCount@ specifies the number of bytes to update while
--- @dstArrayElement@ specifies the starting byte offset, thus in this case
--- if the @dstBinding@ has a smaller byte size than the sum of
--- @dstArrayElement@ and @descriptorCount@, then the remainder will be used
--- to update the subsequent binding - @dstBinding@+1 starting at offset
--- zero. This falls out as a special case of the above rule.
---
--- == Valid Usage
---
--- -   @dstBinding@ /must/ be less than or equal to the maximum value of
---     @binding@ of all 'DescriptorSetLayoutBinding' structures specified
---     when @dstSet@’s descriptor set layout was created
---
--- -   @dstBinding@ /must/ be a binding with a non-zero @descriptorCount@
---
--- -   All consecutive bindings updated via a single 'WriteDescriptorSet'
---     structure, except those with a @descriptorCount@ of zero, /must/
---     have identical @descriptorType@ and @stageFlags@
---
--- -   All consecutive bindings updated via a single 'WriteDescriptorSet'
---     structure, except those with a @descriptorCount@ of zero, /must/ all
---     either use immutable samplers or /must/ all not use immutable
---     samplers
---
--- -   @descriptorType@ /must/ match the type of @dstBinding@ within
---     @dstSet@
---
--- -   @dstSet@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorSet' handle
---
--- -   The sum of @dstArrayElement@ and @descriptorCount@ /must/ be less
---     than or equal to the number of array elements in the descriptor set
---     binding specified by @dstBinding@, and all applicable consecutive
---     bindings, as described by
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive>
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
---     @dstArrayElement@ /must/ be an integer multiple of @4@
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
---     @descriptorCount@ /must/ be an integer multiple of @4@
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
---     @pImageInfo@ /must/ be a valid pointer to an array of
---     @descriptorCount@ valid 'DescriptorImageInfo' structures
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
---     each element of @pTexelBufferView@ /must/ be either a valid
---     'Graphics.Vulkan.Core10.Handles.BufferView' handle or
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, each element of @pTexelBufferView@ /must/
---     not be 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',
---     @pBufferInfo@ /must/ be a valid pointer to an array of
---     @descriptorCount@ valid 'DescriptorBufferInfo' structures
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     and @dstSet@ was not allocated with a layout that included immutable
---     samplers for @dstBinding@ with @descriptorType@, the @sampler@
---     member of each element of @pImageInfo@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Sampler' object
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
---     the @imageView@ member of each element of @pImageInfo@ /must/ be
---     either a valid 'Graphics.Vulkan.Core10.Handles.ImageView' handle or
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, the @imageView@ member of each element of
---     @pImageInfo@ /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
---     the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT'
---     structure whose @dataSize@ member equals @descriptorCount@
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR',
---     the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR'
---     structure whose @accelerationStructureCount@ member equals
---     @descriptorCount@
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
---     then the @imageView@ member of each @pImageInfo@ element /must/ have
---     been created without a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
---     structure in its @pNext@ chain
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     and if any element of @pImageInfo@ has a @imageView@ member that was
---     created with a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
---     structure in its @pNext@ chain, then @dstSet@ /must/ have been
---     allocated with a layout that included immutable samplers for
---     @dstBinding@, and the corresponding immutable sampler /must/ have
---     been created with an /identically defined/
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
---     object
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     and @dstSet@ was allocated with a layout that included immutable
---     samplers for @dstBinding@, then the @imageView@ member of each
---     element of @pImageInfo@ which corresponds to an immutable sampler
---     that enables
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
---     /must/ have been created with a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
---     structure in its @pNext@ chain with an /identically defined/
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
---     to the corresponding immutable sampler
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
---     the @offset@ member of each element of @pBufferInfo@ /must/ be a
---     multiple of
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minUniformBufferOffsetAlignment@
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',
---     the @offset@ member of each element of @pBufferInfo@ /must/ be a
---     multiple of
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minStorageBufferOffsetAlignment@
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
---     the @buffer@ member of each element of @pBufferInfo@ /must/ have
---     been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT'
---     set
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',
---     the @buffer@ member of each element of @pBufferInfo@ /must/ have
---     been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT'
---     set
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
---     the @range@ member of each element of @pBufferInfo@, or the
---     effective range if @range@ is
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', /must/ be less
---     than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxUniformBufferRange@
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',
---     the @range@ member of each element of @pBufferInfo@, or the
---     effective range if @range@ is
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', /must/ be less
---     than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxStorageBufferRange@
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER',
---     the 'Graphics.Vulkan.Core10.Handles.Buffer' that each element of
---     @pTexelBufferView@ was created from /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT'
---     set
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
---     the 'Graphics.Vulkan.Core10.Handles.Buffer' that each element of
---     @pTexelBufferView@ was created from /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT'
---     set
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
---     the @imageView@ member of each element of @pImageInfo@ /must/ have
---     been created with the identity swizzle
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     the @imageView@ member of each element of @pImageInfo@ /must/ have
---     been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT'
---     set
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     the @imageLayout@ member of each element of @pImageInfo@ /must/ be a
---     member of the list given in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage Sampled Image>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler Combined Image Sampler>,
---     corresponding to its type
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
---     the @imageView@ member of each element of @pImageInfo@ /must/ have
---     been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
---     set
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
---     the @imageView@ member of each element of @pImageInfo@ /must/ have
---     been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT'
---     set
---
--- -   All consecutive bindings updated via a single 'WriteDescriptorSet'
---     structure, except those with a @descriptorCount@ of zero, /must/
---     have identical
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlagBits'
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
---     then @dstSet@ /must/ not have been allocated with a layout that
---     included immutable samplers for @dstBinding@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR'
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @descriptorType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
---
--- -   @descriptorCount@ /must/ be greater than @0@
---
--- -   Both of @dstSet@, and the elements of @pTexelBufferView@ that are
---     valid handles of non-ignored parameters /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.BufferView', 'DescriptorBufferInfo',
--- 'DescriptorImageInfo', 'Graphics.Vulkan.Core10.Handles.DescriptorSet',
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetKHR',
--- 'updateDescriptorSets'
-data WriteDescriptorSet (es :: [Type]) = WriteDescriptorSet
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @dstSet@ is the destination descriptor set to update.
-    dstSet :: DescriptorSet
-  , -- | @dstBinding@ is the descriptor binding within that set.
-    dstBinding :: Word32
-  , -- | @dstArrayElement@ is the starting element in that array. If the
-    -- descriptor binding identified by @dstSet@ and @dstBinding@ has a
-    -- descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- then @dstArrayElement@ specifies the starting byte offset within the
-    -- binding.
-    dstArrayElement :: Word32
-  , -- | @descriptorType@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType' specifying
-    -- the type of each descriptor in @pImageInfo@, @pBufferInfo@, or
-    -- @pTexelBufferView@, as described below. It /must/ be the same type as
-    -- that specified in 'DescriptorSetLayoutBinding' for @dstSet@ at
-    -- @dstBinding@. The type of the descriptor also controls which array the
-    -- descriptors are taken from.
-    descriptorType :: DescriptorType
-  , -- | @pImageInfo@ is a pointer to an array of 'DescriptorImageInfo'
-    -- structures or is ignored, as described below.
-    imageInfo :: Vector DescriptorImageInfo
-  , -- | @pBufferInfo@ is a pointer to an array of 'DescriptorBufferInfo'
-    -- structures or is ignored, as described below.
-    bufferInfo :: Vector DescriptorBufferInfo
-  , -- | @pTexelBufferView@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.BufferView' handles as described in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-buffer-views Buffer Views>
-    -- section or is ignored, as described below.
-    texelBufferView :: Vector BufferView
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (WriteDescriptorSet es)
-
-instance Extensible WriteDescriptorSet where
-  extensibleType = STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
-  setNext x next = x{next = next}
-  getNext WriteDescriptorSet{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends WriteDescriptorSet e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @WriteDescriptorSetAccelerationStructureKHR = Just f
-    | Just Refl <- eqT @e @WriteDescriptorSetInlineUniformBlockEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (WriteDescriptorSet es) where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p WriteDescriptorSet{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorSet)) (dstSet)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (dstBinding)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (dstArrayElement)
-    let pImageInfoLength = Data.Vector.length $ (imageInfo)
-    let pBufferInfoLength = Data.Vector.length $ (bufferInfo)
-    lift $ unless (pBufferInfoLength == pImageInfoLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pBufferInfo and pImageInfo must have the same length" Nothing Nothing
-    let pTexelBufferViewLength = Data.Vector.length $ (texelBufferView)
-    lift $ unless (pTexelBufferViewLength == pImageInfoLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pTexelBufferView and pImageInfo must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral pImageInfoLength :: Word32))
-    lift $ poke ((p `plusPtr` 36 :: Ptr DescriptorType)) (descriptorType)
-    pPImageInfo' <- ContT $ allocaBytesAligned @DescriptorImageInfo ((Data.Vector.length (imageInfo)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageInfo' `plusPtr` (24 * (i)) :: Ptr DescriptorImageInfo) (e) . ($ ())) (imageInfo)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr DescriptorImageInfo))) (pPImageInfo')
-    pPBufferInfo' <- ContT $ allocaBytesAligned @DescriptorBufferInfo ((Data.Vector.length (bufferInfo)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferInfo' `plusPtr` (24 * (i)) :: Ptr DescriptorBufferInfo) (e) . ($ ())) (bufferInfo)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr DescriptorBufferInfo))) (pPBufferInfo')
-    pPTexelBufferView' <- ContT $ allocaBytesAligned @BufferView ((Data.Vector.length (texelBufferView)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPTexelBufferView' `plusPtr` (8 * (i)) :: Ptr BufferView) (e)) (texelBufferView)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr BufferView))) (pPTexelBufferView')
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorSet)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 36 :: Ptr DescriptorType)) (zero)
-    pPImageInfo' <- ContT $ allocaBytesAligned @DescriptorImageInfo ((Data.Vector.length (mempty)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageInfo' `plusPtr` (24 * (i)) :: Ptr DescriptorImageInfo) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr DescriptorImageInfo))) (pPImageInfo')
-    pPBufferInfo' <- ContT $ allocaBytesAligned @DescriptorBufferInfo ((Data.Vector.length (mempty)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferInfo' `plusPtr` (24 * (i)) :: Ptr DescriptorBufferInfo) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr DescriptorBufferInfo))) (pPBufferInfo')
-    pPTexelBufferView' <- ContT $ allocaBytesAligned @BufferView ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPTexelBufferView' `plusPtr` (8 * (i)) :: Ptr BufferView) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr BufferView))) (pPTexelBufferView')
-    lift $ f
-
-instance PeekChain es => FromCStruct (WriteDescriptorSet es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    dstSet <- peek @DescriptorSet ((p `plusPtr` 16 :: Ptr DescriptorSet))
-    dstBinding <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    dstArrayElement <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    descriptorType <- peek @DescriptorType ((p `plusPtr` 36 :: Ptr DescriptorType))
-    descriptorCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pImageInfo <- peek @(Ptr DescriptorImageInfo) ((p `plusPtr` 40 :: Ptr (Ptr DescriptorImageInfo)))
-    pImageInfo' <- generateM (fromIntegral descriptorCount) (\i -> peekCStruct @DescriptorImageInfo ((pImageInfo `advancePtrBytes` (24 * (i)) :: Ptr DescriptorImageInfo)))
-    pBufferInfo <- peek @(Ptr DescriptorBufferInfo) ((p `plusPtr` 48 :: Ptr (Ptr DescriptorBufferInfo)))
-    pBufferInfo' <- generateM (fromIntegral descriptorCount) (\i -> peekCStruct @DescriptorBufferInfo ((pBufferInfo `advancePtrBytes` (24 * (i)) :: Ptr DescriptorBufferInfo)))
-    pTexelBufferView <- peek @(Ptr BufferView) ((p `plusPtr` 56 :: Ptr (Ptr BufferView)))
-    pTexelBufferView' <- generateM (fromIntegral descriptorCount) (\i -> peek @BufferView ((pTexelBufferView `advancePtrBytes` (8 * (i)) :: Ptr BufferView)))
-    pure $ WriteDescriptorSet
-             next dstSet dstBinding dstArrayElement descriptorType pImageInfo' pBufferInfo' pTexelBufferView'
-
-instance es ~ '[] => Zero (WriteDescriptorSet es) where
-  zero = WriteDescriptorSet
-           ()
-           zero
-           zero
-           zero
-           zero
-           mempty
-           mempty
-           mempty
-
-
--- | VkCopyDescriptorSet - Structure specifying a copy descriptor set
--- operation
---
--- == 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive>
---
--- -   The type of @dstBinding@ within @dstSet@ /must/ be equal to the type
---     of @srcBinding@ within @srcSet@
---
--- -   If @srcSet@ is equal to @dstSet@, then the source and destination
---     ranges of descriptors /must/ not overlap, where the ranges /may/
---     include array elements from consecutive bindings as described by
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive>
---
--- -   If the descriptor type of the descriptor set binding specified by
---     @srcBinding@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
---     @srcArrayElement@ /must/ be an integer multiple of @4@
---
--- -   If the descriptor type of the descriptor set binding specified by
---     @dstBinding@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
---     @dstArrayElement@ /must/ be an integer multiple of @4@
---
--- -   If the descriptor type of the descriptor set binding specified by
---     either @srcBinding@ or @dstBinding@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
---     @descriptorCount@ /must/ be an integer multiple of @4@
---
--- -   If @srcSet@’s layout was created with the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     flag set, then @dstSet@’s layout /must/ also have been created with
---     the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     flag set
---
--- -   If @srcSet@’s layout was created without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     flag set, then @dstSet@’s layout /must/ also have been created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     flag set
---
--- -   If the descriptor pool from which @srcSet@ was allocated was created
---     with the
---     'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
---     flag set, then the descriptor pool from which @dstSet@ was allocated
---     /must/ also have been created with the
---     'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
---     flag set
---
--- -   If the descriptor pool from which @srcSet@ was allocated was created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
---     flag set, then the descriptor pool from which @dstSet@ was allocated
---     /must/ also have been created without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
---     flag set
---
--- -   If the descriptor type of the descriptor set binding specified by
---     @dstBinding@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
---     then @dstSet@ /must/ not have been allocated with a layout that
---     included immutable samplers for @dstBinding@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_DESCRIPTOR_SET'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @srcSet@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorSet' handle
---
--- -   @dstSet@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorSet' handle
---
--- -   Both of @dstSet@, and @srcSet@ /must/ have been created, allocated,
---     or retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DescriptorSet',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'updateDescriptorSets'
-data CopyDescriptorSet = CopyDescriptorSet
-  { -- | @srcSet@, @srcBinding@, and @srcArrayElement@ are the source set,
-    -- binding, and array element, respectively. If the descriptor binding
-    -- identified by @srcSet@ and @srcBinding@ has a descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- then @srcArrayElement@ specifies the starting byte offset within the
-    -- binding to copy from.
-    srcSet :: DescriptorSet
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "srcBinding"
-    srcBinding :: Word32
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "srcArrayElement"
-    srcArrayElement :: Word32
-  , -- | @dstSet@, @dstBinding@, and @dstArrayElement@ are the destination set,
-    -- binding, and array element, respectively. If the descriptor binding
-    -- identified by @dstSet@ and @dstBinding@ has a descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- then @dstArrayElement@ specifies the starting byte offset within the
-    -- binding to copy to.
-    dstSet :: DescriptorSet
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "dstBinding"
-    dstBinding :: Word32
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "dstArrayElement"
-    dstArrayElement :: Word32
-  , -- | @descriptorCount@ is the number of descriptors to copy from the source
-    -- to destination. If @descriptorCount@ is greater than the number of
-    -- remaining array elements in the source or destination binding, those
-    -- affect consecutive bindings in a manner similar to 'WriteDescriptorSet'
-    -- above. If the descriptor binding identified by @srcSet@ and @srcBinding@
-    -- has a descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- then @descriptorCount@ specifies the number of bytes to copy and the
-    -- remaining array elements in the source or destination binding refer to
-    -- the remaining number of bytes in those.
-    descriptorCount :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show CopyDescriptorSet
-
-instance ToCStruct CopyDescriptorSet where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CopyDescriptorSet{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DescriptorSet)) (srcSet)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (srcBinding)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (srcArrayElement)
-    poke ((p `plusPtr` 32 :: Ptr DescriptorSet)) (dstSet)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (dstBinding)
-    poke ((p `plusPtr` 44 :: Ptr Word32)) (dstArrayElement)
-    poke ((p `plusPtr` 48 :: Ptr Word32)) (descriptorCount)
-    f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DescriptorSet)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr DescriptorSet)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct CopyDescriptorSet where
-  peekCStruct p = do
-    srcSet <- peek @DescriptorSet ((p `plusPtr` 16 :: Ptr DescriptorSet))
-    srcBinding <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    srcArrayElement <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    dstSet <- peek @DescriptorSet ((p `plusPtr` 32 :: Ptr DescriptorSet))
-    dstBinding <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    dstArrayElement <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
-    descriptorCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pure $ CopyDescriptorSet
-             srcSet srcBinding srcArrayElement dstSet dstBinding dstArrayElement descriptorCount
-
-instance Storable CopyDescriptorSet where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero CopyDescriptorSet where
-  zero = CopyDescriptorSet
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDescriptorSetLayoutBinding - Structure specifying a descriptor set
--- layout binding
---
--- = Description
---
--- -   @pImmutableSamplers@ affects initialization of samplers. If
---     @descriptorType@ specifies a
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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 and /must/ not be changed;
---     updating a
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
---     descriptor with immutable samplers is not allowed and updates to a
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
---     descriptor with immutable samplers does not modify the samplers (the
---     image views are updated, but the sampler updates are ignored). If
---     @pImmutableSamplers@ is not @NULL@, then it points to an array of
---     sampler handles that will be copied into the set layout and used for
---     the corresponding binding. Only the sampler handles are copied; the
---     sampler objects /must/ not be destroyed before the final use of the
---     set layout and any descriptor pools and sets created using it. 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 value of @descriptorType@ is undefined.
--- However, all binding numbers between 0 and the maximum binding number in
--- the 'DescriptorSetLayoutCreateInfo'::@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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     and @descriptorCount@ is not @0@ and @pImmutableSamplers@ is not
---     @NULL@, @pImmutableSamplers@ /must/ be a valid pointer to an array
---     of @descriptorCount@ valid 'Graphics.Vulkan.Core10.Handles.Sampler'
---     handles
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
---     then @descriptorCount@ /must/ be a multiple of @4@
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
---     then @descriptorCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxInlineUniformBlockSize@
---
--- -   If @descriptorCount@ is not @0@, @stageFlags@ /must/ be a valid
---     combination of
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
---     values
---
--- -   If @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
---     and @descriptorCount@ is not @0@, then @stageFlags@ /must/ be @0@ or
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
---
--- == Valid Usage (Implicit)
---
--- -   @descriptorType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
---
--- = See Also
---
--- 'DescriptorSetLayoutCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType',
--- 'Graphics.Vulkan.Core10.Handles.Sampler',
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'
-data DescriptorSetLayoutBinding = DescriptorSetLayoutBinding
-  { -- | @binding@ is the binding number of this entry and corresponds to a
-    -- resource of the same binding number in the shader stages.
-    binding :: Word32
-  , -- | @descriptorType@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType' specifying
-    -- which type of resource descriptors are used for this binding.
-    descriptorType :: DescriptorType
-  , -- | @stageFlags@ member is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
-    -- specifying which pipeline shader stages /can/ access a resource for this
-    -- binding.
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.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.
-    stageFlags :: ShaderStageFlags
-  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "pImmutableSamplers"
-    immutableSamplers :: Either Word32 (Vector Sampler)
-  }
-  deriving (Typeable)
-deriving instance Show DescriptorSetLayoutBinding
-
-instance ToCStruct DescriptorSetLayoutBinding where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorSetLayoutBinding{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (binding)
-    lift $ poke ((p `plusPtr` 4 :: Ptr DescriptorType)) (descriptorType)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (immutableSamplers)) :: Word32))
-    lift $ poke ((p `plusPtr` 12 :: Ptr ShaderStageFlags)) (stageFlags)
-    pImmutableSamplers'' <- case (immutableSamplers) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPImmutableSamplers' <- ContT $ allocaBytesAligned @Sampler ((Data.Vector.length (v)) * 8) 8
-        lift $ Data.Vector.imapM_ (\i e -> poke (pPImmutableSamplers' `plusPtr` (8 * (i)) :: Ptr Sampler) (e)) (v)
-        pure $ pPImmutableSamplers'
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr Sampler))) pImmutableSamplers''
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr DescriptorType)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr ShaderStageFlags)) (zero)
-    f
-
-instance FromCStruct DescriptorSetLayoutBinding where
-  peekCStruct p = do
-    binding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    descriptorType <- peek @DescriptorType ((p `plusPtr` 4 :: Ptr DescriptorType))
-    stageFlags <- peek @ShaderStageFlags ((p `plusPtr` 12 :: Ptr ShaderStageFlags))
-    descriptorCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pImmutableSamplers <- peek @(Ptr Sampler) ((p `plusPtr` 16 :: Ptr (Ptr Sampler)))
-    pImmutableSamplers' <- maybePeek (\j -> generateM (fromIntegral descriptorCount) (\i -> peek @Sampler (((j) `advancePtrBytes` (8 * (i)) :: Ptr Sampler)))) pImmutableSamplers
-    let pImmutableSamplers'' = maybe (Left descriptorCount) Right pImmutableSamplers'
-    pure $ DescriptorSetLayoutBinding
-             binding descriptorType stageFlags pImmutableSamplers''
-
-instance Zero DescriptorSetLayoutBinding where
-  zero = DescriptorSetLayoutBinding
-           zero
-           zero
-           zero
-           (Left 0)
-
-
--- | VkDescriptorSetLayoutCreateInfo - Structure specifying parameters of a
--- newly created descriptor set layout
---
--- == Valid Usage
---
--- -   The 'DescriptorSetLayoutBinding'::@binding@ members of the elements
---     of the @pBindings@ array /must/ each have different values
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR',
---     then all elements of @pBindings@ /must/ not have a @descriptorType@
---     of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR',
---     then all elements of @pBindings@ /must/ not have a @descriptorType@
---     of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR',
---     then the total number of elements of all bindings /must/ be less
---     than or equal to
---     'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR'::@maxPushDescriptors@
---
--- -   If any binding has the
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---     bit set, @flags@ /must/ include
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---
--- -   If any binding has the
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---     bit set, then all bindings /must/ not have @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetLayoutBindingFlagsCreateInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DescriptorSetLayoutCreateFlagBits'
---     values
---
--- -   If @bindingCount@ is not @0@, @pBindings@ /must/ be a valid pointer
---     to an array of @bindingCount@ valid 'DescriptorSetLayoutBinding'
---     structures
---
--- = See Also
---
--- 'DescriptorSetLayoutBinding',
--- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DescriptorSetLayoutCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createDescriptorSetLayout',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.getDescriptorSetLayoutSupport',
--- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance3.getDescriptorSetLayoutSupportKHR'
-data DescriptorSetLayoutCreateInfo (es :: [Type]) = DescriptorSetLayoutCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DescriptorSetLayoutCreateFlagBits'
-    -- specifying options for descriptor set layout creation.
-    flags :: DescriptorSetLayoutCreateFlags
-  , -- | @pBindings@ is a pointer to an array of 'DescriptorSetLayoutBinding'
-    -- structures.
-    bindings :: Vector DescriptorSetLayoutBinding
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (DescriptorSetLayoutCreateInfo es)
-
-instance Extensible DescriptorSetLayoutCreateInfo where
-  extensibleType = STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext DescriptorSetLayoutCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DescriptorSetLayoutCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DescriptorSetLayoutBindingFlagsCreateInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (DescriptorSetLayoutCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorSetLayoutCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorSetLayoutCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (bindings)) :: Word32))
-    pPBindings' <- ContT $ allocaBytesAligned @DescriptorSetLayoutBinding ((Data.Vector.length (bindings)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindings' `plusPtr` (24 * (i)) :: Ptr DescriptorSetLayoutBinding) (e) . ($ ())) (bindings)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayoutBinding))) (pPBindings')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPBindings' <- ContT $ allocaBytesAligned @DescriptorSetLayoutBinding ((Data.Vector.length (mempty)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindings' `plusPtr` (24 * (i)) :: Ptr DescriptorSetLayoutBinding) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayoutBinding))) (pPBindings')
-    lift $ f
-
-instance PeekChain es => FromCStruct (DescriptorSetLayoutCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @DescriptorSetLayoutCreateFlags ((p `plusPtr` 16 :: Ptr DescriptorSetLayoutCreateFlags))
-    bindingCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pBindings <- peek @(Ptr DescriptorSetLayoutBinding) ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayoutBinding)))
-    pBindings' <- generateM (fromIntegral bindingCount) (\i -> peekCStruct @DescriptorSetLayoutBinding ((pBindings `advancePtrBytes` (24 * (i)) :: Ptr DescriptorSetLayoutBinding)))
-    pure $ DescriptorSetLayoutCreateInfo
-             next flags pBindings'
-
-instance es ~ '[] => Zero (DescriptorSetLayoutCreateInfo es) where
-  zero = DescriptorSetLayoutCreateInfo
-           ()
-           zero
-           mempty
-
-
--- | VkDescriptorPoolSize - Structure specifying descriptor pool size
---
--- = Description
---
--- Note
---
--- When creating a descriptor pool that will contain descriptors for
--- combined image samplers of multi-planar formats, an application needs to
--- account for non-trivial descriptor consumption when choosing the
--- @descriptorCount@ value, as indicated by
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionImageFormatProperties'::@combinedImageSamplerDescriptorCount@.
---
--- == Valid Usage
---
--- -   @descriptorCount@ /must/ be greater than @0@
---
--- -   If @type@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
---     then @descriptorCount@ /must/ be a multiple of @4@
---
--- == Valid Usage (Implicit)
---
--- -   @type@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
---
--- = See Also
---
--- 'DescriptorPoolCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType'
-data DescriptorPoolSize = DescriptorPoolSize
-  { -- | @type@ is the type of descriptor.
-    type' :: DescriptorType
-  , -- | @descriptorCount@ is the number of descriptors of that type to allocate.
-    -- If @type@ is
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- then @descriptorCount@ is the number of bytes to allocate for
-    -- descriptors of this type.
-    descriptorCount :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DescriptorPoolSize
-
-instance ToCStruct DescriptorPoolSize where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorPoolSize{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr DescriptorType)) (type')
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (descriptorCount)
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr DescriptorType)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DescriptorPoolSize where
-  peekCStruct p = do
-    type' <- peek @DescriptorType ((p `plusPtr` 0 :: Ptr DescriptorType))
-    descriptorCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    pure $ DescriptorPoolSize
-             type' descriptorCount
-
-instance Storable DescriptorPoolSize where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DescriptorPoolSize where
-  zero = DescriptorPoolSize
-           zero
-           zero
-
-
--- | VkDescriptorPoolCreateInfo - Structure specifying parameters of a newly
--- created descriptor pool
---
--- = Description
---
--- If multiple 'DescriptorPoolSize' 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
--- 'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.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.
---
--- If @flags@ has the
--- 'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
--- bit set, descriptor pool creation /may/ fail with the error
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_FRAGMENTATION' if the total
--- number of descriptors across all pools (including this one) created with
--- this bit set exceeds @maxUpdateAfterBindDescriptorsInAllPools@, or if
--- fragmentation of the underlying hardware resources occurs.
---
--- == Valid Usage
---
--- -   @maxSets@ /must/ be greater than @0@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.DescriptorPoolInlineUniformBlockCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DescriptorPoolCreateFlagBits'
---     values
---
--- -   @pPoolSizes@ /must/ be a valid pointer to an array of
---     @poolSizeCount@ valid 'DescriptorPoolSize' structures
---
--- -   @poolSizeCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DescriptorPoolCreateFlags',
--- 'DescriptorPoolSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createDescriptorPool'
-data DescriptorPoolCreateInfo (es :: [Type]) = DescriptorPoolCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DescriptorPoolCreateFlagBits'
-    -- specifying certain supported operations on the pool.
-    flags :: DescriptorPoolCreateFlags
-  , -- | @maxSets@ is the maximum number of descriptor sets that /can/ be
-    -- allocated from the pool.
-    maxSets :: Word32
-  , -- | @pPoolSizes@ is a pointer to an array of 'DescriptorPoolSize'
-    -- structures, each containing a descriptor type and number of descriptors
-    -- of that type to be allocated in the pool.
-    poolSizes :: Vector DescriptorPoolSize
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (DescriptorPoolCreateInfo es)
-
-instance Extensible DescriptorPoolCreateInfo where
-  extensibleType = STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext DescriptorPoolCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DescriptorPoolCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DescriptorPoolInlineUniformBlockCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (DescriptorPoolCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorPoolCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorPoolCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (maxSets)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (poolSizes)) :: Word32))
-    pPPoolSizes' <- ContT $ allocaBytesAligned @DescriptorPoolSize ((Data.Vector.length (poolSizes)) * 8) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPoolSizes' `plusPtr` (8 * (i)) :: Ptr DescriptorPoolSize) (e) . ($ ())) (poolSizes)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr DescriptorPoolSize))) (pPPoolSizes')
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    pPPoolSizes' <- ContT $ allocaBytesAligned @DescriptorPoolSize ((Data.Vector.length (mempty)) * 8) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPoolSizes' `plusPtr` (8 * (i)) :: Ptr DescriptorPoolSize) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr DescriptorPoolSize))) (pPPoolSizes')
-    lift $ f
-
-instance PeekChain es => FromCStruct (DescriptorPoolCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @DescriptorPoolCreateFlags ((p `plusPtr` 16 :: Ptr DescriptorPoolCreateFlags))
-    maxSets <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    poolSizeCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pPoolSizes <- peek @(Ptr DescriptorPoolSize) ((p `plusPtr` 32 :: Ptr (Ptr DescriptorPoolSize)))
-    pPoolSizes' <- generateM (fromIntegral poolSizeCount) (\i -> peekCStruct @DescriptorPoolSize ((pPoolSizes `advancePtrBytes` (8 * (i)) :: Ptr DescriptorPoolSize)))
-    pure $ DescriptorPoolCreateInfo
-             next flags maxSets pPoolSizes'
-
-instance es ~ '[] => Zero (DescriptorPoolCreateInfo es) where
-  zero = DescriptorPoolCreateInfo
-           ()
-           zero
-           zero
-           mempty
-
-
--- | VkDescriptorSetAllocateInfo - Structure specifying the allocation
--- parameters for descriptor sets
---
--- == Valid Usage
---
--- -   Each element of @pSetLayouts@ /must/ not have been created with
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'
---     set
---
--- -   If any element of @pSetLayouts@ was created with the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set, @descriptorPool@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
---     flag set
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountAllocateInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @descriptorPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorPool' handle
---
--- -   @pSetLayouts@ /must/ be a valid pointer to an array of
---     @descriptorSetCount@ valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout' 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
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DescriptorPool',
--- 'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'allocateDescriptorSets'
-data DescriptorSetAllocateInfo (es :: [Type]) = DescriptorSetAllocateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @descriptorPool@ is the pool which the sets will be allocated from.
-    descriptorPool :: DescriptorPool
-  , -- | @pSetLayouts@ is a pointer to an array of descriptor set layouts, with
-    -- each member specifying how the corresponding descriptor set is
-    -- allocated.
-    setLayouts :: Vector DescriptorSetLayout
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (DescriptorSetAllocateInfo es)
-
-instance Extensible DescriptorSetAllocateInfo where
-  extensibleType = STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO
-  setNext x next = x{next = next}
-  getNext DescriptorSetAllocateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DescriptorSetAllocateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DescriptorSetVariableDescriptorCountAllocateInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (DescriptorSetAllocateInfo es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorSetAllocateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorPool)) (descriptorPool)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (setLayouts)) :: Word32))
-    pPSetLayouts' <- ContT $ allocaBytesAligned @DescriptorSetLayout ((Data.Vector.length (setLayouts)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSetLayouts' `plusPtr` (8 * (i)) :: Ptr DescriptorSetLayout) (e)) (setLayouts)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr DescriptorSetLayout))) (pPSetLayouts')
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorPool)) (zero)
-    pPSetLayouts' <- ContT $ allocaBytesAligned @DescriptorSetLayout ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSetLayouts' `plusPtr` (8 * (i)) :: Ptr DescriptorSetLayout) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr DescriptorSetLayout))) (pPSetLayouts')
-    lift $ f
-
-instance PeekChain es => FromCStruct (DescriptorSetAllocateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    descriptorPool <- peek @DescriptorPool ((p `plusPtr` 16 :: Ptr DescriptorPool))
-    descriptorSetCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pSetLayouts <- peek @(Ptr DescriptorSetLayout) ((p `plusPtr` 32 :: Ptr (Ptr DescriptorSetLayout)))
-    pSetLayouts' <- generateM (fromIntegral descriptorSetCount) (\i -> peek @DescriptorSetLayout ((pSetLayouts `advancePtrBytes` (8 * (i)) :: Ptr DescriptorSetLayout)))
-    pure $ DescriptorSetAllocateInfo
-             next descriptorPool pSetLayouts'
-
-instance es ~ '[] => Zero (DescriptorSetAllocateInfo es) where
-  zero = DescriptorSetAllocateInfo
-           ()
-           zero
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core10/DescriptorSet.hs-boot b/src/Graphics/Vulkan/Core10/DescriptorSet.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/DescriptorSet.hs-boot
+++ /dev/null
@@ -1,93 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.DescriptorSet  ( CopyDescriptorSet
-                                             , DescriptorBufferInfo
-                                             , DescriptorImageInfo
-                                             , DescriptorPoolCreateInfo
-                                             , DescriptorPoolSize
-                                             , DescriptorSetAllocateInfo
-                                             , DescriptorSetLayoutBinding
-                                             , DescriptorSetLayoutCreateInfo
-                                             , WriteDescriptorSet
-                                             ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data CopyDescriptorSet
-
-instance ToCStruct CopyDescriptorSet
-instance Show CopyDescriptorSet
-
-instance FromCStruct CopyDescriptorSet
-
-
-data DescriptorBufferInfo
-
-instance ToCStruct DescriptorBufferInfo
-instance Show DescriptorBufferInfo
-
-instance FromCStruct DescriptorBufferInfo
-
-
-data DescriptorImageInfo
-
-instance ToCStruct DescriptorImageInfo
-instance Show DescriptorImageInfo
-
-instance FromCStruct DescriptorImageInfo
-
-
-type role DescriptorPoolCreateInfo nominal
-data DescriptorPoolCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (DescriptorPoolCreateInfo es)
-instance Show (Chain es) => Show (DescriptorPoolCreateInfo es)
-
-instance PeekChain es => FromCStruct (DescriptorPoolCreateInfo es)
-
-
-data DescriptorPoolSize
-
-instance ToCStruct DescriptorPoolSize
-instance Show DescriptorPoolSize
-
-instance FromCStruct DescriptorPoolSize
-
-
-type role DescriptorSetAllocateInfo nominal
-data DescriptorSetAllocateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (DescriptorSetAllocateInfo es)
-instance Show (Chain es) => Show (DescriptorSetAllocateInfo es)
-
-instance PeekChain es => FromCStruct (DescriptorSetAllocateInfo es)
-
-
-data DescriptorSetLayoutBinding
-
-instance ToCStruct DescriptorSetLayoutBinding
-instance Show DescriptorSetLayoutBinding
-
-instance FromCStruct DescriptorSetLayoutBinding
-
-
-type role DescriptorSetLayoutCreateInfo nominal
-data DescriptorSetLayoutCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (DescriptorSetLayoutCreateInfo es)
-instance Show (Chain es) => Show (DescriptorSetLayoutCreateInfo es)
-
-instance PeekChain es => FromCStruct (DescriptorSetLayoutCreateInfo es)
-
-
-type role WriteDescriptorSet nominal
-data WriteDescriptorSet (es :: [Type])
-
-instance PokeChain es => ToCStruct (WriteDescriptorSet es)
-instance Show (Chain es) => Show (WriteDescriptorSet es)
-
-instance PeekChain es => FromCStruct (WriteDescriptorSet es)
-
diff --git a/src/Graphics/Vulkan/Core10/Device.hs b/src/Graphics/Vulkan/Core10/Device.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Device.hs
+++ /dev/null
@@ -1,857 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Device  ( createDevice
-                                      , withDevice
-                                      , destroyDevice
-                                      , DeviceQueueCreateInfo(..)
-                                      , DeviceCreateInfo(..)
-                                      ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.ByteString (packCString)
-import Data.ByteString (useAsCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct.Extends (forgetExtensions)
-import Graphics.Vulkan.Dynamic (initDeviceCmds)
-import Graphics.Vulkan.CStruct.Extends (peekSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (pokeSomeCStruct)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Core10.Handles (Device(Device))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyDevice))
-import Graphics.Vulkan.Core10.Enums.DeviceCreateFlags (DeviceCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config (DeviceDiagnosticsConfigCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (DeviceGroupDeviceCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_memory_overallocation_behavior (DeviceMemoryOverallocationCreateInfoAMD)
-import Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_global_priority (DeviceQueueGlobalPriorityCreateInfoEXT)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateDevice))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage (PhysicalDevice16BitStorageFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage (PhysicalDevice8BitStorageFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode (PhysicalDeviceASTCDecodeFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory (PhysicalDeviceCoherentMemoryFeaturesAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives (PhysicalDeviceComputeShaderDerivativesFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering (PhysicalDeviceConditionalRenderingFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image (PhysicalDeviceCornerSampledImageFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode (PhysicalDeviceCoverageReductionModeFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing (PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable (PhysicalDeviceDepthClipEnableFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
-import Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric (PhysicalDeviceFragmentShaderBarycentricFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock (PhysicalDeviceFragmentShaderInterlockFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (PhysicalDeviceImagelessFramebufferFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8 (PhysicalDeviceIndexTypeUint8FeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMemoryPriorityFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test (PhysicalDeviceRepresentativeFragmentTestFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2FeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_shader_clock (PhysicalDeviceShaderClockFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation (PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters (PhysicalDeviceShaderDrawParametersFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8 (PhysicalDeviceShaderFloat16Int8Features)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint (PhysicalDeviceShaderImageFootprintFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2 (PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types (PhysicalDeviceShaderSubgroupExtendedTypesFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImageFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr (PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout (PhysicalDeviceUniformBufferStandardLayoutFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers (PhysicalDeviceVariablePointersFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PhysicalDeviceVertexAttributeDivisorFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12 (PhysicalDeviceVulkan11Features)
-import {-# SOURCE #-} Graphics.Vulkan.Core12 (PhysicalDeviceVulkan12Features)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.CStruct.Extends (SomeStruct)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateDevice
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (DeviceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr (Ptr Device_T) -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (DeviceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr (Ptr Device_T) -> IO Result
-
--- | vkCreateDevice - Create a new device instance
---
--- = Parameters
---
--- -   @physicalDevice@ /must/ be one of the device handles returned from a
---     call to
---     'Graphics.Vulkan.Core10.DeviceInitialization.enumeratePhysicalDevices'
---     (see
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-physical-device-enumeration Physical Device Enumeration>).
---
--- -   @pCreateInfo@ is a pointer to a 'DeviceCreateInfo' structure
---     containing information about how to create the device.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pDevice@ is a pointer to a handle in which the created
---     'Graphics.Vulkan.Core10.Handles.Device' is returned.
---
--- = Description
---
--- 'createDevice' 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, 'createDevice' /must/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'. If
--- any requested feature is not supported, 'createDevice' /must/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_FEATURE_NOT_PRESENT'. Support
--- for extensions /can/ be checked before creating a device by querying
--- 'Graphics.Vulkan.Core10.ExtensionDiscovery.enumerateDeviceExtensionProperties'.
--- Support for features /can/ similarly be checked by querying
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFeatures'.
---
--- After verifying and enabling the extensions the
--- 'Graphics.Vulkan.Core10.Handles.Device' 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
--- 'Graphics.Vulkan.Core10.DeviceInitialization.createInstance' 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,
--- 'createDevice' will return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'.
---
--- == Valid Usage
---
--- -   All
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions-extensiondependencies required extensions>
---     for each extension in the
---     'DeviceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be
---     present in that list
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'DeviceCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pDevice@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Device' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_FEATURE_NOT_PRESENT'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device', 'DeviceCreateInfo',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-createDevice :: forall a io . (PokeChain a, MonadIO io) => PhysicalDevice -> DeviceCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Device)
-createDevice physicalDevice createInfo allocator = liftIO . evalContT $ do
-  let cmds = instanceCmds (physicalDevice :: PhysicalDevice)
-  let vkCreateDevice' = mkVkCreateDevice (pVkCreateDevice cmds)
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPDevice <- ContT $ bracket (callocBytes @(Ptr Device_T) 8) free
-  r <- lift $ vkCreateDevice' (physicalDeviceHandle (physicalDevice)) pCreateInfo pAllocator (pPDevice)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pDevice <- lift $ peek @(Ptr Device_T) pPDevice
-  pDevice' <- lift $ (\h -> Device h <$> initDeviceCmds cmds h) pDevice
-  pure $ (pDevice')
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createDevice' and 'destroyDevice'
---
--- To ensure that 'destroyDevice' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withDevice :: forall a io r . (PokeChain a, MonadIO io) => (io (Device) -> ((Device) -> io ()) -> r) -> PhysicalDevice -> DeviceCreateInfo a -> Maybe AllocationCallbacks -> r
-withDevice b physicalDevice pCreateInfo pAllocator =
-  b (createDevice physicalDevice pCreateInfo pAllocator)
-    (\(o0) -> destroyDevice o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyDevice
-  :: FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyDevice - Destroy a logical device
---
--- = Parameters
---
--- -   @device@ is the logical device to destroy.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- = Description
---
--- To ensure that no work is active on the device,
--- 'Graphics.Vulkan.Core10.Queue.deviceWaitIdle' /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
--- 'Graphics.Vulkan.Core10.Handles.Device' object. Therefore, to avoid
--- resource leaks, it is critical that an application explicitly free all
--- of these resources prior to calling 'destroyDevice'.
---
--- == Valid Usage
---
--- -   All child objects created on @device@ /must/ have been destroyed
---     prior to destroying @device@
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @device@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @device@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   If @device@ is not @NULL@, @device@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Device' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- == Host Synchronization
---
--- -   Host access to @device@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-destroyDevice :: forall io . MonadIO io => Device -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyDevice device allocator = liftIO . evalContT $ do
-  let vkDestroyDevice' = mkVkDestroyDevice (pVkDestroyDevice (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyDevice' (deviceHandle (device)) pAllocator
-  pure $ ()
-
-
--- | VkDeviceQueueCreateInfo - Structure specifying parameters of a newly
--- created device queue
---
--- == Valid Usage
---
--- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
---     returned by
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
---
--- -   @queueCount@ /must/ be less than or equal to the @queueCount@ member
---     of the
---     'Graphics.Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
---     structure, as returned by
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
---     in the @pQueueFamilyProperties@[queueFamilyIndex]
---
--- -   Each element of @pQueuePriorities@ /must/ be between @0.0@ and @1.0@
---     inclusive
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-protectedMemory protected memory>
---     feature is not enabled, the
---     'Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DEVICE_QUEUE_CREATE_PROTECTED_BIT'
---     bit of @flags@ /must/ not be set
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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.DeviceQueueGlobalPriorityCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlagBits'
---     values
---
--- -   @pQueuePriorities@ /must/ be a valid pointer to an array of
---     @queueCount@ @float@ values
---
--- -   @queueCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'DeviceCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceQueueCreateInfo (es :: [Type]) = DeviceQueueCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask indicating behavior of the queue.
-    flags :: DeviceQueueCreateFlags
-  , -- | @queueFamilyIndex@ is an unsigned integer indicating the index of the
-    -- queue family to create on this device. This index corresponds to the
-    -- index of an element of the @pQueueFamilyProperties@ array that was
-    -- returned by
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'.
-    queueFamilyIndex :: Word32
-  , -- | @pQueuePriorities@ is a pointer to an array of @queueCount@ normalized
-    -- floating point values, specifying priorities of work that will be
-    -- submitted to each created queue. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-priority Queue Priority>
-    -- for more information.
-    queuePriorities :: Vector Float
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (DeviceQueueCreateInfo es)
-
-instance Extensible DeviceQueueCreateInfo where
-  extensibleType = STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext DeviceQueueCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceQueueCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DeviceQueueGlobalPriorityCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (DeviceQueueCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceQueueCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceQueueCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (queueFamilyIndex)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queuePriorities)) :: Word32))
-    pPQueuePriorities' <- ContT $ allocaBytesAligned @CFloat ((Data.Vector.length (queuePriorities)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueuePriorities' `plusPtr` (4 * (i)) :: Ptr CFloat) (CFloat (e))) (queuePriorities)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CFloat))) (pPQueuePriorities')
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    pPQueuePriorities' <- ContT $ allocaBytesAligned @CFloat ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueuePriorities' `plusPtr` (4 * (i)) :: Ptr CFloat) (CFloat (e))) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CFloat))) (pPQueuePriorities')
-    lift $ f
-
-instance PeekChain es => FromCStruct (DeviceQueueCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @DeviceQueueCreateFlags ((p `plusPtr` 16 :: Ptr DeviceQueueCreateFlags))
-    queueFamilyIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    queueCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pQueuePriorities <- peek @(Ptr CFloat) ((p `plusPtr` 32 :: Ptr (Ptr CFloat)))
-    pQueuePriorities' <- generateM (fromIntegral queueCount) (\i -> do
-      pQueuePrioritiesElem <- peek @CFloat ((pQueuePriorities `advancePtrBytes` (4 * (i)) :: Ptr CFloat))
-      pure $ (\(CFloat a) -> a) pQueuePrioritiesElem)
-    pure $ DeviceQueueCreateInfo
-             next flags queueFamilyIndex pQueuePriorities'
-
-instance es ~ '[] => Zero (DeviceQueueCreateInfo es) where
-  zero = DeviceQueueCreateInfo
-           ()
-           zero
-           zero
-           mempty
-
-
--- | VkDeviceCreateInfo - Structure specifying parameters of a newly created
--- device
---
--- == Valid Usage
---
--- -   The @queueFamilyIndex@ member of each element of @pQueueCreateInfos@
---     /must/ be unique within @pQueueCreateInfos@, except that two members
---     can share the same @queueFamilyIndex@ if one is a protected-capable
---     queue and one is not a protected-capable queue
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
---     structure, then @pEnabledFeatures@ /must/ be @NULL@
---
--- -   @ppEnabledExtensionNames@ /must/ not contain
---     @VK_AMD_negative_viewport_height@
---
--- -   @ppEnabledExtensionNames@ /must/ not contain both
---     @VK_KHR_buffer_device_address@ and @VK_EXT_buffer_device_address@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan11Features' structure,
---     then it /must/ not include a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers.PhysicalDeviceVariablePointersFeatures',
---     'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures'
---     structure
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features' structure,
---     then it /must/ not include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8.PhysicalDeviceShaderFloat16Int8Features',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.PhysicalDeviceImagelessFramebufferFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout.PhysicalDeviceUniformBufferStandardLayoutFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types.PhysicalDeviceShaderSubgroupExtendedTypesFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures',
---     or
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures'
---     structure
---
--- -   If @ppEnabledExtensions@ contains @\"VK_KHR_draw_indirect_count\"@
---     and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features' structure,
---     then
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features'::@drawIndirectCount@
---     /must/ be 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If @ppEnabledExtensions@ contains
---     @\"VK_KHR_sampler_mirror_clamp_to_edge\"@ and the @pNext@ chain
---     includes a 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features'
---     structure, then
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features'::@samplerMirrorClampToEdge@
---     /must/ be 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If @ppEnabledExtensions@ contains @\"VK_EXT_descriptor_indexing\"@
---     and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features' structure,
---     then
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features'::@descriptorIndexing@
---     /must/ be 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If @ppEnabledExtensions@ contains @\"VK_EXT_sampler_filter_minmax\"@
---     and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features' structure,
---     then
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features'::@samplerFilterMinmax@
---     /must/ be 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If @ppEnabledExtensions@ contains
---     @\"VK_EXT_shader_viewport_index_layer\"@ and the @pNext@ chain
---     includes a 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features'
---     structure, then
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features'::@shaderOutputViewportIndex@
---     and
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features'::@shaderOutputLayer@
---     /must/ both be 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config.DeviceDiagnosticsConfigCreateInfoNV',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo',
---     'Graphics.Vulkan.Extensions.VK_AMD_memory_overallocation_behavior.DeviceMemoryOverallocationCreateInfoAMD',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures',
---     'Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode.PhysicalDeviceASTCDecodeFeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedFeaturesEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures',
---     'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory.PhysicalDeviceCoherentMemoryFeaturesAMD',
---     'Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives.PhysicalDeviceComputeShaderDerivativesFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.PhysicalDeviceConditionalRenderingFeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image.PhysicalDeviceCornerSampledImageFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.PhysicalDeviceCoverageReductionModeFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing.PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable.PhysicalDeviceDepthClipEnableFeaturesEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
---     'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
---     'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapFeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric.PhysicalDeviceFragmentShaderBarycentricFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock.PhysicalDeviceFragmentShaderInterlockFeaturesEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.PhysicalDeviceImagelessFramebufferFeatures',
---     'Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8.PhysicalDeviceIndexTypeUint8FeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryFeaturesKHR',
---     'Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
---     'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingFeaturesKHR',
---     'Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2FeaturesEXT',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
---     'Graphics.Vulkan.Extensions.VK_KHR_shader_clock.PhysicalDeviceShaderClockFeaturesKHR',
---     'Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation.PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8.PhysicalDeviceShaderFloat16Int8Features',
---     'Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint.PhysicalDeviceShaderImageFootprintFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2.PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL',
---     'Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsFeaturesNV',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types.PhysicalDeviceShaderSubgroupExtendedTypesFeatures',
---     'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImageFeaturesNV',
---     'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreFeatures',
---     'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout.PhysicalDeviceUniformBufferStandardLayoutFeatures',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers.PhysicalDeviceVariablePointersFeatures',
---     'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PhysicalDeviceVertexAttributeDivisorFeaturesEXT',
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan11Features',
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures',
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be @0@
---
--- -   @pQueueCreateInfos@ /must/ be a valid pointer to an array of
---     @queueCreateInfoCount@ valid 'DeviceQueueCreateInfo' 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
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures'
---     structure
---
--- -   @queueCreateInfoCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.DeviceCreateFlags.DeviceCreateFlags',
--- 'DeviceQueueCreateInfo',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createDevice'
-data DeviceCreateInfo (es :: [Type]) = DeviceCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: DeviceCreateFlags
-  , -- | @pQueueCreateInfos@ is a pointer to an array of 'DeviceQueueCreateInfo'
-    -- structures describing the queues that are requested to be created along
-    -- with the logical device. Refer to the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-queue-creation Queue Creation>
-    -- section below for further details.
-    queueCreateInfos :: Vector (SomeStruct DeviceQueueCreateInfo)
-  , -- | @ppEnabledLayerNames@ is deprecated and ignored. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation>.
-    enabledLayerNames :: Vector ByteString
-  , -- | @ppEnabledExtensionNames@ is a pointer to an array of
-    -- @enabledExtensionCount@ null-terminated UTF-8 strings containing the
-    -- names of extensions to enable for the created device. See the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions>
-    -- section for further details.
-    enabledExtensionNames :: Vector ByteString
-  , -- | @pEnabledFeatures@ is @NULL@ or a pointer to a
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures'
-    -- structure containing boolean indicators of all the features to be
-    -- enabled. Refer to the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features Features>
-    -- section for further details.
-    enabledFeatures :: Maybe PhysicalDeviceFeatures
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (DeviceCreateInfo es)
-
-instance Extensible DeviceCreateInfo where
-  extensibleType = STRUCTURE_TYPE_DEVICE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext DeviceCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PhysicalDeviceRobustness2FeaturesEXT = Just f
-    | Just Refl <- eqT @e @DeviceDiagnosticsConfigCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDiagnosticsConfigFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceCoherentMemoryFeaturesAMD = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVulkan12Features = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVulkan11Features = Just f
-    | Just Refl <- eqT @e @PhysicalDevicePipelineCreationCacheControlFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceLineRasterizationFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceSubgroupSizeControlFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTexelBufferAlignmentFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceSeparateDepthStencilLayoutsFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceFragmentShaderInterlockFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderSMBuiltinsFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceIndexTypeUint8FeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderClockFeaturesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceCoverageReductionModeFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDevicePerformanceQueryFeaturesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceYcbcrImageArraysFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceCooperativeMatrixFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceImagelessFramebufferFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceBufferDeviceAddressFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceBufferDeviceAddressFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceMemoryPriorityFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDepthClipEnableFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceUniformBufferStandardLayoutFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceScalarBlockLayoutFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceFragmentDensityMapFeaturesEXT = Just f
-    | Just Refl <- eqT @e @DeviceMemoryOverallocationCreateInfoAMD = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceRayTracingFeaturesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceMeshShaderFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShadingRateImageFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderImageFootprintFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceFragmentShaderBarycentricFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceComputeShaderDerivativesFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceCornerSampledImageFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceExclusiveScissorFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceRepresentativeFragmentTestFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTransformFeedbackFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceASTCDecodeFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVertexAttributeDivisorFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderAtomicInt64Features = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVulkanMemoryModelFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceConditionalRenderingFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDevice8BitStorageFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTimelineSemaphoreFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDescriptorIndexingFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceHostQueryResetFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderFloat16Int8Features = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderDrawParametersFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceInlineUniformBlockFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceBlendOperationAdvancedFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceProtectedMemoryFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderSubgroupExtendedTypesFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDevice16BitStorageFeatures = Just f
-    | Just Refl <- eqT @e @DeviceGroupDeviceCreateInfo = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceMultiviewFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVariablePointersFeatures = Just f
-    | Just Refl <- eqT @e @(PhysicalDeviceFeatures2 '[]) = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (DeviceCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueCreateInfos)) :: Word32))
-    pPQueueCreateInfos' <- ContT $ allocaBytesAligned @(DeviceQueueCreateInfo _) ((Data.Vector.length (queueCreateInfos)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPQueueCreateInfos' `plusPtr` (40 * (i)) :: Ptr (DeviceQueueCreateInfo _))) (e) . ($ ())) (queueCreateInfos)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (DeviceQueueCreateInfo _)))) (pPQueueCreateInfos')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledLayerNames)) :: Word32))
-    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledLayerNames)) * 8) 8
-    Data.Vector.imapM_ (\i e -> do
-      ppEnabledLayerNames'' <- ContT $ useAsCString (e)
-      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (enabledLayerNames)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledExtensionNames)) :: Word32))
-    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledExtensionNames)) * 8) 8
-    Data.Vector.imapM_ (\i e -> do
-      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)
-      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (enabledExtensionNames)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')
-    pEnabledFeatures'' <- case (enabledFeatures) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr PhysicalDeviceFeatures))) pEnabledFeatures''
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPQueueCreateInfos' <- ContT $ allocaBytesAligned @(DeviceQueueCreateInfo _) ((Data.Vector.length (mempty)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPQueueCreateInfos' `plusPtr` (40 * (i)) :: Ptr (DeviceQueueCreateInfo _))) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (DeviceQueueCreateInfo _)))) (pPQueueCreateInfos')
-    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8
-    Data.Vector.imapM_ (\i e -> do
-      ppEnabledLayerNames'' <- ContT $ useAsCString (e)
-      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')
-    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8
-    Data.Vector.imapM_ (\i e -> do
-      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)
-      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')
-    lift $ f
-
-instance PeekChain es => FromCStruct (DeviceCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @DeviceCreateFlags ((p `plusPtr` 16 :: Ptr DeviceCreateFlags))
-    queueCreateInfoCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pQueueCreateInfos <- peek @(Ptr (DeviceQueueCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (DeviceQueueCreateInfo a))))
-    pQueueCreateInfos' <- generateM (fromIntegral queueCreateInfoCount) (\i -> peekSomeCStruct (forgetExtensions ((pQueueCreateInfos `advancePtrBytes` (40 * (i)) :: Ptr (DeviceQueueCreateInfo _)))))
-    enabledLayerCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    ppEnabledLayerNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar))))
-    ppEnabledLayerNames' <- generateM (fromIntegral enabledLayerCount) (\i -> packCString =<< peek ((ppEnabledLayerNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))
-    enabledExtensionCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    ppEnabledExtensionNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar))))
-    ppEnabledExtensionNames' <- generateM (fromIntegral enabledExtensionCount) (\i -> packCString =<< peek ((ppEnabledExtensionNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))
-    pEnabledFeatures <- peek @(Ptr PhysicalDeviceFeatures) ((p `plusPtr` 64 :: Ptr (Ptr PhysicalDeviceFeatures)))
-    pEnabledFeatures' <- maybePeek (\j -> peekCStruct @PhysicalDeviceFeatures (j)) pEnabledFeatures
-    pure $ DeviceCreateInfo
-             next flags pQueueCreateInfos' ppEnabledLayerNames' ppEnabledExtensionNames' pEnabledFeatures'
-
-instance es ~ '[] => Zero (DeviceCreateInfo es) where
-  zero = DeviceCreateInfo
-           ()
-           zero
-           mempty
-           mempty
-           mempty
-           Nothing
-
diff --git a/src/Graphics/Vulkan/Core10/Device.hs-boot b/src/Graphics/Vulkan/Core10/Device.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Device.hs-boot
+++ /dev/null
@@ -1,28 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Device  ( DeviceCreateInfo
-                                      , DeviceQueueCreateInfo
-                                      ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role DeviceCreateInfo nominal
-data DeviceCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (DeviceCreateInfo es)
-instance Show (Chain es) => Show (DeviceCreateInfo es)
-
-instance PeekChain es => FromCStruct (DeviceCreateInfo es)
-
-
-type role DeviceQueueCreateInfo nominal
-data DeviceQueueCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (DeviceQueueCreateInfo es)
-instance Show (Chain es) => Show (DeviceQueueCreateInfo es)
-
-instance PeekChain es => FromCStruct (DeviceQueueCreateInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/DeviceInitialization.hs b/src/Graphics/Vulkan/Core10/DeviceInitialization.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/DeviceInitialization.hs
+++ /dev/null
@@ -1,4694 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.DeviceInitialization  ( createInstance
-                                                    , withInstance
-                                                    , destroyInstance
-                                                    , enumeratePhysicalDevices
-                                                    , getDeviceProcAddr
-                                                    , getInstanceProcAddr
-                                                    , getPhysicalDeviceProperties
-                                                    , getPhysicalDeviceQueueFamilyProperties
-                                                    , getPhysicalDeviceMemoryProperties
-                                                    , getPhysicalDeviceFeatures
-                                                    , getPhysicalDeviceFormatProperties
-                                                    , getPhysicalDeviceImageFormatProperties
-                                                    , PhysicalDeviceProperties(..)
-                                                    , ApplicationInfo(..)
-                                                    , InstanceCreateInfo(..)
-                                                    , QueueFamilyProperties(..)
-                                                    , PhysicalDeviceMemoryProperties(..)
-                                                    , MemoryType(..)
-                                                    , MemoryHeap(..)
-                                                    , FormatProperties(..)
-                                                    , ImageFormatProperties(..)
-                                                    , PhysicalDeviceFeatures(..)
-                                                    , PhysicalDeviceSparseProperties(..)
-                                                    , PhysicalDeviceLimits(..)
-                                                    ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (castFunPtr)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.ByteString (packCString)
-import Data.ByteString (useAsCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Foreign.C.Types (CChar(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Ptr (Ptr(Ptr))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Word (Word8)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Dynamic (getInstanceProcAddr')
-import Graphics.Vulkan.Dynamic (initInstanceCmds)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct.Utils (peekByteStringFromSizedVectorPtr)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthByteString)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportCallbackCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessengerCreateInfoEXT)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeviceProcAddr))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.SharedTypes (Extent3D)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.Core10.Enums.Format (Format(..))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageTiling (ImageTiling)
-import Graphics.Vulkan.Core10.Enums.ImageTiling (ImageTiling(..))
-import Graphics.Vulkan.Core10.Enums.ImageType (ImageType)
-import Graphics.Vulkan.Core10.Enums.ImageType (ImageType(..))
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Core10.Handles (Instance(Instance))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkDestroyInstance))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkEnumeratePhysicalDevices))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetInstanceProcAddr))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceFeatures))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceFormatProperties))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceImageFormatProperties))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceMemoryProperties))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceProperties))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceQueueFamilyProperties))
-import Graphics.Vulkan.Core10.Enums.InstanceCreateFlags (InstanceCreateFlags)
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.APIConstants (MAX_MEMORY_HEAPS)
-import Graphics.Vulkan.Core10.APIConstants (MAX_MEMORY_TYPES)
-import Graphics.Vulkan.Core10.APIConstants (MAX_PHYSICAL_DEVICE_NAME_SIZE)
-import Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlags)
-import Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits (MemoryPropertyFlags)
-import Graphics.Vulkan.Core10.FuncPointers (PFN_vkVoidFunction)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(PhysicalDevice))
-import Graphics.Vulkan.Core10.Enums.PhysicalDeviceType (PhysicalDeviceType)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.QueueFlagBits (QueueFlags)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Core10.APIConstants (UUID_SIZE)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_validation_features (ValidationFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_validation_flags (ValidationFlagsEXT)
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_MEMORY_HEAPS)
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_MEMORY_TYPES)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_APPLICATION_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INSTANCE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateInstance
-  :: FunPtr (Ptr (InstanceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr (Ptr Instance_T) -> IO Result) -> Ptr (InstanceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr (Ptr Instance_T) -> IO Result
-
--- | vkCreateInstance - Create a new Vulkan instance
---
--- = Parameters
---
--- -   @pCreateInfo@ is a pointer to a 'InstanceCreateInfo' structure
---     controlling creation of the instance.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pInstance@ points a 'Graphics.Vulkan.Core10.Handles.Instance'
---     handle in which the resulting instance is returned.
---
--- = Description
---
--- 'createInstance' verifies that the requested layers exist. If not,
--- 'createInstance' will return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_LAYER_NOT_PRESENT'. Next
--- 'createInstance' 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, 'createInstance' /must/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'. After
--- verifying and enabling the instance layers and extensions the
--- 'Graphics.Vulkan.Core10.Handles.Instance' 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
--- 'createInstance' time for the creation to succeed.
---
--- == Valid Usage
---
--- -   All
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions-extensiondependencies required extensions>
---     for each extension in the
---     'InstanceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be
---     present in that list
---
--- == Valid Usage (Implicit)
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'InstanceCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pInstance@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_LAYER_NOT_PRESENT'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance', 'InstanceCreateInfo'
-createInstance :: forall a io . (PokeChain a, MonadIO io) => InstanceCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Instance)
-createInstance createInfo allocator = liftIO . evalContT $ do
-  vkCreateInstance' <- lift $ mkVkCreateInstance . castFunPtr @_ @(("pCreateInfo" ::: Ptr (InstanceCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pInstance" ::: Ptr (Ptr Instance_T)) -> IO Result) <$> getInstanceProcAddr' nullPtr (Ptr "vkCreateInstance"#)
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPInstance <- ContT $ bracket (callocBytes @(Ptr Instance_T) 8) free
-  r <- lift $ vkCreateInstance' pCreateInfo pAllocator (pPInstance)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pInstance <- lift $ peek @(Ptr Instance_T) pPInstance
-  pInstance' <- lift $ (\h -> Instance h <$> initInstanceCmds h) pInstance
-  pure $ (pInstance')
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createInstance' and 'destroyInstance'
---
--- To ensure that 'destroyInstance' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withInstance :: forall a io r . (PokeChain a, MonadIO io) => (io (Instance) -> ((Instance) -> io ()) -> r) -> InstanceCreateInfo a -> Maybe AllocationCallbacks -> r
-withInstance b pCreateInfo pAllocator =
-  b (createInstance pCreateInfo pAllocator)
-    (\(o0) -> destroyInstance o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyInstance
-  :: FunPtr (Ptr Instance_T -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyInstance - Destroy an instance of Vulkan
---
--- = Parameters
---
--- -   @instance@ is the handle of the instance to destroy.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All child objects created using @instance@ /must/ have been
---     destroyed prior to destroying @instance@
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @instance@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @instance@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   If @instance@ is not @NULL@, @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- == Host Synchronization
---
--- -   Host access to @instance@ /must/ be externally synchronized
---
--- -   Host access to all 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
---     objects enumerated from @instance@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance'
-destroyInstance :: forall io . MonadIO io => Instance -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyInstance instance' allocator = liftIO . evalContT $ do
-  let vkDestroyInstance' = mkVkDestroyInstance (pVkDestroyInstance (instanceCmds (instance' :: Instance)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyInstance' (instanceHandle (instance')) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkEnumeratePhysicalDevices
-  :: FunPtr (Ptr Instance_T -> Ptr Word32 -> Ptr (Ptr PhysicalDevice_T) -> IO Result) -> Ptr Instance_T -> Ptr Word32 -> Ptr (Ptr PhysicalDevice_T) -> IO Result
-
--- | vkEnumeratePhysicalDevices - Enumerates the physical devices accessible
--- to a Vulkan instance
---
--- = Parameters
---
--- -   @instance@ is a handle to a Vulkan instance previously created with
---     'createInstance'.
---
--- -   @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
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handles.
---
--- = Description
---
--- If @pPhysicalDevices@ is @NULL@, then the number of physical devices
--- available is returned in @pPhysicalDeviceCount@. Otherwise,
--- @pPhysicalDeviceCount@ /must/ point to a variable set by the user to the
--- number of elements in the @pPhysicalDevices@ array, and on return the
--- variable is overwritten with the number of handles actually written to
--- @pPhysicalDevices@. If @pPhysicalDeviceCount@ is less than the number of
--- physical devices available, at most @pPhysicalDeviceCount@ structures
--- will be written. If @pPhysicalDeviceCount@ is smaller than the number of
--- physical devices available,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS', to indicate
--- that not all the available physical devices were returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pPhysicalDeviceCount@ /must/ be a valid pointer to a @uint32_t@
---     value
---
--- -   If the value referenced by @pPhysicalDeviceCount@ is not @0@, and
---     @pPhysicalDevices@ is not @NULL@, @pPhysicalDevices@ /must/ be a
---     valid pointer to an array of @pPhysicalDeviceCount@
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handles
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-enumeratePhysicalDevices :: forall io . MonadIO io => Instance -> io (Result, ("physicalDevices" ::: Vector PhysicalDevice))
-enumeratePhysicalDevices instance' = liftIO . evalContT $ do
-  let cmds = instanceCmds (instance' :: Instance)
-  let vkEnumeratePhysicalDevices' = mkVkEnumeratePhysicalDevices (pVkEnumeratePhysicalDevices cmds)
-  let instance'' = instanceHandle (instance')
-  pPPhysicalDeviceCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkEnumeratePhysicalDevices' instance'' (pPPhysicalDeviceCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPhysicalDeviceCount <- lift $ peek @Word32 pPPhysicalDeviceCount
-  pPPhysicalDevices <- ContT $ bracket (callocBytes @(Ptr PhysicalDevice_T) ((fromIntegral (pPhysicalDeviceCount)) * 8)) free
-  r' <- lift $ vkEnumeratePhysicalDevices' instance'' (pPPhysicalDeviceCount) (pPPhysicalDevices)
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPhysicalDeviceCount' <- lift $ peek @Word32 pPPhysicalDeviceCount
-  pPhysicalDevices' <- lift $ generateM (fromIntegral (pPhysicalDeviceCount')) (\i -> do
-    pPhysicalDevicesElem <- peek @(Ptr PhysicalDevice_T) ((pPPhysicalDevices `advancePtrBytes` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)))
-    pure $ (\h -> PhysicalDevice h cmds ) pPhysicalDevicesElem)
-  pure $ ((r'), pPhysicalDevices')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceProcAddr
-  :: FunPtr (Ptr Device_T -> Ptr CChar -> IO PFN_vkVoidFunction) -> Ptr Device_T -> Ptr CChar -> IO PFN_vkVoidFunction
-
--- | vkGetDeviceProcAddr - Return a function pointer for a command
---
--- = Parameters
---
--- The table below defines the various use cases for 'getDeviceProcAddr'
--- and expected return value for each case.
---
--- = Description
---
--- The returned function pointer is of type
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkVoidFunction', and /must/ be
--- cast to the type of the command being queried before use. The function
--- pointer /must/ only be called with a dispatchable object (the first
--- parameter) that is @device@ or a child of @device@.
---
--- +----------------------+----------------------+-----------------------+
--- | @device@             | @pName@              | return value          |
--- +======================+======================+=======================+
--- | @NULL@               | *1                   | undefined             |
--- +----------------------+----------------------+-----------------------+
--- | invalid device       | *1                   | undefined             |
--- +----------------------+----------------------+-----------------------+
--- | device               | @NULL@               | undefined             |
--- +----------------------+----------------------+-----------------------+
--- | device               | core device-level    | fp2                   |
--- |                      | Vulkan command       |                       |
--- +----------------------+----------------------+-----------------------+
--- | device               | enabled extension    | fp2                   |
--- |                      | device-level         |                       |
--- |                      | commands             |                       |
--- +----------------------+----------------------+-----------------------+
--- | any other case, not  | @NULL@               |                       |
--- | covered above        |                      |                       |
--- +----------------------+----------------------+-----------------------+
---
--- 'getDeviceProcAddr' behavior
---
--- [1]
---     \"*\" means any representable value for the parameter (including
---     valid values, invalid values, and @NULL@).
---
--- [2]
---     The returned function pointer /must/ only be called with a
---     dispatchable object (the first parameter) that is @device@ or a
---     child of @device@ e.g. 'Graphics.Vulkan.Core10.Handles.Device',
---     'Graphics.Vulkan.Core10.Handles.Queue', or
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkVoidFunction',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-getDeviceProcAddr :: forall io . MonadIO io => Device -> ("name" ::: ByteString) -> io (PFN_vkVoidFunction)
-getDeviceProcAddr device name = liftIO . evalContT $ do
-  let vkGetDeviceProcAddr' = mkVkGetDeviceProcAddr (pVkGetDeviceProcAddr (deviceCmds (device :: Device)))
-  pName <- ContT $ useAsCString (name)
-  r <- lift $ vkGetDeviceProcAddr' (deviceHandle (device)) pName
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetInstanceProcAddr
-  :: FunPtr (Ptr Instance_T -> Ptr CChar -> IO PFN_vkVoidFunction) -> Ptr Instance_T -> Ptr CChar -> IO PFN_vkVoidFunction
-
--- | vkGetInstanceProcAddr - Return a function pointer for a command
---
--- = 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
---
--- 'getInstanceProcAddr' itself is obtained in a platform- and loader-
--- specific manner. Typically, the loader library will export this command
--- as a function symbol, so applications /can/ link against the loader
--- library, or load it dynamically and look up the symbol using
--- platform-specific APIs.
---
--- The table below defines the various use cases for 'getInstanceProcAddr'
--- and expected return value (“fp” is “function pointer”) for each case.
---
--- The returned function pointer is of type
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkVoidFunction', and /must/ be
--- cast to the type of the command being queried before use.
---
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
--- | @instance@           | @pName@                                                                          | return value          |
--- +======================+==================================================================================+=======================+
--- | *1                   | @NULL@                                                                           | undefined             |
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
--- | invalid non-@NULL@   | *1                                                                               | undefined             |
--- | instance             |                                                                                  |                       |
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
--- | @NULL@               | 'Graphics.Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion'           | fp                    |
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
--- | @NULL@               | 'Graphics.Vulkan.Core10.ExtensionDiscovery.enumerateInstanceExtensionProperties' | fp                    |
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
--- | @NULL@               | 'Graphics.Vulkan.Core10.LayerDiscovery.enumerateInstanceLayerProperties'         | fp                    |
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
--- | @NULL@               | 'createInstance'                                                                 | fp                    |
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
--- | instance             | core Vulkan command                                                              | fp2                   |
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
--- | instance             | enabled instance extension commands for @instance@                               | fp2                   |
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
--- | instance             | available device extension3 commands for @instance@                              | fp2                   |
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
--- | any other case, not  | @NULL@                                                                           |                       |
--- | covered above        |                                                                                  |                       |
--- +----------------------+----------------------------------------------------------------------------------+-----------------------+
---
--- 'getInstanceProcAddr' behavior
---
--- [1]
---     \"*\" means any representable value for the parameter (including
---     valid values, invalid values, and @NULL@).
---
--- [2]
---     The returned function pointer /must/ only be called with a
---     dispatchable object (the first parameter) that is @instance@ or a
---     child of @instance@, e.g. 'Graphics.Vulkan.Core10.Handles.Instance',
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
---     'Graphics.Vulkan.Core10.Handles.Device',
---     'Graphics.Vulkan.Core10.Handles.Queue', or
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer'.
---
--- [3]
---     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
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pName@ /must/ be a null-terminated UTF-8 string
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkVoidFunction',
--- 'Graphics.Vulkan.Core10.Handles.Instance'
-getInstanceProcAddr :: forall io . MonadIO io => Instance -> ("name" ::: ByteString) -> io (PFN_vkVoidFunction)
-getInstanceProcAddr instance' name = liftIO . evalContT $ do
-  let vkGetInstanceProcAddr' = mkVkGetInstanceProcAddr (pVkGetInstanceProcAddr (instanceCmds (instance' :: Instance)))
-  pName <- ContT $ useAsCString (name)
-  r <- lift $ vkGetInstanceProcAddr' (instanceHandle (instance')) pName
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceProperties -> IO ()
-
--- | vkGetPhysicalDeviceProperties - Returns properties of a physical device
---
--- = Parameters
---
--- -   @physicalDevice@ is the handle to the physical device whose
---     properties will be queried.
---
--- -   @pProperties@ is a pointer to a 'PhysicalDeviceProperties' structure
---     in which properties are returned.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceProperties'
-getPhysicalDeviceProperties :: forall io . MonadIO io => PhysicalDevice -> io (PhysicalDeviceProperties)
-getPhysicalDeviceProperties physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceProperties' = mkVkGetPhysicalDeviceProperties (pVkGetPhysicalDeviceProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPProperties <- ContT (withZeroCStruct @PhysicalDeviceProperties)
-  lift $ vkGetPhysicalDeviceProperties' (physicalDeviceHandle (physicalDevice)) (pPProperties)
-  pProperties <- lift $ peekCStruct @PhysicalDeviceProperties pPProperties
-  pure $ (pProperties)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceQueueFamilyProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr QueueFamilyProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr QueueFamilyProperties -> IO ()
-
--- | vkGetPhysicalDeviceQueueFamilyProperties - Reports properties of the
--- queues of the specified physical device
---
--- = 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 'QueueFamilyProperties' structures.
---
--- = Description
---
--- If @pQueueFamilyProperties@ is @NULL@, then the number of queue families
--- available is returned in @pQueueFamilyPropertyCount@. Implementations
--- /must/ support at least one queue family. Otherwise,
--- @pQueueFamilyPropertyCount@ /must/ point to a variable set by the user
--- to the number of elements in the @pQueueFamilyProperties@ array, and on
--- return the variable is overwritten with the number of structures
--- actually written to @pQueueFamilyProperties@. If
--- @pQueueFamilyPropertyCount@ is less than the number of queue families
--- available, at most @pQueueFamilyPropertyCount@ structures will be
--- written.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a
---     @uint32_t@ value
---
--- -   If the value referenced by @pQueueFamilyPropertyCount@ is not @0@,
---     and @pQueueFamilyProperties@ is not @NULL@, @pQueueFamilyProperties@
---     /must/ be a valid pointer to an array of @pQueueFamilyPropertyCount@
---     'QueueFamilyProperties' structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice', 'QueueFamilyProperties'
-getPhysicalDeviceQueueFamilyProperties :: forall io . MonadIO io => PhysicalDevice -> io (("queueFamilyProperties" ::: Vector QueueFamilyProperties))
-getPhysicalDeviceQueueFamilyProperties physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceQueueFamilyProperties' = mkVkGetPhysicalDeviceQueueFamilyProperties (pVkGetPhysicalDeviceQueueFamilyProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPQueueFamilyPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  lift $ vkGetPhysicalDeviceQueueFamilyProperties' physicalDevice' (pPQueueFamilyPropertyCount) (nullPtr)
-  pQueueFamilyPropertyCount <- lift $ peek @Word32 pPQueueFamilyPropertyCount
-  pPQueueFamilyProperties <- ContT $ bracket (callocBytes @QueueFamilyProperties ((fromIntegral (pQueueFamilyPropertyCount)) * 24)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPQueueFamilyProperties `advancePtrBytes` (i * 24) :: Ptr QueueFamilyProperties) . ($ ())) [0..(fromIntegral (pQueueFamilyPropertyCount)) - 1]
-  lift $ vkGetPhysicalDeviceQueueFamilyProperties' physicalDevice' (pPQueueFamilyPropertyCount) ((pPQueueFamilyProperties))
-  pQueueFamilyPropertyCount' <- lift $ peek @Word32 pPQueueFamilyPropertyCount
-  pQueueFamilyProperties' <- lift $ generateM (fromIntegral (pQueueFamilyPropertyCount')) (\i -> peekCStruct @QueueFamilyProperties (((pPQueueFamilyProperties) `advancePtrBytes` (24 * (i)) :: Ptr QueueFamilyProperties)))
-  pure $ (pQueueFamilyProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceMemoryProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceMemoryProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceMemoryProperties -> IO ()
-
--- | vkGetPhysicalDeviceMemoryProperties - Reports memory information for the
--- specified physical device
---
--- = Parameters
---
--- -   @physicalDevice@ is the handle to the device to query.
---
--- -   @pMemoryProperties@ is a pointer to a
---     'PhysicalDeviceMemoryProperties' structure in which the properties
---     are returned.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceMemoryProperties'
-getPhysicalDeviceMemoryProperties :: forall io . MonadIO io => PhysicalDevice -> io (PhysicalDeviceMemoryProperties)
-getPhysicalDeviceMemoryProperties physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceMemoryProperties' = mkVkGetPhysicalDeviceMemoryProperties (pVkGetPhysicalDeviceMemoryProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPMemoryProperties <- ContT (withZeroCStruct @PhysicalDeviceMemoryProperties)
-  lift $ vkGetPhysicalDeviceMemoryProperties' (physicalDeviceHandle (physicalDevice)) (pPMemoryProperties)
-  pMemoryProperties <- lift $ peekCStruct @PhysicalDeviceMemoryProperties pPMemoryProperties
-  pure $ (pMemoryProperties)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceFeatures
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceFeatures -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceFeatures -> IO ()
-
--- | vkGetPhysicalDeviceFeatures - Reports capabilities of a physical device
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the
---     supported features.
---
--- -   @pFeatures@ is a pointer to a 'PhysicalDeviceFeatures' structure in
---     which the physical device features are returned. For each feature, a
---     value of 'Graphics.Vulkan.Core10.BaseType.TRUE' specifies that the
---     feature is supported on this physical device, and
---     'Graphics.Vulkan.Core10.BaseType.FALSE' specifies that the feature
---     is not supported.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceFeatures'
-getPhysicalDeviceFeatures :: forall io . MonadIO io => PhysicalDevice -> io (PhysicalDeviceFeatures)
-getPhysicalDeviceFeatures physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceFeatures' = mkVkGetPhysicalDeviceFeatures (pVkGetPhysicalDeviceFeatures (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPFeatures <- ContT (withZeroCStruct @PhysicalDeviceFeatures)
-  lift $ vkGetPhysicalDeviceFeatures' (physicalDeviceHandle (physicalDevice)) (pPFeatures)
-  pFeatures <- lift $ peekCStruct @PhysicalDeviceFeatures pPFeatures
-  pure $ (pFeatures)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceFormatProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Format -> Ptr FormatProperties -> IO ()) -> Ptr PhysicalDevice_T -> Format -> Ptr FormatProperties -> IO ()
-
--- | vkGetPhysicalDeviceFormatProperties - Lists physical device’s format
--- capabilities
---
--- = 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 'FormatProperties' structure
---     in which physical device properties for @format@ are returned.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Format.Format', 'FormatProperties',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceFormatProperties :: forall io . MonadIO io => PhysicalDevice -> Format -> io (FormatProperties)
-getPhysicalDeviceFormatProperties physicalDevice format = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceFormatProperties' = mkVkGetPhysicalDeviceFormatProperties (pVkGetPhysicalDeviceFormatProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPFormatProperties <- ContT (withZeroCStruct @FormatProperties)
-  lift $ vkGetPhysicalDeviceFormatProperties' (physicalDeviceHandle (physicalDevice)) (format) (pPFormatProperties)
-  pFormatProperties <- lift $ peekCStruct @FormatProperties pPFormatProperties
-  pure $ (pFormatProperties)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceImageFormatProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> Ptr ImageFormatProperties -> IO Result) -> Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> Ptr ImageFormatProperties -> IO Result
-
--- | vkGetPhysicalDeviceImageFormatProperties - Lists physical device’s image
--- format capabilities
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the
---     image capabilities.
---
--- -   @format@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format' value
---     specifying the image format, corresponding to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@format@.
---
--- -   @type@ is a 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType' value
---     specifying the image type, corresponding to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@imageType@.
---
--- -   @tiling@ is a 'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling'
---     value specifying the image tiling, corresponding to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@tiling@.
---
--- -   @usage@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
---     specifying the intended usage of the image, corresponding to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@usage@.
---
--- -   @flags@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits'
---     specifying additional parameters of the image, corresponding to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@.
---
--- -   @pImageFormatProperties@ is a pointer to a 'ImageFormatProperties'
---     structure in which capabilities are returned.
---
--- = Description
---
--- The @format@, @type@, @tiling@, @usage@, and @flags@ parameters
--- correspond to parameters that would be consumed by
--- 'Graphics.Vulkan.Core10.Image.createImage' (as members of
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo').
---
--- If @format@ is not a supported image format, or if the combination of
--- @format@, @type@, @tiling@, @usage@, and @flags@ is not supported for
--- images, then 'getPhysicalDeviceImageFormatProperties' returns
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'.
---
--- The limitations on an image format that are reported by
--- 'getPhysicalDeviceImageFormatProperties' have the following property: if
--- @usage1@ and @usage2@ of type
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags' are
--- such that the bits set in @usage1@ are a subset of the bits set in
--- @usage2@, and @flags1@ and @flags2@ of type
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags' are
--- such that the bits set in @flags1@ are a subset of the bits set in
--- @flags2@, then the limitations for @usage1@ and @flags1@ /must/ be no
--- more strict than the limitations for @usage2@ and @flags2@, for all
--- values of @format@, @type@, and @tiling@.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',
--- 'ImageFormatProperties',
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling',
--- 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType',
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceImageFormatProperties :: forall io . MonadIO io => PhysicalDevice -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> io (ImageFormatProperties)
-getPhysicalDeviceImageFormatProperties physicalDevice format type' tiling usage flags = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceImageFormatProperties' = mkVkGetPhysicalDeviceImageFormatProperties (pVkGetPhysicalDeviceImageFormatProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPImageFormatProperties <- ContT (withZeroCStruct @ImageFormatProperties)
-  r <- lift $ vkGetPhysicalDeviceImageFormatProperties' (physicalDeviceHandle (physicalDevice)) (format) (type') (tiling) (usage) (flags) (pPImageFormatProperties)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pImageFormatProperties <- lift $ peekCStruct @ImageFormatProperties pPImageFormatProperties
-  pure $ (pImageFormatProperties)
-
-
--- | VkPhysicalDeviceProperties - Structure specifying physical device
--- properties
---
--- = Description
---
--- Note
---
--- The value of @apiVersion@ /may/ be different than the version returned
--- by
--- 'Graphics.Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion';
--- either higher or lower. In such cases, the application /must/ not use
--- functionality that exceeds the version of Vulkan associated with a given
--- object. The @pApiVersion@ parameter returned by
--- 'Graphics.Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion'
--- is the version associated with a
--- 'Graphics.Vulkan.Core10.Handles.Instance' and its children, except for a
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice' and its children.
--- 'PhysicalDeviceProperties'::@apiVersion@ is the version associated with
--- a 'Graphics.Vulkan.Core10.Handles.PhysicalDevice' and its children.
---
--- The @vendorID@ and @deviceID@ fields are provided to allow applications
--- to adapt to device characteristics that are not adequately exposed by
--- other Vulkan queries.
---
--- Note
---
--- These /may/ include performance profiles, hardware errata, or other
--- characteristics.
---
--- The /vendor/ identified by @vendorID@ is the entity responsible for the
--- most salient characteristics of the underlying implementation of the
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice' being queried.
---
--- Note
---
--- For example, in the case of a discrete GPU implementation, this /should/
--- be the GPU chipset vendor. In the case of a hardware accelerator
--- integrated into a system-on-chip (SoC), this /should/ be the supplier of
--- the silicon IP used to create the accelerator.
---
--- If the vendor has a
--- <https://pcisig.com/membership/member-companies PCI vendor ID>, the low
--- 16 bits of @vendorID@ /must/ contain that PCI vendor ID, and the
--- remaining bits /must/ be set to zero. Otherwise, the value returned
--- /must/ be a valid Khronos vendor ID, obtained as described in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vulkan-styleguide Vulkan Documentation and Extensions: Procedures and Conventions>
--- document in the section “Registering a Vendor ID with Khronos”. Khronos
--- vendor IDs are allocated starting at 0x10000, to distinguish them from
--- the PCI vendor ID namespace. Khronos vendor IDs are symbolically defined
--- in the 'Graphics.Vulkan.Core10.Enums.VendorId.VendorId' type.
---
--- The vendor is also responsible for the value returned in @deviceID@. If
--- the implementation is driven primarily by a
--- <https://pcisig.com/ PCI device> with a
--- <https://pcisig.com/ PCI device ID>, the low 16 bits of @deviceID@
--- /must/ contain that PCI device ID, and the remaining bits /must/ be set
--- to zero. Otherwise, the choice of what values to return /may/ be
--- dictated by operating system or platform policies - but /should/
--- uniquely identify both the device version and any major configuration
--- options (for example, core count in the case of multicore devices).
---
--- Note
---
--- The same device ID /should/ be used for all physical implementations of
--- that device version and configuration. For example, all uses of a
--- specific silicon IP GPU version and configuration /should/ use the same
--- device ID, even if those uses occur in different SoCs.
---
--- = See Also
---
--- 'PhysicalDeviceLimits',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- 'PhysicalDeviceSparseProperties',
--- 'Graphics.Vulkan.Core10.Enums.PhysicalDeviceType.PhysicalDeviceType',
--- 'getPhysicalDeviceProperties'
-data PhysicalDeviceProperties = PhysicalDeviceProperties
-  { -- | @apiVersion@ is the version of Vulkan supported by the device, encoded
-    -- as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.
-    apiVersion :: Word32
-  , -- | @driverVersion@ is the vendor-specified version of the driver.
-    driverVersion :: Word32
-  , -- | @vendorID@ is a unique identifier for the /vendor/ (see below) of the
-    -- physical device.
-    vendorID :: Word32
-  , -- | @deviceID@ is a unique identifier for the physical device among devices
-    -- available from the vendor.
-    deviceID :: Word32
-  , -- | @deviceType@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.PhysicalDeviceType.PhysicalDeviceType'
-    -- specifying the type of device.
-    deviceType :: PhysicalDeviceType
-  , -- | @deviceName@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_PHYSICAL_DEVICE_NAME_SIZE'
-    -- @char@ containing a null-terminated UTF-8 string which is the name of
-    -- the device.
-    deviceName :: ByteString
-  , -- | @pipelineCacheUUID@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.UUID_SIZE' @uint8_t@ values
-    -- representing a universally unique identifier for the device.
-    pipelineCacheUUID :: ByteString
-  , -- | @limits@ is the 'PhysicalDeviceLimits' structure specifying
-    -- device-specific limits of the physical device. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits Limits>
-    -- for details.
-    limits :: PhysicalDeviceLimits
-  , -- | @sparseProperties@ is the 'PhysicalDeviceSparseProperties' structure
-    -- specifying various sparse related properties of the physical device. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-physicalprops Sparse Properties>
-    -- for details.
-    sparseProperties :: PhysicalDeviceSparseProperties
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceProperties
-
-instance ToCStruct PhysicalDeviceProperties where
-  withCStruct x f = allocaBytesAligned 824 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceProperties{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (apiVersion)
-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (driverVersion)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (vendorID)
-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (deviceID)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PhysicalDeviceType)) (deviceType)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))) (deviceName)
-    lift $ pokeFixedLengthByteString ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8))) (pipelineCacheUUID)
-    ContT $ pokeCStruct ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits)) (limits) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties)) (sparseProperties) . ($ ())
-    lift $ f
-  cStructSize = 824
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PhysicalDeviceType)) (zero)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))) (mempty)
-    lift $ pokeFixedLengthByteString ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
-    ContT $ pokeCStruct ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct PhysicalDeviceProperties where
-  peekCStruct p = do
-    apiVersion <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    driverVersion <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    vendorID <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    deviceID <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    deviceType <- peek @PhysicalDeviceType ((p `plusPtr` 16 :: Ptr PhysicalDeviceType))
-    deviceName <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))))
-    pipelineCacheUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8)))
-    limits <- peekCStruct @PhysicalDeviceLimits ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits))
-    sparseProperties <- peekCStruct @PhysicalDeviceSparseProperties ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties))
-    pure $ PhysicalDeviceProperties
-             apiVersion driverVersion vendorID deviceID deviceType deviceName pipelineCacheUUID limits sparseProperties
-
-instance Zero PhysicalDeviceProperties where
-  zero = PhysicalDeviceProperties
-           zero
-           zero
-           zero
-           zero
-           zero
-           mempty
-           mempty
-           zero
-           zero
-
-
--- | VkApplicationInfo - Structure specifying application info
---
--- = Description
---
--- Vulkan 1.0 implementations were required to return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER' if
--- @apiVersion@ was larger than 1.0. Implementations that support Vulkan
--- 1.1 or later /must/ not return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER' for any
--- value of @apiVersion@.
---
--- Note
---
--- Because Vulkan 1.0 implementations /may/ fail with
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER',
--- applications /should/ determine the version of Vulkan available before
--- calling 'createInstance'. If the 'getInstanceProcAddr' returns @NULL@
--- for
--- 'Graphics.Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion',
--- it is a Vulkan 1.0 implementation. Otherwise, the application /can/ call
--- 'Graphics.Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion'
--- to determine the version of Vulkan.
---
--- As long as the instance supports at least Vulkan 1.1, an application
--- /can/ use different versions of Vulkan with an instance than it does
--- with a device or physical device.
---
--- Note
---
--- The Khronos validation layers will treat @apiVersion@ as the highest API
--- version the application targets, and will validate API usage against the
--- minimum of that version and the implementation version (instance or
--- device, depending on context). If an application tries to use
--- functionality from a greater version than this, a validation error will
--- be triggered.
---
--- For example, if the instance supports Vulkan 1.1 and three physical
--- devices support Vulkan 1.0, Vulkan 1.1, and Vulkan 1.2, respectively,
--- and if the application sets @apiVersion@ to 1.2, the application /can/
--- use the following versions of Vulkan:
---
--- -   Vulkan 1.0 /can/ be used with the instance and with all physical
---     devices.
---
--- -   Vulkan 1.1 /can/ be used with the instance and with the physical
---     devices that support Vulkan 1.1 and Vulkan 1.2.
---
--- -   Vulkan 1.2 /can/ be used with the physical device that supports
---     Vulkan 1.2.
---
--- If we modify the above example so that the application sets @apiVersion@
--- to 1.1, then the application /must/ not use Vulkan 1.2 functionality on
--- the physical device that supports Vulkan 1.2.
---
--- Implicit layers /must/ be disabled if they do not support a version at
--- least as high as @apiVersion@. See the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#LoaderAndLayerInterface Vulkan Loader Specification and Architecture Overview>
--- document for additional information.
---
--- Note
---
--- Providing a @NULL@ 'InstanceCreateInfo'::@pApplicationInfo@ or providing
--- an @apiVersion@ of 0 is equivalent to providing an @apiVersion@ of
--- @VK_MAKE_VERSION(1,0,0)@.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_APPLICATION_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   If @pApplicationName@ is not @NULL@, @pApplicationName@ /must/ be a
---     null-terminated UTF-8 string
---
--- -   If @pEngineName@ is not @NULL@, @pEngineName@ /must/ be a
---     null-terminated UTF-8 string
---
--- = See Also
---
--- 'InstanceCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ApplicationInfo = ApplicationInfo
-  { -- | @pApplicationName@ is @NULL@ or is a pointer to a null-terminated UTF-8
-    -- string containing the name of the application.
-    applicationName :: Maybe ByteString
-  , -- | @applicationVersion@ is an unsigned integer variable containing the
-    -- developer-supplied version number of the application.
-    applicationVersion :: Word32
-  , -- | @pEngineName@ is @NULL@ or is a pointer to a null-terminated UTF-8
-    -- string containing the name of the engine (if any) used to create the
-    -- application.
-    engineName :: Maybe ByteString
-  , -- | @engineVersion@ is an unsigned integer variable containing the
-    -- developer-supplied version number of the engine used to create the
-    -- application.
-    engineVersion :: Word32
-  , -- | @apiVersion@ /must/ be the highest version of Vulkan that the
-    -- application is designed to use, encoded as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.
-    -- The patch version number specified in @apiVersion@ is ignored when
-    -- creating an instance object. Only the major and minor versions of the
-    -- instance /must/ match those requested in @apiVersion@.
-    apiVersion :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show ApplicationInfo
-
-instance ToCStruct ApplicationInfo where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ApplicationInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_APPLICATION_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pApplicationName'' <- case (applicationName) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ useAsCString (j)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pApplicationName''
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (applicationVersion)
-    pEngineName'' <- case (engineName) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ useAsCString (j)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pEngineName''
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (engineVersion)
-    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (apiVersion)
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_APPLICATION_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct ApplicationInfo where
-  peekCStruct p = do
-    pApplicationName <- peek @(Ptr CChar) ((p `plusPtr` 16 :: Ptr (Ptr CChar)))
-    pApplicationName' <- maybePeek (\j -> packCString  (j)) pApplicationName
-    applicationVersion <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pEngineName <- peek @(Ptr CChar) ((p `plusPtr` 32 :: Ptr (Ptr CChar)))
-    pEngineName' <- maybePeek (\j -> packCString  (j)) pEngineName
-    engineVersion <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    apiVersion <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
-    pure $ ApplicationInfo
-             pApplicationName' applicationVersion pEngineName' engineVersion apiVersion
-
-instance Zero ApplicationInfo where
-  zero = ApplicationInfo
-           Nothing
-           zero
-           Nothing
-           zero
-           zero
-
-
--- | VkInstanceCreateInfo - Structure specifying parameters of a newly
--- created instance
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INSTANCE_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_debug_report.DebugReportCallbackCreateInfoEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCreateInfoEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_validation_features.ValidationFeaturesEXT',
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_validation_flags.ValidationFlagsEXT'
---
--- -   The @sType@ value of each struct 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 'ApplicationInfo' structure
---
--- -   If @enabledLayerCount@ is not @0@, @ppEnabledLayerNames@ /must/ be a
---     valid pointer to an array of @enabledLayerCount@ null-terminated
---     UTF-8 strings
---
--- -   If @enabledExtensionCount@ is not @0@, @ppEnabledExtensionNames@
---     /must/ be a valid pointer to an array of @enabledExtensionCount@
---     null-terminated UTF-8 strings
---
--- = See Also
---
--- 'ApplicationInfo',
--- 'Graphics.Vulkan.Core10.Enums.InstanceCreateFlags.InstanceCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createInstance'
-data InstanceCreateInfo (es :: [Type]) = InstanceCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: InstanceCreateFlags
-  , -- | @pApplicationInfo@ is @NULL@ or a pointer to a 'ApplicationInfo'
-    -- structure. If not @NULL@, this information helps implementations
-    -- recognize behavior inherent to classes of applications.
-    -- 'ApplicationInfo' is defined in detail below.
-    applicationInfo :: Maybe ApplicationInfo
-  , -- | @ppEnabledLayerNames@ is a pointer to an array of @enabledLayerCount@
-    -- null-terminated UTF-8 strings containing the names of layers to enable
-    -- for the created instance. The layers are loaded in the order they are
-    -- listed in this array, with the first array element being the closest to
-    -- the application, and the last array element being the closest to the
-    -- driver. See the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers>
-    -- section for further details.
-    enabledLayerNames :: Vector ByteString
-  , -- | @ppEnabledExtensionNames@ is a pointer to an array of
-    -- @enabledExtensionCount@ null-terminated UTF-8 strings containing the
-    -- names of extensions to enable.
-    enabledExtensionNames :: Vector ByteString
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (InstanceCreateInfo es)
-
-instance Extensible InstanceCreateInfo where
-  extensibleType = STRUCTURE_TYPE_INSTANCE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext InstanceCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends InstanceCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DebugUtilsMessengerCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @ValidationFeaturesEXT = Just f
-    | Just Refl <- eqT @e @ValidationFlagsEXT = Just f
-    | Just Refl <- eqT @e @DebugReportCallbackCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (InstanceCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p InstanceCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr InstanceCreateFlags)) (flags)
-    pApplicationInfo'' <- case (applicationInfo) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ApplicationInfo))) pApplicationInfo''
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledLayerNames)) :: Word32))
-    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledLayerNames)) * 8) 8
-    Data.Vector.imapM_ (\i e -> do
-      ppEnabledLayerNames'' <- ContT $ useAsCString (e)
-      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (enabledLayerNames)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledExtensionNames)) :: Word32))
-    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledExtensionNames)) * 8) 8
-    Data.Vector.imapM_ (\i e -> do
-      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)
-      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (enabledExtensionNames)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8
-    Data.Vector.imapM_ (\i e -> do
-      ppEnabledLayerNames'' <- ContT $ useAsCString (e)
-      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')
-    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8
-    Data.Vector.imapM_ (\i e -> do
-      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)
-      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')
-    lift $ f
-
-instance PeekChain es => FromCStruct (InstanceCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @InstanceCreateFlags ((p `plusPtr` 16 :: Ptr InstanceCreateFlags))
-    pApplicationInfo <- peek @(Ptr ApplicationInfo) ((p `plusPtr` 24 :: Ptr (Ptr ApplicationInfo)))
-    pApplicationInfo' <- maybePeek (\j -> peekCStruct @ApplicationInfo (j)) pApplicationInfo
-    enabledLayerCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    ppEnabledLayerNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar))))
-    ppEnabledLayerNames' <- generateM (fromIntegral enabledLayerCount) (\i -> packCString =<< peek ((ppEnabledLayerNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))
-    enabledExtensionCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    ppEnabledExtensionNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar))))
-    ppEnabledExtensionNames' <- generateM (fromIntegral enabledExtensionCount) (\i -> packCString =<< peek ((ppEnabledExtensionNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))
-    pure $ InstanceCreateInfo
-             next flags pApplicationInfo' ppEnabledLayerNames' ppEnabledExtensionNames'
-
-instance es ~ '[] => Zero (InstanceCreateInfo es) where
-  zero = InstanceCreateInfo
-           ()
-           zero
-           Nothing
-           mempty
-           mempty
-
-
--- | VkQueueFamilyProperties - Structure providing information about a queue
--- family
---
--- = Description
---
--- The value returned in @minImageTransferGranularity@ has a unit of
--- compressed texel blocks for images having a block-compressed format, and
--- a unit of texels otherwise.
---
--- Possible values of @minImageTransferGranularity@ are:
---
--- -   (0,0,0) which indicates that only whole mip levels /must/ be
---     transferred using the image transfer operations on the corresponding
---     queues. In this case, the following restrictions apply to all offset
---     and extent parameters of image transfer operations:
---
---     -   The @x@, @y@, and @z@ members of a
---         'Graphics.Vulkan.Core10.SharedTypes.Offset3D' parameter /must/
---         always be zero.
---
---     -   The @width@, @height@, and @depth@ members of a
---         'Graphics.Vulkan.Core10.SharedTypes.Extent3D' parameter /must/
---         always match the width, height, and depth of the image
---         subresource corresponding to the parameter, respectively.
---
--- -   (Ax, Ay, Az) where Ax, Ay, and Az are all integer powers of two. In
---     this case the following restrictions apply to all image transfer
---     operations:
---
---     -   @x@, @y@, and @z@ of a
---         'Graphics.Vulkan.Core10.SharedTypes.Offset3D' parameter /must/
---         be integer multiples of Ax, Ay, and Az, respectively.
---
---     -   @width@ of a 'Graphics.Vulkan.Core10.SharedTypes.Extent3D'
---         parameter /must/ be an integer multiple of Ax, or else @x@ +
---         @width@ /must/ equal the width of the image subresource
---         corresponding to the parameter.
---
---     -   @height@ of a 'Graphics.Vulkan.Core10.SharedTypes.Extent3D'
---         parameter /must/ be an integer multiple of Ay, or else @y@ +
---         @height@ /must/ equal the height of the image subresource
---         corresponding to the parameter.
---
---     -   @depth@ of a 'Graphics.Vulkan.Core10.SharedTypes.Extent3D'
---         parameter /must/ be an integer multiple of Az, or else @z@ +
---         @depth@ /must/ equal the depth of the image subresource
---         corresponding to the parameter.
---
---     -   If the format of the image corresponding to the parameters is
---         one of the block-compressed formats then for the purposes of the
---         above calculations the granularity /must/ be scaled up by the
---         compressed texel block dimensions.
---
--- Queues supporting graphics and\/or compute operations /must/ report
--- (1,1,1) in @minImageTransferGranularity@, meaning that there are no
--- additional restrictions on the granularity of image transfer operations
--- for these queues. Other queues supporting image transfer operations are
--- only /required/ to support whole mip level transfers, thus
--- @minImageTransferGranularity@ for queues belonging to such queue
--- families /may/ be (0,0,0).
---
--- The
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device Device Memory>
--- section describes memory properties queried from the physical device.
---
--- For physical device feature queries see the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features Features>
--- chapter.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent3D',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.QueueFamilyProperties2',
--- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QueueFlags',
--- 'getPhysicalDeviceQueueFamilyProperties'
-data QueueFamilyProperties = QueueFamilyProperties
-  { -- | @queueFlags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QueueFlagBits' indicating
-    -- capabilities of the queues in this queue family.
-    queueFlags :: QueueFlags
-  , -- | @queueCount@ is the unsigned integer count of queues in this queue
-    -- family. Each queue family /must/ support at least one queue.
-    queueCount :: Word32
-  , -- | @timestampValidBits@ is the unsigned integer count of meaningful bits in
-    -- the timestamps written via
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp'. The
-    -- valid range for the count is 36..64 bits, or a value of 0, indicating no
-    -- support for timestamps. Bits outside the valid range are guaranteed to
-    -- be zeros.
-    timestampValidBits :: Word32
-  , -- | @minImageTransferGranularity@ is the minimum granularity supported for
-    -- image transfer operations on the queues in this queue family.
-    minImageTransferGranularity :: Extent3D
-  }
-  deriving (Typeable)
-deriving instance Show QueueFamilyProperties
-
-instance ToCStruct QueueFamilyProperties where
-  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p QueueFamilyProperties{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr QueueFlags)) (queueFlags)
-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (queueCount)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (timestampValidBits)
-    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Extent3D)) (minImageTransferGranularity) . ($ ())
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Extent3D)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct QueueFamilyProperties where
-  peekCStruct p = do
-    queueFlags <- peek @QueueFlags ((p `plusPtr` 0 :: Ptr QueueFlags))
-    queueCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    timestampValidBits <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    minImageTransferGranularity <- peekCStruct @Extent3D ((p `plusPtr` 12 :: Ptr Extent3D))
-    pure $ QueueFamilyProperties
-             queueFlags queueCount timestampValidBits minImageTransferGranularity
-
-instance Zero QueueFamilyProperties where
-  zero = QueueFamilyProperties
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceMemoryProperties - Structure specifying physical device
--- memory properties
---
--- = Description
---
--- The 'PhysicalDeviceMemoryProperties' structure describes a number of
--- /memory heaps/ as well as a number of /memory types/ that /can/ be used
--- to access memory allocated in those heaps. Each heap describes a memory
--- resource of a particular size, and each memory type describes a set of
--- memory properties (e.g. host cached vs uncached) that /can/ be used with
--- a given memory heap. Allocations using a particular memory type will
--- consume resources from the heap indicated by that memory type’s heap
--- index. More than one memory type /may/ share each heap, and the heaps
--- and memory types provide a mechanism to advertise an accurate size of
--- the physical memory resources while allowing the memory to be used with
--- a variety of different properties.
---
--- The number of memory heaps is given by @memoryHeapCount@ and is less
--- than or equal to 'Graphics.Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS'.
--- Each heap is described by an element of the @memoryHeaps@ array as a
--- 'MemoryHeap' structure. The number of memory types available across all
--- memory heaps is given by @memoryTypeCount@ and is less than or equal to
--- 'Graphics.Vulkan.Core10.APIConstants.MAX_MEMORY_TYPES'. Each memory type
--- is described by an element of the @memoryTypes@ array as a 'MemoryType'
--- structure.
---
--- At least one heap /must/ include
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_DEVICE_LOCAL_BIT'
--- in 'MemoryHeap'::@flags@. If there are multiple heaps that all have
--- similar performance characteristics, they /may/ all include
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_DEVICE_LOCAL_BIT'.
--- In a unified memory architecture (UMA) system there is often only a
--- single memory heap which is considered to be equally “local” to the host
--- and to the device, and such an implementation /must/ advertise the heap
--- as device-local.
---
--- Each memory type returned by 'getPhysicalDeviceMemoryProperties' /must/
--- have its @propertyFlags@ set to one of the following values:
---
--- -   0
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
---
--- -   'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---     |
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
---
--- There /must/ be at least one memory type with both the
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
--- and
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
--- bits set in its @propertyFlags@. There /must/ be at least one memory
--- type with the
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
--- bit set in its @propertyFlags@. If the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceCoherentMemory deviceCoherentMemory>
--- feature is enabled, there /must/ be at least one memory type with the
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
--- bit set in its @propertyFlags@.
---
--- For each pair of elements __X__ and __Y__ returned in @memoryTypes@,
--- __X__ /must/ be placed at a lower index position than __Y__ if:
---
--- -   the set of bit flags returned in the @propertyFlags@ member of __X__
---     is a strict subset of the set of bit flags returned in the
---     @propertyFlags@ member of __Y__; or
---
--- -   the @propertyFlags@ members of __X__ and __Y__ are equal, and __X__
---     belongs to a memory heap with greater performance (as determined in
---     an implementation-specific manner) ; or
---
--- -   the @propertyFlags@ members of __Y__ includes
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---     or
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
---     and __X__ does not
---
--- Note
---
--- There is no ordering requirement between __X__ and __Y__ elements for
--- the case their @propertyFlags@ members are not in a subset relation.
--- That potentially allows more than one possible way to order the same set
--- of memory types. Notice that the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-bitmask-list list of all allowed memory property flag combinations>
--- is written in a valid order. But if instead
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
--- was before
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
--- |
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT',
--- the list would still be in a valid order.
---
--- There may be a performance penalty for using device coherent or uncached
--- device memory types, and using these accidentally is undesirable. In
--- order to avoid this, memory types with these properties always appear at
--- the end of the list; but are subject to the same rules otherwise.
---
--- This ordering requirement enables applications to use a simple search
--- loop to select the desired memory type along the lines of:
---
--- > // Find a memory in `memoryTypeBitsRequirement` that includes all of `requiredProperties`
--- > int32_t findProperties(const VkPhysicalDeviceMemoryProperties* pMemoryProperties,
--- >                        uint32_t memoryTypeBitsRequirement,
--- >                        VkMemoryPropertyFlags requiredProperties) {
--- >     const uint32_t memoryCount = pMemoryProperties->memoryTypeCount;
--- >     for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) {
--- >         const uint32_t memoryTypeBits = (1 << memoryIndex);
--- >         const bool isRequiredMemoryType = memoryTypeBitsRequirement & memoryTypeBits;
--- >
--- >         const VkMemoryPropertyFlags properties =
--- >             pMemoryProperties->memoryTypes[memoryIndex].propertyFlags;
--- >         const bool hasRequiredProperties =
--- >             (properties & requiredProperties) == requiredProperties;
--- >
--- >         if (isRequiredMemoryType && hasRequiredProperties)
--- >             return static_cast<int32_t>(memoryIndex);
--- >     }
--- >
--- >     // failed to find memory type
--- >     return -1;
--- > }
--- >
--- > // Try to find an optimal memory type, or if it does not exist try fallback memory type
--- > // `device` is the VkDevice
--- > // `image` is the VkImage that requires memory to be bound
--- > // `memoryProperties` properties as returned by vkGetPhysicalDeviceMemoryProperties
--- > // `requiredProperties` are the property flags that must be present
--- > // `optimalProperties` are the property flags that are preferred by the application
--- > VkMemoryRequirements memoryRequirements;
--- > vkGetImageMemoryRequirements(device, image, &memoryRequirements);
--- > int32_t memoryType =
--- >     findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, optimalProperties);
--- > if (memoryType == -1) // not found; try fallback properties
--- >     memoryType =
--- >         findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, requiredProperties);
---
--- = See Also
---
--- 'MemoryHeap', 'MemoryType',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceMemoryProperties2',
--- 'getPhysicalDeviceMemoryProperties'
-data PhysicalDeviceMemoryProperties = PhysicalDeviceMemoryProperties
-  { -- | @memoryTypeCount@ is the number of valid elements in the @memoryTypes@
-    -- array.
-    memoryTypeCount :: Word32
-  , -- | @memoryTypes@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_MEMORY_TYPES' 'MemoryType'
-    -- structures describing the /memory types/ that /can/ be used to access
-    -- memory allocated from the heaps specified by @memoryHeaps@.
-    memoryTypes :: Vector MemoryType
-  , -- | @memoryHeapCount@ is the number of valid elements in the @memoryHeaps@
-    -- array.
-    memoryHeapCount :: Word32
-  , -- | @memoryHeaps@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS' 'MemoryHeap'
-    -- structures describing the /memory heaps/ from which memory /can/ be
-    -- allocated.
-    memoryHeaps :: Vector MemoryHeap
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceMemoryProperties
-
-instance ToCStruct PhysicalDeviceMemoryProperties where
-  withCStruct x f = allocaBytesAligned 520 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceMemoryProperties{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (memoryTypeCount)
-    lift $ unless ((Data.Vector.length $ (memoryTypes)) <= MAX_MEMORY_TYPES) $
-      throwIO $ IOError Nothing InvalidArgument "" "memoryTypes is too long, a maximum of MAX_MEMORY_TYPES elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `plusPtr` (8 * (i)) :: Ptr MemoryType) (e) . ($ ())) (memoryTypes)
-    lift $ poke ((p `plusPtr` 260 :: Ptr Word32)) (memoryHeapCount)
-    lift $ unless ((Data.Vector.length $ (memoryHeaps)) <= MAX_MEMORY_HEAPS) $
-      throwIO $ IOError Nothing InvalidArgument "" "memoryHeaps is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `plusPtr` (16 * (i)) :: Ptr MemoryHeap) (e) . ($ ())) (memoryHeaps)
-    lift $ f
-  cStructSize = 520
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    lift $ unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_TYPES) $
-      throwIO $ IOError Nothing InvalidArgument "" "memoryTypes is too long, a maximum of MAX_MEMORY_TYPES elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `plusPtr` (8 * (i)) :: Ptr MemoryType) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 260 :: Ptr Word32)) (zero)
-    lift $ unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_HEAPS) $
-      throwIO $ IOError Nothing InvalidArgument "" "memoryHeaps is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `plusPtr` (16 * (i)) :: Ptr MemoryHeap) (e) . ($ ())) (mempty)
-    lift $ f
-
-instance FromCStruct PhysicalDeviceMemoryProperties where
-  peekCStruct p = do
-    memoryTypeCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    memoryTypes <- generateM (MAX_MEMORY_TYPES) (\i -> peekCStruct @MemoryType (((lowerArrayPtr @MemoryType ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `advancePtrBytes` (8 * (i)) :: Ptr MemoryType)))
-    memoryHeapCount <- peek @Word32 ((p `plusPtr` 260 :: Ptr Word32))
-    memoryHeaps <- generateM (MAX_MEMORY_HEAPS) (\i -> peekCStruct @MemoryHeap (((lowerArrayPtr @MemoryHeap ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `advancePtrBytes` (16 * (i)) :: Ptr MemoryHeap)))
-    pure $ PhysicalDeviceMemoryProperties
-             memoryTypeCount memoryTypes memoryHeapCount memoryHeaps
-
-instance Zero PhysicalDeviceMemoryProperties where
-  zero = PhysicalDeviceMemoryProperties
-           zero
-           mempty
-           zero
-           mempty
-
-
--- | VkMemoryType - Structure specifying memory type
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MemoryPropertyFlags',
--- 'PhysicalDeviceMemoryProperties'
-data MemoryType = MemoryType
-  { -- | @propertyFlags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MemoryPropertyFlagBits'
-    -- of properties for this memory type.
-    propertyFlags :: MemoryPropertyFlags
-  , -- | @heapIndex@ describes which memory heap this memory type corresponds to,
-    -- and /must/ be less than @memoryHeapCount@ from the
-    -- 'PhysicalDeviceMemoryProperties' structure.
-    heapIndex :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show MemoryType
-
-instance ToCStruct MemoryType where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryType{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr MemoryPropertyFlags)) (propertyFlags)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (heapIndex)
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct MemoryType where
-  peekCStruct p = do
-    propertyFlags <- peek @MemoryPropertyFlags ((p `plusPtr` 0 :: Ptr MemoryPropertyFlags))
-    heapIndex <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    pure $ MemoryType
-             propertyFlags heapIndex
-
-instance Storable MemoryType where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryType where
-  zero = MemoryType
-           zero
-           zero
-
-
--- | VkMemoryHeap - Structure specifying a memory heap
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MemoryHeapFlags',
--- 'PhysicalDeviceMemoryProperties'
-data MemoryHeap = MemoryHeap
-  { -- | @size@ is the total memory size in bytes in the heap.
-    size :: DeviceSize
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MemoryHeapFlagBits'
-    -- specifying attribute flags for the heap.
-    flags :: MemoryHeapFlags
-  }
-  deriving (Typeable)
-deriving instance Show MemoryHeap
-
-instance ToCStruct MemoryHeap where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryHeap{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (size)
-    poke ((p `plusPtr` 8 :: Ptr MemoryHeapFlags)) (flags)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct MemoryHeap where
-  peekCStruct p = do
-    size <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
-    flags <- peek @MemoryHeapFlags ((p `plusPtr` 8 :: Ptr MemoryHeapFlags))
-    pure $ MemoryHeap
-             size flags
-
-instance Storable MemoryHeap where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryHeap where
-  zero = MemoryHeap
-           zero
-           zero
-
-
--- | VkFormatProperties - Structure specifying image format properties
---
--- = Description
---
--- Note
---
--- If no format feature flags are supported, the format itself is not
--- supported, and images of that format cannot be created.
---
--- If @format@ is a block-compressed format, then @bufferFeatures@ /must/
--- not support any features for the format.
---
--- If @format@ is not a multi-plane format then @linearTilingFeatures@ and
--- @optimalTilingFeatures@ /must/ not contain
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DISJOINT_BIT'.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlags',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.FormatProperties2',
--- 'getPhysicalDeviceFormatProperties'
-data FormatProperties = FormatProperties
-  { -- | @linearTilingFeatures@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'
-    -- specifying features supported by images created with a @tiling@
-    -- parameter of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'.
-    linearTilingFeatures :: FormatFeatureFlags
-  , -- | @optimalTilingFeatures@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'
-    -- specifying features supported by images created with a @tiling@
-    -- parameter of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'.
-    optimalTilingFeatures :: FormatFeatureFlags
-  , -- | @bufferFeatures@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'
-    -- specifying features supported by buffers.
-    bufferFeatures :: FormatFeatureFlags
-  }
-  deriving (Typeable)
-deriving instance Show FormatProperties
-
-instance ToCStruct FormatProperties where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p FormatProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr FormatFeatureFlags)) (linearTilingFeatures)
-    poke ((p `plusPtr` 4 :: Ptr FormatFeatureFlags)) (optimalTilingFeatures)
-    poke ((p `plusPtr` 8 :: Ptr FormatFeatureFlags)) (bufferFeatures)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct _ f = f
-
-instance FromCStruct FormatProperties where
-  peekCStruct p = do
-    linearTilingFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 0 :: Ptr FormatFeatureFlags))
-    optimalTilingFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 4 :: Ptr FormatFeatureFlags))
-    bufferFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 8 :: Ptr FormatFeatureFlags))
-    pure $ FormatProperties
-             linearTilingFeatures optimalTilingFeatures bufferFeatures
-
-instance Storable FormatProperties where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero FormatProperties where
-  zero = FormatProperties
-           zero
-           zero
-           zero
-
-
--- | VkImageFormatProperties - Structure specifying an image format
--- properties
---
--- = Members
---
--- -   @maxExtent@ are the maximum image dimensions. See the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extentperimagetype Allowed Extent Values>
---     section below for how these values are constrained by @type@.
---
--- -   @maxMipLevels@ is the maximum number of mipmap levels.
---     @maxMipLevels@ /must/ be equal to the number of levels in the
---     complete mipmap chain based on the @maxExtent.width@,
---     @maxExtent.height@, and @maxExtent.depth@, except when one of the
---     following conditions is true, in which case it /may/ instead be @1@:
---
---     -   'getPhysicalDeviceImageFormatProperties'::@tiling@ was
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'
---
---     -   'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@tiling@
---         was
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
---
---     -   the
---         'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@
---         chain included a
---         'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'
---         structure with a handle type included in the @handleTypes@
---         member for which mipmap image support is not required
---
---     -   image @format@ is one of those listed in
---         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
---
---     -   @flags@ contains
---         'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
---
--- -   @maxArrayLayers@ is the maximum number of array layers.
---     @maxArrayLayers@ /must/ be no less than
---     'PhysicalDeviceLimits'::@maxImageArrayLayers@, except when one of
---     the following conditions is true, in which case it /may/ instead be
---     @1@:
---
---     -   @tiling@ is
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'
---
---     -   @tiling@ is
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'
---         and @type@ is
---         'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
---
---     -   @format@ is one of those listed in
---         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
---
--- -   If @tiling@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---     then @maxArrayLayers@ /must/ not be 0.
---
--- -   @sampleCounts@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
---     specifying all the supported sample counts for this image as
---     described
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-supported-sample-counts below>.
---
--- -   @maxResourceSize@ is an upper bound on the total image size in
---     bytes, inclusive of all image subresources. Implementations /may/
---     have an address space limit on total size of a resource, which is
---     advertised by this property. @maxResourceSize@ /must/ be at least
---     231.
---
--- = Description
---
--- Note
---
--- There is no mechanism to query the size of an image before creating it,
--- to compare that size against @maxResourceSize@. If an application
--- attempts to create an image that exceeds this limit, the creation will
--- fail and 'Graphics.Vulkan.Core10.Image.createImage' will return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'. While
--- the advertised limit /must/ be at least 231, it /may/ not be possible to
--- create an image that approaches that size, particularly for
--- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'.
---
--- If the combination of parameters to
--- 'getPhysicalDeviceImageFormatProperties' is not supported by the
--- implementation for use in 'Graphics.Vulkan.Core10.Image.createImage',
--- then all members of 'ImageFormatProperties' will be filled with zero.
---
--- Note
---
--- Filling 'ImageFormatProperties' with zero for unsupported formats is an
--- exception to the usual rule that output structures have undefined
--- contents on error. This exception was unintentional, but is preserved
--- for backwards compatibility.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent3D',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalImageFormatPropertiesNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags',
--- 'getPhysicalDeviceImageFormatProperties'
-data ImageFormatProperties = ImageFormatProperties
-  { -- No documentation found for Nested "VkImageFormatProperties" "maxExtent"
-    maxExtent :: Extent3D
-  , -- No documentation found for Nested "VkImageFormatProperties" "maxMipLevels"
-    maxMipLevels :: Word32
-  , -- No documentation found for Nested "VkImageFormatProperties" "maxArrayLayers"
-    maxArrayLayers :: Word32
-  , -- No documentation found for Nested "VkImageFormatProperties" "sampleCounts"
-    sampleCounts :: SampleCountFlags
-  , -- No documentation found for Nested "VkImageFormatProperties" "maxResourceSize"
-    maxResourceSize :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show ImageFormatProperties
-
-instance ToCStruct ImageFormatProperties where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageFormatProperties{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent3D)) (maxExtent) . ($ ())
-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (maxMipLevels)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (maxArrayLayers)
-    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlags)) (sampleCounts)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (maxResourceSize)
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent3D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    lift $ f
-
-instance FromCStruct ImageFormatProperties where
-  peekCStruct p = do
-    maxExtent <- peekCStruct @Extent3D ((p `plusPtr` 0 :: Ptr Extent3D))
-    maxMipLevels <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    maxArrayLayers <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    sampleCounts <- peek @SampleCountFlags ((p `plusPtr` 20 :: Ptr SampleCountFlags))
-    maxResourceSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    pure $ ImageFormatProperties
-             maxExtent maxMipLevels maxArrayLayers sampleCounts maxResourceSize
-
-instance Zero ImageFormatProperties where
-  zero = ImageFormatProperties
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceFeatures - Structure describing the fine-grained
--- features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceFeatures' structure describe the
--- following features:
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- 'getPhysicalDeviceFeatures'
-data PhysicalDeviceFeatures = PhysicalDeviceFeatures
-  { -- | @robustBufferAccess@ specifies that accesses to buffers are
-    -- bounds-checked against the range of the buffer descriptor (as determined
-    -- by 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo'::@range@,
-    -- 'Graphics.Vulkan.Core10.BufferView.BufferViewCreateInfo'::@range@, or
-    -- the size of the buffer). Out of bounds accesses /must/ not cause
-    -- application termination, and the effects of shader loads, stores, and
-    -- atomics /must/ conform to an implementation-dependent behavior as
-    -- described below.
-    --
-    -- -   A buffer access is considered to be out of bounds if any of the
-    --     following are true:
-    --
-    --     -   The pointer was formed by @OpImageTexelPointer@ and the
-    --         coordinate is less than zero or greater than or equal to the
-    --         number of whole elements in the bound range.
-    --
-    --     -   The pointer was not formed by @OpImageTexelPointer@ and the
-    --         object pointed to is not wholly contained within the bound
-    --         range. This includes accesses performed via /variable pointers/
-    --         where the buffer descriptor being accessed cannot be statically
-    --         determined. Uninitialized pointers and pointers equal to
-    --         @OpConstantNull@ are treated as pointing to a zero-sized object,
-    --         so all accesses through such pointers are considered to be out
-    --         of bounds. Buffer accesses through buffer device addresses are
-    --         not bounds-checked. If the
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-cooperativeMatrixRobustBufferAccess cooperativeMatrixRobustBufferAccess>
-    --         feature is not enabled, then accesses using
-    --         @OpCooperativeMatrixLoadNV@ and @OpCooperativeMatrixStoreNV@
-    --         /may/ not be bounds-checked.
-    --
-    --         Note
-    --
-    --         If a SPIR-V @OpLoad@ instruction loads a structure and the tail
-    --         end of the structure is out of bounds, then all members of the
-    --         structure are considered out of bounds even if the members at
-    --         the end are not statically used.
-    --
-    --     -   If
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    --         is not enabled and any buffer access is determined to be out of
-    --         bounds, then any other access of the same type (load, store, or
-    --         atomic) to the same buffer that accesses an address less than 16
-    --         bytes away from the out of bounds address /may/ also be
-    --         considered out of bounds.
-    --
-    --     -   If the access is a load that reads from the same memory
-    --         locations as a prior store in the same shader invocation, with
-    --         no other intervening accesses to the same memory locations in
-    --         that shader invocation, then the result of the load /may/ be the
-    --         value stored by the store instruction, even if the access is out
-    --         of bounds. If the load is @Volatile@, then an out of bounds load
-    --         /must/ return the appropriate out of bounds value.
-    --
-    -- -   Accesses to descriptors written with a
-    --     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' resource or view
-    --     are not considered to be out of bounds. Instead, each type of
-    --     descriptor access defines a specific behavior for accesses to a null
-    --     descriptor.
-    --
-    -- -   Out-of-bounds buffer loads will return any of the following values:
-    --
-    --     -   If the access is to a uniform buffer and
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    --         is enabled, loads of offsets between the end of the descriptor
-    --         range and the end of the descriptor range rounded up to a
-    --         multiple of
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>
-    --         bytes /must/ return either zero values or the contents of the
-    --         memory at the offset being loaded. Loads of offsets past the
-    --         descriptor range rounded up to a multiple of
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>
-    --         bytes /must/ return zero values.
-    --
-    --     -   If the access is to a storage buffer and
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    --         is enabled, loads of offsets between the end of the descriptor
-    --         range and the end of the descriptor range rounded up to a
-    --         multiple of
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>
-    --         bytes /must/ return either zero values or the contents of the
-    --         memory at the offset being loaded. Loads of offsets past the
-    --         descriptor range rounded up to a multiple of
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>
-    --         bytes /must/ return zero values. Similarly, stores to addresses
-    --         between the end of the descriptor range and the end of the
-    --         descriptor range rounded up to a multiple of
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>
-    --         bytes /may/ be discarded.
-    --
-    --     -   Non-atomic accesses to storage buffers that are a multiple of 32
-    --         bits /may/ be decomposed into 32-bit accesses that are
-    --         individually bounds-checked.
-    --
-    --     -   If the access is to an index buffer and
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    --         is enabled, zero values /must/ be returned.
-    --
-    --     -   If the access is to a uniform texel buffer or storage texel
-    --         buffer and
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    --         is enabled, zero values /must/ be returned, and then
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-conversion-to-rgba Conversion to RGBA>
-    --         is applied based on the buffer view’s format.
-    --
-    --     -   Values from anywhere within the memory range(s) bound to the
-    --         buffer (possibly including bytes of memory past the end of the
-    --         buffer, up to the end of the bound range).
-    --
-    --     -   Zero values, or (0,0,0,x) vectors for vector reads where x is a
-    --         valid value represented in the type of the vector components and
-    --         /may/ be any of:
-    --
-    --         -   0, 1, or the maximum representable positive integer value,
-    --             for signed or unsigned integer components
-    --
-    --         -   0.0 or 1.0, for floating-point components
-    --
-    -- -   Out-of-bounds writes /may/ modify values within the memory range(s)
-    --     bound to the buffer, but /must/ not modify any other memory.
-    --
-    --     -   If
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    --         is enabled, out of bounds writes /must/ not modify any memory.
-    --
-    -- -   Out-of-bounds atomics /may/ modify values within the memory range(s)
-    --     bound to the buffer, but /must/ not modify any other memory, and
-    --     return an undefined value.
-    --
-    --     -   If
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    --         is enabled, out of bounds atomics /must/ not modify any memory,
-    --         and return an undefined value.
-    --
-    -- -   If
-    --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    --     is disabled, vertex input attributes are considered out of bounds if
-    --     the offset of the attribute in the bound vertex buffer range plus
-    --     the size of the attribute is greater than either:
-    --
-    --     -   @vertexBufferRangeSize@, if @bindingStride@ == 0; or
-    --
-    --     -   (@vertexBufferRangeSize@ - (@vertexBufferRangeSize@ %
-    --         @bindingStride@))
-    --
-    --     where @vertexBufferRangeSize@ is the byte size of the memory range
-    --     bound to the vertex buffer binding and @bindingStride@ is the byte
-    --     stride of the corresponding vertex input binding. Further, if any
-    --     vertex input attribute using a specific vertex input binding is out
-    --     of bounds, then all vertex input attributes using that vertex input
-    --     binding for that vertex shader invocation are considered out of
-    --     bounds.
-    --
-    --     -   If a vertex input attribute is out of bounds, it will be
-    --         assigned one of the following values:
-    --
-    --         -   Values from anywhere within the memory range(s) bound to the
-    --             buffer, converted according to the format of the attribute.
-    --
-    --         -   Zero values, format converted according to the format of the
-    --             attribute.
-    --
-    --         -   Zero values, or (0,0,0,x) vectors, as described above.
-    --
-    -- -   If
-    --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    --     is enabled, vertex input attributes are considered out of bounds if
-    --     the offset of the attribute in the bound vertex buffer range plus
-    --     the size of the attribute is greater than the byte size of the
-    --     memory range bound to the vertex buffer binding.
-    --
-    --     -   If a vertex input attribute is out of bounds, the
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction raw data>
-    --         extracted are zero values, and missing G, B, or A components are
-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction filled with (0,0,1)>.
-    --
-    -- -   If @robustBufferAccess@ is not enabled, applications /must/ not
-    --     perform out of bounds accesses.
-    robustBufferAccess :: Bool
-  , -- | @fullDrawIndexUint32@ specifies the full 32-bit range of indices is
-    -- supported for indexed draw calls when using a
-    -- 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' of
-    -- 'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32'.
-    -- @maxDrawIndexedIndexValue@ is the maximum index value that /may/ be used
-    -- (aside from the primitive restart index, which is always 232-1 when the
-    -- 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' is
-    -- 'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32'). If this
-    -- feature is supported, @maxDrawIndexedIndexValue@ /must/ be 232-1;
-    -- otherwise it /must/ be no smaller than 224-1. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxDrawIndexedIndexValue maxDrawIndexedIndexValue>.
-    fullDrawIndexUint32 :: Bool
-  , -- | @imageCubeArray@ specifies whether image views with a
-    -- 'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
-    -- /can/ be created, and that the corresponding @SampledCubeArray@ and
-    -- @ImageCubeArray@ SPIR-V capabilities /can/ be used in shader code.
-    imageCubeArray :: Bool
-  , -- | @independentBlend@ specifies whether the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'
-    -- settings are controlled independently per-attachment. If this feature is
-    -- not enabled, the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'
-    -- settings for all color attachments /must/ be identical. Otherwise, a
-    -- different
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'
-    -- /can/ be provided for each bound color attachment.
-    independentBlend :: Bool
-  , -- | @geometryShader@ specifies whether geometry shaders are supported. If
-    -- this feature is not enabled, the
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
-    -- enum values /must/ not be used. This also specifies whether shader
-    -- modules /can/ declare the @Geometry@ capability.
-    geometryShader :: Bool
-  , -- | @tessellationShader@ specifies whether tessellation control and
-    -- evaluation shaders are supported. If this feature is not enabled, the
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO'
-    -- enum values /must/ not be used. This also specifies whether shader
-    -- modules /can/ declare the @Tessellation@ capability.
-    tessellationShader :: Bool
-  , -- | @sampleRateShading@ specifies whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-sampleshading Sample Shading>
-    -- and multisample interpolation are supported. If this feature is not
-    -- enabled, the @sampleShadingEnable@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'
-    -- structure /must/ be set to 'Graphics.Vulkan.Core10.BaseType.FALSE' and
-    -- the @minSampleShading@ member is ignored. This also specifies whether
-    -- shader modules /can/ declare the @SampleRateShading@ capability.
-    sampleRateShading :: Bool
-  , -- | @dualSrcBlend@ specifies whether blend operations which take two sources
-    -- are supported. If this feature is not enabled, the
-    -- 'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
-    -- 'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
-    -- 'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', and
-    -- 'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
-    -- enum values /must/ not be used as source or destination blending
-    -- factors. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-dsb>.
-    dualSrcBlend :: Bool
-  , -- | @logicOp@ specifies whether logic operations are supported. If this
-    -- feature is not enabled, the @logicOpEnable@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'
-    -- structure /must/ be set to 'Graphics.Vulkan.Core10.BaseType.FALSE', and
-    -- the @logicOp@ member is ignored.
-    logicOp :: Bool
-  , -- | @multiDrawIndirect@ specifies whether multiple draw indirect is
-    -- supported. If this feature is not enabled, the @drawCount@ parameter to
-    -- the 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' and
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'
-    -- commands /must/ be 0 or 1. The @maxDrawIndirectCount@ member of the
-    -- 'PhysicalDeviceLimits' structure /must/ also be 1 if this feature is not
-    -- supported. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxDrawIndirectCount maxDrawIndirectCount>.
-    multiDrawIndirect :: Bool
-  , -- | @drawIndirectFirstInstance@ specifies whether indirect draw calls
-    -- support the @firstInstance@ parameter. If this feature is not enabled,
-    -- the @firstInstance@ member of all
-    -- 'Graphics.Vulkan.Core10.OtherTypes.DrawIndirectCommand' and
-    -- 'Graphics.Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'
-    -- structures that are provided to the
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' and
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'
-    -- commands /must/ be 0.
-    drawIndirectFirstInstance :: Bool
-  , -- | @depthClamp@ specifies whether depth clamping is supported. If this
-    -- feature is not enabled, the @depthClampEnable@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
-    -- structure /must/ be set to 'Graphics.Vulkan.Core10.BaseType.FALSE'.
-    -- Otherwise, setting @depthClampEnable@ to
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE' will enable depth clamping.
-    depthClamp :: Bool
-  , -- | @depthBiasClamp@ specifies whether depth bias clamping is supported. If
-    -- this feature is not enabled, the @depthBiasClamp@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
-    -- structure /must/ be set to 0.0 unless the
-    -- 'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS'
-    -- dynamic state is enabled, and the @depthBiasClamp@ parameter to
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBias' /must/ be
-    -- set to 0.0.
-    depthBiasClamp :: Bool
-  , -- | @fillModeNonSolid@ specifies whether point and wireframe fill modes are
-    -- supported. If this feature is not enabled, the
-    -- 'Graphics.Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_POINT' and
-    -- 'Graphics.Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_LINE' enum values
-    -- /must/ not be used.
-    fillModeNonSolid :: Bool
-  , -- | @depthBounds@ specifies whether depth bounds tests are supported. If
-    -- this feature is not enabled, the @depthBoundsTestEnable@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
-    -- structure /must/ be set to 'Graphics.Vulkan.Core10.BaseType.FALSE'. When
-    -- @depthBoundsTestEnable@ is set to
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', the @minDepthBounds@ and
-    -- @maxDepthBounds@ members of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
-    -- structure are ignored.
-    depthBounds :: Bool
-  , -- | @wideLines@ specifies whether lines with width other than 1.0 are
-    -- supported. If this feature is not enabled, the @lineWidth@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
-    -- structure /must/ be set to 1.0 unless the
-    -- 'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH'
-    -- dynamic state is enabled, and the @lineWidth@ parameter to
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' /must/ be
-    -- set to 1.0. When this feature is supported, the range and granularity of
-    -- supported line widths are indicated by the @lineWidthRange@ and
-    -- @lineWidthGranularity@ members of the 'PhysicalDeviceLimits' structure,
-    -- respectively.
-    wideLines :: Bool
-  , -- | @largePoints@ specifies whether points with size greater than 1.0 are
-    -- supported. If this feature is not enabled, only a point size of 1.0
-    -- written by a shader is supported. The range and granularity of supported
-    -- point sizes are indicated by the @pointSizeRange@ and
-    -- @pointSizeGranularity@ members of the 'PhysicalDeviceLimits' structure,
-    -- respectively.
-    largePoints :: Bool
-  , -- | @alphaToOne@ specifies whether the implementation is able to replace the
-    -- alpha value of the color fragment output from the fragment shader with
-    -- the maximum representable alpha value for fixed-point colors or 1.0 for
-    -- floating-point colors. If this feature is not enabled, then the
-    -- @alphaToOneEnable@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'
-    -- structure /must/ be set to 'Graphics.Vulkan.Core10.BaseType.FALSE'.
-    -- Otherwise setting @alphaToOneEnable@ to
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE' will enable alpha-to-one
-    -- behavior.
-    alphaToOne :: Bool
-  , -- | @multiViewport@ specifies whether more than one viewport is supported.
-    -- If this feature is not enabled:
-    --
-    -- -   The @viewportCount@ and @scissorCount@ members of the
-    --     'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'
-    --     structure /must/ be set to 1.
-    --
-    -- -   The @firstViewport@ and @viewportCount@ parameters to the
-    --     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetViewport'
-    --     command /must/ be set to 0 and 1, respectively.
-    --
-    -- -   The @firstScissor@ and @scissorCount@ parameters to the
-    --     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetScissor' command
-    --     /must/ be set to 0 and 1, respectively.
-    --
-    -- -   The @exclusiveScissorCount@ member of the
-    --     'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'
-    --     structure /must/ be set to 0 or 1.
-    --
-    -- -   The @firstExclusiveScissor@ and @exclusiveScissorCount@ parameters
-    --     to the
-    --     'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV'
-    --     command /must/ be set to 0 and 1, respectively.
-    multiViewport :: Bool
-  , -- | @samplerAnisotropy@ specifies whether anisotropic filtering is
-    -- supported. If this feature is not enabled, the @anisotropyEnable@ member
-    -- of the 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo' structure
-    -- /must/ be 'Graphics.Vulkan.Core10.BaseType.FALSE'.
-    samplerAnisotropy :: Bool
-  , -- | @textureCompressionETC2@ specifies whether all of the ETC2 and EAC
-    -- compressed texture formats are supported. If this feature is enabled,
-    -- then the
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
-    -- features /must/ be supported in @optimalTilingFeatures@ for the
-    -- following formats:
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_EAC_R11_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_EAC_R11_SNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_EAC_R11G11_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_EAC_R11G11_SNORM_BLOCK'
-    --
-    -- To query for additional properties, or if the feature is not enabled,
-    -- 'getPhysicalDeviceFormatProperties' and
-    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for
-    -- supported properties of individual formats as normal.
-    textureCompressionETC2 :: Bool
-  , -- | @textureCompressionASTC_LDR@ specifies whether all of the ASTC LDR
-    -- compressed texture formats are supported. If this feature is enabled,
-    -- then the
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
-    -- features /must/ be supported in @optimalTilingFeatures@ for the
-    -- following formats:
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_SRGB_BLOCK'
-    --
-    -- To query for additional properties, or if the feature is not enabled,
-    -- 'getPhysicalDeviceFormatProperties' and
-    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for
-    -- supported properties of individual formats as normal.
-    textureCompressionASTC_LDR :: Bool
-  , -- | @textureCompressionBC@ specifies whether all of the BC compressed
-    -- texture formats are supported. If this feature is enabled, then the
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
-    -- features /must/ be supported in @optimalTilingFeatures@ for the
-    -- following formats:
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC1_RGB_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC1_RGB_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC1_RGBA_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC1_RGBA_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC2_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC2_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC3_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC3_SRGB_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC4_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC4_SNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC5_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC5_SNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC6H_UFLOAT_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC6H_SFLOAT_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC7_UNORM_BLOCK'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_BC7_SRGB_BLOCK'
-    --
-    -- To query for additional properties, or if the feature is not enabled,
-    -- 'getPhysicalDeviceFormatProperties' and
-    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for
-    -- supported properties of individual formats as normal.
-    textureCompressionBC :: Bool
-  , -- | @occlusionQueryPrecise@ specifies whether occlusion queries returning
-    -- actual sample counts are supported. Occlusion queries are created in a
-    -- 'Graphics.Vulkan.Core10.Handles.QueryPool' by specifying the @queryType@
-    -- of 'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' in the
-    -- 'Graphics.Vulkan.Core10.Query.QueryPoolCreateInfo' structure which is
-    -- passed to 'Graphics.Vulkan.Core10.Query.createQueryPool'. If this
-    -- feature is enabled, queries of this type /can/ enable
-    -- 'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'
-    -- in the @flags@ parameter to
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery'. If this
-    -- feature is not supported, the implementation supports only boolean
-    -- occlusion queries. When any samples are passed, boolean queries will
-    -- return a non-zero result value, otherwise a result value of zero is
-    -- returned. When this feature is enabled and
-    -- 'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'
-    -- is set, occlusion queries will report the actual number of samples
-    -- passed.
-    occlusionQueryPrecise :: Bool
-  , -- | @pipelineStatisticsQuery@ specifies whether the pipeline statistics
-    -- queries are supported. If this feature is not enabled, queries of type
-    -- 'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'
-    -- /cannot/ be created, and none of the
-    -- 'Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'
-    -- bits /can/ be set in the @pipelineStatistics@ member of the
-    -- 'Graphics.Vulkan.Core10.Query.QueryPoolCreateInfo' structure.
-    pipelineStatisticsQuery :: Bool
-  , -- | @vertexPipelineStoresAndAtomics@ specifies whether storage buffers and
-    -- images support stores and atomic operations in the vertex, tessellation,
-    -- and geometry shader stages. If this feature is not enabled, all storage
-    -- image, storage texel buffers, and storage buffer variables used by these
-    -- stages in shader modules /must/ be decorated with the @NonWritable@
-    -- decoration (or the @readonly@ memory qualifier in GLSL).
-    vertexPipelineStoresAndAtomics :: Bool
-  , -- | @fragmentStoresAndAtomics@ specifies whether storage buffers and images
-    -- support stores and atomic operations in the fragment shader stage. If
-    -- this feature is not enabled, all storage image, storage texel buffers,
-    -- and storage buffer variables used by the fragment stage in shader
-    -- modules /must/ be decorated with the @NonWritable@ decoration (or the
-    -- @readonly@ memory qualifier in GLSL).
-    fragmentStoresAndAtomics :: Bool
-  , -- | @shaderTessellationAndGeometryPointSize@ specifies whether the
-    -- @PointSize@ built-in decoration is available in the tessellation
-    -- control, tessellation evaluation, and geometry shader stages. If this
-    -- feature is not enabled, members decorated with the @PointSize@ built-in
-    -- decoration /must/ not be read from or written to and all points written
-    -- from a tessellation or geometry shader will have a size of 1.0. This
-    -- also specifies whether shader modules /can/ declare the
-    -- @TessellationPointSize@ capability for tessellation control and
-    -- evaluation shaders, or if the shader modules /can/ declare the
-    -- @GeometryPointSize@ capability for geometry shaders. An implementation
-    -- supporting this feature /must/ also support one or both of the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellationShader>
-    -- or
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometryShader>
-    -- features.
-    shaderTessellationAndGeometryPointSize :: Bool
-  , -- | @shaderImageGatherExtended@ specifies whether the extended set of image
-    -- gather instructions are available in shader code. If this feature is not
-    -- enabled, the @OpImage@*@Gather@ instructions do not support the @Offset@
-    -- and @ConstOffsets@ operands. This also specifies whether shader modules
-    -- /can/ declare the @ImageGatherExtended@ capability.
-    shaderImageGatherExtended :: Bool
-  , -- | @shaderStorageImageExtendedFormats@ specifies whether all the “storage
-    -- image extended formats” below are supported; if this feature is
-    -- supported, then the
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_BIT'
-    -- /must/ be supported in @optimalTilingFeatures@ for the following
-    -- formats:
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16_SFLOAT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_B10G11R11_UFLOAT_PACK32'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16_SFLOAT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_UNORM'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_A2B10G10R10_UNORM_PACK32'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16_UNORM'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16_UNORM'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8_UNORM'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_SNORM'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16_SNORM'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8G8_SNORM'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16_SNORM'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8_SNORM'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16_SINT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8G8_SINT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16_SINT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8_SINT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_A2B10G10R10_UINT_PACK32'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16_UINT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8G8_UINT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16_UINT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'
-    --
-    -- Note
-    --
-    -- @shaderStorageImageExtendedFormats@ feature only adds a guarantee of
-    -- format support, which is specified for the whole physical device.
-    -- Therefore enabling or disabling the feature via
-    -- 'Graphics.Vulkan.Core10.Device.createDevice' has no practical effect.
-    --
-    -- To query for additional properties, or if the feature is not supported,
-    -- 'getPhysicalDeviceFormatProperties' and
-    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for
-    -- supported properties of individual formats, as usual rules allow.
-    --
-    -- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R32G32_UINT',
-    -- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R32G32_SINT', and
-    -- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R32G32_SFLOAT' from
-    -- @StorageImageExtendedFormats@ SPIR-V capability, are already covered by
-    -- core Vulkan
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-mandatory-features-32bit mandatory format support>.
-    shaderStorageImageExtendedFormats :: Bool
-  , -- | @shaderStorageImageMultisample@ specifies whether multisampled storage
-    -- images are supported. If this feature is not enabled, images that are
-    -- created with a @usage@ that includes
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT'
-    -- /must/ be created with @samples@ equal to
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'.
-    -- This also specifies whether shader modules /can/ declare the
-    -- @StorageImageMultisample@ capability.
-    shaderStorageImageMultisample :: Bool
-  , -- | @shaderStorageImageReadWithoutFormat@ specifies whether storage images
-    -- require a format qualifier to be specified when reading from storage
-    -- images. If this feature is not enabled, the @OpImageRead@ instruction
-    -- /must/ not have an @OpTypeImage@ of @Unknown@. This also specifies
-    -- whether shader modules /can/ declare the @StorageImageReadWithoutFormat@
-    -- capability.
-    shaderStorageImageReadWithoutFormat :: Bool
-  , -- | @shaderStorageImageWriteWithoutFormat@ specifies whether storage images
-    -- require a format qualifier to be specified when writing to storage
-    -- images. If this feature is not enabled, the @OpImageWrite@ instruction
-    -- /must/ not have an @OpTypeImage@ of @Unknown@. This also specifies
-    -- whether shader modules /can/ declare the
-    -- @StorageImageWriteWithoutFormat@ capability.
-    shaderStorageImageWriteWithoutFormat :: Bool
-  , -- | @shaderUniformBufferArrayDynamicIndexing@ specifies whether arrays of
-    -- uniform buffers /can/ be indexed by /dynamically uniform/ integer
-    -- expressions in shader code. If this feature is not enabled, resources
-    -- with a descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
-    -- /must/ be indexed only by constant integral expressions when aggregated
-    -- into arrays in shader code. This also specifies whether shader modules
-    -- /can/ declare the @UniformBufferArrayDynamicIndexing@ capability.
-    shaderUniformBufferArrayDynamicIndexing :: Bool
-  , -- | @shaderSampledImageArrayDynamicIndexing@ specifies whether arrays of
-    -- samplers or sampled images /can/ be indexed by dynamically uniform
-    -- integer expressions in shader code. If this feature is not enabled,
-    -- resources with a descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
-    -- /must/ be indexed only by constant integral expressions when aggregated
-    -- into arrays in shader code. This also specifies whether shader modules
-    -- /can/ declare the @SampledImageArrayDynamicIndexing@ capability.
-    shaderSampledImageArrayDynamicIndexing :: Bool
-  , -- | @shaderStorageBufferArrayDynamicIndexing@ specifies whether arrays of
-    -- storage buffers /can/ be indexed by dynamically uniform integer
-    -- expressions in shader code. If this feature is not enabled, resources
-    -- with a descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
-    -- /must/ be indexed only by constant integral expressions when aggregated
-    -- into arrays in shader code. This also specifies whether shader modules
-    -- /can/ declare the @StorageBufferArrayDynamicIndexing@ capability.
-    shaderStorageBufferArrayDynamicIndexing :: Bool
-  , -- | @shaderStorageImageArrayDynamicIndexing@ specifies whether arrays of
-    -- storage images /can/ be indexed by dynamically uniform integer
-    -- expressions in shader code. If this feature is not enabled, resources
-    -- with a descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'
-    -- /must/ be indexed only by constant integral expressions when aggregated
-    -- into arrays in shader code. This also specifies whether shader modules
-    -- /can/ declare the @StorageImageArrayDynamicIndexing@ capability.
-    shaderStorageImageArrayDynamicIndexing :: Bool
-  , -- | @shaderClipDistance@ specifies whether clip distances are supported in
-    -- shader code. If this feature is not enabled, any members decorated with
-    -- the @ClipDistance@ built-in decoration /must/ not be read from or
-    -- written to in shader modules. This also specifies whether shader modules
-    -- /can/ declare the @ClipDistance@ capability.
-    shaderClipDistance :: Bool
-  , -- | @shaderCullDistance@ specifies whether cull distances are supported in
-    -- shader code. If this feature is not enabled, any members decorated with
-    -- the @CullDistance@ built-in decoration /must/ not be read from or
-    -- written to in shader modules. This also specifies whether shader modules
-    -- /can/ declare the @CullDistance@ capability.
-    shaderCullDistance :: Bool
-  , -- | @shaderFloat64@ specifies whether 64-bit floats (doubles) are supported
-    -- in shader code. If this feature is not enabled, 64-bit floating-point
-    -- types /must/ not be used in shader code. This also specifies whether
-    -- shader modules /can/ declare the @Float64@ capability. Declaring and
-    -- using 64-bit floats is enabled for all storage classes that SPIR-V
-    -- allows with the @Float64@ capability.
-    shaderFloat64 :: Bool
-  , -- | @shaderInt64@ specifies whether 64-bit integers (signed and unsigned)
-    -- are supported in shader code. If this feature is not enabled, 64-bit
-    -- integer types /must/ not be used in shader code. This also specifies
-    -- whether shader modules /can/ declare the @Int64@ capability. Declaring
-    -- and using 64-bit integers is enabled for all storage classes that SPIR-V
-    -- allows with the @Int64@ capability.
-    shaderInt64 :: Bool
-  , -- | @shaderInt16@ specifies whether 16-bit integers (signed and unsigned)
-    -- are supported in shader code. If this feature is not enabled, 16-bit
-    -- integer types /must/ not be used in shader code. This also specifies
-    -- whether shader modules /can/ declare the @Int16@ capability. However,
-    -- this only enables a subset of the storage classes that SPIR-V allows for
-    -- the @Int16@ SPIR-V capability: Declaring and using 16-bit integers in
-    -- the @Private@, @Workgroup@, and @Function@ storage classes is enabled,
-    -- while declaring them in the interface storage classes (e.g.,
-    -- @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@, and
-    -- @PushConstant@) is not enabled.
-    shaderInt16 :: Bool
-  , -- | @shaderResourceResidency@ specifies whether image operations that return
-    -- resource residency information are supported in shader code. If this
-    -- feature is not enabled, the @OpImageSparse@* instructions /must/ not be
-    -- used in shader code. This also specifies whether shader modules /can/
-    -- declare the @SparseResidency@ capability. The feature requires at least
-    -- one of the @sparseResidency*@ features to be supported.
-    shaderResourceResidency :: Bool
-  , -- | @shaderResourceMinLod@ specifies whether image operations specifying the
-    -- minimum resource LOD are supported in shader code. If this feature is
-    -- not enabled, the @MinLod@ image operand /must/ not be used in shader
-    -- code. This also specifies whether shader modules /can/ declare the
-    -- @MinLod@ capability.
-    shaderResourceMinLod :: Bool
-  , -- | @sparseBinding@ specifies whether resource memory /can/ be managed at
-    -- opaque sparse block level instead of at the object level. If this
-    -- feature is not enabled, resource memory /must/ be bound only on a
-    -- per-object basis using the
-    -- 'Graphics.Vulkan.Core10.MemoryManagement.bindBufferMemory' and
-    -- 'Graphics.Vulkan.Core10.MemoryManagement.bindImageMemory' commands. In
-    -- this case, buffers and images /must/ not be created with
-    -- 'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'
-    -- set in the @flags@ member of the
-    -- 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo' and
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' structures, respectively.
-    -- Otherwise resource memory /can/ be managed as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures Sparse Resource Features>.
-    sparseBinding :: Bool
-  , -- | @sparseResidencyBuffer@ specifies whether the device /can/ access
-    -- partially resident buffers. If this feature is not enabled, buffers
-    -- /must/ not be created with
-    -- 'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'
-    -- set in the @flags@ member of the
-    -- 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo' structure.
-    sparseResidencyBuffer :: Bool
-  , -- | @sparseResidencyImage2D@ specifies whether the device /can/ access
-    -- partially resident 2D images with 1 sample per pixel. If this feature is
-    -- not enabled, images with an @imageType@ of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set
-    -- to 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
-    -- /must/ not be created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
-    -- set in the @flags@ member of the
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' structure.
-    sparseResidencyImage2D :: Bool
-  , -- | @sparseResidencyImage3D@ specifies whether the device /can/ access
-    -- partially resident 3D images. If this feature is not enabled, images
-    -- with an @imageType@ of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' /must/ not be
-    -- created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
-    -- set in the @flags@ member of the
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' structure.
-    sparseResidencyImage3D :: Bool
-  , -- | @sparseResidency2Samples@ specifies whether the physical device /can/
-    -- access partially resident 2D images with 2 samples per pixel. If this
-    -- feature is not enabled, images with an @imageType@ of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set
-    -- to 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_2_BIT'
-    -- /must/ not be created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
-    -- set in the @flags@ member of the
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' structure.
-    sparseResidency2Samples :: Bool
-  , -- | @sparseResidency4Samples@ specifies whether the physical device /can/
-    -- access partially resident 2D images with 4 samples per pixel. If this
-    -- feature is not enabled, images with an @imageType@ of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set
-    -- to 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_4_BIT'
-    -- /must/ not be created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
-    -- set in the @flags@ member of the
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' structure.
-    sparseResidency4Samples :: Bool
-  , -- | @sparseResidency8Samples@ specifies whether the physical device /can/
-    -- access partially resident 2D images with 8 samples per pixel. If this
-    -- feature is not enabled, images with an @imageType@ of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set
-    -- to 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_8_BIT'
-    -- /must/ not be created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
-    -- set in the @flags@ member of the
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' structure.
-    sparseResidency8Samples :: Bool
-  , -- | @sparseResidency16Samples@ specifies whether the physical device /can/
-    -- access partially resident 2D images with 16 samples per pixel. If this
-    -- feature is not enabled, images with an @imageType@ of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set
-    -- to
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_16_BIT'
-    -- /must/ not be created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
-    -- set in the @flags@ member of the
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' structure.
-    sparseResidency16Samples :: Bool
-  , -- | @sparseResidencyAliased@ specifies whether the physical device /can/
-    -- correctly access data aliased into multiple locations. If this feature
-    -- is not enabled, the
-    -- 'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT'
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
-    -- enum values /must/ not be used in @flags@ members of the
-    -- 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo' and
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' structures, respectively.
-    sparseResidencyAliased :: Bool
-  , -- | @variableMultisampleRate@ specifies whether all pipelines that will be
-    -- bound to a command buffer during a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments subpass which uses no attachments>
-    -- /must/ have the same value for
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@.
-    -- If set to 'Graphics.Vulkan.Core10.BaseType.TRUE', the implementation
-    -- supports variable multisample rates in a subpass which uses no
-    -- attachments. If set to 'Graphics.Vulkan.Core10.BaseType.FALSE', then all
-    -- pipelines bound in such a subpass /must/ have the same multisample rate.
-    -- This has no effect in situations where a subpass uses any attachments.
-    variableMultisampleRate :: Bool
-  , -- | @inheritedQueries@ specifies whether a secondary command buffer /may/ be
-    -- executed while a query is active.
-    inheritedQueries :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceFeatures
-
-instance ToCStruct PhysicalDeviceFeatures where
-  withCStruct x f = allocaBytesAligned 220 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (robustBufferAccess))
-    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (fullDrawIndexUint32))
-    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (imageCubeArray))
-    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (independentBlend))
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (geometryShader))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (tessellationShader))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (sampleRateShading))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (dualSrcBlend))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (logicOp))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (multiDrawIndirect))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (drawIndirectFirstInstance))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (depthClamp))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (depthBiasClamp))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (fillModeNonSolid))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (depthBounds))
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (wideLines))
-    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (largePoints))
-    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (alphaToOne))
-    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (multiViewport))
-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (samplerAnisotropy))
-    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (textureCompressionETC2))
-    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (textureCompressionASTC_LDR))
-    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (textureCompressionBC))
-    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (occlusionQueryPrecise))
-    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (pipelineStatisticsQuery))
-    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (vertexPipelineStoresAndAtomics))
-    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (fragmentStoresAndAtomics))
-    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (shaderTessellationAndGeometryPointSize))
-    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (shaderImageGatherExtended))
-    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageExtendedFormats))
-    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageMultisample))
-    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageReadWithoutFormat))
-    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageWriteWithoutFormat))
-    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayDynamicIndexing))
-    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayDynamicIndexing))
-    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayDynamicIndexing))
-    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayDynamicIndexing))
-    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (shaderClipDistance))
-    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (shaderCullDistance))
-    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (shaderFloat64))
-    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (shaderInt64))
-    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (shaderInt16))
-    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (shaderResourceResidency))
-    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (shaderResourceMinLod))
-    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (sparseBinding))
-    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (sparseResidencyBuffer))
-    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (sparseResidencyImage2D))
-    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (sparseResidencyImage3D))
-    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (sparseResidency2Samples))
-    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (sparseResidency4Samples))
-    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (sparseResidency8Samples))
-    poke ((p `plusPtr` 204 :: Ptr Bool32)) (boolToBool32 (sparseResidency16Samples))
-    poke ((p `plusPtr` 208 :: Ptr Bool32)) (boolToBool32 (sparseResidencyAliased))
-    poke ((p `plusPtr` 212 :: Ptr Bool32)) (boolToBool32 (variableMultisampleRate))
-    poke ((p `plusPtr` 216 :: Ptr Bool32)) (boolToBool32 (inheritedQueries))
-    f
-  cStructSize = 220
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 204 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 208 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 212 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 216 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceFeatures where
-  peekCStruct p = do
-    robustBufferAccess <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))
-    fullDrawIndexUint32 <- peek @Bool32 ((p `plusPtr` 4 :: Ptr Bool32))
-    imageCubeArray <- peek @Bool32 ((p `plusPtr` 8 :: Ptr Bool32))
-    independentBlend <- peek @Bool32 ((p `plusPtr` 12 :: Ptr Bool32))
-    geometryShader <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    tessellationShader <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    sampleRateShading <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    dualSrcBlend <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    logicOp <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    multiDrawIndirect <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    drawIndirectFirstInstance <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    depthClamp <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    depthBiasClamp <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
-    fillModeNonSolid <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
-    depthBounds <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
-    wideLines <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
-    largePoints <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))
-    alphaToOne <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))
-    multiViewport <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))
-    samplerAnisotropy <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
-    textureCompressionETC2 <- peek @Bool32 ((p `plusPtr` 80 :: Ptr Bool32))
-    textureCompressionASTC_LDR <- peek @Bool32 ((p `plusPtr` 84 :: Ptr Bool32))
-    textureCompressionBC <- peek @Bool32 ((p `plusPtr` 88 :: Ptr Bool32))
-    occlusionQueryPrecise <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))
-    pipelineStatisticsQuery <- peek @Bool32 ((p `plusPtr` 96 :: Ptr Bool32))
-    vertexPipelineStoresAndAtomics <- peek @Bool32 ((p `plusPtr` 100 :: Ptr Bool32))
-    fragmentStoresAndAtomics <- peek @Bool32 ((p `plusPtr` 104 :: Ptr Bool32))
-    shaderTessellationAndGeometryPointSize <- peek @Bool32 ((p `plusPtr` 108 :: Ptr Bool32))
-    shaderImageGatherExtended <- peek @Bool32 ((p `plusPtr` 112 :: Ptr Bool32))
-    shaderStorageImageExtendedFormats <- peek @Bool32 ((p `plusPtr` 116 :: Ptr Bool32))
-    shaderStorageImageMultisample <- peek @Bool32 ((p `plusPtr` 120 :: Ptr Bool32))
-    shaderStorageImageReadWithoutFormat <- peek @Bool32 ((p `plusPtr` 124 :: Ptr Bool32))
-    shaderStorageImageWriteWithoutFormat <- peek @Bool32 ((p `plusPtr` 128 :: Ptr Bool32))
-    shaderUniformBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 132 :: Ptr Bool32))
-    shaderSampledImageArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 136 :: Ptr Bool32))
-    shaderStorageBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 140 :: Ptr Bool32))
-    shaderStorageImageArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 144 :: Ptr Bool32))
-    shaderClipDistance <- peek @Bool32 ((p `plusPtr` 148 :: Ptr Bool32))
-    shaderCullDistance <- peek @Bool32 ((p `plusPtr` 152 :: Ptr Bool32))
-    shaderFloat64 <- peek @Bool32 ((p `plusPtr` 156 :: Ptr Bool32))
-    shaderInt64 <- peek @Bool32 ((p `plusPtr` 160 :: Ptr Bool32))
-    shaderInt16 <- peek @Bool32 ((p `plusPtr` 164 :: Ptr Bool32))
-    shaderResourceResidency <- peek @Bool32 ((p `plusPtr` 168 :: Ptr Bool32))
-    shaderResourceMinLod <- peek @Bool32 ((p `plusPtr` 172 :: Ptr Bool32))
-    sparseBinding <- peek @Bool32 ((p `plusPtr` 176 :: Ptr Bool32))
-    sparseResidencyBuffer <- peek @Bool32 ((p `plusPtr` 180 :: Ptr Bool32))
-    sparseResidencyImage2D <- peek @Bool32 ((p `plusPtr` 184 :: Ptr Bool32))
-    sparseResidencyImage3D <- peek @Bool32 ((p `plusPtr` 188 :: Ptr Bool32))
-    sparseResidency2Samples <- peek @Bool32 ((p `plusPtr` 192 :: Ptr Bool32))
-    sparseResidency4Samples <- peek @Bool32 ((p `plusPtr` 196 :: Ptr Bool32))
-    sparseResidency8Samples <- peek @Bool32 ((p `plusPtr` 200 :: Ptr Bool32))
-    sparseResidency16Samples <- peek @Bool32 ((p `plusPtr` 204 :: Ptr Bool32))
-    sparseResidencyAliased <- peek @Bool32 ((p `plusPtr` 208 :: Ptr Bool32))
-    variableMultisampleRate <- peek @Bool32 ((p `plusPtr` 212 :: Ptr Bool32))
-    inheritedQueries <- peek @Bool32 ((p `plusPtr` 216 :: Ptr Bool32))
-    pure $ PhysicalDeviceFeatures
-             (bool32ToBool robustBufferAccess) (bool32ToBool fullDrawIndexUint32) (bool32ToBool imageCubeArray) (bool32ToBool independentBlend) (bool32ToBool geometryShader) (bool32ToBool tessellationShader) (bool32ToBool sampleRateShading) (bool32ToBool dualSrcBlend) (bool32ToBool logicOp) (bool32ToBool multiDrawIndirect) (bool32ToBool drawIndirectFirstInstance) (bool32ToBool depthClamp) (bool32ToBool depthBiasClamp) (bool32ToBool fillModeNonSolid) (bool32ToBool depthBounds) (bool32ToBool wideLines) (bool32ToBool largePoints) (bool32ToBool alphaToOne) (bool32ToBool multiViewport) (bool32ToBool samplerAnisotropy) (bool32ToBool textureCompressionETC2) (bool32ToBool textureCompressionASTC_LDR) (bool32ToBool textureCompressionBC) (bool32ToBool occlusionQueryPrecise) (bool32ToBool pipelineStatisticsQuery) (bool32ToBool vertexPipelineStoresAndAtomics) (bool32ToBool fragmentStoresAndAtomics) (bool32ToBool shaderTessellationAndGeometryPointSize) (bool32ToBool shaderImageGatherExtended) (bool32ToBool shaderStorageImageExtendedFormats) (bool32ToBool shaderStorageImageMultisample) (bool32ToBool shaderStorageImageReadWithoutFormat) (bool32ToBool shaderStorageImageWriteWithoutFormat) (bool32ToBool shaderUniformBufferArrayDynamicIndexing) (bool32ToBool shaderSampledImageArrayDynamicIndexing) (bool32ToBool shaderStorageBufferArrayDynamicIndexing) (bool32ToBool shaderStorageImageArrayDynamicIndexing) (bool32ToBool shaderClipDistance) (bool32ToBool shaderCullDistance) (bool32ToBool shaderFloat64) (bool32ToBool shaderInt64) (bool32ToBool shaderInt16) (bool32ToBool shaderResourceResidency) (bool32ToBool shaderResourceMinLod) (bool32ToBool sparseBinding) (bool32ToBool sparseResidencyBuffer) (bool32ToBool sparseResidencyImage2D) (bool32ToBool sparseResidencyImage3D) (bool32ToBool sparseResidency2Samples) (bool32ToBool sparseResidency4Samples) (bool32ToBool sparseResidency8Samples) (bool32ToBool sparseResidency16Samples) (bool32ToBool sparseResidencyAliased) (bool32ToBool variableMultisampleRate) (bool32ToBool inheritedQueries)
-
-instance Storable PhysicalDeviceFeatures where
-  sizeOf ~_ = 220
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceFeatures where
-  zero = PhysicalDeviceFeatures
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceSparseProperties - Structure specifying physical device
--- sparse memory properties
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32', 'PhysicalDeviceProperties'
-data PhysicalDeviceSparseProperties = PhysicalDeviceSparseProperties
-  { -- | @residencyStandard2DBlockShape@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE' if the physical device will
-    -- access all single-sample 2D sparse resources using the standard sparse
-    -- image block shapes (based on image format), as described in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle Standard Sparse Image Block Shapes (Single Sample)>
-    -- table. If this property is not supported the value returned in the
-    -- @imageGranularity@ member of the
-    -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'
-    -- structure for single-sample 2D images is not /required/ to match the
-    -- standard sparse image block dimensions listed in the table.
-    residencyStandard2DBlockShape :: Bool
-  , -- | @residencyStandard2DMultisampleBlockShape@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE' if the physical device will
-    -- access all multisample 2D sparse resources using the standard sparse
-    -- image block shapes (based on image format), as described in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapesmsaa Standard Sparse Image Block Shapes (MSAA)>
-    -- table. If this property is not supported, the value returned in the
-    -- @imageGranularity@ member of the
-    -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'
-    -- structure for multisample 2D images is not /required/ to match the
-    -- standard sparse image block dimensions listed in the table.
-    residencyStandard2DMultisampleBlockShape :: Bool
-  , -- | @residencyStandard3DBlockShape@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE' if the physical device will
-    -- access all 3D sparse resources using the standard sparse image block
-    -- shapes (based on image format), as described in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle Standard Sparse Image Block Shapes (Single Sample)>
-    -- table. If this property is not supported, the value returned in the
-    -- @imageGranularity@ member of the
-    -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'
-    -- structure for 3D images is not /required/ to match the standard sparse
-    -- image block dimensions listed in the table.
-    residencyStandard3DBlockShape :: Bool
-  , -- | @residencyAlignedMipSize@ is 'Graphics.Vulkan.Core10.BaseType.TRUE' if
-    -- images with mip level dimensions that are not integer multiples of the
-    -- corresponding dimensions of the sparse image block /may/ be placed in
-    -- the mip tail. If this property is not reported, only mip levels with
-    -- dimensions smaller than the @imageGranularity@ member of the
-    -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'
-    -- structure will be placed in the mip tail. If this property is reported
-    -- the implementation is allowed to return
-    -- 'Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits.SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT'
-    -- in the @flags@ member of
-    -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties',
-    -- indicating that mip level dimensions that are not integer multiples of
-    -- the corresponding dimensions of the sparse image block will be placed in
-    -- the mip tail.
-    residencyAlignedMipSize :: Bool
-  , -- | @residencyNonResidentStrict@ specifies whether the physical device /can/
-    -- consistently access non-resident regions of a resource. If this property
-    -- is 'Graphics.Vulkan.Core10.BaseType.TRUE', access to non-resident
-    -- regions of resources will be guaranteed to return values as if the
-    -- resource were populated with 0; writes to non-resident regions will be
-    -- discarded.
-    residencyNonResidentStrict :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceSparseProperties
-
-instance ToCStruct PhysicalDeviceSparseProperties where
-  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceSparseProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (residencyStandard2DBlockShape))
-    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (residencyStandard2DMultisampleBlockShape))
-    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (residencyStandard3DBlockShape))
-    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (residencyAlignedMipSize))
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (residencyNonResidentStrict))
-    f
-  cStructSize = 20
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceSparseProperties where
-  peekCStruct p = do
-    residencyStandard2DBlockShape <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))
-    residencyStandard2DMultisampleBlockShape <- peek @Bool32 ((p `plusPtr` 4 :: Ptr Bool32))
-    residencyStandard3DBlockShape <- peek @Bool32 ((p `plusPtr` 8 :: Ptr Bool32))
-    residencyAlignedMipSize <- peek @Bool32 ((p `plusPtr` 12 :: Ptr Bool32))
-    residencyNonResidentStrict <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceSparseProperties
-             (bool32ToBool residencyStandard2DBlockShape) (bool32ToBool residencyStandard2DMultisampleBlockShape) (bool32ToBool residencyStandard3DBlockShape) (bool32ToBool residencyAlignedMipSize) (bool32ToBool residencyNonResidentStrict)
-
-instance Storable PhysicalDeviceSparseProperties where
-  sizeOf ~_ = 20
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceSparseProperties where
-  zero = PhysicalDeviceSparseProperties
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceLimits - Structure reporting implementation-dependent
--- physical device limits
---
--- = Members
---
--- The 'PhysicalDeviceLimits' are properties of the physical device. These
--- are available in the @limits@ member of the 'PhysicalDeviceProperties'
--- structure which is returned from 'getPhysicalDeviceProperties'.
---
--- = Description
---
--- [1]
---     For all bitmasks of
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
---     the sample count limits defined above represent the minimum
---     supported sample counts for each image type. Individual images /may/
---     support additional sample counts, which are queried using
---     'getPhysicalDeviceImageFormatProperties' as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-supported-sample-counts Supported Sample Counts>.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'PhysicalDeviceProperties',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags'
-data PhysicalDeviceLimits = PhysicalDeviceLimits
-  { -- | @maxImageDimension1D@ is the maximum dimension (@width@) supported for
-    -- all images created with an @imageType@ of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'.
-    maxImageDimension1D :: Word32
-  , -- | @maxImageDimension2D@ is the maximum dimension (@width@ or @height@)
-    -- supported for all images created with an @imageType@ of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and without
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
-    -- set in @flags@.
-    maxImageDimension2D :: Word32
-  , -- | @maxImageDimension3D@ is the maximum dimension (@width@, @height@, or
-    -- @depth@) supported for all images created with an @imageType@ of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'.
-    maxImageDimension3D :: Word32
-  , -- | @maxImageDimensionCube@ is the maximum dimension (@width@ or @height@)
-    -- supported for all images created with an @imageType@ of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
-    -- set in @flags@.
-    maxImageDimensionCube :: Word32
-  , -- | @maxImageArrayLayers@ is the maximum number of layers (@arrayLayers@)
-    -- for an image.
-    maxImageArrayLayers :: Word32
-  , -- | @maxTexelBufferElements@ is the maximum number of addressable texels for
-    -- a buffer view created on a buffer which was created with the
-    -- 'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT'
-    -- set in the @usage@ member of the
-    -- 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo' structure.
-    maxTexelBufferElements :: Word32
-  , -- | @maxUniformBufferRange@ is the maximum value that /can/ be specified in
-    -- the @range@ member of any
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structures
-    -- passed to a call to
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.updateDescriptorSets' for
-    -- descriptors of type
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'.
-    maxUniformBufferRange :: Word32
-  , -- | @maxStorageBufferRange@ is the maximum value that /can/ be specified in
-    -- the @range@ member of any
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structures
-    -- passed to a call to
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.updateDescriptorSets' for
-    -- descriptors of type
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'.
-    maxStorageBufferRange :: Word32
-  , -- | @maxPushConstantsSize@ is the maximum size, in bytes, of the pool of
-    -- push constant memory. For each of the push constant ranges indicated by
-    -- the @pPushConstantRanges@ member of the
-    -- 'Graphics.Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'
-    -- structure, (@offset@ + @size@) /must/ be less than or equal to this
-    -- limit.
-    maxPushConstantsSize :: Word32
-  , -- | @maxMemoryAllocationCount@ is the maximum number of device memory
-    -- allocations, as created by
-    -- 'Graphics.Vulkan.Core10.Memory.allocateMemory', which /can/
-    -- simultaneously exist.
-    maxMemoryAllocationCount :: Word32
-  , -- | @maxSamplerAllocationCount@ is the maximum number of sampler objects, as
-    -- created by 'Graphics.Vulkan.Core10.Sampler.createSampler', which /can/
-    -- simultaneously exist on a device.
-    maxSamplerAllocationCount :: Word32
-  , -- | @bufferImageGranularity@ is the granularity, in bytes, at which buffer
-    -- or linear image resources, and optimal image resources /can/ be bound to
-    -- adjacent offsets in the same
-    -- 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object without aliasing.
-    -- See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-bufferimagegranularity Buffer-Image Granularity>
-    -- for more details.
-    bufferImageGranularity :: DeviceSize
-  , -- | @sparseAddressSpaceSize@ is the total amount of address space available,
-    -- in bytes, for sparse memory resources. This is an upper bound on the sum
-    -- of the size of all sparse resources, regardless of whether any memory is
-    -- bound to them.
-    sparseAddressSpaceSize :: DeviceSize
-  , -- | @maxBoundDescriptorSets@ is the maximum number of descriptor sets that
-    -- /can/ be simultaneously used by a pipeline. All
-    -- 'Graphics.Vulkan.Core10.Handles.DescriptorSet' decorations in shader
-    -- modules /must/ have a value less than @maxBoundDescriptorSets@. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sets>.
-    maxBoundDescriptorSets :: Word32
-  , -- | @maxPerStageDescriptorSamplers@ is the maximum number of samplers that
-    -- /can/ be accessible to a single shader stage in a pipeline layout.
-    -- Descriptors with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. A descriptor is accessible to a shader
-    -- stage when the @stageFlags@ member of the
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding'
-    -- structure has the bit for that shader stage set. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampler>
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>.
-    maxPerStageDescriptorSamplers :: Word32
-  , -- | @maxPerStageDescriptorUniformBuffers@ is the maximum number of uniform
-    -- buffers that /can/ be accessible to a single shader stage in a pipeline
-    -- layout. Descriptors with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. A descriptor is accessible to a shader
-    -- stage when the @stageFlags@ member of the
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding'
-    -- structure has the bit for that shader stage set. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer>
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.
-    maxPerStageDescriptorUniformBuffers :: Word32
-  , -- | @maxPerStageDescriptorStorageBuffers@ is the maximum number of storage
-    -- buffers that /can/ be accessible to a single shader stage in a pipeline
-    -- layout. Descriptors with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. A descriptor is accessible to a
-    -- pipeline shader stage when the @stageFlags@ member of the
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding'
-    -- structure has the bit for that shader stage set. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer>
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.
-    maxPerStageDescriptorStorageBuffers :: Word32
-  , -- | @maxPerStageDescriptorSampledImages@ is the maximum number of sampled
-    -- images that /can/ be accessible to a single shader stage in a pipeline
-    -- layout. Descriptors with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. A descriptor is accessible to a
-    -- pipeline shader stage when the @stageFlags@ member of the
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding'
-    -- structure has the bit for that shader stage set. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>,
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage>,
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer>.
-    maxPerStageDescriptorSampledImages :: Word32
-  , -- | @maxPerStageDescriptorStorageImages@ is the maximum number of storage
-    -- images that /can/ be accessible to a single shader stage in a pipeline
-    -- layout. Descriptors with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. A descriptor is accessible to a
-    -- pipeline shader stage when the @stageFlags@ member of the
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding'
-    -- structure has the bit for that shader stage set. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage>,
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer>.
-    maxPerStageDescriptorStorageImages :: Word32
-  , -- | @maxPerStageDescriptorInputAttachments@ is the maximum number of input
-    -- attachments that /can/ be accessible to a single shader stage in a
-    -- pipeline layout. Descriptors with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. A descriptor is accessible to a
-    -- pipeline shader stage when the @stageFlags@ member of the
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding'
-    -- structure has the bit for that shader stage set. These are only
-    -- supported for the fragment stage. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment>.
-    maxPerStageDescriptorInputAttachments :: Word32
-  , -- | @maxPerStageResources@ is the maximum number of resources that /can/ be
-    -- accessible to a single shader stage in a pipeline layout. Descriptors
-    -- with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. For the fragment shader stage the
-    -- framebuffer color attachments also count against this limit.
-    maxPerStageResources :: Word32
-  , -- | @maxDescriptorSetSamplers@ is the maximum number of samplers that /can/
-    -- be included in a pipeline layout. Descriptors with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampler>
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>.
-    maxDescriptorSetSamplers :: Word32
-  , -- | @maxDescriptorSetUniformBuffers@ is the maximum number of uniform
-    -- buffers that /can/ be included in a pipeline layout. Descriptors with a
-    -- type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer>
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.
-    maxDescriptorSetUniformBuffers :: Word32
-  , -- | @maxDescriptorSetUniformBuffersDynamic@ is the maximum number of dynamic
-    -- uniform buffers that /can/ be included in a pipeline layout. Descriptors
-    -- with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.
-    maxDescriptorSetUniformBuffersDynamic :: Word32
-  , -- | @maxDescriptorSetStorageBuffers@ is the maximum number of storage
-    -- buffers that /can/ be included in a pipeline layout. Descriptors with a
-    -- type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer>
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.
-    maxDescriptorSetStorageBuffers :: Word32
-  , -- | @maxDescriptorSetStorageBuffersDynamic@ is the maximum number of dynamic
-    -- storage buffers that /can/ be included in a pipeline layout. Descriptors
-    -- with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.
-    maxDescriptorSetStorageBuffersDynamic :: Word32
-  , -- | @maxDescriptorSetSampledImages@ is the maximum number of sampled images
-    -- that /can/ be included in a pipeline layout. Descriptors with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>,
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage>,
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer>.
-    maxDescriptorSetSampledImages :: Word32
-  , -- | @maxDescriptorSetStorageImages@ is the maximum number of storage images
-    -- that /can/ be included in a pipeline layout. Descriptors with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage>,
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer>.
-    maxDescriptorSetStorageImages :: Word32
-  , -- | @maxDescriptorSetInputAttachments@ is the maximum number of input
-    -- attachments that /can/ be included in a pipeline layout. Descriptors
-    -- with a type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
-    -- count against this limit. Only descriptors in descriptor set layouts
-    -- created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment>.
-    maxDescriptorSetInputAttachments :: Word32
-  , -- | @maxVertexInputAttributes@ is the maximum number of vertex input
-    -- attributes that /can/ be specified for a graphics pipeline. These are
-    -- described in the array of
-    -- 'Graphics.Vulkan.Core10.Pipeline.VertexInputAttributeDescription'
-    -- structures that are provided at graphics pipeline creation time via the
-    -- @pVertexAttributeDescriptions@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo'
-    -- structure. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-attrib>
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.
-    maxVertexInputAttributes :: Word32
-  , -- | @maxVertexInputBindings@ is the maximum number of vertex buffers that
-    -- /can/ be specified for providing vertex attributes to a graphics
-    -- pipeline. These are described in the array of
-    -- 'Graphics.Vulkan.Core10.Pipeline.VertexInputBindingDescription'
-    -- structures that are provided at graphics pipeline creation time via the
-    -- @pVertexBindingDescriptions@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo'
-    -- structure. The @binding@ member of
-    -- 'Graphics.Vulkan.Core10.Pipeline.VertexInputBindingDescription' /must/
-    -- be less than this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.
-    maxVertexInputBindings :: Word32
-  , -- | @maxVertexInputAttributeOffset@ is the maximum vertex input attribute
-    -- offset that /can/ be added to the vertex input binding stride. The
-    -- @offset@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.VertexInputAttributeDescription'
-    -- structure /must/ be less than or equal to this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.
-    maxVertexInputAttributeOffset :: Word32
-  , -- | @maxVertexInputBindingStride@ is the maximum vertex input binding stride
-    -- that /can/ be specified in a vertex input binding. The @stride@ member
-    -- of the 'Graphics.Vulkan.Core10.Pipeline.VertexInputBindingDescription'
-    -- structure /must/ be less than or equal to this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.
-    maxVertexInputBindingStride :: Word32
-  , -- | @maxVertexOutputComponents@ is the maximum number of components of
-    -- output variables which /can/ be output by a vertex shader. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-vertex>.
-    maxVertexOutputComponents :: Word32
-  , -- | @maxTessellationGenerationLevel@ is the maximum tessellation generation
-    -- level supported by the fixed-function tessellation primitive generator.
-    -- See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>.
-    maxTessellationGenerationLevel :: Word32
-  , -- | @maxTessellationPatchSize@ is the maximum patch size, in vertices, of
-    -- patches that /can/ be processed by the tessellation control shader and
-    -- tessellation primitive generator. The @patchControlPoints@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo'
-    -- structure specified at pipeline creation time and the value provided in
-    -- the @OutputVertices@ execution mode of shader modules /must/ be less
-    -- than or equal to this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>.
-    maxTessellationPatchSize :: Word32
-  , -- | @maxTessellationControlPerVertexInputComponents@ is the maximum number
-    -- of components of input variables which /can/ be provided as per-vertex
-    -- inputs to the tessellation control shader stage.
-    maxTessellationControlPerVertexInputComponents :: Word32
-  , -- | @maxTessellationControlPerVertexOutputComponents@ is the maximum number
-    -- of components of per-vertex output variables which /can/ be output from
-    -- the tessellation control shader stage.
-    maxTessellationControlPerVertexOutputComponents :: Word32
-  , -- | @maxTessellationControlPerPatchOutputComponents@ is the maximum number
-    -- of components of per-patch output variables which /can/ be output from
-    -- the tessellation control shader stage.
-    maxTessellationControlPerPatchOutputComponents :: Word32
-  , -- | @maxTessellationControlTotalOutputComponents@ is the maximum total
-    -- number of components of per-vertex and per-patch output variables which
-    -- /can/ be output from the tessellation control shader stage.
-    maxTessellationControlTotalOutputComponents :: Word32
-  , -- | @maxTessellationEvaluationInputComponents@ is the maximum number of
-    -- components of input variables which /can/ be provided as per-vertex
-    -- inputs to the tessellation evaluation shader stage.
-    maxTessellationEvaluationInputComponents :: Word32
-  , -- | @maxTessellationEvaluationOutputComponents@ is the maximum number of
-    -- components of per-vertex output variables which /can/ be output from the
-    -- tessellation evaluation shader stage.
-    maxTessellationEvaluationOutputComponents :: Word32
-  , -- | @maxGeometryShaderInvocations@ is the maximum invocation count supported
-    -- for instanced geometry shaders. The value provided in the @Invocations@
-    -- execution mode of shader modules /must/ be less than or equal to this
-    -- limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry>.
-    maxGeometryShaderInvocations :: Word32
-  , -- | @maxGeometryInputComponents@ is the maximum number of components of
-    -- input variables which /can/ be provided as inputs to the geometry shader
-    -- stage.
-    maxGeometryInputComponents :: Word32
-  , -- | @maxGeometryOutputComponents@ is the maximum number of components of
-    -- output variables which /can/ be output from the geometry shader stage.
-    maxGeometryOutputComponents :: Word32
-  , -- | @maxGeometryOutputVertices@ is the maximum number of vertices which
-    -- /can/ be emitted by any geometry shader.
-    maxGeometryOutputVertices :: Word32
-  , -- | @maxGeometryTotalOutputComponents@ is the maximum total number of
-    -- components of output, across all emitted vertices, which /can/ be output
-    -- from the geometry shader stage.
-    maxGeometryTotalOutputComponents :: Word32
-  , -- | @maxFragmentInputComponents@ is the maximum number of components of
-    -- input variables which /can/ be provided as inputs to the fragment shader
-    -- stage.
-    maxFragmentInputComponents :: Word32
-  , -- | @maxFragmentOutputAttachments@ is the maximum number of output
-    -- attachments which /can/ be written to by the fragment shader stage.
-    maxFragmentOutputAttachments :: Word32
-  , -- | @maxFragmentDualSrcAttachments@ is the maximum number of output
-    -- attachments which /can/ be written to by the fragment shader stage when
-    -- blending is enabled and one of the dual source blend modes is in use.
-    -- See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-dsb>
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dualSrcBlend>.
-    maxFragmentDualSrcAttachments :: Word32
-  , -- | @maxFragmentCombinedOutputResources@ is the total number of storage
-    -- buffers, storage images, and output buffers which /can/ be used in the
-    -- fragment shader stage.
-    maxFragmentCombinedOutputResources :: Word32
-  , -- | @maxComputeSharedMemorySize@ is the maximum total storage size, in
-    -- bytes, available for variables declared with the @Workgroup@ storage
-    -- class in shader modules (or with the @shared@ storage qualifier in GLSL)
-    -- in the compute shader stage. The amount of storage consumed by the
-    -- variables declared with the @Workgroup@ storage class is
-    -- implementation-dependent. However, the amount of storage consumed may
-    -- not exceed the largest block size that would be obtained if all active
-    -- variables declared with @Workgroup@ storage class were assigned offsets
-    -- in an arbitrary order by successively taking the smallest valid offset
-    -- according to the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Storage Buffer Layout>
-    -- rules. (This is equivalent to using the GLSL std430 layout rules.)
-    maxComputeSharedMemorySize :: Word32
-  , -- | @maxComputeWorkGroupCount@[3] is the maximum number of local workgroups
-    -- that /can/ be dispatched by a single dispatch command. These three
-    -- values represent the maximum number of local workgroups for the X, Y,
-    -- and Z dimensions, respectively. The workgroup count parameters to the
-    -- dispatch commands /must/ be less than or equal to the corresponding
-    -- limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dispatch>.
-    maxComputeWorkGroupCount :: (Word32, Word32, Word32)
-  , -- | @maxComputeWorkGroupInvocations@ is the maximum total number of compute
-    -- shader invocations in a single local workgroup. The product of the X, Y,
-    -- and Z sizes, as specified by the @LocalSize@ execution mode in shader
-    -- modules or by the object decorated by the @WorkgroupSize@ decoration,
-    -- /must/ be less than or equal to this limit.
-    maxComputeWorkGroupInvocations :: Word32
-  , -- | @maxComputeWorkGroupSize@[3] is the maximum size of a local compute
-    -- workgroup, per dimension. These three values represent the maximum local
-    -- workgroup size in the X, Y, and Z dimensions, respectively. The @x@,
-    -- @y@, and @z@ sizes, as specified by the @LocalSize@ execution mode or by
-    -- the object decorated by the @WorkgroupSize@ decoration in shader
-    -- modules, /must/ be less than or equal to the corresponding limit.
-    maxComputeWorkGroupSize :: (Word32, Word32, Word32)
-  , -- | @subPixelPrecisionBits@ is the number of bits of subpixel precision in
-    -- framebuffer coordinates xf and yf. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast>.
-    subPixelPrecisionBits :: Word32
-  , -- | @subTexelPrecisionBits@ is the number of bits of precision in the
-    -- division along an axis of an image used for minification and
-    -- magnification filters. 2@subTexelPrecisionBits@ is the actual number of
-    -- divisions along each axis of the image represented. Sub-texel values
-    -- calculated during image sampling will snap to these locations when
-    -- generating the filtered results.
-    subTexelPrecisionBits :: Word32
-  , -- | @mipmapPrecisionBits@ is the number of bits of division that the LOD
-    -- calculation for mipmap fetching get snapped to when determining the
-    -- contribution from each mip level to the mip filtered results.
-    -- 2@mipmapPrecisionBits@ is the actual number of divisions.
-    mipmapPrecisionBits :: Word32
-  , -- | @maxDrawIndexedIndexValue@ is the maximum index value that /can/ be used
-    -- for indexed draw calls when using 32-bit indices. This excludes the
-    -- primitive restart index value of 0xFFFFFFFF. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fullDrawIndexUint32 fullDrawIndexUint32>.
-    maxDrawIndexedIndexValue :: Word32
-  , -- | @maxDrawIndirectCount@ is the maximum draw count that is supported for
-    -- indirect draw calls. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multiDrawIndirect>.
-    maxDrawIndirectCount :: Word32
-  , -- | @maxSamplerLodBias@ is the maximum absolute sampler LOD bias. The sum of
-    -- the @mipLodBias@ member of the
-    -- 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo' structure and the
-    -- @Bias@ operand of image sampling operations in shader modules (or 0 if
-    -- no @Bias@ operand is provided to an image sampling operation) are
-    -- clamped to the range [-@maxSamplerLodBias@,+@maxSamplerLodBias@]. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-mipLodBias>.
-    maxSamplerLodBias :: Float
-  , -- | @maxSamplerAnisotropy@ is the maximum degree of sampler anisotropy. The
-    -- maximum degree of anisotropic filtering used for an image sampling
-    -- operation is the minimum of the @maxAnisotropy@ member of the
-    -- 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo' structure and this
-    -- limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-maxAnisotropy>.
-    maxSamplerAnisotropy :: Float
-  , -- | @maxViewports@ is the maximum number of active viewports. The
-    -- @viewportCount@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'
-    -- structure that is provided at pipeline creation /must/ be less than or
-    -- equal to this limit.
-    maxViewports :: Word32
-  , -- | @maxViewportDimensions@[2] are the maximum viewport dimensions in the X
-    -- (width) and Y (height) dimensions, respectively. The maximum viewport
-    -- dimensions /must/ be greater than or equal to the largest image which
-    -- /can/ be created and used as a framebuffer attachment. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-viewport Controlling the Viewport>.
-    maxViewportDimensions :: (Word32, Word32)
-  , -- | @viewportBoundsRange@[2] is the [minimum, maximum] range that the
-    -- corners of a viewport /must/ be contained in. This range /must/ be at
-    -- least [-2 × @size@, 2 × @size@ - 1], where @size@ =
-    -- max(@maxViewportDimensions@[0], @maxViewportDimensions@[1]). See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-viewport Controlling the Viewport>.
-    --
-    -- Note
-    --
-    -- The intent of the @viewportBoundsRange@ limit is to allow a maximum
-    -- sized viewport to be arbitrarily shifted relative to the output target
-    -- as long as at least some portion intersects. This would give a bounds
-    -- limit of [-@size@ + 1, 2 × @size@ - 1] which would allow all possible
-    -- non-empty-set intersections of the output target and the viewport. Since
-    -- these numbers are typically powers of two, picking the signed number
-    -- range using the smallest possible number of bits ends up with the
-    -- specified range.
-    viewportBoundsRange :: (Float, Float)
-  , -- | @viewportSubPixelBits@ is the number of bits of subpixel precision for
-    -- viewport bounds. The subpixel precision that floating-point viewport
-    -- bounds are interpreted at is given by this limit.
-    viewportSubPixelBits :: Word32
-  , -- | @minMemoryMapAlignment@ is the minimum /required/ alignment, in bytes,
-    -- of host visible memory allocations within the host address space. When
-    -- mapping a memory allocation with
-    -- 'Graphics.Vulkan.Core10.Memory.mapMemory', subtracting @offset@ bytes
-    -- from the returned pointer will always produce an integer multiple of
-    -- this limit. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-hostaccess>.
-    minMemoryMapAlignment :: Word64
-  , -- | @minTexelBufferOffsetAlignment@ is the minimum /required/ alignment, in
-    -- bytes, for the @offset@ member of the
-    -- 'Graphics.Vulkan.Core10.BufferView.BufferViewCreateInfo' structure for
-    -- texel buffers. If
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>
-    -- is enabled, this limit is equivalent to the maximum of the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-uniformTexelBufferOffsetAlignmentBytes uniformTexelBufferOffsetAlignmentBytes>
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-storageTexelBufferOffsetAlignmentBytes storageTexelBufferOffsetAlignmentBytes>
-    -- members of
-    -- 'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
-    -- but smaller alignment is optionally: allowed by
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-storageTexelBufferOffsetSingleTexelAlignment storageTexelBufferOffsetSingleTexelAlignment>
-    -- and
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-uniformTexelBufferOffsetSingleTexelAlignment uniformTexelBufferOffsetSingleTexelAlignment>.
-    -- If
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>
-    -- is not enabled,
-    -- 'Graphics.Vulkan.Core10.BufferView.BufferViewCreateInfo'::@offset@
-    -- /must/ be a multiple of this value.
-    minTexelBufferOffsetAlignment :: DeviceSize
-  , -- | @minUniformBufferOffsetAlignment@ is the minimum /required/ alignment,
-    -- in bytes, for the @offset@ member of the
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structure
-    -- for uniform buffers. When a descriptor of type
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
-    -- is updated, the @offset@ /must/ be an integer multiple of this limit.
-    -- Similarly, dynamic offsets for uniform buffers /must/ be multiples of
-    -- this limit.
-    minUniformBufferOffsetAlignment :: DeviceSize
-  , -- | @minStorageBufferOffsetAlignment@ is the minimum /required/ alignment,
-    -- in bytes, for the @offset@ member of the
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structure
-    -- for storage buffers. When a descriptor of type
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
-    -- is updated, the @offset@ /must/ be an integer multiple of this limit.
-    -- Similarly, dynamic offsets for storage buffers /must/ be multiples of
-    -- this limit.
-    minStorageBufferOffsetAlignment :: DeviceSize
-  , -- | @minTexelOffset@ is the minimum offset value for the @ConstOffset@ image
-    -- operand of any of the @OpImageSample@* or @OpImageFetch@* image
-    -- instructions.
-    minTexelOffset :: Int32
-  , -- | @maxTexelOffset@ is the maximum offset value for the @ConstOffset@ image
-    -- operand of any of the @OpImageSample@* or @OpImageFetch@* image
-    -- instructions.
-    maxTexelOffset :: Word32
-  , -- | @minTexelGatherOffset@ is the minimum offset value for the @Offset@,
-    -- @ConstOffset@, or @ConstOffsets@ image operands of any of the
-    -- @OpImage@*@Gather@ image instructions.
-    minTexelGatherOffset :: Int32
-  , -- | @maxTexelGatherOffset@ is the maximum offset value for the @Offset@,
-    -- @ConstOffset@, or @ConstOffsets@ image operands of any of the
-    -- @OpImage@*@Gather@ image instructions.
-    maxTexelGatherOffset :: Word32
-  , -- | @minInterpolationOffset@ is the minimum negative offset value for the
-    -- @offset@ operand of the @InterpolateAtOffset@ extended instruction.
-    minInterpolationOffset :: Float
-  , -- | @maxInterpolationOffset@ is the maximum positive offset value for the
-    -- @offset@ operand of the @InterpolateAtOffset@ extended instruction.
-    maxInterpolationOffset :: Float
-  , -- | @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.
-    subPixelInterpolationOffsetBits :: Word32
-  , -- | @maxFramebufferWidth@ is the maximum width for a framebuffer. The
-    -- @width@ member of the
-    -- 'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo' structure /must/ be
-    -- less than or equal to this limit.
-    maxFramebufferWidth :: Word32
-  , -- | @maxFramebufferHeight@ is the maximum height for a framebuffer. The
-    -- @height@ member of the
-    -- 'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo' structure /must/ be
-    -- less than or equal to this limit.
-    maxFramebufferHeight :: Word32
-  , -- | @maxFramebufferLayers@ is the maximum layer count for a layered
-    -- framebuffer. The @layers@ member of the
-    -- 'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo' structure /must/ be
-    -- less than or equal to this limit.
-    maxFramebufferLayers :: Word32
-  , -- | @framebufferColorSampleCounts@ is a bitmask1 of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- 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.
-    framebufferColorSampleCounts :: SampleCountFlags
-  , -- | @framebufferDepthSampleCounts@ is a bitmask1 of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- indicating the supported depth sample counts for all framebuffer
-    -- depth\/stencil attachments, when the format includes a depth component.
-    framebufferDepthSampleCounts :: SampleCountFlags
-  , -- | @framebufferStencilSampleCounts@ is a bitmask1 of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- indicating the supported stencil sample counts for all framebuffer
-    -- depth\/stencil attachments, when the format includes a stencil
-    -- component.
-    framebufferStencilSampleCounts :: SampleCountFlags
-  , -- | @framebufferNoAttachmentsSampleCounts@ is a bitmask1 of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- indicating the supported sample counts for a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments subpass which uses no attachments>.
-    framebufferNoAttachmentsSampleCounts :: SampleCountFlags
-  , -- | @maxColorAttachments@ is the maximum number of color attachments that
-    -- /can/ be used by a subpass in a render pass. The @colorAttachmentCount@
-    -- member of the 'Graphics.Vulkan.Core10.Pass.SubpassDescription' structure
-    -- /must/ be less than or equal to this limit.
-    maxColorAttachments :: Word32
-  , -- | @sampledImageColorSampleCounts@ is a bitmask1 of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- indicating the sample counts supported for all 2D images created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@
-    -- containing
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT',
-    -- and a non-integer color format.
-    sampledImageColorSampleCounts :: SampleCountFlags
-  , -- | @sampledImageIntegerSampleCounts@ is a bitmask1 of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- indicating the sample counts supported for all 2D images created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@
-    -- containing
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT',
-    -- and an integer color format.
-    sampledImageIntegerSampleCounts :: SampleCountFlags
-  , -- | @sampledImageDepthSampleCounts@ is a bitmask1 of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- indicating the sample counts supported for all 2D images created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@
-    -- containing
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT',
-    -- and a depth format.
-    sampledImageDepthSampleCounts :: SampleCountFlags
-  , -- | @sampledImageStencilSampleCounts@ is a bitmask1 of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- indicating the sample supported for all 2D images created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@
-    -- containing
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT',
-    -- and a stencil format.
-    sampledImageStencilSampleCounts :: SampleCountFlags
-  , -- | @storageImageSampleCounts@ is a bitmask1 of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- indicating the sample counts supported for all 2D images created with
-    -- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', and
-    -- @usage@ containing
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT'.
-    storageImageSampleCounts :: SampleCountFlags
-  , -- | @maxSampleMaskWords@ is the maximum number of array elements of a
-    -- variable decorated with the 'Graphics.Vulkan.Core10.BaseType.SampleMask'
-    -- built-in decoration.
-    maxSampleMaskWords :: Word32
-  , -- | @timestampComputeAndGraphics@ specifies support for timestamps on all
-    -- graphics and compute queues. If this limit is set to
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE', all queues that advertise the
-    -- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
-    -- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT' in the
-    -- 'QueueFamilyProperties'::@queueFlags@ support
-    -- 'QueueFamilyProperties'::@timestampValidBits@ of at least 36. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-timestamps Timestamp Queries>.
-    timestampComputeAndGraphics :: Bool
-  , -- | @timestampPeriod@ is the number of nanoseconds /required/ for a
-    -- timestamp query to be incremented by 1. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-timestamps Timestamp Queries>.
-    timestampPeriod :: Float
-  , -- | @maxClipDistances@ is the maximum number of clip distances that /can/ be
-    -- used in a single shader stage. The size of any array declared with the
-    -- @ClipDistance@ built-in decoration in a shader module /must/ be less
-    -- than or equal to this limit.
-    maxClipDistances :: Word32
-  , -- | @maxCullDistances@ is the maximum number of cull distances that /can/ be
-    -- used in a single shader stage. The size of any array declared with the
-    -- @CullDistance@ built-in decoration in a shader module /must/ be less
-    -- than or equal to this limit.
-    maxCullDistances :: Word32
-  , -- | @maxCombinedClipAndCullDistances@ is the maximum combined number of clip
-    -- and cull distances that /can/ be used in a single shader stage. The sum
-    -- of the sizes of any pair of arrays declared with the @ClipDistance@ and
-    -- @CullDistance@ built-in decoration used by a single shader stage in a
-    -- shader module /must/ be less than or equal to this limit.
-    maxCombinedClipAndCullDistances :: Word32
-  , -- | @discreteQueuePriorities@ is the number of discrete priorities that
-    -- /can/ be assigned to a queue based on the value of each member of
-    -- 'Graphics.Vulkan.Core10.Device.DeviceQueueCreateInfo'::@pQueuePriorities@.
-    -- This /must/ be at least 2, and levels /must/ be spread evenly over the
-    -- range, with at least one level at 1.0, and another at 0.0. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-priority>.
-    discreteQueuePriorities :: Word32
-  , -- | @pointSizeRange@[2] is the range [@minimum@,@maximum@] of supported
-    -- sizes for points. Values written to variables decorated with the
-    -- @PointSize@ built-in decoration are clamped to this range.
-    pointSizeRange :: (Float, Float)
-  , -- | @lineWidthRange@[2] is the range [@minimum@,@maximum@] of supported
-    -- widths for lines. Values specified by the @lineWidth@ member of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
-    -- or the @lineWidth@ parameter to
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' are
-    -- clamped to this range.
-    lineWidthRange :: (Float, Float)
-  , -- | @pointSizeGranularity@ is the granularity of supported point sizes. Not
-    -- all point sizes in the range defined by @pointSizeRange@ are supported.
-    -- This limit specifies the granularity (or increment) between successive
-    -- supported point sizes.
-    pointSizeGranularity :: Float
-  , -- | @lineWidthGranularity@ is the granularity of supported line widths. Not
-    -- all line widths in the range defined by @lineWidthRange@ are supported.
-    -- This limit specifies the granularity (or increment) between successive
-    -- supported line widths.
-    lineWidthGranularity :: Float
-  , -- | @strictLines@ specifies whether lines are rasterized according to the
-    -- preferred method of rasterization. If set to
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', lines /may/ be rasterized under
-    -- a relaxed set of rules. If set to
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE', lines are rasterized as per the
-    -- strict definition. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-basic Basic Line Segment Rasterization>.
-    strictLines :: Bool
-  , -- | @standardSampleLocations@ specifies whether rasterization uses the
-    -- standard sample locations as documented in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling Multisampling>.
-    -- If set to 'Graphics.Vulkan.Core10.BaseType.TRUE', the implementation
-    -- uses the documented sample locations. If set to
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', the implementation /may/ use
-    -- different sample locations.
-    standardSampleLocations :: Bool
-  , -- | @optimalBufferCopyOffsetAlignment@ is the optimal buffer offset
-    -- alignment in bytes for
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage' and
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'. The
-    -- per texel alignment requirements are enforced, but applications /should/
-    -- use the optimal alignment for optimal performance and power use.
-    optimalBufferCopyOffsetAlignment :: DeviceSize
-  , -- | @optimalBufferCopyRowPitchAlignment@ is the optimal buffer row pitch
-    -- alignment in bytes for
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage' and
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'. Row
-    -- pitch is the number of bytes between texels with the same X coordinate
-    -- in adjacent rows (Y coordinates differ by one). The per texel alignment
-    -- requirements are enforced, but applications /should/ use the optimal
-    -- alignment for optimal performance and power use.
-    optimalBufferCopyRowPitchAlignment :: DeviceSize
-  , -- | @nonCoherentAtomSize@ is the size and alignment in bytes that bounds
-    -- concurrent access to
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-hostaccess host-mapped device memory>.
-    nonCoherentAtomSize :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceLimits
-
-instance ToCStruct PhysicalDeviceLimits where
-  withCStruct x f = allocaBytesAligned 504 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceLimits{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (maxImageDimension1D)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (maxImageDimension2D)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (maxImageDimension3D)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (maxImageDimensionCube)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxImageArrayLayers)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxTexelBufferElements)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxUniformBufferRange)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (maxStorageBufferRange)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (maxPushConstantsSize)
-    poke ((p `plusPtr` 36 :: Ptr Word32)) (maxMemoryAllocationCount)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (maxSamplerAllocationCount)
-    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (bufferImageGranularity)
-    poke ((p `plusPtr` 56 :: Ptr DeviceSize)) (sparseAddressSpaceSize)
-    poke ((p `plusPtr` 64 :: Ptr Word32)) (maxBoundDescriptorSets)
-    poke ((p `plusPtr` 68 :: Ptr Word32)) (maxPerStageDescriptorSamplers)
-    poke ((p `plusPtr` 72 :: Ptr Word32)) (maxPerStageDescriptorUniformBuffers)
-    poke ((p `plusPtr` 76 :: Ptr Word32)) (maxPerStageDescriptorStorageBuffers)
-    poke ((p `plusPtr` 80 :: Ptr Word32)) (maxPerStageDescriptorSampledImages)
-    poke ((p `plusPtr` 84 :: Ptr Word32)) (maxPerStageDescriptorStorageImages)
-    poke ((p `plusPtr` 88 :: Ptr Word32)) (maxPerStageDescriptorInputAttachments)
-    poke ((p `plusPtr` 92 :: Ptr Word32)) (maxPerStageResources)
-    poke ((p `plusPtr` 96 :: Ptr Word32)) (maxDescriptorSetSamplers)
-    poke ((p `plusPtr` 100 :: Ptr Word32)) (maxDescriptorSetUniformBuffers)
-    poke ((p `plusPtr` 104 :: Ptr Word32)) (maxDescriptorSetUniformBuffersDynamic)
-    poke ((p `plusPtr` 108 :: Ptr Word32)) (maxDescriptorSetStorageBuffers)
-    poke ((p `plusPtr` 112 :: Ptr Word32)) (maxDescriptorSetStorageBuffersDynamic)
-    poke ((p `plusPtr` 116 :: Ptr Word32)) (maxDescriptorSetSampledImages)
-    poke ((p `plusPtr` 120 :: Ptr Word32)) (maxDescriptorSetStorageImages)
-    poke ((p `plusPtr` 124 :: Ptr Word32)) (maxDescriptorSetInputAttachments)
-    poke ((p `plusPtr` 128 :: Ptr Word32)) (maxVertexInputAttributes)
-    poke ((p `plusPtr` 132 :: Ptr Word32)) (maxVertexInputBindings)
-    poke ((p `plusPtr` 136 :: Ptr Word32)) (maxVertexInputAttributeOffset)
-    poke ((p `plusPtr` 140 :: Ptr Word32)) (maxVertexInputBindingStride)
-    poke ((p `plusPtr` 144 :: Ptr Word32)) (maxVertexOutputComponents)
-    poke ((p `plusPtr` 148 :: Ptr Word32)) (maxTessellationGenerationLevel)
-    poke ((p `plusPtr` 152 :: Ptr Word32)) (maxTessellationPatchSize)
-    poke ((p `plusPtr` 156 :: Ptr Word32)) (maxTessellationControlPerVertexInputComponents)
-    poke ((p `plusPtr` 160 :: Ptr Word32)) (maxTessellationControlPerVertexOutputComponents)
-    poke ((p `plusPtr` 164 :: Ptr Word32)) (maxTessellationControlPerPatchOutputComponents)
-    poke ((p `plusPtr` 168 :: Ptr Word32)) (maxTessellationControlTotalOutputComponents)
-    poke ((p `plusPtr` 172 :: Ptr Word32)) (maxTessellationEvaluationInputComponents)
-    poke ((p `plusPtr` 176 :: Ptr Word32)) (maxTessellationEvaluationOutputComponents)
-    poke ((p `plusPtr` 180 :: Ptr Word32)) (maxGeometryShaderInvocations)
-    poke ((p `plusPtr` 184 :: Ptr Word32)) (maxGeometryInputComponents)
-    poke ((p `plusPtr` 188 :: Ptr Word32)) (maxGeometryOutputComponents)
-    poke ((p `plusPtr` 192 :: Ptr Word32)) (maxGeometryOutputVertices)
-    poke ((p `plusPtr` 196 :: Ptr Word32)) (maxGeometryTotalOutputComponents)
-    poke ((p `plusPtr` 200 :: Ptr Word32)) (maxFragmentInputComponents)
-    poke ((p `plusPtr` 204 :: Ptr Word32)) (maxFragmentOutputAttachments)
-    poke ((p `plusPtr` 208 :: Ptr Word32)) (maxFragmentDualSrcAttachments)
-    poke ((p `plusPtr` 212 :: Ptr Word32)) (maxFragmentCombinedOutputResources)
-    poke ((p `plusPtr` 216 :: Ptr Word32)) (maxComputeSharedMemorySize)
-    let pMaxComputeWorkGroupCount' = lowerArrayPtr ((p `plusPtr` 220 :: Ptr (FixedArray 3 Word32)))
-    case (maxComputeWorkGroupCount) of
-      (e0, e1, e2) -> do
-        poke (pMaxComputeWorkGroupCount' :: Ptr Word32) (e0)
-        poke (pMaxComputeWorkGroupCount' `plusPtr` 4 :: Ptr Word32) (e1)
-        poke (pMaxComputeWorkGroupCount' `plusPtr` 8 :: Ptr Word32) (e2)
-    poke ((p `plusPtr` 232 :: Ptr Word32)) (maxComputeWorkGroupInvocations)
-    let pMaxComputeWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 236 :: Ptr (FixedArray 3 Word32)))
-    case (maxComputeWorkGroupSize) of
-      (e0, e1, e2) -> do
-        poke (pMaxComputeWorkGroupSize' :: Ptr Word32) (e0)
-        poke (pMaxComputeWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
-        poke (pMaxComputeWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
-    poke ((p `plusPtr` 248 :: Ptr Word32)) (subPixelPrecisionBits)
-    poke ((p `plusPtr` 252 :: Ptr Word32)) (subTexelPrecisionBits)
-    poke ((p `plusPtr` 256 :: Ptr Word32)) (mipmapPrecisionBits)
-    poke ((p `plusPtr` 260 :: Ptr Word32)) (maxDrawIndexedIndexValue)
-    poke ((p `plusPtr` 264 :: Ptr Word32)) (maxDrawIndirectCount)
-    poke ((p `plusPtr` 268 :: Ptr CFloat)) (CFloat (maxSamplerLodBias))
-    poke ((p `plusPtr` 272 :: Ptr CFloat)) (CFloat (maxSamplerAnisotropy))
-    poke ((p `plusPtr` 276 :: Ptr Word32)) (maxViewports)
-    let pMaxViewportDimensions' = lowerArrayPtr ((p `plusPtr` 280 :: Ptr (FixedArray 2 Word32)))
-    case (maxViewportDimensions) of
-      (e0, e1) -> do
-        poke (pMaxViewportDimensions' :: Ptr Word32) (e0)
-        poke (pMaxViewportDimensions' `plusPtr` 4 :: Ptr Word32) (e1)
-    let pViewportBoundsRange' = lowerArrayPtr ((p `plusPtr` 288 :: Ptr (FixedArray 2 CFloat)))
-    case (viewportBoundsRange) of
-      (e0, e1) -> do
-        poke (pViewportBoundsRange' :: Ptr CFloat) (CFloat (e0))
-        poke (pViewportBoundsRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-    poke ((p `plusPtr` 296 :: Ptr Word32)) (viewportSubPixelBits)
-    poke ((p `plusPtr` 304 :: Ptr CSize)) (CSize (minMemoryMapAlignment))
-    poke ((p `plusPtr` 312 :: Ptr DeviceSize)) (minTexelBufferOffsetAlignment)
-    poke ((p `plusPtr` 320 :: Ptr DeviceSize)) (minUniformBufferOffsetAlignment)
-    poke ((p `plusPtr` 328 :: Ptr DeviceSize)) (minStorageBufferOffsetAlignment)
-    poke ((p `plusPtr` 336 :: Ptr Int32)) (minTexelOffset)
-    poke ((p `plusPtr` 340 :: Ptr Word32)) (maxTexelOffset)
-    poke ((p `plusPtr` 344 :: Ptr Int32)) (minTexelGatherOffset)
-    poke ((p `plusPtr` 348 :: Ptr Word32)) (maxTexelGatherOffset)
-    poke ((p `plusPtr` 352 :: Ptr CFloat)) (CFloat (minInterpolationOffset))
-    poke ((p `plusPtr` 356 :: Ptr CFloat)) (CFloat (maxInterpolationOffset))
-    poke ((p `plusPtr` 360 :: Ptr Word32)) (subPixelInterpolationOffsetBits)
-    poke ((p `plusPtr` 364 :: Ptr Word32)) (maxFramebufferWidth)
-    poke ((p `plusPtr` 368 :: Ptr Word32)) (maxFramebufferHeight)
-    poke ((p `plusPtr` 372 :: Ptr Word32)) (maxFramebufferLayers)
-    poke ((p `plusPtr` 376 :: Ptr SampleCountFlags)) (framebufferColorSampleCounts)
-    poke ((p `plusPtr` 380 :: Ptr SampleCountFlags)) (framebufferDepthSampleCounts)
-    poke ((p `plusPtr` 384 :: Ptr SampleCountFlags)) (framebufferStencilSampleCounts)
-    poke ((p `plusPtr` 388 :: Ptr SampleCountFlags)) (framebufferNoAttachmentsSampleCounts)
-    poke ((p `plusPtr` 392 :: Ptr Word32)) (maxColorAttachments)
-    poke ((p `plusPtr` 396 :: Ptr SampleCountFlags)) (sampledImageColorSampleCounts)
-    poke ((p `plusPtr` 400 :: Ptr SampleCountFlags)) (sampledImageIntegerSampleCounts)
-    poke ((p `plusPtr` 404 :: Ptr SampleCountFlags)) (sampledImageDepthSampleCounts)
-    poke ((p `plusPtr` 408 :: Ptr SampleCountFlags)) (sampledImageStencilSampleCounts)
-    poke ((p `plusPtr` 412 :: Ptr SampleCountFlags)) (storageImageSampleCounts)
-    poke ((p `plusPtr` 416 :: Ptr Word32)) (maxSampleMaskWords)
-    poke ((p `plusPtr` 420 :: Ptr Bool32)) (boolToBool32 (timestampComputeAndGraphics))
-    poke ((p `plusPtr` 424 :: Ptr CFloat)) (CFloat (timestampPeriod))
-    poke ((p `plusPtr` 428 :: Ptr Word32)) (maxClipDistances)
-    poke ((p `plusPtr` 432 :: Ptr Word32)) (maxCullDistances)
-    poke ((p `plusPtr` 436 :: Ptr Word32)) (maxCombinedClipAndCullDistances)
-    poke ((p `plusPtr` 440 :: Ptr Word32)) (discreteQueuePriorities)
-    let pPointSizeRange' = lowerArrayPtr ((p `plusPtr` 444 :: Ptr (FixedArray 2 CFloat)))
-    case (pointSizeRange) of
-      (e0, e1) -> do
-        poke (pPointSizeRange' :: Ptr CFloat) (CFloat (e0))
-        poke (pPointSizeRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-    let pLineWidthRange' = lowerArrayPtr ((p `plusPtr` 452 :: Ptr (FixedArray 2 CFloat)))
-    case (lineWidthRange) of
-      (e0, e1) -> do
-        poke (pLineWidthRange' :: Ptr CFloat) (CFloat (e0))
-        poke (pLineWidthRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-    poke ((p `plusPtr` 460 :: Ptr CFloat)) (CFloat (pointSizeGranularity))
-    poke ((p `plusPtr` 464 :: Ptr CFloat)) (CFloat (lineWidthGranularity))
-    poke ((p `plusPtr` 468 :: Ptr Bool32)) (boolToBool32 (strictLines))
-    poke ((p `plusPtr` 472 :: Ptr Bool32)) (boolToBool32 (standardSampleLocations))
-    poke ((p `plusPtr` 480 :: Ptr DeviceSize)) (optimalBufferCopyOffsetAlignment)
-    poke ((p `plusPtr` 488 :: Ptr DeviceSize)) (optimalBufferCopyRowPitchAlignment)
-    poke ((p `plusPtr` 496 :: Ptr DeviceSize)) (nonCoherentAtomSize)
-    f
-  cStructSize = 504
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 56 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 68 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 72 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 76 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 80 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 84 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 88 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 92 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 96 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 100 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 104 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 108 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 112 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 116 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 120 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 124 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 128 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 132 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 136 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 140 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 144 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 148 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 152 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 156 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 160 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 164 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 168 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 172 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 176 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 180 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 184 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 188 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 192 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 196 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 200 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 204 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 208 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 212 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 216 :: Ptr Word32)) (zero)
-    let pMaxComputeWorkGroupCount' = lowerArrayPtr ((p `plusPtr` 220 :: Ptr (FixedArray 3 Word32)))
-    case ((zero, zero, zero)) of
-      (e0, e1, e2) -> do
-        poke (pMaxComputeWorkGroupCount' :: Ptr Word32) (e0)
-        poke (pMaxComputeWorkGroupCount' `plusPtr` 4 :: Ptr Word32) (e1)
-        poke (pMaxComputeWorkGroupCount' `plusPtr` 8 :: Ptr Word32) (e2)
-    poke ((p `plusPtr` 232 :: Ptr Word32)) (zero)
-    let pMaxComputeWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 236 :: Ptr (FixedArray 3 Word32)))
-    case ((zero, zero, zero)) of
-      (e0, e1, e2) -> do
-        poke (pMaxComputeWorkGroupSize' :: Ptr Word32) (e0)
-        poke (pMaxComputeWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
-        poke (pMaxComputeWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
-    poke ((p `plusPtr` 248 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 252 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 256 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 260 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 264 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 268 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 272 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 276 :: Ptr Word32)) (zero)
-    let pMaxViewportDimensions' = lowerArrayPtr ((p `plusPtr` 280 :: Ptr (FixedArray 2 Word32)))
-    case ((zero, zero)) of
-      (e0, e1) -> do
-        poke (pMaxViewportDimensions' :: Ptr Word32) (e0)
-        poke (pMaxViewportDimensions' `plusPtr` 4 :: Ptr Word32) (e1)
-    let pViewportBoundsRange' = lowerArrayPtr ((p `plusPtr` 288 :: Ptr (FixedArray 2 CFloat)))
-    case ((zero, zero)) of
-      (e0, e1) -> do
-        poke (pViewportBoundsRange' :: Ptr CFloat) (CFloat (e0))
-        poke (pViewportBoundsRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-    poke ((p `plusPtr` 296 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 304 :: Ptr CSize)) (CSize (zero))
-    poke ((p `plusPtr` 312 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 320 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 328 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 336 :: Ptr Int32)) (zero)
-    poke ((p `plusPtr` 340 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 344 :: Ptr Int32)) (zero)
-    poke ((p `plusPtr` 348 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 352 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 356 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 360 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 364 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 368 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 372 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 392 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 416 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 420 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 424 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 428 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 432 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 436 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 440 :: Ptr Word32)) (zero)
-    let pPointSizeRange' = lowerArrayPtr ((p `plusPtr` 444 :: Ptr (FixedArray 2 CFloat)))
-    case ((zero, zero)) of
-      (e0, e1) -> do
-        poke (pPointSizeRange' :: Ptr CFloat) (CFloat (e0))
-        poke (pPointSizeRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-    let pLineWidthRange' = lowerArrayPtr ((p `plusPtr` 452 :: Ptr (FixedArray 2 CFloat)))
-    case ((zero, zero)) of
-      (e0, e1) -> do
-        poke (pLineWidthRange' :: Ptr CFloat) (CFloat (e0))
-        poke (pLineWidthRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-    poke ((p `plusPtr` 460 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 464 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 468 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 472 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 480 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 488 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 496 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceLimits where
-  peekCStruct p = do
-    maxImageDimension1D <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    maxImageDimension2D <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    maxImageDimension3D <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    maxImageDimensionCube <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    maxImageArrayLayers <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxTexelBufferElements <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    maxUniformBufferRange <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    maxStorageBufferRange <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    maxPushConstantsSize <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    maxMemoryAllocationCount <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
-    maxSamplerAllocationCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    bufferImageGranularity <- peek @DeviceSize ((p `plusPtr` 48 :: Ptr DeviceSize))
-    sparseAddressSpaceSize <- peek @DeviceSize ((p `plusPtr` 56 :: Ptr DeviceSize))
-    maxBoundDescriptorSets <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    maxPerStageDescriptorSamplers <- peek @Word32 ((p `plusPtr` 68 :: Ptr Word32))
-    maxPerStageDescriptorUniformBuffers <- peek @Word32 ((p `plusPtr` 72 :: Ptr Word32))
-    maxPerStageDescriptorStorageBuffers <- peek @Word32 ((p `plusPtr` 76 :: Ptr Word32))
-    maxPerStageDescriptorSampledImages <- peek @Word32 ((p `plusPtr` 80 :: Ptr Word32))
-    maxPerStageDescriptorStorageImages <- peek @Word32 ((p `plusPtr` 84 :: Ptr Word32))
-    maxPerStageDescriptorInputAttachments <- peek @Word32 ((p `plusPtr` 88 :: Ptr Word32))
-    maxPerStageResources <- peek @Word32 ((p `plusPtr` 92 :: Ptr Word32))
-    maxDescriptorSetSamplers <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32))
-    maxDescriptorSetUniformBuffers <- peek @Word32 ((p `plusPtr` 100 :: Ptr Word32))
-    maxDescriptorSetUniformBuffersDynamic <- peek @Word32 ((p `plusPtr` 104 :: Ptr Word32))
-    maxDescriptorSetStorageBuffers <- peek @Word32 ((p `plusPtr` 108 :: Ptr Word32))
-    maxDescriptorSetStorageBuffersDynamic <- peek @Word32 ((p `plusPtr` 112 :: Ptr Word32))
-    maxDescriptorSetSampledImages <- peek @Word32 ((p `plusPtr` 116 :: Ptr Word32))
-    maxDescriptorSetStorageImages <- peek @Word32 ((p `plusPtr` 120 :: Ptr Word32))
-    maxDescriptorSetInputAttachments <- peek @Word32 ((p `plusPtr` 124 :: Ptr Word32))
-    maxVertexInputAttributes <- peek @Word32 ((p `plusPtr` 128 :: Ptr Word32))
-    maxVertexInputBindings <- peek @Word32 ((p `plusPtr` 132 :: Ptr Word32))
-    maxVertexInputAttributeOffset <- peek @Word32 ((p `plusPtr` 136 :: Ptr Word32))
-    maxVertexInputBindingStride <- peek @Word32 ((p `plusPtr` 140 :: Ptr Word32))
-    maxVertexOutputComponents <- peek @Word32 ((p `plusPtr` 144 :: Ptr Word32))
-    maxTessellationGenerationLevel <- peek @Word32 ((p `plusPtr` 148 :: Ptr Word32))
-    maxTessellationPatchSize <- peek @Word32 ((p `plusPtr` 152 :: Ptr Word32))
-    maxTessellationControlPerVertexInputComponents <- peek @Word32 ((p `plusPtr` 156 :: Ptr Word32))
-    maxTessellationControlPerVertexOutputComponents <- peek @Word32 ((p `plusPtr` 160 :: Ptr Word32))
-    maxTessellationControlPerPatchOutputComponents <- peek @Word32 ((p `plusPtr` 164 :: Ptr Word32))
-    maxTessellationControlTotalOutputComponents <- peek @Word32 ((p `plusPtr` 168 :: Ptr Word32))
-    maxTessellationEvaluationInputComponents <- peek @Word32 ((p `plusPtr` 172 :: Ptr Word32))
-    maxTessellationEvaluationOutputComponents <- peek @Word32 ((p `plusPtr` 176 :: Ptr Word32))
-    maxGeometryShaderInvocations <- peek @Word32 ((p `plusPtr` 180 :: Ptr Word32))
-    maxGeometryInputComponents <- peek @Word32 ((p `plusPtr` 184 :: Ptr Word32))
-    maxGeometryOutputComponents <- peek @Word32 ((p `plusPtr` 188 :: Ptr Word32))
-    maxGeometryOutputVertices <- peek @Word32 ((p `plusPtr` 192 :: Ptr Word32))
-    maxGeometryTotalOutputComponents <- peek @Word32 ((p `plusPtr` 196 :: Ptr Word32))
-    maxFragmentInputComponents <- peek @Word32 ((p `plusPtr` 200 :: Ptr Word32))
-    maxFragmentOutputAttachments <- peek @Word32 ((p `plusPtr` 204 :: Ptr Word32))
-    maxFragmentDualSrcAttachments <- peek @Word32 ((p `plusPtr` 208 :: Ptr Word32))
-    maxFragmentCombinedOutputResources <- peek @Word32 ((p `plusPtr` 212 :: Ptr Word32))
-    maxComputeSharedMemorySize <- peek @Word32 ((p `plusPtr` 216 :: Ptr Word32))
-    let pmaxComputeWorkGroupCount = lowerArrayPtr @Word32 ((p `plusPtr` 220 :: Ptr (FixedArray 3 Word32)))
-    maxComputeWorkGroupCount0 <- peek @Word32 ((pmaxComputeWorkGroupCount `advancePtrBytes` 0 :: Ptr Word32))
-    maxComputeWorkGroupCount1 <- peek @Word32 ((pmaxComputeWorkGroupCount `advancePtrBytes` 4 :: Ptr Word32))
-    maxComputeWorkGroupCount2 <- peek @Word32 ((pmaxComputeWorkGroupCount `advancePtrBytes` 8 :: Ptr Word32))
-    maxComputeWorkGroupInvocations <- peek @Word32 ((p `plusPtr` 232 :: Ptr Word32))
-    let pmaxComputeWorkGroupSize = lowerArrayPtr @Word32 ((p `plusPtr` 236 :: Ptr (FixedArray 3 Word32)))
-    maxComputeWorkGroupSize0 <- peek @Word32 ((pmaxComputeWorkGroupSize `advancePtrBytes` 0 :: Ptr Word32))
-    maxComputeWorkGroupSize1 <- peek @Word32 ((pmaxComputeWorkGroupSize `advancePtrBytes` 4 :: Ptr Word32))
-    maxComputeWorkGroupSize2 <- peek @Word32 ((pmaxComputeWorkGroupSize `advancePtrBytes` 8 :: Ptr Word32))
-    subPixelPrecisionBits <- peek @Word32 ((p `plusPtr` 248 :: Ptr Word32))
-    subTexelPrecisionBits <- peek @Word32 ((p `plusPtr` 252 :: Ptr Word32))
-    mipmapPrecisionBits <- peek @Word32 ((p `plusPtr` 256 :: Ptr Word32))
-    maxDrawIndexedIndexValue <- peek @Word32 ((p `plusPtr` 260 :: Ptr Word32))
-    maxDrawIndirectCount <- peek @Word32 ((p `plusPtr` 264 :: Ptr Word32))
-    maxSamplerLodBias <- peek @CFloat ((p `plusPtr` 268 :: Ptr CFloat))
-    maxSamplerAnisotropy <- peek @CFloat ((p `plusPtr` 272 :: Ptr CFloat))
-    maxViewports <- peek @Word32 ((p `plusPtr` 276 :: Ptr Word32))
-    let pmaxViewportDimensions = lowerArrayPtr @Word32 ((p `plusPtr` 280 :: Ptr (FixedArray 2 Word32)))
-    maxViewportDimensions0 <- peek @Word32 ((pmaxViewportDimensions `advancePtrBytes` 0 :: Ptr Word32))
-    maxViewportDimensions1 <- peek @Word32 ((pmaxViewportDimensions `advancePtrBytes` 4 :: Ptr Word32))
-    let pviewportBoundsRange = lowerArrayPtr @CFloat ((p `plusPtr` 288 :: Ptr (FixedArray 2 CFloat)))
-    viewportBoundsRange0 <- peek @CFloat ((pviewportBoundsRange `advancePtrBytes` 0 :: Ptr CFloat))
-    viewportBoundsRange1 <- peek @CFloat ((pviewportBoundsRange `advancePtrBytes` 4 :: Ptr CFloat))
-    viewportSubPixelBits <- peek @Word32 ((p `plusPtr` 296 :: Ptr Word32))
-    minMemoryMapAlignment <- peek @CSize ((p `plusPtr` 304 :: Ptr CSize))
-    minTexelBufferOffsetAlignment <- peek @DeviceSize ((p `plusPtr` 312 :: Ptr DeviceSize))
-    minUniformBufferOffsetAlignment <- peek @DeviceSize ((p `plusPtr` 320 :: Ptr DeviceSize))
-    minStorageBufferOffsetAlignment <- peek @DeviceSize ((p `plusPtr` 328 :: Ptr DeviceSize))
-    minTexelOffset <- peek @Int32 ((p `plusPtr` 336 :: Ptr Int32))
-    maxTexelOffset <- peek @Word32 ((p `plusPtr` 340 :: Ptr Word32))
-    minTexelGatherOffset <- peek @Int32 ((p `plusPtr` 344 :: Ptr Int32))
-    maxTexelGatherOffset <- peek @Word32 ((p `plusPtr` 348 :: Ptr Word32))
-    minInterpolationOffset <- peek @CFloat ((p `plusPtr` 352 :: Ptr CFloat))
-    maxInterpolationOffset <- peek @CFloat ((p `plusPtr` 356 :: Ptr CFloat))
-    subPixelInterpolationOffsetBits <- peek @Word32 ((p `plusPtr` 360 :: Ptr Word32))
-    maxFramebufferWidth <- peek @Word32 ((p `plusPtr` 364 :: Ptr Word32))
-    maxFramebufferHeight <- peek @Word32 ((p `plusPtr` 368 :: Ptr Word32))
-    maxFramebufferLayers <- peek @Word32 ((p `plusPtr` 372 :: Ptr Word32))
-    framebufferColorSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 376 :: Ptr SampleCountFlags))
-    framebufferDepthSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 380 :: Ptr SampleCountFlags))
-    framebufferStencilSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 384 :: Ptr SampleCountFlags))
-    framebufferNoAttachmentsSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 388 :: Ptr SampleCountFlags))
-    maxColorAttachments <- peek @Word32 ((p `plusPtr` 392 :: Ptr Word32))
-    sampledImageColorSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 396 :: Ptr SampleCountFlags))
-    sampledImageIntegerSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 400 :: Ptr SampleCountFlags))
-    sampledImageDepthSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 404 :: Ptr SampleCountFlags))
-    sampledImageStencilSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 408 :: Ptr SampleCountFlags))
-    storageImageSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 412 :: Ptr SampleCountFlags))
-    maxSampleMaskWords <- peek @Word32 ((p `plusPtr` 416 :: Ptr Word32))
-    timestampComputeAndGraphics <- peek @Bool32 ((p `plusPtr` 420 :: Ptr Bool32))
-    timestampPeriod <- peek @CFloat ((p `plusPtr` 424 :: Ptr CFloat))
-    maxClipDistances <- peek @Word32 ((p `plusPtr` 428 :: Ptr Word32))
-    maxCullDistances <- peek @Word32 ((p `plusPtr` 432 :: Ptr Word32))
-    maxCombinedClipAndCullDistances <- peek @Word32 ((p `plusPtr` 436 :: Ptr Word32))
-    discreteQueuePriorities <- peek @Word32 ((p `plusPtr` 440 :: Ptr Word32))
-    let ppointSizeRange = lowerArrayPtr @CFloat ((p `plusPtr` 444 :: Ptr (FixedArray 2 CFloat)))
-    pointSizeRange0 <- peek @CFloat ((ppointSizeRange `advancePtrBytes` 0 :: Ptr CFloat))
-    pointSizeRange1 <- peek @CFloat ((ppointSizeRange `advancePtrBytes` 4 :: Ptr CFloat))
-    let plineWidthRange = lowerArrayPtr @CFloat ((p `plusPtr` 452 :: Ptr (FixedArray 2 CFloat)))
-    lineWidthRange0 <- peek @CFloat ((plineWidthRange `advancePtrBytes` 0 :: Ptr CFloat))
-    lineWidthRange1 <- peek @CFloat ((plineWidthRange `advancePtrBytes` 4 :: Ptr CFloat))
-    pointSizeGranularity <- peek @CFloat ((p `plusPtr` 460 :: Ptr CFloat))
-    lineWidthGranularity <- peek @CFloat ((p `plusPtr` 464 :: Ptr CFloat))
-    strictLines <- peek @Bool32 ((p `plusPtr` 468 :: Ptr Bool32))
-    standardSampleLocations <- peek @Bool32 ((p `plusPtr` 472 :: Ptr Bool32))
-    optimalBufferCopyOffsetAlignment <- peek @DeviceSize ((p `plusPtr` 480 :: Ptr DeviceSize))
-    optimalBufferCopyRowPitchAlignment <- peek @DeviceSize ((p `plusPtr` 488 :: Ptr DeviceSize))
-    nonCoherentAtomSize <- peek @DeviceSize ((p `plusPtr` 496 :: Ptr DeviceSize))
-    pure $ PhysicalDeviceLimits
-             maxImageDimension1D maxImageDimension2D maxImageDimension3D maxImageDimensionCube maxImageArrayLayers maxTexelBufferElements maxUniformBufferRange maxStorageBufferRange maxPushConstantsSize maxMemoryAllocationCount maxSamplerAllocationCount bufferImageGranularity sparseAddressSpaceSize maxBoundDescriptorSets maxPerStageDescriptorSamplers maxPerStageDescriptorUniformBuffers maxPerStageDescriptorStorageBuffers maxPerStageDescriptorSampledImages maxPerStageDescriptorStorageImages maxPerStageDescriptorInputAttachments maxPerStageResources maxDescriptorSetSamplers maxDescriptorSetUniformBuffers maxDescriptorSetUniformBuffersDynamic maxDescriptorSetStorageBuffers maxDescriptorSetStorageBuffersDynamic maxDescriptorSetSampledImages maxDescriptorSetStorageImages maxDescriptorSetInputAttachments maxVertexInputAttributes maxVertexInputBindings maxVertexInputAttributeOffset maxVertexInputBindingStride maxVertexOutputComponents maxTessellationGenerationLevel maxTessellationPatchSize maxTessellationControlPerVertexInputComponents maxTessellationControlPerVertexOutputComponents maxTessellationControlPerPatchOutputComponents maxTessellationControlTotalOutputComponents maxTessellationEvaluationInputComponents maxTessellationEvaluationOutputComponents maxGeometryShaderInvocations maxGeometryInputComponents maxGeometryOutputComponents maxGeometryOutputVertices maxGeometryTotalOutputComponents maxFragmentInputComponents maxFragmentOutputAttachments maxFragmentDualSrcAttachments maxFragmentCombinedOutputResources maxComputeSharedMemorySize ((maxComputeWorkGroupCount0, maxComputeWorkGroupCount1, maxComputeWorkGroupCount2)) maxComputeWorkGroupInvocations ((maxComputeWorkGroupSize0, maxComputeWorkGroupSize1, maxComputeWorkGroupSize2)) subPixelPrecisionBits subTexelPrecisionBits mipmapPrecisionBits maxDrawIndexedIndexValue maxDrawIndirectCount ((\(CFloat a) -> a) maxSamplerLodBias) ((\(CFloat a) -> a) maxSamplerAnisotropy) maxViewports ((maxViewportDimensions0, maxViewportDimensions1)) ((((\(CFloat a) -> a) viewportBoundsRange0), ((\(CFloat a) -> a) viewportBoundsRange1))) viewportSubPixelBits ((\(CSize a) -> a) minMemoryMapAlignment) minTexelBufferOffsetAlignment minUniformBufferOffsetAlignment minStorageBufferOffsetAlignment minTexelOffset maxTexelOffset minTexelGatherOffset maxTexelGatherOffset ((\(CFloat a) -> a) minInterpolationOffset) ((\(CFloat a) -> a) maxInterpolationOffset) subPixelInterpolationOffsetBits maxFramebufferWidth maxFramebufferHeight maxFramebufferLayers framebufferColorSampleCounts framebufferDepthSampleCounts framebufferStencilSampleCounts framebufferNoAttachmentsSampleCounts maxColorAttachments sampledImageColorSampleCounts sampledImageIntegerSampleCounts sampledImageDepthSampleCounts sampledImageStencilSampleCounts storageImageSampleCounts maxSampleMaskWords (bool32ToBool timestampComputeAndGraphics) ((\(CFloat a) -> a) timestampPeriod) maxClipDistances maxCullDistances maxCombinedClipAndCullDistances discreteQueuePriorities ((((\(CFloat a) -> a) pointSizeRange0), ((\(CFloat a) -> a) pointSizeRange1))) ((((\(CFloat a) -> a) lineWidthRange0), ((\(CFloat a) -> a) lineWidthRange1))) ((\(CFloat a) -> a) pointSizeGranularity) ((\(CFloat a) -> a) lineWidthGranularity) (bool32ToBool strictLines) (bool32ToBool standardSampleLocations) optimalBufferCopyOffsetAlignment optimalBufferCopyRowPitchAlignment nonCoherentAtomSize
-
-instance Storable PhysicalDeviceLimits where
-  sizeOf ~_ = 504
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceLimits where
-  zero = PhysicalDeviceLimits
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           (zero, zero, zero)
-           zero
-           (zero, zero, zero)
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           (zero, zero)
-           (zero, zero)
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           (zero, zero)
-           (zero, zero)
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/DeviceInitialization.hs-boot b/src/Graphics/Vulkan/Core10/DeviceInitialization.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/DeviceInitialization.hs-boot
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.DeviceInitialization  ( ApplicationInfo
-                                                    , FormatProperties
-                                                    , ImageFormatProperties
-                                                    , InstanceCreateInfo
-                                                    , MemoryHeap
-                                                    , MemoryType
-                                                    , PhysicalDeviceFeatures
-                                                    , PhysicalDeviceLimits
-                                                    , PhysicalDeviceMemoryProperties
-                                                    , PhysicalDeviceProperties
-                                                    , PhysicalDeviceSparseProperties
-                                                    , QueueFamilyProperties
-                                                    ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ApplicationInfo
-
-instance ToCStruct ApplicationInfo
-instance Show ApplicationInfo
-
-instance FromCStruct ApplicationInfo
-
-
-data FormatProperties
-
-instance ToCStruct FormatProperties
-instance Show FormatProperties
-
-instance FromCStruct FormatProperties
-
-
-data ImageFormatProperties
-
-instance ToCStruct ImageFormatProperties
-instance Show ImageFormatProperties
-
-instance FromCStruct ImageFormatProperties
-
-
-type role InstanceCreateInfo nominal
-data InstanceCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (InstanceCreateInfo es)
-instance Show (Chain es) => Show (InstanceCreateInfo es)
-
-instance PeekChain es => FromCStruct (InstanceCreateInfo es)
-
-
-data MemoryHeap
-
-instance ToCStruct MemoryHeap
-instance Show MemoryHeap
-
-instance FromCStruct MemoryHeap
-
-
-data MemoryType
-
-instance ToCStruct MemoryType
-instance Show MemoryType
-
-instance FromCStruct MemoryType
-
-
-data PhysicalDeviceFeatures
-
-instance ToCStruct PhysicalDeviceFeatures
-instance Show PhysicalDeviceFeatures
-
-instance FromCStruct PhysicalDeviceFeatures
-
-
-data PhysicalDeviceLimits
-
-instance ToCStruct PhysicalDeviceLimits
-instance Show PhysicalDeviceLimits
-
-instance FromCStruct PhysicalDeviceLimits
-
-
-data PhysicalDeviceMemoryProperties
-
-instance ToCStruct PhysicalDeviceMemoryProperties
-instance Show PhysicalDeviceMemoryProperties
-
-instance FromCStruct PhysicalDeviceMemoryProperties
-
-
-data PhysicalDeviceProperties
-
-instance ToCStruct PhysicalDeviceProperties
-instance Show PhysicalDeviceProperties
-
-instance FromCStruct PhysicalDeviceProperties
-
-
-data PhysicalDeviceSparseProperties
-
-instance ToCStruct PhysicalDeviceSparseProperties
-instance Show PhysicalDeviceSparseProperties
-
-instance FromCStruct PhysicalDeviceSparseProperties
-
-
-data QueueFamilyProperties
-
-instance ToCStruct QueueFamilyProperties
-instance Show QueueFamilyProperties
-
-instance FromCStruct QueueFamilyProperties
-
diff --git a/src/Graphics/Vulkan/Core10/Enums.hs b/src/Graphics/Vulkan/Core10/Enums.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums.hs
+++ /dev/null
@@ -1,193 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums  ( module Graphics.Vulkan.Core10.Enums.AccessFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.AttachmentLoadOp
-                                     , module Graphics.Vulkan.Core10.Enums.AttachmentStoreOp
-                                     , module Graphics.Vulkan.Core10.Enums.BlendFactor
-                                     , module Graphics.Vulkan.Core10.Enums.BlendOp
-                                     , module Graphics.Vulkan.Core10.Enums.BorderColor
-                                     , module Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.BufferViewCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.CommandBufferLevel
-                                     , module Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.CompareOp
-                                     , module Graphics.Vulkan.Core10.Enums.ComponentSwizzle
-                                     , module Graphics.Vulkan.Core10.Enums.CullModeFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.DependencyFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.DescriptorPoolResetFlags
-                                     , module Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.DescriptorType
-                                     , module Graphics.Vulkan.Core10.Enums.DeviceCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.DynamicState
-                                     , module Graphics.Vulkan.Core10.Enums.EventCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.FenceCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.Filter
-                                     , module Graphics.Vulkan.Core10.Enums.Format
-                                     , module Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.FrontFace
-                                     , module Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.ImageLayout
-                                     , module Graphics.Vulkan.Core10.Enums.ImageTiling
-                                     , module Graphics.Vulkan.Core10.Enums.ImageType
-                                     , module Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.ImageViewType
-                                     , module Graphics.Vulkan.Core10.Enums.IndexType
-                                     , module Graphics.Vulkan.Core10.Enums.InstanceCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.InternalAllocationType
-                                     , module Graphics.Vulkan.Core10.Enums.LogicOp
-                                     , module Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.MemoryMapFlags
-                                     , module Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.ObjectType
-                                     , module Graphics.Vulkan.Core10.Enums.PhysicalDeviceType
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineBindPoint
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineCacheHeaderVersion
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineLayoutCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.PipelineViewportStateCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.PolygonMode
-                                     , module Graphics.Vulkan.Core10.Enums.PrimitiveTopology
-                                     , module Graphics.Vulkan.Core10.Enums.QueryControlFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.QueryPoolCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.QueryResultFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.QueryType
-                                     , module Graphics.Vulkan.Core10.Enums.QueueFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.Result
-                                     , module Graphics.Vulkan.Core10.Enums.SampleCountFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.SamplerAddressMode
-                                     , module Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.SamplerMipmapMode
-                                     , module Graphics.Vulkan.Core10.Enums.SemaphoreCreateFlags
-                                     , module Graphics.Vulkan.Core10.Enums.ShaderModuleCreateFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.SharingMode
-                                     , module Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.StencilOp
-                                     , module Graphics.Vulkan.Core10.Enums.StructureType
-                                     , module Graphics.Vulkan.Core10.Enums.SubpassContents
-                                     , module Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits
-                                     , module Graphics.Vulkan.Core10.Enums.SystemAllocationScope
-                                     , module Graphics.Vulkan.Core10.Enums.VendorId
-                                     , module Graphics.Vulkan.Core10.Enums.VertexInputRate
-                                     ) where
-import Graphics.Vulkan.Core10.Enums.AccessFlagBits
-import Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits
-import Graphics.Vulkan.Core10.Enums.AttachmentLoadOp
-import Graphics.Vulkan.Core10.Enums.AttachmentStoreOp
-import Graphics.Vulkan.Core10.Enums.BlendFactor
-import Graphics.Vulkan.Core10.Enums.BlendOp
-import Graphics.Vulkan.Core10.Enums.BorderColor
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits
-import Graphics.Vulkan.Core10.Enums.BufferViewCreateFlags
-import Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits
-import Graphics.Vulkan.Core10.Enums.CommandBufferLevel
-import Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits
-import Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits
-import Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits
-import Graphics.Vulkan.Core10.Enums.CompareOp
-import Graphics.Vulkan.Core10.Enums.ComponentSwizzle
-import Graphics.Vulkan.Core10.Enums.CullModeFlagBits
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits
-import Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.DescriptorPoolResetFlags
-import Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.DescriptorType
-import Graphics.Vulkan.Core10.Enums.DeviceCreateFlags
-import Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.DynamicState
-import Graphics.Vulkan.Core10.Enums.EventCreateFlags
-import Graphics.Vulkan.Core10.Enums.FenceCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.Filter
-import Graphics.Vulkan.Core10.Enums.Format
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits
-import Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.FrontFace
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.ImageLayout
-import Graphics.Vulkan.Core10.Enums.ImageTiling
-import Graphics.Vulkan.Core10.Enums.ImageType
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits
-import Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.ImageViewType
-import Graphics.Vulkan.Core10.Enums.IndexType
-import Graphics.Vulkan.Core10.Enums.InstanceCreateFlags
-import Graphics.Vulkan.Core10.Enums.InternalAllocationType
-import Graphics.Vulkan.Core10.Enums.LogicOp
-import Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits
-import Graphics.Vulkan.Core10.Enums.MemoryMapFlags
-import Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits
-import Graphics.Vulkan.Core10.Enums.ObjectType
-import Graphics.Vulkan.Core10.Enums.PhysicalDeviceType
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint
-import Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.PipelineCacheHeaderVersion
-import Graphics.Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags
-import Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags
-import Graphics.Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags
-import Graphics.Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags
-import Graphics.Vulkan.Core10.Enums.PipelineLayoutCreateFlags
-import Graphics.Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags
-import Graphics.Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags
-import Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits
-import Graphics.Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags
-import Graphics.Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags
-import Graphics.Vulkan.Core10.Enums.PipelineViewportStateCreateFlags
-import Graphics.Vulkan.Core10.Enums.PolygonMode
-import Graphics.Vulkan.Core10.Enums.PrimitiveTopology
-import Graphics.Vulkan.Core10.Enums.QueryControlFlagBits
-import Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits
-import Graphics.Vulkan.Core10.Enums.QueryPoolCreateFlags
-import Graphics.Vulkan.Core10.Enums.QueryResultFlagBits
-import Graphics.Vulkan.Core10.Enums.QueryType
-import Graphics.Vulkan.Core10.Enums.QueueFlagBits
-import Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.Result
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits
-import Graphics.Vulkan.Core10.Enums.SamplerAddressMode
-import Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.SamplerMipmapMode
-import Graphics.Vulkan.Core10.Enums.SemaphoreCreateFlags
-import Graphics.Vulkan.Core10.Enums.ShaderModuleCreateFlagBits
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits
-import Graphics.Vulkan.Core10.Enums.SharingMode
-import Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits
-import Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits
-import Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits
-import Graphics.Vulkan.Core10.Enums.StencilOp
-import Graphics.Vulkan.Core10.Enums.StructureType
-import Graphics.Vulkan.Core10.Enums.SubpassContents
-import Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits
-import Graphics.Vulkan.Core10.Enums.SystemAllocationScope
-import Graphics.Vulkan.Core10.Enums.VendorId
-import Graphics.Vulkan.Core10.Enums.VertexInputRate
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/AccessFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/AccessFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/AccessFlagBits.hs
+++ /dev/null
@@ -1,392 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.AccessFlagBits  ( AccessFlagBits( ACCESS_INDIRECT_COMMAND_READ_BIT
-                                                                    , ACCESS_INDEX_READ_BIT
-                                                                    , ACCESS_VERTEX_ATTRIBUTE_READ_BIT
-                                                                    , ACCESS_UNIFORM_READ_BIT
-                                                                    , ACCESS_INPUT_ATTACHMENT_READ_BIT
-                                                                    , ACCESS_SHADER_READ_BIT
-                                                                    , ACCESS_SHADER_WRITE_BIT
-                                                                    , ACCESS_COLOR_ATTACHMENT_READ_BIT
-                                                                    , ACCESS_COLOR_ATTACHMENT_WRITE_BIT
-                                                                    , ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
-                                                                    , ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
-                                                                    , ACCESS_TRANSFER_READ_BIT
-                                                                    , ACCESS_TRANSFER_WRITE_BIT
-                                                                    , ACCESS_HOST_READ_BIT
-                                                                    , ACCESS_HOST_WRITE_BIT
-                                                                    , ACCESS_MEMORY_READ_BIT
-                                                                    , ACCESS_MEMORY_WRITE_BIT
-                                                                    , ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV
-                                                                    , ACCESS_COMMAND_PREPROCESS_READ_BIT_NV
-                                                                    , ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT
-                                                                    , ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV
-                                                                    , ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
-                                                                    , ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
-                                                                    , ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT
-                                                                    , ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT
-                                                                    , ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT
-                                                                    , ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT
-                                                                    , ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT
-                                                                    , ..
-                                                                    )
-                                                    , AccessFlags
-                                                    ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkAccessFlagBits - Bitmask specifying memory access types that will
--- participate in a memory dependency
---
--- = Description
---
--- 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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                                                                                |
--- +====================================================+==========================================================================================================+
--- | 'ACCESS_INDIRECT_COMMAND_READ_BIT'                 | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'                    |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_INDEX_READ_BIT'                            | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_INPUT_BIT'                     |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_VERTEX_ATTRIBUTE_READ_BIT'                 | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_INPUT_BIT'                     |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_UNIFORM_READ_BIT'                          | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                  |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                  |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',          |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                   |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',     |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',  |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                 |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or              |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                   |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_SHADER_READ_BIT'                           | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                  |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                  |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',          |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                   |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',     |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',  |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                 |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or              |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                   |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_SHADER_WRITE_BIT'                          | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                  |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                  |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',          |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                   |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',     |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',  |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                 |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or              |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                   |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_INPUT_ATTACHMENT_READ_BIT'                 | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT'                  |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_COLOR_ATTACHMENT_READ_BIT'                 | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'          |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_COLOR_ATTACHMENT_WRITE_BIT'                | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'          |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT'         | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT', or         |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'              |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'        | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT', or         |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'              |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_TRANSFER_READ_BIT'                         | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'                         |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_TRANSFER_WRITE_BIT'                        | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'                         |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_HOST_READ_BIT'                             | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'                             |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_HOST_WRITE_BIT'                            | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'                             |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_MEMORY_READ_BIT'                           | Any                                                                                                      |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_MEMORY_WRITE_BIT'                          | Any                                                                                                      |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT' | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'          |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_COMMAND_PREPROCESS_READ_BIT_NV'            | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'            |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV'           | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'            |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT'        | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'        |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV'            | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'            |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT'          | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'           |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT'  | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'           |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT'   | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'                    |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'       | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR', or       |
--- |                                                    | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'      | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
--- | 'ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT'         | 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'     |
--- +----------------------------------------------------+----------------------------------------------------------------------------------------------------------+
---
--- Supported access types
---
--- If a memory object does not have the
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
--- property, then 'Graphics.Vulkan.Core10.Memory.flushMappedMemoryRanges'
--- /must/ be called in order to guarantee that writes to the memory object
--- from the host are made available to the host domain, where they /can/ be
--- further made available to the device domain via a domain operation.
--- Similarly, 'Graphics.Vulkan.Core10.Memory.invalidateMappedMemoryRanges'
--- /must/ be called to guarantee that writes which are available to the
--- host domain are made visible to host operations.
---
--- If the memory object does have the
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
--- property flag, writes to the memory object from the host are
--- automatically made available to the host domain. Similarly, writes made
--- available to the host domain are automatically made visible to the host.
---
--- Note
---
--- The 'Graphics.Vulkan.Core10.Queue.queueSubmit' command
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-host-writes automatically performs a domain operation from host to device>
--- for all writes performed before the command executes, 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
---
--- 'AccessFlags'
-newtype AccessFlagBits = AccessFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'ACCESS_INDIRECT_COMMAND_READ_BIT' specifies read access to indirect
--- command data read as part of an indirect drawing or dispatch command.
-pattern ACCESS_INDIRECT_COMMAND_READ_BIT = AccessFlagBits 0x00000001
--- | 'ACCESS_INDEX_READ_BIT' specifies read access to an index buffer as part
--- of an indexed drawing command, bound by
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'.
-pattern ACCESS_INDEX_READ_BIT = AccessFlagBits 0x00000002
--- | 'ACCESS_VERTEX_ATTRIBUTE_READ_BIT' specifies read access to a vertex
--- buffer as part of a drawing command, bound by
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers'.
-pattern ACCESS_VERTEX_ATTRIBUTE_READ_BIT = AccessFlagBits 0x00000004
--- | 'ACCESS_UNIFORM_READ_BIT' specifies read access to a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer uniform buffer>.
-pattern ACCESS_UNIFORM_READ_BIT = AccessFlagBits 0x00000008
--- | 'ACCESS_INPUT_ATTACHMENT_READ_BIT' specifies read access to an
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass input attachment>
--- within a render pass during fragment shading.
-pattern ACCESS_INPUT_ATTACHMENT_READ_BIT = AccessFlagBits 0x00000010
--- | 'ACCESS_SHADER_READ_BIT' specifies read access to a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer storage buffer>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-physical-storage-buffer physical storage buffer>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer uniform texel buffer>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer storage texel buffer>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled image>,
--- or
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image>.
-pattern ACCESS_SHADER_READ_BIT = AccessFlagBits 0x00000020
--- | 'ACCESS_SHADER_WRITE_BIT' specifies write access to a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer storage buffer>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-physical-storage-buffer physical storage buffer>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer storage texel buffer>,
--- or
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image>.
-pattern ACCESS_SHADER_WRITE_BIT = AccessFlagBits 0x00000040
--- | 'ACCESS_COLOR_ATTACHMENT_READ_BIT' specifies read access to a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass color attachment>,
--- such as via
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blending blending>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-logicop logic operations>,
--- or via certain
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load operations>.
--- It does not include
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operations>.
-pattern ACCESS_COLOR_ATTACHMENT_READ_BIT = AccessFlagBits 0x00000080
--- | 'ACCESS_COLOR_ATTACHMENT_WRITE_BIT' specifies write access to a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass color, resolve, or depth\/stencil resolve attachment>
--- during a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass render pass>
--- or via certain
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load and store operations>.
-pattern ACCESS_COLOR_ATTACHMENT_WRITE_BIT = AccessFlagBits 0x00000100
--- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT' specifies read access to a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass depth\/stencil attachment>,
--- via
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-ds-state depth or stencil operations>
--- or via certain
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load operations>.
-pattern ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = AccessFlagBits 0x00000200
--- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT' specifies write access to a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass depth\/stencil attachment>,
--- via
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-ds-state depth or stencil operations>
--- or via certain
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load and store operations>.
-pattern ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = AccessFlagBits 0x00000400
--- | 'ACCESS_TRANSFER_READ_BIT' specifies read access to an image or buffer
--- in a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy>
--- operation.
-pattern ACCESS_TRANSFER_READ_BIT = AccessFlagBits 0x00000800
--- | 'ACCESS_TRANSFER_WRITE_BIT' specifies write access to an image or buffer
--- in a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear>
--- or
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy>
--- operation.
-pattern ACCESS_TRANSFER_WRITE_BIT = AccessFlagBits 0x00001000
--- | '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.
-pattern ACCESS_HOST_READ_BIT = AccessFlagBits 0x00002000
--- | '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.
-pattern ACCESS_HOST_WRITE_BIT = AccessFlagBits 0x00004000
--- | 'ACCESS_MEMORY_READ_BIT' specifies all read accesses. It is always valid
--- in any access mask, and is treated as equivalent to setting all @READ@
--- access flags that are valid where it is used.
-pattern ACCESS_MEMORY_READ_BIT = AccessFlagBits 0x00008000
--- | 'ACCESS_MEMORY_WRITE_BIT' specifies all write accesses. It is always
--- valid in any access mask, and is treated as equivalent to setting all
--- @WRITE@ access flags that are valid where it is used.
-pattern ACCESS_MEMORY_WRITE_BIT = AccessFlagBits 0x00010000
--- | 'ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV' specifies writes to the
--- 'Graphics.Vulkan.Core10.Handles.Buffer' preprocess outputs in
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV'.
-pattern ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = AccessFlagBits 0x00040000
--- | 'ACCESS_COMMAND_PREPROCESS_READ_BIT_NV' specifies reads from
--- 'Graphics.Vulkan.Core10.Handles.Buffer' inputs to
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV'.
-pattern ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = AccessFlagBits 0x00020000
--- | 'ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT' specifies read access to a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>
--- during dynamic
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops fragment density map operations>
-pattern ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = AccessFlagBits 0x01000000
--- | 'ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV' specifies read access to a
--- shading rate image as part of a drawing command, as bound by
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV'.
-pattern ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = AccessFlagBits 0x00800000
--- | 'ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR' specifies write access to
--- an acceleration structure as part of a build command.
-pattern ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = AccessFlagBits 0x00400000
--- | 'ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR' specifies read access to an
--- acceleration structure as part of a trace or build command.
-pattern ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR = AccessFlagBits 0x00200000
--- | 'ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT' is similar to
--- 'ACCESS_COLOR_ATTACHMENT_READ_BIT', but also includes
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operations>.
-pattern ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = AccessFlagBits 0x00080000
--- | 'ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT' specifies read access to a
--- predicate as part of conditional rendering.
-pattern ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT = AccessFlagBits 0x00100000
--- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT' specifies write access
--- to a transform feedback counter buffer which is written when
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT'
--- executes.
-pattern ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = AccessFlagBits 0x08000000
--- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT' specifies read access
--- to a transform feedback counter buffer which is read when
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT'
--- executes.
-pattern ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = AccessFlagBits 0x04000000
--- | 'ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT' specifies write access to a
--- transform feedback buffer made when transform feedback is active.
-pattern ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = AccessFlagBits 0x02000000
-
-type AccessFlags = AccessFlagBits
-
-instance Show AccessFlagBits where
-  showsPrec p = \case
-    ACCESS_INDIRECT_COMMAND_READ_BIT -> showString "ACCESS_INDIRECT_COMMAND_READ_BIT"
-    ACCESS_INDEX_READ_BIT -> showString "ACCESS_INDEX_READ_BIT"
-    ACCESS_VERTEX_ATTRIBUTE_READ_BIT -> showString "ACCESS_VERTEX_ATTRIBUTE_READ_BIT"
-    ACCESS_UNIFORM_READ_BIT -> showString "ACCESS_UNIFORM_READ_BIT"
-    ACCESS_INPUT_ATTACHMENT_READ_BIT -> showString "ACCESS_INPUT_ATTACHMENT_READ_BIT"
-    ACCESS_SHADER_READ_BIT -> showString "ACCESS_SHADER_READ_BIT"
-    ACCESS_SHADER_WRITE_BIT -> showString "ACCESS_SHADER_WRITE_BIT"
-    ACCESS_COLOR_ATTACHMENT_READ_BIT -> showString "ACCESS_COLOR_ATTACHMENT_READ_BIT"
-    ACCESS_COLOR_ATTACHMENT_WRITE_BIT -> showString "ACCESS_COLOR_ATTACHMENT_WRITE_BIT"
-    ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT -> showString "ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"
-    ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT -> showString "ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"
-    ACCESS_TRANSFER_READ_BIT -> showString "ACCESS_TRANSFER_READ_BIT"
-    ACCESS_TRANSFER_WRITE_BIT -> showString "ACCESS_TRANSFER_WRITE_BIT"
-    ACCESS_HOST_READ_BIT -> showString "ACCESS_HOST_READ_BIT"
-    ACCESS_HOST_WRITE_BIT -> showString "ACCESS_HOST_WRITE_BIT"
-    ACCESS_MEMORY_READ_BIT -> showString "ACCESS_MEMORY_READ_BIT"
-    ACCESS_MEMORY_WRITE_BIT -> showString "ACCESS_MEMORY_WRITE_BIT"
-    ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV -> showString "ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV"
-    ACCESS_COMMAND_PREPROCESS_READ_BIT_NV -> showString "ACCESS_COMMAND_PREPROCESS_READ_BIT_NV"
-    ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT -> showString "ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT"
-    ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV -> showString "ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV"
-    ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR -> showString "ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"
-    ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR -> showString "ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR"
-    ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT -> showString "ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"
-    ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT -> showString "ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT"
-    ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT -> showString "ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT"
-    ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT -> showString "ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT"
-    ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT -> showString "ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT"
-    AccessFlagBits x -> showParen (p >= 11) (showString "AccessFlagBits 0x" . showHex x)
-
-instance Read AccessFlagBits where
-  readPrec = parens (choose [("ACCESS_INDIRECT_COMMAND_READ_BIT", pure ACCESS_INDIRECT_COMMAND_READ_BIT)
-                            , ("ACCESS_INDEX_READ_BIT", pure ACCESS_INDEX_READ_BIT)
-                            , ("ACCESS_VERTEX_ATTRIBUTE_READ_BIT", pure ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
-                            , ("ACCESS_UNIFORM_READ_BIT", pure ACCESS_UNIFORM_READ_BIT)
-                            , ("ACCESS_INPUT_ATTACHMENT_READ_BIT", pure ACCESS_INPUT_ATTACHMENT_READ_BIT)
-                            , ("ACCESS_SHADER_READ_BIT", pure ACCESS_SHADER_READ_BIT)
-                            , ("ACCESS_SHADER_WRITE_BIT", pure ACCESS_SHADER_WRITE_BIT)
-                            , ("ACCESS_COLOR_ATTACHMENT_READ_BIT", pure ACCESS_COLOR_ATTACHMENT_READ_BIT)
-                            , ("ACCESS_COLOR_ATTACHMENT_WRITE_BIT", pure ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
-                            , ("ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT", pure ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
-                            , ("ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT", pure ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
-                            , ("ACCESS_TRANSFER_READ_BIT", pure ACCESS_TRANSFER_READ_BIT)
-                            , ("ACCESS_TRANSFER_WRITE_BIT", pure ACCESS_TRANSFER_WRITE_BIT)
-                            , ("ACCESS_HOST_READ_BIT", pure ACCESS_HOST_READ_BIT)
-                            , ("ACCESS_HOST_WRITE_BIT", pure ACCESS_HOST_WRITE_BIT)
-                            , ("ACCESS_MEMORY_READ_BIT", pure ACCESS_MEMORY_READ_BIT)
-                            , ("ACCESS_MEMORY_WRITE_BIT", pure ACCESS_MEMORY_WRITE_BIT)
-                            , ("ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV", pure ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV)
-                            , ("ACCESS_COMMAND_PREPROCESS_READ_BIT_NV", pure ACCESS_COMMAND_PREPROCESS_READ_BIT_NV)
-                            , ("ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT", pure ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT)
-                            , ("ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV", pure ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV)
-                            , ("ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR", pure ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR)
-                            , ("ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR", pure ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR)
-                            , ("ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT", pure ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT)
-                            , ("ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT", pure ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT)
-                            , ("ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT", pure ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT)
-                            , ("ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT", pure ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT)
-                            , ("ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT", pure ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "AccessFlagBits")
-                       v <- step readPrec
-                       pure (AccessFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/AttachmentDescriptionFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/AttachmentDescriptionFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/AttachmentDescriptionFlagBits.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits  ( AttachmentDescriptionFlagBits( ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
-                                                                                                  , ..
-                                                                                                  )
-                                                                   , AttachmentDescriptionFlags
-                                                                   ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkAttachmentDescriptionFlagBits - Bitmask specifying additional
--- properties of an attachment
---
--- = See Also
---
--- 'AttachmentDescriptionFlags'
-newtype AttachmentDescriptionFlagBits = AttachmentDescriptionFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT' specifies that the attachment
--- aliases the same device memory as other attachments.
-pattern ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = AttachmentDescriptionFlagBits 0x00000001
-
-type AttachmentDescriptionFlags = AttachmentDescriptionFlagBits
-
-instance Show AttachmentDescriptionFlagBits where
-  showsPrec p = \case
-    ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT -> showString "ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"
-    AttachmentDescriptionFlagBits x -> showParen (p >= 11) (showString "AttachmentDescriptionFlagBits 0x" . showHex x)
-
-instance Read AttachmentDescriptionFlagBits where
-  readPrec = parens (choose [("ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT", pure ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "AttachmentDescriptionFlagBits")
-                       v <- step readPrec
-                       pure (AttachmentDescriptionFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/AttachmentLoadOp.hs b/src/Graphics/Vulkan/Core10/Enums/AttachmentLoadOp.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/AttachmentLoadOp.hs
+++ /dev/null
@@ -1,75 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.AttachmentLoadOp  (AttachmentLoadOp( ATTACHMENT_LOAD_OP_LOAD
-                                                                       , ATTACHMENT_LOAD_OP_CLEAR
-                                                                       , ATTACHMENT_LOAD_OP_DONT_CARE
-                                                                       , ..
-                                                                       )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkAttachmentLoadOp - Specify how contents of an attachment are treated
--- at the beginning of a subpass
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pass.AttachmentDescription',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2'
-newtype AttachmentLoadOp = AttachmentLoadOp Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | '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
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT'.
--- For attachments with a color format, this uses the access type
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_READ_BIT'.
-pattern ATTACHMENT_LOAD_OP_LOAD = AttachmentLoadOp 0
--- | '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
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'.
--- For attachments with a color format, this uses the access type
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.
-pattern ATTACHMENT_LOAD_OP_CLEAR = AttachmentLoadOp 1
--- | '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
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'.
--- For attachments with a color format, this uses the access type
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.
-pattern ATTACHMENT_LOAD_OP_DONT_CARE = AttachmentLoadOp 2
-{-# complete ATTACHMENT_LOAD_OP_LOAD,
-             ATTACHMENT_LOAD_OP_CLEAR,
-             ATTACHMENT_LOAD_OP_DONT_CARE :: AttachmentLoadOp #-}
-
-instance Show AttachmentLoadOp where
-  showsPrec p = \case
-    ATTACHMENT_LOAD_OP_LOAD -> showString "ATTACHMENT_LOAD_OP_LOAD"
-    ATTACHMENT_LOAD_OP_CLEAR -> showString "ATTACHMENT_LOAD_OP_CLEAR"
-    ATTACHMENT_LOAD_OP_DONT_CARE -> showString "ATTACHMENT_LOAD_OP_DONT_CARE"
-    AttachmentLoadOp x -> showParen (p >= 11) (showString "AttachmentLoadOp " . showsPrec 11 x)
-
-instance Read AttachmentLoadOp where
-  readPrec = parens (choose [("ATTACHMENT_LOAD_OP_LOAD", pure ATTACHMENT_LOAD_OP_LOAD)
-                            , ("ATTACHMENT_LOAD_OP_CLEAR", pure ATTACHMENT_LOAD_OP_CLEAR)
-                            , ("ATTACHMENT_LOAD_OP_DONT_CARE", pure ATTACHMENT_LOAD_OP_DONT_CARE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "AttachmentLoadOp")
-                       v <- step readPrec
-                       pure (AttachmentLoadOp v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/AttachmentStoreOp.hs b/src/Graphics/Vulkan/Core10/Enums/AttachmentStoreOp.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/AttachmentStoreOp.hs
+++ /dev/null
@@ -1,80 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.AttachmentStoreOp  (AttachmentStoreOp( ATTACHMENT_STORE_OP_STORE
-                                                                         , ATTACHMENT_STORE_OP_DONT_CARE
-                                                                         , ATTACHMENT_STORE_OP_NONE_QCOM
-                                                                         , ..
-                                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkAttachmentStoreOp - Specify how contents of an attachment are treated
--- at the end of a subpass
---
--- = Description
---
--- Note
---
--- 'ATTACHMENT_STORE_OP_DONT_CARE' /can/ cause contents generated during
--- previous render passes to be discarded before reaching memory, even if
--- no write to the attachment occurs during the current render pass.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pass.AttachmentDescription',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2'
-newtype AttachmentStoreOp = AttachmentStoreOp Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | '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
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'.
--- For attachments with a color format, this uses the access type
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.
-pattern ATTACHMENT_STORE_OP_STORE = AttachmentStoreOp 0
--- | '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
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'.
--- For attachments with a color format, this uses the access type
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.
-pattern ATTACHMENT_STORE_OP_DONT_CARE = AttachmentStoreOp 1
--- | 'ATTACHMENT_STORE_OP_NONE_QCOM' specifies that the contents within the
--- render area were not written during rendering, and /may/ not be written
--- to memory. If the attachment was written to during the renderpass, the
--- contents of the attachment will be undefined inside the render area.
-pattern ATTACHMENT_STORE_OP_NONE_QCOM = AttachmentStoreOp 1000301000
-{-# complete ATTACHMENT_STORE_OP_STORE,
-             ATTACHMENT_STORE_OP_DONT_CARE,
-             ATTACHMENT_STORE_OP_NONE_QCOM :: AttachmentStoreOp #-}
-
-instance Show AttachmentStoreOp where
-  showsPrec p = \case
-    ATTACHMENT_STORE_OP_STORE -> showString "ATTACHMENT_STORE_OP_STORE"
-    ATTACHMENT_STORE_OP_DONT_CARE -> showString "ATTACHMENT_STORE_OP_DONT_CARE"
-    ATTACHMENT_STORE_OP_NONE_QCOM -> showString "ATTACHMENT_STORE_OP_NONE_QCOM"
-    AttachmentStoreOp x -> showParen (p >= 11) (showString "AttachmentStoreOp " . showsPrec 11 x)
-
-instance Read AttachmentStoreOp where
-  readPrec = parens (choose [("ATTACHMENT_STORE_OP_STORE", pure ATTACHMENT_STORE_OP_STORE)
-                            , ("ATTACHMENT_STORE_OP_DONT_CARE", pure ATTACHMENT_STORE_OP_DONT_CARE)
-                            , ("ATTACHMENT_STORE_OP_NONE_QCOM", pure ATTACHMENT_STORE_OP_NONE_QCOM)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "AttachmentStoreOp")
-                       v <- step readPrec
-                       pure (AttachmentStoreOp v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/BlendFactor.hs b/src/Graphics/Vulkan/Core10/Enums/BlendFactor.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/BlendFactor.hs
+++ /dev/null
@@ -1,223 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.BlendFactor  (BlendFactor( BLEND_FACTOR_ZERO
-                                                             , BLEND_FACTOR_ONE
-                                                             , BLEND_FACTOR_SRC_COLOR
-                                                             , BLEND_FACTOR_ONE_MINUS_SRC_COLOR
-                                                             , BLEND_FACTOR_DST_COLOR
-                                                             , BLEND_FACTOR_ONE_MINUS_DST_COLOR
-                                                             , BLEND_FACTOR_SRC_ALPHA
-                                                             , BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
-                                                             , BLEND_FACTOR_DST_ALPHA
-                                                             , BLEND_FACTOR_ONE_MINUS_DST_ALPHA
-                                                             , BLEND_FACTOR_CONSTANT_COLOR
-                                                             , BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
-                                                             , BLEND_FACTOR_CONSTANT_ALPHA
-                                                             , BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
-                                                             , BLEND_FACTOR_SRC_ALPHA_SATURATE
-                                                             , BLEND_FACTOR_SRC1_COLOR
-                                                             , BLEND_FACTOR_ONE_MINUS_SRC1_COLOR
-                                                             , BLEND_FACTOR_SRC1_ALPHA
-                                                             , BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
-                                                             , ..
-                                                             )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkBlendFactor - Framebuffer blending factors
---
--- = Description
---
--- The semantics of each enum value is described in the table below:
---
--- +-----------------------------------------+---------------------+--------+
--- | 'BlendFactor'                           | RGB Blend Factors   | Alpha  |
--- |                                         | (Sr,Sg,Sb) or       | Blend  |
--- |                                         | (Dr,Dg,Db)          | Factor |
--- |                                         |                     | (Sa or |
--- |                                         |                     | Da)    |
--- +=========================================+=====================+========+
--- | 'BLEND_FACTOR_ZERO'                     | (0,0,0)             | 0      |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_ONE'                      | (1,1,1)             | 1      |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_SRC_COLOR'                | (Rs0,Gs0,Bs0)       | As0    |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_ONE_MINUS_SRC_COLOR'      | (1-Rs0,1-Gs0,1-Bs0) | 1-As0  |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_DST_COLOR'                | (Rd,Gd,Bd)          | Ad     |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_ONE_MINUS_DST_COLOR'      | (1-Rd,1-Gd,1-Bd)    | 1-Ad   |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_SRC_ALPHA'                | (As0,As0,As0)       | As0    |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_ONE_MINUS_SRC_ALPHA'      | (1-As0,1-As0,1-As0) | 1-As0  |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_DST_ALPHA'                | (Ad,Ad,Ad)          | Ad     |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_ONE_MINUS_DST_ALPHA'      | (1-Ad,1-Ad,1-Ad)    | 1-Ad   |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_CONSTANT_COLOR'           | (Rc,Gc,Bc)          | Ac     |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR' | (1-Rc,1-Gc,1-Bc)    | 1-Ac   |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_CONSTANT_ALPHA'           | (Ac,Ac,Ac)          | Ac     |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA' | (1-Ac,1-Ac,1-Ac)    | 1-Ac   |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_SRC_ALPHA_SATURATE'       | (f,f,f); f =        | 1      |
--- |                                         | min(As0,1-Ad)       |        |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_SRC1_COLOR'               | (Rs1,Gs1,Bs1)       | As1    |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_ONE_MINUS_SRC1_COLOR'     | (1-Rs1,1-Gs1,1-Bs1) | 1-As1  |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_SRC1_ALPHA'               | (As1,As1,As1)       | As1    |
--- +-----------------------------------------+---------------------+--------+
--- | 'BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'     | (1-As1,1-As1,1-As1) | 1-As1  |
--- +-----------------------------------------+---------------------+--------+
---
--- Blend Factors
---
--- In this table, the following conventions are used:
---
--- -   Rs0,Gs0,Bs0 and As0 represent the first source color R, G, B, and A
---     components, respectively, for the fragment output location
---     corresponding to the color attachment being blended.
---
--- -   Rs1,Gs1,Bs1 and As1 represent the second source color R, G, B, and A
---     components, respectively, used in dual source blending modes, for
---     the fragment output location corresponding to the color attachment
---     being blended.
---
--- -   Rd,Gd,Bd and Ad represent the R, G, B, and A components of the
---     destination color. That is, the color currently in the corresponding
---     color attachment for this fragment\/sample.
---
--- -   Rc,Gc,Bc and Ac represent the blend constant R, G, B, and A
---     components, respectively.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'
-newtype BlendFactor = BlendFactor Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ZERO"
-pattern BLEND_FACTOR_ZERO = BlendFactor 0
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE"
-pattern BLEND_FACTOR_ONE = BlendFactor 1
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_COLOR"
-pattern BLEND_FACTOR_SRC_COLOR = BlendFactor 2
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR"
-pattern BLEND_FACTOR_ONE_MINUS_SRC_COLOR = BlendFactor 3
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_DST_COLOR"
-pattern BLEND_FACTOR_DST_COLOR = BlendFactor 4
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR"
-pattern BLEND_FACTOR_ONE_MINUS_DST_COLOR = BlendFactor 5
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_ALPHA"
-pattern BLEND_FACTOR_SRC_ALPHA = BlendFactor 6
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"
-pattern BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = BlendFactor 7
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_DST_ALPHA"
-pattern BLEND_FACTOR_DST_ALPHA = BlendFactor 8
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA"
-pattern BLEND_FACTOR_ONE_MINUS_DST_ALPHA = BlendFactor 9
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_CONSTANT_COLOR"
-pattern BLEND_FACTOR_CONSTANT_COLOR = BlendFactor 10
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"
-pattern BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = BlendFactor 11
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_CONSTANT_ALPHA"
-pattern BLEND_FACTOR_CONSTANT_ALPHA = BlendFactor 12
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"
-pattern BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = BlendFactor 13
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE"
-pattern BLEND_FACTOR_SRC_ALPHA_SATURATE = BlendFactor 14
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC1_COLOR"
-pattern BLEND_FACTOR_SRC1_COLOR = BlendFactor 15
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"
-pattern BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = BlendFactor 16
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC1_ALPHA"
-pattern BLEND_FACTOR_SRC1_ALPHA = BlendFactor 17
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"
-pattern BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = BlendFactor 18
-{-# complete BLEND_FACTOR_ZERO,
-             BLEND_FACTOR_ONE,
-             BLEND_FACTOR_SRC_COLOR,
-             BLEND_FACTOR_ONE_MINUS_SRC_COLOR,
-             BLEND_FACTOR_DST_COLOR,
-             BLEND_FACTOR_ONE_MINUS_DST_COLOR,
-             BLEND_FACTOR_SRC_ALPHA,
-             BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
-             BLEND_FACTOR_DST_ALPHA,
-             BLEND_FACTOR_ONE_MINUS_DST_ALPHA,
-             BLEND_FACTOR_CONSTANT_COLOR,
-             BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
-             BLEND_FACTOR_CONSTANT_ALPHA,
-             BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,
-             BLEND_FACTOR_SRC_ALPHA_SATURATE,
-             BLEND_FACTOR_SRC1_COLOR,
-             BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
-             BLEND_FACTOR_SRC1_ALPHA,
-             BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA :: BlendFactor #-}
-
-instance Show BlendFactor where
-  showsPrec p = \case
-    BLEND_FACTOR_ZERO -> showString "BLEND_FACTOR_ZERO"
-    BLEND_FACTOR_ONE -> showString "BLEND_FACTOR_ONE"
-    BLEND_FACTOR_SRC_COLOR -> showString "BLEND_FACTOR_SRC_COLOR"
-    BLEND_FACTOR_ONE_MINUS_SRC_COLOR -> showString "BLEND_FACTOR_ONE_MINUS_SRC_COLOR"
-    BLEND_FACTOR_DST_COLOR -> showString "BLEND_FACTOR_DST_COLOR"
-    BLEND_FACTOR_ONE_MINUS_DST_COLOR -> showString "BLEND_FACTOR_ONE_MINUS_DST_COLOR"
-    BLEND_FACTOR_SRC_ALPHA -> showString "BLEND_FACTOR_SRC_ALPHA"
-    BLEND_FACTOR_ONE_MINUS_SRC_ALPHA -> showString "BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"
-    BLEND_FACTOR_DST_ALPHA -> showString "BLEND_FACTOR_DST_ALPHA"
-    BLEND_FACTOR_ONE_MINUS_DST_ALPHA -> showString "BLEND_FACTOR_ONE_MINUS_DST_ALPHA"
-    BLEND_FACTOR_CONSTANT_COLOR -> showString "BLEND_FACTOR_CONSTANT_COLOR"
-    BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR -> showString "BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"
-    BLEND_FACTOR_CONSTANT_ALPHA -> showString "BLEND_FACTOR_CONSTANT_ALPHA"
-    BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA -> showString "BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"
-    BLEND_FACTOR_SRC_ALPHA_SATURATE -> showString "BLEND_FACTOR_SRC_ALPHA_SATURATE"
-    BLEND_FACTOR_SRC1_COLOR -> showString "BLEND_FACTOR_SRC1_COLOR"
-    BLEND_FACTOR_ONE_MINUS_SRC1_COLOR -> showString "BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"
-    BLEND_FACTOR_SRC1_ALPHA -> showString "BLEND_FACTOR_SRC1_ALPHA"
-    BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA -> showString "BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"
-    BlendFactor x -> showParen (p >= 11) (showString "BlendFactor " . showsPrec 11 x)
-
-instance Read BlendFactor where
-  readPrec = parens (choose [("BLEND_FACTOR_ZERO", pure BLEND_FACTOR_ZERO)
-                            , ("BLEND_FACTOR_ONE", pure BLEND_FACTOR_ONE)
-                            , ("BLEND_FACTOR_SRC_COLOR", pure BLEND_FACTOR_SRC_COLOR)
-                            , ("BLEND_FACTOR_ONE_MINUS_SRC_COLOR", pure BLEND_FACTOR_ONE_MINUS_SRC_COLOR)
-                            , ("BLEND_FACTOR_DST_COLOR", pure BLEND_FACTOR_DST_COLOR)
-                            , ("BLEND_FACTOR_ONE_MINUS_DST_COLOR", pure BLEND_FACTOR_ONE_MINUS_DST_COLOR)
-                            , ("BLEND_FACTOR_SRC_ALPHA", pure BLEND_FACTOR_SRC_ALPHA)
-                            , ("BLEND_FACTOR_ONE_MINUS_SRC_ALPHA", pure BLEND_FACTOR_ONE_MINUS_SRC_ALPHA)
-                            , ("BLEND_FACTOR_DST_ALPHA", pure BLEND_FACTOR_DST_ALPHA)
-                            , ("BLEND_FACTOR_ONE_MINUS_DST_ALPHA", pure BLEND_FACTOR_ONE_MINUS_DST_ALPHA)
-                            , ("BLEND_FACTOR_CONSTANT_COLOR", pure BLEND_FACTOR_CONSTANT_COLOR)
-                            , ("BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR", pure BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR)
-                            , ("BLEND_FACTOR_CONSTANT_ALPHA", pure BLEND_FACTOR_CONSTANT_ALPHA)
-                            , ("BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA", pure BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA)
-                            , ("BLEND_FACTOR_SRC_ALPHA_SATURATE", pure BLEND_FACTOR_SRC_ALPHA_SATURATE)
-                            , ("BLEND_FACTOR_SRC1_COLOR", pure BLEND_FACTOR_SRC1_COLOR)
-                            , ("BLEND_FACTOR_ONE_MINUS_SRC1_COLOR", pure BLEND_FACTOR_ONE_MINUS_SRC1_COLOR)
-                            , ("BLEND_FACTOR_SRC1_ALPHA", pure BLEND_FACTOR_SRC1_ALPHA)
-                            , ("BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA", pure BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "BlendFactor")
-                       v <- step readPrec
-                       pure (BlendFactor v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/BlendOp.hs b/src/Graphics/Vulkan/Core10/Enums/BlendOp.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/BlendOp.hs
+++ /dev/null
@@ -1,410 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.BlendOp  (BlendOp( BLEND_OP_ADD
-                                                     , BLEND_OP_SUBTRACT
-                                                     , BLEND_OP_REVERSE_SUBTRACT
-                                                     , BLEND_OP_MIN
-                                                     , BLEND_OP_MAX
-                                                     , BLEND_OP_BLUE_EXT
-                                                     , BLEND_OP_GREEN_EXT
-                                                     , BLEND_OP_RED_EXT
-                                                     , BLEND_OP_INVERT_OVG_EXT
-                                                     , BLEND_OP_CONTRAST_EXT
-                                                     , BLEND_OP_MINUS_CLAMPED_EXT
-                                                     , BLEND_OP_MINUS_EXT
-                                                     , BLEND_OP_PLUS_DARKER_EXT
-                                                     , BLEND_OP_PLUS_CLAMPED_ALPHA_EXT
-                                                     , BLEND_OP_PLUS_CLAMPED_EXT
-                                                     , BLEND_OP_PLUS_EXT
-                                                     , BLEND_OP_HSL_LUMINOSITY_EXT
-                                                     , BLEND_OP_HSL_COLOR_EXT
-                                                     , BLEND_OP_HSL_SATURATION_EXT
-                                                     , BLEND_OP_HSL_HUE_EXT
-                                                     , BLEND_OP_HARDMIX_EXT
-                                                     , BLEND_OP_PINLIGHT_EXT
-                                                     , BLEND_OP_LINEARLIGHT_EXT
-                                                     , BLEND_OP_VIVIDLIGHT_EXT
-                                                     , BLEND_OP_LINEARBURN_EXT
-                                                     , BLEND_OP_LINEARDODGE_EXT
-                                                     , BLEND_OP_INVERT_RGB_EXT
-                                                     , BLEND_OP_INVERT_EXT
-                                                     , BLEND_OP_EXCLUSION_EXT
-                                                     , BLEND_OP_DIFFERENCE_EXT
-                                                     , BLEND_OP_SOFTLIGHT_EXT
-                                                     , BLEND_OP_HARDLIGHT_EXT
-                                                     , BLEND_OP_COLORBURN_EXT
-                                                     , BLEND_OP_COLORDODGE_EXT
-                                                     , BLEND_OP_LIGHTEN_EXT
-                                                     , BLEND_OP_DARKEN_EXT
-                                                     , BLEND_OP_OVERLAY_EXT
-                                                     , BLEND_OP_SCREEN_EXT
-                                                     , BLEND_OP_MULTIPLY_EXT
-                                                     , BLEND_OP_XOR_EXT
-                                                     , BLEND_OP_DST_ATOP_EXT
-                                                     , BLEND_OP_SRC_ATOP_EXT
-                                                     , BLEND_OP_DST_OUT_EXT
-                                                     , BLEND_OP_SRC_OUT_EXT
-                                                     , BLEND_OP_DST_IN_EXT
-                                                     , BLEND_OP_SRC_IN_EXT
-                                                     , BLEND_OP_DST_OVER_EXT
-                                                     , BLEND_OP_SRC_OVER_EXT
-                                                     , BLEND_OP_DST_EXT
-                                                     , BLEND_OP_SRC_EXT
-                                                     , BLEND_OP_ZERO_EXT
-                                                     , ..
-                                                     )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkBlendOp - Framebuffer blending operations
---
--- = Description
---
--- The semantics of each basic blend operations is described in the table
--- below:
---
--- +-------------------------------+--------------------+-----------------+
--- | 'BlendOp'                     | RGB Components     | Alpha Component |
--- +===============================+====================+=================+
--- | 'BLEND_OP_ADD'                | R = Rs0 × Sr + Rd  | A = As0 × Sa +  |
--- |                               | × Dr               | Ad × Da         |
--- |                               | G = Gs0 × Sg + Gd  |                 |
--- |                               | × Dg               |                 |
--- |                               | B = Bs0 × Sb + Bd  |                 |
--- |                               | × Db               |                 |
--- +-------------------------------+--------------------+-----------------+
--- | 'BLEND_OP_SUBTRACT'           | R = Rs0 × Sr - Rd  | A = As0 × Sa -  |
--- |                               | × Dr               | Ad × Da         |
--- |                               | G = Gs0 × Sg - Gd  |                 |
--- |                               | × Dg               |                 |
--- |                               | B = Bs0 × Sb - Bd  |                 |
--- |                               | × Db               |                 |
--- +-------------------------------+--------------------+-----------------+
--- | 'BLEND_OP_REVERSE_SUBTRACT'   | R = Rd × Dr - Rs0  | A = Ad × Da -   |
--- |                               | × Sr               | As0 × Sa        |
--- |                               | G = Gd × Dg - Gs0  |                 |
--- |                               | × Sg               |                 |
--- |                               | B = Bd × Db - Bs0  |                 |
--- |                               | × Sb               |                 |
--- +-------------------------------+--------------------+-----------------+
--- | 'BLEND_OP_MIN'                | R = min(Rs0,Rd)    | A = min(As0,Ad) |
--- |                               | G = min(Gs0,Gd)    |                 |
--- |                               | B = min(Bs0,Bd)    |                 |
--- +-------------------------------+--------------------+-----------------+
--- | 'BLEND_OP_MAX'                | R = max(Rs0,Rd)    | A = max(As0,Ad) |
--- |                               | G = max(Gs0,Gd)    |                 |
--- |                               | 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
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'
-newtype BlendOp = BlendOp Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_ADD"
-pattern BLEND_OP_ADD = BlendOp 0
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SUBTRACT"
-pattern BLEND_OP_SUBTRACT = BlendOp 1
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_REVERSE_SUBTRACT"
-pattern BLEND_OP_REVERSE_SUBTRACT = BlendOp 2
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MIN"
-pattern BLEND_OP_MIN = BlendOp 3
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MAX"
-pattern BLEND_OP_MAX = BlendOp 4
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_BLUE_EXT"
-pattern BLEND_OP_BLUE_EXT = BlendOp 1000148045
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_GREEN_EXT"
-pattern BLEND_OP_GREEN_EXT = BlendOp 1000148044
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_RED_EXT"
-pattern BLEND_OP_RED_EXT = BlendOp 1000148043
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_INVERT_OVG_EXT"
-pattern BLEND_OP_INVERT_OVG_EXT = BlendOp 1000148042
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_CONTRAST_EXT"
-pattern BLEND_OP_CONTRAST_EXT = BlendOp 1000148041
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MINUS_CLAMPED_EXT"
-pattern BLEND_OP_MINUS_CLAMPED_EXT = BlendOp 1000148040
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MINUS_EXT"
-pattern BLEND_OP_MINUS_EXT = BlendOp 1000148039
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_DARKER_EXT"
-pattern BLEND_OP_PLUS_DARKER_EXT = BlendOp 1000148038
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT"
-pattern BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = BlendOp 1000148037
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_CLAMPED_EXT"
-pattern BLEND_OP_PLUS_CLAMPED_EXT = BlendOp 1000148036
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_EXT"
-pattern BLEND_OP_PLUS_EXT = BlendOp 1000148035
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_LUMINOSITY_EXT"
-pattern BLEND_OP_HSL_LUMINOSITY_EXT = BlendOp 1000148034
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_COLOR_EXT"
-pattern BLEND_OP_HSL_COLOR_EXT = BlendOp 1000148033
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_SATURATION_EXT"
-pattern BLEND_OP_HSL_SATURATION_EXT = BlendOp 1000148032
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_HUE_EXT"
-pattern BLEND_OP_HSL_HUE_EXT = BlendOp 1000148031
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HARDMIX_EXT"
-pattern BLEND_OP_HARDMIX_EXT = BlendOp 1000148030
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PINLIGHT_EXT"
-pattern BLEND_OP_PINLIGHT_EXT = BlendOp 1000148029
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LINEARLIGHT_EXT"
-pattern BLEND_OP_LINEARLIGHT_EXT = BlendOp 1000148028
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_VIVIDLIGHT_EXT"
-pattern BLEND_OP_VIVIDLIGHT_EXT = BlendOp 1000148027
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LINEARBURN_EXT"
-pattern BLEND_OP_LINEARBURN_EXT = BlendOp 1000148026
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LINEARDODGE_EXT"
-pattern BLEND_OP_LINEARDODGE_EXT = BlendOp 1000148025
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_INVERT_RGB_EXT"
-pattern BLEND_OP_INVERT_RGB_EXT = BlendOp 1000148024
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_INVERT_EXT"
-pattern BLEND_OP_INVERT_EXT = BlendOp 1000148023
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_EXCLUSION_EXT"
-pattern BLEND_OP_EXCLUSION_EXT = BlendOp 1000148022
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DIFFERENCE_EXT"
-pattern BLEND_OP_DIFFERENCE_EXT = BlendOp 1000148021
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SOFTLIGHT_EXT"
-pattern BLEND_OP_SOFTLIGHT_EXT = BlendOp 1000148020
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HARDLIGHT_EXT"
-pattern BLEND_OP_HARDLIGHT_EXT = BlendOp 1000148019
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_COLORBURN_EXT"
-pattern BLEND_OP_COLORBURN_EXT = BlendOp 1000148018
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_COLORDODGE_EXT"
-pattern BLEND_OP_COLORDODGE_EXT = BlendOp 1000148017
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LIGHTEN_EXT"
-pattern BLEND_OP_LIGHTEN_EXT = BlendOp 1000148016
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DARKEN_EXT"
-pattern BLEND_OP_DARKEN_EXT = BlendOp 1000148015
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_OVERLAY_EXT"
-pattern BLEND_OP_OVERLAY_EXT = BlendOp 1000148014
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SCREEN_EXT"
-pattern BLEND_OP_SCREEN_EXT = BlendOp 1000148013
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MULTIPLY_EXT"
-pattern BLEND_OP_MULTIPLY_EXT = BlendOp 1000148012
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_XOR_EXT"
-pattern BLEND_OP_XOR_EXT = BlendOp 1000148011
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_ATOP_EXT"
-pattern BLEND_OP_DST_ATOP_EXT = BlendOp 1000148010
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_ATOP_EXT"
-pattern BLEND_OP_SRC_ATOP_EXT = BlendOp 1000148009
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_OUT_EXT"
-pattern BLEND_OP_DST_OUT_EXT = BlendOp 1000148008
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_OUT_EXT"
-pattern BLEND_OP_SRC_OUT_EXT = BlendOp 1000148007
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_IN_EXT"
-pattern BLEND_OP_DST_IN_EXT = BlendOp 1000148006
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_IN_EXT"
-pattern BLEND_OP_SRC_IN_EXT = BlendOp 1000148005
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_OVER_EXT"
-pattern BLEND_OP_DST_OVER_EXT = BlendOp 1000148004
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_OVER_EXT"
-pattern BLEND_OP_SRC_OVER_EXT = BlendOp 1000148003
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_EXT"
-pattern BLEND_OP_DST_EXT = BlendOp 1000148002
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_EXT"
-pattern BLEND_OP_SRC_EXT = BlendOp 1000148001
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_ZERO_EXT"
-pattern BLEND_OP_ZERO_EXT = BlendOp 1000148000
-{-# complete BLEND_OP_ADD,
-             BLEND_OP_SUBTRACT,
-             BLEND_OP_REVERSE_SUBTRACT,
-             BLEND_OP_MIN,
-             BLEND_OP_MAX,
-             BLEND_OP_BLUE_EXT,
-             BLEND_OP_GREEN_EXT,
-             BLEND_OP_RED_EXT,
-             BLEND_OP_INVERT_OVG_EXT,
-             BLEND_OP_CONTRAST_EXT,
-             BLEND_OP_MINUS_CLAMPED_EXT,
-             BLEND_OP_MINUS_EXT,
-             BLEND_OP_PLUS_DARKER_EXT,
-             BLEND_OP_PLUS_CLAMPED_ALPHA_EXT,
-             BLEND_OP_PLUS_CLAMPED_EXT,
-             BLEND_OP_PLUS_EXT,
-             BLEND_OP_HSL_LUMINOSITY_EXT,
-             BLEND_OP_HSL_COLOR_EXT,
-             BLEND_OP_HSL_SATURATION_EXT,
-             BLEND_OP_HSL_HUE_EXT,
-             BLEND_OP_HARDMIX_EXT,
-             BLEND_OP_PINLIGHT_EXT,
-             BLEND_OP_LINEARLIGHT_EXT,
-             BLEND_OP_VIVIDLIGHT_EXT,
-             BLEND_OP_LINEARBURN_EXT,
-             BLEND_OP_LINEARDODGE_EXT,
-             BLEND_OP_INVERT_RGB_EXT,
-             BLEND_OP_INVERT_EXT,
-             BLEND_OP_EXCLUSION_EXT,
-             BLEND_OP_DIFFERENCE_EXT,
-             BLEND_OP_SOFTLIGHT_EXT,
-             BLEND_OP_HARDLIGHT_EXT,
-             BLEND_OP_COLORBURN_EXT,
-             BLEND_OP_COLORDODGE_EXT,
-             BLEND_OP_LIGHTEN_EXT,
-             BLEND_OP_DARKEN_EXT,
-             BLEND_OP_OVERLAY_EXT,
-             BLEND_OP_SCREEN_EXT,
-             BLEND_OP_MULTIPLY_EXT,
-             BLEND_OP_XOR_EXT,
-             BLEND_OP_DST_ATOP_EXT,
-             BLEND_OP_SRC_ATOP_EXT,
-             BLEND_OP_DST_OUT_EXT,
-             BLEND_OP_SRC_OUT_EXT,
-             BLEND_OP_DST_IN_EXT,
-             BLEND_OP_SRC_IN_EXT,
-             BLEND_OP_DST_OVER_EXT,
-             BLEND_OP_SRC_OVER_EXT,
-             BLEND_OP_DST_EXT,
-             BLEND_OP_SRC_EXT,
-             BLEND_OP_ZERO_EXT :: BlendOp #-}
-
-instance Show BlendOp where
-  showsPrec p = \case
-    BLEND_OP_ADD -> showString "BLEND_OP_ADD"
-    BLEND_OP_SUBTRACT -> showString "BLEND_OP_SUBTRACT"
-    BLEND_OP_REVERSE_SUBTRACT -> showString "BLEND_OP_REVERSE_SUBTRACT"
-    BLEND_OP_MIN -> showString "BLEND_OP_MIN"
-    BLEND_OP_MAX -> showString "BLEND_OP_MAX"
-    BLEND_OP_BLUE_EXT -> showString "BLEND_OP_BLUE_EXT"
-    BLEND_OP_GREEN_EXT -> showString "BLEND_OP_GREEN_EXT"
-    BLEND_OP_RED_EXT -> showString "BLEND_OP_RED_EXT"
-    BLEND_OP_INVERT_OVG_EXT -> showString "BLEND_OP_INVERT_OVG_EXT"
-    BLEND_OP_CONTRAST_EXT -> showString "BLEND_OP_CONTRAST_EXT"
-    BLEND_OP_MINUS_CLAMPED_EXT -> showString "BLEND_OP_MINUS_CLAMPED_EXT"
-    BLEND_OP_MINUS_EXT -> showString "BLEND_OP_MINUS_EXT"
-    BLEND_OP_PLUS_DARKER_EXT -> showString "BLEND_OP_PLUS_DARKER_EXT"
-    BLEND_OP_PLUS_CLAMPED_ALPHA_EXT -> showString "BLEND_OP_PLUS_CLAMPED_ALPHA_EXT"
-    BLEND_OP_PLUS_CLAMPED_EXT -> showString "BLEND_OP_PLUS_CLAMPED_EXT"
-    BLEND_OP_PLUS_EXT -> showString "BLEND_OP_PLUS_EXT"
-    BLEND_OP_HSL_LUMINOSITY_EXT -> showString "BLEND_OP_HSL_LUMINOSITY_EXT"
-    BLEND_OP_HSL_COLOR_EXT -> showString "BLEND_OP_HSL_COLOR_EXT"
-    BLEND_OP_HSL_SATURATION_EXT -> showString "BLEND_OP_HSL_SATURATION_EXT"
-    BLEND_OP_HSL_HUE_EXT -> showString "BLEND_OP_HSL_HUE_EXT"
-    BLEND_OP_HARDMIX_EXT -> showString "BLEND_OP_HARDMIX_EXT"
-    BLEND_OP_PINLIGHT_EXT -> showString "BLEND_OP_PINLIGHT_EXT"
-    BLEND_OP_LINEARLIGHT_EXT -> showString "BLEND_OP_LINEARLIGHT_EXT"
-    BLEND_OP_VIVIDLIGHT_EXT -> showString "BLEND_OP_VIVIDLIGHT_EXT"
-    BLEND_OP_LINEARBURN_EXT -> showString "BLEND_OP_LINEARBURN_EXT"
-    BLEND_OP_LINEARDODGE_EXT -> showString "BLEND_OP_LINEARDODGE_EXT"
-    BLEND_OP_INVERT_RGB_EXT -> showString "BLEND_OP_INVERT_RGB_EXT"
-    BLEND_OP_INVERT_EXT -> showString "BLEND_OP_INVERT_EXT"
-    BLEND_OP_EXCLUSION_EXT -> showString "BLEND_OP_EXCLUSION_EXT"
-    BLEND_OP_DIFFERENCE_EXT -> showString "BLEND_OP_DIFFERENCE_EXT"
-    BLEND_OP_SOFTLIGHT_EXT -> showString "BLEND_OP_SOFTLIGHT_EXT"
-    BLEND_OP_HARDLIGHT_EXT -> showString "BLEND_OP_HARDLIGHT_EXT"
-    BLEND_OP_COLORBURN_EXT -> showString "BLEND_OP_COLORBURN_EXT"
-    BLEND_OP_COLORDODGE_EXT -> showString "BLEND_OP_COLORDODGE_EXT"
-    BLEND_OP_LIGHTEN_EXT -> showString "BLEND_OP_LIGHTEN_EXT"
-    BLEND_OP_DARKEN_EXT -> showString "BLEND_OP_DARKEN_EXT"
-    BLEND_OP_OVERLAY_EXT -> showString "BLEND_OP_OVERLAY_EXT"
-    BLEND_OP_SCREEN_EXT -> showString "BLEND_OP_SCREEN_EXT"
-    BLEND_OP_MULTIPLY_EXT -> showString "BLEND_OP_MULTIPLY_EXT"
-    BLEND_OP_XOR_EXT -> showString "BLEND_OP_XOR_EXT"
-    BLEND_OP_DST_ATOP_EXT -> showString "BLEND_OP_DST_ATOP_EXT"
-    BLEND_OP_SRC_ATOP_EXT -> showString "BLEND_OP_SRC_ATOP_EXT"
-    BLEND_OP_DST_OUT_EXT -> showString "BLEND_OP_DST_OUT_EXT"
-    BLEND_OP_SRC_OUT_EXT -> showString "BLEND_OP_SRC_OUT_EXT"
-    BLEND_OP_DST_IN_EXT -> showString "BLEND_OP_DST_IN_EXT"
-    BLEND_OP_SRC_IN_EXT -> showString "BLEND_OP_SRC_IN_EXT"
-    BLEND_OP_DST_OVER_EXT -> showString "BLEND_OP_DST_OVER_EXT"
-    BLEND_OP_SRC_OVER_EXT -> showString "BLEND_OP_SRC_OVER_EXT"
-    BLEND_OP_DST_EXT -> showString "BLEND_OP_DST_EXT"
-    BLEND_OP_SRC_EXT -> showString "BLEND_OP_SRC_EXT"
-    BLEND_OP_ZERO_EXT -> showString "BLEND_OP_ZERO_EXT"
-    BlendOp x -> showParen (p >= 11) (showString "BlendOp " . showsPrec 11 x)
-
-instance Read BlendOp where
-  readPrec = parens (choose [("BLEND_OP_ADD", pure BLEND_OP_ADD)
-                            , ("BLEND_OP_SUBTRACT", pure BLEND_OP_SUBTRACT)
-                            , ("BLEND_OP_REVERSE_SUBTRACT", pure BLEND_OP_REVERSE_SUBTRACT)
-                            , ("BLEND_OP_MIN", pure BLEND_OP_MIN)
-                            , ("BLEND_OP_MAX", pure BLEND_OP_MAX)
-                            , ("BLEND_OP_BLUE_EXT", pure BLEND_OP_BLUE_EXT)
-                            , ("BLEND_OP_GREEN_EXT", pure BLEND_OP_GREEN_EXT)
-                            , ("BLEND_OP_RED_EXT", pure BLEND_OP_RED_EXT)
-                            , ("BLEND_OP_INVERT_OVG_EXT", pure BLEND_OP_INVERT_OVG_EXT)
-                            , ("BLEND_OP_CONTRAST_EXT", pure BLEND_OP_CONTRAST_EXT)
-                            , ("BLEND_OP_MINUS_CLAMPED_EXT", pure BLEND_OP_MINUS_CLAMPED_EXT)
-                            , ("BLEND_OP_MINUS_EXT", pure BLEND_OP_MINUS_EXT)
-                            , ("BLEND_OP_PLUS_DARKER_EXT", pure BLEND_OP_PLUS_DARKER_EXT)
-                            , ("BLEND_OP_PLUS_CLAMPED_ALPHA_EXT", pure BLEND_OP_PLUS_CLAMPED_ALPHA_EXT)
-                            , ("BLEND_OP_PLUS_CLAMPED_EXT", pure BLEND_OP_PLUS_CLAMPED_EXT)
-                            , ("BLEND_OP_PLUS_EXT", pure BLEND_OP_PLUS_EXT)
-                            , ("BLEND_OP_HSL_LUMINOSITY_EXT", pure BLEND_OP_HSL_LUMINOSITY_EXT)
-                            , ("BLEND_OP_HSL_COLOR_EXT", pure BLEND_OP_HSL_COLOR_EXT)
-                            , ("BLEND_OP_HSL_SATURATION_EXT", pure BLEND_OP_HSL_SATURATION_EXT)
-                            , ("BLEND_OP_HSL_HUE_EXT", pure BLEND_OP_HSL_HUE_EXT)
-                            , ("BLEND_OP_HARDMIX_EXT", pure BLEND_OP_HARDMIX_EXT)
-                            , ("BLEND_OP_PINLIGHT_EXT", pure BLEND_OP_PINLIGHT_EXT)
-                            , ("BLEND_OP_LINEARLIGHT_EXT", pure BLEND_OP_LINEARLIGHT_EXT)
-                            , ("BLEND_OP_VIVIDLIGHT_EXT", pure BLEND_OP_VIVIDLIGHT_EXT)
-                            , ("BLEND_OP_LINEARBURN_EXT", pure BLEND_OP_LINEARBURN_EXT)
-                            , ("BLEND_OP_LINEARDODGE_EXT", pure BLEND_OP_LINEARDODGE_EXT)
-                            , ("BLEND_OP_INVERT_RGB_EXT", pure BLEND_OP_INVERT_RGB_EXT)
-                            , ("BLEND_OP_INVERT_EXT", pure BLEND_OP_INVERT_EXT)
-                            , ("BLEND_OP_EXCLUSION_EXT", pure BLEND_OP_EXCLUSION_EXT)
-                            , ("BLEND_OP_DIFFERENCE_EXT", pure BLEND_OP_DIFFERENCE_EXT)
-                            , ("BLEND_OP_SOFTLIGHT_EXT", pure BLEND_OP_SOFTLIGHT_EXT)
-                            , ("BLEND_OP_HARDLIGHT_EXT", pure BLEND_OP_HARDLIGHT_EXT)
-                            , ("BLEND_OP_COLORBURN_EXT", pure BLEND_OP_COLORBURN_EXT)
-                            , ("BLEND_OP_COLORDODGE_EXT", pure BLEND_OP_COLORDODGE_EXT)
-                            , ("BLEND_OP_LIGHTEN_EXT", pure BLEND_OP_LIGHTEN_EXT)
-                            , ("BLEND_OP_DARKEN_EXT", pure BLEND_OP_DARKEN_EXT)
-                            , ("BLEND_OP_OVERLAY_EXT", pure BLEND_OP_OVERLAY_EXT)
-                            , ("BLEND_OP_SCREEN_EXT", pure BLEND_OP_SCREEN_EXT)
-                            , ("BLEND_OP_MULTIPLY_EXT", pure BLEND_OP_MULTIPLY_EXT)
-                            , ("BLEND_OP_XOR_EXT", pure BLEND_OP_XOR_EXT)
-                            , ("BLEND_OP_DST_ATOP_EXT", pure BLEND_OP_DST_ATOP_EXT)
-                            , ("BLEND_OP_SRC_ATOP_EXT", pure BLEND_OP_SRC_ATOP_EXT)
-                            , ("BLEND_OP_DST_OUT_EXT", pure BLEND_OP_DST_OUT_EXT)
-                            , ("BLEND_OP_SRC_OUT_EXT", pure BLEND_OP_SRC_OUT_EXT)
-                            , ("BLEND_OP_DST_IN_EXT", pure BLEND_OP_DST_IN_EXT)
-                            , ("BLEND_OP_SRC_IN_EXT", pure BLEND_OP_SRC_IN_EXT)
-                            , ("BLEND_OP_DST_OVER_EXT", pure BLEND_OP_DST_OVER_EXT)
-                            , ("BLEND_OP_SRC_OVER_EXT", pure BLEND_OP_SRC_OVER_EXT)
-                            , ("BLEND_OP_DST_EXT", pure BLEND_OP_DST_EXT)
-                            , ("BLEND_OP_SRC_EXT", pure BLEND_OP_SRC_EXT)
-                            , ("BLEND_OP_ZERO_EXT", pure BLEND_OP_ZERO_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "BlendOp")
-                       v <- step readPrec
-                       pure (BlendOp v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/BorderColor.hs b/src/Graphics/Vulkan/Core10/Enums/BorderColor.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/BorderColor.hs
+++ /dev/null
@@ -1,85 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.BorderColor  (BorderColor( BORDER_COLOR_FLOAT_TRANSPARENT_BLACK
-                                                             , BORDER_COLOR_INT_TRANSPARENT_BLACK
-                                                             , BORDER_COLOR_FLOAT_OPAQUE_BLACK
-                                                             , BORDER_COLOR_INT_OPAQUE_BLACK
-                                                             , BORDER_COLOR_FLOAT_OPAQUE_WHITE
-                                                             , BORDER_COLOR_INT_OPAQUE_WHITE
-                                                             , ..
-                                                             )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkBorderColor - Specify border color used for texture lookups
---
--- = Description
---
--- These colors are described in detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-texel-replacement Texel Replacement>.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo'
-newtype BorderColor = BorderColor Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'BORDER_COLOR_FLOAT_TRANSPARENT_BLACK' specifies a transparent,
--- floating-point format, black color.
-pattern BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = BorderColor 0
--- | 'BORDER_COLOR_INT_TRANSPARENT_BLACK' specifies a transparent, integer
--- format, black color.
-pattern BORDER_COLOR_INT_TRANSPARENT_BLACK = BorderColor 1
--- | 'BORDER_COLOR_FLOAT_OPAQUE_BLACK' specifies an opaque, floating-point
--- format, black color.
-pattern BORDER_COLOR_FLOAT_OPAQUE_BLACK = BorderColor 2
--- | 'BORDER_COLOR_INT_OPAQUE_BLACK' specifies an opaque, integer format,
--- black color.
-pattern BORDER_COLOR_INT_OPAQUE_BLACK = BorderColor 3
--- | 'BORDER_COLOR_FLOAT_OPAQUE_WHITE' specifies an opaque, floating-point
--- format, white color.
-pattern BORDER_COLOR_FLOAT_OPAQUE_WHITE = BorderColor 4
--- | 'BORDER_COLOR_INT_OPAQUE_WHITE' specifies an opaque, integer format,
--- white color.
-pattern BORDER_COLOR_INT_OPAQUE_WHITE = BorderColor 5
-{-# complete BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
-             BORDER_COLOR_INT_TRANSPARENT_BLACK,
-             BORDER_COLOR_FLOAT_OPAQUE_BLACK,
-             BORDER_COLOR_INT_OPAQUE_BLACK,
-             BORDER_COLOR_FLOAT_OPAQUE_WHITE,
-             BORDER_COLOR_INT_OPAQUE_WHITE :: BorderColor #-}
-
-instance Show BorderColor where
-  showsPrec p = \case
-    BORDER_COLOR_FLOAT_TRANSPARENT_BLACK -> showString "BORDER_COLOR_FLOAT_TRANSPARENT_BLACK"
-    BORDER_COLOR_INT_TRANSPARENT_BLACK -> showString "BORDER_COLOR_INT_TRANSPARENT_BLACK"
-    BORDER_COLOR_FLOAT_OPAQUE_BLACK -> showString "BORDER_COLOR_FLOAT_OPAQUE_BLACK"
-    BORDER_COLOR_INT_OPAQUE_BLACK -> showString "BORDER_COLOR_INT_OPAQUE_BLACK"
-    BORDER_COLOR_FLOAT_OPAQUE_WHITE -> showString "BORDER_COLOR_FLOAT_OPAQUE_WHITE"
-    BORDER_COLOR_INT_OPAQUE_WHITE -> showString "BORDER_COLOR_INT_OPAQUE_WHITE"
-    BorderColor x -> showParen (p >= 11) (showString "BorderColor " . showsPrec 11 x)
-
-instance Read BorderColor where
-  readPrec = parens (choose [("BORDER_COLOR_FLOAT_TRANSPARENT_BLACK", pure BORDER_COLOR_FLOAT_TRANSPARENT_BLACK)
-                            , ("BORDER_COLOR_INT_TRANSPARENT_BLACK", pure BORDER_COLOR_INT_TRANSPARENT_BLACK)
-                            , ("BORDER_COLOR_FLOAT_OPAQUE_BLACK", pure BORDER_COLOR_FLOAT_OPAQUE_BLACK)
-                            , ("BORDER_COLOR_INT_OPAQUE_BLACK", pure BORDER_COLOR_INT_OPAQUE_BLACK)
-                            , ("BORDER_COLOR_FLOAT_OPAQUE_WHITE", pure BORDER_COLOR_FLOAT_OPAQUE_WHITE)
-                            , ("BORDER_COLOR_INT_OPAQUE_WHITE", pure BORDER_COLOR_INT_OPAQUE_WHITE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "BorderColor")
-                       v <- step readPrec
-                       pure (BorderColor v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/BufferCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/BufferCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/BufferCreateFlagBits.hs
+++ /dev/null
@@ -1,90 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits  ( BufferCreateFlagBits( BUFFER_CREATE_SPARSE_BINDING_BIT
-                                                                                , BUFFER_CREATE_SPARSE_RESIDENCY_BIT
-                                                                                , BUFFER_CREATE_SPARSE_ALIASED_BIT
-                                                                                , BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
-                                                                                , BUFFER_CREATE_PROTECTED_BIT
-                                                                                , ..
-                                                                                )
-                                                          , BufferCreateFlags
-                                                          ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkBufferCreateFlagBits - Bitmask specifying additional parameters of a
--- buffer
---
--- = Description
---
--- See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures Sparse Resource Features>
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features Physical Device Features>
--- for details of the sparse memory features supported on a device.
---
--- = See Also
---
--- 'BufferCreateFlags'
-newtype BufferCreateFlagBits = BufferCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'BUFFER_CREATE_SPARSE_BINDING_BIT' specifies that the buffer will be
--- backed using sparse memory binding.
-pattern BUFFER_CREATE_SPARSE_BINDING_BIT = BufferCreateFlagBits 0x00000001
--- | '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 'BUFFER_CREATE_SPARSE_BINDING_BIT'
--- flag.
-pattern BUFFER_CREATE_SPARSE_RESIDENCY_BIT = BufferCreateFlagBits 0x00000002
--- | '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
--- 'BUFFER_CREATE_SPARSE_BINDING_BIT' flag.
-pattern BUFFER_CREATE_SPARSE_ALIASED_BIT = BufferCreateFlagBits 0x00000004
--- | 'BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT' specifies that the
--- buffer’s address /can/ be saved and reused on a subsequent run (e.g. for
--- trace capture and replay), see
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo'
--- for more detail.
-pattern BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = BufferCreateFlagBits 0x00000010
--- | 'BUFFER_CREATE_PROTECTED_BIT' specifies that the buffer is a protected
--- buffer.
-pattern BUFFER_CREATE_PROTECTED_BIT = BufferCreateFlagBits 0x00000008
-
-type BufferCreateFlags = BufferCreateFlagBits
-
-instance Show BufferCreateFlagBits where
-  showsPrec p = \case
-    BUFFER_CREATE_SPARSE_BINDING_BIT -> showString "BUFFER_CREATE_SPARSE_BINDING_BIT"
-    BUFFER_CREATE_SPARSE_RESIDENCY_BIT -> showString "BUFFER_CREATE_SPARSE_RESIDENCY_BIT"
-    BUFFER_CREATE_SPARSE_ALIASED_BIT -> showString "BUFFER_CREATE_SPARSE_ALIASED_BIT"
-    BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT -> showString "BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"
-    BUFFER_CREATE_PROTECTED_BIT -> showString "BUFFER_CREATE_PROTECTED_BIT"
-    BufferCreateFlagBits x -> showParen (p >= 11) (showString "BufferCreateFlagBits 0x" . showHex x)
-
-instance Read BufferCreateFlagBits where
-  readPrec = parens (choose [("BUFFER_CREATE_SPARSE_BINDING_BIT", pure BUFFER_CREATE_SPARSE_BINDING_BIT)
-                            , ("BUFFER_CREATE_SPARSE_RESIDENCY_BIT", pure BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
-                            , ("BUFFER_CREATE_SPARSE_ALIASED_BIT", pure BUFFER_CREATE_SPARSE_ALIASED_BIT)
-                            , ("BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT", pure BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT)
-                            , ("BUFFER_CREATE_PROTECTED_BIT", pure BUFFER_CREATE_PROTECTED_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "BufferCreateFlagBits")
-                       v <- step readPrec
-                       pure (BufferCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/BufferUsageFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/BufferUsageFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/BufferUsageFlagBits.hs
+++ /dev/null
@@ -1,166 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits  ( BufferUsageFlagBits( BUFFER_USAGE_TRANSFER_SRC_BIT
-                                                                              , BUFFER_USAGE_TRANSFER_DST_BIT
-                                                                              , BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
-                                                                              , BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
-                                                                              , BUFFER_USAGE_UNIFORM_BUFFER_BIT
-                                                                              , BUFFER_USAGE_STORAGE_BUFFER_BIT
-                                                                              , BUFFER_USAGE_INDEX_BUFFER_BIT
-                                                                              , BUFFER_USAGE_VERTEX_BUFFER_BIT
-                                                                              , BUFFER_USAGE_INDIRECT_BUFFER_BIT
-                                                                              , BUFFER_USAGE_RAY_TRACING_BIT_KHR
-                                                                              , BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT
-                                                                              , BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
-                                                                              , BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT
-                                                                              , BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
-                                                                              , ..
-                                                                              )
-                                                         , BufferUsageFlags
-                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkBufferUsageFlagBits - Bitmask specifying allowed usage of a buffer
---
--- = See Also
---
--- 'BufferUsageFlags'
-newtype BufferUsageFlagBits = BufferUsageFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'BUFFER_USAGE_TRANSFER_SRC_BIT' specifies that the buffer /can/ be used
--- as the source of a /transfer command/ (see the definition of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-transfer >).
-pattern BUFFER_USAGE_TRANSFER_SRC_BIT = BufferUsageFlagBits 0x00000001
--- | 'BUFFER_USAGE_TRANSFER_DST_BIT' specifies that the buffer /can/ be used
--- as the destination of a transfer command.
-pattern BUFFER_USAGE_TRANSFER_DST_BIT = BufferUsageFlagBits 0x00000002
--- | 'BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT' specifies that the buffer /can/
--- be used to create a 'Graphics.Vulkan.Core10.Handles.BufferView' suitable
--- for occupying a 'Graphics.Vulkan.Core10.Handles.DescriptorSet' slot of
--- type
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'.
-pattern BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = BufferUsageFlagBits 0x00000004
--- | 'BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT' specifies that the buffer /can/
--- be used to create a 'Graphics.Vulkan.Core10.Handles.BufferView' suitable
--- for occupying a 'Graphics.Vulkan.Core10.Handles.DescriptorSet' slot of
--- type
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'.
-pattern BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = BufferUsageFlagBits 0x00000008
--- | 'BUFFER_USAGE_UNIFORM_BUFFER_BIT' specifies that the buffer /can/ be
--- used in a 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo'
--- suitable for occupying a 'Graphics.Vulkan.Core10.Handles.DescriptorSet'
--- slot either of type
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
--- or
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'.
-pattern BUFFER_USAGE_UNIFORM_BUFFER_BIT = BufferUsageFlagBits 0x00000010
--- | 'BUFFER_USAGE_STORAGE_BUFFER_BIT' specifies that the buffer /can/ be
--- used in a 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo'
--- suitable for occupying a 'Graphics.Vulkan.Core10.Handles.DescriptorSet'
--- slot either of type
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
--- or
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'.
-pattern BUFFER_USAGE_STORAGE_BUFFER_BIT = BufferUsageFlagBits 0x00000020
--- | 'BUFFER_USAGE_INDEX_BUFFER_BIT' specifies that the buffer is suitable
--- for passing as the @buffer@ parameter to
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'.
-pattern BUFFER_USAGE_INDEX_BUFFER_BIT = BufferUsageFlagBits 0x00000040
--- | 'BUFFER_USAGE_VERTEX_BUFFER_BIT' specifies that the buffer is suitable
--- for passing as an element of the @pBuffers@ array to
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers'.
-pattern BUFFER_USAGE_VERTEX_BUFFER_BIT = BufferUsageFlagBits 0x00000080
--- | 'BUFFER_USAGE_INDIRECT_BUFFER_BIT' specifies that the buffer is suitable
--- for passing as the @buffer@ parameter to
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
--- or 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect'.
--- It is also suitable for passing as the @buffer@ member of
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsStreamNV',
--- or @sequencesCountBuffer@ or @sequencesIndexBuffer@ or
--- @preprocessedBuffer@ member of
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV'
-pattern BUFFER_USAGE_INDIRECT_BUFFER_BIT = BufferUsageFlagBits 0x00000100
--- | 'BUFFER_USAGE_RAY_TRACING_BIT_KHR' specifies that the buffer is suitable
--- for use in
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysKHR' and
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureKHR'.
-pattern BUFFER_USAGE_RAY_TRACING_BIT_KHR = BufferUsageFlagBits 0x00000400
--- | 'BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT' specifies that the buffer
--- is suitable for passing as the @buffer@ parameter to
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.cmdBeginConditionalRenderingEXT'.
-pattern BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = BufferUsageFlagBits 0x00000200
--- | 'BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT' specifies that
--- the buffer is suitable for using as a counter buffer with
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT'
--- and
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT'.
-pattern BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = BufferUsageFlagBits 0x00001000
--- | 'BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT' specifies that the
--- buffer is suitable for using for binding as a transform feedback buffer
--- with
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT'.
-pattern BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = BufferUsageFlagBits 0x00000800
--- | 'BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT' specifies that the buffer /can/
--- be used to retrieve a buffer device address via
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--- and use that address to access the buffer’s memory from a shader.
-pattern BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = BufferUsageFlagBits 0x00020000
-
-type BufferUsageFlags = BufferUsageFlagBits
-
-instance Show BufferUsageFlagBits where
-  showsPrec p = \case
-    BUFFER_USAGE_TRANSFER_SRC_BIT -> showString "BUFFER_USAGE_TRANSFER_SRC_BIT"
-    BUFFER_USAGE_TRANSFER_DST_BIT -> showString "BUFFER_USAGE_TRANSFER_DST_BIT"
-    BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT -> showString "BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"
-    BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT -> showString "BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"
-    BUFFER_USAGE_UNIFORM_BUFFER_BIT -> showString "BUFFER_USAGE_UNIFORM_BUFFER_BIT"
-    BUFFER_USAGE_STORAGE_BUFFER_BIT -> showString "BUFFER_USAGE_STORAGE_BUFFER_BIT"
-    BUFFER_USAGE_INDEX_BUFFER_BIT -> showString "BUFFER_USAGE_INDEX_BUFFER_BIT"
-    BUFFER_USAGE_VERTEX_BUFFER_BIT -> showString "BUFFER_USAGE_VERTEX_BUFFER_BIT"
-    BUFFER_USAGE_INDIRECT_BUFFER_BIT -> showString "BUFFER_USAGE_INDIRECT_BUFFER_BIT"
-    BUFFER_USAGE_RAY_TRACING_BIT_KHR -> showString "BUFFER_USAGE_RAY_TRACING_BIT_KHR"
-    BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT -> showString "BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT"
-    BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT -> showString "BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT"
-    BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT -> showString "BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT"
-    BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT -> showString "BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT"
-    BufferUsageFlagBits x -> showParen (p >= 11) (showString "BufferUsageFlagBits 0x" . showHex x)
-
-instance Read BufferUsageFlagBits where
-  readPrec = parens (choose [("BUFFER_USAGE_TRANSFER_SRC_BIT", pure BUFFER_USAGE_TRANSFER_SRC_BIT)
-                            , ("BUFFER_USAGE_TRANSFER_DST_BIT", pure BUFFER_USAGE_TRANSFER_DST_BIT)
-                            , ("BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT", pure BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
-                            , ("BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT", pure BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
-                            , ("BUFFER_USAGE_UNIFORM_BUFFER_BIT", pure BUFFER_USAGE_UNIFORM_BUFFER_BIT)
-                            , ("BUFFER_USAGE_STORAGE_BUFFER_BIT", pure BUFFER_USAGE_STORAGE_BUFFER_BIT)
-                            , ("BUFFER_USAGE_INDEX_BUFFER_BIT", pure BUFFER_USAGE_INDEX_BUFFER_BIT)
-                            , ("BUFFER_USAGE_VERTEX_BUFFER_BIT", pure BUFFER_USAGE_VERTEX_BUFFER_BIT)
-                            , ("BUFFER_USAGE_INDIRECT_BUFFER_BIT", pure BUFFER_USAGE_INDIRECT_BUFFER_BIT)
-                            , ("BUFFER_USAGE_RAY_TRACING_BIT_KHR", pure BUFFER_USAGE_RAY_TRACING_BIT_KHR)
-                            , ("BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT", pure BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT)
-                            , ("BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT", pure BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT)
-                            , ("BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT", pure BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT)
-                            , ("BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT", pure BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "BufferUsageFlagBits")
-                       v <- step readPrec
-                       pure (BufferUsageFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/BufferViewCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/BufferViewCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/BufferViewCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.BufferViewCreateFlags  (BufferViewCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkBufferViewCreateFlags - Reserved for future use
---
--- = Description
---
--- 'BufferViewCreateFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BufferView.BufferViewCreateInfo'
-newtype BufferViewCreateFlags = BufferViewCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show BufferViewCreateFlags where
-  showsPrec p = \case
-    BufferViewCreateFlags x -> showParen (p >= 11) (showString "BufferViewCreateFlags 0x" . showHex x)
-
-instance Read BufferViewCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "BufferViewCreateFlags")
-                       v <- step readPrec
-                       pure (BufferViewCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ColorComponentFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/ColorComponentFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ColorComponentFlagBits.hs
+++ /dev/null
@@ -1,77 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits  ( ColorComponentFlagBits( COLOR_COMPONENT_R_BIT
-                                                                                    , COLOR_COMPONENT_G_BIT
-                                                                                    , COLOR_COMPONENT_B_BIT
-                                                                                    , COLOR_COMPONENT_A_BIT
-                                                                                    , ..
-                                                                                    )
-                                                            , ColorComponentFlags
-                                                            ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkColorComponentFlagBits - Bitmask controlling which components are
--- written to the framebuffer
---
--- = Description
---
--- The color write mask operation is applied regardless of whether blending
--- is enabled.
---
--- = See Also
---
--- 'ColorComponentFlags'
-newtype ColorComponentFlagBits = ColorComponentFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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.
-pattern COLOR_COMPONENT_R_BIT = ColorComponentFlagBits 0x00000001
--- | '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.
-pattern COLOR_COMPONENT_G_BIT = ColorComponentFlagBits 0x00000002
--- | '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.
-pattern COLOR_COMPONENT_B_BIT = ColorComponentFlagBits 0x00000004
--- | '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.
-pattern COLOR_COMPONENT_A_BIT = ColorComponentFlagBits 0x00000008
-
-type ColorComponentFlags = ColorComponentFlagBits
-
-instance Show ColorComponentFlagBits where
-  showsPrec p = \case
-    COLOR_COMPONENT_R_BIT -> showString "COLOR_COMPONENT_R_BIT"
-    COLOR_COMPONENT_G_BIT -> showString "COLOR_COMPONENT_G_BIT"
-    COLOR_COMPONENT_B_BIT -> showString "COLOR_COMPONENT_B_BIT"
-    COLOR_COMPONENT_A_BIT -> showString "COLOR_COMPONENT_A_BIT"
-    ColorComponentFlagBits x -> showParen (p >= 11) (showString "ColorComponentFlagBits 0x" . showHex x)
-
-instance Read ColorComponentFlagBits where
-  readPrec = parens (choose [("COLOR_COMPONENT_R_BIT", pure COLOR_COMPONENT_R_BIT)
-                            , ("COLOR_COMPONENT_G_BIT", pure COLOR_COMPONENT_G_BIT)
-                            , ("COLOR_COMPONENT_B_BIT", pure COLOR_COMPONENT_B_BIT)
-                            , ("COLOR_COMPONENT_A_BIT", pure COLOR_COMPONENT_A_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ColorComponentFlagBits")
-                       v <- step readPrec
-                       pure (ColorComponentFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/CommandBufferLevel.hs b/src/Graphics/Vulkan/Core10/Enums/CommandBufferLevel.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/CommandBufferLevel.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.CommandBufferLevel  (CommandBufferLevel( COMMAND_BUFFER_LEVEL_PRIMARY
-                                                                           , COMMAND_BUFFER_LEVEL_SECONDARY
-                                                                           , ..
-                                                                           )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkCommandBufferLevel - Enumerant specifying a command buffer level
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferAllocateInfo'
-newtype CommandBufferLevel = CommandBufferLevel Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'COMMAND_BUFFER_LEVEL_PRIMARY' specifies a primary command buffer.
-pattern COMMAND_BUFFER_LEVEL_PRIMARY = CommandBufferLevel 0
--- | 'COMMAND_BUFFER_LEVEL_SECONDARY' specifies a secondary command buffer.
-pattern COMMAND_BUFFER_LEVEL_SECONDARY = CommandBufferLevel 1
-{-# complete COMMAND_BUFFER_LEVEL_PRIMARY,
-             COMMAND_BUFFER_LEVEL_SECONDARY :: CommandBufferLevel #-}
-
-instance Show CommandBufferLevel where
-  showsPrec p = \case
-    COMMAND_BUFFER_LEVEL_PRIMARY -> showString "COMMAND_BUFFER_LEVEL_PRIMARY"
-    COMMAND_BUFFER_LEVEL_SECONDARY -> showString "COMMAND_BUFFER_LEVEL_SECONDARY"
-    CommandBufferLevel x -> showParen (p >= 11) (showString "CommandBufferLevel " . showsPrec 11 x)
-
-instance Read CommandBufferLevel where
-  readPrec = parens (choose [("COMMAND_BUFFER_LEVEL_PRIMARY", pure COMMAND_BUFFER_LEVEL_PRIMARY)
-                            , ("COMMAND_BUFFER_LEVEL_SECONDARY", pure COMMAND_BUFFER_LEVEL_SECONDARY)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CommandBufferLevel")
-                       v <- step readPrec
-                       pure (CommandBufferLevel v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits  ( CommandBufferResetFlagBits( COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
-                                                                                            , ..
-                                                                                            )
-                                                                , CommandBufferResetFlags
-                                                                ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkCommandBufferResetFlagBits - Bitmask controlling behavior of a command
--- buffer reset
---
--- = See Also
---
--- 'CommandBufferResetFlags'
-newtype CommandBufferResetFlagBits = CommandBufferResetFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>.
-pattern COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = CommandBufferResetFlagBits 0x00000001
-
-type CommandBufferResetFlags = CommandBufferResetFlagBits
-
-instance Show CommandBufferResetFlagBits where
-  showsPrec p = \case
-    COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT -> showString "COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"
-    CommandBufferResetFlagBits x -> showParen (p >= 11) (showString "CommandBufferResetFlagBits 0x" . showHex x)
-
-instance Read CommandBufferResetFlagBits where
-  readPrec = parens (choose [("COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT", pure COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CommandBufferResetFlagBits")
-                       v <- step readPrec
-                       pure (CommandBufferResetFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits  ( CommandBufferResetFlagBits
-                                                                , CommandBufferResetFlags
-                                                                ) where
-
-
-
-data CommandBufferResetFlagBits
-
-type CommandBufferResetFlags = CommandBufferResetFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/CommandBufferUsageFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/CommandBufferUsageFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/CommandBufferUsageFlagBits.hs
+++ /dev/null
@@ -1,65 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits  ( CommandBufferUsageFlagBits( COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
-                                                                                            , COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
-                                                                                            , COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
-                                                                                            , ..
-                                                                                            )
-                                                                , CommandBufferUsageFlags
-                                                                ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkCommandBufferUsageFlagBits - Bitmask specifying usage behavior for
--- command buffer
---
--- = See Also
---
--- 'CommandBufferUsageFlags'
-newtype CommandBufferUsageFlagBits = CommandBufferUsageFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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 COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = CommandBufferUsageFlagBits 0x00000001
--- | '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 COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = CommandBufferUsageFlagBits 0x00000002
--- | '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 COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = CommandBufferUsageFlagBits 0x00000004
-
-type CommandBufferUsageFlags = CommandBufferUsageFlagBits
-
-instance Show CommandBufferUsageFlagBits where
-  showsPrec p = \case
-    COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT -> showString "COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"
-    COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT -> showString "COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"
-    COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT -> showString "COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"
-    CommandBufferUsageFlagBits x -> showParen (p >= 11) (showString "CommandBufferUsageFlagBits 0x" . showHex x)
-
-instance Read CommandBufferUsageFlagBits where
-  readPrec = parens (choose [("COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT", pure COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
-                            , ("COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT", pure COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
-                            , ("COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT", pure COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CommandBufferUsageFlagBits")
-                       v <- step readPrec
-                       pure (CommandBufferUsageFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/CommandPoolCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/CommandPoolCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/CommandPoolCreateFlagBits.hs
+++ /dev/null
@@ -1,73 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits  ( CommandPoolCreateFlagBits( COMMAND_POOL_CREATE_TRANSIENT_BIT
-                                                                                          , COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
-                                                                                          , COMMAND_POOL_CREATE_PROTECTED_BIT
-                                                                                          , ..
-                                                                                          )
-                                                               , CommandPoolCreateFlags
-                                                               ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkCommandPoolCreateFlagBits - Bitmask specifying usage behavior for a
--- command pool
---
--- = See Also
---
--- 'CommandPoolCreateFlags'
-newtype CommandPoolCreateFlagBits = CommandPoolCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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 COMMAND_POOL_CREATE_TRANSIENT_BIT = CommandPoolCreateFlagBits 0x00000001
--- | 'COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT' allows any command buffer
--- allocated from a pool to be individually reset to the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>;
--- either by calling
--- 'Graphics.Vulkan.Core10.CommandBuffer.resetCommandBuffer', or via the
--- implicit reset when calling
--- 'Graphics.Vulkan.Core10.CommandBuffer.beginCommandBuffer'. If this flag
--- is not set on a pool, then
--- 'Graphics.Vulkan.Core10.CommandBuffer.resetCommandBuffer' /must/ not be
--- called for any command buffer allocated from that pool.
-pattern COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = CommandPoolCreateFlagBits 0x00000002
--- | 'COMMAND_POOL_CREATE_PROTECTED_BIT' specifies that command buffers
--- allocated from the pool are protected command buffers.
-pattern COMMAND_POOL_CREATE_PROTECTED_BIT = CommandPoolCreateFlagBits 0x00000004
-
-type CommandPoolCreateFlags = CommandPoolCreateFlagBits
-
-instance Show CommandPoolCreateFlagBits where
-  showsPrec p = \case
-    COMMAND_POOL_CREATE_TRANSIENT_BIT -> showString "COMMAND_POOL_CREATE_TRANSIENT_BIT"
-    COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT -> showString "COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"
-    COMMAND_POOL_CREATE_PROTECTED_BIT -> showString "COMMAND_POOL_CREATE_PROTECTED_BIT"
-    CommandPoolCreateFlagBits x -> showParen (p >= 11) (showString "CommandPoolCreateFlagBits 0x" . showHex x)
-
-instance Read CommandPoolCreateFlagBits where
-  readPrec = parens (choose [("COMMAND_POOL_CREATE_TRANSIENT_BIT", pure COMMAND_POOL_CREATE_TRANSIENT_BIT)
-                            , ("COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT", pure COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
-                            , ("COMMAND_POOL_CREATE_PROTECTED_BIT", pure COMMAND_POOL_CREATE_PROTECTED_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CommandPoolCreateFlagBits")
-                       v <- step readPrec
-                       pure (CommandPoolCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits  ( CommandPoolResetFlagBits( COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
-                                                                                        , ..
-                                                                                        )
-                                                              , CommandPoolResetFlags
-                                                              ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkCommandPoolResetFlagBits - Bitmask controlling behavior of a command
--- pool reset
---
--- = See Also
---
--- 'CommandPoolResetFlags'
-newtype CommandPoolResetFlagBits = CommandPoolResetFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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 COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = CommandPoolResetFlagBits 0x00000001
-
-type CommandPoolResetFlags = CommandPoolResetFlagBits
-
-instance Show CommandPoolResetFlagBits where
-  showsPrec p = \case
-    COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT -> showString "COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"
-    CommandPoolResetFlagBits x -> showParen (p >= 11) (showString "CommandPoolResetFlagBits 0x" . showHex x)
-
-instance Read CommandPoolResetFlagBits where
-  readPrec = parens (choose [("COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT", pure COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CommandPoolResetFlagBits")
-                       v <- step readPrec
-                       pure (CommandPoolResetFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits  ( CommandPoolResetFlagBits
-                                                              , CommandPoolResetFlags
-                                                              ) where
-
-
-
-data CommandPoolResetFlagBits
-
-type CommandPoolResetFlags = CommandPoolResetFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/CompareOp.hs b/src/Graphics/Vulkan/Core10/Enums/CompareOp.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/CompareOp.hs
+++ /dev/null
@@ -1,88 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.CompareOp  (CompareOp( COMPARE_OP_NEVER
-                                                         , COMPARE_OP_LESS
-                                                         , COMPARE_OP_EQUAL
-                                                         , COMPARE_OP_LESS_OR_EQUAL
-                                                         , COMPARE_OP_GREATER
-                                                         , COMPARE_OP_NOT_EQUAL
-                                                         , COMPARE_OP_GREATER_OR_EQUAL
-                                                         , COMPARE_OP_ALWAYS
-                                                         , ..
-                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkCompareOp - Stencil comparison function
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo',
--- 'Graphics.Vulkan.Core10.Pipeline.StencilOpState'
-newtype CompareOp = CompareOp Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'COMPARE_OP_NEVER' specifies that the test never passes.
-pattern COMPARE_OP_NEVER = CompareOp 0
--- | 'COMPARE_OP_LESS' specifies that the test passes when R \< S.
-pattern COMPARE_OP_LESS = CompareOp 1
--- | 'COMPARE_OP_EQUAL' specifies that the test passes when R = S.
-pattern COMPARE_OP_EQUAL = CompareOp 2
--- | 'COMPARE_OP_LESS_OR_EQUAL' specifies that the test passes when R ≤ S.
-pattern COMPARE_OP_LESS_OR_EQUAL = CompareOp 3
--- | 'COMPARE_OP_GREATER' specifies that the test passes when R > S.
-pattern COMPARE_OP_GREATER = CompareOp 4
--- | 'COMPARE_OP_NOT_EQUAL' specifies that the test passes when R ≠ S.
-pattern COMPARE_OP_NOT_EQUAL = CompareOp 5
--- | 'COMPARE_OP_GREATER_OR_EQUAL' specifies that the test passes when R ≥ S.
-pattern COMPARE_OP_GREATER_OR_EQUAL = CompareOp 6
--- | 'COMPARE_OP_ALWAYS' specifies that the test always passes.
-pattern COMPARE_OP_ALWAYS = CompareOp 7
-{-# complete COMPARE_OP_NEVER,
-             COMPARE_OP_LESS,
-             COMPARE_OP_EQUAL,
-             COMPARE_OP_LESS_OR_EQUAL,
-             COMPARE_OP_GREATER,
-             COMPARE_OP_NOT_EQUAL,
-             COMPARE_OP_GREATER_OR_EQUAL,
-             COMPARE_OP_ALWAYS :: CompareOp #-}
-
-instance Show CompareOp where
-  showsPrec p = \case
-    COMPARE_OP_NEVER -> showString "COMPARE_OP_NEVER"
-    COMPARE_OP_LESS -> showString "COMPARE_OP_LESS"
-    COMPARE_OP_EQUAL -> showString "COMPARE_OP_EQUAL"
-    COMPARE_OP_LESS_OR_EQUAL -> showString "COMPARE_OP_LESS_OR_EQUAL"
-    COMPARE_OP_GREATER -> showString "COMPARE_OP_GREATER"
-    COMPARE_OP_NOT_EQUAL -> showString "COMPARE_OP_NOT_EQUAL"
-    COMPARE_OP_GREATER_OR_EQUAL -> showString "COMPARE_OP_GREATER_OR_EQUAL"
-    COMPARE_OP_ALWAYS -> showString "COMPARE_OP_ALWAYS"
-    CompareOp x -> showParen (p >= 11) (showString "CompareOp " . showsPrec 11 x)
-
-instance Read CompareOp where
-  readPrec = parens (choose [("COMPARE_OP_NEVER", pure COMPARE_OP_NEVER)
-                            , ("COMPARE_OP_LESS", pure COMPARE_OP_LESS)
-                            , ("COMPARE_OP_EQUAL", pure COMPARE_OP_EQUAL)
-                            , ("COMPARE_OP_LESS_OR_EQUAL", pure COMPARE_OP_LESS_OR_EQUAL)
-                            , ("COMPARE_OP_GREATER", pure COMPARE_OP_GREATER)
-                            , ("COMPARE_OP_NOT_EQUAL", pure COMPARE_OP_NOT_EQUAL)
-                            , ("COMPARE_OP_GREATER_OR_EQUAL", pure COMPARE_OP_GREATER_OR_EQUAL)
-                            , ("COMPARE_OP_ALWAYS", pure COMPARE_OP_ALWAYS)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CompareOp")
-                       v <- step readPrec
-                       pure (CompareOp v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ComponentSwizzle.hs b/src/Graphics/Vulkan/Core10/Enums/ComponentSwizzle.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ComponentSwizzle.hs
+++ /dev/null
@@ -1,108 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ComponentSwizzle  (ComponentSwizzle( COMPONENT_SWIZZLE_IDENTITY
-                                                                       , COMPONENT_SWIZZLE_ZERO
-                                                                       , COMPONENT_SWIZZLE_ONE
-                                                                       , COMPONENT_SWIZZLE_R
-                                                                       , COMPONENT_SWIZZLE_G
-                                                                       , COMPONENT_SWIZZLE_B
-                                                                       , COMPONENT_SWIZZLE_A
-                                                                       , ..
-                                                                       )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkComponentSwizzle - Specify how a component is swizzled
---
--- = Description
---
--- Setting the identity swizzle on a component is equivalent to setting the
--- identity mapping on that component. That is:
---
--- +-----------------------------------+-----------------------------------+
--- | Component                         | Identity Mapping                  |
--- +===================================+===================================+
--- | @components.r@                    | 'COMPONENT_SWIZZLE_R'             |
--- +-----------------------------------+-----------------------------------+
--- | @components.g@                    | 'COMPONENT_SWIZZLE_G'             |
--- +-----------------------------------+-----------------------------------+
--- | @components.b@                    | 'COMPONENT_SWIZZLE_B'             |
--- +-----------------------------------+-----------------------------------+
--- | @components.a@                    | 'COMPONENT_SWIZZLE_A'             |
--- +-----------------------------------+-----------------------------------+
---
--- Component Mappings Equivalent To 'COMPONENT_SWIZZLE_IDENTITY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.ImageView.ComponentMapping'
-newtype ComponentSwizzle = ComponentSwizzle Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'COMPONENT_SWIZZLE_IDENTITY' specifies that the component is set to the
--- identity swizzle.
-pattern COMPONENT_SWIZZLE_IDENTITY = ComponentSwizzle 0
--- | 'COMPONENT_SWIZZLE_ZERO' specifies that the component is set to zero.
-pattern COMPONENT_SWIZZLE_ZERO = ComponentSwizzle 1
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-definition Format Definition>
--- section for each 'Graphics.Vulkan.Core10.Enums.Format.Format'.
-pattern COMPONENT_SWIZZLE_ONE = ComponentSwizzle 2
--- | 'COMPONENT_SWIZZLE_R' specifies that the component is set to the value
--- of the R component of the image.
-pattern COMPONENT_SWIZZLE_R = ComponentSwizzle 3
--- | 'COMPONENT_SWIZZLE_G' specifies that the component is set to the value
--- of the G component of the image.
-pattern COMPONENT_SWIZZLE_G = ComponentSwizzle 4
--- | 'COMPONENT_SWIZZLE_B' specifies that the component is set to the value
--- of the B component of the image.
-pattern COMPONENT_SWIZZLE_B = ComponentSwizzle 5
--- | 'COMPONENT_SWIZZLE_A' specifies that the component is set to the value
--- of the A component of the image.
-pattern COMPONENT_SWIZZLE_A = ComponentSwizzle 6
-{-# complete COMPONENT_SWIZZLE_IDENTITY,
-             COMPONENT_SWIZZLE_ZERO,
-             COMPONENT_SWIZZLE_ONE,
-             COMPONENT_SWIZZLE_R,
-             COMPONENT_SWIZZLE_G,
-             COMPONENT_SWIZZLE_B,
-             COMPONENT_SWIZZLE_A :: ComponentSwizzle #-}
-
-instance Show ComponentSwizzle where
-  showsPrec p = \case
-    COMPONENT_SWIZZLE_IDENTITY -> showString "COMPONENT_SWIZZLE_IDENTITY"
-    COMPONENT_SWIZZLE_ZERO -> showString "COMPONENT_SWIZZLE_ZERO"
-    COMPONENT_SWIZZLE_ONE -> showString "COMPONENT_SWIZZLE_ONE"
-    COMPONENT_SWIZZLE_R -> showString "COMPONENT_SWIZZLE_R"
-    COMPONENT_SWIZZLE_G -> showString "COMPONENT_SWIZZLE_G"
-    COMPONENT_SWIZZLE_B -> showString "COMPONENT_SWIZZLE_B"
-    COMPONENT_SWIZZLE_A -> showString "COMPONENT_SWIZZLE_A"
-    ComponentSwizzle x -> showParen (p >= 11) (showString "ComponentSwizzle " . showsPrec 11 x)
-
-instance Read ComponentSwizzle where
-  readPrec = parens (choose [("COMPONENT_SWIZZLE_IDENTITY", pure COMPONENT_SWIZZLE_IDENTITY)
-                            , ("COMPONENT_SWIZZLE_ZERO", pure COMPONENT_SWIZZLE_ZERO)
-                            , ("COMPONENT_SWIZZLE_ONE", pure COMPONENT_SWIZZLE_ONE)
-                            , ("COMPONENT_SWIZZLE_R", pure COMPONENT_SWIZZLE_R)
-                            , ("COMPONENT_SWIZZLE_G", pure COMPONENT_SWIZZLE_G)
-                            , ("COMPONENT_SWIZZLE_B", pure COMPONENT_SWIZZLE_B)
-                            , ("COMPONENT_SWIZZLE_A", pure COMPONENT_SWIZZLE_A)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ComponentSwizzle")
-                       v <- step readPrec
-                       pure (ComponentSwizzle v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/CullModeFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/CullModeFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/CullModeFlagBits.hs
+++ /dev/null
@@ -1,69 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.CullModeFlagBits  ( CullModeFlagBits( CULL_MODE_NONE
-                                                                        , CULL_MODE_FRONT_BIT
-                                                                        , CULL_MODE_BACK_BIT
-                                                                        , CULL_MODE_FRONT_AND_BACK
-                                                                        , ..
-                                                                        )
-                                                      , CullModeFlags
-                                                      ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkCullModeFlagBits - Bitmask controlling triangle culling
---
--- = Description
---
--- Following culling, fragments are produced for any triangles which have
--- not been discarded.
---
--- = See Also
---
--- 'CullModeFlags'
-newtype CullModeFlagBits = CullModeFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'CULL_MODE_NONE' specifies that no triangles are discarded
-pattern CULL_MODE_NONE = CullModeFlagBits 0x00000000
--- | 'CULL_MODE_FRONT_BIT' specifies that front-facing triangles are
--- discarded
-pattern CULL_MODE_FRONT_BIT = CullModeFlagBits 0x00000001
--- | 'CULL_MODE_BACK_BIT' specifies that back-facing triangles are discarded
-pattern CULL_MODE_BACK_BIT = CullModeFlagBits 0x00000002
--- | 'CULL_MODE_FRONT_AND_BACK' specifies that all triangles are discarded.
-pattern CULL_MODE_FRONT_AND_BACK = CullModeFlagBits 0x00000003
-
-type CullModeFlags = CullModeFlagBits
-
-instance Show CullModeFlagBits where
-  showsPrec p = \case
-    CULL_MODE_NONE -> showString "CULL_MODE_NONE"
-    CULL_MODE_FRONT_BIT -> showString "CULL_MODE_FRONT_BIT"
-    CULL_MODE_BACK_BIT -> showString "CULL_MODE_BACK_BIT"
-    CULL_MODE_FRONT_AND_BACK -> showString "CULL_MODE_FRONT_AND_BACK"
-    CullModeFlagBits x -> showParen (p >= 11) (showString "CullModeFlagBits 0x" . showHex x)
-
-instance Read CullModeFlagBits where
-  readPrec = parens (choose [("CULL_MODE_NONE", pure CULL_MODE_NONE)
-                            , ("CULL_MODE_FRONT_BIT", pure CULL_MODE_FRONT_BIT)
-                            , ("CULL_MODE_BACK_BIT", pure CULL_MODE_BACK_BIT)
-                            , ("CULL_MODE_FRONT_AND_BACK", pure CULL_MODE_FRONT_AND_BACK)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CullModeFlagBits")
-                       v <- step readPrec
-                       pure (CullModeFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/DependencyFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/DependencyFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/DependencyFlagBits.hs
+++ /dev/null
@@ -1,62 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.DependencyFlagBits  ( DependencyFlagBits( DEPENDENCY_BY_REGION_BIT
-                                                                            , DEPENDENCY_VIEW_LOCAL_BIT
-                                                                            , DEPENDENCY_DEVICE_GROUP_BIT
-                                                                            , ..
-                                                                            )
-                                                        , DependencyFlags
-                                                        ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkDependencyFlagBits - Bitmask specifying how execution and memory
--- dependencies are formed
---
--- = See Also
---
--- 'DependencyFlags'
-newtype DependencyFlagBits = DependencyFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'DEPENDENCY_BY_REGION_BIT' specifies that dependencies will be
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-local>.
-pattern DEPENDENCY_BY_REGION_BIT = DependencyFlagBits 0x00000001
--- | 'DEPENDENCY_VIEW_LOCAL_BIT' specifies that a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-barriers-subpass-self-dependencies subpass has more than one view>.
-pattern DEPENDENCY_VIEW_LOCAL_BIT = DependencyFlagBits 0x00000002
--- | 'DEPENDENCY_DEVICE_GROUP_BIT' specifies that dependencies are
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-device-local-dependencies non-device-local dependency>.
-pattern DEPENDENCY_DEVICE_GROUP_BIT = DependencyFlagBits 0x00000004
-
-type DependencyFlags = DependencyFlagBits
-
-instance Show DependencyFlagBits where
-  showsPrec p = \case
-    DEPENDENCY_BY_REGION_BIT -> showString "DEPENDENCY_BY_REGION_BIT"
-    DEPENDENCY_VIEW_LOCAL_BIT -> showString "DEPENDENCY_VIEW_LOCAL_BIT"
-    DEPENDENCY_DEVICE_GROUP_BIT -> showString "DEPENDENCY_DEVICE_GROUP_BIT"
-    DependencyFlagBits x -> showParen (p >= 11) (showString "DependencyFlagBits 0x" . showHex x)
-
-instance Read DependencyFlagBits where
-  readPrec = parens (choose [("DEPENDENCY_BY_REGION_BIT", pure DEPENDENCY_BY_REGION_BIT)
-                            , ("DEPENDENCY_VIEW_LOCAL_BIT", pure DEPENDENCY_VIEW_LOCAL_BIT)
-                            , ("DEPENDENCY_DEVICE_GROUP_BIT", pure DEPENDENCY_DEVICE_GROUP_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DependencyFlagBits")
-                       v <- step readPrec
-                       pure (DependencyFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/DependencyFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/DependencyFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/DependencyFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.DependencyFlagBits  ( DependencyFlagBits
-                                                        , DependencyFlags
-                                                        ) where
-
-
-
-data DependencyFlagBits
-
-type DependencyFlags = DependencyFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/DescriptorPoolCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/DescriptorPoolCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/DescriptorPoolCreateFlagBits.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits  ( DescriptorPoolCreateFlagBits( DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
-                                                                                                , DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT
-                                                                                                , ..
-                                                                                                )
-                                                                  , DescriptorPoolCreateFlags
-                                                                  ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkDescriptorPoolCreateFlagBits - Bitmask specifying certain supported
--- operations on a descriptor pool
---
--- = See Also
---
--- 'DescriptorPoolCreateFlags'
-newtype DescriptorPoolCreateFlagBits = DescriptorPoolCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT' specifies that
--- descriptor sets /can/ return their individual allocations to the pool,
--- i.e. all of
--- 'Graphics.Vulkan.Core10.DescriptorSet.allocateDescriptorSets',
--- 'Graphics.Vulkan.Core10.DescriptorSet.freeDescriptorSets', and
--- 'Graphics.Vulkan.Core10.DescriptorSet.resetDescriptorPool' are allowed.
--- Otherwise, descriptor sets allocated from the pool /must/ not be
--- individually freed back to the pool, i.e. only
--- 'Graphics.Vulkan.Core10.DescriptorSet.allocateDescriptorSets' and
--- 'Graphics.Vulkan.Core10.DescriptorSet.resetDescriptorPool' are allowed.
-pattern DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = DescriptorPoolCreateFlagBits 0x00000001
--- | 'DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT' specifies that descriptor
--- sets allocated from this pool /can/ include bindings with the
--- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
--- bit set. It is valid to allocate descriptor sets that have bindings that
--- do not set the
--- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
--- bit from a pool that has 'DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
--- set.
-pattern DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = DescriptorPoolCreateFlagBits 0x00000002
-
-type DescriptorPoolCreateFlags = DescriptorPoolCreateFlagBits
-
-instance Show DescriptorPoolCreateFlagBits where
-  showsPrec p = \case
-    DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT -> showString "DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT"
-    DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT -> showString "DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT"
-    DescriptorPoolCreateFlagBits x -> showParen (p >= 11) (showString "DescriptorPoolCreateFlagBits 0x" . showHex x)
-
-instance Read DescriptorPoolCreateFlagBits where
-  readPrec = parens (choose [("DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT", pure DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT)
-                            , ("DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT", pure DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DescriptorPoolCreateFlagBits")
-                       v <- step readPrec
-                       pure (DescriptorPoolCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs b/src/Graphics/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.DescriptorPoolResetFlags  (DescriptorPoolResetFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkDescriptorPoolResetFlags - Reserved for future use
---
--- = Description
---
--- 'DescriptorPoolResetFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DescriptorSet.resetDescriptorPool'
-newtype DescriptorPoolResetFlags = DescriptorPoolResetFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show DescriptorPoolResetFlags where
-  showsPrec p = \case
-    DescriptorPoolResetFlags x -> showParen (p >= 11) (showString "DescriptorPoolResetFlags 0x" . showHex x)
-
-instance Read DescriptorPoolResetFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DescriptorPoolResetFlags")
-                       v <- step readPrec
-                       pure (DescriptorPoolResetFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs-boot b/src/Graphics/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.DescriptorPoolResetFlags  (DescriptorPoolResetFlags) where
-
-
-
-data DescriptorPoolResetFlags
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/DescriptorSetLayoutCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/DescriptorSetLayoutCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/DescriptorSetLayoutCreateFlagBits.hs
+++ /dev/null
@@ -1,66 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits  ( DescriptorSetLayoutCreateFlagBits( DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
-                                                                                                          , DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
-                                                                                                          , ..
-                                                                                                          )
-                                                                       , DescriptorSetLayoutCreateFlags
-                                                                       ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkDescriptorSetLayoutCreateFlagBits - Bitmask specifying descriptor set
--- layout properties
---
--- = See Also
---
--- 'DescriptorSetLayoutCreateFlags'
-newtype DescriptorSetLayoutCreateFlagBits = DescriptorSetLayoutCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR' specifies that
--- descriptor sets /must/ not be allocated using this layout, and
--- descriptors are instead pushed by
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetKHR'.
-pattern DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = DescriptorSetLayoutCreateFlagBits 0x00000001
--- | 'DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' specifies that
--- descriptor sets using this layout /must/ be allocated from a descriptor
--- pool created with the
--- 'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
--- bit set. Descriptor set layouts created with this bit set have alternate
--- limits for the maximum number of descriptors per-stage and per-pipeline
--- layout. The non-UpdateAfterBind limits only count descriptors in sets
--- created without this flag. The UpdateAfterBind limits count all
--- descriptors, but the limits /may/ be higher than the non-UpdateAfterBind
--- limits.
-pattern DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = DescriptorSetLayoutCreateFlagBits 0x00000002
-
-type DescriptorSetLayoutCreateFlags = DescriptorSetLayoutCreateFlagBits
-
-instance Show DescriptorSetLayoutCreateFlagBits where
-  showsPrec p = \case
-    DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR -> showString "DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR"
-    DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT -> showString "DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT"
-    DescriptorSetLayoutCreateFlagBits x -> showParen (p >= 11) (showString "DescriptorSetLayoutCreateFlagBits 0x" . showHex x)
-
-instance Read DescriptorSetLayoutCreateFlagBits where
-  readPrec = parens (choose [("DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR", pure DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR)
-                            , ("DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT", pure DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DescriptorSetLayoutCreateFlagBits")
-                       v <- step readPrec
-                       pure (DescriptorSetLayoutCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/DescriptorType.hs b/src/Graphics/Vulkan/Core10/Enums/DescriptorType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/DescriptorType.hs
+++ /dev/null
@@ -1,211 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.DescriptorType  (DescriptorType( DESCRIPTOR_TYPE_SAMPLER
-                                                                   , DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
-                                                                   , DESCRIPTOR_TYPE_SAMPLED_IMAGE
-                                                                   , DESCRIPTOR_TYPE_STORAGE_IMAGE
-                                                                   , DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
-                                                                   , DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
-                                                                   , DESCRIPTOR_TYPE_UNIFORM_BUFFER
-                                                                   , DESCRIPTOR_TYPE_STORAGE_BUFFER
-                                                                   , DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
-                                                                   , DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
-                                                                   , DESCRIPTOR_TYPE_INPUT_ATTACHMENT
-                                                                   , DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR
-                                                                   , DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
-                                                                   , ..
-                                                                   )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkDescriptorType - Specifies the type of a descriptor in a descriptor
--- set
---
--- = Description
---
--- -   'DESCRIPTOR_TYPE_SAMPLER' specifies a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampler sampler descriptor>.
---
--- -   'DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER' specifies a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler combined image sampler descriptor>.
---
--- -   'DESCRIPTOR_TYPE_SAMPLED_IMAGE' specifies a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled image descriptor>.
---
--- -   'DESCRIPTOR_TYPE_STORAGE_IMAGE' specifies a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image descriptor>.
---
--- -   'DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER' specifies a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer uniform texel buffer descriptor>.
---
--- -   'DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER' specifies a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer storage texel buffer descriptor>.
---
--- -   'DESCRIPTOR_TYPE_UNIFORM_BUFFER' specifies a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer uniform buffer descriptor>.
---
--- -   'DESCRIPTOR_TYPE_STORAGE_BUFFER' specifies a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer storage buffer descriptor>.
---
--- -   'DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC' specifies a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic dynamic uniform buffer descriptor>.
---
--- -   'DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC' specifies a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic dynamic storage buffer descriptor>.
---
--- -   'DESCRIPTOR_TYPE_INPUT_ATTACHMENT' specifies an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment input attachment descriptor>.
---
--- -   'DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT' specifies an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inlineuniformblock inline uniform block>.
---
--- When a descriptor set is updated via elements of
--- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet', 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 'DESCRIPTOR_TYPE_SAMPLER', only the @sampler@ member of each
---     element of
---     'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet'::@pImageInfo@
---     is accessed.
---
--- -   For 'DESCRIPTOR_TYPE_SAMPLED_IMAGE',
---     'DESCRIPTOR_TYPE_STORAGE_IMAGE', or
---     'DESCRIPTOR_TYPE_INPUT_ATTACHMENT', only the @imageView@ and
---     @imageLayout@ members of each element of
---     'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet'::@pImageInfo@
---     are accessed.
---
--- -   For 'DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', all members of each
---     element of
---     'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet'::@pImageInfo@
---     are accessed.
---
--- -   For 'DESCRIPTOR_TYPE_UNIFORM_BUFFER',
---     'DESCRIPTOR_TYPE_STORAGE_BUFFER',
---     'DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC', or
---     'DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC', all members of each
---     element of
---     'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet'::@pBufferInfo@
---     are accessed.
---
--- -   For 'DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER' or
---     'DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER', each element of
---     'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet'::@pTexelBufferView@
---     is accessed.
---
--- When updating descriptors with a @descriptorType@ of
--- 'DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT', none of the @pImageInfo@,
--- @pBufferInfo@, or @pTexelBufferView@ members are accessed, instead the
--- source data of the descriptor update operation is taken from the
--- 'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT'
--- structure in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet'. When updating
--- descriptors with a @descriptorType@ of
--- 'DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR', none of the @pImageInfo@,
--- @pBufferInfo@, or @pTexelBufferView@ members are accessed, instead the
--- source data of the descriptor update operation is taken from the
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR'
--- structure in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet'.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorPoolSize',
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateEntry',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewHandleInfoNVX',
--- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet'
-newtype DescriptorType = DescriptorType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_SAMPLER"
-pattern DESCRIPTOR_TYPE_SAMPLER = DescriptorType 0
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER"
-pattern DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = DescriptorType 1
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE"
-pattern DESCRIPTOR_TYPE_SAMPLED_IMAGE = DescriptorType 2
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE"
-pattern DESCRIPTOR_TYPE_STORAGE_IMAGE = DescriptorType 3
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER"
-pattern DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = DescriptorType 4
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER"
-pattern DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = DescriptorType 5
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER"
-pattern DESCRIPTOR_TYPE_UNIFORM_BUFFER = DescriptorType 6
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER"
-pattern DESCRIPTOR_TYPE_STORAGE_BUFFER = DescriptorType 7
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC"
-pattern DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = DescriptorType 8
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"
-pattern DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = DescriptorType 9
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT"
-pattern DESCRIPTOR_TYPE_INPUT_ATTACHMENT = DescriptorType 10
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR"
-pattern DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = DescriptorType 1000165000
--- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT"
-pattern DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = DescriptorType 1000138000
-{-# complete DESCRIPTOR_TYPE_SAMPLER,
-             DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
-             DESCRIPTOR_TYPE_SAMPLED_IMAGE,
-             DESCRIPTOR_TYPE_STORAGE_IMAGE,
-             DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
-             DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
-             DESCRIPTOR_TYPE_UNIFORM_BUFFER,
-             DESCRIPTOR_TYPE_STORAGE_BUFFER,
-             DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
-             DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
-             DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
-             DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR,
-             DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT :: DescriptorType #-}
-
-instance Show DescriptorType where
-  showsPrec p = \case
-    DESCRIPTOR_TYPE_SAMPLER -> showString "DESCRIPTOR_TYPE_SAMPLER"
-    DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER -> showString "DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER"
-    DESCRIPTOR_TYPE_SAMPLED_IMAGE -> showString "DESCRIPTOR_TYPE_SAMPLED_IMAGE"
-    DESCRIPTOR_TYPE_STORAGE_IMAGE -> showString "DESCRIPTOR_TYPE_STORAGE_IMAGE"
-    DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER -> showString "DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER"
-    DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER -> showString "DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER"
-    DESCRIPTOR_TYPE_UNIFORM_BUFFER -> showString "DESCRIPTOR_TYPE_UNIFORM_BUFFER"
-    DESCRIPTOR_TYPE_STORAGE_BUFFER -> showString "DESCRIPTOR_TYPE_STORAGE_BUFFER"
-    DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC -> showString "DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC"
-    DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC -> showString "DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"
-    DESCRIPTOR_TYPE_INPUT_ATTACHMENT -> showString "DESCRIPTOR_TYPE_INPUT_ATTACHMENT"
-    DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR -> showString "DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR"
-    DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT -> showString "DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT"
-    DescriptorType x -> showParen (p >= 11) (showString "DescriptorType " . showsPrec 11 x)
-
-instance Read DescriptorType where
-  readPrec = parens (choose [("DESCRIPTOR_TYPE_SAMPLER", pure DESCRIPTOR_TYPE_SAMPLER)
-                            , ("DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER", pure DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
-                            , ("DESCRIPTOR_TYPE_SAMPLED_IMAGE", pure DESCRIPTOR_TYPE_SAMPLED_IMAGE)
-                            , ("DESCRIPTOR_TYPE_STORAGE_IMAGE", pure DESCRIPTOR_TYPE_STORAGE_IMAGE)
-                            , ("DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER", pure DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER)
-                            , ("DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER", pure DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER)
-                            , ("DESCRIPTOR_TYPE_UNIFORM_BUFFER", pure DESCRIPTOR_TYPE_UNIFORM_BUFFER)
-                            , ("DESCRIPTOR_TYPE_STORAGE_BUFFER", pure DESCRIPTOR_TYPE_STORAGE_BUFFER)
-                            , ("DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC", pure DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC)
-                            , ("DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", pure DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
-                            , ("DESCRIPTOR_TYPE_INPUT_ATTACHMENT", pure DESCRIPTOR_TYPE_INPUT_ATTACHMENT)
-                            , ("DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR", pure DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR)
-                            , ("DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT", pure DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DescriptorType")
-                       v <- step readPrec
-                       pure (DescriptorType v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/DeviceCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/DeviceCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/DeviceCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.DeviceCreateFlags  (DeviceCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkDeviceCreateFlags - Reserved for future use
---
--- = Description
---
--- 'DeviceCreateFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo'
-newtype DeviceCreateFlags = DeviceCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show DeviceCreateFlags where
-  showsPrec p = \case
-    DeviceCreateFlags x -> showParen (p >= 11) (showString "DeviceCreateFlags 0x" . showHex x)
-
-instance Read DeviceCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DeviceCreateFlags")
-                       v <- step readPrec
-                       pure (DeviceCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/DeviceQueueCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/DeviceQueueCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/DeviceQueueCreateFlagBits.hs
+++ /dev/null
@@ -1,49 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits  ( DeviceQueueCreateFlagBits( DEVICE_QUEUE_CREATE_PROTECTED_BIT
-                                                                                          , ..
-                                                                                          )
-                                                               , DeviceQueueCreateFlags
-                                                               ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkDeviceQueueCreateFlagBits - Bitmask specifying behavior of the queue
---
--- = See Also
---
--- 'DeviceQueueCreateFlags'
-newtype DeviceQueueCreateFlagBits = DeviceQueueCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'DEVICE_QUEUE_CREATE_PROTECTED_BIT' specifies that the device queue is a
--- protected-capable queue.
-pattern DEVICE_QUEUE_CREATE_PROTECTED_BIT = DeviceQueueCreateFlagBits 0x00000001
-
-type DeviceQueueCreateFlags = DeviceQueueCreateFlagBits
-
-instance Show DeviceQueueCreateFlagBits where
-  showsPrec p = \case
-    DEVICE_QUEUE_CREATE_PROTECTED_BIT -> showString "DEVICE_QUEUE_CREATE_PROTECTED_BIT"
-    DeviceQueueCreateFlagBits x -> showParen (p >= 11) (showString "DeviceQueueCreateFlagBits 0x" . showHex x)
-
-instance Read DeviceQueueCreateFlagBits where
-  readPrec = parens (choose [("DEVICE_QUEUE_CREATE_PROTECTED_BIT", pure DEVICE_QUEUE_CREATE_PROTECTED_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DeviceQueueCreateFlagBits")
-                       v <- step readPrec
-                       pure (DeviceQueueCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/DynamicState.hs b/src/Graphics/Vulkan/Core10/Enums/DynamicState.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/DynamicState.hs
+++ /dev/null
@@ -1,246 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.DynamicState  (DynamicState( DYNAMIC_STATE_VIEWPORT
-                                                               , DYNAMIC_STATE_SCISSOR
-                                                               , DYNAMIC_STATE_LINE_WIDTH
-                                                               , DYNAMIC_STATE_DEPTH_BIAS
-                                                               , DYNAMIC_STATE_BLEND_CONSTANTS
-                                                               , DYNAMIC_STATE_DEPTH_BOUNDS
-                                                               , DYNAMIC_STATE_STENCIL_COMPARE_MASK
-                                                               , DYNAMIC_STATE_STENCIL_WRITE_MASK
-                                                               , DYNAMIC_STATE_STENCIL_REFERENCE
-                                                               , DYNAMIC_STATE_LINE_STIPPLE_EXT
-                                                               , DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV
-                                                               , DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV
-                                                               , DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
-                                                               , DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
-                                                               , DYNAMIC_STATE_DISCARD_RECTANGLE_EXT
-                                                               , DYNAMIC_STATE_VIEWPORT_W_SCALING_NV
-                                                               , ..
-                                                               )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkDynamicState - Indicate which dynamic state is taken from dynamic
--- state commands
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'
-newtype DynamicState = DynamicState Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'DYNAMIC_STATE_VIEWPORT' specifies that the @pViewports@ state in
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' will
--- be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetViewport' before any
--- draw commands. The number of viewports used by a pipeline is still
--- specified by the @viewportCount@ member of
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'.
-pattern DYNAMIC_STATE_VIEWPORT = DynamicState 0
--- | 'DYNAMIC_STATE_SCISSOR' specifies that the @pScissors@ state in
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' will
--- be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetScissor' before any
--- draw commands. The number of scissor rectangles used by a pipeline is
--- still specified by the @scissorCount@ member of
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'.
-pattern DYNAMIC_STATE_SCISSOR = DynamicState 1
--- | 'DYNAMIC_STATE_LINE_WIDTH' specifies that the @lineWidth@ state in
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
--- will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' before
--- any draw commands that generate line primitives for the rasterizer.
-pattern DYNAMIC_STATE_LINE_WIDTH = DynamicState 2
--- | 'DYNAMIC_STATE_DEPTH_BIAS' specifies that the @depthBiasConstantFactor@,
--- @depthBiasClamp@ and @depthBiasSlopeFactor@ states in
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
--- will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBias' before
--- any draws are performed with @depthBiasEnable@ in
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
--- set to 'Graphics.Vulkan.Core10.BaseType.TRUE'.
-pattern DYNAMIC_STATE_DEPTH_BIAS = DynamicState 3
--- | 'DYNAMIC_STATE_BLEND_CONSTANTS' specifies that the @blendConstants@
--- state in
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo' will
--- be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetBlendConstants'
--- before any draws are performed with a pipeline state with
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'
--- member @blendEnable@ set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and
--- any of the blend functions using a constant blend color.
-pattern DYNAMIC_STATE_BLEND_CONSTANTS = DynamicState 4
--- | 'DYNAMIC_STATE_DEPTH_BOUNDS' specifies that the @minDepthBounds@ and
--- @maxDepthBounds@ states of
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
--- will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBounds' before
--- any draws are performed with a pipeline state with
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
--- member @depthBoundsTestEnable@ set to
--- 'Graphics.Vulkan.Core10.BaseType.TRUE'.
-pattern DYNAMIC_STATE_DEPTH_BOUNDS = DynamicState 5
--- | 'DYNAMIC_STATE_STENCIL_COMPARE_MASK' specifies that the @compareMask@
--- state in
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
--- for both @front@ and @back@ will be ignored and /must/ be set
--- dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetStencilCompareMask'
--- before any draws are performed with a pipeline state with
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
--- member @stencilTestEnable@ set to 'Graphics.Vulkan.Core10.BaseType.TRUE'
-pattern DYNAMIC_STATE_STENCIL_COMPARE_MASK = DynamicState 6
--- | 'DYNAMIC_STATE_STENCIL_WRITE_MASK' specifies that the @writeMask@ state
--- in 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
--- for both @front@ and @back@ will be ignored and /must/ be set
--- dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetStencilWriteMask'
--- before any draws are performed with a pipeline state with
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
--- member @stencilTestEnable@ set to 'Graphics.Vulkan.Core10.BaseType.TRUE'
-pattern DYNAMIC_STATE_STENCIL_WRITE_MASK = DynamicState 7
--- | 'DYNAMIC_STATE_STENCIL_REFERENCE' specifies that the @reference@ state
--- in 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
--- for both @front@ and @back@ will be ignored and /must/ be set
--- dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetStencilReference'
--- before any draws are performed with a pipeline state with
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
--- member @stencilTestEnable@ set to 'Graphics.Vulkan.Core10.BaseType.TRUE'
-pattern DYNAMIC_STATE_STENCIL_REFERENCE = DynamicState 8
--- | 'DYNAMIC_STATE_LINE_STIPPLE_EXT' specifies that the @lineStippleFactor@
--- and @lineStipplePattern@ state in
--- 'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
--- will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.cmdSetLineStippleEXT'
--- before any draws are performed with a pipeline state with
--- 'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
--- member @stippledLineEnable@ set to
--- 'Graphics.Vulkan.Core10.BaseType.TRUE'.
-pattern DYNAMIC_STATE_LINE_STIPPLE_EXT = DynamicState 1000259000
--- | 'DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV' specifies that the
--- @pExclusiveScissors@ state in
--- 'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'
--- will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV'
--- before any draw commands. The number of exclusive scissor rectangles
--- used by a pipeline is still specified by the @exclusiveScissorCount@
--- member of
--- 'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'.
-pattern DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = DynamicState 1000205001
--- | 'DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV' specifies that the
--- coarse sample order state in
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportCoarseSampleOrderStateCreateInfoNV'
--- will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetCoarseSampleOrderNV'
--- before any draw commands.
-pattern DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = DynamicState 1000164006
--- | 'DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV' specifies that the
--- @pShadingRatePalettes@ state in
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'
--- will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'
--- before any draw commands.
-pattern DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = DynamicState 1000164004
--- | 'DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT' specifies that the
--- @sampleLocationsInfo@ state in
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
--- will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
--- before any draw or clear commands. Enabling custom sample locations is
--- still indicated by the @sampleLocationsEnable@ member of
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'.
-pattern DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = DynamicState 1000143000
--- | 'DYNAMIC_STATE_DISCARD_RECTANGLE_EXT' specifies that the
--- @pDiscardRectangles@ state in
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'
--- will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEXT'
--- before any draw or clear commands. The
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.DiscardRectangleModeEXT'
--- and the number of active discard rectangles is still specified by the
--- @discardRectangleMode@ and @discardRectangleCount@ members of
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'.
-pattern DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = DynamicState 1000099000
--- | 'DYNAMIC_STATE_VIEWPORT_W_SCALING_NV' specifies that the
--- @pViewportScalings@ state in
--- 'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
--- will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'
--- before any draws are performed with a pipeline state with
--- 'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
--- member @viewportScalingEnable@ set to
--- 'Graphics.Vulkan.Core10.BaseType.TRUE'
-pattern DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = DynamicState 1000087000
-{-# complete DYNAMIC_STATE_VIEWPORT,
-             DYNAMIC_STATE_SCISSOR,
-             DYNAMIC_STATE_LINE_WIDTH,
-             DYNAMIC_STATE_DEPTH_BIAS,
-             DYNAMIC_STATE_BLEND_CONSTANTS,
-             DYNAMIC_STATE_DEPTH_BOUNDS,
-             DYNAMIC_STATE_STENCIL_COMPARE_MASK,
-             DYNAMIC_STATE_STENCIL_WRITE_MASK,
-             DYNAMIC_STATE_STENCIL_REFERENCE,
-             DYNAMIC_STATE_LINE_STIPPLE_EXT,
-             DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV,
-             DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV,
-             DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV,
-             DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT,
-             DYNAMIC_STATE_DISCARD_RECTANGLE_EXT,
-             DYNAMIC_STATE_VIEWPORT_W_SCALING_NV :: DynamicState #-}
-
-instance Show DynamicState where
-  showsPrec p = \case
-    DYNAMIC_STATE_VIEWPORT -> showString "DYNAMIC_STATE_VIEWPORT"
-    DYNAMIC_STATE_SCISSOR -> showString "DYNAMIC_STATE_SCISSOR"
-    DYNAMIC_STATE_LINE_WIDTH -> showString "DYNAMIC_STATE_LINE_WIDTH"
-    DYNAMIC_STATE_DEPTH_BIAS -> showString "DYNAMIC_STATE_DEPTH_BIAS"
-    DYNAMIC_STATE_BLEND_CONSTANTS -> showString "DYNAMIC_STATE_BLEND_CONSTANTS"
-    DYNAMIC_STATE_DEPTH_BOUNDS -> showString "DYNAMIC_STATE_DEPTH_BOUNDS"
-    DYNAMIC_STATE_STENCIL_COMPARE_MASK -> showString "DYNAMIC_STATE_STENCIL_COMPARE_MASK"
-    DYNAMIC_STATE_STENCIL_WRITE_MASK -> showString "DYNAMIC_STATE_STENCIL_WRITE_MASK"
-    DYNAMIC_STATE_STENCIL_REFERENCE -> showString "DYNAMIC_STATE_STENCIL_REFERENCE"
-    DYNAMIC_STATE_LINE_STIPPLE_EXT -> showString "DYNAMIC_STATE_LINE_STIPPLE_EXT"
-    DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV -> showString "DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV"
-    DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV -> showString "DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV"
-    DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV -> showString "DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV"
-    DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT -> showString "DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT"
-    DYNAMIC_STATE_DISCARD_RECTANGLE_EXT -> showString "DYNAMIC_STATE_DISCARD_RECTANGLE_EXT"
-    DYNAMIC_STATE_VIEWPORT_W_SCALING_NV -> showString "DYNAMIC_STATE_VIEWPORT_W_SCALING_NV"
-    DynamicState x -> showParen (p >= 11) (showString "DynamicState " . showsPrec 11 x)
-
-instance Read DynamicState where
-  readPrec = parens (choose [("DYNAMIC_STATE_VIEWPORT", pure DYNAMIC_STATE_VIEWPORT)
-                            , ("DYNAMIC_STATE_SCISSOR", pure DYNAMIC_STATE_SCISSOR)
-                            , ("DYNAMIC_STATE_LINE_WIDTH", pure DYNAMIC_STATE_LINE_WIDTH)
-                            , ("DYNAMIC_STATE_DEPTH_BIAS", pure DYNAMIC_STATE_DEPTH_BIAS)
-                            , ("DYNAMIC_STATE_BLEND_CONSTANTS", pure DYNAMIC_STATE_BLEND_CONSTANTS)
-                            , ("DYNAMIC_STATE_DEPTH_BOUNDS", pure DYNAMIC_STATE_DEPTH_BOUNDS)
-                            , ("DYNAMIC_STATE_STENCIL_COMPARE_MASK", pure DYNAMIC_STATE_STENCIL_COMPARE_MASK)
-                            , ("DYNAMIC_STATE_STENCIL_WRITE_MASK", pure DYNAMIC_STATE_STENCIL_WRITE_MASK)
-                            , ("DYNAMIC_STATE_STENCIL_REFERENCE", pure DYNAMIC_STATE_STENCIL_REFERENCE)
-                            , ("DYNAMIC_STATE_LINE_STIPPLE_EXT", pure DYNAMIC_STATE_LINE_STIPPLE_EXT)
-                            , ("DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV", pure DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV)
-                            , ("DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV", pure DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV)
-                            , ("DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV", pure DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV)
-                            , ("DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT", pure DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT)
-                            , ("DYNAMIC_STATE_DISCARD_RECTANGLE_EXT", pure DYNAMIC_STATE_DISCARD_RECTANGLE_EXT)
-                            , ("DYNAMIC_STATE_VIEWPORT_W_SCALING_NV", pure DYNAMIC_STATE_VIEWPORT_W_SCALING_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DynamicState")
-                       v <- step readPrec
-                       pure (DynamicState v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/EventCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/EventCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/EventCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.EventCreateFlags  (EventCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkEventCreateFlags - Reserved for future use
---
--- = Description
---
--- 'EventCreateFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Event.EventCreateInfo'
-newtype EventCreateFlags = EventCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show EventCreateFlags where
-  showsPrec p = \case
-    EventCreateFlags x -> showParen (p >= 11) (showString "EventCreateFlags 0x" . showHex x)
-
-instance Read EventCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "EventCreateFlags")
-                       v <- step readPrec
-                       pure (EventCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/FenceCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/FenceCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/FenceCreateFlagBits.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.FenceCreateFlagBits  ( FenceCreateFlagBits( FENCE_CREATE_SIGNALED_BIT
-                                                                              , ..
-                                                                              )
-                                                         , FenceCreateFlags
-                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkFenceCreateFlagBits - Bitmask specifying initial state and behavior of
--- a fence
---
--- = See Also
---
--- 'FenceCreateFlags'
-newtype FenceCreateFlagBits = FenceCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'FENCE_CREATE_SIGNALED_BIT' specifies that the fence object is created
--- in the signaled state. Otherwise, it is created in the unsignaled state.
-pattern FENCE_CREATE_SIGNALED_BIT = FenceCreateFlagBits 0x00000001
-
-type FenceCreateFlags = FenceCreateFlagBits
-
-instance Show FenceCreateFlagBits where
-  showsPrec p = \case
-    FENCE_CREATE_SIGNALED_BIT -> showString "FENCE_CREATE_SIGNALED_BIT"
-    FenceCreateFlagBits x -> showParen (p >= 11) (showString "FenceCreateFlagBits 0x" . showHex x)
-
-instance Read FenceCreateFlagBits where
-  readPrec = parens (choose [("FENCE_CREATE_SIGNALED_BIT", pure FENCE_CREATE_SIGNALED_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "FenceCreateFlagBits")
-                       v <- step readPrec
-                       pure (FenceCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/Filter.hs b/src/Graphics/Vulkan/Core10/Enums/Filter.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/Filter.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.Filter  (Filter( FILTER_NEAREST
-                                                   , FILTER_LINEAR
-                                                   , FILTER_CUBIC_IMG
-                                                   , ..
-                                                   )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkFilter - Specify filters used for texture lookups
---
--- = Description
---
--- These filters are described in detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-texel-filtering Texel Filtering>.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
-newtype Filter = Filter Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'FILTER_NEAREST' specifies nearest filtering.
-pattern FILTER_NEAREST = Filter 0
--- | 'FILTER_LINEAR' specifies linear filtering.
-pattern FILTER_LINEAR = Filter 1
--- No documentation found for Nested "VkFilter" "VK_FILTER_CUBIC_IMG"
-pattern FILTER_CUBIC_IMG = Filter 1000015000
-{-# complete FILTER_NEAREST,
-             FILTER_LINEAR,
-             FILTER_CUBIC_IMG :: Filter #-}
-
-instance Show Filter where
-  showsPrec p = \case
-    FILTER_NEAREST -> showString "FILTER_NEAREST"
-    FILTER_LINEAR -> showString "FILTER_LINEAR"
-    FILTER_CUBIC_IMG -> showString "FILTER_CUBIC_IMG"
-    Filter x -> showParen (p >= 11) (showString "Filter " . showsPrec 11 x)
-
-instance Read Filter where
-  readPrec = parens (choose [("FILTER_NEAREST", pure FILTER_NEAREST)
-                            , ("FILTER_LINEAR", pure FILTER_LINEAR)
-                            , ("FILTER_CUBIC_IMG", pure FILTER_CUBIC_IMG)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "Filter")
-                       v <- step readPrec
-                       pure (Filter v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/Filter.hs-boot b/src/Graphics/Vulkan/Core10/Enums/Filter.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/Filter.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.Filter  (Filter) where
-
-
-
-data Filter
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/Format.hs b/src/Graphics/Vulkan/Core10/Enums/Format.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/Format.hs
+++ /dev/null
@@ -1,2445 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.Format  (Format( FORMAT_UNDEFINED
-                                                   , FORMAT_R4G4_UNORM_PACK8
-                                                   , FORMAT_R4G4B4A4_UNORM_PACK16
-                                                   , FORMAT_B4G4R4A4_UNORM_PACK16
-                                                   , FORMAT_R5G6B5_UNORM_PACK16
-                                                   , FORMAT_B5G6R5_UNORM_PACK16
-                                                   , FORMAT_R5G5B5A1_UNORM_PACK16
-                                                   , FORMAT_B5G5R5A1_UNORM_PACK16
-                                                   , FORMAT_A1R5G5B5_UNORM_PACK16
-                                                   , FORMAT_R8_UNORM
-                                                   , FORMAT_R8_SNORM
-                                                   , FORMAT_R8_USCALED
-                                                   , FORMAT_R8_SSCALED
-                                                   , FORMAT_R8_UINT
-                                                   , FORMAT_R8_SINT
-                                                   , FORMAT_R8_SRGB
-                                                   , FORMAT_R8G8_UNORM
-                                                   , FORMAT_R8G8_SNORM
-                                                   , FORMAT_R8G8_USCALED
-                                                   , FORMAT_R8G8_SSCALED
-                                                   , FORMAT_R8G8_UINT
-                                                   , FORMAT_R8G8_SINT
-                                                   , FORMAT_R8G8_SRGB
-                                                   , FORMAT_R8G8B8_UNORM
-                                                   , FORMAT_R8G8B8_SNORM
-                                                   , FORMAT_R8G8B8_USCALED
-                                                   , FORMAT_R8G8B8_SSCALED
-                                                   , FORMAT_R8G8B8_UINT
-                                                   , FORMAT_R8G8B8_SINT
-                                                   , FORMAT_R8G8B8_SRGB
-                                                   , FORMAT_B8G8R8_UNORM
-                                                   , FORMAT_B8G8R8_SNORM
-                                                   , FORMAT_B8G8R8_USCALED
-                                                   , FORMAT_B8G8R8_SSCALED
-                                                   , FORMAT_B8G8R8_UINT
-                                                   , FORMAT_B8G8R8_SINT
-                                                   , FORMAT_B8G8R8_SRGB
-                                                   , FORMAT_R8G8B8A8_UNORM
-                                                   , FORMAT_R8G8B8A8_SNORM
-                                                   , FORMAT_R8G8B8A8_USCALED
-                                                   , FORMAT_R8G8B8A8_SSCALED
-                                                   , FORMAT_R8G8B8A8_UINT
-                                                   , FORMAT_R8G8B8A8_SINT
-                                                   , FORMAT_R8G8B8A8_SRGB
-                                                   , FORMAT_B8G8R8A8_UNORM
-                                                   , FORMAT_B8G8R8A8_SNORM
-                                                   , FORMAT_B8G8R8A8_USCALED
-                                                   , FORMAT_B8G8R8A8_SSCALED
-                                                   , FORMAT_B8G8R8A8_UINT
-                                                   , FORMAT_B8G8R8A8_SINT
-                                                   , FORMAT_B8G8R8A8_SRGB
-                                                   , FORMAT_A8B8G8R8_UNORM_PACK32
-                                                   , FORMAT_A8B8G8R8_SNORM_PACK32
-                                                   , FORMAT_A8B8G8R8_USCALED_PACK32
-                                                   , FORMAT_A8B8G8R8_SSCALED_PACK32
-                                                   , FORMAT_A8B8G8R8_UINT_PACK32
-                                                   , FORMAT_A8B8G8R8_SINT_PACK32
-                                                   , FORMAT_A8B8G8R8_SRGB_PACK32
-                                                   , FORMAT_A2R10G10B10_UNORM_PACK32
-                                                   , FORMAT_A2R10G10B10_SNORM_PACK32
-                                                   , FORMAT_A2R10G10B10_USCALED_PACK32
-                                                   , FORMAT_A2R10G10B10_SSCALED_PACK32
-                                                   , FORMAT_A2R10G10B10_UINT_PACK32
-                                                   , FORMAT_A2R10G10B10_SINT_PACK32
-                                                   , FORMAT_A2B10G10R10_UNORM_PACK32
-                                                   , FORMAT_A2B10G10R10_SNORM_PACK32
-                                                   , FORMAT_A2B10G10R10_USCALED_PACK32
-                                                   , FORMAT_A2B10G10R10_SSCALED_PACK32
-                                                   , FORMAT_A2B10G10R10_UINT_PACK32
-                                                   , FORMAT_A2B10G10R10_SINT_PACK32
-                                                   , FORMAT_R16_UNORM
-                                                   , FORMAT_R16_SNORM
-                                                   , FORMAT_R16_USCALED
-                                                   , FORMAT_R16_SSCALED
-                                                   , FORMAT_R16_UINT
-                                                   , FORMAT_R16_SINT
-                                                   , FORMAT_R16_SFLOAT
-                                                   , FORMAT_R16G16_UNORM
-                                                   , FORMAT_R16G16_SNORM
-                                                   , FORMAT_R16G16_USCALED
-                                                   , FORMAT_R16G16_SSCALED
-                                                   , FORMAT_R16G16_UINT
-                                                   , FORMAT_R16G16_SINT
-                                                   , FORMAT_R16G16_SFLOAT
-                                                   , FORMAT_R16G16B16_UNORM
-                                                   , FORMAT_R16G16B16_SNORM
-                                                   , FORMAT_R16G16B16_USCALED
-                                                   , FORMAT_R16G16B16_SSCALED
-                                                   , FORMAT_R16G16B16_UINT
-                                                   , FORMAT_R16G16B16_SINT
-                                                   , FORMAT_R16G16B16_SFLOAT
-                                                   , FORMAT_R16G16B16A16_UNORM
-                                                   , FORMAT_R16G16B16A16_SNORM
-                                                   , FORMAT_R16G16B16A16_USCALED
-                                                   , FORMAT_R16G16B16A16_SSCALED
-                                                   , FORMAT_R16G16B16A16_UINT
-                                                   , FORMAT_R16G16B16A16_SINT
-                                                   , FORMAT_R16G16B16A16_SFLOAT
-                                                   , FORMAT_R32_UINT
-                                                   , FORMAT_R32_SINT
-                                                   , FORMAT_R32_SFLOAT
-                                                   , FORMAT_R32G32_UINT
-                                                   , FORMAT_R32G32_SINT
-                                                   , FORMAT_R32G32_SFLOAT
-                                                   , FORMAT_R32G32B32_UINT
-                                                   , FORMAT_R32G32B32_SINT
-                                                   , FORMAT_R32G32B32_SFLOAT
-                                                   , FORMAT_R32G32B32A32_UINT
-                                                   , FORMAT_R32G32B32A32_SINT
-                                                   , FORMAT_R32G32B32A32_SFLOAT
-                                                   , FORMAT_R64_UINT
-                                                   , FORMAT_R64_SINT
-                                                   , FORMAT_R64_SFLOAT
-                                                   , FORMAT_R64G64_UINT
-                                                   , FORMAT_R64G64_SINT
-                                                   , FORMAT_R64G64_SFLOAT
-                                                   , FORMAT_R64G64B64_UINT
-                                                   , FORMAT_R64G64B64_SINT
-                                                   , FORMAT_R64G64B64_SFLOAT
-                                                   , FORMAT_R64G64B64A64_UINT
-                                                   , FORMAT_R64G64B64A64_SINT
-                                                   , FORMAT_R64G64B64A64_SFLOAT
-                                                   , FORMAT_B10G11R11_UFLOAT_PACK32
-                                                   , FORMAT_E5B9G9R9_UFLOAT_PACK32
-                                                   , FORMAT_D16_UNORM
-                                                   , FORMAT_X8_D24_UNORM_PACK32
-                                                   , FORMAT_D32_SFLOAT
-                                                   , FORMAT_S8_UINT
-                                                   , FORMAT_D16_UNORM_S8_UINT
-                                                   , FORMAT_D24_UNORM_S8_UINT
-                                                   , FORMAT_D32_SFLOAT_S8_UINT
-                                                   , FORMAT_BC1_RGB_UNORM_BLOCK
-                                                   , FORMAT_BC1_RGB_SRGB_BLOCK
-                                                   , FORMAT_BC1_RGBA_UNORM_BLOCK
-                                                   , FORMAT_BC1_RGBA_SRGB_BLOCK
-                                                   , FORMAT_BC2_UNORM_BLOCK
-                                                   , FORMAT_BC2_SRGB_BLOCK
-                                                   , FORMAT_BC3_UNORM_BLOCK
-                                                   , FORMAT_BC3_SRGB_BLOCK
-                                                   , FORMAT_BC4_UNORM_BLOCK
-                                                   , FORMAT_BC4_SNORM_BLOCK
-                                                   , FORMAT_BC5_UNORM_BLOCK
-                                                   , FORMAT_BC5_SNORM_BLOCK
-                                                   , FORMAT_BC6H_UFLOAT_BLOCK
-                                                   , FORMAT_BC6H_SFLOAT_BLOCK
-                                                   , FORMAT_BC7_UNORM_BLOCK
-                                                   , FORMAT_BC7_SRGB_BLOCK
-                                                   , FORMAT_ETC2_R8G8B8_UNORM_BLOCK
-                                                   , FORMAT_ETC2_R8G8B8_SRGB_BLOCK
-                                                   , FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
-                                                   , FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
-                                                   , FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
-                                                   , FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
-                                                   , FORMAT_EAC_R11_UNORM_BLOCK
-                                                   , FORMAT_EAC_R11_SNORM_BLOCK
-                                                   , FORMAT_EAC_R11G11_UNORM_BLOCK
-                                                   , FORMAT_EAC_R11G11_SNORM_BLOCK
-                                                   , FORMAT_ASTC_4x4_UNORM_BLOCK
-                                                   , FORMAT_ASTC_4x4_SRGB_BLOCK
-                                                   , FORMAT_ASTC_5x4_UNORM_BLOCK
-                                                   , FORMAT_ASTC_5x4_SRGB_BLOCK
-                                                   , FORMAT_ASTC_5x5_UNORM_BLOCK
-                                                   , FORMAT_ASTC_5x5_SRGB_BLOCK
-                                                   , FORMAT_ASTC_6x5_UNORM_BLOCK
-                                                   , FORMAT_ASTC_6x5_SRGB_BLOCK
-                                                   , FORMAT_ASTC_6x6_UNORM_BLOCK
-                                                   , FORMAT_ASTC_6x6_SRGB_BLOCK
-                                                   , FORMAT_ASTC_8x5_UNORM_BLOCK
-                                                   , FORMAT_ASTC_8x5_SRGB_BLOCK
-                                                   , FORMAT_ASTC_8x6_UNORM_BLOCK
-                                                   , FORMAT_ASTC_8x6_SRGB_BLOCK
-                                                   , FORMAT_ASTC_8x8_UNORM_BLOCK
-                                                   , FORMAT_ASTC_8x8_SRGB_BLOCK
-                                                   , FORMAT_ASTC_10x5_UNORM_BLOCK
-                                                   , FORMAT_ASTC_10x5_SRGB_BLOCK
-                                                   , FORMAT_ASTC_10x6_UNORM_BLOCK
-                                                   , FORMAT_ASTC_10x6_SRGB_BLOCK
-                                                   , FORMAT_ASTC_10x8_UNORM_BLOCK
-                                                   , FORMAT_ASTC_10x8_SRGB_BLOCK
-                                                   , FORMAT_ASTC_10x10_UNORM_BLOCK
-                                                   , FORMAT_ASTC_10x10_SRGB_BLOCK
-                                                   , FORMAT_ASTC_12x10_UNORM_BLOCK
-                                                   , FORMAT_ASTC_12x10_SRGB_BLOCK
-                                                   , FORMAT_ASTC_12x12_UNORM_BLOCK
-                                                   , FORMAT_ASTC_12x12_SRGB_BLOCK
-                                                   , FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT
-                                                   , FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG
-                                                   , FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG
-                                                   , FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG
-                                                   , FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG
-                                                   , FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG
-                                                   , FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG
-                                                   , FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG
-                                                   , FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG
-                                                   , FORMAT_G16_B16_R16_3PLANE_444_UNORM
-                                                   , FORMAT_G16_B16R16_2PLANE_422_UNORM
-                                                   , FORMAT_G16_B16_R16_3PLANE_422_UNORM
-                                                   , FORMAT_G16_B16R16_2PLANE_420_UNORM
-                                                   , FORMAT_G16_B16_R16_3PLANE_420_UNORM
-                                                   , FORMAT_B16G16R16G16_422_UNORM
-                                                   , FORMAT_G16B16G16R16_422_UNORM
-                                                   , FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
-                                                   , FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
-                                                   , FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
-                                                   , FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
-                                                   , FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
-                                                   , FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
-                                                   , FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
-                                                   , FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
-                                                   , FORMAT_R12X4G12X4_UNORM_2PACK16
-                                                   , FORMAT_R12X4_UNORM_PACK16
-                                                   , FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
-                                                   , FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
-                                                   , FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
-                                                   , FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
-                                                   , FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
-                                                   , FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
-                                                   , FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
-                                                   , FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
-                                                   , FORMAT_R10X6G10X6_UNORM_2PACK16
-                                                   , FORMAT_R10X6_UNORM_PACK16
-                                                   , FORMAT_G8_B8_R8_3PLANE_444_UNORM
-                                                   , FORMAT_G8_B8R8_2PLANE_422_UNORM
-                                                   , FORMAT_G8_B8_R8_3PLANE_422_UNORM
-                                                   , FORMAT_G8_B8R8_2PLANE_420_UNORM
-                                                   , FORMAT_G8_B8_R8_3PLANE_420_UNORM
-                                                   , FORMAT_B8G8R8G8_422_UNORM
-                                                   , FORMAT_G8B8G8R8_422_UNORM
-                                                   , ..
-                                                   )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkFormat - Available image formats
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateGeometryTypeInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryTrianglesDataKHR',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
--- 'Graphics.Vulkan.Core10.Pass.AttachmentDescription',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',
--- 'Graphics.Vulkan.Core10.BufferView.BufferViewCreateInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentImageInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode.ImageViewASTCDecodeModeEXT',
--- 'Graphics.Vulkan.Core10.ImageView.ImageViewCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.Pipeline.VertexInputAttributeDescription',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2KHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties'
-newtype Format = Format Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'FORMAT_UNDEFINED' specifies that the format is not specified.
-pattern FORMAT_UNDEFINED = Format 0
--- | '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 FORMAT_R4G4_UNORM_PACK8 = Format 1
--- | '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 FORMAT_R4G4B4A4_UNORM_PACK16 = Format 2
--- | '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 FORMAT_B4G4R4A4_UNORM_PACK16 = Format 3
--- | '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 FORMAT_R5G6B5_UNORM_PACK16 = Format 4
--- | '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 FORMAT_B5G6R5_UNORM_PACK16 = Format 5
--- | '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 FORMAT_R5G5B5A1_UNORM_PACK16 = Format 6
--- | '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 FORMAT_B5G5R5A1_UNORM_PACK16 = Format 7
--- | '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 FORMAT_A1R5G5B5_UNORM_PACK16 = Format 8
--- | 'FORMAT_R8_UNORM' specifies a one-component, 8-bit unsigned normalized
--- format that has a single 8-bit R component.
-pattern FORMAT_R8_UNORM = Format 9
--- | 'FORMAT_R8_SNORM' specifies a one-component, 8-bit signed normalized
--- format that has a single 8-bit R component.
-pattern FORMAT_R8_SNORM = Format 10
--- | 'FORMAT_R8_USCALED' specifies a one-component, 8-bit unsigned scaled
--- integer format that has a single 8-bit R component.
-pattern FORMAT_R8_USCALED = Format 11
--- | 'FORMAT_R8_SSCALED' specifies a one-component, 8-bit signed scaled
--- integer format that has a single 8-bit R component.
-pattern FORMAT_R8_SSCALED = Format 12
--- | 'FORMAT_R8_UINT' specifies a one-component, 8-bit unsigned integer
--- format that has a single 8-bit R component.
-pattern FORMAT_R8_UINT = Format 13
--- | 'FORMAT_R8_SINT' specifies a one-component, 8-bit signed integer format
--- that has a single 8-bit R component.
-pattern FORMAT_R8_SINT = Format 14
--- | '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 FORMAT_R8_SRGB = Format 15
--- | '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 FORMAT_R8G8_UNORM = Format 16
--- | '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 FORMAT_R8G8_SNORM = Format 17
--- | '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 FORMAT_R8G8_USCALED = Format 18
--- | '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 FORMAT_R8G8_SSCALED = Format 19
--- | '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 FORMAT_R8G8_UINT = Format 20
--- | '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 FORMAT_R8G8_SINT = Format 21
--- | '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 FORMAT_R8G8_SRGB = Format 22
--- | '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 FORMAT_R8G8B8_UNORM = Format 23
--- | '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 FORMAT_R8G8B8_SNORM = Format 24
--- | '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 FORMAT_R8G8B8_USCALED = Format 25
--- | '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 FORMAT_R8G8B8_SSCALED = Format 26
--- | '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 FORMAT_R8G8B8_UINT = Format 27
--- | '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 FORMAT_R8G8B8_SINT = Format 28
--- | '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 FORMAT_R8G8B8_SRGB = Format 29
--- | '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 FORMAT_B8G8R8_UNORM = Format 30
--- | '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 FORMAT_B8G8R8_SNORM = Format 31
--- | '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 FORMAT_B8G8R8_USCALED = Format 32
--- | '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 FORMAT_B8G8R8_SSCALED = Format 33
--- | '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 FORMAT_B8G8R8_UINT = Format 34
--- | '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 FORMAT_B8G8R8_SINT = Format 35
--- | '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 FORMAT_B8G8R8_SRGB = Format 36
--- | '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 FORMAT_R8G8B8A8_UNORM = Format 37
--- | '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 FORMAT_R8G8B8A8_SNORM = Format 38
--- | '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 FORMAT_R8G8B8A8_USCALED = Format 39
--- | '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 FORMAT_R8G8B8A8_SSCALED = Format 40
--- | '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 FORMAT_R8G8B8A8_UINT = Format 41
--- | '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 FORMAT_R8G8B8A8_SINT = Format 42
--- | '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 FORMAT_R8G8B8A8_SRGB = Format 43
--- | '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 FORMAT_B8G8R8A8_UNORM = Format 44
--- | '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 FORMAT_B8G8R8A8_SNORM = Format 45
--- | '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 FORMAT_B8G8R8A8_USCALED = Format 46
--- | '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 FORMAT_B8G8R8A8_SSCALED = Format 47
--- | '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 FORMAT_B8G8R8A8_UINT = Format 48
--- | '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 FORMAT_B8G8R8A8_SINT = Format 49
--- | '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 FORMAT_B8G8R8A8_SRGB = Format 50
--- | '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 FORMAT_A8B8G8R8_UNORM_PACK32 = Format 51
--- | '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 FORMAT_A8B8G8R8_SNORM_PACK32 = Format 52
--- | '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 FORMAT_A8B8G8R8_USCALED_PACK32 = Format 53
--- | '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 FORMAT_A8B8G8R8_SSCALED_PACK32 = Format 54
--- | '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 FORMAT_A8B8G8R8_UINT_PACK32 = Format 55
--- | '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 FORMAT_A8B8G8R8_SINT_PACK32 = Format 56
--- | '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 FORMAT_A8B8G8R8_SRGB_PACK32 = Format 57
--- | '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 FORMAT_A2R10G10B10_UNORM_PACK32 = Format 58
--- | '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 FORMAT_A2R10G10B10_SNORM_PACK32 = Format 59
--- | '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 FORMAT_A2R10G10B10_USCALED_PACK32 = Format 60
--- | '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 FORMAT_A2R10G10B10_SSCALED_PACK32 = Format 61
--- | '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 FORMAT_A2R10G10B10_UINT_PACK32 = Format 62
--- | '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 FORMAT_A2R10G10B10_SINT_PACK32 = Format 63
--- | '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 FORMAT_A2B10G10R10_UNORM_PACK32 = Format 64
--- | '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 FORMAT_A2B10G10R10_SNORM_PACK32 = Format 65
--- | '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 FORMAT_A2B10G10R10_USCALED_PACK32 = Format 66
--- | '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 FORMAT_A2B10G10R10_SSCALED_PACK32 = Format 67
--- | '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 FORMAT_A2B10G10R10_UINT_PACK32 = Format 68
--- | '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 FORMAT_A2B10G10R10_SINT_PACK32 = Format 69
--- | 'FORMAT_R16_UNORM' specifies a one-component, 16-bit unsigned normalized
--- format that has a single 16-bit R component.
-pattern FORMAT_R16_UNORM = Format 70
--- | 'FORMAT_R16_SNORM' specifies a one-component, 16-bit signed normalized
--- format that has a single 16-bit R component.
-pattern FORMAT_R16_SNORM = Format 71
--- | 'FORMAT_R16_USCALED' specifies a one-component, 16-bit unsigned scaled
--- integer format that has a single 16-bit R component.
-pattern FORMAT_R16_USCALED = Format 72
--- | 'FORMAT_R16_SSCALED' specifies a one-component, 16-bit signed scaled
--- integer format that has a single 16-bit R component.
-pattern FORMAT_R16_SSCALED = Format 73
--- | 'FORMAT_R16_UINT' specifies a one-component, 16-bit unsigned integer
--- format that has a single 16-bit R component.
-pattern FORMAT_R16_UINT = Format 74
--- | 'FORMAT_R16_SINT' specifies a one-component, 16-bit signed integer
--- format that has a single 16-bit R component.
-pattern FORMAT_R16_SINT = Format 75
--- | 'FORMAT_R16_SFLOAT' specifies a one-component, 16-bit signed
--- floating-point format that has a single 16-bit R component.
-pattern FORMAT_R16_SFLOAT = Format 76
--- | '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 FORMAT_R16G16_UNORM = Format 77
--- | '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 FORMAT_R16G16_SNORM = Format 78
--- | '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 FORMAT_R16G16_USCALED = Format 79
--- | '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 FORMAT_R16G16_SSCALED = Format 80
--- | '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 FORMAT_R16G16_UINT = Format 81
--- | '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 FORMAT_R16G16_SINT = Format 82
--- | '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 FORMAT_R16G16_SFLOAT = Format 83
--- | '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 FORMAT_R16G16B16_UNORM = Format 84
--- | '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 FORMAT_R16G16B16_SNORM = Format 85
--- | '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 FORMAT_R16G16B16_USCALED = Format 86
--- | '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 FORMAT_R16G16B16_SSCALED = Format 87
--- | '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 FORMAT_R16G16B16_UINT = Format 88
--- | '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 FORMAT_R16G16B16_SINT = Format 89
--- | '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 FORMAT_R16G16B16_SFLOAT = Format 90
--- | '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 FORMAT_R16G16B16A16_UNORM = Format 91
--- | '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 FORMAT_R16G16B16A16_SNORM = Format 92
--- | '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 FORMAT_R16G16B16A16_USCALED = Format 93
--- | '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 FORMAT_R16G16B16A16_SSCALED = Format 94
--- | '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 FORMAT_R16G16B16A16_UINT = Format 95
--- | '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 FORMAT_R16G16B16A16_SINT = Format 96
--- | '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 FORMAT_R16G16B16A16_SFLOAT = Format 97
--- | 'FORMAT_R32_UINT' specifies a one-component, 32-bit unsigned integer
--- format that has a single 32-bit R component.
-pattern FORMAT_R32_UINT = Format 98
--- | 'FORMAT_R32_SINT' specifies a one-component, 32-bit signed integer
--- format that has a single 32-bit R component.
-pattern FORMAT_R32_SINT = Format 99
--- | 'FORMAT_R32_SFLOAT' specifies a one-component, 32-bit signed
--- floating-point format that has a single 32-bit R component.
-pattern FORMAT_R32_SFLOAT = Format 100
--- | '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 FORMAT_R32G32_UINT = Format 101
--- | '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 FORMAT_R32G32_SINT = Format 102
--- | '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 FORMAT_R32G32_SFLOAT = Format 103
--- | '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 FORMAT_R32G32B32_UINT = Format 104
--- | '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 FORMAT_R32G32B32_SINT = Format 105
--- | '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 FORMAT_R32G32B32_SFLOAT = Format 106
--- | '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 FORMAT_R32G32B32A32_UINT = Format 107
--- | '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 FORMAT_R32G32B32A32_SINT = Format 108
--- | '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 FORMAT_R32G32B32A32_SFLOAT = Format 109
--- | 'FORMAT_R64_UINT' specifies a one-component, 64-bit unsigned integer
--- format that has a single 64-bit R component.
-pattern FORMAT_R64_UINT = Format 110
--- | 'FORMAT_R64_SINT' specifies a one-component, 64-bit signed integer
--- format that has a single 64-bit R component.
-pattern FORMAT_R64_SINT = Format 111
--- | 'FORMAT_R64_SFLOAT' specifies a one-component, 64-bit signed
--- floating-point format that has a single 64-bit R component.
-pattern FORMAT_R64_SFLOAT = Format 112
--- | '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 FORMAT_R64G64_UINT = Format 113
--- | '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 FORMAT_R64G64_SINT = Format 114
--- | '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 FORMAT_R64G64_SFLOAT = Format 115
--- | '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 FORMAT_R64G64B64_UINT = Format 116
--- | '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 FORMAT_R64G64B64_SINT = Format 117
--- | '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 FORMAT_R64G64B64_SFLOAT = Format 118
--- | '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 FORMAT_R64G64B64A64_UINT = Format 119
--- | '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 FORMAT_R64G64B64A64_SINT = Format 120
--- | '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 FORMAT_R64G64B64A64_SFLOAT = Format 121
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-fp10>
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-fp11>.
-pattern FORMAT_B10G11R11_UFLOAT_PACK32 = Format 122
--- | '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 FORMAT_E5B9G9R9_UFLOAT_PACK32 = Format 123
--- | 'FORMAT_D16_UNORM' specifies a one-component, 16-bit unsigned normalized
--- format that has a single 16-bit depth component.
-pattern FORMAT_D16_UNORM = Format 124
--- | '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 FORMAT_X8_D24_UNORM_PACK32 = Format 125
--- | 'FORMAT_D32_SFLOAT' specifies a one-component, 32-bit signed
--- floating-point format that has 32-bits in the depth component.
-pattern FORMAT_D32_SFLOAT = Format 126
--- | 'FORMAT_S8_UINT' specifies a one-component, 8-bit unsigned integer
--- format that has 8-bits in the stencil component.
-pattern FORMAT_S8_UINT = Format 127
--- | '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 FORMAT_D16_UNORM_S8_UINT = Format 128
--- | '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 FORMAT_D24_UNORM_S8_UINT = Format 129
--- | '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 FORMAT_D32_SFLOAT_S8_UINT = Format 130
--- | '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 FORMAT_BC1_RGB_UNORM_BLOCK = Format 131
--- | '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 FORMAT_BC1_RGB_SRGB_BLOCK = Format 132
--- | '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 FORMAT_BC1_RGBA_UNORM_BLOCK = Format 133
--- | '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 FORMAT_BC1_RGBA_SRGB_BLOCK = Format 134
--- | '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 FORMAT_BC2_UNORM_BLOCK = Format 135
--- | '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 FORMAT_BC2_SRGB_BLOCK = Format 136
--- | '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 FORMAT_BC3_UNORM_BLOCK = Format 137
--- | '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 FORMAT_BC3_SRGB_BLOCK = Format 138
--- | '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 FORMAT_BC4_UNORM_BLOCK = Format 139
--- | '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 FORMAT_BC4_SNORM_BLOCK = Format 140
--- | '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 FORMAT_BC5_UNORM_BLOCK = Format 141
--- | '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 FORMAT_BC5_SNORM_BLOCK = Format 142
--- | '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 FORMAT_BC6H_UFLOAT_BLOCK = Format 143
--- | '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 FORMAT_BC6H_SFLOAT_BLOCK = Format 144
--- | '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 FORMAT_BC7_UNORM_BLOCK = Format 145
--- | '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 FORMAT_BC7_SRGB_BLOCK = Format 146
--- | '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 FORMAT_ETC2_R8G8B8_UNORM_BLOCK = Format 147
--- | '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 FORMAT_ETC2_R8G8B8_SRGB_BLOCK = Format 148
--- | '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 FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = Format 149
--- | '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 FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = Format 150
--- | '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 FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = Format 151
--- | '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 FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = Format 152
--- | '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 FORMAT_EAC_R11_UNORM_BLOCK = Format 153
--- | '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 FORMAT_EAC_R11_SNORM_BLOCK = Format 154
--- | '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 FORMAT_EAC_R11G11_UNORM_BLOCK = Format 155
--- | '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 FORMAT_EAC_R11G11_SNORM_BLOCK = Format 156
--- | '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 FORMAT_ASTC_4x4_UNORM_BLOCK = Format 157
--- | '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 FORMAT_ASTC_4x4_SRGB_BLOCK = Format 158
--- | '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 FORMAT_ASTC_5x4_UNORM_BLOCK = Format 159
--- | '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 FORMAT_ASTC_5x4_SRGB_BLOCK = Format 160
--- | '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 FORMAT_ASTC_5x5_UNORM_BLOCK = Format 161
--- | '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 FORMAT_ASTC_5x5_SRGB_BLOCK = Format 162
--- | '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 FORMAT_ASTC_6x5_UNORM_BLOCK = Format 163
--- | '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 FORMAT_ASTC_6x5_SRGB_BLOCK = Format 164
--- | '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 FORMAT_ASTC_6x6_UNORM_BLOCK = Format 165
--- | '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 FORMAT_ASTC_6x6_SRGB_BLOCK = Format 166
--- | '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 FORMAT_ASTC_8x5_UNORM_BLOCK = Format 167
--- | '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 FORMAT_ASTC_8x5_SRGB_BLOCK = Format 168
--- | '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 FORMAT_ASTC_8x6_UNORM_BLOCK = Format 169
--- | '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 FORMAT_ASTC_8x6_SRGB_BLOCK = Format 170
--- | '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 FORMAT_ASTC_8x8_UNORM_BLOCK = Format 171
--- | '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 FORMAT_ASTC_8x8_SRGB_BLOCK = Format 172
--- | '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 FORMAT_ASTC_10x5_UNORM_BLOCK = Format 173
--- | '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 FORMAT_ASTC_10x5_SRGB_BLOCK = Format 174
--- | '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 FORMAT_ASTC_10x6_UNORM_BLOCK = Format 175
--- | '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 FORMAT_ASTC_10x6_SRGB_BLOCK = Format 176
--- | '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 FORMAT_ASTC_10x8_UNORM_BLOCK = Format 177
--- | '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 FORMAT_ASTC_10x8_SRGB_BLOCK = Format 178
--- | '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 FORMAT_ASTC_10x10_UNORM_BLOCK = Format 179
--- | '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 FORMAT_ASTC_10x10_SRGB_BLOCK = Format 180
--- | '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 FORMAT_ASTC_12x10_UNORM_BLOCK = Format 181
--- | '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 FORMAT_ASTC_12x10_SRGB_BLOCK = Format 182
--- | '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 FORMAT_ASTC_12x12_UNORM_BLOCK = Format 183
--- | '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 FORMAT_ASTC_12x12_SRGB_BLOCK = Format 184
--- | 'FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 12×12 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = Format 1000066013
--- | 'FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 12×10 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = Format 1000066012
--- | 'FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 10×10 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = Format 1000066011
--- | 'FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 10×8 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = Format 1000066010
--- | 'FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 10×6 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = Format 1000066009
--- | 'FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 10×5 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = Format 1000066008
--- | 'FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 8×8 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = Format 1000066007
--- | 'FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 8×6 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = Format 1000066006
--- | 'FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 8×5 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = Format 1000066005
--- | 'FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 6×6 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = Format 1000066004
--- | 'FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 6×5 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = Format 1000066003
--- | 'FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 5×5 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = Format 1000066002
--- | 'FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 5×4 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = Format 1000066001
--- | 'FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
--- compressed format where each 128-bit compressed texel block encodes a
--- 4×4 rectangle of signed floating-point RGBA texel data.
-pattern FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = Format 1000066000
--- | 'FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG' specifies a four-component, PVRTC
--- compressed format where each 64-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 FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = Format 1000054007
--- | 'FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG' specifies a four-component, PVRTC
--- compressed format where each 64-bit compressed texel block encodes an
--- 8×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
--- encoding applied to the RGB components.
-pattern FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = Format 1000054006
--- | 'FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG' specifies a four-component, PVRTC
--- compressed format where each 64-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 FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = Format 1000054005
--- | 'FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG' specifies a four-component, PVRTC
--- compressed format where each 64-bit compressed texel block encodes an
--- 8×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
--- encoding applied to the RGB components.
-pattern FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = Format 1000054004
--- | 'FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG' specifies a four-component, PVRTC
--- compressed format where each 64-bit compressed texel block encodes a 4×4
--- rectangle of unsigned normalized RGBA texel data.
-pattern FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = Format 1000054003
--- | 'FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG' specifies a four-component, PVRTC
--- compressed format where each 64-bit compressed texel block encodes an
--- 8×4 rectangle of unsigned normalized RGBA texel data.
-pattern FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = Format 1000054002
--- | 'FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG' specifies a four-component, PVRTC
--- compressed format where each 64-bit compressed texel block encodes a 4×4
--- rectangle of unsigned normalized RGBA texel data.
-pattern FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = Format 1000054001
--- | 'FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG' specifies a four-component, PVRTC
--- compressed format where each 64-bit compressed texel block encodes an
--- 8×4 rectangle of unsigned normalized RGBA texel data.
-pattern FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = Format 1000054000
--- | 'FORMAT_G16_B16_R16_3PLANE_444_UNORM' specifies an unsigned normalized
--- /multi-planar format/ that has a 16-bit G component in each 16-bit word
--- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
--- 16-bit R component in each 16-bit word of plane 2. Each plane has the
--- same dimensions and each R, G and B component contributes to a single
--- texel. The location of each plane when this image is in linear layout
--- can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane.
-pattern FORMAT_G16_B16_R16_3PLANE_444_UNORM = Format 1000156033
--- | 'FORMAT_G16_B16R16_2PLANE_422_UNORM' specifies an unsigned normalized
--- /multi-planar format/ that has a 16-bit G component in each 16-bit word
--- of plane 0, and a two-component, 32-bit BR plane 1 consisting of a
--- 16-bit B component in the word in bytes 0..1, and a 16-bit R component
--- in the word in bytes 2..3. The horizontal dimensions of the BR plane is
--- halved relative to the image dimensions, and each R and B value is
--- shared with the G components for which
--- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
--- plane when this image is in linear layout can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the BR plane. Images in this format /must/ be defined with a width
--- that is a multiple of two.
-pattern FORMAT_G16_B16R16_2PLANE_422_UNORM = Format 1000156032
--- | 'FORMAT_G16_B16_R16_3PLANE_422_UNORM' specifies an unsigned normalized
--- /multi-planar format/ that has a 16-bit G component in each 16-bit word
--- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
--- 16-bit R component in each 16-bit word of plane 2. The horizontal
--- dimension of the R and B plane is halved relative to the image
--- dimensions, and each R and B value is shared with the G components for
--- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
--- each plane when this image is in linear layout can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane. Images in this format /must/ be defined with a width
--- that is a multiple of two.
-pattern FORMAT_G16_B16_R16_3PLANE_422_UNORM = Format 1000156031
--- | 'FORMAT_G16_B16R16_2PLANE_420_UNORM' specifies an unsigned normalized
--- /multi-planar format/ that has a 16-bit G component in each 16-bit word
--- of plane 0, and a two-component, 32-bit BR plane 1 consisting of a
--- 16-bit B component in the word in bytes 0..1, and a 16-bit R component
--- in the word in bytes 2..3. The horizontal and vertical dimensions of the
--- BR plane is halved relative to the image dimensions, and each R and B
--- value is shared with the G components for which
--- \(\lfloor i_G \times 0.5 \rfloor =
--- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
--- location of each plane when this image is in linear layout can be
--- determined via 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout',
--- using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the BR plane. Images in this format /must/ be defined with a width
--- and height that is a multiple of two.
-pattern FORMAT_G16_B16R16_2PLANE_420_UNORM = Format 1000156030
--- | 'FORMAT_G16_B16_R16_3PLANE_420_UNORM' specifies an unsigned normalized
--- /multi-planar format/ that has a 16-bit G component in each 16-bit word
--- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
--- 16-bit R component in each 16-bit word of plane 2. The horizontal and
--- vertical dimensions of the R and B planes are halved relative to the
--- image dimensions, and each R and B component is shared with the G
--- components for which \(\lfloor i_G \times 0.5
--- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
--- = j_R\). The location of each plane when this image is in linear layout
--- can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane. Images in this format /must/ be defined with a width
--- and height that is a multiple of two.
-pattern FORMAT_G16_B16_R16_3PLANE_420_UNORM = Format 1000156029
--- | 'FORMAT_B16G16R16G16_422_UNORM' specifies a four-component, 64-bit
--- format containing a pair of G components, an R component, and a B
--- component, collectively encoding a 2×1 rectangle of unsigned normalized
--- RGB texel data. One G value is present at each /i/ coordinate, with the
--- B and R values shared across both G values and thus recorded at half the
--- horizontal resolution of the image. This format has a 16-bit B component
--- in the word in bytes 0..1, a 16-bit G component for the even /i/
--- coordinate in the word in bytes 2..3, a 16-bit R component in the word
--- in bytes 4..5, and a 16-bit G component for the odd /i/ coordinate in
--- the word in bytes 6..7. Images in this format /must/ be defined with a
--- width that is a multiple of two. For the purposes of the constraints on
--- copy extents, this format is treated as a compressed format with a 2×1
--- compressed texel block.
-pattern FORMAT_B16G16R16G16_422_UNORM = Format 1000156028
--- | 'FORMAT_G16B16G16R16_422_UNORM' specifies a four-component, 64-bit
--- format containing a pair of G components, an R component, and a B
--- component, collectively encoding a 2×1 rectangle of unsigned normalized
--- RGB texel data. One G value is present at each /i/ coordinate, with the
--- B and R values shared across both G values and thus recorded at half the
--- horizontal resolution of the image. This format has a 16-bit G component
--- for the even /i/ coordinate in the word in bytes 0..1, a 16-bit B
--- component in the word in bytes 2..3, a 16-bit G component for the odd
--- /i/ coordinate in the word in bytes 4..5, and a 16-bit R component in
--- the word in bytes 6..7. Images in this format /must/ be defined with a
--- width that is a multiple of two. For the purposes of the constraints on
--- copy extents, this format is treated as a compressed format with a 2×1
--- compressed texel block.
-pattern FORMAT_G16B16G16R16_422_UNORM = Format 1000156027
--- | 'FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16' specifies an
--- unsigned normalized /multi-planar format/ that has a 12-bit G component
--- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
--- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
--- component in the top 12 bits of each 16-bit word of plane 2, with the
--- bottom 4 bits of each word unused. Each plane has the same dimensions
--- and each R, G and B component contributes to a single texel. The
--- location of each plane when this image is in linear layout can be
--- determined via 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout',
--- using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane.
-pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = Format 1000156026
--- | 'FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16' specifies an unsigned
--- normalized /multi-planar format/ that has a 12-bit G component in the
--- top 12 bits of each 16-bit word of plane 0, and a two-component, 32-bit
--- BR plane 1 consisting of a 12-bit B component in the top 12 bits of the
--- word in bytes 0..1, and a 12-bit R component in the top 12 bits of the
--- word in bytes 2..3, the bottom 4 bits of each word unused. The
--- horizontal dimensions of the BR plane is halved relative to the image
--- dimensions, and each R and B value is shared with the G components for
--- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
--- each plane when this image is in linear layout can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the BR plane. Images in this format /must/ be defined with a width
--- that is a multiple of two.
-pattern FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = Format 1000156025
--- | 'FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16' specifies an
--- unsigned normalized /multi-planar format/ that has a 12-bit G component
--- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
--- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
--- component in the top 12 bits of each 16-bit word of plane 2, with the
--- bottom 4 bits of each word unused. The horizontal dimension of the R and
--- B plane is halved relative to the image dimensions, and each R and B
--- value is shared with the G components for which
--- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
--- plane when this image is in linear layout can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane. Images in this format /must/ be defined with a width
--- that is a multiple of two.
-pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = Format 1000156024
--- | 'FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16' specifies an unsigned
--- normalized /multi-planar format/ that has a 12-bit G component in the
--- top 12 bits of each 16-bit word of plane 0, and a two-component, 32-bit
--- BR plane 1 consisting of a 12-bit B component in the top 12 bits of the
--- word in bytes 0..1, and a 12-bit R component in the top 12 bits of the
--- word in bytes 2..3, the bottom 4 bits of each word unused. The
--- horizontal and vertical dimensions of the BR plane is halved relative to
--- the image dimensions, and each R and B value is shared with the G
--- components for which \(\lfloor i_G \times 0.5 \rfloor =
--- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
--- location of each plane when this image is in linear layout can be
--- determined via 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout',
--- using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the BR plane. Images in this format /must/ be defined with a width
--- and height that is a multiple of two.
-pattern FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = Format 1000156023
--- | 'FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16' specifies an
--- unsigned normalized /multi-planar format/ that has a 12-bit G component
--- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
--- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
--- component in the top 12 bits of each 16-bit word of plane 2, with the
--- bottom 4 bits of each word unused. The horizontal and vertical
--- dimensions of the R and B planes are halved relative to the image
--- dimensions, and each R and B component is shared with the G components
--- for which \(\lfloor i_G \times 0.5
--- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
--- = j_R\). The location of each plane when this image is in linear layout
--- can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane. Images in this format /must/ be defined with a width
--- and height that is a multiple of two.
-pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = Format 1000156022
--- | 'FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16' specifies a
--- four-component, 64-bit format containing a pair of G components, an R
--- component, and a B component, collectively encoding a 2×1 rectangle of
--- unsigned normalized RGB texel data. One G value is present at each /i/
--- coordinate, with the B and R values shared across both G values and thus
--- recorded at half the horizontal resolution of the image. This format has
--- a 12-bit B component in the top 12 bits of the word in bytes 0..1, a
--- 12-bit G component for the even /i/ coordinate in the top 12 bits of the
--- word in bytes 2..3, a 12-bit R component in the top 12 bits of the word
--- in bytes 4..5, and a 12-bit G component for the odd /i/ coordinate in
--- the top 12 bits of the word in bytes 6..7, with the bottom 4 bits of
--- each word unused. Images in this format /must/ be defined with a width
--- that is a multiple of two. For the purposes of the constraints on copy
--- extents, this format is treated as a compressed format with a 2×1
--- compressed texel block.
-pattern FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = Format 1000156021
--- | 'FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16' specifies a
--- four-component, 64-bit format containing a pair of G components, an R
--- component, and a B component, collectively encoding a 2×1 rectangle of
--- unsigned normalized RGB texel data. One G value is present at each /i/
--- coordinate, with the B and R values shared across both G values and thus
--- recorded at half the horizontal resolution of the image. This format has
--- a 12-bit G component for the even /i/ coordinate in the top 12 bits of
--- the word in bytes 0..1, a 12-bit B component in the top 12 bits of the
--- word in bytes 2..3, a 12-bit G component for the odd /i/ coordinate in
--- the top 12 bits of the word in bytes 4..5, and a 12-bit R component in
--- the top 12 bits of the word in bytes 6..7, with the bottom 4 bits of
--- each word unused. Images in this format /must/ be defined with a width
--- that is a multiple of two. For the purposes of the constraints on copy
--- extents, this format is treated as a compressed format with a 2×1
--- compressed texel block.
-pattern FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = Format 1000156020
--- | 'FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16' specifies a four-component,
--- 64-bit unsigned normalized format that has a 12-bit R component in the
--- top 12 bits of the word in bytes 0..1, a 12-bit G component in the top
--- 12 bits of the word in bytes 2..3, a 12-bit B component in the top 12
--- bits of the word in bytes 4..5, and a 12-bit A component in the top 12
--- bits of the word in bytes 6..7, with the bottom 4 bits of each word
--- unused.
-pattern FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = Format 1000156019
--- | 'FORMAT_R12X4G12X4_UNORM_2PACK16' specifies a two-component, 32-bit
--- unsigned normalized format that has a 12-bit R component in the top 12
--- bits of the word in bytes 0..1, and a 12-bit G component in the top 12
--- bits of the word in bytes 2..3, with the bottom 4 bits of each word
--- unused.
-pattern FORMAT_R12X4G12X4_UNORM_2PACK16 = Format 1000156018
--- | 'FORMAT_R12X4_UNORM_PACK16' specifies a one-component, 16-bit unsigned
--- normalized format that has a single 12-bit R component in the top 12
--- bits of a 16-bit word, with the bottom 4 bits unused.
-pattern FORMAT_R12X4_UNORM_PACK16 = Format 1000156017
--- | 'FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16' specifies an
--- unsigned normalized /multi-planar format/ that has a 10-bit G component
--- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
--- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
--- component in the top 10 bits of each 16-bit word of plane 2, with the
--- bottom 6 bits of each word unused. Each plane has the same dimensions
--- and each R, G and B component contributes to a single texel. The
--- location of each plane when this image is in linear layout can be
--- determined via 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout',
--- using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane.
-pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = Format 1000156016
--- | 'FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16' specifies an unsigned
--- normalized /multi-planar format/ that has a 10-bit G component in the
--- top 10 bits of each 16-bit word of plane 0, and a two-component, 32-bit
--- BR plane 1 consisting of a 10-bit B component in the top 10 bits of the
--- word in bytes 0..1, and a 10-bit R component in the top 10 bits of the
--- word in bytes 2..3, the bottom 6 bits of each word unused. The
--- horizontal dimensions of the BR plane is halved relative to the image
--- dimensions, and each R and B value is shared with the G components for
--- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
--- each plane when this image is in linear layout can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the BR plane. Images in this format /must/ be defined with a width
--- that is a multiple of two.
-pattern FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = Format 1000156015
--- | 'FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16' specifies an
--- unsigned normalized /multi-planar format/ that has a 10-bit G component
--- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
--- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
--- component in the top 10 bits of each 16-bit word of plane 2, with the
--- bottom 6 bits of each word unused. The horizontal dimension of the R and
--- B plane is halved relative to the image dimensions, and each R and B
--- value is shared with the G components for which
--- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
--- plane when this image is in linear layout can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane. Images in this format /must/ be defined with a width
--- that is a multiple of two.
-pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = Format 1000156014
--- | 'FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16' specifies an unsigned
--- normalized /multi-planar format/ that has a 10-bit G component in the
--- top 10 bits of each 16-bit word of plane 0, and a two-component, 32-bit
--- BR plane 1 consisting of a 10-bit B component in the top 10 bits of the
--- word in bytes 0..1, and a 10-bit R component in the top 10 bits of the
--- word in bytes 2..3, the bottom 6 bits of each word unused. The
--- horizontal and vertical dimensions of the BR plane is halved relative to
--- the image dimensions, and each R and B value is shared with the G
--- components for which \(\lfloor i_G \times 0.5 \rfloor =
--- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
--- location of each plane when this image is in linear layout can be
--- determined via 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout',
--- using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the BR plane. Images in this format /must/ be defined with a width
--- and height that is a multiple of two.
-pattern FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = Format 1000156013
--- | 'FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16' specifies an
--- unsigned normalized /multi-planar format/ that has a 10-bit G component
--- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
--- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
--- component in the top 10 bits of each 16-bit word of plane 2, with the
--- bottom 6 bits of each word unused. The horizontal and vertical
--- dimensions of the R and B planes are halved relative to the image
--- dimensions, and each R and B component is shared with the G components
--- for which \(\lfloor i_G \times 0.5
--- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
--- = j_R\). The location of each plane when this image is in linear layout
--- can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane. Images in this format /must/ be defined with a width
--- and height that is a multiple of two.
-pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = Format 1000156012
--- | 'FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16' specifies a
--- four-component, 64-bit format containing a pair of G components, an R
--- component, and a B component, collectively encoding a 2×1 rectangle of
--- unsigned normalized RGB texel data. One G value is present at each /i/
--- coordinate, with the B and R values shared across both G values and thus
--- recorded at half the horizontal resolution of the image. This format has
--- a 10-bit B component in the top 10 bits of the word in bytes 0..1, a
--- 10-bit G component for the even /i/ coordinate in the top 10 bits of the
--- word in bytes 2..3, a 10-bit R component in the top 10 bits of the word
--- in bytes 4..5, and a 10-bit G component for the odd /i/ coordinate in
--- the top 10 bits of the word in bytes 6..7, with the bottom 6 bits of
--- each word unused. Images in this format /must/ be defined with a width
--- that is a multiple of two. For the purposes of the constraints on copy
--- extents, this format is treated as a compressed format with a 2×1
--- compressed texel block.
-pattern FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = Format 1000156011
--- | 'FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16' specifies a
--- four-component, 64-bit format containing a pair of G components, an R
--- component, and a B component, collectively encoding a 2×1 rectangle of
--- unsigned normalized RGB texel data. One G value is present at each /i/
--- coordinate, with the B and R values shared across both G values and thus
--- recorded at half the horizontal resolution of the image. This format has
--- a 10-bit G component for the even /i/ coordinate in the top 10 bits of
--- the word in bytes 0..1, a 10-bit B component in the top 10 bits of the
--- word in bytes 2..3, a 10-bit G component for the odd /i/ coordinate in
--- the top 10 bits of the word in bytes 4..5, and a 10-bit R component in
--- the top 10 bits of the word in bytes 6..7, with the bottom 6 bits of
--- each word unused. Images in this format /must/ be defined with a width
--- that is a multiple of two. For the purposes of the constraints on copy
--- extents, this format is treated as a compressed format with a 2×1
--- compressed texel block.
-pattern FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = Format 1000156010
--- | 'FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16' specifies a four-component,
--- 64-bit unsigned normalized format that has a 10-bit R component in the
--- top 10 bits of the word in bytes 0..1, a 10-bit G component in the top
--- 10 bits of the word in bytes 2..3, a 10-bit B component in the top 10
--- bits of the word in bytes 4..5, and a 10-bit A component in the top 10
--- bits of the word in bytes 6..7, with the bottom 6 bits of each word
--- unused.
-pattern FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = Format 1000156009
--- | 'FORMAT_R10X6G10X6_UNORM_2PACK16' specifies a two-component, 32-bit
--- unsigned normalized format that has a 10-bit R component in the top 10
--- bits of the word in bytes 0..1, and a 10-bit G component in the top 10
--- bits of the word in bytes 2..3, with the bottom 6 bits of each word
--- unused.
-pattern FORMAT_R10X6G10X6_UNORM_2PACK16 = Format 1000156008
--- | 'FORMAT_R10X6_UNORM_PACK16' specifies a one-component, 16-bit unsigned
--- normalized format that has a single 10-bit R component in the top 10
--- bits of a 16-bit word, with the bottom 6 bits unused.
-pattern FORMAT_R10X6_UNORM_PACK16 = Format 1000156007
--- | 'FORMAT_G8_B8_R8_3PLANE_444_UNORM' specifies an unsigned normalized
--- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
--- B component in plane 1, and an 8-bit R component in plane 2. Each plane
--- has the same dimensions and each R, G and B component contributes to a
--- single texel. The location of each plane when this image is in linear
--- layout can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane.
-pattern FORMAT_G8_B8_R8_3PLANE_444_UNORM = Format 1000156006
--- | 'FORMAT_G8_B8R8_2PLANE_422_UNORM' specifies an unsigned normalized
--- /multi-planar format/ that has an 8-bit G component in plane 0, and a
--- two-component, 16-bit BR plane 1 consisting of an 8-bit B component in
--- byte 0 and an 8-bit R component in byte 1. The horizontal dimensions of
--- the BR plane is halved relative to the image dimensions, and each R and
--- B value is shared with the G components for which
--- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
--- plane when this image is in linear layout can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the BR plane. Images in this format /must/ be defined with a width
--- that is a multiple of two.
-pattern FORMAT_G8_B8R8_2PLANE_422_UNORM = Format 1000156005
--- | 'FORMAT_G8_B8_R8_3PLANE_422_UNORM' specifies an unsigned normalized
--- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
--- B component in plane 1, and an 8-bit R component in plane 2. The
--- horizontal dimension of the R and B plane is halved relative to the
--- image dimensions, and each R and B value is shared with the G components
--- for which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location
--- of each plane when this image is in linear layout can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane. Images in this format /must/ be defined with a width
--- that is a multiple of two.
-pattern FORMAT_G8_B8_R8_3PLANE_422_UNORM = Format 1000156004
--- | 'FORMAT_G8_B8R8_2PLANE_420_UNORM' specifies an unsigned normalized
--- /multi-planar format/ that has an 8-bit G component in plane 0, and a
--- two-component, 16-bit BR plane 1 consisting of an 8-bit B component in
--- byte 0 and an 8-bit R component in byte 1. The horizontal and vertical
--- dimensions of the BR plane is halved relative to the image dimensions,
--- and each R and B value is shared with the G components for which
--- \(\lfloor i_G \times 0.5 \rfloor =
--- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
--- location of each plane when this image is in linear layout can be
--- determined via 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout',
--- using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the BR plane. Images in this format /must/ be defined with a width
--- and height that is a multiple of two.
-pattern FORMAT_G8_B8R8_2PLANE_420_UNORM = Format 1000156003
--- | 'FORMAT_G8_B8_R8_3PLANE_420_UNORM' specifies an unsigned normalized
--- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
--- B component in plane 1, and an 8-bit R component in plane 2. The
--- horizontal and vertical dimensions of the R and B planes are halved
--- relative to the image dimensions, and each R and B component is shared
--- with the G components for which \(\lfloor i_G \times 0.5
--- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
--- = j_R\). The location of each plane when this image is in linear layout
--- can be determined via
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout', using
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--- for the G plane,
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- for the B plane, and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--- for the R plane. Images in this format /must/ be defined with a width
--- and height that is a multiple of two.
-pattern FORMAT_G8_B8_R8_3PLANE_420_UNORM = Format 1000156002
--- | 'FORMAT_B8G8R8G8_422_UNORM' specifies a four-component, 32-bit format
--- containing a pair of G components, an R component, and a B component,
--- collectively encoding a 2×1 rectangle of unsigned normalized RGB texel
--- data. One G value is present at each /i/ coordinate, with the B and R
--- values shared across both G values and thus recorded at half the
--- horizontal resolution of the image. This format has an 8-bit B component
--- in byte 0, an 8-bit G component for the even /i/ coordinate in byte 1,
--- an 8-bit R component in byte 2, and an 8-bit G component for the odd /i/
--- coordinate in byte 3. Images in this format /must/ be defined with a
--- width that is a multiple of two. For the purposes of the constraints on
--- copy extents, this format is treated as a compressed format with a 2×1
--- compressed texel block.
-pattern FORMAT_B8G8R8G8_422_UNORM = Format 1000156001
--- | 'FORMAT_G8B8G8R8_422_UNORM' specifies a four-component, 32-bit format
--- containing a pair of G components, an R component, and a B component,
--- collectively encoding a 2×1 rectangle of unsigned normalized RGB texel
--- data. One G value is present at each /i/ coordinate, with the B and R
--- values shared across both G values and thus recorded at half the
--- horizontal resolution of the image. This format has an 8-bit G component
--- for the even /i/ coordinate in byte 0, an 8-bit B component in byte 1,
--- an 8-bit G component for the odd /i/ coordinate in byte 2, and an 8-bit
--- R component in byte 3. Images in this format /must/ be defined with a
--- width that is a multiple of two. For the purposes of the constraints on
--- copy extents, this format is treated as a compressed format with a 2×1
--- compressed texel block.
-pattern FORMAT_G8B8G8R8_422_UNORM = Format 1000156000
-{-# complete FORMAT_UNDEFINED,
-             FORMAT_R4G4_UNORM_PACK8,
-             FORMAT_R4G4B4A4_UNORM_PACK16,
-             FORMAT_B4G4R4A4_UNORM_PACK16,
-             FORMAT_R5G6B5_UNORM_PACK16,
-             FORMAT_B5G6R5_UNORM_PACK16,
-             FORMAT_R5G5B5A1_UNORM_PACK16,
-             FORMAT_B5G5R5A1_UNORM_PACK16,
-             FORMAT_A1R5G5B5_UNORM_PACK16,
-             FORMAT_R8_UNORM,
-             FORMAT_R8_SNORM,
-             FORMAT_R8_USCALED,
-             FORMAT_R8_SSCALED,
-             FORMAT_R8_UINT,
-             FORMAT_R8_SINT,
-             FORMAT_R8_SRGB,
-             FORMAT_R8G8_UNORM,
-             FORMAT_R8G8_SNORM,
-             FORMAT_R8G8_USCALED,
-             FORMAT_R8G8_SSCALED,
-             FORMAT_R8G8_UINT,
-             FORMAT_R8G8_SINT,
-             FORMAT_R8G8_SRGB,
-             FORMAT_R8G8B8_UNORM,
-             FORMAT_R8G8B8_SNORM,
-             FORMAT_R8G8B8_USCALED,
-             FORMAT_R8G8B8_SSCALED,
-             FORMAT_R8G8B8_UINT,
-             FORMAT_R8G8B8_SINT,
-             FORMAT_R8G8B8_SRGB,
-             FORMAT_B8G8R8_UNORM,
-             FORMAT_B8G8R8_SNORM,
-             FORMAT_B8G8R8_USCALED,
-             FORMAT_B8G8R8_SSCALED,
-             FORMAT_B8G8R8_UINT,
-             FORMAT_B8G8R8_SINT,
-             FORMAT_B8G8R8_SRGB,
-             FORMAT_R8G8B8A8_UNORM,
-             FORMAT_R8G8B8A8_SNORM,
-             FORMAT_R8G8B8A8_USCALED,
-             FORMAT_R8G8B8A8_SSCALED,
-             FORMAT_R8G8B8A8_UINT,
-             FORMAT_R8G8B8A8_SINT,
-             FORMAT_R8G8B8A8_SRGB,
-             FORMAT_B8G8R8A8_UNORM,
-             FORMAT_B8G8R8A8_SNORM,
-             FORMAT_B8G8R8A8_USCALED,
-             FORMAT_B8G8R8A8_SSCALED,
-             FORMAT_B8G8R8A8_UINT,
-             FORMAT_B8G8R8A8_SINT,
-             FORMAT_B8G8R8A8_SRGB,
-             FORMAT_A8B8G8R8_UNORM_PACK32,
-             FORMAT_A8B8G8R8_SNORM_PACK32,
-             FORMAT_A8B8G8R8_USCALED_PACK32,
-             FORMAT_A8B8G8R8_SSCALED_PACK32,
-             FORMAT_A8B8G8R8_UINT_PACK32,
-             FORMAT_A8B8G8R8_SINT_PACK32,
-             FORMAT_A8B8G8R8_SRGB_PACK32,
-             FORMAT_A2R10G10B10_UNORM_PACK32,
-             FORMAT_A2R10G10B10_SNORM_PACK32,
-             FORMAT_A2R10G10B10_USCALED_PACK32,
-             FORMAT_A2R10G10B10_SSCALED_PACK32,
-             FORMAT_A2R10G10B10_UINT_PACK32,
-             FORMAT_A2R10G10B10_SINT_PACK32,
-             FORMAT_A2B10G10R10_UNORM_PACK32,
-             FORMAT_A2B10G10R10_SNORM_PACK32,
-             FORMAT_A2B10G10R10_USCALED_PACK32,
-             FORMAT_A2B10G10R10_SSCALED_PACK32,
-             FORMAT_A2B10G10R10_UINT_PACK32,
-             FORMAT_A2B10G10R10_SINT_PACK32,
-             FORMAT_R16_UNORM,
-             FORMAT_R16_SNORM,
-             FORMAT_R16_USCALED,
-             FORMAT_R16_SSCALED,
-             FORMAT_R16_UINT,
-             FORMAT_R16_SINT,
-             FORMAT_R16_SFLOAT,
-             FORMAT_R16G16_UNORM,
-             FORMAT_R16G16_SNORM,
-             FORMAT_R16G16_USCALED,
-             FORMAT_R16G16_SSCALED,
-             FORMAT_R16G16_UINT,
-             FORMAT_R16G16_SINT,
-             FORMAT_R16G16_SFLOAT,
-             FORMAT_R16G16B16_UNORM,
-             FORMAT_R16G16B16_SNORM,
-             FORMAT_R16G16B16_USCALED,
-             FORMAT_R16G16B16_SSCALED,
-             FORMAT_R16G16B16_UINT,
-             FORMAT_R16G16B16_SINT,
-             FORMAT_R16G16B16_SFLOAT,
-             FORMAT_R16G16B16A16_UNORM,
-             FORMAT_R16G16B16A16_SNORM,
-             FORMAT_R16G16B16A16_USCALED,
-             FORMAT_R16G16B16A16_SSCALED,
-             FORMAT_R16G16B16A16_UINT,
-             FORMAT_R16G16B16A16_SINT,
-             FORMAT_R16G16B16A16_SFLOAT,
-             FORMAT_R32_UINT,
-             FORMAT_R32_SINT,
-             FORMAT_R32_SFLOAT,
-             FORMAT_R32G32_UINT,
-             FORMAT_R32G32_SINT,
-             FORMAT_R32G32_SFLOAT,
-             FORMAT_R32G32B32_UINT,
-             FORMAT_R32G32B32_SINT,
-             FORMAT_R32G32B32_SFLOAT,
-             FORMAT_R32G32B32A32_UINT,
-             FORMAT_R32G32B32A32_SINT,
-             FORMAT_R32G32B32A32_SFLOAT,
-             FORMAT_R64_UINT,
-             FORMAT_R64_SINT,
-             FORMAT_R64_SFLOAT,
-             FORMAT_R64G64_UINT,
-             FORMAT_R64G64_SINT,
-             FORMAT_R64G64_SFLOAT,
-             FORMAT_R64G64B64_UINT,
-             FORMAT_R64G64B64_SINT,
-             FORMAT_R64G64B64_SFLOAT,
-             FORMAT_R64G64B64A64_UINT,
-             FORMAT_R64G64B64A64_SINT,
-             FORMAT_R64G64B64A64_SFLOAT,
-             FORMAT_B10G11R11_UFLOAT_PACK32,
-             FORMAT_E5B9G9R9_UFLOAT_PACK32,
-             FORMAT_D16_UNORM,
-             FORMAT_X8_D24_UNORM_PACK32,
-             FORMAT_D32_SFLOAT,
-             FORMAT_S8_UINT,
-             FORMAT_D16_UNORM_S8_UINT,
-             FORMAT_D24_UNORM_S8_UINT,
-             FORMAT_D32_SFLOAT_S8_UINT,
-             FORMAT_BC1_RGB_UNORM_BLOCK,
-             FORMAT_BC1_RGB_SRGB_BLOCK,
-             FORMAT_BC1_RGBA_UNORM_BLOCK,
-             FORMAT_BC1_RGBA_SRGB_BLOCK,
-             FORMAT_BC2_UNORM_BLOCK,
-             FORMAT_BC2_SRGB_BLOCK,
-             FORMAT_BC3_UNORM_BLOCK,
-             FORMAT_BC3_SRGB_BLOCK,
-             FORMAT_BC4_UNORM_BLOCK,
-             FORMAT_BC4_SNORM_BLOCK,
-             FORMAT_BC5_UNORM_BLOCK,
-             FORMAT_BC5_SNORM_BLOCK,
-             FORMAT_BC6H_UFLOAT_BLOCK,
-             FORMAT_BC6H_SFLOAT_BLOCK,
-             FORMAT_BC7_UNORM_BLOCK,
-             FORMAT_BC7_SRGB_BLOCK,
-             FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
-             FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
-             FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
-             FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
-             FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
-             FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
-             FORMAT_EAC_R11_UNORM_BLOCK,
-             FORMAT_EAC_R11_SNORM_BLOCK,
-             FORMAT_EAC_R11G11_UNORM_BLOCK,
-             FORMAT_EAC_R11G11_SNORM_BLOCK,
-             FORMAT_ASTC_4x4_UNORM_BLOCK,
-             FORMAT_ASTC_4x4_SRGB_BLOCK,
-             FORMAT_ASTC_5x4_UNORM_BLOCK,
-             FORMAT_ASTC_5x4_SRGB_BLOCK,
-             FORMAT_ASTC_5x5_UNORM_BLOCK,
-             FORMAT_ASTC_5x5_SRGB_BLOCK,
-             FORMAT_ASTC_6x5_UNORM_BLOCK,
-             FORMAT_ASTC_6x5_SRGB_BLOCK,
-             FORMAT_ASTC_6x6_UNORM_BLOCK,
-             FORMAT_ASTC_6x6_SRGB_BLOCK,
-             FORMAT_ASTC_8x5_UNORM_BLOCK,
-             FORMAT_ASTC_8x5_SRGB_BLOCK,
-             FORMAT_ASTC_8x6_UNORM_BLOCK,
-             FORMAT_ASTC_8x6_SRGB_BLOCK,
-             FORMAT_ASTC_8x8_UNORM_BLOCK,
-             FORMAT_ASTC_8x8_SRGB_BLOCK,
-             FORMAT_ASTC_10x5_UNORM_BLOCK,
-             FORMAT_ASTC_10x5_SRGB_BLOCK,
-             FORMAT_ASTC_10x6_UNORM_BLOCK,
-             FORMAT_ASTC_10x6_SRGB_BLOCK,
-             FORMAT_ASTC_10x8_UNORM_BLOCK,
-             FORMAT_ASTC_10x8_SRGB_BLOCK,
-             FORMAT_ASTC_10x10_UNORM_BLOCK,
-             FORMAT_ASTC_10x10_SRGB_BLOCK,
-             FORMAT_ASTC_12x10_UNORM_BLOCK,
-             FORMAT_ASTC_12x10_SRGB_BLOCK,
-             FORMAT_ASTC_12x12_UNORM_BLOCK,
-             FORMAT_ASTC_12x12_SRGB_BLOCK,
-             FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT,
-             FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT,
-             FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG,
-             FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,
-             FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
-             FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
-             FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,
-             FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
-             FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
-             FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
-             FORMAT_G16_B16_R16_3PLANE_444_UNORM,
-             FORMAT_G16_B16R16_2PLANE_422_UNORM,
-             FORMAT_G16_B16_R16_3PLANE_422_UNORM,
-             FORMAT_G16_B16R16_2PLANE_420_UNORM,
-             FORMAT_G16_B16_R16_3PLANE_420_UNORM,
-             FORMAT_B16G16R16G16_422_UNORM,
-             FORMAT_G16B16G16R16_422_UNORM,
-             FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
-             FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
-             FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
-             FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
-             FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
-             FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
-             FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
-             FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
-             FORMAT_R12X4G12X4_UNORM_2PACK16,
-             FORMAT_R12X4_UNORM_PACK16,
-             FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
-             FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
-             FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
-             FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
-             FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
-             FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
-             FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
-             FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
-             FORMAT_R10X6G10X6_UNORM_2PACK16,
-             FORMAT_R10X6_UNORM_PACK16,
-             FORMAT_G8_B8_R8_3PLANE_444_UNORM,
-             FORMAT_G8_B8R8_2PLANE_422_UNORM,
-             FORMAT_G8_B8_R8_3PLANE_422_UNORM,
-             FORMAT_G8_B8R8_2PLANE_420_UNORM,
-             FORMAT_G8_B8_R8_3PLANE_420_UNORM,
-             FORMAT_B8G8R8G8_422_UNORM,
-             FORMAT_G8B8G8R8_422_UNORM :: Format #-}
-
-instance Show Format where
-  showsPrec p = \case
-    FORMAT_UNDEFINED -> showString "FORMAT_UNDEFINED"
-    FORMAT_R4G4_UNORM_PACK8 -> showString "FORMAT_R4G4_UNORM_PACK8"
-    FORMAT_R4G4B4A4_UNORM_PACK16 -> showString "FORMAT_R4G4B4A4_UNORM_PACK16"
-    FORMAT_B4G4R4A4_UNORM_PACK16 -> showString "FORMAT_B4G4R4A4_UNORM_PACK16"
-    FORMAT_R5G6B5_UNORM_PACK16 -> showString "FORMAT_R5G6B5_UNORM_PACK16"
-    FORMAT_B5G6R5_UNORM_PACK16 -> showString "FORMAT_B5G6R5_UNORM_PACK16"
-    FORMAT_R5G5B5A1_UNORM_PACK16 -> showString "FORMAT_R5G5B5A1_UNORM_PACK16"
-    FORMAT_B5G5R5A1_UNORM_PACK16 -> showString "FORMAT_B5G5R5A1_UNORM_PACK16"
-    FORMAT_A1R5G5B5_UNORM_PACK16 -> showString "FORMAT_A1R5G5B5_UNORM_PACK16"
-    FORMAT_R8_UNORM -> showString "FORMAT_R8_UNORM"
-    FORMAT_R8_SNORM -> showString "FORMAT_R8_SNORM"
-    FORMAT_R8_USCALED -> showString "FORMAT_R8_USCALED"
-    FORMAT_R8_SSCALED -> showString "FORMAT_R8_SSCALED"
-    FORMAT_R8_UINT -> showString "FORMAT_R8_UINT"
-    FORMAT_R8_SINT -> showString "FORMAT_R8_SINT"
-    FORMAT_R8_SRGB -> showString "FORMAT_R8_SRGB"
-    FORMAT_R8G8_UNORM -> showString "FORMAT_R8G8_UNORM"
-    FORMAT_R8G8_SNORM -> showString "FORMAT_R8G8_SNORM"
-    FORMAT_R8G8_USCALED -> showString "FORMAT_R8G8_USCALED"
-    FORMAT_R8G8_SSCALED -> showString "FORMAT_R8G8_SSCALED"
-    FORMAT_R8G8_UINT -> showString "FORMAT_R8G8_UINT"
-    FORMAT_R8G8_SINT -> showString "FORMAT_R8G8_SINT"
-    FORMAT_R8G8_SRGB -> showString "FORMAT_R8G8_SRGB"
-    FORMAT_R8G8B8_UNORM -> showString "FORMAT_R8G8B8_UNORM"
-    FORMAT_R8G8B8_SNORM -> showString "FORMAT_R8G8B8_SNORM"
-    FORMAT_R8G8B8_USCALED -> showString "FORMAT_R8G8B8_USCALED"
-    FORMAT_R8G8B8_SSCALED -> showString "FORMAT_R8G8B8_SSCALED"
-    FORMAT_R8G8B8_UINT -> showString "FORMAT_R8G8B8_UINT"
-    FORMAT_R8G8B8_SINT -> showString "FORMAT_R8G8B8_SINT"
-    FORMAT_R8G8B8_SRGB -> showString "FORMAT_R8G8B8_SRGB"
-    FORMAT_B8G8R8_UNORM -> showString "FORMAT_B8G8R8_UNORM"
-    FORMAT_B8G8R8_SNORM -> showString "FORMAT_B8G8R8_SNORM"
-    FORMAT_B8G8R8_USCALED -> showString "FORMAT_B8G8R8_USCALED"
-    FORMAT_B8G8R8_SSCALED -> showString "FORMAT_B8G8R8_SSCALED"
-    FORMAT_B8G8R8_UINT -> showString "FORMAT_B8G8R8_UINT"
-    FORMAT_B8G8R8_SINT -> showString "FORMAT_B8G8R8_SINT"
-    FORMAT_B8G8R8_SRGB -> showString "FORMAT_B8G8R8_SRGB"
-    FORMAT_R8G8B8A8_UNORM -> showString "FORMAT_R8G8B8A8_UNORM"
-    FORMAT_R8G8B8A8_SNORM -> showString "FORMAT_R8G8B8A8_SNORM"
-    FORMAT_R8G8B8A8_USCALED -> showString "FORMAT_R8G8B8A8_USCALED"
-    FORMAT_R8G8B8A8_SSCALED -> showString "FORMAT_R8G8B8A8_SSCALED"
-    FORMAT_R8G8B8A8_UINT -> showString "FORMAT_R8G8B8A8_UINT"
-    FORMAT_R8G8B8A8_SINT -> showString "FORMAT_R8G8B8A8_SINT"
-    FORMAT_R8G8B8A8_SRGB -> showString "FORMAT_R8G8B8A8_SRGB"
-    FORMAT_B8G8R8A8_UNORM -> showString "FORMAT_B8G8R8A8_UNORM"
-    FORMAT_B8G8R8A8_SNORM -> showString "FORMAT_B8G8R8A8_SNORM"
-    FORMAT_B8G8R8A8_USCALED -> showString "FORMAT_B8G8R8A8_USCALED"
-    FORMAT_B8G8R8A8_SSCALED -> showString "FORMAT_B8G8R8A8_SSCALED"
-    FORMAT_B8G8R8A8_UINT -> showString "FORMAT_B8G8R8A8_UINT"
-    FORMAT_B8G8R8A8_SINT -> showString "FORMAT_B8G8R8A8_SINT"
-    FORMAT_B8G8R8A8_SRGB -> showString "FORMAT_B8G8R8A8_SRGB"
-    FORMAT_A8B8G8R8_UNORM_PACK32 -> showString "FORMAT_A8B8G8R8_UNORM_PACK32"
-    FORMAT_A8B8G8R8_SNORM_PACK32 -> showString "FORMAT_A8B8G8R8_SNORM_PACK32"
-    FORMAT_A8B8G8R8_USCALED_PACK32 -> showString "FORMAT_A8B8G8R8_USCALED_PACK32"
-    FORMAT_A8B8G8R8_SSCALED_PACK32 -> showString "FORMAT_A8B8G8R8_SSCALED_PACK32"
-    FORMAT_A8B8G8R8_UINT_PACK32 -> showString "FORMAT_A8B8G8R8_UINT_PACK32"
-    FORMAT_A8B8G8R8_SINT_PACK32 -> showString "FORMAT_A8B8G8R8_SINT_PACK32"
-    FORMAT_A8B8G8R8_SRGB_PACK32 -> showString "FORMAT_A8B8G8R8_SRGB_PACK32"
-    FORMAT_A2R10G10B10_UNORM_PACK32 -> showString "FORMAT_A2R10G10B10_UNORM_PACK32"
-    FORMAT_A2R10G10B10_SNORM_PACK32 -> showString "FORMAT_A2R10G10B10_SNORM_PACK32"
-    FORMAT_A2R10G10B10_USCALED_PACK32 -> showString "FORMAT_A2R10G10B10_USCALED_PACK32"
-    FORMAT_A2R10G10B10_SSCALED_PACK32 -> showString "FORMAT_A2R10G10B10_SSCALED_PACK32"
-    FORMAT_A2R10G10B10_UINT_PACK32 -> showString "FORMAT_A2R10G10B10_UINT_PACK32"
-    FORMAT_A2R10G10B10_SINT_PACK32 -> showString "FORMAT_A2R10G10B10_SINT_PACK32"
-    FORMAT_A2B10G10R10_UNORM_PACK32 -> showString "FORMAT_A2B10G10R10_UNORM_PACK32"
-    FORMAT_A2B10G10R10_SNORM_PACK32 -> showString "FORMAT_A2B10G10R10_SNORM_PACK32"
-    FORMAT_A2B10G10R10_USCALED_PACK32 -> showString "FORMAT_A2B10G10R10_USCALED_PACK32"
-    FORMAT_A2B10G10R10_SSCALED_PACK32 -> showString "FORMAT_A2B10G10R10_SSCALED_PACK32"
-    FORMAT_A2B10G10R10_UINT_PACK32 -> showString "FORMAT_A2B10G10R10_UINT_PACK32"
-    FORMAT_A2B10G10R10_SINT_PACK32 -> showString "FORMAT_A2B10G10R10_SINT_PACK32"
-    FORMAT_R16_UNORM -> showString "FORMAT_R16_UNORM"
-    FORMAT_R16_SNORM -> showString "FORMAT_R16_SNORM"
-    FORMAT_R16_USCALED -> showString "FORMAT_R16_USCALED"
-    FORMAT_R16_SSCALED -> showString "FORMAT_R16_SSCALED"
-    FORMAT_R16_UINT -> showString "FORMAT_R16_UINT"
-    FORMAT_R16_SINT -> showString "FORMAT_R16_SINT"
-    FORMAT_R16_SFLOAT -> showString "FORMAT_R16_SFLOAT"
-    FORMAT_R16G16_UNORM -> showString "FORMAT_R16G16_UNORM"
-    FORMAT_R16G16_SNORM -> showString "FORMAT_R16G16_SNORM"
-    FORMAT_R16G16_USCALED -> showString "FORMAT_R16G16_USCALED"
-    FORMAT_R16G16_SSCALED -> showString "FORMAT_R16G16_SSCALED"
-    FORMAT_R16G16_UINT -> showString "FORMAT_R16G16_UINT"
-    FORMAT_R16G16_SINT -> showString "FORMAT_R16G16_SINT"
-    FORMAT_R16G16_SFLOAT -> showString "FORMAT_R16G16_SFLOAT"
-    FORMAT_R16G16B16_UNORM -> showString "FORMAT_R16G16B16_UNORM"
-    FORMAT_R16G16B16_SNORM -> showString "FORMAT_R16G16B16_SNORM"
-    FORMAT_R16G16B16_USCALED -> showString "FORMAT_R16G16B16_USCALED"
-    FORMAT_R16G16B16_SSCALED -> showString "FORMAT_R16G16B16_SSCALED"
-    FORMAT_R16G16B16_UINT -> showString "FORMAT_R16G16B16_UINT"
-    FORMAT_R16G16B16_SINT -> showString "FORMAT_R16G16B16_SINT"
-    FORMAT_R16G16B16_SFLOAT -> showString "FORMAT_R16G16B16_SFLOAT"
-    FORMAT_R16G16B16A16_UNORM -> showString "FORMAT_R16G16B16A16_UNORM"
-    FORMAT_R16G16B16A16_SNORM -> showString "FORMAT_R16G16B16A16_SNORM"
-    FORMAT_R16G16B16A16_USCALED -> showString "FORMAT_R16G16B16A16_USCALED"
-    FORMAT_R16G16B16A16_SSCALED -> showString "FORMAT_R16G16B16A16_SSCALED"
-    FORMAT_R16G16B16A16_UINT -> showString "FORMAT_R16G16B16A16_UINT"
-    FORMAT_R16G16B16A16_SINT -> showString "FORMAT_R16G16B16A16_SINT"
-    FORMAT_R16G16B16A16_SFLOAT -> showString "FORMAT_R16G16B16A16_SFLOAT"
-    FORMAT_R32_UINT -> showString "FORMAT_R32_UINT"
-    FORMAT_R32_SINT -> showString "FORMAT_R32_SINT"
-    FORMAT_R32_SFLOAT -> showString "FORMAT_R32_SFLOAT"
-    FORMAT_R32G32_UINT -> showString "FORMAT_R32G32_UINT"
-    FORMAT_R32G32_SINT -> showString "FORMAT_R32G32_SINT"
-    FORMAT_R32G32_SFLOAT -> showString "FORMAT_R32G32_SFLOAT"
-    FORMAT_R32G32B32_UINT -> showString "FORMAT_R32G32B32_UINT"
-    FORMAT_R32G32B32_SINT -> showString "FORMAT_R32G32B32_SINT"
-    FORMAT_R32G32B32_SFLOAT -> showString "FORMAT_R32G32B32_SFLOAT"
-    FORMAT_R32G32B32A32_UINT -> showString "FORMAT_R32G32B32A32_UINT"
-    FORMAT_R32G32B32A32_SINT -> showString "FORMAT_R32G32B32A32_SINT"
-    FORMAT_R32G32B32A32_SFLOAT -> showString "FORMAT_R32G32B32A32_SFLOAT"
-    FORMAT_R64_UINT -> showString "FORMAT_R64_UINT"
-    FORMAT_R64_SINT -> showString "FORMAT_R64_SINT"
-    FORMAT_R64_SFLOAT -> showString "FORMAT_R64_SFLOAT"
-    FORMAT_R64G64_UINT -> showString "FORMAT_R64G64_UINT"
-    FORMAT_R64G64_SINT -> showString "FORMAT_R64G64_SINT"
-    FORMAT_R64G64_SFLOAT -> showString "FORMAT_R64G64_SFLOAT"
-    FORMAT_R64G64B64_UINT -> showString "FORMAT_R64G64B64_UINT"
-    FORMAT_R64G64B64_SINT -> showString "FORMAT_R64G64B64_SINT"
-    FORMAT_R64G64B64_SFLOAT -> showString "FORMAT_R64G64B64_SFLOAT"
-    FORMAT_R64G64B64A64_UINT -> showString "FORMAT_R64G64B64A64_UINT"
-    FORMAT_R64G64B64A64_SINT -> showString "FORMAT_R64G64B64A64_SINT"
-    FORMAT_R64G64B64A64_SFLOAT -> showString "FORMAT_R64G64B64A64_SFLOAT"
-    FORMAT_B10G11R11_UFLOAT_PACK32 -> showString "FORMAT_B10G11R11_UFLOAT_PACK32"
-    FORMAT_E5B9G9R9_UFLOAT_PACK32 -> showString "FORMAT_E5B9G9R9_UFLOAT_PACK32"
-    FORMAT_D16_UNORM -> showString "FORMAT_D16_UNORM"
-    FORMAT_X8_D24_UNORM_PACK32 -> showString "FORMAT_X8_D24_UNORM_PACK32"
-    FORMAT_D32_SFLOAT -> showString "FORMAT_D32_SFLOAT"
-    FORMAT_S8_UINT -> showString "FORMAT_S8_UINT"
-    FORMAT_D16_UNORM_S8_UINT -> showString "FORMAT_D16_UNORM_S8_UINT"
-    FORMAT_D24_UNORM_S8_UINT -> showString "FORMAT_D24_UNORM_S8_UINT"
-    FORMAT_D32_SFLOAT_S8_UINT -> showString "FORMAT_D32_SFLOAT_S8_UINT"
-    FORMAT_BC1_RGB_UNORM_BLOCK -> showString "FORMAT_BC1_RGB_UNORM_BLOCK"
-    FORMAT_BC1_RGB_SRGB_BLOCK -> showString "FORMAT_BC1_RGB_SRGB_BLOCK"
-    FORMAT_BC1_RGBA_UNORM_BLOCK -> showString "FORMAT_BC1_RGBA_UNORM_BLOCK"
-    FORMAT_BC1_RGBA_SRGB_BLOCK -> showString "FORMAT_BC1_RGBA_SRGB_BLOCK"
-    FORMAT_BC2_UNORM_BLOCK -> showString "FORMAT_BC2_UNORM_BLOCK"
-    FORMAT_BC2_SRGB_BLOCK -> showString "FORMAT_BC2_SRGB_BLOCK"
-    FORMAT_BC3_UNORM_BLOCK -> showString "FORMAT_BC3_UNORM_BLOCK"
-    FORMAT_BC3_SRGB_BLOCK -> showString "FORMAT_BC3_SRGB_BLOCK"
-    FORMAT_BC4_UNORM_BLOCK -> showString "FORMAT_BC4_UNORM_BLOCK"
-    FORMAT_BC4_SNORM_BLOCK -> showString "FORMAT_BC4_SNORM_BLOCK"
-    FORMAT_BC5_UNORM_BLOCK -> showString "FORMAT_BC5_UNORM_BLOCK"
-    FORMAT_BC5_SNORM_BLOCK -> showString "FORMAT_BC5_SNORM_BLOCK"
-    FORMAT_BC6H_UFLOAT_BLOCK -> showString "FORMAT_BC6H_UFLOAT_BLOCK"
-    FORMAT_BC6H_SFLOAT_BLOCK -> showString "FORMAT_BC6H_SFLOAT_BLOCK"
-    FORMAT_BC7_UNORM_BLOCK -> showString "FORMAT_BC7_UNORM_BLOCK"
-    FORMAT_BC7_SRGB_BLOCK -> showString "FORMAT_BC7_SRGB_BLOCK"
-    FORMAT_ETC2_R8G8B8_UNORM_BLOCK -> showString "FORMAT_ETC2_R8G8B8_UNORM_BLOCK"
-    FORMAT_ETC2_R8G8B8_SRGB_BLOCK -> showString "FORMAT_ETC2_R8G8B8_SRGB_BLOCK"
-    FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK -> showString "FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK"
-    FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK -> showString "FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK"
-    FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK -> showString "FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK"
-    FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK -> showString "FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK"
-    FORMAT_EAC_R11_UNORM_BLOCK -> showString "FORMAT_EAC_R11_UNORM_BLOCK"
-    FORMAT_EAC_R11_SNORM_BLOCK -> showString "FORMAT_EAC_R11_SNORM_BLOCK"
-    FORMAT_EAC_R11G11_UNORM_BLOCK -> showString "FORMAT_EAC_R11G11_UNORM_BLOCK"
-    FORMAT_EAC_R11G11_SNORM_BLOCK -> showString "FORMAT_EAC_R11G11_SNORM_BLOCK"
-    FORMAT_ASTC_4x4_UNORM_BLOCK -> showString "FORMAT_ASTC_4x4_UNORM_BLOCK"
-    FORMAT_ASTC_4x4_SRGB_BLOCK -> showString "FORMAT_ASTC_4x4_SRGB_BLOCK"
-    FORMAT_ASTC_5x4_UNORM_BLOCK -> showString "FORMAT_ASTC_5x4_UNORM_BLOCK"
-    FORMAT_ASTC_5x4_SRGB_BLOCK -> showString "FORMAT_ASTC_5x4_SRGB_BLOCK"
-    FORMAT_ASTC_5x5_UNORM_BLOCK -> showString "FORMAT_ASTC_5x5_UNORM_BLOCK"
-    FORMAT_ASTC_5x5_SRGB_BLOCK -> showString "FORMAT_ASTC_5x5_SRGB_BLOCK"
-    FORMAT_ASTC_6x5_UNORM_BLOCK -> showString "FORMAT_ASTC_6x5_UNORM_BLOCK"
-    FORMAT_ASTC_6x5_SRGB_BLOCK -> showString "FORMAT_ASTC_6x5_SRGB_BLOCK"
-    FORMAT_ASTC_6x6_UNORM_BLOCK -> showString "FORMAT_ASTC_6x6_UNORM_BLOCK"
-    FORMAT_ASTC_6x6_SRGB_BLOCK -> showString "FORMAT_ASTC_6x6_SRGB_BLOCK"
-    FORMAT_ASTC_8x5_UNORM_BLOCK -> showString "FORMAT_ASTC_8x5_UNORM_BLOCK"
-    FORMAT_ASTC_8x5_SRGB_BLOCK -> showString "FORMAT_ASTC_8x5_SRGB_BLOCK"
-    FORMAT_ASTC_8x6_UNORM_BLOCK -> showString "FORMAT_ASTC_8x6_UNORM_BLOCK"
-    FORMAT_ASTC_8x6_SRGB_BLOCK -> showString "FORMAT_ASTC_8x6_SRGB_BLOCK"
-    FORMAT_ASTC_8x8_UNORM_BLOCK -> showString "FORMAT_ASTC_8x8_UNORM_BLOCK"
-    FORMAT_ASTC_8x8_SRGB_BLOCK -> showString "FORMAT_ASTC_8x8_SRGB_BLOCK"
-    FORMAT_ASTC_10x5_UNORM_BLOCK -> showString "FORMAT_ASTC_10x5_UNORM_BLOCK"
-    FORMAT_ASTC_10x5_SRGB_BLOCK -> showString "FORMAT_ASTC_10x5_SRGB_BLOCK"
-    FORMAT_ASTC_10x6_UNORM_BLOCK -> showString "FORMAT_ASTC_10x6_UNORM_BLOCK"
-    FORMAT_ASTC_10x6_SRGB_BLOCK -> showString "FORMAT_ASTC_10x6_SRGB_BLOCK"
-    FORMAT_ASTC_10x8_UNORM_BLOCK -> showString "FORMAT_ASTC_10x8_UNORM_BLOCK"
-    FORMAT_ASTC_10x8_SRGB_BLOCK -> showString "FORMAT_ASTC_10x8_SRGB_BLOCK"
-    FORMAT_ASTC_10x10_UNORM_BLOCK -> showString "FORMAT_ASTC_10x10_UNORM_BLOCK"
-    FORMAT_ASTC_10x10_SRGB_BLOCK -> showString "FORMAT_ASTC_10x10_SRGB_BLOCK"
-    FORMAT_ASTC_12x10_UNORM_BLOCK -> showString "FORMAT_ASTC_12x10_UNORM_BLOCK"
-    FORMAT_ASTC_12x10_SRGB_BLOCK -> showString "FORMAT_ASTC_12x10_SRGB_BLOCK"
-    FORMAT_ASTC_12x12_UNORM_BLOCK -> showString "FORMAT_ASTC_12x12_UNORM_BLOCK"
-    FORMAT_ASTC_12x12_SRGB_BLOCK -> showString "FORMAT_ASTC_12x12_SRGB_BLOCK"
-    FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT"
-    FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT"
-    FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG -> showString "FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG"
-    FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG -> showString "FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG"
-    FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG -> showString "FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG"
-    FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG -> showString "FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG"
-    FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG -> showString "FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG"
-    FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG -> showString "FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG"
-    FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG -> showString "FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG"
-    FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG -> showString "FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG"
-    FORMAT_G16_B16_R16_3PLANE_444_UNORM -> showString "FORMAT_G16_B16_R16_3PLANE_444_UNORM"
-    FORMAT_G16_B16R16_2PLANE_422_UNORM -> showString "FORMAT_G16_B16R16_2PLANE_422_UNORM"
-    FORMAT_G16_B16_R16_3PLANE_422_UNORM -> showString "FORMAT_G16_B16_R16_3PLANE_422_UNORM"
-    FORMAT_G16_B16R16_2PLANE_420_UNORM -> showString "FORMAT_G16_B16R16_2PLANE_420_UNORM"
-    FORMAT_G16_B16_R16_3PLANE_420_UNORM -> showString "FORMAT_G16_B16_R16_3PLANE_420_UNORM"
-    FORMAT_B16G16R16G16_422_UNORM -> showString "FORMAT_B16G16R16G16_422_UNORM"
-    FORMAT_G16B16G16R16_422_UNORM -> showString "FORMAT_G16B16G16R16_422_UNORM"
-    FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 -> showString "FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16"
-    FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 -> showString "FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16"
-    FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 -> showString "FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16"
-    FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 -> showString "FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16"
-    FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 -> showString "FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16"
-    FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 -> showString "FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16"
-    FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 -> showString "FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16"
-    FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 -> showString "FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16"
-    FORMAT_R12X4G12X4_UNORM_2PACK16 -> showString "FORMAT_R12X4G12X4_UNORM_2PACK16"
-    FORMAT_R12X4_UNORM_PACK16 -> showString "FORMAT_R12X4_UNORM_PACK16"
-    FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 -> showString "FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16"
-    FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 -> showString "FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16"
-    FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 -> showString "FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16"
-    FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 -> showString "FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16"
-    FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 -> showString "FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16"
-    FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 -> showString "FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16"
-    FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 -> showString "FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16"
-    FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 -> showString "FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16"
-    FORMAT_R10X6G10X6_UNORM_2PACK16 -> showString "FORMAT_R10X6G10X6_UNORM_2PACK16"
-    FORMAT_R10X6_UNORM_PACK16 -> showString "FORMAT_R10X6_UNORM_PACK16"
-    FORMAT_G8_B8_R8_3PLANE_444_UNORM -> showString "FORMAT_G8_B8_R8_3PLANE_444_UNORM"
-    FORMAT_G8_B8R8_2PLANE_422_UNORM -> showString "FORMAT_G8_B8R8_2PLANE_422_UNORM"
-    FORMAT_G8_B8_R8_3PLANE_422_UNORM -> showString "FORMAT_G8_B8_R8_3PLANE_422_UNORM"
-    FORMAT_G8_B8R8_2PLANE_420_UNORM -> showString "FORMAT_G8_B8R8_2PLANE_420_UNORM"
-    FORMAT_G8_B8_R8_3PLANE_420_UNORM -> showString "FORMAT_G8_B8_R8_3PLANE_420_UNORM"
-    FORMAT_B8G8R8G8_422_UNORM -> showString "FORMAT_B8G8R8G8_422_UNORM"
-    FORMAT_G8B8G8R8_422_UNORM -> showString "FORMAT_G8B8G8R8_422_UNORM"
-    Format x -> showParen (p >= 11) (showString "Format " . showsPrec 11 x)
-
-instance Read Format where
-  readPrec = parens (choose [("FORMAT_UNDEFINED", pure FORMAT_UNDEFINED)
-                            , ("FORMAT_R4G4_UNORM_PACK8", pure FORMAT_R4G4_UNORM_PACK8)
-                            , ("FORMAT_R4G4B4A4_UNORM_PACK16", pure FORMAT_R4G4B4A4_UNORM_PACK16)
-                            , ("FORMAT_B4G4R4A4_UNORM_PACK16", pure FORMAT_B4G4R4A4_UNORM_PACK16)
-                            , ("FORMAT_R5G6B5_UNORM_PACK16", pure FORMAT_R5G6B5_UNORM_PACK16)
-                            , ("FORMAT_B5G6R5_UNORM_PACK16", pure FORMAT_B5G6R5_UNORM_PACK16)
-                            , ("FORMAT_R5G5B5A1_UNORM_PACK16", pure FORMAT_R5G5B5A1_UNORM_PACK16)
-                            , ("FORMAT_B5G5R5A1_UNORM_PACK16", pure FORMAT_B5G5R5A1_UNORM_PACK16)
-                            , ("FORMAT_A1R5G5B5_UNORM_PACK16", pure FORMAT_A1R5G5B5_UNORM_PACK16)
-                            , ("FORMAT_R8_UNORM", pure FORMAT_R8_UNORM)
-                            , ("FORMAT_R8_SNORM", pure FORMAT_R8_SNORM)
-                            , ("FORMAT_R8_USCALED", pure FORMAT_R8_USCALED)
-                            , ("FORMAT_R8_SSCALED", pure FORMAT_R8_SSCALED)
-                            , ("FORMAT_R8_UINT", pure FORMAT_R8_UINT)
-                            , ("FORMAT_R8_SINT", pure FORMAT_R8_SINT)
-                            , ("FORMAT_R8_SRGB", pure FORMAT_R8_SRGB)
-                            , ("FORMAT_R8G8_UNORM", pure FORMAT_R8G8_UNORM)
-                            , ("FORMAT_R8G8_SNORM", pure FORMAT_R8G8_SNORM)
-                            , ("FORMAT_R8G8_USCALED", pure FORMAT_R8G8_USCALED)
-                            , ("FORMAT_R8G8_SSCALED", pure FORMAT_R8G8_SSCALED)
-                            , ("FORMAT_R8G8_UINT", pure FORMAT_R8G8_UINT)
-                            , ("FORMAT_R8G8_SINT", pure FORMAT_R8G8_SINT)
-                            , ("FORMAT_R8G8_SRGB", pure FORMAT_R8G8_SRGB)
-                            , ("FORMAT_R8G8B8_UNORM", pure FORMAT_R8G8B8_UNORM)
-                            , ("FORMAT_R8G8B8_SNORM", pure FORMAT_R8G8B8_SNORM)
-                            , ("FORMAT_R8G8B8_USCALED", pure FORMAT_R8G8B8_USCALED)
-                            , ("FORMAT_R8G8B8_SSCALED", pure FORMAT_R8G8B8_SSCALED)
-                            , ("FORMAT_R8G8B8_UINT", pure FORMAT_R8G8B8_UINT)
-                            , ("FORMAT_R8G8B8_SINT", pure FORMAT_R8G8B8_SINT)
-                            , ("FORMAT_R8G8B8_SRGB", pure FORMAT_R8G8B8_SRGB)
-                            , ("FORMAT_B8G8R8_UNORM", pure FORMAT_B8G8R8_UNORM)
-                            , ("FORMAT_B8G8R8_SNORM", pure FORMAT_B8G8R8_SNORM)
-                            , ("FORMAT_B8G8R8_USCALED", pure FORMAT_B8G8R8_USCALED)
-                            , ("FORMAT_B8G8R8_SSCALED", pure FORMAT_B8G8R8_SSCALED)
-                            , ("FORMAT_B8G8R8_UINT", pure FORMAT_B8G8R8_UINT)
-                            , ("FORMAT_B8G8R8_SINT", pure FORMAT_B8G8R8_SINT)
-                            , ("FORMAT_B8G8R8_SRGB", pure FORMAT_B8G8R8_SRGB)
-                            , ("FORMAT_R8G8B8A8_UNORM", pure FORMAT_R8G8B8A8_UNORM)
-                            , ("FORMAT_R8G8B8A8_SNORM", pure FORMAT_R8G8B8A8_SNORM)
-                            , ("FORMAT_R8G8B8A8_USCALED", pure FORMAT_R8G8B8A8_USCALED)
-                            , ("FORMAT_R8G8B8A8_SSCALED", pure FORMAT_R8G8B8A8_SSCALED)
-                            , ("FORMAT_R8G8B8A8_UINT", pure FORMAT_R8G8B8A8_UINT)
-                            , ("FORMAT_R8G8B8A8_SINT", pure FORMAT_R8G8B8A8_SINT)
-                            , ("FORMAT_R8G8B8A8_SRGB", pure FORMAT_R8G8B8A8_SRGB)
-                            , ("FORMAT_B8G8R8A8_UNORM", pure FORMAT_B8G8R8A8_UNORM)
-                            , ("FORMAT_B8G8R8A8_SNORM", pure FORMAT_B8G8R8A8_SNORM)
-                            , ("FORMAT_B8G8R8A8_USCALED", pure FORMAT_B8G8R8A8_USCALED)
-                            , ("FORMAT_B8G8R8A8_SSCALED", pure FORMAT_B8G8R8A8_SSCALED)
-                            , ("FORMAT_B8G8R8A8_UINT", pure FORMAT_B8G8R8A8_UINT)
-                            , ("FORMAT_B8G8R8A8_SINT", pure FORMAT_B8G8R8A8_SINT)
-                            , ("FORMAT_B8G8R8A8_SRGB", pure FORMAT_B8G8R8A8_SRGB)
-                            , ("FORMAT_A8B8G8R8_UNORM_PACK32", pure FORMAT_A8B8G8R8_UNORM_PACK32)
-                            , ("FORMAT_A8B8G8R8_SNORM_PACK32", pure FORMAT_A8B8G8R8_SNORM_PACK32)
-                            , ("FORMAT_A8B8G8R8_USCALED_PACK32", pure FORMAT_A8B8G8R8_USCALED_PACK32)
-                            , ("FORMAT_A8B8G8R8_SSCALED_PACK32", pure FORMAT_A8B8G8R8_SSCALED_PACK32)
-                            , ("FORMAT_A8B8G8R8_UINT_PACK32", pure FORMAT_A8B8G8R8_UINT_PACK32)
-                            , ("FORMAT_A8B8G8R8_SINT_PACK32", pure FORMAT_A8B8G8R8_SINT_PACK32)
-                            , ("FORMAT_A8B8G8R8_SRGB_PACK32", pure FORMAT_A8B8G8R8_SRGB_PACK32)
-                            , ("FORMAT_A2R10G10B10_UNORM_PACK32", pure FORMAT_A2R10G10B10_UNORM_PACK32)
-                            , ("FORMAT_A2R10G10B10_SNORM_PACK32", pure FORMAT_A2R10G10B10_SNORM_PACK32)
-                            , ("FORMAT_A2R10G10B10_USCALED_PACK32", pure FORMAT_A2R10G10B10_USCALED_PACK32)
-                            , ("FORMAT_A2R10G10B10_SSCALED_PACK32", pure FORMAT_A2R10G10B10_SSCALED_PACK32)
-                            , ("FORMAT_A2R10G10B10_UINT_PACK32", pure FORMAT_A2R10G10B10_UINT_PACK32)
-                            , ("FORMAT_A2R10G10B10_SINT_PACK32", pure FORMAT_A2R10G10B10_SINT_PACK32)
-                            , ("FORMAT_A2B10G10R10_UNORM_PACK32", pure FORMAT_A2B10G10R10_UNORM_PACK32)
-                            , ("FORMAT_A2B10G10R10_SNORM_PACK32", pure FORMAT_A2B10G10R10_SNORM_PACK32)
-                            , ("FORMAT_A2B10G10R10_USCALED_PACK32", pure FORMAT_A2B10G10R10_USCALED_PACK32)
-                            , ("FORMAT_A2B10G10R10_SSCALED_PACK32", pure FORMAT_A2B10G10R10_SSCALED_PACK32)
-                            , ("FORMAT_A2B10G10R10_UINT_PACK32", pure FORMAT_A2B10G10R10_UINT_PACK32)
-                            , ("FORMAT_A2B10G10R10_SINT_PACK32", pure FORMAT_A2B10G10R10_SINT_PACK32)
-                            , ("FORMAT_R16_UNORM", pure FORMAT_R16_UNORM)
-                            , ("FORMAT_R16_SNORM", pure FORMAT_R16_SNORM)
-                            , ("FORMAT_R16_USCALED", pure FORMAT_R16_USCALED)
-                            , ("FORMAT_R16_SSCALED", pure FORMAT_R16_SSCALED)
-                            , ("FORMAT_R16_UINT", pure FORMAT_R16_UINT)
-                            , ("FORMAT_R16_SINT", pure FORMAT_R16_SINT)
-                            , ("FORMAT_R16_SFLOAT", pure FORMAT_R16_SFLOAT)
-                            , ("FORMAT_R16G16_UNORM", pure FORMAT_R16G16_UNORM)
-                            , ("FORMAT_R16G16_SNORM", pure FORMAT_R16G16_SNORM)
-                            , ("FORMAT_R16G16_USCALED", pure FORMAT_R16G16_USCALED)
-                            , ("FORMAT_R16G16_SSCALED", pure FORMAT_R16G16_SSCALED)
-                            , ("FORMAT_R16G16_UINT", pure FORMAT_R16G16_UINT)
-                            , ("FORMAT_R16G16_SINT", pure FORMAT_R16G16_SINT)
-                            , ("FORMAT_R16G16_SFLOAT", pure FORMAT_R16G16_SFLOAT)
-                            , ("FORMAT_R16G16B16_UNORM", pure FORMAT_R16G16B16_UNORM)
-                            , ("FORMAT_R16G16B16_SNORM", pure FORMAT_R16G16B16_SNORM)
-                            , ("FORMAT_R16G16B16_USCALED", pure FORMAT_R16G16B16_USCALED)
-                            , ("FORMAT_R16G16B16_SSCALED", pure FORMAT_R16G16B16_SSCALED)
-                            , ("FORMAT_R16G16B16_UINT", pure FORMAT_R16G16B16_UINT)
-                            , ("FORMAT_R16G16B16_SINT", pure FORMAT_R16G16B16_SINT)
-                            , ("FORMAT_R16G16B16_SFLOAT", pure FORMAT_R16G16B16_SFLOAT)
-                            , ("FORMAT_R16G16B16A16_UNORM", pure FORMAT_R16G16B16A16_UNORM)
-                            , ("FORMAT_R16G16B16A16_SNORM", pure FORMAT_R16G16B16A16_SNORM)
-                            , ("FORMAT_R16G16B16A16_USCALED", pure FORMAT_R16G16B16A16_USCALED)
-                            , ("FORMAT_R16G16B16A16_SSCALED", pure FORMAT_R16G16B16A16_SSCALED)
-                            , ("FORMAT_R16G16B16A16_UINT", pure FORMAT_R16G16B16A16_UINT)
-                            , ("FORMAT_R16G16B16A16_SINT", pure FORMAT_R16G16B16A16_SINT)
-                            , ("FORMAT_R16G16B16A16_SFLOAT", pure FORMAT_R16G16B16A16_SFLOAT)
-                            , ("FORMAT_R32_UINT", pure FORMAT_R32_UINT)
-                            , ("FORMAT_R32_SINT", pure FORMAT_R32_SINT)
-                            , ("FORMAT_R32_SFLOAT", pure FORMAT_R32_SFLOAT)
-                            , ("FORMAT_R32G32_UINT", pure FORMAT_R32G32_UINT)
-                            , ("FORMAT_R32G32_SINT", pure FORMAT_R32G32_SINT)
-                            , ("FORMAT_R32G32_SFLOAT", pure FORMAT_R32G32_SFLOAT)
-                            , ("FORMAT_R32G32B32_UINT", pure FORMAT_R32G32B32_UINT)
-                            , ("FORMAT_R32G32B32_SINT", pure FORMAT_R32G32B32_SINT)
-                            , ("FORMAT_R32G32B32_SFLOAT", pure FORMAT_R32G32B32_SFLOAT)
-                            , ("FORMAT_R32G32B32A32_UINT", pure FORMAT_R32G32B32A32_UINT)
-                            , ("FORMAT_R32G32B32A32_SINT", pure FORMAT_R32G32B32A32_SINT)
-                            , ("FORMAT_R32G32B32A32_SFLOAT", pure FORMAT_R32G32B32A32_SFLOAT)
-                            , ("FORMAT_R64_UINT", pure FORMAT_R64_UINT)
-                            , ("FORMAT_R64_SINT", pure FORMAT_R64_SINT)
-                            , ("FORMAT_R64_SFLOAT", pure FORMAT_R64_SFLOAT)
-                            , ("FORMAT_R64G64_UINT", pure FORMAT_R64G64_UINT)
-                            , ("FORMAT_R64G64_SINT", pure FORMAT_R64G64_SINT)
-                            , ("FORMAT_R64G64_SFLOAT", pure FORMAT_R64G64_SFLOAT)
-                            , ("FORMAT_R64G64B64_UINT", pure FORMAT_R64G64B64_UINT)
-                            , ("FORMAT_R64G64B64_SINT", pure FORMAT_R64G64B64_SINT)
-                            , ("FORMAT_R64G64B64_SFLOAT", pure FORMAT_R64G64B64_SFLOAT)
-                            , ("FORMAT_R64G64B64A64_UINT", pure FORMAT_R64G64B64A64_UINT)
-                            , ("FORMAT_R64G64B64A64_SINT", pure FORMAT_R64G64B64A64_SINT)
-                            , ("FORMAT_R64G64B64A64_SFLOAT", pure FORMAT_R64G64B64A64_SFLOAT)
-                            , ("FORMAT_B10G11R11_UFLOAT_PACK32", pure FORMAT_B10G11R11_UFLOAT_PACK32)
-                            , ("FORMAT_E5B9G9R9_UFLOAT_PACK32", pure FORMAT_E5B9G9R9_UFLOAT_PACK32)
-                            , ("FORMAT_D16_UNORM", pure FORMAT_D16_UNORM)
-                            , ("FORMAT_X8_D24_UNORM_PACK32", pure FORMAT_X8_D24_UNORM_PACK32)
-                            , ("FORMAT_D32_SFLOAT", pure FORMAT_D32_SFLOAT)
-                            , ("FORMAT_S8_UINT", pure FORMAT_S8_UINT)
-                            , ("FORMAT_D16_UNORM_S8_UINT", pure FORMAT_D16_UNORM_S8_UINT)
-                            , ("FORMAT_D24_UNORM_S8_UINT", pure FORMAT_D24_UNORM_S8_UINT)
-                            , ("FORMAT_D32_SFLOAT_S8_UINT", pure FORMAT_D32_SFLOAT_S8_UINT)
-                            , ("FORMAT_BC1_RGB_UNORM_BLOCK", pure FORMAT_BC1_RGB_UNORM_BLOCK)
-                            , ("FORMAT_BC1_RGB_SRGB_BLOCK", pure FORMAT_BC1_RGB_SRGB_BLOCK)
-                            , ("FORMAT_BC1_RGBA_UNORM_BLOCK", pure FORMAT_BC1_RGBA_UNORM_BLOCK)
-                            , ("FORMAT_BC1_RGBA_SRGB_BLOCK", pure FORMAT_BC1_RGBA_SRGB_BLOCK)
-                            , ("FORMAT_BC2_UNORM_BLOCK", pure FORMAT_BC2_UNORM_BLOCK)
-                            , ("FORMAT_BC2_SRGB_BLOCK", pure FORMAT_BC2_SRGB_BLOCK)
-                            , ("FORMAT_BC3_UNORM_BLOCK", pure FORMAT_BC3_UNORM_BLOCK)
-                            , ("FORMAT_BC3_SRGB_BLOCK", pure FORMAT_BC3_SRGB_BLOCK)
-                            , ("FORMAT_BC4_UNORM_BLOCK", pure FORMAT_BC4_UNORM_BLOCK)
-                            , ("FORMAT_BC4_SNORM_BLOCK", pure FORMAT_BC4_SNORM_BLOCK)
-                            , ("FORMAT_BC5_UNORM_BLOCK", pure FORMAT_BC5_UNORM_BLOCK)
-                            , ("FORMAT_BC5_SNORM_BLOCK", pure FORMAT_BC5_SNORM_BLOCK)
-                            , ("FORMAT_BC6H_UFLOAT_BLOCK", pure FORMAT_BC6H_UFLOAT_BLOCK)
-                            , ("FORMAT_BC6H_SFLOAT_BLOCK", pure FORMAT_BC6H_SFLOAT_BLOCK)
-                            , ("FORMAT_BC7_UNORM_BLOCK", pure FORMAT_BC7_UNORM_BLOCK)
-                            , ("FORMAT_BC7_SRGB_BLOCK", pure FORMAT_BC7_SRGB_BLOCK)
-                            , ("FORMAT_ETC2_R8G8B8_UNORM_BLOCK", pure FORMAT_ETC2_R8G8B8_UNORM_BLOCK)
-                            , ("FORMAT_ETC2_R8G8B8_SRGB_BLOCK", pure FORMAT_ETC2_R8G8B8_SRGB_BLOCK)
-                            , ("FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK", pure FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK)
-                            , ("FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK", pure FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK)
-                            , ("FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK", pure FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK)
-                            , ("FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK", pure FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK)
-                            , ("FORMAT_EAC_R11_UNORM_BLOCK", pure FORMAT_EAC_R11_UNORM_BLOCK)
-                            , ("FORMAT_EAC_R11_SNORM_BLOCK", pure FORMAT_EAC_R11_SNORM_BLOCK)
-                            , ("FORMAT_EAC_R11G11_UNORM_BLOCK", pure FORMAT_EAC_R11G11_UNORM_BLOCK)
-                            , ("FORMAT_EAC_R11G11_SNORM_BLOCK", pure FORMAT_EAC_R11G11_SNORM_BLOCK)
-                            , ("FORMAT_ASTC_4x4_UNORM_BLOCK", pure FORMAT_ASTC_4x4_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_4x4_SRGB_BLOCK", pure FORMAT_ASTC_4x4_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_5x4_UNORM_BLOCK", pure FORMAT_ASTC_5x4_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_5x4_SRGB_BLOCK", pure FORMAT_ASTC_5x4_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_5x5_UNORM_BLOCK", pure FORMAT_ASTC_5x5_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_5x5_SRGB_BLOCK", pure FORMAT_ASTC_5x5_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_6x5_UNORM_BLOCK", pure FORMAT_ASTC_6x5_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_6x5_SRGB_BLOCK", pure FORMAT_ASTC_6x5_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_6x6_UNORM_BLOCK", pure FORMAT_ASTC_6x6_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_6x6_SRGB_BLOCK", pure FORMAT_ASTC_6x6_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_8x5_UNORM_BLOCK", pure FORMAT_ASTC_8x5_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_8x5_SRGB_BLOCK", pure FORMAT_ASTC_8x5_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_8x6_UNORM_BLOCK", pure FORMAT_ASTC_8x6_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_8x6_SRGB_BLOCK", pure FORMAT_ASTC_8x6_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_8x8_UNORM_BLOCK", pure FORMAT_ASTC_8x8_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_8x8_SRGB_BLOCK", pure FORMAT_ASTC_8x8_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_10x5_UNORM_BLOCK", pure FORMAT_ASTC_10x5_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_10x5_SRGB_BLOCK", pure FORMAT_ASTC_10x5_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_10x6_UNORM_BLOCK", pure FORMAT_ASTC_10x6_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_10x6_SRGB_BLOCK", pure FORMAT_ASTC_10x6_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_10x8_UNORM_BLOCK", pure FORMAT_ASTC_10x8_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_10x8_SRGB_BLOCK", pure FORMAT_ASTC_10x8_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_10x10_UNORM_BLOCK", pure FORMAT_ASTC_10x10_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_10x10_SRGB_BLOCK", pure FORMAT_ASTC_10x10_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_12x10_UNORM_BLOCK", pure FORMAT_ASTC_12x10_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_12x10_SRGB_BLOCK", pure FORMAT_ASTC_12x10_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_12x12_UNORM_BLOCK", pure FORMAT_ASTC_12x12_UNORM_BLOCK)
-                            , ("FORMAT_ASTC_12x12_SRGB_BLOCK", pure FORMAT_ASTC_12x12_SRGB_BLOCK)
-                            , ("FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT)
-                            , ("FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG", pure FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG)
-                            , ("FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG", pure FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG)
-                            , ("FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG", pure FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG)
-                            , ("FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG", pure FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG)
-                            , ("FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG", pure FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG)
-                            , ("FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG", pure FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG)
-                            , ("FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG", pure FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG)
-                            , ("FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG", pure FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG)
-                            , ("FORMAT_G16_B16_R16_3PLANE_444_UNORM", pure FORMAT_G16_B16_R16_3PLANE_444_UNORM)
-                            , ("FORMAT_G16_B16R16_2PLANE_422_UNORM", pure FORMAT_G16_B16R16_2PLANE_422_UNORM)
-                            , ("FORMAT_G16_B16_R16_3PLANE_422_UNORM", pure FORMAT_G16_B16_R16_3PLANE_422_UNORM)
-                            , ("FORMAT_G16_B16R16_2PLANE_420_UNORM", pure FORMAT_G16_B16R16_2PLANE_420_UNORM)
-                            , ("FORMAT_G16_B16_R16_3PLANE_420_UNORM", pure FORMAT_G16_B16_R16_3PLANE_420_UNORM)
-                            , ("FORMAT_B16G16R16G16_422_UNORM", pure FORMAT_B16G16R16G16_422_UNORM)
-                            , ("FORMAT_G16B16G16R16_422_UNORM", pure FORMAT_G16B16G16R16_422_UNORM)
-                            , ("FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16", pure FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16)
-                            , ("FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16", pure FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16)
-                            , ("FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16", pure FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16)
-                            , ("FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16", pure FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16)
-                            , ("FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16", pure FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16)
-                            , ("FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16", pure FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16)
-                            , ("FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16", pure FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16)
-                            , ("FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16", pure FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16)
-                            , ("FORMAT_R12X4G12X4_UNORM_2PACK16", pure FORMAT_R12X4G12X4_UNORM_2PACK16)
-                            , ("FORMAT_R12X4_UNORM_PACK16", pure FORMAT_R12X4_UNORM_PACK16)
-                            , ("FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16", pure FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16)
-                            , ("FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16", pure FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16)
-                            , ("FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16", pure FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16)
-                            , ("FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16", pure FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16)
-                            , ("FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16", pure FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16)
-                            , ("FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16", pure FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16)
-                            , ("FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16", pure FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16)
-                            , ("FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16", pure FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16)
-                            , ("FORMAT_R10X6G10X6_UNORM_2PACK16", pure FORMAT_R10X6G10X6_UNORM_2PACK16)
-                            , ("FORMAT_R10X6_UNORM_PACK16", pure FORMAT_R10X6_UNORM_PACK16)
-                            , ("FORMAT_G8_B8_R8_3PLANE_444_UNORM", pure FORMAT_G8_B8_R8_3PLANE_444_UNORM)
-                            , ("FORMAT_G8_B8R8_2PLANE_422_UNORM", pure FORMAT_G8_B8R8_2PLANE_422_UNORM)
-                            , ("FORMAT_G8_B8_R8_3PLANE_422_UNORM", pure FORMAT_G8_B8_R8_3PLANE_422_UNORM)
-                            , ("FORMAT_G8_B8R8_2PLANE_420_UNORM", pure FORMAT_G8_B8R8_2PLANE_420_UNORM)
-                            , ("FORMAT_G8_B8_R8_3PLANE_420_UNORM", pure FORMAT_G8_B8_R8_3PLANE_420_UNORM)
-                            , ("FORMAT_B8G8R8G8_422_UNORM", pure FORMAT_B8G8R8G8_422_UNORM)
-                            , ("FORMAT_G8B8G8R8_422_UNORM", pure FORMAT_G8B8G8R8_422_UNORM)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "Format")
-                       v <- step readPrec
-                       pure (Format v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/Format.hs-boot b/src/Graphics/Vulkan/Core10/Enums/Format.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/Format.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.Format  (Format) where
-
-
-
-data Format
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/FormatFeatureFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/FormatFeatureFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/FormatFeatureFlagBits.hs
+++ /dev/null
@@ -1,463 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits  ( FormatFeatureFlagBits( FORMAT_FEATURE_SAMPLED_IMAGE_BIT
-                                                                                  , FORMAT_FEATURE_STORAGE_IMAGE_BIT
-                                                                                  , FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
-                                                                                  , FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
-                                                                                  , FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
-                                                                                  , FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
-                                                                                  , FORMAT_FEATURE_VERTEX_BUFFER_BIT
-                                                                                  , FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
-                                                                                  , FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
-                                                                                  , FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
-                                                                                  , FORMAT_FEATURE_BLIT_SRC_BIT
-                                                                                  , FORMAT_FEATURE_BLIT_DST_BIT
-                                                                                  , FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
-                                                                                  , FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT
-                                                                                  , FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
-                                                                                  , FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
-                                                                                  , FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT
-                                                                                  , FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
-                                                                                  , FORMAT_FEATURE_DISJOINT_BIT
-                                                                                  , FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
-                                                                                  , FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
-                                                                                  , FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
-                                                                                  , FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
-                                                                                  , FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
-                                                                                  , FORMAT_FEATURE_TRANSFER_DST_BIT
-                                                                                  , FORMAT_FEATURE_TRANSFER_SRC_BIT
-                                                                                  , ..
-                                                                                  )
-                                                           , FormatFeatureFlags
-                                                           ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkFormatFeatureFlagBits - Bitmask specifying features supported by a
--- buffer
---
--- = Description
---
--- The following bits /may/ be set in @linearTilingFeatures@,
--- @optimalTilingFeatures@, and
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierTilingFeatures@,
--- specifying that the features are supported by <VkImage.html images> or
--- <VkImageView.html image views> or
--- <VkSamplerYcbcrConversion.html sampler Y′CBCR conversion objects>
--- created with the queried
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'::@format@:
---
--- -   'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' specifies that an image view
---     /can/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled from>.
---
--- -   'FORMAT_FEATURE_STORAGE_IMAGE_BIT' specifies that an image view
---     /can/ be used as a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage images>.
---
--- -   'FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' specifies that an image
---     view /can/ be used as storage image that supports atomic operations.
---
--- -   'FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' specifies that an image view
---     /can/ be used as a framebuffer color attachment and as an input
---     attachment.
---
--- -   '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.
---
--- -   '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.
---
--- -   'FORMAT_FEATURE_BLIT_SRC_BIT' specifies that an image /can/ be used
---     as @srcImage@ for the
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' command.
---
--- -   'FORMAT_FEATURE_BLIT_DST_BIT' specifies that an image /can/ be used
---     as @dstImage@ for the
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' command.
---
--- -   'FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' specifies that if
---     '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 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR', or
---     @mipmapMode@ set to
---     'Graphics.Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'.
---     If 'FORMAT_FEATURE_BLIT_SRC_BIT' is also set, an image can be used
---     as the @srcImage@ to
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' with a
---     @filter@ of 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR'.
---     This bit /must/ only be exposed for formats that also support the
---     'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' or '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.
---
--- -   'FORMAT_FEATURE_TRANSFER_SRC_BIT' specifies that an image /can/ be
---     used as a source image for
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>.
---
--- -   'FORMAT_FEATURE_TRANSFER_DST_BIT' specifies that an image /can/ be
---     used as a destination image for
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>
---     and
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>.
---
--- -   'FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' specifies
---     'Graphics.Vulkan.Core10.Handles.Image' /can/ be used as a sampled
---     image with a min or max
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode'.
---     This bit /must/ only be exposed for formats that also support the
---     'FORMAT_FEATURE_SAMPLED_IMAGE_BIT'.
---
--- -   'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---     specifies that 'Graphics.Vulkan.Core10.Handles.Image' /can/ be used
---     with a sampler that has either of @magFilter@ or @minFilter@ set to
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT',
---     or be the source image for a blit with @filter@ set to
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'.
---     This bit /must/ only be exposed for formats that also support the
---     'FORMAT_FEATURE_SAMPLED_IMAGE_BIT'. If the format being queried is a
---     depth\/stencil format, this only specifies that the depth aspect is
---     cubic filterable.
---
--- -   'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT' specifies that an
---     application /can/ define a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
---     using this format as a source, and that an image of this format
---     /can/ be used with a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
---     @xChromaOffset@ and\/or @yChromaOffset@ of
---     'Graphics.Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'.
---     Otherwise both @xChromaOffset@ and @yChromaOffset@ /must/ be
---     'Graphics.Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'.
---     If a format does not incorporate chroma downsampling (it is not a
---     “422” or “420” format) but the implementation supports sampler
---     Y′CBCR conversion for this format, the implementation /must/ set
---     'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT'.
---
--- -   'FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT' specifies that an
---     application /can/ define a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
---     using this format as a source, and that an image of this format
---     /can/ be used with a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
---     @xChromaOffset@ and\/or @yChromaOffset@ of
---     'Graphics.Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'.
---     Otherwise both @xChromaOffset@ and @yChromaOffset@ /must/ be
---     'Graphics.Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'.
---     If neither 'FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT' nor
---     'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT' is set, the application
---     /must/ not define a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
---     using this format as a source.
---
--- -   'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT'
---     specifies that the format can do linear sampler filtering
---     (min\/magFilter) whilst sampler Y′CBCR conversion is enabled.
---
--- -   'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT'
---     specifies that the format can have different chroma, min, and mag
---     filters.
---
--- -   'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT'
---     specifies that reconstruction is explicit, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction>.
---     If this bit is not present, reconstruction is implicit by default.
---
--- -   'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'
---     specifies that reconstruction /can/ be forcibly made explicit by
---     setting
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'::@forceExplicitReconstruction@
---     to 'Graphics.Vulkan.Core10.BaseType.TRUE'. If the format being
---     queried supports
---     'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT'
---     it /must/ also support
---     'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'.
---
--- -   'FORMAT_FEATURE_DISJOINT_BIT' specifies that a multi-planar image
---     /can/ have the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---     set during image creation. An implementation /must/ not set
---     'FORMAT_FEATURE_DISJOINT_BIT' for /single-plane formats/.
---
--- -   'FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT' specifies that an
---     image view /can/ be used as a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>.
---
--- The following bits /may/ be set in @bufferFeatures@, specifying that the
--- features are supported by <VkBuffer.html buffers> or
--- <VkBufferView.html buffer views> created with the queried
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceProperties'::@format@:
---
--- -   'FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT' specifies that the format
---     /can/ be used to create a buffer view that /can/ be bound to a
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
---     descriptor.
---
--- -   'FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT' specifies that the format
---     /can/ be used to create a buffer view that /can/ be bound to a
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
---     descriptor.
---
--- -   'FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT' specifies that
---     atomic operations are supported on
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
---     with this format.
---
--- -   'FORMAT_FEATURE_VERTEX_BUFFER_BIT' specifies that the format /can/
---     be used as a vertex attribute format
---     ('Graphics.Vulkan.Core10.Pipeline.VertexInputAttributeDescription'::@format@).
---
--- = See Also
---
--- 'FormatFeatureFlags'
-newtype FormatFeatureFlagBits = FormatFeatureFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' specifies that an image view /can/ be
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled from>.
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_BIT = FormatFeatureFlagBits 0x00000001
--- | 'FORMAT_FEATURE_STORAGE_IMAGE_BIT' specifies that an image view /can/ be
--- used as a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage images>.
-pattern FORMAT_FEATURE_STORAGE_IMAGE_BIT = FormatFeatureFlagBits 0x00000002
--- | 'FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' specifies that an image view
--- /can/ be used as storage image that supports atomic operations.
-pattern FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = FormatFeatureFlagBits 0x00000004
--- | 'FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT' specifies that the format
--- /can/ be used to create a buffer view that /can/ be bound to a
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
--- descriptor.
-pattern FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = FormatFeatureFlagBits 0x00000008
--- | 'FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT' specifies that the format
--- /can/ be used to create a buffer view that /can/ be bound to a
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
--- descriptor.
-pattern FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = FormatFeatureFlagBits 0x00000010
--- | 'FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT' specifies that atomic
--- operations are supported on
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
--- with this format.
-pattern FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = FormatFeatureFlagBits 0x00000020
--- | 'FORMAT_FEATURE_VERTEX_BUFFER_BIT' specifies that the format /can/ be
--- used as a vertex attribute format
--- ('Graphics.Vulkan.Core10.Pipeline.VertexInputAttributeDescription'::@format@).
-pattern FORMAT_FEATURE_VERTEX_BUFFER_BIT = FormatFeatureFlagBits 0x00000040
--- | 'FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' specifies that an image view /can/
--- be used as a framebuffer color attachment and as an input attachment.
-pattern FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = FormatFeatureFlagBits 0x00000080
--- | '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.
-pattern FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = FormatFeatureFlagBits 0x00000100
--- | '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.
-pattern FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = FormatFeatureFlagBits 0x00000200
--- | 'FORMAT_FEATURE_BLIT_SRC_BIT' specifies that an image /can/ be used as
--- @srcImage@ for the
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' command.
-pattern FORMAT_FEATURE_BLIT_SRC_BIT = FormatFeatureFlagBits 0x00000400
--- | 'FORMAT_FEATURE_BLIT_DST_BIT' specifies that an image /can/ be used as
--- @dstImage@ for the
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' command.
-pattern FORMAT_FEATURE_BLIT_DST_BIT = FormatFeatureFlagBits 0x00000800
--- | 'FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' specifies that if
--- '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
--- 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR', or @mipmapMode@ set
--- to
--- 'Graphics.Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'.
--- If 'FORMAT_FEATURE_BLIT_SRC_BIT' is also set, an image can be used as
--- the @srcImage@ to
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' with a
--- @filter@ of 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR'. This
--- bit /must/ only be exposed for formats that also support the
--- 'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' or '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.
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = FormatFeatureFlagBits 0x00001000
--- | 'FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT' specifies that an image
--- view /can/ be used as a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>.
-pattern FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = FormatFeatureFlagBits 0x01000000
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"
-pattern FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = FormatFeatureFlagBits 0x20000000
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = FormatFeatureFlagBits 0x00002000
--- | 'FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' specifies
--- 'Graphics.Vulkan.Core10.Handles.Image' /can/ be used as a sampled image
--- with a min or max
--- 'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode'.
--- This bit /must/ only be exposed for formats that also support the
--- 'FORMAT_FEATURE_SAMPLED_IMAGE_BIT'.
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = FormatFeatureFlagBits 0x00010000
--- | 'FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT' specifies that an
--- application /can/ define a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
--- using this format as a source, and that an image of this format /can/ be
--- used with a
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
--- @xChromaOffset@ and\/or @yChromaOffset@ of
--- 'Graphics.Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'.
--- Otherwise both @xChromaOffset@ and @yChromaOffset@ /must/ be
--- 'Graphics.Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'.
--- If neither 'FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT' nor
--- 'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT' is set, the application
--- /must/ not define a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
--- using this format as a source.
-pattern FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = FormatFeatureFlagBits 0x00800000
--- | 'FORMAT_FEATURE_DISJOINT_BIT' specifies that a multi-planar image /can/
--- have the
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
--- set during image creation. An implementation /must/ not set
--- 'FORMAT_FEATURE_DISJOINT_BIT' for /single-plane formats/.
-pattern FORMAT_FEATURE_DISJOINT_BIT = FormatFeatureFlagBits 0x00400000
--- | 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'
--- specifies that reconstruction /can/ be forcibly made explicit by setting
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'::@forceExplicitReconstruction@
--- to 'Graphics.Vulkan.Core10.BaseType.TRUE'. If the format being queried
--- supports
--- 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT'
--- it /must/ also support
--- 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'.
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = FormatFeatureFlagBits 0x00200000
--- | 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT'
--- specifies that reconstruction is explicit, as described in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction>.
--- If this bit is not present, reconstruction is implicit by default.
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = FormatFeatureFlagBits 0x00100000
--- | 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT'
--- specifies that the format can have different chroma, min, and mag
--- filters.
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = FormatFeatureFlagBits 0x00080000
--- | 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT'
--- specifies that the format can do linear sampler filtering
--- (min\/magFilter) whilst sampler Y′CBCR conversion is enabled.
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = FormatFeatureFlagBits 0x00040000
--- | 'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT' specifies that an
--- application /can/ define a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
--- using this format as a source, and that an image of this format /can/ be
--- used with a
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
--- @xChromaOffset@ and\/or @yChromaOffset@ of
--- 'Graphics.Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'.
--- Otherwise both @xChromaOffset@ and @yChromaOffset@ /must/ be
--- 'Graphics.Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'.
--- If a format does not incorporate chroma downsampling (it is not a “422”
--- or “420” format) but the implementation supports sampler Y′CBCR
--- conversion for this format, the implementation /must/ set
--- 'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT'.
-pattern FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = FormatFeatureFlagBits 0x00020000
--- | 'FORMAT_FEATURE_TRANSFER_DST_BIT' specifies that an image /can/ be used
--- as a destination image for
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>.
-pattern FORMAT_FEATURE_TRANSFER_DST_BIT = FormatFeatureFlagBits 0x00008000
--- | 'FORMAT_FEATURE_TRANSFER_SRC_BIT' specifies that an image /can/ be used
--- as a source image for
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>.
-pattern FORMAT_FEATURE_TRANSFER_SRC_BIT = FormatFeatureFlagBits 0x00004000
-
-type FormatFeatureFlags = FormatFeatureFlagBits
-
-instance Show FormatFeatureFlagBits where
-  showsPrec p = \case
-    FORMAT_FEATURE_SAMPLED_IMAGE_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_BIT"
-    FORMAT_FEATURE_STORAGE_IMAGE_BIT -> showString "FORMAT_FEATURE_STORAGE_IMAGE_BIT"
-    FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT -> showString "FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"
-    FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT -> showString "FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"
-    FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT -> showString "FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"
-    FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT -> showString "FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"
-    FORMAT_FEATURE_VERTEX_BUFFER_BIT -> showString "FORMAT_FEATURE_VERTEX_BUFFER_BIT"
-    FORMAT_FEATURE_COLOR_ATTACHMENT_BIT -> showString "FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"
-    FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT -> showString "FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"
-    FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT -> showString "FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"
-    FORMAT_FEATURE_BLIT_SRC_BIT -> showString "FORMAT_FEATURE_BLIT_SRC_BIT"
-    FORMAT_FEATURE_BLIT_DST_BIT -> showString "FORMAT_FEATURE_BLIT_DST_BIT"
-    FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"
-    FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT -> showString "FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT"
-    FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR -> showString "FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"
-    FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"
-    FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT"
-    FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT -> showString "FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"
-    FORMAT_FEATURE_DISJOINT_BIT -> showString "FORMAT_FEATURE_DISJOINT_BIT"
-    FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"
-    FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"
-    FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"
-    FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"
-    FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT -> showString "FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"
-    FORMAT_FEATURE_TRANSFER_DST_BIT -> showString "FORMAT_FEATURE_TRANSFER_DST_BIT"
-    FORMAT_FEATURE_TRANSFER_SRC_BIT -> showString "FORMAT_FEATURE_TRANSFER_SRC_BIT"
-    FormatFeatureFlagBits x -> showParen (p >= 11) (showString "FormatFeatureFlagBits 0x" . showHex x)
-
-instance Read FormatFeatureFlagBits where
-  readPrec = parens (choose [("FORMAT_FEATURE_SAMPLED_IMAGE_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
-                            , ("FORMAT_FEATURE_STORAGE_IMAGE_BIT", pure FORMAT_FEATURE_STORAGE_IMAGE_BIT)
-                            , ("FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", pure FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
-                            , ("FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT", pure FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
-                            , ("FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT", pure FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
-                            , ("FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", pure FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
-                            , ("FORMAT_FEATURE_VERTEX_BUFFER_BIT", pure FORMAT_FEATURE_VERTEX_BUFFER_BIT)
-                            , ("FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", pure FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
-                            , ("FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", pure FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
-                            , ("FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", pure FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
-                            , ("FORMAT_FEATURE_BLIT_SRC_BIT", pure FORMAT_FEATURE_BLIT_SRC_BIT)
-                            , ("FORMAT_FEATURE_BLIT_DST_BIT", pure FORMAT_FEATURE_BLIT_DST_BIT)
-                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
-                            , ("FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT", pure FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT)
-                            , ("FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR", pure FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR)
-                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG", pure FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG)
-                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT)
-                            , ("FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT", pure FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT)
-                            , ("FORMAT_FEATURE_DISJOINT_BIT", pure FORMAT_FEATURE_DISJOINT_BIT)
-                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT)
-                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT)
-                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT)
-                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT)
-                            , ("FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT", pure FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT)
-                            , ("FORMAT_FEATURE_TRANSFER_DST_BIT", pure FORMAT_FEATURE_TRANSFER_DST_BIT)
-                            , ("FORMAT_FEATURE_TRANSFER_SRC_BIT", pure FORMAT_FEATURE_TRANSFER_SRC_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "FormatFeatureFlagBits")
-                       v <- step readPrec
-                       pure (FormatFeatureFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/FramebufferCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/FramebufferCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/FramebufferCreateFlagBits.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits  ( FramebufferCreateFlagBits( FRAMEBUFFER_CREATE_IMAGELESS_BIT
-                                                                                          , ..
-                                                                                          )
-                                                               , FramebufferCreateFlags
-                                                               ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkFramebufferCreateFlagBits - Bitmask specifying framebuffer properties
---
--- = See Also
---
--- 'FramebufferCreateFlags'
-newtype FramebufferCreateFlagBits = FramebufferCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'FRAMEBUFFER_CREATE_IMAGELESS_BIT' specifies that image views are not
--- specified, and only attachment compatibility information will be
--- provided via a
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentImageInfo'
--- structure.
-pattern FRAMEBUFFER_CREATE_IMAGELESS_BIT = FramebufferCreateFlagBits 0x00000001
-
-type FramebufferCreateFlags = FramebufferCreateFlagBits
-
-instance Show FramebufferCreateFlagBits where
-  showsPrec p = \case
-    FRAMEBUFFER_CREATE_IMAGELESS_BIT -> showString "FRAMEBUFFER_CREATE_IMAGELESS_BIT"
-    FramebufferCreateFlagBits x -> showParen (p >= 11) (showString "FramebufferCreateFlagBits 0x" . showHex x)
-
-instance Read FramebufferCreateFlagBits where
-  readPrec = parens (choose [("FRAMEBUFFER_CREATE_IMAGELESS_BIT", pure FRAMEBUFFER_CREATE_IMAGELESS_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "FramebufferCreateFlagBits")
-                       v <- step readPrec
-                       pure (FramebufferCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/FrontFace.hs b/src/Graphics/Vulkan/Core10/Enums/FrontFace.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/FrontFace.hs
+++ /dev/null
@@ -1,57 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.FrontFace  (FrontFace( FRONT_FACE_COUNTER_CLOCKWISE
-                                                         , FRONT_FACE_CLOCKWISE
-                                                         , ..
-                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkFrontFace - Interpret polygon front-facing orientation
---
--- = Description
---
--- Any triangle which is not front-facing is back-facing, including
--- zero-area triangles.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
-newtype FrontFace = FrontFace Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'FRONT_FACE_COUNTER_CLOCKWISE' specifies that a triangle with positive
--- area is considered front-facing.
-pattern FRONT_FACE_COUNTER_CLOCKWISE = FrontFace 0
--- | 'FRONT_FACE_CLOCKWISE' specifies that a triangle with negative area is
--- considered front-facing.
-pattern FRONT_FACE_CLOCKWISE = FrontFace 1
-{-# complete FRONT_FACE_COUNTER_CLOCKWISE,
-             FRONT_FACE_CLOCKWISE :: FrontFace #-}
-
-instance Show FrontFace where
-  showsPrec p = \case
-    FRONT_FACE_COUNTER_CLOCKWISE -> showString "FRONT_FACE_COUNTER_CLOCKWISE"
-    FRONT_FACE_CLOCKWISE -> showString "FRONT_FACE_CLOCKWISE"
-    FrontFace x -> showParen (p >= 11) (showString "FrontFace " . showsPrec 11 x)
-
-instance Read FrontFace where
-  readPrec = parens (choose [("FRONT_FACE_COUNTER_CLOCKWISE", pure FRONT_FACE_COUNTER_CLOCKWISE)
-                            , ("FRONT_FACE_CLOCKWISE", pure FRONT_FACE_CLOCKWISE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "FrontFace")
-                       v <- step readPrec
-                       pure (FrontFace v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageAspectFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/ImageAspectFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageAspectFlagBits.hs
+++ /dev/null
@@ -1,107 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits  ( ImageAspectFlagBits( IMAGE_ASPECT_COLOR_BIT
-                                                                              , IMAGE_ASPECT_DEPTH_BIT
-                                                                              , IMAGE_ASPECT_STENCIL_BIT
-                                                                              , IMAGE_ASPECT_METADATA_BIT
-                                                                              , IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT
-                                                                              , IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT
-                                                                              , IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT
-                                                                              , IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT
-                                                                              , IMAGE_ASPECT_PLANE_2_BIT
-                                                                              , IMAGE_ASPECT_PLANE_1_BIT
-                                                                              , IMAGE_ASPECT_PLANE_0_BIT
-                                                                              , ..
-                                                                              )
-                                                         , ImageAspectFlags
-                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkImageAspectFlagBits - Bitmask specifying which aspects of an image are
--- included in a view
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo',
--- 'ImageAspectFlags',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
-newtype ImageAspectFlagBits = ImageAspectFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'IMAGE_ASPECT_COLOR_BIT' specifies the color aspect.
-pattern IMAGE_ASPECT_COLOR_BIT = ImageAspectFlagBits 0x00000001
--- | 'IMAGE_ASPECT_DEPTH_BIT' specifies the depth aspect.
-pattern IMAGE_ASPECT_DEPTH_BIT = ImageAspectFlagBits 0x00000002
--- | 'IMAGE_ASPECT_STENCIL_BIT' specifies the stencil aspect.
-pattern IMAGE_ASPECT_STENCIL_BIT = ImageAspectFlagBits 0x00000004
--- | 'IMAGE_ASPECT_METADATA_BIT' specifies the metadata aspect, used for
--- sparse
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory sparse resource>
--- operations.
-pattern IMAGE_ASPECT_METADATA_BIT = ImageAspectFlagBits 0x00000008
--- | 'IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT' specifies /memory plane/ 3.
-pattern IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT = ImageAspectFlagBits 0x00000400
--- | 'IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT' specifies /memory plane/ 2.
-pattern IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = ImageAspectFlagBits 0x00000200
--- | 'IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT' specifies /memory plane/ 1.
-pattern IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = ImageAspectFlagBits 0x00000100
--- | 'IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT' specifies /memory plane/ 0.
-pattern IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = ImageAspectFlagBits 0x00000080
--- | 'IMAGE_ASPECT_PLANE_2_BIT' specifies plane 2 of a /multi-planar/ image
--- format.
-pattern IMAGE_ASPECT_PLANE_2_BIT = ImageAspectFlagBits 0x00000040
--- | 'IMAGE_ASPECT_PLANE_1_BIT' specifies plane 1 of a /multi-planar/ image
--- format.
-pattern IMAGE_ASPECT_PLANE_1_BIT = ImageAspectFlagBits 0x00000020
--- | 'IMAGE_ASPECT_PLANE_0_BIT' specifies plane 0 of a /multi-planar/ image
--- format.
-pattern IMAGE_ASPECT_PLANE_0_BIT = ImageAspectFlagBits 0x00000010
-
-type ImageAspectFlags = ImageAspectFlagBits
-
-instance Show ImageAspectFlagBits where
-  showsPrec p = \case
-    IMAGE_ASPECT_COLOR_BIT -> showString "IMAGE_ASPECT_COLOR_BIT"
-    IMAGE_ASPECT_DEPTH_BIT -> showString "IMAGE_ASPECT_DEPTH_BIT"
-    IMAGE_ASPECT_STENCIL_BIT -> showString "IMAGE_ASPECT_STENCIL_BIT"
-    IMAGE_ASPECT_METADATA_BIT -> showString "IMAGE_ASPECT_METADATA_BIT"
-    IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT -> showString "IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT"
-    IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT -> showString "IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT"
-    IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT -> showString "IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT"
-    IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT -> showString "IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT"
-    IMAGE_ASPECT_PLANE_2_BIT -> showString "IMAGE_ASPECT_PLANE_2_BIT"
-    IMAGE_ASPECT_PLANE_1_BIT -> showString "IMAGE_ASPECT_PLANE_1_BIT"
-    IMAGE_ASPECT_PLANE_0_BIT -> showString "IMAGE_ASPECT_PLANE_0_BIT"
-    ImageAspectFlagBits x -> showParen (p >= 11) (showString "ImageAspectFlagBits 0x" . showHex x)
-
-instance Read ImageAspectFlagBits where
-  readPrec = parens (choose [("IMAGE_ASPECT_COLOR_BIT", pure IMAGE_ASPECT_COLOR_BIT)
-                            , ("IMAGE_ASPECT_DEPTH_BIT", pure IMAGE_ASPECT_DEPTH_BIT)
-                            , ("IMAGE_ASPECT_STENCIL_BIT", pure IMAGE_ASPECT_STENCIL_BIT)
-                            , ("IMAGE_ASPECT_METADATA_BIT", pure IMAGE_ASPECT_METADATA_BIT)
-                            , ("IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT", pure IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT)
-                            , ("IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT", pure IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT)
-                            , ("IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT", pure IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT)
-                            , ("IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT", pure IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT)
-                            , ("IMAGE_ASPECT_PLANE_2_BIT", pure IMAGE_ASPECT_PLANE_2_BIT)
-                            , ("IMAGE_ASPECT_PLANE_1_BIT", pure IMAGE_ASPECT_PLANE_1_BIT)
-                            , ("IMAGE_ASPECT_PLANE_0_BIT", pure IMAGE_ASPECT_PLANE_0_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ImageAspectFlagBits")
-                       v <- step readPrec
-                       pure (ImageAspectFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/ImageCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageCreateFlagBits.hs
+++ /dev/null
@@ -1,206 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits  ( ImageCreateFlagBits( IMAGE_CREATE_SPARSE_BINDING_BIT
-                                                                              , IMAGE_CREATE_SPARSE_RESIDENCY_BIT
-                                                                              , IMAGE_CREATE_SPARSE_ALIASED_BIT
-                                                                              , IMAGE_CREATE_MUTABLE_FORMAT_BIT
-                                                                              , IMAGE_CREATE_CUBE_COMPATIBLE_BIT
-                                                                              , IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-                                                                              , IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
-                                                                              , IMAGE_CREATE_CORNER_SAMPLED_BIT_NV
-                                                                              , IMAGE_CREATE_DISJOINT_BIT
-                                                                              , IMAGE_CREATE_PROTECTED_BIT
-                                                                              , IMAGE_CREATE_EXTENDED_USAGE_BIT
-                                                                              , IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT
-                                                                              , IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT
-                                                                              , IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT
-                                                                              , IMAGE_CREATE_ALIAS_BIT
-                                                                              , ..
-                                                                              )
-                                                         , ImageCreateFlags
-                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkImageCreateFlagBits - Bitmask specifying additional parameters of an
--- image
---
--- = Description
---
--- See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures Sparse Resource Features>
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-physicalfeatures Sparse Physical Device Features>
--- for more details.
---
--- = See Also
---
--- 'ImageCreateFlags'
-newtype ImageCreateFlagBits = ImageCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'IMAGE_CREATE_SPARSE_BINDING_BIT' specifies that the image will be
--- backed using sparse memory binding.
-pattern IMAGE_CREATE_SPARSE_BINDING_BIT = ImageCreateFlagBits 0x00000001
--- | '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 'IMAGE_CREATE_SPARSE_BINDING_BIT'
--- flag.
-pattern IMAGE_CREATE_SPARSE_RESIDENCY_BIT = ImageCreateFlagBits 0x00000002
--- | '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
--- 'IMAGE_CREATE_SPARSE_BINDING_BIT' flag
-pattern IMAGE_CREATE_SPARSE_ALIASED_BIT = ImageCreateFlagBits 0x00000004
--- | 'IMAGE_CREATE_MUTABLE_FORMAT_BIT' specifies that the image /can/ be used
--- to create a 'Graphics.Vulkan.Core10.Handles.ImageView' with a different
--- format from the image. For
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
--- formats, 'IMAGE_CREATE_MUTABLE_FORMAT_BIT' specifies that a
--- 'Graphics.Vulkan.Core10.Handles.ImageView' can be created of a /plane/
--- of the image.
-pattern IMAGE_CREATE_MUTABLE_FORMAT_BIT = ImageCreateFlagBits 0x00000008
--- | 'IMAGE_CREATE_CUBE_COMPATIBLE_BIT' specifies that the image /can/ be
--- used to create a 'Graphics.Vulkan.Core10.Handles.ImageView' of type
--- 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE' or
--- 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'.
-pattern IMAGE_CREATE_CUBE_COMPATIBLE_BIT = ImageCreateFlagBits 0x00000010
--- | 'IMAGE_CREATE_SUBSAMPLED_BIT_EXT' specifies that an image /can/ be in a
--- subsampled format which /may/ be more optimal when written as an
--- attachment by a render pass that has a fragment density map attachment.
--- Accessing a subsampled image has additional considerations:
---
--- -   Image data read as an image sampler is undefined if the sampler was
---     not created with @flags@ containing
---     'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT'
---     or was not sampled through the use of a combined image sampler with
---     an immutable sampler in
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding'.
---
--- -   Image data read with an input attachment is undefined if the
---     contents were not written as an attachment in an earlier subpass of
---     the same render pass.
---
--- -   Image data read with load operations /may/ be resampled to the
---     fragment density of the render pass.
---
--- -   Image contents outside of the render area become undefined if the
---     image is stored as a render pass attachment.
-pattern IMAGE_CREATE_SUBSAMPLED_BIT_EXT = ImageCreateFlagBits 0x00004000
--- | 'IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT' specifies that
--- an image with a depth or depth\/stencil format /can/ be used with custom
--- sample locations when used as a depth\/stencil attachment.
-pattern IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = ImageCreateFlagBits 0x00001000
--- | 'IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' specifies that the image is a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-images-corner-sampled corner-sampled image>.
-pattern IMAGE_CREATE_CORNER_SAMPLED_BIT_NV = ImageCreateFlagBits 0x00002000
--- | 'IMAGE_CREATE_DISJOINT_BIT' specifies that an image with a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
--- /must/ have each plane separately bound to memory, rather than having a
--- single memory binding for the whole image; the presence of this bit
--- distinguishes a /disjoint image/ from an image without this bit set.
-pattern IMAGE_CREATE_DISJOINT_BIT = ImageCreateFlagBits 0x00000200
--- | 'IMAGE_CREATE_PROTECTED_BIT' specifies that the image is a protected
--- image.
-pattern IMAGE_CREATE_PROTECTED_BIT = ImageCreateFlagBits 0x00000800
--- | 'IMAGE_CREATE_EXTENDED_USAGE_BIT' specifies that the image /can/ be
--- created with usage flags that are not supported for the format the image
--- is created with but are supported for at least one format a
--- 'Graphics.Vulkan.Core10.Handles.ImageView' created from the image /can/
--- have.
-pattern IMAGE_CREATE_EXTENDED_USAGE_BIT = ImageCreateFlagBits 0x00000100
--- | 'IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT' specifies that the image
--- having a compressed format /can/ be used to create a
--- 'Graphics.Vulkan.Core10.Handles.ImageView' with an uncompressed format
--- where each texel in the image view corresponds to a compressed texel
--- block of the image.
-pattern IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = ImageCreateFlagBits 0x00000080
--- | 'IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' specifies that the image /can/ be
--- used to create a 'Graphics.Vulkan.Core10.Handles.ImageView' of type
--- 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
--- 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'.
-pattern IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = ImageCreateFlagBits 0x00000020
--- | 'IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT' specifies that the image
--- /can/ be used with a non-zero value of the
--- @splitInstanceBindRegionCount@ member of a
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'
--- structure passed into
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.bindImageMemory2'.
--- This flag also has the effect of making the image use the standard
--- sparse image block dimensions.
-pattern IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = ImageCreateFlagBits 0x00000040
--- | 'IMAGE_CREATE_ALIAS_BIT' specifies that two images created with the same
--- creation parameters and aliased to the same memory /can/ interpret the
--- contents of the memory consistently with each other, subject to the
--- rules described in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing Memory Aliasing>
--- section. This flag further specifies that each plane of a /disjoint/
--- image /can/ share an in-memory non-linear representation with
--- single-plane images, and that a single-plane image /can/ share an
--- in-memory non-linear representation with a plane of a multi-planar
--- disjoint image, according to the rules in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>.
--- If the @pNext@ chain includes a
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
--- or
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'
--- structure whose @handleTypes@ member is not @0@, it is as if
--- 'IMAGE_CREATE_ALIAS_BIT' is set.
-pattern IMAGE_CREATE_ALIAS_BIT = ImageCreateFlagBits 0x00000400
-
-type ImageCreateFlags = ImageCreateFlagBits
-
-instance Show ImageCreateFlagBits where
-  showsPrec p = \case
-    IMAGE_CREATE_SPARSE_BINDING_BIT -> showString "IMAGE_CREATE_SPARSE_BINDING_BIT"
-    IMAGE_CREATE_SPARSE_RESIDENCY_BIT -> showString "IMAGE_CREATE_SPARSE_RESIDENCY_BIT"
-    IMAGE_CREATE_SPARSE_ALIASED_BIT -> showString "IMAGE_CREATE_SPARSE_ALIASED_BIT"
-    IMAGE_CREATE_MUTABLE_FORMAT_BIT -> showString "IMAGE_CREATE_MUTABLE_FORMAT_BIT"
-    IMAGE_CREATE_CUBE_COMPATIBLE_BIT -> showString "IMAGE_CREATE_CUBE_COMPATIBLE_BIT"
-    IMAGE_CREATE_SUBSAMPLED_BIT_EXT -> showString "IMAGE_CREATE_SUBSAMPLED_BIT_EXT"
-    IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT -> showString "IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"
-    IMAGE_CREATE_CORNER_SAMPLED_BIT_NV -> showString "IMAGE_CREATE_CORNER_SAMPLED_BIT_NV"
-    IMAGE_CREATE_DISJOINT_BIT -> showString "IMAGE_CREATE_DISJOINT_BIT"
-    IMAGE_CREATE_PROTECTED_BIT -> showString "IMAGE_CREATE_PROTECTED_BIT"
-    IMAGE_CREATE_EXTENDED_USAGE_BIT -> showString "IMAGE_CREATE_EXTENDED_USAGE_BIT"
-    IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT -> showString "IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"
-    IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT -> showString "IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT"
-    IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT -> showString "IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"
-    IMAGE_CREATE_ALIAS_BIT -> showString "IMAGE_CREATE_ALIAS_BIT"
-    ImageCreateFlagBits x -> showParen (p >= 11) (showString "ImageCreateFlagBits 0x" . showHex x)
-
-instance Read ImageCreateFlagBits where
-  readPrec = parens (choose [("IMAGE_CREATE_SPARSE_BINDING_BIT", pure IMAGE_CREATE_SPARSE_BINDING_BIT)
-                            , ("IMAGE_CREATE_SPARSE_RESIDENCY_BIT", pure IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
-                            , ("IMAGE_CREATE_SPARSE_ALIASED_BIT", pure IMAGE_CREATE_SPARSE_ALIASED_BIT)
-                            , ("IMAGE_CREATE_MUTABLE_FORMAT_BIT", pure IMAGE_CREATE_MUTABLE_FORMAT_BIT)
-                            , ("IMAGE_CREATE_CUBE_COMPATIBLE_BIT", pure IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
-                            , ("IMAGE_CREATE_SUBSAMPLED_BIT_EXT", pure IMAGE_CREATE_SUBSAMPLED_BIT_EXT)
-                            , ("IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT", pure IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT)
-                            , ("IMAGE_CREATE_CORNER_SAMPLED_BIT_NV", pure IMAGE_CREATE_CORNER_SAMPLED_BIT_NV)
-                            , ("IMAGE_CREATE_DISJOINT_BIT", pure IMAGE_CREATE_DISJOINT_BIT)
-                            , ("IMAGE_CREATE_PROTECTED_BIT", pure IMAGE_CREATE_PROTECTED_BIT)
-                            , ("IMAGE_CREATE_EXTENDED_USAGE_BIT", pure IMAGE_CREATE_EXTENDED_USAGE_BIT)
-                            , ("IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT", pure IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT)
-                            , ("IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT", pure IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT)
-                            , ("IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT", pure IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT)
-                            , ("IMAGE_CREATE_ALIAS_BIT", pure IMAGE_CREATE_ALIAS_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ImageCreateFlagBits")
-                       v <- step readPrec
-                       pure (ImageCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageCreateFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/ImageCreateFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageCreateFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits  ( ImageCreateFlagBits
-                                                         , ImageCreateFlags
-                                                         ) where
-
-
-
-data ImageCreateFlagBits
-
-type ImageCreateFlags = ImageCreateFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageLayout.hs b/src/Graphics/Vulkan/Core10/Enums/ImageLayout.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageLayout.hs
+++ /dev/null
@@ -1,273 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageLayout  (ImageLayout( IMAGE_LAYOUT_UNDEFINED
-                                                             , IMAGE_LAYOUT_GENERAL
-                                                             , IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
-                                                             , IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
-                                                             , IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
-                                                             , IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
-                                                             , IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
-                                                             , IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
-                                                             , IMAGE_LAYOUT_PREINITIALIZED
-                                                             , IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
-                                                             , IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV
-                                                             , IMAGE_LAYOUT_SHARED_PRESENT_KHR
-                                                             , IMAGE_LAYOUT_PRESENT_SRC_KHR
-                                                             , IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-                                                             , IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
-                                                             , IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
-                                                             , IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL
-                                                             , IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
-                                                             , IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-                                                             , ..
-                                                             )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkImageLayout - Layout of image and image subresources
---
--- = Description
---
--- The type(s) of device access supported by each layout are:
---
--- 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears>
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies>).
--- For use as a framebuffer attachment, this is a member in the
--- substructures of the 'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo'
--- (see
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass Render Pass>).
--- For use in a descriptor set, this is a member in the
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorImageInfo' structure
--- (see
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates>).
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pass.AttachmentDescription',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout',
--- 'Graphics.Vulkan.Core10.Pass.AttachmentReference',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout',
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo',
--- 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearDepthStencilImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResolveImage'
-newtype ImageLayout = ImageLayout Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'IMAGE_LAYOUT_UNDEFINED' does not support device access. This layout
--- /must/ only be used as the @initialLayout@ member of
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' or
--- 'Graphics.Vulkan.Core10.Pass.AttachmentDescription', 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.
-pattern IMAGE_LAYOUT_UNDEFINED = ImageLayout 0
--- | 'IMAGE_LAYOUT_GENERAL' supports all types of device access.
-pattern IMAGE_LAYOUT_GENERAL = ImageLayout 1
--- | 'IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL' /must/ only be used as a color
--- or resolve attachment in a 'Graphics.Vulkan.Core10.Handles.Framebuffer'.
--- This layout is valid only for image subresources of images created with
--- the
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
--- usage bit enabled.
-pattern IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = ImageLayout 2
--- | 'IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL' specifies a layout for
--- both the depth and stencil aspects of a depth\/stencil format image
--- allowing read and write access as a depth\/stencil attachment. It is
--- equivalent to 'IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' and
--- 'IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'.
-pattern IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = ImageLayout 3
--- | 'IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL' specifies a layout for
--- both the depth and stencil aspects of a depth\/stencil format image
--- allowing read only access as a depth\/stencil attachment or in shaders.
--- It is equivalent to 'IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL' and
--- 'IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'.
-pattern IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = ImageLayout 4
--- | '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
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT'
--- or
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
--- usage bit enabled.
-pattern IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = ImageLayout 5
--- | 'IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL' /must/ only be used as a source
--- image of a transfer command (see the definition of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-transfer >).
--- This layout is valid only for image subresources of images created with
--- the
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
--- usage bit enabled.
-pattern IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = ImageLayout 6
--- | '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
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
--- usage bit enabled.
-pattern IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = ImageLayout 7
--- | 'IMAGE_LAYOUT_PREINITIALIZED' does not support device access. This
--- layout /must/ only be used as the @initialLayout@ member of
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' or
--- 'Graphics.Vulkan.Core10.Pass.AttachmentDescription', 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,
--- 'IMAGE_LAYOUT_PREINITIALIZED' is only useful with
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource linear>
--- images because there is not a standard layout defined for
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL' images.
-pattern IMAGE_LAYOUT_PREINITIALIZED = ImageLayout 8
--- | 'IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT' /must/ only be used as a
--- fragment density map attachment in a
--- 'Graphics.Vulkan.Core10.Handles.RenderPass'. This layout is valid only
--- for image subresources of images created with the
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT'
--- usage bit enabled.
-pattern IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = ImageLayout 1000218000
--- | 'IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV' /must/ only be used as a
--- read-only
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image shading-rate-image>.
--- This layout is valid only for image subresources of images created with
--- the
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV'
--- usage bit enabled.
-pattern IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = ImageLayout 1000164003
--- | 'IMAGE_LAYOUT_SHARED_PRESENT_KHR' is valid only for shared presentable
--- images, and /must/ be used for any usage the image supports.
-pattern IMAGE_LAYOUT_SHARED_PRESENT_KHR = ImageLayout 1000111000
--- | 'IMAGE_LAYOUT_PRESENT_SRC_KHR' /must/ only be used for presenting a
--- presentable image for display. A swapchain’s image /must/ be
--- transitioned to this layout before calling
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR', and
--- /must/ be transitioned away from this layout after calling
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR'.
-pattern IMAGE_LAYOUT_PRESENT_SRC_KHR = ImageLayout 1000001002
--- | 'IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' specifies a layout for the
--- stencil aspect of a depth\/stencil format image allowing read-only
--- access as a stencil attachment or in shaders.
-pattern IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = ImageLayout 1000241003
--- | 'IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL' specifies a layout for the
--- stencil aspect of a depth\/stencil format image allowing read and write
--- access as a stencil attachment.
-pattern IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = ImageLayout 1000241002
--- | 'IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL' specifies a layout for the depth
--- aspect of a depth\/stencil format image allowing read-only access as a
--- depth attachment or in shaders.
-pattern IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL = ImageLayout 1000241001
--- | 'IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' specifies a layout for the depth
--- aspect of a depth\/stencil format image allowing read and write access
--- as a depth attachment.
-pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL = ImageLayout 1000241000
--- | 'IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL' specifies a
--- layout for depth\/stencil format images allowing read and write access
--- to the depth aspect as a depth attachment, and read only access to the
--- stencil aspect as a stencil attachment or in shaders. It is equivalent
--- to 'IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' and
--- 'IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'.
-pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = ImageLayout 1000117001
--- | 'IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL' specifies a
--- layout for depth\/stencil format images allowing read and write access
--- to the stencil aspect as a stencil attachment, and read only access to
--- the depth aspect as a depth attachment or in shaders. It is equivalent
--- to 'IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL' and
--- 'IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'.
-pattern IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = ImageLayout 1000117000
-{-# complete IMAGE_LAYOUT_UNDEFINED,
-             IMAGE_LAYOUT_GENERAL,
-             IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-             IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-             IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
-             IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
-             IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-             IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-             IMAGE_LAYOUT_PREINITIALIZED,
-             IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT,
-             IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV,
-             IMAGE_LAYOUT_SHARED_PRESENT_KHR,
-             IMAGE_LAYOUT_PRESENT_SRC_KHR,
-             IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
-             IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL,
-             IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-             IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-             IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
-             IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL :: ImageLayout #-}
-
-instance Show ImageLayout where
-  showsPrec p = \case
-    IMAGE_LAYOUT_UNDEFINED -> showString "IMAGE_LAYOUT_UNDEFINED"
-    IMAGE_LAYOUT_GENERAL -> showString "IMAGE_LAYOUT_GENERAL"
-    IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL -> showString "IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL"
-    IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL"
-    IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL"
-    IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL -> showString "IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL"
-    IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL -> showString "IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL"
-    IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL -> showString "IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL"
-    IMAGE_LAYOUT_PREINITIALIZED -> showString "IMAGE_LAYOUT_PREINITIALIZED"
-    IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT -> showString "IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT"
-    IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV -> showString "IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV"
-    IMAGE_LAYOUT_SHARED_PRESENT_KHR -> showString "IMAGE_LAYOUT_SHARED_PRESENT_KHR"
-    IMAGE_LAYOUT_PRESENT_SRC_KHR -> showString "IMAGE_LAYOUT_PRESENT_SRC_KHR"
-    IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL -> showString "IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL"
-    IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL -> showString "IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL"
-    IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL"
-    IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL"
-    IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL"
-    IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL"
-    ImageLayout x -> showParen (p >= 11) (showString "ImageLayout " . showsPrec 11 x)
-
-instance Read ImageLayout where
-  readPrec = parens (choose [("IMAGE_LAYOUT_UNDEFINED", pure IMAGE_LAYOUT_UNDEFINED)
-                            , ("IMAGE_LAYOUT_GENERAL", pure IMAGE_LAYOUT_GENERAL)
-                            , ("IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", pure IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)
-                            , ("IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL)
-                            , ("IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL)
-                            , ("IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL", pure IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
-                            , ("IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL", pure IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL)
-                            , ("IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL", pure IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
-                            , ("IMAGE_LAYOUT_PREINITIALIZED", pure IMAGE_LAYOUT_PREINITIALIZED)
-                            , ("IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT", pure IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT)
-                            , ("IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV", pure IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV)
-                            , ("IMAGE_LAYOUT_SHARED_PRESENT_KHR", pure IMAGE_LAYOUT_SHARED_PRESENT_KHR)
-                            , ("IMAGE_LAYOUT_PRESENT_SRC_KHR", pure IMAGE_LAYOUT_PRESENT_SRC_KHR)
-                            , ("IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", pure IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL)
-                            , ("IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL", pure IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL)
-                            , ("IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL)
-                            , ("IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL)
-                            , ("IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL)
-                            , ("IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ImageLayout")
-                       v <- step readPrec
-                       pure (ImageLayout v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageLayout.hs-boot b/src/Graphics/Vulkan/Core10/Enums/ImageLayout.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageLayout.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageLayout  (ImageLayout) where
-
-
-
-data ImageLayout
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageTiling.hs b/src/Graphics/Vulkan/Core10/Enums/ImageTiling.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageTiling.hs
+++ /dev/null
@@ -1,72 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageTiling  (ImageTiling( IMAGE_TILING_OPTIMAL
-                                                             , IMAGE_TILING_LINEAR
-                                                             , IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
-                                                             , ..
-                                                             )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkImageTiling - Specifies the tiling arrangement of data in an image
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties'
-newtype ImageTiling = ImageTiling Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'IMAGE_TILING_OPTIMAL' specifies optimal tiling (texels are laid out in
--- an implementation-dependent arrangement, for more optimal memory
--- access).
-pattern IMAGE_TILING_OPTIMAL = ImageTiling 0
--- | 'IMAGE_TILING_LINEAR' specifies linear tiling (texels are laid out in
--- memory in row-major order, possibly with some padding on each row).
-pattern IMAGE_TILING_LINEAR = ImageTiling 1
--- | 'IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT' indicates that the image’s tiling
--- is defined by a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-drm-format-modifier Linux DRM format modifier>.
--- The modifier is specified at image creation with
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT'
--- or
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
--- and /can/ be queried with
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.getImageDrmFormatModifierPropertiesEXT'.
-pattern IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = ImageTiling 1000158000
-{-# complete IMAGE_TILING_OPTIMAL,
-             IMAGE_TILING_LINEAR,
-             IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT :: ImageTiling #-}
-
-instance Show ImageTiling where
-  showsPrec p = \case
-    IMAGE_TILING_OPTIMAL -> showString "IMAGE_TILING_OPTIMAL"
-    IMAGE_TILING_LINEAR -> showString "IMAGE_TILING_LINEAR"
-    IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT -> showString "IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT"
-    ImageTiling x -> showParen (p >= 11) (showString "ImageTiling " . showsPrec 11 x)
-
-instance Read ImageTiling where
-  readPrec = parens (choose [("IMAGE_TILING_OPTIMAL", pure IMAGE_TILING_OPTIMAL)
-                            , ("IMAGE_TILING_LINEAR", pure IMAGE_TILING_LINEAR)
-                            , ("IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT", pure IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ImageTiling")
-                       v <- step readPrec
-                       pure (ImageTiling v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageTiling.hs-boot b/src/Graphics/Vulkan/Core10/Enums/ImageTiling.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageTiling.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageTiling  (ImageTiling) where
-
-
-
-data ImageTiling
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageType.hs b/src/Graphics/Vulkan/Core10/Enums/ImageType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageType.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageType  (ImageType( IMAGE_TYPE_1D
-                                                         , IMAGE_TYPE_2D
-                                                         , IMAGE_TYPE_3D
-                                                         , ..
-                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkImageType - Specifies the type of an image object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties'
-newtype ImageType = ImageType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'IMAGE_TYPE_1D' specifies a one-dimensional image.
-pattern IMAGE_TYPE_1D = ImageType 0
--- | 'IMAGE_TYPE_2D' specifies a two-dimensional image.
-pattern IMAGE_TYPE_2D = ImageType 1
--- | 'IMAGE_TYPE_3D' specifies a three-dimensional image.
-pattern IMAGE_TYPE_3D = ImageType 2
-{-# complete IMAGE_TYPE_1D,
-             IMAGE_TYPE_2D,
-             IMAGE_TYPE_3D :: ImageType #-}
-
-instance Show ImageType where
-  showsPrec p = \case
-    IMAGE_TYPE_1D -> showString "IMAGE_TYPE_1D"
-    IMAGE_TYPE_2D -> showString "IMAGE_TYPE_2D"
-    IMAGE_TYPE_3D -> showString "IMAGE_TYPE_3D"
-    ImageType x -> showParen (p >= 11) (showString "ImageType " . showsPrec 11 x)
-
-instance Read ImageType where
-  readPrec = parens (choose [("IMAGE_TYPE_1D", pure IMAGE_TYPE_1D)
-                            , ("IMAGE_TYPE_2D", pure IMAGE_TYPE_2D)
-                            , ("IMAGE_TYPE_3D", pure IMAGE_TYPE_3D)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ImageType")
-                       v <- step readPrec
-                       pure (ImageType v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageType.hs-boot b/src/Graphics/Vulkan/Core10/Enums/ImageType.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageType.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageType  (ImageType) where
-
-
-
-data ImageType
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageUsageFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/ImageUsageFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageUsageFlagBits.hs
+++ /dev/null
@@ -1,129 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits  ( ImageUsageFlagBits( IMAGE_USAGE_TRANSFER_SRC_BIT
-                                                                            , IMAGE_USAGE_TRANSFER_DST_BIT
-                                                                            , IMAGE_USAGE_SAMPLED_BIT
-                                                                            , IMAGE_USAGE_STORAGE_BIT
-                                                                            , IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-                                                                            , IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-                                                                            , IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
-                                                                            , IMAGE_USAGE_INPUT_ATTACHMENT_BIT
-                                                                            , IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
-                                                                            , IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV
-                                                                            , ..
-                                                                            )
-                                                        , ImageUsageFlags
-                                                        ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkImageUsageFlagBits - Bitmask specifying intended usage of an image
---
--- = See Also
---
--- 'ImageUsageFlags'
-newtype ImageUsageFlagBits = ImageUsageFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'IMAGE_USAGE_TRANSFER_SRC_BIT' specifies that the image /can/ be used as
--- the source of a transfer command.
-pattern IMAGE_USAGE_TRANSFER_SRC_BIT = ImageUsageFlagBits 0x00000001
--- | 'IMAGE_USAGE_TRANSFER_DST_BIT' specifies that the image /can/ be used as
--- the destination of a transfer command.
-pattern IMAGE_USAGE_TRANSFER_DST_BIT = ImageUsageFlagBits 0x00000002
--- | 'IMAGE_USAGE_SAMPLED_BIT' specifies that the image /can/ be used to
--- create a 'Graphics.Vulkan.Core10.Handles.ImageView' suitable for
--- occupying a 'Graphics.Vulkan.Core10.Handles.DescriptorSet' slot either
--- of type
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
--- or
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
--- and be sampled by a shader.
-pattern IMAGE_USAGE_SAMPLED_BIT = ImageUsageFlagBits 0x00000004
--- | 'IMAGE_USAGE_STORAGE_BIT' specifies that the image /can/ be used to
--- create a 'Graphics.Vulkan.Core10.Handles.ImageView' suitable for
--- occupying a 'Graphics.Vulkan.Core10.Handles.DescriptorSet' slot of type
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'.
-pattern IMAGE_USAGE_STORAGE_BIT = ImageUsageFlagBits 0x00000008
--- | 'IMAGE_USAGE_COLOR_ATTACHMENT_BIT' specifies that the image /can/ be
--- used to create a 'Graphics.Vulkan.Core10.Handles.ImageView' suitable for
--- use as a color or resolve attachment in a
--- 'Graphics.Vulkan.Core10.Handles.Framebuffer'.
-pattern IMAGE_USAGE_COLOR_ATTACHMENT_BIT = ImageUsageFlagBits 0x00000010
--- | 'IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' specifies that the image
--- /can/ be used to create a 'Graphics.Vulkan.Core10.Handles.ImageView'
--- suitable for use as a depth\/stencil or depth\/stencil resolve
--- attachment in a 'Graphics.Vulkan.Core10.Handles.Framebuffer'.
-pattern IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = ImageUsageFlagBits 0x00000020
--- | 'IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT' specifies that the memory bound
--- to this image will have been allocated with the
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT'
--- (see
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory>
--- for more detail). This bit /can/ be set for any image that /can/ be used
--- to create a 'Graphics.Vulkan.Core10.Handles.ImageView' suitable for use
--- as a color, resolve, depth\/stencil, or input attachment.
-pattern IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = ImageUsageFlagBits 0x00000040
--- | 'IMAGE_USAGE_INPUT_ATTACHMENT_BIT' specifies that the image /can/ be
--- used to create a 'Graphics.Vulkan.Core10.Handles.ImageView' suitable for
--- occupying 'Graphics.Vulkan.Core10.Handles.DescriptorSet' slot of type
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT';
--- be read from a shader as an input attachment; and be used as an input
--- attachment in a framebuffer.
-pattern IMAGE_USAGE_INPUT_ATTACHMENT_BIT = ImageUsageFlagBits 0x00000080
--- | 'IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT' specifies that the image
--- /can/ be used to create a 'Graphics.Vulkan.Core10.Handles.ImageView'
--- suitable for use as a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops fragment density map image>.
-pattern IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = ImageUsageFlagBits 0x00000200
--- | 'IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV' specifies that the image /can/
--- be used to create a 'Graphics.Vulkan.Core10.Handles.ImageView' suitable
--- for use as a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image shading rate image>.
-pattern IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = ImageUsageFlagBits 0x00000100
-
-type ImageUsageFlags = ImageUsageFlagBits
-
-instance Show ImageUsageFlagBits where
-  showsPrec p = \case
-    IMAGE_USAGE_TRANSFER_SRC_BIT -> showString "IMAGE_USAGE_TRANSFER_SRC_BIT"
-    IMAGE_USAGE_TRANSFER_DST_BIT -> showString "IMAGE_USAGE_TRANSFER_DST_BIT"
-    IMAGE_USAGE_SAMPLED_BIT -> showString "IMAGE_USAGE_SAMPLED_BIT"
-    IMAGE_USAGE_STORAGE_BIT -> showString "IMAGE_USAGE_STORAGE_BIT"
-    IMAGE_USAGE_COLOR_ATTACHMENT_BIT -> showString "IMAGE_USAGE_COLOR_ATTACHMENT_BIT"
-    IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT -> showString "IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"
-    IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT -> showString "IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"
-    IMAGE_USAGE_INPUT_ATTACHMENT_BIT -> showString "IMAGE_USAGE_INPUT_ATTACHMENT_BIT"
-    IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT -> showString "IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT"
-    IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV -> showString "IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV"
-    ImageUsageFlagBits x -> showParen (p >= 11) (showString "ImageUsageFlagBits 0x" . showHex x)
-
-instance Read ImageUsageFlagBits where
-  readPrec = parens (choose [("IMAGE_USAGE_TRANSFER_SRC_BIT", pure IMAGE_USAGE_TRANSFER_SRC_BIT)
-                            , ("IMAGE_USAGE_TRANSFER_DST_BIT", pure IMAGE_USAGE_TRANSFER_DST_BIT)
-                            , ("IMAGE_USAGE_SAMPLED_BIT", pure IMAGE_USAGE_SAMPLED_BIT)
-                            , ("IMAGE_USAGE_STORAGE_BIT", pure IMAGE_USAGE_STORAGE_BIT)
-                            , ("IMAGE_USAGE_COLOR_ATTACHMENT_BIT", pure IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
-                            , ("IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", pure IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
-                            , ("IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT", pure IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
-                            , ("IMAGE_USAGE_INPUT_ATTACHMENT_BIT", pure IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
-                            , ("IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT", pure IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT)
-                            , ("IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV", pure IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ImageUsageFlagBits")
-                       v <- step readPrec
-                       pure (ImageUsageFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageUsageFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/ImageUsageFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageUsageFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits  ( ImageUsageFlagBits
-                                                        , ImageUsageFlags
-                                                        ) where
-
-
-
-data ImageUsageFlagBits
-
-type ImageUsageFlags = ImageUsageFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageViewCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/ImageViewCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageViewCreateFlagBits.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits  ( ImageViewCreateFlagBits( IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT
-                                                                                      , ..
-                                                                                      )
-                                                             , ImageViewCreateFlags
-                                                             ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkImageViewCreateFlagBits - Bitmask specifying additional parameters of
--- an image view
---
--- = See Also
---
--- 'ImageViewCreateFlags'
-newtype ImageViewCreateFlagBits = ImageViewCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT' prohibits the
--- implementation from accessing the fragment density map by the host
--- during 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass'
--- as the contents are expected to change after recording
-pattern IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT = ImageViewCreateFlagBits 0x00000001
-
-type ImageViewCreateFlags = ImageViewCreateFlagBits
-
-instance Show ImageViewCreateFlagBits where
-  showsPrec p = \case
-    IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT -> showString "IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT"
-    ImageViewCreateFlagBits x -> showParen (p >= 11) (showString "ImageViewCreateFlagBits 0x" . showHex x)
-
-instance Read ImageViewCreateFlagBits where
-  readPrec = parens (choose [("IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT", pure IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ImageViewCreateFlagBits")
-                       v <- step readPrec
-                       pure (ImageViewCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ImageViewType.hs b/src/Graphics/Vulkan/Core10/Enums/ImageViewType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ImageViewType.hs
+++ /dev/null
@@ -1,91 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ImageViewType  (ImageViewType( IMAGE_VIEW_TYPE_1D
-                                                                 , IMAGE_VIEW_TYPE_2D
-                                                                 , IMAGE_VIEW_TYPE_3D
-                                                                 , IMAGE_VIEW_TYPE_CUBE
-                                                                 , IMAGE_VIEW_TYPE_1D_ARRAY
-                                                                 , IMAGE_VIEW_TYPE_2D_ARRAY
-                                                                 , IMAGE_VIEW_TYPE_CUBE_ARRAY
-                                                                 , ..
-                                                                 )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkImageViewType - Image view types
---
--- = 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-compatibility image view compatibility table>
--- for 'Graphics.Vulkan.Core10.ImageView.createImageView'. This table also
--- shows which SPIR-V @OpTypeImage@ @Dim@ and @Arrayed@ parameters
--- correspond to each image view type.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.ImageView.ImageViewCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.PhysicalDeviceImageViewImageFormatInfoEXT'
-newtype ImageViewType = ImageViewType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_1D"
-pattern IMAGE_VIEW_TYPE_1D = ImageViewType 0
--- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_2D"
-pattern IMAGE_VIEW_TYPE_2D = ImageViewType 1
--- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_3D"
-pattern IMAGE_VIEW_TYPE_3D = ImageViewType 2
--- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_CUBE"
-pattern IMAGE_VIEW_TYPE_CUBE = ImageViewType 3
--- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_1D_ARRAY"
-pattern IMAGE_VIEW_TYPE_1D_ARRAY = ImageViewType 4
--- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_2D_ARRAY"
-pattern IMAGE_VIEW_TYPE_2D_ARRAY = ImageViewType 5
--- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY"
-pattern IMAGE_VIEW_TYPE_CUBE_ARRAY = ImageViewType 6
-{-# complete IMAGE_VIEW_TYPE_1D,
-             IMAGE_VIEW_TYPE_2D,
-             IMAGE_VIEW_TYPE_3D,
-             IMAGE_VIEW_TYPE_CUBE,
-             IMAGE_VIEW_TYPE_1D_ARRAY,
-             IMAGE_VIEW_TYPE_2D_ARRAY,
-             IMAGE_VIEW_TYPE_CUBE_ARRAY :: ImageViewType #-}
-
-instance Show ImageViewType where
-  showsPrec p = \case
-    IMAGE_VIEW_TYPE_1D -> showString "IMAGE_VIEW_TYPE_1D"
-    IMAGE_VIEW_TYPE_2D -> showString "IMAGE_VIEW_TYPE_2D"
-    IMAGE_VIEW_TYPE_3D -> showString "IMAGE_VIEW_TYPE_3D"
-    IMAGE_VIEW_TYPE_CUBE -> showString "IMAGE_VIEW_TYPE_CUBE"
-    IMAGE_VIEW_TYPE_1D_ARRAY -> showString "IMAGE_VIEW_TYPE_1D_ARRAY"
-    IMAGE_VIEW_TYPE_2D_ARRAY -> showString "IMAGE_VIEW_TYPE_2D_ARRAY"
-    IMAGE_VIEW_TYPE_CUBE_ARRAY -> showString "IMAGE_VIEW_TYPE_CUBE_ARRAY"
-    ImageViewType x -> showParen (p >= 11) (showString "ImageViewType " . showsPrec 11 x)
-
-instance Read ImageViewType where
-  readPrec = parens (choose [("IMAGE_VIEW_TYPE_1D", pure IMAGE_VIEW_TYPE_1D)
-                            , ("IMAGE_VIEW_TYPE_2D", pure IMAGE_VIEW_TYPE_2D)
-                            , ("IMAGE_VIEW_TYPE_3D", pure IMAGE_VIEW_TYPE_3D)
-                            , ("IMAGE_VIEW_TYPE_CUBE", pure IMAGE_VIEW_TYPE_CUBE)
-                            , ("IMAGE_VIEW_TYPE_1D_ARRAY", pure IMAGE_VIEW_TYPE_1D_ARRAY)
-                            , ("IMAGE_VIEW_TYPE_2D_ARRAY", pure IMAGE_VIEW_TYPE_2D_ARRAY)
-                            , ("IMAGE_VIEW_TYPE_CUBE_ARRAY", pure IMAGE_VIEW_TYPE_CUBE_ARRAY)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ImageViewType")
-                       v <- step readPrec
-                       pure (ImageViewType v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/IndexType.hs b/src/Graphics/Vulkan/Core10/Enums/IndexType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/IndexType.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.IndexType  (IndexType( INDEX_TYPE_UINT16
-                                                         , INDEX_TYPE_UINT32
-                                                         , INDEX_TYPE_UINT8_EXT
-                                                         , INDEX_TYPE_NONE_KHR
-                                                         , ..
-                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkIndexType - Type of index buffer indices
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateGeometryTypeInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryTrianglesDataKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.BindIndexBufferIndirectCommandNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'
-newtype IndexType = IndexType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'INDEX_TYPE_UINT16' specifies that indices are 16-bit unsigned integer
--- values.
-pattern INDEX_TYPE_UINT16 = IndexType 0
--- | 'INDEX_TYPE_UINT32' specifies that indices are 32-bit unsigned integer
--- values.
-pattern INDEX_TYPE_UINT32 = IndexType 1
--- | 'INDEX_TYPE_UINT8_EXT' specifies that indices are 8-bit unsigned integer
--- values.
-pattern INDEX_TYPE_UINT8_EXT = IndexType 1000265000
--- | 'INDEX_TYPE_NONE_KHR' specifies that no indices are provided.
-pattern INDEX_TYPE_NONE_KHR = IndexType 1000165000
-{-# complete INDEX_TYPE_UINT16,
-             INDEX_TYPE_UINT32,
-             INDEX_TYPE_UINT8_EXT,
-             INDEX_TYPE_NONE_KHR :: IndexType #-}
-
-instance Show IndexType where
-  showsPrec p = \case
-    INDEX_TYPE_UINT16 -> showString "INDEX_TYPE_UINT16"
-    INDEX_TYPE_UINT32 -> showString "INDEX_TYPE_UINT32"
-    INDEX_TYPE_UINT8_EXT -> showString "INDEX_TYPE_UINT8_EXT"
-    INDEX_TYPE_NONE_KHR -> showString "INDEX_TYPE_NONE_KHR"
-    IndexType x -> showParen (p >= 11) (showString "IndexType " . showsPrec 11 x)
-
-instance Read IndexType where
-  readPrec = parens (choose [("INDEX_TYPE_UINT16", pure INDEX_TYPE_UINT16)
-                            , ("INDEX_TYPE_UINT32", pure INDEX_TYPE_UINT32)
-                            , ("INDEX_TYPE_UINT8_EXT", pure INDEX_TYPE_UINT8_EXT)
-                            , ("INDEX_TYPE_NONE_KHR", pure INDEX_TYPE_NONE_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "IndexType")
-                       v <- step readPrec
-                       pure (IndexType v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/IndexType.hs-boot b/src/Graphics/Vulkan/Core10/Enums/IndexType.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/IndexType.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.IndexType  (IndexType) where
-
-
-
-data IndexType
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/InstanceCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/InstanceCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/InstanceCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.InstanceCreateFlags  (InstanceCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkInstanceCreateFlags - Reserved for future use
---
--- = Description
---
--- 'InstanceCreateFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.InstanceCreateInfo'
-newtype InstanceCreateFlags = InstanceCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show InstanceCreateFlags where
-  showsPrec p = \case
-    InstanceCreateFlags x -> showParen (p >= 11) (showString "InstanceCreateFlags 0x" . showHex x)
-
-instance Read InstanceCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "InstanceCreateFlags")
-                       v <- step readPrec
-                       pure (InstanceCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/InternalAllocationType.hs b/src/Graphics/Vulkan/Core10/Enums/InternalAllocationType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/InternalAllocationType.hs
+++ /dev/null
@@ -1,46 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.InternalAllocationType  (InternalAllocationType( INTERNAL_ALLOCATION_TYPE_EXECUTABLE
-                                                                                   , ..
-                                                                                   )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkInternalAllocationType - Allocation type
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkInternalAllocationNotification',
--- 'Graphics.Vulkan.Core10.FuncPointers.PFN_vkInternalFreeNotification'
-newtype InternalAllocationType = InternalAllocationType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'INTERNAL_ALLOCATION_TYPE_EXECUTABLE' specifies that the allocation is
--- intended for execution by the host.
-pattern INTERNAL_ALLOCATION_TYPE_EXECUTABLE = InternalAllocationType 0
-{-# complete INTERNAL_ALLOCATION_TYPE_EXECUTABLE :: InternalAllocationType #-}
-
-instance Show InternalAllocationType where
-  showsPrec p = \case
-    INTERNAL_ALLOCATION_TYPE_EXECUTABLE -> showString "INTERNAL_ALLOCATION_TYPE_EXECUTABLE"
-    InternalAllocationType x -> showParen (p >= 11) (showString "InternalAllocationType " . showsPrec 11 x)
-
-instance Read InternalAllocationType where
-  readPrec = parens (choose [("INTERNAL_ALLOCATION_TYPE_EXECUTABLE", pure INTERNAL_ALLOCATION_TYPE_EXECUTABLE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "InternalAllocationType")
-                       v <- step readPrec
-                       pure (InternalAllocationType v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/LogicOp.hs b/src/Graphics/Vulkan/Core10/Enums/LogicOp.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/LogicOp.hs
+++ /dev/null
@@ -1,195 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.LogicOp  (LogicOp( LOGIC_OP_CLEAR
-                                                     , LOGIC_OP_AND
-                                                     , LOGIC_OP_AND_REVERSE
-                                                     , LOGIC_OP_COPY
-                                                     , LOGIC_OP_AND_INVERTED
-                                                     , LOGIC_OP_NO_OP
-                                                     , LOGIC_OP_XOR
-                                                     , LOGIC_OP_OR
-                                                     , LOGIC_OP_NOR
-                                                     , LOGIC_OP_EQUIVALENT
-                                                     , LOGIC_OP_INVERT
-                                                     , LOGIC_OP_OR_REVERSE
-                                                     , LOGIC_OP_COPY_INVERTED
-                                                     , LOGIC_OP_OR_INVERTED
-                                                     , LOGIC_OP_NAND
-                                                     , LOGIC_OP_SET
-                                                     , ..
-                                                     )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkLogicOp - Framebuffer logical operations
---
--- = Description
---
--- The logical operations supported by Vulkan are summarized in the
--- following table in which
---
--- -   ¬ is bitwise invert,
---
--- -   ∧ is bitwise and,
---
--- -   ∨ is bitwise or,
---
--- -   ⊕ is bitwise exclusive or,
---
--- -   s is the fragment’s Rs0, Gs0, Bs0 or As0 component value for the
---     fragment output corresponding to the color attachment being updated,
---     and
---
--- -   d is the color attachment’s R, G, B or A component value:
---
--- +-----------------------------------+-----------------------------------+
--- | Mode                              | Operation                         |
--- +===================================+===================================+
--- | 'LOGIC_OP_CLEAR'                  | 0                                 |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_AND'                    | s ∧ d                             |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_AND_REVERSE'            | s ∧ ¬ d                           |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_COPY'                   | s                                 |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_AND_INVERTED'           | ¬ s ∧ d                           |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_NO_OP'                  | d                                 |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_XOR'                    | s ⊕ d                             |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_OR'                     | s ∨ d                             |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_NOR'                    | ¬ (s ∨ d)                         |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_EQUIVALENT'             | ¬ (s ⊕ d)                         |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_INVERT'                 | ¬ d                               |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_OR_REVERSE'             | s ∨ ¬ d                           |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_COPY_INVERTED'          | ¬ s                               |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_OR_INVERTED'            | ¬ s ∨ d                           |
--- +-----------------------------------+-----------------------------------+
--- | 'LOGIC_OP_NAND'                   | ¬ (s ∧ d)                         |
--- +-----------------------------------+-----------------------------------+
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendoperations Blend Operations>.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'
-newtype LogicOp = LogicOp Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_CLEAR"
-pattern LOGIC_OP_CLEAR = LogicOp 0
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND"
-pattern LOGIC_OP_AND = LogicOp 1
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND_REVERSE"
-pattern LOGIC_OP_AND_REVERSE = LogicOp 2
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_COPY"
-pattern LOGIC_OP_COPY = LogicOp 3
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND_INVERTED"
-pattern LOGIC_OP_AND_INVERTED = LogicOp 4
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NO_OP"
-pattern LOGIC_OP_NO_OP = LogicOp 5
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_XOR"
-pattern LOGIC_OP_XOR = LogicOp 6
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR"
-pattern LOGIC_OP_OR = LogicOp 7
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NOR"
-pattern LOGIC_OP_NOR = LogicOp 8
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_EQUIVALENT"
-pattern LOGIC_OP_EQUIVALENT = LogicOp 9
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_INVERT"
-pattern LOGIC_OP_INVERT = LogicOp 10
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR_REVERSE"
-pattern LOGIC_OP_OR_REVERSE = LogicOp 11
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_COPY_INVERTED"
-pattern LOGIC_OP_COPY_INVERTED = LogicOp 12
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR_INVERTED"
-pattern LOGIC_OP_OR_INVERTED = LogicOp 13
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NAND"
-pattern LOGIC_OP_NAND = LogicOp 14
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_SET"
-pattern LOGIC_OP_SET = LogicOp 15
-{-# complete LOGIC_OP_CLEAR,
-             LOGIC_OP_AND,
-             LOGIC_OP_AND_REVERSE,
-             LOGIC_OP_COPY,
-             LOGIC_OP_AND_INVERTED,
-             LOGIC_OP_NO_OP,
-             LOGIC_OP_XOR,
-             LOGIC_OP_OR,
-             LOGIC_OP_NOR,
-             LOGIC_OP_EQUIVALENT,
-             LOGIC_OP_INVERT,
-             LOGIC_OP_OR_REVERSE,
-             LOGIC_OP_COPY_INVERTED,
-             LOGIC_OP_OR_INVERTED,
-             LOGIC_OP_NAND,
-             LOGIC_OP_SET :: LogicOp #-}
-
-instance Show LogicOp where
-  showsPrec p = \case
-    LOGIC_OP_CLEAR -> showString "LOGIC_OP_CLEAR"
-    LOGIC_OP_AND -> showString "LOGIC_OP_AND"
-    LOGIC_OP_AND_REVERSE -> showString "LOGIC_OP_AND_REVERSE"
-    LOGIC_OP_COPY -> showString "LOGIC_OP_COPY"
-    LOGIC_OP_AND_INVERTED -> showString "LOGIC_OP_AND_INVERTED"
-    LOGIC_OP_NO_OP -> showString "LOGIC_OP_NO_OP"
-    LOGIC_OP_XOR -> showString "LOGIC_OP_XOR"
-    LOGIC_OP_OR -> showString "LOGIC_OP_OR"
-    LOGIC_OP_NOR -> showString "LOGIC_OP_NOR"
-    LOGIC_OP_EQUIVALENT -> showString "LOGIC_OP_EQUIVALENT"
-    LOGIC_OP_INVERT -> showString "LOGIC_OP_INVERT"
-    LOGIC_OP_OR_REVERSE -> showString "LOGIC_OP_OR_REVERSE"
-    LOGIC_OP_COPY_INVERTED -> showString "LOGIC_OP_COPY_INVERTED"
-    LOGIC_OP_OR_INVERTED -> showString "LOGIC_OP_OR_INVERTED"
-    LOGIC_OP_NAND -> showString "LOGIC_OP_NAND"
-    LOGIC_OP_SET -> showString "LOGIC_OP_SET"
-    LogicOp x -> showParen (p >= 11) (showString "LogicOp " . showsPrec 11 x)
-
-instance Read LogicOp where
-  readPrec = parens (choose [("LOGIC_OP_CLEAR", pure LOGIC_OP_CLEAR)
-                            , ("LOGIC_OP_AND", pure LOGIC_OP_AND)
-                            , ("LOGIC_OP_AND_REVERSE", pure LOGIC_OP_AND_REVERSE)
-                            , ("LOGIC_OP_COPY", pure LOGIC_OP_COPY)
-                            , ("LOGIC_OP_AND_INVERTED", pure LOGIC_OP_AND_INVERTED)
-                            , ("LOGIC_OP_NO_OP", pure LOGIC_OP_NO_OP)
-                            , ("LOGIC_OP_XOR", pure LOGIC_OP_XOR)
-                            , ("LOGIC_OP_OR", pure LOGIC_OP_OR)
-                            , ("LOGIC_OP_NOR", pure LOGIC_OP_NOR)
-                            , ("LOGIC_OP_EQUIVALENT", pure LOGIC_OP_EQUIVALENT)
-                            , ("LOGIC_OP_INVERT", pure LOGIC_OP_INVERT)
-                            , ("LOGIC_OP_OR_REVERSE", pure LOGIC_OP_OR_REVERSE)
-                            , ("LOGIC_OP_COPY_INVERTED", pure LOGIC_OP_COPY_INVERTED)
-                            , ("LOGIC_OP_OR_INVERTED", pure LOGIC_OP_OR_INVERTED)
-                            , ("LOGIC_OP_NAND", pure LOGIC_OP_NAND)
-                            , ("LOGIC_OP_SET", pure LOGIC_OP_SET)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "LogicOp")
-                       v <- step readPrec
-                       pure (LogicOp v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/MemoryHeapFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/MemoryHeapFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/MemoryHeapFlagBits.hs
+++ /dev/null
@@ -1,60 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits  ( MemoryHeapFlagBits( MEMORY_HEAP_DEVICE_LOCAL_BIT
-                                                                            , MEMORY_HEAP_MULTI_INSTANCE_BIT
-                                                                            , ..
-                                                                            )
-                                                        , MemoryHeapFlags
-                                                        ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkMemoryHeapFlagBits - Bitmask specifying attribute flags for a heap
---
--- = See Also
---
--- 'MemoryHeapFlags'
-newtype MemoryHeapFlagBits = MemoryHeapFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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 MEMORY_HEAP_DEVICE_LOCAL_BIT = MemoryHeapFlagBits 0x00000001
--- | 'MEMORY_HEAP_MULTI_INSTANCE_BIT' specifies that in a logical device
--- representing more than one physical device, there is a per-physical
--- device instance of the heap memory. By default, an allocation from such
--- a heap will be replicated to each physical device’s instance of the
--- heap.
-pattern MEMORY_HEAP_MULTI_INSTANCE_BIT = MemoryHeapFlagBits 0x00000002
-
-type MemoryHeapFlags = MemoryHeapFlagBits
-
-instance Show MemoryHeapFlagBits where
-  showsPrec p = \case
-    MEMORY_HEAP_DEVICE_LOCAL_BIT -> showString "MEMORY_HEAP_DEVICE_LOCAL_BIT"
-    MEMORY_HEAP_MULTI_INSTANCE_BIT -> showString "MEMORY_HEAP_MULTI_INSTANCE_BIT"
-    MemoryHeapFlagBits x -> showParen (p >= 11) (showString "MemoryHeapFlagBits 0x" . showHex x)
-
-instance Read MemoryHeapFlagBits where
-  readPrec = parens (choose [("MEMORY_HEAP_DEVICE_LOCAL_BIT", pure MEMORY_HEAP_DEVICE_LOCAL_BIT)
-                            , ("MEMORY_HEAP_MULTI_INSTANCE_BIT", pure MEMORY_HEAP_MULTI_INSTANCE_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "MemoryHeapFlagBits")
-                       v <- step readPrec
-                       pure (MemoryHeapFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/MemoryMapFlags.hs b/src/Graphics/Vulkan/Core10/Enums/MemoryMapFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/MemoryMapFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.MemoryMapFlags  (MemoryMapFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkMemoryMapFlags - Reserved for future use
---
--- = Description
---
--- 'MemoryMapFlags' is a bitmask type for setting a mask, but is currently
--- reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Memory.mapMemory'
-newtype MemoryMapFlags = MemoryMapFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show MemoryMapFlags where
-  showsPrec p = \case
-    MemoryMapFlags x -> showParen (p >= 11) (showString "MemoryMapFlags 0x" . showHex x)
-
-instance Read MemoryMapFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "MemoryMapFlags")
-                       v <- step readPrec
-                       pure (MemoryMapFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/MemoryMapFlags.hs-boot b/src/Graphics/Vulkan/Core10/Enums/MemoryMapFlags.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/MemoryMapFlags.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.MemoryMapFlags  (MemoryMapFlags) where
-
-
-
-data MemoryMapFlags
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/MemoryPropertyFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/MemoryPropertyFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/MemoryPropertyFlagBits.hs
+++ /dev/null
@@ -1,136 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits  ( MemoryPropertyFlagBits( MEMORY_PROPERTY_DEVICE_LOCAL_BIT
-                                                                                    , MEMORY_PROPERTY_HOST_VISIBLE_BIT
-                                                                                    , MEMORY_PROPERTY_HOST_COHERENT_BIT
-                                                                                    , MEMORY_PROPERTY_HOST_CACHED_BIT
-                                                                                    , MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
-                                                                                    , MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
-                                                                                    , MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
-                                                                                    , MEMORY_PROPERTY_PROTECTED_BIT
-                                                                                    , ..
-                                                                                    )
-                                                            , MemoryPropertyFlags
-                                                            ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkMemoryPropertyFlagBits - Bitmask specifying properties for a memory
--- type
---
--- = Description
---
--- For any memory allocated with both the
--- 'MEMORY_PROPERTY_HOST_COHERENT_BIT' and the
--- 'MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD', host or device accesses also
--- perform automatic memory domain transfer operations, such that writes
--- are always automatically available and visible to both host and device
--- memory domains.
---
--- Note
---
--- Device coherence is a useful property for certain debugging use cases
--- (e.g. crash analysis, where performing separate coherence actions could
--- mean values are not reported correctly). However, device coherent
--- accesses may be slower than equivalent accesses without device
--- coherence, particularly if they are also device uncached. For device
--- uncached memory in particular, repeated accesses to the same or
--- neighbouring memory locations over a short time period (e.g. within a
--- frame) may be slower than it would be for the equivalent cached memory
--- type. As such, it is generally inadvisable to use device coherent or
--- device uncached memory except when really needed.
---
--- = See Also
---
--- 'MemoryPropertyFlags'
-newtype MemoryPropertyFlagBits = MemoryPropertyFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_DEVICE_LOCAL_BIT'
--- set.
-pattern MEMORY_PROPERTY_DEVICE_LOCAL_BIT = MemoryPropertyFlagBits 0x00000001
--- | 'MEMORY_PROPERTY_HOST_VISIBLE_BIT' bit specifies that memory allocated
--- with this type /can/ be mapped for host access using
--- 'Graphics.Vulkan.Core10.Memory.mapMemory'.
-pattern MEMORY_PROPERTY_HOST_VISIBLE_BIT = MemoryPropertyFlagBits 0x00000002
--- | 'MEMORY_PROPERTY_HOST_COHERENT_BIT' bit specifies that the host cache
--- management commands
--- 'Graphics.Vulkan.Core10.Memory.flushMappedMemoryRanges' and
--- 'Graphics.Vulkan.Core10.Memory.invalidateMappedMemoryRanges' are not
--- needed to flush host writes to the device or make device writes visible
--- to the host, respectively.
-pattern MEMORY_PROPERTY_HOST_COHERENT_BIT = MemoryPropertyFlagBits 0x00000004
--- | '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 MEMORY_PROPERTY_HOST_CACHED_BIT = MemoryPropertyFlagBits 0x00000008
--- | 'MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT' bit specifies that the memory
--- type only allows device access to the memory. Memory types /must/ not
--- have both 'MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT' and
--- 'MEMORY_PROPERTY_HOST_VISIBLE_BIT' set. Additionally, the object’s
--- backing memory /may/ be provided by the implementation lazily as
--- specified in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-lazy_allocation Lazily Allocated Memory>.
-pattern MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = MemoryPropertyFlagBits 0x00000010
--- | 'MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD' bit specifies that memory
--- allocated with this type is not cached on the device. Uncached device
--- memory is always device coherent.
-pattern MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD = MemoryPropertyFlagBits 0x00000080
--- | 'MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD' bit specifies that device
--- accesses to allocations of this memory type are automatically made
--- available and visible.
-pattern MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD = MemoryPropertyFlagBits 0x00000040
--- | 'MEMORY_PROPERTY_PROTECTED_BIT' bit specifies that the memory type only
--- allows device access to the memory, and allows protected queue
--- operations to access the memory. Memory types /must/ not have
--- 'MEMORY_PROPERTY_PROTECTED_BIT' set and any of
--- 'MEMORY_PROPERTY_HOST_VISIBLE_BIT' set, or
--- 'MEMORY_PROPERTY_HOST_COHERENT_BIT' set, or
--- 'MEMORY_PROPERTY_HOST_CACHED_BIT' set.
-pattern MEMORY_PROPERTY_PROTECTED_BIT = MemoryPropertyFlagBits 0x00000020
-
-type MemoryPropertyFlags = MemoryPropertyFlagBits
-
-instance Show MemoryPropertyFlagBits where
-  showsPrec p = \case
-    MEMORY_PROPERTY_DEVICE_LOCAL_BIT -> showString "MEMORY_PROPERTY_DEVICE_LOCAL_BIT"
-    MEMORY_PROPERTY_HOST_VISIBLE_BIT -> showString "MEMORY_PROPERTY_HOST_VISIBLE_BIT"
-    MEMORY_PROPERTY_HOST_COHERENT_BIT -> showString "MEMORY_PROPERTY_HOST_COHERENT_BIT"
-    MEMORY_PROPERTY_HOST_CACHED_BIT -> showString "MEMORY_PROPERTY_HOST_CACHED_BIT"
-    MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT -> showString "MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"
-    MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD -> showString "MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD"
-    MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD -> showString "MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD"
-    MEMORY_PROPERTY_PROTECTED_BIT -> showString "MEMORY_PROPERTY_PROTECTED_BIT"
-    MemoryPropertyFlagBits x -> showParen (p >= 11) (showString "MemoryPropertyFlagBits 0x" . showHex x)
-
-instance Read MemoryPropertyFlagBits where
-  readPrec = parens (choose [("MEMORY_PROPERTY_DEVICE_LOCAL_BIT", pure MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
-                            , ("MEMORY_PROPERTY_HOST_VISIBLE_BIT", pure MEMORY_PROPERTY_HOST_VISIBLE_BIT)
-                            , ("MEMORY_PROPERTY_HOST_COHERENT_BIT", pure MEMORY_PROPERTY_HOST_COHERENT_BIT)
-                            , ("MEMORY_PROPERTY_HOST_CACHED_BIT", pure MEMORY_PROPERTY_HOST_CACHED_BIT)
-                            , ("MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT", pure MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
-                            , ("MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD", pure MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD)
-                            , ("MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD", pure MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD)
-                            , ("MEMORY_PROPERTY_PROTECTED_BIT", pure MEMORY_PROPERTY_PROTECTED_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "MemoryPropertyFlagBits")
-                       v <- step readPrec
-                       pure (MemoryPropertyFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ObjectType.hs b/src/Graphics/Vulkan/Core10/Enums/ObjectType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ObjectType.hs
+++ /dev/null
@@ -1,359 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ObjectType  (ObjectType( OBJECT_TYPE_UNKNOWN
-                                                           , OBJECT_TYPE_INSTANCE
-                                                           , OBJECT_TYPE_PHYSICAL_DEVICE
-                                                           , OBJECT_TYPE_DEVICE
-                                                           , OBJECT_TYPE_QUEUE
-                                                           , OBJECT_TYPE_SEMAPHORE
-                                                           , OBJECT_TYPE_COMMAND_BUFFER
-                                                           , OBJECT_TYPE_FENCE
-                                                           , OBJECT_TYPE_DEVICE_MEMORY
-                                                           , OBJECT_TYPE_BUFFER
-                                                           , OBJECT_TYPE_IMAGE
-                                                           , OBJECT_TYPE_EVENT
-                                                           , OBJECT_TYPE_QUERY_POOL
-                                                           , OBJECT_TYPE_BUFFER_VIEW
-                                                           , OBJECT_TYPE_IMAGE_VIEW
-                                                           , OBJECT_TYPE_SHADER_MODULE
-                                                           , OBJECT_TYPE_PIPELINE_CACHE
-                                                           , OBJECT_TYPE_PIPELINE_LAYOUT
-                                                           , OBJECT_TYPE_RENDER_PASS
-                                                           , OBJECT_TYPE_PIPELINE
-                                                           , OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT
-                                                           , OBJECT_TYPE_SAMPLER
-                                                           , OBJECT_TYPE_DESCRIPTOR_POOL
-                                                           , OBJECT_TYPE_DESCRIPTOR_SET
-                                                           , OBJECT_TYPE_FRAMEBUFFER
-                                                           , OBJECT_TYPE_COMMAND_POOL
-                                                           , OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV
-                                                           , OBJECT_TYPE_DEFERRED_OPERATION_KHR
-                                                           , OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL
-                                                           , OBJECT_TYPE_VALIDATION_CACHE_EXT
-                                                           , OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR
-                                                           , OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT
-                                                           , OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT
-                                                           , OBJECT_TYPE_DISPLAY_MODE_KHR
-                                                           , OBJECT_TYPE_DISPLAY_KHR
-                                                           , OBJECT_TYPE_SWAPCHAIN_KHR
-                                                           , OBJECT_TYPE_SURFACE_KHR
-                                                           , OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE
-                                                           , OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION
-                                                           , ..
-                                                           )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkObjectType - Specify an enumeration to track object handle types
---
--- = Description
---
--- \'
---
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'ObjectType'                                  | Vulkan Handle Type                                                 |
--- +===============================================+====================================================================+
--- | 'OBJECT_TYPE_UNKNOWN'                         | Unknown\/Undefined Handle                                          |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_INSTANCE'                        | 'Graphics.Vulkan.Core10.Handles.Instance'                          |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_PHYSICAL_DEVICE'                 | 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'                    |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_DEVICE'                          | 'Graphics.Vulkan.Core10.Handles.Device'                            |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_QUEUE'                           | 'Graphics.Vulkan.Core10.Handles.Queue'                             |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_SEMAPHORE'                       | 'Graphics.Vulkan.Core10.Handles.Semaphore'                         |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_COMMAND_BUFFER'                  | 'Graphics.Vulkan.Core10.Handles.CommandBuffer'                     |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_FENCE'                           | 'Graphics.Vulkan.Core10.Handles.Fence'                             |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_DEVICE_MEMORY'                   | 'Graphics.Vulkan.Core10.Handles.DeviceMemory'                      |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_BUFFER'                          | 'Graphics.Vulkan.Core10.Handles.Buffer'                            |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_IMAGE'                           | 'Graphics.Vulkan.Core10.Handles.Image'                             |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_EVENT'                           | 'Graphics.Vulkan.Core10.Handles.Event'                             |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_QUERY_POOL'                      | 'Graphics.Vulkan.Core10.Handles.QueryPool'                         |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_BUFFER_VIEW'                     | 'Graphics.Vulkan.Core10.Handles.BufferView'                        |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_IMAGE_VIEW'                      | 'Graphics.Vulkan.Core10.Handles.ImageView'                         |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_SHADER_MODULE'                   | 'Graphics.Vulkan.Core10.Handles.ShaderModule'                      |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_PIPELINE_CACHE'                  | 'Graphics.Vulkan.Core10.Handles.PipelineCache'                     |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_PIPELINE_LAYOUT'                 | 'Graphics.Vulkan.Core10.Handles.PipelineLayout'                    |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_RENDER_PASS'                     | 'Graphics.Vulkan.Core10.Handles.RenderPass'                        |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_PIPELINE'                        | 'Graphics.Vulkan.Core10.Handles.Pipeline'                          |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT'           | 'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout'               |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_SAMPLER'                         | 'Graphics.Vulkan.Core10.Handles.Sampler'                           |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_DESCRIPTOR_POOL'                 | 'Graphics.Vulkan.Core10.Handles.DescriptorPool'                    |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_DESCRIPTOR_SET'                  | 'Graphics.Vulkan.Core10.Handles.DescriptorSet'                     |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_FRAMEBUFFER'                     | 'Graphics.Vulkan.Core10.Handles.Framebuffer'                       |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_COMMAND_POOL'                    | 'Graphics.Vulkan.Core10.Handles.CommandPool'                       |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION'        | 'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion'            |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE'      | 'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate'          |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_SURFACE_KHR'                     | 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'                    |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_SWAPCHAIN_KHR'                   | 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'                  |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_DISPLAY_KHR'                     | 'Graphics.Vulkan.Extensions.Handles.DisplayKHR'                    |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_DISPLAY_MODE_KHR'                | 'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR'                |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT'       | 'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT'        |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV'     | 'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV'      |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT'       | 'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT'        |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_VALIDATION_CACHE_EXT'            | 'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT'            |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR'      | 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'      |
--- +-----------------------------------------------+--------------------------------------------------------------------+
--- | 'OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL' | 'Graphics.Vulkan.Extensions.Handles.PerformanceConfigurationINTEL' |
--- +-----------------------------------------------+--------------------------------------------------------------------+
---
--- VkObjectType and Vulkan Handle Relationship
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectTagInfoEXT'
-newtype ObjectType = ObjectType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_UNKNOWN"
-pattern OBJECT_TYPE_UNKNOWN = ObjectType 0
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_INSTANCE"
-pattern OBJECT_TYPE_INSTANCE = ObjectType 1
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PHYSICAL_DEVICE"
-pattern OBJECT_TYPE_PHYSICAL_DEVICE = ObjectType 2
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEVICE"
-pattern OBJECT_TYPE_DEVICE = ObjectType 3
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_QUEUE"
-pattern OBJECT_TYPE_QUEUE = ObjectType 4
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SEMAPHORE"
-pattern OBJECT_TYPE_SEMAPHORE = ObjectType 5
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_COMMAND_BUFFER"
-pattern OBJECT_TYPE_COMMAND_BUFFER = ObjectType 6
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_FENCE"
-pattern OBJECT_TYPE_FENCE = ObjectType 7
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEVICE_MEMORY"
-pattern OBJECT_TYPE_DEVICE_MEMORY = ObjectType 8
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_BUFFER"
-pattern OBJECT_TYPE_BUFFER = ObjectType 9
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_IMAGE"
-pattern OBJECT_TYPE_IMAGE = ObjectType 10
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_EVENT"
-pattern OBJECT_TYPE_EVENT = ObjectType 11
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_QUERY_POOL"
-pattern OBJECT_TYPE_QUERY_POOL = ObjectType 12
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_BUFFER_VIEW"
-pattern OBJECT_TYPE_BUFFER_VIEW = ObjectType 13
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_IMAGE_VIEW"
-pattern OBJECT_TYPE_IMAGE_VIEW = ObjectType 14
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SHADER_MODULE"
-pattern OBJECT_TYPE_SHADER_MODULE = ObjectType 15
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PIPELINE_CACHE"
-pattern OBJECT_TYPE_PIPELINE_CACHE = ObjectType 16
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PIPELINE_LAYOUT"
-pattern OBJECT_TYPE_PIPELINE_LAYOUT = ObjectType 17
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_RENDER_PASS"
-pattern OBJECT_TYPE_RENDER_PASS = ObjectType 18
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PIPELINE"
-pattern OBJECT_TYPE_PIPELINE = ObjectType 19
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT"
-pattern OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = ObjectType 20
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SAMPLER"
-pattern OBJECT_TYPE_SAMPLER = ObjectType 21
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_POOL"
-pattern OBJECT_TYPE_DESCRIPTOR_POOL = ObjectType 22
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_SET"
-pattern OBJECT_TYPE_DESCRIPTOR_SET = ObjectType 23
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_FRAMEBUFFER"
-pattern OBJECT_TYPE_FRAMEBUFFER = ObjectType 24
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_COMMAND_POOL"
-pattern OBJECT_TYPE_COMMAND_POOL = ObjectType 25
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV"
-pattern OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV = ObjectType 1000277000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR"
-pattern OBJECT_TYPE_DEFERRED_OPERATION_KHR = ObjectType 1000268000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL"
-pattern OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = ObjectType 1000210000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_VALIDATION_CACHE_EXT"
-pattern OBJECT_TYPE_VALIDATION_CACHE_EXT = ObjectType 1000160000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR"
-pattern OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = ObjectType 1000165000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT"
-pattern OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = ObjectType 1000128000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT"
-pattern OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = ObjectType 1000011000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DISPLAY_MODE_KHR"
-pattern OBJECT_TYPE_DISPLAY_MODE_KHR = ObjectType 1000002001
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DISPLAY_KHR"
-pattern OBJECT_TYPE_DISPLAY_KHR = ObjectType 1000002000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SWAPCHAIN_KHR"
-pattern OBJECT_TYPE_SWAPCHAIN_KHR = ObjectType 1000001000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SURFACE_KHR"
-pattern OBJECT_TYPE_SURFACE_KHR = ObjectType 1000000000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"
-pattern OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = ObjectType 1000085000
--- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"
-pattern OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = ObjectType 1000156000
-{-# complete OBJECT_TYPE_UNKNOWN,
-             OBJECT_TYPE_INSTANCE,
-             OBJECT_TYPE_PHYSICAL_DEVICE,
-             OBJECT_TYPE_DEVICE,
-             OBJECT_TYPE_QUEUE,
-             OBJECT_TYPE_SEMAPHORE,
-             OBJECT_TYPE_COMMAND_BUFFER,
-             OBJECT_TYPE_FENCE,
-             OBJECT_TYPE_DEVICE_MEMORY,
-             OBJECT_TYPE_BUFFER,
-             OBJECT_TYPE_IMAGE,
-             OBJECT_TYPE_EVENT,
-             OBJECT_TYPE_QUERY_POOL,
-             OBJECT_TYPE_BUFFER_VIEW,
-             OBJECT_TYPE_IMAGE_VIEW,
-             OBJECT_TYPE_SHADER_MODULE,
-             OBJECT_TYPE_PIPELINE_CACHE,
-             OBJECT_TYPE_PIPELINE_LAYOUT,
-             OBJECT_TYPE_RENDER_PASS,
-             OBJECT_TYPE_PIPELINE,
-             OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,
-             OBJECT_TYPE_SAMPLER,
-             OBJECT_TYPE_DESCRIPTOR_POOL,
-             OBJECT_TYPE_DESCRIPTOR_SET,
-             OBJECT_TYPE_FRAMEBUFFER,
-             OBJECT_TYPE_COMMAND_POOL,
-             OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV,
-             OBJECT_TYPE_DEFERRED_OPERATION_KHR,
-             OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL,
-             OBJECT_TYPE_VALIDATION_CACHE_EXT,
-             OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR,
-             OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT,
-             OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT,
-             OBJECT_TYPE_DISPLAY_MODE_KHR,
-             OBJECT_TYPE_DISPLAY_KHR,
-             OBJECT_TYPE_SWAPCHAIN_KHR,
-             OBJECT_TYPE_SURFACE_KHR,
-             OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE,
-             OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION :: ObjectType #-}
-
-instance Show ObjectType where
-  showsPrec p = \case
-    OBJECT_TYPE_UNKNOWN -> showString "OBJECT_TYPE_UNKNOWN"
-    OBJECT_TYPE_INSTANCE -> showString "OBJECT_TYPE_INSTANCE"
-    OBJECT_TYPE_PHYSICAL_DEVICE -> showString "OBJECT_TYPE_PHYSICAL_DEVICE"
-    OBJECT_TYPE_DEVICE -> showString "OBJECT_TYPE_DEVICE"
-    OBJECT_TYPE_QUEUE -> showString "OBJECT_TYPE_QUEUE"
-    OBJECT_TYPE_SEMAPHORE -> showString "OBJECT_TYPE_SEMAPHORE"
-    OBJECT_TYPE_COMMAND_BUFFER -> showString "OBJECT_TYPE_COMMAND_BUFFER"
-    OBJECT_TYPE_FENCE -> showString "OBJECT_TYPE_FENCE"
-    OBJECT_TYPE_DEVICE_MEMORY -> showString "OBJECT_TYPE_DEVICE_MEMORY"
-    OBJECT_TYPE_BUFFER -> showString "OBJECT_TYPE_BUFFER"
-    OBJECT_TYPE_IMAGE -> showString "OBJECT_TYPE_IMAGE"
-    OBJECT_TYPE_EVENT -> showString "OBJECT_TYPE_EVENT"
-    OBJECT_TYPE_QUERY_POOL -> showString "OBJECT_TYPE_QUERY_POOL"
-    OBJECT_TYPE_BUFFER_VIEW -> showString "OBJECT_TYPE_BUFFER_VIEW"
-    OBJECT_TYPE_IMAGE_VIEW -> showString "OBJECT_TYPE_IMAGE_VIEW"
-    OBJECT_TYPE_SHADER_MODULE -> showString "OBJECT_TYPE_SHADER_MODULE"
-    OBJECT_TYPE_PIPELINE_CACHE -> showString "OBJECT_TYPE_PIPELINE_CACHE"
-    OBJECT_TYPE_PIPELINE_LAYOUT -> showString "OBJECT_TYPE_PIPELINE_LAYOUT"
-    OBJECT_TYPE_RENDER_PASS -> showString "OBJECT_TYPE_RENDER_PASS"
-    OBJECT_TYPE_PIPELINE -> showString "OBJECT_TYPE_PIPELINE"
-    OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT -> showString "OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT"
-    OBJECT_TYPE_SAMPLER -> showString "OBJECT_TYPE_SAMPLER"
-    OBJECT_TYPE_DESCRIPTOR_POOL -> showString "OBJECT_TYPE_DESCRIPTOR_POOL"
-    OBJECT_TYPE_DESCRIPTOR_SET -> showString "OBJECT_TYPE_DESCRIPTOR_SET"
-    OBJECT_TYPE_FRAMEBUFFER -> showString "OBJECT_TYPE_FRAMEBUFFER"
-    OBJECT_TYPE_COMMAND_POOL -> showString "OBJECT_TYPE_COMMAND_POOL"
-    OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV -> showString "OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV"
-    OBJECT_TYPE_DEFERRED_OPERATION_KHR -> showString "OBJECT_TYPE_DEFERRED_OPERATION_KHR"
-    OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL -> showString "OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL"
-    OBJECT_TYPE_VALIDATION_CACHE_EXT -> showString "OBJECT_TYPE_VALIDATION_CACHE_EXT"
-    OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR -> showString "OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR"
-    OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT -> showString "OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT"
-    OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT -> showString "OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT"
-    OBJECT_TYPE_DISPLAY_MODE_KHR -> showString "OBJECT_TYPE_DISPLAY_MODE_KHR"
-    OBJECT_TYPE_DISPLAY_KHR -> showString "OBJECT_TYPE_DISPLAY_KHR"
-    OBJECT_TYPE_SWAPCHAIN_KHR -> showString "OBJECT_TYPE_SWAPCHAIN_KHR"
-    OBJECT_TYPE_SURFACE_KHR -> showString "OBJECT_TYPE_SURFACE_KHR"
-    OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE -> showString "OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"
-    OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION -> showString "OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"
-    ObjectType x -> showParen (p >= 11) (showString "ObjectType " . showsPrec 11 x)
-
-instance Read ObjectType where
-  readPrec = parens (choose [("OBJECT_TYPE_UNKNOWN", pure OBJECT_TYPE_UNKNOWN)
-                            , ("OBJECT_TYPE_INSTANCE", pure OBJECT_TYPE_INSTANCE)
-                            , ("OBJECT_TYPE_PHYSICAL_DEVICE", pure OBJECT_TYPE_PHYSICAL_DEVICE)
-                            , ("OBJECT_TYPE_DEVICE", pure OBJECT_TYPE_DEVICE)
-                            , ("OBJECT_TYPE_QUEUE", pure OBJECT_TYPE_QUEUE)
-                            , ("OBJECT_TYPE_SEMAPHORE", pure OBJECT_TYPE_SEMAPHORE)
-                            , ("OBJECT_TYPE_COMMAND_BUFFER", pure OBJECT_TYPE_COMMAND_BUFFER)
-                            , ("OBJECT_TYPE_FENCE", pure OBJECT_TYPE_FENCE)
-                            , ("OBJECT_TYPE_DEVICE_MEMORY", pure OBJECT_TYPE_DEVICE_MEMORY)
-                            , ("OBJECT_TYPE_BUFFER", pure OBJECT_TYPE_BUFFER)
-                            , ("OBJECT_TYPE_IMAGE", pure OBJECT_TYPE_IMAGE)
-                            , ("OBJECT_TYPE_EVENT", pure OBJECT_TYPE_EVENT)
-                            , ("OBJECT_TYPE_QUERY_POOL", pure OBJECT_TYPE_QUERY_POOL)
-                            , ("OBJECT_TYPE_BUFFER_VIEW", pure OBJECT_TYPE_BUFFER_VIEW)
-                            , ("OBJECT_TYPE_IMAGE_VIEW", pure OBJECT_TYPE_IMAGE_VIEW)
-                            , ("OBJECT_TYPE_SHADER_MODULE", pure OBJECT_TYPE_SHADER_MODULE)
-                            , ("OBJECT_TYPE_PIPELINE_CACHE", pure OBJECT_TYPE_PIPELINE_CACHE)
-                            , ("OBJECT_TYPE_PIPELINE_LAYOUT", pure OBJECT_TYPE_PIPELINE_LAYOUT)
-                            , ("OBJECT_TYPE_RENDER_PASS", pure OBJECT_TYPE_RENDER_PASS)
-                            , ("OBJECT_TYPE_PIPELINE", pure OBJECT_TYPE_PIPELINE)
-                            , ("OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT", pure OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)
-                            , ("OBJECT_TYPE_SAMPLER", pure OBJECT_TYPE_SAMPLER)
-                            , ("OBJECT_TYPE_DESCRIPTOR_POOL", pure OBJECT_TYPE_DESCRIPTOR_POOL)
-                            , ("OBJECT_TYPE_DESCRIPTOR_SET", pure OBJECT_TYPE_DESCRIPTOR_SET)
-                            , ("OBJECT_TYPE_FRAMEBUFFER", pure OBJECT_TYPE_FRAMEBUFFER)
-                            , ("OBJECT_TYPE_COMMAND_POOL", pure OBJECT_TYPE_COMMAND_POOL)
-                            , ("OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV", pure OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV)
-                            , ("OBJECT_TYPE_DEFERRED_OPERATION_KHR", pure OBJECT_TYPE_DEFERRED_OPERATION_KHR)
-                            , ("OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL", pure OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL)
-                            , ("OBJECT_TYPE_VALIDATION_CACHE_EXT", pure OBJECT_TYPE_VALIDATION_CACHE_EXT)
-                            , ("OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR", pure OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR)
-                            , ("OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT", pure OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT)
-                            , ("OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT", pure OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT)
-                            , ("OBJECT_TYPE_DISPLAY_MODE_KHR", pure OBJECT_TYPE_DISPLAY_MODE_KHR)
-                            , ("OBJECT_TYPE_DISPLAY_KHR", pure OBJECT_TYPE_DISPLAY_KHR)
-                            , ("OBJECT_TYPE_SWAPCHAIN_KHR", pure OBJECT_TYPE_SWAPCHAIN_KHR)
-                            , ("OBJECT_TYPE_SURFACE_KHR", pure OBJECT_TYPE_SURFACE_KHR)
-                            , ("OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE", pure OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE)
-                            , ("OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION", pure OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ObjectType")
-                       v <- step readPrec
-                       pure (ObjectType v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PhysicalDeviceType.hs b/src/Graphics/Vulkan/Core10/Enums/PhysicalDeviceType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PhysicalDeviceType.hs
+++ /dev/null
@@ -1,80 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PhysicalDeviceType  (PhysicalDeviceType( PHYSICAL_DEVICE_TYPE_OTHER
-                                                                           , PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
-                                                                           , PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
-                                                                           , PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU
-                                                                           , PHYSICAL_DEVICE_TYPE_CPU
-                                                                           , ..
-                                                                           )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkPhysicalDeviceType - Supported physical device types
---
--- = Description
---
--- 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
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'
-newtype PhysicalDeviceType = PhysicalDeviceType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'PHYSICAL_DEVICE_TYPE_OTHER' - the device does not match any other
--- available types.
-pattern PHYSICAL_DEVICE_TYPE_OTHER = PhysicalDeviceType 0
--- | 'PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU' - the device is typically one
--- embedded in or tightly coupled with the host.
-pattern PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = PhysicalDeviceType 1
--- | 'PHYSICAL_DEVICE_TYPE_DISCRETE_GPU' - the device is typically a separate
--- processor connected to the host via an interlink.
-pattern PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = PhysicalDeviceType 2
--- | 'PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU' - the device is typically a virtual
--- node in a virtualization environment.
-pattern PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = PhysicalDeviceType 3
--- | 'PHYSICAL_DEVICE_TYPE_CPU' - the device is typically running on the same
--- processors as the host.
-pattern PHYSICAL_DEVICE_TYPE_CPU = PhysicalDeviceType 4
-{-# complete PHYSICAL_DEVICE_TYPE_OTHER,
-             PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU,
-             PHYSICAL_DEVICE_TYPE_DISCRETE_GPU,
-             PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU,
-             PHYSICAL_DEVICE_TYPE_CPU :: PhysicalDeviceType #-}
-
-instance Show PhysicalDeviceType where
-  showsPrec p = \case
-    PHYSICAL_DEVICE_TYPE_OTHER -> showString "PHYSICAL_DEVICE_TYPE_OTHER"
-    PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU -> showString "PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU"
-    PHYSICAL_DEVICE_TYPE_DISCRETE_GPU -> showString "PHYSICAL_DEVICE_TYPE_DISCRETE_GPU"
-    PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU -> showString "PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU"
-    PHYSICAL_DEVICE_TYPE_CPU -> showString "PHYSICAL_DEVICE_TYPE_CPU"
-    PhysicalDeviceType x -> showParen (p >= 11) (showString "PhysicalDeviceType " . showsPrec 11 x)
-
-instance Read PhysicalDeviceType where
-  readPrec = parens (choose [("PHYSICAL_DEVICE_TYPE_OTHER", pure PHYSICAL_DEVICE_TYPE_OTHER)
-                            , ("PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU", pure PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU)
-                            , ("PHYSICAL_DEVICE_TYPE_DISCRETE_GPU", pure PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
-                            , ("PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU", pure PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU)
-                            , ("PHYSICAL_DEVICE_TYPE_CPU", pure PHYSICAL_DEVICE_TYPE_CPU)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PhysicalDeviceType")
-                       v <- step readPrec
-                       pure (PhysicalDeviceType v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineBindPoint.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineBindPoint.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineBindPoint.hs
+++ /dev/null
@@ -1,67 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineBindPoint  (PipelineBindPoint( PIPELINE_BIND_POINT_GRAPHICS
-                                                                         , PIPELINE_BIND_POINT_COMPUTE
-                                                                         , PIPELINE_BIND_POINT_RAY_TRACING_KHR
-                                                                         , ..
-                                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineBindPoint - Specify the bind point of a pipeline object to a
--- command buffer
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsMemoryRequirementsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Pass.SubpassDescription',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDescription2',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.cmdBindPipelineShaderGroupNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetKHR'
-newtype PipelineBindPoint = PipelineBindPoint Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'PIPELINE_BIND_POINT_GRAPHICS' specifies binding as a graphics pipeline.
-pattern PIPELINE_BIND_POINT_GRAPHICS = PipelineBindPoint 0
--- | 'PIPELINE_BIND_POINT_COMPUTE' specifies binding as a compute pipeline.
-pattern PIPELINE_BIND_POINT_COMPUTE = PipelineBindPoint 1
--- | 'PIPELINE_BIND_POINT_RAY_TRACING_KHR' specifies binding as a ray tracing
--- pipeline.
-pattern PIPELINE_BIND_POINT_RAY_TRACING_KHR = PipelineBindPoint 1000165000
-{-# complete PIPELINE_BIND_POINT_GRAPHICS,
-             PIPELINE_BIND_POINT_COMPUTE,
-             PIPELINE_BIND_POINT_RAY_TRACING_KHR :: PipelineBindPoint #-}
-
-instance Show PipelineBindPoint where
-  showsPrec p = \case
-    PIPELINE_BIND_POINT_GRAPHICS -> showString "PIPELINE_BIND_POINT_GRAPHICS"
-    PIPELINE_BIND_POINT_COMPUTE -> showString "PIPELINE_BIND_POINT_COMPUTE"
-    PIPELINE_BIND_POINT_RAY_TRACING_KHR -> showString "PIPELINE_BIND_POINT_RAY_TRACING_KHR"
-    PipelineBindPoint x -> showParen (p >= 11) (showString "PipelineBindPoint " . showsPrec 11 x)
-
-instance Read PipelineBindPoint where
-  readPrec = parens (choose [("PIPELINE_BIND_POINT_GRAPHICS", pure PIPELINE_BIND_POINT_GRAPHICS)
-                            , ("PIPELINE_BIND_POINT_COMPUTE", pure PIPELINE_BIND_POINT_COMPUTE)
-                            , ("PIPELINE_BIND_POINT_RAY_TRACING_KHR", pure PIPELINE_BIND_POINT_RAY_TRACING_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineBindPoint")
-                       v <- step readPrec
-                       pure (PipelineBindPoint v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineBindPoint.hs-boot b/src/Graphics/Vulkan/Core10/Enums/PipelineBindPoint.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineBindPoint.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineBindPoint  (PipelineBindPoint) where
-
-
-
-data PipelineBindPoint
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineCacheCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineCacheCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineCacheCreateFlagBits.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits  ( PipelineCacheCreateFlagBits( PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT
-                                                                                              , ..
-                                                                                              )
-                                                                 , PipelineCacheCreateFlags
-                                                                 ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineCacheCreateFlagBits - Bitmask specifying the behavior of the
--- pipeline cache
---
--- = See Also
---
--- 'PipelineCacheCreateFlags'
-newtype PipelineCacheCreateFlagBits = PipelineCacheCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT' specifies that
--- all commands that modify the created
--- 'Graphics.Vulkan.Core10.Handles.PipelineCache' will be
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>.
--- When set, the implementation /may/ skip any unnecessary processing
--- needed to support simultaneous modification from multiple threads where
--- allowed.
-pattern PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = PipelineCacheCreateFlagBits 0x00000001
-
-type PipelineCacheCreateFlags = PipelineCacheCreateFlagBits
-
-instance Show PipelineCacheCreateFlagBits where
-  showsPrec p = \case
-    PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT -> showString "PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT"
-    PipelineCacheCreateFlagBits x -> showParen (p >= 11) (showString "PipelineCacheCreateFlagBits 0x" . showHex x)
-
-instance Read PipelineCacheCreateFlagBits where
-  readPrec = parens (choose [("PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT", pure PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineCacheCreateFlagBits")
-                       v <- step readPrec
-                       pure (PipelineCacheCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineCacheHeaderVersion.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineCacheHeaderVersion.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineCacheHeaderVersion.hs
+++ /dev/null
@@ -1,47 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineCacheHeaderVersion  (PipelineCacheHeaderVersion( PIPELINE_CACHE_HEADER_VERSION_ONE
-                                                                                           , ..
-                                                                                           )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineCacheHeaderVersion - Encode pipeline cache version
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.PipelineCache.createPipelineCache',
--- 'Graphics.Vulkan.Core10.PipelineCache.getPipelineCacheData'
-newtype PipelineCacheHeaderVersion = PipelineCacheHeaderVersion Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
--- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
-
--- | 'PIPELINE_CACHE_HEADER_VERSION_ONE' specifies version one of the
--- pipeline cache.
-pattern PIPELINE_CACHE_HEADER_VERSION_ONE = PipelineCacheHeaderVersion 1
-{-# complete PIPELINE_CACHE_HEADER_VERSION_ONE :: PipelineCacheHeaderVersion #-}
-
-instance Show PipelineCacheHeaderVersion where
-  showsPrec p = \case
-    PIPELINE_CACHE_HEADER_VERSION_ONE -> showString "PIPELINE_CACHE_HEADER_VERSION_ONE"
-    PipelineCacheHeaderVersion x -> showParen (p >= 11) (showString "PipelineCacheHeaderVersion " . showsPrec 11 x)
-
-instance Read PipelineCacheHeaderVersion where
-  readPrec = parens (choose [("PIPELINE_CACHE_HEADER_VERSION_ONE", pure PIPELINE_CACHE_HEADER_VERSION_ONE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineCacheHeaderVersion")
-                       v <- step readPrec
-                       pure (PipelineCacheHeaderVersion v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineColorBlendStateCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineColorBlendStateCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineColorBlendStateCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags  (PipelineColorBlendStateCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineColorBlendStateCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineColorBlendStateCreateFlags' is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'
-newtype PipelineColorBlendStateCreateFlags = PipelineColorBlendStateCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineColorBlendStateCreateFlags where
-  showsPrec p = \case
-    PipelineColorBlendStateCreateFlags x -> showParen (p >= 11) (showString "PipelineColorBlendStateCreateFlags 0x" . showHex x)
-
-instance Read PipelineColorBlendStateCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineColorBlendStateCreateFlags")
-                       v <- step readPrec
-                       pure (PipelineColorBlendStateCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs
+++ /dev/null
@@ -1,234 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits  ( PipelineCreateFlagBits( PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT
-                                                                                    , PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT
-                                                                                    , PIPELINE_CREATE_DERIVATIVE_BIT
-                                                                                    , PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
-                                                                                    , PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT
-                                                                                    , PIPELINE_CREATE_LIBRARY_BIT_KHR
-                                                                                    , PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
-                                                                                    , PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
-                                                                                    , PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR
-                                                                                    , PIPELINE_CREATE_DEFER_COMPILE_BIT_NV
-                                                                                    , PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
-                                                                                    , PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
-                                                                                    , PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
-                                                                                    , PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
-                                                                                    , PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
-                                                                                    , PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
-                                                                                    , PIPELINE_CREATE_DISPATCH_BASE_BIT
-                                                                                    , PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT
-                                                                                    , ..
-                                                                                    )
-                                                            , PipelineCreateFlags
-                                                            ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineCreateFlagBits - Bitmask controlling how a pipeline is created
---
--- = Description
---
--- -   '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.
---
--- -   '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 pipeline creation call.
---
--- -   'PIPELINE_CREATE_DERIVATIVE_BIT' specifies that the pipeline to be
---     created will be a child of a previously created parent pipeline.
---
--- -   'PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT' specifies that
---     any shader input variables decorated as @ViewIndex@ will be assigned
---     values as if they were decorated as @DeviceIndex@.
---
--- -   'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.PIPELINE_CREATE_DISPATCH_BASE'
---     specifies that a compute pipeline /can/ be used with
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.cmdDispatchBase'
---     with a non-zero base workgroup.
---
--- -   'PIPELINE_CREATE_DEFER_COMPILE_BIT_NV' specifies that a pipeline is
---     created with all shaders in the deferred state. Before using the
---     pipeline the application /must/ call
---     'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.compileDeferredNV'
---     exactly once on each shader in the pipeline before using the
---     pipeline.
---
--- -   'PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR' specifies that the
---     shader compiler should capture statistics for the executables
---     produced by the compile process which /can/ later be retrieved by
---     calling
---     'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutableStatisticsKHR'.
---     Enabling this flag /must/ not affect the final compiled pipeline but
---     /may/ disable pipeline caching or otherwise affect pipeline creation
---     time.
---
--- -   'PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR' specifies
---     that the shader compiler should capture the internal representations
---     of executables produced by the compile process which /can/ later be
---     retrieved by calling
---     'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutableInternalRepresentationsKHR'.
---     Enabling this flag /must/ not affect the final compiled pipeline but
---     /may/ disable pipeline caching or otherwise affect pipeline creation
---     time.
---
--- -   'PIPELINE_CREATE_LIBRARY_BIT_KHR' specifies that the pipeline
---     /cannot/ be used directly, and instead defines a /pipeline library/
---     that /can/ be combined with other pipelines using the
---     'Graphics.Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
---     structure. This is available in raytracing pipelines.
---
--- -   'PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
---     specifies that an any hit shader will always be present when an any
---     hit shader would be executed.
---
--- -   'PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
---     specifies that a closest hit shader will always be present when a
---     closest hit shader would be executed.
---
--- -   'PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR' specifies
---     that a miss shader will always be present when a miss shader would
---     be executed.
---
--- -   'PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
---     specifies that an intersection shader will always be present when an
---     intersection shader would be executed.
---
--- -   'PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR' specifies that
---     triangle primitives will be skipped during traversal using
---     @OpTraceKHR@.
---
--- -   'PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR' specifies that AABB
---     primitives will be skipped during traversal using @OpTraceKHR@.
---
--- -   'PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV' specifies that the
---     pipeline can be used in combination with
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#device-generated-commands>.
---
--- -   'PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
---     specifies that pipeline creation will fail if a compile is required
---     for creation of a valid 'Graphics.Vulkan.Core10.Handles.Pipeline'
---     object;
---     'Graphics.Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'
---     will be returned by pipeline creation, and the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' will be set to
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'.
---
--- -   When creating multiple pipelines,
---     'PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT' specifies that
---     control will be returned to the application on failure of the
---     corresponding pipeline rather than continuing to create additional
---     pipelines.
---
--- It is valid to set both 'PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT' and
--- 'PIPELINE_CREATE_DERIVATIVE_BIT'. This allows a pipeline to be both a
--- parent and possibly a child in a pipeline hierarchy. See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>
--- for more information.
---
--- = See Also
---
--- 'PipelineCreateFlags'
-newtype PipelineCreateFlagBits = PipelineCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"
-pattern PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = PipelineCreateFlagBits 0x00000001
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"
-pattern PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = PipelineCreateFlagBits 0x00000002
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DERIVATIVE_BIT"
-pattern PIPELINE_CREATE_DERIVATIVE_BIT = PipelineCreateFlagBits 0x00000004
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT"
-pattern PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = PipelineCreateFlagBits 0x00000200
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT"
-pattern PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = PipelineCreateFlagBits 0x00000100
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_LIBRARY_BIT_KHR"
-pattern PIPELINE_CREATE_LIBRARY_BIT_KHR = PipelineCreateFlagBits 0x00000800
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV"
-pattern PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV = PipelineCreateFlagBits 0x00040000
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR"
-pattern PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = PipelineCreateFlagBits 0x00000080
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR"
-pattern PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = PipelineCreateFlagBits 0x00000040
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV"
-pattern PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = PipelineCreateFlagBits 0x00000020
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR"
-pattern PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR = PipelineCreateFlagBits 0x00002000
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR"
-pattern PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = PipelineCreateFlagBits 0x00001000
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR"
-pattern PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = PipelineCreateFlagBits 0x00020000
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR"
-pattern PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = PipelineCreateFlagBits 0x00010000
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR"
-pattern PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = PipelineCreateFlagBits 0x00008000
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR"
-pattern PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = PipelineCreateFlagBits 0x00004000
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"
-pattern PIPELINE_CREATE_DISPATCH_BASE_BIT = PipelineCreateFlagBits 0x00000010
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"
-pattern PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = PipelineCreateFlagBits 0x00000008
-
-type PipelineCreateFlags = PipelineCreateFlagBits
-
-instance Show PipelineCreateFlagBits where
-  showsPrec p = \case
-    PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT -> showString "PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"
-    PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT -> showString "PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"
-    PIPELINE_CREATE_DERIVATIVE_BIT -> showString "PIPELINE_CREATE_DERIVATIVE_BIT"
-    PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT -> showString "PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT"
-    PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT -> showString "PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT"
-    PIPELINE_CREATE_LIBRARY_BIT_KHR -> showString "PIPELINE_CREATE_LIBRARY_BIT_KHR"
-    PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV -> showString "PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV"
-    PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR -> showString "PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR"
-    PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR -> showString "PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR"
-    PIPELINE_CREATE_DEFER_COMPILE_BIT_NV -> showString "PIPELINE_CREATE_DEFER_COMPILE_BIT_NV"
-    PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR"
-    PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR"
-    PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR"
-    PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR"
-    PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR"
-    PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR"
-    PIPELINE_CREATE_DISPATCH_BASE_BIT -> showString "PIPELINE_CREATE_DISPATCH_BASE_BIT"
-    PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT -> showString "PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"
-    PipelineCreateFlagBits x -> showParen (p >= 11) (showString "PipelineCreateFlagBits 0x" . showHex x)
-
-instance Read PipelineCreateFlagBits where
-  readPrec = parens (choose [("PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT", pure PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
-                            , ("PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT", pure PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
-                            , ("PIPELINE_CREATE_DERIVATIVE_BIT", pure PIPELINE_CREATE_DERIVATIVE_BIT)
-                            , ("PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT", pure PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT)
-                            , ("PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT", pure PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT)
-                            , ("PIPELINE_CREATE_LIBRARY_BIT_KHR", pure PIPELINE_CREATE_LIBRARY_BIT_KHR)
-                            , ("PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", pure PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV)
-                            , ("PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR", pure PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR)
-                            , ("PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR", pure PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR)
-                            , ("PIPELINE_CREATE_DEFER_COMPILE_BIT_NV", pure PIPELINE_CREATE_DEFER_COMPILE_BIT_NV)
-                            , ("PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR)
-                            , ("PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR)
-                            , ("PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR)
-                            , ("PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR)
-                            , ("PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR)
-                            , ("PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR)
-                            , ("PIPELINE_CREATE_DISPATCH_BASE_BIT", pure PIPELINE_CREATE_DISPATCH_BASE_BIT)
-                            , ("PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT", pure PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineCreateFlagBits")
-                       v <- step readPrec
-                       pure (PipelineCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineDepthStencilStateCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineDepthStencilStateCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineDepthStencilStateCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags  (PipelineDepthStencilStateCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineDepthStencilStateCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineDepthStencilStateCreateFlags' is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
-newtype PipelineDepthStencilStateCreateFlags = PipelineDepthStencilStateCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineDepthStencilStateCreateFlags where
-  showsPrec p = \case
-    PipelineDepthStencilStateCreateFlags x -> showParen (p >= 11) (showString "PipelineDepthStencilStateCreateFlags 0x" . showHex x)
-
-instance Read PipelineDepthStencilStateCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineDepthStencilStateCreateFlags")
-                       v <- step readPrec
-                       pure (PipelineDepthStencilStateCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineDynamicStateCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineDynamicStateCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineDynamicStateCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags  (PipelineDynamicStateCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineDynamicStateCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineDynamicStateCreateFlags' is a bitmask type for setting a mask,
--- but is currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'
-newtype PipelineDynamicStateCreateFlags = PipelineDynamicStateCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineDynamicStateCreateFlags where
-  showsPrec p = \case
-    PipelineDynamicStateCreateFlags x -> showParen (p >= 11) (showString "PipelineDynamicStateCreateFlags 0x" . showHex x)
-
-instance Read PipelineDynamicStateCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineDynamicStateCreateFlags")
-                       v <- step readPrec
-                       pure (PipelineDynamicStateCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineInputAssemblyStateCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineInputAssemblyStateCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineInputAssemblyStateCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags  (PipelineInputAssemblyStateCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineInputAssemblyStateCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineInputAssemblyStateCreateFlags' is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'
-newtype PipelineInputAssemblyStateCreateFlags = PipelineInputAssemblyStateCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineInputAssemblyStateCreateFlags where
-  showsPrec p = \case
-    PipelineInputAssemblyStateCreateFlags x -> showParen (p >= 11) (showString "PipelineInputAssemblyStateCreateFlags 0x" . showHex x)
-
-instance Read PipelineInputAssemblyStateCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineInputAssemblyStateCreateFlags")
-                       v <- step readPrec
-                       pure (PipelineInputAssemblyStateCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineLayoutCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineLayoutCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineLayoutCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineLayoutCreateFlags  (PipelineLayoutCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineLayoutCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineLayoutCreateFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'
-newtype PipelineLayoutCreateFlags = PipelineLayoutCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineLayoutCreateFlags where
-  showsPrec p = \case
-    PipelineLayoutCreateFlags x -> showParen (p >= 11) (showString "PipelineLayoutCreateFlags 0x" . showHex x)
-
-instance Read PipelineLayoutCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineLayoutCreateFlags")
-                       v <- step readPrec
-                       pure (PipelineLayoutCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineMultisampleStateCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineMultisampleStateCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineMultisampleStateCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags  (PipelineMultisampleStateCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineMultisampleStateCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineMultisampleStateCreateFlags' is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'
-newtype PipelineMultisampleStateCreateFlags = PipelineMultisampleStateCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineMultisampleStateCreateFlags where
-  showsPrec p = \case
-    PipelineMultisampleStateCreateFlags x -> showParen (p >= 11) (showString "PipelineMultisampleStateCreateFlags 0x" . showHex x)
-
-instance Read PipelineMultisampleStateCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineMultisampleStateCreateFlags")
-                       v <- step readPrec
-                       pure (PipelineMultisampleStateCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineRasterizationStateCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineRasterizationStateCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineRasterizationStateCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags  (PipelineRasterizationStateCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineRasterizationStateCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineRasterizationStateCreateFlags' is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
-newtype PipelineRasterizationStateCreateFlags = PipelineRasterizationStateCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineRasterizationStateCreateFlags where
-  showsPrec p = \case
-    PipelineRasterizationStateCreateFlags x -> showParen (p >= 11) (showString "PipelineRasterizationStateCreateFlags 0x" . showHex x)
-
-instance Read PipelineRasterizationStateCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineRasterizationStateCreateFlags")
-                       v <- step readPrec
-                       pure (PipelineRasterizationStateCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineShaderStageCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineShaderStageCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineShaderStageCreateFlagBits.hs
+++ /dev/null
@@ -1,77 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits  ( PipelineShaderStageCreateFlagBits( PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
-                                                                                                          , PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
-                                                                                                          , ..
-                                                                                                          )
-                                                                       , PipelineShaderStageCreateFlags
-                                                                       ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineShaderStageCreateFlagBits - Bitmask controlling how a pipeline
--- shader stage is created
---
--- = Description
---
--- Note
---
--- If 'PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
--- and 'PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT' are
--- specified and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size minSubgroupSize>
--- does not equal
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size maxSubgroupSize>
--- and no
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-required-subgroup-size required subgroup size>
--- is specified, then the only way to guarantee that the \'X\' dimension of
--- the local workgroup size is a multiple of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-sgs SubgroupSize>
--- is to make it a multiple of @maxSubgroupSize@. Under these conditions,
--- you are guaranteed full subgroups but not any particular subgroup size.
---
--- = See Also
---
--- 'PipelineShaderStageCreateFlags'
-newtype PipelineShaderStageCreateFlagBits = PipelineShaderStageCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT' specifies
--- that the subgroup sizes /must/ be launched with all invocations active
--- in the compute stage.
-pattern PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = PipelineShaderStageCreateFlagBits 0x00000002
--- | 'PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
--- specifies that the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-sgs SubgroupSize>
--- /may/ vary in the shader stage.
-pattern PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = PipelineShaderStageCreateFlagBits 0x00000001
-
-type PipelineShaderStageCreateFlags = PipelineShaderStageCreateFlagBits
-
-instance Show PipelineShaderStageCreateFlagBits where
-  showsPrec p = \case
-    PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT -> showString "PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT"
-    PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT -> showString "PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT"
-    PipelineShaderStageCreateFlagBits x -> showParen (p >= 11) (showString "PipelineShaderStageCreateFlagBits 0x" . showHex x)
-
-instance Read PipelineShaderStageCreateFlagBits where
-  readPrec = parens (choose [("PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT", pure PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT)
-                            , ("PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT", pure PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineShaderStageCreateFlagBits")
-                       v <- step readPrec
-                       pure (PipelineShaderStageCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineStageFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineStageFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineStageFlagBits.hs
+++ /dev/null
@@ -1,295 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits  ( PipelineStageFlagBits( PIPELINE_STAGE_TOP_OF_PIPE_BIT
-                                                                                  , PIPELINE_STAGE_DRAW_INDIRECT_BIT
-                                                                                  , PIPELINE_STAGE_VERTEX_INPUT_BIT
-                                                                                  , PIPELINE_STAGE_VERTEX_SHADER_BIT
-                                                                                  , PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
-                                                                                  , PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
-                                                                                  , PIPELINE_STAGE_GEOMETRY_SHADER_BIT
-                                                                                  , PIPELINE_STAGE_FRAGMENT_SHADER_BIT
-                                                                                  , PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
-                                                                                  , PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
-                                                                                  , PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
-                                                                                  , PIPELINE_STAGE_COMPUTE_SHADER_BIT
-                                                                                  , PIPELINE_STAGE_TRANSFER_BIT
-                                                                                  , PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
-                                                                                  , PIPELINE_STAGE_HOST_BIT
-                                                                                  , PIPELINE_STAGE_ALL_GRAPHICS_BIT
-                                                                                  , PIPELINE_STAGE_ALL_COMMANDS_BIT
-                                                                                  , PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
-                                                                                  , PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
-                                                                                  , PIPELINE_STAGE_MESH_SHADER_BIT_NV
-                                                                                  , PIPELINE_STAGE_TASK_SHADER_BIT_NV
-                                                                                  , PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
-                                                                                  , PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-                                                                                  , PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
-                                                                                  , PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
-                                                                                  , PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
-                                                                                  , ..
-                                                                                  )
-                                                           , PipelineStageFlags
-                                                           ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineStageFlagBits - Bitmask specifying pipeline stages
---
--- = Description
---
--- Note
---
--- An execution dependency with only '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 '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
--- 'PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT' or 'PIPELINE_STAGE_TOP_OF_PIPE_BIT'
--- would never make any accesses available and\/or visible because these
--- stages do not access memory.
---
--- 'PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT' and '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
---
--- 'Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.CheckpointDataNV',
--- 'PipelineStageFlags',
--- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.cmdWriteBufferMarkerAMD',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp'
-newtype PipelineStageFlagBits = PipelineStageFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'PIPELINE_STAGE_TOP_OF_PIPE_BIT' specifies the stage of the pipeline
--- where any commands are initially received by the queue.
-pattern PIPELINE_STAGE_TOP_OF_PIPE_BIT = PipelineStageFlagBits 0x00000001
--- | 'PIPELINE_STAGE_DRAW_INDIRECT_BIT' specifies the stage of the pipeline
--- where Draw\/DispatchIndirect data structures are consumed. This stage
--- also includes reading commands written by
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.cmdExecuteGeneratedCommandsNV'.
-pattern PIPELINE_STAGE_DRAW_INDIRECT_BIT = PipelineStageFlagBits 0x00000002
--- | 'PIPELINE_STAGE_VERTEX_INPUT_BIT' specifies the stage of the pipeline
--- where vertex and index buffers are consumed.
-pattern PIPELINE_STAGE_VERTEX_INPUT_BIT = PipelineStageFlagBits 0x00000004
--- | 'PIPELINE_STAGE_VERTEX_SHADER_BIT' specifies the vertex shader stage.
-pattern PIPELINE_STAGE_VERTEX_SHADER_BIT = PipelineStageFlagBits 0x00000008
--- | 'PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT' specifies the
--- tessellation control shader stage.
-pattern PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = PipelineStageFlagBits 0x00000010
--- | 'PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT' specifies the
--- tessellation evaluation shader stage.
-pattern PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = PipelineStageFlagBits 0x00000020
--- | 'PIPELINE_STAGE_GEOMETRY_SHADER_BIT' specifies the geometry shader
--- stage.
-pattern PIPELINE_STAGE_GEOMETRY_SHADER_BIT = PipelineStageFlagBits 0x00000040
--- | 'PIPELINE_STAGE_FRAGMENT_SHADER_BIT' specifies the fragment shader
--- stage.
-pattern PIPELINE_STAGE_FRAGMENT_SHADER_BIT = PipelineStageFlagBits 0x00000080
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load operations>
--- for framebuffer attachments with a depth\/stencil format.
-pattern PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = PipelineStageFlagBits 0x00000100
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass store operations>
--- for framebuffer attachments with a depth\/stencil format.
-pattern PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = PipelineStageFlagBits 0x00000200
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load and store operations>
--- and multisample resolve operations for framebuffer attachments with a
--- color or depth\/stencil format.
-pattern PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = PipelineStageFlagBits 0x00000400
--- | 'PIPELINE_STAGE_COMPUTE_SHADER_BIT' specifies the execution of a compute
--- shader.
-pattern PIPELINE_STAGE_COMPUTE_SHADER_BIT = PipelineStageFlagBits 0x00000800
--- | 'PIPELINE_STAGE_TRANSFER_BIT' specifies the following commands:
---
--- -   All
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>,
---     including
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults'
---
--- -   'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
---
--- -   'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResolveImage'
---
--- -   All
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>,
---     with the exception of
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearAttachments'
-pattern PIPELINE_STAGE_TRANSFER_BIT = PipelineStageFlagBits 0x00001000
--- | 'PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT' specifies the final stage in the
--- pipeline where operations generated by all commands complete execution.
-pattern PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = PipelineStageFlagBits 0x00002000
--- | '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.
-pattern PIPELINE_STAGE_HOST_BIT = PipelineStageFlagBits 0x00004000
--- | 'PIPELINE_STAGE_ALL_GRAPHICS_BIT' specifies the execution of all
--- graphics pipeline stages, and is equivalent to the logical OR of:
---
--- -   'PIPELINE_STAGE_TOP_OF_PIPE_BIT'
---
--- -   'PIPELINE_STAGE_DRAW_INDIRECT_BIT'
---
--- -   'PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- -   'PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   'PIPELINE_STAGE_VERTEX_INPUT_BIT'
---
--- -   'PIPELINE_STAGE_VERTEX_SHADER_BIT'
---
--- -   'PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---
--- -   'PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   'PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   'PIPELINE_STAGE_FRAGMENT_SHADER_BIT'
---
--- -   'PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT'
---
--- -   'PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'
---
--- -   'PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'
---
--- -   'PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT'
---
--- -   'PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'
---
--- -   'PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'
---
--- -   'PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'
---
--- -   'PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
-pattern PIPELINE_STAGE_ALL_GRAPHICS_BIT = PipelineStageFlagBits 0x00008000
--- | '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.
-pattern PIPELINE_STAGE_ALL_COMMANDS_BIT = PipelineStageFlagBits 0x00010000
--- | 'PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV' specifies the stage of the
--- pipeline where device-side preprocessing for generated commands via
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV'
--- is handled.
-pattern PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = PipelineStageFlagBits 0x00020000
--- | 'PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT' specifies the stage of
--- the pipeline where the fragment density map is read to
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops generate the fragment areas>.
-pattern PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = PipelineStageFlagBits 0x00800000
--- | 'PIPELINE_STAGE_MESH_SHADER_BIT_NV' specifies the mesh shader stage.
-pattern PIPELINE_STAGE_MESH_SHADER_BIT_NV = PipelineStageFlagBits 0x00100000
--- | 'PIPELINE_STAGE_TASK_SHADER_BIT_NV' specifies the task shader stage.
-pattern PIPELINE_STAGE_TASK_SHADER_BIT_NV = PipelineStageFlagBits 0x00080000
--- | 'PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV' specifies the stage of the
--- pipeline where the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image shading rate image>
--- is read to determine the shading rate for portions of a rasterized
--- primitive.
-pattern PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = PipelineStageFlagBits 0x00400000
--- | 'PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' specifies the
--- execution of
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdCopyAccelerationStructureKHR',
--- and
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdWriteAccelerationStructuresPropertiesKHR'.
-pattern PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = PipelineStageFlagBits 0x02000000
--- | 'PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR' specifies the execution of
--- the ray tracing shader stages.
-pattern PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR = PipelineStageFlagBits 0x00200000
--- | 'PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT' specifies the stage of
--- the pipeline where the predicate of conditional rendering is consumed.
-pattern PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT = PipelineStageFlagBits 0x00040000
--- | 'PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT' specifies the stage of the
--- pipeline where vertex attribute output values are written to the
--- transform feedback buffers.
-pattern PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT = PipelineStageFlagBits 0x01000000
-
-type PipelineStageFlags = PipelineStageFlagBits
-
-instance Show PipelineStageFlagBits where
-  showsPrec p = \case
-    PIPELINE_STAGE_TOP_OF_PIPE_BIT -> showString "PIPELINE_STAGE_TOP_OF_PIPE_BIT"
-    PIPELINE_STAGE_DRAW_INDIRECT_BIT -> showString "PIPELINE_STAGE_DRAW_INDIRECT_BIT"
-    PIPELINE_STAGE_VERTEX_INPUT_BIT -> showString "PIPELINE_STAGE_VERTEX_INPUT_BIT"
-    PIPELINE_STAGE_VERTEX_SHADER_BIT -> showString "PIPELINE_STAGE_VERTEX_SHADER_BIT"
-    PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT -> showString "PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"
-    PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT -> showString "PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"
-    PIPELINE_STAGE_GEOMETRY_SHADER_BIT -> showString "PIPELINE_STAGE_GEOMETRY_SHADER_BIT"
-    PIPELINE_STAGE_FRAGMENT_SHADER_BIT -> showString "PIPELINE_STAGE_FRAGMENT_SHADER_BIT"
-    PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT -> showString "PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"
-    PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT -> showString "PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"
-    PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT -> showString "PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"
-    PIPELINE_STAGE_COMPUTE_SHADER_BIT -> showString "PIPELINE_STAGE_COMPUTE_SHADER_BIT"
-    PIPELINE_STAGE_TRANSFER_BIT -> showString "PIPELINE_STAGE_TRANSFER_BIT"
-    PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT -> showString "PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"
-    PIPELINE_STAGE_HOST_BIT -> showString "PIPELINE_STAGE_HOST_BIT"
-    PIPELINE_STAGE_ALL_GRAPHICS_BIT -> showString "PIPELINE_STAGE_ALL_GRAPHICS_BIT"
-    PIPELINE_STAGE_ALL_COMMANDS_BIT -> showString "PIPELINE_STAGE_ALL_COMMANDS_BIT"
-    PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV -> showString "PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV"
-    PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT -> showString "PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT"
-    PIPELINE_STAGE_MESH_SHADER_BIT_NV -> showString "PIPELINE_STAGE_MESH_SHADER_BIT_NV"
-    PIPELINE_STAGE_TASK_SHADER_BIT_NV -> showString "PIPELINE_STAGE_TASK_SHADER_BIT_NV"
-    PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV -> showString "PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV"
-    PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR -> showString "PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"
-    PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR -> showString "PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR"
-    PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT -> showString "PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT"
-    PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT -> showString "PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT"
-    PipelineStageFlagBits x -> showParen (p >= 11) (showString "PipelineStageFlagBits 0x" . showHex x)
-
-instance Read PipelineStageFlagBits where
-  readPrec = parens (choose [("PIPELINE_STAGE_TOP_OF_PIPE_BIT", pure PIPELINE_STAGE_TOP_OF_PIPE_BIT)
-                            , ("PIPELINE_STAGE_DRAW_INDIRECT_BIT", pure PIPELINE_STAGE_DRAW_INDIRECT_BIT)
-                            , ("PIPELINE_STAGE_VERTEX_INPUT_BIT", pure PIPELINE_STAGE_VERTEX_INPUT_BIT)
-                            , ("PIPELINE_STAGE_VERTEX_SHADER_BIT", pure PIPELINE_STAGE_VERTEX_SHADER_BIT)
-                            , ("PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT", pure PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
-                            , ("PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", pure PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
-                            , ("PIPELINE_STAGE_GEOMETRY_SHADER_BIT", pure PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
-                            , ("PIPELINE_STAGE_FRAGMENT_SHADER_BIT", pure PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
-                            , ("PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT", pure PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
-                            , ("PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT", pure PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
-                            , ("PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT", pure PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
-                            , ("PIPELINE_STAGE_COMPUTE_SHADER_BIT", pure PIPELINE_STAGE_COMPUTE_SHADER_BIT)
-                            , ("PIPELINE_STAGE_TRANSFER_BIT", pure PIPELINE_STAGE_TRANSFER_BIT)
-                            , ("PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT", pure PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
-                            , ("PIPELINE_STAGE_HOST_BIT", pure PIPELINE_STAGE_HOST_BIT)
-                            , ("PIPELINE_STAGE_ALL_GRAPHICS_BIT", pure PIPELINE_STAGE_ALL_GRAPHICS_BIT)
-                            , ("PIPELINE_STAGE_ALL_COMMANDS_BIT", pure PIPELINE_STAGE_ALL_COMMANDS_BIT)
-                            , ("PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV", pure PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV)
-                            , ("PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", pure PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT)
-                            , ("PIPELINE_STAGE_MESH_SHADER_BIT_NV", pure PIPELINE_STAGE_MESH_SHADER_BIT_NV)
-                            , ("PIPELINE_STAGE_TASK_SHADER_BIT_NV", pure PIPELINE_STAGE_TASK_SHADER_BIT_NV)
-                            , ("PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV", pure PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV)
-                            , ("PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", pure PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR)
-                            , ("PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", pure PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR)
-                            , ("PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", pure PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT)
-                            , ("PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", pure PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineStageFlagBits")
-                       v <- step readPrec
-                       pure (PipelineStageFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineStageFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/PipelineStageFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineStageFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits  ( PipelineStageFlagBits
-                                                           , PipelineStageFlags
-                                                           ) where
-
-
-
-data PipelineStageFlagBits
-
-type PipelineStageFlags = PipelineStageFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineTessellationStateCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineTessellationStateCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineTessellationStateCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags  (PipelineTessellationStateCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineTessellationStateCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineTessellationStateCreateFlags' is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo'
-newtype PipelineTessellationStateCreateFlags = PipelineTessellationStateCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineTessellationStateCreateFlags where
-  showsPrec p = \case
-    PipelineTessellationStateCreateFlags x -> showParen (p >= 11) (showString "PipelineTessellationStateCreateFlags 0x" . showHex x)
-
-instance Read PipelineTessellationStateCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineTessellationStateCreateFlags")
-                       v <- step readPrec
-                       pure (PipelineTessellationStateCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineVertexInputStateCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineVertexInputStateCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineVertexInputStateCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags  (PipelineVertexInputStateCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineVertexInputStateCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineVertexInputStateCreateFlags' is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo'
-newtype PipelineVertexInputStateCreateFlags = PipelineVertexInputStateCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineVertexInputStateCreateFlags where
-  showsPrec p = \case
-    PipelineVertexInputStateCreateFlags x -> showParen (p >= 11) (showString "PipelineVertexInputStateCreateFlags 0x" . showHex x)
-
-instance Read PipelineVertexInputStateCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineVertexInputStateCreateFlags")
-                       v <- step readPrec
-                       pure (PipelineVertexInputStateCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PipelineViewportStateCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/PipelineViewportStateCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PipelineViewportStateCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PipelineViewportStateCreateFlags  (PipelineViewportStateCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPipelineViewportStateCreateFlags - Reserved for future use
---
--- = Description
---
--- 'PipelineViewportStateCreateFlags' is a bitmask type for setting a mask,
--- but is currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'
-newtype PipelineViewportStateCreateFlags = PipelineViewportStateCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineViewportStateCreateFlags where
-  showsPrec p = \case
-    PipelineViewportStateCreateFlags x -> showParen (p >= 11) (showString "PipelineViewportStateCreateFlags 0x" . showHex x)
-
-instance Read PipelineViewportStateCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineViewportStateCreateFlags")
-                       v <- step readPrec
-                       pure (PipelineViewportStateCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PolygonMode.hs b/src/Graphics/Vulkan/Core10/Enums/PolygonMode.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PolygonMode.hs
+++ /dev/null
@@ -1,88 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PolygonMode  (PolygonMode( POLYGON_MODE_FILL
-                                                             , POLYGON_MODE_LINE
-                                                             , POLYGON_MODE_POINT
-                                                             , POLYGON_MODE_FILL_RECTANGLE_NV
-                                                             , ..
-                                                             )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkPolygonMode - Control polygon rasterization mode
---
--- = Description
---
--- 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
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
-newtype PolygonMode = PolygonMode Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'POLYGON_MODE_FILL' specifies that polygons are rendered using the
--- polygon rasterization rules in this section.
-pattern POLYGON_MODE_FILL = PolygonMode 0
--- | 'POLYGON_MODE_LINE' specifies that polygon edges are drawn as line
--- segments.
-pattern POLYGON_MODE_LINE = PolygonMode 1
--- | 'POLYGON_MODE_POINT' specifies that polygon vertices are drawn as
--- points.
-pattern POLYGON_MODE_POINT = PolygonMode 2
--- | 'POLYGON_MODE_FILL_RECTANGLE_NV' specifies that polygons are rendered
--- using polygon rasterization rules, modified to consider a sample within
--- the primitive if the sample location is inside the axis-aligned bounding
--- box of the triangle after projection. Note that the barycentric weights
--- used in attribute interpolation /can/ extend outside the range [0,1]
--- when these primitives are shaded. Special treatment is given to a sample
--- position on the boundary edge of the bounding box. In such a case, if
--- two rectangles lie on either side of a common edge (with identical
--- endpoints) on which a sample position lies, then exactly one of the
--- triangles /must/ produce a fragment that covers that sample during
--- rasterization.
---
--- Polygons rendered in 'POLYGON_MODE_FILL_RECTANGLE_NV' mode /may/ be
--- clipped by the frustum or by user clip planes. If clipping is applied,
--- the triangle is culled rather than clipped.
---
--- Area calculation and facingness are determined for
--- 'POLYGON_MODE_FILL_RECTANGLE_NV' mode using the triangle’s vertices.
-pattern POLYGON_MODE_FILL_RECTANGLE_NV = PolygonMode 1000153000
-{-# complete POLYGON_MODE_FILL,
-             POLYGON_MODE_LINE,
-             POLYGON_MODE_POINT,
-             POLYGON_MODE_FILL_RECTANGLE_NV :: PolygonMode #-}
-
-instance Show PolygonMode where
-  showsPrec p = \case
-    POLYGON_MODE_FILL -> showString "POLYGON_MODE_FILL"
-    POLYGON_MODE_LINE -> showString "POLYGON_MODE_LINE"
-    POLYGON_MODE_POINT -> showString "POLYGON_MODE_POINT"
-    POLYGON_MODE_FILL_RECTANGLE_NV -> showString "POLYGON_MODE_FILL_RECTANGLE_NV"
-    PolygonMode x -> showParen (p >= 11) (showString "PolygonMode " . showsPrec 11 x)
-
-instance Read PolygonMode where
-  readPrec = parens (choose [("POLYGON_MODE_FILL", pure POLYGON_MODE_FILL)
-                            , ("POLYGON_MODE_LINE", pure POLYGON_MODE_LINE)
-                            , ("POLYGON_MODE_POINT", pure POLYGON_MODE_POINT)
-                            , ("POLYGON_MODE_FILL_RECTANGLE_NV", pure POLYGON_MODE_FILL_RECTANGLE_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PolygonMode")
-                       v <- step readPrec
-                       pure (PolygonMode v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/PrimitiveTopology.hs b/src/Graphics/Vulkan/Core10/Enums/PrimitiveTopology.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/PrimitiveTopology.hs
+++ /dev/null
@@ -1,152 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.PrimitiveTopology  (PrimitiveTopology( PRIMITIVE_TOPOLOGY_POINT_LIST
-                                                                         , PRIMITIVE_TOPOLOGY_LINE_LIST
-                                                                         , PRIMITIVE_TOPOLOGY_LINE_STRIP
-                                                                         , PRIMITIVE_TOPOLOGY_TRIANGLE_LIST
-                                                                         , PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
-                                                                         , PRIMITIVE_TOPOLOGY_TRIANGLE_FAN
-                                                                         , PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY
-                                                                         , PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY
-                                                                         , PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY
-                                                                         , PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
-                                                                         , PRIMITIVE_TOPOLOGY_PATCH_LIST
-                                                                         , ..
-                                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkPrimitiveTopology - Supported primitive topologies
---
--- = Description
---
--- Each primitive topology, and its construction from a list of vertices,
--- is described in detail below with a supporting diagram, according to the
--- following key:
---
--- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
--- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iOC45ODE3ODY3IgogICBoZWlnaHQ9IjguOTgxNzg2NyIKICAgdmlld0JveD0iMCAwIDguOTgxNzg2OCA4Ljk4MTc4NyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnODY1MyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0icHJpbWl0aXZlX3RvcG9sb2d5X2tleV92ZXJ0ZXguc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzODY0NyIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMi44Mjg0MjcxIgogICAgIGlua3NjYXBlOmN4PSIxMDAuMjYxNiIKICAgICBpbmtzY2FwZTpjeT0iLTEwNC40NTE0NyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDAxIgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOSIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTkiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBmaXQtbWFyZ2luLXRvcD0iMSIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjEiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMSIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMSIKICAgICBpbmtzY2FwZTpzbmFwLWdyaWRzPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtdGV4dC1iYXNlbGluZT0idHJ1ZSIKICAgICBpbmtzY2FwZTpzbmFwLW9iamVjdC1taWRwb2ludHM9InRydWUiCiAgICAgdW5pdHM9InB4IgogICAgIGJvcmRlcmxheWVyPSJmYWxzZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgaWQ9ImdyaWQ5NjI2IgogICAgICAgb3JpZ2lueD0iLTkwLjUwOTExIgogICAgICAgb3JpZ2lueT0iLTY0NS41MDkyMiIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE4NjUwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAzLjA0MzUsMjMyLjUyNikiPgogICAgPGNpcmNsZQogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InBhdGg0NTE3LTAtOC01LTItMyIKICAgICAgIGN4PSIxMDcuNTM0MzkiCiAgICAgICBjeT0iLTIyOC4wMzUxMSIKICAgICAgIHI9IjMuNDkwODkzMSIgLz4KICA8L2c+Cjwvc3ZnPgo= primitive topology key vertex>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | Vertex    | A point in 3-dimensional space. Positions chosen within the diagrams are arbitrary and for illustration only.                  |
--- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
--- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iOS41NzgxMjUiCiAgIGhlaWdodD0iMTMuODc1IgogICB2aWV3Qm94PSIwIDAgOS41NzgxMjUxIDEzLjg3NSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnODY1MyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0icHJpbWl0aXZlX3RvcG9sb2d5X2tleV92ZXJ0ZXhfbnVtYmVyLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczg2NDciIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjIuODI4NDI3MSIKICAgICBpbmtzY2FwZTpjeD0iNzguNTg2NDQiCiAgICAgaW5rc2NhcGU6Y3k9Ii02OS41NjgzODgiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0idHJ1ZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAwMSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTkiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii05IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgZml0LW1hcmdpbi10b3A9IjEiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIxIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjEiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjEiCiAgICAgaW5rc2NhcGU6c25hcC1ncmlkcz0idHJ1ZSIKICAgICBpbmtzY2FwZTpzbmFwLXRleHQtYmFzZWxpbmU9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC1vYmplY3QtbWlkcG9pbnRzPSJ0cnVlIgogICAgIHVuaXRzPSJweCIKICAgICBib3JkZXJsYXllcj0iZmFsc2UiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIHR5cGU9Inh5Z3JpZCIKICAgICAgIGlkPSJncmlkOTYyNiIKICAgICAgIG9yaWdpbng9Ii05MC4zNjcxOTEiCiAgICAgICBvcmlnaW55PSItNjE4Ljc1Nzg0IiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTg2NTAiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMDIuOTAxNTgsMjEwLjY2Nzg2KSI+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjEuMjU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidzYW5zLXNlcmlmLCBOb3JtYWwnO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWw7Zm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDt0ZXh0LWFsaWduOmNlbnRlcjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6bWlkZGxlO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS4xNjQyNzM5OCIKICAgICAgIHg9IjEwNy41MzQzOSIKICAgICAgIHk9Ii0xOTguMDM1MDUiCiAgICAgICBpZD0idGV4dDUwNzAtMi0yLTktOS00MS05Ij48dHNwYW4KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgaWQ9InRzcGFuNTA2OC0wLTMtMzYtOS0xLTUiCiAgICAgICAgIHg9IjEwNy41MzQzOSIKICAgICAgICAgeT0iLTE5OC4wMzUwNSIKICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjE2cHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidzYW5zLXNlcmlmLCBOb3JtYWwnO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWw7Zm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDt0ZXh0LWFsaWduOmNlbnRlcjt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6bWlkZGxlO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MS4xNjQyNzM5OCI+NTwvdHNwYW4+PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg== primitive topology key vertex number>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Vertex    | Sequence position of a vertex within the provided vertex data.                                                                 |
--- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Number    |                                                                                                                                |
--- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
--- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNTcuNDYxNTcxIgogICBoZWlnaHQ9IjguOTgxNzg2NyIKICAgdmlld0JveD0iMCAwIDU3LjQ2MTU3MSA4Ljk4MTc4NyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnODY1MyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0icHJpbWl0aXZlX3RvcG9sb2d5X2tleV9wcm92b2tpbmdfdmVydGV4LnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczg2NDciPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iQXJyb3cxTXN0YXJ0IgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0ibWFya2VyNjc0NC04LTItMiIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNjc0Mi05LTY3LTUiCiAgICAgICAgIGQ9Ik0gMCwwIDUsLTUgLTEyLjUsMCA1LDUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZiMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZiMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNCwwLDAsMC40LDQsMCkiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjIuODI4NDI3MSIKICAgICBpbmtzY2FwZTpjeD0iLTEzOC43MDg0NCIKICAgICBpbmtzY2FwZTpjeT0iLTU1Ljg2NTYyOCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU5NSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxNDk1IgogICAgIGlua3NjYXBlOndpbmRvdy14PSI0ODEiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjE5MSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGZpdC1tYXJnaW4tdG9wPSIxIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMSIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIxIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIxIgogICAgIGlua3NjYXBlOnNuYXAtZ3JpZHM9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC10ZXh0LWJhc2VsaW5lPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtb2JqZWN0LW1pZHBvaW50cz0idHJ1ZSIKICAgICB1bml0cz0icHgiCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIj4KICAgIDxpbmtzY2FwZTpncmlkCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBpZD0iZ3JpZDk2MjYiCiAgICAgICBvcmlnaW54PSItOTAuNTA5MTEiCiAgICAgICBvcmlnaW55PSItNTk1LjUwOTE2IiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTg2NTAiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMDMuMDQzNSwxODIuNTI1OTUpIj4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTMwLDM1LjAwMDA1NykiCiAgICAgICBpZD0iZzExOTEzLTAiPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDE4NzItMi0zLTEtMS01IgogICAgICAgICBkPSJtIDI4Ny41MzQzOSwtMjEzLjAzNTExIGggLTUwIgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmIwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXItc3RhcnQ6dXJsKCNtYXJrZXI2NzQ0LTgtMi0yKSIgLz4KICAgICAgPGNpcmNsZQogICAgICAgICByPSIzLjQ5MDg5MzEiCiAgICAgICAgIGN5PSItMjEzLjAzNTExIgogICAgICAgICBjeD0iMjM3LjUzNDM5IgogICAgICAgICBpZD0icGF0aDQ1MTctMC04LTUtOTEtMC0zLTgiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZjAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo= primitive topology key provoking vertex>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | Provoking | Provoking vertex within the main primitive. The arrow points along an edge of the relevant primitive, following winding order. |
--- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Vertex    | Used in                                                                                                                        |
--- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |           | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-flatshading flat shading>.       |
--- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
--- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iODIiCiAgIGhlaWdodD0iMyIKICAgdmlld0JveD0iMCAwIDgyLjAwMDAwMSAzLjAwMDAwMDEiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2Zzg2NTMiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuNCAoNWRhNjg5YzMxMywgMjAxOS0wMS0xNCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9InByaW1pdGl2ZV90b3BvbG9neV9rZXlfZWRnZS5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM4NjQ3IiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIyLjgyODQyNzEiCiAgICAgaW5rc2NhcGU6Y3g9Ii0xNTUuNzc5NSIKICAgICBpbmtzY2FwZTpjeT0iLTQuNTU4MjQ3MyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjI2MiIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxNTA3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSI0ODIiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjM4NSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGZpdC1tYXJnaW4tdG9wPSIxIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMSIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIxIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIxIgogICAgIGlua3NjYXBlOnNuYXAtZ3JpZHM9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC10ZXh0LWJhc2VsaW5lPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtb2JqZWN0LW1pZHBvaW50cz0idHJ1ZSIKICAgICB1bml0cz0icHgiCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIj4KICAgIDxpbmtzY2FwZTpncmlkCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBpZD0iZ3JpZDk2MjYiCiAgICAgICBvcmlnaW54PSItMzA5IgogICAgICAgb3JpZ2lueT0iLTY0OC41MDAwMyIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE4NjUwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzIxLjUzNDM5LDIyOS41MzUwMykiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAzMjIuNTM0MzksLTIyOC4wMzUwMyBoIDgwIgogICAgICAgaWQ9InBhdGgyMDMzLTEiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogIDwvZz4KPC9zdmc+Cg== primitive topology key edge>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | Primitive | An edge connecting the points of a main primitive.                                                                             |
--- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Edge      |                                                                                                                                |
--- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
--- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iODIiCiAgIGhlaWdodD0iMyIKICAgdmlld0JveD0iMCAwIDgyLjAwMDAwMSAzLjAwMDAwMDEiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2Zzg2NTMiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuNCAoNWRhNjg5YzMxMywgMjAxOS0wMS0xNCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9InByaW1pdGl2ZV90b3BvbG9neV9rZXlfYWRqYWNlbmN5X2VkZ2Uuc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzODY0NyIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMi44Mjg0MjcxIgogICAgIGlua3NjYXBlOmN4PSItMTYxLjc4OTkiCiAgICAgaW5rc2NhcGU6Y3k9Ii03MC43NzUwMjMiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0idHJ1ZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjIyMzMiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTM0MyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMzkyIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyOTYiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBmaXQtbWFyZ2luLXRvcD0iMSIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjEiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMSIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMSIKICAgICBpbmtzY2FwZTpzbmFwLWdyaWRzPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtdGV4dC1iYXNlbGluZT0idHJ1ZSIKICAgICBpbmtzY2FwZTpzbmFwLW9iamVjdC1taWRwb2ludHM9InRydWUiCiAgICAgdW5pdHM9InB4IgogICAgIGJvcmRlcmxheWVyPSJmYWxzZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgaWQ9ImdyaWQ5NjI2IgogICAgICAgb3JpZ2lueD0iLTMwOSIKICAgICAgIG9yaWdpbnk9Ii02MjMuNTAwMDMiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhODY1MCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMyMS41MzQzOSwyMDQuNTM1MDMpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo0LCA0O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzIyLjUzNDM5LC0yMDMuMDM1MDMgaCA4MCIKICAgICAgIGlkPSJwYXRoMjAzMyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPC9nPgo8L3N2Zz4K primitive topology key adjacency edge>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | Adjacency | Points connected by these lines do not contribute to a main primitive, and are only accessible in a                            |
--- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Edge      | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry geometry shader>.                      |
--- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
--- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNTUuMDYzODE2IgogICBoZWlnaHQ9IjQ2LjE3ODgyOSIKICAgdmlld0JveD0iMCAwIDU1LjA2MzgxNyA0Ni4xNzg4MyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnODY1MyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0icHJpbWl0aXZlX3RvcG9sb2d5X2tleV93aW5kaW5nX29yZGVyLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczg2NDciPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaWQ9Im1hcmtlcjMwMzktMSIKICAgICAgIHJlZlg9IjAiCiAgICAgICByZWZZPSIwIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iQXJyb3cxTWVuZCI+CiAgICAgIDxwYXRoCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjQsMCwwLC0wLjQsLTQsMCkiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDAsMCA1LC01IC0xMi41LDAgNSw1IFoiCiAgICAgICAgIGlkPSJwYXRoMzAzNy0wIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpZD0ibWFya2VyMjg5MS02IgogICAgICAgcmVmWD0iMCIKICAgICAgIHJlZlk9IjAiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJBcnJvdzFNZW5kIj4KICAgICAgPHBhdGgKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNCwwLDAsLTAuNCwtNCwwKSIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMCwwIDUsLTUgLTEyLjUsMCA1LDUgWiIKICAgICAgICAgaWQ9InBhdGgyODg5LTYiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IkFycm93MU1lbmQiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJBcnJvdzFNZW5kLTgwIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg4OTAtMCIKICAgICAgICAgZD0iTSAwLDAgNSwtNSAtMTIuNSwwIDUsNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNCwwLDAsLTAuNCwtNCwwKSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMi44Mjg0MjcxIgogICAgIGlua3NjYXBlOmN4PSItMTQwLjU1MDU2IgogICAgIGlua3NjYXBlOmN5PSItOC40MzI2NjQ2IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMDEiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii05IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGZpdC1tYXJnaW4tdG9wPSIxIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMSIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIxIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIxIgogICAgIGlua3NjYXBlOnNuYXAtZ3JpZHM9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC10ZXh0LWJhc2VsaW5lPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtb2JqZWN0LW1pZHBvaW50cz0idHJ1ZSIKICAgICB1bml0cz0icHgiCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIj4KICAgIDxpbmtzY2FwZTpncmlkCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBpZD0iZ3JpZDk2MjYiCiAgICAgICBvcmlnaW54PSItMzA3LjAyOTMzIgogICAgICAgb3JpZ2lueT0iLTU2Ni40NjA5NyIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE4NjUwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzE5LjU2MzcxLDE5MC42NzQ4KSI+CiAgICA8ZwogICAgICAgaWQ9Imc0Mzg5LTg5IgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjU1LC00NC45OTk5OTUpIj4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgxODY4LTc5IgogICAgICAgICBkPSJtIDY3LjUzNDM5MywtMTEzLjAzNTEgMjAsLTMwIgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXItZW5kOnVybCgjbWFya2VyMzAzOS0xKSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgxODcwLTMiCiAgICAgICAgIGQ9Im0gOTcuNTM0MzkzLC0xNDMuMDM1MSAxOS45OTk5OTcsMzAiCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO21hcmtlci1lbmQ6dXJsKCNtYXJrZXIyODkxLTYpIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDE4NzItOSIKICAgICAgICAgZD0iTSAxMTcuNTM0MzksLTEwMy4wMzUxIEggNjcuNTM0MzkzIgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXItZW5kOnVybCgjQXJyb3cxTWVuZC04MCkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K primitive topology key winding order>> | Winding   | The relative order in which vertices are defined within a primitive, used in the                                               |
--- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Order     | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-polygons-basic facing determination>. |
--- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |           | This ordering has no specific start or end point.                                                                              |
--- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
---
--- The diagrams are supported with mathematical definitions where the
--- vertices (v) and primitives (p) are numbered starting from 0; v0 is the
--- first vertex in the provided data and p0 is the first primitive in the
--- set of primitives defined by the vertices and topology.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'
-newtype PrimitiveTopology = PrimitiveTopology Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'PRIMITIVE_TOPOLOGY_POINT_LIST' specifies a series of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-point-lists separate point primitives>.
-pattern PRIMITIVE_TOPOLOGY_POINT_LIST = PrimitiveTopology 0
--- | 'PRIMITIVE_TOPOLOGY_LINE_LIST' specifies a series of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-line-lists separate line primitives>.
-pattern PRIMITIVE_TOPOLOGY_LINE_LIST = PrimitiveTopology 1
--- | 'PRIMITIVE_TOPOLOGY_LINE_STRIP' specifies a series of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-line-strips connected line primitives>
--- with consecutive lines sharing a vertex.
-pattern PRIMITIVE_TOPOLOGY_LINE_STRIP = PrimitiveTopology 2
--- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_LIST' specifies a series of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-lists separate triangle primitives>.
-pattern PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = PrimitiveTopology 3
--- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP' specifies a series of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-strips connected triangle primitives>
--- with consecutive triangles sharing an edge.
-pattern PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = PrimitiveTopology 4
--- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_FAN' specifies a series of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-fans connected triangle primitives>
--- with all triangles sharing a common vertex.
-pattern PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = PrimitiveTopology 5
--- | 'PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY' specifies a series of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-line-lists-with-adjacency separate line primitives with adjacency>.
-pattern PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = PrimitiveTopology 6
--- | 'PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY' specifies a series of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-line-strips-with-adjacency connected line primitives with adjacency>,
--- with consecutive primitives sharing three vertices.
-pattern PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = PrimitiveTopology 7
--- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY' specifies a series of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-lists-with-adjacency separate triangle primitives with adjacency>.
-pattern PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = PrimitiveTopology 8
--- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY' specifies
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-strips-with-adjacency connected triangle primitives with adjacency>,
--- with consecutive triangles sharing an edge.
-pattern PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = PrimitiveTopology 9
--- | 'PRIMITIVE_TOPOLOGY_PATCH_LIST' specifies
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-patch-lists separate patch primitives>.
-pattern PRIMITIVE_TOPOLOGY_PATCH_LIST = PrimitiveTopology 10
-{-# complete PRIMITIVE_TOPOLOGY_POINT_LIST,
-             PRIMITIVE_TOPOLOGY_LINE_LIST,
-             PRIMITIVE_TOPOLOGY_LINE_STRIP,
-             PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
-             PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
-             PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
-             PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
-             PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
-             PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
-             PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY,
-             PRIMITIVE_TOPOLOGY_PATCH_LIST :: PrimitiveTopology #-}
-
-instance Show PrimitiveTopology where
-  showsPrec p = \case
-    PRIMITIVE_TOPOLOGY_POINT_LIST -> showString "PRIMITIVE_TOPOLOGY_POINT_LIST"
-    PRIMITIVE_TOPOLOGY_LINE_LIST -> showString "PRIMITIVE_TOPOLOGY_LINE_LIST"
-    PRIMITIVE_TOPOLOGY_LINE_STRIP -> showString "PRIMITIVE_TOPOLOGY_LINE_STRIP"
-    PRIMITIVE_TOPOLOGY_TRIANGLE_LIST -> showString "PRIMITIVE_TOPOLOGY_TRIANGLE_LIST"
-    PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP -> showString "PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP"
-    PRIMITIVE_TOPOLOGY_TRIANGLE_FAN -> showString "PRIMITIVE_TOPOLOGY_TRIANGLE_FAN"
-    PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY -> showString "PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY"
-    PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY -> showString "PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY"
-    PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY -> showString "PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY"
-    PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY -> showString "PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY"
-    PRIMITIVE_TOPOLOGY_PATCH_LIST -> showString "PRIMITIVE_TOPOLOGY_PATCH_LIST"
-    PrimitiveTopology x -> showParen (p >= 11) (showString "PrimitiveTopology " . showsPrec 11 x)
-
-instance Read PrimitiveTopology where
-  readPrec = parens (choose [("PRIMITIVE_TOPOLOGY_POINT_LIST", pure PRIMITIVE_TOPOLOGY_POINT_LIST)
-                            , ("PRIMITIVE_TOPOLOGY_LINE_LIST", pure PRIMITIVE_TOPOLOGY_LINE_LIST)
-                            , ("PRIMITIVE_TOPOLOGY_LINE_STRIP", pure PRIMITIVE_TOPOLOGY_LINE_STRIP)
-                            , ("PRIMITIVE_TOPOLOGY_TRIANGLE_LIST", pure PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
-                            , ("PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP", pure PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
-                            , ("PRIMITIVE_TOPOLOGY_TRIANGLE_FAN", pure PRIMITIVE_TOPOLOGY_TRIANGLE_FAN)
-                            , ("PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY", pure PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY)
-                            , ("PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY", pure PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY)
-                            , ("PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY", pure PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY)
-                            , ("PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY", pure PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY)
-                            , ("PRIMITIVE_TOPOLOGY_PATCH_LIST", pure PRIMITIVE_TOPOLOGY_PATCH_LIST)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PrimitiveTopology")
-                       v <- step readPrec
-                       pure (PrimitiveTopology v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/QueryControlFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/QueryControlFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/QueryControlFlagBits.hs
+++ /dev/null
@@ -1,49 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.QueryControlFlagBits  ( QueryControlFlagBits( QUERY_CONTROL_PRECISE_BIT
-                                                                                , ..
-                                                                                )
-                                                          , QueryControlFlags
-                                                          ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkQueryControlFlagBits - Bitmask specifying constraints on a query
---
--- = See Also
---
--- 'QueryControlFlags'
-newtype QueryControlFlagBits = QueryControlFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'QUERY_CONTROL_PRECISE_BIT' specifies the precision of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-occlusion occlusion queries>.
-pattern QUERY_CONTROL_PRECISE_BIT = QueryControlFlagBits 0x00000001
-
-type QueryControlFlags = QueryControlFlagBits
-
-instance Show QueryControlFlagBits where
-  showsPrec p = \case
-    QUERY_CONTROL_PRECISE_BIT -> showString "QUERY_CONTROL_PRECISE_BIT"
-    QueryControlFlagBits x -> showParen (p >= 11) (showString "QueryControlFlagBits 0x" . showHex x)
-
-instance Read QueryControlFlagBits where
-  readPrec = parens (choose [("QUERY_CONTROL_PRECISE_BIT", pure QUERY_CONTROL_PRECISE_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "QueryControlFlagBits")
-                       v <- step readPrec
-                       pure (QueryControlFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/QueryControlFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/QueryControlFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/QueryControlFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.QueryControlFlagBits  ( QueryControlFlagBits
-                                                          , QueryControlFlags
-                                                          ) where
-
-
-
-data QueryControlFlagBits
-
-type QueryControlFlags = QueryControlFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/QueryPipelineStatisticFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/QueryPipelineStatisticFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/QueryPipelineStatisticFlagBits.hs
+++ /dev/null
@@ -1,190 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits  ( QueryPipelineStatisticFlagBits( QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT
-                                                                                                    , QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT
-                                                                                                    , QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT
-                                                                                                    , QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT
-                                                                                                    , QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT
-                                                                                                    , QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT
-                                                                                                    , QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT
-                                                                                                    , QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT
-                                                                                                    , QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT
-                                                                                                    , QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT
-                                                                                                    , QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
-                                                                                                    , ..
-                                                                                                    )
-                                                                    , QueryPipelineStatisticFlags
-                                                                    ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkQueryPipelineStatisticFlagBits - Bitmask specifying queried pipeline
--- statistics
---
--- = Description
---
--- 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults'),
--- or request it be put into host memory (via
--- 'Graphics.Vulkan.Core10.Query.getQueryPoolResults').
---
--- = See Also
---
--- 'QueryPipelineStatisticFlags'
-newtype QueryPipelineStatisticFlagBits = QueryPipelineStatisticFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT' specifies that
--- queries managed by the pool will count the number of vertices processed
--- by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing input assembly>
--- stage. Vertices corresponding to incomplete primitives /may/ contribute
--- to the count.
-pattern QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = QueryPipelineStatisticFlagBits 0x00000001
--- | 'QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT' specifies that
--- queries managed by the pool will count the number of primitives
--- processed by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing input assembly>
--- stage. If primitive restart is enabled, restarting the primitive
--- topology has no effect on the count. Incomplete primitives /may/ be
--- counted.
-pattern QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = QueryPipelineStatisticFlagBits 0x00000002
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-vertex-execution invoked>.
-pattern QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000004
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution invoked>.
--- In the case of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry-invocations instanced geometry shaders>,
--- the geometry shader invocations count is incremented for each separate
--- instanced invocation.
-pattern QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000008
--- | '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.
-pattern QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = QueryPipelineStatisticFlagBits 0x00000010
--- | 'QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT' specifies that
--- queries managed by the pool will count the number of primitives
--- processed by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>
--- stage of the pipeline. The counter’s value is incremented each time a
--- primitive reaches the primitive clipping stage.
-pattern QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000020
--- | 'QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT' specifies that
--- queries managed by the pool will count the number of primitives output
--- by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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.
-pattern QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = QueryPipelineStatisticFlagBits 0x00000040
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-execution invoked>.
-pattern QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000080
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-tessellation-control-execution invoked>.
-pattern QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = QueryPipelineStatisticFlagBits 0x00000100
--- | '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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-tessellation-evaluation-execution invoked>.
-pattern QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000200
--- | '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.
-pattern QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000400
-
-type QueryPipelineStatisticFlags = QueryPipelineStatisticFlagBits
-
-instance Show QueryPipelineStatisticFlagBits where
-  showsPrec p = \case
-    QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT -> showString "QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"
-    QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT -> showString "QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"
-    QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"
-    QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"
-    QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT -> showString "QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"
-    QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"
-    QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT -> showString "QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"
-    QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"
-    QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT -> showString "QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"
-    QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"
-    QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"
-    QueryPipelineStatisticFlagBits x -> showParen (p >= 11) (showString "QueryPipelineStatisticFlagBits 0x" . showHex x)
-
-instance Read QueryPipelineStatisticFlagBits where
-  readPrec = parens (choose [("QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT", pure QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
-                            , ("QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT", pure QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
-                            , ("QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
-                            , ("QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
-                            , ("QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT", pure QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
-                            , ("QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
-                            , ("QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT", pure QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
-                            , ("QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
-                            , ("QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT", pure QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
-                            , ("QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
-                            , ("QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "QueryPipelineStatisticFlagBits")
-                       v <- step readPrec
-                       pure (QueryPipelineStatisticFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/QueryPoolCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/QueryPoolCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/QueryPoolCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.QueryPoolCreateFlags  (QueryPoolCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkQueryPoolCreateFlags - Reserved for future use
---
--- = Description
---
--- 'QueryPoolCreateFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Query.QueryPoolCreateInfo'
-newtype QueryPoolCreateFlags = QueryPoolCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show QueryPoolCreateFlags where
-  showsPrec p = \case
-    QueryPoolCreateFlags x -> showParen (p >= 11) (showString "QueryPoolCreateFlags 0x" . showHex x)
-
-instance Read QueryPoolCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "QueryPoolCreateFlags")
-                       v <- step readPrec
-                       pure (QueryPoolCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/QueryResultFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/QueryResultFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/QueryResultFlagBits.hs
+++ /dev/null
@@ -1,69 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.QueryResultFlagBits  ( QueryResultFlagBits( QUERY_RESULT_64_BIT
-                                                                              , QUERY_RESULT_WAIT_BIT
-                                                                              , QUERY_RESULT_WITH_AVAILABILITY_BIT
-                                                                              , QUERY_RESULT_PARTIAL_BIT
-                                                                              , ..
-                                                                              )
-                                                         , QueryResultFlags
-                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkQueryResultFlagBits - Bitmask specifying how and when query results
--- are returned
---
--- = See Also
---
--- 'QueryResultFlags'
-newtype QueryResultFlagBits = QueryResultFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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 QUERY_RESULT_64_BIT = QueryResultFlagBits 0x00000001
--- | 'QUERY_RESULT_WAIT_BIT' specifies that Vulkan will wait for each query’s
--- status to become available before retrieving its results.
-pattern QUERY_RESULT_WAIT_BIT = QueryResultFlagBits 0x00000002
--- | 'QUERY_RESULT_WITH_AVAILABILITY_BIT' specifies that the availability
--- status accompanies the results.
-pattern QUERY_RESULT_WITH_AVAILABILITY_BIT = QueryResultFlagBits 0x00000004
--- | 'QUERY_RESULT_PARTIAL_BIT' specifies that returning partial results is
--- acceptable.
-pattern QUERY_RESULT_PARTIAL_BIT = QueryResultFlagBits 0x00000008
-
-type QueryResultFlags = QueryResultFlagBits
-
-instance Show QueryResultFlagBits where
-  showsPrec p = \case
-    QUERY_RESULT_64_BIT -> showString "QUERY_RESULT_64_BIT"
-    QUERY_RESULT_WAIT_BIT -> showString "QUERY_RESULT_WAIT_BIT"
-    QUERY_RESULT_WITH_AVAILABILITY_BIT -> showString "QUERY_RESULT_WITH_AVAILABILITY_BIT"
-    QUERY_RESULT_PARTIAL_BIT -> showString "QUERY_RESULT_PARTIAL_BIT"
-    QueryResultFlagBits x -> showParen (p >= 11) (showString "QueryResultFlagBits 0x" . showHex x)
-
-instance Read QueryResultFlagBits where
-  readPrec = parens (choose [("QUERY_RESULT_64_BIT", pure QUERY_RESULT_64_BIT)
-                            , ("QUERY_RESULT_WAIT_BIT", pure QUERY_RESULT_WAIT_BIT)
-                            , ("QUERY_RESULT_WITH_AVAILABILITY_BIT", pure QUERY_RESULT_WITH_AVAILABILITY_BIT)
-                            , ("QUERY_RESULT_PARTIAL_BIT", pure QUERY_RESULT_PARTIAL_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "QueryResultFlagBits")
-                       v <- step readPrec
-                       pure (QueryResultFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/QueryResultFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/QueryResultFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/QueryResultFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.QueryResultFlagBits  ( QueryResultFlagBits
-                                                         , QueryResultFlags
-                                                         ) where
-
-
-
-data QueryResultFlagBits
-
-type QueryResultFlags = QueryResultFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/QueryType.hs b/src/Graphics/Vulkan/Core10/Enums/QueryType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/QueryType.hs
+++ /dev/null
@@ -1,97 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.QueryType  (QueryType( QUERY_TYPE_OCCLUSION
-                                                         , QUERY_TYPE_PIPELINE_STATISTICS
-                                                         , QUERY_TYPE_TIMESTAMP
-                                                         , QUERY_TYPE_PERFORMANCE_QUERY_INTEL
-                                                         , QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
-                                                         , QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
-                                                         , QUERY_TYPE_PERFORMANCE_QUERY_KHR
-                                                         , QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
-                                                         , ..
-                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkQueryType - Specify the type of queries managed by a query pool
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Query.QueryPoolCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdWriteAccelerationStructuresPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdWriteAccelerationStructuresPropertiesNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.writeAccelerationStructuresPropertiesKHR'
-newtype QueryType = QueryType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'QUERY_TYPE_OCCLUSION' specifies an
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-occlusion occlusion query>.
-pattern QUERY_TYPE_OCCLUSION = QueryType 0
--- | 'QUERY_TYPE_PIPELINE_STATISTICS' specifies a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-pipestats pipeline statistics query>.
-pattern QUERY_TYPE_PIPELINE_STATISTICS = QueryType 1
--- | 'QUERY_TYPE_TIMESTAMP' specifies a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-timestamps timestamp query>.
-pattern QUERY_TYPE_TIMESTAMP = QueryType 2
--- | 'QUERY_TYPE_PERFORMANCE_QUERY_INTEL' specifies a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-performance-intel Intel performance query>.
-pattern QUERY_TYPE_PERFORMANCE_QUERY_INTEL = QueryType 1000210000
--- | 'QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR' specifies a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-copying ray tracing serialization acceleration structure size query>
-pattern QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR = QueryType 1000150000
--- | 'QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR' specifies a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-copying ray tracing acceleration structure size query>.
-pattern QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = QueryType 1000165000
--- | 'QUERY_TYPE_PERFORMANCE_QUERY_KHR' specifies a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-performance performance query>.
-pattern QUERY_TYPE_PERFORMANCE_QUERY_KHR = QueryType 1000116000
--- | 'QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT' specifies a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-transform-feedback transform feedback query>.
-pattern QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = QueryType 1000028004
-{-# complete QUERY_TYPE_OCCLUSION,
-             QUERY_TYPE_PIPELINE_STATISTICS,
-             QUERY_TYPE_TIMESTAMP,
-             QUERY_TYPE_PERFORMANCE_QUERY_INTEL,
-             QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR,
-             QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR,
-             QUERY_TYPE_PERFORMANCE_QUERY_KHR,
-             QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT :: QueryType #-}
-
-instance Show QueryType where
-  showsPrec p = \case
-    QUERY_TYPE_OCCLUSION -> showString "QUERY_TYPE_OCCLUSION"
-    QUERY_TYPE_PIPELINE_STATISTICS -> showString "QUERY_TYPE_PIPELINE_STATISTICS"
-    QUERY_TYPE_TIMESTAMP -> showString "QUERY_TYPE_TIMESTAMP"
-    QUERY_TYPE_PERFORMANCE_QUERY_INTEL -> showString "QUERY_TYPE_PERFORMANCE_QUERY_INTEL"
-    QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR -> showString "QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR"
-    QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR -> showString "QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR"
-    QUERY_TYPE_PERFORMANCE_QUERY_KHR -> showString "QUERY_TYPE_PERFORMANCE_QUERY_KHR"
-    QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT -> showString "QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT"
-    QueryType x -> showParen (p >= 11) (showString "QueryType " . showsPrec 11 x)
-
-instance Read QueryType where
-  readPrec = parens (choose [("QUERY_TYPE_OCCLUSION", pure QUERY_TYPE_OCCLUSION)
-                            , ("QUERY_TYPE_PIPELINE_STATISTICS", pure QUERY_TYPE_PIPELINE_STATISTICS)
-                            , ("QUERY_TYPE_TIMESTAMP", pure QUERY_TYPE_TIMESTAMP)
-                            , ("QUERY_TYPE_PERFORMANCE_QUERY_INTEL", pure QUERY_TYPE_PERFORMANCE_QUERY_INTEL)
-                            , ("QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR", pure QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR)
-                            , ("QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR", pure QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR)
-                            , ("QUERY_TYPE_PERFORMANCE_QUERY_KHR", pure QUERY_TYPE_PERFORMANCE_QUERY_KHR)
-                            , ("QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT", pure QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "QueryType")
-                       v <- step readPrec
-                       pure (QueryType v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/QueryType.hs-boot b/src/Graphics/Vulkan/Core10/Enums/QueryType.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/QueryType.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.QueryType  (QueryType) where
-
-
-
-data QueryType
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/QueueFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/QueueFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/QueueFlagBits.hs
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.QueueFlagBits  ( QueueFlagBits( QUEUE_GRAPHICS_BIT
-                                                                  , QUEUE_COMPUTE_BIT
-                                                                  , QUEUE_TRANSFER_BIT
-                                                                  , QUEUE_SPARSE_BINDING_BIT
-                                                                  , QUEUE_PROTECTED_BIT
-                                                                  , ..
-                                                                  )
-                                                   , QueueFlags
-                                                   ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkQueueFlagBits - Bitmask specifying capabilities of queues in a queue
--- family
---
--- = Description
---
--- -   'QUEUE_GRAPHICS_BIT' specifies that queues in this queue family
---     support graphics operations.
---
--- -   'QUEUE_COMPUTE_BIT' specifies that queues in this queue family
---     support compute operations.
---
--- -   'QUEUE_TRANSFER_BIT' specifies that queues in this queue family
---     support transfer operations.
---
--- -   'QUEUE_SPARSE_BINDING_BIT' specifies that queues in this queue
---     family support sparse memory management operations (see
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory Sparse Resources>).
---     If any of the sparse resource features are enabled, then at least
---     one queue family /must/ support this bit.
---
--- -   if 'QUEUE_PROTECTED_BIT' is set, then the queues in this queue
---     family support the
---     'Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DEVICE_QUEUE_CREATE_PROTECTED_BIT'
---     bit. (see
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-protected-memory Protected Memory>).
---     If the protected memory physical device feature is supported, then
---     at least one queue family of at least one physical device exposed by
---     the implementation /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.
---
--- Furthermore, if the protected memory physical device feature is
--- supported, then at least one queue family of at least one physical
--- device exposed by the implementation /must/ support graphics operations,
--- compute operations, and protected memory 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
--- 'QUEUE_GRAPHICS_BIT' or 'QUEUE_COMPUTE_BIT', then reporting the
--- 'QUEUE_TRANSFER_BIT' capability separately for that queue family is
--- /optional/.
---
--- For further details see
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-queues Queues>.
---
--- = See Also
---
--- 'QueueFlags'
-newtype QueueFlagBits = QueueFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_GRAPHICS_BIT"
-pattern QUEUE_GRAPHICS_BIT = QueueFlagBits 0x00000001
--- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_COMPUTE_BIT"
-pattern QUEUE_COMPUTE_BIT = QueueFlagBits 0x00000002
--- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_TRANSFER_BIT"
-pattern QUEUE_TRANSFER_BIT = QueueFlagBits 0x00000004
--- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_SPARSE_BINDING_BIT"
-pattern QUEUE_SPARSE_BINDING_BIT = QueueFlagBits 0x00000008
--- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_PROTECTED_BIT"
-pattern QUEUE_PROTECTED_BIT = QueueFlagBits 0x00000010
-
-type QueueFlags = QueueFlagBits
-
-instance Show QueueFlagBits where
-  showsPrec p = \case
-    QUEUE_GRAPHICS_BIT -> showString "QUEUE_GRAPHICS_BIT"
-    QUEUE_COMPUTE_BIT -> showString "QUEUE_COMPUTE_BIT"
-    QUEUE_TRANSFER_BIT -> showString "QUEUE_TRANSFER_BIT"
-    QUEUE_SPARSE_BINDING_BIT -> showString "QUEUE_SPARSE_BINDING_BIT"
-    QUEUE_PROTECTED_BIT -> showString "QUEUE_PROTECTED_BIT"
-    QueueFlagBits x -> showParen (p >= 11) (showString "QueueFlagBits 0x" . showHex x)
-
-instance Read QueueFlagBits where
-  readPrec = parens (choose [("QUEUE_GRAPHICS_BIT", pure QUEUE_GRAPHICS_BIT)
-                            , ("QUEUE_COMPUTE_BIT", pure QUEUE_COMPUTE_BIT)
-                            , ("QUEUE_TRANSFER_BIT", pure QUEUE_TRANSFER_BIT)
-                            , ("QUEUE_SPARSE_BINDING_BIT", pure QUEUE_SPARSE_BINDING_BIT)
-                            , ("QUEUE_PROTECTED_BIT", pure QUEUE_PROTECTED_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "QueueFlagBits")
-                       v <- step readPrec
-                       pure (QueueFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/RenderPassCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/RenderPassCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/RenderPassCreateFlagBits.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits  ( RenderPassCreateFlagBits( RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM
-                                                                                        , ..
-                                                                                        )
-                                                              , RenderPassCreateFlags
-                                                              ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkRenderPassCreateFlagBits - Bitmask specifying additional properties of
--- a renderpass
---
--- = See Also
---
--- 'RenderPassCreateFlags'
-newtype RenderPassCreateFlagBits = RenderPassCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM' specifies that the created
--- renderpass is compatible with
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>.
-pattern RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM = RenderPassCreateFlagBits 0x00000002
-
-type RenderPassCreateFlags = RenderPassCreateFlagBits
-
-instance Show RenderPassCreateFlagBits where
-  showsPrec p = \case
-    RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM -> showString "RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM"
-    RenderPassCreateFlagBits x -> showParen (p >= 11) (showString "RenderPassCreateFlagBits 0x" . showHex x)
-
-instance Read RenderPassCreateFlagBits where
-  readPrec = parens (choose [("RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM", pure RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "RenderPassCreateFlagBits")
-                       v <- step readPrec
-                       pure (RenderPassCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/Result.hs b/src/Graphics/Vulkan/Core10/Enums/Result.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/Result.hs
+++ /dev/null
@@ -1,349 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.Result  (Result( SUCCESS
-                                                   , NOT_READY
-                                                   , TIMEOUT
-                                                   , EVENT_SET
-                                                   , EVENT_RESET
-                                                   , INCOMPLETE
-                                                   , ERROR_OUT_OF_HOST_MEMORY
-                                                   , ERROR_OUT_OF_DEVICE_MEMORY
-                                                   , ERROR_INITIALIZATION_FAILED
-                                                   , ERROR_DEVICE_LOST
-                                                   , ERROR_MEMORY_MAP_FAILED
-                                                   , ERROR_LAYER_NOT_PRESENT
-                                                   , ERROR_EXTENSION_NOT_PRESENT
-                                                   , ERROR_FEATURE_NOT_PRESENT
-                                                   , ERROR_INCOMPATIBLE_DRIVER
-                                                   , ERROR_TOO_MANY_OBJECTS
-                                                   , ERROR_FORMAT_NOT_SUPPORTED
-                                                   , ERROR_FRAGMENTED_POOL
-                                                   , ERROR_UNKNOWN
-                                                   , PIPELINE_COMPILE_REQUIRED_EXT
-                                                   , OPERATION_NOT_DEFERRED_KHR
-                                                   , OPERATION_DEFERRED_KHR
-                                                   , THREAD_DONE_KHR
-                                                   , THREAD_IDLE_KHR
-                                                   , ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT
-                                                   , ERROR_NOT_PERMITTED_EXT
-                                                   , ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT
-                                                   , ERROR_INCOMPATIBLE_VERSION_KHR
-                                                   , ERROR_INVALID_SHADER_NV
-                                                   , ERROR_VALIDATION_FAILED_EXT
-                                                   , ERROR_INCOMPATIBLE_DISPLAY_KHR
-                                                   , ERROR_OUT_OF_DATE_KHR
-                                                   , SUBOPTIMAL_KHR
-                                                   , ERROR_NATIVE_WINDOW_IN_USE_KHR
-                                                   , ERROR_SURFACE_LOST_KHR
-                                                   , ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
-                                                   , ERROR_FRAGMENTATION
-                                                   , ERROR_INVALID_EXTERNAL_HANDLE
-                                                   , ERROR_OUT_OF_POOL_MEMORY
-                                                   , ..
-                                                   )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkResult - Vulkan command return codes
---
--- = Description
---
--- 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.
---
--- 'ERROR_UNKNOWN' will be returned by an implementation when an unexpected
--- error occurs that cannot be attributed to valid behavior of the
--- application and implementation. Under these conditions, it /may/ be
--- returned from any command returning a 'Result'.
---
--- Note
---
--- 'ERROR_UNKNOWN' is not expected to ever be returned if the application
--- behavior is valid, and if the implementation is bug-free. If
--- 'ERROR_UNKNOWN' is received, the application should be checked against
--- the latest validation layers to verify correct behavior as much as
--- possible. If no issues are identified it could be an implementation
--- issue, and the implementor should be contacted for support.
---
--- 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
--- 'Graphics.Vulkan.Core10.CommandBuffer.endCommandBuffer'.
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'
-newtype Result = Result Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'SUCCESS' Command successfully completed
-pattern SUCCESS = Result 0
--- | 'NOT_READY' A fence or query has not yet completed
-pattern NOT_READY = Result 1
--- | 'TIMEOUT' A wait operation has not completed in the specified time
-pattern TIMEOUT = Result 2
--- | 'EVENT_SET' An event is signaled
-pattern EVENT_SET = Result 3
--- | 'EVENT_RESET' An event is unsignaled
-pattern EVENT_RESET = Result 4
--- | 'INCOMPLETE' A return array was too small for the result
-pattern INCOMPLETE = Result 5
--- | 'ERROR_OUT_OF_HOST_MEMORY' A host memory allocation has failed.
-pattern ERROR_OUT_OF_HOST_MEMORY = Result (-1)
--- | 'ERROR_OUT_OF_DEVICE_MEMORY' A device memory allocation has failed.
-pattern ERROR_OUT_OF_DEVICE_MEMORY = Result (-2)
--- | 'ERROR_INITIALIZATION_FAILED' Initialization of an object could not be
--- completed for implementation-specific reasons.
-pattern ERROR_INITIALIZATION_FAILED = Result (-3)
--- | 'ERROR_DEVICE_LOST' The logical or physical device has been lost. See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>
-pattern ERROR_DEVICE_LOST = Result (-4)
--- | 'ERROR_MEMORY_MAP_FAILED' Mapping of a memory object has failed.
-pattern ERROR_MEMORY_MAP_FAILED = Result (-5)
--- | 'ERROR_LAYER_NOT_PRESENT' A requested layer is not present or could not
--- be loaded.
-pattern ERROR_LAYER_NOT_PRESENT = Result (-6)
--- | 'ERROR_EXTENSION_NOT_PRESENT' A requested extension is not supported.
-pattern ERROR_EXTENSION_NOT_PRESENT = Result (-7)
--- | 'ERROR_FEATURE_NOT_PRESENT' A requested feature is not supported.
-pattern ERROR_FEATURE_NOT_PRESENT = Result (-8)
--- | 'ERROR_INCOMPATIBLE_DRIVER' The requested version of Vulkan is not
--- supported by the driver or is otherwise incompatible for
--- implementation-specific reasons.
-pattern ERROR_INCOMPATIBLE_DRIVER = Result (-9)
--- | 'ERROR_TOO_MANY_OBJECTS' Too many objects of the type have already been
--- created.
-pattern ERROR_TOO_MANY_OBJECTS = Result (-10)
--- | 'ERROR_FORMAT_NOT_SUPPORTED' A requested format is not supported on this
--- device.
-pattern ERROR_FORMAT_NOT_SUPPORTED = Result (-11)
--- | '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 accommodate the
--- new allocation. This /should/ be returned in preference to
--- 'ERROR_OUT_OF_POOL_MEMORY', but only if the implementation is certain
--- that the pool allocation failure was due to fragmentation.
-pattern ERROR_FRAGMENTED_POOL = Result (-12)
--- | 'ERROR_UNKNOWN' An unknown error has occurred; either the application
--- has provided invalid input, or an implementation failure has occurred.
-pattern ERROR_UNKNOWN = Result (-13)
--- | 'PIPELINE_COMPILE_REQUIRED_EXT' A requested pipeline creation would have
--- required compilation, but the application requested compilation to not
--- be performed.
-pattern PIPELINE_COMPILE_REQUIRED_EXT = Result 1000297000
--- | 'OPERATION_NOT_DEFERRED_KHR' A deferred operation was requested and no
--- operations were deferred.
-pattern OPERATION_NOT_DEFERRED_KHR = Result 1000268003
--- | 'OPERATION_DEFERRED_KHR' A deferred operation was requested and at least
--- some of the work was deferred.
-pattern OPERATION_DEFERRED_KHR = Result 1000268002
--- | 'THREAD_DONE_KHR' A deferred operation is not complete but there is no
--- work remaining to assign to additional threads.
-pattern THREAD_DONE_KHR = Result 1000268001
--- | 'THREAD_IDLE_KHR' A deferred operation is not complete but there is
--- currently no work for this thread to do at the time of this call.
-pattern THREAD_IDLE_KHR = Result 1000268000
--- | 'ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT' An operation on a swapchain
--- created with
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT'
--- failed as it did not have exlusive full-screen access. This /may/ occur
--- due to implementation-dependent reasons, outside of the application’s
--- control.
-pattern ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = Result (-1000255000)
--- No documentation found for Nested "VkResult" "VK_ERROR_NOT_PERMITTED_EXT"
-pattern ERROR_NOT_PERMITTED_EXT = Result (-1000174001)
--- No documentation found for Nested "VkResult" "VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT"
-pattern ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = Result (-1000158000)
--- No documentation found for Nested "VkResult" "VK_ERROR_INCOMPATIBLE_VERSION_KHR"
-pattern ERROR_INCOMPATIBLE_VERSION_KHR = Result (-1000150000)
--- | 'ERROR_INVALID_SHADER_NV' One or more shaders failed to compile or link.
--- More details are reported back to the application via
--- @VK_EXT_debug_report@ if enabled.
-pattern ERROR_INVALID_SHADER_NV = Result (-1000012000)
--- No documentation found for Nested "VkResult" "VK_ERROR_VALIDATION_FAILED_EXT"
-pattern ERROR_VALIDATION_FAILED_EXT = Result (-1000011001)
--- | 'ERROR_INCOMPATIBLE_DISPLAY_KHR' The display used by a swapchain does
--- not use the same presentable image layout, or is incompatible in a way
--- that prevents sharing an image.
-pattern ERROR_INCOMPATIBLE_DISPLAY_KHR = Result (-1000003001)
--- | 'ERROR_OUT_OF_DATE_KHR' A surface has changed in such a way that it is
--- no longer compatible with the swapchain, and further presentation
--- requests using the swapchain will fail. Applications /must/ query the
--- new surface properties and recreate their swapchain if they wish to
--- continue presenting to the surface.
-pattern ERROR_OUT_OF_DATE_KHR = Result (-1000001004)
--- | 'SUBOPTIMAL_KHR' A swapchain no longer matches the surface properties
--- exactly, but /can/ still be used to present to the surface successfully.
-pattern SUBOPTIMAL_KHR = Result 1000001003
--- | 'ERROR_NATIVE_WINDOW_IN_USE_KHR' The requested window is already in use
--- by Vulkan or another API in a manner which prevents it from being used
--- again.
-pattern ERROR_NATIVE_WINDOW_IN_USE_KHR = Result (-1000000001)
--- | 'ERROR_SURFACE_LOST_KHR' A surface is no longer available.
-pattern ERROR_SURFACE_LOST_KHR = Result (-1000000000)
--- | 'ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS' A buffer creation or memory
--- allocation failed because the requested address is not available. A
--- shader group handle assignment failed because the requested shader group
--- handle information is no longer valid.
-pattern ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = Result (-1000257000)
--- | 'ERROR_FRAGMENTATION' A descriptor pool creation has failed due to
--- fragmentation.
-pattern ERROR_FRAGMENTATION = Result (-1000161000)
--- | 'ERROR_INVALID_EXTERNAL_HANDLE' An external handle is not a valid handle
--- of the specified type.
-pattern ERROR_INVALID_EXTERNAL_HANDLE = Result (-1000072003)
--- | 'ERROR_OUT_OF_POOL_MEMORY' A pool memory allocation has failed. This
--- /must/ only be returned if no attempt to allocate host or device memory
--- was made to accommodate the new allocation. If the failure was
--- definitely due to fragmentation of the pool, 'ERROR_FRAGMENTED_POOL'
--- /should/ be returned instead.
-pattern ERROR_OUT_OF_POOL_MEMORY = Result (-1000069000)
-{-# complete SUCCESS,
-             NOT_READY,
-             TIMEOUT,
-             EVENT_SET,
-             EVENT_RESET,
-             INCOMPLETE,
-             ERROR_OUT_OF_HOST_MEMORY,
-             ERROR_OUT_OF_DEVICE_MEMORY,
-             ERROR_INITIALIZATION_FAILED,
-             ERROR_DEVICE_LOST,
-             ERROR_MEMORY_MAP_FAILED,
-             ERROR_LAYER_NOT_PRESENT,
-             ERROR_EXTENSION_NOT_PRESENT,
-             ERROR_FEATURE_NOT_PRESENT,
-             ERROR_INCOMPATIBLE_DRIVER,
-             ERROR_TOO_MANY_OBJECTS,
-             ERROR_FORMAT_NOT_SUPPORTED,
-             ERROR_FRAGMENTED_POOL,
-             ERROR_UNKNOWN,
-             PIPELINE_COMPILE_REQUIRED_EXT,
-             OPERATION_NOT_DEFERRED_KHR,
-             OPERATION_DEFERRED_KHR,
-             THREAD_DONE_KHR,
-             THREAD_IDLE_KHR,
-             ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT,
-             ERROR_NOT_PERMITTED_EXT,
-             ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT,
-             ERROR_INCOMPATIBLE_VERSION_KHR,
-             ERROR_INVALID_SHADER_NV,
-             ERROR_VALIDATION_FAILED_EXT,
-             ERROR_INCOMPATIBLE_DISPLAY_KHR,
-             ERROR_OUT_OF_DATE_KHR,
-             SUBOPTIMAL_KHR,
-             ERROR_NATIVE_WINDOW_IN_USE_KHR,
-             ERROR_SURFACE_LOST_KHR,
-             ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS,
-             ERROR_FRAGMENTATION,
-             ERROR_INVALID_EXTERNAL_HANDLE,
-             ERROR_OUT_OF_POOL_MEMORY :: Result #-}
-
-instance Show Result where
-  showsPrec p = \case
-    SUCCESS -> showString "SUCCESS"
-    NOT_READY -> showString "NOT_READY"
-    TIMEOUT -> showString "TIMEOUT"
-    EVENT_SET -> showString "EVENT_SET"
-    EVENT_RESET -> showString "EVENT_RESET"
-    INCOMPLETE -> showString "INCOMPLETE"
-    ERROR_OUT_OF_HOST_MEMORY -> showString "ERROR_OUT_OF_HOST_MEMORY"
-    ERROR_OUT_OF_DEVICE_MEMORY -> showString "ERROR_OUT_OF_DEVICE_MEMORY"
-    ERROR_INITIALIZATION_FAILED -> showString "ERROR_INITIALIZATION_FAILED"
-    ERROR_DEVICE_LOST -> showString "ERROR_DEVICE_LOST"
-    ERROR_MEMORY_MAP_FAILED -> showString "ERROR_MEMORY_MAP_FAILED"
-    ERROR_LAYER_NOT_PRESENT -> showString "ERROR_LAYER_NOT_PRESENT"
-    ERROR_EXTENSION_NOT_PRESENT -> showString "ERROR_EXTENSION_NOT_PRESENT"
-    ERROR_FEATURE_NOT_PRESENT -> showString "ERROR_FEATURE_NOT_PRESENT"
-    ERROR_INCOMPATIBLE_DRIVER -> showString "ERROR_INCOMPATIBLE_DRIVER"
-    ERROR_TOO_MANY_OBJECTS -> showString "ERROR_TOO_MANY_OBJECTS"
-    ERROR_FORMAT_NOT_SUPPORTED -> showString "ERROR_FORMAT_NOT_SUPPORTED"
-    ERROR_FRAGMENTED_POOL -> showString "ERROR_FRAGMENTED_POOL"
-    ERROR_UNKNOWN -> showString "ERROR_UNKNOWN"
-    PIPELINE_COMPILE_REQUIRED_EXT -> showString "PIPELINE_COMPILE_REQUIRED_EXT"
-    OPERATION_NOT_DEFERRED_KHR -> showString "OPERATION_NOT_DEFERRED_KHR"
-    OPERATION_DEFERRED_KHR -> showString "OPERATION_DEFERRED_KHR"
-    THREAD_DONE_KHR -> showString "THREAD_DONE_KHR"
-    THREAD_IDLE_KHR -> showString "THREAD_IDLE_KHR"
-    ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT -> showString "ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT"
-    ERROR_NOT_PERMITTED_EXT -> showString "ERROR_NOT_PERMITTED_EXT"
-    ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT -> showString "ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT"
-    ERROR_INCOMPATIBLE_VERSION_KHR -> showString "ERROR_INCOMPATIBLE_VERSION_KHR"
-    ERROR_INVALID_SHADER_NV -> showString "ERROR_INVALID_SHADER_NV"
-    ERROR_VALIDATION_FAILED_EXT -> showString "ERROR_VALIDATION_FAILED_EXT"
-    ERROR_INCOMPATIBLE_DISPLAY_KHR -> showString "ERROR_INCOMPATIBLE_DISPLAY_KHR"
-    ERROR_OUT_OF_DATE_KHR -> showString "ERROR_OUT_OF_DATE_KHR"
-    SUBOPTIMAL_KHR -> showString "SUBOPTIMAL_KHR"
-    ERROR_NATIVE_WINDOW_IN_USE_KHR -> showString "ERROR_NATIVE_WINDOW_IN_USE_KHR"
-    ERROR_SURFACE_LOST_KHR -> showString "ERROR_SURFACE_LOST_KHR"
-    ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS -> showString "ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS"
-    ERROR_FRAGMENTATION -> showString "ERROR_FRAGMENTATION"
-    ERROR_INVALID_EXTERNAL_HANDLE -> showString "ERROR_INVALID_EXTERNAL_HANDLE"
-    ERROR_OUT_OF_POOL_MEMORY -> showString "ERROR_OUT_OF_POOL_MEMORY"
-    Result x -> showParen (p >= 11) (showString "Result " . showsPrec 11 x)
-
-instance Read Result where
-  readPrec = parens (choose [("SUCCESS", pure SUCCESS)
-                            , ("NOT_READY", pure NOT_READY)
-                            , ("TIMEOUT", pure TIMEOUT)
-                            , ("EVENT_SET", pure EVENT_SET)
-                            , ("EVENT_RESET", pure EVENT_RESET)
-                            , ("INCOMPLETE", pure INCOMPLETE)
-                            , ("ERROR_OUT_OF_HOST_MEMORY", pure ERROR_OUT_OF_HOST_MEMORY)
-                            , ("ERROR_OUT_OF_DEVICE_MEMORY", pure ERROR_OUT_OF_DEVICE_MEMORY)
-                            , ("ERROR_INITIALIZATION_FAILED", pure ERROR_INITIALIZATION_FAILED)
-                            , ("ERROR_DEVICE_LOST", pure ERROR_DEVICE_LOST)
-                            , ("ERROR_MEMORY_MAP_FAILED", pure ERROR_MEMORY_MAP_FAILED)
-                            , ("ERROR_LAYER_NOT_PRESENT", pure ERROR_LAYER_NOT_PRESENT)
-                            , ("ERROR_EXTENSION_NOT_PRESENT", pure ERROR_EXTENSION_NOT_PRESENT)
-                            , ("ERROR_FEATURE_NOT_PRESENT", pure ERROR_FEATURE_NOT_PRESENT)
-                            , ("ERROR_INCOMPATIBLE_DRIVER", pure ERROR_INCOMPATIBLE_DRIVER)
-                            , ("ERROR_TOO_MANY_OBJECTS", pure ERROR_TOO_MANY_OBJECTS)
-                            , ("ERROR_FORMAT_NOT_SUPPORTED", pure ERROR_FORMAT_NOT_SUPPORTED)
-                            , ("ERROR_FRAGMENTED_POOL", pure ERROR_FRAGMENTED_POOL)
-                            , ("ERROR_UNKNOWN", pure ERROR_UNKNOWN)
-                            , ("PIPELINE_COMPILE_REQUIRED_EXT", pure PIPELINE_COMPILE_REQUIRED_EXT)
-                            , ("OPERATION_NOT_DEFERRED_KHR", pure OPERATION_NOT_DEFERRED_KHR)
-                            , ("OPERATION_DEFERRED_KHR", pure OPERATION_DEFERRED_KHR)
-                            , ("THREAD_DONE_KHR", pure THREAD_DONE_KHR)
-                            , ("THREAD_IDLE_KHR", pure THREAD_IDLE_KHR)
-                            , ("ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT", pure ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT)
-                            , ("ERROR_NOT_PERMITTED_EXT", pure ERROR_NOT_PERMITTED_EXT)
-                            , ("ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT", pure ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT)
-                            , ("ERROR_INCOMPATIBLE_VERSION_KHR", pure ERROR_INCOMPATIBLE_VERSION_KHR)
-                            , ("ERROR_INVALID_SHADER_NV", pure ERROR_INVALID_SHADER_NV)
-                            , ("ERROR_VALIDATION_FAILED_EXT", pure ERROR_VALIDATION_FAILED_EXT)
-                            , ("ERROR_INCOMPATIBLE_DISPLAY_KHR", pure ERROR_INCOMPATIBLE_DISPLAY_KHR)
-                            , ("ERROR_OUT_OF_DATE_KHR", pure ERROR_OUT_OF_DATE_KHR)
-                            , ("SUBOPTIMAL_KHR", pure SUBOPTIMAL_KHR)
-                            , ("ERROR_NATIVE_WINDOW_IN_USE_KHR", pure ERROR_NATIVE_WINDOW_IN_USE_KHR)
-                            , ("ERROR_SURFACE_LOST_KHR", pure ERROR_SURFACE_LOST_KHR)
-                            , ("ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS", pure ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS)
-                            , ("ERROR_FRAGMENTATION", pure ERROR_FRAGMENTATION)
-                            , ("ERROR_INVALID_EXTERNAL_HANDLE", pure ERROR_INVALID_EXTERNAL_HANDLE)
-                            , ("ERROR_OUT_OF_POOL_MEMORY", pure ERROR_OUT_OF_POOL_MEMORY)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "Result")
-                       v <- step readPrec
-                       pure (Result v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/Result.hs-boot b/src/Graphics/Vulkan/Core10/Enums/Result.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/Result.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.Result  (Result) where
-
-
-
-data Result
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SampleCountFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/SampleCountFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SampleCountFlagBits.hs
+++ /dev/null
@@ -1,88 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SampleCountFlagBits  ( SampleCountFlagBits( SAMPLE_COUNT_1_BIT
-                                                                              , SAMPLE_COUNT_2_BIT
-                                                                              , SAMPLE_COUNT_4_BIT
-                                                                              , SAMPLE_COUNT_8_BIT
-                                                                              , SAMPLE_COUNT_16_BIT
-                                                                              , SAMPLE_COUNT_32_BIT
-                                                                              , SAMPLE_COUNT_64_BIT
-                                                                              , ..
-                                                                              )
-                                                         , SampleCountFlags
-                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkSampleCountFlagBits - Bitmask specifying sample counts supported for
--- an image used for storage operations
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pass.AttachmentDescription',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',
--- 'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.FramebufferMixedSamplesCombinationNV',
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo',
--- 'SampleCountFlags',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties'
-newtype SampleCountFlagBits = SampleCountFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SAMPLE_COUNT_1_BIT' specifies an image with one sample per pixel.
-pattern SAMPLE_COUNT_1_BIT = SampleCountFlagBits 0x00000001
--- | 'SAMPLE_COUNT_2_BIT' specifies an image with 2 samples per pixel.
-pattern SAMPLE_COUNT_2_BIT = SampleCountFlagBits 0x00000002
--- | 'SAMPLE_COUNT_4_BIT' specifies an image with 4 samples per pixel.
-pattern SAMPLE_COUNT_4_BIT = SampleCountFlagBits 0x00000004
--- | 'SAMPLE_COUNT_8_BIT' specifies an image with 8 samples per pixel.
-pattern SAMPLE_COUNT_8_BIT = SampleCountFlagBits 0x00000008
--- | 'SAMPLE_COUNT_16_BIT' specifies an image with 16 samples per pixel.
-pattern SAMPLE_COUNT_16_BIT = SampleCountFlagBits 0x00000010
--- | 'SAMPLE_COUNT_32_BIT' specifies an image with 32 samples per pixel.
-pattern SAMPLE_COUNT_32_BIT = SampleCountFlagBits 0x00000020
--- | 'SAMPLE_COUNT_64_BIT' specifies an image with 64 samples per pixel.
-pattern SAMPLE_COUNT_64_BIT = SampleCountFlagBits 0x00000040
-
-type SampleCountFlags = SampleCountFlagBits
-
-instance Show SampleCountFlagBits where
-  showsPrec p = \case
-    SAMPLE_COUNT_1_BIT -> showString "SAMPLE_COUNT_1_BIT"
-    SAMPLE_COUNT_2_BIT -> showString "SAMPLE_COUNT_2_BIT"
-    SAMPLE_COUNT_4_BIT -> showString "SAMPLE_COUNT_4_BIT"
-    SAMPLE_COUNT_8_BIT -> showString "SAMPLE_COUNT_8_BIT"
-    SAMPLE_COUNT_16_BIT -> showString "SAMPLE_COUNT_16_BIT"
-    SAMPLE_COUNT_32_BIT -> showString "SAMPLE_COUNT_32_BIT"
-    SAMPLE_COUNT_64_BIT -> showString "SAMPLE_COUNT_64_BIT"
-    SampleCountFlagBits x -> showParen (p >= 11) (showString "SampleCountFlagBits 0x" . showHex x)
-
-instance Read SampleCountFlagBits where
-  readPrec = parens (choose [("SAMPLE_COUNT_1_BIT", pure SAMPLE_COUNT_1_BIT)
-                            , ("SAMPLE_COUNT_2_BIT", pure SAMPLE_COUNT_2_BIT)
-                            , ("SAMPLE_COUNT_4_BIT", pure SAMPLE_COUNT_4_BIT)
-                            , ("SAMPLE_COUNT_8_BIT", pure SAMPLE_COUNT_8_BIT)
-                            , ("SAMPLE_COUNT_16_BIT", pure SAMPLE_COUNT_16_BIT)
-                            , ("SAMPLE_COUNT_32_BIT", pure SAMPLE_COUNT_32_BIT)
-                            , ("SAMPLE_COUNT_64_BIT", pure SAMPLE_COUNT_64_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SampleCountFlagBits")
-                       v <- step readPrec
-                       pure (SampleCountFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SampleCountFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/SampleCountFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SampleCountFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SampleCountFlagBits  ( SampleCountFlagBits
-                                                         , SampleCountFlags
-                                                         ) where
-
-
-
-data SampleCountFlagBits
-
-type SampleCountFlags = SampleCountFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SamplerAddressMode.hs b/src/Graphics/Vulkan/Core10/Enums/SamplerAddressMode.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SamplerAddressMode.hs
+++ /dev/null
@@ -1,77 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SamplerAddressMode  (SamplerAddressMode( SAMPLER_ADDRESS_MODE_REPEAT
-                                                                           , SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT
-                                                                           , SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
-                                                                           , SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER
-                                                                           , SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
-                                                                           , ..
-                                                                           )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkSamplerAddressMode - Specify behavior of sampling with texture
--- coordinates outside an image
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo'
-newtype SamplerAddressMode = SamplerAddressMode Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'SAMPLER_ADDRESS_MODE_REPEAT' specifies that the repeat wrap mode will
--- be used.
-pattern SAMPLER_ADDRESS_MODE_REPEAT = SamplerAddressMode 0
--- | 'SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT' specifies that the mirrored
--- repeat wrap mode will be used.
-pattern SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = SamplerAddressMode 1
--- | 'SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' specifies that the clamp to edge
--- wrap mode will be used.
-pattern SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = SamplerAddressMode 2
--- | 'SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER' specifies that the clamp to
--- border wrap mode will be used.
-pattern SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = SamplerAddressMode 3
--- | 'SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE' specifies that the mirror
--- clamp to edge wrap mode will be used. This is only valid if
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-samplerMirrorClampToEdge samplerMirrorClampToEdge>
--- is enabled, or if the @VK_KHR_sampler_mirror_clamp_to_edge@ extension is
--- enabled.
-pattern SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = SamplerAddressMode 4
-{-# complete SAMPLER_ADDRESS_MODE_REPEAT,
-             SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
-             SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
-             SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
-             SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE :: SamplerAddressMode #-}
-
-instance Show SamplerAddressMode where
-  showsPrec p = \case
-    SAMPLER_ADDRESS_MODE_REPEAT -> showString "SAMPLER_ADDRESS_MODE_REPEAT"
-    SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT -> showString "SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT"
-    SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE -> showString "SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE"
-    SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER -> showString "SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER"
-    SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE -> showString "SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE"
-    SamplerAddressMode x -> showParen (p >= 11) (showString "SamplerAddressMode " . showsPrec 11 x)
-
-instance Read SamplerAddressMode where
-  readPrec = parens (choose [("SAMPLER_ADDRESS_MODE_REPEAT", pure SAMPLER_ADDRESS_MODE_REPEAT)
-                            , ("SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT", pure SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT)
-                            , ("SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", pure SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE)
-                            , ("SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER", pure SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER)
-                            , ("SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE", pure SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SamplerAddressMode")
-                       v <- step readPrec
-                       pure (SamplerAddressMode v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SamplerCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/SamplerCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SamplerCreateFlagBits.hs
+++ /dev/null
@@ -1,69 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits  ( SamplerCreateFlagBits( SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT
-                                                                                  , SAMPLER_CREATE_SUBSAMPLED_BIT_EXT
-                                                                                  , ..
-                                                                                  )
-                                                           , SamplerCreateFlags
-                                                           ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkSamplerCreateFlagBits - Bitmask specifying additional parameters of
--- sampler
---
--- = Description
---
--- Note
---
--- The approximations used when
--- 'SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT' is specified
--- are implementation defined. Some implementations /may/ interpolate
--- between fragment density levels in a subsampled image. In that case,
--- this bit /may/ be used to decide whether the interpolation factors are
--- calculated per fragment or at a coarser granularity.
---
--- = See Also
---
--- 'SamplerCreateFlags'
-newtype SamplerCreateFlagBits = SamplerCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT' specifies that
--- the implementation /may/ use approximations when reconstructing a full
--- color value for texture access from a subsampled image.
-pattern SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = SamplerCreateFlagBits 0x00000002
--- | 'SAMPLER_CREATE_SUBSAMPLED_BIT_EXT' specifies that the sampler will read
--- from an image created with @flags@ containing
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'.
-pattern SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = SamplerCreateFlagBits 0x00000001
-
-type SamplerCreateFlags = SamplerCreateFlagBits
-
-instance Show SamplerCreateFlagBits where
-  showsPrec p = \case
-    SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT -> showString "SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT"
-    SAMPLER_CREATE_SUBSAMPLED_BIT_EXT -> showString "SAMPLER_CREATE_SUBSAMPLED_BIT_EXT"
-    SamplerCreateFlagBits x -> showParen (p >= 11) (showString "SamplerCreateFlagBits 0x" . showHex x)
-
-instance Read SamplerCreateFlagBits where
-  readPrec = parens (choose [("SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT", pure SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT)
-                            , ("SAMPLER_CREATE_SUBSAMPLED_BIT_EXT", pure SAMPLER_CREATE_SUBSAMPLED_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SamplerCreateFlagBits")
-                       v <- step readPrec
-                       pure (SamplerCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SamplerMipmapMode.hs b/src/Graphics/Vulkan/Core10/Enums/SamplerMipmapMode.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SamplerMipmapMode.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SamplerMipmapMode  (SamplerMipmapMode( SAMPLER_MIPMAP_MODE_NEAREST
-                                                                         , SAMPLER_MIPMAP_MODE_LINEAR
-                                                                         , ..
-                                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkSamplerMipmapMode - Specify mipmap mode used for texture lookups
---
--- = Description
---
--- These modes are described in detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-texel-filtering Texel Filtering>.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo'
-newtype SamplerMipmapMode = SamplerMipmapMode Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'SAMPLER_MIPMAP_MODE_NEAREST' specifies nearest filtering.
-pattern SAMPLER_MIPMAP_MODE_NEAREST = SamplerMipmapMode 0
--- | 'SAMPLER_MIPMAP_MODE_LINEAR' specifies linear filtering.
-pattern SAMPLER_MIPMAP_MODE_LINEAR = SamplerMipmapMode 1
-{-# complete SAMPLER_MIPMAP_MODE_NEAREST,
-             SAMPLER_MIPMAP_MODE_LINEAR :: SamplerMipmapMode #-}
-
-instance Show SamplerMipmapMode where
-  showsPrec p = \case
-    SAMPLER_MIPMAP_MODE_NEAREST -> showString "SAMPLER_MIPMAP_MODE_NEAREST"
-    SAMPLER_MIPMAP_MODE_LINEAR -> showString "SAMPLER_MIPMAP_MODE_LINEAR"
-    SamplerMipmapMode x -> showParen (p >= 11) (showString "SamplerMipmapMode " . showsPrec 11 x)
-
-instance Read SamplerMipmapMode where
-  readPrec = parens (choose [("SAMPLER_MIPMAP_MODE_NEAREST", pure SAMPLER_MIPMAP_MODE_NEAREST)
-                            , ("SAMPLER_MIPMAP_MODE_LINEAR", pure SAMPLER_MIPMAP_MODE_LINEAR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SamplerMipmapMode")
-                       v <- step readPrec
-                       pure (SamplerMipmapMode v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SemaphoreCreateFlags.hs b/src/Graphics/Vulkan/Core10/Enums/SemaphoreCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SemaphoreCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SemaphoreCreateFlags  (SemaphoreCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkSemaphoreCreateFlags - Reserved for future use
---
--- = Description
---
--- 'SemaphoreCreateFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo'
-newtype SemaphoreCreateFlags = SemaphoreCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show SemaphoreCreateFlags where
-  showsPrec p = \case
-    SemaphoreCreateFlags x -> showParen (p >= 11) (showString "SemaphoreCreateFlags 0x" . showHex x)
-
-instance Read SemaphoreCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SemaphoreCreateFlags")
-                       v <- step readPrec
-                       pure (SemaphoreCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ShaderModuleCreateFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/ShaderModuleCreateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ShaderModuleCreateFlagBits.hs
+++ /dev/null
@@ -1,40 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ShaderModuleCreateFlagBits  ( ShaderModuleCreateFlagBits(..)
-                                                                , ShaderModuleCreateFlags
-                                                                ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- No documentation found for TopLevel "VkShaderModuleCreateFlagBits"
-newtype ShaderModuleCreateFlagBits = ShaderModuleCreateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-type ShaderModuleCreateFlags = ShaderModuleCreateFlagBits
-
-instance Show ShaderModuleCreateFlagBits where
-  showsPrec p = \case
-    ShaderModuleCreateFlagBits x -> showParen (p >= 11) (showString "ShaderModuleCreateFlagBits 0x" . showHex x)
-
-instance Read ShaderModuleCreateFlagBits where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ShaderModuleCreateFlagBits")
-                       v <- step readPrec
-                       pure (ShaderModuleCreateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ShaderStageFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/ShaderStageFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ShaderStageFlagBits.hs
+++ /dev/null
@@ -1,139 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits  ( ShaderStageFlagBits( SHADER_STAGE_VERTEX_BIT
-                                                                              , SHADER_STAGE_TESSELLATION_CONTROL_BIT
-                                                                              , SHADER_STAGE_TESSELLATION_EVALUATION_BIT
-                                                                              , SHADER_STAGE_GEOMETRY_BIT
-                                                                              , SHADER_STAGE_FRAGMENT_BIT
-                                                                              , SHADER_STAGE_COMPUTE_BIT
-                                                                              , SHADER_STAGE_ALL_GRAPHICS
-                                                                              , SHADER_STAGE_ALL
-                                                                              , SHADER_STAGE_MESH_BIT_NV
-                                                                              , SHADER_STAGE_TASK_BIT_NV
-                                                                              , SHADER_STAGE_CALLABLE_BIT_KHR
-                                                                              , SHADER_STAGE_INTERSECTION_BIT_KHR
-                                                                              , SHADER_STAGE_MISS_BIT_KHR
-                                                                              , SHADER_STAGE_CLOSEST_HIT_BIT_KHR
-                                                                              , SHADER_STAGE_ANY_HIT_BIT_KHR
-                                                                              , SHADER_STAGE_RAYGEN_BIT_KHR
-                                                                              , ..
-                                                                              )
-                                                         , ShaderStageFlags
-                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkShaderStageFlagBits - Bitmask specifying a pipeline stage
---
--- = Description
---
--- Note
---
--- 'SHADER_STAGE_ALL_GRAPHICS' only includes the original five graphics
--- stages included in Vulkan 1.0, and not any stages added by extensions.
--- Thus, it may not have the desired effect in all cases.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
--- 'ShaderStageFlags',
--- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.getShaderInfoAMD'
-newtype ShaderStageFlagBits = ShaderStageFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SHADER_STAGE_VERTEX_BIT' specifies the vertex stage.
-pattern SHADER_STAGE_VERTEX_BIT = ShaderStageFlagBits 0x00000001
--- | 'SHADER_STAGE_TESSELLATION_CONTROL_BIT' specifies the tessellation
--- control stage.
-pattern SHADER_STAGE_TESSELLATION_CONTROL_BIT = ShaderStageFlagBits 0x00000002
--- | 'SHADER_STAGE_TESSELLATION_EVALUATION_BIT' specifies the tessellation
--- evaluation stage.
-pattern SHADER_STAGE_TESSELLATION_EVALUATION_BIT = ShaderStageFlagBits 0x00000004
--- | 'SHADER_STAGE_GEOMETRY_BIT' specifies the geometry stage.
-pattern SHADER_STAGE_GEOMETRY_BIT = ShaderStageFlagBits 0x00000008
--- | 'SHADER_STAGE_FRAGMENT_BIT' specifies the fragment stage.
-pattern SHADER_STAGE_FRAGMENT_BIT = ShaderStageFlagBits 0x00000010
--- | 'SHADER_STAGE_COMPUTE_BIT' specifies the compute stage.
-pattern SHADER_STAGE_COMPUTE_BIT = ShaderStageFlagBits 0x00000020
--- | 'SHADER_STAGE_ALL_GRAPHICS' is a combination of bits used as shorthand
--- to specify all graphics stages defined above (excluding the compute
--- stage).
-pattern SHADER_STAGE_ALL_GRAPHICS = ShaderStageFlagBits 0x0000001f
--- | '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 SHADER_STAGE_ALL = ShaderStageFlagBits 0x7fffffff
--- | 'SHADER_STAGE_MESH_BIT_NV' specifies the mesh stage.
-pattern SHADER_STAGE_MESH_BIT_NV = ShaderStageFlagBits 0x00000080
--- | 'SHADER_STAGE_TASK_BIT_NV' specifies the task stage.
-pattern SHADER_STAGE_TASK_BIT_NV = ShaderStageFlagBits 0x00000040
--- | 'SHADER_STAGE_CALLABLE_BIT_KHR' specifies the callable stage.
-pattern SHADER_STAGE_CALLABLE_BIT_KHR = ShaderStageFlagBits 0x00002000
--- | 'SHADER_STAGE_INTERSECTION_BIT_KHR' specifies the intersection stage.
-pattern SHADER_STAGE_INTERSECTION_BIT_KHR = ShaderStageFlagBits 0x00001000
--- | 'SHADER_STAGE_MISS_BIT_KHR' specifies the miss stage.
-pattern SHADER_STAGE_MISS_BIT_KHR = ShaderStageFlagBits 0x00000800
--- | 'SHADER_STAGE_CLOSEST_HIT_BIT_KHR' specifies the closest hit stage.
-pattern SHADER_STAGE_CLOSEST_HIT_BIT_KHR = ShaderStageFlagBits 0x00000400
--- | 'SHADER_STAGE_ANY_HIT_BIT_KHR' specifies the any-hit stage.
-pattern SHADER_STAGE_ANY_HIT_BIT_KHR = ShaderStageFlagBits 0x00000200
--- | 'SHADER_STAGE_RAYGEN_BIT_KHR' specifies the ray generation stage.
-pattern SHADER_STAGE_RAYGEN_BIT_KHR = ShaderStageFlagBits 0x00000100
-
-type ShaderStageFlags = ShaderStageFlagBits
-
-instance Show ShaderStageFlagBits where
-  showsPrec p = \case
-    SHADER_STAGE_VERTEX_BIT -> showString "SHADER_STAGE_VERTEX_BIT"
-    SHADER_STAGE_TESSELLATION_CONTROL_BIT -> showString "SHADER_STAGE_TESSELLATION_CONTROL_BIT"
-    SHADER_STAGE_TESSELLATION_EVALUATION_BIT -> showString "SHADER_STAGE_TESSELLATION_EVALUATION_BIT"
-    SHADER_STAGE_GEOMETRY_BIT -> showString "SHADER_STAGE_GEOMETRY_BIT"
-    SHADER_STAGE_FRAGMENT_BIT -> showString "SHADER_STAGE_FRAGMENT_BIT"
-    SHADER_STAGE_COMPUTE_BIT -> showString "SHADER_STAGE_COMPUTE_BIT"
-    SHADER_STAGE_ALL_GRAPHICS -> showString "SHADER_STAGE_ALL_GRAPHICS"
-    SHADER_STAGE_ALL -> showString "SHADER_STAGE_ALL"
-    SHADER_STAGE_MESH_BIT_NV -> showString "SHADER_STAGE_MESH_BIT_NV"
-    SHADER_STAGE_TASK_BIT_NV -> showString "SHADER_STAGE_TASK_BIT_NV"
-    SHADER_STAGE_CALLABLE_BIT_KHR -> showString "SHADER_STAGE_CALLABLE_BIT_KHR"
-    SHADER_STAGE_INTERSECTION_BIT_KHR -> showString "SHADER_STAGE_INTERSECTION_BIT_KHR"
-    SHADER_STAGE_MISS_BIT_KHR -> showString "SHADER_STAGE_MISS_BIT_KHR"
-    SHADER_STAGE_CLOSEST_HIT_BIT_KHR -> showString "SHADER_STAGE_CLOSEST_HIT_BIT_KHR"
-    SHADER_STAGE_ANY_HIT_BIT_KHR -> showString "SHADER_STAGE_ANY_HIT_BIT_KHR"
-    SHADER_STAGE_RAYGEN_BIT_KHR -> showString "SHADER_STAGE_RAYGEN_BIT_KHR"
-    ShaderStageFlagBits x -> showParen (p >= 11) (showString "ShaderStageFlagBits 0x" . showHex x)
-
-instance Read ShaderStageFlagBits where
-  readPrec = parens (choose [("SHADER_STAGE_VERTEX_BIT", pure SHADER_STAGE_VERTEX_BIT)
-                            , ("SHADER_STAGE_TESSELLATION_CONTROL_BIT", pure SHADER_STAGE_TESSELLATION_CONTROL_BIT)
-                            , ("SHADER_STAGE_TESSELLATION_EVALUATION_BIT", pure SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
-                            , ("SHADER_STAGE_GEOMETRY_BIT", pure SHADER_STAGE_GEOMETRY_BIT)
-                            , ("SHADER_STAGE_FRAGMENT_BIT", pure SHADER_STAGE_FRAGMENT_BIT)
-                            , ("SHADER_STAGE_COMPUTE_BIT", pure SHADER_STAGE_COMPUTE_BIT)
-                            , ("SHADER_STAGE_ALL_GRAPHICS", pure SHADER_STAGE_ALL_GRAPHICS)
-                            , ("SHADER_STAGE_ALL", pure SHADER_STAGE_ALL)
-                            , ("SHADER_STAGE_MESH_BIT_NV", pure SHADER_STAGE_MESH_BIT_NV)
-                            , ("SHADER_STAGE_TASK_BIT_NV", pure SHADER_STAGE_TASK_BIT_NV)
-                            , ("SHADER_STAGE_CALLABLE_BIT_KHR", pure SHADER_STAGE_CALLABLE_BIT_KHR)
-                            , ("SHADER_STAGE_INTERSECTION_BIT_KHR", pure SHADER_STAGE_INTERSECTION_BIT_KHR)
-                            , ("SHADER_STAGE_MISS_BIT_KHR", pure SHADER_STAGE_MISS_BIT_KHR)
-                            , ("SHADER_STAGE_CLOSEST_HIT_BIT_KHR", pure SHADER_STAGE_CLOSEST_HIT_BIT_KHR)
-                            , ("SHADER_STAGE_ANY_HIT_BIT_KHR", pure SHADER_STAGE_ANY_HIT_BIT_KHR)
-                            , ("SHADER_STAGE_RAYGEN_BIT_KHR", pure SHADER_STAGE_RAYGEN_BIT_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ShaderStageFlagBits")
-                       v <- step readPrec
-                       pure (ShaderStageFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/ShaderStageFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/ShaderStageFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/ShaderStageFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits  ( ShaderStageFlagBits
-                                                         , ShaderStageFlags
-                                                         ) where
-
-
-
-data ShaderStageFlagBits
-
-type ShaderStageFlags = ShaderStageFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SharingMode.hs b/src/Graphics/Vulkan/Core10/Enums/SharingMode.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SharingMode.hs
+++ /dev/null
@@ -1,96 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SharingMode  (SharingMode( SHARING_MODE_EXCLUSIVE
-                                                             , SHARING_MODE_CONCURRENT
-                                                             , ..
-                                                             )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkSharingMode - Buffer and image sharing modes
---
--- = Description
---
--- Note
---
--- 'SHARING_MODE_CONCURRENT' /may/ result in lower performance access to
--- the buffer or image than 'SHARING_MODE_EXCLUSIVE'.
---
--- Ranges of buffers and image subresources of image objects created using
--- '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
--- 'SHARING_MODE_EXCLUSIVE' is owned by some queue family, the application
--- /must/ perform a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts layout transition>
--- from 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'
--- or
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.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 '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
--- '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
---
--- 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo',
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
-newtype SharingMode = SharingMode Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | '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.
-pattern SHARING_MODE_EXCLUSIVE = SharingMode 0
--- | 'SHARING_MODE_CONCURRENT' specifies that concurrent access to any range
--- or image subresource of the object from multiple queue families is
--- supported.
-pattern SHARING_MODE_CONCURRENT = SharingMode 1
-{-# complete SHARING_MODE_EXCLUSIVE,
-             SHARING_MODE_CONCURRENT :: SharingMode #-}
-
-instance Show SharingMode where
-  showsPrec p = \case
-    SHARING_MODE_EXCLUSIVE -> showString "SHARING_MODE_EXCLUSIVE"
-    SHARING_MODE_CONCURRENT -> showString "SHARING_MODE_CONCURRENT"
-    SharingMode x -> showParen (p >= 11) (showString "SharingMode " . showsPrec 11 x)
-
-instance Read SharingMode where
-  readPrec = parens (choose [("SHARING_MODE_EXCLUSIVE", pure SHARING_MODE_EXCLUSIVE)
-                            , ("SHARING_MODE_CONCURRENT", pure SHARING_MODE_CONCURRENT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SharingMode")
-                       v <- step readPrec
-                       pure (SharingMode v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SparseImageFormatFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/SparseImageFormatFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SparseImageFormatFlagBits.hs
+++ /dev/null
@@ -1,65 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits  ( SparseImageFormatFlagBits( SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT
-                                                                                          , SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT
-                                                                                          , SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT
-                                                                                          , ..
-                                                                                          )
-                                                               , SparseImageFormatFlags
-                                                               ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkSparseImageFormatFlagBits - Bitmask specifying additional information
--- about a sparse image resource
---
--- = See Also
---
--- 'SparseImageFormatFlags'
-newtype SparseImageFormatFlagBits = SparseImageFormatFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT' specifies that the image uses a
--- single mip tail region for all array layers.
-pattern SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = SparseImageFormatFlagBits 0x00000001
--- | '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 SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = SparseImageFormatFlagBits 0x00000002
--- | '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 SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = SparseImageFormatFlagBits 0x00000004
-
-type SparseImageFormatFlags = SparseImageFormatFlagBits
-
-instance Show SparseImageFormatFlagBits where
-  showsPrec p = \case
-    SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT -> showString "SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"
-    SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT -> showString "SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"
-    SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT -> showString "SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT"
-    SparseImageFormatFlagBits x -> showParen (p >= 11) (showString "SparseImageFormatFlagBits 0x" . showHex x)
-
-instance Read SparseImageFormatFlagBits where
-  readPrec = parens (choose [("SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT", pure SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
-                            , ("SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT", pure SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
-                            , ("SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT", pure SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SparseImageFormatFlagBits")
-                       v <- step readPrec
-                       pure (SparseImageFormatFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SparseMemoryBindFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/SparseMemoryBindFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SparseMemoryBindFlagBits.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits  ( SparseMemoryBindFlagBits( SPARSE_MEMORY_BIND_METADATA_BIT
-                                                                                        , ..
-                                                                                        )
-                                                              , SparseMemoryBindFlags
-                                                              ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkSparseMemoryBindFlagBits - Bitmask specifying usage of a sparse memory
--- binding operation
---
--- = See Also
---
--- 'SparseMemoryBindFlags'
-newtype SparseMemoryBindFlagBits = SparseMemoryBindFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SPARSE_MEMORY_BIND_METADATA_BIT' specifies that the memory being bound
--- is only for the metadata aspect.
-pattern SPARSE_MEMORY_BIND_METADATA_BIT = SparseMemoryBindFlagBits 0x00000001
-
-type SparseMemoryBindFlags = SparseMemoryBindFlagBits
-
-instance Show SparseMemoryBindFlagBits where
-  showsPrec p = \case
-    SPARSE_MEMORY_BIND_METADATA_BIT -> showString "SPARSE_MEMORY_BIND_METADATA_BIT"
-    SparseMemoryBindFlagBits x -> showParen (p >= 11) (showString "SparseMemoryBindFlagBits 0x" . showHex x)
-
-instance Read SparseMemoryBindFlagBits where
-  readPrec = parens (choose [("SPARSE_MEMORY_BIND_METADATA_BIT", pure SPARSE_MEMORY_BIND_METADATA_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SparseMemoryBindFlagBits")
-                       v <- step readPrec
-                       pure (SparseMemoryBindFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/StencilFaceFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/StencilFaceFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/StencilFaceFlagBits.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits  ( StencilFaceFlagBits( STENCIL_FACE_FRONT_BIT
-                                                                              , STENCIL_FACE_BACK_BIT
-                                                                              , STENCIL_FACE_FRONT_AND_BACK
-                                                                              , ..
-                                                                              )
-                                                         , StencilFaceFlags
-                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkStencilFaceFlagBits - Bitmask specifying sets of stencil state for
--- which to update the compare mask
---
--- = See Also
---
--- 'StencilFaceFlags'
-newtype StencilFaceFlagBits = StencilFaceFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'STENCIL_FACE_FRONT_BIT' specifies that only the front set of stencil
--- state is updated.
-pattern STENCIL_FACE_FRONT_BIT = StencilFaceFlagBits 0x00000001
--- | 'STENCIL_FACE_BACK_BIT' specifies that only the back set of stencil
--- state is updated.
-pattern STENCIL_FACE_BACK_BIT = StencilFaceFlagBits 0x00000002
--- | 'STENCIL_FACE_FRONT_AND_BACK' is the combination of
--- 'STENCIL_FACE_FRONT_BIT' and 'STENCIL_FACE_BACK_BIT', and specifies that
--- both sets of stencil state are updated.
-pattern STENCIL_FACE_FRONT_AND_BACK = StencilFaceFlagBits 0x00000003
-
-type StencilFaceFlags = StencilFaceFlagBits
-
-instance Show StencilFaceFlagBits where
-  showsPrec p = \case
-    STENCIL_FACE_FRONT_BIT -> showString "STENCIL_FACE_FRONT_BIT"
-    STENCIL_FACE_BACK_BIT -> showString "STENCIL_FACE_BACK_BIT"
-    STENCIL_FACE_FRONT_AND_BACK -> showString "STENCIL_FACE_FRONT_AND_BACK"
-    StencilFaceFlagBits x -> showParen (p >= 11) (showString "StencilFaceFlagBits 0x" . showHex x)
-
-instance Read StencilFaceFlagBits where
-  readPrec = parens (choose [("STENCIL_FACE_FRONT_BIT", pure STENCIL_FACE_FRONT_BIT)
-                            , ("STENCIL_FACE_BACK_BIT", pure STENCIL_FACE_BACK_BIT)
-                            , ("STENCIL_FACE_FRONT_AND_BACK", pure STENCIL_FACE_FRONT_AND_BACK)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "StencilFaceFlagBits")
-                       v <- step readPrec
-                       pure (StencilFaceFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/StencilFaceFlagBits.hs-boot b/src/Graphics/Vulkan/Core10/Enums/StencilFaceFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/StencilFaceFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits  ( StencilFaceFlagBits
-                                                         , StencilFaceFlags
-                                                         ) where
-
-
-
-data StencilFaceFlagBits
-
-type StencilFaceFlags = StencilFaceFlagBits
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/StencilOp.hs b/src/Graphics/Vulkan/Core10/Enums/StencilOp.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/StencilOp.hs
+++ /dev/null
@@ -1,115 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.StencilOp  (StencilOp( STENCIL_OP_KEEP
-                                                         , STENCIL_OP_ZERO
-                                                         , STENCIL_OP_REPLACE
-                                                         , STENCIL_OP_INCREMENT_AND_CLAMP
-                                                         , STENCIL_OP_DECREMENT_AND_CLAMP
-                                                         , STENCIL_OP_INVERT
-                                                         , STENCIL_OP_INCREMENT_AND_WRAP
-                                                         , STENCIL_OP_DECREMENT_AND_WRAP
-                                                         , ..
-                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkStencilOp - Stencil comparison function
---
--- = Description
---
--- 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
--- 'Graphics.Vulkan.Core10.Pipeline.StencilOpState' 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
---
--- 'Graphics.Vulkan.Core10.Pipeline.StencilOpState'
-newtype StencilOp = StencilOp Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'STENCIL_OP_KEEP' keeps the current value.
-pattern STENCIL_OP_KEEP = StencilOp 0
--- | 'STENCIL_OP_ZERO' sets the value to 0.
-pattern STENCIL_OP_ZERO = StencilOp 1
--- | 'STENCIL_OP_REPLACE' sets the value to @reference@.
-pattern STENCIL_OP_REPLACE = StencilOp 2
--- | 'STENCIL_OP_INCREMENT_AND_CLAMP' increments the current value and clamps
--- to the maximum representable unsigned value.
-pattern STENCIL_OP_INCREMENT_AND_CLAMP = StencilOp 3
--- | 'STENCIL_OP_DECREMENT_AND_CLAMP' decrements the current value and clamps
--- to 0.
-pattern STENCIL_OP_DECREMENT_AND_CLAMP = StencilOp 4
--- | 'STENCIL_OP_INVERT' bitwise-inverts the current value.
-pattern STENCIL_OP_INVERT = StencilOp 5
--- | 'STENCIL_OP_INCREMENT_AND_WRAP' increments the current value and wraps
--- to 0 when the maximum value would have been exceeded.
-pattern STENCIL_OP_INCREMENT_AND_WRAP = StencilOp 6
--- | 'STENCIL_OP_DECREMENT_AND_WRAP' decrements the current value and wraps
--- to the maximum possible value when the value would go below 0.
-pattern STENCIL_OP_DECREMENT_AND_WRAP = StencilOp 7
-{-# complete STENCIL_OP_KEEP,
-             STENCIL_OP_ZERO,
-             STENCIL_OP_REPLACE,
-             STENCIL_OP_INCREMENT_AND_CLAMP,
-             STENCIL_OP_DECREMENT_AND_CLAMP,
-             STENCIL_OP_INVERT,
-             STENCIL_OP_INCREMENT_AND_WRAP,
-             STENCIL_OP_DECREMENT_AND_WRAP :: StencilOp #-}
-
-instance Show StencilOp where
-  showsPrec p = \case
-    STENCIL_OP_KEEP -> showString "STENCIL_OP_KEEP"
-    STENCIL_OP_ZERO -> showString "STENCIL_OP_ZERO"
-    STENCIL_OP_REPLACE -> showString "STENCIL_OP_REPLACE"
-    STENCIL_OP_INCREMENT_AND_CLAMP -> showString "STENCIL_OP_INCREMENT_AND_CLAMP"
-    STENCIL_OP_DECREMENT_AND_CLAMP -> showString "STENCIL_OP_DECREMENT_AND_CLAMP"
-    STENCIL_OP_INVERT -> showString "STENCIL_OP_INVERT"
-    STENCIL_OP_INCREMENT_AND_WRAP -> showString "STENCIL_OP_INCREMENT_AND_WRAP"
-    STENCIL_OP_DECREMENT_AND_WRAP -> showString "STENCIL_OP_DECREMENT_AND_WRAP"
-    StencilOp x -> showParen (p >= 11) (showString "StencilOp " . showsPrec 11 x)
-
-instance Read StencilOp where
-  readPrec = parens (choose [("STENCIL_OP_KEEP", pure STENCIL_OP_KEEP)
-                            , ("STENCIL_OP_ZERO", pure STENCIL_OP_ZERO)
-                            , ("STENCIL_OP_REPLACE", pure STENCIL_OP_REPLACE)
-                            , ("STENCIL_OP_INCREMENT_AND_CLAMP", pure STENCIL_OP_INCREMENT_AND_CLAMP)
-                            , ("STENCIL_OP_DECREMENT_AND_CLAMP", pure STENCIL_OP_DECREMENT_AND_CLAMP)
-                            , ("STENCIL_OP_INVERT", pure STENCIL_OP_INVERT)
-                            , ("STENCIL_OP_INCREMENT_AND_WRAP", pure STENCIL_OP_INCREMENT_AND_WRAP)
-                            , ("STENCIL_OP_DECREMENT_AND_WRAP", pure STENCIL_OP_DECREMENT_AND_WRAP)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "StencilOp")
-                       v <- step readPrec
-                       pure (StencilOp v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/StructureType.hs b/src/Graphics/Vulkan/Core10/Enums/StructureType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/StructureType.hs
+++ /dev/null
@@ -1,3063 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.StructureType  (StructureType( STRUCTURE_TYPE_APPLICATION_INFO
-                                                                 , STRUCTURE_TYPE_INSTANCE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_DEVICE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_SUBMIT_INFO
-                                                                 , STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
-                                                                 , STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
-                                                                 , STRUCTURE_TYPE_BIND_SPARSE_INFO
-                                                                 , STRUCTURE_TYPE_FENCE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_EVENT_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_BUFFER_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_IMAGE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_SAMPLER_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO
-                                                                 , STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
-                                                                 , STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
-                                                                 , STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO
-                                                                 , STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO
-                                                                 , STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
-                                                                 , STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
-                                                                 , STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
-                                                                 , STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
-                                                                 , STRUCTURE_TYPE_MEMORY_BARRIER
-                                                                 , STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM
-                                                                 , STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV
-                                                                 , STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV
-                                                                 , STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV
-                                                                 , STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR
-                                                                 , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR
-                                                                 , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR
-                                                                 , STRUCTURE_TYPE_PIPELINE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR
-                                                                 , STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT
-                                                                 , STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT
-                                                                 , STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV
-                                                                 , STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV
-                                                                 , STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_VALIDATION_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR
-                                                                 , STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA
-                                                                 , STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD
-                                                                 , STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL
-                                                                 , STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL
-                                                                 , STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL
-                                                                 , STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL
-                                                                 , STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL
-                                                                 , STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL
-                                                                 , STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV
-                                                                 , STRUCTURE_TYPE_CHECKPOINT_DATA_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD
-                                                                 , STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT
-                                                                 , STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV
-                                                                 , STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV
-                                                                 , STRUCTURE_TYPE_GEOMETRY_AABB_NV
-                                                                 , STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV
-                                                                 , STRUCTURE_TYPE_GEOMETRY_NV
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT
-                                                                 , STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR
-                                                                 , STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR
-                                                                 , STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR
-                                                                 , STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR
-                                                                 , STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR
-                                                                 , STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT
-                                                                 , STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT
-                                                                 , STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
-                                                                 , STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID
-                                                                 , STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID
-                                                                 , STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID
-                                                                 , STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID
-                                                                 , STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID
-                                                                 , STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT
-                                                                 , STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT
-                                                                 , STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT
-                                                                 , STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT
-                                                                 , STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK
-                                                                 , STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK
-                                                                 , STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR
-                                                                 , STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR
-                                                                 , STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR
-                                                                 , STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR
-                                                                 , STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR
-                                                                 , STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR
-                                                                 , STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR
-                                                                 , STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR
-                                                                 , STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR
-                                                                 , STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR
-                                                                 , STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR
-                                                                 , STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR
-                                                                 , STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR
-                                                                 , STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR
-                                                                 , STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR
-                                                                 , STRUCTURE_TYPE_HDR_METADATA_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX
-                                                                 , STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE
-                                                                 , STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT
-                                                                 , STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT
-                                                                 , STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT
-                                                                 , STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PRESENT_REGIONS_KHR
-                                                                 , STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR
-                                                                 , STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR
-                                                                 , STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR
-                                                                 , STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR
-                                                                 , STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR
-                                                                 , STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR
-                                                                 , STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR
-                                                                 , STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR
-                                                                 , STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN
-                                                                 , STRUCTURE_TYPE_VALIDATION_FLAGS_EXT
-                                                                 , STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR
-                                                                 , STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR
-                                                                 , STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR
-                                                                 , STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV
-                                                                 , STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV
-                                                                 , STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV
-                                                                 , STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV
-                                                                 , STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP
-                                                                 , STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD
-                                                                 , STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX
-                                                                 , STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX
-                                                                 , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT
-                                                                 , STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV
-                                                                 , STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT
-                                                                 , STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT
-                                                                 , STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT
-                                                                 , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD
-                                                                 , STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
-                                                                 , STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR
-                                                                 , STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_PRESENT_INFO_KHR
-                                                                 , STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR
-                                                                 , STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO
-                                                                 , STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO
-                                                                 , STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES
-                                                                 , STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO
-                                                                 , STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO
-                                                                 , STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO
-                                                                 , STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES
-                                                                 , STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT
-                                                                 , STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES
-                                                                 , STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO
-                                                                 , STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO
-                                                                 , STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES
-                                                                 , STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES
-                                                                 , STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES
-                                                                 , STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES
-                                                                 , STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT
-                                                                 , STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES
-                                                                 , STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES
-                                                                 , STRUCTURE_TYPE_SUBPASS_END_INFO
-                                                                 , STRUCTURE_TYPE_SUBPASS_BEGIN_INFO
-                                                                 , STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2
-                                                                 , STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2
-                                                                 , STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2
-                                                                 , STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2
-                                                                 , STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2
-                                                                 , STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES
-                                                                 , STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES
-                                                                 , STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO
-                                                                 , STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO
-                                                                 , STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO
-                                                                 , STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES
-                                                                 , STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO
-                                                                 , STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO
-                                                                 , STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES
-                                                                 , STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO
-                                                                 , STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO
-                                                                 , STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO
-                                                                 , STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES
-                                                                 , STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES
-                                                                 , STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2
-                                                                 , STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2
-                                                                 , STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2
-                                                                 , STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2
-                                                                 , STRUCTURE_TYPE_FORMAT_PROPERTIES_2
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2
-                                                                 , STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2
-                                                                 , STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2
-                                                                 , STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2
-                                                                 , STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2
-                                                                 , STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2
-                                                                 , STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES
-                                                                 , STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO
-                                                                 , STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO
-                                                                 , STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO
-                                                                 , STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO
-                                                                 , STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO
-                                                                 , STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO
-                                                                 , STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO
-                                                                 , STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO
-                                                                 , STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES
-                                                                 , STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO
-                                                                 , STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO
-                                                                 , STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES
-                                                                 , ..
-                                                                 )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkStructureType - Vulkan structure types (@sType@)
---
--- = Description
---
--- Each value corresponds to a particular structure with a @sType@ member
--- with a matching name. As a general rule, the name of each
--- 'StructureType' 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
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' correspond to a
--- 'StructureType' of 'STRUCTURE_TYPE_IMAGE_CREATE_INFO', and thus its
--- @sType@ member /must/ equal that when it is passed to the API.
---
--- The values 'STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO' and
--- '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
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureBuildGeometryInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateGeometryTypeInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureDeviceAddressInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryAabbsDataKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryInstancesDataKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryTrianglesDataKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureMemoryRequirementsInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureMemoryRequirementsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureVersionKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.AcquireNextImageInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.AcquireProfilingLockInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferPropertiesANDROID',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferUsageANDROID',
--- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.AndroidSurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.ApplicationInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout',
--- 'Graphics.Vulkan.CStruct.Extends.BaseInStructure',
--- 'Graphics.Vulkan.CStruct.Extends.BaseOutStructure',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.BindAccelerationStructureMemoryInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.BindSparseInfo',
--- 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferDeviceAddressInfo',
--- 'Graphics.Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.BufferMemoryRequirementsInfo2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo',
--- 'Graphics.Vulkan.Core10.BufferView.BufferViewCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps.CalibratedTimestampInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.CheckpointDataNV',
--- 'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferAllocateInfo',
--- 'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.CommandBufferInheritanceConditionalRenderingInfoEXT',
--- 'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',
--- 'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM',
--- 'Graphics.Vulkan.Core10.CommandPool.CommandPoolCreateInfo',
--- 'Graphics.Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix.CooperativeMatrixPropertiesNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureToMemoryInfoKHR',
--- 'Graphics.Vulkan.Core10.DescriptorSet.CopyDescriptorSet',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.CopyMemoryToAccelerationStructureInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.D3D12FenceSubmitInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerMarkerInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerObjectNameInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerObjectTagInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.DebugReportCallbackCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsLabelEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCallbackDataEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectTagInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR',
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorPoolCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.DescriptorPoolInlineUniformBlockCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetLayoutBindingFlagsCreateInfo',
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.DescriptorSetLayoutSupport',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountAllocateInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountLayoutSupport',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo',
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config.DeviceDiagnosticsConfigCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.DeviceEventInfoEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupBindSparseInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupCommandBufferBeginInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupPresentCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupPresentInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupSubmitInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupSwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.DeviceMemoryOpaqueCaptureAddressInfo',
--- 'Graphics.Vulkan.Extensions.VK_AMD_memory_overallocation_behavior.DeviceMemoryOverallocationCreateInfoAMD',
--- 'Graphics.Vulkan.Core10.Device.DeviceQueueCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_global_priority.DeviceQueueGlobalPriorityCreateInfoEXT',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.DeviceQueueInfo2',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.DisplayEventInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayModeCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayModeProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr.DisplayNativeHdrSurfaceCapabilitiesAMD',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneCapabilities2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneInfo2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.DisplayPowerInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.DisplayPresentInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplaySurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesListEXT',
--- 'Graphics.Vulkan.Core10.Event.EventCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.ExportFenceWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory.ExportMemoryAllocateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.ExportMemoryWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.ExportMemoryWin32HandleInfoNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.ExportSemaphoreWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties',
--- 'Graphics.Vulkan.Core10.Fence.FenceCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.FenceGetFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.FenceGetWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.FormatProperties2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentImageInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo',
--- 'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.FramebufferMixedSamplesCombinationNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsMemoryRequirementsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
--- 'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata.HdrMetadataEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_headless_surface.HeadlessSurfaceCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.IOSSurfaceCreateInfoMVK',
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierPropertiesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2',
--- 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2',
--- 'Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface.ImagePipeSurfaceCreateInfoFUCHSIA',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageSparseMemoryRequirementsInfo2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode.ImageViewASTCDecodeModeEXT',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewAddressPropertiesNVX',
--- 'Graphics.Vulkan.Core10.ImageView.ImageViewCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewHandleInfoNVX',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.ImportFenceFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.ImportFenceWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.ImportMemoryFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.ImportMemoryWin32HandleInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.ImportSemaphoreFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.ImportSemaphoreWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.InitializePerformanceApiInfoINTEL',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.InstanceCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.MacOSSurfaceCreateInfoMVK',
--- 'Graphics.Vulkan.Core10.Memory.MappedMemoryRange',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo',
--- 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo',
--- 'Graphics.Vulkan.Core10.OtherTypes.MemoryBarrier',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryFdPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.MemoryGetAndroidHardwareBufferInfoANDROID',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryGetFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryGetWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.MemoryHostPointerPropertiesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_memory_priority.MemoryPriorityAllocateInfoEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryWin32HandlePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_metal_surface.MetalSurfaceCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.PerformanceConfigurationAcquireInfoINTEL',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterDescriptionKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterKHR',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.PerformanceMarkerInfoINTEL',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.PerformanceOverrideInfoINTEL',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PerformanceQuerySubmitInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.PerformanceStreamMarkerInfoINTEL',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode.PhysicalDeviceASTCDecodeFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory.PhysicalDeviceCoherentMemoryFeaturesAMD',
--- 'Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives.PhysicalDeviceComputeShaderDerivativesFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.PhysicalDeviceConditionalRenderingFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.PhysicalDeviceConservativeRasterizationPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixPropertiesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image.PhysicalDeviceCornerSampledImageFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.PhysicalDeviceCoverageReductionModeFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing.PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable.PhysicalDeviceDepthClipEnableFeaturesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsPropertiesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.PhysicalDeviceDiscardRectanglePropertiesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
--- 'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalBufferInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.PhysicalDeviceExternalFenceInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.PhysicalDeviceExternalSemaphoreInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric.PhysicalDeviceFragmentShaderBarycentricFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock.PhysicalDeviceFragmentShaderInterlockFeaturesEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
--- 'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.PhysicalDeviceImageViewImageFormatInfoEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.PhysicalDeviceImagelessFramebufferFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8.PhysicalDeviceIndexTypeUint8FeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationPropertiesEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_memory_budget.PhysicalDeviceMemoryBudgetPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceMemoryProperties2',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
--- 'Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_pci_bus_info.PhysicalDevicePCIBusInfoPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryFeaturesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingFeaturesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2FeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2PropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.PhysicalDeviceSamplerFilterMinmaxProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
--- 'Graphics.Vulkan.Extensions.VK_KHR_shader_clock.PhysicalDeviceShaderClockFeaturesKHR',
--- 'Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties2.PhysicalDeviceShaderCoreProperties2AMD',
--- 'Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties.PhysicalDeviceShaderCorePropertiesAMD',
--- 'Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation.PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8.PhysicalDeviceShaderFloat16Int8Features',
--- 'Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint.PhysicalDeviceShaderImageFootprintFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2.PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL',
--- 'Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsPropertiesNV',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types.PhysicalDeviceShaderSubgroupExtendedTypesFeatures',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImageFeaturesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImagePropertiesNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreFeatures',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreProperties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_tooling_info.PhysicalDeviceToolPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout.PhysicalDeviceUniformBufferStandardLayoutFeatures',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers.PhysicalDeviceVariablePointersFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PhysicalDeviceVertexAttributeDivisorFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PhysicalDeviceVertexAttributeDivisorPropertiesEXT',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan11Features',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan11Properties',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Features',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Properties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures',
--- 'Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT',
--- 'Graphics.Vulkan.Core10.PipelineCache.PipelineCacheCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD',
--- 'Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.PipelineCoverageModulationStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color.PipelineCoverageToColorStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableInternalRepresentationKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutablePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableStatisticKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineInfoKHR',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo',
--- 'Graphics.Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.PipelineRasterizationConservativeStateCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PipelineTessellationDomainOriginStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PipelineVertexInputDivisorStateCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportCoarseSampleOrderStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_GGP_frame_token.PresentFrameTokenGGP',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.PresentRegionsKHR',
--- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.PresentTimesInfoGOOGLE',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.ProtectedSubmitInfo',
--- 'Graphics.Vulkan.Core10.Query.QueryPoolCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.QueryPoolPerformanceCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.QueryPoolPerformanceQueryCreateInfoINTEL',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.QueueFamilyCheckpointPropertiesNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.QueueFamilyProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineInterfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingShaderGroupCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingShaderGroupCreateInfoNV',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',
--- 'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.RenderPassCreateInfo2',
--- 'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT',
--- 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionImageFormatProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.SemaphoreGetFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.SemaphoreGetWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreSignalInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo',
--- 'Graphics.Vulkan.Core10.Shader.ShaderModuleCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.ShaderModuleValidationCacheCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.SparseImageFormatProperties2',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.SparseImageMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface.StreamDescriptorSurfaceCreateInfoGGP',
--- 'Graphics.Vulkan.Core10.Queue.SubmitInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassBeginInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDependency2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDescription2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassEndInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceFormat2KHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.SwapchainCounterCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr.SwapchainDisplayNativeHdrCreateInfoAMD',
--- 'Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.TextureLODGatherFormatPropertiesAMD',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.ValidationCacheCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_features.ValidationFeaturesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_flags.ValidationFlagsEXT',
--- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.ViSurfaceCreateInfoNN',
--- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.WaylandSurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.Win32SurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.XcbSurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.XlibSurfaceCreateInfoKHR'
-newtype StructureType = StructureType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_APPLICATION_INFO"
-pattern STRUCTURE_TYPE_APPLICATION_INFO = StructureType 0
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO"
-pattern STRUCTURE_TYPE_INSTANCE_CREATE_INFO = StructureType 1
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"
-pattern STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = StructureType 2
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO"
-pattern STRUCTURE_TYPE_DEVICE_CREATE_INFO = StructureType 3
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBMIT_INFO"
-pattern STRUCTURE_TYPE_SUBMIT_INFO = StructureType 4
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"
-pattern STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = StructureType 5
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"
-pattern STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = StructureType 6
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO"
-pattern STRUCTURE_TYPE_BIND_SPARSE_INFO = StructureType 7
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO"
-pattern STRUCTURE_TYPE_FENCE_CREATE_INFO = StructureType 8
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"
-pattern STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = StructureType 9
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO"
-pattern STRUCTURE_TYPE_EVENT_CREATE_INFO = StructureType 10
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"
-pattern STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = StructureType 11
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO"
-pattern STRUCTURE_TYPE_BUFFER_CREATE_INFO = StructureType 12
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"
-pattern STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = StructureType 13
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO"
-pattern STRUCTURE_TYPE_IMAGE_CREATE_INFO = StructureType 14
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"
-pattern STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = StructureType 15
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"
-pattern STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = StructureType 16
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = StructureType 17
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = StructureType 18
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = StructureType 19
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = StructureType 20
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = StructureType 21
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = StructureType 22
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = StructureType 23
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = StructureType 24
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = StructureType 25
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = StructureType 26
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = StructureType 27
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"
-pattern STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = StructureType 28
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"
-pattern STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = StructureType 29
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = StructureType 30
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO"
-pattern STRUCTURE_TYPE_SAMPLER_CREATE_INFO = StructureType 31
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"
-pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = StructureType 32
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"
-pattern STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = StructureType 33
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"
-pattern STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = StructureType 34
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"
-pattern STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = StructureType 35
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"
-pattern STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = StructureType 36
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"
-pattern STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = StructureType 37
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"
-pattern STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = StructureType 38
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"
-pattern STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = StructureType 39
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"
-pattern STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = StructureType 40
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"
-pattern STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = StructureType 41
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"
-pattern STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = StructureType 42
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"
-pattern STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = StructureType 43
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"
-pattern STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = StructureType 44
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"
-pattern STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = StructureType 45
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_BARRIER"
-pattern STRUCTURE_TYPE_MEMORY_BARRIER = StructureType 46
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO"
-pattern STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = StructureType 47
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"
-pattern STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = StructureType 48
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = StructureType 1000300001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = StructureType 1000300000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT = StructureType 1000297000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR = StructureType 1000290000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = StructureType 1000286001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = StructureType 1000286000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM"
-pattern STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM = StructureType 1000282001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM"
-pattern STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = StructureType 1000282000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = StructureType 1000281001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = StructureType 1000281000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = StructureType 1000277007
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV"
-pattern STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV = StructureType 1000277006
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV"
-pattern STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV = StructureType 1000277005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV = StructureType 1000277004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV"
-pattern STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV = StructureType 1000277003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV = StructureType 1000277002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV = StructureType 1000277001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = StructureType 1000277000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = StructureType 1000276000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR"
-pattern STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = StructureType 1000269005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR"
-pattern STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = StructureType 1000269004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR"
-pattern STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = StructureType 1000269003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = StructureType 1000269002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR"
-pattern STRUCTURE_TYPE_PIPELINE_INFO_KHR = StructureType 1000269001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = StructureType 1000269000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR"
-pattern STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR = StructureType 1000268000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = StructureType 1000265000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = StructureType 1000259002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = StructureType 1000259001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = StructureType 1000259000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = StructureType 1000256000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT"
-pattern STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT = StructureType 1000255001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT"
-pattern STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT = StructureType 1000255002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT"
-pattern STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT = StructureType 1000255000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT = StructureType 1000252000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT = StructureType 1000251000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV"
-pattern STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV = StructureType 1000250002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV = StructureType 1000250001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV = StructureType 1000250000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV = StructureType 1000249002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV"
-pattern STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV = StructureType 1000249001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = StructureType 1000249000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT"
-pattern STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = StructureType 1000247000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = StructureType 1000245000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = StructureType 1000244002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = StructureType 1000244000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = StructureType 1000240000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR"
-pattern STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR = StructureType 1000239000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT"
-pattern STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT = StructureType 1000238001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT = StructureType 1000238000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = StructureType 1000237000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD = StructureType 1000229000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD = StructureType 1000227000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = StructureType 1000225002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = StructureType 1000225001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = StructureType 1000225000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT = StructureType 1000218002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT = StructureType 1000218001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT = StructureType 1000218000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = StructureType 1000217000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA"
-pattern STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = StructureType 1000214000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD"
-pattern STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD = StructureType 1000213001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD"
-pattern STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = StructureType 1000213000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = StructureType 1000212000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL"
-pattern STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = StructureType 1000210005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL"
-pattern STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = StructureType 1000210004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL"
-pattern STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = StructureType 1000210003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL"
-pattern STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = StructureType 1000210002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL"
-pattern STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = StructureType 1000210001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL"
-pattern STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL = StructureType 1000210000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = StructureType 1000209000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV"
-pattern STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = StructureType 1000206001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV"
-pattern STRUCTURE_TYPE_CHECKPOINT_DATA_NV = StructureType 1000206000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = StructureType 1000205002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV = StructureType 1000205000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV = StructureType 1000204000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = StructureType 1000203000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = StructureType 1000202001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = StructureType 1000202000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = StructureType 1000201000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = StructureType 1000192000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP"
-pattern STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = StructureType 1000191000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = StructureType 1000190002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = StructureType 1000190001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = StructureType 1000190000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD"
-pattern STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = StructureType 1000189000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = StructureType 1000185000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT"
-pattern STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = StructureType 1000184000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD"
-pattern STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = StructureType 1000183000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = StructureType 1000181000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = StructureType 1000178002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = StructureType 1000178001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT"
-pattern STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = StructureType 1000178000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = StructureType 1000174000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = StructureType 1000170001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = StructureType 1000170000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = StructureType 1000166001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV = StructureType 1000166000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV = StructureType 1000165012
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV = StructureType 1000165011
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV = StructureType 1000165009
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV = StructureType 1000165008
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV"
-pattern STRUCTURE_TYPE_GEOMETRY_AABB_NV = StructureType 1000165005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV"
-pattern STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV = StructureType 1000165004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GEOMETRY_NV"
-pattern STRUCTURE_TYPE_GEOMETRY_NV = StructureType 1000165003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV = StructureType 1000165001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV = StructureType 1000165000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV = StructureType 1000164005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = StructureType 1000164002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = StructureType 1000164001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = StructureType 1000164000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = StructureType 1000160001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = StructureType 1000160000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = StructureType 1000158005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = StructureType 1000158004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = StructureType 1000158003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT = StructureType 1000158002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = StructureType 1000158001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT"
-pattern STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT = StructureType 1000158000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV = StructureType 1000154001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV = StructureType 1000154000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = StructureType 1000152000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR = StructureType 1000150018
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR = StructureType 1000150017
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR = StructureType 1000150016
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR = StructureType 1000150015
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR = StructureType 1000150014
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR = StructureType 1000150013
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR"
-pattern STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR = StructureType 1000150012
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR"
-pattern STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR = StructureType 1000150011
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR"
-pattern STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR = StructureType 1000150010
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR = StructureType 1000150009
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR = StructureType 1000150008
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR = StructureType 1000150006
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR = StructureType 1000150005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR = StructureType 1000150004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR = StructureType 1000150003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR = StructureType 1000150002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR = StructureType 1000150001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR"
-pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR = StructureType 1000150000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR"
-pattern STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR = StructureType 1000165007
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR"
-pattern STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR = StructureType 1000165006
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = StructureType 1000149000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = StructureType 1000148002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = StructureType 1000148001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = StructureType 1000148000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = StructureType 1000143004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = StructureType 1000143003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = StructureType 1000143002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT"
-pattern STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = StructureType 1000143001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT"
-pattern STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = StructureType 1000143000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = StructureType 1000138003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT"
-pattern STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = StructureType 1000138002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = StructureType 1000138001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = StructureType 1000138000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID"
-pattern STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = StructureType 1000129005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
-pattern STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = StructureType 1000129004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
-pattern STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = StructureType 1000129003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID"
-pattern STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = StructureType 1000129002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID"
-pattern STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = StructureType 1000129001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID"
-pattern STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = StructureType 1000129000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = StructureType 1000128004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"
-pattern STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = StructureType 1000128003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT"
-pattern STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = StructureType 1000128002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT"
-pattern STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = StructureType 1000128001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT"
-pattern STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = StructureType 1000128000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK"
-pattern STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = StructureType 1000123000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK"
-pattern STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = StructureType 1000122000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR"
-pattern STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = StructureType 1000121004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR"
-pattern STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = StructureType 1000121003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR"
-pattern STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = StructureType 1000121002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR"
-pattern STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = StructureType 1000121001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR"
-pattern STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = StructureType 1000121000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"
-pattern STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = StructureType 1000119002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"
-pattern STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = StructureType 1000119001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = StructureType 1000119000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR"
-pattern STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR = StructureType 1000116006
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR"
-pattern STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR = StructureType 1000116005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR"
-pattern STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR = StructureType 1000116004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR"
-pattern STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR = StructureType 1000116003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR = StructureType 1000116002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR = StructureType 1000116001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR = StructureType 1000116000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR"
-pattern STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = StructureType 1000115001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR"
-pattern STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = StructureType 1000115000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR"
-pattern STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = StructureType 1000114002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR"
-pattern STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = StructureType 1000114001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR"
-pattern STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = StructureType 1000114000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"
-pattern STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = StructureType 1000111000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_HDR_METADATA_EXT"
-pattern STRUCTURE_TYPE_HDR_METADATA_EXT = StructureType 1000105000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT = StructureType 1000102001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT = StructureType 1000102000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = StructureType 1000101001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = StructureType 1000101000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = StructureType 1000099001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = StructureType 1000099000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = StructureType 1000098000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = StructureType 1000097000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"
-pattern STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = StructureType 1000092000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = StructureType 1000091003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT"
-pattern STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = StructureType 1000091002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT"
-pattern STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = StructureType 1000091001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT"
-pattern STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = StructureType 1000091000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT"
-pattern STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = StructureType 1000090000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = StructureType 1000087000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR"
-pattern STRUCTURE_TYPE_PRESENT_REGIONS_KHR = StructureType 1000084000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT"
-pattern STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = StructureType 1000081002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = StructureType 1000081001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT"
-pattern STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = StructureType 1000081000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = StructureType 1000080000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR"
-pattern STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = StructureType 1000079001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR"
-pattern STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = StructureType 1000079000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR"
-pattern STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = StructureType 1000078003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR"
-pattern STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = StructureType 1000078002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
-pattern STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = StructureType 1000078001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
-pattern STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = StructureType 1000078000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"
-pattern STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = StructureType 1000075000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR"
-pattern STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = StructureType 1000074002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = StructureType 1000074001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR"
-pattern STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = StructureType 1000074000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR"
-pattern STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = StructureType 1000073003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = StructureType 1000073002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
-pattern STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = StructureType 1000073001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
-pattern STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = StructureType 1000073000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = StructureType 1000067001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT"
-pattern STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = StructureType 1000067000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = StructureType 1000066000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN"
-pattern STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = StructureType 1000062000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"
-pattern STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = StructureType 1000061000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = StructureType 1000060012
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = StructureType 1000060011
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"
-pattern STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = StructureType 1000060010
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"
-pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = StructureType 1000060009
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = StructureType 1000060008
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = StructureType 1000060007
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"
-pattern STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = StructureType 1000058000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"
-pattern STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = StructureType 1000057001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV"
-pattern STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = StructureType 1000057000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV"
-pattern STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = StructureType 1000056001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = StructureType 1000056000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = StructureType 1000050000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP"
-pattern STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = StructureType 1000049000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD"
-pattern STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = StructureType 1000041000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX"
-pattern STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = StructureType 1000030001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX"
-pattern STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = StructureType 1000030000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = StructureType 1000028002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT = StructureType 1000028001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT = StructureType 1000028000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"
-pattern STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = StructureType 1000026002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = StructureType 1000026001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"
-pattern STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = StructureType 1000026000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT"
-pattern STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = StructureType 1000022002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT"
-pattern STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = StructureType 1000022001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT"
-pattern STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = StructureType 1000022000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"
-pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = StructureType 1000018000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = StructureType 1000011000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = StructureType 1000009000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = StructureType 1000008000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = StructureType 1000006000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = StructureType 1000005000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = StructureType 1000004000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"
-pattern STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = StructureType 1000003000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = StructureType 1000002001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = StructureType 1000002000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR"
-pattern STRUCTURE_TYPE_PRESENT_INFO_KHR = StructureType 1000001001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = StructureType 1000001000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"
-pattern STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO = StructureType 1000257004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"
-pattern STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO = StructureType 1000257003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"
-pattern STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO = StructureType 1000257002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"
-pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO = StructureType 1000244001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES = StructureType 1000257000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"
-pattern STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO = StructureType 1000207005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"
-pattern STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO = StructureType 1000207004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"
-pattern STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO = StructureType 1000207003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"
-pattern STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO = StructureType 1000207002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES = StructureType 1000207001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES = StructureType 1000207000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES = StructureType 1000261000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT"
-pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT = StructureType 1000241002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT"
-pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT = StructureType 1000241001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES = StructureType 1000241000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES = StructureType 1000175000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES = StructureType 1000253000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO"
-pattern STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO = StructureType 1000108003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO"
-pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO = StructureType 1000108002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO"
-pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO = StructureType 1000108001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES = StructureType 1000108000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES = StructureType 1000211000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO"
-pattern STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO = StructureType 1000130001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES = StructureType 1000130000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"
-pattern STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO = StructureType 1000246000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES = StructureType 1000221000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"
-pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE = StructureType 1000199001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES = StructureType 1000199000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"
-pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT = StructureType 1000161004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO"
-pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO = StructureType 1000161003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES = StructureType 1000161002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES = StructureType 1000161001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO"
-pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO = StructureType 1000161000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES = StructureType 1000197000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES = StructureType 1000082000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES = StructureType 1000180000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES = StructureType 1000196000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES = StructureType 1000177000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBPASS_END_INFO"
-pattern STRUCTURE_TYPE_SUBPASS_END_INFO = StructureType 1000109006
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"
-pattern STRUCTURE_TYPE_SUBPASS_BEGIN_INFO = StructureType 1000109005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"
-pattern STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 = StructureType 1000109004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"
-pattern STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 = StructureType 1000109003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"
-pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 = StructureType 1000109002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"
-pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 = StructureType 1000109001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"
-pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 = StructureType 1000109000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO"
-pattern STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO = StructureType 1000147000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES = StructureType 52
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES = StructureType 51
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES = StructureType 50
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES = StructureType 49
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = StructureType 1000063000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"
-pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = StructureType 1000168001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = StructureType 1000168000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"
-pattern STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = StructureType 1000076001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = StructureType 1000076000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"
-pattern STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = StructureType 1000077000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO"
-pattern STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = StructureType 1000113000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"
-pattern STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = StructureType 1000112001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = StructureType 1000112000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO"
-pattern STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = StructureType 1000072002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO"
-pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = StructureType 1000072001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO"
-pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = StructureType 1000072000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = StructureType 1000071004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES"
-pattern STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = StructureType 1000071003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = StructureType 1000071002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"
-pattern STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = StructureType 1000071001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = StructureType 1000071000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = StructureType 1000085000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"
-pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = StructureType 1000156005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = StructureType 1000156004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"
-pattern STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = StructureType 1000156003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"
-pattern STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = StructureType 1000156002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"
-pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = StructureType 1000156001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"
-pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = StructureType 1000156000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"
-pattern STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = StructureType 1000145003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = StructureType 1000145002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = StructureType 1000145001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"
-pattern STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = StructureType 1000145000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES = StructureType 1000120000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = StructureType 1000053002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = StructureType 1000053001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"
-pattern STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = StructureType 1000053000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"
-pattern STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = StructureType 1000117003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"
-pattern STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = StructureType 1000117002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"
-pattern STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = StructureType 1000117001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = StructureType 1000117000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = StructureType 1000059008
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"
-pattern STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = StructureType 1000059007
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = StructureType 1000059006
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2"
-pattern STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = StructureType 1000059005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = StructureType 1000059004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2"
-pattern STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = StructureType 1000059003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2"
-pattern STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = StructureType 1000059002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = StructureType 1000059001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = StructureType 1000059000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"
-pattern STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = StructureType 1000146004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2"
-pattern STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = StructureType 1000146003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"
-pattern STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = StructureType 1000146002
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2"
-pattern STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = StructureType 1000146001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2"
-pattern STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = StructureType 1000146000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = StructureType 1000070001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = StructureType 1000070000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO"
-pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = StructureType 1000060014
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO"
-pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = StructureType 1000060013
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = StructureType 1000060006
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = StructureType 1000060005
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = StructureType 1000060004
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = StructureType 1000060003
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"
-pattern STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = StructureType 1000060000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"
-pattern STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = StructureType 1000127001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"
-pattern STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = StructureType 1000127000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = StructureType 1000083000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"
-pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = StructureType 1000157001
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"
-pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = StructureType 1000157000
--- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = StructureType 1000094000
-{-# complete STRUCTURE_TYPE_APPLICATION_INFO,
-             STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
-             STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
-             STRUCTURE_TYPE_DEVICE_CREATE_INFO,
-             STRUCTURE_TYPE_SUBMIT_INFO,
-             STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
-             STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
-             STRUCTURE_TYPE_BIND_SPARSE_INFO,
-             STRUCTURE_TYPE_FENCE_CREATE_INFO,
-             STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
-             STRUCTURE_TYPE_EVENT_CREATE_INFO,
-             STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
-             STRUCTURE_TYPE_BUFFER_CREATE_INFO,
-             STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO,
-             STRUCTURE_TYPE_IMAGE_CREATE_INFO,
-             STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
-             STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
-             STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
-             STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
-             STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
-             STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
-             STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
-             STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
-             STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-             STRUCTURE_TYPE_COPY_DESCRIPTOR_SET,
-             STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
-             STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
-             STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
-             STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
-             STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
-             STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
-             STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
-             STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
-             STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
-             STRUCTURE_TYPE_MEMORY_BARRIER,
-             STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO,
-             STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
-             STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT,
-             STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT,
-             STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM,
-             STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV,
-             STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV,
-             STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV,
-             STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV,
-             STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV,
-             STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV,
-             STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT,
-             STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR,
-             STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR,
-             STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR,
-             STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR,
-             STRUCTURE_TYPE_PIPELINE_INFO_KHR,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR,
-             STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT,
-             STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT,
-             STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT,
-             STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT,
-             STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV,
-             STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV,
-             STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV,
-             STRUCTURE_TYPE_VALIDATION_FEATURES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT,
-             STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV,
-             STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR,
-             STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT,
-             STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT,
-             STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT,
-             STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA,
-             STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD,
-             STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL,
-             STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL,
-             STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL,
-             STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL,
-             STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL,
-             STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL,
-             STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV,
-             STRUCTURE_TYPE_CHECKPOINT_DATA_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV,
-             STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV,
-             STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT,
-             STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT,
-             STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD,
-             STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT,
-             STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT,
-             STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT,
-             STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT,
-             STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT,
-             STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV,
-             STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV,
-             STRUCTURE_TYPE_GEOMETRY_AABB_NV,
-             STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV,
-             STRUCTURE_TYPE_GEOMETRY_NV,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV,
-             STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT,
-             STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT,
-             STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT,
-             STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV,
-             STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR,
-             STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR,
-             STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR,
-             STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR,
-             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR,
-             STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,
-             STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR,
-             STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT,
-             STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT,
-             STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT,
-             STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT,
-             STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID,
-             STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID,
-             STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID,
-             STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID,
-             STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID,
-             STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID,
-             STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT,
-             STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT,
-             STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT,
-             STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT,
-             STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK,
-             STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK,
-             STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR,
-             STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR,
-             STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR,
-             STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR,
-             STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR,
-             STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR,
-             STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR,
-             STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR,
-             STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR,
-             STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR,
-             STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR,
-             STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR,
-             STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR,
-             STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR,
-             STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR,
-             STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR,
-             STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR,
-             STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR,
-             STRUCTURE_TYPE_HDR_METADATA_EXT,
-             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT,
-             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX,
-             STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE,
-             STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT,
-             STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT,
-             STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT,
-             STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT,
-             STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PRESENT_REGIONS_KHR,
-             STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT,
-             STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR,
-             STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR,
-             STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR,
-             STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR,
-             STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR,
-             STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR,
-             STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR,
-             STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR,
-             STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR,
-             STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR,
-             STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR,
-             STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR,
-             STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR,
-             STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR,
-             STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT,
-             STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT,
-             STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN,
-             STRUCTURE_TYPE_VALIDATION_FLAGS_EXT,
-             STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR,
-             STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR,
-             STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR,
-             STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR,
-             STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV,
-             STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV,
-             STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV,
-             STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV,
-             STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV,
-             STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP,
-             STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD,
-             STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX,
-             STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX,
-             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT,
-             STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV,
-             STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV,
-             STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,
-             STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
-             STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT,
-             STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT,
-             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD,
-             STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
-             STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR,
-             STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_PRESENT_INFO_KHR,
-             STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
-             STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO,
-             STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO,
-             STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO,
-             STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES,
-             STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO,
-             STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
-             STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO,
-             STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES,
-             STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT,
-             STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES,
-             STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO,
-             STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO,
-             STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES,
-             STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES,
-             STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES,
-             STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES,
-             STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT,
-             STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
-             STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES,
-             STRUCTURE_TYPE_SUBPASS_END_INFO,
-             STRUCTURE_TYPE_SUBPASS_BEGIN_INFO,
-             STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,
-             STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
-             STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2,
-             STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
-             STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
-             STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
-             STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES,
-             STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO,
-             STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO,
-             STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,
-             STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO,
-             STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO,
-             STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
-             STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES,
-             STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO,
-             STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO,
-             STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,
-             STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
-             STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,
-             STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,
-             STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO,
-             STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO,
-             STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES,
-             STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
-             STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,
-             STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO,
-             STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO,
-             STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2,
-             STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2,
-             STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2,
-             STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2,
-             STRUCTURE_TYPE_FORMAT_PROPERTIES_2,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
-             STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2,
-             STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
-             STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2,
-             STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
-             STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,
-             STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES,
-             STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO,
-             STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO,
-             STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO,
-             STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO,
-             STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO,
-             STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO,
-             STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO,
-             STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,
-             STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,
-             STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
-             STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO,
-             STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES :: StructureType #-}
-
-instance Show StructureType where
-  showsPrec p = \case
-    STRUCTURE_TYPE_APPLICATION_INFO -> showString "STRUCTURE_TYPE_APPLICATION_INFO"
-    STRUCTURE_TYPE_INSTANCE_CREATE_INFO -> showString "STRUCTURE_TYPE_INSTANCE_CREATE_INFO"
-    STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO -> showString "STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"
-    STRUCTURE_TYPE_DEVICE_CREATE_INFO -> showString "STRUCTURE_TYPE_DEVICE_CREATE_INFO"
-    STRUCTURE_TYPE_SUBMIT_INFO -> showString "STRUCTURE_TYPE_SUBMIT_INFO"
-    STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"
-    STRUCTURE_TYPE_MAPPED_MEMORY_RANGE -> showString "STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"
-    STRUCTURE_TYPE_BIND_SPARSE_INFO -> showString "STRUCTURE_TYPE_BIND_SPARSE_INFO"
-    STRUCTURE_TYPE_FENCE_CREATE_INFO -> showString "STRUCTURE_TYPE_FENCE_CREATE_INFO"
-    STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO -> showString "STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"
-    STRUCTURE_TYPE_EVENT_CREATE_INFO -> showString "STRUCTURE_TYPE_EVENT_CREATE_INFO"
-    STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO -> showString "STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"
-    STRUCTURE_TYPE_BUFFER_CREATE_INFO -> showString "STRUCTURE_TYPE_BUFFER_CREATE_INFO"
-    STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO -> showString "STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"
-    STRUCTURE_TYPE_IMAGE_CREATE_INFO -> showString "STRUCTURE_TYPE_IMAGE_CREATE_INFO"
-    STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO -> showString "STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"
-    STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO -> showString "STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"
-    STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO -> showString "STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"
-    STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO -> showString "STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"
-    STRUCTURE_TYPE_SAMPLER_CREATE_INFO -> showString "STRUCTURE_TYPE_SAMPLER_CREATE_INFO"
-    STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"
-    STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"
-    STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"
-    STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET -> showString "STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"
-    STRUCTURE_TYPE_COPY_DESCRIPTOR_SET -> showString "STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"
-    STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO -> showString "STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"
-    STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO -> showString "STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"
-    STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO -> showString "STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"
-    STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"
-    STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"
-    STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"
-    STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO -> showString "STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"
-    STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER -> showString "STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"
-    STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER -> showString "STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"
-    STRUCTURE_TYPE_MEMORY_BARRIER -> showString "STRUCTURE_TYPE_MEMORY_BARRIER"
-    STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO -> showString "STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO"
-    STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO -> showString "STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"
-    STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT"
-    STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT"
-    STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM -> showString "STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM"
-    STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV"
-    STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV -> showString "STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV"
-    STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV -> showString "STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV"
-    STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV"
-    STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV -> showString "STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV"
-    STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV"
-    STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT"
-    STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR -> showString "STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR"
-    STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR -> showString "STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR"
-    STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR -> showString "STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR"
-    STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR"
-    STRUCTURE_TYPE_PIPELINE_INFO_KHR -> showString "STRUCTURE_TYPE_PIPELINE_INFO_KHR"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR"
-    STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR -> showString "STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT"
-    STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT -> showString "STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT"
-    STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT -> showString "STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT"
-    STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT -> showString "STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT"
-    STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV -> showString "STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV"
-    STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV"
-    STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV -> showString "STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV"
-    STRUCTURE_TYPE_VALIDATION_FEATURES_EXT -> showString "STRUCTURE_TYPE_VALIDATION_FEATURES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT"
-    STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV"
-    STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR -> showString "STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR"
-    STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT -> showString "STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT"
-    STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT"
-    STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT"
-    STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA -> showString "STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA"
-    STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD -> showString "STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD"
-    STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD -> showString "STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL -> showString "STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL"
-    STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL -> showString "STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL"
-    STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL -> showString "STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL"
-    STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL -> showString "STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL"
-    STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL -> showString "STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL"
-    STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL -> showString "STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL"
-    STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV -> showString "STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV"
-    STRUCTURE_TYPE_CHECKPOINT_DATA_NV -> showString "STRUCTURE_TYPE_CHECKPOINT_DATA_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV"
-    STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV"
-    STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP -> showString "STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT"
-    STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"
-    STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD -> showString "STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"
-    STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT -> showString "STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT"
-    STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD -> showString "STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"
-    STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT"
-    STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT -> showString "STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT"
-    STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT"
-    STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV"
-    STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV"
-    STRUCTURE_TYPE_GEOMETRY_AABB_NV -> showString "STRUCTURE_TYPE_GEOMETRY_AABB_NV"
-    STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV -> showString "STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV"
-    STRUCTURE_TYPE_GEOMETRY_NV -> showString "STRUCTURE_TYPE_GEOMETRY_NV"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV"
-    STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"
-    STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT"
-    STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"
-    STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT -> showString "STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV"
-    STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR"
-    STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR -> showString "STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR"
-    STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR -> showString "STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR"
-    STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR -> showString "STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR"
-    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR"
-    STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR -> showString "STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR"
-    STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR -> showString "STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR"
-    STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT"
-    STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT -> showString "STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT"
-    STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT -> showString "STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT"
-    STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT -> showString "STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT"
-    STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID -> showString "STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID"
-    STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID -> showString "STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
-    STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID -> showString "STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
-    STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID -> showString "STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID"
-    STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID -> showString "STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID"
-    STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID -> showString "STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID"
-    STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT -> showString "STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"
-    STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT -> showString "STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT"
-    STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT"
-    STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT"
-    STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK -> showString "STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK"
-    STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK -> showString "STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK"
-    STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR -> showString "STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR"
-    STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR -> showString "STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR"
-    STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR -> showString "STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR"
-    STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR -> showString "STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR"
-    STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR -> showString "STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR"
-    STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR -> showString "STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"
-    STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR -> showString "STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"
-    STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR -> showString "STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR"
-    STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR -> showString "STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR"
-    STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR -> showString "STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR"
-    STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR -> showString "STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR"
-    STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR"
-    STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR -> showString "STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR"
-    STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR"
-    STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR"
-    STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR"
-    STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR"
-    STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR -> showString "STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"
-    STRUCTURE_TYPE_HDR_METADATA_EXT -> showString "STRUCTURE_TYPE_HDR_METADATA_EXT"
-    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT"
-    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX"
-    STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE -> showString "STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"
-    STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT -> showString "STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT"
-    STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT -> showString "STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT"
-    STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT -> showString "STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT"
-    STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT -> showString "STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT"
-    STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PRESENT_REGIONS_KHR -> showString "STRUCTURE_TYPE_PRESENT_REGIONS_KHR"
-    STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT -> showString "STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT"
-    STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"
-    STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR -> showString "STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR"
-    STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR"
-    STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR"
-    STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR -> showString "STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR"
-    STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
-    STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
-    STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR -> showString "STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"
-    STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR -> showString "STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR"
-    STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR"
-    STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR"
-    STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR"
-    STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR"
-    STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
-    STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT"
-    STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT -> showString "STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT"
-    STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN -> showString "STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN"
-    STRUCTURE_TYPE_VALIDATION_FLAGS_EXT -> showString "STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"
-    STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR -> showString "STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"
-    STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR -> showString "STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"
-    STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR -> showString "STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"
-    STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR -> showString "STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"
-    STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV -> showString "STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"
-    STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV -> showString "STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"
-    STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV -> showString "STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV"
-    STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV -> showString "STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV"
-    STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV"
-    STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP -> showString "STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP"
-    STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD -> showString "STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD"
-    STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX -> showString "STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX"
-    STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX -> showString "STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX"
-    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT"
-    STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV -> showString "STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"
-    STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"
-    STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"
-    STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT"
-    STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT"
-    STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT"
-    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"
-    STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"
-    STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR -> showString "STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"
-    STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_PRESENT_INFO_KHR -> showString "STRUCTURE_TYPE_PRESENT_INFO_KHR"
-    STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"
-    STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO -> showString "STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"
-    STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"
-    STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO -> showString "STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"
-    STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO -> showString "STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"
-    STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO -> showString "STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"
-    STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO -> showString "STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"
-    STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO -> showString "STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"
-    STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO -> showString "STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"
-    STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT -> showString "STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT"
-    STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT -> showString "STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"
-    STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO -> showString "STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO"
-    STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO -> showString "STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO"
-    STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO -> showString "STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"
-    STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO -> showString "STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"
-    STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO -> showString "STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"
-    STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE -> showString "STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"
-    STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"
-    STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES"
-    STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"
-    STRUCTURE_TYPE_SUBPASS_END_INFO -> showString "STRUCTURE_TYPE_SUBPASS_END_INFO"
-    STRUCTURE_TYPE_SUBPASS_BEGIN_INFO -> showString "STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"
-    STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 -> showString "STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"
-    STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 -> showString "STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"
-    STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 -> showString "STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"
-    STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 -> showString "STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"
-    STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 -> showString "STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"
-    STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO -> showString "STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"
-    STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"
-    STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES -> showString "STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"
-    STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO -> showString "STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"
-    STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO -> showString "STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO"
-    STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES -> showString "STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"
-    STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO"
-    STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO -> showString "STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO"
-    STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO -> showString "STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"
-    STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES -> showString "STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"
-    STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES -> showString "STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"
-    STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"
-    STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES -> showString "STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"
-    STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO -> showString "STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"
-    STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO -> showString "STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"
-    STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO -> showString "STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"
-    STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO -> showString "STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"
-    STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 -> showString "STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"
-    STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO -> showString "STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"
-    STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO -> showString "STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"
-    STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"
-    STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO -> showString "STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"
-    STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO -> showString "STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"
-    STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 -> showString "STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"
-    STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 -> showString "STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2"
-    STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 -> showString "STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2"
-    STRUCTURE_TYPE_FORMAT_PROPERTIES_2 -> showString "STRUCTURE_TYPE_FORMAT_PROPERTIES_2"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2"
-    STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 -> showString "STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"
-    STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 -> showString "STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2"
-    STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 -> showString "STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"
-    STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 -> showString "STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2"
-    STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 -> showString "STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2"
-    STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO -> showString "STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"
-    STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO -> showString "STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO"
-    STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO -> showString "STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO"
-    STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO -> showString "STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"
-    STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO -> showString "STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"
-    STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO -> showString "STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"
-    STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO -> showString "STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"
-    STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO -> showString "STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"
-    STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"
-    STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS -> showString "STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"
-    STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO -> showString "STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"
-    STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO -> showString "STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"
-    STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"
-    StructureType x -> showParen (p >= 11) (showString "StructureType " . showsPrec 11 x)
-
-instance Read StructureType where
-  readPrec = parens (choose [("STRUCTURE_TYPE_APPLICATION_INFO", pure STRUCTURE_TYPE_APPLICATION_INFO)
-                            , ("STRUCTURE_TYPE_INSTANCE_CREATE_INFO", pure STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO", pure STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_DEVICE_CREATE_INFO", pure STRUCTURE_TYPE_DEVICE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_SUBMIT_INFO", pure STRUCTURE_TYPE_SUBMIT_INFO)
-                            , ("STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO", pure STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
-                            , ("STRUCTURE_TYPE_MAPPED_MEMORY_RANGE", pure STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
-                            , ("STRUCTURE_TYPE_BIND_SPARSE_INFO", pure STRUCTURE_TYPE_BIND_SPARSE_INFO)
-                            , ("STRUCTURE_TYPE_FENCE_CREATE_INFO", pure STRUCTURE_TYPE_FENCE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO", pure STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_EVENT_CREATE_INFO", pure STRUCTURE_TYPE_EVENT_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO", pure STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_BUFFER_CREATE_INFO", pure STRUCTURE_TYPE_BUFFER_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO", pure STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_IMAGE_CREATE_INFO", pure STRUCTURE_TYPE_IMAGE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO", pure STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO", pure STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO", pure STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO", pure STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_SAMPLER_CREATE_INFO", pure STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO)
-                            , ("STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET", pure STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
-                            , ("STRUCTURE_TYPE_COPY_DESCRIPTOR_SET", pure STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
-                            , ("STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO", pure STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO", pure STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO", pure STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO", pure STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
-                            , ("STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO", pure STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO)
-                            , ("STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO", pure STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
-                            , ("STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO", pure STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
-                            , ("STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER", pure STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER)
-                            , ("STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER", pure STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER)
-                            , ("STRUCTURE_TYPE_MEMORY_BARRIER", pure STRUCTURE_TYPE_MEMORY_BARRIER)
-                            , ("STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO", pure STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO", pure STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV", pure STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR", pure STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM", pure STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM)
-                            , ("STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM", pure STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV", pure STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV)
-                            , ("STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV", pure STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV)
-                            , ("STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV", pure STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV", pure STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV)
-                            , ("STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV", pure STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV", pure STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR", pure STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR)
-                            , ("STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR", pure STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR)
-                            , ("STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR", pure STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR", pure STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR)
-                            , ("STRUCTURE_TYPE_PIPELINE_INFO_KHR", pure STRUCTURE_TYPE_PIPELINE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR)
-                            , ("STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR", pure STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT", pure STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT)
-                            , ("STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT", pure STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT)
-                            , ("STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT", pure STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV", pure STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV)
-                            , ("STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV)
-                            , ("STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV", pure STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_VALIDATION_FEATURES_EXT", pure STRUCTURE_TYPE_VALIDATION_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT", pure STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR", pure STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR)
-                            , ("STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT", pure STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT", pure STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA", pure STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA)
-                            , ("STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD", pure STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD)
-                            , ("STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD", pure STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL", pure STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL)
-                            , ("STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL", pure STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL)
-                            , ("STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL", pure STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL)
-                            , ("STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL", pure STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL)
-                            , ("STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL", pure STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL)
-                            , ("STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL", pure STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL)
-                            , ("STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV", pure STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV)
-                            , ("STRUCTURE_TYPE_CHECKPOINT_DATA_NV", pure STRUCTURE_TYPE_CHECKPOINT_DATA_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP", pure STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD", pure STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD)
-                            , ("STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT", pure STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD", pure STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT", pure STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT", pure STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT)
-                            , ("STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT", pure STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV)
-                            , ("STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV", pure STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV)
-                            , ("STRUCTURE_TYPE_GEOMETRY_AABB_NV", pure STRUCTURE_TYPE_GEOMETRY_AABB_NV)
-                            , ("STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV", pure STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV)
-                            , ("STRUCTURE_TYPE_GEOMETRY_NV", pure STRUCTURE_TYPE_GEOMETRY_NV)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV", pure STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT", pure STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT", pure STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT", pure STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT)
-                            , ("STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT", pure STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT", pure STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR", pure STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR)
-                            , ("STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR", pure STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR", pure STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)
-                            , ("STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR", pure STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)
-                            , ("STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR", pure STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)
-                            , ("STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR", pure STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR)
-                            , ("STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT", pure STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT", pure STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT)
-                            , ("STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT", pure STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT)
-                            , ("STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT", pure STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID", pure STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID)
-                            , ("STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID", pure STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
-                            , ("STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID", pure STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
-                            , ("STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID", pure STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID)
-                            , ("STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID", pure STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID)
-                            , ("STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID", pure STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID)
-                            , ("STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT", pure STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT)
-                            , ("STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT", pure STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT)
-                            , ("STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT)
-                            , ("STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT)
-                            , ("STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK", pure STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK)
-                            , ("STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK", pure STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK)
-                            , ("STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR", pure STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR)
-                            , ("STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR", pure STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR)
-                            , ("STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR", pure STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR)
-                            , ("STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR", pure STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR)
-                            , ("STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR", pure STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR)
-                            , ("STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR", pure STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR)
-                            , ("STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR", pure STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR)
-                            , ("STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR", pure STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR)
-                            , ("STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR", pure STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR)
-                            , ("STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR", pure STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR)
-                            , ("STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR", pure STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR)
-                            , ("STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR)
-                            , ("STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR", pure STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR)
-                            , ("STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR)
-                            , ("STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR", pure STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR)
-                            , ("STRUCTURE_TYPE_HDR_METADATA_EXT", pure STRUCTURE_TYPE_HDR_METADATA_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX)
-                            , ("STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE", pure STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE)
-                            , ("STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT", pure STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT", pure STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT)
-                            , ("STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT", pure STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT)
-                            , ("STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT", pure STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT)
-                            , ("STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT", pure STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PRESENT_REGIONS_KHR", pure STRUCTURE_TYPE_PRESENT_REGIONS_KHR)
-                            , ("STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT", pure STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT", pure STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR)
-                            , ("STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR", pure STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR)
-                            , ("STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR)
-                            , ("STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR", pure STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR)
-                            , ("STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR", pure STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR", pure STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR)
-                            , ("STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR", pure STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR)
-                            , ("STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR)
-                            , ("STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR", pure STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR)
-                            , ("STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT", pure STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN", pure STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN)
-                            , ("STRUCTURE_TYPE_VALIDATION_FLAGS_EXT", pure STRUCTURE_TYPE_VALIDATION_FLAGS_EXT)
-                            , ("STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR", pure STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR", pure STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR)
-                            , ("STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR", pure STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR", pure STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR)
-                            , ("STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR", pure STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR", pure STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR)
-                            , ("STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV", pure STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV)
-                            , ("STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV", pure STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV)
-                            , ("STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV", pure STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV)
-                            , ("STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV", pure STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV", pure STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV)
-                            , ("STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP", pure STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP)
-                            , ("STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD", pure STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD)
-                            , ("STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX", pure STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX)
-                            , ("STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX", pure STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX)
-                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT)
-                            , ("STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV", pure STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV", pure STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV", pure STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV)
-                            , ("STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT)
-                            , ("STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT)
-                            , ("STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT)
-                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD)
-                            , ("STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT)
-                            , ("STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR", pure STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR)
-                            , ("STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_PRESENT_INFO_KHR", pure STRUCTURE_TYPE_PRESENT_INFO_KHR)
-                            , ("STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR", pure STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
-                            , ("STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO", pure STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO)
-                            , ("STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO", pure STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO)
-                            , ("STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO", pure STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO", pure STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES)
-                            , ("STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO", pure STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO)
-                            , ("STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO", pure STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO)
-                            , ("STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO", pure STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO)
-                            , ("STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO", pure STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES)
-                            , ("STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT", pure STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT)
-                            , ("STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT", pure STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES)
-                            , ("STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO", pure STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO)
-                            , ("STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO", pure STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO)
-                            , ("STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO", pure STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES)
-                            , ("STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO", pure STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES)
-                            , ("STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO", pure STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES)
-                            , ("STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE", pure STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES)
-                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT", pure STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT)
-                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES)
-                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES)
-                            , ("STRUCTURE_TYPE_SUBPASS_END_INFO", pure STRUCTURE_TYPE_SUBPASS_END_INFO)
-                            , ("STRUCTURE_TYPE_SUBPASS_BEGIN_INFO", pure STRUCTURE_TYPE_SUBPASS_BEGIN_INFO)
-                            , ("STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2", pure STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2)
-                            , ("STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2", pure STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2)
-                            , ("STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2", pure STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2)
-                            , ("STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2", pure STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2)
-                            , ("STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2", pure STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2)
-                            , ("STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO", pure STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES)
-                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT", pure STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES)
-                            , ("STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES", pure STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO)
-                            , ("STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO", pure STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO", pure STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES", pure STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO)
-                            , ("STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO", pure STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO)
-                            , ("STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO", pure STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO", pure STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES)
-                            , ("STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES", pure STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO)
-                            , ("STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES", pure STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO)
-                            , ("STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES", pure STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES)
-                            , ("STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO", pure STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO)
-                            , ("STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO", pure STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO)
-                            , ("STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO", pure STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO)
-                            , ("STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO", pure STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2", pure STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES)
-                            , ("STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO", pure STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES)
-                            , ("STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO", pure STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO", pure STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO", pure STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2)
-                            , ("STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2", pure STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2)
-                            , ("STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2", pure STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2)
-                            , ("STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2", pure STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2)
-                            , ("STRUCTURE_TYPE_FORMAT_PROPERTIES_2", pure STRUCTURE_TYPE_FORMAT_PROPERTIES_2)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2)
-                            , ("STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2", pure STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2)
-                            , ("STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2", pure STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2)
-                            , ("STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2", pure STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2)
-                            , ("STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2", pure STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2)
-                            , ("STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2", pure STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2)
-                            , ("STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO", pure STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES)
-                            , ("STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO", pure STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO)
-                            , ("STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO", pure STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO)
-                            , ("STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO", pure STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO)
-                            , ("STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO", pure STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO)
-                            , ("STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO", pure STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO)
-                            , ("STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO", pure STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO)
-                            , ("STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO", pure STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO)
-                            , ("STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO", pure STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO)
-                            , ("STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS", pure STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES)
-                            , ("STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO", pure STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO)
-                            , ("STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO", pure STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO)
-                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "StructureType")
-                       v <- step readPrec
-                       pure (StructureType v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SubpassContents.hs b/src/Graphics/Vulkan/Core10/Enums/SubpassContents.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SubpassContents.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SubpassContents  (SubpassContents( SUBPASS_CONTENTS_INLINE
-                                                                     , SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
-                                                                     , ..
-                                                                     )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkSubpassContents - Specify how commands in the first subpass of a
--- render pass are provided
---
--- = See Also
---
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassBeginInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdNextSubpass'
-newtype SubpassContents = SubpassContents Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | '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 SUBPASS_CONTENTS_INLINE = SubpassContents 0
--- | '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
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdExecuteCommands' is the
--- only valid command on the command buffer until
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdNextSubpass' or
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdEndRenderPass'.
-pattern SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = SubpassContents 1
-{-# complete SUBPASS_CONTENTS_INLINE,
-             SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS :: SubpassContents #-}
-
-instance Show SubpassContents where
-  showsPrec p = \case
-    SUBPASS_CONTENTS_INLINE -> showString "SUBPASS_CONTENTS_INLINE"
-    SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS -> showString "SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS"
-    SubpassContents x -> showParen (p >= 11) (showString "SubpassContents " . showsPrec 11 x)
-
-instance Read SubpassContents where
-  readPrec = parens (choose [("SUBPASS_CONTENTS_INLINE", pure SUBPASS_CONTENTS_INLINE)
-                            , ("SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS", pure SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SubpassContents")
-                       v <- step readPrec
-                       pure (SubpassContents v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SubpassContents.hs-boot b/src/Graphics/Vulkan/Core10/Enums/SubpassContents.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SubpassContents.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SubpassContents  (SubpassContents) where
-
-
-
-data SubpassContents
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SubpassDescriptionFlagBits.hs b/src/Graphics/Vulkan/Core10/Enums/SubpassDescriptionFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SubpassDescriptionFlagBits.hs
+++ /dev/null
@@ -1,87 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits  ( SubpassDescriptionFlagBits( SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM
-                                                                                            , SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM
-                                                                                            , SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX
-                                                                                            , SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX
-                                                                                            , ..
-                                                                                            )
-                                                                , SubpassDescriptionFlags
-                                                                ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkSubpassDescriptionFlagBits - Bitmask specifying usage of a subpass
---
--- = Description
---
--- Note
---
--- Shader resolve operations allow for custom resolve operations, but
--- overdrawing pixels /may/ have a performance and\/or power cost.
--- Furthermore, since the contents of any depth stencil attachment or color
--- attachment is undefined at the begining of a shader resolve subpass, any
--- depth testing, stencil testing, or blending which sources these
--- undefined values are also undefined.
---
--- = See Also
---
--- 'SubpassDescriptionFlags'
-newtype SubpassDescriptionFlagBits = SubpassDescriptionFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM' specifies that the subpass
--- performs shader resolve operations.
-pattern SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM = SubpassDescriptionFlagBits 0x00000008
--- | 'SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM' specifies that the
--- framebuffer region is the fragment region, that is, the minimum region
--- dependencies are by pixel rather than by sample, such that any fragment
--- shader invocation /can/ access any sample associated with that fragment
--- shader invocation.
-pattern SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM = SubpassDescriptionFlagBits 0x00000004
--- | 'SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX' specifies that
--- shaders compiled for this subpass use per-view positions which only
--- differ in value in the x component. Per-view viewport mask /can/ also be
--- used.
-pattern SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = SubpassDescriptionFlagBits 0x00000002
--- | 'SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX' specifies that shaders
--- compiled for this subpass write the attributes for all views in a single
--- invocation of each vertex processing stage. All pipelines compiled
--- against a subpass that includes this bit /must/ write per-view
--- attributes to the @*PerViewNV[]@ shader outputs, in addition to the
--- non-per-view (e.g. @Position@) outputs.
-pattern SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = SubpassDescriptionFlagBits 0x00000001
-
-type SubpassDescriptionFlags = SubpassDescriptionFlagBits
-
-instance Show SubpassDescriptionFlagBits where
-  showsPrec p = \case
-    SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM -> showString "SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM"
-    SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM -> showString "SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM"
-    SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX -> showString "SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"
-    SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX -> showString "SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX"
-    SubpassDescriptionFlagBits x -> showParen (p >= 11) (showString "SubpassDescriptionFlagBits 0x" . showHex x)
-
-instance Read SubpassDescriptionFlagBits where
-  readPrec = parens (choose [("SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM", pure SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM)
-                            , ("SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM", pure SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM)
-                            , ("SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX", pure SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX)
-                            , ("SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX", pure SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SubpassDescriptionFlagBits")
-                       v <- step readPrec
-                       pure (SubpassDescriptionFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/SystemAllocationScope.hs b/src/Graphics/Vulkan/Core10/Enums/SystemAllocationScope.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/SystemAllocationScope.hs
+++ /dev/null
@@ -1,134 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.SystemAllocationScope  (SystemAllocationScope( SYSTEM_ALLOCATION_SCOPE_COMMAND
-                                                                                 , SYSTEM_ALLOCATION_SCOPE_OBJECT
-                                                                                 , SYSTEM_ALLOCATION_SCOPE_CACHE
-                                                                                 , SYSTEM_ALLOCATION_SCOPE_DEVICE
-                                                                                 , SYSTEM_ALLOCATION_SCOPE_INSTANCE
-                                                                                 , ..
-                                                                                 )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkSystemAllocationScope - Allocation scope
---
--- = Description
---
--- -   'SYSTEM_ALLOCATION_SCOPE_COMMAND' specifies that the allocation is
---     scoped to the duration of the Vulkan command.
---
--- -   'SYSTEM_ALLOCATION_SCOPE_OBJECT' specifies that the allocation is
---     scoped to the lifetime of the Vulkan object that is being created or
---     used.
---
--- -   'SYSTEM_ALLOCATION_SCOPE_CACHE' specifies that the allocation is
---     scoped to the lifetime of a
---     'Graphics.Vulkan.Core10.Handles.PipelineCache' or
---     'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT' object.
---
--- -   'SYSTEM_ALLOCATION_SCOPE_DEVICE' specifies that the allocation is
---     scoped to the lifetime of the Vulkan device.
---
--- -   '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 'SYSTEM_ALLOCATION_SCOPE_OBJECT' or
--- '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 '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
---     'Graphics.Vulkan.Core10.Handles.Device' has an allocator it will be
---     used, else if the parent 'Graphics.Vulkan.Core10.Handles.Instance'
---     has an allocator it will be used. Else,
---
--- -   If an allocation is associated with a
---     'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT' or
---     'Graphics.Vulkan.Core10.Handles.PipelineCache' object, the allocator
---     will use the '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 'Graphics.Vulkan.Core10.Handles.Device' or
---     'Graphics.Vulkan.Core10.Handles.Instance', the allocator will use an
---     allocation scope of '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
---     '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 'SYSTEM_ALLOCATION_SCOPE_INSTANCE'.
---
--- -   Otherwise an implementation will allocate memory through an
---     alternative mechanism that is unspecified.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
-newtype SystemAllocationScope = SystemAllocationScope Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND"
-pattern SYSTEM_ALLOCATION_SCOPE_COMMAND = SystemAllocationScope 0
--- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT"
-pattern SYSTEM_ALLOCATION_SCOPE_OBJECT = SystemAllocationScope 1
--- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_CACHE"
-pattern SYSTEM_ALLOCATION_SCOPE_CACHE = SystemAllocationScope 2
--- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE"
-pattern SYSTEM_ALLOCATION_SCOPE_DEVICE = SystemAllocationScope 3
--- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE"
-pattern SYSTEM_ALLOCATION_SCOPE_INSTANCE = SystemAllocationScope 4
-{-# complete SYSTEM_ALLOCATION_SCOPE_COMMAND,
-             SYSTEM_ALLOCATION_SCOPE_OBJECT,
-             SYSTEM_ALLOCATION_SCOPE_CACHE,
-             SYSTEM_ALLOCATION_SCOPE_DEVICE,
-             SYSTEM_ALLOCATION_SCOPE_INSTANCE :: SystemAllocationScope #-}
-
-instance Show SystemAllocationScope where
-  showsPrec p = \case
-    SYSTEM_ALLOCATION_SCOPE_COMMAND -> showString "SYSTEM_ALLOCATION_SCOPE_COMMAND"
-    SYSTEM_ALLOCATION_SCOPE_OBJECT -> showString "SYSTEM_ALLOCATION_SCOPE_OBJECT"
-    SYSTEM_ALLOCATION_SCOPE_CACHE -> showString "SYSTEM_ALLOCATION_SCOPE_CACHE"
-    SYSTEM_ALLOCATION_SCOPE_DEVICE -> showString "SYSTEM_ALLOCATION_SCOPE_DEVICE"
-    SYSTEM_ALLOCATION_SCOPE_INSTANCE -> showString "SYSTEM_ALLOCATION_SCOPE_INSTANCE"
-    SystemAllocationScope x -> showParen (p >= 11) (showString "SystemAllocationScope " . showsPrec 11 x)
-
-instance Read SystemAllocationScope where
-  readPrec = parens (choose [("SYSTEM_ALLOCATION_SCOPE_COMMAND", pure SYSTEM_ALLOCATION_SCOPE_COMMAND)
-                            , ("SYSTEM_ALLOCATION_SCOPE_OBJECT", pure SYSTEM_ALLOCATION_SCOPE_OBJECT)
-                            , ("SYSTEM_ALLOCATION_SCOPE_CACHE", pure SYSTEM_ALLOCATION_SCOPE_CACHE)
-                            , ("SYSTEM_ALLOCATION_SCOPE_DEVICE", pure SYSTEM_ALLOCATION_SCOPE_DEVICE)
-                            , ("SYSTEM_ALLOCATION_SCOPE_INSTANCE", pure SYSTEM_ALLOCATION_SCOPE_INSTANCE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SystemAllocationScope")
-                       v <- step readPrec
-                       pure (SystemAllocationScope v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/VendorId.hs b/src/Graphics/Vulkan/Core10/Enums/VendorId.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/VendorId.hs
+++ /dev/null
@@ -1,76 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.VendorId  (VendorId( VENDOR_ID_VIV
-                                                       , VENDOR_ID_VSI
-                                                       , VENDOR_ID_KAZAN
-                                                       , VENDOR_ID_CODEPLAY
-                                                       , ..
-                                                       )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkVendorId - Khronos vendor IDs
---
--- = Description
---
--- Note
---
--- Khronos vendor IDs may be allocated by vendors at any time. Only the
--- latest canonical versions of this Specification, of the corresponding
--- @vk.xml@ API Registry, and of the corresponding @vulkan_core.h@ header
--- file /must/ contain all reserved Khronos vendor IDs.
---
--- Only Khronos vendor IDs are given symbolic names at present. PCI vendor
--- IDs returned by the implementation can be looked up in the PCI-SIG
--- database.
---
--- = See Also
---
--- No cross-references are available
-newtype VendorId = VendorId Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
--- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
-
--- No documentation found for Nested "VkVendorId" "VK_VENDOR_ID_VIV"
-pattern VENDOR_ID_VIV = VendorId 65537
--- No documentation found for Nested "VkVendorId" "VK_VENDOR_ID_VSI"
-pattern VENDOR_ID_VSI = VendorId 65538
--- No documentation found for Nested "VkVendorId" "VK_VENDOR_ID_KAZAN"
-pattern VENDOR_ID_KAZAN = VendorId 65539
--- No documentation found for Nested "VkVendorId" "VK_VENDOR_ID_CODEPLAY"
-pattern VENDOR_ID_CODEPLAY = VendorId 65540
-{-# complete VENDOR_ID_VIV,
-             VENDOR_ID_VSI,
-             VENDOR_ID_KAZAN,
-             VENDOR_ID_CODEPLAY :: VendorId #-}
-
-instance Show VendorId where
-  showsPrec p = \case
-    VENDOR_ID_VIV -> showString "VENDOR_ID_VIV"
-    VENDOR_ID_VSI -> showString "VENDOR_ID_VSI"
-    VENDOR_ID_KAZAN -> showString "VENDOR_ID_KAZAN"
-    VENDOR_ID_CODEPLAY -> showString "VENDOR_ID_CODEPLAY"
-    VendorId x -> showParen (p >= 11) (showString "VendorId " . showsPrec 11 x)
-
-instance Read VendorId where
-  readPrec = parens (choose [("VENDOR_ID_VIV", pure VENDOR_ID_VIV)
-                            , ("VENDOR_ID_VSI", pure VENDOR_ID_VSI)
-                            , ("VENDOR_ID_KAZAN", pure VENDOR_ID_KAZAN)
-                            , ("VENDOR_ID_CODEPLAY", pure VENDOR_ID_CODEPLAY)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "VendorId")
-                       v <- step readPrec
-                       pure (VendorId v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Enums/VertexInputRate.hs b/src/Graphics/Vulkan/Core10/Enums/VertexInputRate.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Enums/VertexInputRate.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Enums.VertexInputRate  (VertexInputRate( VERTEX_INPUT_RATE_VERTEX
-                                                                     , VERTEX_INPUT_RATE_INSTANCE
-                                                                     , ..
-                                                                     )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkVertexInputRate - Specify rate at which vertex attributes are pulled
--- from buffers
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.VertexInputBindingDescription'
-newtype VertexInputRate = VertexInputRate Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'VERTEX_INPUT_RATE_VERTEX' specifies that vertex attribute addressing is
--- a function of the vertex index.
-pattern VERTEX_INPUT_RATE_VERTEX = VertexInputRate 0
--- | 'VERTEX_INPUT_RATE_INSTANCE' specifies that vertex attribute addressing
--- is a function of the instance index.
-pattern VERTEX_INPUT_RATE_INSTANCE = VertexInputRate 1
-{-# complete VERTEX_INPUT_RATE_VERTEX,
-             VERTEX_INPUT_RATE_INSTANCE :: VertexInputRate #-}
-
-instance Show VertexInputRate where
-  showsPrec p = \case
-    VERTEX_INPUT_RATE_VERTEX -> showString "VERTEX_INPUT_RATE_VERTEX"
-    VERTEX_INPUT_RATE_INSTANCE -> showString "VERTEX_INPUT_RATE_INSTANCE"
-    VertexInputRate x -> showParen (p >= 11) (showString "VertexInputRate " . showsPrec 11 x)
-
-instance Read VertexInputRate where
-  readPrec = parens (choose [("VERTEX_INPUT_RATE_VERTEX", pure VERTEX_INPUT_RATE_VERTEX)
-                            , ("VERTEX_INPUT_RATE_INSTANCE", pure VERTEX_INPUT_RATE_INSTANCE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "VertexInputRate")
-                       v <- step readPrec
-                       pure (VertexInputRate v)))
-
diff --git a/src/Graphics/Vulkan/Core10/Event.hs b/src/Graphics/Vulkan/Core10/Event.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Event.hs
+++ /dev/null
@@ -1,458 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Event  ( createEvent
-                                     , withEvent
-                                     , destroyEvent
-                                     , getEventStatus
-                                     , setEvent
-                                     , resetEvent
-                                     , EventCreateInfo(..)
-                                     ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateEvent))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyEvent))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetEventStatus))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkResetEvent))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkSetEvent))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core10.Handles (Event)
-import Graphics.Vulkan.Core10.Handles (Event(..))
-import Graphics.Vulkan.Core10.Enums.EventCreateFlags (EventCreateFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EVENT_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateEvent
-  :: FunPtr (Ptr Device_T -> Ptr EventCreateInfo -> Ptr AllocationCallbacks -> Ptr Event -> IO Result) -> Ptr Device_T -> Ptr EventCreateInfo -> Ptr AllocationCallbacks -> Ptr Event -> IO Result
-
--- | vkCreateEvent - Create a new event object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the event.
---
--- -   @pCreateInfo@ is a pointer to a 'EventCreateInfo' structure
---     containing information about how the event is to be created.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pEvent@ is a pointer to a handle in which the resulting event
---     object is returned.
---
--- = Description
---
--- When created, the event object is in the unsignaled state.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid 'EventCreateInfo'
---     structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pEvent@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Event' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Event', 'EventCreateInfo'
-createEvent :: forall io . MonadIO io => Device -> EventCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Event)
-createEvent device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateEvent' = mkVkCreateEvent (pVkCreateEvent (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPEvent <- ContT $ bracket (callocBytes @Event 8) free
-  r <- lift $ vkCreateEvent' (deviceHandle (device)) pCreateInfo pAllocator (pPEvent)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pEvent <- lift $ peek @Event pPEvent
-  pure $ (pEvent)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createEvent' and 'destroyEvent'
---
--- To ensure that 'destroyEvent' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withEvent :: forall io r . MonadIO io => (io (Event) -> ((Event) -> io ()) -> r) -> Device -> EventCreateInfo -> Maybe AllocationCallbacks -> r
-withEvent b device pCreateInfo pAllocator =
-  b (createEvent device pCreateInfo pAllocator)
-    (\(o0) -> destroyEvent device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyEvent
-  :: FunPtr (Ptr Device_T -> Event -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Event -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyEvent - Destroy an event object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @event@ /must/ have completed
---     execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @event@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @event@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @event@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @event@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Event'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Event'
-destroyEvent :: forall io . MonadIO io => Device -> Event -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyEvent device event allocator = liftIO . evalContT $ do
-  let vkDestroyEvent' = mkVkDestroyEvent (pVkDestroyEvent (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyEvent' (deviceHandle (device)) (event) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetEventStatus
-  :: FunPtr (Ptr Device_T -> Event -> IO Result) -> Ptr Device_T -> Event -> IO Result
-
--- | vkGetEventStatus - Retrieve the status of an event object
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the event.
---
--- -   @event@ is the handle of the event to query.
---
--- = Description
---
--- Upon success, 'getEventStatus' returns the state of the event object
--- with the following return codes:
---
--- +---------------------------------------------------+-----------------------------------+
--- | Status                                            | Meaning                           |
--- +===================================================+===================================+
--- | 'Graphics.Vulkan.Core10.Enums.Result.EVENT_SET'   | The event specified by @event@ is |
--- |                                                   | signaled.                         |
--- +---------------------------------------------------+-----------------------------------+
--- | 'Graphics.Vulkan.Core10.Enums.Result.EVENT_RESET' | The event specified by @event@ is |
--- |                                                   | unsignaled.                       |
--- +---------------------------------------------------+-----------------------------------+
---
--- Event Object Status Codes
---
--- If a 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetEvent' or
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResetEvent' command is
--- in a command buffer that is in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 'getEventStatus'
--- will return the new state. If an event is already in the requested
--- state, then updating it to the same state has no effect.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.EVENT_SET'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.EVENT_RESET'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Event'
-getEventStatus :: forall io . MonadIO io => Device -> Event -> io (Result)
-getEventStatus device event = liftIO $ do
-  let vkGetEventStatus' = mkVkGetEventStatus (pVkGetEventStatus (deviceCmds (device :: Device)))
-  r <- vkGetEventStatus' (deviceHandle (device)) (event)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkSetEvent
-  :: FunPtr (Ptr Device_T -> Event -> IO Result) -> Ptr Device_T -> Event -> IO Result
-
--- | vkSetEvent - Set an event to signaled state
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the event.
---
--- -   @event@ is the event to set.
---
--- = Description
---
--- When 'setEvent' 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 'setEvent' is executed,
--- then 'setEvent' has no effect, and no event signal operation occurs.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @event@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Event'
---     handle
---
--- -   @event@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- == Host Synchronization
---
--- -   Host access to @event@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Event'
-setEvent :: forall io . MonadIO io => Device -> Event -> io ()
-setEvent device event = liftIO $ do
-  let vkSetEvent' = mkVkSetEvent (pVkSetEvent (deviceCmds (device :: Device)))
-  r <- vkSetEvent' (deviceHandle (device)) (event)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkResetEvent
-  :: FunPtr (Ptr Device_T -> Event -> IO Result) -> Ptr Device_T -> Event -> IO Result
-
--- | vkResetEvent - Reset an event to non-signaled state
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the event.
---
--- -   @event@ is the event to reset.
---
--- = Description
---
--- When 'resetEvent' 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 'resetEvent' is
--- executed, then 'resetEvent' has no effect, and no event unsignal
--- operation occurs.
---
--- == Valid Usage
---
--- -   @event@ /must/ not be waited on by a
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents' command
---     that is currently executing
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @event@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Event'
---     handle
---
--- -   @event@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- == Host Synchronization
---
--- -   Host access to @event@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Event'
-resetEvent :: forall io . MonadIO io => Device -> Event -> io ()
-resetEvent device event = liftIO $ do
-  let vkResetEvent' = mkVkResetEvent (pVkResetEvent (deviceCmds (device :: Device)))
-  r <- vkResetEvent' (deviceHandle (device)) (event)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkEventCreateInfo - Structure specifying parameters of a newly created
--- event
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.EventCreateFlags.EventCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createEvent'
-data EventCreateInfo = EventCreateInfo
-  { -- | @flags@ /must/ be @0@
-    flags :: EventCreateFlags }
-  deriving (Typeable)
-deriving instance Show EventCreateInfo
-
-instance ToCStruct EventCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p EventCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EVENT_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr EventCreateFlags)) (flags)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EVENT_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct EventCreateInfo where
-  peekCStruct p = do
-    flags <- peek @EventCreateFlags ((p `plusPtr` 16 :: Ptr EventCreateFlags))
-    pure $ EventCreateInfo
-             flags
-
-instance Storable EventCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero EventCreateInfo where
-  zero = EventCreateInfo
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/Event.hs-boot b/src/Graphics/Vulkan/Core10/Event.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Event.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Event  (EventCreateInfo) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data EventCreateInfo
-
-instance ToCStruct EventCreateInfo
-instance Show EventCreateInfo
-
-instance FromCStruct EventCreateInfo
-
diff --git a/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs b/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs
+++ /dev/null
@@ -1,296 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.ExtensionDiscovery  ( enumerateInstanceExtensionProperties
-                                                  , enumerateDeviceExtensionProperties
-                                                  , ExtensionProperties(..)
-                                                  ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (castFunPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.ByteString (packCString)
-import Data.ByteString (useAsCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Foreign.C.Types (CChar(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Ptr (Ptr(Ptr))
-import Data.Word (Word32)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Dynamic (getInstanceProcAddr')
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkEnumerateDeviceExtensionProperties))
-import Graphics.Vulkan.Core10.APIConstants (MAX_EXTENSION_NAME_SIZE)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkEnumerateInstanceExtensionProperties
-  :: FunPtr (Ptr CChar -> Ptr Word32 -> Ptr ExtensionProperties -> IO Result) -> Ptr CChar -> Ptr Word32 -> Ptr ExtensionProperties -> IO Result
-
--- | vkEnumerateInstanceExtensionProperties - Returns up to requested number
--- of global extension properties
---
--- = 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
---     'ExtensionProperties' structures.
---
--- = 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,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS', to indicate
--- that not all the available properties were returned.
---
--- Because the list of available layers may change externally between calls
--- to 'enumerateInstanceExtensionProperties', 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.
---
--- Implementations /must/ not advertise any pair of extensions that cannot
--- be enabled together due to behavioral differences, or any extension that
--- cannot be enabled against the advertised version.
---
--- == 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@ 'ExtensionProperties' structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_LAYER_NOT_PRESENT'
---
--- = See Also
---
--- 'ExtensionProperties'
-enumerateInstanceExtensionProperties :: forall io . MonadIO io => ("layerName" ::: Maybe ByteString) -> io (Result, ("properties" ::: Vector ExtensionProperties))
-enumerateInstanceExtensionProperties layerName = liftIO . evalContT $ do
-  vkEnumerateInstanceExtensionProperties' <- lift $ mkVkEnumerateInstanceExtensionProperties . castFunPtr @_ @(("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr ExtensionProperties) -> IO Result) <$> getInstanceProcAddr' nullPtr (Ptr "vkEnumerateInstanceExtensionProperties"#)
-  pLayerName <- case (layerName) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ useAsCString (j)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkEnumerateInstanceExtensionProperties' pLayerName (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @ExtensionProperties ((fromIntegral (pPropertyCount)) * 260)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 260) :: Ptr ExtensionProperties) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkEnumerateInstanceExtensionProperties' pLayerName (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @ExtensionProperties (((pPProperties) `advancePtrBytes` (260 * (i)) :: Ptr ExtensionProperties)))
-  pure $ ((r'), pProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkEnumerateDeviceExtensionProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr CChar -> Ptr Word32 -> Ptr ExtensionProperties -> IO Result) -> Ptr PhysicalDevice_T -> Ptr CChar -> Ptr Word32 -> Ptr ExtensionProperties -> IO Result
-
--- | vkEnumerateDeviceExtensionProperties - Returns properties of available
--- physical device extensions
---
--- = 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
---     'enumerateInstanceExtensionProperties'::@pPropertyCount@ parameter.
---
--- -   @pProperties@ is either @NULL@ or a pointer to an array of
---     'ExtensionProperties' structures.
---
--- = 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.
---
--- Implementations /must/ not advertise any pair of extensions that cannot
--- be enabled together due to behavioral differences, or any extension that
--- cannot be enabled against the advertised version.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' 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@ 'ExtensionProperties' structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_LAYER_NOT_PRESENT'
---
--- = See Also
---
--- 'ExtensionProperties', 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-enumerateDeviceExtensionProperties :: forall io . MonadIO io => PhysicalDevice -> ("layerName" ::: Maybe ByteString) -> io (Result, ("properties" ::: Vector ExtensionProperties))
-enumerateDeviceExtensionProperties physicalDevice layerName = liftIO . evalContT $ do
-  let vkEnumerateDeviceExtensionProperties' = mkVkEnumerateDeviceExtensionProperties (pVkEnumerateDeviceExtensionProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pLayerName <- case (layerName) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ useAsCString (j)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkEnumerateDeviceExtensionProperties' physicalDevice' pLayerName (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @ExtensionProperties ((fromIntegral (pPropertyCount)) * 260)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 260) :: Ptr ExtensionProperties) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkEnumerateDeviceExtensionProperties' physicalDevice' pLayerName (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @ExtensionProperties (((pPProperties) `advancePtrBytes` (260 * (i)) :: Ptr ExtensionProperties)))
-  pure $ ((r'), pProperties')
-
-
--- | VkExtensionProperties - Structure specifying an extension properties
---
--- = See Also
---
--- 'enumerateDeviceExtensionProperties',
--- 'enumerateInstanceExtensionProperties'
-data ExtensionProperties = ExtensionProperties
-  { -- | @extensionName@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_EXTENSION_NAME_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which is the name of the
-    -- extension.
-    extensionName :: ByteString
-  , -- | @specVersion@ is the version of this extension. It is an integer,
-    -- incremented with backward compatible changes.
-    specVersion :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show ExtensionProperties
-
-instance ToCStruct ExtensionProperties where
-  withCStruct x f = allocaBytesAligned 260 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExtensionProperties{..} f = do
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (extensionName)
-    poke ((p `plusPtr` 256 :: Ptr Word32)) (specVersion)
-    f
-  cStructSize = 260
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (mempty)
-    poke ((p `plusPtr` 256 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct ExtensionProperties where
-  peekCStruct p = do
-    extensionName <- packCString (lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))))
-    specVersion <- peek @Word32 ((p `plusPtr` 256 :: Ptr Word32))
-    pure $ ExtensionProperties
-             extensionName specVersion
-
-instance Storable ExtensionProperties where
-  sizeOf ~_ = 260
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExtensionProperties where
-  zero = ExtensionProperties
-           mempty
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs-boot b/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.ExtensionDiscovery  (ExtensionProperties) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExtensionProperties
-
-instance ToCStruct ExtensionProperties
-instance Show ExtensionProperties
-
-instance FromCStruct ExtensionProperties
-
diff --git a/src/Graphics/Vulkan/Core10/Fence.hs b/src/Graphics/Vulkan/Core10/Fence.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Fence.hs
+++ /dev/null
@@ -1,564 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Fence  ( createFence
-                                     , withFence
-                                     , destroyFence
-                                     , resetFences
-                                     , getFenceStatus
-                                     , waitForFences
-                                     , FenceCreateInfo(..)
-                                     ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32(..))
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateFence))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyFence))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetFenceStatus))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkResetFences))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkWaitForFences))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence (ExportFenceCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32 (ExportFenceWin32HandleInfoKHR)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.Handles (Fence)
-import Graphics.Vulkan.Core10.Handles (Fence(..))
-import Graphics.Vulkan.Core10.Enums.FenceCreateFlagBits (FenceCreateFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FENCE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateFence
-  :: FunPtr (Ptr Device_T -> Ptr (FenceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result) -> Ptr Device_T -> Ptr (FenceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result
-
--- | vkCreateFence - Create a new fence object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the fence.
---
--- -   @pCreateInfo@ is a pointer to a 'FenceCreateInfo' structure
---     containing information about how the fence is to be created.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pFence@ is a pointer to a handle in which the resulting fence
---     object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid 'FenceCreateInfo'
---     structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pFence@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Fence' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Fence', 'FenceCreateInfo'
-createFence :: forall a io . (PokeChain a, MonadIO io) => Device -> FenceCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Fence)
-createFence device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateFence' = mkVkCreateFence (pVkCreateFence (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPFence <- ContT $ bracket (callocBytes @Fence 8) free
-  r <- lift $ vkCreateFence' (deviceHandle (device)) pCreateInfo pAllocator (pPFence)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pFence <- lift $ peek @Fence pPFence
-  pure $ (pFence)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createFence' and 'destroyFence'
---
--- To ensure that 'destroyFence' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withFence :: forall a io r . (PokeChain a, MonadIO io) => (io (Fence) -> ((Fence) -> io ()) -> r) -> Device -> FenceCreateInfo a -> Maybe AllocationCallbacks -> r
-withFence b device pCreateInfo pAllocator =
-  b (createFence device pCreateInfo pAllocator)
-    (\(o0) -> destroyFence device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyFence
-  :: FunPtr (Ptr Device_T -> Fence -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Fence -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyFence - Destroy a fence object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-submission queue submission>
---     commands that refer to @fence@ /must/ have completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @fence@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @fence@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @fence@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Fence'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Fence'
-destroyFence :: forall io . MonadIO io => Device -> Fence -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyFence device fence allocator = liftIO . evalContT $ do
-  let vkDestroyFence' = mkVkDestroyFence (pVkDestroyFence (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyFence' (deviceHandle (device)) (fence) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkResetFences
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr Fence -> IO Result) -> Ptr Device_T -> Word32 -> Ptr Fence -> IO Result
-
--- | vkResetFences - Resets one or more fence objects
---
--- = 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
---
--- If any member of @pFences@ currently has its
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing payload imported>
--- with temporary permanence, that fence’s prior permanent payload is first
--- restored. The remaining operations described therefore operate on the
--- restored payload.
---
--- When 'resetFences' 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
--- 'resetFences' is executed, then 'resetFences' 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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pFences@ /must/ be a valid pointer to an array of @fenceCount@
---     valid 'Graphics.Vulkan.Core10.Handles.Fence' 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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Fence'
-resetFences :: forall io . MonadIO io => Device -> ("fences" ::: Vector Fence) -> io ()
-resetFences device fences = liftIO . evalContT $ do
-  let vkResetFences' = mkVkResetFences (pVkResetFences (deviceCmds (device :: Device)))
-  pPFences <- ContT $ allocaBytesAligned @Fence ((Data.Vector.length (fences)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPFences `plusPtr` (8 * (i)) :: Ptr Fence) (e)) (fences)
-  r <- lift $ vkResetFences' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (fences)) :: Word32)) (pPFences)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetFenceStatus
-  :: FunPtr (Ptr Device_T -> Fence -> IO Result) -> Ptr Device_T -> Fence -> IO Result
-
--- | vkGetFenceStatus - Return the status of a fence
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the fence.
---
--- -   @fence@ is the handle of the fence to query.
---
--- = Description
---
--- Upon success, 'getFenceStatus' returns the status of the fence object,
--- with the following return codes:
---
--- +---------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
--- | Status                                                  | Meaning                                                                                                                |
--- +=========================================================+========================================================================================================================+
--- | 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'           | The fence specified by @fence@ is signaled.                                                                            |
--- +---------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
--- | 'Graphics.Vulkan.Core10.Enums.Result.NOT_READY'         | The fence specified by @fence@ is unsignaled.                                                                          |
--- +---------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
--- | 'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST' | The device has been lost. See                                                                                          |
--- |                                                         | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>. |
--- +---------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
---
--- Fence Object Status Codes
---
--- If a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>),
--- 'getFenceStatus' /may/ return any of the above status codes. If the
--- device has been lost and 'getFenceStatus' is called repeatedly, it will
--- eventually return either 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
--- or 'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.NOT_READY'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Fence'
-getFenceStatus :: forall io . MonadIO io => Device -> Fence -> io (Result)
-getFenceStatus device fence = liftIO $ do
-  let vkGetFenceStatus' = mkVkGetFenceStatus (pVkGetFenceStatus (deviceCmds (device :: Device)))
-  r <- vkGetFenceStatus' (deviceHandle (device)) (fence)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkWaitForFences
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr Fence -> Bool32 -> Word64 -> IO Result) -> Ptr Device_T -> Word32 -> Ptr Fence -> Bool32 -> Word64 -> IO Result
-
--- | vkWaitForFences - Wait for one or more fences to become signaled
---
--- = 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
---     'Graphics.Vulkan.Core10.BaseType.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
---
--- If the condition is satisfied when 'waitForFences' is called, then
--- 'waitForFences' returns immediately. If the condition is not satisfied
--- at the time 'waitForFences' is called, then 'waitForFences' will block
--- and wait up to @timeout@ nanoseconds for the condition to become
--- satisfied.
---
--- If @timeout@ is zero, then 'waitForFences' does not wait, but simply
--- returns the current state of the fences.
--- 'Graphics.Vulkan.Core10.Enums.Result.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, 'waitForFences' returns
--- 'Graphics.Vulkan.Core10.Enums.Result.TIMEOUT'. If the condition is
--- satisfied before @timeout@ nanoseconds has expired, 'waitForFences'
--- returns 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'.
---
--- If device loss occurs (see
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>)
--- before the timeout has expired, 'waitForFences' /must/ return in finite
--- time with either 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' or
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'.
---
--- Note
---
--- While we guarantee that 'waitForFences' /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 'waitForFences' will not result in a
--- permanently (or seemingly permanently) dead process.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pFences@ /must/ be a valid pointer to an array of @fenceCount@
---     valid 'Graphics.Vulkan.Core10.Handles.Fence' handles
---
--- -   @fenceCount@ /must/ be greater than @0@
---
--- -   Each element of @pFences@ /must/ have been created, allocated, or
---     retrieved from @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.TIMEOUT'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Fence'
-waitForFences :: forall io . MonadIO io => Device -> ("fences" ::: Vector Fence) -> ("waitAll" ::: Bool) -> ("timeout" ::: Word64) -> io (Result)
-waitForFences device fences waitAll timeout = liftIO . evalContT $ do
-  let vkWaitForFences' = mkVkWaitForFences (pVkWaitForFences (deviceCmds (device :: Device)))
-  pPFences <- ContT $ allocaBytesAligned @Fence ((Data.Vector.length (fences)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPFences `plusPtr` (8 * (i)) :: Ptr Fence) (e)) (fences)
-  r <- lift $ vkWaitForFences' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (fences)) :: Word32)) (pPFences) (boolToBool32 (waitAll)) (timeout)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
--- | VkFenceCreateInfo - Structure specifying parameters of a newly created
--- fence
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FENCE_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'
---     or
---     'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.ExportFenceWin32HandleInfoKHR'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.FenceCreateFlagBits.FenceCreateFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.FenceCreateFlagBits.FenceCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createFence'
-data FenceCreateInfo (es :: [Type]) = FenceCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.FenceCreateFlagBits.FenceCreateFlagBits'
-    -- specifying the initial state and behavior of the fence.
-    flags :: FenceCreateFlags
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (FenceCreateInfo es)
-
-instance Extensible FenceCreateInfo where
-  extensibleType = STRUCTURE_TYPE_FENCE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext FenceCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends FenceCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @ExportFenceWin32HandleInfoKHR = Just f
-    | Just Refl <- eqT @e @ExportFenceCreateInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (FenceCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p FenceCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr FenceCreateFlags)) (flags)
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ f
-
-instance PeekChain es => FromCStruct (FenceCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @FenceCreateFlags ((p `plusPtr` 16 :: Ptr FenceCreateFlags))
-    pure $ FenceCreateInfo
-             next flags
-
-instance es ~ '[] => Zero (FenceCreateInfo es) where
-  zero = FenceCreateInfo
-           ()
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/Fence.hs-boot b/src/Graphics/Vulkan/Core10/Fence.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Fence.hs-boot
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Fence  (FenceCreateInfo) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role FenceCreateInfo nominal
-data FenceCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (FenceCreateInfo es)
-instance Show (Chain es) => Show (FenceCreateInfo es)
-
-instance PeekChain es => FromCStruct (FenceCreateInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/FuncPointers.hs b/src/Graphics/Vulkan/Core10/FuncPointers.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/FuncPointers.hs
+++ /dev/null
@@ -1,235 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.FuncPointers  ( PFN_vkInternalAllocationNotification
-                                            , FN_vkInternalAllocationNotification
-                                            , PFN_vkInternalFreeNotification
-                                            , FN_vkInternalFreeNotification
-                                            , PFN_vkReallocationFunction
-                                            , FN_vkReallocationFunction
-                                            , PFN_vkAllocationFunction
-                                            , FN_vkAllocationFunction
-                                            , PFN_vkFreeFunction
-                                            , FN_vkFreeFunction
-                                            , PFN_vkVoidFunction
-                                            , FN_vkVoidFunction
-                                            ) where
-
-import Foreign.C.Types (CSize)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Enums.InternalAllocationType (InternalAllocationType)
-import Graphics.Vulkan.Core10.Enums.SystemAllocationScope (SystemAllocationScope)
-type FN_vkInternalAllocationNotification = ("pUserData" ::: Ptr ()) -> CSize -> InternalAllocationType -> SystemAllocationScope -> IO ()
--- | PFN_vkInternalAllocationNotification - Application-defined memory
--- allocation notification function
---
--- = Parameters
---
--- -   @pUserData@ is the value specified for
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'::@pUserData@
---     in the allocator specified by the application.
---
--- -   @size@ is the requested size of an allocation.
---
--- -   @allocationType@ is a
---     'Graphics.Vulkan.Core10.Enums.InternalAllocationType.InternalAllocationType'
---     value specifying the requested type of an allocation.
---
--- -   @allocationScope@ is a
---     'Graphics.Vulkan.Core10.Enums.SystemAllocationScope.SystemAllocationScope'
---     value specifying the allocation scope of the lifetime of the
---     allocation, as described
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-host-allocation-scope here>.
---
--- = Description
---
--- This is a purely informational callback.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
-type PFN_vkInternalAllocationNotification = FunPtr FN_vkInternalAllocationNotification
-
-
-type FN_vkInternalFreeNotification = ("pUserData" ::: Ptr ()) -> CSize -> InternalAllocationType -> SystemAllocationScope -> IO ()
--- | PFN_vkInternalFreeNotification - Application-defined memory free
--- notification function
---
--- = Parameters
---
--- -   @pUserData@ is the value specified for
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'::@pUserData@
---     in the allocator specified by the application.
---
--- -   @size@ is the requested size of an allocation.
---
--- -   @allocationType@ is a
---     'Graphics.Vulkan.Core10.Enums.InternalAllocationType.InternalAllocationType'
---     value specifying the requested type of an allocation.
---
--- -   @allocationScope@ is a
---     'Graphics.Vulkan.Core10.Enums.SystemAllocationScope.SystemAllocationScope'
---     value specifying the allocation scope of the lifetime of the
---     allocation, as described
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-host-allocation-scope here>.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
-type PFN_vkInternalFreeNotification = FunPtr FN_vkInternalFreeNotification
-
-
-type FN_vkReallocationFunction = ("pUserData" ::: Ptr ()) -> ("pOriginal" ::: Ptr ()) -> CSize -> ("alignment" ::: CSize) -> SystemAllocationScope -> IO (Ptr ())
--- | PFN_vkReallocationFunction - Application-defined memory reallocation
--- function
---
--- = Parameters
---
--- -   @pUserData@ is the value specified for
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'::@pUserData@
---     in the allocator specified by the application.
---
--- -   @pOriginal@ /must/ be either @NULL@ or a pointer previously returned
---     by @pfnReallocation@ or @pfnAllocation@ of a compatible 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
---     'Graphics.Vulkan.Core10.Enums.SystemAllocationScope.SystemAllocationScope'
---     value specifying the allocation scope of the lifetime of the
---     allocation, as described
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-host-allocation-scope here>.
---
--- = 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
--- <vkAllocationFunction_return_rules.html rules for return values as >.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
-type PFN_vkReallocationFunction = FunPtr FN_vkReallocationFunction
-
-
-type FN_vkAllocationFunction = ("pUserData" ::: Ptr ()) -> CSize -> ("alignment" ::: CSize) -> SystemAllocationScope -> IO (Ptr ())
--- | PFN_vkAllocationFunction - Application-defined memory allocation
--- function
---
--- = Parameters
---
--- -   @pUserData@ is the value specified for
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'::@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
---     'Graphics.Vulkan.Core10.Enums.SystemAllocationScope.SystemAllocationScope'
---     value specifying the allocation scope of the lifetime of the
---     allocation, as described
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-host-allocation-scope here>.
---
--- = 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
--- 'Graphics.Vulkan.Core10.Handles.Instance' objects are going to operate
--- correctly (even
--- 'Graphics.Vulkan.Core10.DeviceInitialization.destroyInstance'), 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 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--- at the appropriate time for the command in which the condition was
--- detected, as described in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' as a
--- result of this failed allocation.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
-type PFN_vkAllocationFunction = FunPtr FN_vkAllocationFunction
-
-
-type FN_vkFreeFunction = ("pUserData" ::: Ptr ()) -> ("pMemory" ::: Ptr ()) -> IO ()
--- | PFN_vkFreeFunction - Application-defined memory free function
---
--- = Parameters
---
--- -   @pUserData@ is the value specified for
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'::@pUserData@
---     in the allocator specified by the application.
---
--- -   @pMemory@ is the allocation to be freed.
---
--- = Description
---
--- @pMemory@ /may/ be @NULL@, which the callback /must/ handle safely. If
--- @pMemory@ is non-@NULL@, it /must/ be a pointer previously allocated by
--- @pfnAllocation@ or @pfnReallocation@. The application /should/ free this
--- memory.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
-type PFN_vkFreeFunction = FunPtr FN_vkFreeFunction
-
-
-type FN_vkVoidFunction = () -> IO ()
--- | PFN_vkVoidFunction - Dummy function pointer type returned by queries
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getDeviceProcAddr',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getInstanceProcAddr'
-type PFN_vkVoidFunction = FunPtr FN_vkVoidFunction
-
diff --git a/src/Graphics/Vulkan/Core10/FuncPointers.hs-boot b/src/Graphics/Vulkan/Core10/FuncPointers.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/FuncPointers.hs-boot
+++ /dev/null
@@ -1,16 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.FuncPointers  ( PFN_vkVoidFunction
-                                            , FN_vkVoidFunction
-                                            ) where
-
-import Foreign.Ptr (FunPtr)
-
-type FN_vkVoidFunction = () -> IO ()
--- | PFN_vkVoidFunction - Dummy function pointer type returned by queries
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getDeviceProcAddr',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getInstanceProcAddr'
-type PFN_vkVoidFunction = FunPtr FN_vkVoidFunction
-
diff --git a/src/Graphics/Vulkan/Core10/Handles.hs b/src/Graphics/Vulkan/Core10/Handles.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Handles.hs
+++ /dev/null
@@ -1,1005 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Handles  ( Instance(..)
-                                       , Instance_T
-                                       , PhysicalDevice(..)
-                                       , PhysicalDevice_T
-                                       , Device(..)
-                                       , Device_T
-                                       , Queue(..)
-                                       , Queue_T
-                                       , CommandBuffer(..)
-                                       , CommandBuffer_T
-                                       , DeviceMemory(..)
-                                       , CommandPool(..)
-                                       , Buffer(..)
-                                       , BufferView(..)
-                                       , Image(..)
-                                       , ImageView(..)
-                                       , ShaderModule(..)
-                                       , Pipeline(..)
-                                       , PipelineLayout(..)
-                                       , Sampler(..)
-                                       , DescriptorSet(..)
-                                       , DescriptorSetLayout(..)
-                                       , DescriptorPool(..)
-                                       , Fence(..)
-                                       , Semaphore(..)
-                                       , Event(..)
-                                       , QueryPool(..)
-                                       , Framebuffer(..)
-                                       , RenderPass(..)
-                                       , PipelineCache(..)
-                                       ) where
-
-import GHC.Show (showParen)
-import Numeric (showHex)
-import Foreign.Storable (Storable)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word64)
-import Graphics.Vulkan.Dynamic (DeviceCmds)
-import Graphics.Vulkan.Dynamic (InstanceCmds)
-import Graphics.Vulkan.Core10.APIConstants (IsHandle)
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
--- | An opaque type for representing pointers to VkInstance handles
-data Instance_T
--- | VkInstance - Opaque handle to an instance object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.createAndroidSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.createDebugReportCallbackEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.createDebugUtilsMessengerEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.createDisplayPlaneSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_headless_surface.createHeadlessSurfaceEXT',
--- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.createIOSSurfaceMVK',
--- 'Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface.createImagePipeSurfaceFUCHSIA',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.createInstance',
--- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.createMacOSSurfaceMVK',
--- 'Graphics.Vulkan.Extensions.VK_EXT_metal_surface.createMetalSurfaceEXT',
--- 'Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface.createStreamDescriptorSurfaceGGP',
--- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.createViSurfaceNN',
--- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.createWaylandSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.createWin32SurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.createXcbSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.createXlibSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.debugReportMessageEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.destroyDebugReportCallbackEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.destroyDebugUtilsMessengerEXT',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.destroyInstance',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.destroySurfaceKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.enumeratePhysicalDeviceGroups',
--- 'Graphics.Vulkan.Extensions.VK_KHR_device_group_creation.enumeratePhysicalDeviceGroupsKHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.enumeratePhysicalDevices',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getInstanceProcAddr',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.submitDebugUtilsMessageEXT'
-data Instance = Instance
-  { instanceHandle :: Ptr Instance_T
-  , instanceCmds :: InstanceCmds
-  }
-  deriving stock (Eq, Show)
-  deriving anyclass (IsHandle)
-instance Zero Instance where
-  zero = Instance zero zero
-
-
--- | An opaque type for representing pointers to VkPhysicalDevice handles
-data PhysicalDevice_T
--- | VkPhysicalDevice - Opaque handle to a physical device object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.acquireXlibDisplayEXT',
--- 'Graphics.Vulkan.Core10.Device.createDevice',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.createDisplayModeKHR',
--- 'Graphics.Vulkan.Core10.ExtensionDiscovery.enumerateDeviceExtensionProperties',
--- 'Graphics.Vulkan.Core10.LayerDiscovery.enumerateDeviceLayerProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.enumeratePhysicalDevices',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.getDisplayModeProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getDisplayModePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.getDisplayPlaneCapabilities2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getDisplayPlaneCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getDisplayPlaneSupportedDisplaysKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps.getPhysicalDeviceCalibrateableTimeDomainsEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix.getPhysicalDeviceCooperativeMatrixPropertiesNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.getPhysicalDeviceDisplayPlaneProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPlanePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.getPhysicalDeviceDisplayProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPropertiesKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferPropertiesKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.getPhysicalDeviceExternalFenceProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities.getPhysicalDeviceExternalFencePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.getPhysicalDeviceExternalSemaphoreProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.getPhysicalDeviceExternalSemaphorePropertiesKHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFeatures',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2KHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2KHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2KHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceMemoryProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceMemoryProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.getPhysicalDevicePresentRectanglesKHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2KHR',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceSparseImageFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceSparseImageFormatProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.getPhysicalDeviceSurfaceCapabilities2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceFormats2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceFormatsKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.getPhysicalDeviceSurfacePresentModes2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_tooling_info.getPhysicalDeviceToolPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.getPhysicalDeviceWaylandPresentationSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.getPhysicalDeviceWin32PresentationSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.getPhysicalDeviceXcbPresentationSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.getPhysicalDeviceXlibPresentationSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.getRandROutputDisplayEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display.releaseDisplayEXT'
-data PhysicalDevice = PhysicalDevice
-  { physicalDeviceHandle :: Ptr PhysicalDevice_T
-  , instanceCmds :: InstanceCmds
-  }
-  deriving stock (Eq, Show)
-  deriving anyclass (IsHandle)
-instance Zero PhysicalDevice where
-  zero = PhysicalDevice zero zero
-
-
--- | An opaque type for representing pointers to VkDevice handles
-data Device_T
--- | VkDevice - Opaque handle to a device object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.acquireFullScreenExclusiveModeEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.acquireNextImage2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.acquirePerformanceConfigurationINTEL',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.acquireProfilingLockKHR',
--- 'Graphics.Vulkan.Core10.CommandBuffer.allocateCommandBuffers',
--- 'Graphics.Vulkan.Core10.DescriptorSet.allocateDescriptorSets',
--- 'Graphics.Vulkan.Core10.Memory.allocateMemory',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.bindAccelerationStructureMemoryKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.bindAccelerationStructureMemoryNV',
--- 'Graphics.Vulkan.Core10.MemoryManagement.bindBufferMemory',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.bindBufferMemory2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.bindBufferMemory2KHR',
--- 'Graphics.Vulkan.Core10.MemoryManagement.bindImageMemory',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.bindImageMemory2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.bindImageMemory2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.buildAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.compileDeferredNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.copyAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.copyAccelerationStructureToMemoryKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.copyMemoryToAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.createAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.createAccelerationStructureNV',
--- 'Graphics.Vulkan.Core10.Buffer.createBuffer',
--- 'Graphics.Vulkan.Core10.BufferView.createBufferView',
--- 'Graphics.Vulkan.Core10.CommandPool.createCommandPool',
--- 'Graphics.Vulkan.Core10.Pipeline.createComputePipelines',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.createDeferredOperationKHR',
--- 'Graphics.Vulkan.Core10.DescriptorSet.createDescriptorPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.createDescriptorSetLayout',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.createDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR',
--- 'Graphics.Vulkan.Core10.Device.createDevice',
--- 'Graphics.Vulkan.Core10.Event.createEvent',
--- 'Graphics.Vulkan.Core10.Fence.createFence',
--- 'Graphics.Vulkan.Core10.Pass.createFramebuffer',
--- 'Graphics.Vulkan.Core10.Pipeline.createGraphicsPipelines',
--- 'Graphics.Vulkan.Core10.Image.createImage',
--- 'Graphics.Vulkan.Core10.ImageView.createImageView',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.createIndirectCommandsLayoutNV',
--- 'Graphics.Vulkan.Core10.PipelineCache.createPipelineCache',
--- 'Graphics.Vulkan.Core10.PipelineLayout.createPipelineLayout',
--- 'Graphics.Vulkan.Core10.Query.createQueryPool',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV',
--- 'Graphics.Vulkan.Core10.Pass.createRenderPass',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.createRenderPass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR',
--- 'Graphics.Vulkan.Core10.Sampler.createSampler',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversionKHR',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.createSemaphore',
--- 'Graphics.Vulkan.Core10.Shader.createShaderModule',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.createSharedSwapchainsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.createValidationCacheEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.debugMarkerSetObjectNameEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.debugMarkerSetObjectTagEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.deferredOperationJoinKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.destroyAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.destroyAccelerationStructureNV',
--- 'Graphics.Vulkan.Core10.Buffer.destroyBuffer',
--- 'Graphics.Vulkan.Core10.BufferView.destroyBufferView',
--- 'Graphics.Vulkan.Core10.CommandPool.destroyCommandPool',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.destroyDeferredOperationKHR',
--- 'Graphics.Vulkan.Core10.DescriptorSet.destroyDescriptorPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.destroyDescriptorSetLayout',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplateKHR',
--- 'Graphics.Vulkan.Core10.Device.destroyDevice',
--- 'Graphics.Vulkan.Core10.Event.destroyEvent',
--- 'Graphics.Vulkan.Core10.Fence.destroyFence',
--- 'Graphics.Vulkan.Core10.Pass.destroyFramebuffer',
--- 'Graphics.Vulkan.Core10.Image.destroyImage',
--- 'Graphics.Vulkan.Core10.ImageView.destroyImageView',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.destroyIndirectCommandsLayoutNV',
--- 'Graphics.Vulkan.Core10.Pipeline.destroyPipeline',
--- 'Graphics.Vulkan.Core10.PipelineCache.destroyPipelineCache',
--- 'Graphics.Vulkan.Core10.PipelineLayout.destroyPipelineLayout',
--- 'Graphics.Vulkan.Core10.Query.destroyQueryPool',
--- 'Graphics.Vulkan.Core10.Pass.destroyRenderPass',
--- 'Graphics.Vulkan.Core10.Sampler.destroySampler',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversionKHR',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.destroySemaphore',
--- 'Graphics.Vulkan.Core10.Shader.destroyShaderModule',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.destroySwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.destroyValidationCacheEXT',
--- 'Graphics.Vulkan.Core10.Queue.deviceWaitIdle',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.displayPowerControlEXT',
--- 'Graphics.Vulkan.Core10.Memory.flushMappedMemoryRanges',
--- 'Graphics.Vulkan.Core10.CommandBuffer.freeCommandBuffers',
--- 'Graphics.Vulkan.Core10.DescriptorSet.freeDescriptorSets',
--- 'Graphics.Vulkan.Core10.Memory.freeMemory',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.getAccelerationStructureDeviceAddressKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.getAccelerationStructureMemoryRequirementsKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureMemoryRequirementsNV',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress',
--- 'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.getBufferDeviceAddressEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.getBufferDeviceAddressKHR',
--- 'Graphics.Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2KHR',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferOpaqueCaptureAddress',
--- 'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.getBufferOpaqueCaptureAddressKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps.getCalibratedTimestampsEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.getDeferredOperationMaxConcurrencyKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.getDeferredOperationResultKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.getDescriptorSetLayoutSupport',
--- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance3.getDescriptorSetLayoutSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.getDeviceAccelerationStructureCompatibilityKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.getDeviceGroupPeerMemoryFeatures',
--- 'Graphics.Vulkan.Extensions.VK_KHR_device_group.getDeviceGroupPeerMemoryFeaturesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.getDeviceGroupPresentCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.getDeviceGroupSurfacePresentModes2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.getDeviceGroupSurfacePresentModesKHR',
--- 'Graphics.Vulkan.Core10.Memory.getDeviceMemoryCommitment',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getDeviceMemoryOpaqueCaptureAddress',
--- 'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.getDeviceMemoryOpaqueCaptureAddressKHR',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getDeviceProcAddr',
--- 'Graphics.Vulkan.Core10.Queue.getDeviceQueue',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.getDeviceQueue2',
--- 'Graphics.Vulkan.Core10.Event.getEventStatus',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.getFenceFdKHR',
--- 'Graphics.Vulkan.Core10.Fence.getFenceStatus',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.getFenceWin32HandleKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.getGeneratedCommandsMemoryRequirementsNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.getImageDrmFormatModifierPropertiesEXT',
--- 'Graphics.Vulkan.Core10.MemoryManagement.getImageMemoryRequirements',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageMemoryRequirements2KHR',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.getImageSparseMemoryRequirements',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageSparseMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageSparseMemoryRequirements2KHR',
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.getImageViewAddressNVX',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.getImageViewHandleNVX',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getMemoryAndroidHardwareBufferANDROID',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.getMemoryHostPointerPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandleKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.getMemoryWin32HandleNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandlePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.getPastPresentationTimingGOOGLE',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.getPerformanceParameterINTEL',
--- 'Graphics.Vulkan.Core10.PipelineCache.getPipelineCacheData',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutableInternalRepresentationsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutablePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutableStatisticsKHR',
--- 'Graphics.Vulkan.Core10.Query.getQueryPoolResults',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.getRayTracingCaptureReplayShaderGroupHandlesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.getRayTracingShaderGroupHandlesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.getRayTracingShaderGroupHandlesNV',
--- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.getRefreshCycleDurationGOOGLE',
--- 'Graphics.Vulkan.Core10.Pass.getRenderAreaGranularity',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.getSemaphoreCounterValue',
--- 'Graphics.Vulkan.Extensions.VK_KHR_timeline_semaphore.getSemaphoreCounterValueKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.getSemaphoreFdKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.getSemaphoreWin32HandleKHR',
--- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.getShaderInfoAMD',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.getSwapchainCounterEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.getSwapchainImagesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.getSwapchainStatusKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.getValidationCacheDataEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.importFenceFdKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.importFenceWin32HandleKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.importSemaphoreFdKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.importSemaphoreWin32HandleKHR',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.initializePerformanceApiINTEL',
--- 'Graphics.Vulkan.Core10.Memory.invalidateMappedMemoryRanges',
--- 'Graphics.Vulkan.Core10.Memory.mapMemory',
--- 'Graphics.Vulkan.Core10.PipelineCache.mergePipelineCaches',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.mergeValidationCachesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.registerDeviceEventEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.registerDisplayEventEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.releaseFullScreenExclusiveModeEXT',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.releasePerformanceConfigurationINTEL',
--- 'Graphics.Vulkan.Extensions.VK_KHR_performance_query.releaseProfilingLockKHR',
--- 'Graphics.Vulkan.Core10.CommandPool.resetCommandPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.resetDescriptorPool',
--- 'Graphics.Vulkan.Core10.Event.resetEvent',
--- 'Graphics.Vulkan.Core10.Fence.resetFences',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool',
--- 'Graphics.Vulkan.Extensions.VK_EXT_host_query_reset.resetQueryPoolEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.setDebugUtilsObjectNameEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.setDebugUtilsObjectTagEXT',
--- 'Graphics.Vulkan.Core10.Event.setEvent',
--- 'Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata.setHdrMetadataEXT',
--- 'Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr.setLocalDimmingAMD',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.signalSemaphore',
--- 'Graphics.Vulkan.Extensions.VK_KHR_timeline_semaphore.signalSemaphoreKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance1.trimCommandPool',
--- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance1.trimCommandPoolKHR',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.uninitializePerformanceApiINTEL',
--- 'Graphics.Vulkan.Core10.Memory.unmapMemory',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplateKHR',
--- 'Graphics.Vulkan.Core10.DescriptorSet.updateDescriptorSets',
--- 'Graphics.Vulkan.Core10.Fence.waitForFences',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.waitSemaphores',
--- 'Graphics.Vulkan.Extensions.VK_KHR_timeline_semaphore.waitSemaphoresKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.writeAccelerationStructuresPropertiesKHR'
-data Device = Device
-  { deviceHandle :: Ptr Device_T
-  , deviceCmds :: DeviceCmds
-  }
-  deriving stock (Eq, Show)
-  deriving anyclass (IsHandle)
-instance Zero Device where
-  zero = Device zero zero
-
-
--- | An opaque type for representing pointers to VkQueue handles
-data Queue_T
--- | VkQueue - Opaque handle to a queue object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Queue.getDeviceQueue',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.getDeviceQueue2',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.getQueueCheckpointDataNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.queueBeginDebugUtilsLabelEXT',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.queueBindSparse',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.queueEndDebugUtilsLabelEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.queueInsertDebugUtilsLabelEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.queueSetPerformanceConfigurationINTEL',
--- 'Graphics.Vulkan.Core10.Queue.queueSubmit',
--- 'Graphics.Vulkan.Core10.Queue.queueWaitIdle'
-data Queue = Queue
-  { queueHandle :: Ptr Queue_T
-  , deviceCmds :: DeviceCmds
-  }
-  deriving stock (Eq, Show)
-  deriving anyclass (IsHandle)
-instance Zero Queue where
-  zero = Queue zero zero
-
-
--- | An opaque type for representing pointers to VkCommandBuffer handles
-data CommandBuffer_T
--- | VkCommandBuffer - Opaque handle to a command buffer object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Queue.SubmitInfo',
--- 'Graphics.Vulkan.Core10.CommandBuffer.allocateCommandBuffers',
--- 'Graphics.Vulkan.Core10.CommandBuffer.beginCommandBuffer',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.cmdBeginConditionalRenderingEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.cmdBeginDebugUtilsLabelEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdBeginRenderPass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.cmdBeginRenderPass2KHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.cmdBindPipelineShaderGroupNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureIndirectKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearAttachments',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearDepthStencilImage',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdCopyAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdCopyAccelerationStructureNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdCopyAccelerationStructureToMemoryKHR',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdCopyMemoryToAccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerBeginEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerEndEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerInsertEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDispatch',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.cmdDispatchBase',
--- 'Graphics.Vulkan.Extensions.VK_KHR_device_group.cmdDispatchBaseKHR',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDraw',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount',
--- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndexedIndirectCountAMD',
--- 'Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCountKHR',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdDrawIndirectByteCountEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount',
--- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndirectCountAMD',
--- 'Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndirectCountKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.cmdEndConditionalRenderingEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.cmdEndDebugUtilsLabelEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdEndQuery',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndQueryIndexedEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdEndRenderPass',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdEndRenderPass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.cmdEndRenderPass2KHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdExecuteCommands',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.cmdExecuteGeneratedCommandsNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdFillBuffer',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.cmdInsertDebugUtilsLabelEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdNextSubpass',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdNextSubpass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.cmdNextSubpass2KHR',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdPipelineBarrier',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdPushConstants',
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetWithTemplateKHR',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResetEvent',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResolveImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetBlendConstants',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.cmdSetCheckpointNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetCoarseSampleOrderNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBias',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBounds',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.cmdSetDeviceMask',
--- 'Graphics.Vulkan.Extensions.VK_KHR_device_group.cmdSetDeviceMaskKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetEvent',
--- 'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.cmdSetLineStippleEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.cmdSetPerformanceMarkerINTEL',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.cmdSetPerformanceOverrideINTEL',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.cmdSetPerformanceStreamMarkerINTEL',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetScissor',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetStencilCompareMask',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetStencilReference',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetStencilWriteMask',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetViewport',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysIndirectKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdUpdateBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdWriteAccelerationStructuresPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdWriteAccelerationStructuresPropertiesNV',
--- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.cmdWriteBufferMarkerAMD',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp',
--- 'Graphics.Vulkan.Core10.CommandBuffer.endCommandBuffer',
--- 'Graphics.Vulkan.Core10.CommandBuffer.freeCommandBuffers',
--- 'Graphics.Vulkan.Core10.CommandBuffer.resetCommandBuffer'
-data CommandBuffer = CommandBuffer
-  { commandBufferHandle :: Ptr CommandBuffer_T
-  , deviceCmds :: DeviceCmds
-  }
-  deriving stock (Eq, Show)
-  deriving anyclass (IsHandle)
-instance Zero CommandBuffer where
-  zero = CommandBuffer zero zero
-
-
--- | VkDeviceMemory - Opaque handle to a device memory object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.BindAccelerationStructureMemoryInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.DeviceMemoryOpaqueCaptureAddressInfo',
--- 'Graphics.Vulkan.Core10.Memory.MappedMemoryRange',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.MemoryGetAndroidHardwareBufferInfoANDROID',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryGetFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryGetWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseMemoryBind',
--- 'Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoNV',
--- 'Graphics.Vulkan.Core10.Memory.allocateMemory',
--- 'Graphics.Vulkan.Core10.MemoryManagement.bindBufferMemory',
--- 'Graphics.Vulkan.Core10.MemoryManagement.bindImageMemory',
--- 'Graphics.Vulkan.Core10.Memory.freeMemory',
--- 'Graphics.Vulkan.Core10.Memory.getDeviceMemoryCommitment',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.getMemoryWin32HandleNV',
--- 'Graphics.Vulkan.Core10.Memory.mapMemory',
--- 'Graphics.Vulkan.Core10.Memory.unmapMemory'
-newtype DeviceMemory = DeviceMemory Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show DeviceMemory where
-  showsPrec p (DeviceMemory x) = showParen (p >= 11) (showString "DeviceMemory 0x" . showHex x)
-
-
--- | VkCommandPool - Opaque handle to a command pool object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferAllocateInfo',
--- 'Graphics.Vulkan.Core10.CommandPool.createCommandPool',
--- 'Graphics.Vulkan.Core10.CommandPool.destroyCommandPool',
--- 'Graphics.Vulkan.Core10.CommandBuffer.freeCommandBuffers',
--- 'Graphics.Vulkan.Core10.CommandPool.resetCommandPool',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance1.trimCommandPool',
--- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance1.trimCommandPoolKHR'
-newtype CommandPool = CommandPool Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show CommandPool where
-  showsPrec p (CommandPool x) = showParen (p >= 11) (showString "CommandPool 0x" . showHex x)
-
-
--- | VkBuffer - Opaque handle to a buffer object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferDeviceAddressInfo',
--- 'Graphics.Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.BufferMemoryRequirementsInfo2',
--- 'Graphics.Vulkan.Core10.BufferView.BufferViewCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV',
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsStreamNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseBufferMemoryBindInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.StridedBufferRegionKHR',
--- 'Graphics.Vulkan.Core10.MemoryManagement.bindBufferMemory',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureIndirectKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount',
--- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndexedIndirectCountAMD',
--- 'Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCountKHR',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdDrawIndirectByteCountEXT',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount',
--- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndirectCountAMD',
--- 'Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndirectCountKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdFillBuffer',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysIndirectKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdUpdateBuffer',
--- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.cmdWriteBufferMarkerAMD',
--- 'Graphics.Vulkan.Core10.Buffer.createBuffer',
--- 'Graphics.Vulkan.Core10.Buffer.destroyBuffer',
--- 'Graphics.Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements'
-newtype Buffer = Buffer Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show Buffer where
-  showsPrec p (Buffer x) = showParen (p >= 11) (showString "Buffer 0x" . showHex x)
-
-
--- | VkBufferView - Opaque handle to a buffer view object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet',
--- 'Graphics.Vulkan.Core10.BufferView.createBufferView',
--- 'Graphics.Vulkan.Core10.BufferView.destroyBufferView'
-newtype BufferView = BufferView Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show BufferView where
-  showsPrec p (BufferView x) = showParen (p >= 11) (showString "BufferView 0x" . showHex x)
-
-
--- | VkImage - Opaque handle to an image object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV',
--- 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageSparseMemoryRequirementsInfo2',
--- 'Graphics.Vulkan.Core10.ImageView.ImageViewCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBindInfo',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageOpaqueMemoryBindInfo',
--- 'Graphics.Vulkan.Core10.MemoryManagement.bindImageMemory',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBlitImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearDepthStencilImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResolveImage',
--- 'Graphics.Vulkan.Core10.Image.createImage',
--- 'Graphics.Vulkan.Core10.Image.destroyImage',
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.getImageDrmFormatModifierPropertiesEXT',
--- 'Graphics.Vulkan.Core10.MemoryManagement.getImageMemoryRequirements',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.getImageSparseMemoryRequirements',
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.getSwapchainImagesKHR'
-newtype Image = Image Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show Image where
-  showsPrec p (Image x) = showParen (p >= 11) (showString "Image 0x" . showHex x)
-
-
--- | VkImageView - Opaque handle to an image view object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
--- 'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewHandleInfoNVX',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
--- 'Graphics.Vulkan.Core10.ImageView.createImageView',
--- 'Graphics.Vulkan.Core10.ImageView.destroyImageView',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.getImageViewAddressNVX'
-newtype ImageView = ImageView Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show ImageView where
-  showsPrec p (ImageView x) = showParen (p >= 11) (showString "ImageView 0x" . showHex x)
-
-
--- | VkShaderModule - Opaque handle to a shader module object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
--- 'Graphics.Vulkan.Core10.Shader.createShaderModule',
--- 'Graphics.Vulkan.Core10.Shader.destroyShaderModule'
-newtype ShaderModule = ShaderModule Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show ShaderModule where
-  showsPrec p (ShaderModule x) = showParen (p >= 11) (showString "ShaderModule 0x" . showHex x)
-
-
--- | VkPipeline - Opaque handle to a pipeline object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsMemoryRequirementsInfoNV',
--- 'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.cmdBindPipelineShaderGroupNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.compileDeferredNV',
--- 'Graphics.Vulkan.Core10.Pipeline.createComputePipelines',
--- 'Graphics.Vulkan.Core10.Pipeline.createGraphicsPipelines',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV',
--- 'Graphics.Vulkan.Core10.Pipeline.destroyPipeline',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.getRayTracingCaptureReplayShaderGroupHandlesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.getRayTracingShaderGroupHandlesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.getRayTracingShaderGroupHandlesNV',
--- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.getShaderInfoAMD'
-newtype Pipeline = Pipeline Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show Pipeline where
-  showsPrec p (Pipeline x) = showParen (p >= 11) (showString "Pipeline 0x" . showHex x)
-
-
--- | VkPipelineLayout - Opaque handle to a pipeline layout object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo',
--- 'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdPushConstants',
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetWithTemplateKHR',
--- 'Graphics.Vulkan.Core10.PipelineLayout.createPipelineLayout',
--- 'Graphics.Vulkan.Core10.PipelineLayout.destroyPipelineLayout'
-newtype PipelineLayout = PipelineLayout Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show PipelineLayout where
-  showsPrec p (PipelineLayout x) = showParen (p >= 11) (showString "PipelineLayout 0x" . showHex x)
-
-
--- | VkSampler - Opaque handle to a sampler object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding',
--- 'Graphics.Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewHandleInfoNVX',
--- 'Graphics.Vulkan.Core10.Sampler.createSampler',
--- 'Graphics.Vulkan.Core10.Sampler.destroySampler'
-newtype Sampler = Sampler Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show Sampler where
-  showsPrec p (Sampler x) = showParen (p >= 11) (showString "Sampler 0x" . showHex x)
-
-
--- | VkDescriptorSet - Opaque handle to a descriptor set object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DescriptorSet.CopyDescriptorSet',
--- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet',
--- 'Graphics.Vulkan.Core10.DescriptorSet.allocateDescriptorSets',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
--- 'Graphics.Vulkan.Core10.DescriptorSet.freeDescriptorSets',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplateKHR'
-newtype DescriptorSet = DescriptorSet Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show DescriptorSet where
-  showsPrec p (DescriptorSet x) = showParen (p >= 11) (showString "DescriptorSet 0x" . showHex x)
-
-
--- | VkDescriptorSetLayout - Opaque handle to a descriptor set layout object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo',
--- 'Graphics.Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo',
--- 'Graphics.Vulkan.Core10.DescriptorSet.createDescriptorSetLayout',
--- 'Graphics.Vulkan.Core10.DescriptorSet.destroyDescriptorSetLayout'
-newtype DescriptorSetLayout = DescriptorSetLayout Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show DescriptorSetLayout where
-  showsPrec p (DescriptorSetLayout x) = showParen (p >= 11) (showString "DescriptorSetLayout 0x" . showHex x)
-
-
--- | VkDescriptorPool - Opaque handle to a descriptor pool object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo',
--- 'Graphics.Vulkan.Core10.DescriptorSet.createDescriptorPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.destroyDescriptorPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.freeDescriptorSets',
--- 'Graphics.Vulkan.Core10.DescriptorSet.resetDescriptorPool'
-newtype DescriptorPool = DescriptorPool Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show DescriptorPool where
-  showsPrec p (DescriptorPool x) = showParen (p >= 11) (showString "DescriptorPool 0x" . showHex x)
-
-
--- | VkFence - Opaque handle to a fence object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.AcquireNextImageInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.FenceGetFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.FenceGetWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.ImportFenceFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.ImportFenceWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR',
--- 'Graphics.Vulkan.Core10.Fence.createFence',
--- 'Graphics.Vulkan.Core10.Fence.destroyFence',
--- 'Graphics.Vulkan.Core10.Fence.getFenceStatus',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.queueBindSparse',
--- 'Graphics.Vulkan.Core10.Queue.queueSubmit',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.registerDeviceEventEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.registerDisplayEventEXT',
--- 'Graphics.Vulkan.Core10.Fence.resetFences',
--- 'Graphics.Vulkan.Core10.Fence.waitForFences'
-newtype Fence = Fence Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show Fence where
-  showsPrec p (Fence x) = showParen (p >= 11) (showString "Fence 0x" . showHex x)
-
-
--- | VkSemaphore - Opaque handle to a semaphore object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.AcquireNextImageInfoKHR',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.BindSparseInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.ImportSemaphoreFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.ImportSemaphoreWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.SemaphoreGetFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.SemaphoreGetWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreSignalInfo',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo',
--- 'Graphics.Vulkan.Core10.Queue.SubmitInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.createSemaphore',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.destroySemaphore',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.getSemaphoreCounterValue',
--- 'Graphics.Vulkan.Extensions.VK_KHR_timeline_semaphore.getSemaphoreCounterValueKHR'
-newtype Semaphore = Semaphore Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show Semaphore where
-  showsPrec p (Semaphore x) = showParen (p >= 11) (showString "Semaphore 0x" . showHex x)
-
-
--- | VkEvent - Opaque handle to an event object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResetEvent',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetEvent',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents',
--- 'Graphics.Vulkan.Core10.Event.createEvent',
--- 'Graphics.Vulkan.Core10.Event.destroyEvent',
--- 'Graphics.Vulkan.Core10.Event.getEventStatus',
--- 'Graphics.Vulkan.Core10.Event.resetEvent',
--- 'Graphics.Vulkan.Core10.Event.setEvent'
-newtype Event = Event Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show Event where
-  showsPrec p (Event x) = showParen (p >= 11) (showString "Event 0x" . showHex x)
-
-
--- | VkQueryPool - Opaque handle to a query pool object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdEndQuery',
--- 'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndQueryIndexedEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdWriteAccelerationStructuresPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdWriteAccelerationStructuresPropertiesNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp',
--- 'Graphics.Vulkan.Core10.Query.createQueryPool',
--- 'Graphics.Vulkan.Core10.Query.destroyQueryPool',
--- 'Graphics.Vulkan.Core10.Query.getQueryPoolResults',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool',
--- 'Graphics.Vulkan.Extensions.VK_EXT_host_query_reset.resetQueryPoolEXT'
-newtype QueryPool = QueryPool Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show QueryPool where
-  showsPrec p (QueryPool x) = showParen (p >= 11) (showString "QueryPool 0x" . showHex x)
-
-
--- | VkFramebuffer - Opaque handle to a framebuffer object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',
--- 'Graphics.Vulkan.Core10.Pass.createFramebuffer',
--- 'Graphics.Vulkan.Core10.Pass.destroyFramebuffer'
-newtype Framebuffer = Framebuffer Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show Framebuffer where
-  showsPrec p (Framebuffer x) = showParen (p >= 11) (showString "Framebuffer 0x" . showHex x)
-
-
--- | VkRenderPass - Opaque handle to a render pass object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',
--- 'Graphics.Vulkan.Core10.Pass.FramebufferCreateInfo',
--- 'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',
--- 'Graphics.Vulkan.Core10.Pass.createRenderPass',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.createRenderPass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR',
--- 'Graphics.Vulkan.Core10.Pass.destroyRenderPass',
--- 'Graphics.Vulkan.Core10.Pass.getRenderAreaGranularity'
-newtype RenderPass = RenderPass Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show RenderPass where
-  showsPrec p (RenderPass x) = showParen (p >= 11) (showString "RenderPass 0x" . showHex x)
-
-
--- | VkPipelineCache - Opaque handle to a pipeline cache object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.createComputePipelines',
--- 'Graphics.Vulkan.Core10.Pipeline.createGraphicsPipelines',
--- 'Graphics.Vulkan.Core10.PipelineCache.createPipelineCache',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV',
--- 'Graphics.Vulkan.Core10.PipelineCache.destroyPipelineCache',
--- 'Graphics.Vulkan.Core10.PipelineCache.getPipelineCacheData',
--- 'Graphics.Vulkan.Core10.PipelineCache.mergePipelineCaches'
-newtype PipelineCache = PipelineCache Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show PipelineCache where
-  showsPrec p (PipelineCache x) = showParen (p >= 11) (showString "PipelineCache 0x" . showHex x)
-
diff --git a/src/Graphics/Vulkan/Core10/Handles.hs-boot b/src/Graphics/Vulkan/Core10/Handles.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Handles.hs-boot
+++ /dev/null
@@ -1,119 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Handles  ( Buffer
-                                       , BufferView
-                                       , CommandBuffer
-                                       , CommandBuffer_T
-                                       , CommandPool
-                                       , DescriptorPool
-                                       , DescriptorSet
-                                       , DescriptorSetLayout
-                                       , DeviceMemory
-                                       , Device
-                                       , Device_T
-                                       , Event
-                                       , Fence
-                                       , Framebuffer
-                                       , Image
-                                       , ImageView
-                                       , Instance
-                                       , Instance_T
-                                       , PhysicalDevice
-                                       , PhysicalDevice_T
-                                       , Pipeline
-                                       , PipelineCache
-                                       , PipelineLayout
-                                       , QueryPool
-                                       , Queue
-                                       , Queue_T
-                                       , RenderPass
-                                       , Sampler
-                                       , Semaphore
-                                       , ShaderModule
-                                       ) where
-
-
-
-data Buffer
-
-
-data BufferView
-
-
-data CommandBuffer
-
-data CommandBuffer_T
-
-
-data CommandPool
-
-
-data DescriptorPool
-
-
-data DescriptorSet
-
-
-data DescriptorSetLayout
-
-
-data DeviceMemory
-
-
-data Device
-
-data Device_T
-
-
-data Event
-
-
-data Fence
-
-
-data Framebuffer
-
-
-data Image
-
-
-data ImageView
-
-
-data Instance
-
-data Instance_T
-
-
-data PhysicalDevice
-
-data PhysicalDevice_T
-
-
-data Pipeline
-
-
-data PipelineCache
-
-
-data PipelineLayout
-
-
-data QueryPool
-
-
-data Queue
-
-data Queue_T
-
-
-data RenderPass
-
-
-data Sampler
-
-
-data Semaphore
-
-
-data ShaderModule
-
diff --git a/src/Graphics/Vulkan/Core10/Image.hs b/src/Graphics/Vulkan/Core10/Image.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Image.hs
+++ /dev/null
@@ -1,1664 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Image  ( createImage
-                                     , withImage
-                                     , destroyImage
-                                     , getImageSubresourceLayout
-                                     , ImageSubresource(..)
-                                     , ImageCreateInfo(..)
-                                     , SubresourceLayout(..)
-                                     ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationImageCreateInfoNV)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateImage))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyImage))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetImageSubresourceLayout))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.SharedTypes (Extent3D)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (ExternalFormatANDROID)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryImageCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory (ExternalMemoryImageCreateInfoNV)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.Core10.Handles (Image(..))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierExplicitCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierListCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list (ImageFormatListCreateInfo)
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage (ImageStencilUsageCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (ImageSwapchainCreateInfoKHR)
-import Graphics.Vulkan.Core10.Enums.ImageTiling (ImageTiling)
-import Graphics.Vulkan.Core10.Enums.ImageType (ImageType)
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
-import Graphics.Vulkan.Core10.Enums.SharingMode (SharingMode)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateImage
-  :: FunPtr (Ptr Device_T -> Ptr (ImageCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Image -> IO Result) -> Ptr Device_T -> Ptr (ImageCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Image -> IO Result
-
--- | vkCreateImage - Create a new image object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the image.
---
--- -   @pCreateInfo@ is a pointer to a 'ImageCreateInfo' structure
---     containing parameters to be used to create the image.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pImage@ is a pointer to a 'Graphics.Vulkan.Core10.Handles.Image'
---     handle in which the resulting image object is returned.
---
--- == Valid Usage
---
--- -   If the @flags@ member of @pCreateInfo@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
---     creating this 'Graphics.Vulkan.Core10.Handles.Image' /must/ not
---     cause the total required sparse memory for all currently valid
---     sparse resources on the device to exceed
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@sparseAddressSpaceSize@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid 'ImageCreateInfo'
---     structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pImage@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Image' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Image', 'ImageCreateInfo'
-createImage :: forall a io . (PokeChain a, MonadIO io) => Device -> ImageCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Image)
-createImage device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateImage' = mkVkCreateImage (pVkCreateImage (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPImage <- ContT $ bracket (callocBytes @Image 8) free
-  r <- lift $ vkCreateImage' (deviceHandle (device)) pCreateInfo pAllocator (pPImage)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pImage <- lift $ peek @Image pPImage
-  pure $ (pImage)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createImage' and 'destroyImage'
---
--- To ensure that 'destroyImage' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withImage :: forall a io r . (PokeChain a, MonadIO io) => (io (Image) -> ((Image) -> io ()) -> r) -> Device -> ImageCreateInfo a -> Maybe AllocationCallbacks -> r
-withImage b device pCreateInfo pAllocator =
-  b (createImage device pCreateInfo pAllocator)
-    (\(o0) -> destroyImage device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyImage
-  :: FunPtr (Ptr Device_T -> Image -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Image -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyImage - Destroy an image object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @image@, either directly or via
---     a 'Graphics.Vulkan.Core10.Handles.ImageView', /must/ have completed
---     execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @image@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @image@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Image'
-destroyImage :: forall io . MonadIO io => Device -> Image -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyImage device image allocator = liftIO . evalContT $ do
-  let vkDestroyImage' = mkVkDestroyImage (pVkDestroyImage (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyImage' (deviceHandle (device)) (image) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetImageSubresourceLayout
-  :: FunPtr (Ptr Device_T -> Image -> Ptr ImageSubresource -> Ptr SubresourceLayout -> IO ()) -> Ptr Device_T -> Image -> Ptr ImageSubresource -> Ptr SubresourceLayout -> IO ()
-
--- | vkGetImageSubresourceLayout - Retrieve information about an image
--- subresource
---
--- = 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 'ImageSubresource' structure
---     selecting a specific image for the image subresource.
---
--- -   @pLayout@ is a pointer to a 'SubresourceLayout' structure in which
---     the layout is returned.
---
--- = Description
---
--- If the image is
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource linear>,
--- then the returned layout is valid for
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-hostaccess host access>.
---
--- If the image’s tiling is
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and its
--- format is a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
--- then 'getImageSubresourceLayout' describes one /format plane/ of the
--- image. If the image’s tiling is
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
--- then 'getImageSubresourceLayout' describes one /memory plane/ of the
--- image. If the image’s tiling is
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
--- and the image is
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource non-linear>,
--- then the returned layout has an implementation-dependent meaning; the
--- vendor of the image’s
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-drm-format-modifier DRM format modifier>
--- /may/ provide documentation that explains how to interpret the returned
--- layout.
---
--- 'getImageSubresourceLayout' is invariant for the lifetime of a single
--- image. However, the subresource layout of images in Android hardware
--- buffer external memory is not known until the image has been bound to
--- memory, so applications /must/ not call 'getImageSubresourceLayout' for
--- such an image before it has been bound.
---
--- == Valid Usage
---
--- -   @image@ /must/ have been created with @tiling@ equal to
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
---
--- -   The @aspectMask@ member of @pSubresource@ /must/ only have a single
---     bit set
---
--- -   The @mipLevel@ member of @pSubresource@ /must/ be less than the
---     @mipLevels@ specified in 'ImageCreateInfo' when @image@ was created
---
--- -   The @arrayLayer@ member of @pSubresource@ /must/ be less than the
---     @arrayLayers@ specified in 'ImageCreateInfo' when @image@ was
---     created
---
--- -   If the @tiling@ of the @image@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and
---     its @format@ is a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
---     with two planes, the @aspectMask@ member of @pSubresource@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
---
--- -   If the @tiling@ of the @image@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and
---     its @format@ is a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
---     with three planes, the @aspectMask@ member of @pSubresource@ /must/
---     be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
---
--- -   If @image@ was created with the
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     external memory handle type, then @image@ /must/ be bound to memory
---
--- -   If the @tiling@ of the @image@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---     then the @aspectMask@ member of @pSubresource@ /must/ be
---     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ and the index @i@ /must/ be
---     less than the
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
---     associated with the image’s @format@ and
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierPropertiesEXT'::@drmFormatModifier@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @pSubresource@ /must/ be a valid pointer to a valid
---     'ImageSubresource' structure
---
--- -   @pLayout@ /must/ be a valid pointer to a 'SubresourceLayout'
---     structure
---
--- -   @image@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Image', 'ImageSubresource',
--- 'SubresourceLayout'
-getImageSubresourceLayout :: forall io . MonadIO io => Device -> Image -> ImageSubresource -> io (SubresourceLayout)
-getImageSubresourceLayout device image subresource = liftIO . evalContT $ do
-  let vkGetImageSubresourceLayout' = mkVkGetImageSubresourceLayout (pVkGetImageSubresourceLayout (deviceCmds (device :: Device)))
-  pSubresource <- ContT $ withCStruct (subresource)
-  pPLayout <- ContT (withZeroCStruct @SubresourceLayout)
-  lift $ vkGetImageSubresourceLayout' (deviceHandle (device)) (image) pSubresource (pPLayout)
-  pLayout <- lift $ peekCStruct @SubresourceLayout pPLayout
-  pure $ (pLayout)
-
-
--- | VkImageSubresource - Structure specifying an image subresource
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind',
--- 'getImageSubresourceLayout'
-data ImageSubresource = ImageSubresource
-  { -- | @aspectMask@ /must/ not be @0@
-    aspectMask :: ImageAspectFlags
-  , -- | @mipLevel@ selects the mipmap level.
-    mipLevel :: Word32
-  , -- | @arrayLayer@ selects the array layer.
-    arrayLayer :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show ImageSubresource
-
-instance ToCStruct ImageSubresource where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageSubresource{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (mipLevel)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (arrayLayer)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct ImageSubresource where
-  peekCStruct p = do
-    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 0 :: Ptr ImageAspectFlags))
-    mipLevel <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    arrayLayer <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pure $ ImageSubresource
-             aspectMask mipLevel arrayLayer
-
-instance Storable ImageSubresource where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageSubresource where
-  zero = ImageSubresource
-           zero
-           zero
-           zero
-
-
--- | VkImageCreateInfo - Structure specifying the parameters of a newly
--- created image object
---
--- = Description
---
--- Images created with @tiling@ equal to
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' have
--- further restrictions on their limits and capabilities compared to images
--- created with @tiling@ equal to
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'.
--- Creation of images with tiling
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' /may/ not
--- be supported unless other parameters meet all of the constraints:
---
--- -   @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
---
--- -   @format@ is not a depth\/stencil format
---
--- -   @mipLevels@ is 1
---
--- -   @arrayLayers@ is 1
---
--- -   @samples@ is
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   @usage@ only includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
---     and\/or
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---
--- Images created with a @format@ from one of those listed in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
--- have further restrictions on their limits and capabilities compared to
--- images created with other formats. Creation of images with a format
--- requiring
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion Y′CBCR conversion>
--- /may/ not be supported unless other parameters meet all of the
--- constraints:
---
--- -   @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
---
--- -   @mipLevels@ is 1
---
--- -   @arrayLayers@ is 1
---
--- -   @samples@ is
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- Implementations /may/ support additional limits and capabilities beyond
--- those listed above.
---
--- To determine the set of valid @usage@ bits for a given format, call
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'.
---
--- If the size of the resultant image would exceed @maxResourceSize@, then
--- 'createImage' /must/ fail and return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'. This
--- failure /may/ occur even when all image creation parameters satisfy
--- their valid usage requirements.
---
--- Note
---
--- For images created without
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_EXTENDED_USAGE_BIT'
--- a @usage@ bit is valid if it is supported for the format the image is
--- created with.
---
--- For images created with
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_EXTENDED_USAGE_BIT'
--- a @usage@ bit is valid if it is supported for at least one of the
--- formats a 'Graphics.Vulkan.Core10.Handles.ImageView' created from the
--- image /can/ have (see
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>
--- for more detail).
---
--- Valid values for some image creation parameters are limited by a
--- numerical upper bound or by inclusion in a bitset. For example,
--- 'ImageCreateInfo'::@arrayLayers@ is limited by
--- @imageCreateMaxArrayLayers@, defined below; and
--- 'ImageCreateInfo'::@samples@ is limited by @imageCreateSampleCounts@,
--- also defined below.
---
--- Several limiting values are defined below, as well as assisting values
--- from which the limiting values are derived. The limiting values are
--- referenced by the relevant valid usage statements of 'ImageCreateInfo'.
---
--- -   Let @uint64_t imageCreateDrmFormatModifiers[]@ be the set of
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-drm-format-modifier Linux DRM format modifiers>
---     that the resultant image /may/ have.
---
---     -   If @tiling@ is not
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---         then @imageCreateDrmFormatModifiers@ is empty.
---
---     -   If 'ImageCreateInfo'::@pNext@ contains
---         'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
---         then @imageCreateDrmFormatModifiers@ contains exactly one
---         modifier,
---         'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT'::@drmFormatModifier@.
---
---     -   If 'ImageCreateInfo'::@pNext@ contains
---         'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT',
---         then @imageCreateDrmFormatModifiers@ contains the entire array
---         'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT'::@pDrmFormatModifiers@.
---
--- -   Let @VkBool32 imageCreateMaybeLinear@ indicate if the resultant
---     image may be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource linear>.
---
---     -   If @tiling@ is
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR',
---         then @imageCreateMaybeLinear@ is @true@.
---
---     -   If @tiling@ is
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL',
---         then @imageCreateMaybeLinear@ is @false@.
---
---     -   If @tiling@ is
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---         then @imageCreateMaybeLinear_@ is @true@ if and only if
---         @imageCreateDrmFormatModifiers@ contains
---         @DRM_FORMAT_MOD_LINEAR@.
---
--- -   Let @VkFormatFeatureFlags imageCreateFormatFeatures@ be the set of
---     valid /format features/ available during image creation.
---
---     -   If @tiling@ is
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR',
---         then @imageCreateFormatFeatures@ is the value of
---         'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@linearTilingFeatures@
---         found by calling
---         'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
---         with parameter @format@ equal to 'ImageCreateInfo'::@format@.
---
---     -   If @tiling@ is
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL',
---         and if the @pNext@ chain includes no
---         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
---         structure with non-zero @externalFormat@, then
---         @imageCreateFormatFeatures@ is value of
---         'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@optimalTilingFeatures@
---         found by calling
---         'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
---         with parameter @format@ equal to 'ImageCreateInfo'::@format@.
---
---     -   If @tiling@ is
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL',
---         and if the @pNext@ chain includes a
---         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
---         structure with non-zero @externalFormat@, then
---         @imageCreateFormatFeatures@ is the value of
---         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID'::@formatFeatures@
---         obtained by
---         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID'
---         with a matching @externalFormat@ value.
---
---     -   If @tiling@ is
---         'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---         then the value of @imageCreateFormatFeatures@ is found by
---         calling
---         'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'
---         with
---         'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@format@
---         equal to 'ImageCreateInfo'::@format@ and with
---         'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesListEXT'
---         chained into
---         'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2';
---         by collecting all members of the returned array
---         'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesListEXT'::@pDrmFormatModifierProperties@
---         whose @drmFormatModifier@ belongs to
---         @imageCreateDrmFormatModifiers@; and by taking the bitwise
---         intersection, over the collected array members, of
---         @drmFormatModifierTilingFeatures@. (The resultant
---         @imageCreateFormatFeatures@ /may/ be empty).
---
--- -   Let
---     @VkImageFormatProperties2 imageCreateImageFormatPropertiesList[]@ be
---     defined as follows.
---
---     -   If 'ImageCreateInfo'::@pNext@ contains no
---         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
---         structure with non-zero @externalFormat@, then
---         @imageCreateImageFormatPropertiesList@ is the list of structures
---         obtained by calling
---         'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2',
---         possibly multiple times, as follows:
---
---         -   The parameters
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@format@,
---             @imageType@, @tiling@, @usage@, and @flags@ /must/ be equal
---             to those in 'ImageCreateInfo'.
---
---         -   If 'ImageCreateInfo'::@pNext@ contains a
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
---             structure whose @handleTypes@ is not @0@, then
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@
---             /must/ contain a
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'
---             structure whose @handleType@ is not @0@; and
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---             /must/ be called for each handle type in
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@,
---             successively setting
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'::@handleType@
---             on each call.
---
---         -   If 'ImageCreateInfo'::@pNext@ contains no
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
---             structure, or contains a structure whose @handleTypes@ is
---             @0@, then
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@
---             /must/ either contain no
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'
---             structure, or contain a structure whose @handleType@ is @0@.
---
---         -   If @tiling@ is
---             'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---             then
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@
---             /must/ contain a
---             'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT'
---             structure where @sharingMode@ is equal to
---             'ImageCreateInfo'::@sharingMode@; and, if @sharingMode@ is
---             'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---             then @queueFamilyIndexCount@ and @pQueueFamilyIndices@
---             /must/ be equal to those in 'ImageCreateInfo'; and, if
---             @flags@ contains
---             'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
---             then the
---             'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
---             structure included in the @pNext@ chain of
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
---             /must/ be equivalent to the one included in the @pNext@
---             chain of 'ImageCreateInfo'; and
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---             /must/ be called for each modifier in
---             @imageCreateDrmFormatModifiers@, successively setting
---             'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT'::@drmFormatModifier@
---             on each call.
---
---         -   If @tiling@ is not
---             'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---             then
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@
---             /must/ contain no
---             'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT'
---             structure.
---
---         -   If any call to
---             'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---             returns an error, then
---             @imageCreateImageFormatPropertiesList@ is defined to be the
---             empty list.
---
---     -   If 'ImageCreateInfo'::@pNext@ contains a
---         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
---         structure with non-zero @externalFormat@, then
---         @imageCreateImageFormatPropertiesList@ contains a single element
---         where:
---
---         -   'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxMipLevels@
---             is ⌊log2(max(@extent.width@, @extent.height@,
---             @extent.depth@))⌋ + 1.
---
---         -   'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxArrayLayers@
---             is
---             'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::maxImageArrayLayers.
---
---         -   Each component of
---             'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxExtent@
---             is
---             'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::maxImageDimension2D.
---
---         -   'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@sampleCounts@
---             contains exactly
---             'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'.
---
--- -   Let @uint32_t imageCreateMaxMipLevels@ be the minimum value of
---     'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxMipLevels@
---     in @imageCreateImageFormatPropertiesList@. The value is undefined if
---     @imageCreateImageFormatPropertiesList@ is empty.
---
--- -   Let @uint32_t imageCreateMaxArrayLayers@ be the minimum value of
---     'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxArrayLayers@
---     in @imageCreateImageFormatPropertiesList@. The value is undefined if
---     @imageCreateImageFormatPropertiesList@ is empty.
---
--- -   Let @VkExtent3D imageCreateMaxExtent@ be the component-wise minimum
---     over all
---     'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxExtent@
---     values in @imageCreateImageFormatPropertiesList@. The value is
---     undefined if @imageCreateImageFormatPropertiesList@ is empty.
---
--- -   Let @VkSampleCountFlags imageCreateSampleCounts@ be the intersection
---     of each
---     'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@sampleCounts@
---     in @imageCreateImageFormatPropertiesList@. The value is undefined if
---     @imageCreateImageFormatPropertiesList@ is empty.
---
--- = Valid Usage
---
--- -   Each of the following values (as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---     /must/ not be undefined @imageCreateMaxMipLevels@,
---     @imageCreateMaxArrayLayers@, @imageCreateMaxExtent@, and
---     @imageCreateSampleCounts@
---
--- -   If @sharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
---     @queueFamilyIndexCount@ @uint32_t@ values
---
--- -   If @sharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     @queueFamilyIndexCount@ /must/ be greater than @1@
---
--- -   If @sharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     each element of @pQueueFamilyIndices@ /must/ be unique and /must/ be
---     less than @pQueueFamilyPropertyCount@ returned by either
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'
---     for the @physicalDevice@ that was used to create @device@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
---     structure, and its @externalFormat@ member is non-zero the @format@
---     /must/ be 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
---
--- -   If the @pNext@ chain does not include a
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
---     structure, or does and its @externalFormat@ member is @0@, the
---     @format@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.Format.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
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT',
---     @imageType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',
---     @imageType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT',
---     @imageType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
---
--- -   @extent.width@ /must/ be less than or equal to
---     @imageCreateMaxExtent.width@ (as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---
--- -   @extent.height@ /must/ be less than or equal to
---     @imageCreateMaxExtent.height@ (as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---
--- -   @extent.depth@ /must/ be less than or equal to
---     @imageCreateMaxExtent.depth@ (as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---
--- -   If @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @flags@
---     contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT',
---     @extent.width@ and @extent.height@ /must/ be equal and @arrayLayers@
---     /must/ be greater than or equal to 6
---
--- -   If @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', both
---     @extent.height@ and @extent.depth@ /must/ be @1@
---
--- -   If @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D',
---     @extent.depth@ /must/ be @1@
---
--- -   @mipLevels@ /must/ be less than or equal to the number of levels in
---     the complete mipmap chain based on @extent.width@, @extent.height@,
---     and @extent.depth@
---
--- -   @mipLevels@ /must/ be less than or equal to
---     @imageCreateMaxMipLevels@ (as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---
--- -   @arrayLayers@ /must/ be less than or equal to
---     @imageCreateMaxArrayLayers@ (as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---
--- -   If @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D',
---     @arrayLayers@ /must/ be @1@
---
--- -   If @samples@ is not
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT',
---     then @imageType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', @flags@
---     /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT',
---     @mipLevels@ /must/ be equal to @1@, and @imageCreateMaybeLinear@ (as
---     defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---     /must/ be @false@,
---
--- -   If @samples@ is not
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT',
---     @usage@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT'
---
--- -   If @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
---     then bits other than
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
---     and
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
---     /must/ not be set
---
--- -   If @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
---     @extent.width@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferWidth@
---
--- -   If @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
---     @extent.height@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferHeight@
---
--- -   If @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',
---     @extent.width@ /must/ be less than or equal to
---     \(\lceil{\frac{maxFramebufferWidth}{minFragmentDensityTexelSize_{width}}}\rceil\)
---
--- -   If @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',
---     @extent.height@ /must/ be less than or equal to
---     \(\lceil{\frac{maxFramebufferHeight}{minFragmentDensityTexelSize_{height}}}\rceil\)
---
--- -   If @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
---     @usage@ /must/ also contain at least one of
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
---
--- -   @samples@ /must/ be a bit value that is set in
---     @imageCreateSampleCounts@ (as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderStorageImageMultisample multisampled storage images>
---     feature is not enabled, and @usage@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT',
---     @samples@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseBinding sparse bindings>
---     feature is not enabled, @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyAliased sparse aliased residency>
---     feature is not enabled, @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
---
--- -   If @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', @flags@
---     /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyImage2D sparse residency for 2D images>
---     feature is not enabled, and @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', @flags@
---     /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyImage3D sparse residency for 3D images>
---     feature is not enabled, and @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', @flags@
---     /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency2Samples sparse residency for images with 2 samples>
---     feature is not enabled, @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and
---     @samples@ is
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_2_BIT',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency4Samples sparse residency for images with 4 samples>
---     feature is not enabled, @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and
---     @samples@ is
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_4_BIT',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency8Samples sparse residency for images with 8 samples>
---     feature is not enabled, @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and
---     @samples@ is
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_8_BIT',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency16Samples sparse residency for images with 16 samples>
---     feature is not enabled, @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and
---     @samples@ is
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_16_BIT',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT',
---     it /must/ also contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'
---
--- -   If any of the bits
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
---     are set,
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT'
---     /must/ not also be set
---
--- -   If the protected memory feature is not enabled, @flags@ /must/ not
---     contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT'
---
--- -   If any of the bits
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
---     are set,
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT'
---     /must/ not also be set
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'
---     structure, it /must/ not contain a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
---     structure
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
---     structure, its @handleTypes@ member /must/ only contain bits that
---     are also in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'::@externalMemoryProperties.compatibleHandleTypes@,
---     as returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---     with @format@, @imageType@, @tiling@, @usage@, and @flags@ equal to
---     those in this structure, and with a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'
---     structure included in the @pNext@ chain, with a @handleType@ equal
---     to any one of the handle types specified in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'
---     structure, its @handleTypes@ member /must/ only contain bits that
---     are also in
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalImageFormatPropertiesNV'::@externalMemoryProperties.compatibleHandleTypes@,
---     as returned by
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV'
---     with @format@, @imageType@, @tiling@, @usage@, and @flags@ equal to
---     those in this structure, and with @externalHandleType@ equal to any
---     one of the handle types specified in
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'::@handleTypes@
---
--- -   If the logical device was created with
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo'::@physicalDeviceCount@
---     equal to 1, @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT',
---     then @mipLevels@ /must/ be one, @arrayLayers@ /must/ be one,
---     @imageType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'. and
---     @imageCreateMaybeLinear@ (as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---     /must/ be @false@
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT',
---     then @format@ /must/ be a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#appendix-compressedtex-bc block-compressed image format>,
---     an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#appendix-compressedtex-etc2 ETC compressed image format>,
---     or an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#appendix-compressedtex-astc ASTC compressed image format>
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT',
---     then @flags@ /must/ also contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
---
--- -   @initialLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
---     or
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'
---     structure whose @handleTypes@ member is not @0@, @initialLayout@
---     /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'
---
--- -   If the image @format@ is one of those listed in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>,
---     then @mipLevels@ /must/ be 1
---
--- -   If the image @format@ is one of those listed in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>,
---     @samples@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If the image @format@ is one of those listed in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>,
---     @imageType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
---
--- -   If the image @format@ is one of those listed in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>,
---     and the @ycbcrImageArrays@ feature is not enabled, @arrayLayers@
---     /must/ be 1
---
--- -   If @format@ is a /multi-planar/ format, and if
---     @imageCreateFormatFeatures@ (as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
---     does not contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DISJOINT_BIT',
---     then @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---
--- -   If @format@ is not a /multi-planar/ format, and @flags@ does not
---     include
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_ALIAS_BIT',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---
--- -   If @tiling@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---     then the @pNext@ chain /must/ include exactly one of
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT'
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT'
---     structures
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT'
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT'
---     structure, then @tiling@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
---
--- -   If @tiling@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
---     and @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
---     then the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
---     structure with non-zero @viewFormatCount@
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     @format@ /must/ be a depth or depth\/stencil format
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
---     structure whose @handleTypes@ member includes
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',
---     @imageType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
---     structure whose @handleTypes@ member includes
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',
---     @mipLevels@ /must/ either be @1@ or equal to the number of levels in
---     the complete mipmap chain based on @extent.width@, @extent.height@,
---     and @extent.depth@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
---     structure whose @externalFormat@ member is not @0@, @flags@ /must/
---     not include
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
---     structure whose @externalFormat@ member is not @0@, @usage@ /must/
---     not include any usages except
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT'
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
---     structure whose @externalFormat@ member is not @0@, @tiling@ /must/
---     be 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'
---
--- -   If @format@ is a depth-stencil format, @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
---     and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure, then its
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
---     member /must/ also include
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If @format@ is a depth-stencil format, @usage@ does not include
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
---     and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure, then its
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
---     member /must/ also not include
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If @format@ is a depth-stencil format, @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
---     and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure, then its
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
---     member /must/ also include
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT'
---
--- -   If @format@ is a depth-stencil format, @usage@ does not include
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
---     and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure, then its
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
---     member /must/ also not include
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT'
---
--- -   If 'Graphics.Vulkan.Core10.Enums.Format.Format' is a depth-stencil
---     format and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure with its @stencilUsage@ member including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
---     @extent.width@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferWidth@
---
--- -   If @format@ is a depth-stencil format and the @pNext@ chain includes
---     a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure with its @stencilUsage@ member including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
---     @extent.height@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferHeight@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderStorageImageMultisample multisampled storage images>
---     feature is not enabled, @format@ is a depth-stencil format and the
---     @pNext@ chain includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure with its @stencilUsage@ including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT',
---     @samples@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV',
---     @imageType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' or
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV',
---     it /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
---     and the @format@ /must/ not be a depth\/stencil format
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     and @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D',
---     @extent.width@ and @extent.height@ /must/ be greater than @1@
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     and @imageType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D',
---     @extent.width@, @extent.height@, and @extent.depth@ /must/ be
---     greater than @1@
---
--- -   If @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
---     @imageType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
---
--- -   If @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
---     @samples@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If @usage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
---     @tiling@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
---     @tiling@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
---     @imageType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
---     @mipLevels@ /must/ be @1@
---
--- = Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV',
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo',
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV',
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo',
---     or
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits'
---     values
---
--- -   @imageType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageType.ImageType' value
---
--- -   @format@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- -   @samples@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
---     value
---
--- -   @tiling@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling' value
---
--- -   @usage@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
---     values
---
--- -   @usage@ /must/ not be @0@
---
--- -   @sharingMode@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SharingMode' value
---
--- -   @initialLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- \<\/section>
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent3D',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling',
--- 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType',
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.SharingMode.SharingMode',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createImage'
-data ImageCreateInfo (es :: [Type]) = ImageCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits'
-    -- describing additional parameters of the image.
-    flags :: ImageCreateFlags
-  , -- | @imageType@ is a 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType'
-    -- value specifying the basic dimensionality of the image. Layers in array
-    -- textures do not count as a dimension for the purposes of the image type.
-    imageType :: ImageType
-  , -- | @format@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format' describing
-    -- the format and type of the texel blocks that will be contained in the
-    -- image.
-    format :: Format
-  , -- | @extent@ is a 'Graphics.Vulkan.Core10.SharedTypes.Extent3D' describing
-    -- the number of data elements in each dimension of the base level.
-    extent :: Extent3D
-  , -- | @mipLevels@ describes the number of levels of detail available for
-    -- minified sampling of the image.
-    mipLevels :: Word32
-  , -- | @arrayLayers@ is the number of layers in the image.
-    arrayLayers :: Word32
-  , -- | @samples@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- specifying the number of
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling samples per texel>.
-    samples :: SampleCountFlagBits
-  , -- | @tiling@ is a 'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling'
-    -- value specifying the tiling arrangement of the texel blocks in memory.
-    tiling :: ImageTiling
-  , -- | @usage@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
-    -- describing the intended usage of the image.
-    usage :: ImageUsageFlags
-  , -- | @sharingMode@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.SharingMode.SharingMode' value specifying
-    -- the sharing mode of the image when it will be accessed by multiple queue
-    -- families.
-    sharingMode :: SharingMode
-  , -- | @pQueueFamilyIndices@ is a list of queue families that will access this
-    -- image (ignored if @sharingMode@ is not
-    -- 'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT').
-    queueFamilyIndices :: Vector Word32
-  , -- | @initialLayout@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value specifying
-    -- the initial 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' of
-    -- all image subresources of the image. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts Image Layouts>.
-    initialLayout :: ImageLayout
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (ImageCreateInfo es)
-
-instance Extensible ImageCreateInfo where
-  extensibleType = STRUCTURE_TYPE_IMAGE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext ImageCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @ImageStencilUsageCreateInfo = Just f
-    | Just Refl <- eqT @e @ImageDrmFormatModifierExplicitCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @ImageDrmFormatModifierListCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @ExternalFormatANDROID = Just f
-    | Just Refl <- eqT @e @ImageFormatListCreateInfo = Just f
-    | Just Refl <- eqT @e @ImageSwapchainCreateInfoKHR = Just f
-    | Just Refl <- eqT @e @ExternalMemoryImageCreateInfo = Just f
-    | Just Refl <- eqT @e @ExternalMemoryImageCreateInfoNV = Just f
-    | Just Refl <- eqT @e @DedicatedAllocationImageCreateInfoNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (ImageCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr ImageCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr ImageType)) (imageType)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Format)) (format)
-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr Extent3D)) (extent) . ($ ())
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (mipLevels)
-    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (arrayLayers)
-    lift $ poke ((p `plusPtr` 48 :: Ptr SampleCountFlagBits)) (samples)
-    lift $ poke ((p `plusPtr` 52 :: Ptr ImageTiling)) (tiling)
-    lift $ poke ((p `plusPtr` 56 :: Ptr ImageUsageFlags)) (usage)
-    lift $ poke ((p `plusPtr` 60 :: Ptr SharingMode)) (sharingMode)
-    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueFamilyIndices)) :: Word32))
-    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (queueFamilyIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (queueFamilyIndices)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
-    lift $ poke ((p `plusPtr` 80 :: Ptr ImageLayout)) (initialLayout)
-    lift $ f
-  cStructSize = 88
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr ImageType)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Format)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr Extent3D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 48 :: Ptr SampleCountFlagBits)) (zero)
-    lift $ poke ((p `plusPtr` 52 :: Ptr ImageTiling)) (zero)
-    lift $ poke ((p `plusPtr` 56 :: Ptr ImageUsageFlags)) (zero)
-    lift $ poke ((p `plusPtr` 60 :: Ptr SharingMode)) (zero)
-    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
-    lift $ poke ((p `plusPtr` 80 :: Ptr ImageLayout)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (ImageCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @ImageCreateFlags ((p `plusPtr` 16 :: Ptr ImageCreateFlags))
-    imageType <- peek @ImageType ((p `plusPtr` 20 :: Ptr ImageType))
-    format <- peek @Format ((p `plusPtr` 24 :: Ptr Format))
-    extent <- peekCStruct @Extent3D ((p `plusPtr` 28 :: Ptr Extent3D))
-    mipLevels <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    arrayLayers <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
-    samples <- peek @SampleCountFlagBits ((p `plusPtr` 48 :: Ptr SampleCountFlagBits))
-    tiling <- peek @ImageTiling ((p `plusPtr` 52 :: Ptr ImageTiling))
-    usage <- peek @ImageUsageFlags ((p `plusPtr` 56 :: Ptr ImageUsageFlags))
-    sharingMode <- peek @SharingMode ((p `plusPtr` 60 :: Ptr SharingMode))
-    queueFamilyIndexCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    pQueueFamilyIndices <- peek @(Ptr Word32) ((p `plusPtr` 72 :: Ptr (Ptr Word32)))
-    pQueueFamilyIndices' <- generateM (fromIntegral queueFamilyIndexCount) (\i -> peek @Word32 ((pQueueFamilyIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    initialLayout <- peek @ImageLayout ((p `plusPtr` 80 :: Ptr ImageLayout))
-    pure $ ImageCreateInfo
-             next flags imageType format extent mipLevels arrayLayers samples tiling usage sharingMode pQueueFamilyIndices' initialLayout
-
-instance es ~ '[] => Zero (ImageCreateInfo es) where
-  zero = ImageCreateInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           mempty
-           zero
-
-
--- | VkSubresourceLayout - Structure specifying subresource layout
---
--- = Description
---
--- If the image is
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource linear>,
--- then @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;
---
--- The value of @arrayPitch@ is undefined for images that were not created
--- as arrays. @depthPitch@ is defined only for 3D images.
---
--- If the image has a /single-plane/ color format and its tiling is
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' , then
--- the @aspectMask@ member of 'ImageSubresource' /must/ be
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'.
---
--- If the image has a depth\/stencil format and its tiling is
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' , then
--- @aspectMask@ /must/ be either
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
--- or
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.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.
---
--- If the image has a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
--- and its tiling is
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' , then
--- the @aspectMask@ member of 'ImageSubresource' /must/ be
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
--- or (for 3-plane formats only)
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'.
--- Querying each of these image subresource layouts will return a different
--- @offset@ and @size@ representing the region of memory used for that
--- plane. If the image is /disjoint/, then the @offset@ is relative to the
--- base address of the plane. If the image is /non-disjoint/, then the
--- @offset@ is relative to the base address of the image.
---
--- If the image’s tiling is
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
--- then the @aspectMask@ member of 'ImageSubresource' /must/ be one of
--- @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@, where the maximum allowed
--- plane index @i@ is defined by the
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
--- associated with the image’s 'ImageCreateInfo'::@format@ and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-drm-format-modifier modifier>.
--- The memory range used by the subresource is described by @offset@ and
--- @size@. If the image is /disjoint/, then the @offset@ is relative to the
--- base address of the /memory plane/. If the image is /non-disjoint/, then
--- the @offset@ is relative to the base address of the image. If the image
--- is
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource non-linear>,
--- then @rowPitch@, @arrayPitch@, and @depthPitch@ have an
--- implementation-dependent meaning.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
--- 'getImageSubresourceLayout'
-data SubresourceLayout = SubresourceLayout
-  { -- | @offset@ is the byte offset from the start of the image or the plane
-    -- where the image subresource begins.
-    offset :: DeviceSize
-  , -- | @size@ is the size in bytes of the image subresource. @size@ includes
-    -- any extra memory that is required based on @rowPitch@.
-    size :: DeviceSize
-  , -- | @rowPitch@ describes the number of bytes between each row of texels in
-    -- an image.
-    rowPitch :: DeviceSize
-  , -- | @arrayPitch@ describes the number of bytes between each array layer of
-    -- an image.
-    arrayPitch :: DeviceSize
-  , -- | @depthPitch@ describes the number of bytes between each slice of 3D
-    -- image.
-    depthPitch :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show SubresourceLayout
-
-instance ToCStruct SubresourceLayout where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SubresourceLayout{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (offset)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (size)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (rowPitch)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (arrayPitch)
-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (depthPitch)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct SubresourceLayout where
-  peekCStruct p = do
-    offset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
-    size <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
-    rowPitch <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    arrayPitch <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    depthPitch <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
-    pure $ SubresourceLayout
-             offset size rowPitch arrayPitch depthPitch
-
-instance Storable SubresourceLayout where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SubresourceLayout where
-  zero = SubresourceLayout
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/Image.hs-boot b/src/Graphics/Vulkan/Core10/Image.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Image.hs-boot
+++ /dev/null
@@ -1,36 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Image  ( ImageCreateInfo
-                                     , ImageSubresource
-                                     , SubresourceLayout
-                                     ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role ImageCreateInfo nominal
-data ImageCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (ImageCreateInfo es)
-instance Show (Chain es) => Show (ImageCreateInfo es)
-
-instance PeekChain es => FromCStruct (ImageCreateInfo es)
-
-
-data ImageSubresource
-
-instance ToCStruct ImageSubresource
-instance Show ImageSubresource
-
-instance FromCStruct ImageSubresource
-
-
-data SubresourceLayout
-
-instance ToCStruct SubresourceLayout
-instance Show SubresourceLayout
-
-instance FromCStruct SubresourceLayout
-
diff --git a/src/Graphics/Vulkan/Core10/ImageView.hs b/src/Graphics/Vulkan/Core10/ImageView.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/ImageView.hs
+++ /dev/null
@@ -1,964 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.ImageView  ( createImageView
-                                         , withImageView
-                                         , destroyImageView
-                                         , ComponentMapping(..)
-                                         , ImageViewCreateInfo(..)
-                                         ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Enums.ComponentSwizzle (ComponentSwizzle)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateImageView))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyImageView))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.Core10.SharedTypes (ImageSubresourceRange)
-import Graphics.Vulkan.Core10.Handles (ImageView)
-import Graphics.Vulkan.Core10.Handles (ImageView(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode (ImageViewASTCDecodeModeEXT)
-import Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits (ImageViewCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageViewType (ImageViewType)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (ImageViewUsageCreateInfo)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionInfo)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateImageView
-  :: FunPtr (Ptr Device_T -> Ptr (ImageViewCreateInfo a) -> Ptr AllocationCallbacks -> Ptr ImageView -> IO Result) -> Ptr Device_T -> Ptr (ImageViewCreateInfo a) -> Ptr AllocationCallbacks -> Ptr ImageView -> IO Result
-
--- | vkCreateImageView - Create an image view from an existing image
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the image view.
---
--- -   @pCreateInfo@ is a pointer to a 'ImageViewCreateInfo' structure
---     containing parameters to be used to create the image view.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pView@ is a pointer to a 'Graphics.Vulkan.Core10.Handles.ImageView'
---     handle in which the resulting image view object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'ImageViewCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pView@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.ImageView' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.ImageView', 'ImageViewCreateInfo'
-createImageView :: forall a io . (PokeChain a, MonadIO io) => Device -> ImageViewCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (ImageView)
-createImageView device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateImageView' = mkVkCreateImageView (pVkCreateImageView (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPView <- ContT $ bracket (callocBytes @ImageView 8) free
-  r <- lift $ vkCreateImageView' (deviceHandle (device)) pCreateInfo pAllocator (pPView)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pView <- lift $ peek @ImageView pPView
-  pure $ (pView)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createImageView' and 'destroyImageView'
---
--- To ensure that 'destroyImageView' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withImageView :: forall a io r . (PokeChain a, MonadIO io) => (io (ImageView) -> ((ImageView) -> io ()) -> r) -> Device -> ImageViewCreateInfo a -> Maybe AllocationCallbacks -> r
-withImageView b device pCreateInfo pAllocator =
-  b (createImageView device pCreateInfo pAllocator)
-    (\(o0) -> destroyImageView device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyImageView
-  :: FunPtr (Ptr Device_T -> ImageView -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> ImageView -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyImageView - Destroy an image view object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @imageView@ /must/ have
---     completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @imageView@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @imageView@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @imageView@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @imageView@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.ImageView' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.ImageView'
-destroyImageView :: forall io . MonadIO io => Device -> ImageView -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyImageView device imageView allocator = liftIO . evalContT $ do
-  let vkDestroyImageView' = mkVkDestroyImageView (pVkDestroyImageView (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyImageView' (deviceHandle (device)) (imageView) pAllocator
-  pure $ ()
-
-
--- | VkComponentMapping - Structure specifying a color component mapping
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
--- 'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle',
--- 'ImageViewCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
-data ComponentMapping = ComponentMapping
-  { -- | @r@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value
-    r :: ComponentSwizzle
-  , -- | @g@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value
-    g :: ComponentSwizzle
-  , -- | @b@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value
-    b :: ComponentSwizzle
-  , -- | @a@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value
-    a :: ComponentSwizzle
-  }
-  deriving (Typeable)
-deriving instance Show ComponentMapping
-
-instance ToCStruct ComponentMapping where
-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ComponentMapping{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr ComponentSwizzle)) (r)
-    poke ((p `plusPtr` 4 :: Ptr ComponentSwizzle)) (g)
-    poke ((p `plusPtr` 8 :: Ptr ComponentSwizzle)) (b)
-    poke ((p `plusPtr` 12 :: Ptr ComponentSwizzle)) (a)
-    f
-  cStructSize = 16
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr ComponentSwizzle)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr ComponentSwizzle)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr ComponentSwizzle)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr ComponentSwizzle)) (zero)
-    f
-
-instance FromCStruct ComponentMapping where
-  peekCStruct p = do
-    r <- peek @ComponentSwizzle ((p `plusPtr` 0 :: Ptr ComponentSwizzle))
-    g <- peek @ComponentSwizzle ((p `plusPtr` 4 :: Ptr ComponentSwizzle))
-    b <- peek @ComponentSwizzle ((p `plusPtr` 8 :: Ptr ComponentSwizzle))
-    a <- peek @ComponentSwizzle ((p `plusPtr` 12 :: Ptr ComponentSwizzle))
-    pure $ ComponentMapping
-             r g b a
-
-instance Storable ComponentMapping where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ComponentMapping where
-  zero = ComponentMapping
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkImageViewCreateInfo - Structure specifying parameters of a newly
--- created image view
---
--- = 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
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' at image creation time.
--- If the image was has a depth-stencil format and was created with a
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
--- structure included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo', the usage is calculated
--- based on the @subresource.aspectMask@ provided:
---
--- -   If @aspectMask@ includes only
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
---     the implicit @usage@ is equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@.
---
--- -   If @aspectMask@ includes only
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',
---     the implicit @usage@ is equal to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@usage@.
---
--- -   If both aspects are included in @aspectMask@, the implicit @usage@
---     is equal to the intersection of
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@usage@ and
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@.
---     The implicit @usage@ /can/ be overriden by adding a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
---     structure to the @pNext@ chain.
---
--- If @image@ was created with the
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
--- flag, and if the @format@ of the image is not
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>,
--- @format@ /can/ be different from the image’s format, but if @image@ was
--- created without the
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'
--- flag and they are not equal they /must/ be /compatible/. Image format
--- compatibility is defined in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-fixedfpconv Conversion from Normalized Fixed-Point to Floating-Point>.
---
--- If @image@ was created with the
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'
--- flag, @format@ /must/ be /compatible/ with the image’s format as
--- described above, or /must/ be an uncompressed format in which case it
--- /must/ be /size-compatible/ with the image’s format, as defined for
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-size-compatibility copying data between images>
--- In this case the resulting image view’s texel dimensions equal the
--- dimensions of the selected mip level divided by the compressed texel
--- block size and rounded up.
---
--- If the image view is to be used with a sampler which supports
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
--- an /identically defined object/ of type
--- 'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion' to that used to
--- create the sampler /must/ be passed to 'createImageView' in a
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
--- included in the @pNext@ chain of 'ImageViewCreateInfo'. Conversely, if a
--- 'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion' object is passed
--- to 'createImageView', an identically defined
--- 'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion' object /must/ be
--- used when sampling the image.
---
--- If the image has a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
--- @format@ and @subresourceRange.aspectMask@ is
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
--- @format@ /must/ be identical to the image @format@, and the sampler to
--- be used with the image view /must/ enable
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
---
--- If @image@ was created with the
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
--- and the image has a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
--- @format@, and if @subresourceRange.aspectMask@ is
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
--- or
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT',
--- @format@ /must/ be
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes compatible>
--- with the corresponding plane of the image, and the sampler to be used
--- with the image view /must/ not enable
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
--- The @width@ and @height@ of the single-plane image view /must/ be
--- derived from the multi-planar image’s dimensions in the manner listed
--- for
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes plane compatibility>
--- for the plane.
---
--- Any view of an image plane will have the same mapping between texel
--- coordinates and memory locations as used by the channels of the color
--- aspect, subject to the formulae relating texel coordinates to
--- lower-resolution planes as described in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction Chroma Reconstruction>.
--- That is, if an R or B plane has a reduced resolution relative to the G
--- plane of the multi-planar image, the image view operates using the
--- (/uplane/, /vplane/) unnormalized coordinates of the reduced-resolution
--- plane, and these coordinates access the same memory locations as the
--- (/ucolor/, /vcolor/) unnormalized coordinates of the color aspect for
--- which chroma reconstruction operations operate on the same (/uplane/,
--- /vplane/) or (/iplane/, /jplane/) coordinates.
---
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | Dim,     | Image parameters                                                                        | View parameters                                                         |
--- | Arrayed, |                                                                                         |                                                                         |
--- | MS       |                                                                                         |                                                                         |
--- +==========+=========================================================================================+=========================================================================+
--- |          | @imageType@ = ci.@imageType@                                                            | @baseArrayLayer@, @layerCount@, and @levelCount@ are members of the     |
--- |          | @width@ = ci.@extent.width@                                                             | @subresourceRange@ member.                                              |
--- |          | @height@ = ci.@extent.height@                                                           |                                                                         |
--- |          | @depth@ = ci.@extent.depth@                                                             |                                                                         |
--- |          | @arrayLayers@ = ci.@arrayLayers@                                                        |                                                                         |
--- |          | @samples@ = ci.@samples@                                                                |                                                                         |
--- |          | @flags@ = ci.@flags@                                                                    |                                                                         |
--- |          | where ci is the 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' used to create @image@.  |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __1D, 0, | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'                    | @viewType@ =                                                            |
--- | 0__      | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D'         |
--- |          | @height@ = 1                                                                            | @baseArrayLayer@ ≥ 0                                                    |
--- |          | @depth@ = 1                                                                             | @layerCount@ = 1                                                        |
--- |          | @arrayLayers@ ≥ 1                                                                       |                                                                         |
--- |          | @samples@ = 1                                                                           |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __1D, 1, | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'                    | @viewType@ =                                                            |
--- | 0__      | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY'   |
--- |          | @height@ = 1                                                                            | @baseArrayLayer@ ≥ 0                                                    |
--- |          | @depth@ = 1                                                                             | @layerCount@ ≥ 1                                                        |
--- |          | @arrayLayers@ ≥ 1                                                                       |                                                                         |
--- |          | @samples@ = 1                                                                           |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __2D, 0, | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                            |
--- | 0__      | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         |
--- |          | @height@ ≥ 1                                                                            | @baseArrayLayer@ ≥ 0                                                    |
--- |          | @depth@ = 1                                                                             | @layerCount@ = 1                                                        |
--- |          | @arrayLayers@ ≥ 1                                                                       |                                                                         |
--- |          | @samples@ = 1                                                                           |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __2D, 1, | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                            |
--- | 0__      | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   |
--- |          | @height@ ≥ 1                                                                            | @baseArrayLayer@ ≥ 0                                                    |
--- |          | @depth@ = 1                                                                             | @layerCount@ ≥ 1                                                        |
--- |          | @arrayLayers@ ≥ 1                                                                       |                                                                         |
--- |          | @samples@ = 1                                                                           |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __2D, 0, | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                            |
--- | 1__      | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         |
--- |          | @height@ ≥ 1                                                                            | @baseArrayLayer@ ≥ 0                                                    |
--- |          | @depth@ = 1                                                                             | @layerCount@ = 1                                                        |
--- |          | @arrayLayers@ ≥ 1                                                                       |                                                                         |
--- |          | @samples@ > 1                                                                           |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __2D, 1, | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                            |
--- | 1__      | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   |
--- |          | @height@ ≥ 1                                                                            | @baseArrayLayer@ ≥ 0                                                    |
--- |          | @depth@ = 1                                                                             | @layerCount@ ≥ 1                                                        |
--- |          | @arrayLayers@ ≥ 1                                                                       |                                                                         |
--- |          | @samples@ > 1                                                                           |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __CUBE,  | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                            |
--- | 0, 0__   | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE'       |
--- |          | @height@ = @width@                                                                      | @baseArrayLayer@ ≥ 0                                                    |
--- |          | @depth@ = 1                                                                             | @layerCount@ = 6                                                        |
--- |          | @arrayLayers@ ≥ 6                                                                       |                                                                         |
--- |          | @samples@ = 1                                                                           |                                                                         |
--- |          | @flags@ includes                                                                        |                                                                         |
--- |          | 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'     |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __CUBE,  | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                            |
--- | 1, 0__   | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' |
--- |          | @height@ = width                                                                        | @baseArrayLayer@ ≥ 0                                                    |
--- |          | @depth@ = 1                                                                             | @layerCount@ = 6 × /N/, /N/ ≥ 1                                         |
--- |          | /N/ ≥ 1                                                                                 |                                                                         |
--- |          | @arrayLayers@ ≥ 6 × /N/                                                                 |                                                                         |
--- |          | @samples@ = 1                                                                           |                                                                         |
--- |          | @flags@ includes                                                                        |                                                                         |
--- |          | 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'     |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __3D, 0, | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'                    | @viewType@ =                                                            |
--- | 0__      | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D'         |
--- |          | @height@ ≥ 1                                                                            | @baseArrayLayer@ = 0                                                    |
--- |          | @depth@ ≥ 1                                                                             | @layerCount@ = 1                                                        |
--- |          | @arrayLayers@ = 1                                                                       |                                                                         |
--- |          | @samples@ = 1                                                                           |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __3D, 0, | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'                    | @viewType@ =                                                            |
--- | 0__      | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         |
--- |          | @height@ ≥ 1                                                                            | @levelCount@ = 1                                                        |
--- |          | @depth@ ≥ 1                                                                             | @baseArrayLayer@ ≥ 0                                                    |
--- |          | @arrayLayers@ = 1                                                                       | @layerCount@ = 1                                                        |
--- |          | @samples@ = 1                                                                           |                                                                         |
--- |          | @flags@ includes                                                                        |                                                                         |
--- |          | 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' |                                                                         |
--- |          | @flags@ does not include                                                                |                                                                         |
--- |          | 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',     |                                                                         |
--- |          | 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',   |                                                                         |
--- |          | and 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'  |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
--- | __3D, 0, | @imageType@ = 'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'                    | @viewType@ =                                                            |
--- | 0__      | @width@ ≥ 1                                                                             | 'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   |
--- |          | @height@ ≥ 1                                                                            | @levelCount@ = 1                                                        |
--- |          | @depth@ ≥ 1                                                                             | @baseArrayLayer@ ≥ 0                                                    |
--- |          | @arrayLayers@ = 1                                                                       | @layerCount@ ≥ 1                                                        |
--- |          | @samples@ = 1                                                                           |                                                                         |
--- |          | @flags@ includes                                                                        |                                                                         |
--- |          | 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' |                                                                         |
--- |          | @flags@ does not include                                                                |                                                                         |
--- |          | 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',     |                                                                         |
--- |          | 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',   |                                                                         |
--- |          | and 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'  |                                                                         |
--- +----------+-----------------------------------------------------------------------------------------+-------------------------------------------------------------------------+
---
--- Image and image view parameter compatibility requirements
---
--- == Valid Usage
---
--- -   If @image@ was not created with
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
---     then @viewType@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE' or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-imageCubeArray image cubemap arrays>
---     feature is not enabled, @viewType@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
---
--- -   If @image@ was created with
---     'Graphics.Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' but without
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
---     set then @viewType@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---
--- -   @image@ /must/ have been created with a @usage@ value containing at
---     least one of
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT'
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     of the resultant image view /must/ contain at least one bit
---
--- -   If @usage@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT',
---     then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     of the resultant image view /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT'
---
--- -   If @usage@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT',
---     then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_BIT'
---
--- -   If @usage@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
---     then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
---
--- -   If @usage@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
---     then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If @usage@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
---     then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain at least one of
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@
---     specified in 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when
---     @image@ was created
---
--- -   If @subresourceRange.levelCount@ is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS',
---     @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@
---     /must/ be less than or equal to the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   If @image@ was created with @usage@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',
---     @subresourceRange.levelCount@ /must/ be @1@
---
--- -   If @image@ is not a 3D image created with
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
---     set, or @viewType@ is not
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY',
---     @subresourceRange.baseArrayLayer@ /must/ be less than the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   If @subresourceRange.layerCount@ is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS',
---     @image@ is not a 3D image created with
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
---     set, or @viewType@ is not
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY',
---     @subresourceRange.layerCount@ /must/ be non-zero and
---     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
---     /must/ be less than or equal to the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   If @image@ is a 3D image created with
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
---     set, and @viewType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY',
---     @subresourceRange.baseArrayLayer@ /must/ be less than the depth
---     computed from @baseMipLevel@ and @extent.depth@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created, according to the formula defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-miplevel-sizing Image Miplevel Sizing>
---
--- -   If @subresourceRange.layerCount@ is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS',
---     @image@ is a 3D image created with
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
---     set, and @viewType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY',
---     @subresourceRange.layerCount@ /must/ be non-zero and
---     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
---     /must/ be less than or equal to the depth computed from
---     @baseMipLevel@ and @extent.depth@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created, according to the formula defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-miplevel-sizing Image Miplevel Sizing>
---
--- -   If @image@ was created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
---     flag, but without the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'
---     flag, and if the @format@ of the @image@ is not a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
---     format, @format@ /must/ be compatible with the @format@ used to
---     create @image@, as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility-classes Format Compatibility Classes>
---
--- -   If @image@ was created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'
---     flag, @format@ /must/ be compatible with, or /must/ be an
---     uncompressed format that is size-compatible with, the @format@ used
---     to create @image@
---
--- -   If @image@ was created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'
---     flag, the @levelCount@ and @layerCount@ members of
---     @subresourceRange@ /must/ both be @1@
---
--- -   If a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
---     structure was included in the @pNext@ chain of the
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' structure used when
---     creating @image@ and the @viewFormatCount@ field of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
---     is not zero then @format@ /must/ be one of the formats in
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@pViewFormats@
---
--- -   If @image@ was created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
---     flag, if the @format@ of the @image@ is a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
---     format, and if @subresourceRange.aspectMask@ is one of
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT',
---     then @format@ /must/ be compatible with the
---     'Graphics.Vulkan.Core10.Enums.Format.Format' for the plane of the
---     @image@ @format@ indicated by @subresourceRange.aspectMask@, as
---     defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>
---
--- -   If @image@ was not created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
---     flag, or if the @format@ of the @image@ is a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
---     format and if @subresourceRange.aspectMask@ is
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
---     @format@ /must/ be identical to the @format@ used to create @image@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
---     structure with a @conversion@ value other than
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', all members of
---     @components@ /must/ have the value
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
---
--- -   If @image@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @subresourceRange@ and @viewType@ /must/ be compatible with the
---     image, as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-compatibility compatibility table>
---
--- -   If @image@ has an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>,
---     @format@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
---
--- -   If @image@ has an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>,
---     the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
---     structure with a @conversion@ object created with the same external
---     format as @image@
---
--- -   If @image@ has an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>,
---     all members of @components@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
---
--- -   If @image@ was created with @usage@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
---     @viewType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---
--- -   If @image@ was created with @usage@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
---     @format@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'
---
--- -   If
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentdensitymapdynamic dynamic fragment density map>
---     feature is not enabled, @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT'
---
--- -   If
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentdensitymapdynamic dynamic fragment density map>
---     feature is not enabled and @image@ was created with @usage@
---     containing
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',
---     @flags@ /must/ not contain any of
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
---     structure, and @image@ was not created with a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure included in the @pNext@ chain of
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo', its @usage@ member
---     /must/ not include any bits that were not set in the @usage@ member
---     of the 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' structure used
---     to create @image@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
---     structure, @image@ was created with a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure included in the @pNext@ chain of
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo', and
---     @subResourceRange.aspectMask@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
---     the @usage@ member of the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
---     instance /must/ not include any bits that were not set in the
---     @usage@ member of the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure used to create @image@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
---     structure, @image@ was created with a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
---     structure included in the @pNext@ chain of
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo', and
---     @subResourceRange.aspectMask@ includes bits other than
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
---     the @usage@ member of the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
---     structure /must/ not include any bits that were not set in the
---     @usage@ member of the 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'
---     structure used to create @image@
---
--- -   If @viewType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE'
---     and @subresourceRange.layerCount@ is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS',
---     @subresourceRange.layerCount@ /must/ be @6@
---
--- -   If @viewType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
---     and @subresourceRange.layerCount@ is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS',
---     @subresourceRange.layerCount@ /must/ be a multiple of @6@
---
--- -   If @viewType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE'
---     and @subresourceRange.layerCount@ is
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', the
---     remaining number of layers /must/ be @6@
---
--- -   If @viewType@ is
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
---     and @subresourceRange.layerCount@ is
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', the
---     remaining number of layers /must/ be a multiple of @6@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode.ImageViewASTCDecodeModeEXT',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo',
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits.ImageViewCreateFlagBits'
---     values
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @viewType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' value
---
--- -   @format@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- -   @components@ /must/ be a valid 'ComponentMapping' structure
---
--- -   @subresourceRange@ /must/ be a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange' structure
---
--- = See Also
---
--- 'ComponentMapping', 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange',
--- 'Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits.ImageViewCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createImageView'
-data ImageViewCreateInfo (es :: [Type]) = ImageViewCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits.ImageViewCreateFlagBits'
-    -- describing additional parameters of the image view.
-    flags :: ImageViewCreateFlags
-  , -- | @image@ is a 'Graphics.Vulkan.Core10.Handles.Image' on which the view
-    -- will be created.
-    image :: Image
-  , -- | @viewType@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' value
-    -- specifying the type of the image view.
-    viewType :: ImageViewType
-  , -- | @format@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format' describing
-    -- the format and type used to interpret texel blocks in the image.
-    format :: Format
-  , -- | @components@ is a 'ComponentMapping' specifies a remapping of color
-    -- components (or of depth or stencil components after they have been
-    -- converted into color components).
-    components :: ComponentMapping
-  , -- | @subresourceRange@ is a
-    -- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange' selecting the
-    -- set of mipmap levels and array layers to be accessible to the view.
-    subresourceRange :: ImageSubresourceRange
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (ImageViewCreateInfo es)
-
-instance Extensible ImageViewCreateInfo where
-  extensibleType = STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext ImageViewCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageViewCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @ImageViewASTCDecodeModeEXT = Just f
-    | Just Refl <- eqT @e @SamplerYcbcrConversionInfo = Just f
-    | Just Refl <- eqT @e @ImageViewUsageCreateInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (ImageViewCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 80 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageViewCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr ImageViewCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Image)) (image)
-    lift $ poke ((p `plusPtr` 32 :: Ptr ImageViewType)) (viewType)
-    lift $ poke ((p `plusPtr` 36 :: Ptr Format)) (format)
-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ComponentMapping)) (components) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr ImageSubresourceRange)) (subresourceRange) . ($ ())
-    lift $ f
-  cStructSize = 80
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 24 :: Ptr Image)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr ImageViewType)) (zero)
-    lift $ poke ((p `plusPtr` 36 :: Ptr Format)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ComponentMapping)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr ImageSubresourceRange)) (zero) . ($ ())
-    lift $ f
-
-instance PeekChain es => FromCStruct (ImageViewCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @ImageViewCreateFlags ((p `plusPtr` 16 :: Ptr ImageViewCreateFlags))
-    image <- peek @Image ((p `plusPtr` 24 :: Ptr Image))
-    viewType <- peek @ImageViewType ((p `plusPtr` 32 :: Ptr ImageViewType))
-    format <- peek @Format ((p `plusPtr` 36 :: Ptr Format))
-    components <- peekCStruct @ComponentMapping ((p `plusPtr` 40 :: Ptr ComponentMapping))
-    subresourceRange <- peekCStruct @ImageSubresourceRange ((p `plusPtr` 56 :: Ptr ImageSubresourceRange))
-    pure $ ImageViewCreateInfo
-             next flags image viewType format components subresourceRange
-
-instance es ~ '[] => Zero (ImageViewCreateInfo es) where
-  zero = ImageViewCreateInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/ImageView.hs-boot b/src/Graphics/Vulkan/Core10/ImageView.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/ImageView.hs-boot
+++ /dev/null
@@ -1,27 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.ImageView  ( ComponentMapping
-                                         , ImageViewCreateInfo
-                                         ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ComponentMapping
-
-instance ToCStruct ComponentMapping
-instance Show ComponentMapping
-
-instance FromCStruct ComponentMapping
-
-
-type role ImageViewCreateInfo nominal
-data ImageViewCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (ImageViewCreateInfo es)
-instance Show (Chain es) => Show (ImageViewCreateInfo es)
-
-instance PeekChain es => FromCStruct (ImageViewCreateInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/LayerDiscovery.hs b/src/Graphics/Vulkan/Core10/LayerDiscovery.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/LayerDiscovery.hs
+++ /dev/null
@@ -1,289 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.LayerDiscovery  ( enumerateInstanceLayerProperties
-                                              , enumerateDeviceLayerProperties
-                                              , LayerProperties(..)
-                                              ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (castFunPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.ByteString (packCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Ptr (Ptr(Ptr))
-import Data.Word (Word32)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Dynamic (getInstanceProcAddr')
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkEnumerateDeviceLayerProperties))
-import Graphics.Vulkan.Core10.APIConstants (MAX_DESCRIPTION_SIZE)
-import Graphics.Vulkan.Core10.APIConstants (MAX_EXTENSION_NAME_SIZE)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkEnumerateInstanceLayerProperties
-  :: FunPtr (Ptr Word32 -> Ptr LayerProperties -> IO Result) -> Ptr Word32 -> Ptr LayerProperties -> IO Result
-
--- | vkEnumerateInstanceLayerProperties - Returns up to requested number of
--- global layer properties
---
--- = 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
---     'LayerProperties' structures.
---
--- = 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,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.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
--- 'enumerateInstanceLayerProperties' 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@ 'LayerProperties' structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'LayerProperties'
-enumerateInstanceLayerProperties :: forall io . MonadIO io => io (Result, ("properties" ::: Vector LayerProperties))
-enumerateInstanceLayerProperties  = liftIO . evalContT $ do
-  vkEnumerateInstanceLayerProperties' <- lift $ mkVkEnumerateInstanceLayerProperties . castFunPtr @_ @(("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr LayerProperties) -> IO Result) <$> getInstanceProcAddr' nullPtr (Ptr "vkEnumerateInstanceLayerProperties"#)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkEnumerateInstanceLayerProperties' (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @LayerProperties ((fromIntegral (pPropertyCount)) * 520)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 520) :: Ptr LayerProperties) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkEnumerateInstanceLayerProperties' (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @LayerProperties (((pPProperties) `advancePtrBytes` (520 * (i)) :: Ptr LayerProperties)))
-  pure $ ((r'), pProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkEnumerateDeviceLayerProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr LayerProperties -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr LayerProperties -> IO Result
-
--- | vkEnumerateDeviceLayerProperties - Returns properties of available
--- physical device layers
---
--- = 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
---     'LayerProperties' structures.
---
--- = 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,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS', to indicate
--- that not all the available layer properties were returned.
---
--- The list of layers enumerated by 'enumerateDeviceLayerProperties' /must/
--- be exactly the sequence of layers enabled for the instance. The members
--- of 'LayerProperties' for each enumerated layer /must/ be the same as the
--- properties when the layer was enumerated by
--- 'enumerateInstanceLayerProperties'.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' 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@ 'LayerProperties' structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'LayerProperties', 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-enumerateDeviceLayerProperties :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector LayerProperties))
-enumerateDeviceLayerProperties physicalDevice = liftIO . evalContT $ do
-  let vkEnumerateDeviceLayerProperties' = mkVkEnumerateDeviceLayerProperties (pVkEnumerateDeviceLayerProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkEnumerateDeviceLayerProperties' physicalDevice' (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @LayerProperties ((fromIntegral (pPropertyCount)) * 520)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 520) :: Ptr LayerProperties) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkEnumerateDeviceLayerProperties' physicalDevice' (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @LayerProperties (((pPProperties) `advancePtrBytes` (520 * (i)) :: Ptr LayerProperties)))
-  pure $ ((r'), pProperties')
-
-
--- | VkLayerProperties - Structure specifying layer properties
---
--- = See Also
---
--- 'enumerateDeviceLayerProperties', 'enumerateInstanceLayerProperties'
-data LayerProperties = LayerProperties
-  { -- | @layerName@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_EXTENSION_NAME_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which is the name of the
-    -- layer. Use this name in the @ppEnabledLayerNames@ array passed in the
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.InstanceCreateInfo'
-    -- structure to enable this layer for an instance.
-    layerName :: ByteString
-  , -- | @specVersion@ is the Vulkan version the layer was written to, encoded as
-    -- described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.
-    specVersion :: Word32
-  , -- | @implementationVersion@ is the version of this layer. It is an integer,
-    -- increasing with backward compatible changes.
-    implementationVersion :: Word32
-  , -- | @description@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which provides additional
-    -- details that /can/ be used by the application to identify the layer.
-    description :: ByteString
-  }
-  deriving (Typeable)
-deriving instance Show LayerProperties
-
-instance ToCStruct LayerProperties where
-  withCStruct x f = allocaBytesAligned 520 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p LayerProperties{..} f = do
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (layerName)
-    poke ((p `plusPtr` 256 :: Ptr Word32)) (specVersion)
-    poke ((p `plusPtr` 260 :: Ptr Word32)) (implementationVersion)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 264 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
-    f
-  cStructSize = 520
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (mempty)
-    poke ((p `plusPtr` 256 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 260 :: Ptr Word32)) (zero)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 264 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    f
-
-instance FromCStruct LayerProperties where
-  peekCStruct p = do
-    layerName <- packCString (lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))))
-    specVersion <- peek @Word32 ((p `plusPtr` 256 :: Ptr Word32))
-    implementationVersion <- peek @Word32 ((p `plusPtr` 260 :: Ptr Word32))
-    description <- packCString (lowerArrayPtr ((p `plusPtr` 264 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    pure $ LayerProperties
-             layerName specVersion implementationVersion description
-
-instance Storable LayerProperties where
-  sizeOf ~_ = 520
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero LayerProperties where
-  zero = LayerProperties
-           mempty
-           zero
-           zero
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core10/LayerDiscovery.hs-boot b/src/Graphics/Vulkan/Core10/LayerDiscovery.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/LayerDiscovery.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.LayerDiscovery  (LayerProperties) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data LayerProperties
-
-instance ToCStruct LayerProperties
-instance Show LayerProperties
-
-instance FromCStruct LayerProperties
-
diff --git a/src/Graphics/Vulkan/Core10/Memory.hs b/src/Graphics/Vulkan/Core10/Memory.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Memory.hs
+++ /dev/null
@@ -1,1233 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Memory  ( allocateMemory
-                                      , withMemory
-                                      , freeMemory
-                                      , mapMemory
-                                      , withMappedMemory
-                                      , unmapMemory
-                                      , flushMappedMemoryRanges
-                                      , invalidateMappedMemoryRanges
-                                      , getDeviceMemoryCommitment
-                                      , MemoryAllocateInfo(..)
-                                      , MappedMemoryRange(..)
-                                      ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationMemoryAllocateInfoNV)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkAllocateMemory))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkFlushMappedMemoryRanges))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkFreeMemory))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeviceMemoryCommitment))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkInvalidateMappedMemoryRanges))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkMapMemory))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkUnmapMemory))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.Core10.Handles (DeviceMemory(..))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExportMemoryAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory (ExportMemoryAllocateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32 (ExportMemoryWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory_win32 (ExportMemoryWin32HandleInfoNV)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (ImportAndroidHardwareBufferInfoANDROID)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd (ImportMemoryFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_external_memory_host (ImportMemoryHostPointerInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32 (ImportMemoryWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory_win32 (ImportMemoryWin32HandleInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (MemoryAllocateFlagsInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedAllocateInfo)
-import Graphics.Vulkan.Core10.Enums.MemoryMapFlags (MemoryMapFlags)
-import Graphics.Vulkan.Core10.Enums.MemoryMapFlags (MemoryMapFlags(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (MemoryOpaqueCaptureAddressAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_memory_priority (MemoryPriorityAllocateInfoEXT)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MAPPED_MEMORY_RANGE))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkAllocateMemory
-  :: FunPtr (Ptr Device_T -> Ptr (MemoryAllocateInfo a) -> Ptr AllocationCallbacks -> Ptr DeviceMemory -> IO Result) -> Ptr Device_T -> Ptr (MemoryAllocateInfo a) -> Ptr AllocationCallbacks -> Ptr DeviceMemory -> IO Result
-
--- | vkAllocateMemory - Allocate device memory
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the memory.
---
--- -   @pAllocateInfo@ is a pointer to a 'MemoryAllocateInfo' 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pMemory@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle in which
---     information about the allocated memory is returned.
---
--- = Description
---
--- Allocations returned by 'allocateMemory' 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 with the following
--- constraint:
---
--- -   The contents of unprotected memory /must/ not be a function of data
---     protected memory objects, even if those memory objects were
---     previously freed.
---
--- Note
---
--- The contents of memory allocated by one application /should/ not be a
--- function of data from protected memory objects of another application,
--- even if those memory objects were previously freed.
---
--- The maximum number of valid memory allocations that /can/ exist
--- simultaneously within a 'Graphics.Vulkan.Core10.Handles.Device' /may/ be
--- restricted by implementation- or platform-dependent limits. If a call to
--- 'allocateMemory' would cause the total number of allocations to exceed
--- these limits, such a call will fail and /must/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'. The
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY' /must/
--- be returned. This limit is advertised in
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties'::@maxMemoryAllocationSize@.
---
--- The cumulative memory size allocated to a heap /can/ be limited by the
--- size of the specified heap. In such cases, allocated memory is tracked
--- on a per-device and per-heap basis. Some platforms allow overallocation
--- into other heaps. The overallocation behavior /can/ be specified through
--- the @VK_AMD_memory_overallocation_behavior@ extension.
---
--- == Valid Usage
---
--- -   @pAllocateInfo->allocationSize@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryHeaps@[memindex].size
---     where @memindex@ =
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryTypes@[pAllocateInfo->memoryTypeIndex].heapIndex
---     as returned by
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties'
---     for the 'Graphics.Vulkan.Core10.Handles.PhysicalDevice' that
---     @device@ was created from
---
--- -   @pAllocateInfo->memoryTypeIndex@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryTypeCount@
---     as returned by
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties'
---     for the 'Graphics.Vulkan.Core10.Handles.PhysicalDevice' that
---     @device@ was created from
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceCoherentMemory deviceCoherentMemory>
---     feature is not enabled, @pAllocateInfo->memoryTypeIndex@ /must/ not
---     identify a memory type supporting
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pAllocateInfo@ /must/ be a valid pointer to a valid
---     'MemoryAllocateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pMemory@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
---
---     -   'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory', 'MemoryAllocateInfo'
-allocateMemory :: forall a io . (PokeChain a, MonadIO io) => Device -> MemoryAllocateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DeviceMemory)
-allocateMemory device allocateInfo allocator = liftIO . evalContT $ do
-  let vkAllocateMemory' = mkVkAllocateMemory (pVkAllocateMemory (deviceCmds (device :: Device)))
-  pAllocateInfo <- ContT $ withCStruct (allocateInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPMemory <- ContT $ bracket (callocBytes @DeviceMemory 8) free
-  r <- lift $ vkAllocateMemory' (deviceHandle (device)) pAllocateInfo pAllocator (pPMemory)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pMemory <- lift $ peek @DeviceMemory pPMemory
-  pure $ (pMemory)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'allocateMemory' and 'freeMemory'
---
--- To ensure that 'freeMemory' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withMemory :: forall a io r . (PokeChain a, MonadIO io) => (io (DeviceMemory) -> ((DeviceMemory) -> io ()) -> r) -> Device -> MemoryAllocateInfo a -> Maybe AllocationCallbacks -> r
-withMemory b device pAllocateInfo pAllocator =
-  b (allocateMemory device pAllocateInfo pAllocator)
-    (\(o0) -> freeMemory device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkFreeMemory
-  :: FunPtr (Ptr Device_T -> DeviceMemory -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DeviceMemory -> Ptr AllocationCallbacks -> IO ()
-
--- | vkFreeMemory - Free device memory
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the memory.
---
--- -   @memory@ is the 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---     to be freed.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- = 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/. Memory /can/ be freed whilst still bound to
--- resources, but those resources /must/ not be used afterwards. 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @memory@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @memory@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory'
-freeMemory :: forall io . MonadIO io => Device -> DeviceMemory -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-freeMemory device memory allocator = liftIO . evalContT $ do
-  let vkFreeMemory' = mkVkFreeMemory (pVkFreeMemory (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkFreeMemory' (deviceHandle (device)) (memory) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkMapMemory
-  :: FunPtr (Ptr Device_T -> DeviceMemory -> DeviceSize -> DeviceSize -> MemoryMapFlags -> Ptr (Ptr ()) -> IO Result) -> Ptr Device_T -> DeviceMemory -> DeviceSize -> DeviceSize -> MemoryMapFlags -> Ptr (Ptr ()) -> IO Result
-
--- | vkMapMemory - Map a memory object into application address space
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the memory.
---
--- -   @memory@ is the 'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE' to map from
---     @offset@ to the end of the allocation.
---
--- -   @flags@ is reserved for future use.
---
--- -   @ppData@ is a pointer to a @void *@ variable 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.PhysicalDeviceLimits'::@minMemoryMapAlignment@.
---
--- = Description
---
--- After a successful call to 'mapMemory' the memory object @memory@ is
--- considered to be currently /host mapped/.
---
--- Note
---
--- It is an application error to call 'mapMemory' on a memory object that
--- is already /host mapped/.
---
--- Note
---
--- 'mapMemory' 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,
--- 'mapMemory' /must/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.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
--- 'unmapMemory'.
---
--- 'mapMemory' 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-host-writes here>
--- for details on fulfilling such a guarantee). If the device memory was
--- allocated without the
--- 'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.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.PhysicalDeviceLimits'::@nonCoherentAtomSize@,
--- and round the end of the range up to the nearest multiple of
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@.
---
--- While a range of device memory is host mapped, 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization Synchronization and Cache Control>
--- as they are crucial to maintaining memory access ordering.
---
--- == Valid Usage
---
--- -   @memory@ /must/ not be currently host mapped
---
--- -   @offset@ /must/ be less than the size of @memory@
---
--- -   If @size@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be
---     greater than @0@
---
--- -   If @size@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be
---     less than or equal to the size of the @memory@ minus @offset@
---
--- -   @memory@ /must/ have been created with a memory type that reports
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
---
--- -   @memory@ /must/ not have been allocated with multiple instances
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @memory@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_MEMORY_MAP_FAILED'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.MemoryMapFlags.MemoryMapFlags'
-mapMemory :: forall io . MonadIO io => Device -> DeviceMemory -> ("offset" ::: DeviceSize) -> DeviceSize -> MemoryMapFlags -> io (("data" ::: Ptr ()))
-mapMemory device memory offset size flags = liftIO . evalContT $ do
-  let vkMapMemory' = mkVkMapMemory (pVkMapMemory (deviceCmds (device :: Device)))
-  pPpData <- ContT $ bracket (callocBytes @(Ptr ()) 8) free
-  r <- lift $ vkMapMemory' (deviceHandle (device)) (memory) (offset) (size) (flags) (pPpData)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  ppData <- lift $ peek @(Ptr ()) pPpData
-  pure $ (ppData)
-
--- | A convenience wrapper to make a compatible pair of calls to 'mapMemory'
--- and 'unmapMemory'
---
--- To ensure that 'unmapMemory' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withMappedMemory :: forall io r . MonadIO io => (io (Ptr ()) -> ((Ptr ()) -> io ()) -> r) -> Device -> DeviceMemory -> DeviceSize -> DeviceSize -> MemoryMapFlags -> r
-withMappedMemory b device memory offset size flags =
-  b (mapMemory device memory offset size flags)
-    (\(_) -> unmapMemory device memory)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkUnmapMemory
-  :: FunPtr (Ptr Device_T -> DeviceMemory -> IO ()) -> Ptr Device_T -> DeviceMemory -> IO ()
-
--- | vkUnmapMemory - Unmap a previously mapped memory object
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the memory.
---
--- -   @memory@ is the memory object to be unmapped.
---
--- == Valid Usage
---
--- -   @memory@ /must/ be currently host mapped
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @memory@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- -   @memory@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- == Host Synchronization
---
--- -   Host access to @memory@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory'
-unmapMemory :: forall io . MonadIO io => Device -> DeviceMemory -> io ()
-unmapMemory device memory = liftIO $ do
-  let vkUnmapMemory' = mkVkUnmapMemory (pVkUnmapMemory (deviceCmds (device :: Device)))
-  vkUnmapMemory' (deviceHandle (device)) (memory)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkFlushMappedMemoryRanges
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr MappedMemoryRange -> IO Result) -> Ptr Device_T -> Word32 -> Ptr MappedMemoryRange -> IO Result
-
--- | vkFlushMappedMemoryRanges - Flush mapped memory ranges
---
--- = 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 'MappedMemoryRange'
---     structures describing the memory ranges to flush.
---
--- = Description
---
--- 'flushMappedMemoryRanges' guarantees that host writes to the memory
--- ranges described by @pMemoryRanges@ are made available to the host
--- memory domain, such that they /can/ be made available to the device
--- memory domain via
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-available-and-visible memory domain operations>
--- using the
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_HOST_WRITE_BIT'
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 host 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 host 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).
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'MappedMemoryRange'
-flushMappedMemoryRanges :: forall io . MonadIO io => Device -> ("memoryRanges" ::: Vector MappedMemoryRange) -> io ()
-flushMappedMemoryRanges device memoryRanges = liftIO . evalContT $ do
-  let vkFlushMappedMemoryRanges' = mkVkFlushMappedMemoryRanges (pVkFlushMappedMemoryRanges (deviceCmds (device :: Device)))
-  pPMemoryRanges <- ContT $ allocaBytesAligned @MappedMemoryRange ((Data.Vector.length (memoryRanges)) * 40) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryRanges `plusPtr` (40 * (i)) :: Ptr MappedMemoryRange) (e) . ($ ())) (memoryRanges)
-  r <- lift $ vkFlushMappedMemoryRanges' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (memoryRanges)) :: Word32)) (pPMemoryRanges)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkInvalidateMappedMemoryRanges
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr MappedMemoryRange -> IO Result) -> Ptr Device_T -> Word32 -> Ptr MappedMemoryRange -> IO Result
-
--- | vkInvalidateMappedMemoryRanges - Invalidate ranges of mapped memory
--- objects
---
--- = 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 'MappedMemoryRange'
---     structures describing the memory ranges to invalidate.
---
--- = Description
---
--- 'invalidateMappedMemoryRanges' guarantees that device writes to the
--- memory ranges described by @pMemoryRanges@, which have been made
--- available to the host memory domain using the
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_HOST_WRITE_BIT' and
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_HOST_READ_BIT'
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 host mapped,
--- or the last time it was invalidated.
---
--- Note
---
--- Mapping non-coherent memory does not implicitly invalidate that memory.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'MappedMemoryRange'
-invalidateMappedMemoryRanges :: forall io . MonadIO io => Device -> ("memoryRanges" ::: Vector MappedMemoryRange) -> io ()
-invalidateMappedMemoryRanges device memoryRanges = liftIO . evalContT $ do
-  let vkInvalidateMappedMemoryRanges' = mkVkInvalidateMappedMemoryRanges (pVkInvalidateMappedMemoryRanges (deviceCmds (device :: Device)))
-  pPMemoryRanges <- ContT $ allocaBytesAligned @MappedMemoryRange ((Data.Vector.length (memoryRanges)) * 40) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryRanges `plusPtr` (40 * (i)) :: Ptr MappedMemoryRange) (e) . ($ ())) (memoryRanges)
-  r <- lift $ vkInvalidateMappedMemoryRanges' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (memoryRanges)) :: Word32)) (pPMemoryRanges)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceMemoryCommitment
-  :: FunPtr (Ptr Device_T -> DeviceMemory -> Ptr DeviceSize -> IO ()) -> Ptr Device_T -> DeviceMemory -> Ptr DeviceSize -> IO ()
-
--- | vkGetDeviceMemoryCommitment - Query the current commitment for a
--- VkDeviceMemory
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the memory.
---
--- -   @memory@ is the memory object being queried.
---
--- -   @pCommittedMemoryInBytes@ is a pointer to a
---     'Graphics.Vulkan.Core10.BaseType.DeviceSize' value in which the
---     number of bytes currently committed is returned, on success.
---
--- = 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 (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-getDeviceMemoryCommitment :: forall io . MonadIO io => Device -> DeviceMemory -> io (("committedMemoryInBytes" ::: DeviceSize))
-getDeviceMemoryCommitment device memory = liftIO . evalContT $ do
-  let vkGetDeviceMemoryCommitment' = mkVkGetDeviceMemoryCommitment (pVkGetDeviceMemoryCommitment (deviceCmds (device :: Device)))
-  pPCommittedMemoryInBytes <- ContT $ bracket (callocBytes @DeviceSize 8) free
-  lift $ vkGetDeviceMemoryCommitment' (deviceHandle (device)) (memory) (pPCommittedMemoryInBytes)
-  pCommittedMemoryInBytes <- lift $ peek @DeviceSize pPCommittedMemoryInBytes
-  pure $ (pCommittedMemoryInBytes)
-
-
--- | VkMemoryAllocateInfo - Structure containing parameters of a memory
--- allocation
---
--- = Description
---
--- A 'MemoryAllocateInfo' structure defines a memory import operation if
--- its @pNext@ chain includes one of the following structures:
---
--- -   'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR'
---     with non-zero @handleType@ value
---
--- -   'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.ImportMemoryFdInfoKHR'
---     with a non-zero @handleType@ value
---
--- -   'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT'
---     with a non-zero @handleType@ value
---
--- -   'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
---     with a non-@NULL@ @buffer@ value
---
--- Importing memory /must/ not modify the content of the memory.
--- Implementations /must/ ensure that importing memory does not enable the
--- importing Vulkan instance to access any memory or resources in other
--- Vulkan instances other than that corresponding to the memory object
--- imported. Implementations /must/ also ensure accessing imported memory
--- which has not been initialized does not allow the importing Vulkan
--- instance to obtain data from the exporting Vulkan instance or
--- vice-versa.
---
--- Note
---
--- How exported and imported memory is isolated is left to the
--- implementation, but applications should be aware that such isolation
--- /may/ prevent implementations from placing multiple exportable memory
--- objects in the same physical or virtual page. Hence, applications
--- /should/ avoid creating many small external memory objects whenever
--- possible.
---
--- When performing a memory import operation, it is the responsibility of
--- the application to ensure the external handles meet all valid usage
--- requirements. However, implementations /must/ perform sufficient
--- validation of external handles to ensure that the operation results in a
--- valid memory object which will not cause program termination, device
--- loss, queue stalls, or corruption of other resources when used as
--- allowed according to its allocation parameters. If the external handle
--- provided does not meet these requirements, the implementation /must/
--- fail the memory import operation with the error code
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'.
---
--- == Valid Usage
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
---     structure, and any of the handle types specified in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
---     require a dedicated allocation, as reported by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---     in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'::@externalMemoryProperties.externalMemoryFeatures@
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'::@externalMemoryProperties.externalMemoryFeatures@,
---     the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     or
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'
---     structure with either its @image@ or @buffer@ member set to a value
---     other than 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'.
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
---     structure, it /must/ not include a
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory.ExportMemoryAllocateInfoNV'
---     or
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.ExportMemoryWin32HandleInfoNV'
---     structure
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR'
---     structure, it /must/ not include a
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.ImportMemoryWin32HandleInfoNV'
---     structure
---
--- -   If the parameters define an import operation, the external handle
---     specified was created by the Vulkan API, and the external handle
---     type is
---     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR',
---     then the values of @allocationSize@ and @memoryTypeIndex@ /must/
---     match those specified when the memory object being imported was
---     created
---
--- -   If the parameters define an import operation and the external handle
---     specified was created by the Vulkan API, the device mask specified
---     by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'
---     /must/ match that specified when the memory object being imported
---     was allocated
---
--- -   If the parameters define an import operation and the external handle
---     specified was created by the Vulkan API, the list of physical
---     devices that comprise the logical device passed to 'allocateMemory'
---     /must/ match the list of physical devices that comprise the logical
---     device on which the memory was originally allocated
---
--- -   If the parameters define an import operation and the external handle
---     is an NT handle or a global share handle created outside of the
---     Vulkan API, the value of @memoryTypeIndex@ /must/ be one of those
---     returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandlePropertiesKHR'
---
--- -   If the parameters define an import operation, the external handle
---     was created by the Vulkan API, and the external handle type is
---     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR'
---     or
---     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR',
---     then the values of @allocationSize@ and @memoryTypeIndex@ /must/
---     match those specified when the memory object being imported was
---     created
---
--- -   If the parameters define an import operation and the external handle
---     type is
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT',
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT',
---     @allocationSize@ /must/ match the size reported in the memory
---     requirements of the @image@ or @buffer@ member of the
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'
---     structure included in the @pNext@ chain
---
--- -   If the parameters define an import operation and the external handle
---     type is
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
---     @allocationSize@ /must/ match the size specified when creating the
---     Direct3D 12 heap from which the external handle was extracted
---
--- -   If the parameters define an import operation and the external handle
---     is a POSIX file descriptor created outside of the Vulkan API, the
---     value of @memoryTypeIndex@ /must/ be one of those returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdPropertiesKHR'
---
--- -   If the protected memory feature is not enabled, the
---     'MemoryAllocateInfo'::@memoryTypeIndex@ /must/ not indicate a memory
---     type that reports
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
---
--- -   If the parameters define an import operation and the external handle
---     is a host pointer, the value of @memoryTypeIndex@ /must/ be one of
---     those returned by
---     'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.getMemoryHostPointerPropertiesEXT'
---
--- -   If the parameters define an import operation and the external handle
---     is a host pointer, @allocationSize@ /must/ be an integer multiple of
---     'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT'::@minImportedHostPointerAlignment@
---
--- -   If the parameters define an import operation and the external handle
---     is a host pointer, the @pNext@ chain /must/ not include a
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'
---     structure with either its @image@ or @buffer@ field set to a value
---     other than 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If the parameters define an import operation and the external handle
---     is a host pointer, the @pNext@ chain /must/ not include a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure with either its @image@ or @buffer@ field set to a value
---     other than 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If the parameters define an import operation and the external handle
---     type is
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',
---     @allocationSize@ /must/ be the size returned by
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID'
---     for the Android hardware buffer
---
--- -   If the parameters define an import operation and the external handle
---     type is
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',
---     and the @pNext@ chain does not include a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', the Android
---     hardware buffer /must/ have a @AHardwareBuffer_Desc@::@format@ of
---     @AHARDWAREBUFFER_FORMAT_BLOB@ and a @AHardwareBuffer_Desc@::@usage@
---     that includes @AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER@
---
--- -   If the parameters define an import operation and the external handle
---     type is
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',
---     @memoryTypeIndex@ /must/ be one of those returned by
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID'
---     for the Android hardware buffer
---
--- -   If the parameters do not define an import operation, and the @pNext@
---     chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
---     structure with
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     included in its @handleTypes@ member, and the @pNext@ chain includes
---     a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure with @image@ not equal to
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', then
---     @allocationSize@ /must/ be @0@, otherwise @allocationSize@ /must/ be
---     greater than @0@
---
--- -   If the parameters define an import operation, the external handle is
---     an Android hardware buffer, and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     with @image@ that is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', the Android
---     hardware buffer’s
---     'Graphics.Vulkan.Extensions.WSITypes.AHardwareBuffer'::@usage@
---     /must/ include at least one of
---     @AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT@ or
---     @AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE@
---
--- -   If the parameters define an import operation, the external handle is
---     an Android hardware buffer, and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     with @image@ that is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', the format of
---     @image@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' or the format
---     returned by
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID'
---     in
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID'::@format@
---     for the Android hardware buffer
---
--- -   If the parameters define an import operation, the external handle is
---     an Android hardware buffer, and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure with @image@ that is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', the width,
---     height, and array layer dimensions of @image@ and the Android
---     hardware buffer’s @AHardwareBuffer_Desc@ /must/ be identical
---
--- -   If the parameters define an import operation, the external handle is
---     an Android hardware buffer, and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure with @image@ that is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', and the Android
---     hardware buffer’s
---     'Graphics.Vulkan.Extensions.WSITypes.AHardwareBuffer'::@usage@
---     includes @AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE@, the @image@
---     /must/ have a complete mipmap chain
---
--- -   If the parameters define an import operation, the external handle is
---     an Android hardware buffer, and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure with @image@ that is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', and the Android
---     hardware buffer’s
---     'Graphics.Vulkan.Extensions.WSITypes.AHardwareBuffer'::@usage@ does
---     not include @AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE@, the @image@
---     /must/ have exactly one mipmap level
---
--- -   If the parameters define an import operation, the external handle is
---     an Android hardware buffer, and the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure with @image@ that is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', each bit set in
---     the usage of @image@ /must/ be listed in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-usage AHardwareBuffer Usage Equivalence>,
---     and if there is a corresponding @AHARDWAREBUFFER_USAGE@ bit listed
---     that bit /must/ be included in the Android hardware buffer’s
---     @AHardwareBuffer_Desc@::@usage@
---
--- -   If
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@
---     is not zero,
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@flags@
---     /must/ include
---     'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
---
--- -   If
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@flags@
---     includes
---     'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT',
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressCaptureReplay bufferDeviceAddressCaptureReplay>
---     feature /must/ be enabled
---
--- -   If
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@flags@
---     includes
---     'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT',
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress>
---     feature /must/ be enabled
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT'
---     structure,
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@
---     /must/ be zero
---
--- -   If the parameters define an import operation,
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@
---     /must/ be zero
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo',
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory.ExportMemoryAllocateInfoNV',
---     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.ExportMemoryWin32HandleInfoKHR',
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.ExportMemoryWin32HandleInfoNV',
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID',
---     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.ImportMemoryFdInfoKHR',
---     'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT',
---     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR',
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.ImportMemoryWin32HandleInfoNV',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo',
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_memory_priority.MemoryPriorityAllocateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'allocateMemory'
-data MemoryAllocateInfo (es :: [Type]) = MemoryAllocateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @allocationSize@ is the size of the allocation in bytes
-    allocationSize :: DeviceSize
-  , -- | @memoryTypeIndex@ is an index identifying a memory type from the
-    -- @memoryTypes@ array of the
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'
-    -- structure
-    memoryTypeIndex :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (MemoryAllocateInfo es)
-
-instance Extensible MemoryAllocateInfo where
-  extensibleType = STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
-  setNext x next = x{next = next}
-  getNext MemoryAllocateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends MemoryAllocateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @MemoryOpaqueCaptureAddressAllocateInfo = Just f
-    | Just Refl <- eqT @e @MemoryPriorityAllocateInfoEXT = Just f
-    | Just Refl <- eqT @e @ImportAndroidHardwareBufferInfoANDROID = Just f
-    | Just Refl <- eqT @e @ImportMemoryHostPointerInfoEXT = Just f
-    | Just Refl <- eqT @e @MemoryDedicatedAllocateInfo = Just f
-    | Just Refl <- eqT @e @MemoryAllocateFlagsInfo = Just f
-    | Just Refl <- eqT @e @ImportMemoryFdInfoKHR = Just f
-    | Just Refl <- eqT @e @ExportMemoryWin32HandleInfoKHR = Just f
-    | Just Refl <- eqT @e @ImportMemoryWin32HandleInfoKHR = Just f
-    | Just Refl <- eqT @e @ExportMemoryAllocateInfo = Just f
-    | Just Refl <- eqT @e @ExportMemoryWin32HandleInfoNV = Just f
-    | Just Refl <- eqT @e @ImportMemoryWin32HandleInfoNV = Just f
-    | Just Refl <- eqT @e @ExportMemoryAllocateInfoNV = Just f
-    | Just Refl <- eqT @e @DedicatedAllocationMemoryAllocateInfoNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (MemoryAllocateInfo es) where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryAllocateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (allocationSize)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (memoryTypeIndex)
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (MemoryAllocateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    allocationSize <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    memoryTypeIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pure $ MemoryAllocateInfo
-             next allocationSize memoryTypeIndex
-
-instance es ~ '[] => Zero (MemoryAllocateInfo es) where
-  zero = MemoryAllocateInfo
-           ()
-           zero
-           zero
-
-
--- | VkMappedMemoryRange - Structure specifying a mapped memory range
---
--- == Valid Usage
---
--- -   @memory@ /must/ be currently host mapped
---
--- -   If @size@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @offset@ and
---     @size@ /must/ specify a range contained within the currently mapped
---     range of @memory@
---
--- -   If @size@ is equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @offset@ /must/ be
---     within the currently mapped range of @memory@
---
--- -   If @size@ is equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', the end of the
---     current mapping of @memory@ /must/ be a multiple of
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@
---     bytes from the beginning of the memory object
---
--- -   @offset@ /must/ be a multiple of
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@
---
--- -   If @size@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/
---     either be a multiple of
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@,
---     or @offset@ plus @size@ /must/ equal the size of @memory@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MAPPED_MEMORY_RANGE'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @memory@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'flushMappedMemoryRanges', 'invalidateMappedMemoryRanges'
-data MappedMemoryRange = MappedMemoryRange
-  { -- | @memory@ is the memory object to which this range belongs.
-    memory :: DeviceMemory
-  , -- | @offset@ is the zero-based byte offset from the beginning of the memory
-    -- object.
-    offset :: DeviceSize
-  , -- | @size@ is either the size of range, or
-    -- 'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE' to affect the range
-    -- from @offset@ to the end of the current mapping of the allocation.
-    size :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show MappedMemoryRange
-
-instance ToCStruct MappedMemoryRange where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MappedMemoryRange{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (offset)
-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (size)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct MappedMemoryRange where
-  peekCStruct p = do
-    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
-    offset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    size <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
-    pure $ MappedMemoryRange
-             memory offset size
-
-instance Storable MappedMemoryRange where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MappedMemoryRange where
-  zero = MappedMemoryRange
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/Memory.hs-boot b/src/Graphics/Vulkan/Core10/Memory.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Memory.hs-boot
+++ /dev/null
@@ -1,27 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Memory  ( MappedMemoryRange
-                                      , MemoryAllocateInfo
-                                      ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data MappedMemoryRange
-
-instance ToCStruct MappedMemoryRange
-instance Show MappedMemoryRange
-
-instance FromCStruct MappedMemoryRange
-
-
-type role MemoryAllocateInfo nominal
-data MemoryAllocateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (MemoryAllocateInfo es)
-instance Show (Chain es) => Show (MemoryAllocateInfo es)
-
-instance PeekChain es => FromCStruct (MemoryAllocateInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/MemoryManagement.hs b/src/Graphics/Vulkan/Core10/MemoryManagement.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/MemoryManagement.hs
+++ /dev/null
@@ -1,575 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.MemoryManagement  ( getBufferMemoryRequirements
-                                                , bindBufferMemory
-                                                , getImageMemoryRequirements
-                                                , bindImageMemory
-                                                , MemoryRequirements(..)
-                                                ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkBindBufferMemory))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkBindImageMemory))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetBufferMemoryRequirements))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetImageMemoryRequirements))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.Core10.Handles (DeviceMemory(..))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.Core10.Handles (Image(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetBufferMemoryRequirements
-  :: FunPtr (Ptr Device_T -> Buffer -> Ptr MemoryRequirements -> IO ()) -> Ptr Device_T -> Buffer -> Ptr MemoryRequirements -> IO ()
-
--- | vkGetBufferMemoryRequirements - Returns the memory requirements for
--- specified Vulkan object
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the buffer.
---
--- -   @buffer@ is the buffer to query.
---
--- -   @pMemoryRequirements@ is a pointer to a 'MemoryRequirements'
---     structure in which the memory requirements of the buffer object are
---     returned.
---
--- == Valid Usage
---
--- -   If @buffer@ was created with the
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     external memory handle type, then @buffer@ /must/ be bound to
---     memory.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @pMemoryRequirements@ /must/ be a valid pointer to a
---     'MemoryRequirements' structure
---
--- -   @buffer@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.Device', 'MemoryRequirements'
-getBufferMemoryRequirements :: forall io . MonadIO io => Device -> Buffer -> io (MemoryRequirements)
-getBufferMemoryRequirements device buffer = liftIO . evalContT $ do
-  let vkGetBufferMemoryRequirements' = mkVkGetBufferMemoryRequirements (pVkGetBufferMemoryRequirements (deviceCmds (device :: Device)))
-  pPMemoryRequirements <- ContT (withZeroCStruct @MemoryRequirements)
-  lift $ vkGetBufferMemoryRequirements' (deviceHandle (device)) (buffer) (pPMemoryRequirements)
-  pMemoryRequirements <- lift $ peekCStruct @MemoryRequirements pPMemoryRequirements
-  pure $ (pMemoryRequirements)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkBindBufferMemory
-  :: FunPtr (Ptr Device_T -> Buffer -> DeviceMemory -> DeviceSize -> IO Result) -> Ptr Device_T -> Buffer -> DeviceMemory -> DeviceSize -> IO Result
-
--- | vkBindBufferMemory - Bind device memory to a buffer object
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the buffer and memory.
---
--- -   @buffer@ is the buffer to be attached to memory.
---
--- -   @memory@ is a 'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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
---     'MemoryRequirements'::@size@ member in @memory@, starting from
---     @memoryOffset@ bytes, will be bound to the specified buffer.
---
--- = Description
---
--- 'bindBufferMemory' is equivalent to passing the same parameters through
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo'
--- to
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.bindBufferMemory2'.
---
--- == 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@
---
--- -   @memory@ /must/ have been allocated using one of the memory types
---     allowed in the @memoryTypeBits@ member of the 'MemoryRequirements'
---     structure returned from a call to 'getBufferMemoryRequirements' with
---     @buffer@
---
--- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@
---     member of the 'MemoryRequirements' structure returned from a call to
---     'getBufferMemoryRequirements' with @buffer@
---
--- -   The @size@ member of the 'MemoryRequirements' structure returned
---     from a call to 'getBufferMemoryRequirements' with @buffer@ /must/ be
---     less than or equal to the size of @memory@ minus @memoryOffset@
---
--- -   If @buffer@ requires a dedicated allocation(as reported by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2'
---     in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation
---     for @buffer@), @memory@ /must/ have been created with
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@
---     equal to @buffer@
---
--- -   If the 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' provided
---     when @memory@ was allocated included a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure in its @pNext@ chain, and
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@
---     was not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', then
---     @buffer@ /must/ equal
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@,
---     and @memoryOffset@ /must/ be zero
---
--- -   If buffer was created with the
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT'
---     bit set, the buffer /must/ be bound to a memory object allocated
---     with a memory type that reports
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
---
--- -   If buffer was created with the
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT'
---     bit not set, the buffer /must/ not be bound to a memory object
---     created with a memory type that reports
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
---
--- -   If @buffer@ was created with
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@
---     equal to 'Graphics.Vulkan.Core10.BaseType.TRUE', @memory@ /must/
---     have been created with
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'::@buffer@
---     equal to a buffer handle created with identical creation parameters
---     to @buffer@ and @memoryOffset@ /must/ be zero
---
--- -   If the value of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
---     used to allocate @memory@ is not @0@, it /must/ include at least one
---     of the handles set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
---     when @buffer@ was created
---
--- -   If @memory@ was created by a memory import operation, that is not
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
---     with a non-@NULL@ @buffer@ value, the external handle type of the
---     imported memory /must/ also have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
---     when @buffer@ was created
---
--- -   If @memory@ was created with the
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
---     memory import operation with a non-@NULL@ @buffer@ value,
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     /must/ also have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
---     when @buffer@ was created
---
--- -   If the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures'::@bufferDeviceAddress@
---     feature is enabled and @buffer@ was created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT'
---     bit set, @memory@ /must/ have been allocated with the
---     'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT'
---     bit set
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @memory@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-bindBufferMemory :: forall io . MonadIO io => Device -> Buffer -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> io ()
-bindBufferMemory device buffer memory memoryOffset = liftIO $ do
-  let vkBindBufferMemory' = mkVkBindBufferMemory (pVkBindBufferMemory (deviceCmds (device :: Device)))
-  r <- vkBindBufferMemory' (deviceHandle (device)) (buffer) (memory) (memoryOffset)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetImageMemoryRequirements
-  :: FunPtr (Ptr Device_T -> Image -> Ptr MemoryRequirements -> IO ()) -> Ptr Device_T -> Image -> Ptr MemoryRequirements -> IO ()
-
--- | vkGetImageMemoryRequirements - Returns the memory requirements for
--- specified Vulkan object
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the image.
---
--- -   @image@ is the image to query.
---
--- -   @pMemoryRequirements@ is a pointer to a 'MemoryRequirements'
---     structure in which the memory requirements of the image object are
---     returned.
---
--- == Valid Usage
---
--- -   @image@ /must/ not have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---     flag set
---
--- -   If @image@ was created with the
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     external memory handle type, then @image@ /must/ be bound to memory.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @pMemoryRequirements@ /must/ be a valid pointer to a
---     'MemoryRequirements' structure
---
--- -   @image@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Image', 'MemoryRequirements'
-getImageMemoryRequirements :: forall io . MonadIO io => Device -> Image -> io (MemoryRequirements)
-getImageMemoryRequirements device image = liftIO . evalContT $ do
-  let vkGetImageMemoryRequirements' = mkVkGetImageMemoryRequirements (pVkGetImageMemoryRequirements (deviceCmds (device :: Device)))
-  pPMemoryRequirements <- ContT (withZeroCStruct @MemoryRequirements)
-  lift $ vkGetImageMemoryRequirements' (deviceHandle (device)) (image) (pPMemoryRequirements)
-  pMemoryRequirements <- lift $ peekCStruct @MemoryRequirements pPMemoryRequirements
-  pure $ (pMemoryRequirements)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkBindImageMemory
-  :: FunPtr (Ptr Device_T -> Image -> DeviceMemory -> DeviceSize -> IO Result) -> Ptr Device_T -> Image -> DeviceMemory -> DeviceSize -> IO Result
-
--- | vkBindImageMemory - Bind device memory to an image object
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the image and memory.
---
--- -   @image@ is the image.
---
--- -   @memory@ is the 'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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
---     'MemoryRequirements'::@size@ member in @memory@, starting from
---     @memoryOffset@ bytes, will be bound to the specified image.
---
--- = Description
---
--- 'bindImageMemory' is equivalent to passing the same parameters through
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo'
--- to
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.bindImageMemory2'.
---
--- == Valid Usage
---
--- -   @image@ /must/ not have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---     set
---
--- -   @image@ /must/ not already be backed by a memory object
---
--- -   @image@ /must/ not have been created with any sparse memory binding
---     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 'MemoryRequirements'
---     structure returned from a call to 'getImageMemoryRequirements' with
---     @image@
---
--- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@
---     member of the 'MemoryRequirements' structure returned from a call to
---     'getImageMemoryRequirements' with @image@
---
--- -   The difference of the size of @memory@ and @memoryOffset@ /must/ be
---     greater than or equal to the @size@ member of the
---     'MemoryRequirements' structure returned from a call to
---     'getImageMemoryRequirements' with the same @image@
---
--- -   If @image@ requires a dedicated allocation (as reported by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
---     in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation
---     for @image@), @memory@ /must/ have been created with
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     equal to @image@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing>
---     feature is not enabled, and the
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' provided when
---     @memory@ was allocated included a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure in its @pNext@ chain, and
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     was not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', then
---     @image@ /must/ equal
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     and @memoryOffset@ /must/ be zero
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing>
---     feature is enabled, and the
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' provided when
---     @memory@ was allocated included a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure in its @pNext@ chain, and
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     was not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', then
---     @memoryOffset@ /must/ be zero, and @image@ /must/ be either equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     or an image that was created using the same parameters in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo', with the exception
---     that @extent@ and @arrayLayers@ /may/ differ subject to the
---     following restrictions: every dimension in the @extent@ parameter of
---     the image being bound /must/ be equal to or smaller than the
---     original image for which the allocation was created; and the
---     @arrayLayers@ parameter of the image being bound /must/ be equal to
---     or smaller than the original image for which the allocation was
---     created
---
--- -   If image was created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT'
---     bit set, the image /must/ be bound to a memory object allocated with
---     a memory type that reports
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
---
--- -   If image was created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT'
---     bit not set, the image /must/ not be bound to a memory object
---     created with a memory type that reports
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
---
--- -   If @image@ was created with
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@
---     equal to 'Graphics.Vulkan.Core10.BaseType.TRUE', @memory@ /must/
---     have been created with
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'::@image@
---     equal to an image handle created with identical creation parameters
---     to @image@ and @memoryOffset@ /must/ be zero
---
--- -   If the value of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
---     used to allocate @memory@ is not @0@, it /must/ include at least one
---     of the handles set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     when @image@ was created
---
--- -   If @memory@ was created by a memory import operation, that is not
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
---     with a non-@NULL@ @buffer@ value, the external handle type of the
---     imported memory /must/ also have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     when @image@ was created
---
--- -   If @memory@ was created with the
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
---     memory import operation with a non-@NULL@ @buffer@ value,
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     /must/ also have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     when @image@ was created
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @memory@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Handles.Image'
-bindImageMemory :: forall io . MonadIO io => Device -> Image -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> io ()
-bindImageMemory device image memory memoryOffset = liftIO $ do
-  let vkBindImageMemory' = mkVkBindImageMemory (pVkBindImageMemory (deviceCmds (device :: Device)))
-  r <- vkBindImageMemory' (deviceHandle (device)) (image) (memory) (memoryOffset)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkMemoryRequirements - Structure specifying memory requirements
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2',
--- 'getBufferMemoryRequirements', 'getImageMemoryRequirements'
-data MemoryRequirements = MemoryRequirements
-  { -- | @size@ is the size, in bytes, of the memory allocation /required/ for
-    -- the resource.
-    size :: DeviceSize
-  , -- | @alignment@ is the alignment, in bytes, of the offset within the
-    -- allocation /required/ for the resource.
-    alignment :: DeviceSize
-  , -- | @memoryTypeBits@ is a bitmask and contains one bit set for every
-    -- supported memory type for the resource. Bit @i@ is set if and only if
-    -- the memory type @i@ in the
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'
-    -- structure for the physical device is supported for the resource.
-    memoryTypeBits :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show MemoryRequirements
-
-instance ToCStruct MemoryRequirements where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryRequirements{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (size)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (alignment)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (memoryTypeBits)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct MemoryRequirements where
-  peekCStruct p = do
-    size <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
-    alignment <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
-    memoryTypeBits <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ MemoryRequirements
-             size alignment memoryTypeBits
-
-instance Storable MemoryRequirements where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryRequirements where
-  zero = MemoryRequirements
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/MemoryManagement.hs-boot b/src/Graphics/Vulkan/Core10/MemoryManagement.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/MemoryManagement.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.MemoryManagement  (MemoryRequirements) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data MemoryRequirements
-
-instance ToCStruct MemoryRequirements
-instance Show MemoryRequirements
-
-instance FromCStruct MemoryRequirements
-
diff --git a/src/Graphics/Vulkan/Core10/OtherTypes.hs b/src/Graphics/Vulkan/Core10/OtherTypes.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/OtherTypes.hs
+++ /dev/null
@@ -1,957 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.OtherTypes  ( MemoryBarrier(..)
-                                          , BufferMemoryBarrier(..)
-                                          , ImageMemoryBarrier(..)
-                                          , DrawIndirectCommand(..)
-                                          , DrawIndexedIndirectCommand(..)
-                                          , DispatchIndirectCommand(..)
-                                          , BaseOutStructure(..)
-                                          , BaseInStructure(..)
-                                          , ObjectType(..)
-                                          , VendorId(..)
-                                          ) where
-
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout)
-import Graphics.Vulkan.Core10.SharedTypes (ImageSubresourceRange)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_BARRIER))
-import Graphics.Vulkan.CStruct.Extends (BaseInStructure(..))
-import Graphics.Vulkan.CStruct.Extends (BaseOutStructure(..))
-import Graphics.Vulkan.Core10.Enums.ObjectType (ObjectType(..))
-import Graphics.Vulkan.Core10.Enums.VendorId (VendorId(..))
--- | VkMemoryBarrier - Structure specifying a global memory barrier
---
--- = Description
---
--- The first
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access types in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>
--- specified by @srcAccessMask@.
---
--- The second
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access types in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>
--- specified by @dstAccessMask@.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdPipelineBarrier',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents'
-data MemoryBarrier = MemoryBarrier
-  { -- | @srcAccessMask@ /must/ be a valid combination of
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
-    srcAccessMask :: AccessFlags
-  , -- | @dstAccessMask@ /must/ be a valid combination of
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
-    dstAccessMask :: AccessFlags
-  }
-  deriving (Typeable)
-deriving instance Show MemoryBarrier
-
-instance ToCStruct MemoryBarrier where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryBarrier{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_BARRIER)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (srcAccessMask)
-    poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (dstAccessMask)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_BARRIER)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct MemoryBarrier where
-  peekCStruct p = do
-    srcAccessMask <- peek @AccessFlags ((p `plusPtr` 16 :: Ptr AccessFlags))
-    dstAccessMask <- peek @AccessFlags ((p `plusPtr` 20 :: Ptr AccessFlags))
-    pure $ MemoryBarrier
-             srcAccessMask dstAccessMask
-
-instance Storable MemoryBarrier where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryBarrier where
-  zero = MemoryBarrier
-           zero
-           zero
-
-
--- | VkBufferMemoryBarrier - Structure specifying a buffer memory barrier
---
--- = Description
---
--- The first
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access to memory through the specified buffer range, via
--- access types in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>
--- specified by @srcAccessMask@. If @srcAccessMask@ includes
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access to memory through the specified buffer range, via
--- access types in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>.
--- specified by @dstAccessMask@. If @dstAccessMask@ includes
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_HOST_WRITE_BIT' or
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
---     'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be
---     greater than @0@
---
--- -   If @size@ is not equal to
---     'Graphics.Vulkan.Core10.APIConstants.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
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     at least one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@
---     /must/ be 'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED'
---
--- -   If @buffer@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     and one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ is
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', the
---     other /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED' or a
---     special queue family reserved for external memory ownership
---     transfers, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
---
--- -   If @buffer@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE'
---     and @srcQueueFamilyIndex@ is
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED',
---     @dstQueueFamilyIndex@ /must/ also be
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED'
---
--- -   If @buffer@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE'
---     and @srcQueueFamilyIndex@ is not
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', it
---     /must/ be a valid queue family or a special queue family reserved
---     for external memory transfers, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
---
--- -   If @buffer@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE'
---     and @dstQueueFamilyIndex@ is not
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', it
---     /must/ be a valid queue family or a special queue family reserved
---     for external memory transfers, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
---
--- -   If @buffer@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE',
---     and @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', at least
---     one of them /must/ be the same as the family of the queue that will
---     execute this barrier
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlags',
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdPipelineBarrier',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents'
-data BufferMemoryBarrier = BufferMemoryBarrier
-  { -- | @srcAccessMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying
-    -- a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>.
-    srcAccessMask :: AccessFlags
-  , -- | @dstAccessMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying
-    -- a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>.
-    dstAccessMask :: AccessFlags
-  , -- | @srcQueueFamilyIndex@ is the source queue family for a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
-    srcQueueFamilyIndex :: Word32
-  , -- | @dstQueueFamilyIndex@ is the destination queue family for a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
-    dstQueueFamilyIndex :: Word32
-  , -- | @buffer@ is a handle to the buffer whose backing memory is affected by
-    -- the barrier.
-    buffer :: Buffer
-  , -- | @offset@ is an offset in bytes into the backing memory for @buffer@;
-    -- this is relative to the base offset as bound to the buffer (see
-    -- 'Graphics.Vulkan.Core10.MemoryManagement.bindBufferMemory').
-    offset :: DeviceSize
-  , -- | @size@ is a size in bytes of the affected area of backing memory for
-    -- @buffer@, or 'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE' to use the
-    -- range from @offset@ to the end of the buffer.
-    size :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show BufferMemoryBarrier
-
-instance ToCStruct BufferMemoryBarrier where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BufferMemoryBarrier{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (srcAccessMask)
-    poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (dstAccessMask)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (srcQueueFamilyIndex)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (dstQueueFamilyIndex)
-    poke ((p `plusPtr` 32 :: Ptr Buffer)) (buffer)
-    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (offset)
-    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (size)
-    f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Buffer)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct BufferMemoryBarrier where
-  peekCStruct p = do
-    srcAccessMask <- peek @AccessFlags ((p `plusPtr` 16 :: Ptr AccessFlags))
-    dstAccessMask <- peek @AccessFlags ((p `plusPtr` 20 :: Ptr AccessFlags))
-    srcQueueFamilyIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    dstQueueFamilyIndex <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    buffer <- peek @Buffer ((p `plusPtr` 32 :: Ptr Buffer))
-    offset <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
-    size <- peek @DeviceSize ((p `plusPtr` 48 :: Ptr DeviceSize))
-    pure $ BufferMemoryBarrier
-             srcAccessMask dstAccessMask srcQueueFamilyIndex dstQueueFamilyIndex buffer offset size
-
-instance Storable BufferMemoryBarrier where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BufferMemoryBarrier where
-  zero = BufferMemoryBarrier
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkImageMemoryBarrier - Structure specifying the parameters of an image
--- memory barrier
---
--- = Description
---
--- The first
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access to memory through the specified image subresource
--- range, via access types in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>
--- specified by @srcAccessMask@. If @srcAccessMask@ includes
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access to memory through the specified image subresource
--- range, via access types in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>
--- specified by @dstAccessMask@. If @dstAccessMask@ includes
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_HOST_WRITE_BIT' or
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>,
--- relative to other image layout transitions submitted to the same queue,
--- including those performed by
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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.
---
--- The image layout of each image subresource of a depth\/stencil image
--- created with
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
--- is dependent on the last sample locations used to render to the image
--- subresource as a depth\/stencil attachment, thus when the @image@ member
--- of a 'ImageMemoryBarrier' is an image created with this flag the
--- application /can/ include a
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT'
--- structure in the @pNext@ chain of 'ImageMemoryBarrier' to specify the
--- sample locations to use during the image layout transition.
---
--- If the
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT'
--- structure included in the @pNext@ chain of 'ImageMemoryBarrier' does not
--- match the sample location state last used to render to the image
--- subresource range specified by @subresourceRange@ or if no
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT'
--- structure is included in the @pNext@ chain of 'ImageMemoryBarrier', then
--- the contents of the given image subresource range becomes undefined as
--- if @oldLayout@ would equal
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'.
---
--- If @image@ has a multi-planar format and the image is /disjoint/, then
--- including
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
--- in the @aspectMask@ member of @subresourceRange@ is equivalent to
--- including
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
--- and (for three-plane formats only)
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'.
---
--- == Valid Usage
---
--- -   @oldLayout@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
---     the current layout of the image subresources affected by the barrier
---
--- -   @newLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
---
--- -   If @image@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     at least one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@
---     /must/ be 'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED'
---
--- -   If @image@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     and one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ is
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', the
---     other /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED' or a
---     special queue family reserved for external memory transfers, as
---     described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
---
--- -   If @image@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE'
---     and @srcQueueFamilyIndex@ is
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED',
---     @dstQueueFamilyIndex@ /must/ also be
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED'
---
--- -   If @image@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE'
---     and @srcQueueFamilyIndex@ is not
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', it
---     /must/ be a valid queue family or a special queue family reserved
---     for external memory transfers, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
---
--- -   If @image@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE'
---     and @dstQueueFamilyIndex@ is not
---     'Graphics.Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', it
---     /must/ be a valid queue family or a special queue family reserved
---     for external memory transfers, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
---
--- -   If @image@ was created with a sharing mode of
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE',
---     and @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not
---     'Graphics.Vulkan.Core10.APIConstants.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.ImageCreateInfo' when
---     @image@ was created
---
--- -   If @subresourceRange.levelCount@ is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS',
---     @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@
---     /must/ be less than or equal to the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   @subresourceRange.baseArrayLayer@ /must/ be less than the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   If @subresourceRange.layerCount@ is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS',
---     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
---     /must/ be less than or equal to the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   If @image@ has a depth\/stencil format with both depth and stencil
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
---     feature is enabled, then the @aspectMask@ member of
---     @subresourceRange@ /must/ include either or both
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
---     and
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
---
--- -   If @image@ has a depth\/stencil format with both depth and stencil
---     and the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
---     feature is not enabled, then the @aspectMask@ member of
---     @subresourceRange@ /must/ include both
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
---     and
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
---
--- -   If @image@ has a color format and either the format is single-plane
---     or the image is not disjoint then the @aspectMask@ member of
---     @subresourceRange@ /must/ only include
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
---
--- -   If @image@ has a multi-planar format and the image is /disjoint/,
---     then the @aspectMask@ member of @subresourceRange@ /must/ include
---     either at least one of
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
---     and
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT';
---     or /must/ include
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
---
--- -   If @image@ has a multi-planar format with only two planes, then the
---     @aspectMask@ member of @subresourceRange@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
---
--- -   If either @oldLayout@ or @newLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
---     then @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
---     set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL'
---     then @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---     set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
---     then @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---     set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
---     then @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---     set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
---     then @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---     set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
---     then @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
---     set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
---     then @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
---     set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
---     then @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---     set
---
--- -   If @image@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   If either @oldLayout@ or @newLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV'
---     then @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV'
---     set
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @oldLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @newLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @subresourceRange@ /must/ be a valid
---     'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange' structure
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlags',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'Graphics.Vulkan.Core10.SharedTypes.ImageSubresourceRange',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdPipelineBarrier',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents'
-data ImageMemoryBarrier (es :: [Type]) = ImageMemoryBarrier
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @srcAccessMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying
-    -- a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>.
-    srcAccessMask :: AccessFlags
-  , -- | @dstAccessMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying
-    -- a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>.
-    dstAccessMask :: AccessFlags
-  , -- | @oldLayout@ is the old layout in an
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>.
-    oldLayout :: ImageLayout
-  , -- | @newLayout@ is the new layout in an
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>.
-    newLayout :: ImageLayout
-  , -- | @srcQueueFamilyIndex@ is the source queue family for a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
-    srcQueueFamilyIndex :: Word32
-  , -- | @dstQueueFamilyIndex@ is the destination queue family for a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
-    dstQueueFamilyIndex :: Word32
-  , -- | @image@ is a handle to the image affected by this barrier.
-    image :: Image
-  , -- | @subresourceRange@ describes the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views image subresource range>
-    -- within @image@ that is affected by this barrier.
-    subresourceRange :: ImageSubresourceRange
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (ImageMemoryBarrier es)
-
-instance Extensible ImageMemoryBarrier where
-  extensibleType = STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
-  setNext x next = x{next = next}
-  getNext ImageMemoryBarrier{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageMemoryBarrier e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @SampleLocationsInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (ImageMemoryBarrier es) where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageMemoryBarrier{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (srcAccessMask)
-    lift $ poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (dstAccessMask)
-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (oldLayout)
-    lift $ poke ((p `plusPtr` 28 :: Ptr ImageLayout)) (newLayout)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (srcQueueFamilyIndex)
-    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (dstQueueFamilyIndex)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Image)) (image)
-    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr ImageSubresourceRange)) (subresourceRange) . ($ ())
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (zero)
-    lift $ poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)
-    lift $ poke ((p `plusPtr` 28 :: Ptr ImageLayout)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Image)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr ImageSubresourceRange)) (zero) . ($ ())
-    lift $ f
-
-instance PeekChain es => FromCStruct (ImageMemoryBarrier es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    srcAccessMask <- peek @AccessFlags ((p `plusPtr` 16 :: Ptr AccessFlags))
-    dstAccessMask <- peek @AccessFlags ((p `plusPtr` 20 :: Ptr AccessFlags))
-    oldLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))
-    newLayout <- peek @ImageLayout ((p `plusPtr` 28 :: Ptr ImageLayout))
-    srcQueueFamilyIndex <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    dstQueueFamilyIndex <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
-    image <- peek @Image ((p `plusPtr` 40 :: Ptr Image))
-    subresourceRange <- peekCStruct @ImageSubresourceRange ((p `plusPtr` 48 :: Ptr ImageSubresourceRange))
-    pure $ ImageMemoryBarrier
-             next srcAccessMask dstAccessMask oldLayout newLayout srcQueueFamilyIndex dstQueueFamilyIndex image subresourceRange
-
-instance es ~ '[] => Zero (ImageMemoryBarrier es) where
-  zero = ImageMemoryBarrier
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDrawIndirectCommand - Structure specifying a draw indirect command
---
--- = Description
---
--- The members of 'DrawIndirectCommand' have the same meaning as the
--- similarly named parameters of
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDraw'.
---
--- == 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>
---     feature is not enabled, @firstInstance@ /must/ be @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect'
-data DrawIndirectCommand = DrawIndirectCommand
-  { -- | @vertexCount@ is the number of vertices to draw.
-    vertexCount :: Word32
-  , -- | @instanceCount@ is the number of instances to draw.
-    instanceCount :: Word32
-  , -- | @firstVertex@ is the index of the first vertex to draw.
-    firstVertex :: Word32
-  , -- | @firstInstance@ is the instance ID of the first instance to draw.
-    firstInstance :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DrawIndirectCommand
-
-instance ToCStruct DrawIndirectCommand where
-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DrawIndirectCommand{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (vertexCount)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (instanceCount)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (firstVertex)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (firstInstance)
-    f
-  cStructSize = 16
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DrawIndirectCommand where
-  peekCStruct p = do
-    vertexCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    instanceCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    firstVertex <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    firstInstance <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    pure $ DrawIndirectCommand
-             vertexCount instanceCount firstVertex firstInstance
-
-instance Storable DrawIndirectCommand where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DrawIndirectCommand where
-  zero = DrawIndirectCommand
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDrawIndexedIndirectCommand - Structure specifying a draw indexed
--- indirect command
---
--- = Description
---
--- The members of 'DrawIndexedIndirectCommand' have the same meaning as the
--- similarly named parameters of
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed'.
---
--- == 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>
---
--- -   (@indexSize@ * (@firstIndex@ + @indexCount@) + @offset@) /must/ be
---     less than or equal to the size of the bound index buffer, with
---     @indexSize@ being based on the type specified by @indexType@, where
---     the index buffer, @indexType@, and @offset@ are specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>
---     feature is not enabled, @firstInstance@ /must/ be @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'
-data DrawIndexedIndirectCommand = DrawIndexedIndirectCommand
-  { -- | @indexCount@ is the number of vertices to draw.
-    indexCount :: Word32
-  , -- | @instanceCount@ is the number of instances to draw.
-    instanceCount :: Word32
-  , -- | @firstIndex@ is the base index within the index buffer.
-    firstIndex :: Word32
-  , -- | @vertexOffset@ is the value added to the vertex index before indexing
-    -- into the vertex buffer.
-    vertexOffset :: Int32
-  , -- | @firstInstance@ is the instance ID of the first instance to draw.
-    firstInstance :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DrawIndexedIndirectCommand
-
-instance ToCStruct DrawIndexedIndirectCommand where
-  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DrawIndexedIndirectCommand{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (indexCount)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (instanceCount)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (firstIndex)
-    poke ((p `plusPtr` 12 :: Ptr Int32)) (vertexOffset)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (firstInstance)
-    f
-  cStructSize = 20
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr Int32)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DrawIndexedIndirectCommand where
-  peekCStruct p = do
-    indexCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    instanceCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    firstIndex <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    vertexOffset <- peek @Int32 ((p `plusPtr` 12 :: Ptr Int32))
-    firstInstance <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ DrawIndexedIndirectCommand
-             indexCount instanceCount firstIndex vertexOffset firstInstance
-
-instance Storable DrawIndexedIndirectCommand where
-  sizeOf ~_ = 20
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DrawIndexedIndirectCommand where
-  zero = DrawIndexedIndirectCommand
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDispatchIndirectCommand - Structure specifying a dispatch indirect
--- command
---
--- = Description
---
--- The members of 'DispatchIndirectCommand' have the same meaning as the
--- corresponding parameters of
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDispatch'.
---
--- == Valid Usage
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect'
-data DispatchIndirectCommand = DispatchIndirectCommand
-  { -- | @x@ /must/ be less than or equal to
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
-    x :: Word32
-  , -- | @y@ /must/ be less than or equal to
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
-    y :: Word32
-  , -- | @z@ /must/ be less than or equal to
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
-    z :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DispatchIndirectCommand
-
-instance ToCStruct DispatchIndirectCommand where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DispatchIndirectCommand{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (x)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (y)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (z)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DispatchIndirectCommand where
-  peekCStruct p = do
-    x <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    y <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    z <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pure $ DispatchIndirectCommand
-             x y z
-
-instance Storable DispatchIndirectCommand where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DispatchIndirectCommand where
-  zero = DispatchIndirectCommand
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/OtherTypes.hs-boot b/src/Graphics/Vulkan/Core10/OtherTypes.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/OtherTypes.hs-boot
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.OtherTypes  ( BufferMemoryBarrier
-                                          , DispatchIndirectCommand
-                                          , DrawIndexedIndirectCommand
-                                          , DrawIndirectCommand
-                                          , ImageMemoryBarrier
-                                          , MemoryBarrier
-                                          ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data BufferMemoryBarrier
-
-instance ToCStruct BufferMemoryBarrier
-instance Show BufferMemoryBarrier
-
-instance FromCStruct BufferMemoryBarrier
-
-
-data DispatchIndirectCommand
-
-instance ToCStruct DispatchIndirectCommand
-instance Show DispatchIndirectCommand
-
-instance FromCStruct DispatchIndirectCommand
-
-
-data DrawIndexedIndirectCommand
-
-instance ToCStruct DrawIndexedIndirectCommand
-instance Show DrawIndexedIndirectCommand
-
-instance FromCStruct DrawIndexedIndirectCommand
-
-
-data DrawIndirectCommand
-
-instance ToCStruct DrawIndirectCommand
-instance Show DrawIndirectCommand
-
-instance FromCStruct DrawIndirectCommand
-
-
-type role ImageMemoryBarrier nominal
-data ImageMemoryBarrier (es :: [Type])
-
-instance PokeChain es => ToCStruct (ImageMemoryBarrier es)
-instance Show (Chain es) => Show (ImageMemoryBarrier es)
-
-instance PeekChain es => FromCStruct (ImageMemoryBarrier es)
-
-
-data MemoryBarrier
-
-instance ToCStruct MemoryBarrier
-instance Show MemoryBarrier
-
-instance FromCStruct MemoryBarrier
-
diff --git a/src/Graphics/Vulkan/Core10/Pass.hs b/src/Graphics/Vulkan/Core10/Pass.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Pass.hs
+++ /dev/null
@@ -1,2323 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Pass  ( createFramebuffer
-                                    , withFramebuffer
-                                    , destroyFramebuffer
-                                    , createRenderPass
-                                    , withRenderPass
-                                    , destroyRenderPass
-                                    , getRenderAreaGranularity
-                                    , AttachmentDescription(..)
-                                    , AttachmentReference(..)
-                                    , SubpassDescription(..)
-                                    , SubpassDependency(..)
-                                    , RenderPassCreateInfo(..)
-                                    , FramebufferCreateInfo(..)
-                                    ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import qualified Data.Vector (null)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits (AttachmentDescriptionFlags)
-import Graphics.Vulkan.Core10.Enums.AttachmentLoadOp (AttachmentLoadOp)
-import Graphics.Vulkan.Core10.Enums.AttachmentStoreOp (AttachmentStoreOp)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateFramebuffer))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateRenderPass))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyFramebuffer))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyRenderPass))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetRenderAreaGranularity))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.Core10.Handles (Framebuffer)
-import Graphics.Vulkan.Core10.Handles (Framebuffer(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (FramebufferAttachmentsCreateInfo)
-import Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits (FramebufferCreateFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout)
-import Graphics.Vulkan.Core10.Handles (ImageView)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Handles (RenderPass)
-import Graphics.Vulkan.Core10.Handles (RenderPass(..))
-import Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits (RenderPassCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map (RenderPassFragmentDensityMapCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (RenderPassInputAttachmentAspectCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview (RenderPassMultiviewCreateInfo)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits (SubpassDescriptionFlags)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateFramebuffer
-  :: FunPtr (Ptr Device_T -> Ptr (FramebufferCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Framebuffer -> IO Result) -> Ptr Device_T -> Ptr (FramebufferCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Framebuffer -> IO Result
-
--- | vkCreateFramebuffer - Create a new framebuffer object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the framebuffer.
---
--- -   @pCreateInfo@ is a pointer to a 'FramebufferCreateInfo' structure
---     describing additional information about framebuffer creation.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pFramebuffer@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.Framebuffer' handle in which the
---     resulting framebuffer object is returned.
---
--- == Valid Usage
---
--- -   If @pCreateInfo->flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     and @attachmentCount@ is not @0@, each element of
---     @pCreateInfo->pAttachments@ /must/ have been created on @device@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'FramebufferCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pFramebuffer@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Framebuffer' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Framebuffer', 'FramebufferCreateInfo'
-createFramebuffer :: forall a io . (PokeChain a, MonadIO io) => Device -> FramebufferCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Framebuffer)
-createFramebuffer device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateFramebuffer' = mkVkCreateFramebuffer (pVkCreateFramebuffer (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPFramebuffer <- ContT $ bracket (callocBytes @Framebuffer 8) free
-  r <- lift $ vkCreateFramebuffer' (deviceHandle (device)) pCreateInfo pAllocator (pPFramebuffer)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pFramebuffer <- lift $ peek @Framebuffer pPFramebuffer
-  pure $ (pFramebuffer)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createFramebuffer' and 'destroyFramebuffer'
---
--- To ensure that 'destroyFramebuffer' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withFramebuffer :: forall a io r . (PokeChain a, MonadIO io) => (io (Framebuffer) -> ((Framebuffer) -> io ()) -> r) -> Device -> FramebufferCreateInfo a -> Maybe AllocationCallbacks -> r
-withFramebuffer b device pCreateInfo pAllocator =
-  b (createFramebuffer device pCreateInfo pAllocator)
-    (\(o0) -> destroyFramebuffer device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyFramebuffer
-  :: FunPtr (Ptr Device_T -> Framebuffer -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Framebuffer -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyFramebuffer - Destroy a framebuffer object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @framebuffer@ /must/ have
---     completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @framebuffer@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @framebuffer@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @framebuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @framebuffer@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Framebuffer'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Framebuffer'
-destroyFramebuffer :: forall io . MonadIO io => Device -> Framebuffer -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyFramebuffer device framebuffer allocator = liftIO . evalContT $ do
-  let vkDestroyFramebuffer' = mkVkDestroyFramebuffer (pVkDestroyFramebuffer (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyFramebuffer' (deviceHandle (device)) (framebuffer) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateRenderPass
-  :: FunPtr (Ptr Device_T -> Ptr (RenderPassCreateInfo a) -> Ptr AllocationCallbacks -> Ptr RenderPass -> IO Result) -> Ptr Device_T -> Ptr (RenderPassCreateInfo a) -> Ptr AllocationCallbacks -> Ptr RenderPass -> IO Result
-
--- | vkCreateRenderPass - Create a new render pass object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the render pass.
---
--- -   @pCreateInfo@ is a pointer to a 'RenderPassCreateInfo' structure
---     describing the parameters of the render pass.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pRenderPass@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.RenderPass' handle in which the
---     resulting render pass object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'RenderPassCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pRenderPass@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.RenderPass' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.RenderPass', 'RenderPassCreateInfo'
-createRenderPass :: forall a io . (PokeChain a, MonadIO io) => Device -> RenderPassCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (RenderPass)
-createRenderPass device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateRenderPass' = mkVkCreateRenderPass (pVkCreateRenderPass (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPRenderPass <- ContT $ bracket (callocBytes @RenderPass 8) free
-  r <- lift $ vkCreateRenderPass' (deviceHandle (device)) pCreateInfo pAllocator (pPRenderPass)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pRenderPass <- lift $ peek @RenderPass pPRenderPass
-  pure $ (pRenderPass)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createRenderPass' and 'destroyRenderPass'
---
--- To ensure that 'destroyRenderPass' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withRenderPass :: forall a io r . (PokeChain a, MonadIO io) => (io (RenderPass) -> ((RenderPass) -> io ()) -> r) -> Device -> RenderPassCreateInfo a -> Maybe AllocationCallbacks -> r
-withRenderPass b device pCreateInfo pAllocator =
-  b (createRenderPass device pCreateInfo pAllocator)
-    (\(o0) -> destroyRenderPass device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyRenderPass
-  :: FunPtr (Ptr Device_T -> RenderPass -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> RenderPass -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyRenderPass - Destroy a render pass object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @renderPass@ /must/ have
---     completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @renderPass@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @renderPass@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @renderPass@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @renderPass@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.RenderPass' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.RenderPass'
-destroyRenderPass :: forall io . MonadIO io => Device -> RenderPass -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyRenderPass device renderPass allocator = liftIO . evalContT $ do
-  let vkDestroyRenderPass' = mkVkDestroyRenderPass (pVkDestroyRenderPass (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyRenderPass' (deviceHandle (device)) (renderPass) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetRenderAreaGranularity
-  :: FunPtr (Ptr Device_T -> RenderPass -> Ptr Extent2D -> IO ()) -> Ptr Device_T -> RenderPass -> Ptr Extent2D -> IO ()
-
--- | vkGetRenderAreaGranularity - Returns the granularity for optimal render
--- area
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the render pass.
---
--- -   @renderPass@ is a handle to a render pass.
---
--- -   @pGranularity@ is a pointer to a
---     'Graphics.Vulkan.Core10.SharedTypes.Extent2D' structure in which the
---     granularity is returned.
---
--- = 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.SharedTypes.Extent2D'
---     (the horizontal granularity).
---
--- -   the @offset.y@ member in @renderArea@ is a multiple of the @height@
---     of the returned 'Graphics.Vulkan.Core10.SharedTypes.Extent2D' (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.RenderPassBeginInfo'.
---
--- -   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.RenderPassBeginInfo'.
---
--- 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @renderPass@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.RenderPass' handle
---
--- -   @pGranularity@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.SharedTypes.Extent2D' structure
---
--- -   @renderPass@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.Handles.RenderPass'
-getRenderAreaGranularity :: forall io . MonadIO io => Device -> RenderPass -> io (("granularity" ::: Extent2D))
-getRenderAreaGranularity device renderPass = liftIO . evalContT $ do
-  let vkGetRenderAreaGranularity' = mkVkGetRenderAreaGranularity (pVkGetRenderAreaGranularity (deviceCmds (device :: Device)))
-  pPGranularity <- ContT (withZeroCStruct @Extent2D)
-  lift $ vkGetRenderAreaGranularity' (deviceHandle (device)) (renderPass) (pPGranularity)
-  pGranularity <- lift $ peekCStruct @Extent2D pPGranularity
-  pure $ (pGranularity)
-
-
--- | VkAttachmentDescription - Structure specifying an attachment 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
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT'
--- pipeline stage. Load operations for attachments with a color format
--- execute in the
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.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
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'
--- pipeline stage. Store operations for attachments with a color format
--- execute in the
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.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.
---
--- The load and store operations apply on the first and last use of each
--- view in the render pass, respectively. If a view index of an attachment
--- is not included in the view mask in any subpass that uses it, then the
--- load and store operations are ignored, and the attachment’s memory
--- contents will not be modified by execution of a render pass instance.
---
--- During a render pass instance, input\/color attachments with color
--- formats that have a component size of 8, 16, or 32 bits /must/ be
--- represented in the attachment’s format throughout the instance.
--- 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-numerics Numeric Representation and Computation>
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-fixedconv Fixed-Point Data Conversions>.
---
--- If @flags@ includes
--- 'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.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.
---
--- If a render pass uses multiple attachments that alias the same device
--- memory, those attachments /must/ each include the
--- 'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'
--- bit in their attachment description flags. Attachments aliasing the same
--- memory occurs in multiple ways:
---
--- -   Multiple attachments being assigned the same image view as part of
---     framebuffer creation.
---
--- -   Attachments using distinct image views that correspond to the same
---     image subresource of an image.
---
--- -   Attachments using views of distinct image subresources which are
---     bound to overlapping memory ranges.
---
--- Note
---
--- Render passes /must/ include subpass dependencies (either directly or
--- via a subpass dependency chain) between any two subpasses that operate
--- on the same attachment or aliasing attachments and those subpass
--- dependencies /must/ include execution and memory dependencies separating
--- uses of the aliases, if at least one of those subpasses writes to one of
--- the aliases. These dependencies /must/ not include the
--- 'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT'
--- if the aliases are views of distinct image subresources which overlap in
--- memory.
---
--- Multiple attachments that alias the same memory /must/ not be used in a
--- single subpass. A given attachment index /must/ not be used multiple
--- times in a single subpass, with one exception: two subpass attachments
--- /can/ use the same attachment index if at least one use is as an input
--- attachment and neither use is as a resolve or preserve attachment. In
--- other words, the same view /can/ be used simultaneously as an input and
--- color or depth\/stencil attachment, but /must/ not be used as multiple
--- color or depth\/stencil attachments nor as resolve or preserve
--- attachments. The precise set of valid scenarios is described in more
--- detail
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-feedbackloop below>.
---
--- If a set of attachments alias each other, then all except the first to
--- be used in the render pass /must/ use an @initialLayout@ of
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', since
--- the earlier uses of the other aliases make their contents undefined.
--- Once an alias has been used and a different alias has been used after
--- it, the first alias /must/ not be used in any later subpasses. However,
--- an application /can/ assign the same image view to multiple aliasing
--- attachment indices, which allows that image view to be used multiple
--- times even if other aliases are used in between.
---
--- Note
---
--- Once an attachment needs the
--- 'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'
--- bit, there /should/ be no additional cost of introducing additional
--- aliases, and using these additional aliases /may/ allow more efficient
--- clearing of the attachments on multiple uses via
--- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'.
---
--- == Valid Usage
---
--- -   @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
---
--- -   If @format@ is a color format, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format, @initialLayout@ /must/ not
---     be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
---
--- -   If @format@ is a color format, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
---     feature is not enabled, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
---     feature is not enabled, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a color format, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a color format, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format which includes both depth and
---     stencil aspects, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format which includes both depth and
---     stencil aspects, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format which includes only the depth
---     aspect, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format which includes only the depth
---     aspect, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format which includes only the
---     stencil aspect, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format which includes only the
---     stencil aspect, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
---
--- == Valid Usage (Implicit)
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlagBits'
---     values
---
--- -   @format@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- -   @samples@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
---     value
---
--- -   @loadOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp'
---     value
---
--- -   @storeOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp'
---     value
---
--- -   @stencilLoadOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp'
---     value
---
--- -   @stencilStoreOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp'
---     value
---
--- -   @initialLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @finalLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlags',
--- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp',
--- 'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'RenderPassCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-data AttachmentDescription = AttachmentDescription
-  { -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlagBits'
-    -- specifying additional properties of the attachment.
-    flags :: AttachmentDescriptionFlags
-  , -- | @format@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format' value
-    -- specifying the format of the image view that will be used for the
-    -- attachment.
-    format :: Format
-  , -- | @samples@ is the number of samples of the image as defined in
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'.
-    samples :: SampleCountFlagBits
-  , -- | @loadOp@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value
-    -- specifying how the contents of color and depth components of the
-    -- attachment are treated at the beginning of the subpass where it is first
-    -- used.
-    loadOp :: AttachmentLoadOp
-  , -- | @storeOp@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value
-    -- specifying how the contents of color and depth components of the
-    -- attachment are treated at the end of the subpass where it is last used.
-    storeOp :: AttachmentStoreOp
-  , -- | @stencilLoadOp@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value
-    -- specifying how the contents of stencil components of the attachment are
-    -- treated at the beginning of the subpass where it is first used.
-    stencilLoadOp :: AttachmentLoadOp
-  , -- | @stencilStoreOp@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value
-    -- specifying how the contents of stencil components of the attachment are
-    -- treated at the end of the last subpass where it is used.
-    stencilStoreOp :: AttachmentStoreOp
-  , -- | @initialLayout@ is the layout the attachment image subresource will be
-    -- in when a render pass instance begins.
-    initialLayout :: ImageLayout
-  , -- | @finalLayout@ is the layout the attachment image subresource will be
-    -- transitioned to when a render pass instance ends.
-    finalLayout :: ImageLayout
-  }
-  deriving (Typeable)
-deriving instance Show AttachmentDescription
-
-instance ToCStruct AttachmentDescription where
-  withCStruct x f = allocaBytesAligned 36 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AttachmentDescription{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr AttachmentDescriptionFlags)) (flags)
-    poke ((p `plusPtr` 4 :: Ptr Format)) (format)
-    poke ((p `plusPtr` 8 :: Ptr SampleCountFlagBits)) (samples)
-    poke ((p `plusPtr` 12 :: Ptr AttachmentLoadOp)) (loadOp)
-    poke ((p `plusPtr` 16 :: Ptr AttachmentStoreOp)) (storeOp)
-    poke ((p `plusPtr` 20 :: Ptr AttachmentLoadOp)) (stencilLoadOp)
-    poke ((p `plusPtr` 24 :: Ptr AttachmentStoreOp)) (stencilStoreOp)
-    poke ((p `plusPtr` 28 :: Ptr ImageLayout)) (initialLayout)
-    poke ((p `plusPtr` 32 :: Ptr ImageLayout)) (finalLayout)
-    f
-  cStructSize = 36
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 4 :: Ptr Format)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr SampleCountFlagBits)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr AttachmentLoadOp)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr AttachmentStoreOp)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr AttachmentLoadOp)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr AttachmentStoreOp)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr ImageLayout)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr ImageLayout)) (zero)
-    f
-
-instance FromCStruct AttachmentDescription where
-  peekCStruct p = do
-    flags <- peek @AttachmentDescriptionFlags ((p `plusPtr` 0 :: Ptr AttachmentDescriptionFlags))
-    format <- peek @Format ((p `plusPtr` 4 :: Ptr Format))
-    samples <- peek @SampleCountFlagBits ((p `plusPtr` 8 :: Ptr SampleCountFlagBits))
-    loadOp <- peek @AttachmentLoadOp ((p `plusPtr` 12 :: Ptr AttachmentLoadOp))
-    storeOp <- peek @AttachmentStoreOp ((p `plusPtr` 16 :: Ptr AttachmentStoreOp))
-    stencilLoadOp <- peek @AttachmentLoadOp ((p `plusPtr` 20 :: Ptr AttachmentLoadOp))
-    stencilStoreOp <- peek @AttachmentStoreOp ((p `plusPtr` 24 :: Ptr AttachmentStoreOp))
-    initialLayout <- peek @ImageLayout ((p `plusPtr` 28 :: Ptr ImageLayout))
-    finalLayout <- peek @ImageLayout ((p `plusPtr` 32 :: Ptr ImageLayout))
-    pure $ AttachmentDescription
-             flags format samples loadOp storeOp stencilLoadOp stencilStoreOp initialLayout finalLayout
-
-instance Storable AttachmentDescription where
-  sizeOf ~_ = 36
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AttachmentDescription where
-  zero = AttachmentDescription
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkAttachmentReference - Structure specifying an attachment reference
---
--- == Valid Usage
---
--- -   If @attachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@
---     /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR',
---     'Graphics.Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR',
---     'Graphics.Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR',
---     'Graphics.Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR',
---     or
---     'Graphics.Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @layout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT',
--- 'SubpassDescription'
-data AttachmentReference = AttachmentReference
-  { -- | @attachment@ is either an integer value identifying an attachment at the
-    -- corresponding index in 'RenderPassCreateInfo'::@pAttachments@, or
-    -- 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' to signify that
-    -- this attachment is not used.
-    attachment :: Word32
-  , -- | @layout@ is a 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout'
-    -- value specifying the layout the attachment uses during the subpass.
-    layout :: ImageLayout
-  }
-  deriving (Typeable)
-deriving instance Show AttachmentReference
-
-instance ToCStruct AttachmentReference where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AttachmentReference{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (attachment)
-    poke ((p `plusPtr` 4 :: Ptr ImageLayout)) (layout)
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr ImageLayout)) (zero)
-    f
-
-instance FromCStruct AttachmentReference where
-  peekCStruct p = do
-    attachment <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    layout <- peek @ImageLayout ((p `plusPtr` 4 :: Ptr ImageLayout))
-    pure $ AttachmentReference
-             attachment layout
-
-instance Storable AttachmentReference where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AttachmentReference where
-  zero = AttachmentReference
-           zero
-           zero
-
-
--- | VkSubpassDescription - Structure specifying a subpass description
---
--- = Description
---
--- Each element of the @pInputAttachments@ array corresponds to an input
--- attachment index in a fragment shader, i.e. if a shader declares an
--- image variable decorated with a @InputAttachmentIndex@ value of __X__,
--- then it uses the attachment provided in @pInputAttachments@[__X__].
--- Input attachments /must/ also be bound to the pipeline in a descriptor
--- set. If the @attachment@ member of any element of @pInputAttachments@ is
--- 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the application
--- /must/ not read from the corresponding input attachment index. Fragment
--- shaders /can/ use subpass input variables to access the contents of an
--- input attachment at the fragment’s (x, y, layer) framebuffer
--- coordinates. Input attachments /must/ not be used by any subpasses
--- within a renderpass that enables
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>.
---
--- Each element of the @pColorAttachments@ array corresponds to an output
--- location in the shader, i.e. if the shader declares an output variable
--- decorated with a @Location@ value of __X__, then it uses the attachment
--- provided in @pColorAttachments@[__X__]. If the @attachment@ member of
--- any element of @pColorAttachments@ is
--- 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', writes to the
--- corresponding location by a fragment are discarded.
---
--- If @flags@ does not include
--- 'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
--- and if @pResolveAttachments@ is not @NULL@, each of its elements
--- corresponds to a color attachment (the element in @pColorAttachments@ at
--- the same index), and a multisample resolve operation is defined for each
--- attachment. At the end of each subpass, multisample resolve operations
--- read the subpass’s color attachments, and resolve the samples for each
--- pixel within the render area to the same pixel location in the
--- corresponding resolve attachments, unless the resolve attachment index
--- is 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'.
---
--- Similarly, if @flags@ does not include
--- 'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
--- and
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@pDepthStencilResolveAttachment@
--- is not @NULL@ and does not have the value
--- 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it corresponds
--- to the depth\/stencil attachment in @pDepthStencilAttachment@, and
--- multisample resolve operations for depth and stencil are defined by
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@depthResolveMode@
--- and
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@stencilResolveMode@,
--- respectively. At the end of each subpass, multisample resolve operations
--- read the subpass’s depth\/stencil attachment, and resolve the samples
--- for each pixel to the same pixel location in the corresponding resolve
--- attachment. If
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@depthResolveMode@
--- is 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',
--- then the depth component of the resolve attachment is not written to and
--- its contents are preserved. Similarly, if
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@stencilResolveMode@
--- is 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',
--- then the stencil component of the resolve attachment is not written to
--- and its contents are preserved.
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@depthResolveMode@
--- is ignored if the 'Graphics.Vulkan.Core10.Enums.Format.Format' of the
--- @pDepthStencilResolveAttachment@ does not have a depth component.
--- Similarly,
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@stencilResolveMode@
--- is ignored if the 'Graphics.Vulkan.Core10.Enums.Format.Format' of the
--- @pDepthStencilResolveAttachment@ does not have a stencil component.
---
--- If the image subresource range referenced by the depth\/stencil
--- attachment is created with
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT',
--- then the multisample resolve operation uses the sample locations state
--- specified in the @sampleLocationsInfo@ member of the element of the
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT'::@pPostSubpassSampleLocations@
--- for the subpass.
---
--- If @pDepthStencilAttachment@ is @NULL@, or if its attachment index is
--- 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it indicates
--- that no depth\/stencil attachment will be used in the subpass.
---
--- 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__.
---
--- In addition, 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:
---
--- -   'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM'
---     is set.
---
--- -   The attachment is used as a color or depth\/stencil in the subpass.
---
--- 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
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   @colorAttachmentCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxColorAttachments@
---
--- -   If the first use of an attachment in this render pass is as an input
---     attachment, and the attachment is not also used as a color or
---     depth\/stencil attachment in the same subpass, then @loadOp@ /must/
---     not be
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'
---
--- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment
---     that is not 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     the corresponding color attachment /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---
--- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment
---     that is not 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     the corresponding color attachment /must/ not have a sample count of
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If @pResolveAttachments@ is not @NULL@, each resolve attachment that
---     is not 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---     /must/ have a sample count of
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If @pResolveAttachments@ is not @NULL@, each resolve attachment that
---     is not 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---     /must/ have the same 'Graphics.Vulkan.Core10.Enums.Format.Format' as
---     its corresponding color attachment
---
--- -   All attachments in @pColorAttachments@ that are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
---     the same sample count
---
--- -   All attachments in @pInputAttachments@ that are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
---     formats whose features contain at least one of
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   All attachments in @pColorAttachments@ that are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
---     formats whose features contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
---
--- -   All attachments in @pResolveAttachments@ that are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
---     formats whose features contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
---
--- -   If @pDepthStencilAttachment@ is not @NULL@ and the attachment is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it
---     /must/ have a format whose features contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, and
---     all attachments in @pColorAttachments@ that are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
---     a sample count that is smaller than or equal to the sample count of
---     @pDepthStencilAttachment@ if it is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---
--- -   If neither the @VK_AMD_mixed_attachment_samples@ nor the
---     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if
---     @pDepthStencilAttachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' and any
---     attachments in @pColorAttachments@ are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', they /must/
---     have the same sample count
---
--- -   The @attachment@ member of each element of @pPreserveAttachments@
---     /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.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 by more than one 'AttachmentReference'
---     member, then each use /must/ use the same @layout@
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX',
---     it /must/ also include
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
---     and if @pResolveAttachments@ is not @NULL@, then each resolve
---     attachment /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
---     and if @pDepthStencilResolveAttachmentKHR@ is not @NULL@, then the
---     depth\/stencil resolve attachment /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
---     then the subpass /must/ be the last subpass in a subpass dependency
---     chain
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM',
---     then the sample count of the input attachments /must/ equal
---     @rasterizationSamples@
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM',
---     and if @sampleShadingEnable@ is enabled (explicitly or implicitly)
---     then @minSampleShading@ /must/ equal 0.0
---
--- -   If the render pass is created with
---     'Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits.RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM'
---     each of the elements of @pInputAttachments@ /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---
--- == Valid Usage (Implicit)
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlagBits'
---     values
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value
---
--- -   If @inputAttachmentCount@ is not @0@, @pInputAttachments@ /must/ be
---     a valid pointer to an array of @inputAttachmentCount@ valid
---     'AttachmentReference' structures
---
--- -   If @colorAttachmentCount@ is not @0@, @pColorAttachments@ /must/ be
---     a valid pointer to an array of @colorAttachmentCount@ valid
---     'AttachmentReference' structures
---
--- -   If @colorAttachmentCount@ is not @0@, and @pResolveAttachments@ is
---     not @NULL@, @pResolveAttachments@ /must/ be a valid pointer to an
---     array of @colorAttachmentCount@ valid 'AttachmentReference'
---     structures
---
--- -   If @pDepthStencilAttachment@ is not @NULL@,
---     @pDepthStencilAttachment@ /must/ be a valid pointer to a valid
---     'AttachmentReference' structure
---
--- -   If @preserveAttachmentCount@ is not @0@, @pPreserveAttachments@
---     /must/ be a valid pointer to an array of @preserveAttachmentCount@
---     @uint32_t@ values
---
--- = See Also
---
--- 'AttachmentReference',
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
--- 'RenderPassCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlags'
-data SubpassDescription = SubpassDescription
-  { -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlagBits'
-    -- specifying usage of the subpass.
-    flags :: SubpassDescriptionFlags
-  , -- | @pipelineBindPoint@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
-    -- specifying the pipeline type supported for this subpass.
-    pipelineBindPoint :: PipelineBindPoint
-  , -- | @pInputAttachments@ is a pointer to an array of 'AttachmentReference'
-    -- structures defining the input attachments for this subpass and their
-    -- layouts.
-    inputAttachments :: Vector AttachmentReference
-  , -- | @pColorAttachments@ is a pointer to an array of 'AttachmentReference'
-    -- structures defining the color attachments for this subpass and their
-    -- layouts.
-    colorAttachments :: Vector AttachmentReference
-  , -- | @pResolveAttachments@ is an optional array of @colorAttachmentCount@
-    -- 'AttachmentReference' structures defining the resolve attachments for
-    -- this subpass and their layouts.
-    resolveAttachments :: Vector AttachmentReference
-  , -- | @pDepthStencilAttachment@ is a pointer to a 'AttachmentReference'
-    -- structure specifying the depth\/stencil attachment for this subpass and
-    -- its layout.
-    depthStencilAttachment :: Maybe AttachmentReference
-  , -- | @pPreserveAttachments@ is a pointer to an array of
-    -- @preserveAttachmentCount@ render pass attachment indices identifying
-    -- attachments that are not used by this subpass, but whose contents /must/
-    -- be preserved throughout the subpass.
-    preserveAttachments :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show SubpassDescription
-
-instance ToCStruct SubpassDescription where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SubpassDescription{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr SubpassDescriptionFlags)) (flags)
-    lift $ poke ((p `plusPtr` 4 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (inputAttachments)) :: Word32))
-    pPInputAttachments' <- ContT $ allocaBytesAligned @AttachmentReference ((Data.Vector.length (inputAttachments)) * 8) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPInputAttachments' `plusPtr` (8 * (i)) :: Ptr AttachmentReference) (e) . ($ ())) (inputAttachments)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr AttachmentReference))) (pPInputAttachments')
-    let pColorAttachmentsLength = Data.Vector.length $ (colorAttachments)
-    let pResolveAttachmentsLength = Data.Vector.length $ (resolveAttachments)
-    lift $ unless (fromIntegral pResolveAttachmentsLength == pColorAttachmentsLength || pResolveAttachmentsLength == 0) $
-      throwIO $ IOError Nothing InvalidArgument "" "pResolveAttachments and pColorAttachments must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral pColorAttachmentsLength :: Word32))
-    pPColorAttachments' <- ContT $ allocaBytesAligned @AttachmentReference ((Data.Vector.length (colorAttachments)) * 8) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPColorAttachments' `plusPtr` (8 * (i)) :: Ptr AttachmentReference) (e) . ($ ())) (colorAttachments)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr AttachmentReference))) (pPColorAttachments')
-    pResolveAttachments'' <- if Data.Vector.null (resolveAttachments)
-      then pure nullPtr
-      else do
-        pPResolveAttachments <- ContT $ allocaBytesAligned @AttachmentReference (((Data.Vector.length (resolveAttachments))) * 8) 4
-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPResolveAttachments `plusPtr` (8 * (i)) :: Ptr AttachmentReference) (e) . ($ ())) ((resolveAttachments))
-        pure $ pPResolveAttachments
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr AttachmentReference))) pResolveAttachments''
-    pDepthStencilAttachment'' <- case (depthStencilAttachment) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr AttachmentReference))) pDepthStencilAttachment''
-    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (preserveAttachments)) :: Word32))
-    pPPreserveAttachments' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (preserveAttachments)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPPreserveAttachments' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (preserveAttachments)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word32))) (pPPreserveAttachments')
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 4 :: Ptr PipelineBindPoint)) (zero)
-    pPInputAttachments' <- ContT $ allocaBytesAligned @AttachmentReference ((Data.Vector.length (mempty)) * 8) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPInputAttachments' `plusPtr` (8 * (i)) :: Ptr AttachmentReference) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr AttachmentReference))) (pPInputAttachments')
-    pPColorAttachments' <- ContT $ allocaBytesAligned @AttachmentReference ((Data.Vector.length (mempty)) * 8) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPColorAttachments' `plusPtr` (8 * (i)) :: Ptr AttachmentReference) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr AttachmentReference))) (pPColorAttachments')
-    pPPreserveAttachments' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPPreserveAttachments' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word32))) (pPPreserveAttachments')
-    lift $ f
-
-instance FromCStruct SubpassDescription where
-  peekCStruct p = do
-    flags <- peek @SubpassDescriptionFlags ((p `plusPtr` 0 :: Ptr SubpassDescriptionFlags))
-    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 4 :: Ptr PipelineBindPoint))
-    inputAttachmentCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pInputAttachments <- peek @(Ptr AttachmentReference) ((p `plusPtr` 16 :: Ptr (Ptr AttachmentReference)))
-    pInputAttachments' <- generateM (fromIntegral inputAttachmentCount) (\i -> peekCStruct @AttachmentReference ((pInputAttachments `advancePtrBytes` (8 * (i)) :: Ptr AttachmentReference)))
-    colorAttachmentCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pColorAttachments <- peek @(Ptr AttachmentReference) ((p `plusPtr` 32 :: Ptr (Ptr AttachmentReference)))
-    pColorAttachments' <- generateM (fromIntegral colorAttachmentCount) (\i -> peekCStruct @AttachmentReference ((pColorAttachments `advancePtrBytes` (8 * (i)) :: Ptr AttachmentReference)))
-    pResolveAttachments <- peek @(Ptr AttachmentReference) ((p `plusPtr` 40 :: Ptr (Ptr AttachmentReference)))
-    let pResolveAttachmentsLength = if pResolveAttachments == nullPtr then 0 else (fromIntegral colorAttachmentCount)
-    pResolveAttachments' <- generateM pResolveAttachmentsLength (\i -> peekCStruct @AttachmentReference ((pResolveAttachments `advancePtrBytes` (8 * (i)) :: Ptr AttachmentReference)))
-    pDepthStencilAttachment <- peek @(Ptr AttachmentReference) ((p `plusPtr` 48 :: Ptr (Ptr AttachmentReference)))
-    pDepthStencilAttachment' <- maybePeek (\j -> peekCStruct @AttachmentReference (j)) pDepthStencilAttachment
-    preserveAttachmentCount <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    pPreserveAttachments <- peek @(Ptr Word32) ((p `plusPtr` 64 :: Ptr (Ptr Word32)))
-    pPreserveAttachments' <- generateM (fromIntegral preserveAttachmentCount) (\i -> peek @Word32 ((pPreserveAttachments `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ SubpassDescription
-             flags pipelineBindPoint pInputAttachments' pColorAttachments' pResolveAttachments' pDepthStencilAttachment' pPreserveAttachments'
-
-instance Zero SubpassDescription where
-  zero = SubpassDescription
-           zero
-           zero
-           mempty
-           mempty
-           mempty
-           Nothing
-           mempty
-
-
--- | VkSubpassDependency - Structure specifying a subpass dependency
---
--- = Description
---
--- If @srcSubpass@ is equal to @dstSubpass@ then the 'SubpassDependency'
--- describes a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- 'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', the first
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--- includes commands that occur earlier in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
--- than the
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass' 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
--- specified by @srcStageMask@.
---
--- If @dstSubpass@ is equal to
--- 'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', the second
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--- includes commands that occur later in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
--- than the 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdEndRenderPass'
--- 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
--- specified by @dstStageMask@.
---
--- The first
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
--- specified by @srcStageMask@. It is also limited to access types in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>
--- specified by @srcAccessMask@.
---
--- The second
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
--- specified by @dstStageMask@. It is also limited to access types in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>
--- specified by @dstAccessMask@.
---
--- The
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-available-and-visible availability and visibility operations>
--- defined by a subpass dependency affect the execution of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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.OtherTypes.MemoryBarrier' (with matching
--- @srcAccessMask@ and @dstAccessMask@ parameters) submitted as a part of a
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdPipelineBarrier' (with
--- matching @srcStageMask@ and @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 a
--- 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier' defined similarly
--- to the 'Graphics.Vulkan.Core10.OtherTypes.MemoryBarrier' above, the
--- queue family indices set to
--- 'Graphics.Vulkan.Core10.APIConstants.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 the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   @srcSubpass@ /must/ be less than or equal to @dstSubpass@, unless
---     one of them is
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', to avoid
---     cyclic dependencies and ensure a valid execution order
---
--- -   @srcSubpass@ and @dstSubpass@ /must/ not both be equal to
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
---
--- -   If @srcSubpass@ is equal to @dstSubpass@ and not all of the stages
---     in @srcStageMask@ and @dstStageMask@ are
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stages>,
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>
---     pipeline stage in @srcStageMask@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>
---     than or equal to the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   Any access flag included in @dstAccessMask@ /must/ be supported by
---     one of the pipeline stages in @dstStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   If @srcSubpass@ equals @dstSubpass@, and @srcStageMask@ and
---     @dstStageMask@ both include a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stage>,
---     then @dependencyFlags@ /must/ include
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT'
---
--- -   If @dependencyFlags@ includes
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
---     @srcSubpass@ /must/ not be equal to
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
---
--- -   If @dependencyFlags@ includes
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
---     @dstSubpass@ /must/ not be equal to
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
---
--- -   If @srcSubpass@ equals @dstSubpass@ and that subpass has more than
---     one bit set in the view mask, then @dependencyFlags@ /must/ include
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- == Valid Usage (Implicit)
---
--- -   @srcStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     values
---
--- -   @srcStageMask@ /must/ not be @0@
---
--- -   @dstStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     values
---
--- -   @dstStageMask@ /must/ not be @0@
---
--- -   @srcAccessMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
---
--- -   @dstAccessMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
---
--- -   @dependencyFlags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlags',
--- 'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags',
--- 'RenderPassCreateInfo'
-data SubpassDependency = SubpassDependency
-  { -- | @srcSubpass@ is the subpass index of the first subpass in the
-    -- dependency, or 'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'.
-    srcSubpass :: Word32
-  , -- | @dstSubpass@ is the subpass index of the second subpass in the
-    -- dependency, or 'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'.
-    dstSubpass :: Word32
-  , -- | @srcStageMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
-    -- specifying the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>.
-    srcStageMask :: PipelineStageFlags
-  , -- | @dstStageMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
-    -- specifying the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
-    dstStageMask :: PipelineStageFlags
-  , -- | @srcAccessMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying
-    -- a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>.
-    srcAccessMask :: AccessFlags
-  , -- | @dstAccessMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying
-    -- a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>.
-    dstAccessMask :: AccessFlags
-  , -- | @dependencyFlags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits'.
-    dependencyFlags :: DependencyFlags
-  }
-  deriving (Typeable)
-deriving instance Show SubpassDependency
-
-instance ToCStruct SubpassDependency where
-  withCStruct x f = allocaBytesAligned 28 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SubpassDependency{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (srcSubpass)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (dstSubpass)
-    poke ((p `plusPtr` 8 :: Ptr PipelineStageFlags)) (srcStageMask)
-    poke ((p `plusPtr` 12 :: Ptr PipelineStageFlags)) (dstStageMask)
-    poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (srcAccessMask)
-    poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (dstAccessMask)
-    poke ((p `plusPtr` 24 :: Ptr DependencyFlags)) (dependencyFlags)
-    f
-  cStructSize = 28
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr PipelineStageFlags)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr PipelineStageFlags)) (zero)
-    f
-
-instance FromCStruct SubpassDependency where
-  peekCStruct p = do
-    srcSubpass <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    dstSubpass <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    srcStageMask <- peek @PipelineStageFlags ((p `plusPtr` 8 :: Ptr PipelineStageFlags))
-    dstStageMask <- peek @PipelineStageFlags ((p `plusPtr` 12 :: Ptr PipelineStageFlags))
-    srcAccessMask <- peek @AccessFlags ((p `plusPtr` 16 :: Ptr AccessFlags))
-    dstAccessMask <- peek @AccessFlags ((p `plusPtr` 20 :: Ptr AccessFlags))
-    dependencyFlags <- peek @DependencyFlags ((p `plusPtr` 24 :: Ptr DependencyFlags))
-    pure $ SubpassDependency
-             srcSubpass dstSubpass srcStageMask dstStageMask srcAccessMask dstAccessMask dependencyFlags
-
-instance Storable SubpassDependency where
-  sizeOf ~_ = 28
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SubpassDependency where
-  zero = SubpassDependency
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkRenderPassCreateInfo - Structure specifying parameters of a newly
--- created render pass
---
--- = Description
---
--- Note
---
--- Care should be taken to avoid a data race here; if any subpasses access
--- attachments with overlapping memory locations, and one of those accesses
--- is a write, a subpass dependency needs to be included between them.
---
--- == Valid Usage
---
--- -   If the @attachment@ member of any element of @pInputAttachments@,
---     @pColorAttachments@, @pResolveAttachments@ or
---     @pDepthStencilAttachment@, or any element of @pPreserveAttachments@
---     in any element of @pSubpasses@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it /must/
---     be less than @attachmentCount@
---
--- -   For any member of @pAttachments@ with a @loadOp@ equal to
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR',
---     the first use of that attachment /must/ not specify a @layout@ equal
---     to
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   For any member of @pAttachments@ with a @stencilLoadOp@ equal to
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR',
---     the first use of that attachment /must/ not specify a @layout@ equal
---     to
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   For any member of @pAttachments@ with a @loadOp@ equal to
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR',
---     the first use of that attachment /must/ not specify a @layout@ equal
---     to
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
---
--- -   For any member of @pAttachments@ with a @stencilLoadOp@ equal to
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR',
---     the first use of that attachment /must/ not specify a @layout@ equal
---     to
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo'
---     structure, the @subpass@ member of each element of its
---     @pAspectReferences@ member /must/ be less than @subpassCount@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo'
---     structure, the @inputAttachmentIndex@ member of each element of its
---     @pAspectReferences@ member /must/ be less than the value of
---     @inputAttachmentCount@ in the member of @pSubpasses@ identified by
---     its @subpass@ member
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo'
---     structure, for any element of the @pInputAttachments@ member of any
---     element of @pSubpasses@ where the @attachment@ member is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the
---     @aspectMask@ member of the corresponding element of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo'::@pAspectReferences@
---     /must/ only include aspects that are present in images of the format
---     specified by the element of @pAttachments@ at @attachment@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
---     structure, and its @subpassCount@ member is not zero, that member
---     /must/ be equal to the value of @subpassCount@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
---     structure, if its @dependencyCount@ member is not zero, it /must/ be
---     equal to @dependencyCount@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
---     structure, for each non-zero element of @pViewOffsets@, the
---     @srcSubpass@ and @dstSubpass@ members of @pDependencies@ at the same
---     index /must/ not be equal
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
---     structure, for any element of @pDependencies@ with a
---     @dependencyFlags@ member that does not include
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
---     the corresponding element of the @pViewOffsets@ member of that
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
---     instance /must/ be @0@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
---     structure, elements of its @pViewMasks@ member /must/ either all be
---     @0@, or all not be @0@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
---     structure, and each element of its @pViewMasks@ member is @0@, the
---     @dependencyFlags@ member of each element of @pDependencies@ /must/
---     not include
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
---     structure, and each element of its @pViewMasks@ member is @0@,
---     @correlatedViewMaskCount@ /must/ be @0@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
---     structure, each element of its @pViewMask@ member /must/ not have a
---     bit set at an index greater than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferLayers@
---
--- -   For any element of @pDependencies@, if the @srcSubpass@ is not
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage
---     flags included in the @srcStageMask@ member of that dependency
---     /must/ be a pipeline stage supported by the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types pipeline>
---     identified by the @pipelineBindPoint@ member of the source subpass
---
--- -   For any element of @pDependencies@, if the @dstSubpass@ is not
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage
---     flags included in the @dstStageMask@ member of that dependency
---     /must/ be a pipeline stage supported by the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types pipeline>
---     identified by the @pipelineBindPoint@ member of the destination
---     subpass
---
--- -   The @srcSubpass@ member of each element of @pDependencies@ /must/ be
---     less than @subpassCount@
---
--- -   The @dstSubpass@ member of each element of @pDependencies@ /must/ be
---     less than @subpassCount@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo',
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlagBits'
---     values
---
--- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
---     pointer to an array of @attachmentCount@ valid
---     'AttachmentDescription' structures
---
--- -   @pSubpasses@ /must/ be a valid pointer to an array of @subpassCount@
---     valid 'SubpassDescription' structures
---
--- -   If @dependencyCount@ is not @0@, @pDependencies@ /must/ be a valid
---     pointer to an array of @dependencyCount@ valid 'SubpassDependency'
---     structures
---
--- -   @subpassCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'AttachmentDescription',
--- 'Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'SubpassDependency', 'SubpassDescription', 'createRenderPass'
-data RenderPassCreateInfo (es :: [Type]) = RenderPassCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlagBits'
-    flags :: RenderPassCreateFlags
-  , -- | @pAttachments@ is a pointer to an array of @attachmentCount@
-    -- 'AttachmentDescription' structures describing the attachments used by
-    -- the render pass.
-    attachments :: Vector AttachmentDescription
-  , -- | @pSubpasses@ is a pointer to an array of @subpassCount@
-    -- 'SubpassDescription' structures describing each subpass.
-    subpasses :: Vector SubpassDescription
-  , -- | @pDependencies@ is a pointer to an array of @dependencyCount@
-    -- 'SubpassDependency' structures describing dependencies between pairs of
-    -- subpasses.
-    dependencies :: Vector SubpassDependency
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (RenderPassCreateInfo es)
-
-instance Extensible RenderPassCreateInfo where
-  extensibleType = STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext RenderPassCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RenderPassCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @RenderPassFragmentDensityMapCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @RenderPassInputAttachmentAspectCreateInfo = Just f
-    | Just Refl <- eqT @e @RenderPassMultiviewCreateInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (RenderPassCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RenderPassCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPassCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
-    pPAttachments' <- ContT $ allocaBytesAligned @AttachmentDescription ((Data.Vector.length (attachments)) * 36) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (36 * (i)) :: Ptr AttachmentDescription) (e) . ($ ())) (attachments)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AttachmentDescription))) (pPAttachments')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (subpasses)) :: Word32))
-    pPSubpasses' <- ContT $ allocaBytesAligned @SubpassDescription ((Data.Vector.length (subpasses)) * 72) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSubpasses' `plusPtr` (72 * (i)) :: Ptr SubpassDescription) (e) . ($ ())) (subpasses)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SubpassDescription))) (pPSubpasses')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (dependencies)) :: Word32))
-    pPDependencies' <- ContT $ allocaBytesAligned @SubpassDependency ((Data.Vector.length (dependencies)) * 28) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDependencies' `plusPtr` (28 * (i)) :: Ptr SubpassDependency) (e) . ($ ())) (dependencies)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency))) (pPDependencies')
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPAttachments' <- ContT $ allocaBytesAligned @AttachmentDescription ((Data.Vector.length (mempty)) * 36) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (36 * (i)) :: Ptr AttachmentDescription) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AttachmentDescription))) (pPAttachments')
-    pPSubpasses' <- ContT $ allocaBytesAligned @SubpassDescription ((Data.Vector.length (mempty)) * 72) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSubpasses' `plusPtr` (72 * (i)) :: Ptr SubpassDescription) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SubpassDescription))) (pPSubpasses')
-    pPDependencies' <- ContT $ allocaBytesAligned @SubpassDependency ((Data.Vector.length (mempty)) * 28) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDependencies' `plusPtr` (28 * (i)) :: Ptr SubpassDependency) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency))) (pPDependencies')
-    lift $ f
-
-instance PeekChain es => FromCStruct (RenderPassCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @RenderPassCreateFlags ((p `plusPtr` 16 :: Ptr RenderPassCreateFlags))
-    attachmentCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pAttachments <- peek @(Ptr AttachmentDescription) ((p `plusPtr` 24 :: Ptr (Ptr AttachmentDescription)))
-    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peekCStruct @AttachmentDescription ((pAttachments `advancePtrBytes` (36 * (i)) :: Ptr AttachmentDescription)))
-    subpassCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pSubpasses <- peek @(Ptr SubpassDescription) ((p `plusPtr` 40 :: Ptr (Ptr SubpassDescription)))
-    pSubpasses' <- generateM (fromIntegral subpassCount) (\i -> peekCStruct @SubpassDescription ((pSubpasses `advancePtrBytes` (72 * (i)) :: Ptr SubpassDescription)))
-    dependencyCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pDependencies <- peek @(Ptr SubpassDependency) ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency)))
-    pDependencies' <- generateM (fromIntegral dependencyCount) (\i -> peekCStruct @SubpassDependency ((pDependencies `advancePtrBytes` (28 * (i)) :: Ptr SubpassDependency)))
-    pure $ RenderPassCreateInfo
-             next flags pAttachments' pSubpasses' pDependencies'
-
-instance es ~ '[] => Zero (RenderPassCreateInfo es) where
-  zero = RenderPassCreateInfo
-           ()
-           zero
-           mempty
-           mempty
-           mempty
-
-
--- | VkFramebufferCreateInfo - Structure specifying parameters of a newly
--- created framebuffer
---
--- = 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops load operations>
--- for those attachments, or happen-after the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops store operations>
--- for those attachments.
---
--- For depth\/stencil attachments, each aspect /can/ be used separately as
--- attachments and non-attachments as long as the non-attachment accesses
--- are also via an image subresource in either the
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
--- layout or the
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
--- layout, and the attachment resource uses whichever of those two layouts
--- the image accesses do not. Use of non-attachment aspects in this case is
--- only well defined if the attachment is used in the subpass where the
--- non-attachment access is being made, or the layout of the image
--- subresource is constant throughout the entire render pass instance,
--- including the @initialLayout@ and @finalLayout@.
---
--- Note
---
--- These restrictions mean that the render pass has full knowledge of all
--- uses of all of the attachments, so that the implementation is able to
--- make correct decisions about when and how to perform layout transitions,
--- when to overlap execution of subpasses, etc.
---
--- It is legal for a subpass to use no color or depth\/stencil attachments,
--- either because it has no attachment references or because all of them
--- are 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'. This kind
--- of subpass /can/ 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.PipelineMultisampleStateCreateInfo' to
--- define the number of samples used in rasterization; however, if
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures'::@variableMultisampleRate@
--- is 'Graphics.Vulkan.Core10.BaseType.FALSE', then all pipelines to be
--- bound with the subpass /must/ have the same value for
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@.
---
--- == Valid Usage
---
--- -   @attachmentCount@ /must/ be equal to the attachment count specified
---     in @renderPass@
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     and @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
---     pointer to an array of @attachmentCount@ valid
---     'Graphics.Vulkan.Core10.Handles.ImageView' handles
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of @pAttachments@ that is used as a color attachment or
---     resolve attachment by @renderPass@ /must/ have been created with a
---     @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of @pAttachments@ that is used as a depth\/stencil
---     attachment by @renderPass@ /must/ have been created with a @usage@
---     value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of @pAttachments@ that is used as a depth\/stencil
---     resolve attachment by @renderPass@ /must/ have been created with a
---     @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of @pAttachments@ that is used as an input attachment
---     by @renderPass@ /must/ have been created with a @usage@ value
---     including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
---
--- -   Each element of @pAttachments@ that is used as a fragment density
---     map attachment by @renderPass@ /must/ not have been created with a
---     @flags@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
---
--- -   If @renderPass@ has a fragment density map attachment and
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nonsubsampledimages non-subsample image feature>
---     is not enabled, each element of @pAttachments@ /must/ have been
---     created with a @flags@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
---     unless that element is the fragment density map attachment
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of @pAttachments@ /must/ have been created with a
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value that matches the
---     'Graphics.Vulkan.Core10.Enums.Format.Format' specified by the
---     corresponding 'AttachmentDescription' in @renderPass@
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of @pAttachments@ /must/ have been created with a
---     @samples@ value that matches the @samples@ value specified by the
---     corresponding 'AttachmentDescription' in @renderPass@
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of @pAttachments@ /must/ have dimensions at least as
---     large as the corresponding framebuffer dimension except for any
---     element that is referenced by @fragmentDensityMapAttachment@
---
--- -   If @renderPass@ was specified with non-zero view masks, each element
---     of @pAttachments@ that is not referenced by
---     @fragmentDensityMapAttachment@ /must/ have a @layerCount@ greater
---     than the index of the most significant bit set in any of those view
---     masks
---
--- -   If @renderPass@ was specified with non-zero view masks, each element
---     of @pAttachments@ that is referenced by
---     @fragmentDensityMapAttachment@ /must/ have a @layerCount@ equal to
---     @1@ or greater than the index of the most significant bit set in any
---     of those view masks
---
--- -   If @renderPass@ was not specified with non-zero view masks, each
---     element of @pAttachments@ that is referenced by
---     @fragmentDensityMapAttachment@ /must/ have a @layerCount@ equal to
---     @1@
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     an element of @pAttachments@ that is referenced by
---     @fragmentDensityMapAttachment@ /must/ have a width at least as large
---     as
---     \(\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\rceil\)
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     an element of @pAttachments@ that is referenced by
---     @fragmentDensityMapAttachment@ /must/ have a height at least as
---     large as
---     \(\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\rceil\)
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of @pAttachments@ /must/ only specify a single mip
---     level
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of @pAttachments@ /must/ have been created with the
---     identity swizzle
---
--- -   @width@ /must/ be greater than @0@
---
--- -   @width@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferWidth@
---
--- -   @height@ /must/ be greater than @0@
---
--- -   @height@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferHeight@
---
--- -   @layers@ /must/ be greater than @0@
---
--- -   @layers@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferLayers@
---
--- -   If @renderPass@ was specified with non-zero view masks, @layers@
---     /must/ be @1@
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     each element of @pAttachments@ that is a 2D or 2D array image view
---     taken from a 3D image /must/ not be a depth\/stencil format
---
--- -   If @flags@ does not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     and @attachmentCount@ is not 0, @pAttachments@ /must/ be a valid
---     pointer to an array of @attachmentCount@ valid
---     'Graphics.Vulkan.Core10.Handles.ImageView' handles
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-imagelessFramebuffer imageless framebuffer>
---     feature is not enabled, @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @attachmentImageInfoCount@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain /must/ be equal to either
---     zero or @attachmentCount@
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @width@ member of any element of the @pAttachmentImageInfos@
---     member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain /must/ be greater than or
---     equal to @width@, except for any element that is referenced by
---     'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'::@fragmentDensityMapAttachment@
---     in @renderPass@
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @height@ member of any element of the @pAttachmentImageInfos@
---     member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain /must/ be greater than or
---     equal to @height@, except for any element that is referenced by
---     'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'::@fragmentDensityMapAttachment@
---     in @renderPass@
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @width@ member of any element of the @pAttachmentImageInfos@
---     member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain that is referenced by
---     'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'::@fragmentDensityMapAttachment@
---     in @renderPass@ /must/ be greater than or equal to
---     \(\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\rceil\)
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @height@ member of any element of the @pAttachmentImageInfos@
---     member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain that is referenced by
---     'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'::@fragmentDensityMapAttachment@
---     in @renderPass@ /must/ be greater than or equal to
---     \(\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\rceil\)
---
--- -   If multiview is enabled for @renderPass@, and @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @layerCount@ member of any element of the
---     @pAttachmentImageInfos@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain /must/ be greater than the
---     maximum bit index set in the view mask in the subpasses in which it
---     is used in @renderPass@
---
--- -   If multiview is not enabled for @renderPass@, and @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @layerCount@ member of any element of the
---     @pAttachmentImageInfos@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain /must/ be greater than or
---     equal to @layers@
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @usage@ member of any element of the @pAttachmentImageInfos@
---     member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain that refers to an attachment
---     used as a color attachment or resolve attachment by @renderPass@
---     /must/ include
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @usage@ member of any element of the @pAttachmentImageInfos@
---     member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain that refers to an attachment
---     used as a depth\/stencil attachment by @renderPass@ /must/ include
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @usage@ member of any element of the @pAttachmentImageInfos@
---     member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain that refers to an attachment
---     used as a depth\/stencil resolve attachment by @renderPass@ /must/
---     include
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     the @usage@ member of any element of the @pAttachmentImageInfos@
---     member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain that refers to an attachment
---     used as an input attachment by @renderPass@ /must/ include
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
---     at least one element of the @pViewFormats@ member of any element of
---     the @pAttachmentImageInfos@ member of a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---     structure included in the @pNext@ chain /must/ be equal to the
---     corresponding value of 'AttachmentDescription'::@format@ used to
---     create @renderPass@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FramebufferCreateFlagBits'
---     values
---
--- -   @renderPass@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.RenderPass' handle
---
--- -   Both of @renderPass@, and the elements of @pAttachments@ that are
---     valid handles of non-ignored parameters /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FramebufferCreateFlags',
--- 'Graphics.Vulkan.Core10.Handles.ImageView',
--- 'Graphics.Vulkan.Core10.Handles.RenderPass',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createFramebuffer'
-data FramebufferCreateInfo (es :: [Type]) = FramebufferCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FramebufferCreateFlagBits'
-    flags :: FramebufferCreateFlags
-  , -- | @renderPass@ is a render pass defining what render passes the
-    -- framebuffer will be compatible with. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility Render Pass Compatibility>
-    -- for details.
-    renderPass :: RenderPass
-  , -- | @pAttachments@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.ImageView' handles, each of which will
-    -- be used as the corresponding attachment in a render pass instance. If
-    -- @flags@ includes
-    -- 'Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
-    -- this parameter is ignored.
-    attachments :: Vector ImageView
-  , -- | @width@, @height@ and @layers@ define the dimensions of the framebuffer.
-    -- If the render pass uses multiview, then @layers@ /must/ be one and each
-    -- attachment requires a number of layers that is greater than the maximum
-    -- bit index set in the view mask in the subpasses in which it is used.
-    width :: Word32
-  , -- No documentation found for Nested "VkFramebufferCreateInfo" "height"
-    height :: Word32
-  , -- No documentation found for Nested "VkFramebufferCreateInfo" "layers"
-    layers :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (FramebufferCreateInfo es)
-
-instance Extensible FramebufferCreateInfo where
-  extensibleType = STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext FramebufferCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends FramebufferCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @FramebufferAttachmentsCreateInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (FramebufferCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p FramebufferCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr FramebufferCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 24 :: Ptr RenderPass)) (renderPass)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
-    pPAttachments' <- ContT $ allocaBytesAligned @ImageView ((Data.Vector.length (attachments)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAttachments' `plusPtr` (8 * (i)) :: Ptr ImageView) (e)) (attachments)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr ImageView))) (pPAttachments')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (width)
-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (height)
-    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (layers)
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 24 :: Ptr RenderPass)) (zero)
-    pPAttachments' <- ContT $ allocaBytesAligned @ImageView ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAttachments' `plusPtr` (8 * (i)) :: Ptr ImageView) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr ImageView))) (pPAttachments')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (FramebufferCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @FramebufferCreateFlags ((p `plusPtr` 16 :: Ptr FramebufferCreateFlags))
-    renderPass <- peek @RenderPass ((p `plusPtr` 24 :: Ptr RenderPass))
-    attachmentCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pAttachments <- peek @(Ptr ImageView) ((p `plusPtr` 40 :: Ptr (Ptr ImageView)))
-    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peek @ImageView ((pAttachments `advancePtrBytes` (8 * (i)) :: Ptr ImageView)))
-    width <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    height <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
-    layers <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    pure $ FramebufferCreateInfo
-             next flags renderPass pAttachments' width height layers
-
-instance es ~ '[] => Zero (FramebufferCreateInfo es) where
-  zero = FramebufferCreateInfo
-           ()
-           zero
-           zero
-           mempty
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/Pass.hs-boot b/src/Graphics/Vulkan/Core10/Pass.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Pass.hs-boot
+++ /dev/null
@@ -1,64 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Pass  ( AttachmentDescription
-                                    , AttachmentReference
-                                    , FramebufferCreateInfo
-                                    , RenderPassCreateInfo
-                                    , SubpassDependency
-                                    , SubpassDescription
-                                    ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data AttachmentDescription
-
-instance ToCStruct AttachmentDescription
-instance Show AttachmentDescription
-
-instance FromCStruct AttachmentDescription
-
-
-data AttachmentReference
-
-instance ToCStruct AttachmentReference
-instance Show AttachmentReference
-
-instance FromCStruct AttachmentReference
-
-
-type role FramebufferCreateInfo nominal
-data FramebufferCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (FramebufferCreateInfo es)
-instance Show (Chain es) => Show (FramebufferCreateInfo es)
-
-instance PeekChain es => FromCStruct (FramebufferCreateInfo es)
-
-
-type role RenderPassCreateInfo nominal
-data RenderPassCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (RenderPassCreateInfo es)
-instance Show (Chain es) => Show (RenderPassCreateInfo es)
-
-instance PeekChain es => FromCStruct (RenderPassCreateInfo es)
-
-
-data SubpassDependency
-
-instance ToCStruct SubpassDependency
-instance Show SubpassDependency
-
-instance FromCStruct SubpassDependency
-
-
-data SubpassDescription
-
-instance ToCStruct SubpassDescription
-instance Show SubpassDescription
-
-instance FromCStruct SubpassDescription
-
diff --git a/src/Graphics/Vulkan/Core10/Pipeline.hs b/src/Graphics/Vulkan/Core10/Pipeline.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Pipeline.hs
+++ /dev/null
@@ -1,3533 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Pipeline  ( createGraphicsPipelines
-                                        , withGraphicsPipelines
-                                        , createComputePipelines
-                                        , withComputePipelines
-                                        , destroyPipeline
-                                        , SpecializationMapEntry(..)
-                                        , SpecializationInfo(..)
-                                        , PipelineShaderStageCreateInfo(..)
-                                        , ComputePipelineCreateInfo(..)
-                                        , VertexInputBindingDescription(..)
-                                        , VertexInputAttributeDescription(..)
-                                        , PipelineVertexInputStateCreateInfo(..)
-                                        , PipelineInputAssemblyStateCreateInfo(..)
-                                        , PipelineTessellationStateCreateInfo(..)
-                                        , PipelineViewportStateCreateInfo(..)
-                                        , PipelineRasterizationStateCreateInfo(..)
-                                        , PipelineMultisampleStateCreateInfo(..)
-                                        , PipelineColorBlendAttachmentState(..)
-                                        , PipelineColorBlendStateCreateInfo(..)
-                                        , PipelineDynamicStateCreateInfo(..)
-                                        , StencilOpState(..)
-                                        , PipelineDepthStencilStateCreateInfo(..)
-                                        , GraphicsPipelineCreateInfo(..)
-                                        ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Foldable (traverse_)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import qualified Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.ByteString (packCString)
-import Data.ByteString (useAsCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Either (Either)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Extends (forgetExtensions)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct.Extends (peekSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (pokeSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (withSomeCStruct)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Enums.BlendFactor (BlendFactor)
-import Graphics.Vulkan.Core10.Enums.BlendOp (BlendOp)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlags)
-import Graphics.Vulkan.Core10.Enums.CompareOp (CompareOp)
-import Graphics.Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlags)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateComputePipelines))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateGraphicsPipelines))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyPipeline))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core10.Enums.DynamicState (DynamicState)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.FrontFace (FrontFace)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsPipelineShaderGroupsCreateInfoNV)
-import Graphics.Vulkan.Core10.Enums.LogicOp (LogicOp)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Handles (Pipeline)
-import Graphics.Vulkan.Core10.Handles (Pipeline(..))
-import Graphics.Vulkan.Core10.Handles (PipelineCache)
-import Graphics.Vulkan.Core10.Handles (PipelineCache(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced (PipelineColorBlendAdvancedStateCreateInfoEXT)
-import Graphics.Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags (PipelineColorBlendStateCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_pipeline_compiler_control (PipelineCompilerControlCreateInfoAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples (PipelineCoverageModulationStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode (PipelineCoverageReductionStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color (PipelineCoverageToColorStateCreateInfoNV)
-import Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfoEXT)
-import Graphics.Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags (PipelineDepthStencilStateCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles (PipelineDiscardRectangleStateCreateInfoEXT)
-import Graphics.Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags (PipelineDynamicStateCreateFlags)
-import Graphics.Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags (PipelineInputAssemblyStateCreateFlags)
-import Graphics.Vulkan.Core10.Handles (PipelineLayout)
-import Graphics.Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags (PipelineMultisampleStateCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization (PipelineRasterizationConservativeStateCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable (PipelineRasterizationDepthClipStateCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_line_rasterization (PipelineRasterizationLineStateCreateInfoEXT)
-import Graphics.Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_rasterization_order (PipelineRasterizationStateRasterizationOrderAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_transform_feedback (PipelineRasterizationStateStreamCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test (PipelineRepresentativeFragmentTestStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (PipelineSampleLocationsStateCreateInfoEXT)
-import Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control (PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PipelineTessellationDomainOriginStateCreateInfo)
-import Graphics.Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags (PipelineTessellationStateCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PipelineVertexInputDivisorStateCreateInfoEXT)
-import Graphics.Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags (PipelineVertexInputStateCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportCoarseSampleOrderStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive (PipelineViewportExclusiveScissorStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportShadingRateImageStateCreateInfoNV)
-import Graphics.Vulkan.Core10.Enums.PipelineViewportStateCreateFlags (PipelineViewportStateCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle (PipelineViewportSwizzleStateCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling (PipelineViewportWScalingStateCreateInfoNV)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.PolygonMode (PolygonMode)
-import Graphics.Vulkan.Core10.Enums.PrimitiveTopology (PrimitiveTopology)
-import Graphics.Vulkan.Core10.CommandBufferBuilding (Rect2D)
-import Graphics.Vulkan.Core10.Handles (RenderPass)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits(SampleCountFlagBits))
-import Graphics.Vulkan.Core10.BaseType (SampleMask)
-import Graphics.Vulkan.Core10.Handles (ShaderModule)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits)
-import Graphics.Vulkan.CStruct.Extends (SomeStruct)
-import Graphics.Vulkan.CStruct.Extends (SomeStruct(..))
-import Graphics.Vulkan.Core10.Enums.StencilOp (StencilOp)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Core10.Enums.VertexInputRate (VertexInputRate)
-import Graphics.Vulkan.Core10.CommandBufferBuilding (Viewport)
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateGraphicsPipelines
-  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (GraphicsPipelineCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (GraphicsPipelineCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
-
--- | vkCreateGraphicsPipelines - Create graphics pipelines
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the graphics pipelines.
---
--- -   @pipelineCache@ is either
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', indicating that
---     pipeline caching is disabled; or the handle of a valid
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>
---     object, in which case use of that cache is enabled for the duration
---     of the command.
---
--- -   @createInfoCount@ is the length of the @pCreateInfos@ and
---     @pPipelines@ arrays.
---
--- -   @pCreateInfos@ is a pointer to an array of
---     'GraphicsPipelineCreateInfo' structures.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pPipelines@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handles in which the
---     resulting graphics pipeline objects are returned.
---
--- = Description
---
--- The 'GraphicsPipelineCreateInfo' structure includes an array of shader
--- create info structures containing all the desired active shader stages,
--- as well as creation info to define all relevant fixed-function stages,
--- and a pipeline layout.
---
--- == Valid Usage
---
--- -   If the @flags@ member of any element of @pCreateInfos@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and the @basePipelineIndex@ member of that same element is not
---     @-1@, @basePipelineIndex@ /must/ be less than the index into
---     @pCreateInfos@ that corresponds to that element
---
--- -   If the @flags@ member of any element of @pCreateInfos@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, the base pipeline /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
---     flag set
---
--- -   If @pipelineCache@ was created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
---     host access to @pipelineCache@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
---
--- Note
---
--- An implicit cache may be provided by the implementation or a layer. For
--- this reason, it is still valid to set
--- 'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
--- on @flags@ for any element of @pCreateInfos@ while passing
--- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' for @pipelineCache@.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @pipelineCache@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @pipelineCache@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.PipelineCache'
---     handle
---
--- -   @pCreateInfos@ /must/ be a valid pointer to an array of
---     @createInfoCount@ valid 'GraphicsPipelineCreateInfo' structures
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pPipelines@ /must/ be a valid pointer to an array of
---     @createInfoCount@ 'Graphics.Vulkan.Core10.Handles.Pipeline' handles
---
--- -   @createInfoCount@ /must/ be greater than @0@
---
--- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
---     allocated, or retrieved from @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device', 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Handles.PipelineCache'
-createGraphicsPipelines :: forall a io . (PokeChain a, MonadIO io) => Device -> PipelineCache -> ("createInfos" ::: Vector (GraphicsPipelineCreateInfo a)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, ("pipelines" ::: Vector Pipeline))
-createGraphicsPipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do
-  let vkCreateGraphicsPipelines' = mkVkCreateGraphicsPipelines (pVkCreateGraphicsPipelines (deviceCmds (device :: Device)))
-  pPCreateInfos <- ContT $ allocaBytesAligned @(GraphicsPipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 144) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCreateInfos `plusPtr` (144 * (i)) :: Ptr (GraphicsPipelineCreateInfo _)) (e) . ($ ())) (createInfos)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
-  r <- lift $ vkCreateGraphicsPipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (pPCreateInfos) pAllocator (pPPipelines)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
-  pure $ (r, pPipelines)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createGraphicsPipelines' and 'destroyPipeline'
---
--- To ensure that 'destroyPipeline' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withGraphicsPipelines :: forall a io r . (PokeChain a, MonadIO io) => (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> Device -> PipelineCache -> Vector (GraphicsPipelineCreateInfo a) -> Maybe AllocationCallbacks -> r
-withGraphicsPipelines b device pipelineCache pCreateInfos pAllocator =
-  b (createGraphicsPipelines device pipelineCache pCreateInfos pAllocator)
-    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateComputePipelines
-  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (ComputePipelineCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (ComputePipelineCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
-
--- | vkCreateComputePipelines - Creates a new compute pipeline object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the compute pipelines.
---
--- -   @pipelineCache@ is either
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', indicating that
---     pipeline caching is disabled; or the handle of a valid
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>
---     object, in which case use of that cache is enabled for the duration
---     of the command.
---
--- -   @createInfoCount@ is the length of the @pCreateInfos@ and
---     @pPipelines@ arrays.
---
--- -   @pCreateInfos@ is a pointer to an array of
---     'ComputePipelineCreateInfo' structures.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pPipelines@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handles in which the
---     resulting compute pipeline objects are returned.
---
--- == Valid Usage
---
--- -   If the @flags@ member of any element of @pCreateInfos@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and the @basePipelineIndex@ member of that same element is not
---     @-1@, @basePipelineIndex@ /must/ be less than the index into
---     @pCreateInfos@ that corresponds to that element
---
--- -   If the @flags@ member of any element of @pCreateInfos@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, the base pipeline /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
---     flag set
---
--- -   If @pipelineCache@ was created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
---     host access to @pipelineCache@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @pipelineCache@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @pipelineCache@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.PipelineCache'
---     handle
---
--- -   @pCreateInfos@ /must/ be a valid pointer to an array of
---     @createInfoCount@ valid 'ComputePipelineCreateInfo' structures
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pPipelines@ /must/ be a valid pointer to an array of
---     @createInfoCount@ 'Graphics.Vulkan.Core10.Handles.Pipeline' handles
---
--- -   @createInfoCount@ /must/ be greater than @0@
---
--- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
---     allocated, or retrieved from @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'ComputePipelineCreateInfo', 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Handles.PipelineCache'
-createComputePipelines :: forall a io . (PokeChain a, MonadIO io) => Device -> PipelineCache -> ("createInfos" ::: Vector (ComputePipelineCreateInfo a)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, ("pipelines" ::: Vector Pipeline))
-createComputePipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do
-  let vkCreateComputePipelines' = mkVkCreateComputePipelines (pVkCreateComputePipelines (deviceCmds (device :: Device)))
-  pPCreateInfos <- ContT $ allocaBytesAligned @(ComputePipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 96) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCreateInfos `plusPtr` (96 * (i)) :: Ptr (ComputePipelineCreateInfo _)) (e) . ($ ())) (createInfos)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
-  r <- lift $ vkCreateComputePipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (pPCreateInfos) pAllocator (pPPipelines)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
-  pure $ (r, pPipelines)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createComputePipelines' and 'destroyPipeline'
---
--- To ensure that 'destroyPipeline' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withComputePipelines :: forall a io r . (PokeChain a, MonadIO io) => (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> Device -> PipelineCache -> Vector (ComputePipelineCreateInfo a) -> Maybe AllocationCallbacks -> r
-withComputePipelines b device pipelineCache pCreateInfos pAllocator =
-  b (createComputePipelines device pipelineCache pCreateInfos pAllocator)
-    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyPipeline
-  :: FunPtr (Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyPipeline - Destroy a pipeline object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @pipeline@ /must/ have
---     completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @pipeline@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @pipeline@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @pipeline@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @pipeline@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.Pipeline' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   If @pipeline@ is a valid handle, it /must/ have been created,
---     allocated, or retrieved from @device@
---
--- == Host Synchronization
---
--- -   Host access to @pipeline@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline'
-destroyPipeline :: forall io . MonadIO io => Device -> Pipeline -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyPipeline device pipeline allocator = liftIO . evalContT $ do
-  let vkDestroyPipeline' = mkVkDestroyPipeline (pVkDestroyPipeline (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyPipeline' (deviceHandle (device)) (pipeline) pAllocator
-  pure $ ()
-
-
--- | VkSpecializationMapEntry - Structure specifying a specialization map
--- entry
---
--- = Description
---
--- If a @constantID@ value is not a specialization constant ID used in the
--- shader, that map entry does not affect the behavior of the pipeline.
---
--- == Valid Usage
---
--- -   For a @constantID@ specialization constant declared in a shader,
---     @size@ /must/ match the byte size of the @constantID@. If the
---     specialization constant is of type @boolean@, @size@ /must/ be the
---     byte size of 'Graphics.Vulkan.Core10.BaseType.Bool32'
---
--- = See Also
---
--- 'SpecializationInfo'
-data SpecializationMapEntry = SpecializationMapEntry
-  { -- | @constantID@ is the ID of the specialization constant in SPIR-V.
-    constantID :: Word32
-  , -- | @offset@ is the byte offset of the specialization constant value within
-    -- the supplied data buffer.
-    offset :: Word32
-  , -- | @size@ is the byte size of the specialization constant value within the
-    -- supplied data buffer.
-    size :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show SpecializationMapEntry
-
-instance ToCStruct SpecializationMapEntry where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SpecializationMapEntry{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (constantID)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (offset)
-    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (size))
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (zero))
-    f
-
-instance FromCStruct SpecializationMapEntry where
-  peekCStruct p = do
-    constantID <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    offset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    size <- peek @CSize ((p `plusPtr` 8 :: Ptr CSize))
-    pure $ SpecializationMapEntry
-             constantID offset ((\(CSize a) -> a) size)
-
-instance Storable SpecializationMapEntry where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SpecializationMapEntry where
-  zero = SpecializationMapEntry
-           zero
-           zero
-           zero
-
-
--- | VkSpecializationInfo - Structure specifying specialization info
---
--- = Description
---
--- @pMapEntries@ is a pointer to a 'SpecializationMapEntry' structure.
---
--- == Valid Usage
---
--- -   The @offset@ member of each element of @pMapEntries@ /must/ be less
---     than @dataSize@
---
--- -   The @size@ member of each element of @pMapEntries@ /must/ be less
---     than or equal to @dataSize@ minus @offset@
---
--- == Valid Usage (Implicit)
---
--- -   If @mapEntryCount@ is not @0@, @pMapEntries@ /must/ be a valid
---     pointer to an array of @mapEntryCount@ valid
---     'SpecializationMapEntry' structures
---
--- -   If @dataSize@ is not @0@, @pData@ /must/ be a valid pointer to an
---     array of @dataSize@ bytes
---
--- = See Also
---
--- 'PipelineShaderStageCreateInfo', 'SpecializationMapEntry'
-data SpecializationInfo = SpecializationInfo
-  { -- | @pMapEntries@ is a pointer to an array of 'SpecializationMapEntry'
-    -- structures which map constant IDs to offsets in @pData@.
-    mapEntries :: Vector SpecializationMapEntry
-  , -- | @dataSize@ is the byte size of the @pData@ buffer.
-    dataSize :: Word64
-  , -- | @pData@ contains the actual constant values to specialize with.
-    data' :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show SpecializationInfo
-
-instance ToCStruct SpecializationInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SpecializationInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (mapEntries)) :: Word32))
-    pPMapEntries' <- ContT $ allocaBytesAligned @SpecializationMapEntry ((Data.Vector.length (mapEntries)) * 16) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMapEntries' `plusPtr` (16 * (i)) :: Ptr SpecializationMapEntry) (e) . ($ ())) (mapEntries)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry))) (pPMapEntries')
-    lift $ poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (dataSize))
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (data')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    pPMapEntries' <- ContT $ allocaBytesAligned @SpecializationMapEntry ((Data.Vector.length (mempty)) * 16) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMapEntries' `plusPtr` (16 * (i)) :: Ptr SpecializationMapEntry) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry))) (pPMapEntries')
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
-    lift $ f
-
-instance FromCStruct SpecializationInfo where
-  peekCStruct p = do
-    mapEntryCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    pMapEntries <- peek @(Ptr SpecializationMapEntry) ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry)))
-    pMapEntries' <- generateM (fromIntegral mapEntryCount) (\i -> peekCStruct @SpecializationMapEntry ((pMapEntries `advancePtrBytes` (16 * (i)) :: Ptr SpecializationMapEntry)))
-    dataSize <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))
-    pData <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
-    pure $ SpecializationInfo
-             pMapEntries' ((\(CSize a) -> a) dataSize) pData
-
-instance Zero SpecializationInfo where
-  zero = SpecializationInfo
-           mempty
-           zero
-           zero
-
-
--- | VkPipelineShaderStageCreateInfo - Structure specifying parameters of a
--- newly created pipeline shader stage
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @stage@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @stage@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shader>
---     feature is not enabled, @stage@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shader>
---     feature is not enabled, @stage@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'
---
--- -   @stage@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL_GRAPHICS',
---     or
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL'
---
--- -   @pName@ /must/ be the name of an @OpEntryPoint@ in @module@ with an
---     execution model that matches @stage@
---
--- -   If the identified entry point includes any variable in its interface
---     that is declared with the @ClipDistance@ @BuiltIn@ decoration, that
---     variable /must/ not have an array size greater than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxClipDistances@
---
--- -   If the identified entry point includes any variable in its interface
---     that is declared with the @CullDistance@ @BuiltIn@ decoration, that
---     variable /must/ not have an array size greater than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCullDistances@
---
--- -   If the identified entry point includes any variables in its
---     interface that are declared with the @ClipDistance@ or
---     @CullDistance@ @BuiltIn@ decoration, those variables /must/ not have
---     array sizes which sum to more than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCombinedClipAndCullDistances@
---
--- -   If the identified entry point includes any variable in its interface
---     that is declared with the
---     'Graphics.Vulkan.Core10.BaseType.SampleMask' @BuiltIn@ decoration,
---     that variable /must/ not have an array size greater than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSampleMaskWords@
---
--- -   If @stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',
---     the identified entry point /must/ not include any input variable in
---     its interface that is decorated with @CullDistance@
---
--- -   If @stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',
---     and the identified entry point has an @OpExecutionMode@ instruction
---     that specifies a patch size with @OutputVertices@, the patch size
---     /must/ be greater than @0@ and less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@
---
--- -   If @stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',
---     the identified entry point /must/ have an @OpExecutionMode@
---     instruction that specifies a maximum output vertex count that is
---     greater than @0@ and less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryOutputVertices@
---
--- -   If @stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',
---     the identified entry point /must/ have an @OpExecutionMode@
---     instruction that specifies an invocation count that is greater than
---     @0@ and less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryShaderInvocations@
---
--- -   If @stage@ is a vertex processing stage, and the identified entry
---     point writes to @Layer@ for any primitive, it /must/ write the same
---     value to @Layer@ for all vertices of a given primitive
---
--- -   If @stage@ is a vertex processing stage, and the identified entry
---     point writes to @ViewportIndex@ for any primitive, it /must/ write
---     the same value to @ViewportIndex@ for all vertices of a given
---     primitive
---
--- -   If @stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
---     the identified entry point /must/ not include any output variables
---     in its interface decorated with @CullDistance@
---
--- -   If @stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
---     and the identified entry point writes to @FragDepth@ in any
---     execution path, it /must/ write to @FragDepth@ in all execution
---     paths
---
--- -   If @stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
---     and the identified entry point writes to @FragStencilRefEXT@ in any
---     execution path, it /must/ write to @FragStencilRefEXT@ in all
---     execution paths
---
--- -   If @stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',
---     the identified entry point /must/ have an @OpExecutionMode@
---     instruction that specifies a maximum output vertex count,
---     @OutputVertices@, that is greater than @0@ and less than or equal to
---     'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputVertices@
---
--- -   If @stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',
---     the identified entry point /must/ have an @OpExecutionMode@
---     instruction that specifies a maximum output primitive count,
---     @OutputPrimitivesNV@, that is greater than @0@ and less than or
---     equal to
---     'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputPrimitives@
---
--- -   If @flags@ has the
---     'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
---     flag set, the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>
---     feature /must/ be enabled
---
--- -   If @flags@ has the
---     'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'
---     flag set, the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-computeFullSubgroups computeFullSubgroups>
---     feature /must/ be enabled
---
--- -   If a
---     'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
---     structure is included in the @pNext@ chain, @flags@ /must/ not have
---     the
---     'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
---     flag set
---
--- -   If a
---     'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
---     structure is included in the @pNext@ chain, the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>
---     feature /must/ be enabled, and @stage@ /must/ be a valid bit
---     specified in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-required-subgroup-size-stages requiredSubgroupSizeStages>
---
--- -   If a
---     'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
---     structure is included in the @pNext@ chain and @stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT',
---     the local workgroup size of the shader /must/ be less than or equal
---     to the product of
---     'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'::@requiredSubgroupSize@
---     and
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroups-per-workgroup maxComputeWorkgroupSubgroups>
---
--- -   If a
---     'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
---     structure is included in the @pNext@ chain, and @flags@ has the
---     'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'
---     flag set, the local workgroup size in the X dimension of the
---     pipeline /must/ be a multiple of
---     'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'::@requiredSubgroupSize@
---
--- -   If @flags@ has both the
---     'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'
---     and
---     'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
---     flags set, the local workgroup size in the X dimension of the
---     pipeline /must/ be a multiple of
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size maxSubgroupSize>
---
--- -   If @flags@ has the
---     'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'
---     flag set and @flags@ does not have the
---     'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
---     flag set and no
---     'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
---     structure is included in the @pNext@ chain, the local workgroup size
---     in the X dimension of the pipeline /must/ be a multiple of
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'
---     values
---
--- -   @stage@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
---     value
---
--- -   @module@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.ShaderModule' handle
---
--- -   @pName@ /must/ be a null-terminated UTF-8 string
---
--- -   If @pSpecializationInfo@ is not @NULL@, @pSpecializationInfo@ /must/
---     be a valid pointer to a valid 'SpecializationInfo' structure
---
--- = See Also
---
--- 'ComputePipelineCreateInfo', 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlags',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Handles.ShaderModule',
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits',
--- 'SpecializationInfo',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineShaderStageCreateInfo (es :: [Type]) = PipelineShaderStageCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'
-    -- specifying how the pipeline shader stage will be generated.
-    flags :: PipelineShaderStageCreateFlags
-  , -- | @stage@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
-    -- value specifying a single pipeline stage.
-    stage :: ShaderStageFlagBits
-  , -- | @module@ is a 'Graphics.Vulkan.Core10.Handles.ShaderModule' object
-    -- containing the shader for this stage.
-    module' :: ShaderModule
-  , -- | @pName@ is a pointer to a null-terminated UTF-8 string specifying the
-    -- entry point name of the shader for this stage.
-    name :: ByteString
-  , -- | @pSpecializationInfo@ is a pointer to a 'SpecializationInfo' structure,
-    -- as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-specialization-constants Specialization Constants>,
-    -- or @NULL@.
-    specializationInfo :: Maybe SpecializationInfo
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PipelineShaderStageCreateInfo es)
-
-instance Extensible PipelineShaderStageCreateInfo where
-  extensibleType = STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext PipelineShaderStageCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineShaderStageCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PipelineShaderStageCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineShaderStageCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (stage)
-    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (module')
-    pName'' <- ContT $ useAsCString (name)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''
-    pSpecializationInfo'' <- case (specializationInfo) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo))) pSpecializationInfo''
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (zero)
-    pName'' <- ContT $ useAsCString (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''
-    lift $ f
-
-instance PeekChain es => FromCStruct (PipelineShaderStageCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineShaderStageCreateFlags ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags))
-    stage <- peek @ShaderStageFlagBits ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits))
-    module' <- peek @ShaderModule ((p `plusPtr` 24 :: Ptr ShaderModule))
-    pName <- packCString =<< peek ((p `plusPtr` 32 :: Ptr (Ptr CChar)))
-    pSpecializationInfo <- peek @(Ptr SpecializationInfo) ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo)))
-    pSpecializationInfo' <- maybePeek (\j -> peekCStruct @SpecializationInfo (j)) pSpecializationInfo
-    pure $ PipelineShaderStageCreateInfo
-             next flags stage module' pName pSpecializationInfo'
-
-instance es ~ '[] => Zero (PipelineShaderStageCreateInfo es) where
-  zero = PipelineShaderStageCreateInfo
-           ()
-           zero
-           zero
-           zero
-           mempty
-           Nothing
-
-
--- | VkComputePipelineCreateInfo - Structure specifying parameters of a newly
--- created compute pipeline
---
--- = Description
---
--- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
--- described in more detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
---
--- == Valid Usage
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be
---     a valid handle to a compute
---     'Graphics.Vulkan.Core10.Handles.Pipeline'
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @basePipelineIndex@ /must/ be a valid index into the calling
---     command’s @pCreateInfos@ parameter
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/
---     be 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @basePipelineIndex@ /must/ be -1
---
--- -   The @stage@ member of @stage@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
---
--- -   The shader code for the entry point identified by @stage@ and the
---     rest of the state identified by this structure /must/ adhere to the
---     pipeline linking rules described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>
---     chapter
---
--- -   @layout@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
---     with the layout of the compute shader specified in @stage@
---
--- -   The number of resources in @layout@ accessible to the compute shader
---     stage /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
---     feature is not enabled, @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD'
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
---     values
---
--- -   @stage@ /must/ be a valid 'PipelineShaderStageCreateInfo' structure
---
--- -   @layout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   Both of @basePipelineHandle@, and @layout@ that are valid handles of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout',
--- 'PipelineShaderStageCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createComputePipelines'
-data ComputePipelineCreateInfo (es :: [Type]) = ComputePipelineCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
-    -- specifying how the pipeline will be generated.
-    flags :: PipelineCreateFlags
-  , -- | @stage@ is a 'PipelineShaderStageCreateInfo' structure describing the
-    -- compute shader.
-    stage :: SomeStruct PipelineShaderStageCreateInfo
-  , -- | @layout@ is the description of binding locations used by both the
-    -- pipeline and descriptor sets used with the pipeline.
-    layout :: PipelineLayout
-  , -- | @basePipelineHandle@ is a pipeline to derive from
-    basePipelineHandle :: Pipeline
-  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
-    -- as a pipeline to derive from
-    basePipelineIndex :: Int32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (ComputePipelineCreateInfo es)
-
-instance Extensible ComputePipelineCreateInfo where
-  extensibleType = STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext ComputePipelineCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ComputePipelineCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f
-    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (ComputePipelineCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ComputePipelineCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
-    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) (stage) . ($ ())
-    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (layout)
-    lift $ poke ((p `plusPtr` 80 :: Ptr Pipeline)) (basePipelineHandle)
-    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (basePipelineIndex)
-    lift $ f
-  cStructSize = 96
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) ((SomeStruct zero)) . ($ ())
-    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (zero)
-    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (ComputePipelineCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
-    stage <- peekSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo a))))
-    layout <- peek @PipelineLayout ((p `plusPtr` 72 :: Ptr PipelineLayout))
-    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 80 :: Ptr Pipeline))
-    basePipelineIndex <- peek @Int32 ((p `plusPtr` 88 :: Ptr Int32))
-    pure $ ComputePipelineCreateInfo
-             next flags stage layout basePipelineHandle basePipelineIndex
-
-instance es ~ '[] => Zero (ComputePipelineCreateInfo es) where
-  zero = ComputePipelineCreateInfo
-           ()
-           zero
-           (SomeStruct zero)
-           zero
-           zero
-           zero
-
-
--- | VkVertexInputBindingDescription - Structure specifying vertex input
--- binding description
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PipelineVertexInputStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'
-data VertexInputBindingDescription = VertexInputBindingDescription
-  { -- | @binding@ /must/ be less than
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
-    binding :: Word32
-  , -- | @stride@ /must/ be less than or equal to
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindingStride@
-    stride :: Word32
-  , -- | @inputRate@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.VertexInputRate.VertexInputRate' value
-    inputRate :: VertexInputRate
-  }
-  deriving (Typeable)
-deriving instance Show VertexInputBindingDescription
-
-instance ToCStruct VertexInputBindingDescription where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p VertexInputBindingDescription{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (binding)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (stride)
-    poke ((p `plusPtr` 8 :: Ptr VertexInputRate)) (inputRate)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr VertexInputRate)) (zero)
-    f
-
-instance FromCStruct VertexInputBindingDescription where
-  peekCStruct p = do
-    binding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    stride <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    inputRate <- peek @VertexInputRate ((p `plusPtr` 8 :: Ptr VertexInputRate))
-    pure $ VertexInputBindingDescription
-             binding stride inputRate
-
-instance Storable VertexInputBindingDescription where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero VertexInputBindingDescription where
-  zero = VertexInputBindingDescription
-           zero
-           zero
-           zero
-
-
--- | VkVertexInputAttributeDescription - Structure specifying vertex input
--- attribute description
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'PipelineVertexInputStateCreateInfo'
-data VertexInputAttributeDescription = VertexInputAttributeDescription
-  { -- | @location@ /must/ be less than
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@
-    location :: Word32
-  , -- | @binding@ /must/ be less than
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
-    binding :: Word32
-  , -- | @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Enums.Format.Format'
-    -- value
-    format :: Format
-  , -- | @offset@ /must/ be less than or equal to
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributeOffset@
-    offset :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show VertexInputAttributeDescription
-
-instance ToCStruct VertexInputAttributeDescription where
-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p VertexInputAttributeDescription{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (location)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (binding)
-    poke ((p `plusPtr` 8 :: Ptr Format)) (format)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (offset)
-    f
-  cStructSize = 16
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Format)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct VertexInputAttributeDescription where
-  peekCStruct p = do
-    location <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    binding <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    format <- peek @Format ((p `plusPtr` 8 :: Ptr Format))
-    offset <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    pure $ VertexInputAttributeDescription
-             location binding format offset
-
-instance Storable VertexInputAttributeDescription where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero VertexInputAttributeDescription where
-  zero = VertexInputAttributeDescription
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineVertexInputStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline vertex input state
---
--- == Valid Usage
---
--- -   @vertexBindingDescriptionCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
---
--- -   @vertexAttributeDescriptionCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@
---
--- -   For every @binding@ specified by each element of
---     @pVertexAttributeDescriptions@, a 'VertexInputBindingDescription'
---     /must/ exist in @pVertexBindingDescriptions@ with the same value of
---     @binding@
---
--- -   All elements of @pVertexBindingDescriptions@ /must/ describe
---     distinct binding numbers
---
--- -   All elements of @pVertexAttributeDescriptions@ /must/ describe
---     distinct attribute locations
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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.PipelineVertexInputDivisorStateCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be @0@
---
--- -   If @vertexBindingDescriptionCount@ is not @0@,
---     @pVertexBindingDescriptions@ /must/ be a valid pointer to an array
---     of @vertexBindingDescriptionCount@ valid
---     'VertexInputBindingDescription' structures
---
--- -   If @vertexAttributeDescriptionCount@ is not @0@,
---     @pVertexAttributeDescriptions@ /must/ be a valid pointer to an array
---     of @vertexAttributeDescriptionCount@ valid
---     'VertexInputAttributeDescription' structures
---
--- = See Also
---
--- 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags.PipelineVertexInputStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'VertexInputAttributeDescription', 'VertexInputBindingDescription'
-data PipelineVertexInputStateCreateInfo (es :: [Type]) = PipelineVertexInputStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineVertexInputStateCreateFlags
-  , -- | @pVertexBindingDescriptions@ is a pointer to an array of
-    -- 'VertexInputBindingDescription' structures.
-    vertexBindingDescriptions :: Vector VertexInputBindingDescription
-  , -- | @pVertexAttributeDescriptions@ is a pointer to an array of
-    -- 'VertexInputAttributeDescription' structures.
-    vertexAttributeDescriptions :: Vector VertexInputAttributeDescription
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PipelineVertexInputStateCreateInfo es)
-
-instance Extensible PipelineVertexInputStateCreateInfo where
-  extensibleType = STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext PipelineVertexInputStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineVertexInputStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineVertexInputDivisorStateCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PipelineVertexInputStateCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineVertexInputStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexBindingDescriptions)) :: Word32))
-    pPVertexBindingDescriptions' <- ContT $ allocaBytesAligned @VertexInputBindingDescription ((Data.Vector.length (vertexBindingDescriptions)) * 12) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDescriptions' `plusPtr` (12 * (i)) :: Ptr VertexInputBindingDescription) (e) . ($ ())) (vertexBindingDescriptions)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription))) (pPVertexBindingDescriptions')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexAttributeDescriptions)) :: Word32))
-    pPVertexAttributeDescriptions' <- ContT $ allocaBytesAligned @VertexInputAttributeDescription ((Data.Vector.length (vertexAttributeDescriptions)) * 16) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexAttributeDescriptions' `plusPtr` (16 * (i)) :: Ptr VertexInputAttributeDescription) (e) . ($ ())) (vertexAttributeDescriptions)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription))) (pPVertexAttributeDescriptions')
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPVertexBindingDescriptions' <- ContT $ allocaBytesAligned @VertexInputBindingDescription ((Data.Vector.length (mempty)) * 12) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDescriptions' `plusPtr` (12 * (i)) :: Ptr VertexInputBindingDescription) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription))) (pPVertexBindingDescriptions')
-    pPVertexAttributeDescriptions' <- ContT $ allocaBytesAligned @VertexInputAttributeDescription ((Data.Vector.length (mempty)) * 16) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexAttributeDescriptions' `plusPtr` (16 * (i)) :: Ptr VertexInputAttributeDescription) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription))) (pPVertexAttributeDescriptions')
-    lift $ f
-
-instance PeekChain es => FromCStruct (PipelineVertexInputStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineVertexInputStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags))
-    vertexBindingDescriptionCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pVertexBindingDescriptions <- peek @(Ptr VertexInputBindingDescription) ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription)))
-    pVertexBindingDescriptions' <- generateM (fromIntegral vertexBindingDescriptionCount) (\i -> peekCStruct @VertexInputBindingDescription ((pVertexBindingDescriptions `advancePtrBytes` (12 * (i)) :: Ptr VertexInputBindingDescription)))
-    vertexAttributeDescriptionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pVertexAttributeDescriptions <- peek @(Ptr VertexInputAttributeDescription) ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription)))
-    pVertexAttributeDescriptions' <- generateM (fromIntegral vertexAttributeDescriptionCount) (\i -> peekCStruct @VertexInputAttributeDescription ((pVertexAttributeDescriptions `advancePtrBytes` (16 * (i)) :: Ptr VertexInputAttributeDescription)))
-    pure $ PipelineVertexInputStateCreateInfo
-             next flags pVertexBindingDescriptions' pVertexAttributeDescriptions'
-
-instance es ~ '[] => Zero (PipelineVertexInputStateCreateInfo es) where
-  zero = PipelineVertexInputStateCreateInfo
-           ()
-           zero
-           mempty
-           mempty
-
-
--- | VkPipelineInputAssemblyStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline input assembly state
---
--- = Description
---
--- Restarting the assembly of primitives discards the most recent index
--- values if those elements formed an incomplete primitive, and restarts
--- the primitive assembly using the subsequent indices, but only assembling
--- the immediately following element through the end of the originally
--- specified elements. The primitive restart index value comparison is
--- performed before adding the @vertexOffset@ value to the index value.
---
--- == Valid Usage
---
--- -   If @topology@ is
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_POINT_LIST',
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST',
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST',
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY',
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY'
---     or
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',
---     @primitiveRestartEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @topology@ /must/ not be any of
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY',
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY',
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY'
---     or
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @topology@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be @0@
---
--- -   @topology@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32', 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags.PipelineInputAssemblyStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineInputAssemblyStateCreateInfo = PipelineInputAssemblyStateCreateInfo
-  { -- | @flags@ is reserved for future use.
-    flags :: PipelineInputAssemblyStateCreateFlags
-  , -- | @topology@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology'
-    -- defining the primitive topology, as described below.
-    topology :: PrimitiveTopology
-  , -- | @primitiveRestartEnable@ controls whether a special vertex index value
-    -- is treated as restarting the assembly of primitives. This enable only
-    -- applies to indexed draws
-    -- ('Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed' and
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'),
-    -- and the special index value is either 0xFFFFFFFF when the @indexType@
-    -- parameter of
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer' is
-    -- equal to 'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32',
-    -- 0xFF when @indexType@ is equal to
-    -- 'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', or 0xFFFF
-    -- when @indexType@ is equal to
-    -- 'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16'. Primitive
-    -- restart is not allowed for “list” topologies.
-    primitiveRestartEnable :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PipelineInputAssemblyStateCreateInfo
-
-instance ToCStruct PipelineInputAssemblyStateCreateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineInputAssemblyStateCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (topology)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (primitiveRestartEnable))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PipelineInputAssemblyStateCreateInfo where
-  peekCStruct p = do
-    flags <- peek @PipelineInputAssemblyStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags))
-    topology <- peek @PrimitiveTopology ((p `plusPtr` 20 :: Ptr PrimitiveTopology))
-    primitiveRestartEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    pure $ PipelineInputAssemblyStateCreateInfo
-             flags topology (bool32ToBool primitiveRestartEnable)
-
-instance Storable PipelineInputAssemblyStateCreateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineInputAssemblyStateCreateInfo where
-  zero = PipelineInputAssemblyStateCreateInfo
-           zero
-           zero
-           zero
-
-
--- | VkPipelineTessellationStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline tessellation state
---
--- == Valid Usage
---
--- -   @patchControlPoints@ /must/ be greater than zero and less than or
---     equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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.PipelineTessellationDomainOriginStateCreateInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be @0@
---
--- = See Also
---
--- 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags.PipelineTessellationStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineTessellationStateCreateInfo (es :: [Type]) = PipelineTessellationStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineTessellationStateCreateFlags
-  , -- | @patchControlPoints@ number of control points per patch.
-    patchControlPoints :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PipelineTessellationStateCreateInfo es)
-
-instance Extensible PipelineTessellationStateCreateInfo where
-  extensibleType = STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext PipelineTessellationStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineTessellationStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineTessellationDomainOriginStateCreateInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PipelineTessellationStateCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineTessellationStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (patchControlPoints)
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (PipelineTessellationStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineTessellationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags))
-    patchControlPoints <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pure $ PipelineTessellationStateCreateInfo
-             next flags patchControlPoints
-
-instance es ~ '[] => Zero (PipelineTessellationStateCreateInfo es) where
-  zero = PipelineTessellationStateCreateInfo
-           ()
-           zero
-           zero
-
-
--- | VkPipelineViewportStateCreateInfo - Structure specifying parameters of a
--- newly created pipeline viewport state
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @viewportCount@ /must/ be @1@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @scissorCount@ /must/ be @1@
---
--- -   @viewportCount@ /must/ be between @1@ and
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
---     inclusive
---
--- -   @scissorCount@ /must/ be between @1@ and
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
---     inclusive
---
--- -   @scissorCount@ and @viewportCount@ /must/ be identical
---
--- -   The @x@ and @y@ members of @offset@ member of any element of
---     @pScissors@ /must/ be greater than or equal to @0@
---
--- -   Evaluation of (@offset.x@ + @extent.width@) /must/ not cause a
---     signed integer addition overflow for any element of @pScissors@
---
--- -   Evaluation of (@offset.y@ + @extent.height@) /must/ not cause a
---     signed integer addition overflow for any element of @pScissors@
---
--- -   If the @viewportWScalingEnable@ member of a
---     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
---     structure included in the @pNext@ chain is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', the @viewportCount@ member
---     of the
---     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
---     structure /must/ be equal to @viewportCount@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportCoarseSampleOrderStateCreateInfoNV',
---     'Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV',
---     'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV',
---     'Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV',
---     or
---     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be @0@
---
--- -   @viewportCount@ /must/ be greater than @0@
---
--- -   @scissorCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.PipelineViewportStateCreateFlags.PipelineViewportStateCreateFlags',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Viewport'
-data PipelineViewportStateCreateInfo (es :: [Type]) = PipelineViewportStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineViewportStateCreateFlags
-  , -- | @pViewports@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Viewport' structures,
-    -- defining the viewport transforms. If the viewport state is dynamic, this
-    -- member is ignored.
-    viewports :: Either Word32 (Vector Viewport)
-  , -- | @pScissors@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
-    -- defining the rectangular bounds of the scissor for the corresponding
-    -- viewport. If the scissor state is dynamic, this member is ignored.
-    scissors :: Either Word32 (Vector Rect2D)
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PipelineViewportStateCreateInfo es)
-
-instance Extensible PipelineViewportStateCreateInfo where
-  extensibleType = STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext PipelineViewportStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineViewportStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineViewportCoarseSampleOrderStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineViewportShadingRateImageStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineViewportExclusiveScissorStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineViewportSwizzleStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineViewportWScalingStateCreateInfoNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PipelineViewportStateCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineViewportStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (viewports)) :: Word32))
-    pViewports'' <- case (viewports) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPViewports' <- ContT $ allocaBytesAligned @Viewport ((Data.Vector.length (v)) * 24) 4
-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewports' `plusPtr` (24 * (i)) :: Ptr Viewport) (e) . ($ ())) (v)
-        pure $ pPViewports'
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Viewport))) pViewports''
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (scissors)) :: Word32))
-    pScissors'' <- case (scissors) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPScissors' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (v)) * 16) 4
-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPScissors' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (v)
-        pure $ pPScissors'
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Rect2D))) pScissors''
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ f
-
-instance PeekChain es => FromCStruct (PipelineViewportStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineViewportStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags))
-    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pViewports <- peek @(Ptr Viewport) ((p `plusPtr` 24 :: Ptr (Ptr Viewport)))
-    pViewports' <- maybePeek (\j -> generateM (fromIntegral viewportCount) (\i -> peekCStruct @Viewport (((j) `advancePtrBytes` (24 * (i)) :: Ptr Viewport)))) pViewports
-    let pViewports'' = maybe (Left viewportCount) Right pViewports'
-    scissorCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pScissors <- peek @(Ptr Rect2D) ((p `plusPtr` 40 :: Ptr (Ptr Rect2D)))
-    pScissors' <- maybePeek (\j -> generateM (fromIntegral scissorCount) (\i -> peekCStruct @Rect2D (((j) `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))) pScissors
-    let pScissors'' = maybe (Left scissorCount) Right pScissors'
-    pure $ PipelineViewportStateCreateInfo
-             next flags pViewports'' pScissors''
-
-instance es ~ '[] => Zero (PipelineViewportStateCreateInfo es) where
-  zero = PipelineViewportStateCreateInfo
-           ()
-           zero
-           (Left 0)
-           (Left 0)
-
-
--- | VkPipelineRasterizationStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline rasterization state
---
--- = Description
---
--- The application /can/ also add a
--- 'Graphics.Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD'
--- structure to the @pNext@ chain of a
--- 'PipelineRasterizationStateCreateInfo' structure. This structure enables
--- selecting the rasterization order to use when rendering with the
--- corresponding graphics pipeline as described in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primrast-order Rasterization Order>.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthClamp depth clamping>
---     feature is not enabled, @depthClampEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fillModeNonSolid non-solid fill modes>
---     feature is not enabled, @polygonMode@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL' or
---     'Graphics.Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'
---
--- -   If the @VK_NV_fill_rectangle@ extension is not enabled,
---     @polygonMode@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.PipelineRasterizationConservativeStateCreateInfoEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT',
---     'Graphics.Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD',
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be @0@
---
--- -   @polygonMode@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PolygonMode.PolygonMode' value
---
--- -   @cullMode@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits'
---     values
---
--- -   @frontFace@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.FrontFace.FrontFace' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlags',
--- 'Graphics.Vulkan.Core10.Enums.FrontFace.FrontFace',
--- 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags.PipelineRasterizationStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.PolygonMode.PolygonMode',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineRasterizationStateCreateInfo (es :: [Type]) = PipelineRasterizationStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineRasterizationStateCreateFlags
-  , -- | @depthClampEnable@ controls whether to clamp the fragment’s depth values
-    -- as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth Depth Test>.
-    -- If the pipeline is not created with
-    -- 'Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'
-    -- present then enabling depth clamp will also disable clipping primitives
-    -- to the z planes of the frustrum as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>.
-    -- Otherwise depth clipping is controlled by the state set in
-    -- 'Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'.
-    depthClampEnable :: Bool
-  , -- | @rasterizerDiscardEnable@ controls whether primitives are discarded
-    -- immediately before the rasterization stage.
-    rasterizerDiscardEnable :: Bool
-  , -- | @polygonMode@ is the triangle rendering mode. See
-    -- 'Graphics.Vulkan.Core10.Enums.PolygonMode.PolygonMode'.
-    polygonMode :: PolygonMode
-  , -- | @cullMode@ is the triangle facing direction used for primitive culling.
-    -- See 'Graphics.Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits'.
-    cullMode :: CullModeFlags
-  , -- | @frontFace@ is a 'Graphics.Vulkan.Core10.Enums.FrontFace.FrontFace'
-    -- value specifying the front-facing triangle orientation to be used for
-    -- culling.
-    frontFace :: FrontFace
-  , -- | @depthBiasEnable@ controls whether to bias fragment depth values.
-    depthBiasEnable :: Bool
-  , -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant
-    -- depth value added to each fragment.
-    depthBiasConstantFactor :: Float
-  , -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.
-    depthBiasClamp :: Float
-  , -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope
-    -- in depth bias calculations.
-    depthBiasSlopeFactor :: Float
-  , -- | @lineWidth@ is the width of rasterized line segments.
-    lineWidth :: Float
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PipelineRasterizationStateCreateInfo es)
-
-instance Extensible PipelineRasterizationStateCreateInfo where
-  extensibleType = STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext PipelineRasterizationStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineRasterizationStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineRasterizationLineStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineRasterizationDepthClipStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineRasterizationStateStreamCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineRasterizationConservativeStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineRasterizationStateRasterizationOrderAMD = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PipelineRasterizationStateCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineRasterizationStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthClampEnable))
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (rasterizerDiscardEnable))
-    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (polygonMode)
-    lift $ poke ((p `plusPtr` 32 :: Ptr CullModeFlags)) (cullMode)
-    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (frontFace)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (depthBiasEnable))
-    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (depthBiasConstantFactor))
-    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (depthBiasClamp))
-    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (depthBiasSlopeFactor))
-    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (lineWidth))
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (zero)
-    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero))
-    lift $ f
-
-instance PeekChain es => FromCStruct (PipelineRasterizationStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineRasterizationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags))
-    depthClampEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    rasterizerDiscardEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    polygonMode <- peek @PolygonMode ((p `plusPtr` 28 :: Ptr PolygonMode))
-    cullMode <- peek @CullModeFlags ((p `plusPtr` 32 :: Ptr CullModeFlags))
-    frontFace <- peek @FrontFace ((p `plusPtr` 36 :: Ptr FrontFace))
-    depthBiasEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    depthBiasConstantFactor <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))
-    depthBiasClamp <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat))
-    depthBiasSlopeFactor <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))
-    lineWidth <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat))
-    pure $ PipelineRasterizationStateCreateInfo
-             next flags (bool32ToBool depthClampEnable) (bool32ToBool rasterizerDiscardEnable) polygonMode cullMode frontFace (bool32ToBool depthBiasEnable) ((\(CFloat a) -> a) depthBiasConstantFactor) ((\(CFloat a) -> a) depthBiasClamp) ((\(CFloat a) -> a) depthBiasSlopeFactor) ((\(CFloat a) -> a) lineWidth)
-
-instance es ~ '[] => Zero (PipelineRasterizationStateCreateInfo es) where
-  zero = PipelineRasterizationStateCreateInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineMultisampleStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline multisample state
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sampleRateShading sample rate shading>
---     feature is not enabled, @sampleShadingEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-alphaToOne alpha to one>
---     feature is not enabled, @alphaToOneEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   @minSampleShading@ /must/ be in the range [0,1]
---
--- -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
---     if the subpass has any color attachments and @rasterizationSamples@
---     is greater than the number of color samples, then
---     @sampleShadingEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.PipelineCoverageModulationStateCreateInfoNV',
---     'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV',
---     'Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color.PipelineCoverageToColorStateCreateInfoNV',
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be @0@
---
--- -   @rasterizationSamples@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
---     value
---
--- -   If @pSampleMask@ is not @NULL@, @pSampleMask@ /must/ be a valid
---     pointer to an array of
---     \(\lceil{\mathit{rasterizationSamples} \over 32}\rceil\)
---     'Graphics.Vulkan.Core10.BaseType.SampleMask' values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32', 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags.PipelineMultisampleStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
--- 'Graphics.Vulkan.Core10.BaseType.SampleMask',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineMultisampleStateCreateInfo (es :: [Type]) = PipelineMultisampleStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineMultisampleStateCreateFlags
-  , -- | @rasterizationSamples@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- specifying the number of samples used in rasterization.
-    rasterizationSamples :: SampleCountFlagBits
-  , -- | @sampleShadingEnable@ /can/ be used to enable
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-sampleshading Sample Shading>.
-    sampleShadingEnable :: Bool
-  , -- | @minSampleShading@ specifies a minimum fraction of sample shading if
-    -- @sampleShadingEnable@ is set to 'Graphics.Vulkan.Core10.BaseType.TRUE'.
-    minSampleShading :: Float
-  , -- | @pSampleMask@ is a bitmask of static coverage information that is ANDed
-    -- with the coverage information generated during rasterization, as
-    -- described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-samplemask Sample Mask>.
-    sampleMask :: Vector SampleMask
-  , -- | @alphaToCoverageEnable@ controls whether a temporary coverage value is
-    -- generated based on the alpha component of the fragment’s first color
-    -- output as specified in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-covg Multisample Coverage>
-    -- section.
-    alphaToCoverageEnable :: Bool
-  , -- | @alphaToOneEnable@ controls whether the alpha component of the
-    -- fragment’s first color output is replaced with one as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-covg Multisample Coverage>.
-    alphaToOneEnable :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PipelineMultisampleStateCreateInfo es)
-
-instance Extensible PipelineMultisampleStateCreateInfo where
-  extensibleType = STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext PipelineMultisampleStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineMultisampleStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineCoverageReductionStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineCoverageModulationStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineSampleLocationsStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineCoverageToColorStateCreateInfoNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PipelineMultisampleStateCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineMultisampleStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (rasterizationSamples)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (sampleShadingEnable))
-    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (minSampleShading))
-    pSampleMask'' <- case Data.Vector.length (sampleMask) of
-      0      -> pure nullPtr
-      vecLen -> do
-        let requiredLen = case (rasterizationSamples) of
-              SampleCountFlagBits n -> (n + 31) `quot` 32
-        lift $ unless (requiredLen == fromIntegral vecLen) $
-          throwIO $ IOError Nothing InvalidArgument "" "sampleMask must be either empty or contain enough bits to cover all the sample specified by 'rasterizationSamples'" Nothing Nothing
-        do
-          pPSampleMask' <- ContT $ allocaBytesAligned @SampleMask ((Data.Vector.length ((sampleMask))) * 4) 4
-          lift $ Data.Vector.imapM_ (\i e -> poke (pPSampleMask' `plusPtr` (4 * (i)) :: Ptr SampleMask) (e)) ((sampleMask))
-          pure $ pPSampleMask'
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SampleMask))) pSampleMask''
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (alphaToCoverageEnable))
-    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (alphaToOneEnable))
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance PeekChain es => FromCStruct (PipelineMultisampleStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineMultisampleStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags))
-    rasterizationSamples <- peek @SampleCountFlagBits ((p `plusPtr` 20 :: Ptr SampleCountFlagBits))
-    sampleShadingEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    minSampleShading <- peek @CFloat ((p `plusPtr` 28 :: Ptr CFloat))
-    pSampleMask <- peek @(Ptr SampleMask) ((p `plusPtr` 32 :: Ptr (Ptr SampleMask)))
-    pSampleMask' <- if pSampleMask == nullPtr
-      then pure mempty
-      else generateM (case rasterizationSamples of
-        SampleCountFlagBits n -> (fromIntegral n + 31) `quot` 32) (\i -> peek @SampleMask (((pSampleMask) `advancePtrBytes` (4 * (i)) :: Ptr SampleMask)))
-    alphaToCoverageEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    alphaToOneEnable <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    pure $ PipelineMultisampleStateCreateInfo
-             next flags rasterizationSamples (bool32ToBool sampleShadingEnable) ((\(CFloat a) -> a) minSampleShading) pSampleMask' (bool32ToBool alphaToCoverageEnable) (bool32ToBool alphaToOneEnable)
-
-instance es ~ '[] => Zero (PipelineMultisampleStateCreateInfo es) where
-  zero = PipelineMultisampleStateCreateInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-           mempty
-           zero
-           zero
-
-
--- | VkPipelineColorBlendAttachmentState - Structure specifying a pipeline
--- color blend attachment state
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
---     feature is not enabled, @srcColorBlendFactor@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA',
---     or
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
---     feature is not enabled, @dstColorBlendFactor@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA',
---     or
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
---     feature is not enabled, @srcAlphaBlendFactor@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA',
---     or
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
---     feature is not enabled, @dstAlphaBlendFactor@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA',
---     or
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
---
--- -   If either of @colorBlendOp@ or @alphaBlendOp@ is an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
---     then @colorBlendOp@ /must/ equal @alphaBlendOp@
---
--- -   If
---     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@
---     is 'Graphics.Vulkan.Core10.BaseType.FALSE' and @colorBlendOp@ is an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
---     then @colorBlendOp@ /must/ be the same for all attachments
---
--- -   If
---     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@
---     is 'Graphics.Vulkan.Core10.BaseType.FALSE' and @alphaBlendOp@ is an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
---     then @alphaBlendOp@ /must/ be the same for all attachments
---
--- -   If
---     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendAllOperations@
---     is 'Graphics.Vulkan.Core10.BaseType.FALSE', then @colorBlendOp@
---     /must/ not be
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_ZERO_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OVER_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OVER_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_IN_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_IN_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OUT_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OUT_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_ATOP_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_ATOP_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_XOR_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_RGB_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARDODGE_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARBURN_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_VIVIDLIGHT_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARLIGHT_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_PINLIGHT_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_HARDMIX_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_ALPHA_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_DARKER_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_CLAMPED_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_CONTRAST_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_OVG_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_RED_EXT',
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_GREEN_EXT', or
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BLEND_OP_BLUE_EXT'
---
--- -   If @colorBlendOp@ or @alphaBlendOp@ is an
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
---     then
---     'Graphics.Vulkan.Core10.Pass.SubpassDescription'::@colorAttachmentCount@
---     of the subpass this pipeline is compiled against /must/ be less than
---     or equal to
---     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::advancedBlendMaxColorAttachments
---
--- == Valid Usage (Implicit)
---
--- -   @srcColorBlendFactor@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
---
--- -   @dstColorBlendFactor@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
---
--- -   @colorBlendOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BlendOp' value
---
--- -   @srcAlphaBlendFactor@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
---
--- -   @dstAlphaBlendFactor@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
---
--- -   @alphaBlendOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.BlendOp.BlendOp' value
---
--- -   @colorWriteMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.BlendFactor.BlendFactor',
--- 'Graphics.Vulkan.Core10.Enums.BlendOp.BlendOp',
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlags',
--- 'PipelineColorBlendStateCreateInfo'
-data PipelineColorBlendAttachmentState = PipelineColorBlendAttachmentState
-  { -- | @blendEnable@ controls whether blending is enabled for the corresponding
-    -- color attachment. If blending is not enabled, the source fragment’s
-    -- color for that attachment is passed through unmodified.
-    blendEnable :: Bool
-  , -- | @srcColorBlendFactor@ selects which blend factor is used to determine
-    -- the source factors (Sr,Sg,Sb).
-    srcColorBlendFactor :: BlendFactor
-  , -- | @dstColorBlendFactor@ selects which blend factor is used to determine
-    -- the destination factors (Dr,Dg,Db).
-    dstColorBlendFactor :: BlendFactor
-  , -- | @colorBlendOp@ selects which blend operation is used to calculate the
-    -- RGB values to write to the color attachment.
-    colorBlendOp :: BlendOp
-  , -- | @srcAlphaBlendFactor@ selects which blend factor is used to determine
-    -- the source factor Sa.
-    srcAlphaBlendFactor :: BlendFactor
-  , -- | @dstAlphaBlendFactor@ selects which blend factor is used to determine
-    -- the destination factor Da.
-    dstAlphaBlendFactor :: BlendFactor
-  , -- | @alphaBlendOp@ selects which blend operation is use to calculate the
-    -- alpha values to write to the color attachment.
-    alphaBlendOp :: BlendOp
-  , -- | @colorWriteMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'
-    -- specifying which of the R, G, B, and\/or A components are enabled for
-    -- writing, as described for the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-color-write-mask Color Write Mask>.
-    colorWriteMask :: ColorComponentFlags
-  }
-  deriving (Typeable)
-deriving instance Show PipelineColorBlendAttachmentState
-
-instance ToCStruct PipelineColorBlendAttachmentState where
-  withCStruct x f = allocaBytesAligned 32 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineColorBlendAttachmentState{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (blendEnable))
-    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (srcColorBlendFactor)
-    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (dstColorBlendFactor)
-    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (colorBlendOp)
-    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (srcAlphaBlendFactor)
-    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (dstAlphaBlendFactor)
-    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (alphaBlendOp)
-    poke ((p `plusPtr` 28 :: Ptr ColorComponentFlags)) (colorWriteMask)
-    f
-  cStructSize = 32
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (zero)
-    f
-
-instance FromCStruct PipelineColorBlendAttachmentState where
-  peekCStruct p = do
-    blendEnable <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))
-    srcColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 4 :: Ptr BlendFactor))
-    dstColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 8 :: Ptr BlendFactor))
-    colorBlendOp <- peek @BlendOp ((p `plusPtr` 12 :: Ptr BlendOp))
-    srcAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 16 :: Ptr BlendFactor))
-    dstAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 20 :: Ptr BlendFactor))
-    alphaBlendOp <- peek @BlendOp ((p `plusPtr` 24 :: Ptr BlendOp))
-    colorWriteMask <- peek @ColorComponentFlags ((p `plusPtr` 28 :: Ptr ColorComponentFlags))
-    pure $ PipelineColorBlendAttachmentState
-             (bool32ToBool blendEnable) srcColorBlendFactor dstColorBlendFactor colorBlendOp srcAlphaBlendFactor dstAlphaBlendFactor alphaBlendOp colorWriteMask
-
-instance Storable PipelineColorBlendAttachmentState where
-  sizeOf ~_ = 32
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineColorBlendAttachmentState where
-  zero = PipelineColorBlendAttachmentState
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineColorBlendStateCreateInfo - Structure specifying parameters of
--- a newly created pipeline color blend state
---
--- = Description
---
--- Each element of the @pAttachments@ array is a
--- 'PipelineColorBlendAttachmentState' structure specifying per-target
--- blending state for each individual color attachment. If the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-independentBlend independent blending>
--- feature is not enabled on the device, all
--- 'PipelineColorBlendAttachmentState' elements in the @pAttachments@ array
--- /must/ be identical.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-independentBlend independent blending>
---     feature is not enabled, all elements of @pAttachments@ /must/ be
---     identical
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-logicOp logic operations>
---     feature is not enabled, @logicOpEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If @logicOpEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE',
---     @logicOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.LogicOp.LogicOp' value
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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.PipelineColorBlendAdvancedStateCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be @0@
---
--- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
---     pointer to an array of @attachmentCount@ valid
---     'PipelineColorBlendAttachmentState' structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32', 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.LogicOp.LogicOp',
--- 'PipelineColorBlendAttachmentState',
--- 'Graphics.Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags.PipelineColorBlendStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineColorBlendStateCreateInfo (es :: [Type]) = PipelineColorBlendStateCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: PipelineColorBlendStateCreateFlags
-  , -- | @logicOpEnable@ controls whether to apply
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-logicop Logical Operations>.
-    logicOpEnable :: Bool
-  , -- | @logicOp@ selects which logical operation to apply.
-    logicOp :: LogicOp
-  , -- | @pAttachments@: is a pointer to an array of per target attachment
-    -- states.
-    attachments :: Vector PipelineColorBlendAttachmentState
-  , -- | @blendConstants@ is a pointer to an array of four values used as the R,
-    -- G, B, and A components of the blend constant that are used in blending,
-    -- depending on the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.
-    blendConstants :: (Float, Float, Float, Float)
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PipelineColorBlendStateCreateInfo es)
-
-instance Extensible PipelineColorBlendStateCreateInfo where
-  extensibleType = STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext PipelineColorBlendStateCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineColorBlendStateCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineColorBlendAdvancedStateCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PipelineColorBlendStateCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineColorBlendStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (logicOpEnable))
-    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (logicOp)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
-    pPAttachments' <- ContT $ allocaBytesAligned @PipelineColorBlendAttachmentState ((Data.Vector.length (attachments)) * 32) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState) (e) . ($ ())) (attachments)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState))) (pPAttachments')
-    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
-    lift $ case (blendConstants) of
-      (e0, e1, e2, e3) -> do
-        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))
-        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
-        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-    lift $ f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (zero)
-    pPAttachments' <- ContT $ allocaBytesAligned @PipelineColorBlendAttachmentState ((Data.Vector.length (mempty)) * 32) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState))) (pPAttachments')
-    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
-    lift $ case ((zero, zero, zero, zero)) of
-      (e0, e1, e2, e3) -> do
-        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))
-        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
-        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-    lift $ f
-
-instance PeekChain es => FromCStruct (PipelineColorBlendStateCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineColorBlendStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags))
-    logicOpEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    logicOp <- peek @LogicOp ((p `plusPtr` 24 :: Ptr LogicOp))
-    attachmentCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    pAttachments <- peek @(Ptr PipelineColorBlendAttachmentState) ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState)))
-    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peekCStruct @PipelineColorBlendAttachmentState ((pAttachments `advancePtrBytes` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState)))
-    let pblendConstants = lowerArrayPtr @CFloat ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
-    blendConstants0 <- peek @CFloat ((pblendConstants `advancePtrBytes` 0 :: Ptr CFloat))
-    blendConstants1 <- peek @CFloat ((pblendConstants `advancePtrBytes` 4 :: Ptr CFloat))
-    blendConstants2 <- peek @CFloat ((pblendConstants `advancePtrBytes` 8 :: Ptr CFloat))
-    blendConstants3 <- peek @CFloat ((pblendConstants `advancePtrBytes` 12 :: Ptr CFloat))
-    pure $ PipelineColorBlendStateCreateInfo
-             next flags (bool32ToBool logicOpEnable) logicOp pAttachments' ((((\(CFloat a) -> a) blendConstants0), ((\(CFloat a) -> a) blendConstants1), ((\(CFloat a) -> a) blendConstants2), ((\(CFloat a) -> a) blendConstants3)))
-
-instance es ~ '[] => Zero (PipelineColorBlendStateCreateInfo es) where
-  zero = PipelineColorBlendStateCreateInfo
-           ()
-           zero
-           zero
-           zero
-           mempty
-           (zero, zero, zero, zero)
-
-
--- | VkPipelineDynamicStateCreateInfo - Structure specifying parameters of a
--- newly created pipeline dynamic state
---
--- == Valid Usage
---
--- -   Each element of @pDynamicStates@ /must/ be unique
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be @0@
---
--- -   If @dynamicStateCount@ is not @0@, @pDynamicStates@ /must/ be a
---     valid pointer to an array of @dynamicStateCount@ valid
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DynamicState' values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.DynamicState.DynamicState',
--- 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags.PipelineDynamicStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineDynamicStateCreateInfo = PipelineDynamicStateCreateInfo
-  { -- | @flags@ is reserved for future use.
-    flags :: PipelineDynamicStateCreateFlags
-  , -- | @pDynamicStates@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Enums.DynamicState.DynamicState' values
-    -- specifying which pieces of pipeline state will use the values from
-    -- dynamic state commands rather than from pipeline state creation info.
-    dynamicStates :: Vector DynamicState
-  }
-  deriving (Typeable)
-deriving instance Show PipelineDynamicStateCreateInfo
-
-instance ToCStruct PipelineDynamicStateCreateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineDynamicStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (dynamicStates)) :: Word32))
-    pPDynamicStates' <- ContT $ allocaBytesAligned @DynamicState ((Data.Vector.length (dynamicStates)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicStates' `plusPtr` (4 * (i)) :: Ptr DynamicState) (e)) (dynamicStates)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DynamicState))) (pPDynamicStates')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPDynamicStates' <- ContT $ allocaBytesAligned @DynamicState ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicStates' `plusPtr` (4 * (i)) :: Ptr DynamicState) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DynamicState))) (pPDynamicStates')
-    lift $ f
-
-instance FromCStruct PipelineDynamicStateCreateInfo where
-  peekCStruct p = do
-    flags <- peek @PipelineDynamicStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags))
-    dynamicStateCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pDynamicStates <- peek @(Ptr DynamicState) ((p `plusPtr` 24 :: Ptr (Ptr DynamicState)))
-    pDynamicStates' <- generateM (fromIntegral dynamicStateCount) (\i -> peek @DynamicState ((pDynamicStates `advancePtrBytes` (4 * (i)) :: Ptr DynamicState)))
-    pure $ PipelineDynamicStateCreateInfo
-             flags pDynamicStates'
-
-instance Zero PipelineDynamicStateCreateInfo where
-  zero = PipelineDynamicStateCreateInfo
-           zero
-           mempty
-
-
--- | VkStencilOpState - Structure specifying stencil operation state
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.CompareOp.CompareOp',
--- 'PipelineDepthStencilStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.StencilOp.StencilOp'
-data StencilOpState = StencilOpState
-  { -- | @failOp@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.StencilOp.StencilOp' value
-    failOp :: StencilOp
-  , -- | @passOp@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.StencilOp.StencilOp' value
-    passOp :: StencilOp
-  , -- | @depthFailOp@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.StencilOp.StencilOp' value
-    depthFailOp :: StencilOp
-  , -- | @compareOp@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.CompareOp.CompareOp' value
-    compareOp :: CompareOp
-  , -- | @compareMask@ selects the bits of the unsigned integer stencil values
-    -- participating in the stencil test.
-    compareMask :: Word32
-  , -- | @writeMask@ selects the bits of the unsigned integer stencil values
-    -- updated by the stencil test in the stencil framebuffer attachment.
-    writeMask :: Word32
-  , -- | @reference@ is an integer reference value that is used in the unsigned
-    -- stencil comparison.
-    reference :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show StencilOpState
-
-instance ToCStruct StencilOpState where
-  withCStruct x f = allocaBytesAligned 28 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p StencilOpState{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (failOp)
-    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (passOp)
-    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (depthFailOp)
-    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (compareOp)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (compareMask)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (writeMask)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (reference)
-    f
-  cStructSize = 28
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct StencilOpState where
-  peekCStruct p = do
-    failOp <- peek @StencilOp ((p `plusPtr` 0 :: Ptr StencilOp))
-    passOp <- peek @StencilOp ((p `plusPtr` 4 :: Ptr StencilOp))
-    depthFailOp <- peek @StencilOp ((p `plusPtr` 8 :: Ptr StencilOp))
-    compareOp <- peek @CompareOp ((p `plusPtr` 12 :: Ptr CompareOp))
-    compareMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    writeMask <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    reference <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pure $ StencilOpState
-             failOp passOp depthFailOp compareOp compareMask writeMask reference
-
-instance Storable StencilOpState where
-  sizeOf ~_ = 28
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero StencilOpState where
-  zero = StencilOpState
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineDepthStencilStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline depth stencil state
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBounds depth bounds testing>
---     feature is not enabled, @depthBoundsTestEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be @0@
---
--- -   @depthCompareOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.CompareOp.CompareOp' value
---
--- -   @front@ /must/ be a valid 'StencilOpState' structure
---
--- -   @back@ /must/ be a valid 'StencilOpState' structure
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.CompareOp.CompareOp',
--- 'GraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags.PipelineDepthStencilStateCreateFlags',
--- 'StencilOpState',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineDepthStencilStateCreateInfo = PipelineDepthStencilStateCreateInfo
-  { -- | @flags@ is reserved for future use.
-    flags :: PipelineDepthStencilStateCreateFlags
-  , -- | @depthTestEnable@ controls whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth testing>
-    -- is enabled.
-    depthTestEnable :: Bool
-  , -- | @depthWriteEnable@ controls whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth-write depth writes>
-    -- are enabled when @depthTestEnable@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE'. Depth writes are always disabled
-    -- when @depthTestEnable@ is 'Graphics.Vulkan.Core10.BaseType.FALSE'.
-    depthWriteEnable :: Bool
-  , -- | @depthCompareOp@ is the comparison operator used in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth test>.
-    depthCompareOp :: CompareOp
-  , -- | @depthBoundsTestEnable@ controls whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds testing>
-    -- is enabled.
-    depthBoundsTestEnable :: Bool
-  , -- | @stencilTestEnable@ controls whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil stencil testing>
-    -- is enabled.
-    stencilTestEnable :: Bool
-  , -- | @front@ and @back@ control the parameters of the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil stencil test>.
-    front :: StencilOpState
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "back"
-    back :: StencilOpState
-  , -- | @minDepthBounds@ and @maxDepthBounds@ define the range of values used in
-    -- the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds test>.
-    minDepthBounds :: Float
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "maxDepthBounds"
-    maxDepthBounds :: Float
-  }
-  deriving (Typeable)
-deriving instance Show PipelineDepthStencilStateCreateInfo
-
-instance ToCStruct PipelineDepthStencilStateCreateInfo where
-  withCStruct x f = allocaBytesAligned 104 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineDepthStencilStateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthTestEnable))
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (depthWriteEnable))
-    lift $ poke ((p `plusPtr` 28 :: Ptr CompareOp)) (depthCompareOp)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (depthBoundsTestEnable))
-    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (stencilTestEnable))
-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr StencilOpState)) (front) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 68 :: Ptr StencilOpState)) (back) . ($ ())
-    lift $ poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (minDepthBounds))
-    lift $ poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (maxDepthBounds))
-    lift $ f
-  cStructSize = 104
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 28 :: Ptr CompareOp)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr StencilOpState)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 68 :: Ptr StencilOpState)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (zero))
-    lift $ f
-
-instance FromCStruct PipelineDepthStencilStateCreateInfo where
-  peekCStruct p = do
-    flags <- peek @PipelineDepthStencilStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags))
-    depthTestEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    depthWriteEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    depthCompareOp <- peek @CompareOp ((p `plusPtr` 28 :: Ptr CompareOp))
-    depthBoundsTestEnable <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    stencilTestEnable <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    front <- peekCStruct @StencilOpState ((p `plusPtr` 40 :: Ptr StencilOpState))
-    back <- peekCStruct @StencilOpState ((p `plusPtr` 68 :: Ptr StencilOpState))
-    minDepthBounds <- peek @CFloat ((p `plusPtr` 96 :: Ptr CFloat))
-    maxDepthBounds <- peek @CFloat ((p `plusPtr` 100 :: Ptr CFloat))
-    pure $ PipelineDepthStencilStateCreateInfo
-             flags (bool32ToBool depthTestEnable) (bool32ToBool depthWriteEnable) depthCompareOp (bool32ToBool depthBoundsTestEnable) (bool32ToBool stencilTestEnable) front back ((\(CFloat a) -> a) minDepthBounds) ((\(CFloat a) -> a) maxDepthBounds)
-
-instance Zero PipelineDepthStencilStateCreateInfo where
-  zero = PipelineDepthStencilStateCreateInfo
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkGraphicsPipelineCreateInfo - Structure specifying parameters of a
--- newly created graphics pipeline
---
--- = Description
---
--- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
--- described in more detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
---
--- If any shader stage fails to compile, the compile log will be reported
--- back to the application, and
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV' will be
--- generated.
---
--- == Valid Usage
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be
---     a valid handle to a graphics
---     'Graphics.Vulkan.Core10.Handles.Pipeline'
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @basePipelineIndex@ /must/ be a valid index into the calling
---     command’s @pCreateInfos@ parameter
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/
---     be 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @basePipelineIndex@ /must/ be -1
---
--- -   The @stage@ member of each element of @pStages@ /must/ be unique
---
--- -   The geometric shader stages provided in @pStages@ /must/ be either
---     from the mesh shading pipeline (@stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'
---     or
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV')
---     or from the primitive shading pipeline (@stage@ is
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT')
---
--- -   The @stage@ member of one element of @pStages@ /must/ be either
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'
---
--- -   The @stage@ member of each element of @pStages@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
---
--- -   If @pStages@ includes a tessellation control shader stage, it /must/
---     include a tessellation evaluation shader stage
---
--- -   If @pStages@ includes a tessellation evaluation shader stage, it
---     /must/ include a tessellation control shader stage
---
--- -   If @pStages@ includes a tessellation control shader stage and a
---     tessellation evaluation shader stage, @pTessellationState@ /must/ be
---     a valid pointer to a valid 'PipelineTessellationStateCreateInfo'
---     structure
---
--- -   If @pStages@ includes tessellation shader stages, the shader code of
---     at least one stage /must/ contain an @OpExecutionMode@ instruction
---     that specifies the type of subdivision in the pipeline
---
--- -   If @pStages@ includes tessellation shader stages, and the shader
---     code of both stages contain an @OpExecutionMode@ instruction that
---     specifies the type of subdivision in the pipeline, they /must/ both
---     specify the same subdivision mode
---
--- -   If @pStages@ includes tessellation shader stages, the shader code of
---     at least one stage /must/ contain an @OpExecutionMode@ instruction
---     that specifies the output patch size in the pipeline
---
--- -   If @pStages@ includes tessellation shader stages, and the shader
---     code of both contain an @OpExecutionMode@ instruction that specifies
---     the out patch size in the pipeline, they /must/ both specify the
---     same patch size
---
--- -   If @pStages@ includes tessellation shader stages, the @topology@
---     member of @pInputAssembly@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'
---
--- -   If the @topology@ member of @pInputAssembly@ is
---     'Graphics.Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',
---     @pStages@ /must/ include tessellation shader stages
---
--- -   If @pStages@ includes a geometry shader stage, and does not include
---     any tessellation shader stages, its shader code /must/ contain an
---     @OpExecutionMode@ instruction that specifies an input primitive type
---     that is
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution compatible>
---     with the primitive topology specified in @pInputAssembly@
---
--- -   If @pStages@ includes a geometry shader stage, and also includes
---     tessellation shader stages, its shader code /must/ contain an
---     @OpExecutionMode@ instruction that specifies an input primitive type
---     that is
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution compatible>
---     with the primitive topology that is output by the tessellation
---     stages
---
--- -   If @pStages@ includes a fragment shader stage and a geometry shader
---     stage, and the fragment shader code reads from an input variable
---     that is decorated with @PrimitiveID@, then the geometry shader code
---     /must/ write to a matching output variable, decorated with
---     @PrimitiveID@, in all execution paths
---
--- -   If @pStages@ includes a fragment shader stage, its shader code
---     /must/ not read from any input attachment that is defined as
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' in @subpass@
---
--- -   The shader code for the entry points identified by @pStages@, and
---     the rest of the state identified by this structure /must/ adhere to
---     the pipeline linking rules described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>
---     chapter
---
--- -   If rasterization is not disabled and @subpass@ uses a depth\/stencil
---     attachment in @renderPass@ that has a layout of
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
---     in the 'Graphics.Vulkan.Core10.Pass.AttachmentReference' defined by
---     @subpass@, the @depthWriteEnable@ member of @pDepthStencilState@
---     /must/ be 'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If rasterization is not disabled and @subpass@ uses a depth\/stencil
---     attachment in @renderPass@ that has a layout of
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
---     in the 'Graphics.Vulkan.Core10.Pass.AttachmentReference' defined by
---     @subpass@, the @failOp@, @passOp@ and @depthFailOp@ members of each
---     of the @front@ and @back@ members of @pDepthStencilState@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
---
--- -   If rasterization is not disabled and the subpass uses color
---     attachments, then for each color attachment in the subpass the
---     @blendEnable@ member of the corresponding element of the
---     @pAttachment@ member of @pColorBlendState@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE' if the attached image’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
---     does not contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT'
---
--- -   If rasterization is not disabled and the subpass uses color
---     attachments, the @attachmentCount@ member of @pColorBlendState@
---     /must/ be equal to the @colorAttachmentCount@ used to create
---     @subpass@
---
--- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT',
---     the @pViewports@ member of @pViewportState@ /must/ be a valid
---     pointer to an array of @pViewportState->viewportCount@ valid
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Viewport' structures
---
--- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR',
---     the @pScissors@ member of @pViewportState@ /must/ be a valid pointer
---     to an array of @pViewportState->scissorCount@
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
---
--- -   If the wide lines feature is not enabled, and no element of the
---     @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH',
---     the @lineWidth@ member of @pRasterizationState@ /must/ be @1.0@
---
--- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
---     'Graphics.Vulkan.Core10.BaseType.FALSE', @pViewportState@ /must/ be
---     a valid pointer to a valid 'PipelineViewportStateCreateInfo'
---     structure
---
--- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
---     'Graphics.Vulkan.Core10.BaseType.FALSE', @pMultisampleState@ /must/
---     be a valid pointer to a valid 'PipelineMultisampleStateCreateInfo'
---     structure
---
--- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
---     'Graphics.Vulkan.Core10.BaseType.FALSE', and @subpass@ uses a
---     depth\/stencil attachment, @pDepthStencilState@ /must/ be a valid
---     pointer to a valid 'PipelineDepthStencilStateCreateInfo' structure
---
--- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
---     'Graphics.Vulkan.Core10.BaseType.FALSE', and @subpass@ uses color
---     attachments, @pColorBlendState@ /must/ be a valid pointer to a valid
---     'PipelineColorBlendStateCreateInfo' structure
---
--- -   If the depth bias clamping feature is not enabled, no element of the
---     @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS',
---     and the @depthBiasEnable@ member of @pRasterizationState@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', the @depthBiasClamp@ member
---     of @pRasterizationState@ /must/ be @0.0@
---
--- -   If the @VK_EXT_depth_range_unrestricted@ extension is not enabled
---     and no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS',
---     and the @depthBoundsTestEnable@ member of @pDepthStencilState@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', the @minDepthBounds@ and
---     @maxDepthBounds@ members of @pDepthStencilState@ /must/ be between
---     @0.0@ and @1.0@, inclusive
---
--- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
---     and the @sampleLocationsEnable@ member of a
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---     structure included in the @pNext@ chain of @pMultisampleState@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE',
---     @sampleLocationsInfo.sampleLocationGridSize.width@ /must/ evenly
---     divide
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.width@
---     as returned by
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
---     with a @samples@ parameter equaling @rasterizationSamples@
---
--- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
---     and the @sampleLocationsEnable@ member of a
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---     structure included in the @pNext@ chain of @pMultisampleState@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE',
---     @sampleLocationsInfo.sampleLocationGridSize.height@ /must/ evenly
---     divide
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.height@
---     as returned by
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
---     with a @samples@ parameter equaling @rasterizationSamples@
---
--- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
---     and the @sampleLocationsEnable@ member of a
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---     structure included in the @pNext@ chain of @pMultisampleState@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE',
---     @sampleLocationsInfo.sampleLocationsPerPixel@ /must/ equal
---     @rasterizationSamples@
---
--- -   If the @sampleLocationsEnable@ member of a
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
---     structure included in the @pNext@ chain of @pMultisampleState@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', the fragment shader code
---     /must/ not statically use the extended instruction
---     @InterpolateAtSample@
---
--- -   @layout@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
---     with all shaders specified in @pStages@
---
--- -   If neither the @VK_AMD_mixed_attachment_samples@ nor the
---     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if
---     @subpass@ uses color and\/or depth\/stencil attachments, then the
---     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the
---     same as the sample count for those subpass attachments
---
--- -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, and
---     if @subpass@ uses color and\/or depth\/stencil attachments, then the
---     @rasterizationSamples@ member of @pMultisampleState@ /must/ equal
---     the maximum of the sample counts of those subpass attachments
---
--- -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
---     if @subpass@ has a depth\/stencil attachment and depth test, stencil
---     test, or depth bounds test are enabled, then the
---     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the
---     same as the sample count of the depth\/stencil attachment
---
--- -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
---     if @subpass@ has any color attachments, then the
---     @rasterizationSamples@ member of @pMultisampleState@ /must/ be
---     greater than or equal to the sample count for those subpass
---     attachments
---
--- -   If the @VK_NV_coverage_reduction_mode@ extension is enabled, the
---     coverage reduction mode specified by
---     'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV'::@coverageReductionMode@,
---     the @rasterizationSamples@ member of @pMultisampleState@ and the
---     sample counts for the color and depth\/stencil attachments (if the
---     subpass has them) /must/ be a valid combination returned by
---     'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV'
---
--- -   If @subpass@ does not use any color and\/or depth\/stencil
---     attachments, then the @rasterizationSamples@ member of
---     @pMultisampleState@ /must/ follow the rules for a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments zero-attachment subpass>
---
--- -   @subpass@ /must/ be a valid subpass within @renderPass@
---
--- -   If the @renderPass@ has multiview enabled and @subpass@ has more
---     than one bit set in the view mask and @multiviewTessellationShader@
---     is not enabled, then @pStages@ /must/ not include tessellation
---     shaders
---
--- -   If the @renderPass@ has multiview enabled and @subpass@ has more
---     than one bit set in the view mask and @multiviewGeometryShader@ is
---     not enabled, then @pStages@ /must/ not include a geometry shader
---
--- -   If the @renderPass@ has multiview enabled and @subpass@ has more
---     than one bit set in the view mask, shaders in the pipeline /must/
---     not write to the @Layer@ built-in output
---
--- -   If the @renderPass@ has multiview enabled, then all shaders /must/
---     not include variables decorated with the @Layer@ built-in decoration
---     in their interfaces
---
--- -   @flags@ /must/ not contain the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.PIPELINE_CREATE_DISPATCH_BASE'
---     flag
---
--- -   If @pStages@ includes a fragment shader stage and an input
---     attachment was referenced by an @aspectMask@ at @renderPass@
---     creation time, its shader code /must/ only read from the aspects
---     that were specified for that input attachment
---
--- -   The number of resources in @layout@ accessible to each shader stage
---     that is used by the pipeline /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
---
--- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV',
---     and the @viewportWScalingEnable@ member of a
---     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
---     structure, included in the @pNext@ chain of @pViewportState@, is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', the @pViewportWScalings@
---     member of the
---     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
---     /must/ be a pointer to an array of
---     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@
---     valid
---     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.ViewportWScalingNV'
---     structures
---
--- -   If @pStages@ includes a vertex shader stage, @pVertexInputState@
---     /must/ be a valid pointer to a valid
---     'PipelineVertexInputStateCreateInfo' structure
---
--- -   If @pStages@ includes a vertex shader stage, @pInputAssemblyState@
---     /must/ be a valid pointer to a valid
---     'PipelineInputAssemblyStateCreateInfo' structure
---
--- -   The @Xfb@ execution mode /can/ be specified by only one shader stage
---     in @pStages@
---
--- -   If any shader stage in @pStages@ specifies @Xfb@ execution mode it
---     /must/ be the last vertex processing stage
---
--- -   If a
---     'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@
---     value other than zero is specified, all variables in the output
---     interface of the entry point being compiled decorated with
---     @Position@, @PointSize@, @ClipDistance@, or @CullDistance@ /must/
---     all be decorated with identical @Stream@ values that match the
---     @rasterizationStream@
---
--- -   If
---     'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@
---     is zero, or not specified, all variables in the output interface of
---     the entry point being compiled decorated with @Position@,
---     @PointSize@, @ClipDistance@, or @CullDistance@ /must/ all be
---     decorated with a @Stream@ value of zero, or /must/ not specify the
---     @Stream@ decoration
---
--- -   If the last vertex processing stage is a geometry shader, and that
---     geometry shader uses the @GeometryStreams@ capability, then
---     'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT'::@geometryStreams@
---     feature /must/ be enabled
---
--- -   If there are any mesh shader stages in the pipeline there /must/ not
---     be any shader stage in the pipeline with a @Xfb@ execution mode
---
--- -   If the @lineRasterizationMode@ member of a
---     'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
---     structure included in the @pNext@ chain of @pRasterizationState@ is
---     'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_BRESENHAM_EXT'
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT'
---     and if rasterization is enabled, then the @alphaToCoverageEnable@,
---     @alphaToOneEnable@, and @sampleShadingEnable@ members of
---     @pMultisampleState@ /must/ all be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If the @stippledLineEnable@ member of
---     'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
---     is 'Graphics.Vulkan.Core10.BaseType.TRUE' and no element of the
---     @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_EXT',
---     then the @lineStippleFactor@ member of
---     'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
---     /must/ be in the range [1,256]
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',
---     then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
---     feature /must/ be enabled
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',
---     then all stages /must/ not specify @Xfb@ execution mode
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
---     feature is not enabled, @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',
---     'Graphics.Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD',
---     'Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT',
---     or
---     'Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
---     values
---
--- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@
---     valid 'PipelineShaderStageCreateInfo' structures
---
--- -   @pRasterizationState@ /must/ be a valid pointer to a valid
---     'PipelineRasterizationStateCreateInfo' structure
---
--- -   If @pDynamicState@ is not @NULL@, @pDynamicState@ /must/ be a valid
---     pointer to a valid 'PipelineDynamicStateCreateInfo' structure
---
--- -   @layout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   @renderPass@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.RenderPass' handle
---
--- -   @stageCount@ /must/ be greater than @0@
---
--- -   Each of @basePipelineHandle@, @layout@, and @renderPass@ that are
---     valid handles of non-ignored parameters /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'PipelineColorBlendStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
--- 'PipelineDepthStencilStateCreateInfo', 'PipelineDynamicStateCreateInfo',
--- 'PipelineInputAssemblyStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout',
--- 'PipelineMultisampleStateCreateInfo',
--- 'PipelineRasterizationStateCreateInfo', 'PipelineShaderStageCreateInfo',
--- 'PipelineTessellationStateCreateInfo',
--- 'PipelineVertexInputStateCreateInfo', 'PipelineViewportStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Handles.RenderPass',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createGraphicsPipelines'
-data GraphicsPipelineCreateInfo (es :: [Type]) = GraphicsPipelineCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
-    -- specifying how the pipeline will be generated.
-    flags :: PipelineCreateFlags
-  , -- | @pStages@ is a pointer to an array of @stageCount@
-    -- 'PipelineShaderStageCreateInfo' structures describing the set of the
-    -- shader stages to be included in the graphics pipeline.
-    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
-  , -- | @pVertexInputState@ is a pointer to a
-    -- 'PipelineVertexInputStateCreateInfo' structure. It is ignored if the
-    -- pipeline includes a mesh shader stage.
-    vertexInputState :: Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
-  , -- | @pInputAssemblyState@ is a pointer to a
-    -- 'PipelineInputAssemblyStateCreateInfo' structure which determines input
-    -- assembly behavior, as described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing Drawing Commands>.
-    -- It is ignored if the pipeline includes a mesh shader stage.
-    inputAssemblyState :: Maybe PipelineInputAssemblyStateCreateInfo
-  , -- | @pTessellationState@ is a pointer to a
-    -- 'PipelineTessellationStateCreateInfo' structure, and is ignored if the
-    -- pipeline does not include a tessellation control shader stage and
-    -- tessellation evaluation shader stage.
-    tessellationState :: Maybe (SomeStruct PipelineTessellationStateCreateInfo)
-  , -- | @pViewportState@ is a pointer to a 'PipelineViewportStateCreateInfo'
-    -- structure, and is ignored if the pipeline has rasterization disabled.
-    viewportState :: Maybe (SomeStruct PipelineViewportStateCreateInfo)
-  , -- | @pRasterizationState@ is a pointer to a
-    -- 'PipelineRasterizationStateCreateInfo' structure.
-    rasterizationState :: SomeStruct PipelineRasterizationStateCreateInfo
-  , -- | @pMultisampleState@ is a pointer to a
-    -- 'PipelineMultisampleStateCreateInfo' structure, and is ignored if the
-    -- pipeline has rasterization disabled.
-    multisampleState :: Maybe (SomeStruct PipelineMultisampleStateCreateInfo)
-  , -- | @pDepthStencilState@ is a pointer to a
-    -- 'PipelineDepthStencilStateCreateInfo' structure, and is ignored if the
-    -- pipeline has rasterization disabled or if the subpass of the render pass
-    -- the pipeline is created against does not use a depth\/stencil
-    -- attachment.
-    depthStencilState :: Maybe PipelineDepthStencilStateCreateInfo
-  , -- | @pColorBlendState@ is a pointer to a 'PipelineColorBlendStateCreateInfo'
-    -- structure, and is ignored if the pipeline has rasterization disabled or
-    -- if the subpass of the render pass the pipeline is created against does
-    -- not use any color attachments.
-    colorBlendState :: Maybe (SomeStruct PipelineColorBlendStateCreateInfo)
-  , -- | @pDynamicState@ is a pointer to a 'PipelineDynamicStateCreateInfo'
-    -- structure, and is used to indicate which properties of the pipeline
-    -- state object are dynamic and /can/ be changed independently of the
-    -- pipeline state. This /can/ be @NULL@, which means no state in the
-    -- pipeline is considered dynamic.
-    dynamicState :: Maybe PipelineDynamicStateCreateInfo
-  , -- | @layout@ is the description of binding locations used by both the
-    -- pipeline and descriptor sets used with the pipeline.
-    layout :: PipelineLayout
-  , -- | @renderPass@ is a handle to a render pass object describing the
-    -- environment in which the pipeline will be used; the pipeline /must/ only
-    -- be used with an instance of any render pass compatible with the one
-    -- provided. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility Render Pass Compatibility>
-    -- for more information.
-    renderPass :: RenderPass
-  , -- | @subpass@ is the index of the subpass in the render pass where this
-    -- pipeline will be used.
-    subpass :: Word32
-  , -- | @basePipelineHandle@ is a pipeline to derive from.
-    basePipelineHandle :: Pipeline
-  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
-    -- as a pipeline to derive from.
-    basePipelineIndex :: Int32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (GraphicsPipelineCreateInfo es)
-
-instance Extensible GraphicsPipelineCreateInfo where
-  extensibleType = STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext GraphicsPipelineCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends GraphicsPipelineCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f
-    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @PipelineRepresentativeFragmentTestStateCreateInfoNV = Just f
-    | Just Refl <- eqT @e @PipelineDiscardRectangleStateCreateInfoEXT = Just f
-    | Just Refl <- eqT @e @GraphicsPipelineShaderGroupsCreateInfoNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (GraphicsPipelineCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 144 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p GraphicsPipelineCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))
-    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
-    pVertexInputState'' <- case (vertexInputState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineVertexInputStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineVertexInputStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo _)))) pVertexInputState''
-    pInputAssemblyState'' <- case (inputAssemblyState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr PipelineInputAssemblyStateCreateInfo))) pInputAssemblyState''
-    pTessellationState'' <- case (tessellationState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineTessellationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineTessellationStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (PipelineTessellationStateCreateInfo _)))) pTessellationState''
-    pViewportState'' <- case (viewportState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineViewportStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineViewportStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (PipelineViewportStateCreateInfo _)))) pViewportState''
-    pRasterizationState'' <- ContT @_ @_ @(Ptr (PipelineRasterizationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineRasterizationStateCreateInfo (rasterizationState) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo _)))) pRasterizationState''
-    pMultisampleState'' <- case (multisampleState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineMultisampleStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineMultisampleStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr (PipelineMultisampleStateCreateInfo _)))) pMultisampleState''
-    pDepthStencilState'' <- case (depthStencilState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr PipelineDepthStencilStateCreateInfo))) pDepthStencilState''
-    pColorBlendState'' <- case (colorBlendState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineColorBlendStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineColorBlendStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr (PipelineColorBlendStateCreateInfo _)))) pColorBlendState''
-    pDynamicState'' <- case (dynamicState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 96 :: Ptr (Ptr PipelineDynamicStateCreateInfo))) pDynamicState''
-    lift $ poke ((p `plusPtr` 104 :: Ptr PipelineLayout)) (layout)
-    lift $ poke ((p `plusPtr` 112 :: Ptr RenderPass)) (renderPass)
-    lift $ poke ((p `plusPtr` 120 :: Ptr Word32)) (subpass)
-    lift $ poke ((p `plusPtr` 128 :: Ptr Pipeline)) (basePipelineHandle)
-    lift $ poke ((p `plusPtr` 136 :: Ptr Int32)) (basePipelineIndex)
-    lift $ f
-  cStructSize = 144
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (mempty)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
-    pRasterizationState'' <- ContT @_ @_ @(Ptr (PipelineRasterizationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineRasterizationStateCreateInfo ((SomeStruct zero)) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo _)))) pRasterizationState''
-    lift $ poke ((p `plusPtr` 104 :: Ptr PipelineLayout)) (zero)
-    lift $ poke ((p `plusPtr` 112 :: Ptr RenderPass)) (zero)
-    lift $ poke ((p `plusPtr` 120 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 136 :: Ptr Int32)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (GraphicsPipelineCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
-    stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo a))))
-    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
-    pVertexInputState <- peek @(Ptr (PipelineVertexInputStateCreateInfo _)) ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo a))))
-    pVertexInputState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pVertexInputState
-    pInputAssemblyState <- peek @(Ptr PipelineInputAssemblyStateCreateInfo) ((p `plusPtr` 40 :: Ptr (Ptr PipelineInputAssemblyStateCreateInfo)))
-    pInputAssemblyState' <- maybePeek (\j -> peekCStruct @PipelineInputAssemblyStateCreateInfo (j)) pInputAssemblyState
-    pTessellationState <- peek @(Ptr (PipelineTessellationStateCreateInfo _)) ((p `plusPtr` 48 :: Ptr (Ptr (PipelineTessellationStateCreateInfo a))))
-    pTessellationState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pTessellationState
-    pViewportState <- peek @(Ptr (PipelineViewportStateCreateInfo _)) ((p `plusPtr` 56 :: Ptr (Ptr (PipelineViewportStateCreateInfo a))))
-    pViewportState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pViewportState
-    pRasterizationState <- peekSomeCStruct . forgetExtensions =<< peek ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo a))))
-    pMultisampleState <- peek @(Ptr (PipelineMultisampleStateCreateInfo _)) ((p `plusPtr` 72 :: Ptr (Ptr (PipelineMultisampleStateCreateInfo a))))
-    pMultisampleState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pMultisampleState
-    pDepthStencilState <- peek @(Ptr PipelineDepthStencilStateCreateInfo) ((p `plusPtr` 80 :: Ptr (Ptr PipelineDepthStencilStateCreateInfo)))
-    pDepthStencilState' <- maybePeek (\j -> peekCStruct @PipelineDepthStencilStateCreateInfo (j)) pDepthStencilState
-    pColorBlendState <- peek @(Ptr (PipelineColorBlendStateCreateInfo _)) ((p `plusPtr` 88 :: Ptr (Ptr (PipelineColorBlendStateCreateInfo a))))
-    pColorBlendState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pColorBlendState
-    pDynamicState <- peek @(Ptr PipelineDynamicStateCreateInfo) ((p `plusPtr` 96 :: Ptr (Ptr PipelineDynamicStateCreateInfo)))
-    pDynamicState' <- maybePeek (\j -> peekCStruct @PipelineDynamicStateCreateInfo (j)) pDynamicState
-    layout <- peek @PipelineLayout ((p `plusPtr` 104 :: Ptr PipelineLayout))
-    renderPass <- peek @RenderPass ((p `plusPtr` 112 :: Ptr RenderPass))
-    subpass <- peek @Word32 ((p `plusPtr` 120 :: Ptr Word32))
-    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 128 :: Ptr Pipeline))
-    basePipelineIndex <- peek @Int32 ((p `plusPtr` 136 :: Ptr Int32))
-    pure $ GraphicsPipelineCreateInfo
-             next flags pStages' pVertexInputState' pInputAssemblyState' pTessellationState' pViewportState' pRasterizationState pMultisampleState' pDepthStencilState' pColorBlendState' pDynamicState' layout renderPass subpass basePipelineHandle basePipelineIndex
-
-instance es ~ '[] => Zero (GraphicsPipelineCreateInfo es) where
-  zero = GraphicsPipelineCreateInfo
-           ()
-           zero
-           mempty
-           Nothing
-           Nothing
-           Nothing
-           Nothing
-           (SomeStruct zero)
-           Nothing
-           Nothing
-           Nothing
-           Nothing
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/Pipeline.hs-boot b/src/Graphics/Vulkan/Core10/Pipeline.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Pipeline.hs-boot
+++ /dev/null
@@ -1,179 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Pipeline  ( ComputePipelineCreateInfo
-                                        , GraphicsPipelineCreateInfo
-                                        , PipelineColorBlendAttachmentState
-                                        , PipelineColorBlendStateCreateInfo
-                                        , PipelineDepthStencilStateCreateInfo
-                                        , PipelineDynamicStateCreateInfo
-                                        , PipelineInputAssemblyStateCreateInfo
-                                        , PipelineMultisampleStateCreateInfo
-                                        , PipelineRasterizationStateCreateInfo
-                                        , PipelineShaderStageCreateInfo
-                                        , PipelineTessellationStateCreateInfo
-                                        , PipelineVertexInputStateCreateInfo
-                                        , PipelineViewportStateCreateInfo
-                                        , SpecializationInfo
-                                        , SpecializationMapEntry
-                                        , StencilOpState
-                                        , VertexInputAttributeDescription
-                                        , VertexInputBindingDescription
-                                        ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role ComputePipelineCreateInfo nominal
-data ComputePipelineCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (ComputePipelineCreateInfo es)
-instance Show (Chain es) => Show (ComputePipelineCreateInfo es)
-
-instance PeekChain es => FromCStruct (ComputePipelineCreateInfo es)
-
-
-type role GraphicsPipelineCreateInfo nominal
-data GraphicsPipelineCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (GraphicsPipelineCreateInfo es)
-instance Show (Chain es) => Show (GraphicsPipelineCreateInfo es)
-
-instance PeekChain es => FromCStruct (GraphicsPipelineCreateInfo es)
-
-
-data PipelineColorBlendAttachmentState
-
-instance ToCStruct PipelineColorBlendAttachmentState
-instance Show PipelineColorBlendAttachmentState
-
-instance FromCStruct PipelineColorBlendAttachmentState
-
-
-type role PipelineColorBlendStateCreateInfo nominal
-data PipelineColorBlendStateCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (PipelineColorBlendStateCreateInfo es)
-instance Show (Chain es) => Show (PipelineColorBlendStateCreateInfo es)
-
-instance PeekChain es => FromCStruct (PipelineColorBlendStateCreateInfo es)
-
-
-data PipelineDepthStencilStateCreateInfo
-
-instance ToCStruct PipelineDepthStencilStateCreateInfo
-instance Show PipelineDepthStencilStateCreateInfo
-
-instance FromCStruct PipelineDepthStencilStateCreateInfo
-
-
-data PipelineDynamicStateCreateInfo
-
-instance ToCStruct PipelineDynamicStateCreateInfo
-instance Show PipelineDynamicStateCreateInfo
-
-instance FromCStruct PipelineDynamicStateCreateInfo
-
-
-data PipelineInputAssemblyStateCreateInfo
-
-instance ToCStruct PipelineInputAssemblyStateCreateInfo
-instance Show PipelineInputAssemblyStateCreateInfo
-
-instance FromCStruct PipelineInputAssemblyStateCreateInfo
-
-
-type role PipelineMultisampleStateCreateInfo nominal
-data PipelineMultisampleStateCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (PipelineMultisampleStateCreateInfo es)
-instance Show (Chain es) => Show (PipelineMultisampleStateCreateInfo es)
-
-instance PeekChain es => FromCStruct (PipelineMultisampleStateCreateInfo es)
-
-
-type role PipelineRasterizationStateCreateInfo nominal
-data PipelineRasterizationStateCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (PipelineRasterizationStateCreateInfo es)
-instance Show (Chain es) => Show (PipelineRasterizationStateCreateInfo es)
-
-instance PeekChain es => FromCStruct (PipelineRasterizationStateCreateInfo es)
-
-
-type role PipelineShaderStageCreateInfo nominal
-data PipelineShaderStageCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (PipelineShaderStageCreateInfo es)
-instance Show (Chain es) => Show (PipelineShaderStageCreateInfo es)
-
-instance PeekChain es => FromCStruct (PipelineShaderStageCreateInfo es)
-
-
-type role PipelineTessellationStateCreateInfo nominal
-data PipelineTessellationStateCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (PipelineTessellationStateCreateInfo es)
-instance Show (Chain es) => Show (PipelineTessellationStateCreateInfo es)
-
-instance PeekChain es => FromCStruct (PipelineTessellationStateCreateInfo es)
-
-
-type role PipelineVertexInputStateCreateInfo nominal
-data PipelineVertexInputStateCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (PipelineVertexInputStateCreateInfo es)
-instance Show (Chain es) => Show (PipelineVertexInputStateCreateInfo es)
-
-instance PeekChain es => FromCStruct (PipelineVertexInputStateCreateInfo es)
-
-
-type role PipelineViewportStateCreateInfo nominal
-data PipelineViewportStateCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (PipelineViewportStateCreateInfo es)
-instance Show (Chain es) => Show (PipelineViewportStateCreateInfo es)
-
-instance PeekChain es => FromCStruct (PipelineViewportStateCreateInfo es)
-
-
-data SpecializationInfo
-
-instance ToCStruct SpecializationInfo
-instance Show SpecializationInfo
-
-instance FromCStruct SpecializationInfo
-
-
-data SpecializationMapEntry
-
-instance ToCStruct SpecializationMapEntry
-instance Show SpecializationMapEntry
-
-instance FromCStruct SpecializationMapEntry
-
-
-data StencilOpState
-
-instance ToCStruct StencilOpState
-instance Show StencilOpState
-
-instance FromCStruct StencilOpState
-
-
-data VertexInputAttributeDescription
-
-instance ToCStruct VertexInputAttributeDescription
-instance Show VertexInputAttributeDescription
-
-instance FromCStruct VertexInputAttributeDescription
-
-
-data VertexInputBindingDescription
-
-instance ToCStruct VertexInputBindingDescription
-instance Show VertexInputBindingDescription
-
-instance FromCStruct VertexInputBindingDescription
-
diff --git a/src/Graphics/Vulkan/Core10/PipelineCache.hs b/src/Graphics/Vulkan/Core10/PipelineCache.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/PipelineCache.hs
+++ /dev/null
@@ -1,564 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.PipelineCache  ( createPipelineCache
-                                             , withPipelineCache
-                                             , destroyPipelineCache
-                                             , getPipelineCacheData
-                                             , mergePipelineCaches
-                                             , PipelineCacheCreateInfo(..)
-                                             ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.ByteString (packCStringLen)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Foreign.C.Types (CSize(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreatePipelineCache))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyPipelineCache))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetPipelineCacheData))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkMergePipelineCaches))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (PipelineCache)
-import Graphics.Vulkan.Core10.Handles (PipelineCache(..))
-import Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits (PipelineCacheCreateFlags)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreatePipelineCache
-  :: FunPtr (Ptr Device_T -> Ptr PipelineCacheCreateInfo -> Ptr AllocationCallbacks -> Ptr PipelineCache -> IO Result) -> Ptr Device_T -> Ptr PipelineCacheCreateInfo -> Ptr AllocationCallbacks -> Ptr PipelineCache -> IO Result
-
--- | vkCreatePipelineCache - Creates a new pipeline cache
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the pipeline cache
---     object.
---
--- -   @pCreateInfo@ is a pointer to a 'PipelineCacheCreateInfo' structure
---     containing initial parameters for the pipeline cache object.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pPipelineCache@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.PipelineCache' handle in which the
---     resulting pipeline cache object is returned.
---
--- = 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
--- 'getPipelineCacheData'. 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
--- 'Graphics.Vulkan.Core10.Pipeline.createGraphicsPipelines'
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV',
--- and 'Graphics.Vulkan.Core10.Pipeline.createComputePipelines' commands.
--- If the pipeline cache passed into these commands is not
--- 'Graphics.Vulkan.Core10.APIConstants.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.
---
--- If @flags@ of @pCreateInfo@ includes
--- 'Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
--- all commands that modify the returned pipeline cache object /must/ be
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>.
---
--- 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 @vkCreate*Pipelines@
--- commands.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'PipelineCacheCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pPipelineCache@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.PipelineCache' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.PipelineCache',
--- 'PipelineCacheCreateInfo'
-createPipelineCache :: forall io . MonadIO io => Device -> PipelineCacheCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (PipelineCache)
-createPipelineCache device createInfo allocator = liftIO . evalContT $ do
-  let vkCreatePipelineCache' = mkVkCreatePipelineCache (pVkCreatePipelineCache (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPPipelineCache <- ContT $ bracket (callocBytes @PipelineCache 8) free
-  r <- lift $ vkCreatePipelineCache' (deviceHandle (device)) pCreateInfo pAllocator (pPPipelineCache)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPipelineCache <- lift $ peek @PipelineCache pPPipelineCache
-  pure $ (pPipelineCache)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createPipelineCache' and 'destroyPipelineCache'
---
--- To ensure that 'destroyPipelineCache' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withPipelineCache :: forall io r . MonadIO io => (io (PipelineCache) -> ((PipelineCache) -> io ()) -> r) -> Device -> PipelineCacheCreateInfo -> Maybe AllocationCallbacks -> r
-withPipelineCache b device pCreateInfo pAllocator =
-  b (createPipelineCache device pCreateInfo pAllocator)
-    (\(o0) -> destroyPipelineCache device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyPipelineCache
-  :: FunPtr (Ptr Device_T -> PipelineCache -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> PipelineCache -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyPipelineCache - Destroy a pipeline cache object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @pipelineCache@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @pipelineCache@ was created, @pAllocator@ /must/
---     be @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @pipelineCache@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @pipelineCache@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.PipelineCache'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.PipelineCache'
-destroyPipelineCache :: forall io . MonadIO io => Device -> PipelineCache -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyPipelineCache device pipelineCache allocator = liftIO . evalContT $ do
-  let vkDestroyPipelineCache' = mkVkDestroyPipelineCache (pVkDestroyPipelineCache (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyPipelineCache' (deviceHandle (device)) (pipelineCache) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPipelineCacheData
-  :: FunPtr (Ptr Device_T -> PipelineCache -> Ptr CSize -> Ptr () -> IO Result) -> Ptr Device_T -> PipelineCache -> Ptr CSize -> Ptr () -> IO Result
-
--- | vkGetPipelineCacheData - Get the data store from a pipeline cache
---
--- = 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 @size_t@ 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
---
--- 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 'getPipelineCacheData' will return
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'. Any data written to
--- @pData@ is valid and /can/ be provided as the @pInitialData@ member of
--- the 'PipelineCacheCreateInfo' structure passed to 'createPipelineCache'.
---
--- Two calls to 'getPipelineCacheData' 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:
---
--- +--------+-------------------------------------------------+---------------------------------------------------------------------------------------------+
--- | Offset | Size                                            | Meaning                                                                                     |
--- +========+=================================================+=============================================================================================+
--- | 0      | 4                                               | length in bytes of the entire pipeline cache header written as a stream of bytes, with the  |
--- |        |                                                 | least significant byte first                                                                |
--- +--------+-------------------------------------------------+---------------------------------------------------------------------------------------------+
--- | 4      | 4                                               | a 'Graphics.Vulkan.Core10.Enums.PipelineCacheHeaderVersion.PipelineCacheHeaderVersion'      |
--- |        |                                                 | value written as a stream of bytes, with the least significant byte first                   |
--- +--------+-------------------------------------------------+---------------------------------------------------------------------------------------------+
--- | 8      | 4                                               | a vendor ID equal to                                                                        |
--- |        |                                                 | 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@vendorID@ written  |
--- |        |                                                 | as a stream of bytes, with the least significant byte first                                 |
--- +--------+-------------------------------------------------+---------------------------------------------------------------------------------------------+
--- | 12     | 4                                               | a device ID equal to                                                                        |
--- |        |                                                 | 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@deviceID@ written  |
--- |        |                                                 | as a stream of bytes, with the least significant byte first                                 |
--- +--------+-------------------------------------------------+---------------------------------------------------------------------------------------------+
--- | 16     | 'Graphics.Vulkan.Core10.APIConstants.UUID_SIZE' | a pipeline cache ID equal to                                                                |
--- |        |                                                 | 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@pipelineCacheUUID@ |
--- +--------+-------------------------------------------------+---------------------------------------------------------------------------------------------+
---
--- Layout for pipeline cache header version
--- 'Graphics.Vulkan.Core10.Enums.PipelineCacheHeaderVersion.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.Enums.PipelineCacheHeaderVersion.PipelineCacheHeaderVersion'.
--- 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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pipelineCache@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineCache' 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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.PipelineCache'
-getPipelineCacheData :: forall io . MonadIO io => Device -> PipelineCache -> io (Result, ("data" ::: ByteString))
-getPipelineCacheData device pipelineCache = liftIO . evalContT $ do
-  let vkGetPipelineCacheData' = mkVkGetPipelineCacheData (pVkGetPipelineCacheData (deviceCmds (device :: Device)))
-  let device' = deviceHandle (device)
-  pPDataSize <- ContT $ bracket (callocBytes @CSize 8) free
-  r <- lift $ vkGetPipelineCacheData' device' (pipelineCache) (pPDataSize) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pDataSize <- lift $ peek @CSize pPDataSize
-  pPData <- ContT $ bracket (callocBytes @(()) (fromIntegral (((\(CSize a) -> a) pDataSize)))) free
-  r' <- lift $ vkGetPipelineCacheData' device' (pipelineCache) (pPDataSize) (pPData)
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pDataSize'' <- lift $ peek @CSize pPDataSize
-  pData' <- lift $ packCStringLen  (castPtr @() @CChar pPData, (fromIntegral (((\(CSize a) -> a) pDataSize''))))
-  pure $ ((r'), pData')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkMergePipelineCaches
-  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr PipelineCache -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr PipelineCache -> IO Result
-
--- | vkMergePipelineCaches - Combine the data stores of pipeline caches
---
--- = 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 a pointer to an array of pipeline cache handles,
---     which will be merged into @dstCache@. The previous contents of
---     @dstCache@ are included after the merge.
---
--- = 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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @dstCache@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineCache' handle
---
--- -   @pSrcCaches@ /must/ be a valid pointer to an array of
---     @srcCacheCount@ valid 'Graphics.Vulkan.Core10.Handles.PipelineCache'
---     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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.PipelineCache'
-mergePipelineCaches :: forall io . MonadIO io => Device -> ("dstCache" ::: PipelineCache) -> ("srcCaches" ::: Vector PipelineCache) -> io ()
-mergePipelineCaches device dstCache srcCaches = liftIO . evalContT $ do
-  let vkMergePipelineCaches' = mkVkMergePipelineCaches (pVkMergePipelineCaches (deviceCmds (device :: Device)))
-  pPSrcCaches <- ContT $ allocaBytesAligned @PipelineCache ((Data.Vector.length (srcCaches)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPSrcCaches `plusPtr` (8 * (i)) :: Ptr PipelineCache) (e)) (srcCaches)
-  r <- lift $ vkMergePipelineCaches' (deviceHandle (device)) (dstCache) ((fromIntegral (Data.Vector.length $ (srcCaches)) :: Word32)) (pPSrcCaches)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkPipelineCacheCreateInfo - Structure specifying parameters of a newly
--- created pipeline cache
---
--- == Valid Usage
---
--- -   If @initialDataSize@ is not @0@, it /must/ be equal to the size of
---     @pInitialData@, as returned by 'getPipelineCacheData' when
---     @pInitialData@ was originally retrieved
---
--- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ have been
---     retrieved from a previous call to 'getPipelineCacheData'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
---     feature is not enabled, @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PipelineCacheCreateFlagBits'
---     values
---
--- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ be a valid
---     pointer to an array of @initialDataSize@ bytes
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PipelineCacheCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createPipelineCache'
-data PipelineCacheCreateInfo = PipelineCacheCreateInfo
-  { -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PipelineCacheCreateFlagBits'
-    -- specifying the behavior of the pipeline cache.
-    flags :: PipelineCacheCreateFlags
-  , -- | @initialDataSize@ is the number of bytes in @pInitialData@. If
-    -- @initialDataSize@ is zero, the pipeline cache will initially be empty.
-    initialDataSize :: Word64
-  , -- | @pInitialData@ is a pointer to previously retrieved pipeline cache data.
-    -- If the pipeline cache data is incompatible (as defined below) with the
-    -- device, the pipeline cache will be initially empty. If @initialDataSize@
-    -- is zero, @pInitialData@ is ignored.
-    initialData :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show PipelineCacheCreateInfo
-
-instance ToCStruct PipelineCacheCreateInfo where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineCacheCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineCacheCreateFlags)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (initialDataSize))
-    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (initialData)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct PipelineCacheCreateInfo where
-  peekCStruct p = do
-    flags <- peek @PipelineCacheCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCacheCreateFlags))
-    initialDataSize <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
-    pInitialData <- peek @(Ptr ()) ((p `plusPtr` 32 :: Ptr (Ptr ())))
-    pure $ PipelineCacheCreateInfo
-             flags ((\(CSize a) -> a) initialDataSize) pInitialData
-
-instance Storable PipelineCacheCreateInfo where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineCacheCreateInfo where
-  zero = PipelineCacheCreateInfo
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/PipelineCache.hs-boot b/src/Graphics/Vulkan/Core10/PipelineCache.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/PipelineCache.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.PipelineCache  (PipelineCacheCreateInfo) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PipelineCacheCreateInfo
-
-instance ToCStruct PipelineCacheCreateInfo
-instance Show PipelineCacheCreateInfo
-
-instance FromCStruct PipelineCacheCreateInfo
-
diff --git a/src/Graphics/Vulkan/Core10/PipelineLayout.hs b/src/Graphics/Vulkan/Core10/PipelineLayout.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/PipelineLayout.hs
+++ /dev/null
@@ -1,661 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.PipelineLayout  ( createPipelineLayout
-                                              , withPipelineLayout
-                                              , destroyPipelineLayout
-                                              , PushConstantRange(..)
-                                              , PipelineLayoutCreateInfo(..)
-                                              ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Handles (DescriptorSetLayout)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreatePipelineLayout))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyPipelineLayout))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (PipelineLayout)
-import Graphics.Vulkan.Core10.Handles (PipelineLayout(..))
-import Graphics.Vulkan.Core10.Enums.PipelineLayoutCreateFlags (PipelineLayoutCreateFlags)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreatePipelineLayout
-  :: FunPtr (Ptr Device_T -> Ptr PipelineLayoutCreateInfo -> Ptr AllocationCallbacks -> Ptr PipelineLayout -> IO Result) -> Ptr Device_T -> Ptr PipelineLayoutCreateInfo -> Ptr AllocationCallbacks -> Ptr PipelineLayout -> IO Result
-
--- | vkCreatePipelineLayout - Creates a new pipeline layout object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the pipeline layout.
---
--- -   @pCreateInfo@ is a pointer to a 'PipelineLayoutCreateInfo' structure
---     specifying the state of the pipeline layout object.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pPipelineLayout@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle in which the
---     resulting pipeline layout object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'PipelineLayoutCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pPipelineLayout@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout',
--- 'PipelineLayoutCreateInfo'
-createPipelineLayout :: forall io . MonadIO io => Device -> PipelineLayoutCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (PipelineLayout)
-createPipelineLayout device createInfo allocator = liftIO . evalContT $ do
-  let vkCreatePipelineLayout' = mkVkCreatePipelineLayout (pVkCreatePipelineLayout (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPPipelineLayout <- ContT $ bracket (callocBytes @PipelineLayout 8) free
-  r <- lift $ vkCreatePipelineLayout' (deviceHandle (device)) pCreateInfo pAllocator (pPPipelineLayout)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPipelineLayout <- lift $ peek @PipelineLayout pPPipelineLayout
-  pure $ (pPipelineLayout)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createPipelineLayout' and 'destroyPipelineLayout'
---
--- To ensure that 'destroyPipelineLayout' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withPipelineLayout :: forall io r . MonadIO io => (io (PipelineLayout) -> ((PipelineLayout) -> io ()) -> r) -> Device -> PipelineLayoutCreateInfo -> Maybe AllocationCallbacks -> r
-withPipelineLayout b device pCreateInfo pAllocator =
-  b (createPipelineLayout device pCreateInfo pAllocator)
-    (\(o0) -> destroyPipelineLayout device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyPipelineLayout
-  :: FunPtr (Ptr Device_T -> PipelineLayout -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> PipelineLayout -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyPipelineLayout - Destroy a pipeline layout object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @pipelineLayout@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @pipelineLayout@ was created, @pAllocator@ /must/
---     be @NULL@
---
--- -   @pipelineLayout@ /must/ not have been passed to any @vkCmd*@ command
---     for any command buffers that are still in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---     when 'destroyPipelineLayout' is called
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @pipelineLayout@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @pipelineLayout@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.PipelineLayout'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout'
-destroyPipelineLayout :: forall io . MonadIO io => Device -> PipelineLayout -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyPipelineLayout device pipelineLayout allocator = liftIO . evalContT $ do
-  let vkDestroyPipelineLayout' = mkVkDestroyPipelineLayout (pVkDestroyPipelineLayout (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyPipelineLayout' (deviceHandle (device)) (pipelineLayout) pAllocator
-  pure $ ()
-
-
--- | VkPushConstantRange - Structure specifying a push constant range
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PipelineLayoutCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'
-data PushConstantRange = PushConstantRange
-  { -- | @stageFlags@ /must/ not be @0@
-    stageFlags :: ShaderStageFlags
-  , -- | @offset@ /must/ be a multiple of @4@
-    offset :: Word32
-  , -- | @size@ /must/ be less than or equal to
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
-    -- minus @offset@
-    size :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PushConstantRange
-
-instance ToCStruct PushConstantRange where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PushConstantRange{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr ShaderStageFlags)) (stageFlags)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (offset)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (size)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr ShaderStageFlags)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PushConstantRange where
-  peekCStruct p = do
-    stageFlags <- peek @ShaderStageFlags ((p `plusPtr` 0 :: Ptr ShaderStageFlags))
-    offset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    size <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pure $ PushConstantRange
-             stageFlags offset size
-
-instance Storable PushConstantRange where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PushConstantRange where
-  zero = PushConstantRange
-           zero
-           zero
-           zero
-
-
--- | VkPipelineLayoutCreateInfo - Structure specifying the parameters of a
--- newly created pipeline layout object
---
--- == Valid Usage
---
--- -   @setLayoutCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxBoundDescriptorSets@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorSamplers@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorUniformBuffers@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorStorageBuffers@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorSampledImages@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorStorageImages@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorInputAttachments@
---
--- -   The total number of bindings in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxPerStageDescriptorInlineUniformBlocks@
---
--- -   The total number of descriptors with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindSamplers@
---
--- -   The total number of descriptors with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindUniformBuffers@
---
--- -   The total number of descriptors with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindStorageBuffers@
---
--- -   The total number of descriptors with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindSampledImages@
---
--- -   The total number of descriptors with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindStorageImages@
---
--- -   The total number of descriptors with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindInputAttachments@
---
--- -   The total number of bindings with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
---     accessible to any given shader stage across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetSamplers@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetUniformBuffers@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetUniformBuffersDynamic@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetStorageBuffers@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetStorageBuffersDynamic@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetSampledImages@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetStorageImages@
---
--- -   The total number of descriptors in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetInputAttachments@
---
--- -   The total number of bindings in descriptor set layouts created
---     without the
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
---     bit set with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxDescriptorSetInlineUniformBlocks@
---
--- -   The total number of descriptors of the type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindSamplers@
---
--- -   The total number of descriptors of the type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindUniformBuffers@
---
--- -   The total number of descriptors of the type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@
---
--- -   The total number of descriptors of the type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindStorageBuffers@
---
--- -   The total number of descriptors of the type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@
---
--- -   The total number of descriptors of the type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindSampledImages@
---
--- -   The total number of descriptors of the type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
---     and
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindStorageImages@
---
--- -   The total number of descriptors of the type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindInputAttachments@
---
--- -   The total number of bindings with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxDescriptorSetUpdateAfterBindInlineUniformBlocks@
---
--- -   Any two elements of @pPushConstantRanges@ /must/ not include the
---     same stage in @stageFlags@
---
--- -   @pSetLayouts@ /must/ not contain more than one descriptor set layout
---     that was created with
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'
---     set
---
--- -   The total number of bindings with a @descriptorType@ of
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR'
---     accessible across all shader stages and across all elements of
---     @pSetLayouts@ /must/ be less than or equal to
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@maxDescriptorSetAccelerationStructures@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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
---     'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout' handles
---
--- -   If @pushConstantRangeCount@ is not @0@, @pPushConstantRanges@ /must/
---     be a valid pointer to an array of @pushConstantRangeCount@ valid
---     'PushConstantRange' structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout',
--- 'Graphics.Vulkan.Core10.Enums.PipelineLayoutCreateFlags.PipelineLayoutCreateFlags',
--- 'PushConstantRange',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createPipelineLayout'
-data PipelineLayoutCreateInfo = PipelineLayoutCreateInfo
-  { -- | @flags@ is reserved for future use.
-    flags :: PipelineLayoutCreateFlags
-  , -- | @pSetLayouts@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout' objects.
-    setLayouts :: Vector DescriptorSetLayout
-  , -- | @pPushConstantRanges@ is a pointer to an array of 'PushConstantRange'
-    -- 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.
-    pushConstantRanges :: Vector PushConstantRange
-  }
-  deriving (Typeable)
-deriving instance Show PipelineLayoutCreateInfo
-
-instance ToCStruct PipelineLayoutCreateInfo where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineLayoutCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineLayoutCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (setLayouts)) :: Word32))
-    pPSetLayouts' <- ContT $ allocaBytesAligned @DescriptorSetLayout ((Data.Vector.length (setLayouts)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSetLayouts' `plusPtr` (8 * (i)) :: Ptr DescriptorSetLayout) (e)) (setLayouts)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayout))) (pPSetLayouts')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (pushConstantRanges)) :: Word32))
-    pPPushConstantRanges' <- ContT $ allocaBytesAligned @PushConstantRange ((Data.Vector.length (pushConstantRanges)) * 12) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPushConstantRanges' `plusPtr` (12 * (i)) :: Ptr PushConstantRange) (e) . ($ ())) (pushConstantRanges)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr PushConstantRange))) (pPPushConstantRanges')
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPSetLayouts' <- ContT $ allocaBytesAligned @DescriptorSetLayout ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSetLayouts' `plusPtr` (8 * (i)) :: Ptr DescriptorSetLayout) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayout))) (pPSetLayouts')
-    pPPushConstantRanges' <- ContT $ allocaBytesAligned @PushConstantRange ((Data.Vector.length (mempty)) * 12) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPushConstantRanges' `plusPtr` (12 * (i)) :: Ptr PushConstantRange) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr PushConstantRange))) (pPPushConstantRanges')
-    lift $ f
-
-instance FromCStruct PipelineLayoutCreateInfo where
-  peekCStruct p = do
-    flags <- peek @PipelineLayoutCreateFlags ((p `plusPtr` 16 :: Ptr PipelineLayoutCreateFlags))
-    setLayoutCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pSetLayouts <- peek @(Ptr DescriptorSetLayout) ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayout)))
-    pSetLayouts' <- generateM (fromIntegral setLayoutCount) (\i -> peek @DescriptorSetLayout ((pSetLayouts `advancePtrBytes` (8 * (i)) :: Ptr DescriptorSetLayout)))
-    pushConstantRangeCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pPushConstantRanges <- peek @(Ptr PushConstantRange) ((p `plusPtr` 40 :: Ptr (Ptr PushConstantRange)))
-    pPushConstantRanges' <- generateM (fromIntegral pushConstantRangeCount) (\i -> peekCStruct @PushConstantRange ((pPushConstantRanges `advancePtrBytes` (12 * (i)) :: Ptr PushConstantRange)))
-    pure $ PipelineLayoutCreateInfo
-             flags pSetLayouts' pPushConstantRanges'
-
-instance Zero PipelineLayoutCreateInfo where
-  zero = PipelineLayoutCreateInfo
-           zero
-           mempty
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core10/PipelineLayout.hs-boot b/src/Graphics/Vulkan/Core10/PipelineLayout.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/PipelineLayout.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.PipelineLayout  ( PipelineLayoutCreateInfo
-                                              , PushConstantRange
-                                              ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PipelineLayoutCreateInfo
-
-instance ToCStruct PipelineLayoutCreateInfo
-instance Show PipelineLayoutCreateInfo
-
-instance FromCStruct PipelineLayoutCreateInfo
-
-
-data PushConstantRange
-
-instance ToCStruct PushConstantRange
-instance Show PushConstantRange
-
-instance FromCStruct PushConstantRange
-
diff --git a/src/Graphics/Vulkan/Core10/Query.hs b/src/Graphics/Vulkan/Core10/Query.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Query.hs
+++ /dev/null
@@ -1,587 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Query  ( createQueryPool
-                                     , withQueryPool
-                                     , destroyQueryPool
-                                     , getQueryPoolResults
-                                     , QueryPoolCreateInfo(..)
-                                     ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Foreign.C.Types (CSize(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateQueryPool))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyQueryPool))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetQueryPoolResults))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits (QueryPipelineStatisticFlags)
-import Graphics.Vulkan.Core10.Handles (QueryPool)
-import Graphics.Vulkan.Core10.Handles (QueryPool(..))
-import Graphics.Vulkan.Core10.Enums.QueryPoolCreateFlags (QueryPoolCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (QueryPoolPerformanceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (QueryPoolPerformanceQueryCreateInfoINTEL)
-import Graphics.Vulkan.Core10.Enums.QueryResultFlagBits (QueryResultFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.QueryResultFlagBits (QueryResultFlags)
-import Graphics.Vulkan.Core10.Enums.QueryType (QueryType)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateQueryPool
-  :: FunPtr (Ptr Device_T -> Ptr (QueryPoolCreateInfo a) -> Ptr AllocationCallbacks -> Ptr QueryPool -> IO Result) -> Ptr Device_T -> Ptr (QueryPoolCreateInfo a) -> Ptr AllocationCallbacks -> Ptr QueryPool -> IO Result
-
--- | vkCreateQueryPool - Create a new query pool object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the query pool.
---
--- -   @pCreateInfo@ is a pointer to a 'QueryPoolCreateInfo' structure
---     containing the number and type of queries to be managed by the pool.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pQueryPool@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle in which the
---     resulting query pool object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'QueryPoolCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pQueryPool@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool', 'QueryPoolCreateInfo'
-createQueryPool :: forall a io . (PokeChain a, MonadIO io) => Device -> QueryPoolCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (QueryPool)
-createQueryPool device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateQueryPool' = mkVkCreateQueryPool (pVkCreateQueryPool (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPQueryPool <- ContT $ bracket (callocBytes @QueryPool 8) free
-  r <- lift $ vkCreateQueryPool' (deviceHandle (device)) pCreateInfo pAllocator (pPQueryPool)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pQueryPool <- lift $ peek @QueryPool pPQueryPool
-  pure $ (pQueryPool)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createQueryPool' and 'destroyQueryPool'
---
--- To ensure that 'destroyQueryPool' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withQueryPool :: forall a io r . (PokeChain a, MonadIO io) => (io (QueryPool) -> ((QueryPool) -> io ()) -> r) -> Device -> QueryPoolCreateInfo a -> Maybe AllocationCallbacks -> r
-withQueryPool b device pCreateInfo pAllocator =
-  b (createQueryPool device pCreateInfo pAllocator)
-    (\(o0) -> destroyQueryPool device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyQueryPool
-  :: FunPtr (Ptr Device_T -> QueryPool -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> QueryPool -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyQueryPool - Destroy a query pool object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @queryPool@ /must/ have
---     completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @queryPool@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @queryPool@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @queryPool@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @queryPool@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool'
-destroyQueryPool :: forall io . MonadIO io => Device -> QueryPool -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyQueryPool device queryPool allocator = liftIO . evalContT $ do
-  let vkDestroyQueryPool' = mkVkDestroyQueryPool (pVkDestroyQueryPool (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyQueryPool' (deviceHandle (device)) (queryPool) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetQueryPoolResults
-  :: FunPtr (Ptr Device_T -> QueryPool -> Word32 -> Word32 -> CSize -> Ptr () -> DeviceSize -> QueryResultFlags -> IO Result) -> Ptr Device_T -> QueryPool -> Word32 -> Word32 -> CSize -> Ptr () -> DeviceSize -> QueryResultFlags -> IO Result
-
--- | vkGetQueryPoolResults - Copy results of queries in a query pool to a
--- host memory region
---
--- = 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 to read.
---
--- -   @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
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits'
---     specifying how and when results are returned.
---
--- = Description
---
--- The range of queries read is defined by [@firstQuery@, @firstQuery@ +
--- @queryCount@ - 1]. For pipeline statistics queries, each query index in
--- the pool contains one integer value for each bit that is enabled in
--- 'QueryPoolCreateInfo'::@pipelineStatistics@ when the pool is created.
---
--- 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-wait-bit-not-set below>.
---
--- If
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
--- is not set and the result overflows a 32-bit value, the value /may/
--- either wrap or saturate. Similarly, if
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
--- is set and the result overflows a 64-bit value, the value /may/ either
--- wrap or saturate.
---
--- If
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.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,
--- 'getQueryPoolResults' is guaranteed to succeed and return
--- 'Graphics.Vulkan.Core10.Enums.Result.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 'getQueryPoolResults' /may/ not return in finite time.
---
--- If
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT'
--- and
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.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
--- 'getQueryPoolResults' returns
--- 'Graphics.Vulkan.Core10.Enums.Result.NOT_READY'. However, availability
--- state is still written to @pData@ for those queries if
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'
--- is set.
---
--- Note
---
--- Applications /must/ take care to ensure that use of the
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.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
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery', and
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdEndQuery' for that
--- query, then the query will remain in the available state until
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool'
--- is called or the
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool' 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
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT'
--- is used in combination with
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'.
--- In this case, the returned availability status /may/ reflect the result
--- of a previous use of the query unless
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool'
--- is called or the
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool' 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
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
--- is set,
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT'
--- is not set, and the query’s status is unavailable, an intermediate
--- result value between zero and the final result value is written to
--- @pData@ for that query.
---
--- If
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.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
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.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
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
---     is not set in @flags@, then @pData@ and @stride@ /must/ be multiples
---     of @4@
---
--- -   If
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
---     is not set in @flags@ and the @queryType@ used to create @queryPool@
---     was not
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     then @pData@ and @stride@ /must/ be multiples of @4@
---
--- -   If
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
---     is set in @flags@ then @pData@ and @stride@ /must/ be multiples of
---     @8@
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     then @pData@ and @stride@ /must/ be multiples of the size of
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterResultKHR'
---
--- -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or
---     equal to the number of queries in @queryPool@
---
--- -   @dataSize@ /must/ be large enough to contain the result of each
---     query, as described
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-memorylayout here>
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT',
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     the @queryPool@ /must/ have been recorded once for each pass as
---     retrieved via a call to
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @queryPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits'
---     values
---
--- -   @dataSize@ /must/ be greater than @0@
---
--- -   @queryPool@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.NOT_READY'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool',
--- 'Graphics.Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlags'
-getQueryPoolResults :: forall io . MonadIO io => Device -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> io (Result)
-getQueryPoolResults device queryPool firstQuery queryCount dataSize data' stride flags = liftIO $ do
-  let vkGetQueryPoolResults' = mkVkGetQueryPoolResults (pVkGetQueryPoolResults (deviceCmds (device :: Device)))
-  r <- vkGetQueryPoolResults' (deviceHandle (device)) (queryPool) (firstQuery) (queryCount) (CSize (dataSize)) (data') (stride) (flags)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
--- | VkQueryPoolCreateInfo - Structure specifying parameters of a newly
--- created query pool
---
--- = Description
---
--- @pipelineStatistics@ is ignored if @queryType@ is not
--- 'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineStatisticsQuery pipeline statistics queries>
---     feature is not enabled, @queryType@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'
---
--- -   If @queryType@ is
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS',
---     @pipelineStatistics@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'
---     values
---
--- -   If @queryType@ is
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     the @pNext@ chain /must/ include a structure of type
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.QueryPoolPerformanceCreateInfoKHR'
---
--- -   @queryCount@ /must/ be greater than 0
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.QueryPoolPerformanceCreateInfoKHR'
---     or
---     'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.QueryPoolPerformanceQueryCreateInfoINTEL'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be @0@
---
--- -   @queryType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.QueryType.QueryType' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlags',
--- 'Graphics.Vulkan.Core10.Enums.QueryPoolCreateFlags.QueryPoolCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.QueryType.QueryType',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createQueryPool'
-data QueryPoolCreateInfo (es :: [Type]) = QueryPoolCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: QueryPoolCreateFlags
-  , -- | @queryType@ is a 'Graphics.Vulkan.Core10.Enums.QueryType.QueryType'
-    -- value specifying the type of queries managed by the pool.
-    queryType :: QueryType
-  , -- | @queryCount@ is the number of queries managed by the pool.
-    queryCount :: Word32
-  , -- | @pipelineStatistics@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'
-    -- specifying which counters will be returned in queries on the new pool,
-    -- as described below in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-pipestats>.
-    pipelineStatistics :: QueryPipelineStatisticFlags
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (QueryPoolCreateInfo es)
-
-instance Extensible QueryPoolCreateInfo where
-  extensibleType = STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext QueryPoolCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends QueryPoolCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @QueryPoolPerformanceQueryCreateInfoINTEL = Just f
-    | Just Refl <- eqT @e @QueryPoolPerformanceCreateInfoKHR = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (QueryPoolCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p QueryPoolCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr QueryPoolCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr QueryType)) (queryType)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (queryCount)
-    lift $ poke ((p `plusPtr` 28 :: Ptr QueryPipelineStatisticFlags)) (pipelineStatistics)
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr QueryType)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (QueryPoolCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @QueryPoolCreateFlags ((p `plusPtr` 16 :: Ptr QueryPoolCreateFlags))
-    queryType <- peek @QueryType ((p `plusPtr` 20 :: Ptr QueryType))
-    queryCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pipelineStatistics <- peek @QueryPipelineStatisticFlags ((p `plusPtr` 28 :: Ptr QueryPipelineStatisticFlags))
-    pure $ QueryPoolCreateInfo
-             next flags queryType queryCount pipelineStatistics
-
-instance es ~ '[] => Zero (QueryPoolCreateInfo es) where
-  zero = QueryPoolCreateInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/Query.hs-boot b/src/Graphics/Vulkan/Core10/Query.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Query.hs-boot
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Query  (QueryPoolCreateInfo) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role QueryPoolCreateInfo nominal
-data QueryPoolCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (QueryPoolCreateInfo es)
-instance Show (Chain es) => Show (QueryPoolCreateInfo es)
-
-instance PeekChain es => FromCStruct (QueryPoolCreateInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/Queue.hs b/src/Graphics/Vulkan/Core10/Queue.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Queue.hs
+++ /dev/null
@@ -1,770 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Queue  ( getDeviceQueue
-                                     , queueSubmit
-                                     , queueWaitIdle
-                                     , deviceWaitIdle
-                                     , SubmitInfo(..)
-                                     ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32 (D3D12FenceSubmitInfoKHR)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDeviceWaitIdle))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeviceQueue))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkQueueSubmit))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkQueueWaitIdle))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupSubmitInfo)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.Handles (Fence)
-import Graphics.Vulkan.Core10.Handles (Fence(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PerformanceQuerySubmitInfoKHR)
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (ProtectedSubmitInfo)
-import Graphics.Vulkan.Core10.Handles (Queue)
-import Graphics.Vulkan.Core10.Handles (Queue(..))
-import Graphics.Vulkan.Core10.Handles (Queue(Queue))
-import Graphics.Vulkan.Core10.Handles (Queue_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Handles (Semaphore)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (TimelineSemaphoreSubmitInfo)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex (Win32KeyedMutexAcquireReleaseInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex (Win32KeyedMutexAcquireReleaseInfoNV)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBMIT_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceQueue
-  :: FunPtr (Ptr Device_T -> Word32 -> Word32 -> Ptr (Ptr Queue_T) -> IO ()) -> Ptr Device_T -> Word32 -> Word32 -> Ptr (Ptr Queue_T) -> IO ()
-
--- | vkGetDeviceQueue - Get a queue handle from a device
---
--- = 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 'Graphics.Vulkan.Core10.Handles.Queue'
---     object that will be filled with the handle for the requested queue.
---
--- = Description
---
--- 'getDeviceQueue' /must/ only be used to get queues that were created
--- with the @flags@ parameter of
--- 'Graphics.Vulkan.Core10.Device.DeviceQueueCreateInfo' set to zero. To
--- get queues that were created with a non-zero @flags@ parameter use
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.getDeviceQueue2'.
---
--- == Valid Usage
---
--- -   @queueFamilyIndex@ /must/ be one of the queue family indices
---     specified when @device@ was created, via the
---     'Graphics.Vulkan.Core10.Device.DeviceQueueCreateInfo' structure
---
--- -   @queueIndex@ /must/ be less than the number of queues created for
---     the specified queue family index when @device@ was created, via the
---     @queueCount@ member of the
---     'Graphics.Vulkan.Core10.Device.DeviceQueueCreateInfo' structure
---
--- -   'Graphics.Vulkan.Core10.Device.DeviceQueueCreateInfo'::@flags@
---     /must/ have been set to zero when @device@ was created
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pQueue@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Queue' handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Queue'
-getDeviceQueue :: forall io . MonadIO io => Device -> ("queueFamilyIndex" ::: Word32) -> ("queueIndex" ::: Word32) -> io (Queue)
-getDeviceQueue device queueFamilyIndex queueIndex = liftIO . evalContT $ do
-  let cmds = deviceCmds (device :: Device)
-  let vkGetDeviceQueue' = mkVkGetDeviceQueue (pVkGetDeviceQueue cmds)
-  pPQueue <- ContT $ bracket (callocBytes @(Ptr Queue_T) 8) free
-  lift $ vkGetDeviceQueue' (deviceHandle (device)) (queueFamilyIndex) (queueIndex) (pPQueue)
-  pQueue <- lift $ peek @(Ptr Queue_T) pPQueue
-  pure $ (((\h -> Queue h cmds ) pQueue))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkQueueSubmit
-  :: FunPtr (Ptr Queue_T -> Word32 -> Ptr (SubmitInfo a) -> Fence -> IO Result) -> Ptr Queue_T -> Word32 -> Ptr (SubmitInfo a) -> Fence -> IO Result
-
--- | vkQueueSubmit - Submits a sequence of semaphores or command buffers to a
--- queue
---
--- = 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 'SubmitInfo' 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.APIConstants.NULL_HANDLE', it defines a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation>.
---
--- = Description
---
--- Note
---
--- Submission can be a high overhead operation, and applications /should/
--- attempt to batch work together into as few calls to 'queueSubmit' as
--- possible.
---
--- 'queueSubmit' is a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-submission queue submission command>,
--- with each batch defined by an element of @pSubmits@. Batches begin
--- execution in the order they appear in @pSubmits@, but /may/ complete out
--- of order.
---
--- Fence and semaphore operations submitted with 'queueSubmit' 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores semaphore>
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences fence>
--- sections of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization the synchronization chapter>.
---
--- Details on the interaction of @pWaitDstStageMask@ with synchronization
--- are described in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-waiting semaphore wait operation>
--- section of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization the synchronization chapter>.
---
--- The order that batches appear in @pSubmits@ is used to determine
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>,
--- and thus all the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-implicit implicit ordering guarantees>
--- that respect it. Other than these implicit ordering guarantees and any
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable state>,
--- it is moved to the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>.
--- Once execution of all submissions of a command buffer complete, it moves
--- from the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>,
--- back to the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable state>.
--- If a command buffer was recorded with the
--- 'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT'
--- flag, it instead moves to the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid state>.
---
--- If 'queueSubmit' fails, it /may/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' or
--- 'Graphics.Vulkan.Core10.Enums.Result.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 'queueSubmit' fails in such a
--- way that the implementation is unable to make that guarantee, the
--- implementation /must/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'. See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>.
---
--- == Valid Usage
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @fence@ /must/ be unsignaled
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @fence@ /must/ not be associated with any other queue command that
---     has not yet completed execution on that queue
---
--- -   Any calls to
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdSetEvent',
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResetEvent' or
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents' 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.Handles.Event' 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>
---
--- -   Each element of the @pSignalSemaphores@ member of any element of
---     @pSubmits@ /must/ be unsignaled when the semaphore signal operation
---     it defines is executed on the device
---
--- -   When a semaphore wait operation referring to a binary semaphore
---     defined by any element of the @pWaitSemaphores@ member of any
---     element of @pSubmits@ executes on @queue@, there /must/ be no other
---     queues waiting on the same semaphore
---
--- -   All elements of the @pWaitSemaphores@ member of all elements of
---     @pSubmits@ created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
---     /must/ reference a semaphore signal operation that has been
---     submitted for execution and any semaphore signal operations on which
---     it depends (if any) /must/ have also been submitted for execution
---
--- -   Each element of the @pCommandBuffers@ member of each element of
---     @pSubmits@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>
---
--- -   If any element of the @pCommandBuffers@ member of any element of
---     @pSubmits@ was not recorded with the
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT',
---     it /must/ not be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
---
--- -   Any
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-secondary secondary command buffers recorded>
---     into any element of the @pCommandBuffers@ member of any element of
---     @pSubmits@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>
---
--- -   If any
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-secondary secondary command buffers recorded>
---     into any element of the @pCommandBuffers@ member of any element of
---     @pSubmits@ was not recorded with the
---     'Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT',
---     it /must/ not be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
---
--- -   Each element of the @pCommandBuffers@ member of each element of
---     @pSubmits@ /must/ have been allocated from a
---     'Graphics.Vulkan.Core10.Handles.CommandPool' that was created for
---     the same queue family @queue@ belongs to
---
--- -   If any element of @pSubmits->pCommandBuffers@ includes a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire Queue Family Transfer Acquire Operation>,
---     there /must/ exist a previously submitted
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-release Queue Family Transfer Release Operation>
---     on a queue in the queue family identified by the acquire operation,
---     with parameters matching the acquire operation as defined in the
---     definition of such
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire acquire operations>,
---     and which happens-before the acquire operation
---
--- -   If a command recorded into any element of @pCommandBuffers@ was a
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery' whose
---     @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#profiling-lock profiling lock>
---     /must/ have been held continuously on the
---     'Graphics.Vulkan.Core10.Handles.Device' that @queue@ was retrieved
---     from, throughout recording of those command buffers
---
--- -   Any resource created with
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE'
---     that is read by an operation specified by @pSubmits@ /must/ not be
---     owned by any queue family other than the one which @queue@ belongs
---     to, at the time it is executed
---
--- == Valid Usage (Implicit)
---
--- -   @queue@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Queue'
---     handle
---
--- -   If @submitCount@ is not @0@, @pSubmits@ /must/ be a valid pointer to
---     an array of @submitCount@ valid 'SubmitInfo' structures
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @fence@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Fence'
---     handle
---
--- -   Both of @fence@, and @queue@ that are valid handles of non-ignored
---     parameters /must/ have been created, allocated, or retrieved from
---     the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @queue@ /must/ be externally synchronized
---
--- -   Host access to @fence@ /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Fence',
--- 'Graphics.Vulkan.Core10.Handles.Queue', 'SubmitInfo'
-queueSubmit :: forall a io . (PokeChain a, MonadIO io) => Queue -> ("submits" ::: Vector (SubmitInfo a)) -> Fence -> io ()
-queueSubmit queue submits fence = liftIO . evalContT $ do
-  let vkQueueSubmit' = mkVkQueueSubmit (pVkQueueSubmit (deviceCmds (queue :: Queue)))
-  pPSubmits <- ContT $ allocaBytesAligned @(SubmitInfo _) ((Data.Vector.length (submits)) * 72) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSubmits `plusPtr` (72 * (i)) :: Ptr (SubmitInfo _)) (e) . ($ ())) (submits)
-  r <- lift $ vkQueueSubmit' (queueHandle (queue)) ((fromIntegral (Data.Vector.length $ (submits)) :: Word32)) (pPSubmits) (fence)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkQueueWaitIdle
-  :: FunPtr (Ptr Queue_T -> IO Result) -> Ptr Queue_T -> IO Result
-
--- | vkQueueWaitIdle - Wait for a queue to become idle
---
--- = Parameters
---
--- -   @queue@ is the queue on which to wait.
---
--- = Description
---
--- 'queueWaitIdle' 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 'Graphics.Vulkan.Core10.Handles.Queue'
---     handle
---
--- == Host Synchronization
---
--- -   Host access to @queue@ /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Queue'
-queueWaitIdle :: forall io . MonadIO io => Queue -> io ()
-queueWaitIdle queue = liftIO $ do
-  let vkQueueWaitIdle' = mkVkQueueWaitIdle (pVkQueueWaitIdle (deviceCmds (queue :: Queue)))
-  r <- vkQueueWaitIdle' (queueHandle (queue))
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDeviceWaitIdle
-  :: FunPtr (Ptr Device_T -> IO Result) -> Ptr Device_T -> IO Result
-
--- | vkDeviceWaitIdle - Wait for a device to become idle
---
--- = Parameters
---
--- -   @device@ is the logical device to idle.
---
--- = Description
---
--- 'deviceWaitIdle' is equivalent to calling 'queueWaitIdle' for all queues
--- owned by @device@.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- == Host Synchronization
---
--- -   Host access to all 'Graphics.Vulkan.Core10.Handles.Queue' objects
---     created from @device@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device'
-deviceWaitIdle :: forall io . MonadIO io => Device -> io ()
-deviceWaitIdle device = liftIO $ do
-  let vkDeviceWaitIdle' = mkVkDeviceWaitIdle (pVkDeviceWaitIdle (deviceCmds (device :: Device)))
-  r <- vkDeviceWaitIdle' (deviceHandle (device))
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkSubmitInfo - Structure specifying a queue submit operation
---
--- = Description
---
--- The order that command buffers appear in @pCommandBuffers@ is used to
--- determine
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>,
--- and thus all the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-implicit implicit ordering guarantees>
--- that respect it. Other than these implicit ordering guarantees and any
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
---     'Graphics.Vulkan.Core10.Enums.CommandBufferLevel.COMMAND_BUFFER_LEVEL_SECONDARY'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, each element of @pWaitDstStageMask@ /must/
---     not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, each element of @pWaitDstStageMask@ /must/
---     not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   Each element of @pWaitDstStageMask@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'
---
--- -   If any element of @pWaitSemaphores@ or @pSignalSemaphores@ was
---     created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE',
---     then the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
---     structure
---
--- -   If the @pNext@ chain of this structure includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
---     structure and any element of @pWaitSemaphores@ was created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE',
---     then its @waitSemaphoreValueCount@ member /must/ equal
---     @waitSemaphoreCount@
---
--- -   If the @pNext@ chain of this structure includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
---     structure and any element of @pSignalSemaphores@ was created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE',
---     then its @signalSemaphoreValueCount@ member /must/ equal
---     @signalSemaphoreCount@
---
--- -   For each element of @pSignalSemaphores@ created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---     the corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pSignalSemaphoreValues
---     /must/ have a value greater than the current value of the semaphore
---     when the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
---     is executed
---
--- -   For each element of @pWaitSemaphores@ created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---     the corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pWaitSemaphoreValues
---     /must/ have a value which does not differ from the current value of
---     the semaphore or the value of any outstanding semaphore wait or
---     signal operation on that semaphore by more than
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
---
--- -   For each element of @pSignalSemaphores@ created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---     the corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pSignalSemaphoreValues
---     /must/ have a value which does not differ from the current value of
---     the semaphore or the value of any outstanding semaphore wait or
---     signal operation on that semaphore by more than
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, each element of @pWaitDstStageMask@ /must/
---     not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, each element of @pWaitDstStageMask@ /must/
---     not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBMIT_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.D3D12FenceSubmitInfoKHR',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupSubmitInfo',
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PerformanceQuerySubmitInfoKHR',
---     'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.ProtectedSubmitInfo',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo',
---     'Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoKHR',
---     or
---     'Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoNV'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a
---     valid pointer to an array of @waitSemaphoreCount@ valid
---     'Graphics.Vulkan.Core10.Handles.Semaphore' handles
---
--- -   If @waitSemaphoreCount@ is not @0@, @pWaitDstStageMask@ /must/ be a
---     valid pointer to an array of @waitSemaphoreCount@ valid combinations
---     of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     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
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handles
---
--- -   If @signalSemaphoreCount@ is not @0@, @pSignalSemaphores@ /must/ be
---     a valid pointer to an array of @signalSemaphoreCount@ valid
---     'Graphics.Vulkan.Core10.Handles.Semaphore' handles
---
--- -   Each of the elements of @pCommandBuffers@, the elements of
---     @pSignalSemaphores@, and the elements of @pWaitSemaphores@ that are
---     valid handles of non-ignored parameters /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'queueSubmit'
-data SubmitInfo (es :: [Type]) = SubmitInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @pWaitSemaphores@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.Semaphore' handles upon which to wait
-    -- before the command buffers for this batch begin execution. If semaphores
-    -- to wait on are provided, they define a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-waiting semaphore wait operation>.
-    waitSemaphores :: Vector Semaphore
-  , -- | @pWaitDstStageMask@ is a pointer to an array of pipeline stages at which
-    -- each corresponding semaphore wait will occur.
-    waitDstStageMask :: Vector PipelineStageFlags
-  , -- | @pCommandBuffers@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.CommandBuffer' handles to execute in the
-    -- batch.
-    commandBuffers :: Vector (Ptr CommandBuffer_T)
-  , -- | @pSignalSemaphores@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.Semaphore' handles which will be
-    -- signaled when the command buffers for this batch have completed
-    -- execution. If semaphores to be signaled are provided, they define a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>.
-    signalSemaphores :: Vector Semaphore
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (SubmitInfo es)
-
-instance Extensible SubmitInfo where
-  extensibleType = STRUCTURE_TYPE_SUBMIT_INFO
-  setNext x next = x{next = next}
-  getNext SubmitInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SubmitInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PerformanceQuerySubmitInfoKHR = Just f
-    | Just Refl <- eqT @e @TimelineSemaphoreSubmitInfo = Just f
-    | Just Refl <- eqT @e @ProtectedSubmitInfo = Just f
-    | Just Refl <- eqT @e @DeviceGroupSubmitInfo = Just f
-    | Just Refl <- eqT @e @D3D12FenceSubmitInfoKHR = Just f
-    | Just Refl <- eqT @e @Win32KeyedMutexAcquireReleaseInfoKHR = Just f
-    | Just Refl <- eqT @e @Win32KeyedMutexAcquireReleaseInfoNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (SubmitInfo es) where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SubmitInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBMIT_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    let pWaitSemaphoresLength = Data.Vector.length $ (waitSemaphores)
-    let pWaitDstStageMaskLength = Data.Vector.length $ (waitDstStageMask)
-    lift $ unless (pWaitDstStageMaskLength == pWaitSemaphoresLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pWaitDstStageMask and pWaitSemaphores must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral pWaitSemaphoresLength :: Word32))
-    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (waitSemaphores)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (waitSemaphores)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
-    pPWaitDstStageMask' <- ContT $ allocaBytesAligned @PipelineStageFlags ((Data.Vector.length (waitDstStageMask)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitDstStageMask' `plusPtr` (4 * (i)) :: Ptr PipelineStageFlags) (e)) (waitDstStageMask)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineStageFlags))) (pPWaitDstStageMask')
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (commandBuffers)) :: Word32))
-    pPCommandBuffers' <- ContT $ allocaBytesAligned @(Ptr CommandBuffer_T) ((Data.Vector.length (commandBuffers)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBuffers' `plusPtr` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)) (e)) (commandBuffers)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (Ptr CommandBuffer_T)))) (pPCommandBuffers')
-    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (signalSemaphores)) :: Word32))
-    pPSignalSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (signalSemaphores)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (signalSemaphores)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Semaphore))) (pPSignalSemaphores')
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBMIT_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
-    pPWaitDstStageMask' <- ContT $ allocaBytesAligned @PipelineStageFlags ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitDstStageMask' `plusPtr` (4 * (i)) :: Ptr PipelineStageFlags) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineStageFlags))) (pPWaitDstStageMask')
-    pPCommandBuffers' <- ContT $ allocaBytesAligned @(Ptr CommandBuffer_T) ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBuffers' `plusPtr` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (Ptr CommandBuffer_T)))) (pPCommandBuffers')
-    pPSignalSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Semaphore))) (pPSignalSemaphores')
-    lift $ f
-
-instance PeekChain es => FromCStruct (SubmitInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    waitSemaphoreCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pWaitSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 24 :: Ptr (Ptr Semaphore)))
-    pWaitSemaphores' <- generateM (fromIntegral waitSemaphoreCount) (\i -> peek @Semaphore ((pWaitSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
-    pWaitDstStageMask <- peek @(Ptr PipelineStageFlags) ((p `plusPtr` 32 :: Ptr (Ptr PipelineStageFlags)))
-    pWaitDstStageMask' <- generateM (fromIntegral waitSemaphoreCount) (\i -> peek @PipelineStageFlags ((pWaitDstStageMask `advancePtrBytes` (4 * (i)) :: Ptr PipelineStageFlags)))
-    commandBufferCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    pCommandBuffers <- peek @(Ptr (Ptr CommandBuffer_T)) ((p `plusPtr` 48 :: Ptr (Ptr (Ptr CommandBuffer_T))))
-    pCommandBuffers' <- generateM (fromIntegral commandBufferCount) (\i -> peek @(Ptr CommandBuffer_T) ((pCommandBuffers `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CommandBuffer_T))))
-    signalSemaphoreCount <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    pSignalSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 64 :: Ptr (Ptr Semaphore)))
-    pSignalSemaphores' <- generateM (fromIntegral signalSemaphoreCount) (\i -> peek @Semaphore ((pSignalSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
-    pure $ SubmitInfo
-             next pWaitSemaphores' pWaitDstStageMask' pCommandBuffers' pSignalSemaphores'
-
-instance es ~ '[] => Zero (SubmitInfo es) where
-  zero = SubmitInfo
-           ()
-           mempty
-           mempty
-           mempty
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core10/Queue.hs-boot b/src/Graphics/Vulkan/Core10/Queue.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Queue.hs-boot
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Queue  (SubmitInfo) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role SubmitInfo nominal
-data SubmitInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (SubmitInfo es)
-instance Show (Chain es) => Show (SubmitInfo es)
-
-instance PeekChain es => FromCStruct (SubmitInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/QueueSemaphore.hs b/src/Graphics/Vulkan/Core10/QueueSemaphore.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/QueueSemaphore.hs
+++ /dev/null
@@ -1,287 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.QueueSemaphore  ( createSemaphore
-                                              , withSemaphore
-                                              , destroySemaphore
-                                              , SemaphoreCreateInfo(..)
-                                              ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateSemaphore))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroySemaphore))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore (ExportSemaphoreCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32 (ExportSemaphoreWin32HandleInfoKHR)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Handles (Semaphore)
-import Graphics.Vulkan.Core10.Handles (Semaphore(..))
-import Graphics.Vulkan.Core10.Enums.SemaphoreCreateFlags (SemaphoreCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreTypeCreateInfo)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateSemaphore
-  :: FunPtr (Ptr Device_T -> Ptr (SemaphoreCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Semaphore -> IO Result) -> Ptr Device_T -> Ptr (SemaphoreCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Semaphore -> IO Result
-
--- | vkCreateSemaphore - Create a new queue semaphore object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the semaphore.
---
--- -   @pCreateInfo@ is a pointer to a 'SemaphoreCreateInfo' structure
---     containing information about how the semaphore is to be created.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pSemaphore@ is a pointer to a handle in which the resulting
---     semaphore object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'SemaphoreCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSemaphore@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Semaphore' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore', 'SemaphoreCreateInfo'
-createSemaphore :: forall a io . (PokeChain a, MonadIO io) => Device -> SemaphoreCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Semaphore)
-createSemaphore device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateSemaphore' = mkVkCreateSemaphore (pVkCreateSemaphore (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSemaphore <- ContT $ bracket (callocBytes @Semaphore 8) free
-  r <- lift $ vkCreateSemaphore' (deviceHandle (device)) pCreateInfo pAllocator (pPSemaphore)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSemaphore <- lift $ peek @Semaphore pPSemaphore
-  pure $ (pSemaphore)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createSemaphore' and 'destroySemaphore'
---
--- To ensure that 'destroySemaphore' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withSemaphore :: forall a io r . (PokeChain a, MonadIO io) => (io (Semaphore) -> ((Semaphore) -> io ()) -> r) -> Device -> SemaphoreCreateInfo a -> Maybe AllocationCallbacks -> r
-withSemaphore b device pCreateInfo pAllocator =
-  b (createSemaphore device pCreateInfo pAllocator)
-    (\(o0) -> destroySemaphore device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroySemaphore
-  :: FunPtr (Ptr Device_T -> Semaphore -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Semaphore -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroySemaphore - Destroy a semaphore object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted batches that refer to @semaphore@ /must/ have
---     completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @semaphore@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @semaphore@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @semaphore@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @semaphore@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Semaphore' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore'
-destroySemaphore :: forall io . MonadIO io => Device -> Semaphore -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroySemaphore device semaphore allocator = liftIO . evalContT $ do
-  let vkDestroySemaphore' = mkVkDestroySemaphore (pVkDestroySemaphore (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroySemaphore' (deviceHandle (device)) (semaphore) pAllocator
-  pure $ ()
-
-
--- | VkSemaphoreCreateInfo - Structure specifying parameters of a newly
--- created semaphore
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo',
---     'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.ExportSemaphoreWin32HandleInfoKHR',
---     or
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.SemaphoreCreateFlags.SemaphoreCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createSemaphore'
-data SemaphoreCreateInfo (es :: [Type]) = SemaphoreCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: SemaphoreCreateFlags
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (SemaphoreCreateInfo es)
-
-instance Extensible SemaphoreCreateInfo where
-  extensibleType = STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext SemaphoreCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SemaphoreCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @SemaphoreTypeCreateInfo = Just f
-    | Just Refl <- eqT @e @ExportSemaphoreWin32HandleInfoKHR = Just f
-    | Just Refl <- eqT @e @ExportSemaphoreCreateInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (SemaphoreCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SemaphoreCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr SemaphoreCreateFlags)) (flags)
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ f
-
-instance PeekChain es => FromCStruct (SemaphoreCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @SemaphoreCreateFlags ((p `plusPtr` 16 :: Ptr SemaphoreCreateFlags))
-    pure $ SemaphoreCreateInfo
-             next flags
-
-instance es ~ '[] => Zero (SemaphoreCreateInfo es) where
-  zero = SemaphoreCreateInfo
-           ()
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/QueueSemaphore.hs-boot b/src/Graphics/Vulkan/Core10/QueueSemaphore.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/QueueSemaphore.hs-boot
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.QueueSemaphore  (SemaphoreCreateInfo) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role SemaphoreCreateInfo nominal
-data SemaphoreCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (SemaphoreCreateInfo es)
-instance Show (Chain es) => Show (SemaphoreCreateInfo es)
-
-instance PeekChain es => FromCStruct (SemaphoreCreateInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/Sampler.hs b/src/Graphics/Vulkan/Core10/Sampler.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Sampler.hs
+++ /dev/null
@@ -1,656 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Sampler  ( createSampler
-                                       , withSampler
-                                       , destroySampler
-                                       , SamplerCreateInfo(..)
-                                       ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Enums.BorderColor (BorderColor)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Enums.CompareOp (CompareOp)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateSampler))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroySampler))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.Enums.Filter (Filter)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Handles (Sampler)
-import Graphics.Vulkan.Core10.Handles (Sampler(..))
-import Graphics.Vulkan.Core10.Enums.SamplerAddressMode (SamplerAddressMode)
-import Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits (SamplerCreateFlags)
-import Graphics.Vulkan.Core10.Enums.SamplerMipmapMode (SamplerMipmapMode)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (SamplerReductionModeCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionInfo)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateSampler
-  :: FunPtr (Ptr Device_T -> Ptr (SamplerCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Sampler -> IO Result) -> Ptr Device_T -> Ptr (SamplerCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Sampler -> IO Result
-
--- | vkCreateSampler - Create a new sampler object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the sampler.
---
--- -   @pCreateInfo@ is a pointer to a 'SamplerCreateInfo' structure
---     specifying the state of the sampler object.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pSampler@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.Sampler' handle in which the
---     resulting sampler object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'SamplerCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSampler@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Sampler' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Sampler', 'SamplerCreateInfo'
-createSampler :: forall a io . (PokeChain a, MonadIO io) => Device -> SamplerCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Sampler)
-createSampler device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateSampler' = mkVkCreateSampler (pVkCreateSampler (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSampler <- ContT $ bracket (callocBytes @Sampler 8) free
-  r <- lift $ vkCreateSampler' (deviceHandle (device)) pCreateInfo pAllocator (pPSampler)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSampler <- lift $ peek @Sampler pPSampler
-  pure $ (pSampler)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createSampler' and 'destroySampler'
---
--- To ensure that 'destroySampler' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withSampler :: forall a io r . (PokeChain a, MonadIO io) => (io (Sampler) -> ((Sampler) -> io ()) -> r) -> Device -> SamplerCreateInfo a -> Maybe AllocationCallbacks -> r
-withSampler b device pCreateInfo pAllocator =
-  b (createSampler device pCreateInfo pAllocator)
-    (\(o0) -> destroySampler device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroySampler
-  :: FunPtr (Ptr Device_T -> Sampler -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Sampler -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroySampler - Destroy a sampler object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @sampler@ /must/ have completed
---     execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @sampler@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @sampler@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @sampler@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @sampler@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.Sampler' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Sampler'
-destroySampler :: forall io . MonadIO io => Device -> Sampler -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroySampler device sampler allocator = liftIO . evalContT $ do
-  let vkDestroySampler' = mkVkDestroySampler (pVkDestroySampler (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroySampler' (deviceHandle (device)) (sampler) pAllocator
-  pure $ ()
-
-
--- | VkSamplerCreateInfo - Structure specifying parameters of a newly created
--- sampler
---
--- = Description
---
--- Mapping of OpenGL to Vulkan filter modes
---
--- @magFilter@ values of
--- 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_NEAREST' and
--- 'Graphics.Vulkan.Core10.Enums.Filter.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 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and
--- @mipmapMode@ of
--- 'Graphics.Vulkan.Core10.Enums.SamplerMipmapMode.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
--- 'Graphics.Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST',
--- @minLod@ = 0, and @maxLod@ = 0.25, and using @minFilter@ =
--- 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' or @minFilter@ =
--- 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_NEAREST', respectively.
---
--- Note that using a @maxLod@ of zero would cause
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxSamplerAllocationCount maxSamplerAllocationCount>
--- member of the
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'
--- structure. If @maxSamplerAllocationCount@ is exceeded, 'createSampler'
--- will return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'.
---
--- Since 'Graphics.Vulkan.Core10.Handles.Sampler' 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
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSamplerLodBias@
---
--- -   @maxLod@ /must/ be greater than or equal to @minLod@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-samplerAnisotropy anisotropic sampling>
---     feature is not enabled, @anisotropyEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If @anisotropyEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE',
---     @maxAnisotropy@ /must/ be between @1.0@ and
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSamplerAnisotropy@,
---     inclusive
---
--- -   If
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
---     is enabled and the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
---     do not support
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT',
---     @minFilter@ and @magFilter@ /must/ be equal to the sampler Y′CBCR
---     conversion’s @chromaFilter@
---
--- -   If @unnormalizedCoordinates@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', @minFilter@ and @magFilter@
---     /must/ be equal
---
--- -   If @unnormalizedCoordinates@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', @mipmapMode@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST'
---
--- -   If @unnormalizedCoordinates@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', @minLod@ and @maxLod@ /must/
---     be zero
---
--- -   If @unnormalizedCoordinates@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', @addressModeU@ and
---     @addressModeV@ /must/ each be either
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---     or
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER'
---
--- -   If @unnormalizedCoordinates@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', @anisotropyEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If @unnormalizedCoordinates@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', @compareEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If any of @addressModeU@, @addressModeV@ or @addressModeW@ are
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER',
---     @borderColor@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.BorderColor.BorderColor' value
---
--- -   If
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
---     is enabled, @addressModeU@, @addressModeV@, and @addressModeW@
---     /must/ be
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE',
---     @anisotropyEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE', and
---     @unnormalizedCoordinates@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   The sampler reduction mode /must/ be set to
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE'
---     if
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
---     is enabled
---
--- -   If
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-samplerMirrorClampToEdge samplerMirrorClampToEdge>
---     is not enabled, and if the @VK_KHR_sampler_mirror_clamp_to_edge@
---     extension is not enabled, @addressModeU@, @addressModeV@ and
---     @addressModeW@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE'
---
--- -   If @compareEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE',
---     @compareOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.CompareOp.CompareOp' value
---
--- -   If either @magFilter@ or @minFilter@ is
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT',
---     @anisotropyEnable@ /must/ be 'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If @compareEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', the
---     @reductionMode@ member of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'
---     /must/ be
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
---     then @minFilter@ and @magFilter@ /must/ be equal
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
---     then @mipmapMode@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
---     then @minLod@ and @maxLod@ /must/ be zero
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
---     then @addressModeU@ and @addressModeV@ /must/ each be either
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---     or
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
---     then @anisotropyEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
---     then @compareEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
---     then @unnormalizedCoordinates@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLER_CREATE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SamplerCreateFlagBits'
---     values
---
--- -   @magFilter@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Filter.Filter' value
---
--- -   @minFilter@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Filter.Filter' value
---
--- -   @mipmapMode@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SamplerMipmapMode.SamplerMipmapMode'
---     value
---
--- -   @addressModeU@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     value
---
--- -   @addressModeV@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     value
---
--- -   @addressModeW@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.BorderColor.BorderColor',
--- 'Graphics.Vulkan.Core10.Enums.CompareOp.CompareOp',
--- 'Graphics.Vulkan.Core10.Enums.Filter.Filter',
--- 'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode',
--- 'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SamplerCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.SamplerMipmapMode.SamplerMipmapMode',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createSampler'
-data SamplerCreateInfo (es :: [Type]) = SamplerCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits.SamplerCreateFlagBits'
-    -- describing additional parameters of the sampler.
-    flags :: SamplerCreateFlags
-  , -- | @magFilter@ is a 'Graphics.Vulkan.Core10.Enums.Filter.Filter' value
-    -- specifying the magnification filter to apply to lookups.
-    magFilter :: Filter
-  , -- | @minFilter@ is a 'Graphics.Vulkan.Core10.Enums.Filter.Filter' value
-    -- specifying the minification filter to apply to lookups.
-    minFilter :: Filter
-  , -- | @mipmapMode@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.SamplerMipmapMode.SamplerMipmapMode' value
-    -- specifying the mipmap filter to apply to lookups.
-    mipmapMode :: SamplerMipmapMode
-  , -- | @addressModeU@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
-    -- value specifying the addressing mode for outside [0..1] range for U
-    -- coordinate.
-    addressModeU :: SamplerAddressMode
-  , -- | @addressModeV@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
-    -- value specifying the addressing mode for outside [0..1] range for V
-    -- coordinate.
-    addressModeV :: SamplerAddressMode
-  , -- | @addressModeW@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
-    -- value specifying the addressing mode for outside [0..1] range for W
-    -- coordinate.
-    addressModeW :: SamplerAddressMode
-  , -- | @mipLodBias@ is the bias to be added to mipmap LOD (level-of-detail)
-    -- calculation and bias provided by image sampling functions in SPIR-V, as
-    -- described in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-level-of-detail-operation Level-of-Detail Operation>
-    -- section.
-    mipLodBias :: Float
-  , -- | @anisotropyEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE' to enable
-    -- anisotropic filtering, as described in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-texel-anisotropic-filtering Texel Anisotropic Filtering>
-    -- section, or 'Graphics.Vulkan.Core10.BaseType.FALSE' otherwise.
-    anisotropyEnable :: Bool
-  , -- | @maxAnisotropy@ is the anisotropy value clamp used by the sampler when
-    -- @anisotropyEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE'. If
-    -- @anisotropyEnable@ is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- @maxAnisotropy@ is ignored.
-    maxAnisotropy :: Float
-  , -- | @compareEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE' to enable
-    -- comparison against a reference value during lookups, or
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE' otherwise.
-    --
-    -- -   Note: Some implementations will default to shader state if this
-    --     member does not match.
-    compareEnable :: Bool
-  , -- | @compareOp@ is a 'Graphics.Vulkan.Core10.Enums.CompareOp.CompareOp'
-    -- value specifying the comparison function to apply to fetched data before
-    -- filtering as described in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-depth-compare-operation Depth Compare Operation>
-    -- section.
-    compareOp :: CompareOp
-  , -- | @minLod@ and @maxLod@ are the values used to clamp the computed LOD
-    -- value, as described in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-level-of-detail-operation Level-of-Detail Operation>
-    -- section.
-    minLod :: Float
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "maxLod"
-    maxLod :: Float
-  , -- | @borderColor@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.BorderColor.BorderColor' value specifying
-    -- the predefined border color to use.
-    borderColor :: BorderColor
-  , -- | @unnormalizedCoordinates@ controls whether to use unnormalized or
-    -- normalized texel coordinates to address texels of the image. When set to
-    -- 'Graphics.Vulkan.Core10.BaseType.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
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE' the range of image coordinates
-    -- is zero to one.
-    --
-    -- When @unnormalizedCoordinates@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE', images the sampler is used with
-    -- in the shader have the following requirements:
-    --
-    -- -   The @viewType@ /must/ be either
-    --     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D' or
-    --     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'.
-    --
-    -- -   The image view /must/ have a single layer and a single mip level.
-    --
-    -- When @unnormalizedCoordinates@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.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.
-    unnormalizedCoordinates :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (SamplerCreateInfo es)
-
-instance Extensible SamplerCreateInfo where
-  extensibleType = STRUCTURE_TYPE_SAMPLER_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext SamplerCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SamplerCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @SamplerReductionModeCreateInfo = Just f
-    | Just Refl <- eqT @e @SamplerYcbcrConversionInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (SamplerCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 80 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SamplerCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr SamplerCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Filter)) (magFilter)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Filter)) (minFilter)
-    lift $ poke ((p `plusPtr` 28 :: Ptr SamplerMipmapMode)) (mipmapMode)
-    lift $ poke ((p `plusPtr` 32 :: Ptr SamplerAddressMode)) (addressModeU)
-    lift $ poke ((p `plusPtr` 36 :: Ptr SamplerAddressMode)) (addressModeV)
-    lift $ poke ((p `plusPtr` 40 :: Ptr SamplerAddressMode)) (addressModeW)
-    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (mipLodBias))
-    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (anisotropyEnable))
-    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (maxAnisotropy))
-    lift $ poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (compareEnable))
-    lift $ poke ((p `plusPtr` 60 :: Ptr CompareOp)) (compareOp)
-    lift $ poke ((p `plusPtr` 64 :: Ptr CFloat)) (CFloat (minLod))
-    lift $ poke ((p `plusPtr` 68 :: Ptr CFloat)) (CFloat (maxLod))
-    lift $ poke ((p `plusPtr` 72 :: Ptr BorderColor)) (borderColor)
-    lift $ poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (unnormalizedCoordinates))
-    lift $ f
-  cStructSize = 80
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr Filter)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Filter)) (zero)
-    lift $ poke ((p `plusPtr` 28 :: Ptr SamplerMipmapMode)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr SamplerAddressMode)) (zero)
-    lift $ poke ((p `plusPtr` 36 :: Ptr SamplerAddressMode)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr SamplerAddressMode)) (zero)
-    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 60 :: Ptr CompareOp)) (zero)
-    lift $ poke ((p `plusPtr` 64 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 68 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 72 :: Ptr BorderColor)) (zero)
-    lift $ poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance PeekChain es => FromCStruct (SamplerCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @SamplerCreateFlags ((p `plusPtr` 16 :: Ptr SamplerCreateFlags))
-    magFilter <- peek @Filter ((p `plusPtr` 20 :: Ptr Filter))
-    minFilter <- peek @Filter ((p `plusPtr` 24 :: Ptr Filter))
-    mipmapMode <- peek @SamplerMipmapMode ((p `plusPtr` 28 :: Ptr SamplerMipmapMode))
-    addressModeU <- peek @SamplerAddressMode ((p `plusPtr` 32 :: Ptr SamplerAddressMode))
-    addressModeV <- peek @SamplerAddressMode ((p `plusPtr` 36 :: Ptr SamplerAddressMode))
-    addressModeW <- peek @SamplerAddressMode ((p `plusPtr` 40 :: Ptr SamplerAddressMode))
-    mipLodBias <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))
-    anisotropyEnable <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
-    maxAnisotropy <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))
-    compareEnable <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
-    compareOp <- peek @CompareOp ((p `plusPtr` 60 :: Ptr CompareOp))
-    minLod <- peek @CFloat ((p `plusPtr` 64 :: Ptr CFloat))
-    maxLod <- peek @CFloat ((p `plusPtr` 68 :: Ptr CFloat))
-    borderColor <- peek @BorderColor ((p `plusPtr` 72 :: Ptr BorderColor))
-    unnormalizedCoordinates <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
-    pure $ SamplerCreateInfo
-             next flags magFilter minFilter mipmapMode addressModeU addressModeV addressModeW ((\(CFloat a) -> a) mipLodBias) (bool32ToBool anisotropyEnable) ((\(CFloat a) -> a) maxAnisotropy) (bool32ToBool compareEnable) compareOp ((\(CFloat a) -> a) minLod) ((\(CFloat a) -> a) maxLod) borderColor (bool32ToBool unnormalizedCoordinates)
-
-instance es ~ '[] => Zero (SamplerCreateInfo es) where
-  zero = SamplerCreateInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core10/Sampler.hs-boot b/src/Graphics/Vulkan/Core10/Sampler.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Sampler.hs-boot
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Sampler  (SamplerCreateInfo) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role SamplerCreateInfo nominal
-data SamplerCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (SamplerCreateInfo es)
-instance Show (Chain es) => Show (SamplerCreateInfo es)
-
-instance PeekChain es => FromCStruct (SamplerCreateInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/Shader.hs b/src/Graphics/Vulkan/Core10/Shader.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Shader.hs
+++ /dev/null
@@ -1,372 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Shader  ( createShaderModule
-                                      , withShaderModule
-                                      , destroyShaderModule
-                                      , ShaderModuleCreateInfo(..)
-                                      ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Bits ((.&.))
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (copyBytes)
-import Foreign.Ptr (ptrToWordPtr)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import qualified Data.ByteString (length)
-import Data.ByteString (packCStringLen)
-import Data.ByteString.Unsafe (unsafeUseAsCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateShaderModule))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyShaderModule))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Handles (ShaderModule)
-import Graphics.Vulkan.Core10.Handles (ShaderModule(..))
-import Graphics.Vulkan.Core10.Enums.ShaderModuleCreateFlagBits (ShaderModuleCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_validation_cache (ShaderModuleValidationCacheCreateInfoEXT)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateShaderModule
-  :: FunPtr (Ptr Device_T -> Ptr (ShaderModuleCreateInfo a) -> Ptr AllocationCallbacks -> Ptr ShaderModule -> IO Result) -> Ptr Device_T -> Ptr (ShaderModuleCreateInfo a) -> Ptr AllocationCallbacks -> Ptr ShaderModule -> IO Result
-
--- | vkCreateShaderModule - Creates a new shader module object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the shader module.
---
--- -   @pCreateInfo@ is a pointer to a 'ShaderModuleCreateInfo' structure.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pShaderModule@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.ShaderModule' handle in which the
---     resulting shader module object is returned.
---
--- = Description
---
--- Once a shader module has been created, any entry points it contains
--- /can/ be used in pipeline shader stages as described in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-compute Compute Pipelines>
--- and
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-graphics Graphics Pipelines>.
---
--- If the shader stage fails to compile
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV' will be
--- generated and the compile log will be reported back to the application
--- by @VK_EXT_debug_report@ if enabled.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'ShaderModuleCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pShaderModule@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.ShaderModule' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.ShaderModule', 'ShaderModuleCreateInfo'
-createShaderModule :: forall a io . (PokeChain a, MonadIO io) => Device -> ShaderModuleCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (ShaderModule)
-createShaderModule device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateShaderModule' = mkVkCreateShaderModule (pVkCreateShaderModule (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPShaderModule <- ContT $ bracket (callocBytes @ShaderModule 8) free
-  r <- lift $ vkCreateShaderModule' (deviceHandle (device)) pCreateInfo pAllocator (pPShaderModule)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pShaderModule <- lift $ peek @ShaderModule pPShaderModule
-  pure $ (pShaderModule)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createShaderModule' and 'destroyShaderModule'
---
--- To ensure that 'destroyShaderModule' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withShaderModule :: forall a io r . (PokeChain a, MonadIO io) => (io (ShaderModule) -> ((ShaderModule) -> io ()) -> r) -> Device -> ShaderModuleCreateInfo a -> Maybe AllocationCallbacks -> r
-withShaderModule b device pCreateInfo pAllocator =
-  b (createShaderModule device pCreateInfo pAllocator)
-    (\(o0) -> destroyShaderModule device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyShaderModule
-  :: FunPtr (Ptr Device_T -> ShaderModule -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> ShaderModule -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyShaderModule - Destroy a shader module
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- = Description
---
--- A shader module /can/ be destroyed while pipelines created using its
--- shaders are still in use.
---
--- == Valid Usage
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @shaderModule@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @shaderModule@ was created, @pAllocator@ /must/
---     be @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @shaderModule@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @shaderModule@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.ShaderModule'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.ShaderModule'
-destroyShaderModule :: forall io . MonadIO io => Device -> ShaderModule -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyShaderModule device shaderModule allocator = liftIO . evalContT $ do
-  let vkDestroyShaderModule' = mkVkDestroyShaderModule (pVkDestroyShaderModule (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyShaderModule' (deviceHandle (device)) (shaderModule) pAllocator
-  pure $ ()
-
-
--- | VkShaderModuleCreateInfo - Structure specifying parameters of a newly
--- created shader module
---
--- == Valid Usage
---
--- -   @codeSize@ /must/ be greater than 0
---
--- -   If @pCode@ is a pointer to SPIR-V code, @codeSize@ /must/ be a
---     multiple of 4
---
--- -   @pCode@ /must/ point to either valid SPIR-V code, formatted and
---     packed as described by the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirv-spec Khronos SPIR-V Specification>
---     or valid GLSL code which /must/ be written to the
---     @GL_KHR_vulkan_glsl@ extension specification
---
--- -   If @pCode@ is a pointer to SPIR-V code, that code /must/ adhere to
---     the validation rules described by the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-module-validation Validation Rules within a Module>
---     section of the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities SPIR-V Environment>
---     appendix
---
--- -   If @pCode@ is a pointer to GLSL code, it /must/ be valid GLSL code
---     written to the @GL_KHR_vulkan_glsl@ GLSL extension specification
---
--- -   @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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-module-validation Capabilities>
---     section of the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities SPIR-V Environment>
---     appendix
---
--- -   If @pCode@ declares any of the capabilities listed as /optional/ in
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table SPIR-V Environment>
---     appendix, the corresponding feature(s) /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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.ShaderModuleValidationCacheCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be @0@
---
--- -   @pCode@ /must/ be a valid pointer to an array of
---     \(\textrm{codeSize} \over 4\) @uint32_t@ values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ShaderModuleCreateFlagBits.ShaderModuleCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createShaderModule'
-data ShaderModuleCreateInfo (es :: [Type]) = ShaderModuleCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: ShaderModuleCreateFlags
-  , -- | @pCode@ is a pointer to code that is used to create the shader module.
-    -- The type and format of the code is determined from the content of the
-    -- memory addressed by @pCode@.
-    code :: ByteString
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (ShaderModuleCreateInfo es)
-
-instance Extensible ShaderModuleCreateInfo where
-  extensibleType = STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext ShaderModuleCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ShaderModuleCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @ShaderModuleValidationCacheCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (ShaderModuleCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ShaderModuleCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr ShaderModuleCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 24 :: Ptr CSize)) (fromIntegral $ Data.ByteString.length (code))
-    lift $ unless (Data.ByteString.length (code) .&. 3 == 0) $
-      throwIO $ IOError Nothing InvalidArgument "" "code size must be a multiple of 4" Nothing Nothing
-    unalignedCode <- ContT $ unsafeUseAsCString (code)
-    pCode'' <- if ptrToWordPtr unalignedCode .&. 3 == 0
-      -- If this pointer is already aligned properly then use it
-      then pure $ castPtr @CChar @Word32 unalignedCode
-      -- Otherwise allocate and copy the bytes
-      else do
-        let len = Data.ByteString.length (code)
-        mem <- ContT $ allocaBytesAligned @Word32 len 4
-        lift $ copyBytes mem (castPtr @CChar @Word32 unalignedCode) len
-        pure mem
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word32))) pCode''
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ f
-
-instance PeekChain es => FromCStruct (ShaderModuleCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @ShaderModuleCreateFlags ((p `plusPtr` 16 :: Ptr ShaderModuleCreateFlags))
-    codeSize <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
-    pCode <- peek @(Ptr Word32) ((p `plusPtr` 32 :: Ptr (Ptr Word32)))
-    code <- packCStringLen (castPtr @Word32 @CChar pCode, fromIntegral $ ((\(CSize a) -> a) codeSize) * 4)
-    pure $ ShaderModuleCreateInfo
-             next flags code
-
-instance es ~ '[] => Zero (ShaderModuleCreateInfo es) where
-  zero = ShaderModuleCreateInfo
-           ()
-           zero
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core10/Shader.hs-boot b/src/Graphics/Vulkan/Core10/Shader.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/Shader.hs-boot
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.Shader  (ShaderModuleCreateInfo) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role ShaderModuleCreateInfo nominal
-data ShaderModuleCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (ShaderModuleCreateInfo es)
-instance Show (Chain es) => Show (ShaderModuleCreateInfo es)
-
-instance PeekChain es => FromCStruct (ShaderModuleCreateInfo es)
-
diff --git a/src/Graphics/Vulkan/Core10/SharedTypes.hs b/src/Graphics/Vulkan/Core10/SharedTypes.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/SharedTypes.hs
+++ /dev/null
@@ -1,662 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.SharedTypes  ( Offset2D(..)
-                                           , Offset3D(..)
-                                           , Extent2D(..)
-                                           , Extent3D(..)
-                                           , ImageSubresourceLayers(..)
-                                           , ImageSubresourceRange(..)
-                                           , ClearDepthStencilValue(..)
-                                           , ClearColorValue(..)
-                                           , ClearValue(..)
-                                           ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (runContT)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
--- | VkOffset2D - Structure specifying a two-dimensional offset
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPlaneCapabilitiesKHR',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D',
--- 'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.RectLayerKHR'
-data Offset2D = Offset2D
-  { -- | @x@ is the x offset.
-    x :: Int32
-  , -- | @y@ is the y offset.
-    y :: Int32
-  }
-  deriving (Typeable)
-deriving instance Show Offset2D
-
-instance ToCStruct Offset2D where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p Offset2D{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Int32)) (x)
-    poke ((p `plusPtr` 4 :: Ptr Int32)) (y)
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Int32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Int32)) (zero)
-    f
-
-instance FromCStruct Offset2D where
-  peekCStruct p = do
-    x <- peek @Int32 ((p `plusPtr` 0 :: Ptr Int32))
-    y <- peek @Int32 ((p `plusPtr` 4 :: Ptr Int32))
-    pure $ Offset2D
-             x y
-
-instance Storable Offset2D where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero Offset2D where
-  zero = Offset2D
-           zero
-           zero
-
-
--- | VkOffset3D - Structure specifying a three-dimensional offset
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.ImageBlit',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.ImageCopy',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.ImageResolve',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind'
-data Offset3D = Offset3D
-  { -- | @x@ is the x offset.
-    x :: Int32
-  , -- | @y@ is the y offset.
-    y :: Int32
-  , -- | @z@ is the z offset.
-    z :: Int32
-  }
-  deriving (Typeable)
-deriving instance Show Offset3D
-
-instance ToCStruct Offset3D where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p Offset3D{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Int32)) (x)
-    poke ((p `plusPtr` 4 :: Ptr Int32)) (y)
-    poke ((p `plusPtr` 8 :: Ptr Int32)) (z)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Int32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Int32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Int32)) (zero)
-    f
-
-instance FromCStruct Offset3D where
-  peekCStruct p = do
-    x <- peek @Int32 ((p `plusPtr` 0 :: Ptr Int32))
-    y <- peek @Int32 ((p `plusPtr` 4 :: Ptr Int32))
-    z <- peek @Int32 ((p `plusPtr` 8 :: Ptr Int32))
-    pure $ Offset3D
-             x y z
-
-instance Storable Offset3D where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero Offset3D where
-  zero = Offset3D
-           zero
-           zero
-           zero
-
-
--- | VkExtent2D - Structure specifying a two-dimensional extent
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayModeParametersKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPlaneCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplaySurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImagePropertiesNV',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D',
--- 'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.RectLayerKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.Pass.getRenderAreaGranularity'
-data Extent2D = Extent2D
-  { -- | @width@ is the width of the extent.
-    width :: Word32
-  , -- | @height@ is the height of the extent.
-    height :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show Extent2D
-
-instance ToCStruct Extent2D where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p Extent2D{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (width)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (height)
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct Extent2D where
-  peekCStruct p = do
-    width <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    height <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    pure $ Extent2D
-             width height
-
-instance Storable Extent2D where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero Extent2D where
-  zero = Extent2D
-           zero
-           zero
-
-
--- | VkExtent3D - Structure specifying a three-dimensional extent
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.ImageCopy',
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.ImageResolve',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.QueueFamilyProperties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind'
-data Extent3D = Extent3D
-  { -- | @width@ is the width of the extent.
-    width :: Word32
-  , -- | @height@ is the height of the extent.
-    height :: Word32
-  , -- | @depth@ is the depth of the extent.
-    depth :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show Extent3D
-
-instance ToCStruct Extent3D where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p Extent3D{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (width)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (height)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (depth)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct Extent3D where
-  peekCStruct p = do
-    width <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    height <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    depth <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pure $ Extent3D
-             width height depth
-
-instance Storable Extent3D where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero Extent3D where
-  zero = Extent3D
-           zero
-           zero
-           zero
-
-
--- | VkImageSubresourceLayers - Structure specifying an image subresource
--- layers
---
--- == Valid Usage
---
--- -   If @aspectMask@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
---     it /must/ not contain either of
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
---
--- -   @aspectMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'
---
--- -   @aspectMask@ /must/ not include
---     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@
---
--- -   @layerCount@ /must/ be greater than 0
---
--- == Valid Usage (Implicit)
---
--- -   @aspectMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits'
---     values
---
--- -   @aspectMask@ /must/ not be @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.ImageBlit',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.ImageCopy',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.ImageResolve'
-data ImageSubresourceLayers = ImageSubresourceLayers
-  { -- | @aspectMask@ is a combination of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits',
-    -- selecting the color, depth and\/or stencil aspects to be copied.
-    aspectMask :: ImageAspectFlags
-  , -- | @mipLevel@ is the mipmap level to copy from.
-    mipLevel :: Word32
-  , -- | @baseArrayLayer@ and @layerCount@ are the starting layer and number of
-    -- layers to copy.
-    baseArrayLayer :: Word32
-  , -- No documentation found for Nested "VkImageSubresourceLayers" "layerCount"
-    layerCount :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show ImageSubresourceLayers
-
-instance ToCStruct ImageSubresourceLayers where
-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageSubresourceLayers{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (mipLevel)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (baseArrayLayer)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (layerCount)
-    f
-  cStructSize = 16
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct ImageSubresourceLayers where
-  peekCStruct p = do
-    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 0 :: Ptr ImageAspectFlags))
-    mipLevel <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    baseArrayLayer <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    layerCount <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    pure $ ImageSubresourceLayers
-             aspectMask mipLevel baseArrayLayer layerCount
-
-instance Storable ImageSubresourceLayers where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageSubresourceLayers where
-  zero = ImageSubresourceLayers
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkImageSubresourceRange - Structure specifying an image subresource
--- range
---
--- = 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
--- 'Graphics.Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS' and
--- 'Graphics.Vulkan.Core10.APIConstants.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
--- 'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', is not a
--- multiple of 6, the last cube map in the array /must/ not be accessed.
---
--- @aspectMask@ /must/ be only
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
--- or
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
--- if @format@ is a color, depth-only or stencil-only format, respectively,
--- except if @format@ is a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>.
--- If using a depth\/stencil format with both depth and stencil components,
--- @aspectMask@ /must/ include at least one of
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
--- and
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
--- and /can/ include both.
---
--- When the 'ImageSubresourceRange' structure is used to select a subset of
--- the slices of a 3D image’s mip level in order to create a 2D or 2D array
--- image view of a 3D image created with
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT',
--- @baseArrayLayer@ and @layerCount@ specify the first slice index and the
--- number of slices to include in the created image view. Such an image
--- view /can/ be used as a framebuffer attachment that refers only to the
--- specified range of slices of the selected mip level. However, any layout
--- transitions performed on such an attachment view during a render pass
--- instance still apply to the entire subresource referenced which includes
--- all the slices of the selected mip level.
---
--- When using an image view 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 image view 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 image view 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 'Graphics.Vulkan.Core10.ImageView.ComponentMapping' @components@
--- member 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, framebuffer attachments, and any
--- 'Graphics.Vulkan.Core10.Handles.ImageView' used with a combined image
--- sampler that enables
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
---
--- When creating a 'Graphics.Vulkan.Core10.Handles.ImageView', if
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
--- is enabled in the sampler, the @aspectMask@ of a @subresourceRange@ used
--- by the 'Graphics.Vulkan.Core10.Handles.ImageView' /must/ be
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'.
---
--- When creating a 'Graphics.Vulkan.Core10.Handles.ImageView', if sampler
--- Y′CBCR conversion is not enabled in the sampler and the image @format@
--- is
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>,
--- the image /must/ have been created with
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
--- and the @aspectMask@ of the 'Graphics.Vulkan.Core10.Handles.ImageView'’s
--- @subresourceRange@ /must/ be
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--- or
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'.
---
--- == Valid Usage
---
--- -   If @levelCount@ is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', it
---     /must/ be greater than @0@
---
--- -   If @layerCount@ is not
---     'Graphics.Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', it
---     /must/ be greater than @0@
---
--- -   If @aspectMask@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
---     then it /must/ not include any of
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
---
--- -   @aspectMask@ /must/ not include
---     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@
---
--- == Valid Usage (Implicit)
---
--- -   @aspectMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits'
---     values
---
--- -   @aspectMask@ /must/ not be @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
--- 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
--- 'Graphics.Vulkan.Core10.ImageView.ImageViewCreateInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearDepthStencilImage'
-data ImageSubresourceRange = ImageSubresourceRange
-  { -- | @aspectMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits'
-    -- specifying which aspect(s) of the image are included in the view.
-    aspectMask :: ImageAspectFlags
-  , -- | @baseMipLevel@ is the first mipmap level accessible to the view.
-    baseMipLevel :: Word32
-  , -- | @levelCount@ is the number of mipmap levels (starting from
-    -- @baseMipLevel@) accessible to the view.
-    levelCount :: Word32
-  , -- | @baseArrayLayer@ is the first array layer accessible to the view.
-    baseArrayLayer :: Word32
-  , -- | @layerCount@ is the number of array layers (starting from
-    -- @baseArrayLayer@) accessible to the view.
-    layerCount :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show ImageSubresourceRange
-
-instance ToCStruct ImageSubresourceRange where
-  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageSubresourceRange{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (baseMipLevel)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (levelCount)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (baseArrayLayer)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (layerCount)
-    f
-  cStructSize = 20
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct ImageSubresourceRange where
-  peekCStruct p = do
-    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 0 :: Ptr ImageAspectFlags))
-    baseMipLevel <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    levelCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    baseArrayLayer <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    layerCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ ImageSubresourceRange
-             aspectMask baseMipLevel levelCount baseArrayLayer layerCount
-
-instance Storable ImageSubresourceRange where
-  sizeOf ~_ = 20
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageSubresourceRange where
-  zero = ImageSubresourceRange
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkClearDepthStencilValue - Structure specifying a clear depth stencil
--- value
---
--- == Valid Usage
---
--- -   Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled
---     @depth@ /must/ be between @0.0@ and @1.0@, inclusive
---
--- = See Also
---
--- 'ClearValue',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearDepthStencilImage'
-data ClearDepthStencilValue = ClearDepthStencilValue
-  { -- | @depth@ is the clear value for the depth aspect of the depth\/stencil
-    -- attachment. It is a floating-point value which is automatically
-    -- converted to the attachment’s format.
-    depth :: Float
-  , -- | @stencil@ is the clear value for the stencil aspect of the
-    -- depth\/stencil attachment. It is a 32-bit integer value which is
-    -- converted to the attachment’s format by taking the appropriate number of
-    -- LSBs.
-    stencil :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show ClearDepthStencilValue
-
-instance ToCStruct ClearDepthStencilValue where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ClearDepthStencilValue{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (depth))
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (stencil)
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct ClearDepthStencilValue where
-  peekCStruct p = do
-    depth <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
-    stencil <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    pure $ ClearDepthStencilValue
-             ((\(CFloat a) -> a) depth) stencil
-
-instance Storable ClearDepthStencilValue where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ClearDepthStencilValue where
-  zero = ClearDepthStencilValue
-           zero
-           zero
-
-
-data ClearColorValue
-  = Float32 ((Float, Float, Float, Float))
-  | Int32 ((Int32, Int32, Int32, Int32))
-  | Uint32 ((Word32, Word32, Word32, Word32))
-  deriving (Show)
-
-instance ToCStruct ClearColorValue where
-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct :: Ptr ClearColorValue -> ClearColorValue -> IO a -> IO a
-  pokeCStruct p = (. const) . runContT .  \case
-    Float32 v -> lift $ do
-      let pFloat32 = lowerArrayPtr (castPtr @_ @(FixedArray 4 CFloat) p)
-      case (v) of
-        (e0, e1, e2, e3) -> do
-          poke (pFloat32 :: Ptr CFloat) (CFloat (e0))
-          poke (pFloat32 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-          poke (pFloat32 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
-          poke (pFloat32 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-    Int32 v -> lift $ do
-      let pInt32 = lowerArrayPtr (castPtr @_ @(FixedArray 4 Int32) p)
-      case (v) of
-        (e0, e1, e2, e3) -> do
-          poke (pInt32 :: Ptr Int32) (e0)
-          poke (pInt32 `plusPtr` 4 :: Ptr Int32) (e1)
-          poke (pInt32 `plusPtr` 8 :: Ptr Int32) (e2)
-          poke (pInt32 `plusPtr` 12 :: Ptr Int32) (e3)
-    Uint32 v -> lift $ do
-      let pUint32 = lowerArrayPtr (castPtr @_ @(FixedArray 4 Word32) p)
-      case (v) of
-        (e0, e1, e2, e3) -> do
-          poke (pUint32 :: Ptr Word32) (e0)
-          poke (pUint32 `plusPtr` 4 :: Ptr Word32) (e1)
-          poke (pUint32 `plusPtr` 8 :: Ptr Word32) (e2)
-          poke (pUint32 `plusPtr` 12 :: Ptr Word32) (e3)
-  pokeZeroCStruct :: Ptr ClearColorValue -> IO b -> IO b
-  pokeZeroCStruct _ f = f
-  cStructSize = 16
-  cStructAlignment = 4
-
-instance Zero ClearColorValue where
-  zero = Float32 (zero, zero, zero, zero)
-
-
-data ClearValue
-  = Color ClearColorValue
-  | DepthStencil ClearDepthStencilValue
-  deriving (Show)
-
-instance ToCStruct ClearValue where
-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct :: Ptr ClearValue -> ClearValue -> IO a -> IO a
-  pokeCStruct p = (. const) . runContT .  \case
-    Color v -> ContT $ pokeCStruct (castPtr @_ @ClearColorValue p) (v) . ($ ())
-    DepthStencil v -> ContT $ pokeCStruct (castPtr @_ @ClearDepthStencilValue p) (v) . ($ ())
-  pokeZeroCStruct :: Ptr ClearValue -> IO b -> IO b
-  pokeZeroCStruct _ f = f
-  cStructSize = 16
-  cStructAlignment = 4
-
-instance Zero ClearValue where
-  zero = Color zero
-
diff --git a/src/Graphics/Vulkan/Core10/SharedTypes.hs-boot b/src/Graphics/Vulkan/Core10/SharedTypes.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/SharedTypes.hs-boot
+++ /dev/null
@@ -1,72 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.SharedTypes  ( ClearDepthStencilValue
-                                           , Extent2D
-                                           , Extent3D
-                                           , ImageSubresourceLayers
-                                           , ImageSubresourceRange
-                                           , Offset2D
-                                           , Offset3D
-                                           , ClearColorValue
-                                           ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ClearDepthStencilValue
-
-instance ToCStruct ClearDepthStencilValue
-instance Show ClearDepthStencilValue
-
-instance FromCStruct ClearDepthStencilValue
-
-
-data Extent2D
-
-instance ToCStruct Extent2D
-instance Show Extent2D
-
-instance FromCStruct Extent2D
-
-
-data Extent3D
-
-instance ToCStruct Extent3D
-instance Show Extent3D
-
-instance FromCStruct Extent3D
-
-
-data ImageSubresourceLayers
-
-instance ToCStruct ImageSubresourceLayers
-instance Show ImageSubresourceLayers
-
-instance FromCStruct ImageSubresourceLayers
-
-
-data ImageSubresourceRange
-
-instance ToCStruct ImageSubresourceRange
-instance Show ImageSubresourceRange
-
-instance FromCStruct ImageSubresourceRange
-
-
-data Offset2D
-
-instance ToCStruct Offset2D
-instance Show Offset2D
-
-instance FromCStruct Offset2D
-
-
-data Offset3D
-
-instance ToCStruct Offset3D
-instance Show Offset3D
-
-instance FromCStruct Offset3D
-
-
-data ClearColorValue
-
diff --git a/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs b/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs
+++ /dev/null
@@ -1,1306 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.SparseResourceMemoryManagement  ( getImageSparseMemoryRequirements
-                                                              , getPhysicalDeviceSparseImageFormatProperties
-                                                              , queueBindSparse
-                                                              , SparseImageFormatProperties(..)
-                                                              , SparseImageMemoryRequirements(..)
-                                                              , SparseMemoryBind(..)
-                                                              , SparseImageMemoryBind(..)
-                                                              , SparseBufferMemoryBindInfo(..)
-                                                              , SparseImageOpaqueMemoryBindInfo(..)
-                                                              , SparseImageMemoryBindInfo(..)
-                                                              , BindSparseInfo(..)
-                                                              ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetImageSparseMemoryRequirements))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkQueueBindSparse))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupBindSparseInfo)
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.SharedTypes (Extent3D)
-import Graphics.Vulkan.Core10.Handles (Fence)
-import Graphics.Vulkan.Core10.Handles (Fence(..))
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.Core10.Enums.Format (Format(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.Core10.Handles (Image(..))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
-import Graphics.Vulkan.Core10.Image (ImageSubresource)
-import Graphics.Vulkan.Core10.Enums.ImageTiling (ImageTiling)
-import Graphics.Vulkan.Core10.Enums.ImageTiling (ImageTiling(..))
-import Graphics.Vulkan.Core10.Enums.ImageType (ImageType)
-import Graphics.Vulkan.Core10.Enums.ImageType (ImageType(..))
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSparseImageFormatProperties))
-import Graphics.Vulkan.Core10.SharedTypes (Offset3D)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Handles (Queue)
-import Graphics.Vulkan.Core10.Handles (Queue(..))
-import Graphics.Vulkan.Core10.Handles (Queue_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits(..))
-import Graphics.Vulkan.Core10.Handles (Semaphore)
-import Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits (SparseImageFormatFlags)
-import Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits (SparseMemoryBindFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (TimelineSemaphoreSubmitInfo)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_SPARSE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetImageSparseMemoryRequirements
-  :: FunPtr (Ptr Device_T -> Image -> Ptr Word32 -> Ptr SparseImageMemoryRequirements -> IO ()) -> Ptr Device_T -> Image -> Ptr Word32 -> Ptr SparseImageMemoryRequirements -> IO ()
-
--- | vkGetImageSparseMemoryRequirements - Query the memory requirements for a
--- sparse image
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the image.
---
--- -   @image@ is the 'Graphics.Vulkan.Core10.Handles.Image' 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 'SparseImageMemoryRequirements' structures.
---
--- = 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
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.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
--- 'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@
--- than would be obtained by adding together memory sizes for all
--- 'SparseImageMemoryRequirements' returned by
--- 'getImageSparseMemoryRequirements'. This /may/ occur when the
--- implementation requires unused padding in the address range describing
--- the resource.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     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@ 'SparseImageMemoryRequirements'
---     structures
---
--- -   @image@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Image', 'SparseImageMemoryRequirements'
-getImageSparseMemoryRequirements :: forall io . MonadIO io => Device -> Image -> io (("sparseMemoryRequirements" ::: Vector SparseImageMemoryRequirements))
-getImageSparseMemoryRequirements device image = liftIO . evalContT $ do
-  let vkGetImageSparseMemoryRequirements' = mkVkGetImageSparseMemoryRequirements (pVkGetImageSparseMemoryRequirements (deviceCmds (device :: Device)))
-  let device' = deviceHandle (device)
-  pPSparseMemoryRequirementCount <- ContT $ bracket (callocBytes @Word32 4) free
-  lift $ vkGetImageSparseMemoryRequirements' device' (image) (pPSparseMemoryRequirementCount) (nullPtr)
-  pSparseMemoryRequirementCount <- lift $ peek @Word32 pPSparseMemoryRequirementCount
-  pPSparseMemoryRequirements <- ContT $ bracket (callocBytes @SparseImageMemoryRequirements ((fromIntegral (pSparseMemoryRequirementCount)) * 48)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPSparseMemoryRequirements `advancePtrBytes` (i * 48) :: Ptr SparseImageMemoryRequirements) . ($ ())) [0..(fromIntegral (pSparseMemoryRequirementCount)) - 1]
-  lift $ vkGetImageSparseMemoryRequirements' device' (image) (pPSparseMemoryRequirementCount) ((pPSparseMemoryRequirements))
-  pSparseMemoryRequirementCount' <- lift $ peek @Word32 pPSparseMemoryRequirementCount
-  pSparseMemoryRequirements' <- lift $ generateM (fromIntegral (pSparseMemoryRequirementCount')) (\i -> peekCStruct @SparseImageMemoryRequirements (((pPSparseMemoryRequirements) `advancePtrBytes` (48 * (i)) :: Ptr SparseImageMemoryRequirements)))
-  pure $ (pSparseMemoryRequirements')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSparseImageFormatProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> SampleCountFlagBits -> ImageUsageFlags -> ImageTiling -> Ptr Word32 -> Ptr SparseImageFormatProperties -> IO ()) -> Ptr PhysicalDevice_T -> Format -> ImageType -> SampleCountFlagBits -> ImageUsageFlags -> ImageTiling -> Ptr Word32 -> Ptr SparseImageFormatProperties -> IO ()
-
--- | vkGetPhysicalDeviceSparseImageFormatProperties - Retrieve properties of
--- an image format applied to sparse images
---
--- = 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.Enums.SampleCountFlagBits.SampleCountFlagBits'.
---
--- -   @usage@ is a bitmask describing the intended usage of the image.
---
--- -   @tiling@ is the tiling arrangement of the texel blocks 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
---     'SparseImageFormatProperties' structures.
---
--- = 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
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.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 'SparseImageFormatProperties' data.
---
--- Depth\/stencil images with depth and stencil data interleaved into a
--- single plane will return a single 'SparseImageFormatProperties'
--- structure with the @aspectMask@ set to
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
--- |
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'.
---
--- == Valid Usage
---
--- -   @samples@ /must/ be a bit value that is set in
---     'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@sampleCounts@
---     returned by
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties'
---     with @format@, @type@, @tiling@, and @usage@ equal to those in this
---     command and @flags@ equal to the value that is set in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ when the
---     image is created
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @format@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- -   @type@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageType.ImageType' value
---
--- -   @samples@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
---     value
---
--- -   @usage@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
---     values
---
--- -   @usage@ /must/ not be @0@
---
--- -   @tiling@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling' 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@ 'SparseImageFormatProperties'
---     structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling',
--- 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType',
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
--- 'SparseImageFormatProperties'
-getPhysicalDeviceSparseImageFormatProperties :: forall io . MonadIO io => PhysicalDevice -> Format -> ImageType -> ("samples" ::: SampleCountFlagBits) -> ImageUsageFlags -> ImageTiling -> io (("properties" ::: Vector SparseImageFormatProperties))
-getPhysicalDeviceSparseImageFormatProperties physicalDevice format type' samples usage tiling = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSparseImageFormatProperties' = mkVkGetPhysicalDeviceSparseImageFormatProperties (pVkGetPhysicalDeviceSparseImageFormatProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  lift $ vkGetPhysicalDeviceSparseImageFormatProperties' physicalDevice' (format) (type') (samples) (usage) (tiling) (pPPropertyCount) (nullPtr)
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @SparseImageFormatProperties ((fromIntegral (pPropertyCount)) * 20)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 20) :: Ptr SparseImageFormatProperties) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  lift $ vkGetPhysicalDeviceSparseImageFormatProperties' physicalDevice' (format) (type') (samples) (usage) (tiling) (pPPropertyCount) ((pPProperties))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @SparseImageFormatProperties (((pPProperties) `advancePtrBytes` (20 * (i)) :: Ptr SparseImageFormatProperties)))
-  pure $ (pProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkQueueBindSparse
-  :: FunPtr (Ptr Queue_T -> Word32 -> Ptr (BindSparseInfo a) -> Fence -> IO Result) -> Ptr Queue_T -> Word32 -> Ptr (BindSparseInfo a) -> Fence -> IO Result
-
--- | vkQueueBindSparse - Bind device memory to a sparse resource object
---
--- = 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 a pointer to an array of 'BindSparseInfo' 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.APIConstants.NULL_HANDLE', it
---     defines a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation>.
---
--- = Description
---
--- 'queueBindSparse' is a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-submission queue submission command>,
--- with each batch defined by an element of @pBindInfo@ as a
--- 'BindSparseInfo' 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 'queueBindSparse' 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization the synchronization chapter>.
---
--- == Valid Usage
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @fence@ /must/ be unsignaled
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @fence@ /must/ not be associated with any other queue command that
---     has not yet completed execution on that queue
---
--- -   Each element of the @pSignalSemaphores@ member of each element of
---     @pBindInfo@ /must/ be unsignaled when the semaphore signal operation
---     it defines is executed on the device
---
--- -   When a semaphore wait operation referring to a binary semaphore
---     defined by any element of the @pWaitSemaphores@ member of any
---     element of @pBindInfo@ executes on @queue@, there /must/ be no other
---     queues waiting on the same semaphore
---
--- -   All elements of the @pWaitSemaphores@ member of all elements of
---     @pBindInfo@ member referring to a binary semaphore /must/ be
---     semaphores that are signaled, or have
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operations>
---     previously submitted for execution
---
--- -   All elements of the @pWaitSemaphores@ member of all elements of
---     @pBindInfo@ created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
---     /must/ reference a semaphore signal operation that has been
---     submitted for execution and any semaphore signal operations on which
---     it depends (if any) /must/ have also been submitted for execution
---
--- == Valid Usage (Implicit)
---
--- -   @queue@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Queue'
---     handle
---
--- -   If @bindInfoCount@ is not @0@, @pBindInfo@ /must/ be a valid pointer
---     to an array of @bindInfoCount@ valid 'BindSparseInfo' structures
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @fence@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Fence'
---     handle
---
--- -   The @queue@ /must/ support sparse binding operations
---
--- -   Both of @fence@, and @queue@ that are valid handles of non-ignored
---     parameters /must/ have been created, allocated, or retrieved from
---     the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @queue@ /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
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | -                                                                                                                          | -                                                                                                                      | SPARSE_BINDING                                                                                                        | -                                                                                                                                   |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'BindSparseInfo', 'Graphics.Vulkan.Core10.Handles.Fence',
--- 'Graphics.Vulkan.Core10.Handles.Queue'
-queueBindSparse :: forall a io . (PokeChain a, MonadIO io) => Queue -> ("bindInfo" ::: Vector (BindSparseInfo a)) -> Fence -> io ()
-queueBindSparse queue bindInfo fence = liftIO . evalContT $ do
-  let vkQueueBindSparse' = mkVkQueueBindSparse (pVkQueueBindSparse (deviceCmds (queue :: Queue)))
-  pPBindInfo <- ContT $ allocaBytesAligned @(BindSparseInfo _) ((Data.Vector.length (bindInfo)) * 96) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindInfo `plusPtr` (96 * (i)) :: Ptr (BindSparseInfo _)) (e) . ($ ())) (bindInfo)
-  r <- lift $ vkQueueBindSparse' (queueHandle (queue)) ((fromIntegral (Data.Vector.length $ (bindInfo)) :: Word32)) (pPBindInfo) (fence)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkSparseImageFormatProperties - Structure specifying sparse image format
--- properties
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent3D',
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
--- 'Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits.SparseImageFormatFlags',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.SparseImageFormatProperties2',
--- 'SparseImageMemoryRequirements',
--- 'getPhysicalDeviceSparseImageFormatProperties'
-data SparseImageFormatProperties = SparseImageFormatProperties
-  { -- | @aspectMask@ is a bitmask
-    -- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits'
-    -- specifying which aspects of the image the properties apply to.
-    aspectMask :: ImageAspectFlags
-  , -- | @imageGranularity@ is the width, height, and depth of the sparse image
-    -- block in texels or compressed texel blocks.
-    imageGranularity :: Extent3D
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits.SparseImageFormatFlagBits'
-    -- specifying additional information about the sparse resource.
-    flags :: SparseImageFormatFlags
-  }
-  deriving (Typeable)
-deriving instance Show SparseImageFormatProperties
-
-instance ToCStruct SparseImageFormatProperties where
-  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SparseImageFormatProperties{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)
-    ContT $ pokeCStruct ((p `plusPtr` 4 :: Ptr Extent3D)) (imageGranularity) . ($ ())
-    lift $ poke ((p `plusPtr` 16 :: Ptr SparseImageFormatFlags)) (flags)
-    lift $ f
-  cStructSize = 20
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 4 :: Ptr Extent3D)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct SparseImageFormatProperties where
-  peekCStruct p = do
-    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 0 :: Ptr ImageAspectFlags))
-    imageGranularity <- peekCStruct @Extent3D ((p `plusPtr` 4 :: Ptr Extent3D))
-    flags <- peek @SparseImageFormatFlags ((p `plusPtr` 16 :: Ptr SparseImageFormatFlags))
-    pure $ SparseImageFormatProperties
-             aspectMask imageGranularity flags
-
-instance Zero SparseImageFormatProperties where
-  zero = SparseImageFormatProperties
-           zero
-           zero
-           zero
-
-
--- | VkSparseImageMemoryRequirements - Structure specifying sparse image
--- memory requirements
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'SparseImageFormatProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.SparseImageMemoryRequirements2',
--- 'getImageSparseMemoryRequirements'
-data SparseImageMemoryRequirements = SparseImageMemoryRequirements
-  { -- No documentation found for Nested "VkSparseImageMemoryRequirements" "formatProperties"
-    formatProperties :: SparseImageFormatProperties
-  , -- | @imageMipTailFirstLod@ is the first mip level at which image
-    -- subresources are included in the mip tail region.
-    imageMipTailFirstLod :: Word32
-  , -- | @imageMipTailSize@ is the memory size (in bytes) of the mip tail region.
-    -- If @formatProperties.flags@ contains
-    -- 'Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits.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.
-    imageMipTailSize :: DeviceSize
-  , -- | @imageMipTailOffset@ is the opaque memory offset used with
-    -- 'SparseImageOpaqueMemoryBindInfo' to bind the mip tail region(s).
-    imageMipTailOffset :: DeviceSize
-  , -- | @imageMipTailStride@ is the offset stride between each array-layer’s mip
-    -- tail, if @formatProperties.flags@ does not contain
-    -- 'Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits.SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT'
-    -- (otherwise the value is undefined).
-    imageMipTailStride :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show SparseImageMemoryRequirements
-
-instance ToCStruct SparseImageMemoryRequirements where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SparseImageMemoryRequirements{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr SparseImageFormatProperties)) (formatProperties) . ($ ())
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (imageMipTailFirstLod)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (imageMipTailSize)
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (imageMipTailOffset)
-    lift $ poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (imageMipTailStride)
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr SparseImageFormatProperties)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero)
-    lift $ f
-
-instance FromCStruct SparseImageMemoryRequirements where
-  peekCStruct p = do
-    formatProperties <- peekCStruct @SparseImageFormatProperties ((p `plusPtr` 0 :: Ptr SparseImageFormatProperties))
-    imageMipTailFirstLod <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    imageMipTailSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    imageMipTailOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
-    imageMipTailStride <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
-    pure $ SparseImageMemoryRequirements
-             formatProperties imageMipTailFirstLod imageMipTailSize imageMipTailOffset imageMipTailStride
-
-instance Zero SparseImageMemoryRequirements where
-  zero = SparseImageMemoryRequirements
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkSparseMemoryBind - Structure specifying a sparse memory bind operation
---
--- = Description
---
--- The /binding range/ [@resourceOffset@, @resourceOffset@ + @size@) has
--- different constraints based on @flags@. If @flags@ contains
--- 'Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits.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 'SparseImageMemoryRequirements' 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
--- 'SparseImageMemoryRequirements'::@formatProperties.flags@ contains
--- 'Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits.SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT'.
---
--- If @flags@ does not contain
--- 'Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SPARSE_MEMORY_BIND_METADATA_BIT',
--- the binding range /must/ be within the range
--- [0,'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@).
---
--- == Valid Usage
---
--- -   If @memory@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @memory@ and
---     @memoryOffset@ /must/ match the memory requirements of the resource,
---     as described in section
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-association>
---
--- -   If @memory@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @memory@ /must/
---     not have been created with a memory type that reports
---     'Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits.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@
---
--- -   If @memory@ was created with
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
---     not equal to @0@, at least one handle type it contained /must/ also
---     have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     when the resource was created
---
--- -   If @memory@ was created by a memory import operation, the external
---     handle type of the imported memory /must/ also have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     when the resource was created
---
--- == Valid Usage (Implicit)
---
--- -   If @memory@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @memory@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'SparseBufferMemoryBindInfo', 'SparseImageOpaqueMemoryBindInfo',
--- 'Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlags'
-data SparseMemoryBind = SparseMemoryBind
-  { -- | @resourceOffset@ is the offset into the resource.
-    resourceOffset :: DeviceSize
-  , -- | @size@ is the size of the memory region to be bound.
-    size :: DeviceSize
-  , -- | @memory@ is the 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
-    -- that the range of the resource is bound to. If @memory@ is
-    -- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', the range is unbound.
-    memory :: DeviceMemory
-  , -- | @memoryOffset@ is the offset into the
-    -- 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object to bind the
-    -- resource range to. If @memory@ is
-    -- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', this value is
-    -- ignored.
-    memoryOffset :: DeviceSize
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlagBits'
-    -- specifying usage of the binding operation.
-    flags :: SparseMemoryBindFlags
-  }
-  deriving (Typeable)
-deriving instance Show SparseMemoryBind
-
-instance ToCStruct SparseMemoryBind where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SparseMemoryBind{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (resourceOffset)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (size)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (memoryOffset)
-    poke ((p `plusPtr` 32 :: Ptr SparseMemoryBindFlags)) (flags)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct SparseMemoryBind where
-  peekCStruct p = do
-    resourceOffset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
-    size <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
-    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
-    memoryOffset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    flags <- peek @SparseMemoryBindFlags ((p `plusPtr` 32 :: Ptr SparseMemoryBindFlags))
-    pure $ SparseMemoryBind
-             resourceOffset size memory memoryOffset flags
-
-instance Storable SparseMemoryBind where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SparseMemoryBind where
-  zero = SparseMemoryBind
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkSparseImageMemoryBind - Structure specifying sparse image memory bind
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyAliased sparse aliased residency>
---     feature is not enabled, and if any other resources are bound to
---     ranges of @memory@, the range of @memory@ being bound /must/ not
---     overlap with those bound ranges
---
--- -   @memory@ and @memoryOffset@ /must/ match the memory requirements of
---     the calling command’s @image@, as described in section
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-association>
---
--- -   @subresource@ /must/ be a valid image subresource for @image@ (see
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views>)
---
--- -   @offset.x@ /must/ be a multiple of the sparse image block width
---     ('SparseImageFormatProperties'::@imageGranularity.width@) of the
---     image
---
--- -   @extent.width@ /must/ either be a multiple of the sparse image block
---     width of the image, or else (@extent.width@ + @offset.x@) /must/
---     equal the width of the image subresource
---
--- -   @offset.y@ /must/ be a multiple of the sparse image block height
---     ('SparseImageFormatProperties'::@imageGranularity.height@) of the
---     image
---
--- -   @extent.height@ /must/ either be a multiple of the sparse image
---     block height of the image, or else (@extent.height@ + @offset.y@)
---     /must/ equal the height of the image subresource
---
--- -   @offset.z@ /must/ be a multiple of the sparse image block depth
---     ('SparseImageFormatProperties'::@imageGranularity.depth@) of the
---     image
---
--- -   @extent.depth@ /must/ either be a multiple of the sparse image block
---     depth of the image, or else (@extent.depth@ + @offset.z@) /must/
---     equal the depth of the image subresource
---
--- -   If @memory@ was created with
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
---     not equal to @0@, at least one handle type it contained /must/ also
---     have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     when the image was created
---
--- -   If @memory@ was created by a memory import operation, the external
---     handle type of the imported memory /must/ also have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     when @image@ was created
---
--- == Valid Usage (Implicit)
---
--- -   @subresource@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.ImageSubresource' structure
---
--- -   If @memory@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @memory@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent3D',
--- 'Graphics.Vulkan.Core10.Image.ImageSubresource',
--- 'Graphics.Vulkan.Core10.SharedTypes.Offset3D',
--- 'SparseImageMemoryBindInfo',
--- 'Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlags'
-data SparseImageMemoryBind = SparseImageMemoryBind
-  { -- | @subresource@ is the image /aspect/ and region of interest in the image.
-    subresource :: ImageSubresource
-  , -- | @offset@ are the coordinates of the first texel within the image
-    -- subresource to bind.
-    offset :: Offset3D
-  , -- | @extent@ is the size in texels of the region within the image
-    -- subresource to bind. The extent /must/ be a multiple of the sparse image
-    -- block dimensions, except when binding sparse image blocks along the edge
-    -- of an image subresource it /can/ instead be such that any coordinate of
-    -- @offset@ + @extent@ equals the corresponding dimensions of the image
-    -- subresource.
-    extent :: Extent3D
-  , -- | @memory@ is the 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
-    -- that the sparse image blocks of the image are bound to. If @memory@ is
-    -- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', the sparse image
-    -- blocks are unbound.
-    memory :: DeviceMemory
-  , -- | @memoryOffset@ is an offset into
-    -- 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object. If @memory@ is
-    -- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', this value is
-    -- ignored.
-    memoryOffset :: DeviceSize
-  , -- | @flags@ are sparse memory binding flags.
-    flags :: SparseMemoryBindFlags
-  }
-  deriving (Typeable)
-deriving instance Show SparseImageMemoryBind
-
-instance ToCStruct SparseImageMemoryBind where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SparseImageMemoryBind{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresource)) (subresource) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Offset3D)) (offset) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent3D)) (extent) . ($ ())
-    lift $ poke ((p `plusPtr` 40 :: Ptr DeviceMemory)) (memory)
-    lift $ poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (memoryOffset)
-    lift $ poke ((p `plusPtr` 56 :: Ptr SparseMemoryBindFlags)) (flags)
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresource)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Offset3D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent3D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (zero)
-    lift $ f
-
-instance FromCStruct SparseImageMemoryBind where
-  peekCStruct p = do
-    subresource <- peekCStruct @ImageSubresource ((p `plusPtr` 0 :: Ptr ImageSubresource))
-    offset <- peekCStruct @Offset3D ((p `plusPtr` 12 :: Ptr Offset3D))
-    extent <- peekCStruct @Extent3D ((p `plusPtr` 24 :: Ptr Extent3D))
-    memory <- peek @DeviceMemory ((p `plusPtr` 40 :: Ptr DeviceMemory))
-    memoryOffset <- peek @DeviceSize ((p `plusPtr` 48 :: Ptr DeviceSize))
-    flags <- peek @SparseMemoryBindFlags ((p `plusPtr` 56 :: Ptr SparseMemoryBindFlags))
-    pure $ SparseImageMemoryBind
-             subresource offset extent memory memoryOffset flags
-
-instance Zero SparseImageMemoryBind where
-  zero = SparseImageMemoryBind
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkSparseBufferMemoryBindInfo - Structure specifying a sparse buffer
--- memory bind operation
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'BindSparseInfo', 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'SparseMemoryBind'
-data SparseBufferMemoryBindInfo = SparseBufferMemoryBindInfo
-  { -- | @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
-    -- handle
-    buffer :: Buffer
-  , -- | @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid
-    -- 'SparseMemoryBind' structures
-    binds :: Vector SparseMemoryBind
-  }
-  deriving (Typeable)
-deriving instance Show SparseBufferMemoryBindInfo
-
-instance ToCStruct SparseBufferMemoryBindInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SparseBufferMemoryBindInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Buffer)) (buffer)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (binds)) :: Word32))
-    pPBinds' <- ContT $ allocaBytesAligned @SparseMemoryBind ((Data.Vector.length (binds)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (40 * (i)) :: Ptr SparseMemoryBind) (e) . ($ ())) (binds)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind))) (pPBinds')
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Buffer)) (zero)
-    pPBinds' <- ContT $ allocaBytesAligned @SparseMemoryBind ((Data.Vector.length (mempty)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (40 * (i)) :: Ptr SparseMemoryBind) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind))) (pPBinds')
-    lift $ f
-
-instance FromCStruct SparseBufferMemoryBindInfo where
-  peekCStruct p = do
-    buffer <- peek @Buffer ((p `plusPtr` 0 :: Ptr Buffer))
-    bindCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pBinds <- peek @(Ptr SparseMemoryBind) ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind)))
-    pBinds' <- generateM (fromIntegral bindCount) (\i -> peekCStruct @SparseMemoryBind ((pBinds `advancePtrBytes` (40 * (i)) :: Ptr SparseMemoryBind)))
-    pure $ SparseBufferMemoryBindInfo
-             buffer pBinds'
-
-instance Zero SparseBufferMemoryBindInfo where
-  zero = SparseBufferMemoryBindInfo
-           zero
-           mempty
-
-
--- | VkSparseImageOpaqueMemoryBindInfo - Structure specifying sparse image
--- opaque memory bind info
---
--- == Valid Usage
---
--- -   If the @flags@ member of any element of @pBinds@ contains
---     'Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SPARSE_MEMORY_BIND_METADATA_BIT',
---     the binding range defined /must/ be within the mip tail region of
---     the metadata aspect of @image@
---
--- == Valid Usage (Implicit)
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid
---     'SparseMemoryBind' structures
---
--- -   @bindCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'BindSparseInfo', 'Graphics.Vulkan.Core10.Handles.Image',
--- 'SparseMemoryBind'
-data SparseImageOpaqueMemoryBindInfo = SparseImageOpaqueMemoryBindInfo
-  { -- | @image@ is the 'Graphics.Vulkan.Core10.Handles.Image' object to be
-    -- bound.
-    image :: Image
-  , -- | @pBinds@ is a pointer to an array of 'SparseMemoryBind' structures.
-    binds :: Vector SparseMemoryBind
-  }
-  deriving (Typeable)
-deriving instance Show SparseImageOpaqueMemoryBindInfo
-
-instance ToCStruct SparseImageOpaqueMemoryBindInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SparseImageOpaqueMemoryBindInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Image)) (image)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (binds)) :: Word32))
-    pPBinds' <- ContT $ allocaBytesAligned @SparseMemoryBind ((Data.Vector.length (binds)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (40 * (i)) :: Ptr SparseMemoryBind) (e) . ($ ())) (binds)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind))) (pPBinds')
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Image)) (zero)
-    pPBinds' <- ContT $ allocaBytesAligned @SparseMemoryBind ((Data.Vector.length (mempty)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (40 * (i)) :: Ptr SparseMemoryBind) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind))) (pPBinds')
-    lift $ f
-
-instance FromCStruct SparseImageOpaqueMemoryBindInfo where
-  peekCStruct p = do
-    image <- peek @Image ((p `plusPtr` 0 :: Ptr Image))
-    bindCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pBinds <- peek @(Ptr SparseMemoryBind) ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind)))
-    pBinds' <- generateM (fromIntegral bindCount) (\i -> peekCStruct @SparseMemoryBind ((pBinds `advancePtrBytes` (40 * (i)) :: Ptr SparseMemoryBind)))
-    pure $ SparseImageOpaqueMemoryBindInfo
-             image pBinds'
-
-instance Zero SparseImageOpaqueMemoryBindInfo where
-  zero = SparseImageOpaqueMemoryBindInfo
-           zero
-           mempty
-
-
--- | VkSparseImageMemoryBindInfo - Structure specifying sparse image memory
--- bind info
---
--- == Valid Usage
---
--- -   The @subresource.mipLevel@ member of each element of @pBinds@ /must/
---     be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   The @subresource.arrayLayer@ member of each element of @pBinds@
---     /must/ be less than the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
---     created
---
--- -   @image@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
---     set
---
--- == Valid Usage (Implicit)
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid
---     'SparseImageMemoryBind' structures
---
--- -   @bindCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'BindSparseInfo', 'Graphics.Vulkan.Core10.Handles.Image',
--- 'SparseImageMemoryBind'
-data SparseImageMemoryBindInfo = SparseImageMemoryBindInfo
-  { -- | @image@ is the 'Graphics.Vulkan.Core10.Handles.Image' object to be bound
-    image :: Image
-  , -- | @pBinds@ is a pointer to an array of 'SparseImageMemoryBind' structures
-    binds :: Vector SparseImageMemoryBind
-  }
-  deriving (Typeable)
-deriving instance Show SparseImageMemoryBindInfo
-
-instance ToCStruct SparseImageMemoryBindInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SparseImageMemoryBindInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Image)) (image)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (binds)) :: Word32))
-    pPBinds' <- ContT $ allocaBytesAligned @SparseImageMemoryBind ((Data.Vector.length (binds)) * 64) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (64 * (i)) :: Ptr SparseImageMemoryBind) (e) . ($ ())) (binds)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseImageMemoryBind))) (pPBinds')
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Image)) (zero)
-    pPBinds' <- ContT $ allocaBytesAligned @SparseImageMemoryBind ((Data.Vector.length (mempty)) * 64) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (64 * (i)) :: Ptr SparseImageMemoryBind) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseImageMemoryBind))) (pPBinds')
-    lift $ f
-
-instance FromCStruct SparseImageMemoryBindInfo where
-  peekCStruct p = do
-    image <- peek @Image ((p `plusPtr` 0 :: Ptr Image))
-    bindCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pBinds <- peek @(Ptr SparseImageMemoryBind) ((p `plusPtr` 16 :: Ptr (Ptr SparseImageMemoryBind)))
-    pBinds' <- generateM (fromIntegral bindCount) (\i -> peekCStruct @SparseImageMemoryBind ((pBinds `advancePtrBytes` (64 * (i)) :: Ptr SparseImageMemoryBind)))
-    pure $ SparseImageMemoryBindInfo
-             image pBinds'
-
-instance Zero SparseImageMemoryBindInfo where
-  zero = SparseImageMemoryBindInfo
-           zero
-           mempty
-
-
--- | VkBindSparseInfo - Structure specifying a sparse binding operation
---
--- == Valid Usage
---
--- -   If any element of @pWaitSemaphores@ or @pSignalSemaphores@ was
---     created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---     then the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
---     structure
---
--- -   If the @pNext@ chain of this structure includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
---     structure and any element of @pWaitSemaphores@ was created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---     then its @waitSemaphoreValueCount@ member /must/ equal
---     @waitSemaphoreCount@
---
--- -   If the @pNext@ chain of this structure includes a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
---     structure and any element of @pSignalSemaphores@ was created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---     then its @signalSemaphoreValueCount@ member /must/ equal
---     @signalSemaphoreCount@
---
--- -   For each element of @pSignalSemaphores@ created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---     the corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pSignalSemaphoreValues
---     /must/ have a value greater than the current value of the semaphore
---     when the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
---     is executed
---
--- -   For each element of @pWaitSemaphores@ created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---     the corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pWaitSemaphoreValues
---     /must/ have a value which does not differ from the current value of
---     the semaphore or from the value of any outstanding semaphore wait or
---     signal operation on that semaphore by more than
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
---
--- -   For each element of @pSignalSemaphores@ created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---     the corresponding element of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pSignalSemaphoreValues
---     /must/ have a value which does not differ from the current value of
---     the semaphore or from the value of any outstanding semaphore wait or
---     signal operation on that semaphore by more than
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_SPARSE_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupBindSparseInfo'
---     or
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a
---     valid pointer to an array of @waitSemaphoreCount@ valid
---     'Graphics.Vulkan.Core10.Handles.Semaphore' handles
---
--- -   If @bufferBindCount@ is not @0@, @pBufferBinds@ /must/ be a valid
---     pointer to an array of @bufferBindCount@ valid
---     'SparseBufferMemoryBindInfo' structures
---
--- -   If @imageOpaqueBindCount@ is not @0@, @pImageOpaqueBinds@ /must/ be
---     a valid pointer to an array of @imageOpaqueBindCount@ valid
---     'SparseImageOpaqueMemoryBindInfo' structures
---
--- -   If @imageBindCount@ is not @0@, @pImageBinds@ /must/ be a valid
---     pointer to an array of @imageBindCount@ valid
---     'SparseImageMemoryBindInfo' structures
---
--- -   If @signalSemaphoreCount@ is not @0@, @pSignalSemaphores@ /must/ be
---     a valid pointer to an array of @signalSemaphoreCount@ valid
---     'Graphics.Vulkan.Core10.Handles.Semaphore' handles
---
--- -   Both of the elements of @pSignalSemaphores@, and the elements of
---     @pWaitSemaphores@ that are valid handles of non-ignored parameters
---     /must/ have been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'SparseBufferMemoryBindInfo', 'SparseImageMemoryBindInfo',
--- 'SparseImageOpaqueMemoryBindInfo',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'queueBindSparse'
-data BindSparseInfo (es :: [Type]) = BindSparseInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @pWaitSemaphores@ is a pointer to an array of semaphores upon which to
-    -- wait on before the sparse binding operations for this batch begin
-    -- execution. If semaphores to wait on are provided, they define a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-waiting semaphore wait operation>.
-    waitSemaphores :: Vector Semaphore
-  , -- | @pBufferBinds@ is a pointer to an array of 'SparseBufferMemoryBindInfo'
-    -- structures.
-    bufferBinds :: Vector SparseBufferMemoryBindInfo
-  , -- | @pImageOpaqueBinds@ is a pointer to an array of
-    -- 'SparseImageOpaqueMemoryBindInfo' structures, indicating opaque sparse
-    -- image bindings to perform.
-    imageOpaqueBinds :: Vector SparseImageOpaqueMemoryBindInfo
-  , -- | @pImageBinds@ is a pointer to an array of 'SparseImageMemoryBindInfo'
-    -- structures, indicating sparse image bindings to perform.
-    imageBinds :: Vector SparseImageMemoryBindInfo
-  , -- | @pSignalSemaphores@ is a pointer to an array of semaphores which will be
-    -- signaled when the sparse binding operations for this batch have
-    -- completed execution. If semaphores to be signaled are provided, they
-    -- define a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>.
-    signalSemaphores :: Vector Semaphore
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (BindSparseInfo es)
-
-instance Extensible BindSparseInfo where
-  extensibleType = STRUCTURE_TYPE_BIND_SPARSE_INFO
-  setNext x next = x{next = next}
-  getNext BindSparseInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends BindSparseInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @TimelineSemaphoreSubmitInfo = Just f
-    | Just Refl <- eqT @e @DeviceGroupBindSparseInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (BindSparseInfo es) where
-  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindSparseInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_SPARSE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (waitSemaphores)) :: Word32))
-    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (waitSemaphores)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (waitSemaphores)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (bufferBinds)) :: Word32))
-    pPBufferBinds' <- ContT $ allocaBytesAligned @SparseBufferMemoryBindInfo ((Data.Vector.length (bufferBinds)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferBinds' `plusPtr` (24 * (i)) :: Ptr SparseBufferMemoryBindInfo) (e) . ($ ())) (bufferBinds)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SparseBufferMemoryBindInfo))) (pPBufferBinds')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (imageOpaqueBinds)) :: Word32))
-    pPImageOpaqueBinds' <- ContT $ allocaBytesAligned @SparseImageOpaqueMemoryBindInfo ((Data.Vector.length (imageOpaqueBinds)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageOpaqueBinds' `plusPtr` (24 * (i)) :: Ptr SparseImageOpaqueMemoryBindInfo) (e) . ($ ())) (imageOpaqueBinds)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SparseImageOpaqueMemoryBindInfo))) (pPImageOpaqueBinds')
-    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (imageBinds)) :: Word32))
-    pPImageBinds' <- ContT $ allocaBytesAligned @SparseImageMemoryBindInfo ((Data.Vector.length (imageBinds)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageBinds' `plusPtr` (24 * (i)) :: Ptr SparseImageMemoryBindInfo) (e) . ($ ())) (imageBinds)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr SparseImageMemoryBindInfo))) (pPImageBinds')
-    lift $ poke ((p `plusPtr` 80 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (signalSemaphores)) :: Word32))
-    pPSignalSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (signalSemaphores)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (signalSemaphores)
-    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr Semaphore))) (pPSignalSemaphores')
-    lift $ f
-  cStructSize = 96
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_SPARSE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
-    pPBufferBinds' <- ContT $ allocaBytesAligned @SparseBufferMemoryBindInfo ((Data.Vector.length (mempty)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferBinds' `plusPtr` (24 * (i)) :: Ptr SparseBufferMemoryBindInfo) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SparseBufferMemoryBindInfo))) (pPBufferBinds')
-    pPImageOpaqueBinds' <- ContT $ allocaBytesAligned @SparseImageOpaqueMemoryBindInfo ((Data.Vector.length (mempty)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageOpaqueBinds' `plusPtr` (24 * (i)) :: Ptr SparseImageOpaqueMemoryBindInfo) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SparseImageOpaqueMemoryBindInfo))) (pPImageOpaqueBinds')
-    pPImageBinds' <- ContT $ allocaBytesAligned @SparseImageMemoryBindInfo ((Data.Vector.length (mempty)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageBinds' `plusPtr` (24 * (i)) :: Ptr SparseImageMemoryBindInfo) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr SparseImageMemoryBindInfo))) (pPImageBinds')
-    pPSignalSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr Semaphore))) (pPSignalSemaphores')
-    lift $ f
-
-instance PeekChain es => FromCStruct (BindSparseInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    waitSemaphoreCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pWaitSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 24 :: Ptr (Ptr Semaphore)))
-    pWaitSemaphores' <- generateM (fromIntegral waitSemaphoreCount) (\i -> peek @Semaphore ((pWaitSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
-    bufferBindCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pBufferBinds <- peek @(Ptr SparseBufferMemoryBindInfo) ((p `plusPtr` 40 :: Ptr (Ptr SparseBufferMemoryBindInfo)))
-    pBufferBinds' <- generateM (fromIntegral bufferBindCount) (\i -> peekCStruct @SparseBufferMemoryBindInfo ((pBufferBinds `advancePtrBytes` (24 * (i)) :: Ptr SparseBufferMemoryBindInfo)))
-    imageOpaqueBindCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pImageOpaqueBinds <- peek @(Ptr SparseImageOpaqueMemoryBindInfo) ((p `plusPtr` 56 :: Ptr (Ptr SparseImageOpaqueMemoryBindInfo)))
-    pImageOpaqueBinds' <- generateM (fromIntegral imageOpaqueBindCount) (\i -> peekCStruct @SparseImageOpaqueMemoryBindInfo ((pImageOpaqueBinds `advancePtrBytes` (24 * (i)) :: Ptr SparseImageOpaqueMemoryBindInfo)))
-    imageBindCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    pImageBinds <- peek @(Ptr SparseImageMemoryBindInfo) ((p `plusPtr` 72 :: Ptr (Ptr SparseImageMemoryBindInfo)))
-    pImageBinds' <- generateM (fromIntegral imageBindCount) (\i -> peekCStruct @SparseImageMemoryBindInfo ((pImageBinds `advancePtrBytes` (24 * (i)) :: Ptr SparseImageMemoryBindInfo)))
-    signalSemaphoreCount <- peek @Word32 ((p `plusPtr` 80 :: Ptr Word32))
-    pSignalSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 88 :: Ptr (Ptr Semaphore)))
-    pSignalSemaphores' <- generateM (fromIntegral signalSemaphoreCount) (\i -> peek @Semaphore ((pSignalSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
-    pure $ BindSparseInfo
-             next pWaitSemaphores' pBufferBinds' pImageOpaqueBinds' pImageBinds' pSignalSemaphores'
-
-instance es ~ '[] => Zero (BindSparseInfo es) where
-  zero = BindSparseInfo
-           ()
-           mempty
-           mempty
-           mempty
-           mempty
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs-boot b/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs-boot
+++ /dev/null
@@ -1,81 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core10.SparseResourceMemoryManagement  ( BindSparseInfo
-                                                              , SparseBufferMemoryBindInfo
-                                                              , SparseImageFormatProperties
-                                                              , SparseImageMemoryBind
-                                                              , SparseImageMemoryBindInfo
-                                                              , SparseImageMemoryRequirements
-                                                              , SparseImageOpaqueMemoryBindInfo
-                                                              , SparseMemoryBind
-                                                              ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role BindSparseInfo nominal
-data BindSparseInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (BindSparseInfo es)
-instance Show (Chain es) => Show (BindSparseInfo es)
-
-instance PeekChain es => FromCStruct (BindSparseInfo es)
-
-
-data SparseBufferMemoryBindInfo
-
-instance ToCStruct SparseBufferMemoryBindInfo
-instance Show SparseBufferMemoryBindInfo
-
-instance FromCStruct SparseBufferMemoryBindInfo
-
-
-data SparseImageFormatProperties
-
-instance ToCStruct SparseImageFormatProperties
-instance Show SparseImageFormatProperties
-
-instance FromCStruct SparseImageFormatProperties
-
-
-data SparseImageMemoryBind
-
-instance ToCStruct SparseImageMemoryBind
-instance Show SparseImageMemoryBind
-
-instance FromCStruct SparseImageMemoryBind
-
-
-data SparseImageMemoryBindInfo
-
-instance ToCStruct SparseImageMemoryBindInfo
-instance Show SparseImageMemoryBindInfo
-
-instance FromCStruct SparseImageMemoryBindInfo
-
-
-data SparseImageMemoryRequirements
-
-instance ToCStruct SparseImageMemoryRequirements
-instance Show SparseImageMemoryRequirements
-
-instance FromCStruct SparseImageMemoryRequirements
-
-
-data SparseImageOpaqueMemoryBindInfo
-
-instance ToCStruct SparseImageOpaqueMemoryBindInfo
-instance Show SparseImageOpaqueMemoryBindInfo
-
-instance FromCStruct SparseImageOpaqueMemoryBindInfo
-
-
-data SparseMemoryBind
-
-instance ToCStruct SparseMemoryBind
-instance Show SparseMemoryBind
-
-instance FromCStruct SparseMemoryBind
-
diff --git a/src/Graphics/Vulkan/Core11.hs b/src/Graphics/Vulkan/Core11.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11.hs
+++ /dev/null
@@ -1,62 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11  ( pattern API_VERSION_1_1
-                               , module Graphics.Vulkan.Core11.DeviceInitialization
-                               , module Graphics.Vulkan.Core11.Enums
-                               , module Graphics.Vulkan.Core11.Handles
-                               , module Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory
-                               , module Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities
-                               , 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_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_maintenance3
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters
-                               , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers
-                               ) where
-import Graphics.Vulkan.Core11.DeviceInitialization
-import Graphics.Vulkan.Core11.Enums
-import Graphics.Vulkan.Core11.Handles
-import Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory
-import Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities
-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_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_maintenance3
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers
-import Data.Word (Word32)
-import Graphics.Vulkan.Version (pattern MAKE_VERSION)
-pattern API_VERSION_1_1 :: Word32
-pattern API_VERSION_1_1 = MAKE_VERSION 1 1 0
-
diff --git a/src/Graphics/Vulkan/Core11/DeviceInitialization.hs b/src/Graphics/Vulkan/Core11/DeviceInitialization.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/DeviceInitialization.hs
+++ /dev/null
@@ -1,77 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.DeviceInitialization  (enumerateInstanceVersion) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (castFunPtr)
-import Foreign.Ptr (nullPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Foreign.Storable (Storable(peek))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Ptr (Ptr(Ptr))
-import Data.Word (Word32)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Dynamic (getInstanceProcAddr')
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkEnumerateInstanceVersion
-  :: FunPtr (Ptr Word32 -> IO Result) -> Ptr Word32 -> IO Result
-
--- | vkEnumerateInstanceVersion - Query instance-level version before
--- instance creation
---
--- = Parameters
---
--- -   @pApiVersion@ is a pointer to a @uint32_t@, which is the version of
---     Vulkan supported by instance-level functionality, encoded as
---     described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.
---
--- = Description
---
--- Note
---
--- The intended behaviour of 'enumerateInstanceVersion' is that an
--- implementation /should/ not need to perform memory allocations and
--- /should/ unconditionally return
--- 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'. The loader, and any
--- enabled layers, /may/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' in the
--- case of a failed memory allocation.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- No cross-references are available
-enumerateInstanceVersion :: forall io . MonadIO io => io (("apiVersion" ::: Word32))
-enumerateInstanceVersion  = liftIO . evalContT $ do
-  vkEnumerateInstanceVersion' <- lift $ mkVkEnumerateInstanceVersion . castFunPtr @_ @(("pApiVersion" ::: Ptr Word32) -> IO Result) <$> getInstanceProcAddr' nullPtr (Ptr "vkEnumerateInstanceVersion"#)
-  pPApiVersion <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkEnumerateInstanceVersion' (pPApiVersion)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pApiVersion <- lift $ peek @Word32 pPApiVersion
-  pure $ (pApiVersion)
-
diff --git a/src/Graphics/Vulkan/Core11/Enums.hs b/src/Graphics/Vulkan/Core11/Enums.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums.hs
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums  ( module Graphics.Vulkan.Core11.Enums.ChromaLocation
-                                     , module Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags
-                                     , module Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags
-                                     , module Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType
-                                     , module Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.FenceImportFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.PointClippingBehavior
-                                     , module Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion
-                                     , module Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange
-                                     , module Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits
-                                     , module Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin
-                                     ) where
-import Graphics.Vulkan.Core11.Enums.ChromaLocation
-import Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags
-import Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags
-import Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType
-import Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits
-import Graphics.Vulkan.Core11.Enums.FenceImportFlagBits
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits
-import Graphics.Vulkan.Core11.Enums.PointClippingBehavior
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange
-import Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits
-import Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits
-import Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ChromaLocation.hs b/src/Graphics/Vulkan/Core11/Enums/ChromaLocation.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ChromaLocation.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ChromaLocation  (ChromaLocation( CHROMA_LOCATION_COSITED_EVEN
-                                                                   , CHROMA_LOCATION_MIDPOINT
-                                                                   , ..
-                                                                   )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkChromaLocation - Position of downsampled chroma samples
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
-newtype ChromaLocation = ChromaLocation Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'CHROMA_LOCATION_COSITED_EVEN' specifies that downsampled chroma samples
--- are aligned with luma samples with even coordinates.
-pattern CHROMA_LOCATION_COSITED_EVEN = ChromaLocation 0
--- | 'CHROMA_LOCATION_MIDPOINT' specifies that downsampled chroma samples are
--- located half way between each even luma sample and the nearest higher
--- odd luma sample.
-pattern CHROMA_LOCATION_MIDPOINT = ChromaLocation 1
-{-# complete CHROMA_LOCATION_COSITED_EVEN,
-             CHROMA_LOCATION_MIDPOINT :: ChromaLocation #-}
-
-instance Show ChromaLocation where
-  showsPrec p = \case
-    CHROMA_LOCATION_COSITED_EVEN -> showString "CHROMA_LOCATION_COSITED_EVEN"
-    CHROMA_LOCATION_MIDPOINT -> showString "CHROMA_LOCATION_MIDPOINT"
-    ChromaLocation x -> showParen (p >= 11) (showString "ChromaLocation " . showsPrec 11 x)
-
-instance Read ChromaLocation where
-  readPrec = parens (choose [("CHROMA_LOCATION_COSITED_EVEN", pure CHROMA_LOCATION_COSITED_EVEN)
-                            , ("CHROMA_LOCATION_MIDPOINT", pure CHROMA_LOCATION_MIDPOINT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ChromaLocation")
-                       v <- step readPrec
-                       pure (ChromaLocation v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ChromaLocation.hs-boot b/src/Graphics/Vulkan/Core11/Enums/ChromaLocation.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ChromaLocation.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ChromaLocation  (ChromaLocation) where
-
-
-
-data ChromaLocation
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs b/src/Graphics/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs
+++ /dev/null
@@ -1,46 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags  (CommandPoolTrimFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkCommandPoolTrimFlags - Reserved for future use
---
--- = Description
---
--- 'CommandPoolTrimFlags' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance1.trimCommandPool',
--- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance1.trimCommandPoolKHR'
-newtype CommandPoolTrimFlags = CommandPoolTrimFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show CommandPoolTrimFlags where
-  showsPrec p = \case
-    CommandPoolTrimFlags x -> showParen (p >= 11) (showString "CommandPoolTrimFlags 0x" . showHex x)
-
-instance Read CommandPoolTrimFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CommandPoolTrimFlags")
-                       v <- step readPrec
-                       pure (CommandPoolTrimFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs-boot b/src/Graphics/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags  (CommandPoolTrimFlags) where
-
-
-
-data CommandPoolTrimFlags
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs b/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags  (DescriptorUpdateTemplateCreateFlags(..)) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkDescriptorUpdateTemplateCreateFlags - Reserved for future use
---
--- = Description
---
--- 'DescriptorUpdateTemplateCreateFlags' is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo'
-newtype DescriptorUpdateTemplateCreateFlags = DescriptorUpdateTemplateCreateFlags Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show DescriptorUpdateTemplateCreateFlags where
-  showsPrec p = \case
-    DescriptorUpdateTemplateCreateFlags x -> showParen (p >= 11) (showString "DescriptorUpdateTemplateCreateFlags 0x" . showHex x)
-
-instance Read DescriptorUpdateTemplateCreateFlags where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DescriptorUpdateTemplateCreateFlags")
-                       v <- step readPrec
-                       pure (DescriptorUpdateTemplateCreateFlags v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs-boot b/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags  (DescriptorUpdateTemplateCreateFlags) where
-
-
-
-data DescriptorUpdateTemplateCreateFlags
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs b/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType  (DescriptorUpdateTemplateType( DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET
-                                                                                               , DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
-                                                                                               , ..
-                                                                                               )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkDescriptorUpdateTemplateType - Indicates the valid usage of the
--- descriptor update template
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo'
-newtype DescriptorUpdateTemplateType = DescriptorUpdateTemplateType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET' specifies that the
--- descriptor update template will be used for descriptor set updates only.
-pattern DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = DescriptorUpdateTemplateType 0
--- | 'DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR' specifies that
--- the descriptor update template will be used for push descriptor updates
--- only.
-pattern DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = DescriptorUpdateTemplateType 1
-{-# complete DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
-             DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR :: DescriptorUpdateTemplateType #-}
-
-instance Show DescriptorUpdateTemplateType where
-  showsPrec p = \case
-    DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET -> showString "DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"
-    DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR -> showString "DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR"
-    DescriptorUpdateTemplateType x -> showParen (p >= 11) (showString "DescriptorUpdateTemplateType " . showsPrec 11 x)
-
-instance Read DescriptorUpdateTemplateType where
-  readPrec = parens (choose [("DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET", pure DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)
-                            , ("DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR", pure DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DescriptorUpdateTemplateType")
-                       v <- step readPrec
-                       pure (DescriptorUpdateTemplateType v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs-boot b/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType  (DescriptorUpdateTemplateType) where
-
-
-
-data DescriptorUpdateTemplateType
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits  ( ExternalFenceFeatureFlagBits( EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT
-                                                                                                , EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT
-                                                                                                , ..
-                                                                                                )
-                                                                  , ExternalFenceFeatureFlags
-                                                                  ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkExternalFenceFeatureFlagBits - Bitfield describing features of an
--- external fence handle type
---
--- = See Also
---
--- 'ExternalFenceFeatureFlags'
-newtype ExternalFenceFeatureFlagBits = ExternalFenceFeatureFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT' specifies handles of this type
--- /can/ be exported from Vulkan fence objects.
-pattern EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = ExternalFenceFeatureFlagBits 0x00000001
--- | 'EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT' specifies handles of this type
--- /can/ be imported to Vulkan fence objects.
-pattern EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = ExternalFenceFeatureFlagBits 0x00000002
-
-type ExternalFenceFeatureFlags = ExternalFenceFeatureFlagBits
-
-instance Show ExternalFenceFeatureFlagBits where
-  showsPrec p = \case
-    EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT -> showString "EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"
-    EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT -> showString "EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"
-    ExternalFenceFeatureFlagBits x -> showParen (p >= 11) (showString "ExternalFenceFeatureFlagBits 0x" . showHex x)
-
-instance Read ExternalFenceFeatureFlagBits where
-  readPrec = parens (choose [("EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT", pure EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT)
-                            , ("EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT", pure EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ExternalFenceFeatureFlagBits")
-                       v <- step readPrec
-                       pure (ExternalFenceFeatureFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs-boot b/src/Graphics/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits  ( ExternalFenceFeatureFlagBits
-                                                                  , ExternalFenceFeatureFlags
-                                                                  ) where
-
-
-
-data ExternalFenceFeatureFlagBits
-
-type ExternalFenceFeatureFlags = ExternalFenceFeatureFlagBits
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs
+++ /dev/null
@@ -1,111 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits  ( ExternalFenceHandleTypeFlagBits( EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT
-                                                                                                      , EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT
-                                                                                                      , EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
-                                                                                                      , EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
-                                                                                                      , ..
-                                                                                                      )
-                                                                     , ExternalFenceHandleTypeFlags
-                                                                     ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkExternalFenceHandleTypeFlagBits - Bitmask of valid external fence
--- handle types
---
--- = Description
---
--- Some external fence handle types can only be shared within the same
--- underlying physical device and\/or the same driver version, as defined
--- in the following table:
---
--- +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | Handle type                                       | 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@ | 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@deviceUUID@ |
--- +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT'        | Must match                                                                                                          | Must match                                                                                                          |
--- +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT'     | Must match                                                                                                          | Must match                                                                                                          |
--- +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' | Must match                                                                                                          | Must match                                                                                                          |
--- +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT'          | No restriction                                                                                                      | No restriction                                                                                                      |
--- +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
---
--- External fence handle types compatibility
---
--- = See Also
---
--- 'ExternalFenceHandleTypeFlags',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.FenceGetFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.FenceGetWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.ImportFenceFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.ImportFenceWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.PhysicalDeviceExternalFenceInfo'
-newtype ExternalFenceHandleTypeFlagBits = ExternalFenceHandleTypeFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT' specifies a POSIX file
--- descriptor handle that has only limited valid usage outside of Vulkan
--- and other compatible APIs. It /must/ be compatible with the POSIX system
--- calls @dup@, @dup2@, @close@, and the non-standard system call @dup3@.
--- Additionally, it /must/ be transportable over a socket using an
--- @SCM_RIGHTS@ control message. It owns a reference to the underlying
--- synchronization primitive represented by its Vulkan fence object.
-pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = ExternalFenceHandleTypeFlagBits 0x00000001
--- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT' specifies an NT handle
--- that has only limited valid usage outside of Vulkan and other compatible
--- APIs. It /must/ be compatible with the functions @DuplicateHandle@,
--- @CloseHandle@, @CompareObjectHandles@, @GetHandleInformation@, and
--- @SetHandleInformation@. It owns a reference to the underlying
--- synchronization primitive represented by its Vulkan fence object.
-pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = ExternalFenceHandleTypeFlagBits 0x00000002
--- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' specifies a global
--- share handle that has only limited valid usage outside of Vulkan and
--- other compatible APIs. It is not compatible with any native APIs. It
--- does not own a reference to the underlying synchronization primitive
--- represented by its Vulkan fence object, and will therefore become
--- invalid when all Vulkan fence objects associated with it are destroyed.
-pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = ExternalFenceHandleTypeFlagBits 0x00000004
--- | 'EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT' specifies a POSIX file
--- descriptor handle to a Linux Sync File or Android Fence. It can be used
--- with any native API accepting a valid sync file or fence as input. It
--- owns a reference to the underlying synchronization primitive associated
--- with the file descriptor. Implementations which support importing this
--- handle type /must/ accept any type of sync or fence FD supported by the
--- native system they are running on.
-pattern EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = ExternalFenceHandleTypeFlagBits 0x00000008
-
-type ExternalFenceHandleTypeFlags = ExternalFenceHandleTypeFlagBits
-
-instance Show ExternalFenceHandleTypeFlagBits where
-  showsPrec p = \case
-    EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT -> showString "EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"
-    EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT -> showString "EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"
-    EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT -> showString "EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
-    EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT -> showString "EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"
-    ExternalFenceHandleTypeFlagBits x -> showParen (p >= 11) (showString "ExternalFenceHandleTypeFlagBits 0x" . showHex x)
-
-instance Read ExternalFenceHandleTypeFlagBits where
-  readPrec = parens (choose [("EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT", pure EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT)
-                            , ("EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT", pure EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT)
-                            , ("EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT", pure EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT)
-                            , ("EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT", pure EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ExternalFenceHandleTypeFlagBits")
-                       v <- step readPrec
-                       pure (ExternalFenceHandleTypeFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs-boot b/src/Graphics/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits  ( ExternalFenceHandleTypeFlagBits
-                                                                     , ExternalFenceHandleTypeFlags
-                                                                     ) where
-
-
-
-data ExternalFenceHandleTypeFlagBits
-
-type ExternalFenceHandleTypeFlags = ExternalFenceHandleTypeFlagBits
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs
+++ /dev/null
@@ -1,85 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits  ( ExternalMemoryFeatureFlagBits( EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
-                                                                                                  , EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT
-                                                                                                  , EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT
-                                                                                                  , ..
-                                                                                                  )
-                                                                   , ExternalMemoryFeatureFlags
-                                                                   ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkExternalMemoryFeatureFlagBits - Bitmask specifying features of an
--- external memory handle type
---
--- = Description
---
--- Because their semantics in external APIs roughly align with that of an
--- image or buffer with a dedicated allocation in Vulkan, implementations
--- are /required/ to report 'EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT'
--- for the following external handle types:
---
--- Implementations /must/ not report
--- 'EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT' for buffers with external
--- handle type
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'.
--- Implementations /must/ not report
--- 'EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT' for images or buffers with
--- external handle type
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT',
--- or
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT'.
---
--- = See Also
---
--- 'ExternalMemoryFeatureFlags'
-newtype ExternalMemoryFeatureFlagBits = ExternalMemoryFeatureFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT' specifies that images or
--- buffers created with the specified parameters and handle type /must/ use
--- the mechanisms defined by
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'
--- and
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
--- to create (or import) a dedicated allocation for the image or buffer.
-pattern EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = ExternalMemoryFeatureFlagBits 0x00000001
--- | 'EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT' specifies that handles of this
--- type /can/ be exported from Vulkan memory objects.
-pattern EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = ExternalMemoryFeatureFlagBits 0x00000002
--- | 'EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT' specifies that handles of this
--- type /can/ be imported as Vulkan memory objects.
-pattern EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = ExternalMemoryFeatureFlagBits 0x00000004
-
-type ExternalMemoryFeatureFlags = ExternalMemoryFeatureFlagBits
-
-instance Show ExternalMemoryFeatureFlagBits where
-  showsPrec p = \case
-    EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT -> showString "EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"
-    EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT -> showString "EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"
-    EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT -> showString "EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"
-    ExternalMemoryFeatureFlagBits x -> showParen (p >= 11) (showString "ExternalMemoryFeatureFlagBits 0x" . showHex x)
-
-instance Read ExternalMemoryFeatureFlagBits where
-  readPrec = parens (choose [("EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT", pure EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT)
-                            , ("EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT", pure EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT)
-                            , ("EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT", pure EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ExternalMemoryFeatureFlagBits")
-                       v <- step readPrec
-                       pure (ExternalMemoryFeatureFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs-boot b/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits  ( ExternalMemoryFeatureFlagBits
-                                                                   , ExternalMemoryFeatureFlags
-                                                                   ) where
-
-
-
-data ExternalMemoryFeatureFlagBits
-
-type ExternalMemoryFeatureFlags = ExternalMemoryFeatureFlagBits
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs
+++ /dev/null
@@ -1,207 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits  ( ExternalMemoryHandleTypeFlagBits( EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
-                                                                                                        , EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
-                                                                                                        , EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
-                                                                                                        , EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
-                                                                                                        , EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
-                                                                                                        , EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT
-                                                                                                        , EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
-                                                                                                        , EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
-                                                                                                        , EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT
-                                                                                                        , EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
-                                                                                                        , EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT
-                                                                                                        , ..
-                                                                                                        )
-                                                                      , ExternalMemoryHandleTypeFlags
-                                                                      ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkExternalMemoryHandleTypeFlagBits - Bit specifying external memory
--- handle types
---
--- = Description
---
--- Some external memory handle types can only be shared within the same
--- underlying physical device and\/or the same driver version, as defined
--- in the following table:
---
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | Handle type                                                       | 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@ | 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@deviceUUID@ |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT'                       | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT'                    | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT'                | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT'                   | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT'               | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT'                      | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT'                  | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT'             | No restriction                                                                                                      | No restriction                                                                                                      |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT'  | No restriction                                                                                                      | No restriction                                                                                                      |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT'                     | No restriction                                                                                                      | No restriction                                                                                                      |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID' | No restriction                                                                                                      | No restriction                                                                                                      |
--- +-------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
---
--- External memory handle types compatibility
---
--- Note
---
--- The above table does not restrict the drivers and devices with which
--- 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT' and
--- 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT' /may/
--- be shared, as these handle types inherently mean memory that does not
--- come from the same device, as they import memory from the host or a
--- foreign device, respectively.
---
--- Note
---
--- Even though the above table does not restrict the drivers and devices
--- with which 'EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT' /may/ be
--- shared, query mechanisms exist in the Vulkan API that prevent the import
--- of incompatible dma-bufs (such as
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdPropertiesKHR')
--- and that prevent incompatible usage of dma-bufs (such as
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalBufferInfo'
--- and
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo').
---
--- = See Also
---
--- 'ExternalMemoryHandleTypeFlags',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.ImportMemoryFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryGetFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryGetWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalBufferInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.getMemoryHostPointerPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandlePropertiesKHR'
-newtype ExternalMemoryHandleTypeFlagBits = ExternalMemoryHandleTypeFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT' specifies a POSIX file
--- descriptor handle that has only limited valid usage outside of Vulkan
--- and other compatible APIs. It /must/ be compatible with the POSIX system
--- calls @dup@, @dup2@, @close@, and the non-standard system call @dup3@.
--- Additionally, it /must/ be transportable over a socket using an
--- @SCM_RIGHTS@ control message. It owns a reference to the underlying
--- memory resource represented by its Vulkan memory object.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = ExternalMemoryHandleTypeFlagBits 0x00000001
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT' specifies an NT handle
--- that has only limited valid usage outside of Vulkan and other compatible
--- APIs. It /must/ be compatible with the functions @DuplicateHandle@,
--- @CloseHandle@, @CompareObjectHandles@, @GetHandleInformation@, and
--- @SetHandleInformation@. It owns a reference to the underlying memory
--- resource represented by its Vulkan memory object.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = ExternalMemoryHandleTypeFlagBits 0x00000002
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' specifies a global
--- share handle that has only limited valid usage outside of Vulkan and
--- other compatible APIs. It is not compatible with any native APIs. It
--- does not own a reference to the underlying memory resource represented
--- its Vulkan memory object, and will therefore become invalid when all
--- Vulkan memory objects associated with it are destroyed.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = ExternalMemoryHandleTypeFlagBits 0x00000004
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT' specifies an NT handle
--- returned by @IDXGIResource1@::@CreateSharedHandle@ referring to a
--- Direct3D 10 or 11 texture resource. It owns a reference to the memory
--- used by the Direct3D resource.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = ExternalMemoryHandleTypeFlagBits 0x00000008
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT' specifies a global
--- share handle returned by @IDXGIResource@::@GetSharedHandle@ referring to
--- a Direct3D 10 or 11 texture resource. It does not own a reference to the
--- underlying Direct3D resource, and will therefore become invalid when all
--- Vulkan memory objects and Direct3D resources associated with it are
--- destroyed.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = ExternalMemoryHandleTypeFlagBits 0x00000010
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT' specifies an NT handle
--- returned by @ID3D12Device@::@CreateSharedHandle@ referring to a Direct3D
--- 12 heap resource. It owns a reference to the resources used by the
--- Direct3D heap.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = ExternalMemoryHandleTypeFlagBits 0x00000020
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT' specifies an NT handle
--- returned by @ID3D12Device@::@CreateSharedHandle@ referring to a Direct3D
--- 12 committed resource. It owns a reference to the memory used by the
--- Direct3D resource.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = ExternalMemoryHandleTypeFlagBits 0x00000040
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT'
--- specifies a host pointer to /host mapped foreign memory/. It does not
--- own a reference to the underlying memory resource, and will therefore
--- become invalid if the foreign memory is unmapped or otherwise becomes no
--- longer available.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = ExternalMemoryHandleTypeFlagBits 0x00000100
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT' specifies a host
--- pointer returned by a host memory allocation command. It does not own a
--- reference to the underlying memory resource, and will therefore become
--- invalid if the host memory is freed.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = ExternalMemoryHandleTypeFlagBits 0x00000080
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
--- specifies an 'Graphics.Vulkan.Extensions.WSITypes.AHardwareBuffer'
--- object defined by the Android NDK. See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer Android Hardware Buffers>
--- for more details of this handle type.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = ExternalMemoryHandleTypeFlagBits 0x00000400
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT' is a file descriptor for a
--- Linux dma_buf. It owns a reference to the underlying memory resource
--- represented by its Vulkan memory object.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = ExternalMemoryHandleTypeFlagBits 0x00000200
-
-type ExternalMemoryHandleTypeFlags = ExternalMemoryHandleTypeFlagBits
-
-instance Show ExternalMemoryHandleTypeFlagBits where
-  showsPrec p = \case
-    EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"
-    EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"
-    EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
-    EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"
-    EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"
-    EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"
-    EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"
-    EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"
-    EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"
-    EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"
-    EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT"
-    ExternalMemoryHandleTypeFlagBits x -> showParen (p >= 11) (showString "ExternalMemoryHandleTypeFlagBits 0x" . showHex x)
-
-instance Read ExternalMemoryHandleTypeFlagBits where
-  readPrec = parens (choose [("EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT", pure EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT", pure EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID", pure EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT", pure EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ExternalMemoryHandleTypeFlagBits")
-                       v <- step readPrec
-                       pure (ExternalMemoryHandleTypeFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs-boot b/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits  ( ExternalMemoryHandleTypeFlagBits
-                                                                      , ExternalMemoryHandleTypeFlags
-                                                                      ) where
-
-
-
-data ExternalMemoryHandleTypeFlagBits
-
-type ExternalMemoryHandleTypeFlags = ExternalMemoryHandleTypeFlagBits
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits  ( ExternalSemaphoreFeatureFlagBits( EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT
-                                                                                                        , EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT
-                                                                                                        , ..
-                                                                                                        )
-                                                                      , ExternalSemaphoreFeatureFlags
-                                                                      ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkExternalSemaphoreFeatureFlagBits - Bitfield describing features of an
--- external semaphore handle type
---
--- = See Also
---
--- 'ExternalSemaphoreFeatureFlags'
-newtype ExternalSemaphoreFeatureFlagBits = ExternalSemaphoreFeatureFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT' specifies that handles of
--- this type /can/ be exported from Vulkan semaphore objects.
-pattern EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = ExternalSemaphoreFeatureFlagBits 0x00000001
--- | 'EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT' specifies that handles of
--- this type /can/ be imported as Vulkan semaphore objects.
-pattern EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = ExternalSemaphoreFeatureFlagBits 0x00000002
-
-type ExternalSemaphoreFeatureFlags = ExternalSemaphoreFeatureFlagBits
-
-instance Show ExternalSemaphoreFeatureFlagBits where
-  showsPrec p = \case
-    EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT -> showString "EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"
-    EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT -> showString "EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"
-    ExternalSemaphoreFeatureFlagBits x -> showParen (p >= 11) (showString "ExternalSemaphoreFeatureFlagBits 0x" . showHex x)
-
-instance Read ExternalSemaphoreFeatureFlagBits where
-  readPrec = parens (choose [("EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT", pure EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT)
-                            , ("EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT", pure EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ExternalSemaphoreFeatureFlagBits")
-                       v <- step readPrec
-                       pure (ExternalSemaphoreFeatureFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs-boot b/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits  ( ExternalSemaphoreFeatureFlagBits
-                                                                      , ExternalSemaphoreFeatureFlags
-                                                                      ) where
-
-
-
-data ExternalSemaphoreFeatureFlagBits
-
-type ExternalSemaphoreFeatureFlags = ExternalSemaphoreFeatureFlagBits
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs
+++ /dev/null
@@ -1,132 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits  ( ExternalSemaphoreHandleTypeFlagBits( EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT
-                                                                                                              , EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT
-                                                                                                              , EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
-                                                                                                              , EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
-                                                                                                              , EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
-                                                                                                              , ..
-                                                                                                              )
-                                                                         , ExternalSemaphoreHandleTypeFlags
-                                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkExternalSemaphoreHandleTypeFlagBits - Bitmask of valid external
--- semaphore handle types
---
--- = Description
---
--- Note
---
--- Handles of type 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT' generated
--- by the implementation may represent either Linux Sync Files or Android
--- Fences at the implementation’s discretion. Applications /should/ only
--- use operations defined for both types of file descriptors, unless they
--- know via means external to Vulkan the type of the file descriptor, or
--- are prepared to deal with the system-defined operation failures
--- resulting from using the wrong type.
---
--- Some external semaphore handle types can only be shared within the same
--- underlying physical device and\/or the same driver version, as defined
--- in the following table:
---
--- +-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | Handle type                                           | 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@ | 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@deviceUUID@ |
--- +-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT'        | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'     | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT'      | Must match                                                                                                          | Must match                                                                                                          |
--- +-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
--- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT'          | No restriction                                                                                                      | No restriction                                                                                                      |
--- +-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+
---
--- External semaphore handle types compatibility
---
--- = See Also
---
--- 'ExternalSemaphoreHandleTypeFlags',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.ImportSemaphoreFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.ImportSemaphoreWin32HandleInfoKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.PhysicalDeviceExternalSemaphoreInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.SemaphoreGetFdInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.SemaphoreGetWin32HandleInfoKHR'
-newtype ExternalSemaphoreHandleTypeFlagBits = ExternalSemaphoreHandleTypeFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT' specifies a POSIX file
--- descriptor handle that has only limited valid usage outside of Vulkan
--- and other compatible APIs. It /must/ be compatible with the POSIX system
--- calls @dup@, @dup2@, @close@, and the non-standard system call @dup3@.
--- Additionally, it /must/ be transportable over a socket using an
--- @SCM_RIGHTS@ control message. It owns a reference to the underlying
--- synchronization primitive represented by its Vulkan semaphore object.
-pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = ExternalSemaphoreHandleTypeFlagBits 0x00000001
--- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT' specifies an NT handle
--- that has only limited valid usage outside of Vulkan and other compatible
--- APIs. It /must/ be compatible with the functions @DuplicateHandle@,
--- @CloseHandle@, @CompareObjectHandles@, @GetHandleInformation@, and
--- @SetHandleInformation@. It owns a reference to the underlying
--- synchronization primitive represented by its Vulkan semaphore object.
-pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = ExternalSemaphoreHandleTypeFlagBits 0x00000002
--- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' specifies a global
--- share handle that has only limited valid usage outside of Vulkan and
--- other compatible APIs. It is not compatible with any native APIs. It
--- does not own a reference to the underlying synchronization primitive
--- represented its Vulkan semaphore object, and will therefore become
--- invalid when all Vulkan semaphore objects associated with it are
--- destroyed.
-pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = ExternalSemaphoreHandleTypeFlagBits 0x00000004
--- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT' specifies an NT handle
--- returned by @ID3D12Device@::@CreateSharedHandle@ referring to a Direct3D
--- 12 fence. It owns a reference to the underlying synchronization
--- primitive associated with the Direct3D fence.
-pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = ExternalSemaphoreHandleTypeFlagBits 0x00000008
--- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT' specifies a POSIX file
--- descriptor handle to a Linux Sync File or Android Fence object. It can
--- be used with any native API accepting a valid sync file or fence as
--- input. It owns a reference to the underlying synchronization primitive
--- associated with the file descriptor. Implementations which support
--- importing this handle type /must/ accept any type of sync or fence FD
--- supported by the native system they are running on.
-pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = ExternalSemaphoreHandleTypeFlagBits 0x00000010
-
-type ExternalSemaphoreHandleTypeFlags = ExternalSemaphoreHandleTypeFlagBits
-
-instance Show ExternalSemaphoreHandleTypeFlagBits where
-  showsPrec p = \case
-    EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT -> showString "EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"
-    EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT -> showString "EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"
-    EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT -> showString "EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
-    EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT -> showString "EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"
-    EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT -> showString "EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"
-    ExternalSemaphoreHandleTypeFlagBits x -> showParen (p >= 11) (showString "ExternalSemaphoreHandleTypeFlagBits 0x" . showHex x)
-
-instance Read ExternalSemaphoreHandleTypeFlagBits where
-  readPrec = parens (choose [("EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT", pure EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT)
-                            , ("EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT", pure EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT)
-                            , ("EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT", pure EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT)
-                            , ("EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT", pure EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT)
-                            , ("EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT", pure EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ExternalSemaphoreHandleTypeFlagBits")
-                       v <- step readPrec
-                       pure (ExternalSemaphoreHandleTypeFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs-boot b/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits  ( ExternalSemaphoreHandleTypeFlagBits
-                                                                         , ExternalSemaphoreHandleTypeFlags
-                                                                         ) where
-
-
-
-data ExternalSemaphoreHandleTypeFlagBits
-
-type ExternalSemaphoreHandleTypeFlags = ExternalSemaphoreHandleTypeFlagBits
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/FenceImportFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/FenceImportFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/FenceImportFlagBits.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.FenceImportFlagBits  ( FenceImportFlagBits( FENCE_IMPORT_TEMPORARY_BIT
-                                                                              , ..
-                                                                              )
-                                                         , FenceImportFlags
-                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkFenceImportFlagBits - Bitmask specifying additional parameters of
--- fence payload import
---
--- = See Also
---
--- 'FenceImportFlags'
-newtype FenceImportFlagBits = FenceImportFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'FENCE_IMPORT_TEMPORARY_BIT' specifies that the fence payload will be
--- imported only temporarily, as described in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence Payloads>,
--- regardless of the permanence of @handleType@.
-pattern FENCE_IMPORT_TEMPORARY_BIT = FenceImportFlagBits 0x00000001
-
-type FenceImportFlags = FenceImportFlagBits
-
-instance Show FenceImportFlagBits where
-  showsPrec p = \case
-    FENCE_IMPORT_TEMPORARY_BIT -> showString "FENCE_IMPORT_TEMPORARY_BIT"
-    FenceImportFlagBits x -> showParen (p >= 11) (showString "FenceImportFlagBits 0x" . showHex x)
-
-instance Read FenceImportFlagBits where
-  readPrec = parens (choose [("FENCE_IMPORT_TEMPORARY_BIT", pure FENCE_IMPORT_TEMPORARY_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "FenceImportFlagBits")
-                       v <- step readPrec
-                       pure (FenceImportFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/FenceImportFlagBits.hs-boot b/src/Graphics/Vulkan/Core11/Enums/FenceImportFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/FenceImportFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.FenceImportFlagBits  ( FenceImportFlagBits
-                                                         , FenceImportFlags
-                                                         ) where
-
-
-
-data FenceImportFlagBits
-
-type FenceImportFlags = FenceImportFlagBits
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits  ( MemoryAllocateFlagBits( MEMORY_ALLOCATE_DEVICE_MASK_BIT
-                                                                                    , MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
-                                                                                    , MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT
-                                                                                    , ..
-                                                                                    )
-                                                            , MemoryAllocateFlags
-                                                            ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkMemoryAllocateFlagBits - Bitmask specifying flags for a device memory
--- allocation
---
--- = See Also
---
--- 'MemoryAllocateFlags'
-newtype MemoryAllocateFlagBits = MemoryAllocateFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'MEMORY_ALLOCATE_DEVICE_MASK_BIT' specifies that memory will be
--- allocated for the devices in
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@deviceMask@.
-pattern MEMORY_ALLOCATE_DEVICE_MASK_BIT = MemoryAllocateFlagBits 0x00000001
--- | 'MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT' specifies that the
--- memory’s address /can/ be saved and reused on a subsequent run (e.g. for
--- trace capture and replay), see
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo'
--- for more detail.
-pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = MemoryAllocateFlagBits 0x00000004
--- | 'MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT' specifies that the memory /can/ be
--- attached to a buffer object created with the
--- 'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT'
--- bit set in @usage@, and that the memory handle /can/ be used to retrieve
--- an opaque address via
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getDeviceMemoryOpaqueCaptureAddress'.
-pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = MemoryAllocateFlagBits 0x00000002
-
-type MemoryAllocateFlags = MemoryAllocateFlagBits
-
-instance Show MemoryAllocateFlagBits where
-  showsPrec p = \case
-    MEMORY_ALLOCATE_DEVICE_MASK_BIT -> showString "MEMORY_ALLOCATE_DEVICE_MASK_BIT"
-    MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT -> showString "MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"
-    MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT -> showString "MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT"
-    MemoryAllocateFlagBits x -> showParen (p >= 11) (showString "MemoryAllocateFlagBits 0x" . showHex x)
-
-instance Read MemoryAllocateFlagBits where
-  readPrec = parens (choose [("MEMORY_ALLOCATE_DEVICE_MASK_BIT", pure MEMORY_ALLOCATE_DEVICE_MASK_BIT)
-                            , ("MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT", pure MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT)
-                            , ("MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT", pure MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "MemoryAllocateFlagBits")
-                       v <- step readPrec
-                       pure (MemoryAllocateFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs-boot b/src/Graphics/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits  ( MemoryAllocateFlagBits
-                                                            , MemoryAllocateFlags
-                                                            ) where
-
-
-
-data MemoryAllocateFlagBits
-
-type MemoryAllocateFlags = MemoryAllocateFlagBits
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs
+++ /dev/null
@@ -1,98 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits  ( PeerMemoryFeatureFlagBits( PEER_MEMORY_FEATURE_COPY_SRC_BIT
-                                                                                          , PEER_MEMORY_FEATURE_COPY_DST_BIT
-                                                                                          , PEER_MEMORY_FEATURE_GENERIC_SRC_BIT
-                                                                                          , PEER_MEMORY_FEATURE_GENERIC_DST_BIT
-                                                                                          , ..
-                                                                                          )
-                                                               , PeerMemoryFeatureFlags
-                                                               ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkPeerMemoryFeatureFlagBits - Bitmask specifying supported peer memory
--- features
---
--- = Description
---
--- Note
---
--- The peer memory features of a memory heap also apply to any accesses
--- that /may/ be performed during
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transitions>.
---
--- 'PEER_MEMORY_FEATURE_COPY_DST_BIT' /must/ be supported for all host
--- local heaps and for at least one device local heap.
---
--- If a device does not support a peer memory feature, it is still valid to
--- use a resource that includes both local and peer memory bindings with
--- the corresponding access type as long as only the local bindings are
--- actually accessed. For example, an application doing split-frame
--- rendering would use framebuffer attachments that include both local and
--- peer memory bindings, but would scissor the rendering to only update
--- local memory.
---
--- = See Also
---
--- 'PeerMemoryFeatureFlags'
-newtype PeerMemoryFeatureFlagBits = PeerMemoryFeatureFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'PEER_MEMORY_FEATURE_COPY_SRC_BIT' specifies that the memory /can/ be
--- accessed as the source of a
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', or
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'
--- command.
-pattern PEER_MEMORY_FEATURE_COPY_SRC_BIT = PeerMemoryFeatureFlagBits 0x00000001
--- | 'PEER_MEMORY_FEATURE_COPY_DST_BIT' specifies that the memory /can/ be
--- accessed as the destination of a
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', or
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'
--- command.
-pattern PEER_MEMORY_FEATURE_COPY_DST_BIT = PeerMemoryFeatureFlagBits 0x00000002
--- | 'PEER_MEMORY_FEATURE_GENERIC_SRC_BIT' specifies that the memory /can/ be
--- read as any memory access type.
-pattern PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = PeerMemoryFeatureFlagBits 0x00000004
--- | 'PEER_MEMORY_FEATURE_GENERIC_DST_BIT' specifies that the memory /can/ be
--- written as any memory access type. Shader atomics are considered to be
--- writes.
-pattern PEER_MEMORY_FEATURE_GENERIC_DST_BIT = PeerMemoryFeatureFlagBits 0x00000008
-
-type PeerMemoryFeatureFlags = PeerMemoryFeatureFlagBits
-
-instance Show PeerMemoryFeatureFlagBits where
-  showsPrec p = \case
-    PEER_MEMORY_FEATURE_COPY_SRC_BIT -> showString "PEER_MEMORY_FEATURE_COPY_SRC_BIT"
-    PEER_MEMORY_FEATURE_COPY_DST_BIT -> showString "PEER_MEMORY_FEATURE_COPY_DST_BIT"
-    PEER_MEMORY_FEATURE_GENERIC_SRC_BIT -> showString "PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"
-    PEER_MEMORY_FEATURE_GENERIC_DST_BIT -> showString "PEER_MEMORY_FEATURE_GENERIC_DST_BIT"
-    PeerMemoryFeatureFlagBits x -> showParen (p >= 11) (showString "PeerMemoryFeatureFlagBits 0x" . showHex x)
-
-instance Read PeerMemoryFeatureFlagBits where
-  readPrec = parens (choose [("PEER_MEMORY_FEATURE_COPY_SRC_BIT", pure PEER_MEMORY_FEATURE_COPY_SRC_BIT)
-                            , ("PEER_MEMORY_FEATURE_COPY_DST_BIT", pure PEER_MEMORY_FEATURE_COPY_DST_BIT)
-                            , ("PEER_MEMORY_FEATURE_GENERIC_SRC_BIT", pure PEER_MEMORY_FEATURE_GENERIC_SRC_BIT)
-                            , ("PEER_MEMORY_FEATURE_GENERIC_DST_BIT", pure PEER_MEMORY_FEATURE_GENERIC_DST_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PeerMemoryFeatureFlagBits")
-                       v <- step readPrec
-                       pure (PeerMemoryFeatureFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs-boot b/src/Graphics/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits  ( PeerMemoryFeatureFlagBits
-                                                               , PeerMemoryFeatureFlags
-                                                               ) where
-
-
-
-data PeerMemoryFeatureFlagBits
-
-type PeerMemoryFeatureFlags = PeerMemoryFeatureFlagBits
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/PointClippingBehavior.hs b/src/Graphics/Vulkan/Core11/Enums/PointClippingBehavior.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/PointClippingBehavior.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.PointClippingBehavior  (PointClippingBehavior( POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
-                                                                                 , POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
-                                                                                 , ..
-                                                                                 )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkPointClippingBehavior - Enum specifying the point clipping behavior
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan11Properties'
-newtype PointClippingBehavior = PointClippingBehavior Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES' specifies that the primitive
--- is discarded if the vertex lies outside any clip plane, including the
--- planes bounding the view volume.
-pattern POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = PointClippingBehavior 0
--- | 'POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY' specifies that the
--- primitive is discarded only if the vertex lies outside any user clip
--- plane.
-pattern POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = PointClippingBehavior 1
-{-# complete POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES,
-             POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY :: PointClippingBehavior #-}
-
-instance Show PointClippingBehavior where
-  showsPrec p = \case
-    POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES -> showString "POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES"
-    POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY -> showString "POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY"
-    PointClippingBehavior x -> showParen (p >= 11) (showString "PointClippingBehavior " . showsPrec 11 x)
-
-instance Read PointClippingBehavior where
-  readPrec = parens (choose [("POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES", pure POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES)
-                            , ("POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY", pure POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PointClippingBehavior")
-                       v <- step readPrec
-                       pure (PointClippingBehavior v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/PointClippingBehavior.hs-boot b/src/Graphics/Vulkan/Core11/Enums/PointClippingBehavior.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/PointClippingBehavior.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.PointClippingBehavior  (PointClippingBehavior) where
-
-
-
-data PointClippingBehavior
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs b/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs
+++ /dev/null
@@ -1,130 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion  (SamplerYcbcrModelConversion( SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY
-                                                                                             , SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY
-                                                                                             , SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
-                                                                                             , SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
-                                                                                             , SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
-                                                                                             , ..
-                                                                                             )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkSamplerYcbcrModelConversion - Color model component of a color space
---
--- = Description
---
--- -   'SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY' specifies that the
---     input values to the conversion are unmodified.
---
--- -   'SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY' specifies no model
---     conversion but the inputs are range expanded as for Y′CBCR.
---
--- -   'SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709' specifies the color model
---     conversion from Y′CBCR to R′G′B′ defined in BT.709 and described in
---     the “BT.709 Y’CBCR conversion” section of the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#data-format Khronos Data Format Specification>.
---
--- -   'SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601' specifies the color model
---     conversion from Y′CBCR to R′G′B′ defined in BT.601 and described in
---     the “BT.601 Y’CBCR conversion” section of the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#data-format Khronos Data Format Specification>.
---
--- -   'SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020' specifies the color
---     model conversion from Y′CBCR to R′G′B′ defined in BT.2020 and
---     described in the “BT.2020 Y’CBCR conversion” section of the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#data-format Khronos Data Format Specification>.
---
--- In the @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_*@ color models, for the
--- input to the sampler Y′CBCR range expansion and model conversion:
---
--- -   the Y (Y′ luma) channel corresponds to the G channel of an RGB
---     image.
---
--- -   the CB (CB or “U” blue color difference) channel corresponds to the
---     B channel of an RGB image.
---
--- -   the CR (CR or “V” red color difference) channel corresponds to the R
---     channel of an RGB image.
---
--- -   the alpha channel, if present, is not modified by color model
---     conversion.
---
--- These rules reflect the mapping of channels after the channel swizzle
--- operation (controlled by
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'::@components@).
---
--- Note
---
--- For example, an “YUVA” 32-bit format comprising four 8-bit channels can
--- be implemented as
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM' with a
--- component mapping:
---
--- -   @components.a@ =
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
---
--- -   @components.r@ =
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_B'
---
--- -   @components.g@ =
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_R'
---
--- -   @components.b@ =
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_G'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
-newtype SamplerYcbcrModelConversion = SamplerYcbcrModelConversion Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"
-pattern SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = SamplerYcbcrModelConversion 0
--- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"
-pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = SamplerYcbcrModelConversion 1
--- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"
-pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = SamplerYcbcrModelConversion 2
--- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"
-pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = SamplerYcbcrModelConversion 3
--- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"
-pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = SamplerYcbcrModelConversion 4
-{-# complete SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY,
-             SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY,
-             SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709,
-             SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601,
-             SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 :: SamplerYcbcrModelConversion #-}
-
-instance Show SamplerYcbcrModelConversion where
-  showsPrec p = \case
-    SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY -> showString "SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"
-    SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY -> showString "SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"
-    SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 -> showString "SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"
-    SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 -> showString "SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"
-    SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 -> showString "SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"
-    SamplerYcbcrModelConversion x -> showParen (p >= 11) (showString "SamplerYcbcrModelConversion " . showsPrec 11 x)
-
-instance Read SamplerYcbcrModelConversion where
-  readPrec = parens (choose [("SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY", pure SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY)
-                            , ("SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY", pure SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY)
-                            , ("SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709", pure SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709)
-                            , ("SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601", pure SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601)
-                            , ("SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020", pure SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SamplerYcbcrModelConversion")
-                       v <- step readPrec
-                       pure (SamplerYcbcrModelConversion v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs-boot b/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion  (SamplerYcbcrModelConversion) where
-
-
-
-data SamplerYcbcrModelConversion
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrRange.hs b/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrRange.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrRange.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange  (SamplerYcbcrRange( SAMPLER_YCBCR_RANGE_ITU_FULL
-                                                                         , SAMPLER_YCBCR_RANGE_ITU_NARROW
-                                                                         , ..
-                                                                         )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkSamplerYcbcrRange - Range of encoded values in a color space
---
--- = Description
---
--- The formulae for these conversions is described in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion-rangeexpand Sampler Y′CBCR Range Expansion>
--- section of the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations>
--- chapter.
---
--- No range modification takes place if @ycbcrModel@ is
--- 'Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY';
--- the @ycbcrRange@ field of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
--- is ignored in this case.
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
-newtype SamplerYcbcrRange = SamplerYcbcrRange Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'SAMPLER_YCBCR_RANGE_ITU_FULL' specifies that the full range of the
--- encoded values are valid and interpreted according to the ITU “full
--- range” quantization rules.
-pattern SAMPLER_YCBCR_RANGE_ITU_FULL = SamplerYcbcrRange 0
--- | 'SAMPLER_YCBCR_RANGE_ITU_NARROW' specifies that headroom and foot room
--- are reserved in the numerical range of encoded values, and the remaining
--- values are expanded according to the ITU “narrow range” quantization
--- rules.
-pattern SAMPLER_YCBCR_RANGE_ITU_NARROW = SamplerYcbcrRange 1
-{-# complete SAMPLER_YCBCR_RANGE_ITU_FULL,
-             SAMPLER_YCBCR_RANGE_ITU_NARROW :: SamplerYcbcrRange #-}
-
-instance Show SamplerYcbcrRange where
-  showsPrec p = \case
-    SAMPLER_YCBCR_RANGE_ITU_FULL -> showString "SAMPLER_YCBCR_RANGE_ITU_FULL"
-    SAMPLER_YCBCR_RANGE_ITU_NARROW -> showString "SAMPLER_YCBCR_RANGE_ITU_NARROW"
-    SamplerYcbcrRange x -> showParen (p >= 11) (showString "SamplerYcbcrRange " . showsPrec 11 x)
-
-instance Read SamplerYcbcrRange where
-  readPrec = parens (choose [("SAMPLER_YCBCR_RANGE_ITU_FULL", pure SAMPLER_YCBCR_RANGE_ITU_FULL)
-                            , ("SAMPLER_YCBCR_RANGE_ITU_NARROW", pure SAMPLER_YCBCR_RANGE_ITU_NARROW)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SamplerYcbcrRange")
-                       v <- step readPrec
-                       pure (SamplerYcbcrRange v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrRange.hs-boot b/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrRange.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/SamplerYcbcrRange.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange  (SamplerYcbcrRange) where
-
-
-
-data SamplerYcbcrRange
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits  ( SemaphoreImportFlagBits( SEMAPHORE_IMPORT_TEMPORARY_BIT
-                                                                                      , ..
-                                                                                      )
-                                                             , SemaphoreImportFlags
-                                                             ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkSemaphoreImportFlagBits - Bitmask specifying additional parameters of
--- semaphore payload import
---
--- = Description
---
--- These bits have the following meanings:
---
--- = See Also
---
--- 'SemaphoreImportFlags'
-newtype SemaphoreImportFlagBits = SemaphoreImportFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SEMAPHORE_IMPORT_TEMPORARY_BIT' specifies that the semaphore payload
--- will be imported only temporarily, as described in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>,
--- regardless of the permanence of @handleType@.
-pattern SEMAPHORE_IMPORT_TEMPORARY_BIT = SemaphoreImportFlagBits 0x00000001
-
-type SemaphoreImportFlags = SemaphoreImportFlagBits
-
-instance Show SemaphoreImportFlagBits where
-  showsPrec p = \case
-    SEMAPHORE_IMPORT_TEMPORARY_BIT -> showString "SEMAPHORE_IMPORT_TEMPORARY_BIT"
-    SemaphoreImportFlagBits x -> showParen (p >= 11) (showString "SemaphoreImportFlagBits 0x" . showHex x)
-
-instance Read SemaphoreImportFlagBits where
-  readPrec = parens (choose [("SEMAPHORE_IMPORT_TEMPORARY_BIT", pure SEMAPHORE_IMPORT_TEMPORARY_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SemaphoreImportFlagBits")
-                       v <- step readPrec
-                       pure (SemaphoreImportFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs-boot b/src/Graphics/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits  ( SemaphoreImportFlagBits
-                                                             , SemaphoreImportFlags
-                                                             ) where
-
-
-
-data SemaphoreImportFlagBits
-
-type SemaphoreImportFlags = SemaphoreImportFlagBits
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/SubgroupFeatureFlagBits.hs b/src/Graphics/Vulkan/Core11/Enums/SubgroupFeatureFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/SubgroupFeatureFlagBits.hs
+++ /dev/null
@@ -1,101 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits  ( SubgroupFeatureFlagBits( SUBGROUP_FEATURE_BASIC_BIT
-                                                                                      , SUBGROUP_FEATURE_VOTE_BIT
-                                                                                      , SUBGROUP_FEATURE_ARITHMETIC_BIT
-                                                                                      , SUBGROUP_FEATURE_BALLOT_BIT
-                                                                                      , SUBGROUP_FEATURE_SHUFFLE_BIT
-                                                                                      , SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
-                                                                                      , SUBGROUP_FEATURE_CLUSTERED_BIT
-                                                                                      , SUBGROUP_FEATURE_QUAD_BIT
-                                                                                      , SUBGROUP_FEATURE_PARTITIONED_BIT_NV
-                                                                                      , ..
-                                                                                      )
-                                                             , SubgroupFeatureFlags
-                                                             ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkSubgroupFeatureFlagBits - Enum describing what group operations are
--- supported with subgroup scope
---
--- = See Also
---
--- 'SubgroupFeatureFlags'
-newtype SubgroupFeatureFlagBits = SubgroupFeatureFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SUBGROUP_FEATURE_BASIC_BIT' specifies the device will accept SPIR-V
--- shader modules containing the @GroupNonUniform@ capability.
-pattern SUBGROUP_FEATURE_BASIC_BIT = SubgroupFeatureFlagBits 0x00000001
--- | 'SUBGROUP_FEATURE_VOTE_BIT' specifies the device will accept SPIR-V
--- shader modules containing the @GroupNonUniformVote@ capability.
-pattern SUBGROUP_FEATURE_VOTE_BIT = SubgroupFeatureFlagBits 0x00000002
--- | 'SUBGROUP_FEATURE_ARITHMETIC_BIT' specifies the device will accept
--- SPIR-V shader modules containing the @GroupNonUniformArithmetic@
--- capability.
-pattern SUBGROUP_FEATURE_ARITHMETIC_BIT = SubgroupFeatureFlagBits 0x00000004
--- | 'SUBGROUP_FEATURE_BALLOT_BIT' specifies the device will accept SPIR-V
--- shader modules containing the @GroupNonUniformBallot@ capability.
-pattern SUBGROUP_FEATURE_BALLOT_BIT = SubgroupFeatureFlagBits 0x00000008
--- | 'SUBGROUP_FEATURE_SHUFFLE_BIT' specifies the device will accept SPIR-V
--- shader modules containing the @GroupNonUniformShuffle@ capability.
-pattern SUBGROUP_FEATURE_SHUFFLE_BIT = SubgroupFeatureFlagBits 0x00000010
--- | 'SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT' specifies the device will accept
--- SPIR-V shader modules containing the @GroupNonUniformShuffleRelative@
--- capability.
-pattern SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = SubgroupFeatureFlagBits 0x00000020
--- | 'SUBGROUP_FEATURE_CLUSTERED_BIT' specifies the device will accept SPIR-V
--- shader modules containing the @GroupNonUniformClustered@ capability.
-pattern SUBGROUP_FEATURE_CLUSTERED_BIT = SubgroupFeatureFlagBits 0x00000040
--- | 'SUBGROUP_FEATURE_QUAD_BIT' specifies the device will accept SPIR-V
--- shader modules containing the @GroupNonUniformQuad@ capability.
-pattern SUBGROUP_FEATURE_QUAD_BIT = SubgroupFeatureFlagBits 0x00000080
--- | 'SUBGROUP_FEATURE_PARTITIONED_BIT_NV' specifies the device will accept
--- SPIR-V shader modules containing the @GroupNonUniformPartitionedNV@
--- capability.
-pattern SUBGROUP_FEATURE_PARTITIONED_BIT_NV = SubgroupFeatureFlagBits 0x00000100
-
-type SubgroupFeatureFlags = SubgroupFeatureFlagBits
-
-instance Show SubgroupFeatureFlagBits where
-  showsPrec p = \case
-    SUBGROUP_FEATURE_BASIC_BIT -> showString "SUBGROUP_FEATURE_BASIC_BIT"
-    SUBGROUP_FEATURE_VOTE_BIT -> showString "SUBGROUP_FEATURE_VOTE_BIT"
-    SUBGROUP_FEATURE_ARITHMETIC_BIT -> showString "SUBGROUP_FEATURE_ARITHMETIC_BIT"
-    SUBGROUP_FEATURE_BALLOT_BIT -> showString "SUBGROUP_FEATURE_BALLOT_BIT"
-    SUBGROUP_FEATURE_SHUFFLE_BIT -> showString "SUBGROUP_FEATURE_SHUFFLE_BIT"
-    SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT -> showString "SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT"
-    SUBGROUP_FEATURE_CLUSTERED_BIT -> showString "SUBGROUP_FEATURE_CLUSTERED_BIT"
-    SUBGROUP_FEATURE_QUAD_BIT -> showString "SUBGROUP_FEATURE_QUAD_BIT"
-    SUBGROUP_FEATURE_PARTITIONED_BIT_NV -> showString "SUBGROUP_FEATURE_PARTITIONED_BIT_NV"
-    SubgroupFeatureFlagBits x -> showParen (p >= 11) (showString "SubgroupFeatureFlagBits 0x" . showHex x)
-
-instance Read SubgroupFeatureFlagBits where
-  readPrec = parens (choose [("SUBGROUP_FEATURE_BASIC_BIT", pure SUBGROUP_FEATURE_BASIC_BIT)
-                            , ("SUBGROUP_FEATURE_VOTE_BIT", pure SUBGROUP_FEATURE_VOTE_BIT)
-                            , ("SUBGROUP_FEATURE_ARITHMETIC_BIT", pure SUBGROUP_FEATURE_ARITHMETIC_BIT)
-                            , ("SUBGROUP_FEATURE_BALLOT_BIT", pure SUBGROUP_FEATURE_BALLOT_BIT)
-                            , ("SUBGROUP_FEATURE_SHUFFLE_BIT", pure SUBGROUP_FEATURE_SHUFFLE_BIT)
-                            , ("SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT", pure SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT)
-                            , ("SUBGROUP_FEATURE_CLUSTERED_BIT", pure SUBGROUP_FEATURE_CLUSTERED_BIT)
-                            , ("SUBGROUP_FEATURE_QUAD_BIT", pure SUBGROUP_FEATURE_QUAD_BIT)
-                            , ("SUBGROUP_FEATURE_PARTITIONED_BIT_NV", pure SUBGROUP_FEATURE_PARTITIONED_BIT_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SubgroupFeatureFlagBits")
-                       v <- step readPrec
-                       pure (SubgroupFeatureFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/TessellationDomainOrigin.hs b/src/Graphics/Vulkan/Core11/Enums/TessellationDomainOrigin.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/TessellationDomainOrigin.hs
+++ /dev/null
@@ -1,60 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin  (TessellationDomainOrigin( TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT
-                                                                                       , TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT
-                                                                                       , ..
-                                                                                       )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkTessellationDomainOrigin - Enum describing tessellation domain origin
---
--- = Description
---
--- This enum affects how the @VertexOrderCw@ and @VertexOrderCcw@
--- tessellation execution modes are interpreted, since the winding is
--- defined relative to the orientation of the domain.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PipelineTessellationDomainOriginStateCreateInfo'
-newtype TessellationDomainOrigin = TessellationDomainOrigin Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT' specifies that the origin of the
--- domain space is in the upper left corner, as shown in figure
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#img-tessellation-topology-ul>.
-pattern TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = TessellationDomainOrigin 0
--- | 'TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT' specifies that the origin of the
--- domain space is in the lower left corner, as shown in figure
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#img-tessellation-topology-ll>.
-pattern TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = TessellationDomainOrigin 1
-{-# complete TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT,
-             TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT :: TessellationDomainOrigin #-}
-
-instance Show TessellationDomainOrigin where
-  showsPrec p = \case
-    TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT -> showString "TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT"
-    TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT -> showString "TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT"
-    TessellationDomainOrigin x -> showParen (p >= 11) (showString "TessellationDomainOrigin " . showsPrec 11 x)
-
-instance Read TessellationDomainOrigin where
-  readPrec = parens (choose [("TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT", pure TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT)
-                            , ("TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT", pure TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "TessellationDomainOrigin")
-                       v <- step readPrec
-                       pure (TessellationDomainOrigin v)))
-
diff --git a/src/Graphics/Vulkan/Core11/Enums/TessellationDomainOrigin.hs-boot b/src/Graphics/Vulkan/Core11/Enums/TessellationDomainOrigin.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Enums/TessellationDomainOrigin.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin  (TessellationDomainOrigin) where
-
-
-
-data TessellationDomainOrigin
-
diff --git a/src/Graphics/Vulkan/Core11/Handles.hs b/src/Graphics/Vulkan/Core11/Handles.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Handles.hs
+++ /dev/null
@@ -1,72 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Handles  ( DescriptorUpdateTemplate(..)
-                                       , SamplerYcbcrConversion(..)
-                                       , Instance(..)
-                                       , PhysicalDevice(..)
-                                       , Device(..)
-                                       , Queue(..)
-                                       , CommandBuffer(..)
-                                       , DeviceMemory(..)
-                                       , CommandPool(..)
-                                       , Buffer(..)
-                                       , Image(..)
-                                       , PipelineLayout(..)
-                                       , Sampler(..)
-                                       , DescriptorSet(..)
-                                       , DescriptorSetLayout(..)
-                                       ) where
-
-import GHC.Show (showParen)
-import Numeric (showHex)
-import Foreign.Storable (Storable)
-import Data.Word (Word64)
-import Graphics.Vulkan.Core10.APIConstants (IsHandle)
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandPool(..))
-import Graphics.Vulkan.Core10.Handles (DescriptorSet(..))
-import Graphics.Vulkan.Core10.Handles (DescriptorSetLayout(..))
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory(..))
-import Graphics.Vulkan.Core10.Handles (Image(..))
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PipelineLayout(..))
-import Graphics.Vulkan.Core10.Handles (Queue(..))
-import Graphics.Vulkan.Core10.Handles (Sampler(..))
--- | VkDescriptorUpdateTemplate - Opaque handle to a descriptor update
--- template
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetWithTemplateKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.createDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplateKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplateKHR'
-newtype DescriptorUpdateTemplate = DescriptorUpdateTemplate Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show DescriptorUpdateTemplate where
-  showsPrec p (DescriptorUpdateTemplate x) = showParen (p >= 11) (showString "DescriptorUpdateTemplate 0x" . showHex x)
-
-
--- | VkSamplerYcbcrConversion - Opaque handle to a device-specific sampler
--- Y′CBCR conversion description
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversionKHR',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversionKHR'
-newtype SamplerYcbcrConversion = SamplerYcbcrConversion Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show SamplerYcbcrConversion where
-  showsPrec p (SamplerYcbcrConversion x) = showParen (p >= 11) (showString "SamplerYcbcrConversion 0x" . showHex x)
-
diff --git a/src/Graphics/Vulkan/Core11/Handles.hs-boot b/src/Graphics/Vulkan/Core11/Handles.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Handles.hs-boot
+++ /dev/null
@@ -1,12 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Handles  ( DescriptorUpdateTemplate
-                                       , SamplerYcbcrConversion
-                                       ) where
-
-
-
-data DescriptorUpdateTemplate
-
-
-data SamplerYcbcrConversion
-
diff --git a/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs b/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs
+++ /dev/null
@@ -1,373 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory  ( getDeviceQueue2
-                                                                           , ProtectedSubmitInfo(..)
-                                                                           , PhysicalDeviceProtectedMemoryFeatures(..)
-                                                                           , PhysicalDeviceProtectedMemoryProperties(..)
-                                                                           , DeviceQueueInfo2(..)
-                                                                           , StructureType(..)
-                                                                           , QueueFlagBits(..)
-                                                                           , QueueFlags
-                                                                           , DeviceQueueCreateFlagBits(..)
-                                                                           , DeviceQueueCreateFlags
-                                                                           , MemoryPropertyFlagBits(..)
-                                                                           , MemoryPropertyFlags
-                                                                           , BufferCreateFlagBits(..)
-                                                                           , BufferCreateFlags
-                                                                           , ImageCreateFlagBits(..)
-                                                                           , ImageCreateFlags
-                                                                           , CommandPoolCreateFlagBits(..)
-                                                                           , CommandPoolCreateFlags
-                                                                           ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeviceQueue2))
-import Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlags)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Queue)
-import Graphics.Vulkan.Core10.Handles (Queue(Queue))
-import Graphics.Vulkan.Core10.Handles (Queue_T)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO))
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
-import Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits (CommandPoolCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits (CommandPoolCreateFlags)
-import Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits (MemoryPropertyFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits (MemoryPropertyFlags)
-import Graphics.Vulkan.Core10.Enums.QueueFlagBits (QueueFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.QueueFlagBits (QueueFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceQueue2
-  :: FunPtr (Ptr Device_T -> Ptr DeviceQueueInfo2 -> Ptr (Ptr Queue_T) -> IO ()) -> Ptr Device_T -> Ptr DeviceQueueInfo2 -> Ptr (Ptr Queue_T) -> IO ()
-
--- | vkGetDeviceQueue2 - Get a queue handle from a device
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the queue.
---
--- -   @pQueueInfo@ is a pointer to a 'DeviceQueueInfo2' structure,
---     describing the parameters used to create the device queue.
---
--- -   @pQueue@ is a pointer to a 'Graphics.Vulkan.Core10.Handles.Queue'
---     object that will be filled with the handle for the requested queue.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'DeviceQueueInfo2',
--- 'Graphics.Vulkan.Core10.Handles.Queue'
-getDeviceQueue2 :: forall io . MonadIO io => Device -> DeviceQueueInfo2 -> io (Queue)
-getDeviceQueue2 device queueInfo = liftIO . evalContT $ do
-  let cmds = deviceCmds (device :: Device)
-  let vkGetDeviceQueue2' = mkVkGetDeviceQueue2 (pVkGetDeviceQueue2 cmds)
-  pQueueInfo <- ContT $ withCStruct (queueInfo)
-  pPQueue <- ContT $ bracket (callocBytes @(Ptr Queue_T) 8) free
-  lift $ vkGetDeviceQueue2' (deviceHandle (device)) pQueueInfo (pPQueue)
-  pQueue <- lift $ peek @(Ptr Queue_T) pPQueue
-  pure $ (((\h -> Queue h cmds ) pQueue))
-
-
--- | VkProtectedSubmitInfo - Structure indicating whether the submission is
--- protected
---
--- == Valid Usage
---
--- -   If the protected memory feature is not enabled, @protectedSubmit@
---     /must/ not be 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If @protectedSubmit@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', then
---     each element of the @pCommandBuffers@ array /must/ be a protected
---     command buffer
---
--- -   If @protectedSubmit@ is 'Graphics.Vulkan.Core10.BaseType.FALSE',
---     then each element of the @pCommandBuffers@ array /must/ be an
---     unprotected command buffer
---
--- -   If the 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pNext@ chain does
---     not include a 'ProtectedSubmitInfo' structure, then each element of
---     the command buffer of the @pCommandBuffers@ array /must/ be an
---     unprotected command buffer
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ProtectedSubmitInfo = ProtectedSubmitInfo
-  { -- | @protectedSubmit@ specifies whether the batch is protected. If
-    -- @protectedSubmit@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', the batch
-    -- is protected. If @protectedSubmit@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', the batch is unprotected. If
-    -- the 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pNext@ chain does not
-    -- include this structure, the batch is unprotected.
-    protectedSubmit :: Bool }
-  deriving (Typeable)
-deriving instance Show ProtectedSubmitInfo
-
-instance ToCStruct ProtectedSubmitInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ProtectedSubmitInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (protectedSubmit))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct ProtectedSubmitInfo where
-  peekCStruct p = do
-    protectedSubmit <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ ProtectedSubmitInfo
-             (bool32ToBool protectedSubmit)
-
-instance Storable ProtectedSubmitInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ProtectedSubmitInfo where
-  zero = ProtectedSubmitInfo
-           zero
-
-
--- | VkPhysicalDeviceProtectedMemoryFeatures - Structure describing protected
--- memory features that can be supported by an implementation
---
--- = Description
---
--- If the 'PhysicalDeviceProtectedMemoryFeatures' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with a value indicating whether the feature is supported.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceProtectedMemoryFeatures = PhysicalDeviceProtectedMemoryFeatures
-  { -- | @protectedMemory@ specifies whether protected memory is supported.
-    protectedMemory :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceProtectedMemoryFeatures
-
-instance ToCStruct PhysicalDeviceProtectedMemoryFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceProtectedMemoryFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (protectedMemory))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceProtectedMemoryFeatures where
-  peekCStruct p = do
-    protectedMemory <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceProtectedMemoryFeatures
-             (bool32ToBool protectedMemory)
-
-instance Storable PhysicalDeviceProtectedMemoryFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceProtectedMemoryFeatures where
-  zero = PhysicalDeviceProtectedMemoryFeatures
-           zero
-
-
--- | VkPhysicalDeviceProtectedMemoryProperties - Structure describing
--- protected memory properties that can be supported by an implementation
---
--- = Description
---
--- If the 'PhysicalDeviceProtectedMemoryProperties' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with a value indicating the implementation-dependent
--- behavior.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceProtectedMemoryProperties = PhysicalDeviceProtectedMemoryProperties
-  { -- | @protectedNoFault@ specifies the behavior of the implementation when
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-protected-access-rules protected memory access rules>
-    -- are broken. If @protectedNoFault@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE', breaking those rules will not
-    -- result in process termination or device loss.
-    protectedNoFault :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceProtectedMemoryProperties
-
-instance ToCStruct PhysicalDeviceProtectedMemoryProperties where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceProtectedMemoryProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (protectedNoFault))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceProtectedMemoryProperties where
-  peekCStruct p = do
-    protectedNoFault <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceProtectedMemoryProperties
-             (bool32ToBool protectedNoFault)
-
-instance Storable PhysicalDeviceProtectedMemoryProperties where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceProtectedMemoryProperties where
-  zero = PhysicalDeviceProtectedMemoryProperties
-           zero
-
-
--- | VkDeviceQueueInfo2 - Structure specifying the parameters used for device
--- queue creation
---
--- = Description
---
--- The queue returned by 'getDeviceQueue2' /must/ have the same @flags@
--- value from this structure as that used at device creation time in a
--- 'Graphics.Vulkan.Core10.Device.DeviceQueueCreateInfo' instance. If no
--- matching @flags@ were specified at device creation time then @pQueue@
--- will return 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getDeviceQueue2'
-data DeviceQueueInfo2 = DeviceQueueInfo2
-  { -- | @flags@ /must/ be a valid combination of
-    -- 'Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlagBits'
-    -- values
-    flags :: DeviceQueueCreateFlags
-  , -- | @queueFamilyIndex@ /must/ be one of the queue family indices specified
-    -- when @device@ was created, via the
-    -- 'Graphics.Vulkan.Core10.Device.DeviceQueueCreateInfo' structure
-    queueFamilyIndex :: Word32
-  , -- | @queueIndex@ /must/ be less than the number of queues created for the
-    -- specified queue family index and
-    -- 'Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlags'
-    -- member @flags@ equal to this @flags@ value when @device@ was created,
-    -- via the @queueCount@ member of the
-    -- 'Graphics.Vulkan.Core10.Device.DeviceQueueCreateInfo' structure
-    queueIndex :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DeviceQueueInfo2
-
-instance ToCStruct DeviceQueueInfo2 where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceQueueInfo2{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceQueueCreateFlags)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (queueFamilyIndex)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (queueIndex)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DeviceQueueInfo2 where
-  peekCStruct p = do
-    flags <- peek @DeviceQueueCreateFlags ((p `plusPtr` 16 :: Ptr DeviceQueueCreateFlags))
-    queueFamilyIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    queueIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pure $ DeviceQueueInfo2
-             flags queueFamilyIndex queueIndex
-
-instance Storable DeviceQueueInfo2 where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeviceQueueInfo2 where
-  zero = DeviceQueueInfo2
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs-boot b/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs-boot
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory  ( DeviceQueueInfo2
-                                                                           , PhysicalDeviceProtectedMemoryFeatures
-                                                                           , PhysicalDeviceProtectedMemoryProperties
-                                                                           , ProtectedSubmitInfo
-                                                                           ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DeviceQueueInfo2
-
-instance ToCStruct DeviceQueueInfo2
-instance Show DeviceQueueInfo2
-
-instance FromCStruct DeviceQueueInfo2
-
-
-data PhysicalDeviceProtectedMemoryFeatures
-
-instance ToCStruct PhysicalDeviceProtectedMemoryFeatures
-instance Show PhysicalDeviceProtectedMemoryFeatures
-
-instance FromCStruct PhysicalDeviceProtectedMemoryFeatures
-
-
-data PhysicalDeviceProtectedMemoryProperties
-
-instance ToCStruct PhysicalDeviceProtectedMemoryProperties
-instance Show PhysicalDeviceProtectedMemoryProperties
-
-instance FromCStruct PhysicalDeviceProtectedMemoryProperties
-
-
-data ProtectedSubmitInfo
-
-instance ToCStruct ProtectedSubmitInfo
-instance Show ProtectedSubmitInfo
-
-instance FromCStruct ProtectedSubmitInfo
-
diff --git a/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs b/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs
+++ /dev/null
@@ -1,142 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup  ( PhysicalDeviceSubgroupProperties(..)
-                                                                   , StructureType(..)
-                                                                   , SubgroupFeatureFlagBits(..)
-                                                                   , SubgroupFeatureFlags
-                                                                   ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits (SubgroupFeatureFlags)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-import Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits (SubgroupFeatureFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits (SubgroupFeatureFlags)
--- | VkPhysicalDeviceSubgroupProperties - Structure describing subgroup
--- support for an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceSubgroupProperties' structure describe
--- the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceSubgroupProperties' structure is included in the
--- @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- If @supportedOperations@ includes
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroup-quad >,
--- @subgroupSize@ /must/ be greater than or equal to 4.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlags'
-data PhysicalDeviceSubgroupProperties = PhysicalDeviceSubgroupProperties
-  { -- | @subgroupSize@ is the default number of invocations in each subgroup.
-    -- @subgroupSize@ is at least 1 if any of the physical device’s queues
-    -- support 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT'
-    -- or 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
-    -- @subgroupSize@ is a power-of-two.
-    subgroupSize :: Word32
-  , -- | @supportedStages@ is a bitfield of
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
-    -- describing the shader stages that
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>
-    -- with
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-scope-subgroup subgroup scope>
-    -- are supported in. @supportedStages@ will have the
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
-    -- bit set if any of the physical device’s queues support
-    -- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
-    supportedStages :: ShaderStageFlags
-  , -- | @supportedOperations@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlagBits'
-    -- specifying the sets of
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>
-    -- with
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-scope-subgroup subgroup scope>
-    -- supported on this device. @supportedOperations@ will have the
-    -- 'Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SUBGROUP_FEATURE_BASIC_BIT'
-    -- bit set if any of the physical device’s queues support
-    -- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
-    -- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
-    supportedOperations :: SubgroupFeatureFlags
-  , -- | @quadOperationsInAllStages@ is a boolean specifying whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-quad-operations quad group operations>
-    -- are available in all stages, or are restricted to fragment and compute
-    -- stages.
-    quadOperationsInAllStages :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceSubgroupProperties
-
-instance ToCStruct PhysicalDeviceSubgroupProperties where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceSubgroupProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (subgroupSize)
-    poke ((p `plusPtr` 20 :: Ptr ShaderStageFlags)) (supportedStages)
-    poke ((p `plusPtr` 24 :: Ptr SubgroupFeatureFlags)) (supportedOperations)
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (quadOperationsInAllStages))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr ShaderStageFlags)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr SubgroupFeatureFlags)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceSubgroupProperties where
-  peekCStruct p = do
-    subgroupSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    supportedStages <- peek @ShaderStageFlags ((p `plusPtr` 20 :: Ptr ShaderStageFlags))
-    supportedOperations <- peek @SubgroupFeatureFlags ((p `plusPtr` 24 :: Ptr SubgroupFeatureFlags))
-    quadOperationsInAllStages <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    pure $ PhysicalDeviceSubgroupProperties
-             subgroupSize supportedStages supportedOperations (bool32ToBool quadOperationsInAllStages)
-
-instance Storable PhysicalDeviceSubgroupProperties where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceSubgroupProperties where
-  zero = PhysicalDeviceSubgroupProperties
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs-boot b/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup  (PhysicalDeviceSubgroupProperties) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceSubgroupProperties
-
-instance ToCStruct PhysicalDeviceSubgroupProperties
-instance Show PhysicalDeviceSubgroupProperties
-
-instance FromCStruct PhysicalDeviceSubgroupProperties
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs
+++ /dev/null
@@ -1,114 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage  ( PhysicalDevice16BitStorageFeatures(..)
-                                                                  , StructureType(..)
-                                                                  ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDevice16BitStorageFeatures - Structure describing features
--- supported by VK_KHR_16bit_storage
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDevice16BitStorageFeatures = PhysicalDevice16BitStorageFeatures
-  { -- | @storageBuffer16BitAccess@ specifies whether objects in the
-    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the
-    -- @Block@ decoration /can/ have 16-bit integer and 16-bit floating-point
-    -- members. If this feature is not enabled, 16-bit integer or 16-bit
-    -- floating-point members /must/ not be used in such objects. This also
-    -- specifies whether shader modules /can/ declare the
-    -- @StorageBuffer16BitAccess@ capability.
-    storageBuffer16BitAccess :: Bool
-  , -- | @uniformAndStorageBuffer16BitAccess@ specifies whether objects in the
-    -- @Uniform@ storage class with the @Block@ decoration and in the
-    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the same
-    -- decoration /can/ have 16-bit integer and 16-bit floating-point members.
-    -- If this feature is not enabled, 16-bit integer or 16-bit floating-point
-    -- members /must/ not be used in such objects. This also specifies whether
-    -- shader modules /can/ declare the @UniformAndStorageBuffer16BitAccess@
-    -- capability.
-    uniformAndStorageBuffer16BitAccess :: Bool
-  , -- | @storagePushConstant16@ specifies whether objects in the @PushConstant@
-    -- storage class /can/ have 16-bit integer and 16-bit floating-point
-    -- members. If this feature is not enabled, 16-bit integer or
-    -- floating-point members /must/ not be used in such objects. This also
-    -- specifies whether shader modules /can/ declare the
-    -- @StoragePushConstant16@ capability.
-    storagePushConstant16 :: Bool
-  , -- | @storageInputOutput16@ specifies whether objects in the @Input@ and
-    -- @Output@ storage classes /can/ have 16-bit integer and 16-bit
-    -- floating-point members. If this feature is not enabled, 16-bit integer
-    -- or 16-bit floating-point members /must/ not be used in such objects.
-    -- This also specifies whether shader modules /can/ declare the
-    -- @StorageInputOutput16@ capability.
-    storageInputOutput16 :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDevice16BitStorageFeatures
-
-instance ToCStruct PhysicalDevice16BitStorageFeatures where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDevice16BitStorageFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (storageBuffer16BitAccess))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (uniformAndStorageBuffer16BitAccess))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (storagePushConstant16))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (storageInputOutput16))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDevice16BitStorageFeatures where
-  peekCStruct p = do
-    storageBuffer16BitAccess <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    uniformAndStorageBuffer16BitAccess <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    storagePushConstant16 <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    storageInputOutput16 <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    pure $ PhysicalDevice16BitStorageFeatures
-             (bool32ToBool storageBuffer16BitAccess) (bool32ToBool uniformAndStorageBuffer16BitAccess) (bool32ToBool storagePushConstant16) (bool32ToBool storageInputOutput16)
-
-instance Storable PhysicalDevice16BitStorageFeatures where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDevice16BitStorageFeatures where
-  zero = PhysicalDevice16BitStorageFeatures
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage  (PhysicalDevice16BitStorageFeatures) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDevice16BitStorageFeatures
-
-instance ToCStruct PhysicalDevice16BitStorageFeatures
-instance Show PhysicalDevice16BitStorageFeatures
-
-instance FromCStruct PhysicalDevice16BitStorageFeatures
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs
+++ /dev/null
@@ -1,676 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2  ( bindBufferMemory2
-                                                                 , bindImageMemory2
-                                                                 , BindBufferMemoryInfo(..)
-                                                                 , BindImageMemoryInfo(..)
-                                                                 , StructureType(..)
-                                                                 , ImageCreateFlagBits(..)
-                                                                 , ImageCreateFlags
-                                                                 ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.NamedType ((:::))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindBufferMemoryDeviceGroupInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindImageMemoryDeviceGroupInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (BindImageMemorySwapchainInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (BindImagePlaneMemoryInfo)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkBindBufferMemory2))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkBindImageMemory2))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkBindBufferMemory2
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (BindBufferMemoryInfo a) -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (BindBufferMemoryInfo a) -> IO Result
-
--- | vkBindBufferMemory2 - Bind device memory to buffer objects
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the buffers and memory.
---
--- -   @bindInfoCount@ is the number of elements in @pBindInfos@.
---
--- -   @pBindInfos@ is a pointer to an array of @bindInfoCount@
---     'BindBufferMemoryInfo' structures describing buffers and memory to
---     bind.
---
--- = Description
---
--- On some implementations, it /may/ be more efficient to batch memory
--- bindings into a single command.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
---
--- = See Also
---
--- 'BindBufferMemoryInfo', 'Graphics.Vulkan.Core10.Handles.Device'
-bindBufferMemory2 :: forall a io . (PokeChain a, MonadIO io) => Device -> ("bindInfos" ::: Vector (BindBufferMemoryInfo a)) -> io ()
-bindBufferMemory2 device bindInfos = liftIO . evalContT $ do
-  let vkBindBufferMemory2' = mkVkBindBufferMemory2 (pVkBindBufferMemory2 (deviceCmds (device :: Device)))
-  pPBindInfos <- ContT $ allocaBytesAligned @(BindBufferMemoryInfo _) ((Data.Vector.length (bindInfos)) * 40) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindInfos `plusPtr` (40 * (i)) :: Ptr (BindBufferMemoryInfo _)) (e) . ($ ())) (bindInfos)
-  r <- lift $ vkBindBufferMemory2' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (bindInfos)) :: Word32)) (pPBindInfos)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkBindImageMemory2
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (BindImageMemoryInfo a) -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (BindImageMemoryInfo a) -> IO Result
-
--- | vkBindImageMemory2 - Bind device memory to image objects
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the images and memory.
---
--- -   @bindInfoCount@ is the number of elements in @pBindInfos@.
---
--- -   @pBindInfos@ is a pointer to an array of 'BindImageMemoryInfo'
---     structures, describing images and memory to bind.
---
--- = Description
---
--- On some implementations, it /may/ be more efficient to batch memory
--- bindings into a single command.
---
--- == Valid Usage
---
--- -   If any 'BindImageMemoryInfo'::image was created with
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---     then all planes of 'BindImageMemoryInfo'::image /must/ be bound
---     individually in separate @pBindInfos@
---
--- -   @pBindInfos@ /must/ not refer to the same image subresource more
---     than once.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pBindInfos@ /must/ be a valid pointer to an array of
---     @bindInfoCount@ valid 'BindImageMemoryInfo' structures
---
--- -   @bindInfoCount@ /must/ be greater than @0@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'BindImageMemoryInfo', 'Graphics.Vulkan.Core10.Handles.Device'
-bindImageMemory2 :: forall a io . (PokeChain a, MonadIO io) => Device -> ("bindInfos" ::: Vector (BindImageMemoryInfo a)) -> io ()
-bindImageMemory2 device bindInfos = liftIO . evalContT $ do
-  let vkBindImageMemory2' = mkVkBindImageMemory2 (pVkBindImageMemory2 (deviceCmds (device :: Device)))
-  pPBindInfos <- ContT $ allocaBytesAligned @(BindImageMemoryInfo _) ((Data.Vector.length (bindInfos)) * 40) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindInfos `plusPtr` (40 * (i)) :: Ptr (BindImageMemoryInfo _)) (e) . ($ ())) (bindInfos)
-  r <- lift $ vkBindImageMemory2' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (bindInfos)) :: Word32)) (pPBindInfos)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkBindBufferMemoryInfo - Structure specifying how to bind a buffer to
--- memory
---
--- == Valid Usage
---
--- -   @buffer@ /must/ not already be backed by a memory object
---
--- -   @buffer@ /must/ not have been created with any sparse memory binding
---     flags
---
--- -   @memoryOffset@ /must/ be less than the size of @memory@
---
--- -   @memory@ /must/ have been allocated using one of the memory types
---     allowed in the @memoryTypeBits@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'Graphics.Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements'
---     with @buffer@
---
--- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@
---     member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'Graphics.Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements'
---     with @buffer@
---
--- -   The @size@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'Graphics.Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements'
---     with @buffer@ /must/ be less than or equal to the size of @memory@
---     minus @memoryOffset@
---
--- -   If @buffer@ requires a dedicated allocation(as reported by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2'
---     in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation
---     for @buffer@), @memory@ /must/ have been created with
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@
---     equal to @buffer@ and @memoryOffset@ /must/ be zero
---
--- -   If the 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' provided
---     when @memory@ was allocated included a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure in its @pNext@ chain, and
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@
---     was not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', then
---     @buffer@ /must/ equal
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@
---     and @memoryOffset@ /must/ be zero
---
--- -   If @buffer@ was created with
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@
---     equal to 'Graphics.Vulkan.Core10.BaseType.TRUE', @memory@ /must/
---     have been created with
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'::@buffer@
---     equal to @buffer@ and @memoryOffset@ /must/ be zero
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo'
---     structure, all instances of @memory@ specified by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo'::@pDeviceIndices@
---     /must/ have been allocated
---
--- -   If the value of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
---     used to allocate @memory@ is not @0@, it /must/ include at least one
---     of the handles set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
---     when @buffer@ was created
---
--- -   If @memory@ was created by a memory import operation, that is not
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
---     with a non-@NULL@ @buffer@ value, the external handle type of the
---     imported memory /must/ also have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
---     when @buffer@ was created
---
--- -   If @memory@ was created with the
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
---     memory import operation with a non-@NULL@ @buffer@ value,
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     /must/ also have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
---     when @buffer@ was created
---
--- -   If the
---     'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeaturesKHR'::@bufferDeviceAddress@
---     feature is enabled and @buffer@ was created with the
---     'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR'
---     bit set, @memory@ /must/ have been allocated with the
---     'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR'
---     bit set
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @memory@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- -   Both of @buffer@, and @memory@ /must/ have been created, allocated,
---     or retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'bindBufferMemory2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.bindBufferMemory2KHR'
-data BindBufferMemoryInfo (es :: [Type]) = BindBufferMemoryInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @buffer@ is the buffer to be attached to memory.
-    buffer :: Buffer
-  , -- | @memory@ is a 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
-    -- describing the device memory to attach.
-    memory :: DeviceMemory
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@
-    -- member in @memory@, starting from @memoryOffset@ bytes, will be bound to
-    -- the specified buffer.
-    memoryOffset :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (BindBufferMemoryInfo es)
-
-instance Extensible BindBufferMemoryInfo where
-  extensibleType = STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO
-  setNext x next = x{next = next}
-  getNext BindBufferMemoryInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends BindBufferMemoryInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @BindBufferMemoryDeviceGroupInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (BindBufferMemoryInfo es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindBufferMemoryInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (buffer)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (memory)
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (memoryOffset)
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (BindBufferMemoryInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    buffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
-    memory <- peek @DeviceMemory ((p `plusPtr` 24 :: Ptr DeviceMemory))
-    memoryOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
-    pure $ BindBufferMemoryInfo
-             next buffer memory memoryOffset
-
-instance es ~ '[] => Zero (BindBufferMemoryInfo es) where
-  zero = BindBufferMemoryInfo
-           ()
-           zero
-           zero
-           zero
-
-
--- | VkBindImageMemoryInfo - Structure specifying how to bind an image to
--- memory
---
--- == Valid Usage
---
--- -   @image@ /must/ not already be backed by a memory object
---
--- -   @image@ /must/ not have been created with any sparse memory binding
---     flags
---
--- -   @memoryOffset@ /must/ be less than the size of @memory@
---
--- -   If the @pNext@ chain does not include a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
---     structure, @memory@ /must/ have been allocated using one of the
---     memory types allowed in the @memoryTypeBits@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
---     with @image@
---
--- -   If the @pNext@ chain does not include a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
---     structure, @memoryOffset@ /must/ be an integer multiple of the
---     @alignment@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
---     with @image@
---
--- -   If the @pNext@ chain does not include a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
---     structure, the difference of the size of @memory@ and @memoryOffset@
---     /must/ be greater than or equal to the @size@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
---     with the same @image@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
---     structure, @image@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---     bit set
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
---     structure, @memory@ /must/ have been allocated using one of the
---     memory types allowed in the @memoryTypeBits@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
---     with @image@ and where
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'::@planeAspect@
---     corresponds to the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'::@planeAspect@
---     in the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2'
---     structure’s @pNext@ chain
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
---     structure, @memoryOffset@ /must/ be an integer multiple of the
---     @alignment@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
---     with @image@ and where
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'::@planeAspect@
---     corresponds to the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'::@planeAspect@
---     in the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2'
---     structure’s @pNext@ chain
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
---     structure, the difference of the size of @memory@ and @memoryOffset@
---     /must/ be greater than or equal to the @size@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
---     with the same @image@ and where
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'::@planeAspect@
---     corresponds to the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'::@planeAspect@
---     in the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2'
---     structure’s @pNext@ chain
---
--- -   If @image@ requires a dedicated allocation (as reported by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
---     in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation
---     for @image@), @memory@ /must/ have been created with
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     equal to @image@ and @memoryOffset@ /must/ be zero
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing>
---     feature is not enabled, and the
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' provided when
---     @memory@ was allocated included a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure in its @pNext@ chain, and
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     was not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', then
---     @image@ /must/ equal
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     and @memoryOffset@ /must/ be zero
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing>
---     feature is enabled, and the
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' provided when
---     @memory@ was allocated included a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     structure in its @pNext@ chain, and
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     was not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', then
---     @memoryOffset@ /must/ be zero, and @image@ /must/ be either equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
---     or an image that was created using the same parameters in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo', with the exception
---     that @extent@ and @arrayLayers@ /may/ differ subject to the
---     following restrictions: every dimension in the @extent@ parameter of
---     the image being bound /must/ be equal to or smaller than the
---     original image for which the allocation was created; and the
---     @arrayLayers@ parameter of the image being bound /must/ be equal to
---     or smaller than the original image for which the allocation was
---     created
---
--- -   If @image@ was created with
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@
---     equal to 'Graphics.Vulkan.Core10.BaseType.TRUE', @memory@ /must/
---     have been created with
---     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'::@image@
---     equal to @image@ and @memoryOffset@ /must/ be zero
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'
---     structure, all instances of @memory@ specified by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@pDeviceIndices@
---     /must/ have been allocated
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'
---     structure, and
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@splitInstanceBindRegionCount@
---     is not zero, then @image@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT'
---     bit set
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'
---     structure, all elements of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@pSplitInstanceBindRegions@
---     /must/ be valid rectangles contained within the dimensions of
---     @image@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'
---     structure, the union of the areas of all elements of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@pSplitInstanceBindRegions@
---     that correspond to the same instance of @image@ /must/ cover the
---     entire image
---
--- -   If @image@ was created with a valid swapchain handle in
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR'::@swapchain@,
---     then the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR'
---     structure containing the same swapchain handle
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR'
---     structure, @memory@ /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If the @pNext@ chain does not include a
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR'
---     structure, @memory@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- -   If the value of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
---     used to allocate @memory@ is not @0@, it /must/ include at least one
---     of the handles set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     when @image@ was created
---
--- -   If @memory@ was created by a memory import operation, that is not
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
---     with a non-@NULL@ @buffer@ value, the external handle type of the
---     imported memory /must/ also have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     when @image@ was created
---
--- -   If @memory@ was created with the
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
---     memory import operation with a non-@NULL@ @buffer@ value,
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     /must/ also have been set in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     when @image@ was created
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo',
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR',
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   Both of @image@, and @memory@ that are valid handles of non-ignored
---     parameters /must/ have been created, allocated, or retrieved from
---     the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'bindImageMemory2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.bindImageMemory2KHR'
-data BindImageMemoryInfo (es :: [Type]) = BindImageMemoryInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @image@ is the image to be attached to memory.
-    image :: Image
-  , -- | @memory@ is a 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
-    -- describing the device memory to attach.
-    memory :: DeviceMemory
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@
-    -- member in @memory@, starting from @memoryOffset@ bytes, will be bound to
-    -- the specified image.
-    memoryOffset :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (BindImageMemoryInfo es)
-
-instance Extensible BindImageMemoryInfo where
-  extensibleType = STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO
-  setNext x next = x{next = next}
-  getNext BindImageMemoryInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends BindImageMemoryInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @BindImagePlaneMemoryInfo = Just f
-    | Just Refl <- eqT @e @BindImageMemorySwapchainInfoKHR = Just f
-    | Just Refl <- eqT @e @BindImageMemoryDeviceGroupInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (BindImageMemoryInfo es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindImageMemoryInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (image)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (memory)
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (memoryOffset)
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (BindImageMemoryInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    image <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
-    memory <- peek @DeviceMemory ((p `plusPtr` 24 :: Ptr DeviceMemory))
-    memoryOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
-    pure $ BindImageMemoryInfo
-             next image memory memoryOffset
-
-instance es ~ '[] => Zero (BindImageMemoryInfo es) where
-  zero = BindImageMemoryInfo
-           ()
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs-boot
+++ /dev/null
@@ -1,28 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2  ( BindBufferMemoryInfo
-                                                                 , BindImageMemoryInfo
-                                                                 ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role BindBufferMemoryInfo nominal
-data BindBufferMemoryInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (BindBufferMemoryInfo es)
-instance Show (Chain es) => Show (BindBufferMemoryInfo es)
-
-instance PeekChain es => FromCStruct (BindBufferMemoryInfo es)
-
-
-type role BindImageMemoryInfo nominal
-data BindImageMemoryInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (BindImageMemoryInfo es)
-instance Show (Chain es) => Show (BindImageMemoryInfo es)
-
-instance PeekChain es => FromCStruct (BindImageMemoryInfo es)
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs
+++ /dev/null
@@ -1,332 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation  ( MemoryDedicatedRequirements(..)
-                                                                         , MemoryDedicatedAllocateInfo(..)
-                                                                         , StructureType(..)
-                                                                         ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkMemoryDedicatedRequirements - Structure describing dedicated
--- allocation requirements of buffer and image resources
---
--- = Description
---
--- When the implementation sets @requiresDedicatedAllocation@ to
--- 'Graphics.Vulkan.Core10.BaseType.TRUE', it /must/ also set
--- @prefersDedicatedAllocation@ to 'Graphics.Vulkan.Core10.BaseType.TRUE'.
---
--- If the 'MemoryDedicatedRequirements' structure is included in the
--- @pNext@ chain of the
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
--- structure passed as the @pMemoryRequirements@ parameter of a
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2'
--- call, @requiresDedicatedAllocation@ /may/ be
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' under one of the following
--- conditions:
---
--- -   The @pNext@ chain of
---     'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo' for the call to
---     'Graphics.Vulkan.Core10.Buffer.createBuffer' used to create the
---     buffer being queried included a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'
---     structure, and any of the handle types specified in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
---     requires dedicated allocation, as reported by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferProperties'
---     in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'::@externalMemoryProperties.externalMemoryFeatures@,
---     the @requiresDedicatedAllocation@ field will be set to
---     'Graphics.Vulkan.Core10.BaseType.TRUE'.
---
--- In all other cases, @requiresDedicatedAllocation@ /must/ be set to
--- 'Graphics.Vulkan.Core10.BaseType.FALSE' by the implementation whenever a
--- 'MemoryDedicatedRequirements' structure is included in the @pNext@ chain
--- of the
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
--- structure passed to a call to
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2'.
---
--- If the 'MemoryDedicatedRequirements' structure is included in the
--- @pNext@ chain of the
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
--- structure passed as the @pMemoryRequirements@ parameter of a
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2'
--- call and
--- 'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'
--- was set in 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo'::@flags@
--- when @buffer@ was created then the implementation /must/ set both
--- @prefersDedicatedAllocation@ and @requiresDedicatedAllocation@ to
--- 'Graphics.Vulkan.Core10.BaseType.FALSE'.
---
--- If the 'MemoryDedicatedRequirements' structure is included in the
--- @pNext@ chain of the
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
--- structure passed as the @pMemoryRequirements@ parameter of a
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
--- call, @requiresDedicatedAllocation@ /may/ be
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' under one of the following
--- conditions:
---
--- -   The @pNext@ chain of 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'
---     for the call to 'Graphics.Vulkan.Core10.Image.createImage' used to
---     create the image being queried included a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
---     structure, and any of the handle types specified in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
---     requires dedicated allocation, as reported by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---     in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'::@externalMemoryProperties.externalMemoryFeatures@,
---     the @requiresDedicatedAllocation@ field will be set to
---     'Graphics.Vulkan.Core10.BaseType.TRUE'.
---
--- In all other cases, @requiresDedicatedAllocation@ /must/ be set to
--- 'Graphics.Vulkan.Core10.BaseType.FALSE' by the implementation whenever a
--- 'MemoryDedicatedRequirements' structure is included in the @pNext@ chain
--- of the
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
--- structure passed to a call to
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'.
---
--- If the 'MemoryDedicatedRequirements' structure is included in the
--- @pNext@ chain of the
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
--- structure passed as the @pMemoryRequirements@ parameter of a
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
--- call and
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'
--- was set in 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ when
--- @image@ was created then the implementation /must/ set both
--- @prefersDedicatedAllocation@ and @requiresDedicatedAllocation@ to
--- 'Graphics.Vulkan.Core10.BaseType.FALSE'.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data MemoryDedicatedRequirements = MemoryDedicatedRequirements
-  { -- | @prefersDedicatedAllocation@ specifies that the implementation would
-    -- prefer a dedicated allocation for this resource. The application is
-    -- still free to suballocate the resource but it /may/ get better
-    -- performance if a dedicated allocation is used.
-    prefersDedicatedAllocation :: Bool
-  , -- | @requiresDedicatedAllocation@ specifies that a dedicated allocation is
-    -- required for this resource.
-    requiresDedicatedAllocation :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show MemoryDedicatedRequirements
-
-instance ToCStruct MemoryDedicatedRequirements where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryDedicatedRequirements{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (prefersDedicatedAllocation))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (requiresDedicatedAllocation))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct MemoryDedicatedRequirements where
-  peekCStruct p = do
-    prefersDedicatedAllocation <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    requiresDedicatedAllocation <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ MemoryDedicatedRequirements
-             (bool32ToBool prefersDedicatedAllocation) (bool32ToBool requiresDedicatedAllocation)
-
-instance Storable MemoryDedicatedRequirements where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryDedicatedRequirements where
-  zero = MemoryDedicatedRequirements
-           zero
-           zero
-
-
--- | VkMemoryDedicatedAllocateInfo - Specify a dedicated memory allocation
--- resource
---
--- == Valid Usage
---
--- -   At least one of @image@ and @buffer@ /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     and the memory is not an imported Android Hardware Buffer,
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@
---     /must/ equal the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@
---     of the image
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @image@ /must/ have been created without
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'
---     set in 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@
---
--- -   If @buffer@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     and the memory is not an imported Android Hardware Buffer,
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@
---     /must/ equal the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@
---     of the buffer
---
--- -   If @buffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/
---     have been created without
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'
---     set in 'Graphics.Vulkan.Core10.Buffer.BufferCreateInfo'::@flags@
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     and 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' defines a
---     memory import operation with handle type
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT',
---     and the external handle was created by the Vulkan API, then the
---     memory being imported /must/ also be a dedicated image allocation
---     and @image@ must be identical to the image associated with the
---     imported memory
---
--- -   If @buffer@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     and 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' defines a
---     memory import operation with handle type
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT',
---     and the external handle was created by the Vulkan API, then the
---     memory being imported /must/ also be a dedicated buffer allocation
---     and @buffer@ /must/ be identical to the buffer associated with the
---     imported memory
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     and 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' defines a
---     memory import operation with handle type
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT',
---     the memory being imported /must/ also be a dedicated image
---     allocation and @image@ /must/ be identical to the image associated
---     with the imported memory
---
--- -   If @buffer@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     and 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' defines a
---     memory import operation with handle type
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT',
---     the memory being imported /must/ also be a dedicated buffer
---     allocation and @buffer@ /must/ be identical to the buffer associated
---     with the imported memory
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @image@ /must/ not have been created with
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---     set in 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO'
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   If @buffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   Both of @buffer@, and @image@ that are valid handles of non-ignored
---     parameters /must/ have been created, allocated, or retrieved from
---     the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data MemoryDedicatedAllocateInfo = MemoryDedicatedAllocateInfo
-  { -- | @image@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or a handle
-    -- of an image which this memory will be bound to.
-    image :: Image
-  , -- | @buffer@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or a
-    -- handle of a buffer which this memory will be bound to.
-    buffer :: Buffer
-  }
-  deriving (Typeable)
-deriving instance Show MemoryDedicatedAllocateInfo
-
-instance ToCStruct MemoryDedicatedAllocateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryDedicatedAllocateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Image)) (image)
-    poke ((p `plusPtr` 24 :: Ptr Buffer)) (buffer)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct MemoryDedicatedAllocateInfo where
-  peekCStruct p = do
-    image <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
-    buffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer))
-    pure $ MemoryDedicatedAllocateInfo
-             image buffer
-
-instance Storable MemoryDedicatedAllocateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryDedicatedAllocateInfo where
-  zero = MemoryDedicatedAllocateInfo
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation  ( MemoryDedicatedAllocateInfo
-                                                                         , MemoryDedicatedRequirements
-                                                                         ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data MemoryDedicatedAllocateInfo
-
-instance ToCStruct MemoryDedicatedAllocateInfo
-instance Show MemoryDedicatedAllocateInfo
-
-instance FromCStruct MemoryDedicatedAllocateInfo
-
-
-data MemoryDedicatedRequirements
-
-instance ToCStruct MemoryDedicatedRequirements
-instance Show MemoryDedicatedRequirements
-
-instance FromCStruct MemoryDedicatedRequirements
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs
+++ /dev/null
@@ -1,674 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template  ( createDescriptorUpdateTemplate
-                                                                               , withDescriptorUpdateTemplate
-                                                                               , destroyDescriptorUpdateTemplate
-                                                                               , updateDescriptorSetWithTemplate
-                                                                               , DescriptorUpdateTemplateEntry(..)
-                                                                               , DescriptorUpdateTemplateCreateInfo(..)
-                                                                               , DescriptorUpdateTemplate(..)
-                                                                               , DescriptorUpdateTemplateCreateFlags(..)
-                                                                               , StructureType(..)
-                                                                               , DescriptorUpdateTemplateType(..)
-                                                                               , ObjectType(..)
-                                                                               ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Handles (DescriptorSet)
-import Graphics.Vulkan.Core10.Handles (DescriptorSet(..))
-import Graphics.Vulkan.Core10.Handles (DescriptorSetLayout)
-import Graphics.Vulkan.Core10.Enums.DescriptorType (DescriptorType)
-import Graphics.Vulkan.Core11.Handles (DescriptorUpdateTemplate)
-import Graphics.Vulkan.Core11.Handles (DescriptorUpdateTemplate(..))
-import Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags (DescriptorUpdateTemplateCreateFlags)
-import Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType (DescriptorUpdateTemplateType)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateDescriptorUpdateTemplate))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyDescriptorUpdateTemplate))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkUpdateDescriptorSetWithTemplate))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
-import Graphics.Vulkan.Core10.Handles (PipelineLayout)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Core11.Handles (DescriptorUpdateTemplate(..))
-import Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags (DescriptorUpdateTemplateCreateFlags(..))
-import Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType (DescriptorUpdateTemplateType(..))
-import Graphics.Vulkan.Core10.Enums.ObjectType (ObjectType(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateDescriptorUpdateTemplate
-  :: FunPtr (Ptr Device_T -> Ptr DescriptorUpdateTemplateCreateInfo -> Ptr AllocationCallbacks -> Ptr DescriptorUpdateTemplate -> IO Result) -> Ptr Device_T -> Ptr DescriptorUpdateTemplateCreateInfo -> Ptr AllocationCallbacks -> Ptr DescriptorUpdateTemplate -> IO Result
-
--- | vkCreateDescriptorUpdateTemplate - Create a new descriptor update
--- template
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the descriptor update
---     template.
---
--- -   @pCreateInfo@ is a pointer to a 'DescriptorUpdateTemplateCreateInfo'
---     structure specifying the set of descriptors to update with a single
---     call to
---     'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetWithTemplateKHR'
---     or 'updateDescriptorSetWithTemplate'.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pDescriptorUpdateTemplate@ is a pointer to a
---     'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle in
---     which the resulting descriptor update template object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'DescriptorUpdateTemplateCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pDescriptorUpdateTemplate@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate',
--- 'DescriptorUpdateTemplateCreateInfo',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-createDescriptorUpdateTemplate :: forall io . MonadIO io => Device -> DescriptorUpdateTemplateCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DescriptorUpdateTemplate)
-createDescriptorUpdateTemplate device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateDescriptorUpdateTemplate' = mkVkCreateDescriptorUpdateTemplate (pVkCreateDescriptorUpdateTemplate (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPDescriptorUpdateTemplate <- ContT $ bracket (callocBytes @DescriptorUpdateTemplate 8) free
-  r <- lift $ vkCreateDescriptorUpdateTemplate' (deviceHandle (device)) pCreateInfo pAllocator (pPDescriptorUpdateTemplate)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pDescriptorUpdateTemplate <- lift $ peek @DescriptorUpdateTemplate pPDescriptorUpdateTemplate
-  pure $ (pDescriptorUpdateTemplate)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createDescriptorUpdateTemplate' and 'destroyDescriptorUpdateTemplate'
---
--- To ensure that 'destroyDescriptorUpdateTemplate' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withDescriptorUpdateTemplate :: forall io r . MonadIO io => (io (DescriptorUpdateTemplate) -> ((DescriptorUpdateTemplate) -> io ()) -> r) -> Device -> DescriptorUpdateTemplateCreateInfo -> Maybe AllocationCallbacks -> r
-withDescriptorUpdateTemplate b device pCreateInfo pAllocator =
-  b (createDescriptorUpdateTemplate device pCreateInfo pAllocator)
-    (\(o0) -> destroyDescriptorUpdateTemplate device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyDescriptorUpdateTemplate
-  :: FunPtr (Ptr Device_T -> DescriptorUpdateTemplate -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DescriptorUpdateTemplate -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyDescriptorUpdateTemplate - Destroy a descriptor update template
--- object
---
--- = Parameters
---
--- -   @device@ is the logical device that has been used to create the
---     descriptor update template
---
--- -   @descriptorUpdateTemplate@ is the descriptor update template to
---     destroy.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @descriptorSetLayout@ was created, a compatible
---     set of callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @descriptorSetLayout@ was created, @pAllocator@
---     /must/ be @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @descriptorUpdateTemplate@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @descriptorUpdateTemplate@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   If @descriptorUpdateTemplate@ is a valid handle, it /must/ have been
---     created, allocated, or retrieved from @device@
---
--- == Host Synchronization
---
--- -   Host access to @descriptorUpdateTemplate@ /must/ be externally
---     synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-destroyDescriptorUpdateTemplate :: forall io . MonadIO io => Device -> DescriptorUpdateTemplate -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyDescriptorUpdateTemplate device descriptorUpdateTemplate allocator = liftIO . evalContT $ do
-  let vkDestroyDescriptorUpdateTemplate' = mkVkDestroyDescriptorUpdateTemplate (pVkDestroyDescriptorUpdateTemplate (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyDescriptorUpdateTemplate' (deviceHandle (device)) (descriptorUpdateTemplate) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkUpdateDescriptorSetWithTemplate
-  :: FunPtr (Ptr Device_T -> DescriptorSet -> DescriptorUpdateTemplate -> Ptr () -> IO ()) -> Ptr Device_T -> DescriptorSet -> DescriptorUpdateTemplate -> Ptr () -> IO ()
-
--- | vkUpdateDescriptorSetWithTemplate - Update the contents of a descriptor
--- set object using an update template
---
--- = Parameters
---
--- -   @device@ is the logical device that updates the descriptor sets.
---
--- -   @descriptorSet@ is the descriptor set to update
---
--- -   @descriptorUpdateTemplate@ is a
---     'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate' object
---     specifying the update mapping between @pData@ and the descriptor set
---     to update.
---
--- -   @pData@ is a pointer to memory containing one or more
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo', or
---     'Graphics.Vulkan.Core10.Handles.BufferView' structures used to write
---     the descriptors.
---
--- == Valid Usage
---
--- -   @pData@ /must/ be a valid pointer to a memory containing one or more
---     valid instances of
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo', or
---     'Graphics.Vulkan.Core10.Handles.BufferView' in a layout defined by
---     @descriptorUpdateTemplate@ when it was created with
---     'createDescriptorUpdateTemplate'
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @descriptorSet@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorSet' handle
---
--- -   @descriptorUpdateTemplate@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle
---
--- -   @descriptorUpdateTemplate@ /must/ have been created, allocated, or
---     retrieved from @device@
---
--- == Host Synchronization
---
--- -   Host access to @descriptorSet@ /must/ be externally synchronized
---
--- __API example.__
---
--- > struct AppBufferView {
--- >     VkBufferView bufferView;
--- >     uint32_t     applicationRelatedInformation;
--- > };
--- >
--- > struct AppDataStructure
--- > {
--- >     VkDescriptorImageInfo  imageInfo;          // a single image info
--- >     VkDescriptorBufferInfo bufferInfoArray[3]; // 3 buffer infos in an array
--- >     AppBufferView          bufferView[2];      // An application defined structure containing a bufferView
--- >     // ... some more application related data
--- > };
--- >
--- > const VkDescriptorUpdateTemplateEntry descriptorUpdateTemplateEntries[] =
--- > {
--- >     // binding to a single image descriptor
--- >     {
--- >         0,                                           // binding
--- >         0,                                           // dstArrayElement
--- >         1,                                           // descriptorCount
--- >         VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,   // descriptorType
--- >         offsetof(AppDataStructure, imageInfo),       // offset
--- >         0                                            // stride is not required if descriptorCount is 1
--- >     },
--- >
--- >     // binding to an array of buffer descriptors
--- >     {
--- >         1,                                           // binding
--- >         0,                                           // dstArrayElement
--- >         3,                                           // descriptorCount
--- >         VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,           // descriptorType
--- >         offsetof(AppDataStructure, bufferInfoArray), // offset
--- >         sizeof(VkDescriptorBufferInfo)               // stride, descriptor buffer infos are compact
--- >     },
--- >
--- >     // binding to an array of buffer views
--- >     {
--- >         2,                                           // binding
--- >         0,                                           // dstArrayElement
--- >         2,                                           // descriptorCount
--- >         VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,     // descriptorType
--- >         offsetof(AppDataStructure, bufferView) +
--- >           offsetof(AppBufferView, bufferView),       // offset
--- >         sizeof(AppBufferView)                        // stride, bufferViews do not have to be compact
--- >     },
--- > };
--- >
--- > // create a descriptor update template for descriptor set updates
--- > const VkDescriptorUpdateTemplateCreateInfo createInfo =
--- > {
--- >     VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,  // sType
--- >     NULL,                                                      // pNext
--- >     0,                                                         // flags
--- >     3,                                                         // descriptorUpdateEntryCount
--- >     descriptorUpdateTemplateEntries,                           // pDescriptorUpdateEntries
--- >     VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,         // templateType
--- >     myLayout,                                                  // descriptorSetLayout
--- >     0,                                                         // pipelineBindPoint, ignored by given templateType
--- >     0,                                                         // pipelineLayout, ignored by given templateType
--- >     0,                                                         // set, ignored by given templateType
--- > };
--- >
--- > VkDescriptorUpdateTemplate myDescriptorUpdateTemplate;
--- > myResult = vkCreateDescriptorUpdateTemplate(
--- >     myDevice,
--- >     &createInfo,
--- >     NULL,
--- >     &myDescriptorUpdateTemplate);
--- > }
--- >
--- >
--- > AppDataStructure appData;
--- >
--- > // fill appData here or cache it in your engine
--- > vkUpdateDescriptorSetWithTemplate(myDevice, myDescriptorSet, myDescriptorUpdateTemplate, &appData);
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DescriptorSet',
--- 'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-updateDescriptorSetWithTemplate :: forall io . MonadIO io => Device -> DescriptorSet -> DescriptorUpdateTemplate -> ("data" ::: Ptr ()) -> io ()
-updateDescriptorSetWithTemplate device descriptorSet descriptorUpdateTemplate data' = liftIO $ do
-  let vkUpdateDescriptorSetWithTemplate' = mkVkUpdateDescriptorSetWithTemplate (pVkUpdateDescriptorSetWithTemplate (deviceCmds (device :: Device)))
-  vkUpdateDescriptorSetWithTemplate' (deviceHandle (device)) (descriptorSet) (descriptorUpdateTemplate) (data')
-  pure $ ()
-
-
--- | VkDescriptorUpdateTemplateEntry - Describes a single descriptor update
--- of the descriptor update template
---
--- == Valid Usage
---
--- -   @dstBinding@ /must/ be a valid binding in the descriptor set layout
---     implicitly specified when using a descriptor update template to
---     update descriptors
---
--- -   @dstArrayElement@ and @descriptorCount@ /must/ be less than or equal
---     to the number of array elements in the descriptor set binding
---     implicitly specified when using a descriptor update template to
---     update descriptors, and all applicable consecutive bindings, as
---     described by
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive>
---
--- -   If @descriptor@ type is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
---     @dstArrayElement@ /must/ be an integer multiple of @4@
---
--- -   If @descriptor@ type is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
---     @descriptorCount@ /must/ be an integer multiple of @4@
---
--- == Valid Usage (Implicit)
---
--- -   @descriptorType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType',
--- 'DescriptorUpdateTemplateCreateInfo'
-data DescriptorUpdateTemplateEntry = DescriptorUpdateTemplateEntry
-  { -- | @dstBinding@ is the descriptor binding to update when using this
-    -- descriptor update template.
-    dstBinding :: Word32
-  , -- | @dstArrayElement@ is the starting element in the array belonging to
-    -- @dstBinding@. If the descriptor binding identified by @srcBinding@ has a
-    -- descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- then @dstArrayElement@ specifies the starting byte offset to update.
-    dstArrayElement :: Word32
-  , -- | @descriptorCount@ is the number of descriptors to update. If
-    -- @descriptorCount@ is greater than the number of remaining array elements
-    -- in the destination binding, those affect consecutive bindings in a
-    -- manner similar to
-    -- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet' above. If the
-    -- descriptor binding identified by @dstBinding@ has a descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- then @descriptorCount@ specifies the number of bytes to update and the
-    -- remaining array elements in the destination binding refer to the
-    -- remaining number of bytes in it.
-    descriptorCount :: Word32
-  , -- | @descriptorType@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType' specifying
-    -- the type of the descriptor.
-    descriptorType :: DescriptorType
-  , -- | @offset@ is the offset in bytes of the first binding in the raw data
-    -- structure.
-    offset :: Word64
-  , -- | @stride@ is the stride in bytes between two consecutive array elements
-    -- of the descriptor update informations in the raw data structure. The
-    -- actual pointer ptr for each array element j of update entry i is
-    -- computed using the following formula:
-    --
-    -- >     const char *ptr = (const char *)pData + pDescriptorUpdateEntries[i].offset + j * pDescriptorUpdateEntries[i].stride
-    --
-    -- The stride is useful in case the bindings are stored in structs along
-    -- with other data. If @descriptorType@ is
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- then the value of @stride@ is ignored and the stride is assumed to be
-    -- @1@, i.e. the descriptor update information for them is always specified
-    -- as a contiguous range.
-    stride :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show DescriptorUpdateTemplateEntry
-
-instance ToCStruct DescriptorUpdateTemplateEntry where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorUpdateTemplateEntry{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (dstBinding)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (dstArrayElement)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (descriptorCount)
-    poke ((p `plusPtr` 12 :: Ptr DescriptorType)) (descriptorType)
-    poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (offset))
-    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (stride))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr DescriptorType)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (zero))
-    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (zero))
-    f
-
-instance FromCStruct DescriptorUpdateTemplateEntry where
-  peekCStruct p = do
-    dstBinding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    dstArrayElement <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    descriptorCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    descriptorType <- peek @DescriptorType ((p `plusPtr` 12 :: Ptr DescriptorType))
-    offset <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))
-    stride <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
-    pure $ DescriptorUpdateTemplateEntry
-             dstBinding dstArrayElement descriptorCount descriptorType ((\(CSize a) -> a) offset) ((\(CSize a) -> a) stride)
-
-instance Storable DescriptorUpdateTemplateEntry where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DescriptorUpdateTemplateEntry where
-  zero = DescriptorUpdateTemplateEntry
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDescriptorUpdateTemplateCreateInfo - Structure specifying parameters
--- of a newly created descriptor update template
---
--- == Valid Usage
---
--- -   If @templateType@ is
---     'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET',
---     @descriptorSetLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout' handle
---
--- -   If @templateType@ is
---     'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR',
---     @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value
---
--- -   If @templateType@ is
---     'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR',
---     @pipelineLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   If @templateType@ is
---     'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR',
---     @set@ /must/ be the unique set number in the pipeline layout that
---     uses a descriptor set layout that was created with
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be @0@
---
--- -   @pDescriptorUpdateEntries@ /must/ be a valid pointer to an array of
---     @descriptorUpdateEntryCount@ valid 'DescriptorUpdateTemplateEntry'
---     structures
---
--- -   @templateType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DescriptorUpdateTemplateType'
---     value
---
--- -   @descriptorUpdateEntryCount@ /must/ be greater than @0@
---
--- -   Both of @descriptorSetLayout@, and @pipelineLayout@ that are valid
---     handles of non-ignored parameters /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout',
--- 'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags.DescriptorUpdateTemplateCreateFlags',
--- 'DescriptorUpdateTemplateEntry',
--- 'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DescriptorUpdateTemplateType',
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR'
-data DescriptorUpdateTemplateCreateInfo = DescriptorUpdateTemplateCreateInfo
-  { -- | @flags@ is reserved for future use.
-    flags :: DescriptorUpdateTemplateCreateFlags
-  , -- | @pDescriptorUpdateEntries@ is a pointer to an array of
-    -- 'DescriptorUpdateTemplateEntry' structures describing the descriptors to
-    -- be updated by the descriptor update template.
-    descriptorUpdateEntries :: Vector DescriptorUpdateTemplateEntry
-  , -- | @templateType@ Specifies the type of the descriptor update template. If
-    -- set to
-    -- 'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET'
-    -- it /can/ only be used to update descriptor sets with a fixed
-    -- @descriptorSetLayout@. If set to
-    -- 'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR'
-    -- it /can/ only be used to push descriptor sets using the provided
-    -- @pipelineBindPoint@, @pipelineLayout@, and @set@ number.
-    templateType :: DescriptorUpdateTemplateType
-  , -- | @descriptorSetLayout@ is the descriptor set layout the parameter update
-    -- template will be used with. All descriptor sets which are going to be
-    -- updated through the newly created descriptor update template /must/ be
-    -- created with this layout. @descriptorSetLayout@ is the descriptor set
-    -- layout used to build the descriptor update template. All descriptor sets
-    -- which are going to be updated through the newly created descriptor
-    -- update template /must/ be created with a layout that matches (is the
-    -- same as, or defined identically to) this layout. This parameter is
-    -- ignored if @templateType@ is not
-    -- 'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET'.
-    descriptorSetLayout :: DescriptorSetLayout
-  , -- | @pipelineBindPoint@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
-    -- indicating whether the descriptors will be used by graphics pipelines or
-    -- compute pipelines. This parameter is ignored if @templateType@ is not
-    -- 'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR'
-    pipelineBindPoint :: PipelineBindPoint
-  , -- | @pipelineLayout@ is a 'Graphics.Vulkan.Core10.Handles.PipelineLayout'
-    -- object used to program the bindings. This parameter is ignored if
-    -- @templateType@ is not
-    -- 'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR'
-    pipelineLayout :: PipelineLayout
-  , -- | @set@ is the set number of the descriptor set in the pipeline layout
-    -- that will be updated. This parameter is ignored if @templateType@ is not
-    -- 'Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR'
-    set :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DescriptorUpdateTemplateCreateInfo
-
-instance ToCStruct DescriptorUpdateTemplateCreateInfo where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorUpdateTemplateCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorUpdateTemplateCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (descriptorUpdateEntries)) :: Word32))
-    pPDescriptorUpdateEntries' <- ContT $ allocaBytesAligned @DescriptorUpdateTemplateEntry ((Data.Vector.length (descriptorUpdateEntries)) * 32) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDescriptorUpdateEntries' `plusPtr` (32 * (i)) :: Ptr DescriptorUpdateTemplateEntry) (e) . ($ ())) (descriptorUpdateEntries)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorUpdateTemplateEntry))) (pPDescriptorUpdateEntries')
-    lift $ poke ((p `plusPtr` 32 :: Ptr DescriptorUpdateTemplateType)) (templateType)
-    lift $ poke ((p `plusPtr` 40 :: Ptr DescriptorSetLayout)) (descriptorSetLayout)
-    lift $ poke ((p `plusPtr` 48 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
-    lift $ poke ((p `plusPtr` 56 :: Ptr PipelineLayout)) (pipelineLayout)
-    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) (set)
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPDescriptorUpdateEntries' <- ContT $ allocaBytesAligned @DescriptorUpdateTemplateEntry ((Data.Vector.length (mempty)) * 32) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDescriptorUpdateEntries' `plusPtr` (32 * (i)) :: Ptr DescriptorUpdateTemplateEntry) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorUpdateTemplateEntry))) (pPDescriptorUpdateEntries')
-    lift $ poke ((p `plusPtr` 32 :: Ptr DescriptorUpdateTemplateType)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr DescriptorSetLayout)) (zero)
-    lift $ poke ((p `plusPtr` 48 :: Ptr PipelineBindPoint)) (zero)
-    lift $ poke ((p `plusPtr` 56 :: Ptr PipelineLayout)) (zero)
-    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance FromCStruct DescriptorUpdateTemplateCreateInfo where
-  peekCStruct p = do
-    flags <- peek @DescriptorUpdateTemplateCreateFlags ((p `plusPtr` 16 :: Ptr DescriptorUpdateTemplateCreateFlags))
-    descriptorUpdateEntryCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pDescriptorUpdateEntries <- peek @(Ptr DescriptorUpdateTemplateEntry) ((p `plusPtr` 24 :: Ptr (Ptr DescriptorUpdateTemplateEntry)))
-    pDescriptorUpdateEntries' <- generateM (fromIntegral descriptorUpdateEntryCount) (\i -> peekCStruct @DescriptorUpdateTemplateEntry ((pDescriptorUpdateEntries `advancePtrBytes` (32 * (i)) :: Ptr DescriptorUpdateTemplateEntry)))
-    templateType <- peek @DescriptorUpdateTemplateType ((p `plusPtr` 32 :: Ptr DescriptorUpdateTemplateType))
-    descriptorSetLayout <- peek @DescriptorSetLayout ((p `plusPtr` 40 :: Ptr DescriptorSetLayout))
-    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 48 :: Ptr PipelineBindPoint))
-    pipelineLayout <- peek @PipelineLayout ((p `plusPtr` 56 :: Ptr PipelineLayout))
-    set <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    pure $ DescriptorUpdateTemplateCreateInfo
-             flags pDescriptorUpdateEntries' templateType descriptorSetLayout pipelineBindPoint pipelineLayout set
-
-instance Zero DescriptorUpdateTemplateCreateInfo where
-  zero = DescriptorUpdateTemplateCreateInfo
-           zero
-           mempty
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template  ( DescriptorUpdateTemplateCreateInfo
-                                                                               , DescriptorUpdateTemplateEntry
-                                                                               ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DescriptorUpdateTemplateCreateInfo
-
-instance ToCStruct DescriptorUpdateTemplateCreateInfo
-instance Show DescriptorUpdateTemplateCreateInfo
-
-instance FromCStruct DescriptorUpdateTemplateCreateInfo
-
-
-data DescriptorUpdateTemplateEntry
-
-instance ToCStruct DescriptorUpdateTemplateEntry
-instance Show DescriptorUpdateTemplateEntry
-
-instance FromCStruct DescriptorUpdateTemplateEntry
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs
+++ /dev/null
@@ -1,926 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group  ( getDeviceGroupPeerMemoryFeatures
-                                                                 , cmdSetDeviceMask
-                                                                 , cmdDispatchBase
-                                                                 , pattern PIPELINE_CREATE_DISPATCH_BASE
-                                                                 , MemoryAllocateFlagsInfo(..)
-                                                                 , DeviceGroupRenderPassBeginInfo(..)
-                                                                 , DeviceGroupCommandBufferBeginInfo(..)
-                                                                 , DeviceGroupSubmitInfo(..)
-                                                                 , DeviceGroupBindSparseInfo(..)
-                                                                 , StructureType(..)
-                                                                 , PipelineCreateFlagBits(..)
-                                                                 , PipelineCreateFlags
-                                                                 , DependencyFlagBits(..)
-                                                                 , DependencyFlags
-                                                                 , PeerMemoryFeatureFlagBits(..)
-                                                                 , PeerMemoryFeatureFlags
-                                                                 , MemoryAllocateFlagBits(..)
-                                                                 , MemoryAllocateFlags
-                                                                 ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDispatchBase))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetDeviceMask))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeviceGroupPeerMemoryFeatures))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
-import Graphics.Vulkan.Core10.CommandBufferBuilding (Rect2D)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
-import Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(PIPELINE_CREATE_DISPATCH_BASE_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO))
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceGroupPeerMemoryFeatures
-  :: FunPtr (Ptr Device_T -> Word32 -> Word32 -> Word32 -> Ptr PeerMemoryFeatureFlags -> IO ()) -> Ptr Device_T -> Word32 -> Word32 -> Word32 -> Ptr PeerMemoryFeatureFlags -> IO ()
-
--- | vkGetDeviceGroupPeerMemoryFeatures - Query supported peer memory
--- features of a device
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the memory.
---
--- -   @heapIndex@ is the index of the memory heap from which the memory is
---     allocated.
---
--- -   @localDeviceIndex@ is the device index of the physical device that
---     performs the memory access.
---
--- -   @remoteDeviceIndex@ is the device index of the physical device that
---     the memory is allocated for.
---
--- -   @pPeerMemoryFeatures@ is a pointer to a
---     'Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits.PeerMemoryFeatureFlags'
---     bitmask indicating which types of memory accesses are supported for
---     the combination of heap, local, and remote devices.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits.PeerMemoryFeatureFlags'
-getDeviceGroupPeerMemoryFeatures :: forall io . MonadIO io => Device -> ("heapIndex" ::: Word32) -> ("localDeviceIndex" ::: Word32) -> ("remoteDeviceIndex" ::: Word32) -> io (("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
-getDeviceGroupPeerMemoryFeatures device heapIndex localDeviceIndex remoteDeviceIndex = liftIO . evalContT $ do
-  let vkGetDeviceGroupPeerMemoryFeatures' = mkVkGetDeviceGroupPeerMemoryFeatures (pVkGetDeviceGroupPeerMemoryFeatures (deviceCmds (device :: Device)))
-  pPPeerMemoryFeatures <- ContT $ bracket (callocBytes @PeerMemoryFeatureFlags 4) free
-  lift $ vkGetDeviceGroupPeerMemoryFeatures' (deviceHandle (device)) (heapIndex) (localDeviceIndex) (remoteDeviceIndex) (pPPeerMemoryFeatures)
-  pPeerMemoryFeatures <- lift $ peek @PeerMemoryFeatureFlags pPPeerMemoryFeatures
-  pure $ (pPeerMemoryFeatures)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetDeviceMask
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> IO ()
-
--- | vkCmdSetDeviceMask - Modify device mask of a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is command buffer whose current device mask is
---     modified.
---
--- -   @deviceMask@ is the new value of the current device mask.
---
--- = Description
---
--- @deviceMask@ is used to filter out subsequent commands from executing on
--- all physical devices whose bit indices are not set in the mask, except
--- commands beginning a render pass instance, commands transitioning to the
--- next subpass in the render pass instance, and commands ending a render
--- pass instance, which always execute on the set of physical devices whose
--- bit indices are included in the @deviceMask@ member of the
--- 'DeviceGroupRenderPassBeginInfo' structure passed to the command
--- beginning the corresponding render pass instance.
---
--- == Valid Usage
---
--- -   @deviceMask@ /must/ be a valid device mask value
---
--- -   @deviceMask@ /must/ not be zero
---
--- -   @deviceMask@ /must/ not include any set bits that were not in the
---     'DeviceGroupCommandBufferBeginInfo'::@deviceMask@ value when the
---     command buffer began recording
---
--- -   If 'cmdSetDeviceMask' is called inside a render pass instance,
---     @deviceMask@ /must/ not include any set bits that were not in the
---     'DeviceGroupRenderPassBeginInfo'::@deviceMask@ value when the render
---     pass instance began recording
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, compute,
---     or transfer operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Transfer                                                                                                              |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdSetDeviceMask :: forall io . MonadIO io => CommandBuffer -> ("deviceMask" ::: Word32) -> io ()
-cmdSetDeviceMask commandBuffer deviceMask = liftIO $ do
-  let vkCmdSetDeviceMask' = mkVkCmdSetDeviceMask (pVkCmdSetDeviceMask (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdSetDeviceMask' (commandBufferHandle (commandBuffer)) (deviceMask)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDispatchBase
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDispatchBase - Dispatch compute work items
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @baseGroupX@ is the start value for the X component of
---     @WorkgroupId@.
---
--- -   @baseGroupY@ is the start value for the Y component of
---     @WorkgroupId@.
---
--- -   @baseGroupZ@ is the start value for the Z component of
---     @WorkgroupId@.
---
--- -   @groupCountX@ is the number of local workgroups to dispatch in the X
---     dimension.
---
--- -   @groupCountY@ is the number of local workgroups to dispatch in the Y
---     dimension.
---
--- -   @groupCountZ@ is the number of local workgroups to dispatch in the Z
---     dimension.
---
--- = Description
---
--- When the command is executed, a global workgroup consisting of
--- @groupCountX@ × @groupCountY@ × @groupCountZ@ local workgroups is
--- assembled, with @WorkgroupId@ values ranging from [@baseGroup*@,
--- @baseGroup*@ + @groupCount*@) in each component.
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDispatch' is equivalent
--- to @vkCmdDispatchBase(0,0,0,groupCountX,groupCountY,groupCountZ)@.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   @baseGroupX@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
---
--- -   @baseGroupX@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
---
--- -   @baseGroupZ@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
---
--- -   @groupCountX@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
---     minus @baseGroupX@
---
--- -   @groupCountY@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
---     minus @baseGroupY@
---
--- -   @groupCountZ@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
---     minus @baseGroupZ@
---
--- -   If any of @baseGroupX@, @baseGroupY@, or @baseGroupZ@ are not zero,
---     then the bound compute pipeline /must/ have been created with the
---     'PIPELINE_CREATE_DISPATCH_BASE' flag
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdDispatchBase :: forall io . MonadIO io => CommandBuffer -> ("baseGroupX" ::: Word32) -> ("baseGroupY" ::: Word32) -> ("baseGroupZ" ::: Word32) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> io ()
-cmdDispatchBase commandBuffer baseGroupX baseGroupY baseGroupZ groupCountX groupCountY groupCountZ = liftIO $ do
-  let vkCmdDispatchBase' = mkVkCmdDispatchBase (pVkCmdDispatchBase (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDispatchBase' (commandBufferHandle (commandBuffer)) (baseGroupX) (baseGroupY) (baseGroupZ) (groupCountX) (groupCountY) (groupCountZ)
-  pure $ ()
-
-
--- No documentation found for TopLevel "VK_PIPELINE_CREATE_DISPATCH_BASE"
-pattern PIPELINE_CREATE_DISPATCH_BASE = PIPELINE_CREATE_DISPATCH_BASE_BIT
-
-
--- | VkMemoryAllocateFlagsInfo - Structure controlling how many instances of
--- memory will be allocated
---
--- = Description
---
--- If
--- 'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_MASK_BIT'
--- is not set, the number of instances allocated depends on whether
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
--- is set in the memory heap. If
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
--- is set, then memory is allocated for every physical device in the
--- logical device (as if @deviceMask@ has bits set for all device indices).
--- If
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
--- is not set, then a single instance of memory is allocated (as if
--- @deviceMask@ is set to one).
---
--- On some implementations, allocations from a multi-instance heap /may/
--- consume memory on all physical devices even if the @deviceMask@ excludes
--- some devices. If
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties'::@subsetAllocation@
--- is 'Graphics.Vulkan.Core10.BaseType.TRUE', then memory is only consumed
--- for the devices in the device mask.
---
--- Note
---
--- In practice, most allocations on a multi-instance heap will be allocated
--- across all physical devices. Unicast allocation support is an optional
--- optimization for a minority of allocations.
---
--- == Valid Usage
---
--- -   If
---     'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_MASK_BIT'
---     is set, @deviceMask@ /must/ be a valid device mask
---
--- -   If
---     'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_MASK_BIT'
---     is set, @deviceMask@ /must/ not be zero
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO'
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MemoryAllocateFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MemoryAllocateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data MemoryAllocateFlagsInfo = MemoryAllocateFlagsInfo
-  { -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MemoryAllocateFlagBits'
-    -- controlling the allocation.
-    flags :: MemoryAllocateFlags
-  , -- | @deviceMask@ is a mask of physical devices in the logical device,
-    -- indicating that memory /must/ be allocated on each device in the mask,
-    -- if
-    -- 'Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_MASK_BIT'
-    -- is set in @flags@.
-    deviceMask :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show MemoryAllocateFlagsInfo
-
-instance ToCStruct MemoryAllocateFlagsInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryAllocateFlagsInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr MemoryAllocateFlags)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (deviceMask)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct MemoryAllocateFlagsInfo where
-  peekCStruct p = do
-    flags <- peek @MemoryAllocateFlags ((p `plusPtr` 16 :: Ptr MemoryAllocateFlags))
-    deviceMask <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pure $ MemoryAllocateFlagsInfo
-             flags deviceMask
-
-instance Storable MemoryAllocateFlagsInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryAllocateFlagsInfo where
-  zero = MemoryAllocateFlagsInfo
-           zero
-           zero
-
-
--- | VkDeviceGroupRenderPassBeginInfo - Set the initial device mask and
--- render areas for a render pass instance
---
--- = Description
---
--- The @deviceMask@ serves several purposes. It is an upper bound on the
--- set of physical devices that /can/ be used during the render pass
--- instance, and the initial device mask when the render pass instance
--- begins. In addition, commands transitioning to the next subpass in the
--- render pass instance and commands ending the render pass instance, and,
--- accordingly render pass attachment load, store, and resolve operations
--- and subpass dependencies corresponding to the render pass instance, are
--- executed on the physical devices included in the device mask provided
--- here.
---
--- If @deviceRenderAreaCount@ is not zero, then the elements of
--- @pDeviceRenderAreas@ override the value of
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderArea@,
--- and provide a render area specific to each physical device. These render
--- areas serve the same purpose as
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderArea@,
--- including controlling the region of attachments that are cleared by
--- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'
--- and that are resolved into resolve attachments.
---
--- If this structure is not present, the render pass instance’s device mask
--- is the value of 'DeviceGroupCommandBufferBeginInfo'::@deviceMask@. If
--- this structure is not present or if @deviceRenderAreaCount@ is zero,
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderArea@
--- is used for all physical devices.
---
--- == Valid Usage
---
--- -   @deviceMask@ /must/ be a valid device mask value
---
--- -   @deviceMask@ /must/ not be zero
---
--- -   @deviceMask@ /must/ be a subset of the command buffer’s initial
---     device mask
---
--- -   @deviceRenderAreaCount@ /must/ either be zero or equal to the number
---     of physical devices in the logical device
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO'
---
--- -   If @deviceRenderAreaCount@ is not @0@, @pDeviceRenderAreas@ /must/
---     be a valid pointer to an array of @deviceRenderAreaCount@
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceGroupRenderPassBeginInfo = DeviceGroupRenderPassBeginInfo
-  { -- | @deviceMask@ is the device mask for the render pass instance.
-    deviceMask :: Word32
-  , -- | @pDeviceRenderAreas@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
-    -- defining the render area for each physical device.
-    deviceRenderAreas :: Vector Rect2D
-  }
-  deriving (Typeable)
-deriving instance Show DeviceGroupRenderPassBeginInfo
-
-instance ToCStruct DeviceGroupRenderPassBeginInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceGroupRenderPassBeginInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (deviceMask)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceRenderAreas)) :: Word32))
-    pPDeviceRenderAreas' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (deviceRenderAreas)) * 16) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDeviceRenderAreas' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (deviceRenderAreas)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Rect2D))) (pPDeviceRenderAreas')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    pPDeviceRenderAreas' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (mempty)) * 16) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDeviceRenderAreas' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Rect2D))) (pPDeviceRenderAreas')
-    lift $ f
-
-instance FromCStruct DeviceGroupRenderPassBeginInfo where
-  peekCStruct p = do
-    deviceMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    deviceRenderAreaCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pDeviceRenderAreas <- peek @(Ptr Rect2D) ((p `plusPtr` 24 :: Ptr (Ptr Rect2D)))
-    pDeviceRenderAreas' <- generateM (fromIntegral deviceRenderAreaCount) (\i -> peekCStruct @Rect2D ((pDeviceRenderAreas `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
-    pure $ DeviceGroupRenderPassBeginInfo
-             deviceMask pDeviceRenderAreas'
-
-instance Zero DeviceGroupRenderPassBeginInfo where
-  zero = DeviceGroupRenderPassBeginInfo
-           zero
-           mempty
-
-
--- | VkDeviceGroupCommandBufferBeginInfo - Set the initial device mask for a
--- command buffer
---
--- = Description
---
--- The initial device mask also acts as an upper bound on the set of
--- devices that /can/ ever be in the device mask in the command buffer.
---
--- If this structure is not present, the initial value of a command
--- buffer’s device mask is set to include all physical devices in the
--- logical device when the command buffer begins recording.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceGroupCommandBufferBeginInfo = DeviceGroupCommandBufferBeginInfo
-  { -- | @deviceMask@ /must/ not be zero
-    deviceMask :: Word32 }
-  deriving (Typeable)
-deriving instance Show DeviceGroupCommandBufferBeginInfo
-
-instance ToCStruct DeviceGroupCommandBufferBeginInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceGroupCommandBufferBeginInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (deviceMask)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DeviceGroupCommandBufferBeginInfo where
-  peekCStruct p = do
-    deviceMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ DeviceGroupCommandBufferBeginInfo
-             deviceMask
-
-instance Storable DeviceGroupCommandBufferBeginInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeviceGroupCommandBufferBeginInfo where
-  zero = DeviceGroupCommandBufferBeginInfo
-           zero
-
-
--- | VkDeviceGroupSubmitInfo - Structure indicating which physical devices
--- execute semaphore operations and command buffers
---
--- = Description
---
--- If this structure is not present, semaphore operations and command
--- buffers execute on device index zero.
---
--- == Valid Usage
---
--- -   @waitSemaphoreCount@ /must/ equal
---     'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@waitSemaphoreCount@
---
--- -   @commandBufferCount@ /must/ equal
---     'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@commandBufferCount@
---
--- -   @signalSemaphoreCount@ /must/ equal
---     'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@signalSemaphoreCount@
---
--- -   All elements of @pWaitSemaphoreDeviceIndices@ and
---     @pSignalSemaphoreDeviceIndices@ /must/ be valid device indices
---
--- -   All elements of @pCommandBufferDeviceMasks@ /must/ be valid device
---     masks
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO'
---
--- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphoreDeviceIndices@
---     /must/ be a valid pointer to an array of @waitSemaphoreCount@
---     @uint32_t@ values
---
--- -   If @commandBufferCount@ is not @0@, @pCommandBufferDeviceMasks@
---     /must/ be a valid pointer to an array of @commandBufferCount@
---     @uint32_t@ values
---
--- -   If @signalSemaphoreCount@ is not @0@,
---     @pSignalSemaphoreDeviceIndices@ /must/ be a valid pointer to an
---     array of @signalSemaphoreCount@ @uint32_t@ values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceGroupSubmitInfo = DeviceGroupSubmitInfo
-  { -- | @pWaitSemaphoreDeviceIndices@ is a pointer to an array of
-    -- @waitSemaphoreCount@ device indices indicating which physical device
-    -- executes the semaphore wait operation in the corresponding element of
-    -- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pWaitSemaphores@.
-    waitSemaphoreDeviceIndices :: Vector Word32
-  , -- | @pCommandBufferDeviceMasks@ is a pointer to an array of
-    -- @commandBufferCount@ device masks indicating which physical devices
-    -- execute the command buffer in the corresponding element of
-    -- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pCommandBuffers@. A physical
-    -- device executes the command buffer if the corresponding bit is set in
-    -- the mask.
-    commandBufferDeviceMasks :: Vector Word32
-  , -- | @pSignalSemaphoreDeviceIndices@ is a pointer to an array of
-    -- @signalSemaphoreCount@ device indices indicating which physical device
-    -- executes the semaphore signal operation in the corresponding element of
-    -- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pSignalSemaphores@.
-    signalSemaphoreDeviceIndices :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show DeviceGroupSubmitInfo
-
-instance ToCStruct DeviceGroupSubmitInfo where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceGroupSubmitInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (waitSemaphoreDeviceIndices)) :: Word32))
-    pPWaitSemaphoreDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (waitSemaphoreDeviceIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphoreDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (waitSemaphoreDeviceIndices)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPWaitSemaphoreDeviceIndices')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (commandBufferDeviceMasks)) :: Word32))
-    pPCommandBufferDeviceMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (commandBufferDeviceMasks)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBufferDeviceMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (commandBufferDeviceMasks)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPCommandBufferDeviceMasks')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (signalSemaphoreDeviceIndices)) :: Word32))
-    pPSignalSemaphoreDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (signalSemaphoreDeviceIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphoreDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (signalSemaphoreDeviceIndices)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Word32))) (pPSignalSemaphoreDeviceIndices')
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPWaitSemaphoreDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphoreDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPWaitSemaphoreDeviceIndices')
-    pPCommandBufferDeviceMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBufferDeviceMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPCommandBufferDeviceMasks')
-    pPSignalSemaphoreDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphoreDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Word32))) (pPSignalSemaphoreDeviceIndices')
-    lift $ f
-
-instance FromCStruct DeviceGroupSubmitInfo where
-  peekCStruct p = do
-    waitSemaphoreCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pWaitSemaphoreDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
-    pWaitSemaphoreDeviceIndices' <- generateM (fromIntegral waitSemaphoreCount) (\i -> peek @Word32 ((pWaitSemaphoreDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    commandBufferCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pCommandBufferDeviceMasks <- peek @(Ptr Word32) ((p `plusPtr` 40 :: Ptr (Ptr Word32)))
-    pCommandBufferDeviceMasks' <- generateM (fromIntegral commandBufferCount) (\i -> peek @Word32 ((pCommandBufferDeviceMasks `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    signalSemaphoreCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pSignalSemaphoreDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 56 :: Ptr (Ptr Word32)))
-    pSignalSemaphoreDeviceIndices' <- generateM (fromIntegral signalSemaphoreCount) (\i -> peek @Word32 ((pSignalSemaphoreDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ DeviceGroupSubmitInfo
-             pWaitSemaphoreDeviceIndices' pCommandBufferDeviceMasks' pSignalSemaphoreDeviceIndices'
-
-instance Zero DeviceGroupSubmitInfo where
-  zero = DeviceGroupSubmitInfo
-           mempty
-           mempty
-           mempty
-
-
--- | VkDeviceGroupBindSparseInfo - Structure indicating which instances are
--- bound
---
--- = Description
---
--- These device indices apply to all buffer and image memory binds included
--- in the batch pointing to this structure. The semaphore waits and signals
--- for the batch are executed only by the physical device specified by the
--- @resourceDeviceIndex@.
---
--- If this structure is not present, @resourceDeviceIndex@ and
--- @memoryDeviceIndex@ are assumed to be zero.
---
--- == Valid Usage
---
--- -   @resourceDeviceIndex@ and @memoryDeviceIndex@ /must/ both be valid
---     device indices
---
--- -   Each memory allocation bound in this batch /must/ have allocated an
---     instance for @memoryDeviceIndex@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceGroupBindSparseInfo = DeviceGroupBindSparseInfo
-  { -- | @resourceDeviceIndex@ is a device index indicating which instance of the
-    -- resource is bound.
-    resourceDeviceIndex :: Word32
-  , -- | @memoryDeviceIndex@ is a device index indicating which instance of the
-    -- memory the resource instance is bound to.
-    memoryDeviceIndex :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DeviceGroupBindSparseInfo
-
-instance ToCStruct DeviceGroupBindSparseInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceGroupBindSparseInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (resourceDeviceIndex)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (memoryDeviceIndex)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DeviceGroupBindSparseInfo where
-  peekCStruct p = do
-    resourceDeviceIndex <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    memoryDeviceIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pure $ DeviceGroupBindSparseInfo
-             resourceDeviceIndex memoryDeviceIndex
-
-instance Storable DeviceGroupBindSparseInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeviceGroupBindSparseInfo where
-  zero = DeviceGroupBindSparseInfo
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs-boot
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group  ( DeviceGroupBindSparseInfo
-                                                                 , DeviceGroupCommandBufferBeginInfo
-                                                                 , DeviceGroupRenderPassBeginInfo
-                                                                 , DeviceGroupSubmitInfo
-                                                                 , MemoryAllocateFlagsInfo
-                                                                 ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DeviceGroupBindSparseInfo
-
-instance ToCStruct DeviceGroupBindSparseInfo
-instance Show DeviceGroupBindSparseInfo
-
-instance FromCStruct DeviceGroupBindSparseInfo
-
-
-data DeviceGroupCommandBufferBeginInfo
-
-instance ToCStruct DeviceGroupCommandBufferBeginInfo
-instance Show DeviceGroupCommandBufferBeginInfo
-
-instance FromCStruct DeviceGroupCommandBufferBeginInfo
-
-
-data DeviceGroupRenderPassBeginInfo
-
-instance ToCStruct DeviceGroupRenderPassBeginInfo
-instance Show DeviceGroupRenderPassBeginInfo
-
-instance FromCStruct DeviceGroupRenderPassBeginInfo
-
-
-data DeviceGroupSubmitInfo
-
-instance ToCStruct DeviceGroupSubmitInfo
-instance Show DeviceGroupSubmitInfo
-
-instance FromCStruct DeviceGroupSubmitInfo
-
-
-data MemoryAllocateFlagsInfo
-
-instance ToCStruct MemoryAllocateFlagsInfo
-instance Show MemoryAllocateFlagsInfo
-
-instance FromCStruct MemoryAllocateFlagsInfo
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs
+++ /dev/null
@@ -1,306 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2  ( BindBufferMemoryDeviceGroupInfo(..)
-                                                                                       , BindImageMemoryDeviceGroupInfo(..)
-                                                                                       , StructureType(..)
-                                                                                       , ImageCreateFlagBits(..)
-                                                                                       , ImageCreateFlags
-                                                                                       ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.CommandBufferBuilding (Rect2D)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkBindBufferMemoryDeviceGroupInfo - Structure specifying device within a
--- group to bind to
---
--- = Members
---
--- If the @pNext@ list of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo'
--- includes a 'BindBufferMemoryDeviceGroupInfo' structure, then that
--- structure determines how memory is bound to buffers across multiple
--- devices in a device group.
---
--- = Description
---
--- The 'BindBufferMemoryDeviceGroupInfo' structure is defined as:
---
--- -   @sType@ is the type of this structure.
---
--- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
---
--- -   @deviceIndexCount@ is the number of elements in @pDeviceIndices@.
---
--- -   @pDeviceIndices@ is a pointer to an array of device indices.
---
--- If @deviceIndexCount@ is greater than zero, then on device index i the
--- buffer is attached to the instance of @memory@ on the physical device
--- with device index pDeviceIndices[i].
---
--- If @deviceIndexCount@ is zero and @memory@ comes from a memory heap with
--- the
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
--- bit set, then it is as if @pDeviceIndices@ contains consecutive indices
--- from zero to the number of physical devices in the logical device, minus
--- one. In other words, by default each physical device attaches to its own
--- instance of @memory@.
---
--- If @deviceIndexCount@ is zero and @memory@ comes from a memory heap
--- without the
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
--- bit set, then it is as if @pDeviceIndices@ contains an array of zeros.
--- In other words, by default each physical device attaches to instance
--- zero.
---
--- == Valid Usage
---
--- -   @deviceIndexCount@ /must/ either be zero or equal to the number of
---     physical devices in the logical device
---
--- -   All elements of @pDeviceIndices@ /must/ be valid device indices
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO'
---
--- -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid
---     pointer to an array of @deviceIndexCount@ @uint32_t@ values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data BindBufferMemoryDeviceGroupInfo = BindBufferMemoryDeviceGroupInfo
-  { -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "pDeviceIndices"
-    deviceIndices :: Vector Word32 }
-  deriving (Typeable)
-deriving instance Show BindBufferMemoryDeviceGroupInfo
-
-instance ToCStruct BindBufferMemoryDeviceGroupInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindBufferMemoryDeviceGroupInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceIndices)) :: Word32))
-    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (deviceIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (deviceIndices)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceIndices')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceIndices')
-    lift $ f
-
-instance FromCStruct BindBufferMemoryDeviceGroupInfo where
-  peekCStruct p = do
-    deviceIndexCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
-    pDeviceIndices' <- generateM (fromIntegral deviceIndexCount) (\i -> peek @Word32 ((pDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ BindBufferMemoryDeviceGroupInfo
-             pDeviceIndices'
-
-instance Zero BindBufferMemoryDeviceGroupInfo where
-  zero = BindBufferMemoryDeviceGroupInfo
-           mempty
-
-
--- | VkBindImageMemoryDeviceGroupInfo - Structure specifying device within a
--- group to bind to
---
--- = Members
---
--- If the @pNext@ list of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo'
--- includes a 'BindImageMemoryDeviceGroupInfo' structure, then that
--- structure determines how memory is bound to images across multiple
--- devices in a device group.
---
--- = Description
---
--- The 'BindImageMemoryDeviceGroupInfo' structure is defined as:
---
--- -   @sType@ is the type of this structure.
---
--- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
---
--- -   @deviceIndexCount@ is the number of elements in @pDeviceIndices@.
---
--- -   @pDeviceIndices@ is a pointer to an array of device indices.
---
--- -   @splitInstanceBindRegionCount@ is the number of elements in
---     @pSplitInstanceBindRegions@.
---
--- -   @pSplitInstanceBindRegions@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
---     describing which regions of the image are attached to each instance
---     of memory.
---
--- If @deviceIndexCount@ is greater than zero, then on device index i
--- @image@ is attached to the instance of the memory on the physical device
--- with device index pDeviceIndices[i].
---
--- Let N be the number of physical devices in the logical device. If
--- @splitInstanceBindRegionCount@ is greater than zero, then
--- @pSplitInstanceBindRegions@ is an array of N2 rectangles, where the
--- image region specified by the rectangle at element i*N+j in resource
--- instance i is bound to the memory instance j. The blocks of the memory
--- that are bound to each sparse image block region use an offset in
--- memory, relative to @memoryOffset@, computed as if the whole image were
--- being bound to a contiguous range of memory. In other words,
--- horizontally adjacent image blocks use consecutive blocks of memory,
--- vertically adjacent image blocks are separated by the number of bytes
--- per block multiplied by the width in blocks of @image@, and the block at
--- (0,0) corresponds to memory starting at @memoryOffset@.
---
--- If @splitInstanceBindRegionCount@ and @deviceIndexCount@ are zero and
--- the memory comes from a memory heap with the
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
--- bit set, then it is as if @pDeviceIndices@ contains consecutive indices
--- from zero to the number of physical devices in the logical device, minus
--- one. In other words, by default each physical device attaches to its own
--- instance of the memory.
---
--- If @splitInstanceBindRegionCount@ and @deviceIndexCount@ are zero and
--- the memory comes from a memory heap without the
--- 'Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
--- bit set, then it is as if @pDeviceIndices@ contains an array of zeros.
--- In other words, by default each physical device attaches to instance
--- zero.
---
--- == Valid Usage
---
--- -   At least one of @deviceIndexCount@ and
---     @splitInstanceBindRegionCount@ /must/ be zero
---
--- -   @deviceIndexCount@ /must/ either be zero or equal to the number of
---     physical devices in the logical device
---
--- -   All elements of @pDeviceIndices@ /must/ be valid device indices
---
--- -   @splitInstanceBindRegionCount@ /must/ either be zero or equal to the
---     number of physical devices in the logical device squared
---
--- -   Elements of @pSplitInstanceBindRegions@ that correspond to the same
---     instance of an image /must/ not overlap
---
--- -   The @offset.x@ member of any element of @pSplitInstanceBindRegions@
---     /must/ be a multiple of the sparse image block width
---     ('Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'::@imageGranularity.width@)
---     of all non-metadata aspects of the image
---
--- -   The @offset.y@ member of any element of @pSplitInstanceBindRegions@
---     /must/ be a multiple of the sparse image block height
---     ('Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'::@imageGranularity.height@)
---     of all non-metadata aspects of the image
---
--- -   The @extent.width@ member of any element of
---     @pSplitInstanceBindRegions@ /must/ either be a multiple of the
---     sparse image block width of all non-metadata aspects of the image,
---     or else @extent.width@ + @offset.x@ /must/ equal the width of the
---     image subresource
---
--- -   The @extent.height@ member of any element of
---     @pSplitInstanceBindRegions@ /must/ either be a multiple of the
---     sparse image block height of all non-metadata aspects of the image,
---     or else @extent.height@ + @offset.y@ /must/ equal the width of the
---     image subresource
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO'
---
--- -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid
---     pointer to an array of @deviceIndexCount@ @uint32_t@ values
---
--- -   If @splitInstanceBindRegionCount@ is not @0@,
---     @pSplitInstanceBindRegions@ /must/ be a valid pointer to an array of
---     @splitInstanceBindRegionCount@
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data BindImageMemoryDeviceGroupInfo = BindImageMemoryDeviceGroupInfo
-  { -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "pDeviceIndices"
-    deviceIndices :: Vector Word32
-  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "pSplitInstanceBindRegions"
-    splitInstanceBindRegions :: Vector Rect2D
-  }
-  deriving (Typeable)
-deriving instance Show BindImageMemoryDeviceGroupInfo
-
-instance ToCStruct BindImageMemoryDeviceGroupInfo where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindImageMemoryDeviceGroupInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceIndices)) :: Word32))
-    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (deviceIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (deviceIndices)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceIndices')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (splitInstanceBindRegions)) :: Word32))
-    pPSplitInstanceBindRegions' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (splitInstanceBindRegions)) * 16) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSplitInstanceBindRegions' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (splitInstanceBindRegions)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Rect2D))) (pPSplitInstanceBindRegions')
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceIndices')
-    pPSplitInstanceBindRegions' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (mempty)) * 16) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSplitInstanceBindRegions' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Rect2D))) (pPSplitInstanceBindRegions')
-    lift $ f
-
-instance FromCStruct BindImageMemoryDeviceGroupInfo where
-  peekCStruct p = do
-    deviceIndexCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
-    pDeviceIndices' <- generateM (fromIntegral deviceIndexCount) (\i -> peek @Word32 ((pDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    splitInstanceBindRegionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pSplitInstanceBindRegions <- peek @(Ptr Rect2D) ((p `plusPtr` 40 :: Ptr (Ptr Rect2D)))
-    pSplitInstanceBindRegions' <- generateM (fromIntegral splitInstanceBindRegionCount) (\i -> peekCStruct @Rect2D ((pSplitInstanceBindRegions `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
-    pure $ BindImageMemoryDeviceGroupInfo
-             pDeviceIndices' pSplitInstanceBindRegions'
-
-instance Zero BindImageMemoryDeviceGroupInfo where
-  zero = BindImageMemoryDeviceGroupInfo
-           mempty
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2  ( BindBufferMemoryDeviceGroupInfo
-                                                                                       , BindImageMemoryDeviceGroupInfo
-                                                                                       ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data BindBufferMemoryDeviceGroupInfo
-
-instance ToCStruct BindBufferMemoryDeviceGroupInfo
-instance Show BindBufferMemoryDeviceGroupInfo
-
-instance FromCStruct BindBufferMemoryDeviceGroupInfo
-
-
-data BindImageMemoryDeviceGroupInfo
-
-instance ToCStruct BindImageMemoryDeviceGroupInfo
-instance Show BindImageMemoryDeviceGroupInfo
-
-instance FromCStruct BindImageMemoryDeviceGroupInfo
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs
+++ /dev/null
@@ -1,324 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation  ( enumeratePhysicalDeviceGroups
-                                                                          , PhysicalDeviceGroupProperties(..)
-                                                                          , DeviceGroupDeviceCreateInfo(..)
-                                                                          , StructureType(..)
-                                                                          , MemoryHeapFlagBits(..)
-                                                                          , MemoryHeapFlags
-                                                                          , MAX_DEVICE_GROUP_SIZE
-                                                                          , pattern MAX_DEVICE_GROUP_SIZE
-                                                                          ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkEnumeratePhysicalDeviceGroups))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.APIConstants (MAX_DEVICE_GROUP_SIZE)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_DEVICE_GROUP_SIZE)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Core10.APIConstants (MAX_DEVICE_GROUP_SIZE)
-import Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_DEVICE_GROUP_SIZE)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkEnumeratePhysicalDeviceGroups
-  :: FunPtr (Ptr Instance_T -> Ptr Word32 -> Ptr PhysicalDeviceGroupProperties -> IO Result) -> Ptr Instance_T -> Ptr Word32 -> Ptr PhysicalDeviceGroupProperties -> IO Result
-
--- | vkEnumeratePhysicalDeviceGroups - Enumerates groups of physical devices
--- that can be used to create a single logical device
---
--- = Parameters
---
--- -   @instance@ is a handle to a Vulkan instance previously created with
---     'Graphics.Vulkan.Core10.DeviceInitialization.createInstance'.
---
--- -   @pPhysicalDeviceGroupCount@ is a pointer to an integer related to
---     the number of device groups available or queried, as described
---     below.
---
--- -   @pPhysicalDeviceGroupProperties@ is either @NULL@ or a pointer to an
---     array of 'PhysicalDeviceGroupProperties' structures.
---
--- = Description
---
--- If @pPhysicalDeviceGroupProperties@ is @NULL@, then the number of device
--- groups available is returned in @pPhysicalDeviceGroupCount@. Otherwise,
--- @pPhysicalDeviceGroupCount@ /must/ point to a variable set by the user
--- to the number of elements in the @pPhysicalDeviceGroupProperties@ array,
--- and on return the variable is overwritten with the number of structures
--- actually written to @pPhysicalDeviceGroupProperties@. If
--- @pPhysicalDeviceGroupCount@ is less than the number of device groups
--- available, at most @pPhysicalDeviceGroupCount@ structures will be
--- written. If @pPhysicalDeviceGroupCount@ is smaller than the number of
--- device groups available,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS', to indicate
--- that not all the available device groups were returned.
---
--- Every physical device /must/ be in exactly one device group.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pPhysicalDeviceGroupCount@ /must/ be a valid pointer to a
---     @uint32_t@ value
---
--- -   If the value referenced by @pPhysicalDeviceGroupCount@ is not @0@,
---     and @pPhysicalDeviceGroupProperties@ is not @NULL@,
---     @pPhysicalDeviceGroupProperties@ /must/ be a valid pointer to an
---     array of @pPhysicalDeviceGroupCount@ 'PhysicalDeviceGroupProperties'
---     structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'PhysicalDeviceGroupProperties'
-enumeratePhysicalDeviceGroups :: forall io . MonadIO io => Instance -> io (Result, ("physicalDeviceGroupProperties" ::: Vector PhysicalDeviceGroupProperties))
-enumeratePhysicalDeviceGroups instance' = liftIO . evalContT $ do
-  let vkEnumeratePhysicalDeviceGroups' = mkVkEnumeratePhysicalDeviceGroups (pVkEnumeratePhysicalDeviceGroups (instanceCmds (instance' :: Instance)))
-  let instance'' = instanceHandle (instance')
-  pPPhysicalDeviceGroupCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkEnumeratePhysicalDeviceGroups' instance'' (pPPhysicalDeviceGroupCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPhysicalDeviceGroupCount <- lift $ peek @Word32 pPPhysicalDeviceGroupCount
-  pPPhysicalDeviceGroupProperties <- ContT $ bracket (callocBytes @PhysicalDeviceGroupProperties ((fromIntegral (pPhysicalDeviceGroupCount)) * 288)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPPhysicalDeviceGroupProperties `advancePtrBytes` (i * 288) :: Ptr PhysicalDeviceGroupProperties) . ($ ())) [0..(fromIntegral (pPhysicalDeviceGroupCount)) - 1]
-  r' <- lift $ vkEnumeratePhysicalDeviceGroups' instance'' (pPPhysicalDeviceGroupCount) ((pPPhysicalDeviceGroupProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPhysicalDeviceGroupCount' <- lift $ peek @Word32 pPPhysicalDeviceGroupCount
-  pPhysicalDeviceGroupProperties' <- lift $ generateM (fromIntegral (pPhysicalDeviceGroupCount')) (\i -> peekCStruct @PhysicalDeviceGroupProperties (((pPPhysicalDeviceGroupProperties) `advancePtrBytes` (288 * (i)) :: Ptr PhysicalDeviceGroupProperties)))
-  pure $ ((r'), pPhysicalDeviceGroupProperties')
-
-
--- | VkPhysicalDeviceGroupProperties - Structure specifying physical device
--- group properties
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'enumeratePhysicalDeviceGroups',
--- 'Graphics.Vulkan.Extensions.VK_KHR_device_group_creation.enumeratePhysicalDeviceGroupsKHR'
-data PhysicalDeviceGroupProperties = PhysicalDeviceGroupProperties
-  { -- | @physicalDeviceCount@ is the number of physical devices in the group.
-    physicalDeviceCount :: Word32
-  , -- | @physicalDevices@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DEVICE_GROUP_SIZE'
-    -- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handles representing all
-    -- physical devices in the group. The first @physicalDeviceCount@ elements
-    -- of the array will be valid.
-    physicalDevices :: Vector (Ptr PhysicalDevice_T)
-  , -- | @subsetAllocation@ specifies whether logical devices created from the
-    -- group support allocating device memory on a subset of devices, via the
-    -- @deviceMask@ member of the
-    -- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'.
-    -- If this is 'Graphics.Vulkan.Core10.BaseType.FALSE', then all device
-    -- memory allocations are made across all physical devices in the group. If
-    -- @physicalDeviceCount@ is @1@, then @subsetAllocation@ /must/ be
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE'.
-    subsetAllocation :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceGroupProperties
-
-instance ToCStruct PhysicalDeviceGroupProperties where
-  withCStruct x f = allocaBytesAligned 288 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceGroupProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (physicalDeviceCount)
-    unless ((Data.Vector.length $ (physicalDevices)) <= MAX_DEVICE_GROUP_SIZE) $
-      throwIO $ IOError Nothing InvalidArgument "" "physicalDevices is too long, a maximum of MAX_DEVICE_GROUP_SIZE elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE (Ptr PhysicalDevice_T))))) `plusPtr` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)) (e)) (physicalDevices)
-    poke ((p `plusPtr` 280 :: Ptr Bool32)) (boolToBool32 (subsetAllocation))
-    f
-  cStructSize = 288
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    unless ((Data.Vector.length $ (mempty)) <= MAX_DEVICE_GROUP_SIZE) $
-      throwIO $ IOError Nothing InvalidArgument "" "physicalDevices is too long, a maximum of MAX_DEVICE_GROUP_SIZE elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE (Ptr PhysicalDevice_T))))) `plusPtr` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)) (e)) (mempty)
-    poke ((p `plusPtr` 280 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceGroupProperties where
-  peekCStruct p = do
-    physicalDeviceCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    physicalDevices <- generateM (MAX_DEVICE_GROUP_SIZE) (\i -> peek @(Ptr PhysicalDevice_T) (((lowerArrayPtr @(Ptr PhysicalDevice_T) ((p `plusPtr` 24 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE (Ptr PhysicalDevice_T))))) `advancePtrBytes` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T))))
-    subsetAllocation <- peek @Bool32 ((p `plusPtr` 280 :: Ptr Bool32))
-    pure $ PhysicalDeviceGroupProperties
-             physicalDeviceCount physicalDevices (bool32ToBool subsetAllocation)
-
-instance Storable PhysicalDeviceGroupProperties where
-  sizeOf ~_ = 288
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceGroupProperties where
-  zero = PhysicalDeviceGroupProperties
-           zero
-           mempty
-           zero
-
-
--- | VkDeviceGroupDeviceCreateInfo - Create a logical device from multiple
--- physical devices
---
--- = Description
---
--- The elements of the @pPhysicalDevices@ array are an ordered list of the
--- physical devices that the logical device represents. These /must/ be a
--- subset of a single device group, and need not be in the same order as
--- they were enumerated. The order of the physical devices in the
--- @pPhysicalDevices@ array determines the /device index/ of each physical
--- device, with element i being assigned a device index of i. Certain
--- commands and structures refer to one or more physical devices by using
--- device indices or /device masks/ formed using device indices.
---
--- A logical device created without using 'DeviceGroupDeviceCreateInfo', or
--- with @physicalDeviceCount@ equal to zero, is equivalent to a
--- @physicalDeviceCount@ of one and @pPhysicalDevices@ pointing to the
--- @physicalDevice@ parameter to
--- 'Graphics.Vulkan.Core10.Device.createDevice'. In particular, the device
--- index of that physical device is zero.
---
--- == Valid Usage
---
--- -   Each element of @pPhysicalDevices@ /must/ be unique
---
--- -   All elements of @pPhysicalDevices@ /must/ be in the same device
---     group as enumerated by 'enumeratePhysicalDeviceGroups'
---
--- -   If @physicalDeviceCount@ is not @0@, the @physicalDevice@ parameter
---     of 'Graphics.Vulkan.Core10.Device.createDevice' /must/ be an element
---     of @pPhysicalDevices@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO'
---
--- -   If @physicalDeviceCount@ is not @0@, @pPhysicalDevices@ /must/ be a
---     valid pointer to an array of @physicalDeviceCount@ valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handles
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceGroupDeviceCreateInfo = DeviceGroupDeviceCreateInfo
-  { -- | @pPhysicalDevices@ is a pointer to an array of physical device handles
-    -- belonging to the same device group.
-    physicalDevices :: Vector (Ptr PhysicalDevice_T) }
-  deriving (Typeable)
-deriving instance Show DeviceGroupDeviceCreateInfo
-
-instance ToCStruct DeviceGroupDeviceCreateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceGroupDeviceCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (physicalDevices)) :: Word32))
-    pPPhysicalDevices' <- ContT $ allocaBytesAligned @(Ptr PhysicalDevice_T) ((Data.Vector.length (physicalDevices)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPPhysicalDevices' `plusPtr` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)) (e)) (physicalDevices)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (Ptr PhysicalDevice_T)))) (pPPhysicalDevices')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPPhysicalDevices' <- ContT $ allocaBytesAligned @(Ptr PhysicalDevice_T) ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPPhysicalDevices' `plusPtr` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (Ptr PhysicalDevice_T)))) (pPPhysicalDevices')
-    lift $ f
-
-instance FromCStruct DeviceGroupDeviceCreateInfo where
-  peekCStruct p = do
-    physicalDeviceCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pPhysicalDevices <- peek @(Ptr (Ptr PhysicalDevice_T)) ((p `plusPtr` 24 :: Ptr (Ptr (Ptr PhysicalDevice_T))))
-    pPhysicalDevices' <- generateM (fromIntegral physicalDeviceCount) (\i -> peek @(Ptr PhysicalDevice_T) ((pPhysicalDevices `advancePtrBytes` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T))))
-    pure $ DeviceGroupDeviceCreateInfo
-             pPhysicalDevices'
-
-instance Zero DeviceGroupDeviceCreateInfo where
-  zero = DeviceGroupDeviceCreateInfo
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation  ( DeviceGroupDeviceCreateInfo
-                                                                          , PhysicalDeviceGroupProperties
-                                                                          ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DeviceGroupDeviceCreateInfo
-
-instance ToCStruct DeviceGroupDeviceCreateInfo
-instance Show DeviceGroupDeviceCreateInfo
-
-instance FromCStruct DeviceGroupDeviceCreateInfo
-
-
-data PhysicalDeviceGroupProperties
-
-instance ToCStruct PhysicalDeviceGroupProperties
-instance Show PhysicalDeviceGroupProperties
-
-instance FromCStruct PhysicalDeviceGroupProperties
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs
+++ /dev/null
@@ -1,90 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence  ( ExportFenceCreateInfo(..)
-                                                                   , StructureType(..)
-                                                                   , FenceImportFlagBits(..)
-                                                                   , FenceImportFlags
-                                                                   ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO))
-import Graphics.Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkExportFenceCreateInfo - Structure specifying handle types that can be
--- exported from a fence
---
--- == Valid Usage
---
--- -   The bits in @handleTypes@ /must/ be supported and compatible, as
---     reported by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO'
---
--- -   @handleTypes@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExportFenceCreateInfo = ExportFenceCreateInfo
-  { -- | @handleTypes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
-    -- specifying one or more fence handle types the application /can/ export
-    -- from the resulting fence. The application /can/ request multiple handle
-    -- types for the same fence.
-    handleTypes :: ExternalFenceHandleTypeFlags }
-  deriving (Typeable)
-deriving instance Show ExportFenceCreateInfo
-
-instance ToCStruct ExportFenceCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExportFenceCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlags)) (handleTypes)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct ExportFenceCreateInfo where
-  peekCStruct p = do
-    handleTypes <- peek @ExternalFenceHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlags))
-    pure $ ExportFenceCreateInfo
-             handleTypes
-
-instance Storable ExportFenceCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExportFenceCreateInfo where
-  zero = ExportFenceCreateInfo
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence  (ExportFenceCreateInfo) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExportFenceCreateInfo
-
-instance ToCStruct ExportFenceCreateInfo
-instance Show ExportFenceCreateInfo
-
-instance FromCStruct ExportFenceCreateInfo
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs
+++ /dev/null
@@ -1,226 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities  ( getPhysicalDeviceExternalFenceProperties
-                                                                                , PhysicalDeviceExternalFenceInfo(..)
-                                                                                , ExternalFenceProperties(..)
-                                                                                , StructureType(..)
-                                                                                , ExternalFenceHandleTypeFlagBits(..)
-                                                                                , ExternalFenceHandleTypeFlags
-                                                                                , ExternalFenceFeatureFlagBits(..)
-                                                                                , ExternalFenceFeatureFlags
-                                                                                ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceExternalFenceProperties))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO))
-import Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceExternalFenceProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceExternalFenceInfo -> Ptr ExternalFenceProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceExternalFenceInfo -> Ptr ExternalFenceProperties -> IO ()
-
--- | vkGetPhysicalDeviceExternalFenceProperties - Function for querying
--- external fence handle capabilities.
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the
---     fence capabilities.
---
--- -   @pExternalFenceInfo@ is a pointer to a
---     'PhysicalDeviceExternalFenceInfo' structure describing the
---     parameters that would be consumed by
---     'Graphics.Vulkan.Core10.Fence.createFence'.
---
--- -   @pExternalFenceProperties@ is a pointer to a
---     'ExternalFenceProperties' structure in which capabilities are
---     returned.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'ExternalFenceProperties',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceExternalFenceInfo'
-getPhysicalDeviceExternalFenceProperties :: forall io . MonadIO io => PhysicalDevice -> PhysicalDeviceExternalFenceInfo -> io (ExternalFenceProperties)
-getPhysicalDeviceExternalFenceProperties physicalDevice externalFenceInfo = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceExternalFenceProperties' = mkVkGetPhysicalDeviceExternalFenceProperties (pVkGetPhysicalDeviceExternalFenceProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pExternalFenceInfo <- ContT $ withCStruct (externalFenceInfo)
-  pPExternalFenceProperties <- ContT (withZeroCStruct @ExternalFenceProperties)
-  lift $ vkGetPhysicalDeviceExternalFenceProperties' (physicalDeviceHandle (physicalDevice)) pExternalFenceInfo (pPExternalFenceProperties)
-  pExternalFenceProperties <- lift $ peekCStruct @ExternalFenceProperties pPExternalFenceProperties
-  pure $ (pExternalFenceProperties)
-
-
--- | VkPhysicalDeviceExternalFenceInfo - Structure specifying fence creation
--- parameters.
---
--- = Description
---
--- Note
---
--- Handles of type
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT'
--- generated by the implementation may represent either Linux Sync Files or
--- Android Fences at the implementation’s discretion. Applications /should/
--- only use operations defined for both types of file descriptors, unless
--- they know via means external to Vulkan the type of the file descriptor,
--- or are prepared to deal with the system-defined operation failures
--- resulting from using the wrong type.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceExternalFenceProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities.getPhysicalDeviceExternalFencePropertiesKHR'
-data PhysicalDeviceExternalFenceInfo = PhysicalDeviceExternalFenceInfo
-  { -- | @handleType@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
-    -- value
-    handleType :: ExternalFenceHandleTypeFlagBits }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceExternalFenceInfo
-
-instance ToCStruct PhysicalDeviceExternalFenceInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceExternalFenceInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlagBits)) (handleType)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlagBits)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceExternalFenceInfo where
-  peekCStruct p = do
-    handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlagBits))
-    pure $ PhysicalDeviceExternalFenceInfo
-             handleType
-
-instance Storable PhysicalDeviceExternalFenceInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceExternalFenceInfo where
-  zero = PhysicalDeviceExternalFenceInfo
-           zero
-
-
--- | VkExternalFenceProperties - Structure describing supported external
--- fence handle features
---
--- = Description
---
--- If @handleType@ is not supported by the implementation, then
--- 'ExternalFenceProperties'::@externalFenceFeatures@ will be set to zero.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits.ExternalFenceFeatureFlags',
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceExternalFenceProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities.getPhysicalDeviceExternalFencePropertiesKHR'
-data ExternalFenceProperties = ExternalFenceProperties
-  { -- | @exportFromImportedHandleTypes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
-    -- indicating which types of imported handle @handleType@ /can/ be exported
-    -- from.
-    exportFromImportedHandleTypes :: ExternalFenceHandleTypeFlags
-  , -- | @compatibleHandleTypes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
-    -- specifying handle types which /can/ be specified at the same time as
-    -- @handleType@ when creating a fence.
-    compatibleHandleTypes :: ExternalFenceHandleTypeFlags
-  , -- | @externalFenceFeatures@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits.ExternalFenceFeatureFlagBits'
-    -- indicating the features of @handleType@.
-    externalFenceFeatures :: ExternalFenceFeatureFlags
-  }
-  deriving (Typeable)
-deriving instance Show ExternalFenceProperties
-
-instance ToCStruct ExternalFenceProperties where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExternalFenceProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlags)) (exportFromImportedHandleTypes)
-    poke ((p `plusPtr` 20 :: Ptr ExternalFenceHandleTypeFlags)) (compatibleHandleTypes)
-    poke ((p `plusPtr` 24 :: Ptr ExternalFenceFeatureFlags)) (externalFenceFeatures)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlags)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr ExternalFenceHandleTypeFlags)) (zero)
-    f
-
-instance FromCStruct ExternalFenceProperties where
-  peekCStruct p = do
-    exportFromImportedHandleTypes <- peek @ExternalFenceHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlags))
-    compatibleHandleTypes <- peek @ExternalFenceHandleTypeFlags ((p `plusPtr` 20 :: Ptr ExternalFenceHandleTypeFlags))
-    externalFenceFeatures <- peek @ExternalFenceFeatureFlags ((p `plusPtr` 24 :: Ptr ExternalFenceFeatureFlags))
-    pure $ ExternalFenceProperties
-             exportFromImportedHandleTypes compatibleHandleTypes externalFenceFeatures
-
-instance Storable ExternalFenceProperties where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExternalFenceProperties where
-  zero = ExternalFenceProperties
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities  ( ExternalFenceProperties
-                                                                                , PhysicalDeviceExternalFenceInfo
-                                                                                ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExternalFenceProperties
-
-instance ToCStruct ExternalFenceProperties
-instance Show ExternalFenceProperties
-
-instance FromCStruct ExternalFenceProperties
-
-
-data PhysicalDeviceExternalFenceInfo
-
-instance ToCStruct PhysicalDeviceExternalFenceInfo
-instance Show PhysicalDeviceExternalFenceInfo
-
-instance FromCStruct PhysicalDeviceExternalFenceInfo
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs
+++ /dev/null
@@ -1,209 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory  ( ExternalMemoryImageCreateInfo(..)
-                                                                    , ExternalMemoryBufferCreateInfo(..)
-                                                                    , ExportMemoryAllocateInfo(..)
-                                                                    , StructureType(..)
-                                                                    , Result(..)
-                                                                    , QUEUE_FAMILY_EXTERNAL
-                                                                    , pattern QUEUE_FAMILY_EXTERNAL
-                                                                    ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO))
-import Graphics.Vulkan.Core10.APIConstants (QUEUE_FAMILY_EXTERNAL)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-import Graphics.Vulkan.Core10.APIConstants (pattern QUEUE_FAMILY_EXTERNAL)
--- | VkExternalMemoryImageCreateInfo - Specify that an image may be backed by
--- external memory
---
--- = Members
---
--- Note
---
--- A 'ExternalMemoryImageCreateInfo' structure must be included in the
--- creation parameters for an image that will be bound to memory that is
--- either exported or imported.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExternalMemoryImageCreateInfo = ExternalMemoryImageCreateInfo
-  { -- | @handleTypes@ /must/ not be @0@
-    handleTypes :: ExternalMemoryHandleTypeFlags }
-  deriving (Typeable)
-deriving instance Show ExternalMemoryImageCreateInfo
-
-instance ToCStruct ExternalMemoryImageCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExternalMemoryImageCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags)) (handleTypes)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags)) (zero)
-    f
-
-instance FromCStruct ExternalMemoryImageCreateInfo where
-  peekCStruct p = do
-    handleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags))
-    pure $ ExternalMemoryImageCreateInfo
-             handleTypes
-
-instance Storable ExternalMemoryImageCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExternalMemoryImageCreateInfo where
-  zero = ExternalMemoryImageCreateInfo
-           zero
-
-
--- | VkExternalMemoryBufferCreateInfo - Specify that a buffer may be backed
--- by external memory
---
--- = Members
---
--- Note
---
--- A 'ExternalMemoryBufferCreateInfo' structure must be included in the
--- creation parameters for a buffer that will be bound to memory that is
--- either exported or imported.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExternalMemoryBufferCreateInfo = ExternalMemoryBufferCreateInfo
-  { -- | @handleTypes@ /must/ be a valid combination of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
-    -- values
-    handleTypes :: ExternalMemoryHandleTypeFlags }
-  deriving (Typeable)
-deriving instance Show ExternalMemoryBufferCreateInfo
-
-instance ToCStruct ExternalMemoryBufferCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExternalMemoryBufferCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags)) (handleTypes)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct ExternalMemoryBufferCreateInfo where
-  peekCStruct p = do
-    handleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags))
-    pure $ ExternalMemoryBufferCreateInfo
-             handleTypes
-
-instance Storable ExternalMemoryBufferCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExternalMemoryBufferCreateInfo where
-  zero = ExternalMemoryBufferCreateInfo
-           zero
-
-
--- | VkExportMemoryAllocateInfo - Specify exportable handle types for a
--- device memory object
---
--- == Valid Usage
---
--- -   The bits in @handleTypes@ /must/ be supported and compatible, as
---     reported by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO'
---
--- -   @handleTypes@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExportMemoryAllocateInfo = ExportMemoryAllocateInfo
-  { -- | @handleTypes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
-    -- specifying one or more memory handle types the application /can/ export
-    -- from the resulting allocation. The application /can/ request multiple
-    -- handle types for the same allocation.
-    handleTypes :: ExternalMemoryHandleTypeFlags }
-  deriving (Typeable)
-deriving instance Show ExportMemoryAllocateInfo
-
-instance ToCStruct ExportMemoryAllocateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExportMemoryAllocateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags)) (handleTypes)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct ExportMemoryAllocateInfo where
-  peekCStruct p = do
-    handleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags))
-    pure $ ExportMemoryAllocateInfo
-             handleTypes
-
-instance Storable ExportMemoryAllocateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExportMemoryAllocateInfo where
-  zero = ExportMemoryAllocateInfo
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory  ( ExportMemoryAllocateInfo
-                                                                    , ExternalMemoryBufferCreateInfo
-                                                                    , ExternalMemoryImageCreateInfo
-                                                                    ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExportMemoryAllocateInfo
-
-instance ToCStruct ExportMemoryAllocateInfo
-instance Show ExportMemoryAllocateInfo
-
-instance FromCStruct ExportMemoryAllocateInfo
-
-
-data ExternalMemoryBufferCreateInfo
-
-instance ToCStruct ExternalMemoryBufferCreateInfo
-instance Show ExternalMemoryBufferCreateInfo
-
-instance FromCStruct ExternalMemoryBufferCreateInfo
-
-
-data ExternalMemoryImageCreateInfo
-
-instance ToCStruct ExternalMemoryImageCreateInfo
-instance Show ExternalMemoryImageCreateInfo
-
-instance FromCStruct ExternalMemoryImageCreateInfo
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs
+++ /dev/null
@@ -1,567 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities  ( getPhysicalDeviceExternalBufferProperties
-                                                                                 , ExternalMemoryProperties(..)
-                                                                                 , PhysicalDeviceExternalImageFormatInfo(..)
-                                                                                 , ExternalImageFormatProperties(..)
-                                                                                 , PhysicalDeviceExternalBufferInfo(..)
-                                                                                 , ExternalBufferProperties(..)
-                                                                                 , PhysicalDeviceIDProperties(..)
-                                                                                 , StructureType(..)
-                                                                                 , ExternalMemoryHandleTypeFlagBits(..)
-                                                                                 , ExternalMemoryHandleTypeFlags
-                                                                                 , ExternalMemoryFeatureFlagBits(..)
-                                                                                 , ExternalMemoryFeatureFlags
-                                                                                 , LUID_SIZE
-                                                                                 , pattern LUID_SIZE
-                                                                                 ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word8)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Utils (peekByteStringFromSizedVectorPtr)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthByteString)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceExternalBufferProperties))
-import Graphics.Vulkan.Core10.APIConstants (LUID_SIZE)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Core10.APIConstants (UUID_SIZE)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.Core10.APIConstants (LUID_SIZE)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-import Graphics.Vulkan.Core10.APIConstants (pattern LUID_SIZE)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceExternalBufferProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceExternalBufferInfo -> Ptr ExternalBufferProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceExternalBufferInfo -> Ptr ExternalBufferProperties -> IO ()
-
--- | vkGetPhysicalDeviceExternalBufferProperties - Query external handle
--- types supported by buffers
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the
---     buffer capabilities.
---
--- -   @pExternalBufferInfo@ is a pointer to a
---     'PhysicalDeviceExternalBufferInfo' structure describing the
---     parameters that would be consumed by
---     'Graphics.Vulkan.Core10.Buffer.createBuffer'.
---
--- -   @pExternalBufferProperties@ is a pointer to a
---     'ExternalBufferProperties' structure in which capabilities are
---     returned.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'ExternalBufferProperties',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceExternalBufferInfo'
-getPhysicalDeviceExternalBufferProperties :: forall io . MonadIO io => PhysicalDevice -> PhysicalDeviceExternalBufferInfo -> io (ExternalBufferProperties)
-getPhysicalDeviceExternalBufferProperties physicalDevice externalBufferInfo = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceExternalBufferProperties' = mkVkGetPhysicalDeviceExternalBufferProperties (pVkGetPhysicalDeviceExternalBufferProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pExternalBufferInfo <- ContT $ withCStruct (externalBufferInfo)
-  pPExternalBufferProperties <- ContT (withZeroCStruct @ExternalBufferProperties)
-  lift $ vkGetPhysicalDeviceExternalBufferProperties' (physicalDeviceHandle (physicalDevice)) pExternalBufferInfo (pPExternalBufferProperties)
-  pExternalBufferProperties <- lift $ peekCStruct @ExternalBufferProperties pPExternalBufferProperties
-  pure $ (pExternalBufferProperties)
-
-
--- | VkExternalMemoryProperties - Structure specifying external memory handle
--- type capabilities
---
--- = Description
---
--- @compatibleHandleTypes@ /must/ include at least @handleType@. Inclusion
--- of a handle type in @compatibleHandleTypes@ does not imply the values
--- returned in
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2'
--- will be the same when
--- 'PhysicalDeviceExternalImageFormatInfo'::@handleType@ is set to that
--- type. The application is responsible for querying the capabilities of
--- all handle types intended for concurrent use in a single image and
--- intersecting them to obtain the compatible set of capabilities.
---
--- = See Also
---
--- 'ExternalBufferProperties', 'ExternalImageFormatProperties',
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits.ExternalMemoryFeatureFlags',
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlags'
-data ExternalMemoryProperties = ExternalMemoryProperties
-  { -- | @externalMemoryFeatures@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits.ExternalMemoryFeatureFlagBits'
-    -- specifying the features of @handleType@.
-    externalMemoryFeatures :: ExternalMemoryFeatureFlags
-  , -- | @exportFromImportedHandleTypes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
-    -- specifying which types of imported handle @handleType@ /can/ be exported
-    -- from.
-    exportFromImportedHandleTypes :: ExternalMemoryHandleTypeFlags
-  , -- | @compatibleHandleTypes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
-    -- specifying handle types which /can/ be specified at the same time as
-    -- @handleType@ when creating an image compatible with external memory.
-    compatibleHandleTypes :: ExternalMemoryHandleTypeFlags
-  }
-  deriving (Typeable)
-deriving instance Show ExternalMemoryProperties
-
-instance ToCStruct ExternalMemoryProperties where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExternalMemoryProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr ExternalMemoryFeatureFlags)) (externalMemoryFeatures)
-    poke ((p `plusPtr` 4 :: Ptr ExternalMemoryHandleTypeFlags)) (exportFromImportedHandleTypes)
-    poke ((p `plusPtr` 8 :: Ptr ExternalMemoryHandleTypeFlags)) (compatibleHandleTypes)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr ExternalMemoryFeatureFlags)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr ExternalMemoryHandleTypeFlags)) (zero)
-    f
-
-instance FromCStruct ExternalMemoryProperties where
-  peekCStruct p = do
-    externalMemoryFeatures <- peek @ExternalMemoryFeatureFlags ((p `plusPtr` 0 :: Ptr ExternalMemoryFeatureFlags))
-    exportFromImportedHandleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 4 :: Ptr ExternalMemoryHandleTypeFlags))
-    compatibleHandleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 8 :: Ptr ExternalMemoryHandleTypeFlags))
-    pure $ ExternalMemoryProperties
-             externalMemoryFeatures exportFromImportedHandleTypes compatibleHandleTypes
-
-instance Storable ExternalMemoryProperties where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExternalMemoryProperties where
-  zero = ExternalMemoryProperties
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceExternalImageFormatInfo - Structure specifying external
--- image creation parameters
---
--- = Description
---
--- If @handleType@ is 0,
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
--- will behave as if 'PhysicalDeviceExternalImageFormatInfo' was not
--- present, and 'ExternalImageFormatProperties' will be ignored.
---
--- If @handleType@ is not compatible with the @format@, @type@, @tiling@,
--- @usage@, and @flags@ specified in
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
--- then
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
--- returns
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO'
---
--- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceExternalImageFormatInfo = PhysicalDeviceExternalImageFormatInfo
-  { -- | @handleType@ is a
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
-    -- value specifying the memory handle type that will be used with the
-    -- memory associated with the image.
-    handleType :: ExternalMemoryHandleTypeFlagBits }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceExternalImageFormatInfo
-
-instance ToCStruct PhysicalDeviceExternalImageFormatInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceExternalImageFormatInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct PhysicalDeviceExternalImageFormatInfo where
-  peekCStruct p = do
-    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits))
-    pure $ PhysicalDeviceExternalImageFormatInfo
-             handleType
-
-instance Storable PhysicalDeviceExternalImageFormatInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceExternalImageFormatInfo where
-  zero = PhysicalDeviceExternalImageFormatInfo
-           zero
-
-
--- | VkExternalImageFormatProperties - Structure specifying supported
--- external handle properties
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'ExternalMemoryProperties',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExternalImageFormatProperties = ExternalImageFormatProperties
-  { -- | @externalMemoryProperties@ is a 'ExternalMemoryProperties' structure
-    -- specifying various capabilities of the external handle type when used
-    -- with the specified image creation parameters.
-    externalMemoryProperties :: ExternalMemoryProperties }
-  deriving (Typeable)
-deriving instance Show ExternalImageFormatProperties
-
-instance ToCStruct ExternalImageFormatProperties where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExternalImageFormatProperties{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties)) (externalMemoryProperties) . ($ ())
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct ExternalImageFormatProperties where
-  peekCStruct p = do
-    externalMemoryProperties <- peekCStruct @ExternalMemoryProperties ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties))
-    pure $ ExternalImageFormatProperties
-             externalMemoryProperties
-
-instance Zero ExternalImageFormatProperties where
-  zero = ExternalImageFormatProperties
-           zero
-
-
--- | VkPhysicalDeviceExternalBufferInfo - Structure specifying buffer
--- creation parameters
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlags',
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceExternalBufferProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferPropertiesKHR'
-data PhysicalDeviceExternalBufferInfo = PhysicalDeviceExternalBufferInfo
-  { -- | @flags@ /must/ be a valid combination of
-    -- 'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlagBits'
-    -- values
-    flags :: BufferCreateFlags
-  , -- | @usage@ /must/ not be @0@
-    usage :: BufferUsageFlags
-  , -- | @handleType@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
-    -- value
-    handleType :: ExternalMemoryHandleTypeFlagBits
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceExternalBufferInfo
-
-instance ToCStruct PhysicalDeviceExternalBufferInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceExternalBufferInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr BufferCreateFlags)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr BufferUsageFlags)) (usage)
-    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr BufferUsageFlags)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceExternalBufferInfo where
-  peekCStruct p = do
-    flags <- peek @BufferCreateFlags ((p `plusPtr` 16 :: Ptr BufferCreateFlags))
-    usage <- peek @BufferUsageFlags ((p `plusPtr` 20 :: Ptr BufferUsageFlags))
-    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits))
-    pure $ PhysicalDeviceExternalBufferInfo
-             flags usage handleType
-
-instance Storable PhysicalDeviceExternalBufferInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceExternalBufferInfo where
-  zero = PhysicalDeviceExternalBufferInfo
-           zero
-           zero
-           zero
-
-
--- | VkExternalBufferProperties - Structure specifying supported external
--- handle capabilities
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'ExternalMemoryProperties',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceExternalBufferProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferPropertiesKHR'
-data ExternalBufferProperties = ExternalBufferProperties
-  { -- | @externalMemoryProperties@ is a 'ExternalMemoryProperties' structure
-    -- specifying various capabilities of the external handle type when used
-    -- with the specified buffer creation parameters.
-    externalMemoryProperties :: ExternalMemoryProperties }
-  deriving (Typeable)
-deriving instance Show ExternalBufferProperties
-
-instance ToCStruct ExternalBufferProperties where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExternalBufferProperties{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties)) (externalMemoryProperties) . ($ ())
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct ExternalBufferProperties where
-  peekCStruct p = do
-    externalMemoryProperties <- peekCStruct @ExternalMemoryProperties ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties))
-    pure $ ExternalBufferProperties
-             externalMemoryProperties
-
-instance Zero ExternalBufferProperties where
-  zero = ExternalBufferProperties
-           zero
-
-
--- | VkPhysicalDeviceIDProperties - Structure specifying IDs related to the
--- physical device
---
--- = Description
---
--- -   @deviceUUID@ is an array of
---     'Graphics.Vulkan.Core10.APIConstants.UUID_SIZE' @uint8_t@ values
---     representing a universally unique identifier for the device.
---
--- -   @driverUUID@ is an array of
---     'Graphics.Vulkan.Core10.APIConstants.UUID_SIZE' @uint8_t@ values
---     representing a universally unique identifier for the driver build in
---     use by the device.
---
--- -   @deviceLUID@ is an array of
---     'Graphics.Vulkan.Core10.APIConstants.LUID_SIZE' @uint8_t@ values
---     representing a locally unique identifier for the device.
---
--- -   @deviceNodeMask@ is a @uint32_t@ bitfield identifying the node
---     within a linked device adapter corresponding to the device.
---
--- -   @deviceLUIDValid@ is a boolean value that will be
---     'Graphics.Vulkan.Core10.BaseType.TRUE' if @deviceLUID@ contains a
---     valid LUID and @deviceNodeMask@ contains a valid node mask, and
---     'Graphics.Vulkan.Core10.BaseType.FALSE' if they do not.
---
--- @deviceUUID@ /must/ be immutable for a given device across instances,
--- processes, driver APIs, driver versions, and system reboots.
---
--- Applications /can/ compare the @driverUUID@ value across instance and
--- process boundaries, and /can/ make similar queries in external APIs to
--- determine whether they are capable of sharing memory objects and
--- resources using them with the device.
---
--- @deviceUUID@ and\/or @driverUUID@ /must/ be used to determine whether a
--- particular external object can be shared between driver components,
--- where such a restriction exists as defined in the compatibility table
--- for the particular object type:
---
--- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility External memory handle types compatibility>
---
--- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility External semaphore handle types compatibility>
---
--- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility External fence handle types compatibility>
---
--- If @deviceLUIDValid@ is 'Graphics.Vulkan.Core10.BaseType.FALSE', the
--- values of @deviceLUID@ and @deviceNodeMask@ are undefined. If
--- @deviceLUIDValid@ is 'Graphics.Vulkan.Core10.BaseType.TRUE' and Vulkan
--- is running on the Windows operating system, the contents of @deviceLUID@
--- /can/ be cast to an @LUID@ object and /must/ be equal to the locally
--- unique identifier of a @IDXGIAdapter1@ object that corresponds to
--- @physicalDevice@. If @deviceLUIDValid@ is
--- 'Graphics.Vulkan.Core10.BaseType.TRUE', @deviceNodeMask@ /must/ contain
--- exactly one bit. If Vulkan is running on an operating system that
--- supports the Direct3D 12 API and @physicalDevice@ corresponds to an
--- individual device in a linked device adapter, @deviceNodeMask@
--- identifies the Direct3D 12 node corresponding to @physicalDevice@.
--- Otherwise, @deviceNodeMask@ /must/ be @1@.
---
--- Note
---
--- Although they have identical descriptions,
--- 'PhysicalDeviceIDProperties'::@deviceUUID@ may differ from
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'::@pipelineCacheUUID@.
--- The former is intended to identify and correlate devices across API and
--- driver boundaries, while the latter is used to identify a compatible
--- device and driver combination to use when serializing and de-serializing
--- pipeline state.
---
--- Note
---
--- While 'PhysicalDeviceIDProperties'::@deviceUUID@ is specified to remain
--- consistent across driver versions and system reboots, it is not intended
--- to be usable as a serializable persistent identifier for a device. It
--- may change when a device is physically added to, removed from, or moved
--- to a different connector in a system while that system is powered down.
--- Further, there is no reasonable way to verify with conformance testing
--- that a given device retains the same UUID in a given system across all
--- driver versions supported in that system. While implementations should
--- make every effort to report consistent device UUIDs across driver
--- versions, applications should avoid relying on the persistence of this
--- value for uses other than identifying compatible devices for external
--- object sharing purposes.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceIDProperties = PhysicalDeviceIDProperties
-  { -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "deviceUUID"
-    deviceUUID :: ByteString
-  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "driverUUID"
-    driverUUID :: ByteString
-  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "deviceLUID"
-    deviceLUID :: ByteString
-  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "deviceNodeMask"
-    deviceNodeMask :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "deviceLUIDValid"
-    deviceLUIDValid :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceIDProperties
-
-instance ToCStruct PhysicalDeviceIDProperties where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceIDProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pokeFixedLengthByteString ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8))) (deviceUUID)
-    pokeFixedLengthByteString ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8))) (driverUUID)
-    pokeFixedLengthByteString ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8))) (deviceLUID)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (deviceNodeMask)
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (deviceLUIDValid))
-    f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pokeFixedLengthByteString ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
-    pokeFixedLengthByteString ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
-    pokeFixedLengthByteString ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8))) (mempty)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceIDProperties where
-  peekCStruct p = do
-    deviceUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8)))
-    driverUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8)))
-    deviceLUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8)))
-    deviceNodeMask <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    deviceLUIDValid <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
-    pure $ PhysicalDeviceIDProperties
-             deviceUUID driverUUID deviceLUID deviceNodeMask (bool32ToBool deviceLUIDValid)
-
-instance Storable PhysicalDeviceIDProperties where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceIDProperties where
-  zero = PhysicalDeviceIDProperties
-           mempty
-           mempty
-           mempty
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs-boot
+++ /dev/null
@@ -1,59 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities  ( ExternalBufferProperties
-                                                                                 , ExternalImageFormatProperties
-                                                                                 , ExternalMemoryProperties
-                                                                                 , PhysicalDeviceExternalBufferInfo
-                                                                                 , PhysicalDeviceExternalImageFormatInfo
-                                                                                 , PhysicalDeviceIDProperties
-                                                                                 ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExternalBufferProperties
-
-instance ToCStruct ExternalBufferProperties
-instance Show ExternalBufferProperties
-
-instance FromCStruct ExternalBufferProperties
-
-
-data ExternalImageFormatProperties
-
-instance ToCStruct ExternalImageFormatProperties
-instance Show ExternalImageFormatProperties
-
-instance FromCStruct ExternalImageFormatProperties
-
-
-data ExternalMemoryProperties
-
-instance ToCStruct ExternalMemoryProperties
-instance Show ExternalMemoryProperties
-
-instance FromCStruct ExternalMemoryProperties
-
-
-data PhysicalDeviceExternalBufferInfo
-
-instance ToCStruct PhysicalDeviceExternalBufferInfo
-instance Show PhysicalDeviceExternalBufferInfo
-
-instance FromCStruct PhysicalDeviceExternalBufferInfo
-
-
-data PhysicalDeviceExternalImageFormatInfo
-
-instance ToCStruct PhysicalDeviceExternalImageFormatInfo
-instance Show PhysicalDeviceExternalImageFormatInfo
-
-instance FromCStruct PhysicalDeviceExternalImageFormatInfo
-
-
-data PhysicalDeviceIDProperties
-
-instance ToCStruct PhysicalDeviceIDProperties
-instance Show PhysicalDeviceIDProperties
-
-instance FromCStruct PhysicalDeviceIDProperties
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs
+++ /dev/null
@@ -1,90 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore  ( ExportSemaphoreCreateInfo(..)
-                                                                       , StructureType(..)
-                                                                       , SemaphoreImportFlagBits(..)
-                                                                       , SemaphoreImportFlags
-                                                                       ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO))
-import Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkExportSemaphoreCreateInfo - Structure specifying handle types that can
--- be exported from a semaphore
---
--- == Valid Usage
---
--- -   The bits in @handleTypes@ /must/ be supported and compatible, as
---     reported by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO'
---
--- -   @handleTypes@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExportSemaphoreCreateInfo = ExportSemaphoreCreateInfo
-  { -- | @handleTypes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
-    -- specifying one or more semaphore handle types the application /can/
-    -- export from the resulting semaphore. The application /can/ request
-    -- multiple handle types for the same semaphore.
-    handleTypes :: ExternalSemaphoreHandleTypeFlags }
-  deriving (Typeable)
-deriving instance Show ExportSemaphoreCreateInfo
-
-instance ToCStruct ExportSemaphoreCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExportSemaphoreCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlags)) (handleTypes)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct ExportSemaphoreCreateInfo where
-  peekCStruct p = do
-    handleTypes <- peek @ExternalSemaphoreHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlags))
-    pure $ ExportSemaphoreCreateInfo
-             handleTypes
-
-instance Storable ExportSemaphoreCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExportSemaphoreCreateInfo where
-  zero = ExportSemaphoreCreateInfo
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore  (ExportSemaphoreCreateInfo) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExportSemaphoreCreateInfo
-
-instance ToCStruct ExportSemaphoreCreateInfo
-instance Show ExportSemaphoreCreateInfo
-
-instance FromCStruct ExportSemaphoreCreateInfo
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs
+++ /dev/null
@@ -1,250 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities  ( getPhysicalDeviceExternalSemaphoreProperties
-                                                                                    , PhysicalDeviceExternalSemaphoreInfo(..)
-                                                                                    , ExternalSemaphoreProperties(..)
-                                                                                    , StructureType(..)
-                                                                                    , ExternalSemaphoreHandleTypeFlagBits(..)
-                                                                                    , ExternalSemaphoreHandleTypeFlags
-                                                                                    , ExternalSemaphoreFeatureFlagBits(..)
-                                                                                    , ExternalSemaphoreFeatureFlags
-                                                                                    ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceExternalSemaphoreProperties))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreTypeCreateInfo)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO))
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceExternalSemaphoreProperties
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceExternalSemaphoreInfo a) -> Ptr ExternalSemaphoreProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceExternalSemaphoreInfo a) -> Ptr ExternalSemaphoreProperties -> IO ()
-
--- | vkGetPhysicalDeviceExternalSemaphoreProperties - Function for querying
--- external semaphore handle capabilities.
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the
---     semaphore capabilities.
---
--- -   @pExternalSemaphoreInfo@ is a pointer to a
---     'PhysicalDeviceExternalSemaphoreInfo' structure describing the
---     parameters that would be consumed by
---     'Graphics.Vulkan.Core10.QueueSemaphore.createSemaphore'.
---
--- -   @pExternalSemaphoreProperties@ is a pointer to a
---     'ExternalSemaphoreProperties' structure in which capabilities are
---     returned.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'ExternalSemaphoreProperties',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceExternalSemaphoreInfo'
-getPhysicalDeviceExternalSemaphoreProperties :: forall a io . (PokeChain a, MonadIO io) => PhysicalDevice -> PhysicalDeviceExternalSemaphoreInfo a -> io (ExternalSemaphoreProperties)
-getPhysicalDeviceExternalSemaphoreProperties physicalDevice externalSemaphoreInfo = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceExternalSemaphoreProperties' = mkVkGetPhysicalDeviceExternalSemaphoreProperties (pVkGetPhysicalDeviceExternalSemaphoreProperties (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pExternalSemaphoreInfo <- ContT $ withCStruct (externalSemaphoreInfo)
-  pPExternalSemaphoreProperties <- ContT (withZeroCStruct @ExternalSemaphoreProperties)
-  lift $ vkGetPhysicalDeviceExternalSemaphoreProperties' (physicalDeviceHandle (physicalDevice)) pExternalSemaphoreInfo (pPExternalSemaphoreProperties)
-  pExternalSemaphoreProperties <- lift $ peekCStruct @ExternalSemaphoreProperties pPExternalSemaphoreProperties
-  pure $ (pExternalSemaphoreProperties)
-
-
--- | VkPhysicalDeviceExternalSemaphoreInfo - Structure specifying semaphore
--- creation parameters.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceExternalSemaphoreProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.getPhysicalDeviceExternalSemaphorePropertiesKHR'
-data PhysicalDeviceExternalSemaphoreInfo (es :: [Type]) = PhysicalDeviceExternalSemaphoreInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @handleType@ is a
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
-    -- value specifying the external semaphore handle type for which
-    -- capabilities will be returned.
-    handleType :: ExternalSemaphoreHandleTypeFlagBits
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PhysicalDeviceExternalSemaphoreInfo es)
-
-instance Extensible PhysicalDeviceExternalSemaphoreInfo where
-  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO
-  setNext x next = x{next = next}
-  getNext PhysicalDeviceExternalSemaphoreInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceExternalSemaphoreInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @SemaphoreTypeCreateInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PhysicalDeviceExternalSemaphoreInfo es) where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceExternalSemaphoreInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (handleType)
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (PhysicalDeviceExternalSemaphoreInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    handleType <- peek @ExternalSemaphoreHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlagBits))
-    pure $ PhysicalDeviceExternalSemaphoreInfo
-             next handleType
-
-instance es ~ '[] => Zero (PhysicalDeviceExternalSemaphoreInfo es) where
-  zero = PhysicalDeviceExternalSemaphoreInfo
-           ()
-           zero
-
-
--- | VkExternalSemaphoreProperties - Structure describing supported external
--- semaphore handle features
---
--- = Description
---
--- If @handleType@ is not supported by the implementation, then
--- 'ExternalSemaphoreProperties'::@externalSemaphoreFeatures@ will be set
--- to zero.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits.ExternalSemaphoreFeatureFlags',
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceExternalSemaphoreProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.getPhysicalDeviceExternalSemaphorePropertiesKHR'
-data ExternalSemaphoreProperties = ExternalSemaphoreProperties
-  { -- | @exportFromImportedHandleTypes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
-    -- specifying which types of imported handle @handleType@ /can/ be exported
-    -- from.
-    exportFromImportedHandleTypes :: ExternalSemaphoreHandleTypeFlags
-  , -- | @compatibleHandleTypes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
-    -- specifying handle types which /can/ be specified at the same time as
-    -- @handleType@ when creating a semaphore.
-    compatibleHandleTypes :: ExternalSemaphoreHandleTypeFlags
-  , -- | @externalSemaphoreFeatures@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits.ExternalSemaphoreFeatureFlagBits'
-    -- describing the features of @handleType@.
-    externalSemaphoreFeatures :: ExternalSemaphoreFeatureFlags
-  }
-  deriving (Typeable)
-deriving instance Show ExternalSemaphoreProperties
-
-instance ToCStruct ExternalSemaphoreProperties where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExternalSemaphoreProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlags)) (exportFromImportedHandleTypes)
-    poke ((p `plusPtr` 20 :: Ptr ExternalSemaphoreHandleTypeFlags)) (compatibleHandleTypes)
-    poke ((p `plusPtr` 24 :: Ptr ExternalSemaphoreFeatureFlags)) (externalSemaphoreFeatures)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlags)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr ExternalSemaphoreHandleTypeFlags)) (zero)
-    f
-
-instance FromCStruct ExternalSemaphoreProperties where
-  peekCStruct p = do
-    exportFromImportedHandleTypes <- peek @ExternalSemaphoreHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlags))
-    compatibleHandleTypes <- peek @ExternalSemaphoreHandleTypeFlags ((p `plusPtr` 20 :: Ptr ExternalSemaphoreHandleTypeFlags))
-    externalSemaphoreFeatures <- peek @ExternalSemaphoreFeatureFlags ((p `plusPtr` 24 :: Ptr ExternalSemaphoreFeatureFlags))
-    pure $ ExternalSemaphoreProperties
-             exportFromImportedHandleTypes compatibleHandleTypes externalSemaphoreFeatures
-
-instance Storable ExternalSemaphoreProperties where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExternalSemaphoreProperties where
-  zero = ExternalSemaphoreProperties
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs-boot
+++ /dev/null
@@ -1,27 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities  ( ExternalSemaphoreProperties
-                                                                                    , PhysicalDeviceExternalSemaphoreInfo
-                                                                                    ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExternalSemaphoreProperties
-
-instance ToCStruct ExternalSemaphoreProperties
-instance Show ExternalSemaphoreProperties
-
-instance FromCStruct ExternalSemaphoreProperties
-
-
-type role PhysicalDeviceExternalSemaphoreInfo nominal
-data PhysicalDeviceExternalSemaphoreInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (PhysicalDeviceExternalSemaphoreInfo es)
-instance Show (Chain es) => Show (PhysicalDeviceExternalSemaphoreInfo es)
-
-instance PeekChain es => FromCStruct (PhysicalDeviceExternalSemaphoreInfo es)
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs
+++ /dev/null
@@ -1,547 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2  ( getBufferMemoryRequirements2
-                                                                             , getImageMemoryRequirements2
-                                                                             , getImageSparseMemoryRequirements2
-                                                                             , BufferMemoryRequirementsInfo2(..)
-                                                                             , ImageMemoryRequirementsInfo2(..)
-                                                                             , ImageSparseMemoryRequirementsInfo2(..)
-                                                                             , MemoryRequirements2(..)
-                                                                             , SparseImageMemoryRequirements2(..)
-                                                                             , MemoryRequirements2KHR
-                                                                             , StructureType(..)
-                                                                             ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetBufferMemoryRequirements2))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetImageMemoryRequirements2))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetImageSparseMemoryRequirements2))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (ImagePlaneMemoryRequirementsInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedRequirements)
-import Graphics.Vulkan.Core10.MemoryManagement (MemoryRequirements)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseImageMemoryRequirements)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetBufferMemoryRequirements2
-  :: FunPtr (Ptr Device_T -> Ptr BufferMemoryRequirementsInfo2 -> Ptr (MemoryRequirements2 a) -> IO ()) -> Ptr Device_T -> Ptr BufferMemoryRequirementsInfo2 -> Ptr (MemoryRequirements2 a) -> IO ()
-
--- | vkGetBufferMemoryRequirements2 - Returns the memory requirements for
--- specified Vulkan object
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the buffer.
---
--- -   @pInfo@ is a pointer to a 'BufferMemoryRequirementsInfo2' structure
---     containing parameters required for the memory requirements query.
---
--- -   @pMemoryRequirements@ is a pointer to a 'MemoryRequirements2'
---     structure in which the memory requirements of the buffer object are
---     returned.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'BufferMemoryRequirementsInfo2',
--- 'Graphics.Vulkan.Core10.Handles.Device', 'MemoryRequirements2'
-getBufferMemoryRequirements2 :: forall a io . (PokeChain a, PeekChain a, MonadIO io) => Device -> BufferMemoryRequirementsInfo2 -> io (MemoryRequirements2 a)
-getBufferMemoryRequirements2 device info = liftIO . evalContT $ do
-  let vkGetBufferMemoryRequirements2' = mkVkGetBufferMemoryRequirements2 (pVkGetBufferMemoryRequirements2 (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))
-  lift $ vkGetBufferMemoryRequirements2' (deviceHandle (device)) pInfo (pPMemoryRequirements)
-  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements
-  pure $ (pMemoryRequirements)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetImageMemoryRequirements2
-  :: FunPtr (Ptr Device_T -> Ptr (ImageMemoryRequirementsInfo2 a) -> Ptr (MemoryRequirements2 b) -> IO ()) -> Ptr Device_T -> Ptr (ImageMemoryRequirementsInfo2 a) -> Ptr (MemoryRequirements2 b) -> IO ()
-
--- | vkGetImageMemoryRequirements2 - Returns the memory requirements for
--- specified Vulkan object
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the image.
---
--- -   @pInfo@ is a pointer to a 'ImageMemoryRequirementsInfo2' structure
---     containing parameters required for the memory requirements query.
---
--- -   @pMemoryRequirements@ is a pointer to a 'MemoryRequirements2'
---     structure in which the memory requirements of the image object are
---     returned.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'ImageMemoryRequirementsInfo2',
--- 'MemoryRequirements2'
-getImageMemoryRequirements2 :: forall a b io . (PokeChain a, PokeChain b, PeekChain b, MonadIO io) => Device -> ImageMemoryRequirementsInfo2 a -> io (MemoryRequirements2 b)
-getImageMemoryRequirements2 device info = liftIO . evalContT $ do
-  let vkGetImageMemoryRequirements2' = mkVkGetImageMemoryRequirements2 (pVkGetImageMemoryRequirements2 (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))
-  lift $ vkGetImageMemoryRequirements2' (deviceHandle (device)) pInfo (pPMemoryRequirements)
-  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements
-  pure $ (pMemoryRequirements)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetImageSparseMemoryRequirements2
-  :: FunPtr (Ptr Device_T -> Ptr ImageSparseMemoryRequirementsInfo2 -> Ptr Word32 -> Ptr SparseImageMemoryRequirements2 -> IO ()) -> Ptr Device_T -> Ptr ImageSparseMemoryRequirementsInfo2 -> Ptr Word32 -> Ptr SparseImageMemoryRequirements2 -> IO ()
-
--- | vkGetImageSparseMemoryRequirements2 - Query the memory requirements for
--- a sparse image
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the image.
---
--- -   @pInfo@ is a pointer to a 'ImageSparseMemoryRequirementsInfo2'
---     structure containing parameters required for the memory requirements
---     query.
---
--- -   @pSparseMemoryRequirementCount@ is a pointer to an integer related
---     to the number of sparse memory requirements available or queried, as
---     described below.
---
--- -   @pSparseMemoryRequirements@ is either @NULL@ or a pointer to an
---     array of 'SparseImageMemoryRequirements2' structures.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'ImageSparseMemoryRequirementsInfo2' structure
---
--- -   @pSparseMemoryRequirementCount@ /must/ be a valid pointer to a
---     @uint32_t@ value
---
--- -   If the value referenced by @pSparseMemoryRequirementCount@ is not
---     @0@, and @pSparseMemoryRequirements@ is not @NULL@,
---     @pSparseMemoryRequirements@ /must/ be a valid pointer to an array of
---     @pSparseMemoryRequirementCount@ 'SparseImageMemoryRequirements2'
---     structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'ImageSparseMemoryRequirementsInfo2', 'SparseImageMemoryRequirements2'
-getImageSparseMemoryRequirements2 :: forall io . MonadIO io => Device -> ImageSparseMemoryRequirementsInfo2 -> io (("sparseMemoryRequirements" ::: Vector SparseImageMemoryRequirements2))
-getImageSparseMemoryRequirements2 device info = liftIO . evalContT $ do
-  let vkGetImageSparseMemoryRequirements2' = mkVkGetImageSparseMemoryRequirements2 (pVkGetImageSparseMemoryRequirements2 (deviceCmds (device :: Device)))
-  let device' = deviceHandle (device)
-  pInfo <- ContT $ withCStruct (info)
-  pPSparseMemoryRequirementCount <- ContT $ bracket (callocBytes @Word32 4) free
-  lift $ vkGetImageSparseMemoryRequirements2' device' pInfo (pPSparseMemoryRequirementCount) (nullPtr)
-  pSparseMemoryRequirementCount <- lift $ peek @Word32 pPSparseMemoryRequirementCount
-  pPSparseMemoryRequirements <- ContT $ bracket (callocBytes @SparseImageMemoryRequirements2 ((fromIntegral (pSparseMemoryRequirementCount)) * 64)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPSparseMemoryRequirements `advancePtrBytes` (i * 64) :: Ptr SparseImageMemoryRequirements2) . ($ ())) [0..(fromIntegral (pSparseMemoryRequirementCount)) - 1]
-  lift $ vkGetImageSparseMemoryRequirements2' device' pInfo (pPSparseMemoryRequirementCount) ((pPSparseMemoryRequirements))
-  pSparseMemoryRequirementCount' <- lift $ peek @Word32 pPSparseMemoryRequirementCount
-  pSparseMemoryRequirements' <- lift $ generateM (fromIntegral (pSparseMemoryRequirementCount')) (\i -> peekCStruct @SparseImageMemoryRequirements2 (((pPSparseMemoryRequirements) `advancePtrBytes` (64 * (i)) :: Ptr SparseImageMemoryRequirements2)))
-  pure $ (pSparseMemoryRequirements')
-
-
--- | VkBufferMemoryRequirementsInfo2 - (None)
---
--- == Valid Usage
---
--- -   If @buffer@ was created with the
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     external memory handle type, then @buffer@ /must/ be bound to
---     memory.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getBufferMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2KHR'
-data BufferMemoryRequirementsInfo2 = BufferMemoryRequirementsInfo2
-  { -- | @buffer@ is the buffer to query.
-    buffer :: Buffer }
-  deriving (Typeable)
-deriving instance Show BufferMemoryRequirementsInfo2
-
-instance ToCStruct BufferMemoryRequirementsInfo2 where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BufferMemoryRequirementsInfo2{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Buffer)) (buffer)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)
-    f
-
-instance FromCStruct BufferMemoryRequirementsInfo2 where
-  peekCStruct p = do
-    buffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
-    pure $ BufferMemoryRequirementsInfo2
-             buffer
-
-instance Storable BufferMemoryRequirementsInfo2 where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BufferMemoryRequirementsInfo2 where
-  zero = BufferMemoryRequirementsInfo2
-           zero
-
-
--- | VkImageMemoryRequirementsInfo2 - (None)
---
--- == Valid Usage
---
--- -   If @image@ was created with a /multi-planar/ format and the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---     flag, there /must/ be a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
---     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2'
---     structure
---
--- -   If @image@ was created with
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---     and with
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---     then there /must/ be a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
---     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2'
---     structure
---
--- -   If @image@ was not created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
---     flag, there /must/ not be a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
---     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2'
---     structure
---
--- -   If @image@ was created with a single-plane format and with any
---     @tiling@ other than
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---     then there /must/ not be a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
---     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2'
---     structure
---
--- -   If @image@ was created with the
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     external memory handle type, then @image@ /must/ be bound to memory
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getImageMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageMemoryRequirements2KHR'
-data ImageMemoryRequirementsInfo2 (es :: [Type]) = ImageMemoryRequirementsInfo2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @image@ is the image to query.
-    image :: Image
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (ImageMemoryRequirementsInfo2 es)
-
-instance Extensible ImageMemoryRequirementsInfo2 where
-  extensibleType = STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2
-  setNext x next = x{next = next}
-  getNext ImageMemoryRequirementsInfo2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageMemoryRequirementsInfo2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @ImagePlaneMemoryRequirementsInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (ImageMemoryRequirementsInfo2 es) where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageMemoryRequirementsInfo2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (image)
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (ImageMemoryRequirementsInfo2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    image <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
-    pure $ ImageMemoryRequirementsInfo2
-             next image
-
-instance es ~ '[] => Zero (ImageMemoryRequirementsInfo2 es) where
-  zero = ImageMemoryRequirementsInfo2
-           ()
-           zero
-
-
--- | VkImageSparseMemoryRequirementsInfo2 - (None)
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getImageSparseMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageSparseMemoryRequirements2KHR'
-data ImageSparseMemoryRequirementsInfo2 = ImageSparseMemoryRequirementsInfo2
-  { -- | @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image' handle
-    image :: Image }
-  deriving (Typeable)
-deriving instance Show ImageSparseMemoryRequirementsInfo2
-
-instance ToCStruct ImageSparseMemoryRequirementsInfo2 where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageSparseMemoryRequirementsInfo2{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Image)) (image)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Image)) (zero)
-    f
-
-instance FromCStruct ImageSparseMemoryRequirementsInfo2 where
-  peekCStruct p = do
-    image <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
-    pure $ ImageSparseMemoryRequirementsInfo2
-             image
-
-instance Storable ImageSparseMemoryRequirementsInfo2 where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageSparseMemoryRequirementsInfo2 where
-  zero = ImageSparseMemoryRequirementsInfo2
-           zero
-
-
--- | VkMemoryRequirements2 - Structure specifying memory requirements
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.getAccelerationStructureMemoryRequirementsKHR',
--- 'getBufferMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2KHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.getGeneratedCommandsMemoryRequirementsNV',
--- 'getImageMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageMemoryRequirements2KHR'
-data MemoryRequirements2 (es :: [Type]) = MemoryRequirements2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @memoryRequirements@ is a
-    -- 'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
-    -- describing the memory requirements of the resource.
-    memoryRequirements :: MemoryRequirements
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (MemoryRequirements2 es)
-
-instance Extensible MemoryRequirements2 where
-  extensibleType = STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2
-  setNext x next = x{next = next}
-  getNext MemoryRequirements2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends MemoryRequirements2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @MemoryDedicatedRequirements = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (MemoryRequirements2 es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryRequirements2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr MemoryRequirements)) (memoryRequirements) . ($ ())
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr MemoryRequirements)) (zero) . ($ ())
-    lift $ f
-
-instance PeekChain es => FromCStruct (MemoryRequirements2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    memoryRequirements <- peekCStruct @MemoryRequirements ((p `plusPtr` 16 :: Ptr MemoryRequirements))
-    pure $ MemoryRequirements2
-             next memoryRequirements
-
-instance es ~ '[] => Zero (MemoryRequirements2 es) where
-  zero = MemoryRequirements2
-           ()
-           zero
-
-
--- | VkSparseImageMemoryRequirements2 - (None)
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryRequirements',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getImageSparseMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageSparseMemoryRequirements2KHR'
-data SparseImageMemoryRequirements2 = SparseImageMemoryRequirements2
-  { -- | @memoryRequirements@ is a
-    -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryRequirements'
-    -- structure describing the memory requirements of the sparse image.
-    memoryRequirements :: SparseImageMemoryRequirements }
-  deriving (Typeable)
-deriving instance Show SparseImageMemoryRequirements2
-
-instance ToCStruct SparseImageMemoryRequirements2 where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SparseImageMemoryRequirements2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SparseImageMemoryRequirements)) (memoryRequirements) . ($ ())
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SparseImageMemoryRequirements)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct SparseImageMemoryRequirements2 where
-  peekCStruct p = do
-    memoryRequirements <- peekCStruct @SparseImageMemoryRequirements ((p `plusPtr` 16 :: Ptr SparseImageMemoryRequirements))
-    pure $ SparseImageMemoryRequirements2
-             memoryRequirements
-
-instance Zero SparseImageMemoryRequirements2 where
-  zero = SparseImageMemoryRequirements2
-           zero
-
-
--- No documentation found for TopLevel "VkMemoryRequirements2KHR"
-type MemoryRequirements2KHR = MemoryRequirements2
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs-boot
+++ /dev/null
@@ -1,60 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2  ( BufferMemoryRequirementsInfo2
-                                                                             , ImageMemoryRequirementsInfo2
-                                                                             , ImageSparseMemoryRequirementsInfo2
-                                                                             , MemoryRequirements2
-                                                                             , SparseImageMemoryRequirements2
-                                                                             , MemoryRequirements2KHR
-                                                                             ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data BufferMemoryRequirementsInfo2
-
-instance ToCStruct BufferMemoryRequirementsInfo2
-instance Show BufferMemoryRequirementsInfo2
-
-instance FromCStruct BufferMemoryRequirementsInfo2
-
-
-type role ImageMemoryRequirementsInfo2 nominal
-data ImageMemoryRequirementsInfo2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (ImageMemoryRequirementsInfo2 es)
-instance Show (Chain es) => Show (ImageMemoryRequirementsInfo2 es)
-
-instance PeekChain es => FromCStruct (ImageMemoryRequirementsInfo2 es)
-
-
-data ImageSparseMemoryRequirementsInfo2
-
-instance ToCStruct ImageSparseMemoryRequirementsInfo2
-instance Show ImageSparseMemoryRequirementsInfo2
-
-instance FromCStruct ImageSparseMemoryRequirementsInfo2
-
-
-type role MemoryRequirements2 nominal
-data MemoryRequirements2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (MemoryRequirements2 es)
-instance Show (Chain es) => Show (MemoryRequirements2 es)
-
-instance PeekChain es => FromCStruct (MemoryRequirements2 es)
-
-
-data SparseImageMemoryRequirements2
-
-instance ToCStruct SparseImageMemoryRequirements2
-instance Show SparseImageMemoryRequirements2
-
-instance FromCStruct SparseImageMemoryRequirements2
-
-
--- No documentation found for TopLevel "VkMemoryRequirements2KHR"
-type MemoryRequirements2KHR = MemoryRequirements2
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs
+++ /dev/null
@@ -1,1481 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2  ( getPhysicalDeviceFeatures2
-                                                                                    , getPhysicalDeviceProperties2
-                                                                                    , getPhysicalDeviceFormatProperties2
-                                                                                    , getPhysicalDeviceImageFormatProperties2
-                                                                                    , getPhysicalDeviceQueueFamilyProperties2
-                                                                                    , getPhysicalDeviceMemoryProperties2
-                                                                                    , getPhysicalDeviceSparseImageFormatProperties2
-                                                                                    , PhysicalDeviceFeatures2(..)
-                                                                                    , PhysicalDeviceProperties2(..)
-                                                                                    , FormatProperties2(..)
-                                                                                    , ImageFormatProperties2(..)
-                                                                                    , PhysicalDeviceImageFormatInfo2(..)
-                                                                                    , QueueFamilyProperties2(..)
-                                                                                    , PhysicalDeviceMemoryProperties2(..)
-                                                                                    , SparseImageFormatProperties2(..)
-                                                                                    , PhysicalDeviceSparseImageFormatInfo2(..)
-                                                                                    , StructureType(..)
-                                                                                    ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (AndroidHardwareBufferUsageANDROID)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (DrmFormatModifierPropertiesListEXT)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalImageFormatProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_filter_cubic (FilterCubicImageViewImageFormatPropertiesEXT)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.Core10.Enums.Format (Format(..))
-import Graphics.Vulkan.Core10.DeviceInitialization (FormatProperties)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list (ImageFormatListCreateInfo)
-import Graphics.Vulkan.Core10.DeviceInitialization (ImageFormatProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage (ImageStencilUsageCreateInfo)
-import Graphics.Vulkan.Core10.Enums.ImageTiling (ImageTiling)
-import Graphics.Vulkan.Core10.Enums.ImageType (ImageType)
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceFeatures2))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceFormatProperties2))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceImageFormatProperties2))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceMemoryProperties2))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceProperties2))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceQueueFamilyProperties2))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSparseImageFormatProperties2))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage (PhysicalDevice16BitStorageFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage (PhysicalDevice8BitStorageFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode (PhysicalDeviceASTCDecodeFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory (PhysicalDeviceCoherentMemoryFeaturesAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives (PhysicalDeviceComputeShaderDerivativesFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering (PhysicalDeviceConditionalRenderingFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization (PhysicalDeviceConservativeRasterizationPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image (PhysicalDeviceCornerSampledImageFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode (PhysicalDeviceCoverageReductionModeFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing (PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable (PhysicalDeviceDepthClipEnableFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (PhysicalDeviceDepthStencilResolveProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles (PhysicalDeviceDiscardRectanglePropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalImageFormatInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_external_memory_host (PhysicalDeviceExternalMemoryHostPropertiesEXT)
-import Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls (PhysicalDeviceFloatControlsProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric (PhysicalDeviceFragmentShaderBarycentricFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock (PhysicalDeviceFragmentShaderInterlockFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceIDProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (PhysicalDeviceImageDrmFormatModifierInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_filter_cubic (PhysicalDeviceImageViewImageFormatInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (PhysicalDeviceImagelessFramebufferFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8 (PhysicalDeviceIndexTypeUint8FeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (PhysicalDeviceMaintenance3Properties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_memory_budget (PhysicalDeviceMemoryBudgetPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMemoryPriorityFeaturesEXT)
-import Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceMemoryProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes (PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_pci_bus_info (PhysicalDevicePCIBusInfoPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryPropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PhysicalDevicePointClippingProperties)
-import Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_push_descriptor (PhysicalDevicePushDescriptorPropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingPropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (PhysicalDeviceRayTracingPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test (PhysicalDeviceRepresentativeFragmentTestFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2FeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2PropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (PhysicalDeviceSampleLocationsPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (PhysicalDeviceSamplerFilterMinmaxProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_shader_clock (PhysicalDeviceShaderClockFeaturesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties2 (PhysicalDeviceShaderCoreProperties2AMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties (PhysicalDeviceShaderCorePropertiesAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation (PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters (PhysicalDeviceShaderDrawParametersFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8 (PhysicalDeviceShaderFloat16Int8Features)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint (PhysicalDeviceShaderImageFootprintFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2 (PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types (PhysicalDeviceShaderSubgroupExtendedTypesFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImageFeaturesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImagePropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup (PhysicalDeviceSubgroupProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr (PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout (PhysicalDeviceUniformBufferStandardLayoutFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers (PhysicalDeviceVariablePointersFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PhysicalDeviceVertexAttributeDivisorFeaturesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PhysicalDeviceVertexAttributeDivisorPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core12 (PhysicalDeviceVulkan11Features)
-import {-# SOURCE #-} Graphics.Vulkan.Core12 (PhysicalDeviceVulkan11Properties)
-import {-# SOURCE #-} Graphics.Vulkan.Core12 (PhysicalDeviceVulkan12Features)
-import {-# SOURCE #-} Graphics.Vulkan.Core12 (PhysicalDeviceVulkan12Properties)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints (QueueFamilyCheckpointPropertiesNV)
-import Graphics.Vulkan.Core10.DeviceInitialization (QueueFamilyProperties)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionImageFormatProperties)
-import Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseImageFormatProperties)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod (TextureLODGatherFormatPropertiesAMD)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FORMAT_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceFeatures2
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceFeatures2 a) -> IO ()) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceFeatures2 a) -> IO ()
-
--- | vkGetPhysicalDeviceFeatures2 - Reports capabilities of a physical device
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the
---     supported features.
---
--- -   @pFeatures@ is a pointer to a 'PhysicalDeviceFeatures2' structure in
---     which the physical device features are returned.
---
--- = Description
---
--- Each structure in @pFeatures@ and its @pNext@ chain contains members
--- corresponding to fine-grained features. 'getPhysicalDeviceFeatures2'
--- writes each member to a boolean value indicating whether that feature is
--- supported.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceFeatures2'
-getPhysicalDeviceFeatures2 :: forall a io . (PokeChain a, PeekChain a, MonadIO io) => PhysicalDevice -> io (PhysicalDeviceFeatures2 a)
-getPhysicalDeviceFeatures2 physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceFeatures2' = mkVkGetPhysicalDeviceFeatures2 (pVkGetPhysicalDeviceFeatures2 (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPFeatures <- ContT (withZeroCStruct @(PhysicalDeviceFeatures2 _))
-  lift $ vkGetPhysicalDeviceFeatures2' (physicalDeviceHandle (physicalDevice)) (pPFeatures)
-  pFeatures <- lift $ peekCStruct @(PhysicalDeviceFeatures2 _) pPFeatures
-  pure $ (pFeatures)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceProperties2
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceProperties2 a) -> IO ()) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceProperties2 a) -> IO ()
-
--- | vkGetPhysicalDeviceProperties2 - Returns properties of a physical device
---
--- = Parameters
---
--- -   @physicalDevice@ is the handle to the physical device whose
---     properties will be queried.
---
--- -   @pProperties@ is a pointer to a 'PhysicalDeviceProperties2'
---     structure in which properties are returned.
---
--- = Description
---
--- Each structure in @pProperties@ and its @pNext@ chain contain members
--- corresponding to properties or implementation-dependent limits.
--- 'getPhysicalDeviceProperties2' writes each member to a value indicating
--- the value of that property or limit.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceProperties2'
-getPhysicalDeviceProperties2 :: forall a io . (PokeChain a, PeekChain a, MonadIO io) => PhysicalDevice -> io (PhysicalDeviceProperties2 a)
-getPhysicalDeviceProperties2 physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceProperties2' = mkVkGetPhysicalDeviceProperties2 (pVkGetPhysicalDeviceProperties2 (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPProperties <- ContT (withZeroCStruct @(PhysicalDeviceProperties2 _))
-  lift $ vkGetPhysicalDeviceProperties2' (physicalDeviceHandle (physicalDevice)) (pPProperties)
-  pProperties <- lift $ peekCStruct @(PhysicalDeviceProperties2 _) pPProperties
-  pure $ (pProperties)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceFormatProperties2
-  :: FunPtr (Ptr PhysicalDevice_T -> Format -> Ptr (FormatProperties2 a) -> IO ()) -> Ptr PhysicalDevice_T -> Format -> Ptr (FormatProperties2 a) -> IO ()
-
--- | vkGetPhysicalDeviceFormatProperties2 - Lists physical device’s format
--- capabilities
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the
---     format properties.
---
--- -   @format@ is the format whose properties are queried.
---
--- -   @pFormatProperties@ is a pointer to a 'FormatProperties2' structure
---     in which physical device properties for @format@ are returned.
---
--- = Description
---
--- 'getPhysicalDeviceFormatProperties2' behaves similarly to
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties',
--- with the ability to return extended information in a @pNext@ chain of
--- output structures.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Format.Format', 'FormatProperties2',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceFormatProperties2 :: forall a io . (PokeChain a, PeekChain a, MonadIO io) => PhysicalDevice -> Format -> io (FormatProperties2 a)
-getPhysicalDeviceFormatProperties2 physicalDevice format = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceFormatProperties2' = mkVkGetPhysicalDeviceFormatProperties2 (pVkGetPhysicalDeviceFormatProperties2 (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPFormatProperties <- ContT (withZeroCStruct @(FormatProperties2 _))
-  lift $ vkGetPhysicalDeviceFormatProperties2' (physicalDeviceHandle (physicalDevice)) (format) (pPFormatProperties)
-  pFormatProperties <- lift $ peekCStruct @(FormatProperties2 _) pPFormatProperties
-  pure $ (pFormatProperties)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceImageFormatProperties2
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceImageFormatInfo2 a) -> Ptr (ImageFormatProperties2 b) -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceImageFormatInfo2 a) -> Ptr (ImageFormatProperties2 b) -> IO Result
-
--- | vkGetPhysicalDeviceImageFormatProperties2 - Lists physical device’s
--- image format capabilities
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the
---     image capabilities.
---
--- -   @pImageFormatInfo@ is a pointer to a
---     'PhysicalDeviceImageFormatInfo2' structure describing the parameters
---     that would be consumed by
---     'Graphics.Vulkan.Core10.Image.createImage'.
---
--- -   @pImageFormatProperties@ is a pointer to a 'ImageFormatProperties2'
---     structure in which capabilities are returned.
---
--- = Description
---
--- 'getPhysicalDeviceImageFormatProperties2' behaves similarly to
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
--- with the ability to return extended information in a @pNext@ chain of
--- output structures.
---
--- == Valid Usage
---
--- -   If the @pNext@ chain of @pImageFormatProperties@ includes a
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferUsageANDROID'
---     structure, the @pNext@ chain of @pImageFormatInfo@ /must/ include a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'
---     structure with @handleType@ set to
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pImageFormatInfo@ /must/ be a valid pointer to a valid
---     'PhysicalDeviceImageFormatInfo2' structure
---
--- -   @pImageFormatProperties@ /must/ be a valid pointer to a
---     'ImageFormatProperties2' structure
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'
---
--- = See Also
---
--- 'ImageFormatProperties2',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceImageFormatInfo2'
-getPhysicalDeviceImageFormatProperties2 :: forall a b io . (PokeChain a, PokeChain b, PeekChain b, MonadIO io) => PhysicalDevice -> PhysicalDeviceImageFormatInfo2 a -> io (ImageFormatProperties2 b)
-getPhysicalDeviceImageFormatProperties2 physicalDevice imageFormatInfo = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceImageFormatProperties2' = mkVkGetPhysicalDeviceImageFormatProperties2 (pVkGetPhysicalDeviceImageFormatProperties2 (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pImageFormatInfo <- ContT $ withCStruct (imageFormatInfo)
-  pPImageFormatProperties <- ContT (withZeroCStruct @(ImageFormatProperties2 _))
-  r <- lift $ vkGetPhysicalDeviceImageFormatProperties2' (physicalDeviceHandle (physicalDevice)) pImageFormatInfo (pPImageFormatProperties)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pImageFormatProperties <- lift $ peekCStruct @(ImageFormatProperties2 _) pPImageFormatProperties
-  pure $ (pImageFormatProperties)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceQueueFamilyProperties2
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr (QueueFamilyProperties2 a) -> IO ()) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr (QueueFamilyProperties2 a) -> IO ()
-
--- | vkGetPhysicalDeviceQueueFamilyProperties2 - Reports properties of the
--- queues of the specified physical device
---
--- = Parameters
---
--- -   @physicalDevice@ is the handle to the physical device whose
---     properties will be queried.
---
--- -   @pQueueFamilyPropertyCount@ is a pointer to an integer related to
---     the number of queue families available or queried, as described in
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'.
---
--- -   @pQueueFamilyProperties@ is either @NULL@ or a pointer to an array
---     of 'QueueFamilyProperties2' structures.
---
--- = Description
---
--- 'getPhysicalDeviceQueueFamilyProperties2' behaves similarly to
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties',
--- with the ability to return extended information in a @pNext@ chain of
--- output structures.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a
---     @uint32_t@ value
---
--- -   If the value referenced by @pQueueFamilyPropertyCount@ is not @0@,
---     and @pQueueFamilyProperties@ is not @NULL@, @pQueueFamilyProperties@
---     /must/ be a valid pointer to an array of @pQueueFamilyPropertyCount@
---     'QueueFamilyProperties2' structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'QueueFamilyProperties2'
-getPhysicalDeviceQueueFamilyProperties2 :: forall a io . (PokeChain a, PeekChain a, MonadIO io) => PhysicalDevice -> io (("queueFamilyProperties" ::: Vector (QueueFamilyProperties2 a)))
-getPhysicalDeviceQueueFamilyProperties2 physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceQueueFamilyProperties2' = mkVkGetPhysicalDeviceQueueFamilyProperties2 (pVkGetPhysicalDeviceQueueFamilyProperties2 (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPQueueFamilyPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  lift $ vkGetPhysicalDeviceQueueFamilyProperties2' physicalDevice' (pPQueueFamilyPropertyCount) (nullPtr)
-  pQueueFamilyPropertyCount <- lift $ peek @Word32 pPQueueFamilyPropertyCount
-  pPQueueFamilyProperties <- ContT $ bracket (callocBytes @(QueueFamilyProperties2 _) ((fromIntegral (pQueueFamilyPropertyCount)) * 40)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPQueueFamilyProperties `advancePtrBytes` (i * 40) :: Ptr (QueueFamilyProperties2 _)) . ($ ())) [0..(fromIntegral (pQueueFamilyPropertyCount)) - 1]
-  lift $ vkGetPhysicalDeviceQueueFamilyProperties2' physicalDevice' (pPQueueFamilyPropertyCount) ((pPQueueFamilyProperties))
-  pQueueFamilyPropertyCount' <- lift $ peek @Word32 pPQueueFamilyPropertyCount
-  pQueueFamilyProperties' <- lift $ generateM (fromIntegral (pQueueFamilyPropertyCount')) (\i -> peekCStruct @(QueueFamilyProperties2 _) (((pPQueueFamilyProperties) `advancePtrBytes` (40 * (i)) :: Ptr (QueueFamilyProperties2 _))))
-  pure $ (pQueueFamilyProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceMemoryProperties2
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceMemoryProperties2 a) -> IO ()) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceMemoryProperties2 a) -> IO ()
-
--- | vkGetPhysicalDeviceMemoryProperties2 - Reports memory information for
--- the specified physical device
---
--- = Parameters
---
--- -   @physicalDevice@ is the handle to the device to query.
---
--- -   @pMemoryProperties@ is a pointer to a
---     'PhysicalDeviceMemoryProperties2' structure in which the properties
---     are returned.
---
--- = Description
---
--- 'getPhysicalDeviceMemoryProperties2' behaves similarly to
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties',
--- with the ability to return extended information in a @pNext@ chain of
--- output structures.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceMemoryProperties2'
-getPhysicalDeviceMemoryProperties2 :: forall a io . (PokeChain a, PeekChain a, MonadIO io) => PhysicalDevice -> io (PhysicalDeviceMemoryProperties2 a)
-getPhysicalDeviceMemoryProperties2 physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceMemoryProperties2' = mkVkGetPhysicalDeviceMemoryProperties2 (pVkGetPhysicalDeviceMemoryProperties2 (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPMemoryProperties <- ContT (withZeroCStruct @(PhysicalDeviceMemoryProperties2 _))
-  lift $ vkGetPhysicalDeviceMemoryProperties2' (physicalDeviceHandle (physicalDevice)) (pPMemoryProperties)
-  pMemoryProperties <- lift $ peekCStruct @(PhysicalDeviceMemoryProperties2 _) pPMemoryProperties
-  pure $ (pMemoryProperties)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSparseImageFormatProperties2
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceSparseImageFormatInfo2 -> Ptr Word32 -> Ptr SparseImageFormatProperties2 -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceSparseImageFormatInfo2 -> Ptr Word32 -> Ptr SparseImageFormatProperties2 -> IO ()
-
--- | vkGetPhysicalDeviceSparseImageFormatProperties2 - Retrieve properties of
--- an image format applied to sparse images
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the
---     sparse image capabilities.
---
--- -   @pFormatInfo@ is a pointer to a
---     'PhysicalDeviceSparseImageFormatInfo2' structure containing input
---     parameters to the command.
---
--- -   @pPropertyCount@ is a pointer to an integer related to the number of
---     sparse format properties available or queried, as described below.
---
--- -   @pProperties@ is either @NULL@ or a pointer to an array of
---     'SparseImageFormatProperties2' structures.
---
--- = Description
---
--- 'getPhysicalDeviceSparseImageFormatProperties2' behaves identically to
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties',
--- with the ability to return extended information by adding extension
--- structures to the @pNext@ chain of its @pProperties@ parameter.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pFormatInfo@ /must/ be a valid pointer to a valid
---     'PhysicalDeviceSparseImageFormatInfo2' structure
---
--- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value
---
--- -   If the value referenced by @pPropertyCount@ is not @0@, and
---     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer
---     to an array of @pPropertyCount@ 'SparseImageFormatProperties2'
---     structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceSparseImageFormatInfo2', 'SparseImageFormatProperties2'
-getPhysicalDeviceSparseImageFormatProperties2 :: forall io . MonadIO io => PhysicalDevice -> PhysicalDeviceSparseImageFormatInfo2 -> io (("properties" ::: Vector SparseImageFormatProperties2))
-getPhysicalDeviceSparseImageFormatProperties2 physicalDevice formatInfo = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSparseImageFormatProperties2' = mkVkGetPhysicalDeviceSparseImageFormatProperties2 (pVkGetPhysicalDeviceSparseImageFormatProperties2 (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pFormatInfo <- ContT $ withCStruct (formatInfo)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  lift $ vkGetPhysicalDeviceSparseImageFormatProperties2' physicalDevice' pFormatInfo (pPPropertyCount) (nullPtr)
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @SparseImageFormatProperties2 ((fromIntegral (pPropertyCount)) * 40)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 40) :: Ptr SparseImageFormatProperties2) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  lift $ vkGetPhysicalDeviceSparseImageFormatProperties2' physicalDevice' pFormatInfo (pPPropertyCount) ((pPProperties))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @SparseImageFormatProperties2 (((pPProperties) `advancePtrBytes` (40 * (i)) :: Ptr SparseImageFormatProperties2)))
-  pure $ (pProperties')
-
-
--- | VkPhysicalDeviceFeatures2 - Structure describing the fine-grained
--- features that can be supported by an implementation
---
--- = Members
---
--- The 'PhysicalDeviceFeatures2' structure is defined as:
---
--- = Description
---
--- The @pNext@ chain of this structure is used to extend the structure with
--- features defined by extensions. This structure /can/ be used in
--- 'getPhysicalDeviceFeatures2' or /can/ be included in the @pNext@ chain
--- of a 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' structure, in
--- which case it controls which features are enabled in the device in lieu
--- of @pEnabledFeatures@.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceFeatures2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2KHR'
-data PhysicalDeviceFeatures2 (es :: [Type]) = PhysicalDeviceFeatures2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @features@ is a
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures'
-    -- structure describing the fine-grained features of the Vulkan 1.0 API.
-    features :: PhysicalDeviceFeatures
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PhysicalDeviceFeatures2 es)
-
-instance Extensible PhysicalDeviceFeatures2 where
-  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2
-  setNext x next = x{next = next}
-  getNext PhysicalDeviceFeatures2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceFeatures2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PhysicalDeviceRobustness2FeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDiagnosticsConfigFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceCoherentMemoryFeaturesAMD = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVulkan12Features = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVulkan11Features = Just f
-    | Just Refl <- eqT @e @PhysicalDevicePipelineCreationCacheControlFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceLineRasterizationFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceSubgroupSizeControlFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTexelBufferAlignmentFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceSeparateDepthStencilLayoutsFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceFragmentShaderInterlockFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderSMBuiltinsFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceIndexTypeUint8FeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderClockFeaturesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceCoverageReductionModeFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDevicePerformanceQueryFeaturesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceYcbcrImageArraysFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceCooperativeMatrixFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceImagelessFramebufferFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceBufferDeviceAddressFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceBufferDeviceAddressFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceMemoryPriorityFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDepthClipEnableFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceUniformBufferStandardLayoutFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceScalarBlockLayoutFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceFragmentDensityMapFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceRayTracingFeaturesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceMeshShaderFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShadingRateImageFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderImageFootprintFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceFragmentShaderBarycentricFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceComputeShaderDerivativesFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceCornerSampledImageFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceExclusiveScissorFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceRepresentativeFragmentTestFeaturesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTransformFeedbackFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceASTCDecodeFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVertexAttributeDivisorFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderAtomicInt64Features = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVulkanMemoryModelFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceConditionalRenderingFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDevice8BitStorageFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTimelineSemaphoreFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDescriptorIndexingFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceHostQueryResetFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderFloat16Int8Features = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderDrawParametersFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceInlineUniformBlockFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceBlendOperationAdvancedFeaturesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceProtectedMemoryFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderSubgroupExtendedTypesFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDevice16BitStorageFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceMultiviewFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVariablePointersFeatures = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PhysicalDeviceFeatures2 es) where
-  withCStruct x f = allocaBytesAligned 240 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceFeatures2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceFeatures)) (features) . ($ ())
-    lift $ f
-  cStructSize = 240
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceFeatures)) (zero) . ($ ())
-    lift $ f
-
-instance PeekChain es => FromCStruct (PhysicalDeviceFeatures2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    features <- peekCStruct @PhysicalDeviceFeatures ((p `plusPtr` 16 :: Ptr PhysicalDeviceFeatures))
-    pure $ PhysicalDeviceFeatures2
-             next features
-
-instance es ~ '[] => Zero (PhysicalDeviceFeatures2 es) where
-  zero = PhysicalDeviceFeatures2
-           ()
-           zero
-
-
--- | VkPhysicalDeviceProperties2 - Structure specifying physical device
--- properties
---
--- = Description
---
--- The @pNext@ chain of this structure is used to extend the structure with
--- properties defined by extensions.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.PhysicalDeviceConservativeRasterizationPropertiesEXT',
---     'Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixPropertiesNV',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
---     'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsPropertiesNV',
---     'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.PhysicalDeviceDiscardRectanglePropertiesEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
---     'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
---     'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationPropertiesEXT',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties',
---     'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV',
---     'Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties',
---     'Graphics.Vulkan.Extensions.VK_EXT_pci_bus_info.PhysicalDevicePCIBusInfoPropertiesEXT',
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
---     'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
---     'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR',
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR',
---     'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV',
---     'Graphics.Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2PropertiesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.PhysicalDeviceSamplerFilterMinmaxProperties',
---     'Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties2.PhysicalDeviceShaderCoreProperties2AMD',
---     'Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties.PhysicalDeviceShaderCorePropertiesAMD',
---     'Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsPropertiesNV',
---     'Graphics.Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImagePropertiesNV',
---     'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
---     'Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlPropertiesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreProperties',
---     'Graphics.Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PhysicalDeviceVertexAttributeDivisorPropertiesEXT',
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan11Properties', or
---     'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Properties'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2KHR'
-data PhysicalDeviceProperties2 (es :: [Type]) = PhysicalDeviceProperties2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @properties@ is a
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'
-    -- structure describing properties of the physical device. This structure
-    -- is written with the same values as if it were written by
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceProperties'.
-    properties :: PhysicalDeviceProperties
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PhysicalDeviceProperties2 es)
-
-instance Extensible PhysicalDeviceProperties2 where
-  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2
-  setNext x next = x{next = next}
-  getNext PhysicalDeviceProperties2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceProperties2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PhysicalDeviceRobustness2PropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVulkan12Properties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVulkan11Properties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceLineRasterizationPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceSubgroupSizeControlPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTexelBufferAlignmentPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderSMBuiltinsPropertiesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDevicePerformanceQueryPropertiesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceCooperativeMatrixPropertiesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceFragmentDensityMapPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceRayTracingPropertiesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceRayTracingPropertiesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceMeshShaderPropertiesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShadingRateImagePropertiesNV = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTransformFeedbackPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDepthStencilResolveProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDevicePCIBusInfoPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceVertexAttributeDivisorPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceTimelineSemaphoreProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDescriptorIndexingProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderCoreProperties2AMD = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceShaderCorePropertiesAMD = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceConservativeRasterizationPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceExternalMemoryHostPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceFloatControlsProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceMaintenance3Properties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceInlineUniformBlockPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceBlendOperationAdvancedPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceSampleLocationsPropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceSamplerFilterMinmaxProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceProtectedMemoryProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDevicePointClippingProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceSubgroupProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDiscardRectanglePropertiesEXT = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceMultiviewProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceIDProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDriverProperties = Just f
-    | Just Refl <- eqT @e @PhysicalDevicePushDescriptorPropertiesKHR = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PhysicalDeviceProperties2 es) where
-  withCStruct x f = allocaBytesAligned 840 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceProperties2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceProperties)) (properties) . ($ ())
-    lift $ f
-  cStructSize = 840
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceProperties)) (zero) . ($ ())
-    lift $ f
-
-instance PeekChain es => FromCStruct (PhysicalDeviceProperties2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    properties <- peekCStruct @PhysicalDeviceProperties ((p `plusPtr` 16 :: Ptr PhysicalDeviceProperties))
-    pure $ PhysicalDeviceProperties2
-             next properties
-
-instance es ~ '[] => Zero (PhysicalDeviceProperties2 es) where
-  zero = PhysicalDeviceProperties2
-           ()
-           zero
-
-
--- | VkFormatProperties2 - Structure specifying image format properties
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FORMAT_PROPERTIES_2'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesListEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.FormatProperties',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2KHR'
-data FormatProperties2 (es :: [Type]) = FormatProperties2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @formatProperties@ is a
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.FormatProperties' structure
-    -- describing features supported by the requested format.
-    formatProperties :: FormatProperties
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (FormatProperties2 es)
-
-instance Extensible FormatProperties2 where
-  extensibleType = STRUCTURE_TYPE_FORMAT_PROPERTIES_2
-  setNext x next = x{next = next}
-  getNext FormatProperties2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends FormatProperties2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DrmFormatModifierPropertiesListEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (FormatProperties2 es) where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p FormatProperties2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FORMAT_PROPERTIES_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr FormatProperties)) (formatProperties) . ($ ())
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FORMAT_PROPERTIES_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr FormatProperties)) (zero) . ($ ())
-    lift $ f
-
-instance PeekChain es => FromCStruct (FormatProperties2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    formatProperties <- peekCStruct @FormatProperties ((p `plusPtr` 16 :: Ptr FormatProperties))
-    pure $ FormatProperties2
-             next formatProperties
-
-instance es ~ '[] => Zero (FormatProperties2 es) where
-  zero = FormatProperties2
-           ()
-           zero
-
-
--- | VkImageFormatProperties2 - Structure specifying an image format
--- properties
---
--- = Description
---
--- If the combination of parameters to
--- 'getPhysicalDeviceImageFormatProperties2' is not supported by the
--- implementation for use in 'Graphics.Vulkan.Core10.Image.createImage',
--- then all members of @imageFormatProperties@ will be filled with zero.
---
--- Note
---
--- Filling @imageFormatProperties@ with zero for unsupported formats is an
--- exception to the usual rule that output structures have undefined
--- contents on error. This exception was unintentional, but is preserved
--- for backwards compatibility. This exeption only applies to
--- @imageFormatProperties@, not @sType@, @pNext@, or any structures chained
--- from @pNext@.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferUsageANDROID',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties',
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionImageFormatProperties',
---     or
---     'Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.TextureLODGatherFormatPropertiesAMD'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceImageFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2KHR'
-data ImageFormatProperties2 (es :: [Type]) = ImageFormatProperties2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure. The
-    -- @pNext@ chain of 'ImageFormatProperties2' is used to allow the
-    -- specification of additional capabilities to be returned from
-    -- 'getPhysicalDeviceImageFormatProperties2'.
-    next :: Chain es
-  , -- | @imageFormatProperties@ is a
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties'
-    -- structure in which capabilities are returned.
-    imageFormatProperties :: ImageFormatProperties
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (ImageFormatProperties2 es)
-
-instance Extensible ImageFormatProperties2 where
-  extensibleType = STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2
-  setNext x next = x{next = next}
-  getNext ImageFormatProperties2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageFormatProperties2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @FilterCubicImageViewImageFormatPropertiesEXT = Just f
-    | Just Refl <- eqT @e @AndroidHardwareBufferUsageANDROID = Just f
-    | Just Refl <- eqT @e @TextureLODGatherFormatPropertiesAMD = Just f
-    | Just Refl <- eqT @e @SamplerYcbcrConversionImageFormatProperties = Just f
-    | Just Refl <- eqT @e @ExternalImageFormatProperties = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (ImageFormatProperties2 es) where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageFormatProperties2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageFormatProperties)) (imageFormatProperties) . ($ ())
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageFormatProperties)) (zero) . ($ ())
-    lift $ f
-
-instance PeekChain es => FromCStruct (ImageFormatProperties2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    imageFormatProperties <- peekCStruct @ImageFormatProperties ((p `plusPtr` 16 :: Ptr ImageFormatProperties))
-    pure $ ImageFormatProperties2
-             next imageFormatProperties
-
-instance es ~ '[] => Zero (ImageFormatProperties2 es) where
-  zero = ImageFormatProperties2
-           ()
-           zero
-
-
--- | VkPhysicalDeviceImageFormatInfo2 - Structure specifying image creation
--- parameters
---
--- = Description
---
--- The members of 'PhysicalDeviceImageFormatInfo2' correspond to the
--- arguments to
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
--- with @sType@ and @pNext@ added for extensibility.
---
--- == Valid Usage
---
--- -   @tiling@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
---     if and only if the @pNext@ chain includes
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT'
---
--- -   If @tiling@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
---     and @flags@ contains
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
---     then the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
---     structure with non-zero @viewFormatCount@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo',
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo',
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT',
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.PhysicalDeviceImageViewImageFormatInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @format@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- -   @type@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageType.ImageType' value
---
--- -   @tiling@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling' value
---
--- -   @usage@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
---     values
---
--- -   @usage@ /must/ not be @0@
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling',
--- 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType',
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceImageFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2KHR'
-data PhysicalDeviceImageFormatInfo2 (es :: [Type]) = PhysicalDeviceImageFormatInfo2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure. The
-    -- @pNext@ chain of 'PhysicalDeviceImageFormatInfo2' is used to provide
-    -- additional image parameters to
-    -- 'getPhysicalDeviceImageFormatProperties2'.
-    next :: Chain es
-  , -- | @format@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format' value
-    -- indicating the image format, corresponding to
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@format@.
-    format :: Format
-  , -- | @type@ is a 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType' value
-    -- indicating the image type, corresponding to
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@imageType@.
-    type' :: ImageType
-  , -- | @tiling@ is a 'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling'
-    -- value indicating the image tiling, corresponding to
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@tiling@.
-    tiling :: ImageTiling
-  , -- | @usage@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
-    -- indicating the intended usage of the image, corresponding to
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@usage@.
-    usage :: ImageUsageFlags
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits'
-    -- indicating additional parameters of the image, corresponding to
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@.
-    flags :: ImageCreateFlags
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PhysicalDeviceImageFormatInfo2 es)
-
-instance Extensible PhysicalDeviceImageFormatInfo2 where
-  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2
-  setNext x next = x{next = next}
-  getNext PhysicalDeviceImageFormatInfo2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceImageFormatInfo2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PhysicalDeviceImageViewImageFormatInfoEXT = Just f
-    | Just Refl <- eqT @e @ImageStencilUsageCreateInfo = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceImageDrmFormatModifierInfoEXT = Just f
-    | Just Refl <- eqT @e @ImageFormatListCreateInfo = Just f
-    | Just Refl <- eqT @e @PhysicalDeviceExternalImageFormatInfo = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PhysicalDeviceImageFormatInfo2 es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceImageFormatInfo2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (format)
-    lift $ poke ((p `plusPtr` 20 :: Ptr ImageType)) (type')
-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageTiling)) (tiling)
-    lift $ poke ((p `plusPtr` 28 :: Ptr ImageUsageFlags)) (usage)
-    lift $ poke ((p `plusPtr` 32 :: Ptr ImageCreateFlags)) (flags)
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
-    lift $ poke ((p `plusPtr` 20 :: Ptr ImageType)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageTiling)) (zero)
-    lift $ poke ((p `plusPtr` 28 :: Ptr ImageUsageFlags)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (PhysicalDeviceImageFormatInfo2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    format <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
-    type' <- peek @ImageType ((p `plusPtr` 20 :: Ptr ImageType))
-    tiling <- peek @ImageTiling ((p `plusPtr` 24 :: Ptr ImageTiling))
-    usage <- peek @ImageUsageFlags ((p `plusPtr` 28 :: Ptr ImageUsageFlags))
-    flags <- peek @ImageCreateFlags ((p `plusPtr` 32 :: Ptr ImageCreateFlags))
-    pure $ PhysicalDeviceImageFormatInfo2
-             next format type' tiling usage flags
-
-instance es ~ '[] => Zero (PhysicalDeviceImageFormatInfo2 es) where
-  zero = PhysicalDeviceImageFormatInfo2
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkQueueFamilyProperties2 - Structure providing information about a queue
--- family
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.QueueFamilyCheckpointPropertiesNV'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.QueueFamilyProperties',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceQueueFamilyProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2KHR'
-data QueueFamilyProperties2 (es :: [Type]) = QueueFamilyProperties2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @queueFamilyProperties@ is a
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
-    -- structure which is populated with the same values as in
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'.
-    queueFamilyProperties :: QueueFamilyProperties
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (QueueFamilyProperties2 es)
-
-instance Extensible QueueFamilyProperties2 where
-  extensibleType = STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2
-  setNext x next = x{next = next}
-  getNext QueueFamilyProperties2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends QueueFamilyProperties2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @QueueFamilyCheckpointPropertiesNV = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (QueueFamilyProperties2 es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p QueueFamilyProperties2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr QueueFamilyProperties)) (queueFamilyProperties) . ($ ())
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr QueueFamilyProperties)) (zero) . ($ ())
-    lift $ f
-
-instance PeekChain es => FromCStruct (QueueFamilyProperties2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    queueFamilyProperties <- peekCStruct @QueueFamilyProperties ((p `plusPtr` 16 :: Ptr QueueFamilyProperties))
-    pure $ QueueFamilyProperties2
-             next queueFamilyProperties
-
-instance es ~ '[] => Zero (QueueFamilyProperties2 es) where
-  zero = QueueFamilyProperties2
-           ()
-           zero
-
-
--- | VkPhysicalDeviceMemoryProperties2 - Structure specifying physical device
--- memory properties
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_memory_budget.PhysicalDeviceMemoryBudgetPropertiesEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceMemoryProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceMemoryProperties2KHR'
-data PhysicalDeviceMemoryProperties2 (es :: [Type]) = PhysicalDeviceMemoryProperties2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @memoryProperties@ is a
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'
-    -- structure which is populated with the same values as in
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties'.
-    memoryProperties :: PhysicalDeviceMemoryProperties
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PhysicalDeviceMemoryProperties2 es)
-
-instance Extensible PhysicalDeviceMemoryProperties2 where
-  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2
-  setNext x next = x{next = next}
-  getNext PhysicalDeviceMemoryProperties2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceMemoryProperties2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PhysicalDeviceMemoryBudgetPropertiesEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PhysicalDeviceMemoryProperties2 es) where
-  withCStruct x f = allocaBytesAligned 536 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceMemoryProperties2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceMemoryProperties)) (memoryProperties) . ($ ())
-    lift $ f
-  cStructSize = 536
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceMemoryProperties)) (zero) . ($ ())
-    lift $ f
-
-instance PeekChain es => FromCStruct (PhysicalDeviceMemoryProperties2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    memoryProperties <- peekCStruct @PhysicalDeviceMemoryProperties ((p `plusPtr` 16 :: Ptr PhysicalDeviceMemoryProperties))
-    pure $ PhysicalDeviceMemoryProperties2
-             next memoryProperties
-
-instance es ~ '[] => Zero (PhysicalDeviceMemoryProperties2 es) where
-  zero = PhysicalDeviceMemoryProperties2
-           ()
-           zero
-
-
--- | VkSparseImageFormatProperties2 - Structure specifying sparse image
--- format properties
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceSparseImageFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceSparseImageFormatProperties2KHR'
-data SparseImageFormatProperties2 = SparseImageFormatProperties2
-  { -- | @properties@ is a
-    -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'
-    -- structure which is populated with the same values as in
-    -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties'.
-    properties :: SparseImageFormatProperties }
-  deriving (Typeable)
-deriving instance Show SparseImageFormatProperties2
-
-instance ToCStruct SparseImageFormatProperties2 where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SparseImageFormatProperties2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SparseImageFormatProperties)) (properties) . ($ ())
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SparseImageFormatProperties)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct SparseImageFormatProperties2 where
-  peekCStruct p = do
-    properties <- peekCStruct @SparseImageFormatProperties ((p `plusPtr` 16 :: Ptr SparseImageFormatProperties))
-    pure $ SparseImageFormatProperties2
-             properties
-
-instance Zero SparseImageFormatProperties2 where
-  zero = SparseImageFormatProperties2
-           zero
-
-
--- | VkPhysicalDeviceSparseImageFormatInfo2 - Structure specifying sparse
--- image format inputs
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling',
--- 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType',
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceSparseImageFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceSparseImageFormatProperties2KHR'
-data PhysicalDeviceSparseImageFormatInfo2 = PhysicalDeviceSparseImageFormatInfo2
-  { -- | @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Enums.Format.Format'
-    -- value
-    format :: Format
-  , -- | @type@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType' value
-    type' :: ImageType
-  , -- | @samples@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- value
-    samples :: SampleCountFlagBits
-  , -- | @usage@ /must/ not be @0@
-    usage :: ImageUsageFlags
-  , -- | @tiling@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling' value
-    tiling :: ImageTiling
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceSparseImageFormatInfo2
-
-instance ToCStruct PhysicalDeviceSparseImageFormatInfo2 where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceSparseImageFormatInfo2{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Format)) (format)
-    poke ((p `plusPtr` 20 :: Ptr ImageType)) (type')
-    poke ((p `plusPtr` 24 :: Ptr SampleCountFlagBits)) (samples)
-    poke ((p `plusPtr` 28 :: Ptr ImageUsageFlags)) (usage)
-    poke ((p `plusPtr` 32 :: Ptr ImageTiling)) (tiling)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr ImageType)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr SampleCountFlagBits)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr ImageUsageFlags)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr ImageTiling)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceSparseImageFormatInfo2 where
-  peekCStruct p = do
-    format <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
-    type' <- peek @ImageType ((p `plusPtr` 20 :: Ptr ImageType))
-    samples <- peek @SampleCountFlagBits ((p `plusPtr` 24 :: Ptr SampleCountFlagBits))
-    usage <- peek @ImageUsageFlags ((p `plusPtr` 28 :: Ptr ImageUsageFlags))
-    tiling <- peek @ImageTiling ((p `plusPtr` 32 :: Ptr ImageTiling))
-    pure $ PhysicalDeviceSparseImageFormatInfo2
-             format type' samples usage tiling
-
-instance Storable PhysicalDeviceSparseImageFormatInfo2 where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceSparseImageFormatInfo2 where
-  zero = PhysicalDeviceSparseImageFormatInfo2
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs-boot
+++ /dev/null
@@ -1,96 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2  ( FormatProperties2
-                                                                                    , ImageFormatProperties2
-                                                                                    , PhysicalDeviceFeatures2
-                                                                                    , PhysicalDeviceImageFormatInfo2
-                                                                                    , PhysicalDeviceMemoryProperties2
-                                                                                    , PhysicalDeviceProperties2
-                                                                                    , PhysicalDeviceSparseImageFormatInfo2
-                                                                                    , QueueFamilyProperties2
-                                                                                    , SparseImageFormatProperties2
-                                                                                    ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role FormatProperties2 nominal
-data FormatProperties2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (FormatProperties2 es)
-instance Show (Chain es) => Show (FormatProperties2 es)
-
-instance PeekChain es => FromCStruct (FormatProperties2 es)
-
-
-type role ImageFormatProperties2 nominal
-data ImageFormatProperties2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (ImageFormatProperties2 es)
-instance Show (Chain es) => Show (ImageFormatProperties2 es)
-
-instance PeekChain es => FromCStruct (ImageFormatProperties2 es)
-
-
-type role PhysicalDeviceFeatures2 nominal
-data PhysicalDeviceFeatures2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (PhysicalDeviceFeatures2 es)
-instance Show (Chain es) => Show (PhysicalDeviceFeatures2 es)
-
-instance PeekChain es => FromCStruct (PhysicalDeviceFeatures2 es)
-
-
-type role PhysicalDeviceImageFormatInfo2 nominal
-data PhysicalDeviceImageFormatInfo2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (PhysicalDeviceImageFormatInfo2 es)
-instance Show (Chain es) => Show (PhysicalDeviceImageFormatInfo2 es)
-
-instance PeekChain es => FromCStruct (PhysicalDeviceImageFormatInfo2 es)
-
-
-type role PhysicalDeviceMemoryProperties2 nominal
-data PhysicalDeviceMemoryProperties2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (PhysicalDeviceMemoryProperties2 es)
-instance Show (Chain es) => Show (PhysicalDeviceMemoryProperties2 es)
-
-instance PeekChain es => FromCStruct (PhysicalDeviceMemoryProperties2 es)
-
-
-type role PhysicalDeviceProperties2 nominal
-data PhysicalDeviceProperties2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (PhysicalDeviceProperties2 es)
-instance Show (Chain es) => Show (PhysicalDeviceProperties2 es)
-
-instance PeekChain es => FromCStruct (PhysicalDeviceProperties2 es)
-
-
-data PhysicalDeviceSparseImageFormatInfo2
-
-instance ToCStruct PhysicalDeviceSparseImageFormatInfo2
-instance Show PhysicalDeviceSparseImageFormatInfo2
-
-instance FromCStruct PhysicalDeviceSparseImageFormatInfo2
-
-
-type role QueueFamilyProperties2 nominal
-data QueueFamilyProperties2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (QueueFamilyProperties2 es)
-instance Show (Chain es) => Show (QueueFamilyProperties2 es)
-
-instance PeekChain es => FromCStruct (QueueFamilyProperties2 es)
-
-
-data SparseImageFormatProperties2
-
-instance ToCStruct SparseImageFormatProperties2
-instance Show SparseImageFormatProperties2
-
-instance FromCStruct SparseImageFormatProperties2
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance1.hs b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance1.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance1.hs
+++ /dev/null
@@ -1,114 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance1  ( trimCommandPool
-                                                                 , CommandPoolTrimFlags(..)
-                                                                 , Result(..)
-                                                                 , ImageCreateFlagBits(..)
-                                                                 , ImageCreateFlags
-                                                                 , FormatFeatureFlagBits(..)
-                                                                 , FormatFeatureFlags
-                                                                 ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Control.Monad.IO.Class (MonadIO)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Graphics.Vulkan.Core10.Handles (CommandPool)
-import Graphics.Vulkan.Core10.Handles (CommandPool(..))
-import Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags (CommandPoolTrimFlags)
-import Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags (CommandPoolTrimFlags(..))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkTrimCommandPool))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags (CommandPoolTrimFlags(..))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkTrimCommandPool
-  :: FunPtr (Ptr Device_T -> CommandPool -> CommandPoolTrimFlags -> IO ()) -> Ptr Device_T -> CommandPool -> CommandPoolTrimFlags -> IO ()
-
--- | vkTrimCommandPool - Trim a command pool
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the command pool.
---
--- -   @commandPool@ is the command pool to trim.
---
--- -   @flags@ is reserved for future use.
---
--- = Description
---
--- Trimming a command pool recycles unused memory from the command pool
--- back to the system. Command buffers allocated from the pool are not
--- affected by the command.
---
--- Note
---
--- This command provides applications with some control over the internal
--- memory allocations used by command pools.
---
--- Unused memory normally arises from command buffers that have been
--- recorded and later reset, such that they are no longer using the memory.
--- On reset, a command buffer can return memory to its command pool, but
--- the only way to release memory from a command pool to the system
--- requires calling 'Graphics.Vulkan.Core10.CommandPool.resetCommandPool',
--- which cannot be executed while any command buffers from that pool are
--- still in use. Subsequent recording operations into command buffers will
--- re-use this memory but since total memory requirements fluctuate over
--- time, unused memory can accumulate.
---
--- In this situation, trimming a command pool /may/ be useful to return
--- unused memory back to the system, returning the total outstanding memory
--- allocated by the pool back to a more “average” value.
---
--- Implementations utilize many internal allocation strategies that make it
--- impossible to guarantee that all unused memory is released back to the
--- system. For instance, an implementation of a command pool /may/ involve
--- allocating memory in bulk from the system and sub-allocating from that
--- memory. In such an implementation any live command buffer that holds a
--- reference to a bulk allocation would prevent that allocation from being
--- freed, even if only a small proportion of the bulk allocation is in use.
---
--- In most cases trimming will result in a reduction in allocated but
--- unused memory, but it does not guarantee the “ideal” behavior.
---
--- Trimming /may/ be an expensive operation, and /should/ not be called
--- frequently. Trimming /should/ be treated as a way to relieve memory
--- pressure after application-known points when there exists enough unused
--- memory that the cost of trimming is “worth” it.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @commandPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandPool' handle
---
--- -   @flags@ /must/ be @0@
---
--- -   @commandPool@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- == Host Synchronization
---
--- -   Host access to @commandPool@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandPool',
--- 'Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags.CommandPoolTrimFlags',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-trimCommandPool :: forall io . MonadIO io => Device -> CommandPool -> CommandPoolTrimFlags -> io ()
-trimCommandPool device commandPool flags = liftIO $ do
-  let vkTrimCommandPool' = mkVkTrimCommandPool (pVkTrimCommandPool (deviceCmds (device :: Device)))
-  vkTrimCommandPool' (deviceHandle (device)) (commandPool) (flags)
-  pure $ ()
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs
+++ /dev/null
@@ -1,341 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2  ( InputAttachmentAspectReference(..)
-                                                                 , RenderPassInputAttachmentAspectCreateInfo(..)
-                                                                 , PhysicalDevicePointClippingProperties(..)
-                                                                 , ImageViewUsageCreateInfo(..)
-                                                                 , PipelineTessellationDomainOriginStateCreateInfo(..)
-                                                                 , ImageLayout(..)
-                                                                 , StructureType(..)
-                                                                 , ImageCreateFlagBits(..)
-                                                                 , ImageCreateFlags
-                                                                 , PointClippingBehavior(..)
-                                                                 , TessellationDomainOrigin(..)
-                                                                 ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin (TessellationDomainOrigin)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout(..))
-import Graphics.Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-import Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin (TessellationDomainOrigin(..))
--- | VkInputAttachmentAspectReference - Structure specifying a subpass\/input
--- attachment pair and an aspect mask that /can/ be read.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
--- 'RenderPassInputAttachmentAspectCreateInfo'
-data InputAttachmentAspectReference = InputAttachmentAspectReference
-  { -- | @subpass@ is an index into the @pSubpasses@ array of the parent
-    -- 'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo' structure.
-    subpass :: Word32
-  , -- | @inputAttachmentIndex@ is an index into the @pInputAttachments@ of the
-    -- specified subpass.
-    inputAttachmentIndex :: Word32
-  , -- | @aspectMask@ /must/ not be @0@
-    aspectMask :: ImageAspectFlags
-  }
-  deriving (Typeable)
-deriving instance Show InputAttachmentAspectReference
-
-instance ToCStruct InputAttachmentAspectReference where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p InputAttachmentAspectReference{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (subpass)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (inputAttachmentIndex)
-    poke ((p `plusPtr` 8 :: Ptr ImageAspectFlags)) (aspectMask)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr ImageAspectFlags)) (zero)
-    f
-
-instance FromCStruct InputAttachmentAspectReference where
-  peekCStruct p = do
-    subpass <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    inputAttachmentIndex <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 8 :: Ptr ImageAspectFlags))
-    pure $ InputAttachmentAspectReference
-             subpass inputAttachmentIndex aspectMask
-
-instance Storable InputAttachmentAspectReference where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero InputAttachmentAspectReference where
-  zero = InputAttachmentAspectReference
-           zero
-           zero
-           zero
-
-
--- | VkRenderPassInputAttachmentAspectCreateInfo - Structure specifying, for
--- a given subpass\/input attachment pair, which aspect /can/ be read.
---
--- = Description
---
--- An application /can/ access any aspect of an input attachment that does
--- not have a specified aspect mask in the @pAspectReferences@ array.
--- Otherwise, an application /must/ not access aspect(s) of an input
--- attachment other than those in its specified aspect mask.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'InputAttachmentAspectReference',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data RenderPassInputAttachmentAspectCreateInfo = RenderPassInputAttachmentAspectCreateInfo
-  { -- | @pAspectReferences@ /must/ be a valid pointer to an array of
-    -- @aspectReferenceCount@ valid 'InputAttachmentAspectReference' structures
-    aspectReferences :: Vector InputAttachmentAspectReference }
-  deriving (Typeable)
-deriving instance Show RenderPassInputAttachmentAspectCreateInfo
-
-instance ToCStruct RenderPassInputAttachmentAspectCreateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RenderPassInputAttachmentAspectCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (aspectReferences)) :: Word32))
-    pPAspectReferences' <- ContT $ allocaBytesAligned @InputAttachmentAspectReference ((Data.Vector.length (aspectReferences)) * 12) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAspectReferences' `plusPtr` (12 * (i)) :: Ptr InputAttachmentAspectReference) (e) . ($ ())) (aspectReferences)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr InputAttachmentAspectReference))) (pPAspectReferences')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPAspectReferences' <- ContT $ allocaBytesAligned @InputAttachmentAspectReference ((Data.Vector.length (mempty)) * 12) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAspectReferences' `plusPtr` (12 * (i)) :: Ptr InputAttachmentAspectReference) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr InputAttachmentAspectReference))) (pPAspectReferences')
-    lift $ f
-
-instance FromCStruct RenderPassInputAttachmentAspectCreateInfo where
-  peekCStruct p = do
-    aspectReferenceCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pAspectReferences <- peek @(Ptr InputAttachmentAspectReference) ((p `plusPtr` 24 :: Ptr (Ptr InputAttachmentAspectReference)))
-    pAspectReferences' <- generateM (fromIntegral aspectReferenceCount) (\i -> peekCStruct @InputAttachmentAspectReference ((pAspectReferences `advancePtrBytes` (12 * (i)) :: Ptr InputAttachmentAspectReference)))
-    pure $ RenderPassInputAttachmentAspectCreateInfo
-             pAspectReferences'
-
-instance Zero RenderPassInputAttachmentAspectCreateInfo where
-  zero = RenderPassInputAttachmentAspectCreateInfo
-           mempty
-
-
--- | VkPhysicalDevicePointClippingProperties - Structure describing the point
--- clipping behavior supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDevicePointClippingProperties' structure
--- describe the following implementation-dependent limit:
---
--- = Description
---
--- If the 'PhysicalDevicePointClippingProperties' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDevicePointClippingProperties = PhysicalDevicePointClippingProperties
-  { -- | @pointClippingBehavior@ is a
-    -- 'Graphics.Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior'
-    -- value specifying the point clipping behavior supported by the
-    -- implementation.
-    pointClippingBehavior :: PointClippingBehavior }
-  deriving (Typeable)
-deriving instance Show PhysicalDevicePointClippingProperties
-
-instance ToCStruct PhysicalDevicePointClippingProperties where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDevicePointClippingProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PointClippingBehavior)) (pointClippingBehavior)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PointClippingBehavior)) (zero)
-    f
-
-instance FromCStruct PhysicalDevicePointClippingProperties where
-  peekCStruct p = do
-    pointClippingBehavior <- peek @PointClippingBehavior ((p `plusPtr` 16 :: Ptr PointClippingBehavior))
-    pure $ PhysicalDevicePointClippingProperties
-             pointClippingBehavior
-
-instance Storable PhysicalDevicePointClippingProperties where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDevicePointClippingProperties where
-  zero = PhysicalDevicePointClippingProperties
-           zero
-
-
--- | VkImageViewUsageCreateInfo - Specify the intended usage of an image view
---
--- = Description
---
--- When this structure is chained to
--- 'Graphics.Vulkan.Core10.ImageView.ImageViewCreateInfo' the @usage@ field
--- overrides the implicit @usage@ parameter inherited from image creation
--- time and its value is used instead for the purposes of determining the
--- valid usage conditions of
--- 'Graphics.Vulkan.Core10.ImageView.ImageViewCreateInfo'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImageViewUsageCreateInfo = ImageViewUsageCreateInfo
-  { -- | @usage@ /must/ not be @0@
-    usage :: ImageUsageFlags }
-  deriving (Typeable)
-deriving instance Show ImageViewUsageCreateInfo
-
-instance ToCStruct ImageViewUsageCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageViewUsageCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageUsageFlags)) (usage)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageUsageFlags)) (zero)
-    f
-
-instance FromCStruct ImageViewUsageCreateInfo where
-  peekCStruct p = do
-    usage <- peek @ImageUsageFlags ((p `plusPtr` 16 :: Ptr ImageUsageFlags))
-    pure $ ImageViewUsageCreateInfo
-             usage
-
-instance Storable ImageViewUsageCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageViewUsageCreateInfo where
-  zero = ImageViewUsageCreateInfo
-           zero
-
-
--- | VkPipelineTessellationDomainOriginStateCreateInfo - Structure specifying
--- the orientation of the tessellation domain
---
--- = Description
---
--- If the 'PipelineTessellationDomainOriginStateCreateInfo' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo',
--- it controls the origin of the tessellation domain. If this structure is
--- not present, it is as if @domainOrigin@ were
--- 'Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin.TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin.TessellationDomainOrigin'
-data PipelineTessellationDomainOriginStateCreateInfo = PipelineTessellationDomainOriginStateCreateInfo
-  { -- | @domainOrigin@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin.TessellationDomainOrigin'
-    -- value
-    domainOrigin :: TessellationDomainOrigin }
-  deriving (Typeable)
-deriving instance Show PipelineTessellationDomainOriginStateCreateInfo
-
-instance ToCStruct PipelineTessellationDomainOriginStateCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineTessellationDomainOriginStateCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr TessellationDomainOrigin)) (domainOrigin)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr TessellationDomainOrigin)) (zero)
-    f
-
-instance FromCStruct PipelineTessellationDomainOriginStateCreateInfo where
-  peekCStruct p = do
-    domainOrigin <- peek @TessellationDomainOrigin ((p `plusPtr` 16 :: Ptr TessellationDomainOrigin))
-    pure $ PipelineTessellationDomainOriginStateCreateInfo
-             domainOrigin
-
-instance Storable PipelineTessellationDomainOriginStateCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineTessellationDomainOriginStateCreateInfo where
-  zero = PipelineTessellationDomainOriginStateCreateInfo
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs-boot
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2  ( ImageViewUsageCreateInfo
-                                                                 , InputAttachmentAspectReference
-                                                                 , PhysicalDevicePointClippingProperties
-                                                                 , PipelineTessellationDomainOriginStateCreateInfo
-                                                                 , RenderPassInputAttachmentAspectCreateInfo
-                                                                 ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ImageViewUsageCreateInfo
-
-instance ToCStruct ImageViewUsageCreateInfo
-instance Show ImageViewUsageCreateInfo
-
-instance FromCStruct ImageViewUsageCreateInfo
-
-
-data InputAttachmentAspectReference
-
-instance ToCStruct InputAttachmentAspectReference
-instance Show InputAttachmentAspectReference
-
-instance FromCStruct InputAttachmentAspectReference
-
-
-data PhysicalDevicePointClippingProperties
-
-instance ToCStruct PhysicalDevicePointClippingProperties
-instance Show PhysicalDevicePointClippingProperties
-
-instance FromCStruct PhysicalDevicePointClippingProperties
-
-
-data PipelineTessellationDomainOriginStateCreateInfo
-
-instance ToCStruct PipelineTessellationDomainOriginStateCreateInfo
-instance Show PipelineTessellationDomainOriginStateCreateInfo
-
-instance FromCStruct PipelineTessellationDomainOriginStateCreateInfo
-
-
-data RenderPassInputAttachmentAspectCreateInfo
-
-instance ToCStruct RenderPassInputAttachmentAspectCreateInfo
-instance Show RenderPassInputAttachmentAspectCreateInfo
-
-instance FromCStruct RenderPassInputAttachmentAspectCreateInfo
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs
+++ /dev/null
@@ -1,270 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3  ( getDescriptorSetLayoutSupport
-                                                                 , PhysicalDeviceMaintenance3Properties(..)
-                                                                 , DescriptorSetLayoutSupport(..)
-                                                                 , StructureType(..)
-                                                                 ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.DescriptorSet (DescriptorSetLayoutCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountLayoutSupport)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDescriptorSetLayoutSupport))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDescriptorSetLayoutSupport
-  :: FunPtr (Ptr Device_T -> Ptr (DescriptorSetLayoutCreateInfo a) -> Ptr (DescriptorSetLayoutSupport b) -> IO ()) -> Ptr Device_T -> Ptr (DescriptorSetLayoutCreateInfo a) -> Ptr (DescriptorSetLayoutSupport b) -> IO ()
-
--- | vkGetDescriptorSetLayoutSupport - Query whether a descriptor set layout
--- can be created
---
--- = Parameters
---
--- -   @device@ is the logical device that would create the descriptor set
---     layout.
---
--- -   @pCreateInfo@ is a pointer to a
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'
---     structure specifying the state of the descriptor set layout object.
---
--- -   @pSupport@ is a pointer to a 'DescriptorSetLayoutSupport' structure,
---     in which information about support for the descriptor set layout
---     object is returned.
---
--- = Description
---
--- Some implementations have limitations on what fits in a descriptor set
--- which are not easily expressible in terms of existing limits like
--- @maxDescriptorSet@*, for example if all descriptor types share a limited
--- space in memory but each descriptor is a different size or alignment.
--- This command returns information about whether a descriptor set
--- satisfies this limit. If the descriptor set layout satisfies the
--- 'PhysicalDeviceMaintenance3Properties'::@maxPerSetDescriptors@ limit,
--- this command is guaranteed to return
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' in
--- 'DescriptorSetLayoutSupport'::@supported@. If the descriptor set layout
--- exceeds the
--- 'PhysicalDeviceMaintenance3Properties'::@maxPerSetDescriptors@ limit,
--- whether the descriptor set layout is supported is
--- implementation-dependent and /may/ depend on whether the descriptor
--- sizes and alignments cause the layout to exceed an internal limit.
---
--- This command does not consider other limits such as
--- @maxPerStageDescriptor@*, and so a descriptor set layout that is
--- supported according to this command /must/ still satisfy the pipeline
--- layout limits such as @maxPerStageDescriptor@* in order to be used in a
--- pipeline layout.
---
--- Note
---
--- This is a 'Graphics.Vulkan.Core10.Handles.Device' query rather than
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice' because the answer /may/
--- depend on enabled features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo',
--- 'DescriptorSetLayoutSupport', 'Graphics.Vulkan.Core10.Handles.Device'
-getDescriptorSetLayoutSupport :: forall a b io . (PokeChain a, PokeChain b, PeekChain b, MonadIO io) => Device -> DescriptorSetLayoutCreateInfo a -> io (DescriptorSetLayoutSupport b)
-getDescriptorSetLayoutSupport device createInfo = liftIO . evalContT $ do
-  let vkGetDescriptorSetLayoutSupport' = mkVkGetDescriptorSetLayoutSupport (pVkGetDescriptorSetLayoutSupport (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pPSupport <- ContT (withZeroCStruct @(DescriptorSetLayoutSupport _))
-  lift $ vkGetDescriptorSetLayoutSupport' (deviceHandle (device)) pCreateInfo (pPSupport)
-  pSupport <- lift $ peekCStruct @(DescriptorSetLayoutSupport _) pPSupport
-  pure $ (pSupport)
-
-
--- | VkPhysicalDeviceMaintenance3Properties - Structure describing descriptor
--- set properties
---
--- = Members
---
--- The members of the 'PhysicalDeviceMaintenance3Properties' structure
--- describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceMaintenance3Properties' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceMaintenance3Properties = PhysicalDeviceMaintenance3Properties
-  { -- | @maxPerSetDescriptors@ is a maximum number of descriptors (summed over
-    -- all descriptor types) in a single descriptor set that is guaranteed to
-    -- satisfy any implementation-dependent constraints on the size of a
-    -- descriptor set itself. Applications /can/ query whether a descriptor set
-    -- that goes beyond this limit is supported using
-    -- 'getDescriptorSetLayoutSupport'.
-    maxPerSetDescriptors :: Word32
-  , -- | @maxMemoryAllocationSize@ is the maximum size of a memory allocation
-    -- that /can/ be created, even if there is more space available in the
-    -- heap.
-    maxMemoryAllocationSize :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceMaintenance3Properties
-
-instance ToCStruct PhysicalDeviceMaintenance3Properties where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceMaintenance3Properties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxPerSetDescriptors)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (maxMemoryAllocationSize)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceMaintenance3Properties where
-  peekCStruct p = do
-    maxPerSetDescriptors <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxMemoryAllocationSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    pure $ PhysicalDeviceMaintenance3Properties
-             maxPerSetDescriptors maxMemoryAllocationSize
-
-instance Storable PhysicalDeviceMaintenance3Properties where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceMaintenance3Properties where
-  zero = PhysicalDeviceMaintenance3Properties
-           zero
-           zero
-
-
--- | VkDescriptorSetLayoutSupport - Structure returning information about
--- whether a descriptor set layout can be supported
---
--- = Description
---
--- @supported@ is set to 'Graphics.Vulkan.Core10.BaseType.TRUE' if the
--- descriptor set /can/ be created, or else is set to
--- 'Graphics.Vulkan.Core10.BaseType.FALSE'.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountLayoutSupport'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getDescriptorSetLayoutSupport',
--- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance3.getDescriptorSetLayoutSupportKHR'
-data DescriptorSetLayoutSupport (es :: [Type]) = DescriptorSetLayoutSupport
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @supported@ specifies whether the descriptor set layout /can/ be
-    -- created.
-    supported :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (DescriptorSetLayoutSupport es)
-
-instance Extensible DescriptorSetLayoutSupport where
-  extensibleType = STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT
-  setNext x next = x{next = next}
-  getNext DescriptorSetLayoutSupport{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DescriptorSetLayoutSupport e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DescriptorSetVariableDescriptorCountLayoutSupport = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (DescriptorSetLayoutSupport es) where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorSetLayoutSupport{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (supported))
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance PeekChain es => FromCStruct (DescriptorSetLayoutSupport es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    supported <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ DescriptorSetLayoutSupport
-             next (bool32ToBool supported)
-
-instance es ~ '[] => Zero (DescriptorSetLayoutSupport es) where
-  zero = DescriptorSetLayoutSupport
-           ()
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs-boot
+++ /dev/null
@@ -1,27 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3  ( DescriptorSetLayoutSupport
-                                                                 , PhysicalDeviceMaintenance3Properties
-                                                                 ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role DescriptorSetLayoutSupport nominal
-data DescriptorSetLayoutSupport (es :: [Type])
-
-instance PokeChain es => ToCStruct (DescriptorSetLayoutSupport es)
-instance Show (Chain es) => Show (DescriptorSetLayoutSupport es)
-
-instance PeekChain es => FromCStruct (DescriptorSetLayoutSupport es)
-
-
-data PhysicalDeviceMaintenance3Properties
-
-instance ToCStruct PhysicalDeviceMaintenance3Properties
-instance Show PhysicalDeviceMaintenance3Properties
-
-instance FromCStruct PhysicalDeviceMaintenance3Properties
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs
+++ /dev/null
@@ -1,402 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview  ( PhysicalDeviceMultiviewFeatures(..)
-                                                              , PhysicalDeviceMultiviewProperties(..)
-                                                              , RenderPassMultiviewCreateInfo(..)
-                                                              , StructureType(..)
-                                                              , DependencyFlagBits(..)
-                                                              , DependencyFlags
-                                                              ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceMultiviewFeatures - Structure describing multiview
--- features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceMultiviewFeatures' structure describe
--- the following features:
---
--- = Description
---
--- -   @multiview@ specifies whether the implementation supports multiview
---     rendering within a render pass. If this feature is not enabled, the
---     view mask of each subpass /must/ always be zero.
---
--- -   @multiviewGeometryShader@ specifies whether the implementation
---     supports multiview rendering within a render pass, with
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry geometry shaders>.
---     If this feature is not enabled, then a pipeline compiled against a
---     subpass with a non-zero view mask /must/ not include a geometry
---     shader.
---
--- -   @multiviewTessellationShader@ specifies whether the implementation
---     supports multiview rendering within a render pass, with
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation tessellation shaders>.
---     If this feature is not enabled, then a pipeline compiled against a
---     subpass with a non-zero view mask /must/ not include any
---     tessellation shaders.
---
--- If the 'PhysicalDeviceMultiviewFeatures' structure is included in the
--- @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceMultiviewFeatures' /can/ also be included in the @pNext@
--- chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the
--- features.
---
--- == Valid Usage
---
--- -   If @multiviewGeometryShader@ is enabled then @multiview@ /must/ also
---     be enabled
---
--- -   If @multiviewTessellationShader@ is enabled then @multiview@ /must/
---     also be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceMultiviewFeatures = PhysicalDeviceMultiviewFeatures
-  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "multiview"
-    multiview :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "multiviewGeometryShader"
-    multiviewGeometryShader :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "multiviewTessellationShader"
-    multiviewTessellationShader :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceMultiviewFeatures
-
-instance ToCStruct PhysicalDeviceMultiviewFeatures where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceMultiviewFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (multiview))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (multiviewGeometryShader))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (multiviewTessellationShader))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceMultiviewFeatures where
-  peekCStruct p = do
-    multiview <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    multiviewGeometryShader <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    multiviewTessellationShader <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    pure $ PhysicalDeviceMultiviewFeatures
-             (bool32ToBool multiview) (bool32ToBool multiviewGeometryShader) (bool32ToBool multiviewTessellationShader)
-
-instance Storable PhysicalDeviceMultiviewFeatures where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceMultiviewFeatures where
-  zero = PhysicalDeviceMultiviewFeatures
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceMultiviewProperties - Structure describing multiview
--- limits that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceMultiviewProperties' structure
--- describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceMultiviewProperties' structure is included in the
--- @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceMultiviewProperties = PhysicalDeviceMultiviewProperties
-  { -- | @maxMultiviewViewCount@ is one greater than the maximum view index that
-    -- /can/ be used in a subpass.
-    maxMultiviewViewCount :: Word32
-  , -- | @maxMultiviewInstanceIndex@ is the maximum valid value of instance index
-    -- allowed to be generated by a drawing command recorded within a subpass
-    -- of a multiview render pass instance.
-    maxMultiviewInstanceIndex :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceMultiviewProperties
-
-instance ToCStruct PhysicalDeviceMultiviewProperties where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceMultiviewProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxMultiviewViewCount)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxMultiviewInstanceIndex)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceMultiviewProperties where
-  peekCStruct p = do
-    maxMultiviewViewCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxMultiviewInstanceIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pure $ PhysicalDeviceMultiviewProperties
-             maxMultiviewViewCount maxMultiviewInstanceIndex
-
-instance Storable PhysicalDeviceMultiviewProperties where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceMultiviewProperties where
-  zero = PhysicalDeviceMultiviewProperties
-           zero
-           zero
-
-
--- | VkRenderPassMultiviewCreateInfo - Structure containing multiview info
--- for all subpasses
---
--- = Description
---
--- When a subpass uses a non-zero view mask, /multiview/ functionality is
--- considered to be enabled. Multiview is all-or-nothing for a render pass
--- - that is, either all subpasses /must/ have a non-zero view mask (though
--- some subpasses /may/ have only one view) or all /must/ be zero.
--- Multiview causes all drawing and clear commands in the subpass to behave
--- as if they were broadcast to each view, where a view is represented by
--- one layer of the framebuffer attachments. All draws and clears are
--- broadcast to each /view index/ whose bit is set in the view mask. The
--- view index is provided in the @ViewIndex@ shader input variable, and
--- color, depth\/stencil, and input attachments all read\/write the layer
--- of the framebuffer corresponding to the view index.
---
--- If the view mask is zero for all subpasses, multiview is considered to
--- be disabled and all drawing commands execute normally, without this
--- additional broadcasting.
---
--- Some implementations /may/ not support multiview in conjunction with
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiview-gs geometry shaders>
--- or
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiview-tess tessellation shaders>.
---
--- When multiview is enabled, the
--- 'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
--- bit in a dependency /can/ be used to express a view-local dependency,
--- meaning that each view in the destination subpass depends on a single
--- view in the source subpass. Unlike pipeline barriers, a subpass
--- dependency /can/ potentially have a different view mask in the source
--- subpass and the destination subpass. If the dependency is view-local,
--- then each view (dstView) in the destination subpass depends on the view
--- dstView + @pViewOffsets@[dependency] in the source subpass. If there is
--- not such a view in the source subpass, then this dependency does not
--- affect that view in the destination subpass. If the dependency is not
--- view-local, then all views in the destination subpass depend on all
--- views in the source subpass, and the view offset is ignored. A non-zero
--- view offset is not allowed in a self-dependency.
---
--- The elements of @pCorrelationMasks@ are a set of masks of views
--- indicating that views in the same mask /may/ exhibit spatial coherency
--- between the views, making it more efficient to render them concurrently.
--- Correlation masks /must/ not have a functional effect on the results of
--- the multiview rendering.
---
--- When multiview is enabled, at the beginning of each subpass all
--- non-render pass state is undefined. In particular, each time
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass' or
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdNextSubpass' is called
--- the graphics pipeline /must/ be bound, any relevant descriptor sets or
--- vertex\/index buffers /must/ be bound, and any relevant dynamic state or
--- push constants /must/ be set before they are used.
---
--- A multiview subpass /can/ declare that its shaders will write per-view
--- attributes for all views in a single invocation, by setting the
--- 'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX'
--- bit in the subpass description. The only supported per-view attributes
--- are position and viewport mask, and per-view position and viewport masks
--- are written to output array variables decorated with @PositionPerViewNV@
--- and @ViewportMaskPerViewNV@, respectively. If @VK_NV_viewport_array2@ is
--- not supported and enabled, @ViewportMaskPerViewNV@ /must/ not be used.
--- Values written to elements of @PositionPerViewNV@ and
--- @ViewportMaskPerViewNV@ /must/ not depend on the @ViewIndex@. The shader
--- /must/ also write to an output variable decorated with @Position@, and
--- the value written to @Position@ /must/ equal the value written to
--- @PositionPerViewNV@[@ViewIndex@]. Similarly, if @ViewportMaskPerViewNV@
--- is written to then the shader /must/ also write to an output variable
--- decorated with @ViewportMaskNV@, and the value written to
--- @ViewportMaskNV@ /must/ equal the value written to
--- @ViewportMaskPerViewNV@[@ViewIndex@]. Implementations will either use
--- values taken from @Position@ and @ViewportMaskNV@ and invoke the shader
--- once for each view, or will use values taken from @PositionPerViewNV@
--- and @ViewportMaskPerViewNV@ and invoke the shader fewer times. The
--- values written to @Position@ and @ViewportMaskNV@ /must/ not depend on
--- the values written to @PositionPerViewNV@ and @ViewportMaskPerViewNV@,
--- or vice versa (to allow compilers to eliminate the unused outputs). All
--- attributes that do not have @*PerViewNV@ counterparts /must/ not depend
--- on @ViewIndex@.
---
--- Per-view attributes are all-or-nothing for a subpass. That is, all
--- pipelines compiled against a subpass that includes the
--- 'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX'
--- bit /must/ write per-view attributes to the @*PerViewNV[]@ shader
--- outputs, in addition to the non-per-view (e.g. @Position@) outputs.
--- Pipelines compiled against a subpass that does not include this bit
--- /must/ not include the @*PerViewNV[]@ outputs in their interfaces.
---
--- == Valid Usage
---
--- -   Each view index /must/ not be set in more than one element of
---     @pCorrelationMasks@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO'
---
--- -   If @subpassCount@ is not @0@, @pViewMasks@ /must/ be a valid pointer
---     to an array of @subpassCount@ @uint32_t@ values
---
--- -   If @dependencyCount@ is not @0@, @pViewOffsets@ /must/ be a valid
---     pointer to an array of @dependencyCount@ @int32_t@ values
---
--- -   If @correlationMaskCount@ is not @0@, @pCorrelationMasks@ /must/ be
---     a valid pointer to an array of @correlationMaskCount@ @uint32_t@
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data RenderPassMultiviewCreateInfo = RenderPassMultiviewCreateInfo
-  { -- | @pViewMasks@ is a pointer to an array of @subpassCount@ view masks,
-    -- where each mask is a bitfield of view indices describing which views
-    -- rendering is broadcast to in each subpass, when multiview is enabled. If
-    -- @subpassCount@ is zero, each view mask is treated as zero.
-    viewMasks :: Vector Word32
-  , -- | @pViewOffsets@ is a pointer to an array of @dependencyCount@ view
-    -- offsets, one for each dependency. If @dependencyCount@ is zero, each
-    -- dependency’s view offset is treated as zero. Each view offset controls
-    -- which views in the source subpass the views in the destination subpass
-    -- depend on.
-    viewOffsets :: Vector Int32
-  , -- | @pCorrelationMasks@ is a pointer to an array of @correlationMaskCount@
-    -- view masks indicating sets of views that /may/ be more efficient to
-    -- render concurrently.
-    correlationMasks :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show RenderPassMultiviewCreateInfo
-
-instance ToCStruct RenderPassMultiviewCreateInfo where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RenderPassMultiviewCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (viewMasks)) :: Word32))
-    pPViewMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (viewMasks)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (viewMasks)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPViewMasks')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (viewOffsets)) :: Word32))
-    pPViewOffsets' <- ContT $ allocaBytesAligned @Int32 ((Data.Vector.length (viewOffsets)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewOffsets' `plusPtr` (4 * (i)) :: Ptr Int32) (e)) (viewOffsets)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Int32))) (pPViewOffsets')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (correlationMasks)) :: Word32))
-    pPCorrelationMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (correlationMasks)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPCorrelationMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (correlationMasks)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Word32))) (pPCorrelationMasks')
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPViewMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPViewMasks')
-    pPViewOffsets' <- ContT $ allocaBytesAligned @Int32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewOffsets' `plusPtr` (4 * (i)) :: Ptr Int32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Int32))) (pPViewOffsets')
-    pPCorrelationMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPCorrelationMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Word32))) (pPCorrelationMasks')
-    lift $ f
-
-instance FromCStruct RenderPassMultiviewCreateInfo where
-  peekCStruct p = do
-    subpassCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pViewMasks <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
-    pViewMasks' <- generateM (fromIntegral subpassCount) (\i -> peek @Word32 ((pViewMasks `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    dependencyCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pViewOffsets <- peek @(Ptr Int32) ((p `plusPtr` 40 :: Ptr (Ptr Int32)))
-    pViewOffsets' <- generateM (fromIntegral dependencyCount) (\i -> peek @Int32 ((pViewOffsets `advancePtrBytes` (4 * (i)) :: Ptr Int32)))
-    correlationMaskCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pCorrelationMasks <- peek @(Ptr Word32) ((p `plusPtr` 56 :: Ptr (Ptr Word32)))
-    pCorrelationMasks' <- generateM (fromIntegral correlationMaskCount) (\i -> peek @Word32 ((pCorrelationMasks `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ RenderPassMultiviewCreateInfo
-             pViewMasks' pViewOffsets' pCorrelationMasks'
-
-instance Zero RenderPassMultiviewCreateInfo where
-  zero = RenderPassMultiviewCreateInfo
-           mempty
-           mempty
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview  ( PhysicalDeviceMultiviewFeatures
-                                                              , PhysicalDeviceMultiviewProperties
-                                                              , RenderPassMultiviewCreateInfo
-                                                              ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceMultiviewFeatures
-
-instance ToCStruct PhysicalDeviceMultiviewFeatures
-instance Show PhysicalDeviceMultiviewFeatures
-
-instance FromCStruct PhysicalDeviceMultiviewFeatures
-
-
-data PhysicalDeviceMultiviewProperties
-
-instance ToCStruct PhysicalDeviceMultiviewProperties
-instance Show PhysicalDeviceMultiviewProperties
-
-instance FromCStruct PhysicalDeviceMultiviewProperties
-
-
-data RenderPassMultiviewCreateInfo
-
-instance ToCStruct RenderPassMultiviewCreateInfo
-instance Show RenderPassMultiviewCreateInfo
-
-instance FromCStruct RenderPassMultiviewCreateInfo
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs
+++ /dev/null
@@ -1,849 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion  ( createSamplerYcbcrConversion
-                                                                             , withSamplerYcbcrConversion
-                                                                             , destroySamplerYcbcrConversion
-                                                                             , SamplerYcbcrConversionInfo(..)
-                                                                             , SamplerYcbcrConversionCreateInfo(..)
-                                                                             , BindImagePlaneMemoryInfo(..)
-                                                                             , ImagePlaneMemoryRequirementsInfo(..)
-                                                                             , PhysicalDeviceSamplerYcbcrConversionFeatures(..)
-                                                                             , SamplerYcbcrConversionImageFormatProperties(..)
-                                                                             , SamplerYcbcrConversion(..)
-                                                                             , Format(..)
-                                                                             , StructureType(..)
-                                                                             , ObjectType(..)
-                                                                             , ImageCreateFlagBits(..)
-                                                                             , ImageCreateFlags
-                                                                             , FormatFeatureFlagBits(..)
-                                                                             , FormatFeatureFlags
-                                                                             , ImageAspectFlagBits(..)
-                                                                             , ImageAspectFlags
-                                                                             , SamplerYcbcrModelConversion(..)
-                                                                             , SamplerYcbcrRange(..)
-                                                                             , ChromaLocation(..)
-                                                                             ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core11.Enums.ChromaLocation (ChromaLocation)
-import Graphics.Vulkan.Core10.ImageView (ComponentMapping)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateSamplerYcbcrConversion))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroySamplerYcbcrConversion))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (ExternalFormatANDROID)
-import Graphics.Vulkan.Core10.Enums.Filter (Filter)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core11.Handles (SamplerYcbcrConversion)
-import Graphics.Vulkan.Core11.Handles (SamplerYcbcrConversion(..))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion)
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Core11.Enums.ChromaLocation (ChromaLocation(..))
-import Graphics.Vulkan.Core10.Enums.Format (Format(..))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ObjectType (ObjectType(..))
-import Graphics.Vulkan.Core11.Handles (SamplerYcbcrConversion(..))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(..))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateSamplerYcbcrConversion
-  :: FunPtr (Ptr Device_T -> Ptr (SamplerYcbcrConversionCreateInfo a) -> Ptr AllocationCallbacks -> Ptr SamplerYcbcrConversion -> IO Result) -> Ptr Device_T -> Ptr (SamplerYcbcrConversionCreateInfo a) -> Ptr AllocationCallbacks -> Ptr SamplerYcbcrConversion -> IO Result
-
--- | vkCreateSamplerYcbcrConversion - Create a new Y′CBCR conversion
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the sampler Y′CBCR
---     conversion.
---
--- -   @pCreateInfo@ is a pointer to a 'SamplerYcbcrConversionCreateInfo'
---     structure specifying the requested sampler Y′CBCR conversion.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pYcbcrConversion@ is a pointer to a
---     'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion' handle in
---     which the resulting sampler Y′CBCR conversion is returned.
---
--- = Description
---
--- The interpretation of the configured sampler Y′CBCR conversion is
--- described in more detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion the description of sampler Y′CBCR conversion>
--- in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations>
--- chapter.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sampler-YCbCr-conversion sampler Y′CBCR conversion feature>
---     /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'SamplerYcbcrConversionCreateInfo' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pYcbcrConversion@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion',
--- 'SamplerYcbcrConversionCreateInfo'
-createSamplerYcbcrConversion :: forall a io . (PokeChain a, MonadIO io) => Device -> SamplerYcbcrConversionCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SamplerYcbcrConversion)
-createSamplerYcbcrConversion device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateSamplerYcbcrConversion' = mkVkCreateSamplerYcbcrConversion (pVkCreateSamplerYcbcrConversion (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPYcbcrConversion <- ContT $ bracket (callocBytes @SamplerYcbcrConversion 8) free
-  r <- lift $ vkCreateSamplerYcbcrConversion' (deviceHandle (device)) pCreateInfo pAllocator (pPYcbcrConversion)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pYcbcrConversion <- lift $ peek @SamplerYcbcrConversion pPYcbcrConversion
-  pure $ (pYcbcrConversion)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createSamplerYcbcrConversion' and 'destroySamplerYcbcrConversion'
---
--- To ensure that 'destroySamplerYcbcrConversion' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withSamplerYcbcrConversion :: forall a io r . (PokeChain a, MonadIO io) => (io (SamplerYcbcrConversion) -> ((SamplerYcbcrConversion) -> io ()) -> r) -> Device -> SamplerYcbcrConversionCreateInfo a -> Maybe AllocationCallbacks -> r
-withSamplerYcbcrConversion b device pCreateInfo pAllocator =
-  b (createSamplerYcbcrConversion device pCreateInfo pAllocator)
-    (\(o0) -> destroySamplerYcbcrConversion device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroySamplerYcbcrConversion
-  :: FunPtr (Ptr Device_T -> SamplerYcbcrConversion -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> SamplerYcbcrConversion -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroySamplerYcbcrConversion - Destroy a created Y′CBCR conversion
---
--- = Parameters
---
--- -   @device@ is the logical device that destroys the Y′CBCR conversion.
---
--- -   @ycbcrConversion@ is the conversion to destroy.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @ycbcrConversion@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @ycbcrConversion@
---     /must/ be a valid
---     'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   If @ycbcrConversion@ is a valid handle, it /must/ have been created,
---     allocated, or retrieved from @device@
---
--- == Host Synchronization
---
--- -   Host access to @ycbcrConversion@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion'
-destroySamplerYcbcrConversion :: forall io . MonadIO io => Device -> SamplerYcbcrConversion -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroySamplerYcbcrConversion device ycbcrConversion allocator = liftIO . evalContT $ do
-  let vkDestroySamplerYcbcrConversion' = mkVkDestroySamplerYcbcrConversion (pVkDestroySamplerYcbcrConversion (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroySamplerYcbcrConversion' (deviceHandle (device)) (ycbcrConversion) pAllocator
-  pure $ ()
-
-
--- | VkSamplerYcbcrConversionInfo - Structure specifying Y′CBCR conversion to
--- a sampler or image view
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SamplerYcbcrConversionInfo = SamplerYcbcrConversionInfo
-  { -- | @conversion@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core11.Handles.SamplerYcbcrConversion' handle
-    conversion :: SamplerYcbcrConversion }
-  deriving (Typeable)
-deriving instance Show SamplerYcbcrConversionInfo
-
-instance ToCStruct SamplerYcbcrConversionInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SamplerYcbcrConversionInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SamplerYcbcrConversion)) (conversion)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SamplerYcbcrConversion)) (zero)
-    f
-
-instance FromCStruct SamplerYcbcrConversionInfo where
-  peekCStruct p = do
-    conversion <- peek @SamplerYcbcrConversion ((p `plusPtr` 16 :: Ptr SamplerYcbcrConversion))
-    pure $ SamplerYcbcrConversionInfo
-             conversion
-
-instance Storable SamplerYcbcrConversionInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SamplerYcbcrConversionInfo where
-  zero = SamplerYcbcrConversionInfo
-           zero
-
-
--- | VkSamplerYcbcrConversionCreateInfo - Structure specifying the parameters
--- of the newly created conversion
---
--- = Description
---
--- Note
---
--- Setting @forceExplicitReconstruction@ to
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' /may/ have a performance penalty
--- on implementations where explicit reconstruction is not the default mode
--- of operation.
---
--- If @format@ supports
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT'
--- the @forceExplicitReconstruction@ value behaves as if it was set to
--- 'Graphics.Vulkan.Core10.BaseType.TRUE'.
---
--- If the @pNext@ chain includes a
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
--- structure with non-zero @externalFormat@ member, the sampler Y′CBCR
--- conversion object represents an /external format conversion/, and
--- @format@ /must/ be
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'. Such conversions
--- /must/ only be used to sample image views with a matching
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>.
--- When creating an external format conversion, the value of @components@
--- is ignored.
---
--- == Valid Usage
---
--- -   If an external format conversion is being created, @format@ /must/
---     be 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', otherwise
---     it /must/ not be
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
---     /must/ support
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
---     do not support
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT',
---     @xChromaOffset@ and @yChromaOffset@ /must/ not be
---     'Graphics.Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
---     do not support
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT',
---     @xChromaOffset@ and @yChromaOffset@ /must/ not be
---     'Graphics.Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'
---
--- -   If the format has a @_422@ or @_420@ suffix, then @components.g@
---     /must/ be
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
---
--- -   If the format has a @_422@ or @_420@ suffix, then @components.a@
---     /must/ be
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY',
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_ONE',
---     or
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_ZERO'
---
--- -   If the format has a @_422@ or @_420@ suffix, then @components.r@
---     /must/ be
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_B'
---
--- -   If the format has a @_422@ or @_420@ suffix, then @components.b@
---     /must/ be
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_R'
---
--- -   If the format has a @_422@ or @_420@ suffix, and if either
---     @components.r@ or @components.b@ is
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY',
---     both values /must/ be
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
---
--- -   If @ycbcrModel@ is not
---     'Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY',
---     then @components.r@, @components.g@, and @components.b@ /must/
---     correspond to channels of the @format@; that is, @components.r@,
---     @components.g@, and @components.b@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_ZERO'
---     or
---     'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_ONE',
---     and /must/ not correspond to a channel which contains zero or one as
---     a consequence of
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-conversion-to-rgba conversion to RGBA>
---
--- -   If @ycbcrRange@ is
---     'Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange.SAMPLER_YCBCR_RANGE_ITU_NARROW'
---     then the R, G and B channels obtained by applying the @component@
---     swizzle to @format@ /must/ each have a bit-depth greater than or
---     equal to 8
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
---     do not support
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'
---     @forceExplicitReconstruction@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
---     do not support
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT',
---     @chromaFilter@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @format@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- -   @ycbcrModel@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SamplerYcbcrModelConversion'
---     value
---
--- -   @ycbcrRange@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange.SamplerYcbcrRange'
---     value
---
--- -   @components@ /must/ be a valid
---     'Graphics.Vulkan.Core10.ImageView.ComponentMapping' structure
---
--- -   @xChromaOffset@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ChromaLocation.ChromaLocation' value
---
--- -   @yChromaOffset@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ChromaLocation.ChromaLocation' value
---
--- -   @chromaFilter@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Filter.Filter' value
---
--- If @chromaFilter@ is
--- 'Graphics.Vulkan.Core10.Enums.Filter.FILTER_NEAREST', chroma samples are
--- reconstructed to luma channel resolution using nearest-neighbour
--- sampling. Otherwise, chroma samples are reconstructed using
--- interpolation. More details can be found in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion the description of sampler Y′CBCR conversion>
--- in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations>
--- chapter.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core11.Enums.ChromaLocation.ChromaLocation',
--- 'Graphics.Vulkan.Core10.ImageView.ComponentMapping',
--- 'Graphics.Vulkan.Core10.Enums.Filter.Filter',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SamplerYcbcrModelConversion',
--- 'Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange.SamplerYcbcrRange',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createSamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversionKHR'
-data SamplerYcbcrConversionCreateInfo (es :: [Type]) = SamplerYcbcrConversionCreateInfo
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @format@ is the format of the image from which color information will be
-    -- retrieved.
-    format :: Format
-  , -- | @ycbcrModel@ describes the color matrix for conversion between color
-    -- models.
-    ycbcrModel :: SamplerYcbcrModelConversion
-  , -- | @ycbcrRange@ describes whether the encoded values have headroom and foot
-    -- room, or whether the encoding uses the full numerical range.
-    ycbcrRange :: SamplerYcbcrRange
-  , -- | @components@ applies a /swizzle/ based on
-    -- 'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' enums
-    -- prior to range expansion and color model conversion.
-    components :: ComponentMapping
-  , -- | @xChromaOffset@ describes the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction sample location>
-    -- associated with downsampled chroma channels in the x dimension.
-    -- @xChromaOffset@ has no effect for formats in which chroma channels are
-    -- the same resolution as the luma channel.
-    xChromaOffset :: ChromaLocation
-  , -- | @yChromaOffset@ describes the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction sample location>
-    -- associated with downsampled chroma channels in the y dimension.
-    -- @yChromaOffset@ has no effect for formats in which the chroma channels
-    -- are not downsampled vertically.
-    yChromaOffset :: ChromaLocation
-  , -- | @chromaFilter@ is the filter for chroma reconstruction.
-    chromaFilter :: Filter
-  , -- | @forceExplicitReconstruction@ /can/ be used to ensure that
-    -- reconstruction is done explicitly, if supported.
-    forceExplicitReconstruction :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (SamplerYcbcrConversionCreateInfo es)
-
-instance Extensible SamplerYcbcrConversionCreateInfo where
-  extensibleType = STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO
-  setNext x next = x{next = next}
-  getNext SamplerYcbcrConversionCreateInfo{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SamplerYcbcrConversionCreateInfo e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @ExternalFormatANDROID = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (SamplerYcbcrConversionCreateInfo es) where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SamplerYcbcrConversionCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (format)
-    lift $ poke ((p `plusPtr` 20 :: Ptr SamplerYcbcrModelConversion)) (ycbcrModel)
-    lift $ poke ((p `plusPtr` 24 :: Ptr SamplerYcbcrRange)) (ycbcrRange)
-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ComponentMapping)) (components) . ($ ())
-    lift $ poke ((p `plusPtr` 44 :: Ptr ChromaLocation)) (xChromaOffset)
-    lift $ poke ((p `plusPtr` 48 :: Ptr ChromaLocation)) (yChromaOffset)
-    lift $ poke ((p `plusPtr` 52 :: Ptr Filter)) (chromaFilter)
-    lift $ poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (forceExplicitReconstruction))
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
-    lift $ poke ((p `plusPtr` 20 :: Ptr SamplerYcbcrModelConversion)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr SamplerYcbcrRange)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ComponentMapping)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 44 :: Ptr ChromaLocation)) (zero)
-    lift $ poke ((p `plusPtr` 48 :: Ptr ChromaLocation)) (zero)
-    lift $ poke ((p `plusPtr` 52 :: Ptr Filter)) (zero)
-    lift $ poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance PeekChain es => FromCStruct (SamplerYcbcrConversionCreateInfo es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    format <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
-    ycbcrModel <- peek @SamplerYcbcrModelConversion ((p `plusPtr` 20 :: Ptr SamplerYcbcrModelConversion))
-    ycbcrRange <- peek @SamplerYcbcrRange ((p `plusPtr` 24 :: Ptr SamplerYcbcrRange))
-    components <- peekCStruct @ComponentMapping ((p `plusPtr` 28 :: Ptr ComponentMapping))
-    xChromaOffset <- peek @ChromaLocation ((p `plusPtr` 44 :: Ptr ChromaLocation))
-    yChromaOffset <- peek @ChromaLocation ((p `plusPtr` 48 :: Ptr ChromaLocation))
-    chromaFilter <- peek @Filter ((p `plusPtr` 52 :: Ptr Filter))
-    forceExplicitReconstruction <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
-    pure $ SamplerYcbcrConversionCreateInfo
-             next format ycbcrModel ycbcrRange components xChromaOffset yChromaOffset chromaFilter (bool32ToBool forceExplicitReconstruction)
-
-instance es ~ '[] => Zero (SamplerYcbcrConversionCreateInfo es) where
-  zero = SamplerYcbcrConversionCreateInfo
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkBindImagePlaneMemoryInfo - Structure specifying how to bind an image
--- plane to memory
---
--- == Valid Usage
---
--- -   If the image’s @tiling@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL',
---     then @planeAspect@ /must/ be a single valid /format plane/ for the
---     image (that is, for a two-plane image @planeAspect@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
---     and for a three-plane image @planeAspect@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT')
---
--- -   If the image’s @tiling@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---     then @planeAspect@ /must/ be a single valid /memory plane/ for the
---     image (that is, @aspectMask@ /must/ specify a plane index that is
---     less than the
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
---     associated with the image’s @format@ and
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierPropertiesEXT'::@drmFormatModifier@)
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO'
---
--- -   @planeAspect@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data BindImagePlaneMemoryInfo = BindImagePlaneMemoryInfo
-  { -- | @planeAspect@ is the aspect of the disjoint image plane to bind.
-    planeAspect :: ImageAspectFlagBits }
-  deriving (Typeable)
-deriving instance Show BindImagePlaneMemoryInfo
-
-instance ToCStruct BindImagePlaneMemoryInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindImagePlaneMemoryInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits)) (planeAspect)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits)) (zero)
-    f
-
-instance FromCStruct BindImagePlaneMemoryInfo where
-  peekCStruct p = do
-    planeAspect <- peek @ImageAspectFlagBits ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits))
-    pure $ BindImagePlaneMemoryInfo
-             planeAspect
-
-instance Storable BindImagePlaneMemoryInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BindImagePlaneMemoryInfo where
-  zero = BindImagePlaneMemoryInfo
-           zero
-
-
--- | VkImagePlaneMemoryRequirementsInfo - Structure specifying image plane
--- for memory requirements
---
--- == Valid Usage
---
--- -   If the image’s @tiling@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL',
---     then @planeAspect@ /must/ be a single valid /format plane/ for the
---     image (that is, for a two-plane image @planeAspect@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
---     and for a three-plane image @planeAspect@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT')
---
--- -   If the image’s @tiling@ is
---     'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
---     then @planeAspect@ /must/ be a single valid /memory plane/ for the
---     image (that is, @aspectMask@ /must/ specify a plane index that is
---     less than the
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
---     associated with the image’s @format@ and
---     'Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierPropertiesEXT'::@drmFormatModifier@)
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO'
---
--- -   @planeAspect@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImagePlaneMemoryRequirementsInfo = ImagePlaneMemoryRequirementsInfo
-  { -- | @planeAspect@ is the aspect corresponding to the image plane to query.
-    planeAspect :: ImageAspectFlagBits }
-  deriving (Typeable)
-deriving instance Show ImagePlaneMemoryRequirementsInfo
-
-instance ToCStruct ImagePlaneMemoryRequirementsInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImagePlaneMemoryRequirementsInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits)) (planeAspect)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits)) (zero)
-    f
-
-instance FromCStruct ImagePlaneMemoryRequirementsInfo where
-  peekCStruct p = do
-    planeAspect <- peek @ImageAspectFlagBits ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits))
-    pure $ ImagePlaneMemoryRequirementsInfo
-             planeAspect
-
-instance Storable ImagePlaneMemoryRequirementsInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImagePlaneMemoryRequirementsInfo where
-  zero = ImagePlaneMemoryRequirementsInfo
-           zero
-
-
--- | VkPhysicalDeviceSamplerYcbcrConversionFeatures - Structure describing
--- Y’CbCr conversion features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceSamplerYcbcrConversionFeatures'
--- structure describe the following feature:
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceSamplerYcbcrConversionFeatures = PhysicalDeviceSamplerYcbcrConversionFeatures
-  { -- | @samplerYcbcrConversion@ specifies whether the implementation supports
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
-    -- If @samplerYcbcrConversion@ is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- sampler Y′CBCR conversion is not supported, and samplers using sampler
-    -- Y′CBCR conversion /must/ not be used.
-    samplerYcbcrConversion :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceSamplerYcbcrConversionFeatures
-
-instance ToCStruct PhysicalDeviceSamplerYcbcrConversionFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceSamplerYcbcrConversionFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (samplerYcbcrConversion))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceSamplerYcbcrConversionFeatures where
-  peekCStruct p = do
-    samplerYcbcrConversion <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceSamplerYcbcrConversionFeatures
-             (bool32ToBool samplerYcbcrConversion)
-
-instance Storable PhysicalDeviceSamplerYcbcrConversionFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceSamplerYcbcrConversionFeatures where
-  zero = PhysicalDeviceSamplerYcbcrConversionFeatures
-           zero
-
-
--- | VkSamplerYcbcrConversionImageFormatProperties - Structure specifying
--- combined image sampler descriptor count for multi-planar images
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SamplerYcbcrConversionImageFormatProperties = SamplerYcbcrConversionImageFormatProperties
-  { -- | @combinedImageSamplerDescriptorCount@ is the number of combined image
-    -- sampler descriptors that the implementation uses to access the format.
-    combinedImageSamplerDescriptorCount :: Word32 }
-  deriving (Typeable)
-deriving instance Show SamplerYcbcrConversionImageFormatProperties
-
-instance ToCStruct SamplerYcbcrConversionImageFormatProperties where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SamplerYcbcrConversionImageFormatProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (combinedImageSamplerDescriptorCount)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct SamplerYcbcrConversionImageFormatProperties where
-  peekCStruct p = do
-    combinedImageSamplerDescriptorCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ SamplerYcbcrConversionImageFormatProperties
-             combinedImageSamplerDescriptorCount
-
-instance Storable SamplerYcbcrConversionImageFormatProperties where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SamplerYcbcrConversionImageFormatProperties where
-  zero = SamplerYcbcrConversionImageFormatProperties
-           zero
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs-boot
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion  ( BindImagePlaneMemoryInfo
-                                                                             , ImagePlaneMemoryRequirementsInfo
-                                                                             , PhysicalDeviceSamplerYcbcrConversionFeatures
-                                                                             , SamplerYcbcrConversionCreateInfo
-                                                                             , SamplerYcbcrConversionImageFormatProperties
-                                                                             , SamplerYcbcrConversionInfo
-                                                                             ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data BindImagePlaneMemoryInfo
-
-instance ToCStruct BindImagePlaneMemoryInfo
-instance Show BindImagePlaneMemoryInfo
-
-instance FromCStruct BindImagePlaneMemoryInfo
-
-
-data ImagePlaneMemoryRequirementsInfo
-
-instance ToCStruct ImagePlaneMemoryRequirementsInfo
-instance Show ImagePlaneMemoryRequirementsInfo
-
-instance FromCStruct ImagePlaneMemoryRequirementsInfo
-
-
-data PhysicalDeviceSamplerYcbcrConversionFeatures
-
-instance ToCStruct PhysicalDeviceSamplerYcbcrConversionFeatures
-instance Show PhysicalDeviceSamplerYcbcrConversionFeatures
-
-instance FromCStruct PhysicalDeviceSamplerYcbcrConversionFeatures
-
-
-type role SamplerYcbcrConversionCreateInfo nominal
-data SamplerYcbcrConversionCreateInfo (es :: [Type])
-
-instance PokeChain es => ToCStruct (SamplerYcbcrConversionCreateInfo es)
-instance Show (Chain es) => Show (SamplerYcbcrConversionCreateInfo es)
-
-instance PeekChain es => FromCStruct (SamplerYcbcrConversionCreateInfo es)
-
-
-data SamplerYcbcrConversionImageFormatProperties
-
-instance ToCStruct SamplerYcbcrConversionImageFormatProperties
-instance Show SamplerYcbcrConversionImageFormatProperties
-
-instance FromCStruct SamplerYcbcrConversionImageFormatProperties
-
-
-data SamplerYcbcrConversionInfo
-
-instance ToCStruct SamplerYcbcrConversionInfo
-instance Show SamplerYcbcrConversionInfo
-
-instance FromCStruct SamplerYcbcrConversionInfo
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs
+++ /dev/null
@@ -1,91 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES
-                                                                           , PhysicalDeviceShaderDrawParametersFeatures(..)
-                                                                           , PhysicalDeviceShaderDrawParameterFeatures
-                                                                           , StructureType(..)
-                                                                           ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES
-
-
--- | VkPhysicalDeviceShaderDrawParametersFeatures - Structure describing
--- shader draw parameter features that can be supported by an
--- implementation
---
--- = Description
---
--- If the 'PhysicalDeviceShaderDrawParametersFeatures' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with a value indicating whether the feature is supported.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderDrawParametersFeatures = PhysicalDeviceShaderDrawParametersFeatures
-  { -- | @shaderDrawParameters@ specifies whether shader draw parameters are
-    -- supported.
-    shaderDrawParameters :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderDrawParametersFeatures
-
-instance ToCStruct PhysicalDeviceShaderDrawParametersFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderDrawParametersFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderDrawParameters))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceShaderDrawParametersFeatures where
-  peekCStruct p = do
-    shaderDrawParameters <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceShaderDrawParametersFeatures
-             (bool32ToBool shaderDrawParameters)
-
-instance Storable PhysicalDeviceShaderDrawParametersFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderDrawParametersFeatures where
-  zero = PhysicalDeviceShaderDrawParametersFeatures
-           zero
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceShaderDrawParameterFeatures"
-type PhysicalDeviceShaderDrawParameterFeatures = PhysicalDeviceShaderDrawParametersFeatures
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters  (PhysicalDeviceShaderDrawParametersFeatures) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderDrawParametersFeatures
-
-instance ToCStruct PhysicalDeviceShaderDrawParametersFeatures
-instance Show PhysicalDeviceShaderDrawParametersFeatures
-
-instance FromCStruct PhysicalDeviceShaderDrawParametersFeatures
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs
+++ /dev/null
@@ -1,123 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES
-                                                                      , PhysicalDeviceVariablePointersFeatures(..)
-                                                                      , PhysicalDeviceVariablePointerFeatures
-                                                                      , StructureType(..)
-                                                                      ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES
-
-
--- | VkPhysicalDeviceVariablePointersFeatures - Structure describing variable
--- pointers features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceVariablePointersFeatures' structure
--- describe the following features:
---
--- = Description
---
--- -   @variablePointersStorageBuffer@ specifies whether the implementation
---     supports the SPIR-V @VariablePointersStorageBuffer@ capability. When
---     this feature is not enabled, shader modules /must/ not declare the
---     @SPV_KHR_variable_pointers@ extension or the
---     @VariablePointersStorageBuffer@ capability.
---
--- -   @variablePointers@ specifies whether the implementation supports the
---     SPIR-V @VariablePointers@ capability. When this feature is not
---     enabled, shader modules /must/ not declare the @VariablePointers@
---     capability.
---
--- If the 'PhysicalDeviceVariablePointersFeatures' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceVariablePointersFeatures' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable the features.
---
--- == Valid Usage
---
--- -   If @variablePointers@ is enabled then
---     @variablePointersStorageBuffer@ /must/ also be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceVariablePointersFeatures = PhysicalDeviceVariablePointersFeatures
-  { -- No documentation found for Nested "VkPhysicalDeviceVariablePointersFeatures" "variablePointersStorageBuffer"
-    variablePointersStorageBuffer :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointersFeatures" "variablePointers"
-    variablePointers :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceVariablePointersFeatures
-
-instance ToCStruct PhysicalDeviceVariablePointersFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceVariablePointersFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (variablePointersStorageBuffer))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (variablePointers))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceVariablePointersFeatures where
-  peekCStruct p = do
-    variablePointersStorageBuffer <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    variablePointers <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceVariablePointersFeatures
-             (bool32ToBool variablePointersStorageBuffer) (bool32ToBool variablePointers)
-
-instance Storable PhysicalDeviceVariablePointersFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceVariablePointersFeatures where
-  zero = PhysicalDeviceVariablePointersFeatures
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceVariablePointerFeatures"
-type PhysicalDeviceVariablePointerFeatures = PhysicalDeviceVariablePointersFeatures
-
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs-boot b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers  (PhysicalDeviceVariablePointersFeatures) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceVariablePointersFeatures
-
-instance ToCStruct PhysicalDeviceVariablePointersFeatures
-instance Show PhysicalDeviceVariablePointersFeatures
-
-instance FromCStruct PhysicalDeviceVariablePointersFeatures
-
diff --git a/src/Graphics/Vulkan/Core12.hs b/src/Graphics/Vulkan/Core12.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12.hs
+++ /dev/null
@@ -1,1745 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12  ( pattern API_VERSION_1_2
-                               , PhysicalDeviceVulkan11Features(..)
-                               , PhysicalDeviceVulkan11Properties(..)
-                               , PhysicalDeviceVulkan12Features(..)
-                               , PhysicalDeviceVulkan12Properties(..)
-                               , StructureType(..)
-                               , module Graphics.Vulkan.Core12.Enums
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout
-                               , module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model
-                               ) where
-import Graphics.Vulkan.Core12.Enums
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.ByteString (packCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Word (Word8)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct.Utils (peekByteStringFromSizedVectorPtr)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthByteString)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (ConformanceVersion)
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.APIConstants (LUID_SIZE)
-import Graphics.Vulkan.Core10.APIConstants (MAX_DRIVER_INFO_SIZE)
-import Graphics.Vulkan.Core10.APIConstants (MAX_DRIVER_NAME_SIZE)
-import Graphics.Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior)
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlags)
-import Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits (SubgroupFeatureFlags)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Core10.APIConstants (UUID_SIZE)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Version (pattern MAKE_VERSION)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-pattern API_VERSION_1_2 :: Word32
-pattern API_VERSION_1_2 = MAKE_VERSION 1 2 0
-
-
--- | VkPhysicalDeviceVulkan11Features - Structure describing the Vulkan 1.1
--- features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceVulkan11Features' structure describe
--- the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceVulkan11Features' structure is included in the
--- @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceVulkan11Features' /can/ also be used in the @pNext@ chain
--- of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the
--- features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceVulkan11Features = PhysicalDeviceVulkan11Features
-  { -- | @storageBuffer16BitAccess@ specifies whether objects in the
-    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the
-    -- @Block@ decoration /can/ have 16-bit integer and 16-bit floating-point
-    -- members. If this feature is not enabled, 16-bit integer or 16-bit
-    -- floating-point members /must/ not be used in such objects. This also
-    -- specifies whether shader modules /can/ declare the
-    -- @StorageBuffer16BitAccess@ capability.
-    storageBuffer16BitAccess :: Bool
-  , -- | @uniformAndStorageBuffer16BitAccess@ specifies whether objects in the
-    -- @Uniform@ storage class with the @Block@ decoration and in the
-    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the same
-    -- decoration /can/ have 16-bit integer and 16-bit floating-point members.
-    -- If this feature is not enabled, 16-bit integer or 16-bit floating-point
-    -- members /must/ not be used in such objects. This also specifies whether
-    -- shader modules /can/ declare the @UniformAndStorageBuffer16BitAccess@
-    -- capability.
-    uniformAndStorageBuffer16BitAccess :: Bool
-  , -- | @storagePushConstant16@ specifies whether objects in the @PushConstant@
-    -- storage class /can/ have 16-bit integer and 16-bit floating-point
-    -- members. If this feature is not enabled, 16-bit integer or
-    -- floating-point members /must/ not be used in such objects. This also
-    -- specifies whether shader modules /can/ declare the
-    -- @StoragePushConstant16@ capability.
-    storagePushConstant16 :: Bool
-  , -- | @storageInputOutput16@ specifies whether objects in the @Input@ and
-    -- @Output@ storage classes /can/ have 16-bit integer and 16-bit
-    -- floating-point members. If this feature is not enabled, 16-bit integer
-    -- or 16-bit floating-point members /must/ not be used in such objects.
-    -- This also specifies whether shader modules /can/ declare the
-    -- @StorageInputOutput16@ capability.
-    storageInputOutput16 :: Bool
-  , -- | @multiview@ specifies whether the implementation supports multiview
-    -- rendering within a render pass. If this feature is not enabled, the view
-    -- mask of each subpass /must/ always be zero.
-    multiview :: Bool
-  , -- | @multiviewGeometryShader@ specifies whether the implementation supports
-    -- multiview rendering within a render pass, with
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry geometry shaders>.
-    -- If this feature is not enabled, then a pipeline compiled against a
-    -- subpass with a non-zero view mask /must/ not include a geometry shader.
-    multiviewGeometryShader :: Bool
-  , -- | @multiviewTessellationShader@ specifies whether the implementation
-    -- supports multiview rendering within a render pass, with
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation tessellation shaders>.
-    -- If this feature is not enabled, then a pipeline compiled against a
-    -- subpass with a non-zero view mask /must/ not include any tessellation
-    -- shaders.
-    multiviewTessellationShader :: Bool
-  , -- | @variablePointersStorageBuffer@ specifies whether the implementation
-    -- supports the SPIR-V @VariablePointersStorageBuffer@ capability. When
-    -- this feature is not enabled, shader modules /must/ not declare the
-    -- @SPV_KHR_variable_pointers@ extension or the
-    -- @VariablePointersStorageBuffer@ capability.
-    variablePointersStorageBuffer :: Bool
-  , -- | @variablePointers@ specifies whether the implementation supports the
-    -- SPIR-V @VariablePointers@ capability. When this feature is not enabled,
-    -- shader modules /must/ not declare the @VariablePointers@ capability.
-    variablePointers :: Bool
-  , -- | @protectedMemory@ specifies whether protected memory is supported.
-    protectedMemory :: Bool
-  , -- | @samplerYcbcrConversion@ specifies whether the implementation supports
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
-    -- If @samplerYcbcrConversion@ is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- sampler Y′CBCR conversion is not supported, and samplers using sampler
-    -- Y′CBCR conversion /must/ not be used.
-    samplerYcbcrConversion :: Bool
-  , -- | @shaderDrawParameters@ specifies whether shader draw parameters are
-    -- supported.
-    shaderDrawParameters :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceVulkan11Features
-
-instance ToCStruct PhysicalDeviceVulkan11Features where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceVulkan11Features{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (storageBuffer16BitAccess))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (uniformAndStorageBuffer16BitAccess))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (storagePushConstant16))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (storageInputOutput16))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (multiview))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (multiviewGeometryShader))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (multiviewTessellationShader))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (variablePointersStorageBuffer))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (variablePointers))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (protectedMemory))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (samplerYcbcrConversion))
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (shaderDrawParameters))
-    f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceVulkan11Features where
-  peekCStruct p = do
-    storageBuffer16BitAccess <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    uniformAndStorageBuffer16BitAccess <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    storagePushConstant16 <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    storageInputOutput16 <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    multiview <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    multiviewGeometryShader <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    multiviewTessellationShader <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    variablePointersStorageBuffer <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    variablePointers <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
-    protectedMemory <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
-    samplerYcbcrConversion <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
-    shaderDrawParameters <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
-    pure $ PhysicalDeviceVulkan11Features
-             (bool32ToBool storageBuffer16BitAccess) (bool32ToBool uniformAndStorageBuffer16BitAccess) (bool32ToBool storagePushConstant16) (bool32ToBool storageInputOutput16) (bool32ToBool multiview) (bool32ToBool multiviewGeometryShader) (bool32ToBool multiviewTessellationShader) (bool32ToBool variablePointersStorageBuffer) (bool32ToBool variablePointers) (bool32ToBool protectedMemory) (bool32ToBool samplerYcbcrConversion) (bool32ToBool shaderDrawParameters)
-
-instance Storable PhysicalDeviceVulkan11Features where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceVulkan11Features where
-  zero = PhysicalDeviceVulkan11Features
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceVulkan11Properties - Structure specifying physical
--- device properties for functionality promoted to Vulkan 1.1
---
--- = Description
---
--- The members of 'PhysicalDeviceVulkan11Properties' /must/ have the same
--- values as the corresponding members of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties',
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
--- and
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior',
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlags'
-data PhysicalDeviceVulkan11Properties = PhysicalDeviceVulkan11Properties
-  { -- | @deviceUUID@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.UUID_SIZE' @uint8_t@ values
-    -- representing a universally unique identifier for the device.
-    deviceUUID :: ByteString
-  , -- | @driverUUID@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.UUID_SIZE' @uint8_t@ values
-    -- representing a universally unique identifier for the driver build in use
-    -- by the device.
-    driverUUID :: ByteString
-  , -- | @deviceLUID@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.LUID_SIZE' @uint8_t@ values
-    -- representing a locally unique identifier for the device.
-    deviceLUID :: ByteString
-  , -- | @deviceNodeMask@ is a @uint32_t@ bitfield identifying the node within a
-    -- linked device adapter corresponding to the device.
-    deviceNodeMask :: Word32
-  , -- | @deviceLUIDValid@ is a boolean value that will be
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE' if @deviceLUID@ contains a valid
-    -- LUID and @deviceNodeMask@ contains a valid node mask, and
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE' if they do not.
-    deviceLUIDValid :: Bool
-  , -- | @subgroupSize@ is the default number of invocations in each subgroup.
-    -- @subgroupSize@ is at least 1 if any of the physical device’s queues
-    -- support 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT'
-    -- or 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
-    -- @subgroupSize@ is a power-of-two.
-    subgroupSize :: Word32
-  , -- | @subgroupSupportedStages@ is a bitfield of
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
-    -- describing the shader stages that subgroup operations are supported in.
-    -- @subgroupSupportedStages@ will have the
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
-    -- bit set if any of the physical device’s queues support
-    -- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
-    subgroupSupportedStages :: ShaderStageFlags
-  , -- | @subgroupSupportedOperations@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlagBits'
-    -- specifying the sets of subgroup operations supported on this device.
-    -- @subgroupSupportedOperations@ will have the
-    -- 'Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SUBGROUP_FEATURE_BASIC_BIT'
-    -- bit set if any of the physical device’s queues support
-    -- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
-    -- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
-    subgroupSupportedOperations :: SubgroupFeatureFlags
-  , -- | @subgroupQuadOperationsInAllStages@ is a boolean specifying whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroup-quad quad subgroup operations>
-    -- are available in all stages, or are restricted to fragment and compute
-    -- stages.
-    subgroupQuadOperationsInAllStages :: Bool
-  , -- | @pointClippingBehavior@ is a
-    -- 'Graphics.Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior'
-    -- value specifying the point clipping behavior supported by the
-    -- implementation.
-    pointClippingBehavior :: PointClippingBehavior
-  , -- | @maxMultiviewViewCount@ is one greater than the maximum view index that
-    -- /can/ be used in a subpass.
-    maxMultiviewViewCount :: Word32
-  , -- | @maxMultiviewInstanceIndex@ is the maximum valid value of instance index
-    -- allowed to be generated by a drawing command recorded within a subpass
-    -- of a multiview render pass instance.
-    maxMultiviewInstanceIndex :: Word32
-  , -- | @protectedNoFault@ specifies the behavior of the implementation when
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-protected-access-rules protected memory access rules>
-    -- are broken. If @protectedNoFault@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE', breaking those rules will not
-    -- result in process termination or device loss.
-    protectedNoFault :: Bool
-  , -- | @maxPerSetDescriptors@ is a maximum number of descriptors (summed over
-    -- all descriptor types) in a single descriptor set that is guaranteed to
-    -- satisfy any implementation-dependent constraints on the size of a
-    -- descriptor set itself. Applications /can/ query whether a descriptor set
-    -- that goes beyond this limit is supported using
-    -- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.getDescriptorSetLayoutSupport'.
-    maxPerSetDescriptors :: Word32
-  , -- | @maxMemoryAllocationSize@ is the maximum size of a memory allocation
-    -- that /can/ be created, even if there is more space available in the
-    -- heap.
-    maxMemoryAllocationSize :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceVulkan11Properties
-
-instance ToCStruct PhysicalDeviceVulkan11Properties where
-  withCStruct x f = allocaBytesAligned 112 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceVulkan11Properties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pokeFixedLengthByteString ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8))) (deviceUUID)
-    pokeFixedLengthByteString ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8))) (driverUUID)
-    pokeFixedLengthByteString ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8))) (deviceLUID)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (deviceNodeMask)
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (deviceLUIDValid))
-    poke ((p `plusPtr` 64 :: Ptr Word32)) (subgroupSize)
-    poke ((p `plusPtr` 68 :: Ptr ShaderStageFlags)) (subgroupSupportedStages)
-    poke ((p `plusPtr` 72 :: Ptr SubgroupFeatureFlags)) (subgroupSupportedOperations)
-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (subgroupQuadOperationsInAllStages))
-    poke ((p `plusPtr` 80 :: Ptr PointClippingBehavior)) (pointClippingBehavior)
-    poke ((p `plusPtr` 84 :: Ptr Word32)) (maxMultiviewViewCount)
-    poke ((p `plusPtr` 88 :: Ptr Word32)) (maxMultiviewInstanceIndex)
-    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (protectedNoFault))
-    poke ((p `plusPtr` 96 :: Ptr Word32)) (maxPerSetDescriptors)
-    poke ((p `plusPtr` 104 :: Ptr DeviceSize)) (maxMemoryAllocationSize)
-    f
-  cStructSize = 112
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pokeFixedLengthByteString ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
-    pokeFixedLengthByteString ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
-    pokeFixedLengthByteString ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8))) (mempty)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 68 :: Ptr ShaderStageFlags)) (zero)
-    poke ((p `plusPtr` 72 :: Ptr SubgroupFeatureFlags)) (zero)
-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 80 :: Ptr PointClippingBehavior)) (zero)
-    poke ((p `plusPtr` 84 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 88 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 96 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 104 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceVulkan11Properties where
-  peekCStruct p = do
-    deviceUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8)))
-    driverUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8)))
-    deviceLUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8)))
-    deviceNodeMask <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    deviceLUIDValid <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
-    subgroupSize <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    subgroupSupportedStages <- peek @ShaderStageFlags ((p `plusPtr` 68 :: Ptr ShaderStageFlags))
-    subgroupSupportedOperations <- peek @SubgroupFeatureFlags ((p `plusPtr` 72 :: Ptr SubgroupFeatureFlags))
-    subgroupQuadOperationsInAllStages <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
-    pointClippingBehavior <- peek @PointClippingBehavior ((p `plusPtr` 80 :: Ptr PointClippingBehavior))
-    maxMultiviewViewCount <- peek @Word32 ((p `plusPtr` 84 :: Ptr Word32))
-    maxMultiviewInstanceIndex <- peek @Word32 ((p `plusPtr` 88 :: Ptr Word32))
-    protectedNoFault <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))
-    maxPerSetDescriptors <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32))
-    maxMemoryAllocationSize <- peek @DeviceSize ((p `plusPtr` 104 :: Ptr DeviceSize))
-    pure $ PhysicalDeviceVulkan11Properties
-             deviceUUID driverUUID deviceLUID deviceNodeMask (bool32ToBool deviceLUIDValid) subgroupSize subgroupSupportedStages subgroupSupportedOperations (bool32ToBool subgroupQuadOperationsInAllStages) pointClippingBehavior maxMultiviewViewCount maxMultiviewInstanceIndex (bool32ToBool protectedNoFault) maxPerSetDescriptors maxMemoryAllocationSize
-
-instance Storable PhysicalDeviceVulkan11Properties where
-  sizeOf ~_ = 112
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceVulkan11Properties where
-  zero = PhysicalDeviceVulkan11Properties
-           mempty
-           mempty
-           mempty
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceVulkan12Features - Structure describing the Vulkan 1.2
--- features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceVulkan12Features' structure describe
--- the following features:
---
--- = Description
---
--- -   @samplerMirrorClampToEdge@ indicates whether the implementation
---     supports the
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE'
---     sampler address mode. If this feature is not enabled, the
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE'
---     sampler address mode /must/ not be used.
---
--- -   @drawIndirectCount@ indicates whether the implementation supports
---     the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount'
---     and
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount'
---     functions. If this feature is not enabled, these functions /must/
---     not be used.
---
--- -   @storageBuffer8BitAccess@ indicates whether objects in the
---     @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the
---     @Block@ decoration /can/ have 8-bit integer members. If this feature
---     is not enabled, 8-bit integer members /must/ not be used in such
---     objects. This also indicates whether shader modules /can/ declare
---     the @StorageBuffer8BitAccess@ capability.
---
--- -   @uniformAndStorageBuffer8BitAccess@ indicates whether objects in the
---     @Uniform@ storage class with the @Block@ decoration and in the
---     @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the
---     same decoration /can/ have 8-bit integer members. If this feature is
---     not enabled, 8-bit integer members /must/ not be used in such
---     objects. This also indicates whether shader modules /can/ declare
---     the @UniformAndStorageBuffer8BitAccess@ capability.
---
--- -   @storagePushConstant8@ indicates whether objects in the
---     @PushConstant@ storage class /can/ have 8-bit integer members. If
---     this feature is not enabled, 8-bit integer members /must/ not be
---     used in such objects. This also indicates whether shader modules
---     /can/ declare the @StoragePushConstant8@ capability.
---
--- -   @shaderBufferInt64Atomics@ indicates whether shaders /can/ support
---     64-bit unsigned and signed integer atomic operations on buffers.
---
--- -   @shaderSharedInt64Atomics@ indicates whether shaders /can/ support
---     64-bit unsigned and signed integer atomic operations on shared
---     memory.
---
--- -   @shaderFloat16@ indicates whether 16-bit floats (halfs) are
---     supported in shader code. This also indicates whether shader modules
---     /can/ declare the @Float16@ capability. However, this only enables a
---     subset of the storage classes that SPIR-V allows for the @Float16@
---     SPIR-V capability: Declaring and using 16-bit floats in the
---     @Private@, @Workgroup@, and @Function@ storage classes is enabled,
---     while declaring them in the interface storage classes (e.g.,
---     @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@,
---     and @PushConstant@) is not enabled.
---
--- -   @shaderInt8@ indicates whether 8-bit integers (signed and unsigned)
---     are supported in shader code. This also indicates whether shader
---     modules /can/ declare the @Int8@ capability. However, this only
---     enables a subset of the storage classes that SPIR-V allows for the
---     @Int8@ SPIR-V capability: Declaring and using 8-bit integers in the
---     @Private@, @Workgroup@, and @Function@ storage classes is enabled,
---     while declaring them in the interface storage classes (e.g.,
---     @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@,
---     and @PushConstant@) is not enabled.
---
--- -   @descriptorIndexing@ indicates whether the implementation supports
---     the minimum set of descriptor indexing features as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-requirements Feature Requirements>
---     section. Enabling the @descriptorIndexing@ member when
---     'Graphics.Vulkan.Core10.Device.createDevice' is called does not
---     imply the other minimum descriptor indexing features are also
---     enabled. Those other descriptor indexing features /must/ be enabled
---     individually as needed by the application.
---
--- -   @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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     @InputAttachmentArrayDynamicIndexing@ 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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     @UniformTexelBufferArrayDynamicIndexing@ 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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     @StorageTexelBufferArrayDynamicIndexing@ 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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     @UniformBufferArrayNonUniformIndexing@ 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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     @SampledImageArrayNonUniformIndexing@ 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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     @StorageBufferArrayNonUniformIndexing@ 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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     @StorageImageArrayNonUniformIndexing@ 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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     @InputAttachmentArrayNonUniformIndexing@ 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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     @UniformTexelBufferArrayNonUniformIndexing@ 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
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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
---     @StorageTexelBufferArrayNonUniformIndexing@ capability.
---
--- -   @descriptorBindingUniformBufferUpdateAfterBind@ indicates whether
---     the implementation supports updating uniform buffer descriptors
---     after a set is bound. If this feature is not enabled,
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---     /must/ not be used with
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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,
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---     /must/ not be used with
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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,
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---     /must/ not be used with
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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,
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---     /must/ not be used with
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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,
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---     /must/ not be used with
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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,
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---     /must/ not be used with
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.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,
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'
---     /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,
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'
---     /must/ not be used.
---
--- -   @descriptorBindingVariableDescriptorCount@ indicates whether the
---     implementation supports descriptor sets with a variable-sized last
---     binding. If this feature is not enabled,
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT'
---     /must/ not be used.
---
--- -   @runtimeDescriptorArray@ indicates whether the implementation
---     supports the SPIR-V @RuntimeDescriptorArray@ capability. If this
---     feature is not enabled, descriptors /must/ not be declared in
---     runtime arrays.
---
--- -   @samplerFilterMinmax@ indicates whether the implementation supports
---     a minimum set of required formats supporting min\/max filtering as
---     defined by the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-filterMinmaxSingleComponentFormats-minimum-requirements filterMinmaxSingleComponentFormats>
---     property minimum requirements. If this feature is not enabled, then
---     no 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo' @pNext@ chain
---     can include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'
---     structure.
---
--- -   @scalarBlockLayout@ indicates that the implementation supports the
---     layout of resource blocks in shaders using
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-alignment-requirements scalar alignment>.
---
--- -   @imagelessFramebuffer@ indicates that the implementation supports
---     specifying the image view for attachments at render pass begin time
---     via
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'.
---
--- -   @uniformBufferStandardLayout@ indicates that the implementation
---     supports the same layouts for uniform buffers as for storage and
---     other kinds of buffers. See
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Buffer Layout>.
---
--- -   @shaderSubgroupExtendedTypes@ is a boolean that specifies whether
---     subgroup operations can use 8-bit integer, 16-bit integer, 64-bit
---     integer, 16-bit floating-point, and vectors of these types in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>
---     with
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-scope-subgroup subgroup scope>if
---     the implementation supports the types.
---
--- -   @separateDepthStencilLayouts@ indicates whether the implementation
---     supports a 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier'
---     for a depth\/stencil image with only one of
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
---     set, and whether
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---     can be used.
---
--- -   @hostQueryReset@ indicates that the implementation supports
---     resetting queries from the host with
---     'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool'.
---
--- -   @timelineSemaphore@ indicates whether semaphores created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---     are supported.
---
--- -   @bufferDeviceAddress@ indicates that the implementation supports
---     accessing buffer memory in shaders as storage buffers via an address
---     queried from
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'.
---
--- -   @bufferDeviceAddressCaptureReplay@ indicates that the implementation
---     supports saving and reusing buffer and device addresses, e.g. for
---     trace capture and replay.
---
--- -   @bufferDeviceAddressMultiDevice@ indicates that the implementation
---     supports the @bufferDeviceAddress@ and @rayTracing@ features for
---     logical devices created with multiple physical devices. If this
---     feature is not supported, buffer and acceleration structure
---     addresses /must/ not be queried on a logical device created with
---     more than one physical device.
---
--- -   @vulkanMemoryModel@ indicates whether the Vulkan Memory Model is
---     supported, as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model Vulkan Memory Model>.
---     This also indicates whether shader modules /can/ declare the
---     @VulkanMemoryModel@ capability.
---
--- -   @vulkanMemoryModelDeviceScope@ indicates whether the Vulkan Memory
---     Model can use 'Graphics.Vulkan.Core10.Handles.Device' scope
---     synchronization. This also indicates whether shader modules /can/
---     declare the @VulkanMemoryModelDeviceScope@ capability.
---
--- -   @vulkanMemoryModelAvailabilityVisibilityChains@ indicates whether
---     the Vulkan Memory Model can use
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model-availability-visibility availability and visibility chains>
---     with more than one element.
---
--- -   @shaderOutputViewportIndex@ indicates whether the implementation
---     supports the @ShaderViewportIndex@ SPIR-V capability enabling
---     variables decorated with the @ViewportIndex@ built-in to be exported
---     from vertex or tessellation evaluation shaders. If this feature is
---     not enabled, the @ViewportIndex@ built-in decoration /must/ not be
---     used on outputs in vertex or tessellation evaluation shaders.
---
--- -   @shaderOutputLayer@ indicates whether the implementation supports
---     the @ShaderLayer@ SPIR-V capability enabling variables decorated
---     with the @Layer@ built-in to be exported from vertex or tessellation
---     evaluation shaders. If this feature is not enabled, the @Layer@
---     built-in decoration /must/ not be used on outputs in vertex or
---     tessellation evaluation shaders.
---
--- -   If @subgroupBroadcastDynamicId@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', the “Id” operand of
---     @OpGroupNonUniformBroadcast@ /can/ be dynamically uniform within a
---     subgroup, and the “Index” operand of
---     @OpGroupNonUniformQuadBroadcast@ /can/ be dynamically uniform within
---     the derivative group. If it is
---     'Graphics.Vulkan.Core10.BaseType.FALSE', these operands /must/ be
---     constants.
---
--- If the 'PhysicalDeviceVulkan12Features' structure is included in the
--- @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceVulkan12Features' /can/ also be used in the @pNext@ chain
--- of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the
--- features.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceVulkan12Features = PhysicalDeviceVulkan12Features
-  { -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "samplerMirrorClampToEdge"
-    samplerMirrorClampToEdge :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "drawIndirectCount"
-    drawIndirectCount :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "storageBuffer8BitAccess"
-    storageBuffer8BitAccess :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "uniformAndStorageBuffer8BitAccess"
-    uniformAndStorageBuffer8BitAccess :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "storagePushConstant8"
-    storagePushConstant8 :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderBufferInt64Atomics"
-    shaderBufferInt64Atomics :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderSharedInt64Atomics"
-    shaderSharedInt64Atomics :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderFloat16"
-    shaderFloat16 :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderInt8"
-    shaderInt8 :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorIndexing"
-    descriptorIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderInputAttachmentArrayDynamicIndexing"
-    shaderInputAttachmentArrayDynamicIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderUniformTexelBufferArrayDynamicIndexing"
-    shaderUniformTexelBufferArrayDynamicIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderStorageTexelBufferArrayDynamicIndexing"
-    shaderStorageTexelBufferArrayDynamicIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderUniformBufferArrayNonUniformIndexing"
-    shaderUniformBufferArrayNonUniformIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderSampledImageArrayNonUniformIndexing"
-    shaderSampledImageArrayNonUniformIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderStorageBufferArrayNonUniformIndexing"
-    shaderStorageBufferArrayNonUniformIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderStorageImageArrayNonUniformIndexing"
-    shaderStorageImageArrayNonUniformIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderInputAttachmentArrayNonUniformIndexing"
-    shaderInputAttachmentArrayNonUniformIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderUniformTexelBufferArrayNonUniformIndexing"
-    shaderUniformTexelBufferArrayNonUniformIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderStorageTexelBufferArrayNonUniformIndexing"
-    shaderStorageTexelBufferArrayNonUniformIndexing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingUniformBufferUpdateAfterBind"
-    descriptorBindingUniformBufferUpdateAfterBind :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingSampledImageUpdateAfterBind"
-    descriptorBindingSampledImageUpdateAfterBind :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingStorageImageUpdateAfterBind"
-    descriptorBindingStorageImageUpdateAfterBind :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingStorageBufferUpdateAfterBind"
-    descriptorBindingStorageBufferUpdateAfterBind :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingUniformTexelBufferUpdateAfterBind"
-    descriptorBindingUniformTexelBufferUpdateAfterBind :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingStorageTexelBufferUpdateAfterBind"
-    descriptorBindingStorageTexelBufferUpdateAfterBind :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingUpdateUnusedWhilePending"
-    descriptorBindingUpdateUnusedWhilePending :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingPartiallyBound"
-    descriptorBindingPartiallyBound :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingVariableDescriptorCount"
-    descriptorBindingVariableDescriptorCount :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "runtimeDescriptorArray"
-    runtimeDescriptorArray :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "samplerFilterMinmax"
-    samplerFilterMinmax :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "scalarBlockLayout"
-    scalarBlockLayout :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "imagelessFramebuffer"
-    imagelessFramebuffer :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "uniformBufferStandardLayout"
-    uniformBufferStandardLayout :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderSubgroupExtendedTypes"
-    shaderSubgroupExtendedTypes :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "separateDepthStencilLayouts"
-    separateDepthStencilLayouts :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "hostQueryReset"
-    hostQueryReset :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "timelineSemaphore"
-    timelineSemaphore :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "bufferDeviceAddress"
-    bufferDeviceAddress :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "bufferDeviceAddressCaptureReplay"
-    bufferDeviceAddressCaptureReplay :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "bufferDeviceAddressMultiDevice"
-    bufferDeviceAddressMultiDevice :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "vulkanMemoryModel"
-    vulkanMemoryModel :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "vulkanMemoryModelDeviceScope"
-    vulkanMemoryModelDeviceScope :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "vulkanMemoryModelAvailabilityVisibilityChains"
-    vulkanMemoryModelAvailabilityVisibilityChains :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderOutputViewportIndex"
-    shaderOutputViewportIndex :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderOutputLayer"
-    shaderOutputLayer :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "subgroupBroadcastDynamicId"
-    subgroupBroadcastDynamicId :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceVulkan12Features
-
-instance ToCStruct PhysicalDeviceVulkan12Features where
-  withCStruct x f = allocaBytesAligned 208 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceVulkan12Features{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (samplerMirrorClampToEdge))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (drawIndirectCount))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (storageBuffer8BitAccess))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (uniformAndStorageBuffer8BitAccess))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (storagePushConstant8))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (shaderBufferInt64Atomics))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (shaderSharedInt64Atomics))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (shaderFloat16))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (shaderInt8))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (descriptorIndexing))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayDynamicIndexing))
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (shaderUniformTexelBufferArrayDynamicIndexing))
-    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (shaderStorageTexelBufferArrayDynamicIndexing))
-    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayNonUniformIndexing))
-    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayNonUniformIndexing))
-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayNonUniformIndexing))
-    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayNonUniformIndexing))
-    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayNonUniformIndexing))
-    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (shaderUniformTexelBufferArrayNonUniformIndexing))
-    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (shaderStorageTexelBufferArrayNonUniformIndexing))
-    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUniformBufferUpdateAfterBind))
-    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (descriptorBindingSampledImageUpdateAfterBind))
-    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageImageUpdateAfterBind))
-    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageBufferUpdateAfterBind))
-    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUniformTexelBufferUpdateAfterBind))
-    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageTexelBufferUpdateAfterBind))
-    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUpdateUnusedWhilePending))
-    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (descriptorBindingPartiallyBound))
-    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (descriptorBindingVariableDescriptorCount))
-    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (runtimeDescriptorArray))
-    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (samplerFilterMinmax))
-    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (scalarBlockLayout))
-    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (imagelessFramebuffer))
-    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (uniformBufferStandardLayout))
-    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (shaderSubgroupExtendedTypes))
-    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (separateDepthStencilLayouts))
-    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (hostQueryReset))
-    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (timelineSemaphore))
-    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddress))
-    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressCaptureReplay))
-    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressMultiDevice))
-    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModel))
-    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModelDeviceScope))
-    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModelAvailabilityVisibilityChains))
-    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (shaderOutputViewportIndex))
-    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (shaderOutputLayer))
-    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (subgroupBroadcastDynamicId))
-    f
-  cStructSize = 208
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceVulkan12Features where
-  peekCStruct p = do
-    samplerMirrorClampToEdge <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    drawIndirectCount <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    storageBuffer8BitAccess <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    uniformAndStorageBuffer8BitAccess <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    storagePushConstant8 <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    shaderBufferInt64Atomics <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    shaderSharedInt64Atomics <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    shaderFloat16 <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    shaderInt8 <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
-    descriptorIndexing <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
-    shaderInputAttachmentArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
-    shaderUniformTexelBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
-    shaderStorageTexelBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))
-    shaderUniformBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))
-    shaderSampledImageArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))
-    shaderStorageBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
-    shaderStorageImageArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 80 :: Ptr Bool32))
-    shaderInputAttachmentArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 84 :: Ptr Bool32))
-    shaderUniformTexelBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 88 :: Ptr Bool32))
-    shaderStorageTexelBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))
-    descriptorBindingUniformBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 96 :: Ptr Bool32))
-    descriptorBindingSampledImageUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 100 :: Ptr Bool32))
-    descriptorBindingStorageImageUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 104 :: Ptr Bool32))
-    descriptorBindingStorageBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 108 :: Ptr Bool32))
-    descriptorBindingUniformTexelBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 112 :: Ptr Bool32))
-    descriptorBindingStorageTexelBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 116 :: Ptr Bool32))
-    descriptorBindingUpdateUnusedWhilePending <- peek @Bool32 ((p `plusPtr` 120 :: Ptr Bool32))
-    descriptorBindingPartiallyBound <- peek @Bool32 ((p `plusPtr` 124 :: Ptr Bool32))
-    descriptorBindingVariableDescriptorCount <- peek @Bool32 ((p `plusPtr` 128 :: Ptr Bool32))
-    runtimeDescriptorArray <- peek @Bool32 ((p `plusPtr` 132 :: Ptr Bool32))
-    samplerFilterMinmax <- peek @Bool32 ((p `plusPtr` 136 :: Ptr Bool32))
-    scalarBlockLayout <- peek @Bool32 ((p `plusPtr` 140 :: Ptr Bool32))
-    imagelessFramebuffer <- peek @Bool32 ((p `plusPtr` 144 :: Ptr Bool32))
-    uniformBufferStandardLayout <- peek @Bool32 ((p `plusPtr` 148 :: Ptr Bool32))
-    shaderSubgroupExtendedTypes <- peek @Bool32 ((p `plusPtr` 152 :: Ptr Bool32))
-    separateDepthStencilLayouts <- peek @Bool32 ((p `plusPtr` 156 :: Ptr Bool32))
-    hostQueryReset <- peek @Bool32 ((p `plusPtr` 160 :: Ptr Bool32))
-    timelineSemaphore <- peek @Bool32 ((p `plusPtr` 164 :: Ptr Bool32))
-    bufferDeviceAddress <- peek @Bool32 ((p `plusPtr` 168 :: Ptr Bool32))
-    bufferDeviceAddressCaptureReplay <- peek @Bool32 ((p `plusPtr` 172 :: Ptr Bool32))
-    bufferDeviceAddressMultiDevice <- peek @Bool32 ((p `plusPtr` 176 :: Ptr Bool32))
-    vulkanMemoryModel <- peek @Bool32 ((p `plusPtr` 180 :: Ptr Bool32))
-    vulkanMemoryModelDeviceScope <- peek @Bool32 ((p `plusPtr` 184 :: Ptr Bool32))
-    vulkanMemoryModelAvailabilityVisibilityChains <- peek @Bool32 ((p `plusPtr` 188 :: Ptr Bool32))
-    shaderOutputViewportIndex <- peek @Bool32 ((p `plusPtr` 192 :: Ptr Bool32))
-    shaderOutputLayer <- peek @Bool32 ((p `plusPtr` 196 :: Ptr Bool32))
-    subgroupBroadcastDynamicId <- peek @Bool32 ((p `plusPtr` 200 :: Ptr Bool32))
-    pure $ PhysicalDeviceVulkan12Features
-             (bool32ToBool samplerMirrorClampToEdge) (bool32ToBool drawIndirectCount) (bool32ToBool storageBuffer8BitAccess) (bool32ToBool uniformAndStorageBuffer8BitAccess) (bool32ToBool storagePushConstant8) (bool32ToBool shaderBufferInt64Atomics) (bool32ToBool shaderSharedInt64Atomics) (bool32ToBool shaderFloat16) (bool32ToBool shaderInt8) (bool32ToBool descriptorIndexing) (bool32ToBool shaderInputAttachmentArrayDynamicIndexing) (bool32ToBool shaderUniformTexelBufferArrayDynamicIndexing) (bool32ToBool shaderStorageTexelBufferArrayDynamicIndexing) (bool32ToBool shaderUniformBufferArrayNonUniformIndexing) (bool32ToBool shaderSampledImageArrayNonUniformIndexing) (bool32ToBool shaderStorageBufferArrayNonUniformIndexing) (bool32ToBool shaderStorageImageArrayNonUniformIndexing) (bool32ToBool shaderInputAttachmentArrayNonUniformIndexing) (bool32ToBool shaderUniformTexelBufferArrayNonUniformIndexing) (bool32ToBool shaderStorageTexelBufferArrayNonUniformIndexing) (bool32ToBool descriptorBindingUniformBufferUpdateAfterBind) (bool32ToBool descriptorBindingSampledImageUpdateAfterBind) (bool32ToBool descriptorBindingStorageImageUpdateAfterBind) (bool32ToBool descriptorBindingStorageBufferUpdateAfterBind) (bool32ToBool descriptorBindingUniformTexelBufferUpdateAfterBind) (bool32ToBool descriptorBindingStorageTexelBufferUpdateAfterBind) (bool32ToBool descriptorBindingUpdateUnusedWhilePending) (bool32ToBool descriptorBindingPartiallyBound) (bool32ToBool descriptorBindingVariableDescriptorCount) (bool32ToBool runtimeDescriptorArray) (bool32ToBool samplerFilterMinmax) (bool32ToBool scalarBlockLayout) (bool32ToBool imagelessFramebuffer) (bool32ToBool uniformBufferStandardLayout) (bool32ToBool shaderSubgroupExtendedTypes) (bool32ToBool separateDepthStencilLayouts) (bool32ToBool hostQueryReset) (bool32ToBool timelineSemaphore) (bool32ToBool bufferDeviceAddress) (bool32ToBool bufferDeviceAddressCaptureReplay) (bool32ToBool bufferDeviceAddressMultiDevice) (bool32ToBool vulkanMemoryModel) (bool32ToBool vulkanMemoryModelDeviceScope) (bool32ToBool vulkanMemoryModelAvailabilityVisibilityChains) (bool32ToBool shaderOutputViewportIndex) (bool32ToBool shaderOutputLayer) (bool32ToBool subgroupBroadcastDynamicId)
-
-instance Storable PhysicalDeviceVulkan12Features where
-  sizeOf ~_ = 208
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceVulkan12Features where
-  zero = PhysicalDeviceVulkan12Features
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceVulkan12Properties - Structure specifying physical
--- device properties for functionality promoted to Vulkan 1.2
---
--- = Description
---
--- The members of 'PhysicalDeviceVulkan12Properties' /must/ have the same
--- values as the corresponding members of
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.PhysicalDeviceSamplerFilterMinmaxProperties',
--- and
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreProperties'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.ConformanceVersion',
--- 'Graphics.Vulkan.Core12.Enums.DriverId.DriverId',
--- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlags',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags',
--- 'Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceVulkan12Properties = PhysicalDeviceVulkan12Properties
-  { -- | @driverID@ is a unique identifier for the driver of the physical device.
-    driverID :: DriverId
-  , -- | @driverName@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DRIVER_NAME_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which is the name of the
-    -- driver.
-    driverName :: ByteString
-  , -- | @driverInfo@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DRIVER_INFO_SIZE' @char@
-    -- containing a null-terminated UTF-8 string with additional information
-    -- about the driver.
-    driverInfo :: ByteString
-  , -- | @conformanceVersion@ is the version of the Vulkan conformance test this
-    -- driver is conformant against (see
-    -- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.ConformanceVersion').
-    conformanceVersion :: ConformanceVersion
-  , -- | @denormBehaviorIndependence@ is a
-    -- 'Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'
-    -- value indicating whether, and how, denorm behavior can be set
-    -- independently for different bit widths.
-    denormBehaviorIndependence :: ShaderFloatControlsIndependence
-  , -- | @roundingModeIndependence@ is a
-    -- 'Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'
-    -- value indicating whether, and how, rounding modes can be set
-    -- independently for different bit widths.
-    roundingModeIndependence :: ShaderFloatControlsIndependence
-  , -- | @shaderSignedZeroInfNanPreserveFloat16@ is a boolean value indicating
-    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
-    -- 16-bit floating-point computations. It also indicates whether the
-    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 16-bit
-    -- floating-point types.
-    shaderSignedZeroInfNanPreserveFloat16 :: Bool
-  , -- | @shaderSignedZeroInfNanPreserveFloat32@ is a boolean value indicating
-    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
-    -- 32-bit floating-point computations. It also indicates whether the
-    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 32-bit
-    -- floating-point types.
-    shaderSignedZeroInfNanPreserveFloat32 :: Bool
-  , -- | @shaderSignedZeroInfNanPreserveFloat64@ is a boolean value indicating
-    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
-    -- 64-bit floating-point computations. It also indicates whether the
-    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 64-bit
-    -- floating-point types.
-    shaderSignedZeroInfNanPreserveFloat64 :: Bool
-  , -- | @shaderDenormPreserveFloat16@ is a boolean value indicating whether
-    -- denormals /can/ be preserved in 16-bit floating-point computations. It
-    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
-    -- for 16-bit floating-point types.
-    shaderDenormPreserveFloat16 :: Bool
-  , -- | @shaderDenormPreserveFloat32@ is a boolean value indicating whether
-    -- denormals /can/ be preserved in 32-bit floating-point computations. It
-    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
-    -- for 32-bit floating-point types.
-    shaderDenormPreserveFloat32 :: Bool
-  , -- | @shaderDenormPreserveFloat64@ is a boolean value indicating whether
-    -- denormals /can/ be preserved in 64-bit floating-point computations. It
-    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
-    -- for 64-bit floating-point types.
-    shaderDenormPreserveFloat64 :: Bool
-  , -- | @shaderDenormFlushToZeroFloat16@ is a boolean value indicating whether
-    -- denormals /can/ be flushed to zero in 16-bit floating-point
-    -- computations. It also indicates whether the @DenormFlushToZero@
-    -- execution mode /can/ be used for 16-bit floating-point types.
-    shaderDenormFlushToZeroFloat16 :: Bool
-  , -- | @shaderDenormFlushToZeroFloat32@ is a boolean value indicating whether
-    -- denormals /can/ be flushed to zero in 32-bit floating-point
-    -- computations. It also indicates whether the @DenormFlushToZero@
-    -- execution mode /can/ be used for 32-bit floating-point types.
-    shaderDenormFlushToZeroFloat32 :: Bool
-  , -- | @shaderDenormFlushToZeroFloat64@ is a boolean value indicating whether
-    -- denormals /can/ be flushed to zero in 64-bit floating-point
-    -- computations. It also indicates whether the @DenormFlushToZero@
-    -- execution mode /can/ be used for 64-bit floating-point types.
-    shaderDenormFlushToZeroFloat64 :: Bool
-  , -- | @shaderRoundingModeRTEFloat16@ is a boolean value indicating whether an
-    -- implementation supports the round-to-nearest-even rounding mode for
-    -- 16-bit floating-point arithmetic and conversion instructions. It also
-    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
-    -- 16-bit floating-point types.
-    shaderRoundingModeRTEFloat16 :: Bool
-  , -- | @shaderRoundingModeRTEFloat32@ is a boolean value indicating whether an
-    -- implementation supports the round-to-nearest-even rounding mode for
-    -- 32-bit floating-point arithmetic and conversion instructions. It also
-    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
-    -- 32-bit floating-point types.
-    shaderRoundingModeRTEFloat32 :: Bool
-  , -- | @shaderRoundingModeRTEFloat64@ is a boolean value indicating whether an
-    -- implementation supports the round-to-nearest-even rounding mode for
-    -- 64-bit floating-point arithmetic and conversion instructions. It also
-    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
-    -- 64-bit floating-point types.
-    shaderRoundingModeRTEFloat64 :: Bool
-  , -- | @shaderRoundingModeRTZFloat16@ is a boolean value indicating whether an
-    -- implementation supports the round-towards-zero rounding mode for 16-bit
-    -- floating-point arithmetic and conversion instructions. It also indicates
-    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 16-bit
-    -- floating-point types.
-    shaderRoundingModeRTZFloat16 :: Bool
-  , -- | @shaderRoundingModeRTZFloat32@ is a boolean value indicating whether an
-    -- implementation supports the round-towards-zero rounding mode for 32-bit
-    -- floating-point arithmetic and conversion instructions. It also indicates
-    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 32-bit
-    -- floating-point types.
-    shaderRoundingModeRTZFloat32 :: Bool
-  , -- | @shaderRoundingModeRTZFloat64@ is a boolean value indicating whether an
-    -- implementation supports the round-towards-zero rounding mode for 64-bit
-    -- floating-point arithmetic and conversion instructions. It also indicates
-    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 64-bit
-    -- floating-point types.
-    shaderRoundingModeRTZFloat64 :: Bool
-  , -- | @maxUpdateAfterBindDescriptorsInAllPools@ is the maximum number of
-    -- descriptors (summed over all descriptor types) that /can/ be created
-    -- across all pools that are created with the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
-    -- bit set. Pool creation /may/ fail when this limit is exceeded, or when
-    -- the space this limit represents is unable to satisfy a pool creation due
-    -- to fragmentation.
-    maxUpdateAfterBindDescriptorsInAllPools :: Word32
-  , -- | @shaderUniformBufferArrayNonUniformIndexingNative@ is a boolean value
-    -- indicating whether uniform buffer descriptors natively support
-    -- nonuniform indexing. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- then a single dynamic instance of an instruction that nonuniformly
-    -- indexes an array of uniform buffers /may/ execute multiple times in
-    -- order to access all the descriptors.
-    shaderUniformBufferArrayNonUniformIndexingNative :: Bool
-  , -- | @shaderSampledImageArrayNonUniformIndexingNative@ is a boolean value
-    -- indicating whether sampler and image descriptors natively support
-    -- nonuniform indexing. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- then a single dynamic instance of an instruction that nonuniformly
-    -- indexes an array of samplers or images /may/ execute multiple times in
-    -- order to access all the descriptors.
-    shaderSampledImageArrayNonUniformIndexingNative :: Bool
-  , -- | @shaderStorageBufferArrayNonUniformIndexingNative@ is a boolean value
-    -- indicating whether storage buffer descriptors natively support
-    -- nonuniform indexing. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- then a single dynamic instance of an instruction that nonuniformly
-    -- indexes an array of storage buffers /may/ execute multiple times in
-    -- order to access all the descriptors.
-    shaderStorageBufferArrayNonUniformIndexingNative :: Bool
-  , -- | @shaderStorageImageArrayNonUniformIndexingNative@ is a boolean value
-    -- indicating whether storage image descriptors natively support nonuniform
-    -- indexing. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE', then a
-    -- single dynamic instance of an instruction that nonuniformly indexes an
-    -- array of storage images /may/ execute multiple times in order to access
-    -- all the descriptors.
-    shaderStorageImageArrayNonUniformIndexingNative :: Bool
-  , -- | @shaderInputAttachmentArrayNonUniformIndexingNative@ is a boolean value
-    -- indicating whether input attachment descriptors natively support
-    -- nonuniform indexing. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- then a single dynamic instance of an instruction that nonuniformly
-    -- indexes an array of input attachments /may/ execute multiple times in
-    -- order to access all the descriptors.
-    shaderInputAttachmentArrayNonUniformIndexingNative :: Bool
-  , -- | @robustBufferAccessUpdateAfterBind@ is a boolean value indicating
-    -- whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
-    -- /can/ be enabled in a device simultaneously with
-    -- @descriptorBindingUniformBufferUpdateAfterBind@,
-    -- @descriptorBindingStorageBufferUpdateAfterBind@,
-    -- @descriptorBindingUniformTexelBufferUpdateAfterBind@, and\/or
-    -- @descriptorBindingStorageTexelBufferUpdateAfterBind@. If this is
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', then either
-    -- @robustBufferAccess@ /must/ be disabled or all of these
-    -- update-after-bind features /must/ be disabled.
-    robustBufferAccessUpdateAfterBind :: Bool
-  , -- | @quadDivergentImplicitLod@ is a boolean value indicating whether
-    -- implicit level of detail calculations for image operations have
-    -- well-defined results when the image and\/or sampler objects used for the
-    -- instruction are not uniform within a quad. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-derivative-image-operations Derivative Image Operations>.
-    quadDivergentImplicitLod :: Bool
-  , -- | @maxPerStageDescriptorUpdateAfterBindSamplers@ is similar to
-    -- @maxPerStageDescriptorSamplers@ but counts descriptors from descriptor
-    -- sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindSamplers :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindUniformBuffers@ is similar to
-    -- @maxPerStageDescriptorUniformBuffers@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindUniformBuffers :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindStorageBuffers@ is similar to
-    -- @maxPerStageDescriptorStorageBuffers@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindStorageBuffers :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindSampledImages@ is similar to
-    -- @maxPerStageDescriptorSampledImages@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindSampledImages :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindStorageImages@ is similar to
-    -- @maxPerStageDescriptorStorageImages@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindStorageImages :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindInputAttachments@ is similar to
-    -- @maxPerStageDescriptorInputAttachments@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindInputAttachments :: Word32
-  , -- | @maxPerStageUpdateAfterBindResources@ is similar to
-    -- @maxPerStageResources@ but counts descriptors from descriptor sets
-    -- created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageUpdateAfterBindResources :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindSamplers@ is similar to
-    -- @maxDescriptorSetSamplers@ but counts descriptors from descriptor sets
-    -- created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindSamplers :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffers@ is similar to
-    -- @maxDescriptorSetUniformBuffers@ but counts descriptors from descriptor
-    -- sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindUniformBuffers :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@ is similar to
-    -- @maxDescriptorSetUniformBuffersDynamic@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffers@ is similar to
-    -- @maxDescriptorSetStorageBuffers@ but counts descriptors from descriptor
-    -- sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindStorageBuffers :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@ is similar to
-    -- @maxDescriptorSetStorageBuffersDynamic@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindSampledImages@ is similar to
-    -- @maxDescriptorSetSampledImages@ but counts descriptors from descriptor
-    -- sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindSampledImages :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindStorageImages@ is similar to
-    -- @maxDescriptorSetStorageImages@ but counts descriptors from descriptor
-    -- sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindStorageImages :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindInputAttachments@ is similar to
-    -- @maxDescriptorSetInputAttachments@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindInputAttachments :: Word32
-  , -- | @supportedDepthResolveModes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'
-    -- indicating the set of supported depth resolve modes.
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'
-    -- /must/ be included in the set but implementations /may/ support
-    -- additional modes.
-    supportedDepthResolveModes :: ResolveModeFlags
-  , -- | @supportedStencilResolveModes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'
-    -- indicating the set of supported stencil resolve modes.
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'
-    -- /must/ be included in the set but implementations /may/ support
-    -- additional modes.
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_AVERAGE_BIT'
-    -- /must/ not be included in the set.
-    supportedStencilResolveModes :: ResolveModeFlags
-  , -- | @independentResolveNone@ is 'Graphics.Vulkan.Core10.BaseType.TRUE' if
-    -- the implementation supports setting the depth and stencil resolve modes
-    -- to different values when one of those modes is
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'.
-    -- Otherwise the implementation only supports setting both modes to the
-    -- same value.
-    independentResolveNone :: Bool
-  , -- | @independentResolve@ is 'Graphics.Vulkan.Core10.BaseType.TRUE' if the
-    -- implementation supports all combinations of the supported depth and
-    -- stencil resolve modes, including setting either depth or stencil resolve
-    -- mode to
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. An
-    -- implementation that supports @independentResolve@ /must/ also support
-    -- @independentResolveNone@.
-    independentResolve :: Bool
-  , -- | @filterMinmaxSingleComponentFormats@ is a boolean value indicating
-    -- whether a minimum set of required formats support min\/max filtering.
-    filterMinmaxSingleComponentFormats :: Bool
-  , -- | @filterMinmaxImageComponentMapping@ is a boolean value indicating
-    -- whether the implementation supports non-identity component mapping of
-    -- the image when doing min\/max filtering.
-    filterMinmaxImageComponentMapping :: Bool
-  , -- | @maxTimelineSemaphoreValueDifference@ indicates the maximum difference
-    -- allowed by the implementation between the current value of a timeline
-    -- semaphore and any pending signal or wait operations.
-    maxTimelineSemaphoreValueDifference :: Word64
-  , -- | @framebufferIntegerColorSampleCounts@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- indicating the color sample counts that are supported for all
-    -- framebuffer color attachments with integer formats.
-    framebufferIntegerColorSampleCounts :: SampleCountFlags
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceVulkan12Properties
-
-instance ToCStruct PhysicalDeviceVulkan12Properties where
-  withCStruct x f = allocaBytesAligned 736 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceVulkan12Properties{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DriverId)) (driverID)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))) (driverName)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))) (driverInfo)
-    ContT $ pokeCStruct ((p `plusPtr` 532 :: Ptr ConformanceVersion)) (conformanceVersion) . ($ ())
-    lift $ poke ((p `plusPtr` 536 :: Ptr ShaderFloatControlsIndependence)) (denormBehaviorIndependence)
-    lift $ poke ((p `plusPtr` 540 :: Ptr ShaderFloatControlsIndependence)) (roundingModeIndependence)
-    lift $ poke ((p `plusPtr` 544 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat16))
-    lift $ poke ((p `plusPtr` 548 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat32))
-    lift $ poke ((p `plusPtr` 552 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat64))
-    lift $ poke ((p `plusPtr` 556 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat16))
-    lift $ poke ((p `plusPtr` 560 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat32))
-    lift $ poke ((p `plusPtr` 564 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat64))
-    lift $ poke ((p `plusPtr` 568 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat16))
-    lift $ poke ((p `plusPtr` 572 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat32))
-    lift $ poke ((p `plusPtr` 576 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat64))
-    lift $ poke ((p `plusPtr` 580 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat16))
-    lift $ poke ((p `plusPtr` 584 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat32))
-    lift $ poke ((p `plusPtr` 588 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat64))
-    lift $ poke ((p `plusPtr` 592 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat16))
-    lift $ poke ((p `plusPtr` 596 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat32))
-    lift $ poke ((p `plusPtr` 600 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat64))
-    lift $ poke ((p `plusPtr` 604 :: Ptr Word32)) (maxUpdateAfterBindDescriptorsInAllPools)
-    lift $ poke ((p `plusPtr` 608 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayNonUniformIndexingNative))
-    lift $ poke ((p `plusPtr` 612 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayNonUniformIndexingNative))
-    lift $ poke ((p `plusPtr` 616 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayNonUniformIndexingNative))
-    lift $ poke ((p `plusPtr` 620 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayNonUniformIndexingNative))
-    lift $ poke ((p `plusPtr` 624 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayNonUniformIndexingNative))
-    lift $ poke ((p `plusPtr` 628 :: Ptr Bool32)) (boolToBool32 (robustBufferAccessUpdateAfterBind))
-    lift $ poke ((p `plusPtr` 632 :: Ptr Bool32)) (boolToBool32 (quadDivergentImplicitLod))
-    lift $ poke ((p `plusPtr` 636 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindSamplers)
-    lift $ poke ((p `plusPtr` 640 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindUniformBuffers)
-    lift $ poke ((p `plusPtr` 644 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindStorageBuffers)
-    lift $ poke ((p `plusPtr` 648 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindSampledImages)
-    lift $ poke ((p `plusPtr` 652 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindStorageImages)
-    lift $ poke ((p `plusPtr` 656 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindInputAttachments)
-    lift $ poke ((p `plusPtr` 660 :: Ptr Word32)) (maxPerStageUpdateAfterBindResources)
-    lift $ poke ((p `plusPtr` 664 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindSamplers)
-    lift $ poke ((p `plusPtr` 668 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindUniformBuffers)
-    lift $ poke ((p `plusPtr` 672 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindUniformBuffersDynamic)
-    lift $ poke ((p `plusPtr` 676 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageBuffers)
-    lift $ poke ((p `plusPtr` 680 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageBuffersDynamic)
-    lift $ poke ((p `plusPtr` 684 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindSampledImages)
-    lift $ poke ((p `plusPtr` 688 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageImages)
-    lift $ poke ((p `plusPtr` 692 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindInputAttachments)
-    lift $ poke ((p `plusPtr` 696 :: Ptr ResolveModeFlags)) (supportedDepthResolveModes)
-    lift $ poke ((p `plusPtr` 700 :: Ptr ResolveModeFlags)) (supportedStencilResolveModes)
-    lift $ poke ((p `plusPtr` 704 :: Ptr Bool32)) (boolToBool32 (independentResolveNone))
-    lift $ poke ((p `plusPtr` 708 :: Ptr Bool32)) (boolToBool32 (independentResolve))
-    lift $ poke ((p `plusPtr` 712 :: Ptr Bool32)) (boolToBool32 (filterMinmaxSingleComponentFormats))
-    lift $ poke ((p `plusPtr` 716 :: Ptr Bool32)) (boolToBool32 (filterMinmaxImageComponentMapping))
-    lift $ poke ((p `plusPtr` 720 :: Ptr Word64)) (maxTimelineSemaphoreValueDifference)
-    lift $ poke ((p `plusPtr` 728 :: Ptr SampleCountFlags)) (framebufferIntegerColorSampleCounts)
-    lift $ f
-  cStructSize = 736
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DriverId)) (zero)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))) (mempty)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))) (mempty)
-    ContT $ pokeCStruct ((p `plusPtr` 532 :: Ptr ConformanceVersion)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 536 :: Ptr ShaderFloatControlsIndependence)) (zero)
-    lift $ poke ((p `plusPtr` 540 :: Ptr ShaderFloatControlsIndependence)) (zero)
-    lift $ poke ((p `plusPtr` 544 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 548 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 552 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 556 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 560 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 564 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 568 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 572 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 576 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 580 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 584 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 588 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 592 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 596 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 600 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 604 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 608 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 612 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 616 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 620 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 624 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 628 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 632 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 636 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 640 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 644 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 648 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 652 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 656 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 660 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 664 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 668 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 672 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 676 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 680 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 684 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 688 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 692 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 696 :: Ptr ResolveModeFlags)) (zero)
-    lift $ poke ((p `plusPtr` 700 :: Ptr ResolveModeFlags)) (zero)
-    lift $ poke ((p `plusPtr` 704 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 708 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 712 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 716 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 720 :: Ptr Word64)) (zero)
-    lift $ f
-
-instance FromCStruct PhysicalDeviceVulkan12Properties where
-  peekCStruct p = do
-    driverID <- peek @DriverId ((p `plusPtr` 16 :: Ptr DriverId))
-    driverName <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))))
-    driverInfo <- packCString (lowerArrayPtr ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))))
-    conformanceVersion <- peekCStruct @ConformanceVersion ((p `plusPtr` 532 :: Ptr ConformanceVersion))
-    denormBehaviorIndependence <- peek @ShaderFloatControlsIndependence ((p `plusPtr` 536 :: Ptr ShaderFloatControlsIndependence))
-    roundingModeIndependence <- peek @ShaderFloatControlsIndependence ((p `plusPtr` 540 :: Ptr ShaderFloatControlsIndependence))
-    shaderSignedZeroInfNanPreserveFloat16 <- peek @Bool32 ((p `plusPtr` 544 :: Ptr Bool32))
-    shaderSignedZeroInfNanPreserveFloat32 <- peek @Bool32 ((p `plusPtr` 548 :: Ptr Bool32))
-    shaderSignedZeroInfNanPreserveFloat64 <- peek @Bool32 ((p `plusPtr` 552 :: Ptr Bool32))
-    shaderDenormPreserveFloat16 <- peek @Bool32 ((p `plusPtr` 556 :: Ptr Bool32))
-    shaderDenormPreserveFloat32 <- peek @Bool32 ((p `plusPtr` 560 :: Ptr Bool32))
-    shaderDenormPreserveFloat64 <- peek @Bool32 ((p `plusPtr` 564 :: Ptr Bool32))
-    shaderDenormFlushToZeroFloat16 <- peek @Bool32 ((p `plusPtr` 568 :: Ptr Bool32))
-    shaderDenormFlushToZeroFloat32 <- peek @Bool32 ((p `plusPtr` 572 :: Ptr Bool32))
-    shaderDenormFlushToZeroFloat64 <- peek @Bool32 ((p `plusPtr` 576 :: Ptr Bool32))
-    shaderRoundingModeRTEFloat16 <- peek @Bool32 ((p `plusPtr` 580 :: Ptr Bool32))
-    shaderRoundingModeRTEFloat32 <- peek @Bool32 ((p `plusPtr` 584 :: Ptr Bool32))
-    shaderRoundingModeRTEFloat64 <- peek @Bool32 ((p `plusPtr` 588 :: Ptr Bool32))
-    shaderRoundingModeRTZFloat16 <- peek @Bool32 ((p `plusPtr` 592 :: Ptr Bool32))
-    shaderRoundingModeRTZFloat32 <- peek @Bool32 ((p `plusPtr` 596 :: Ptr Bool32))
-    shaderRoundingModeRTZFloat64 <- peek @Bool32 ((p `plusPtr` 600 :: Ptr Bool32))
-    maxUpdateAfterBindDescriptorsInAllPools <- peek @Word32 ((p `plusPtr` 604 :: Ptr Word32))
-    shaderUniformBufferArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 608 :: Ptr Bool32))
-    shaderSampledImageArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 612 :: Ptr Bool32))
-    shaderStorageBufferArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 616 :: Ptr Bool32))
-    shaderStorageImageArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 620 :: Ptr Bool32))
-    shaderInputAttachmentArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 624 :: Ptr Bool32))
-    robustBufferAccessUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 628 :: Ptr Bool32))
-    quadDivergentImplicitLod <- peek @Bool32 ((p `plusPtr` 632 :: Ptr Bool32))
-    maxPerStageDescriptorUpdateAfterBindSamplers <- peek @Word32 ((p `plusPtr` 636 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindUniformBuffers <- peek @Word32 ((p `plusPtr` 640 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindStorageBuffers <- peek @Word32 ((p `plusPtr` 644 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindSampledImages <- peek @Word32 ((p `plusPtr` 648 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindStorageImages <- peek @Word32 ((p `plusPtr` 652 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindInputAttachments <- peek @Word32 ((p `plusPtr` 656 :: Ptr Word32))
-    maxPerStageUpdateAfterBindResources <- peek @Word32 ((p `plusPtr` 660 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindSamplers <- peek @Word32 ((p `plusPtr` 664 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindUniformBuffers <- peek @Word32 ((p `plusPtr` 668 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic <- peek @Word32 ((p `plusPtr` 672 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindStorageBuffers <- peek @Word32 ((p `plusPtr` 676 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic <- peek @Word32 ((p `plusPtr` 680 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindSampledImages <- peek @Word32 ((p `plusPtr` 684 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindStorageImages <- peek @Word32 ((p `plusPtr` 688 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindInputAttachments <- peek @Word32 ((p `plusPtr` 692 :: Ptr Word32))
-    supportedDepthResolveModes <- peek @ResolveModeFlags ((p `plusPtr` 696 :: Ptr ResolveModeFlags))
-    supportedStencilResolveModes <- peek @ResolveModeFlags ((p `plusPtr` 700 :: Ptr ResolveModeFlags))
-    independentResolveNone <- peek @Bool32 ((p `plusPtr` 704 :: Ptr Bool32))
-    independentResolve <- peek @Bool32 ((p `plusPtr` 708 :: Ptr Bool32))
-    filterMinmaxSingleComponentFormats <- peek @Bool32 ((p `plusPtr` 712 :: Ptr Bool32))
-    filterMinmaxImageComponentMapping <- peek @Bool32 ((p `plusPtr` 716 :: Ptr Bool32))
-    maxTimelineSemaphoreValueDifference <- peek @Word64 ((p `plusPtr` 720 :: Ptr Word64))
-    framebufferIntegerColorSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 728 :: Ptr SampleCountFlags))
-    pure $ PhysicalDeviceVulkan12Properties
-             driverID driverName driverInfo conformanceVersion denormBehaviorIndependence roundingModeIndependence (bool32ToBool shaderSignedZeroInfNanPreserveFloat16) (bool32ToBool shaderSignedZeroInfNanPreserveFloat32) (bool32ToBool shaderSignedZeroInfNanPreserveFloat64) (bool32ToBool shaderDenormPreserveFloat16) (bool32ToBool shaderDenormPreserveFloat32) (bool32ToBool shaderDenormPreserveFloat64) (bool32ToBool shaderDenormFlushToZeroFloat16) (bool32ToBool shaderDenormFlushToZeroFloat32) (bool32ToBool shaderDenormFlushToZeroFloat64) (bool32ToBool shaderRoundingModeRTEFloat16) (bool32ToBool shaderRoundingModeRTEFloat32) (bool32ToBool shaderRoundingModeRTEFloat64) (bool32ToBool shaderRoundingModeRTZFloat16) (bool32ToBool shaderRoundingModeRTZFloat32) (bool32ToBool shaderRoundingModeRTZFloat64) maxUpdateAfterBindDescriptorsInAllPools (bool32ToBool shaderUniformBufferArrayNonUniformIndexingNative) (bool32ToBool shaderSampledImageArrayNonUniformIndexingNative) (bool32ToBool shaderStorageBufferArrayNonUniformIndexingNative) (bool32ToBool shaderStorageImageArrayNonUniformIndexingNative) (bool32ToBool shaderInputAttachmentArrayNonUniformIndexingNative) (bool32ToBool robustBufferAccessUpdateAfterBind) (bool32ToBool quadDivergentImplicitLod) maxPerStageDescriptorUpdateAfterBindSamplers maxPerStageDescriptorUpdateAfterBindUniformBuffers maxPerStageDescriptorUpdateAfterBindStorageBuffers maxPerStageDescriptorUpdateAfterBindSampledImages maxPerStageDescriptorUpdateAfterBindStorageImages maxPerStageDescriptorUpdateAfterBindInputAttachments maxPerStageUpdateAfterBindResources maxDescriptorSetUpdateAfterBindSamplers maxDescriptorSetUpdateAfterBindUniformBuffers maxDescriptorSetUpdateAfterBindUniformBuffersDynamic maxDescriptorSetUpdateAfterBindStorageBuffers maxDescriptorSetUpdateAfterBindStorageBuffersDynamic maxDescriptorSetUpdateAfterBindSampledImages maxDescriptorSetUpdateAfterBindStorageImages maxDescriptorSetUpdateAfterBindInputAttachments supportedDepthResolveModes supportedStencilResolveModes (bool32ToBool independentResolveNone) (bool32ToBool independentResolve) (bool32ToBool filterMinmaxSingleComponentFormats) (bool32ToBool filterMinmaxImageComponentMapping) maxTimelineSemaphoreValueDifference framebufferIntegerColorSampleCounts
-
-instance Zero PhysicalDeviceVulkan12Properties where
-  zero = PhysicalDeviceVulkan12Properties
-           zero
-           mempty
-           mempty
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12.hs-boot b/src/Graphics/Vulkan/Core12.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12.hs-boot
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12  ( PhysicalDeviceVulkan11Features
-                               , PhysicalDeviceVulkan11Properties
-                               , PhysicalDeviceVulkan12Features
-                               , PhysicalDeviceVulkan12Properties
-                               ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceVulkan11Features
-
-instance ToCStruct PhysicalDeviceVulkan11Features
-instance Show PhysicalDeviceVulkan11Features
-
-instance FromCStruct PhysicalDeviceVulkan11Features
-
-
-data PhysicalDeviceVulkan11Properties
-
-instance ToCStruct PhysicalDeviceVulkan11Properties
-instance Show PhysicalDeviceVulkan11Properties
-
-instance FromCStruct PhysicalDeviceVulkan11Properties
-
-
-data PhysicalDeviceVulkan12Features
-
-instance ToCStruct PhysicalDeviceVulkan12Features
-instance Show PhysicalDeviceVulkan12Features
-
-instance FromCStruct PhysicalDeviceVulkan12Features
-
-
-data PhysicalDeviceVulkan12Properties
-
-instance ToCStruct PhysicalDeviceVulkan12Properties
-instance Show PhysicalDeviceVulkan12Properties
-
-instance FromCStruct PhysicalDeviceVulkan12Properties
-
diff --git a/src/Graphics/Vulkan/Core12/Enums.hs b/src/Graphics/Vulkan/Core12/Enums.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums.hs
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums  ( module Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits
-                                     , module Graphics.Vulkan.Core12.Enums.DriverId
-                                     , module Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits
-                                     , module Graphics.Vulkan.Core12.Enums.SamplerReductionMode
-                                     , module Graphics.Vulkan.Core12.Enums.SemaphoreType
-                                     , module Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits
-                                     , module Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence
-                                     ) where
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits
-import Graphics.Vulkan.Core12.Enums.DriverId
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits
-import Graphics.Vulkan.Core12.Enums.SamplerReductionMode
-import Graphics.Vulkan.Core12.Enums.SemaphoreType
-import Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits
-import Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs b/src/Graphics/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs
+++ /dev/null
@@ -1,115 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits  ( DescriptorBindingFlagBits( DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-                                                                                          , DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT
-                                                                                          , DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT
-                                                                                          , DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
-                                                                                          , ..
-                                                                                          )
-                                                               , DescriptorBindingFlags
-                                                               ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkDescriptorBindingFlagBits - Bitmask specifying descriptor set layout
--- binding properties
---
--- = Description
---
--- Note
---
--- Note that while 'DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' and
--- 'DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT' both involve
--- updates to descriptor sets after they are bound,
--- 'DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT' is a weaker
--- requirement since it is only about descriptors that are not used,
--- whereas 'DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' requires the
--- implementation to observe updates to descriptors that are used.
---
--- = See Also
---
--- 'DescriptorBindingFlags'
-newtype DescriptorBindingFlagBits = DescriptorBindingFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' 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.Extensions.VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplateKHR'
--- and 'Graphics.Vulkan.Core10.DescriptorSet.updateDescriptorSets'.
--- Multiple descriptors with this flag set /can/ be updated concurrently in
--- different threads, though the same descriptor /must/ not be updated
--- concurrently by two threads. Descriptors with this flag set /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.
-pattern DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = DescriptorBindingFlagBits 0x00000001
--- | 'DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT' 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
--- 'DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT' is also set, then descriptors
--- /can/ be updated as long as they are not dynamically used by any shader
--- invocations. If 'DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT' is not set,
--- then descriptors /can/ be updated as long as they are not statically
--- used by any shader invocations.
-pattern DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = DescriptorBindingFlagBits 0x00000002
--- | 'DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT' 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.
-pattern DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = DescriptorBindingFlagBits 0x00000004
--- | 'DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT' 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
--- , except for descriptor bindings with a descriptor type of
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
--- where @descriptorCount@ specifies the upper bound on the byte size of
--- the binding, thus it counts against the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxInlineUniformBlockSize maxInlineUniformBlockSize>
--- limit instead. .
-pattern DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = DescriptorBindingFlagBits 0x00000008
-
-type DescriptorBindingFlags = DescriptorBindingFlagBits
-
-instance Show DescriptorBindingFlagBits where
-  showsPrec p = \case
-    DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT -> showString "DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT"
-    DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT -> showString "DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT"
-    DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT -> showString "DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT"
-    DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT -> showString "DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT"
-    DescriptorBindingFlagBits x -> showParen (p >= 11) (showString "DescriptorBindingFlagBits 0x" . showHex x)
-
-instance Read DescriptorBindingFlagBits where
-  readPrec = parens (choose [("DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", pure DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT)
-                            , ("DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT", pure DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT)
-                            , ("DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT", pure DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT)
-                            , ("DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT", pure DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DescriptorBindingFlagBits")
-                       v <- step readPrec
-                       pure (DescriptorBindingFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs-boot b/src/Graphics/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits  ( DescriptorBindingFlagBits
-                                                               , DescriptorBindingFlags
-                                                               ) where
-
-
-
-data DescriptorBindingFlagBits
-
-type DescriptorBindingFlags = DescriptorBindingFlagBits
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/DriverId.hs b/src/Graphics/Vulkan/Core12/Enums/DriverId.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/DriverId.hs
+++ /dev/null
@@ -1,127 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.DriverId  (DriverId( DRIVER_ID_AMD_PROPRIETARY
-                                                       , DRIVER_ID_AMD_OPEN_SOURCE
-                                                       , DRIVER_ID_MESA_RADV
-                                                       , DRIVER_ID_NVIDIA_PROPRIETARY
-                                                       , DRIVER_ID_INTEL_PROPRIETARY_WINDOWS
-                                                       , DRIVER_ID_INTEL_OPEN_SOURCE_MESA
-                                                       , DRIVER_ID_IMAGINATION_PROPRIETARY
-                                                       , DRIVER_ID_QUALCOMM_PROPRIETARY
-                                                       , DRIVER_ID_ARM_PROPRIETARY
-                                                       , DRIVER_ID_GOOGLE_SWIFTSHADER
-                                                       , DRIVER_ID_GGP_PROPRIETARY
-                                                       , DRIVER_ID_BROADCOM_PROPRIETARY
-                                                       , ..
-                                                       )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkDriverId - Khronos driver IDs
---
--- = Description
---
--- Note
---
--- Khronos driver IDs may be allocated by vendors at any time. There may be
--- multiple driver IDs for the same vendor, representing different drivers
--- (for e.g. different platforms, proprietary or open source, etc.). Only
--- the latest canonical versions of this Specification, of the
--- corresponding @vk.xml@ API Registry, and of the corresponding
--- @vulkan_core.h@ header file /must/ contain all reserved Khronos driver
--- IDs.
---
--- Only driver IDs registered with Khronos are given symbolic names. There
--- /may/ be unregistered driver IDs returned.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Properties'
-newtype DriverId = DriverId Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
--- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
-
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_AMD_PROPRIETARY"
-pattern DRIVER_ID_AMD_PROPRIETARY = DriverId 1
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_AMD_OPEN_SOURCE"
-pattern DRIVER_ID_AMD_OPEN_SOURCE = DriverId 2
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_MESA_RADV"
-pattern DRIVER_ID_MESA_RADV = DriverId 3
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_NVIDIA_PROPRIETARY"
-pattern DRIVER_ID_NVIDIA_PROPRIETARY = DriverId 4
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS"
-pattern DRIVER_ID_INTEL_PROPRIETARY_WINDOWS = DriverId 5
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA"
-pattern DRIVER_ID_INTEL_OPEN_SOURCE_MESA = DriverId 6
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_IMAGINATION_PROPRIETARY"
-pattern DRIVER_ID_IMAGINATION_PROPRIETARY = DriverId 7
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_QUALCOMM_PROPRIETARY"
-pattern DRIVER_ID_QUALCOMM_PROPRIETARY = DriverId 8
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_ARM_PROPRIETARY"
-pattern DRIVER_ID_ARM_PROPRIETARY = DriverId 9
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_GOOGLE_SWIFTSHADER"
-pattern DRIVER_ID_GOOGLE_SWIFTSHADER = DriverId 10
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_GGP_PROPRIETARY"
-pattern DRIVER_ID_GGP_PROPRIETARY = DriverId 11
--- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_BROADCOM_PROPRIETARY"
-pattern DRIVER_ID_BROADCOM_PROPRIETARY = DriverId 12
-{-# complete DRIVER_ID_AMD_PROPRIETARY,
-             DRIVER_ID_AMD_OPEN_SOURCE,
-             DRIVER_ID_MESA_RADV,
-             DRIVER_ID_NVIDIA_PROPRIETARY,
-             DRIVER_ID_INTEL_PROPRIETARY_WINDOWS,
-             DRIVER_ID_INTEL_OPEN_SOURCE_MESA,
-             DRIVER_ID_IMAGINATION_PROPRIETARY,
-             DRIVER_ID_QUALCOMM_PROPRIETARY,
-             DRIVER_ID_ARM_PROPRIETARY,
-             DRIVER_ID_GOOGLE_SWIFTSHADER,
-             DRIVER_ID_GGP_PROPRIETARY,
-             DRIVER_ID_BROADCOM_PROPRIETARY :: DriverId #-}
-
-instance Show DriverId where
-  showsPrec p = \case
-    DRIVER_ID_AMD_PROPRIETARY -> showString "DRIVER_ID_AMD_PROPRIETARY"
-    DRIVER_ID_AMD_OPEN_SOURCE -> showString "DRIVER_ID_AMD_OPEN_SOURCE"
-    DRIVER_ID_MESA_RADV -> showString "DRIVER_ID_MESA_RADV"
-    DRIVER_ID_NVIDIA_PROPRIETARY -> showString "DRIVER_ID_NVIDIA_PROPRIETARY"
-    DRIVER_ID_INTEL_PROPRIETARY_WINDOWS -> showString "DRIVER_ID_INTEL_PROPRIETARY_WINDOWS"
-    DRIVER_ID_INTEL_OPEN_SOURCE_MESA -> showString "DRIVER_ID_INTEL_OPEN_SOURCE_MESA"
-    DRIVER_ID_IMAGINATION_PROPRIETARY -> showString "DRIVER_ID_IMAGINATION_PROPRIETARY"
-    DRIVER_ID_QUALCOMM_PROPRIETARY -> showString "DRIVER_ID_QUALCOMM_PROPRIETARY"
-    DRIVER_ID_ARM_PROPRIETARY -> showString "DRIVER_ID_ARM_PROPRIETARY"
-    DRIVER_ID_GOOGLE_SWIFTSHADER -> showString "DRIVER_ID_GOOGLE_SWIFTSHADER"
-    DRIVER_ID_GGP_PROPRIETARY -> showString "DRIVER_ID_GGP_PROPRIETARY"
-    DRIVER_ID_BROADCOM_PROPRIETARY -> showString "DRIVER_ID_BROADCOM_PROPRIETARY"
-    DriverId x -> showParen (p >= 11) (showString "DriverId " . showsPrec 11 x)
-
-instance Read DriverId where
-  readPrec = parens (choose [("DRIVER_ID_AMD_PROPRIETARY", pure DRIVER_ID_AMD_PROPRIETARY)
-                            , ("DRIVER_ID_AMD_OPEN_SOURCE", pure DRIVER_ID_AMD_OPEN_SOURCE)
-                            , ("DRIVER_ID_MESA_RADV", pure DRIVER_ID_MESA_RADV)
-                            , ("DRIVER_ID_NVIDIA_PROPRIETARY", pure DRIVER_ID_NVIDIA_PROPRIETARY)
-                            , ("DRIVER_ID_INTEL_PROPRIETARY_WINDOWS", pure DRIVER_ID_INTEL_PROPRIETARY_WINDOWS)
-                            , ("DRIVER_ID_INTEL_OPEN_SOURCE_MESA", pure DRIVER_ID_INTEL_OPEN_SOURCE_MESA)
-                            , ("DRIVER_ID_IMAGINATION_PROPRIETARY", pure DRIVER_ID_IMAGINATION_PROPRIETARY)
-                            , ("DRIVER_ID_QUALCOMM_PROPRIETARY", pure DRIVER_ID_QUALCOMM_PROPRIETARY)
-                            , ("DRIVER_ID_ARM_PROPRIETARY", pure DRIVER_ID_ARM_PROPRIETARY)
-                            , ("DRIVER_ID_GOOGLE_SWIFTSHADER", pure DRIVER_ID_GOOGLE_SWIFTSHADER)
-                            , ("DRIVER_ID_GGP_PROPRIETARY", pure DRIVER_ID_GGP_PROPRIETARY)
-                            , ("DRIVER_ID_BROADCOM_PROPRIETARY", pure DRIVER_ID_BROADCOM_PROPRIETARY)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DriverId")
-                       v <- step readPrec
-                       pure (DriverId v)))
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/DriverId.hs-boot b/src/Graphics/Vulkan/Core12/Enums/DriverId.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/DriverId.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.DriverId  (DriverId) where
-
-
-
-data DriverId
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/ResolveModeFlagBits.hs b/src/Graphics/Vulkan/Core12/Enums/ResolveModeFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/ResolveModeFlagBits.hs
+++ /dev/null
@@ -1,74 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits  ( ResolveModeFlagBits( RESOLVE_MODE_NONE
-                                                                              , RESOLVE_MODE_SAMPLE_ZERO_BIT
-                                                                              , RESOLVE_MODE_AVERAGE_BIT
-                                                                              , RESOLVE_MODE_MIN_BIT
-                                                                              , RESOLVE_MODE_MAX_BIT
-                                                                              , ..
-                                                                              )
-                                                         , ResolveModeFlags
-                                                         ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkResolveModeFlagBits - Bitmask indicating supported depth and stencil
--- resolve modes
---
--- = See Also
---
--- 'ResolveModeFlags',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'
-newtype ResolveModeFlagBits = ResolveModeFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'RESOLVE_MODE_NONE' indicates that no resolve operation is done.
-pattern RESOLVE_MODE_NONE = ResolveModeFlagBits 0x00000000
--- | 'RESOLVE_MODE_SAMPLE_ZERO_BIT' indicates that result of the resolve
--- operation is equal to the value of sample 0.
-pattern RESOLVE_MODE_SAMPLE_ZERO_BIT = ResolveModeFlagBits 0x00000001
--- | 'RESOLVE_MODE_AVERAGE_BIT' indicates that result of the resolve
--- operation is the average of the sample values.
-pattern RESOLVE_MODE_AVERAGE_BIT = ResolveModeFlagBits 0x00000002
--- | 'RESOLVE_MODE_MIN_BIT' indicates that result of the resolve operation is
--- the minimum of the sample values.
-pattern RESOLVE_MODE_MIN_BIT = ResolveModeFlagBits 0x00000004
--- | 'RESOLVE_MODE_MAX_BIT' indicates that result of the resolve operation is
--- the maximum of the sample values.
-pattern RESOLVE_MODE_MAX_BIT = ResolveModeFlagBits 0x00000008
-
-type ResolveModeFlags = ResolveModeFlagBits
-
-instance Show ResolveModeFlagBits where
-  showsPrec p = \case
-    RESOLVE_MODE_NONE -> showString "RESOLVE_MODE_NONE"
-    RESOLVE_MODE_SAMPLE_ZERO_BIT -> showString "RESOLVE_MODE_SAMPLE_ZERO_BIT"
-    RESOLVE_MODE_AVERAGE_BIT -> showString "RESOLVE_MODE_AVERAGE_BIT"
-    RESOLVE_MODE_MIN_BIT -> showString "RESOLVE_MODE_MIN_BIT"
-    RESOLVE_MODE_MAX_BIT -> showString "RESOLVE_MODE_MAX_BIT"
-    ResolveModeFlagBits x -> showParen (p >= 11) (showString "ResolveModeFlagBits 0x" . showHex x)
-
-instance Read ResolveModeFlagBits where
-  readPrec = parens (choose [("RESOLVE_MODE_NONE", pure RESOLVE_MODE_NONE)
-                            , ("RESOLVE_MODE_SAMPLE_ZERO_BIT", pure RESOLVE_MODE_SAMPLE_ZERO_BIT)
-                            , ("RESOLVE_MODE_AVERAGE_BIT", pure RESOLVE_MODE_AVERAGE_BIT)
-                            , ("RESOLVE_MODE_MIN_BIT", pure RESOLVE_MODE_MIN_BIT)
-                            , ("RESOLVE_MODE_MAX_BIT", pure RESOLVE_MODE_MAX_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ResolveModeFlagBits")
-                       v <- step readPrec
-                       pure (ResolveModeFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/ResolveModeFlagBits.hs-boot b/src/Graphics/Vulkan/Core12/Enums/ResolveModeFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/ResolveModeFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits  ( ResolveModeFlagBits
-                                                         , ResolveModeFlags
-                                                         ) where
-
-
-
-data ResolveModeFlagBits
-
-type ResolveModeFlags = ResolveModeFlagBits
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/SamplerReductionMode.hs b/src/Graphics/Vulkan/Core12/Enums/SamplerReductionMode.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/SamplerReductionMode.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.SamplerReductionMode  (SamplerReductionMode( SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
-                                                                               , SAMPLER_REDUCTION_MODE_MIN
-                                                                               , SAMPLER_REDUCTION_MODE_MAX
-                                                                               , ..
-                                                                               )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkSamplerReductionMode - Specify reduction mode for texture filtering
---
--- = See Also
---
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'
-newtype SamplerReductionMode = SamplerReductionMode Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE' specifies that texel values
--- are combined by computing a weighted average of values in the footprint,
--- using weights as specified in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-unnormalized-to-integer the image operations chapter>.
-pattern SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE = SamplerReductionMode 0
--- | 'SAMPLER_REDUCTION_MODE_MIN' specifies that texel values are combined by
--- taking the component-wise minimum of values in the footprint with
--- non-zero weights.
-pattern SAMPLER_REDUCTION_MODE_MIN = SamplerReductionMode 1
--- | 'SAMPLER_REDUCTION_MODE_MAX' specifies that texel values are combined by
--- taking the component-wise maximum of values in the footprint with
--- non-zero weights.
-pattern SAMPLER_REDUCTION_MODE_MAX = SamplerReductionMode 2
-{-# complete SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE,
-             SAMPLER_REDUCTION_MODE_MIN,
-             SAMPLER_REDUCTION_MODE_MAX :: SamplerReductionMode #-}
-
-instance Show SamplerReductionMode where
-  showsPrec p = \case
-    SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE -> showString "SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE"
-    SAMPLER_REDUCTION_MODE_MIN -> showString "SAMPLER_REDUCTION_MODE_MIN"
-    SAMPLER_REDUCTION_MODE_MAX -> showString "SAMPLER_REDUCTION_MODE_MAX"
-    SamplerReductionMode x -> showParen (p >= 11) (showString "SamplerReductionMode " . showsPrec 11 x)
-
-instance Read SamplerReductionMode where
-  readPrec = parens (choose [("SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE", pure SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE)
-                            , ("SAMPLER_REDUCTION_MODE_MIN", pure SAMPLER_REDUCTION_MODE_MIN)
-                            , ("SAMPLER_REDUCTION_MODE_MAX", pure SAMPLER_REDUCTION_MODE_MAX)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SamplerReductionMode")
-                       v <- step readPrec
-                       pure (SamplerReductionMode v)))
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/SamplerReductionMode.hs-boot b/src/Graphics/Vulkan/Core12/Enums/SamplerReductionMode.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/SamplerReductionMode.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.SamplerReductionMode  (SamplerReductionMode) where
-
-
-
-data SamplerReductionMode
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/SemaphoreType.hs b/src/Graphics/Vulkan/Core12/Enums/SemaphoreType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/SemaphoreType.hs
+++ /dev/null
@@ -1,57 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.SemaphoreType  (SemaphoreType( SEMAPHORE_TYPE_BINARY
-                                                                 , SEMAPHORE_TYPE_TIMELINE
-                                                                 , ..
-                                                                 )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkSemaphoreType - Sepcifies the type of a semaphore object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'
-newtype SemaphoreType = SemaphoreType Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'SEMAPHORE_TYPE_BINARY' specifies a /binary semaphore/ type that has a
--- boolean payload indicating whether the semaphore is currently signaled
--- or unsignaled. When created, the semaphore is in the unsignaled state.
-pattern SEMAPHORE_TYPE_BINARY = SemaphoreType 0
--- | 'SEMAPHORE_TYPE_TIMELINE' specifies a /timeline semaphore/ type that has
--- a monotonically increasing 64-bit unsigned integer payload indicating
--- whether the semaphore is signaled with respect to a particular reference
--- value. When created, the semaphore payload has the value given by the
--- @initialValue@ field of
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'.
-pattern SEMAPHORE_TYPE_TIMELINE = SemaphoreType 1
-{-# complete SEMAPHORE_TYPE_BINARY,
-             SEMAPHORE_TYPE_TIMELINE :: SemaphoreType #-}
-
-instance Show SemaphoreType where
-  showsPrec p = \case
-    SEMAPHORE_TYPE_BINARY -> showString "SEMAPHORE_TYPE_BINARY"
-    SEMAPHORE_TYPE_TIMELINE -> showString "SEMAPHORE_TYPE_TIMELINE"
-    SemaphoreType x -> showParen (p >= 11) (showString "SemaphoreType " . showsPrec 11 x)
-
-instance Read SemaphoreType where
-  readPrec = parens (choose [("SEMAPHORE_TYPE_BINARY", pure SEMAPHORE_TYPE_BINARY)
-                            , ("SEMAPHORE_TYPE_TIMELINE", pure SEMAPHORE_TYPE_TIMELINE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SemaphoreType")
-                       v <- step readPrec
-                       pure (SemaphoreType v)))
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/SemaphoreType.hs-boot b/src/Graphics/Vulkan/Core12/Enums/SemaphoreType.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/SemaphoreType.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.SemaphoreType  (SemaphoreType) where
-
-
-
-data SemaphoreType
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs b/src/Graphics/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits  ( SemaphoreWaitFlagBits( SEMAPHORE_WAIT_ANY_BIT
-                                                                                  , ..
-                                                                                  )
-                                                           , SemaphoreWaitFlags
-                                                           ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Foreign.Storable (Storable)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Zero (Zero)
--- | VkSemaphoreWaitFlagBits - Bitmask specifying additional parameters of a
--- semaphore wait operation
---
--- = See Also
---
--- 'SemaphoreWaitFlags'
-newtype SemaphoreWaitFlagBits = SemaphoreWaitFlagBits Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SEMAPHORE_WAIT_ANY_BIT' specifies that the semaphore wait condition is
--- that at least one of the semaphores in
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo'::@pSemaphores@
--- has reached the value specified by the corresponding element of
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo'::@pValues@.
--- If 'SEMAPHORE_WAIT_ANY_BIT' is not set, the semaphore wait condition is
--- that all of the semaphores in
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo'::@pSemaphores@
--- have reached the value specified by the corresponding element of
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo'::@pValues@.
-pattern SEMAPHORE_WAIT_ANY_BIT = SemaphoreWaitFlagBits 0x00000001
-
-type SemaphoreWaitFlags = SemaphoreWaitFlagBits
-
-instance Show SemaphoreWaitFlagBits where
-  showsPrec p = \case
-    SEMAPHORE_WAIT_ANY_BIT -> showString "SEMAPHORE_WAIT_ANY_BIT"
-    SemaphoreWaitFlagBits x -> showParen (p >= 11) (showString "SemaphoreWaitFlagBits 0x" . showHex x)
-
-instance Read SemaphoreWaitFlagBits where
-  readPrec = parens (choose [("SEMAPHORE_WAIT_ANY_BIT", pure SEMAPHORE_WAIT_ANY_BIT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SemaphoreWaitFlagBits")
-                       v <- step readPrec
-                       pure (SemaphoreWaitFlagBits v)))
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs-boot b/src/Graphics/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits  ( SemaphoreWaitFlagBits
-                                                           , SemaphoreWaitFlags
-                                                           ) where
-
-
-
-data SemaphoreWaitFlagBits
-
-type SemaphoreWaitFlags = SemaphoreWaitFlagBits
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs b/src/Graphics/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs
+++ /dev/null
@@ -1,62 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence  (ShaderFloatControlsIndependence( SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY
-                                                                                                     , SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
-                                                                                                     , SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE
-                                                                                                     , ..
-                                                                                                     )) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- | VkShaderFloatControlsIndependence - Enum specifying whether, and how,
--- shader float controls can be set separately
---
--- = See Also
---
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Properties'
-newtype ShaderFloatControlsIndependence = ShaderFloatControlsIndependence Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY' specifies that shader
--- float controls for 32-bit floating point /can/ be set independently;
--- other bit widths /must/ be set identically to each other.
-pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = ShaderFloatControlsIndependence 0
--- | 'SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL' specifies that shader float
--- controls for all bit widths /can/ be set independently.
-pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = ShaderFloatControlsIndependence 1
--- | 'SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE' specifies that shader float
--- controls for all bit widths /must/ be set identically.
-pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = ShaderFloatControlsIndependence 2
-{-# complete SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY,
-             SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL,
-             SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE :: ShaderFloatControlsIndependence #-}
-
-instance Show ShaderFloatControlsIndependence where
-  showsPrec p = \case
-    SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY -> showString "SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY"
-    SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL -> showString "SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL"
-    SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE -> showString "SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE"
-    ShaderFloatControlsIndependence x -> showParen (p >= 11) (showString "ShaderFloatControlsIndependence " . showsPrec 11 x)
-
-instance Read ShaderFloatControlsIndependence where
-  readPrec = parens (choose [("SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY", pure SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY)
-                            , ("SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL", pure SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL)
-                            , ("SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE", pure SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ShaderFloatControlsIndependence")
-                       v <- step readPrec
-                       pure (ShaderFloatControlsIndependence v)))
-
diff --git a/src/Graphics/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs-boot b/src/Graphics/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs-boot
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence  (ShaderFloatControlsIndependence) where
-
-
-
-data ShaderFloatControlsIndependence
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs
+++ /dev/null
@@ -1,987 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing  ( PhysicalDeviceDescriptorIndexingFeatures(..)
-                                                                        , PhysicalDeviceDescriptorIndexingProperties(..)
-                                                                        , DescriptorSetLayoutBindingFlagsCreateInfo(..)
-                                                                        , DescriptorSetVariableDescriptorCountAllocateInfo(..)
-                                                                        , DescriptorSetVariableDescriptorCountLayoutSupport(..)
-                                                                        , StructureType(..)
-                                                                        , Result(..)
-                                                                        , DescriptorPoolCreateFlagBits(..)
-                                                                        , DescriptorPoolCreateFlags
-                                                                        , DescriptorSetLayoutCreateFlagBits(..)
-                                                                        , DescriptorSetLayoutCreateFlags
-                                                                        , DescriptorBindingFlagBits(..)
-                                                                        , DescriptorBindingFlags
-                                                                        ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Utils (maybePeek)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.Either (Either)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES))
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits(..))
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
-import Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits (DescriptorPoolCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits (DescriptorPoolCreateFlags)
-import Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits (DescriptorSetLayoutCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits (DescriptorSetLayoutCreateFlags)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceDescriptorIndexingFeatures - Structure describing
--- descriptor indexing features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceDescriptorIndexingFeatures' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceDescriptorIndexingFeatures' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceDescriptorIndexingFeatures' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceDescriptorIndexingFeatures = PhysicalDeviceDescriptorIndexingFeatures
-  { -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 @InputAttachmentArrayDynamicIndexing@ capability.
-    shaderInputAttachmentArrayDynamicIndexing :: Bool
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 @UniformTexelBufferArrayDynamicIndexing@ capability.
-    shaderUniformTexelBufferArrayDynamicIndexing :: Bool
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 @StorageTexelBufferArrayDynamicIndexing@ capability.
-    shaderStorageTexelBufferArrayDynamicIndexing :: Bool
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 @UniformBufferArrayNonUniformIndexing@ capability.
-    shaderUniformBufferArrayNonUniformIndexing :: Bool
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 @SampledImageArrayNonUniformIndexing@ capability.
-    shaderSampledImageArrayNonUniformIndexing :: Bool
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 @StorageBufferArrayNonUniformIndexing@ capability.
-    shaderStorageBufferArrayNonUniformIndexing :: Bool
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 @StorageImageArrayNonUniformIndexing@ capability.
-    shaderStorageImageArrayNonUniformIndexing :: Bool
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 @InputAttachmentArrayNonUniformIndexing@ capability.
-    shaderInputAttachmentArrayNonUniformIndexing :: Bool
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 @UniformTexelBufferArrayNonUniformIndexing@
-    -- capability.
-    shaderUniformTexelBufferArrayNonUniformIndexing :: Bool
-  , -- | @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
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 @StorageTexelBufferArrayNonUniformIndexing@
-    -- capability.
-    shaderStorageTexelBufferArrayNonUniformIndexing :: Bool
-  , -- | @descriptorBindingUniformBufferUpdateAfterBind@ indicates whether the
-    -- implementation supports updating uniform buffer descriptors after a set
-    -- is bound. If this feature is not enabled,
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
-    -- /must/ not be used with
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'.
-    descriptorBindingUniformBufferUpdateAfterBind :: Bool
-  , -- | @descriptorBindingSampledImageUpdateAfterBind@ indicates whether the
-    -- implementation supports updating sampled image descriptors after a set
-    -- is bound. If this feature is not enabled,
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
-    -- /must/ not be used with
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'.
-    descriptorBindingSampledImageUpdateAfterBind :: Bool
-  , -- | @descriptorBindingStorageImageUpdateAfterBind@ indicates whether the
-    -- implementation supports updating storage image descriptors after a set
-    -- is bound. If this feature is not enabled,
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
-    -- /must/ not be used with
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'.
-    descriptorBindingStorageImageUpdateAfterBind :: Bool
-  , -- | @descriptorBindingStorageBufferUpdateAfterBind@ indicates whether the
-    -- implementation supports updating storage buffer descriptors after a set
-    -- is bound. If this feature is not enabled,
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
-    -- /must/ not be used with
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'.
-    descriptorBindingStorageBufferUpdateAfterBind :: Bool
-  , -- | @descriptorBindingUniformTexelBufferUpdateAfterBind@ indicates whether
-    -- the implementation supports updating uniform texel buffer descriptors
-    -- after a set is bound. If this feature is not enabled,
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
-    -- /must/ not be used with
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'.
-    descriptorBindingUniformTexelBufferUpdateAfterBind :: Bool
-  , -- | @descriptorBindingStorageTexelBufferUpdateAfterBind@ indicates whether
-    -- the implementation supports updating storage texel buffer descriptors
-    -- after a set is bound. If this feature is not enabled,
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
-    -- /must/ not be used with
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'.
-    descriptorBindingStorageTexelBufferUpdateAfterBind :: Bool
-  , -- | @descriptorBindingUpdateUnusedWhilePending@ indicates whether the
-    -- implementation supports updating descriptors while the set is in use. If
-    -- this feature is not enabled,
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'
-    -- /must/ not be used.
-    descriptorBindingUpdateUnusedWhilePending :: Bool
-  , -- | @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,
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'
-    -- /must/ not be used.
-    descriptorBindingPartiallyBound :: Bool
-  , -- | @descriptorBindingVariableDescriptorCount@ indicates whether the
-    -- implementation supports descriptor sets with a variable-sized last
-    -- binding. If this feature is not enabled,
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT'
-    -- /must/ not be used.
-    descriptorBindingVariableDescriptorCount :: Bool
-  , -- | @runtimeDescriptorArray@ indicates whether the implementation supports
-    -- the SPIR-V @RuntimeDescriptorArray@ capability. If this feature is not
-    -- enabled, descriptors /must/ not be declared in runtime arrays.
-    runtimeDescriptorArray :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceDescriptorIndexingFeatures
-
-instance ToCStruct PhysicalDeviceDescriptorIndexingFeatures where
-  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceDescriptorIndexingFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayDynamicIndexing))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderUniformTexelBufferArrayDynamicIndexing))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (shaderStorageTexelBufferArrayDynamicIndexing))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayNonUniformIndexing))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayNonUniformIndexing))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayNonUniformIndexing))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayNonUniformIndexing))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayNonUniformIndexing))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (shaderUniformTexelBufferArrayNonUniformIndexing))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (shaderStorageTexelBufferArrayNonUniformIndexing))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUniformBufferUpdateAfterBind))
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (descriptorBindingSampledImageUpdateAfterBind))
-    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageImageUpdateAfterBind))
-    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageBufferUpdateAfterBind))
-    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUniformTexelBufferUpdateAfterBind))
-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageTexelBufferUpdateAfterBind))
-    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUpdateUnusedWhilePending))
-    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (descriptorBindingPartiallyBound))
-    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (descriptorBindingVariableDescriptorCount))
-    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (runtimeDescriptorArray))
-    f
-  cStructSize = 96
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceDescriptorIndexingFeatures where
-  peekCStruct p = do
-    shaderInputAttachmentArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    shaderUniformTexelBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    shaderStorageTexelBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    shaderUniformBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    shaderSampledImageArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    shaderStorageBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    shaderStorageImageArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    shaderInputAttachmentArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    shaderUniformTexelBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
-    shaderStorageTexelBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
-    descriptorBindingUniformBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
-    descriptorBindingSampledImageUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
-    descriptorBindingStorageImageUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))
-    descriptorBindingStorageBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))
-    descriptorBindingUniformTexelBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))
-    descriptorBindingStorageTexelBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
-    descriptorBindingUpdateUnusedWhilePending <- peek @Bool32 ((p `plusPtr` 80 :: Ptr Bool32))
-    descriptorBindingPartiallyBound <- peek @Bool32 ((p `plusPtr` 84 :: Ptr Bool32))
-    descriptorBindingVariableDescriptorCount <- peek @Bool32 ((p `plusPtr` 88 :: Ptr Bool32))
-    runtimeDescriptorArray <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))
-    pure $ PhysicalDeviceDescriptorIndexingFeatures
-             (bool32ToBool shaderInputAttachmentArrayDynamicIndexing) (bool32ToBool shaderUniformTexelBufferArrayDynamicIndexing) (bool32ToBool shaderStorageTexelBufferArrayDynamicIndexing) (bool32ToBool shaderUniformBufferArrayNonUniformIndexing) (bool32ToBool shaderSampledImageArrayNonUniformIndexing) (bool32ToBool shaderStorageBufferArrayNonUniformIndexing) (bool32ToBool shaderStorageImageArrayNonUniformIndexing) (bool32ToBool shaderInputAttachmentArrayNonUniformIndexing) (bool32ToBool shaderUniformTexelBufferArrayNonUniformIndexing) (bool32ToBool shaderStorageTexelBufferArrayNonUniformIndexing) (bool32ToBool descriptorBindingUniformBufferUpdateAfterBind) (bool32ToBool descriptorBindingSampledImageUpdateAfterBind) (bool32ToBool descriptorBindingStorageImageUpdateAfterBind) (bool32ToBool descriptorBindingStorageBufferUpdateAfterBind) (bool32ToBool descriptorBindingUniformTexelBufferUpdateAfterBind) (bool32ToBool descriptorBindingStorageTexelBufferUpdateAfterBind) (bool32ToBool descriptorBindingUpdateUnusedWhilePending) (bool32ToBool descriptorBindingPartiallyBound) (bool32ToBool descriptorBindingVariableDescriptorCount) (bool32ToBool runtimeDescriptorArray)
-
-instance Storable PhysicalDeviceDescriptorIndexingFeatures where
-  sizeOf ~_ = 96
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceDescriptorIndexingFeatures where
-  zero = PhysicalDeviceDescriptorIndexingFeatures
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceDescriptorIndexingProperties - Structure describing
--- descriptor indexing properties that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceDescriptorIndexingProperties'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceDescriptorIndexingProperties' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceDescriptorIndexingProperties = PhysicalDeviceDescriptorIndexingProperties
-  { -- | @maxUpdateAfterBindDescriptorsInAllPools@ is the maximum number of
-    -- descriptors (summed over all descriptor types) that /can/ be created
-    -- across all pools that are created with the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
-    -- bit set. Pool creation /may/ fail when this limit is exceeded, or when
-    -- the space this limit represents is unable to satisfy a pool creation due
-    -- to fragmentation.
-    maxUpdateAfterBindDescriptorsInAllPools :: Word32
-  , -- | @shaderUniformBufferArrayNonUniformIndexingNative@ is a boolean value
-    -- indicating whether uniform buffer descriptors natively support
-    -- nonuniform indexing. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- then a single dynamic instance of an instruction that nonuniformly
-    -- indexes an array of uniform buffers /may/ execute multiple times in
-    -- order to access all the descriptors.
-    shaderUniformBufferArrayNonUniformIndexingNative :: Bool
-  , -- | @shaderSampledImageArrayNonUniformIndexingNative@ is a boolean value
-    -- indicating whether sampler and image descriptors natively support
-    -- nonuniform indexing. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- then a single dynamic instance of an instruction that nonuniformly
-    -- indexes an array of samplers or images /may/ execute multiple times in
-    -- order to access all the descriptors.
-    shaderSampledImageArrayNonUniformIndexingNative :: Bool
-  , -- | @shaderStorageBufferArrayNonUniformIndexingNative@ is a boolean value
-    -- indicating whether storage buffer descriptors natively support
-    -- nonuniform indexing. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- then a single dynamic instance of an instruction that nonuniformly
-    -- indexes an array of storage buffers /may/ execute multiple times in
-    -- order to access all the descriptors.
-    shaderStorageBufferArrayNonUniformIndexingNative :: Bool
-  , -- | @shaderStorageImageArrayNonUniformIndexingNative@ is a boolean value
-    -- indicating whether storage image descriptors natively support nonuniform
-    -- indexing. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE', then a
-    -- single dynamic instance of an instruction that nonuniformly indexes an
-    -- array of storage images /may/ execute multiple times in order to access
-    -- all the descriptors.
-    shaderStorageImageArrayNonUniformIndexingNative :: Bool
-  , -- | @shaderInputAttachmentArrayNonUniformIndexingNative@ is a boolean value
-    -- indicating whether input attachment descriptors natively support
-    -- nonuniform indexing. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE',
-    -- then a single dynamic instance of an instruction that nonuniformly
-    -- indexes an array of input attachments /may/ execute multiple times in
-    -- order to access all the descriptors.
-    shaderInputAttachmentArrayNonUniformIndexingNative :: Bool
-  , -- | @robustBufferAccessUpdateAfterBind@ is a boolean value indicating
-    -- whether
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
-    -- /can/ be enabled in a device simultaneously with
-    -- @descriptorBindingUniformBufferUpdateAfterBind@,
-    -- @descriptorBindingStorageBufferUpdateAfterBind@,
-    -- @descriptorBindingUniformTexelBufferUpdateAfterBind@, and\/or
-    -- @descriptorBindingStorageTexelBufferUpdateAfterBind@. If this is
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', then either
-    -- @robustBufferAccess@ /must/ be disabled or all of these
-    -- update-after-bind features /must/ be disabled.
-    robustBufferAccessUpdateAfterBind :: Bool
-  , -- | @quadDivergentImplicitLod@ is a boolean value indicating whether
-    -- implicit level of detail calculations for image operations have
-    -- well-defined results when the image and\/or sampler objects used for the
-    -- instruction are not uniform within a quad. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-derivative-image-operations Derivative Image Operations>.
-    quadDivergentImplicitLod :: Bool
-  , -- | @maxPerStageDescriptorUpdateAfterBindSamplers@ is similar to
-    -- @maxPerStageDescriptorSamplers@ but counts descriptors from descriptor
-    -- sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindSamplers :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindUniformBuffers@ is similar to
-    -- @maxPerStageDescriptorUniformBuffers@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindUniformBuffers :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindStorageBuffers@ is similar to
-    -- @maxPerStageDescriptorStorageBuffers@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindStorageBuffers :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindSampledImages@ is similar to
-    -- @maxPerStageDescriptorSampledImages@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindSampledImages :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindStorageImages@ is similar to
-    -- @maxPerStageDescriptorStorageImages@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindStorageImages :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindInputAttachments@ is similar to
-    -- @maxPerStageDescriptorInputAttachments@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindInputAttachments :: Word32
-  , -- | @maxPerStageUpdateAfterBindResources@ is similar to
-    -- @maxPerStageResources@ but counts descriptors from descriptor sets
-    -- created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageUpdateAfterBindResources :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindSamplers@ is similar to
-    -- @maxDescriptorSetSamplers@ but counts descriptors from descriptor sets
-    -- created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindSamplers :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffers@ is similar to
-    -- @maxDescriptorSetUniformBuffers@ but counts descriptors from descriptor
-    -- sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindUniformBuffers :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@ is similar to
-    -- @maxDescriptorSetUniformBuffersDynamic@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffers@ is similar to
-    -- @maxDescriptorSetStorageBuffers@ but counts descriptors from descriptor
-    -- sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindStorageBuffers :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@ is similar to
-    -- @maxDescriptorSetStorageBuffersDynamic@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindSampledImages@ is similar to
-    -- @maxDescriptorSetSampledImages@ but counts descriptors from descriptor
-    -- sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindSampledImages :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindStorageImages@ is similar to
-    -- @maxDescriptorSetStorageImages@ but counts descriptors from descriptor
-    -- sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindStorageImages :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindInputAttachments@ is similar to
-    -- @maxDescriptorSetInputAttachments@ but counts descriptors from
-    -- descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindInputAttachments :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceDescriptorIndexingProperties
-
-instance ToCStruct PhysicalDeviceDescriptorIndexingProperties where
-  withCStruct x f = allocaBytesAligned 112 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceDescriptorIndexingProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxUpdateAfterBindDescriptorsInAllPools)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayNonUniformIndexingNative))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayNonUniformIndexingNative))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayNonUniformIndexingNative))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayNonUniformIndexingNative))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayNonUniformIndexingNative))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (robustBufferAccessUpdateAfterBind))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (quadDivergentImplicitLod))
-    poke ((p `plusPtr` 48 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindSamplers)
-    poke ((p `plusPtr` 52 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindUniformBuffers)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindStorageBuffers)
-    poke ((p `plusPtr` 60 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindSampledImages)
-    poke ((p `plusPtr` 64 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindStorageImages)
-    poke ((p `plusPtr` 68 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindInputAttachments)
-    poke ((p `plusPtr` 72 :: Ptr Word32)) (maxPerStageUpdateAfterBindResources)
-    poke ((p `plusPtr` 76 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindSamplers)
-    poke ((p `plusPtr` 80 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindUniformBuffers)
-    poke ((p `plusPtr` 84 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindUniformBuffersDynamic)
-    poke ((p `plusPtr` 88 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageBuffers)
-    poke ((p `plusPtr` 92 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageBuffersDynamic)
-    poke ((p `plusPtr` 96 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindSampledImages)
-    poke ((p `plusPtr` 100 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageImages)
-    poke ((p `plusPtr` 104 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindInputAttachments)
-    f
-  cStructSize = 112
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 60 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 68 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 72 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 76 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 80 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 84 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 88 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 92 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 96 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 100 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 104 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceDescriptorIndexingProperties where
-  peekCStruct p = do
-    maxUpdateAfterBindDescriptorsInAllPools <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    shaderUniformBufferArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    shaderSampledImageArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    shaderStorageBufferArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    shaderStorageImageArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    shaderInputAttachmentArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    robustBufferAccessUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    quadDivergentImplicitLod <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    maxPerStageDescriptorUpdateAfterBindSamplers <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindUniformBuffers <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindStorageBuffers <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindSampledImages <- peek @Word32 ((p `plusPtr` 60 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindStorageImages <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindInputAttachments <- peek @Word32 ((p `plusPtr` 68 :: Ptr Word32))
-    maxPerStageUpdateAfterBindResources <- peek @Word32 ((p `plusPtr` 72 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindSamplers <- peek @Word32 ((p `plusPtr` 76 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindUniformBuffers <- peek @Word32 ((p `plusPtr` 80 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic <- peek @Word32 ((p `plusPtr` 84 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindStorageBuffers <- peek @Word32 ((p `plusPtr` 88 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic <- peek @Word32 ((p `plusPtr` 92 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindSampledImages <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindStorageImages <- peek @Word32 ((p `plusPtr` 100 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindInputAttachments <- peek @Word32 ((p `plusPtr` 104 :: Ptr Word32))
-    pure $ PhysicalDeviceDescriptorIndexingProperties
-             maxUpdateAfterBindDescriptorsInAllPools (bool32ToBool shaderUniformBufferArrayNonUniformIndexingNative) (bool32ToBool shaderSampledImageArrayNonUniformIndexingNative) (bool32ToBool shaderStorageBufferArrayNonUniformIndexingNative) (bool32ToBool shaderStorageImageArrayNonUniformIndexingNative) (bool32ToBool shaderInputAttachmentArrayNonUniformIndexingNative) (bool32ToBool robustBufferAccessUpdateAfterBind) (bool32ToBool quadDivergentImplicitLod) maxPerStageDescriptorUpdateAfterBindSamplers maxPerStageDescriptorUpdateAfterBindUniformBuffers maxPerStageDescriptorUpdateAfterBindStorageBuffers maxPerStageDescriptorUpdateAfterBindSampledImages maxPerStageDescriptorUpdateAfterBindStorageImages maxPerStageDescriptorUpdateAfterBindInputAttachments maxPerStageUpdateAfterBindResources maxDescriptorSetUpdateAfterBindSamplers maxDescriptorSetUpdateAfterBindUniformBuffers maxDescriptorSetUpdateAfterBindUniformBuffersDynamic maxDescriptorSetUpdateAfterBindStorageBuffers maxDescriptorSetUpdateAfterBindStorageBuffersDynamic maxDescriptorSetUpdateAfterBindSampledImages maxDescriptorSetUpdateAfterBindStorageImages maxDescriptorSetUpdateAfterBindInputAttachments
-
-instance Storable PhysicalDeviceDescriptorIndexingProperties where
-  sizeOf ~_ = 112
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceDescriptorIndexingProperties where
-  zero = PhysicalDeviceDescriptorIndexingProperties
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDescriptorSetLayoutBindingFlagsCreateInfo - Structure specifying
--- creation flags for descriptor set layout bindings
---
--- = Description
---
--- If @bindingCount@ is zero or if this structure is not included in the
--- @pNext@ chain, the
--- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlags'
--- for each descriptor set layout binding is considered to be zero.
--- Otherwise, the descriptor set layout binding at
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@pBindings@[i]
--- uses the flags in @pBindingFlags@[i].
---
--- == Valid Usage
---
--- -   If @bindingCount@ is not zero, @bindingCount@ /must/ equal
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@bindingCount@
---
--- -   If
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@flags@
---     includes
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR',
---     then all elements of @pBindingFlags@ /must/ not include
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT',
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT',
---     or
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT'
---
--- -   If an element of @pBindingFlags@ includes
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT',
---     then all other elements of
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@pBindings@
---     /must/ have a smaller value of @binding@
---
--- -   If
---     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingUniformBufferUpdateAfterBind@
---     is not enabled, all bindings with descriptor type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
---     /must/ not use
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---
--- -   If
---     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingSampledImageUpdateAfterBind@
---     is not enabled, all bindings with descriptor type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
---     /must/ not use
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---
--- -   If
---     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingStorageImageUpdateAfterBind@
---     is not enabled, all bindings with descriptor type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'
---     /must/ not use
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---
--- -   If
---     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingStorageBufferUpdateAfterBind@
---     is not enabled, all bindings with descriptor type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
---     /must/ not use
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---
--- -   If
---     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingUniformTexelBufferUpdateAfterBind@
---     is not enabled, all bindings with descriptor type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
---     /must/ not use
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---
--- -   If
---     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingStorageTexelBufferUpdateAfterBind@
---     is not enabled, all bindings with descriptor type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
---     /must/ not use
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---
--- -   If
---     'Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT'::@descriptorBindingInlineUniformBlockUpdateAfterBind@
---     is not enabled, all bindings with descriptor type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
---     /must/ not use
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---
--- -   All bindings with descriptor type
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
---     /must/ not use
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
---
--- -   If
---     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingUpdateUnusedWhilePending@
---     is not enabled, all elements of @pBindingFlags@ /must/ not include
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'
---
--- -   If
---     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingPartiallyBound@
---     is not enabled, all elements of @pBindingFlags@ /must/ not include
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'
---
--- -   If
---     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingVariableDescriptorCount@
---     is not enabled, all elements of @pBindingFlags@ /must/ not include
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT'
---
--- -   If an element of @pBindingFlags@ includes
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT',
---     that element’s @descriptorType@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO'
---
--- -   If @bindingCount@ is not @0@, and @pBindingFlags@ is not @NULL@,
---     @pBindingFlags@ /must/ be a valid pointer to an array of
---     @bindingCount@ valid combinations of
---     'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DescriptorSetLayoutBindingFlagsCreateInfo = DescriptorSetLayoutBindingFlagsCreateInfo
-  { -- | @pBindingFlags@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlags'
-    -- bitfields, one for each descriptor set layout binding.
-    bindingFlags :: Either Word32 (Vector DescriptorBindingFlags) }
-  deriving (Typeable)
-deriving instance Show DescriptorSetLayoutBindingFlagsCreateInfo
-
-instance ToCStruct DescriptorSetLayoutBindingFlagsCreateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorSetLayoutBindingFlagsCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (bindingFlags)) :: Word32))
-    pBindingFlags'' <- case (bindingFlags) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPBindingFlags' <- ContT $ allocaBytesAligned @DescriptorBindingFlags ((Data.Vector.length (v)) * 4) 4
-        lift $ Data.Vector.imapM_ (\i e -> poke (pPBindingFlags' `plusPtr` (4 * (i)) :: Ptr DescriptorBindingFlags) (e)) (v)
-        pure $ pPBindingFlags'
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorBindingFlags))) pBindingFlags''
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct DescriptorSetLayoutBindingFlagsCreateInfo where
-  peekCStruct p = do
-    bindingCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pBindingFlags <- peek @(Ptr DescriptorBindingFlags) ((p `plusPtr` 24 :: Ptr (Ptr DescriptorBindingFlags)))
-    pBindingFlags' <- maybePeek (\j -> generateM (fromIntegral bindingCount) (\i -> peek @DescriptorBindingFlags (((j) `advancePtrBytes` (4 * (i)) :: Ptr DescriptorBindingFlags)))) pBindingFlags
-    let pBindingFlags'' = maybe (Left bindingCount) Right pBindingFlags'
-    pure $ DescriptorSetLayoutBindingFlagsCreateInfo
-             pBindingFlags''
-
-instance Zero DescriptorSetLayoutBindingFlagsCreateInfo where
-  zero = DescriptorSetLayoutBindingFlagsCreateInfo
-           (Left 0)
-
-
--- | VkDescriptorSetVariableDescriptorCountAllocateInfo - Structure
--- specifying additional allocation parameters for descriptor sets
---
--- = 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 the variable count descriptor binding in the corresponding
--- descriptor set layout has a descriptor type of
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
--- then @pDescriptorCounts@[i] specifies the binding’s capacity in bytes.
--- If
--- 'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo'::@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.DescriptorSetAllocateInfo'::@descriptorSetCount@
---
--- -   If
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo'::@pSetLayouts@[i]
---     has a variable descriptor count binding, then @pDescriptorCounts@[i]
---     /must/ be less than or equal to the descriptor count specified for
---     that binding when the descriptor set layout was created
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO'
---
--- -   If @descriptorSetCount@ is not @0@, @pDescriptorCounts@ /must/ be a
---     valid pointer to an array of @descriptorSetCount@ @uint32_t@ values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DescriptorSetVariableDescriptorCountAllocateInfo = DescriptorSetVariableDescriptorCountAllocateInfo
-  { -- | @pDescriptorCounts@ is a pointer to an array of descriptor counts, with
-    -- each member specifying the number of descriptors in a variable
-    -- descriptor count binding in the corresponding descriptor set being
-    -- allocated.
-    descriptorCounts :: Vector Word32 }
-  deriving (Typeable)
-deriving instance Show DescriptorSetVariableDescriptorCountAllocateInfo
-
-instance ToCStruct DescriptorSetVariableDescriptorCountAllocateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorSetVariableDescriptorCountAllocateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (descriptorCounts)) :: Word32))
-    pPDescriptorCounts' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (descriptorCounts)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorCounts' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (descriptorCounts)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDescriptorCounts')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPDescriptorCounts' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorCounts' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDescriptorCounts')
-    lift $ f
-
-instance FromCStruct DescriptorSetVariableDescriptorCountAllocateInfo where
-  peekCStruct p = do
-    descriptorSetCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pDescriptorCounts <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
-    pDescriptorCounts' <- generateM (fromIntegral descriptorSetCount) (\i -> peek @Word32 ((pDescriptorCounts `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ DescriptorSetVariableDescriptorCountAllocateInfo
-             pDescriptorCounts'
-
-instance Zero DescriptorSetVariableDescriptorCountAllocateInfo where
-  zero = DescriptorSetVariableDescriptorCountAllocateInfo
-           mempty
-
-
--- | VkDescriptorSetVariableDescriptorCountLayoutSupport - Structure
--- returning information about whether a descriptor set layout can be
--- supported
---
--- = 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
--- 'PhysicalDeviceDescriptorIndexingFeatures'::@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)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DescriptorSetVariableDescriptorCountLayoutSupport = DescriptorSetVariableDescriptorCountLayoutSupport
-  { -- | @maxVariableDescriptorCount@ indicates the maximum number of descriptors
-    -- supported in the highest numbered binding of the layout, if that binding
-    -- is variable-sized. If the highest numbered binding of the layout has a
-    -- descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- then @maxVariableDescriptorCount@ indicates the maximum byte size
-    -- supported for the binding, if that binding is variable-sized.
-    maxVariableDescriptorCount :: Word32 }
-  deriving (Typeable)
-deriving instance Show DescriptorSetVariableDescriptorCountLayoutSupport
-
-instance ToCStruct DescriptorSetVariableDescriptorCountLayoutSupport where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorSetVariableDescriptorCountLayoutSupport{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxVariableDescriptorCount)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DescriptorSetVariableDescriptorCountLayoutSupport where
-  peekCStruct p = do
-    maxVariableDescriptorCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ DescriptorSetVariableDescriptorCountLayoutSupport
-             maxVariableDescriptorCount
-
-instance Storable DescriptorSetVariableDescriptorCountLayoutSupport where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DescriptorSetVariableDescriptorCountLayoutSupport where
-  zero = DescriptorSetVariableDescriptorCountLayoutSupport
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs-boot
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing  ( DescriptorSetLayoutBindingFlagsCreateInfo
-                                                                        , DescriptorSetVariableDescriptorCountAllocateInfo
-                                                                        , DescriptorSetVariableDescriptorCountLayoutSupport
-                                                                        , PhysicalDeviceDescriptorIndexingFeatures
-                                                                        , PhysicalDeviceDescriptorIndexingProperties
-                                                                        ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DescriptorSetLayoutBindingFlagsCreateInfo
-
-instance ToCStruct DescriptorSetLayoutBindingFlagsCreateInfo
-instance Show DescriptorSetLayoutBindingFlagsCreateInfo
-
-instance FromCStruct DescriptorSetLayoutBindingFlagsCreateInfo
-
-
-data DescriptorSetVariableDescriptorCountAllocateInfo
-
-instance ToCStruct DescriptorSetVariableDescriptorCountAllocateInfo
-instance Show DescriptorSetVariableDescriptorCountAllocateInfo
-
-instance FromCStruct DescriptorSetVariableDescriptorCountAllocateInfo
-
-
-data DescriptorSetVariableDescriptorCountLayoutSupport
-
-instance ToCStruct DescriptorSetVariableDescriptorCountLayoutSupport
-instance Show DescriptorSetVariableDescriptorCountLayoutSupport
-
-instance FromCStruct DescriptorSetVariableDescriptorCountLayoutSupport
-
-
-data PhysicalDeviceDescriptorIndexingFeatures
-
-instance ToCStruct PhysicalDeviceDescriptorIndexingFeatures
-instance Show PhysicalDeviceDescriptorIndexingFeatures
-
-instance FromCStruct PhysicalDeviceDescriptorIndexingFeatures
-
-
-data PhysicalDeviceDescriptorIndexingProperties
-
-instance ToCStruct PhysicalDeviceDescriptorIndexingProperties
-instance Show PhysicalDeviceDescriptorIndexingProperties
-
-instance FromCStruct PhysicalDeviceDescriptorIndexingProperties
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs
+++ /dev/null
@@ -1,172 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset  ( resetQueryPool
-                                                                     , PhysicalDeviceHostQueryResetFeatures(..)
-                                                                     , StructureType(..)
-                                                                     ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkResetQueryPool))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (QueryPool)
-import Graphics.Vulkan.Core10.Handles (QueryPool(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkResetQueryPool
-  :: FunPtr (Ptr Device_T -> QueryPool -> Word32 -> Word32 -> IO ()) -> Ptr Device_T -> QueryPool -> Word32 -> Word32 -> IO ()
-
--- | vkResetQueryPool - Reset queries in a query pool
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the query pool.
---
--- -   @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
---
--- This command sets the status of query indices [@firstQuery@,
--- @firstQuery@ + @queryCount@ - 1] to unavailable.
---
--- If @queryPool@ is
--- 'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
--- this command sets the status of query indices [@firstQuery@,
--- @firstQuery@ + @queryCount@ - 1] to unavailable for each pass.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-hostQueryReset hostQueryReset>
---     feature /must/ be enabled
---
--- -   @firstQuery@ /must/ be less than the number of queries in
---     @queryPool@
---
--- -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or
---     equal to the number of queries in @queryPool@
---
--- -   Submitted commands that refer to the range specified by @firstQuery@
---     and @queryCount@ in @queryPool@ /must/ have completed execution
---
--- -   The range of queries specified by @firstQuery@ and @queryCount@ in
---     @queryPool@ /must/ not be in use by calls to
---     'Graphics.Vulkan.Core10.Query.getQueryPoolResults' or
---     'resetQueryPool' in other threads
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @queryPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   @queryPool@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool'
-resetQueryPool :: forall io . MonadIO io => Device -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> io ()
-resetQueryPool device queryPool firstQuery queryCount = liftIO $ do
-  let vkResetQueryPool' = mkVkResetQueryPool (pVkResetQueryPool (deviceCmds (device :: Device)))
-  vkResetQueryPool' (deviceHandle (device)) (queryPool) (firstQuery) (queryCount)
-  pure $ ()
-
-
--- | VkPhysicalDeviceHostQueryResetFeatures - Structure describing whether
--- queries can be reset from the host
---
--- = Members
---
--- The members of the 'PhysicalDeviceHostQueryResetFeatures' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceHostQueryResetFeatures' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceHostQueryResetFeatures' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceHostQueryResetFeatures = PhysicalDeviceHostQueryResetFeatures
-  { -- | @hostQueryReset@ indicates that the implementation supports resetting
-    -- queries from the host with 'resetQueryPool'.
-    hostQueryReset :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceHostQueryResetFeatures
-
-instance ToCStruct PhysicalDeviceHostQueryResetFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceHostQueryResetFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (hostQueryReset))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceHostQueryResetFeatures where
-  peekCStruct p = do
-    hostQueryReset <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceHostQueryResetFeatures
-             (bool32ToBool hostQueryReset)
-
-instance Storable PhysicalDeviceHostQueryResetFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceHostQueryResetFeatures where
-  zero = PhysicalDeviceHostQueryResetFeatures
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset  (PhysicalDeviceHostQueryResetFeatures) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceHostQueryResetFeatures
-
-instance ToCStruct PhysicalDeviceHostQueryResetFeatures
-instance Show PhysicalDeviceHostQueryResetFeatures
-
-instance FromCStruct PhysicalDeviceHostQueryResetFeatures
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs
+++ /dev/null
@@ -1,187 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax  ( PhysicalDeviceSamplerFilterMinmaxProperties(..)
-                                                                          , SamplerReductionModeCreateInfo(..)
-                                                                          , StructureType(..)
-                                                                          , FormatFeatureFlagBits(..)
-                                                                          , FormatFeatureFlags
-                                                                          , SamplerReductionMode(..)
-                                                                          ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceSamplerFilterMinmaxProperties - Structure describing
--- sampler filter minmax limits that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceSamplerFilterMinmaxProperties'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceSamplerFilterMinmaxProperties' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- If @filterMinmaxSingleComponentFormats@ is
--- 'Graphics.Vulkan.Core10.BaseType.TRUE', the following formats /must/
--- support the
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT'
--- feature with
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', if they
--- support
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT'.
---
--- 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
--- 'Graphics.Vulkan.Core10.BaseType.FALSE' the component mapping of the
--- image view used with min\/max filtering /must/ have been created with
--- the @r@ component set to
--- 'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'.
--- Only the @r@ component of the sampled image value is defined and the
--- other component values are undefined. If
--- @filterMinmaxImageComponentMapping@ is
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' this restriction does not apply
--- and image component mapping works as normal.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceSamplerFilterMinmaxProperties = PhysicalDeviceSamplerFilterMinmaxProperties
-  { -- | @filterMinmaxSingleComponentFormats@ is a boolean value indicating
-    -- whether a minimum set of required formats support min\/max filtering.
-    filterMinmaxSingleComponentFormats :: Bool
-  , -- | @filterMinmaxImageComponentMapping@ is a boolean value indicating
-    -- whether the implementation supports non-identity component mapping of
-    -- the image when doing min\/max filtering.
-    filterMinmaxImageComponentMapping :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceSamplerFilterMinmaxProperties
-
-instance ToCStruct PhysicalDeviceSamplerFilterMinmaxProperties where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceSamplerFilterMinmaxProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (filterMinmaxSingleComponentFormats))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (filterMinmaxImageComponentMapping))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceSamplerFilterMinmaxProperties where
-  peekCStruct p = do
-    filterMinmaxSingleComponentFormats <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    filterMinmaxImageComponentMapping <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceSamplerFilterMinmaxProperties
-             (bool32ToBool filterMinmaxSingleComponentFormats) (bool32ToBool filterMinmaxImageComponentMapping)
-
-instance Storable PhysicalDeviceSamplerFilterMinmaxProperties where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceSamplerFilterMinmaxProperties where
-  zero = PhysicalDeviceSamplerFilterMinmaxProperties
-           zero
-           zero
-
-
--- | VkSamplerReductionModeCreateInfo - Structure specifying sampler
--- reduction mode
---
--- = Description
---
--- If the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Sampler.SamplerCreateInfo' includes a
--- 'SamplerReductionModeCreateInfo' structure, then that structure includes
--- a mode that controls how texture filtering combines texel values.
---
--- If this structure is not present, @reductionMode@ is considered to be
--- 'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SamplerReductionModeCreateInfo = SamplerReductionModeCreateInfo
-  { -- | @reductionMode@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode'
-    -- value
-    reductionMode :: SamplerReductionMode }
-  deriving (Typeable)
-deriving instance Show SamplerReductionModeCreateInfo
-
-instance ToCStruct SamplerReductionModeCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SamplerReductionModeCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SamplerReductionMode)) (reductionMode)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SamplerReductionMode)) (zero)
-    f
-
-instance FromCStruct SamplerReductionModeCreateInfo where
-  peekCStruct p = do
-    reductionMode <- peek @SamplerReductionMode ((p `plusPtr` 16 :: Ptr SamplerReductionMode))
-    pure $ SamplerReductionModeCreateInfo
-             reductionMode
-
-instance Storable SamplerReductionModeCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SamplerReductionModeCreateInfo where
-  zero = SamplerReductionModeCreateInfo
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax  ( PhysicalDeviceSamplerFilterMinmaxProperties
-                                                                          , SamplerReductionModeCreateInfo
-                                                                          ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceSamplerFilterMinmaxProperties
-
-instance ToCStruct PhysicalDeviceSamplerFilterMinmaxProperties
-instance Show PhysicalDeviceSamplerFilterMinmaxProperties
-
-instance FromCStruct PhysicalDeviceSamplerFilterMinmaxProperties
-
-
-data SamplerReductionModeCreateInfo
-
-instance ToCStruct SamplerReductionModeCreateInfo
-instance Show SamplerReductionModeCreateInfo
-
-instance FromCStruct SamplerReductionModeCreateInfo
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs
+++ /dev/null
@@ -1,89 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout  ( PhysicalDeviceScalarBlockLayoutFeatures(..)
-                                                                        , StructureType(..)
-                                                                        ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceScalarBlockLayoutFeatures - Structure indicating support
--- for scalar block layouts
---
--- = Members
---
--- The members of the 'PhysicalDeviceScalarBlockLayoutFeatures' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceScalarBlockLayoutFeatures' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceScalarBlockLayoutFeatures' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable this feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceScalarBlockLayoutFeatures = PhysicalDeviceScalarBlockLayoutFeatures
-  { -- | @scalarBlockLayout@ indicates that the implementation supports the
-    -- layout of resource blocks in shaders using
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-alignment-requirements scalar alignment>.
-    scalarBlockLayout :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceScalarBlockLayoutFeatures
-
-instance ToCStruct PhysicalDeviceScalarBlockLayoutFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceScalarBlockLayoutFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (scalarBlockLayout))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceScalarBlockLayoutFeatures where
-  peekCStruct p = do
-    scalarBlockLayout <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceScalarBlockLayoutFeatures
-             (bool32ToBool scalarBlockLayout)
-
-instance Storable PhysicalDeviceScalarBlockLayoutFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceScalarBlockLayoutFeatures where
-  zero = PhysicalDeviceScalarBlockLayoutFeatures
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout  (PhysicalDeviceScalarBlockLayoutFeatures) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceScalarBlockLayoutFeatures
-
-instance ToCStruct PhysicalDeviceScalarBlockLayoutFeatures
-instance Show PhysicalDeviceScalarBlockLayoutFeatures
-
-instance FromCStruct PhysicalDeviceScalarBlockLayoutFeatures
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs
+++ /dev/null
@@ -1,118 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage  ( ImageStencilUsageCreateInfo(..)
-                                                                           , StructureType(..)
-                                                                           ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkImageStencilUsageCreateInfo - Specify separate usage flags for the
--- stencil aspect of a depth-stencil image
---
--- = Description
---
--- If the @pNext@ chain of 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'
--- includes a 'ImageStencilUsageCreateInfo' structure, then that structure
--- includes the usage flags specific to the stencil aspect of the image for
--- an image with a depth-stencil format.
---
--- This structure specifies image usages which only apply to the stencil
--- aspect of a depth\/stencil format image. When this structure is included
--- in the @pNext@ chain of 'Graphics.Vulkan.Core10.Image.ImageCreateInfo',
--- the stencil aspect of the image /must/ only be used as specified by
--- @stencilUsage@. When this structure is not included in the @pNext@ chain
--- of 'Graphics.Vulkan.Core10.Image.ImageCreateInfo', the stencil aspect of
--- an image /must/ only be used as specified
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@usage@. Use of other
--- aspects of an image are unaffected by this structure.
---
--- This structure /can/ also be included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
--- to query additional capabilities specific to image creation parameter
--- combinations including a separate set of usage flags for the stencil
--- aspect of the image using
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'.
--- When this structure is not included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
--- then the implicit value of @stencilUsage@ matches that of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@usage@.
---
--- == Valid Usage
---
--- -   If @stencilUsage@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
---     it /must/ not include bits other than
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO'
---
--- -   @stencilUsage@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
---     values
---
--- -   @stencilUsage@ /must/ not be @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImageStencilUsageCreateInfo = ImageStencilUsageCreateInfo
-  { -- | @stencilUsage@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
-    -- describing the intended usage of the stencil aspect of the image.
-    stencilUsage :: ImageUsageFlags }
-  deriving (Typeable)
-deriving instance Show ImageStencilUsageCreateInfo
-
-instance ToCStruct ImageStencilUsageCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageStencilUsageCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageUsageFlags)) (stencilUsage)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageUsageFlags)) (zero)
-    f
-
-instance FromCStruct ImageStencilUsageCreateInfo where
-  peekCStruct p = do
-    stencilUsage <- peek @ImageUsageFlags ((p `plusPtr` 16 :: Ptr ImageUsageFlags))
-    pure $ ImageStencilUsageCreateInfo
-             stencilUsage
-
-instance Storable ImageStencilUsageCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageStencilUsageCreateInfo where
-  zero = ImageStencilUsageCreateInfo
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage  (ImageStencilUsageCreateInfo) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ImageStencilUsageCreateInfo
-
-instance ToCStruct ImageStencilUsageCreateInfo
-instance Show ImageStencilUsageCreateInfo
-
-instance FromCStruct ImageStencilUsageCreateInfo
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs
+++ /dev/null
@@ -1,100 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage  ( PhysicalDevice8BitStorageFeatures(..)
-                                                                 , StructureType(..)
-                                                                 ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDevice8BitStorageFeatures - Structure describing features
--- supported by VK_KHR_8bit_storage
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDevice8BitStorageFeatures = PhysicalDevice8BitStorageFeatures
-  { -- | @storageBuffer8BitAccess@ indicates whether objects in the
-    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the
-    -- @Block@ decoration /can/ have 8-bit integer members. If this feature is
-    -- not enabled, 8-bit integer members /must/ not be used in such objects.
-    -- This also indicates whether shader modules /can/ declare the
-    -- @StorageBuffer8BitAccess@ capability.
-    storageBuffer8BitAccess :: Bool
-  , -- | @uniformAndStorageBuffer8BitAccess@ indicates whether objects in the
-    -- @Uniform@ storage class with the @Block@ decoration and in the
-    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the same
-    -- decoration /can/ have 8-bit integer members. If this feature is not
-    -- enabled, 8-bit integer members /must/ not be used in such objects. This
-    -- also indicates whether shader modules /can/ declare the
-    -- @UniformAndStorageBuffer8BitAccess@ capability.
-    uniformAndStorageBuffer8BitAccess :: Bool
-  , -- | @storagePushConstant8@ indicates whether objects in the @PushConstant@
-    -- storage class /can/ have 8-bit integer members. If this feature is not
-    -- enabled, 8-bit integer members /must/ not be used in such objects. This
-    -- also indicates whether shader modules /can/ declare the
-    -- @StoragePushConstant8@ capability.
-    storagePushConstant8 :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDevice8BitStorageFeatures
-
-instance ToCStruct PhysicalDevice8BitStorageFeatures where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDevice8BitStorageFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (storageBuffer8BitAccess))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (uniformAndStorageBuffer8BitAccess))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (storagePushConstant8))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDevice8BitStorageFeatures where
-  peekCStruct p = do
-    storageBuffer8BitAccess <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    uniformAndStorageBuffer8BitAccess <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    storagePushConstant8 <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    pure $ PhysicalDevice8BitStorageFeatures
-             (bool32ToBool storageBuffer8BitAccess) (bool32ToBool uniformAndStorageBuffer8BitAccess) (bool32ToBool storagePushConstant8)
-
-instance Storable PhysicalDevice8BitStorageFeatures where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDevice8BitStorageFeatures where
-  zero = PhysicalDevice8BitStorageFeatures
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage  (PhysicalDevice8BitStorageFeatures) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDevice8BitStorageFeatures
-
-instance ToCStruct PhysicalDevice8BitStorageFeatures
-instance Show PhysicalDevice8BitStorageFeatures
-
-instance FromCStruct PhysicalDevice8BitStorageFeatures
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs
+++ /dev/null
@@ -1,619 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address  ( getBufferOpaqueCaptureAddress
-                                                                          , getBufferDeviceAddress
-                                                                          , getDeviceMemoryOpaqueCaptureAddress
-                                                                          , PhysicalDeviceBufferDeviceAddressFeatures(..)
-                                                                          , BufferDeviceAddressInfo(..)
-                                                                          , BufferOpaqueCaptureAddressCreateInfo(..)
-                                                                          , MemoryOpaqueCaptureAddressAllocateInfo(..)
-                                                                          , DeviceMemoryOpaqueCaptureAddressInfo(..)
-                                                                          , StructureType(..)
-                                                                          , Result(..)
-                                                                          , BufferUsageFlagBits(..)
-                                                                          , BufferUsageFlags
-                                                                          , BufferCreateFlagBits(..)
-                                                                          , BufferCreateFlags
-                                                                          , MemoryAllocateFlagBits(..)
-                                                                          , MemoryAllocateFlags
-                                                                          ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Core10.BaseType (DeviceAddress)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetBufferDeviceAddress))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetBufferOpaqueCaptureAddress))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeviceMemoryOpaqueCaptureAddress))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES))
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(..))
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetBufferOpaqueCaptureAddress
-  :: FunPtr (Ptr Device_T -> Ptr BufferDeviceAddressInfo -> IO Word64) -> Ptr Device_T -> Ptr BufferDeviceAddressInfo -> IO Word64
-
--- | vkGetBufferOpaqueCaptureAddress - Query an opaque capture address of a
--- buffer
---
--- = Parameters
---
--- -   @device@ is the logical device that the buffer was created on.
---
--- -   @pInfo@ is a pointer to a 'BufferDeviceAddressInfo' structure
---     specifying the buffer to retrieve an address for.
---
--- = Description
---
--- The 64-bit return value is an opaque capture address of the start of
--- @pInfo->buffer@.
---
--- If the buffer was created with a non-zero value of
--- 'BufferOpaqueCaptureAddressCreateInfo'::@opaqueCaptureAddress@ the
--- return value /must/ be the same address.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress>
---     feature /must/ be enabled
---
--- -   If @device@ was created with multiple physical devices, then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'BufferDeviceAddressInfo' structure
---
--- = See Also
---
--- 'BufferDeviceAddressInfo', 'Graphics.Vulkan.Core10.Handles.Device'
-getBufferOpaqueCaptureAddress :: forall io . MonadIO io => Device -> BufferDeviceAddressInfo -> io (Word64)
-getBufferOpaqueCaptureAddress device info = liftIO . evalContT $ do
-  let vkGetBufferOpaqueCaptureAddress' = mkVkGetBufferOpaqueCaptureAddress (pVkGetBufferOpaqueCaptureAddress (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  r <- lift $ vkGetBufferOpaqueCaptureAddress' (deviceHandle (device)) pInfo
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetBufferDeviceAddress
-  :: FunPtr (Ptr Device_T -> Ptr BufferDeviceAddressInfo -> IO DeviceAddress) -> Ptr Device_T -> Ptr BufferDeviceAddressInfo -> IO DeviceAddress
-
--- | vkGetBufferDeviceAddress - Query an address of a buffer
---
--- = Parameters
---
--- -   @device@ is the logical device that the buffer was created on.
---
--- -   @pInfo@ is a pointer to a 'BufferDeviceAddressInfo' structure
---     specifying the buffer to retrieve an address for.
---
--- = Description
---
--- The 64-bit return value is an address of the start of @pInfo->buffer@.
--- The address range starting at this value and whose size is the size of
--- the buffer /can/ be used in a shader to access the memory bound to that
--- buffer, using the @SPV_KHR_physical_storage_buffer@ extension or the
--- equivalent @SPV_EXT_physical_storage_buffer@ extension and the
--- @PhysicalStorageBuffer@ storage class. For example, this value /can/ be
--- stored in a uniform buffer, and the shader /can/ read the value from the
--- uniform buffer and use it to do a dependent read\/write to this buffer.
--- A value of zero is reserved as a “null” pointer and /must/ not be
--- returned as a valid buffer device address. All loads, stores, and
--- atomics in a shader through @PhysicalStorageBuffer@ pointers /must/
--- access addresses in the address range of some buffer.
---
--- If the buffer was created with a non-zero value of
--- 'BufferOpaqueCaptureAddressCreateInfo'::@opaqueCaptureAddress@ or
--- 'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT'::@deviceAddress@
--- the return value will be the same address that was returned at capture
--- time.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressEXT ::bufferDeviceAddress>
---     feature /must/ be enabled
---
--- -   If @device@ was created with multiple physical devices, then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDeviceEXT ::bufferDeviceAddressMultiDevice>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'BufferDeviceAddressInfo' structure
---
--- = See Also
---
--- 'BufferDeviceAddressInfo', 'Graphics.Vulkan.Core10.Handles.Device'
-getBufferDeviceAddress :: forall io . MonadIO io => Device -> BufferDeviceAddressInfo -> io (DeviceAddress)
-getBufferDeviceAddress device info = liftIO . evalContT $ do
-  let vkGetBufferDeviceAddress' = mkVkGetBufferDeviceAddress (pVkGetBufferDeviceAddress (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  r <- lift $ vkGetBufferDeviceAddress' (deviceHandle (device)) pInfo
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceMemoryOpaqueCaptureAddress
-  :: FunPtr (Ptr Device_T -> Ptr DeviceMemoryOpaqueCaptureAddressInfo -> IO Word64) -> Ptr Device_T -> Ptr DeviceMemoryOpaqueCaptureAddressInfo -> IO Word64
-
--- | vkGetDeviceMemoryOpaqueCaptureAddress - Query an opaque capture address
--- of a memory object
---
--- = Parameters
---
--- -   @device@ is the logical device that the memory object was allocated
---     on.
---
--- -   @pInfo@ is a pointer to a 'DeviceMemoryOpaqueCaptureAddressInfo'
---     structure specifying the memory object to retrieve an address for.
---
--- = Description
---
--- The 64-bit return value is an opaque address representing the start of
--- @pInfo->memory@.
---
--- If the memory object was allocated with a non-zero value of
--- 'MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@, the
--- return value /must/ be the same address.
---
--- Note
---
--- The expected usage for these opaque addresses is only for trace
--- capture\/replay tools to store these addresses in a trace and
--- subsequently specify them during replay.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress>
---     feature /must/ be enabled
---
--- -   If @device@ was created with multiple physical devices, then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'DeviceMemoryOpaqueCaptureAddressInfo' structure
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'DeviceMemoryOpaqueCaptureAddressInfo'
-getDeviceMemoryOpaqueCaptureAddress :: forall io . MonadIO io => Device -> DeviceMemoryOpaqueCaptureAddressInfo -> io (Word64)
-getDeviceMemoryOpaqueCaptureAddress device info = liftIO . evalContT $ do
-  let vkGetDeviceMemoryOpaqueCaptureAddress' = mkVkGetDeviceMemoryOpaqueCaptureAddress (pVkGetDeviceMemoryOpaqueCaptureAddress (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  r <- lift $ vkGetDeviceMemoryOpaqueCaptureAddress' (deviceHandle (device)) pInfo
-  pure $ (r)
-
-
--- | VkPhysicalDeviceBufferDeviceAddressFeatures - Structure describing
--- buffer address features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceBufferDeviceAddressFeatures' structure
--- describe the following features:
---
--- = Description
---
--- Note
---
--- @bufferDeviceAddressMultiDevice@ exists to allow certain legacy
--- platforms to be able to support @bufferDeviceAddress@ without needing to
--- support shared GPU virtual addresses for multi-device configurations.
---
--- See 'getBufferDeviceAddress' for more information.
---
--- If the 'PhysicalDeviceBufferDeviceAddressFeatures' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceBufferDeviceAddressFeatures' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceBufferDeviceAddressFeatures = PhysicalDeviceBufferDeviceAddressFeatures
-  { -- | @bufferDeviceAddress@ indicates that the implementation supports
-    -- accessing buffer memory in shaders as storage buffers via an address
-    -- queried from 'getBufferDeviceAddress'.
-    bufferDeviceAddress :: Bool
-  , -- | @bufferDeviceAddressCaptureReplay@ indicates that the implementation
-    -- supports saving and reusing buffer and device addresses, e.g. for trace
-    -- capture and replay.
-    bufferDeviceAddressCaptureReplay :: Bool
-  , -- | @bufferDeviceAddressMultiDevice@ indicates that the implementation
-    -- supports the @bufferDeviceAddress@ and @rayTracing@ features for logical
-    -- devices created with multiple physical devices. If this feature is not
-    -- supported, buffer and acceleration structure addresses /must/ not be
-    -- queried on a logical device created with more than one physical device.
-    bufferDeviceAddressMultiDevice :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceBufferDeviceAddressFeatures
-
-instance ToCStruct PhysicalDeviceBufferDeviceAddressFeatures where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceBufferDeviceAddressFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddress))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressCaptureReplay))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressMultiDevice))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceBufferDeviceAddressFeatures where
-  peekCStruct p = do
-    bufferDeviceAddress <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    bufferDeviceAddressCaptureReplay <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    bufferDeviceAddressMultiDevice <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    pure $ PhysicalDeviceBufferDeviceAddressFeatures
-             (bool32ToBool bufferDeviceAddress) (bool32ToBool bufferDeviceAddressCaptureReplay) (bool32ToBool bufferDeviceAddressMultiDevice)
-
-instance Storable PhysicalDeviceBufferDeviceAddressFeatures where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceBufferDeviceAddressFeatures where
-  zero = PhysicalDeviceBufferDeviceAddressFeatures
-           zero
-           zero
-           zero
-
-
--- | VkBufferDeviceAddressInfo - Structure specifying the buffer to query an
--- address for
---
--- == Valid Usage
---
--- -   If @buffer@ is non-sparse and was not created with the
---     'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
---     flag, then it /must/ be bound completely and contiguously to a
---     single 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @buffer@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getBufferDeviceAddress',
--- 'Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address.getBufferDeviceAddressEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.getBufferDeviceAddressKHR',
--- 'getBufferOpaqueCaptureAddress',
--- 'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.getBufferOpaqueCaptureAddressKHR'
-data BufferDeviceAddressInfo = BufferDeviceAddressInfo
-  { -- | @buffer@ specifies the buffer whose address is being queried.
-    buffer :: Buffer }
-  deriving (Typeable)
-deriving instance Show BufferDeviceAddressInfo
-
-instance ToCStruct BufferDeviceAddressInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BufferDeviceAddressInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Buffer)) (buffer)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)
-    f
-
-instance FromCStruct BufferDeviceAddressInfo where
-  peekCStruct p = do
-    buffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
-    pure $ BufferDeviceAddressInfo
-             buffer
-
-instance Storable BufferDeviceAddressInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BufferDeviceAddressInfo where
-  zero = BufferDeviceAddressInfo
-           zero
-
-
--- | VkBufferOpaqueCaptureAddressCreateInfo - Request a specific address for
--- a buffer
---
--- = Description
---
--- If @opaqueCaptureAddress@ is zero, no specific address is requested.
---
--- If @opaqueCaptureAddress@ is not zero, then it /should/ be an address
--- retrieved from 'getBufferOpaqueCaptureAddress' for an identically
--- created buffer on the same implementation.
---
--- If this structure is not present, it is as if @opaqueCaptureAddress@ is
--- zero.
---
--- Apps /should/ avoid creating buffers with app-provided addresses and
--- implementation-provided addresses in the same process, to reduce the
--- likelihood of
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'
--- errors.
---
--- Note
---
--- The expected usage for this is that a trace capture\/replay tool will
--- add the
--- 'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
--- flag to all buffers that use
--- 'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT',
--- and during capture will save the queried opaque device addresses in the
--- trace. During replay, the buffers will be created specifying the
--- original address so any address values stored in the trace data will
--- remain valid.
---
--- Implementations are expected to separate such buffers in the GPU address
--- space so normal allocations will avoid using these addresses.
--- Apps\/tools should avoid mixing app-provided and implementation-provided
--- addresses for buffers created with
--- 'Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT',
--- to avoid address space allocation conflicts.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data BufferOpaqueCaptureAddressCreateInfo = BufferOpaqueCaptureAddressCreateInfo
-  { -- | @opaqueCaptureAddress@ is the opaque capture address requested for the
-    -- buffer.
-    opaqueCaptureAddress :: Word64 }
-  deriving (Typeable)
-deriving instance Show BufferOpaqueCaptureAddressCreateInfo
-
-instance ToCStruct BufferOpaqueCaptureAddressCreateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BufferOpaqueCaptureAddressCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (opaqueCaptureAddress)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct BufferOpaqueCaptureAddressCreateInfo where
-  peekCStruct p = do
-    opaqueCaptureAddress <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
-    pure $ BufferOpaqueCaptureAddressCreateInfo
-             opaqueCaptureAddress
-
-instance Storable BufferOpaqueCaptureAddressCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BufferOpaqueCaptureAddressCreateInfo where
-  zero = BufferOpaqueCaptureAddressCreateInfo
-           zero
-
-
--- | VkMemoryOpaqueCaptureAddressAllocateInfo - Request a specific address
--- for a memory allocation
---
--- = Description
---
--- If @opaqueCaptureAddress@ is zero, no specific address is requested.
---
--- If @opaqueCaptureAddress@ is not zero, it /should/ be an address
--- retrieved from 'getDeviceMemoryOpaqueCaptureAddress' on an identically
--- created memory allocation on the same implementation.
---
--- Note
---
--- In most cases, it is expected that a non-zero @opaqueAddress@ is an
--- address retrieved from 'getDeviceMemoryOpaqueCaptureAddress' on an
--- identically created memory allocation. If this is not the case, it
--- likely that
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'
--- errors will occur.
---
--- This is, however, not a strict requirement because trace capture\/replay
--- tools may need to adjust memory allocation parameters for imported
--- memory.
---
--- If this structure is not present, it is as if @opaqueCaptureAddress@ is
--- zero.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data MemoryOpaqueCaptureAddressAllocateInfo = MemoryOpaqueCaptureAddressAllocateInfo
-  { -- | @opaqueCaptureAddress@ is the opaque capture address requested for the
-    -- memory allocation.
-    opaqueCaptureAddress :: Word64 }
-  deriving (Typeable)
-deriving instance Show MemoryOpaqueCaptureAddressAllocateInfo
-
-instance ToCStruct MemoryOpaqueCaptureAddressAllocateInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryOpaqueCaptureAddressAllocateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (opaqueCaptureAddress)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct MemoryOpaqueCaptureAddressAllocateInfo where
-  peekCStruct p = do
-    opaqueCaptureAddress <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
-    pure $ MemoryOpaqueCaptureAddressAllocateInfo
-             opaqueCaptureAddress
-
-instance Storable MemoryOpaqueCaptureAddressAllocateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryOpaqueCaptureAddressAllocateInfo where
-  zero = MemoryOpaqueCaptureAddressAllocateInfo
-           zero
-
-
--- | VkDeviceMemoryOpaqueCaptureAddressInfo - Structure specifying the memory
--- object to query an address for
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getDeviceMemoryOpaqueCaptureAddress',
--- 'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.getDeviceMemoryOpaqueCaptureAddressKHR'
-data DeviceMemoryOpaqueCaptureAddressInfo = DeviceMemoryOpaqueCaptureAddressInfo
-  { -- | @memory@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.DeviceMemory'
-    -- handle
-    memory :: DeviceMemory }
-  deriving (Typeable)
-deriving instance Show DeviceMemoryOpaqueCaptureAddressInfo
-
-instance ToCStruct DeviceMemoryOpaqueCaptureAddressInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceMemoryOpaqueCaptureAddressInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
-    f
-
-instance FromCStruct DeviceMemoryOpaqueCaptureAddressInfo where
-  peekCStruct p = do
-    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
-    pure $ DeviceMemoryOpaqueCaptureAddressInfo
-             memory
-
-instance Storable DeviceMemoryOpaqueCaptureAddressInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeviceMemoryOpaqueCaptureAddressInfo where
-  zero = DeviceMemoryOpaqueCaptureAddressInfo
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs-boot
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address  ( BufferDeviceAddressInfo
-                                                                          , BufferOpaqueCaptureAddressCreateInfo
-                                                                          , DeviceMemoryOpaqueCaptureAddressInfo
-                                                                          , MemoryOpaqueCaptureAddressAllocateInfo
-                                                                          , PhysicalDeviceBufferDeviceAddressFeatures
-                                                                          ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data BufferDeviceAddressInfo
-
-instance ToCStruct BufferDeviceAddressInfo
-instance Show BufferDeviceAddressInfo
-
-instance FromCStruct BufferDeviceAddressInfo
-
-
-data BufferOpaqueCaptureAddressCreateInfo
-
-instance ToCStruct BufferOpaqueCaptureAddressCreateInfo
-instance Show BufferOpaqueCaptureAddressCreateInfo
-
-instance FromCStruct BufferOpaqueCaptureAddressCreateInfo
-
-
-data DeviceMemoryOpaqueCaptureAddressInfo
-
-instance ToCStruct DeviceMemoryOpaqueCaptureAddressInfo
-instance Show DeviceMemoryOpaqueCaptureAddressInfo
-
-instance FromCStruct DeviceMemoryOpaqueCaptureAddressInfo
-
-
-data MemoryOpaqueCaptureAddressAllocateInfo
-
-instance ToCStruct MemoryOpaqueCaptureAddressAllocateInfo
-instance Show MemoryOpaqueCaptureAddressAllocateInfo
-
-instance FromCStruct MemoryOpaqueCaptureAddressAllocateInfo
-
-
-data PhysicalDeviceBufferDeviceAddressFeatures
-
-instance ToCStruct PhysicalDeviceBufferDeviceAddressFeatures
-instance Show PhysicalDeviceBufferDeviceAddressFeatures
-
-instance FromCStruct PhysicalDeviceBufferDeviceAddressFeatures
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
+++ /dev/null
@@ -1,1969 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2  ( createRenderPass2
-                                                                       , cmdBeginRenderPass2
-                                                                       , cmdWithRenderPass2
-                                                                       , cmdNextSubpass2
-                                                                       , cmdEndRenderPass2
-                                                                       , AttachmentDescription2(..)
-                                                                       , AttachmentReference2(..)
-                                                                       , SubpassDescription2(..)
-                                                                       , SubpassDependency2(..)
-                                                                       , RenderPassCreateInfo2(..)
-                                                                       , SubpassBeginInfo(..)
-                                                                       , SubpassEndInfo(..)
-                                                                       , StructureType(..)
-                                                                       ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import qualified Data.Vector (null)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct.Extends (forgetExtensions)
-import Graphics.Vulkan.CStruct.Extends (peekSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (pokeSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (withSomeCStruct)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits (AttachmentDescriptionFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentDescriptionStencilLayout)
-import Graphics.Vulkan.Core10.Enums.AttachmentLoadOp (AttachmentLoadOp)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentReferenceStencilLayout)
-import Graphics.Vulkan.Core10.Enums.AttachmentStoreOp (AttachmentStoreOp)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBeginRenderPass2))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdEndRenderPass2))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdNextSubpass2))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateRenderPass2))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Handles (RenderPass)
-import Graphics.Vulkan.Core10.Handles (RenderPass(..))
-import Graphics.Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo)
-import Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits (RenderPassCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map (RenderPassFragmentDensityMapCreateInfoEXT)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
-import Graphics.Vulkan.CStruct.Extends (SomeStruct)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Core10.Enums.SubpassContents (SubpassContents)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (SubpassDescriptionDepthStencilResolve)
-import Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits (SubpassDescriptionFlags)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_BEGIN_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_END_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateRenderPass2
-  :: FunPtr (Ptr Device_T -> Ptr (RenderPassCreateInfo2 a) -> Ptr AllocationCallbacks -> Ptr RenderPass -> IO Result) -> Ptr Device_T -> Ptr (RenderPassCreateInfo2 a) -> Ptr AllocationCallbacks -> Ptr RenderPass -> IO Result
-
--- | vkCreateRenderPass2 - Create a new render pass object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the render pass.
---
--- -   @pCreateInfo@ is a pointer to a 'RenderPassCreateInfo2' structure
---     describing the parameters of the render pass.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pRenderPass@ is a pointer to a
---     'Graphics.Vulkan.Core10.Handles.RenderPass' handle in which the
---     resulting render pass object is returned.
---
--- = Description
---
--- This command is functionally identical to
--- 'Graphics.Vulkan.Core10.Pass.createRenderPass', but includes extensible
--- sub-structures that include @sType@ and @pNext@ parameters, allowing
--- them to be more easily extended.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'RenderPassCreateInfo2' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pRenderPass@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.RenderPass' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.RenderPass', 'RenderPassCreateInfo2'
-createRenderPass2 :: forall a io . (PokeChain a, MonadIO io) => Device -> RenderPassCreateInfo2 a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (RenderPass)
-createRenderPass2 device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateRenderPass2' = mkVkCreateRenderPass2 (pVkCreateRenderPass2 (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPRenderPass <- ContT $ bracket (callocBytes @RenderPass 8) free
-  r <- lift $ vkCreateRenderPass2' (deviceHandle (device)) pCreateInfo pAllocator (pPRenderPass)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pRenderPass <- lift $ peek @RenderPass pPRenderPass
-  pure $ (pRenderPass)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBeginRenderPass2
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (RenderPassBeginInfo a) -> Ptr SubpassBeginInfo -> IO ()) -> Ptr CommandBuffer_T -> Ptr (RenderPassBeginInfo a) -> Ptr SubpassBeginInfo -> IO ()
-
--- | vkCmdBeginRenderPass2 - Begin a new render pass
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer in which to record the
---     command.
---
--- -   @pRenderPassBegin@ is a pointer to a
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'
---     structure specifying the render pass to begin an instance of, and
---     the framebuffer the instance uses.
---
--- -   @pSubpassBeginInfo@ is a pointer to a 'SubpassBeginInfo' structure
---     containing information about the subpass which is about to begin
---     rendering.
---
--- = 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
---
--- -   Both the @framebuffer@ and @renderPass@ members of
---     @pRenderPassBegin@ /must/ have been created on the same
---     'Graphics.Vulkan.Core10.Handles.Device' that @commandBuffer@ was
---     allocated on
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If any of the @stencilInitialLayout@ or @stencilFinalLayout@ member
---     of the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
---     structures or the @stencilLayout@ member of the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'
---     structures specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures or
---     the @layout@ member of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
---     then the corresponding attachment image view of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
---
--- -   If any of the @initialLayout@ members of the
---     'Graphics.Vulkan.Core10.Pass.AttachmentDescription' structures
---     specified when creating the render pass specified in the
---     @renderPass@ member of @pRenderPassBegin@ is not
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',
---     then each such @initialLayout@ /must/ be equal to the current layout
---     of the corresponding attachment image subresource of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@
---
--- -   The @srcStageMask@ and @dstStageMask@ members of any element of the
---     @pDependencies@ member of
---     'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo' used to create
---     @renderPass@ /must/ be supported by the capabilities of the queue
---     family identified by the @queueFamilyIndex@ member of the
---     'Graphics.Vulkan.Core10.CommandPool.CommandPoolCreateInfo' used to
---     create the command pool which @commandBuffer@ was allocated from
---
--- -   For any attachment in @framebuffer@ that is used by @renderPass@ and
---     is bound to memory locations that are also bound to another
---     attachment used by @renderPass@, and if at least one of those uses
---     causes either attachment to be written to, both attachments /must/
---     have had the
---     'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'
---     set
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pRenderPassBegin@ /must/ be a valid pointer to a valid
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'
---     structure
---
--- -   @pSubpassBeginInfo@ /must/ be a valid pointer to a valid
---     'SubpassBeginInfo' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @commandBuffer@ /must/ be a primary
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Graphics                                                                                                                            |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',
--- 'SubpassBeginInfo'
-cmdBeginRenderPass2 :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassBeginInfo -> io ()
-cmdBeginRenderPass2 commandBuffer renderPassBegin subpassBeginInfo = liftIO . evalContT $ do
-  let vkCmdBeginRenderPass2' = mkVkCmdBeginRenderPass2 (pVkCmdBeginRenderPass2 (deviceCmds (commandBuffer :: CommandBuffer)))
-  pRenderPassBegin <- ContT $ withCStruct (renderPassBegin)
-  pSubpassBeginInfo <- ContT $ withCStruct (subpassBeginInfo)
-  lift $ vkCmdBeginRenderPass2' (commandBufferHandle (commandBuffer)) pRenderPassBegin pSubpassBeginInfo
-  pure $ ()
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'cmdBeginRenderPass2' and 'cmdEndRenderPass2'
---
--- To ensure that 'cmdEndRenderPass2' is always called: pass
--- 'Control.Exception.bracket_' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
--- Note that there is no inner resource
-cmdWithRenderPass2 :: forall a io r . (PokeChain a, MonadIO io) => (io () -> io () -> r) -> CommandBuffer -> RenderPassBeginInfo a -> SubpassBeginInfo -> SubpassEndInfo -> r
-cmdWithRenderPass2 b commandBuffer pRenderPassBegin pSubpassBeginInfo pSubpassEndInfo =
-  b (cmdBeginRenderPass2 commandBuffer pRenderPassBegin pSubpassBeginInfo)
-    (cmdEndRenderPass2 commandBuffer pSubpassEndInfo)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdNextSubpass2
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr SubpassBeginInfo -> Ptr SubpassEndInfo -> IO ()) -> Ptr CommandBuffer_T -> Ptr SubpassBeginInfo -> Ptr SubpassEndInfo -> IO ()
-
--- | vkCmdNextSubpass2 - Transition to the next subpass of a render pass
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer in which to record the
---     command.
---
--- -   @pSubpassBeginInfo@ is a pointer to a 'SubpassBeginInfo' structure
---     containing information about the subpass which is about to begin
---     rendering.
---
--- -   @pSubpassEndInfo@ is a pointer to a 'SubpassEndInfo' structure
---     containing information about how the previous subpass will be ended.
---
--- = Description
---
--- 'cmdNextSubpass2' is semantically identical to
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdNextSubpass', except
--- that it is extensible, and that @contents@ is provided as part of an
--- extensible structure instead of as a flat parameter.
---
--- == Valid Usage
---
--- -   The current subpass index /must/ be less than the number of
---     subpasses in the render pass minus one
---
--- -   This command /must/ not be recorded when transform feedback is
---     active
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pSubpassBeginInfo@ /must/ be a valid pointer to a valid
---     'SubpassBeginInfo' structure
---
--- -   @pSubpassEndInfo@ /must/ be a valid pointer to a valid
---     'SubpassEndInfo' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   @commandBuffer@ /must/ be a primary
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'SubpassBeginInfo',
--- 'SubpassEndInfo'
-cmdNextSubpass2 :: forall io . MonadIO io => CommandBuffer -> SubpassBeginInfo -> SubpassEndInfo -> io ()
-cmdNextSubpass2 commandBuffer subpassBeginInfo subpassEndInfo = liftIO . evalContT $ do
-  let vkCmdNextSubpass2' = mkVkCmdNextSubpass2 (pVkCmdNextSubpass2 (deviceCmds (commandBuffer :: CommandBuffer)))
-  pSubpassBeginInfo <- ContT $ withCStruct (subpassBeginInfo)
-  pSubpassEndInfo <- ContT $ withCStruct (subpassEndInfo)
-  lift $ vkCmdNextSubpass2' (commandBufferHandle (commandBuffer)) pSubpassBeginInfo pSubpassEndInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdEndRenderPass2
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr SubpassEndInfo -> IO ()) -> Ptr CommandBuffer_T -> Ptr SubpassEndInfo -> IO ()
-
--- | vkCmdEndRenderPass2 - End the current render pass
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer in which to end the current
---     render pass instance.
---
--- -   @pSubpassEndInfo@ is a pointer to a 'SubpassEndInfo' structure
---     containing information about how the previous subpass will be ended.
---
--- = Description
---
--- 'cmdEndRenderPass2' is semantically identical to
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdEndRenderPass', except
--- that it is extensible.
---
--- == Valid Usage
---
--- -   The current subpass index /must/ be equal to the number of subpasses
---     in the render pass minus one
---
--- -   This command /must/ not be recorded when transform feedback is
---     active
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pSubpassEndInfo@ /must/ be a valid pointer to a valid
---     'SubpassEndInfo' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   @commandBuffer@ /must/ be a primary
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'SubpassEndInfo'
-cmdEndRenderPass2 :: forall io . MonadIO io => CommandBuffer -> SubpassEndInfo -> io ()
-cmdEndRenderPass2 commandBuffer subpassEndInfo = liftIO . evalContT $ do
-  let vkCmdEndRenderPass2' = mkVkCmdEndRenderPass2 (pVkCmdEndRenderPass2 (deviceCmds (commandBuffer :: CommandBuffer)))
-  pSubpassEndInfo <- ContT $ withCStruct (subpassEndInfo)
-  lift $ vkCmdEndRenderPass2' (commandBufferHandle (commandBuffer)) pSubpassEndInfo
-  pure $ ()
-
-
--- | VkAttachmentDescription2 - Structure specifying an attachment
--- description
---
--- = Description
---
--- Parameters defined by this structure with the same name as those in
--- 'Graphics.Vulkan.Core10.Pass.AttachmentDescription' have the identical
--- effect to those parameters.
---
--- If the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
--- feature is enabled, and @format@ is a depth\/stencil format,
--- @initialLayout@ and @finalLayout@ /can/ be set to a layout that only
--- specifies the layout of the depth aspect.
---
--- If @format@ is a depth\/stencil format, and @initialLayout@ only
--- specifies the initial layout of the depth aspect of the attachment, the
--- initial layout of the stencil aspect is specified by the
--- @stencilInitialLayout@ member of a
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
--- structure included in the @pNext@ chain. Otherwise, @initialLayout@
--- describes the initial layout for all relevant image aspects.
---
--- If @format@ is a depth\/stencil format, and @finalLayout@ only specifies
--- the final layout of the depth aspect of the attachment, the final layout
--- of the stencil aspect is specified by the @stencilFinalLayout@ member of
--- a
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
--- structure included in the @pNext@ chain. Otherwise, @finalLayout@
--- describes the final layout for all relevant image aspects.
---
--- == Valid Usage
---
--- -   @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
---
--- -   If @format@ is a color format, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format, @initialLayout@ /must/ not
---     be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
---
--- -   If @format@ is a color format, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
---     feature is not enabled, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
---     feature is not enabled, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a color format, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a color format, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format which includes both depth and
---     stencil aspects, and @initialLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
---     structure
---
--- -   If @format@ is a depth\/stencil format which includes both depth and
---     stencil aspects, and @finalLayout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
---     structure
---
--- -   If @format@ is a depth\/stencil format which includes only the depth
---     aspect, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format which includes only the depth
---     aspect, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format which includes only the
---     stencil aspect, @initialLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
---
--- -   If @format@ is a depth\/stencil format which includes only the
---     stencil aspect, @finalLayout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2'
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlagBits'
---     values
---
--- -   @format@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- -   @samples@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
---     value
---
--- -   @loadOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp'
---     value
---
--- -   @storeOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp'
---     value
---
--- -   @stencilLoadOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp'
---     value
---
--- -   @stencilStoreOp@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp'
---     value
---
--- -   @initialLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @finalLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlags',
--- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp',
--- 'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'RenderPassCreateInfo2',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data AttachmentDescription2 (es :: [Type]) = AttachmentDescription2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlagBits'
-    -- specifying additional properties of the attachment.
-    flags :: AttachmentDescriptionFlags
-  , -- | @format@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format' value
-    -- specifying the format of the image that will be used for the attachment.
-    format :: Format
-  , -- | @samples@ is the number of samples of the image as defined in
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'.
-    samples :: SampleCountFlagBits
-  , -- | @loadOp@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value
-    -- specifying how the contents of color and depth components of the
-    -- attachment are treated at the beginning of the subpass where it is first
-    -- used.
-    loadOp :: AttachmentLoadOp
-  , -- | @storeOp@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value
-    -- specifying how the contents of color and depth components of the
-    -- attachment are treated at the end of the subpass where it is last used.
-    storeOp :: AttachmentStoreOp
-  , -- | @stencilLoadOp@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value
-    -- specifying how the contents of stencil components of the attachment are
-    -- treated at the beginning of the subpass where it is first used.
-    stencilLoadOp :: AttachmentLoadOp
-  , -- | @stencilStoreOp@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value
-    -- specifying how the contents of stencil components of the attachment are
-    -- treated at the end of the last subpass where it is used.
-    stencilStoreOp :: AttachmentStoreOp
-  , -- | @initialLayout@ is the layout the attachment image subresource will be
-    -- in when a render pass instance begins.
-    initialLayout :: ImageLayout
-  , -- | @finalLayout@ is the layout the attachment image subresource will be
-    -- transitioned to when a render pass instance ends.
-    finalLayout :: ImageLayout
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (AttachmentDescription2 es)
-
-instance Extensible AttachmentDescription2 where
-  extensibleType = STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2
-  setNext x next = x{next = next}
-  getNext AttachmentDescription2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AttachmentDescription2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @AttachmentDescriptionStencilLayout = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (AttachmentDescription2 es) where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AttachmentDescription2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr AttachmentDescriptionFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Format)) (format)
-    lift $ poke ((p `plusPtr` 24 :: Ptr SampleCountFlagBits)) (samples)
-    lift $ poke ((p `plusPtr` 28 :: Ptr AttachmentLoadOp)) (loadOp)
-    lift $ poke ((p `plusPtr` 32 :: Ptr AttachmentStoreOp)) (storeOp)
-    lift $ poke ((p `plusPtr` 36 :: Ptr AttachmentLoadOp)) (stencilLoadOp)
-    lift $ poke ((p `plusPtr` 40 :: Ptr AttachmentStoreOp)) (stencilStoreOp)
-    lift $ poke ((p `plusPtr` 44 :: Ptr ImageLayout)) (initialLayout)
-    lift $ poke ((p `plusPtr` 48 :: Ptr ImageLayout)) (finalLayout)
-    lift $ f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr Format)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr SampleCountFlagBits)) (zero)
-    lift $ poke ((p `plusPtr` 28 :: Ptr AttachmentLoadOp)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr AttachmentStoreOp)) (zero)
-    lift $ poke ((p `plusPtr` 36 :: Ptr AttachmentLoadOp)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr AttachmentStoreOp)) (zero)
-    lift $ poke ((p `plusPtr` 44 :: Ptr ImageLayout)) (zero)
-    lift $ poke ((p `plusPtr` 48 :: Ptr ImageLayout)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (AttachmentDescription2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @AttachmentDescriptionFlags ((p `plusPtr` 16 :: Ptr AttachmentDescriptionFlags))
-    format <- peek @Format ((p `plusPtr` 20 :: Ptr Format))
-    samples <- peek @SampleCountFlagBits ((p `plusPtr` 24 :: Ptr SampleCountFlagBits))
-    loadOp <- peek @AttachmentLoadOp ((p `plusPtr` 28 :: Ptr AttachmentLoadOp))
-    storeOp <- peek @AttachmentStoreOp ((p `plusPtr` 32 :: Ptr AttachmentStoreOp))
-    stencilLoadOp <- peek @AttachmentLoadOp ((p `plusPtr` 36 :: Ptr AttachmentLoadOp))
-    stencilStoreOp <- peek @AttachmentStoreOp ((p `plusPtr` 40 :: Ptr AttachmentStoreOp))
-    initialLayout <- peek @ImageLayout ((p `plusPtr` 44 :: Ptr ImageLayout))
-    finalLayout <- peek @ImageLayout ((p `plusPtr` 48 :: Ptr ImageLayout))
-    pure $ AttachmentDescription2
-             next flags format samples loadOp storeOp stencilLoadOp stencilStoreOp initialLayout finalLayout
-
-instance es ~ '[] => Zero (AttachmentDescription2 es) where
-  zero = AttachmentDescription2
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkAttachmentReference2 - Structure specifying an attachment reference
---
--- = Description
---
--- Parameters defined by this structure with the same name as those in
--- 'Graphics.Vulkan.Core10.Pass.AttachmentReference' have the identical
--- effect to those parameters.
---
--- @aspectMask@ is ignored when this structure is used to describe anything
--- other than an input attachment reference.
---
--- If the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
--- feature is enabled, and @attachment@ has a depth\/stencil format,
--- @layout@ /can/ be set to a layout that only specifies the layout of the
--- depth aspect.
---
--- If @layout@ only specifies the layout of the depth aspect of the
--- attachment, the layout of the stencil aspect is specified by the
--- @stencilLayout@ member of a
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'
--- structure included in the @pNext@ chain. Otherwise, @layout@ describes
--- the layout for all relevant image aspects.
---
--- == Valid Usage
---
--- -   If @attachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@
---     /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR'
---
--- -   If @attachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and
---     @aspectMask@ does not include
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',
---     @layout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
---
--- -   If @attachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and
---     @aspectMask@ does not include
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
---     @layout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
---     feature is not enabled, and @attachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@
---     /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',
---
--- -   If @attachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and
---     @aspectMask@ includes
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
---     @layout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',
---
--- -   If @attachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and
---     @aspectMask@ includes both
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
---     and
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
---     and @layout@ is
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
---     the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'
---     structure
---
--- -   If @attachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and
---     @aspectMask@ includes only
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
---     then @layout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   If @attachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and
---     @aspectMask@ includes only
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
---     then @layout@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2'
---
--- -   @layout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'SubpassDescription2',
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'
-data AttachmentReference2 (es :: [Type]) = AttachmentReference2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @attachment@ is either an integer value identifying an attachment at the
-    -- corresponding index in
-    -- 'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo'::@pAttachments@, or
-    -- 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' to signify that
-    -- this attachment is not used.
-    attachment :: Word32
-  , -- | @layout@ is a 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout'
-    -- value specifying the layout the attachment uses during the subpass.
-    layout :: ImageLayout
-  , -- | @aspectMask@ is a mask of which aspect(s) /can/ be accessed within the
-    -- specified subpass as an input attachment.
-    aspectMask :: ImageAspectFlags
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (AttachmentReference2 es)
-
-instance Extensible AttachmentReference2 where
-  extensibleType = STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2
-  setNext x next = x{next = next}
-  getNext AttachmentReference2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AttachmentReference2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @AttachmentReferenceStencilLayout = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (AttachmentReference2 es) where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AttachmentReference2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (attachment)
-    lift $ poke ((p `plusPtr` 20 :: Ptr ImageLayout)) (layout)
-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageAspectFlags)) (aspectMask)
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 20 :: Ptr ImageLayout)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageAspectFlags)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (AttachmentReference2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    attachment <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    layout <- peek @ImageLayout ((p `plusPtr` 20 :: Ptr ImageLayout))
-    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 24 :: Ptr ImageAspectFlags))
-    pure $ AttachmentReference2
-             next attachment layout aspectMask
-
-instance es ~ '[] => Zero (AttachmentReference2 es) where
-  zero = AttachmentReference2
-           ()
-           zero
-           zero
-           zero
-
-
--- | VkSubpassDescription2 - Structure specifying a subpass description
---
--- = Description
---
--- Parameters defined by this structure with the same name as those in
--- 'Graphics.Vulkan.Core10.Pass.SubpassDescription' have the identical
--- effect to those parameters.
---
--- @viewMask@ has the same effect for the described subpass as
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'::@pViewMasks@
--- has on each corresponding subpass.
---
--- == Valid Usage
---
--- -   @pipelineBindPoint@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   @colorAttachmentCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxColorAttachments@
---
--- -   If the first use of an attachment in this render pass is as an input
---     attachment, and the attachment is not also used as a color or
---     depth\/stencil attachment in the same subpass, then @loadOp@ /must/
---     not be
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'
---
--- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment
---     that does not have the value
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the
---     corresponding color attachment /must/ not have the value
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---
--- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment
---     that is not 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     the corresponding color attachment /must/ not have a sample count of
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If @pResolveAttachments@ is not @NULL@, each resolve attachment that
---     is not 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---     /must/ have a sample count of
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   Any given element of @pResolveAttachments@ /must/ have the same
---     'Graphics.Vulkan.Core10.Enums.Format.Format' as its corresponding
---     color attachment
---
--- -   All attachments in @pColorAttachments@ that are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
---     the same sample count
---
--- -   All attachments in @pInputAttachments@ that are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
---     formats whose features contain at least one of
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   All attachments in @pColorAttachments@ that are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
---     formats whose features contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
---
--- -   All attachments in @pResolveAttachments@ that are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
---     formats whose features contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
---
--- -   If @pDepthStencilAttachment@ is not @NULL@ and the attachment is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it
---     /must/ have a format whose features contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, all
---     attachments in @pColorAttachments@ that are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
---     a sample count that is smaller than or equal to the sample count of
---     @pDepthStencilAttachment@ if it is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---
--- -   If neither the @VK_AMD_mixed_attachment_samples@ nor the
---     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if
---     @pDepthStencilAttachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' and any
---     attachments in @pColorAttachments@ are not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', they /must/
---     have the same sample count
---
--- -   The @attachment@ member of any element of @pPreserveAttachments@
---     /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---
--- -   Any given element of @pPreserveAttachments@ /must/ not also be an
---     element of any other member of the subpass description
---
--- -   If any attachment is used by more than one
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' member, then each
---     use /must/ use the same @layout@
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX',
---     it /must/ also include
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX'
---
--- -   If the @attachment@ member of any element of @pInputAttachments@ is
---     not 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then
---     the @aspectMask@ member /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits'
---
--- -   If the @attachment@ member of any element of @pInputAttachments@ is
---     not 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then
---     the @aspectMask@ member /must/ not be @0@
---
--- -   If the @attachment@ member of any element of @pInputAttachments@ is
---     not 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then
---     the @aspectMask@ member /must/ not include
---     'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2'
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlagBits'
---     values
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value
---
--- -   If @inputAttachmentCount@ is not @0@, @pInputAttachments@ /must/ be
---     a valid pointer to an array of @inputAttachmentCount@ valid
---     'AttachmentReference2' structures
---
--- -   If @colorAttachmentCount@ is not @0@, @pColorAttachments@ /must/ be
---     a valid pointer to an array of @colorAttachmentCount@ valid
---     'AttachmentReference2' structures
---
--- -   If @colorAttachmentCount@ is not @0@, and @pResolveAttachments@ is
---     not @NULL@, @pResolveAttachments@ /must/ be a valid pointer to an
---     array of @colorAttachmentCount@ valid 'AttachmentReference2'
---     structures
---
--- -   If @pDepthStencilAttachment@ is not @NULL@,
---     @pDepthStencilAttachment@ /must/ be a valid pointer to a valid
---     'AttachmentReference2' structure
---
--- -   If @preserveAttachmentCount@ is not @0@, @pPreserveAttachments@
---     /must/ be a valid pointer to an array of @preserveAttachmentCount@
---     @uint32_t@ values
---
--- = See Also
---
--- 'AttachmentReference2',
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
--- 'RenderPassCreateInfo2',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlags'
-data SubpassDescription2 (es :: [Type]) = SubpassDescription2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlagBits'
-    -- specifying usage of the subpass.
-    flags :: SubpassDescriptionFlags
-  , -- | @pipelineBindPoint@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
-    -- specifying the pipeline type supported for this subpass.
-    pipelineBindPoint :: PipelineBindPoint
-  , -- | @viewMask@ is a bitfield of view indices describing which views
-    -- rendering is broadcast to in this subpass, when multiview is enabled.
-    viewMask :: Word32
-  , -- | @pInputAttachments@ is a pointer to an array of 'AttachmentReference2'
-    -- structures defining the input attachments for this subpass and their
-    -- layouts.
-    inputAttachments :: Vector (SomeStruct AttachmentReference2)
-  , -- | @pColorAttachments@ is a pointer to an array of 'AttachmentReference2'
-    -- structures defining the color attachments for this subpass and their
-    -- layouts.
-    colorAttachments :: Vector (SomeStruct AttachmentReference2)
-  , -- | @pResolveAttachments@ is an optional array of @colorAttachmentCount@
-    -- 'AttachmentReference2' structures defining the resolve attachments for
-    -- this subpass and their layouts.
-    resolveAttachments :: Vector (SomeStruct AttachmentReference2)
-  , -- | @pDepthStencilAttachment@ is a pointer to a 'AttachmentReference2'
-    -- structure specifying the depth\/stencil attachment for this subpass and
-    -- its layout.
-    depthStencilAttachment :: Maybe (SomeStruct AttachmentReference2)
-  , -- | @pPreserveAttachments@ is a pointer to an array of
-    -- @preserveAttachmentCount@ render pass attachment indices identifying
-    -- attachments that are not used by this subpass, but whose contents /must/
-    -- be preserved throughout the subpass.
-    preserveAttachments :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (SubpassDescription2 es)
-
-instance Extensible SubpassDescription2 where
-  extensibleType = STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2
-  setNext x next = x{next = next}
-  getNext SubpassDescription2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SubpassDescription2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @SubpassDescriptionDepthStencilResolve = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (SubpassDescription2 es) where
-  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SubpassDescription2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr SubpassDescriptionFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (viewMask)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (inputAttachments)) :: Word32))
-    pPInputAttachments' <- ContT $ allocaBytesAligned @(AttachmentReference2 _) ((Data.Vector.length (inputAttachments)) * 32) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPInputAttachments' `plusPtr` (32 * (i)) :: Ptr (AttachmentReference2 _))) (e) . ($ ())) (inputAttachments)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr (AttachmentReference2 _)))) (pPInputAttachments')
-    let pColorAttachmentsLength = Data.Vector.length $ (colorAttachments)
-    let pResolveAttachmentsLength = Data.Vector.length $ (resolveAttachments)
-    lift $ unless (fromIntegral pResolveAttachmentsLength == pColorAttachmentsLength || pResolveAttachmentsLength == 0) $
-      throwIO $ IOError Nothing InvalidArgument "" "pResolveAttachments and pColorAttachments must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral pColorAttachmentsLength :: Word32))
-    pPColorAttachments' <- ContT $ allocaBytesAligned @(AttachmentReference2 _) ((Data.Vector.length (colorAttachments)) * 32) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPColorAttachments' `plusPtr` (32 * (i)) :: Ptr (AttachmentReference2 _))) (e) . ($ ())) (colorAttachments)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (AttachmentReference2 _)))) (pPColorAttachments')
-    pResolveAttachments'' <- if Data.Vector.null (resolveAttachments)
-      then pure nullPtr
-      else do
-        pPResolveAttachments <- ContT $ allocaBytesAligned @(AttachmentReference2 _) (((Data.Vector.length (resolveAttachments))) * 32) 8
-        Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPResolveAttachments `plusPtr` (32 * (i)) :: Ptr (AttachmentReference2 _))) (e) . ($ ())) ((resolveAttachments))
-        pure $ pPResolveAttachments
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (AttachmentReference2 _)))) pResolveAttachments''
-    pDepthStencilAttachment'' <- case (depthStencilAttachment) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (AttachmentReference2 '[])) $ \cont -> withSomeCStruct @AttachmentReference2 (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr (AttachmentReference2 _)))) pDepthStencilAttachment''
-    lift $ poke ((p `plusPtr` 72 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (preserveAttachments)) :: Word32))
-    pPPreserveAttachments' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (preserveAttachments)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPPreserveAttachments' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (preserveAttachments)
-    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr Word32))) (pPPreserveAttachments')
-    lift $ f
-  cStructSize = 88
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 20 :: Ptr PipelineBindPoint)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    pPInputAttachments' <- ContT $ allocaBytesAligned @(AttachmentReference2 _) ((Data.Vector.length (mempty)) * 32) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPInputAttachments' `plusPtr` (32 * (i)) :: Ptr (AttachmentReference2 _))) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr (AttachmentReference2 _)))) (pPInputAttachments')
-    pPColorAttachments' <- ContT $ allocaBytesAligned @(AttachmentReference2 _) ((Data.Vector.length (mempty)) * 32) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPColorAttachments' `plusPtr` (32 * (i)) :: Ptr (AttachmentReference2 _))) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (AttachmentReference2 _)))) (pPColorAttachments')
-    pPPreserveAttachments' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPPreserveAttachments' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr Word32))) (pPPreserveAttachments')
-    lift $ f
-
-instance PeekChain es => FromCStruct (SubpassDescription2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @SubpassDescriptionFlags ((p `plusPtr` 16 :: Ptr SubpassDescriptionFlags))
-    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 20 :: Ptr PipelineBindPoint))
-    viewMask <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    inputAttachmentCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    pInputAttachments <- peek @(Ptr (AttachmentReference2 _)) ((p `plusPtr` 32 :: Ptr (Ptr (AttachmentReference2 a))))
-    pInputAttachments' <- generateM (fromIntegral inputAttachmentCount) (\i -> peekSomeCStruct (forgetExtensions ((pInputAttachments `advancePtrBytes` (32 * (i)) :: Ptr (AttachmentReference2 _)))))
-    colorAttachmentCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    pColorAttachments <- peek @(Ptr (AttachmentReference2 _)) ((p `plusPtr` 48 :: Ptr (Ptr (AttachmentReference2 a))))
-    pColorAttachments' <- generateM (fromIntegral colorAttachmentCount) (\i -> peekSomeCStruct (forgetExtensions ((pColorAttachments `advancePtrBytes` (32 * (i)) :: Ptr (AttachmentReference2 _)))))
-    pResolveAttachments <- peek @(Ptr (AttachmentReference2 _)) ((p `plusPtr` 56 :: Ptr (Ptr (AttachmentReference2 a))))
-    let pResolveAttachmentsLength = if pResolveAttachments == nullPtr then 0 else (fromIntegral colorAttachmentCount)
-    pResolveAttachments' <- generateM pResolveAttachmentsLength (\i -> peekSomeCStruct (forgetExtensions ((pResolveAttachments `advancePtrBytes` (32 * (i)) :: Ptr (AttachmentReference2 _)))))
-    pDepthStencilAttachment <- peek @(Ptr (AttachmentReference2 _)) ((p `plusPtr` 64 :: Ptr (Ptr (AttachmentReference2 a))))
-    pDepthStencilAttachment' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pDepthStencilAttachment
-    preserveAttachmentCount <- peek @Word32 ((p `plusPtr` 72 :: Ptr Word32))
-    pPreserveAttachments <- peek @(Ptr Word32) ((p `plusPtr` 80 :: Ptr (Ptr Word32)))
-    pPreserveAttachments' <- generateM (fromIntegral preserveAttachmentCount) (\i -> peek @Word32 ((pPreserveAttachments `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ SubpassDescription2
-             next flags pipelineBindPoint viewMask pInputAttachments' pColorAttachments' pResolveAttachments' pDepthStencilAttachment' pPreserveAttachments'
-
-instance es ~ '[] => Zero (SubpassDescription2 es) where
-  zero = SubpassDescription2
-           ()
-           zero
-           zero
-           zero
-           mempty
-           mempty
-           mempty
-           Nothing
-           mempty
-
-
--- | VkSubpassDependency2 - Structure specifying a subpass dependency
---
--- = Description
---
--- Parameters defined by this structure with the same name as those in
--- 'Graphics.Vulkan.Core10.Pass.SubpassDependency' have the identical
--- effect to those parameters.
---
--- @viewOffset@ has the same effect for the described subpass dependency as
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'::@pViewOffsets@
--- has on each corresponding subpass dependency.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
---
--- -   @srcSubpass@ /must/ be less than or equal to @dstSubpass@, unless
---     one of them is
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', to avoid
---     cyclic dependencies and ensure a valid execution order
---
--- -   @srcSubpass@ and @dstSubpass@ /must/ not both be equal to
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
---
--- -   If @srcSubpass@ is equal to @dstSubpass@ and not all of the stages
---     in @srcStageMask@ and @dstStageMask@ are
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stages>,
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>
---     pipeline stage in @srcStageMask@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>
---     than or equal to the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   Any access flag included in @dstAccessMask@ /must/ be supported by
---     one of the pipeline stages in @dstStageMask@, as specified in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
---
--- -   If @dependencyFlags@ includes
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
---     @srcSubpass@ /must/ not be equal to
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
---
--- -   If @dependencyFlags@ includes
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
---     @dstSubpass@ /must/ not be equal to
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
---
--- -   If @srcSubpass@ equals @dstSubpass@, and @srcStageMask@ and
---     @dstStageMask@ both include a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stage>,
---     then @dependencyFlags@ /must/ include
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT'
---
--- -   If @viewOffset@ is not equal to @0@, @srcSubpass@ /must/ not be
---     equal to @dstSubpass@
---
--- -   If @dependencyFlags@ does not include
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
---     @viewOffset@ /must/ be @0@
---
--- -   If @viewOffset@ is not @0@, @srcSubpass@ /must/ not be equal to
---     @dstSubpass@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2'
---
--- -   @srcStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     values
---
--- -   @srcStageMask@ /must/ not be @0@
---
--- -   @dstStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     values
---
--- -   @dstStageMask@ /must/ not be @0@
---
--- -   @srcAccessMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
---
--- -   @dstAccessMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
---
--- -   @dependencyFlags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlags',
--- 'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags',
--- 'RenderPassCreateInfo2',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SubpassDependency2 = SubpassDependency2
-  { -- | @srcSubpass@ is the subpass index of the first subpass in the
-    -- dependency, or 'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'.
-    srcSubpass :: Word32
-  , -- | @dstSubpass@ is the subpass index of the second subpass in the
-    -- dependency, or 'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'.
-    dstSubpass :: Word32
-  , -- | @srcStageMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
-    -- specifying the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>.
-    srcStageMask :: PipelineStageFlags
-  , -- | @dstStageMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
-    -- specifying the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
-    dstStageMask :: PipelineStageFlags
-  , -- | @srcAccessMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying
-    -- a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>.
-    srcAccessMask :: AccessFlags
-  , -- | @dstAccessMask@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying
-    -- a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>.
-    dstAccessMask :: AccessFlags
-  , -- | @dependencyFlags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits'.
-    dependencyFlags :: DependencyFlags
-  , -- | @viewOffset@ controls which views in the source subpass the views in the
-    -- destination subpass depend on.
-    viewOffset :: Int32
-  }
-  deriving (Typeable)
-deriving instance Show SubpassDependency2
-
-instance ToCStruct SubpassDependency2 where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SubpassDependency2{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (srcSubpass)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (dstSubpass)
-    poke ((p `plusPtr` 24 :: Ptr PipelineStageFlags)) (srcStageMask)
-    poke ((p `plusPtr` 28 :: Ptr PipelineStageFlags)) (dstStageMask)
-    poke ((p `plusPtr` 32 :: Ptr AccessFlags)) (srcAccessMask)
-    poke ((p `plusPtr` 36 :: Ptr AccessFlags)) (dstAccessMask)
-    poke ((p `plusPtr` 40 :: Ptr DependencyFlags)) (dependencyFlags)
-    poke ((p `plusPtr` 44 :: Ptr Int32)) (viewOffset)
-    f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr PipelineStageFlags)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr PipelineStageFlags)) (zero)
-    f
-
-instance FromCStruct SubpassDependency2 where
-  peekCStruct p = do
-    srcSubpass <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    dstSubpass <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    srcStageMask <- peek @PipelineStageFlags ((p `plusPtr` 24 :: Ptr PipelineStageFlags))
-    dstStageMask <- peek @PipelineStageFlags ((p `plusPtr` 28 :: Ptr PipelineStageFlags))
-    srcAccessMask <- peek @AccessFlags ((p `plusPtr` 32 :: Ptr AccessFlags))
-    dstAccessMask <- peek @AccessFlags ((p `plusPtr` 36 :: Ptr AccessFlags))
-    dependencyFlags <- peek @DependencyFlags ((p `plusPtr` 40 :: Ptr DependencyFlags))
-    viewOffset <- peek @Int32 ((p `plusPtr` 44 :: Ptr Int32))
-    pure $ SubpassDependency2
-             srcSubpass dstSubpass srcStageMask dstStageMask srcAccessMask dstAccessMask dependencyFlags viewOffset
-
-instance Storable SubpassDependency2 where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SubpassDependency2 where
-  zero = SubpassDependency2
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkRenderPassCreateInfo2 - Structure specifying parameters of a newly
--- created render pass
---
--- = Description
---
--- Parameters defined by this structure with the same name as those in
--- 'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo' have the identical
--- effect to those parameters; the child structures are variants of those
--- used in 'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo' which add
--- @sType@ and @pNext@ parameters, allowing them to be extended.
---
--- If the 'SubpassDescription2'::@viewMask@ member of any element of
--- @pSubpasses@ is not zero, /multiview/ functionality is considered to be
--- enabled for this render pass.
---
--- @correlatedViewMaskCount@ and @pCorrelatedViewMasks@ have the same
--- effect as
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'::@correlationMaskCount@
--- and
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'::@pCorrelationMasks@,
--- respectively.
---
--- == Valid Usage
---
--- -   If any two subpasses operate on attachments with overlapping ranges
---     of the same 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object,
---     and at least one subpass writes to that area of
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory', a subpass dependency
---     /must/ be included (either directly or via some intermediate
---     subpasses) between them
---
--- -   If the @attachment@ member of any element of @pInputAttachments@,
---     @pColorAttachments@, @pResolveAttachments@ or
---     @pDepthStencilAttachment@, or the attachment indexed by any element
---     of @pPreserveAttachments@ in any given element of @pSubpasses@ is
---     bound to a range of a 'Graphics.Vulkan.Core10.Handles.DeviceMemory'
---     object that overlaps with any other attachment in any subpass
---     (including the same subpass), the 'AttachmentDescription2'
---     structures describing them /must/ include
---     'Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'
---     in @flags@
---
--- -   If the @attachment@ member of any element of @pInputAttachments@,
---     @pColorAttachments@, @pResolveAttachments@ or
---     @pDepthStencilAttachment@, or any element of @pPreserveAttachments@
---     in any given element of @pSubpasses@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it /must/
---     be less than @attachmentCount@
---
--- -   For any member of @pAttachments@ with a @loadOp@ equal to
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR',
---     the first use of that attachment /must/ not specify a @layout@ equal
---     to
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
---
--- -   For any member of @pAttachments@ with a @stencilLoadOp@ equal to
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR',
---     the first use of that attachment /must/ not specify a @layout@ equal
---     to
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL',
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
---
--- -   For any element of @pDependencies@, if the @srcSubpass@ is not
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage
---     flags included in the @srcStageMask@ member of that dependency
---     /must/ be a pipeline stage supported by the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types pipeline>
---     identified by the @pipelineBindPoint@ member of the source subpass
---
--- -   For any element of @pDependencies@, if the @dstSubpass@ is not
---     'Graphics.Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage
---     flags included in the @dstStageMask@ member of that dependency
---     /must/ be a pipeline stage supported by the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types pipeline>
---     identified by the @pipelineBindPoint@ member of the destination
---     subpass
---
--- -   The set of bits included in any element of @pCorrelatedViewMasks@
---     /must/ not overlap with the set of bits included in any other
---     element of @pCorrelatedViewMasks@
---
--- -   If the 'SubpassDescription2'::@viewMask@ member of all elements of
---     @pSubpasses@ is @0@, @correlatedViewMaskCount@ /must/ be @0@
---
--- -   The 'SubpassDescription2'::@viewMask@ member of all elements of
---     @pSubpasses@ /must/ either all be @0@, or all not be @0@
---
--- -   If the 'SubpassDescription2'::@viewMask@ member of all elements of
---     @pSubpasses@ is @0@, the @dependencyFlags@ member of any element of
---     @pDependencies@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
---
--- -   For any element of @pDependencies@ where its @srcSubpass@ member
---     equals its @dstSubpass@ member, if the @viewMask@ member of the
---     corresponding element of @pSubpasses@ includes more than one bit,
---     its @dependencyFlags@ member /must/ include
---     'Graphics.Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
---
--- -   The @viewMask@ member /must/ not have a bit set at an index greater
---     than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferLayers@
---
--- -   If the @attachment@ member of any element of the @pInputAttachments@
---     member of any element of @pSubpasses@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the
---     @aspectMask@ member of that element of @pInputAttachments@ /must/
---     only include aspects that are present in images of the format
---     specified by the element of @pAttachments@ specified by @attachment@
---
--- -   The @srcSubpass@ member of each element of @pDependencies@ /must/ be
---     less than @subpassCount@
---
--- -   The @dstSubpass@ member of each element of @pDependencies@ /must/ be
---     less than @subpassCount@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlagBits'
---     values
---
--- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
---     pointer to an array of @attachmentCount@ valid
---     'AttachmentDescription2' structures
---
--- -   @pSubpasses@ /must/ be a valid pointer to an array of @subpassCount@
---     valid 'SubpassDescription2' structures
---
--- -   If @dependencyCount@ is not @0@, @pDependencies@ /must/ be a valid
---     pointer to an array of @dependencyCount@ valid 'SubpassDependency2'
---     structures
---
--- -   If @correlatedViewMaskCount@ is not @0@, @pCorrelatedViewMasks@
---     /must/ be a valid pointer to an array of @correlatedViewMaskCount@
---     @uint32_t@ values
---
--- -   @subpassCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'AttachmentDescription2',
--- 'Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'SubpassDependency2', 'SubpassDescription2', 'createRenderPass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR'
-data RenderPassCreateInfo2 (es :: [Type]) = RenderPassCreateInfo2
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is reserved for future use.
-    flags :: RenderPassCreateFlags
-  , -- | @pAttachments@ is a pointer to an array of @attachmentCount@
-    -- 'AttachmentDescription2' structures describing the attachments used by
-    -- the render pass.
-    attachments :: Vector (SomeStruct AttachmentDescription2)
-  , -- | @pSubpasses@ is a pointer to an array of @subpassCount@
-    -- 'SubpassDescription2' structures describing each subpass.
-    subpasses :: Vector (SomeStruct SubpassDescription2)
-  , -- | @pDependencies@ is a pointer to an array of @dependencyCount@
-    -- 'Graphics.Vulkan.Core10.Pass.SubpassDependency' structures describing
-    -- dependencies between pairs of subpasses.
-    dependencies :: Vector SubpassDependency2
-  , -- | @pCorrelatedViewMasks@ is a pointer to an array of view masks indicating
-    -- sets of views that /may/ be more efficient to render concurrently.
-    correlatedViewMasks :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (RenderPassCreateInfo2 es)
-
-instance Extensible RenderPassCreateInfo2 where
-  extensibleType = STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2
-  setNext x next = x{next = next}
-  getNext RenderPassCreateInfo2{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RenderPassCreateInfo2 e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @RenderPassFragmentDensityMapCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (RenderPassCreateInfo2 es) where
-  withCStruct x f = allocaBytesAligned 80 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RenderPassCreateInfo2{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPassCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
-    pPAttachments' <- ContT $ allocaBytesAligned @(AttachmentDescription2 _) ((Data.Vector.length (attachments)) * 56) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPAttachments' `plusPtr` (56 * (i)) :: Ptr (AttachmentDescription2 _))) (e) . ($ ())) (attachments)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (AttachmentDescription2 _)))) (pPAttachments')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (subpasses)) :: Word32))
-    pPSubpasses' <- ContT $ allocaBytesAligned @(SubpassDescription2 _) ((Data.Vector.length (subpasses)) * 88) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPSubpasses' `plusPtr` (88 * (i)) :: Ptr (SubpassDescription2 _))) (e) . ($ ())) (subpasses)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (SubpassDescription2 _)))) (pPSubpasses')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (dependencies)) :: Word32))
-    pPDependencies' <- ContT $ allocaBytesAligned @SubpassDependency2 ((Data.Vector.length (dependencies)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDependencies' `plusPtr` (48 * (i)) :: Ptr SubpassDependency2) (e) . ($ ())) (dependencies)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency2))) (pPDependencies')
-    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (correlatedViewMasks)) :: Word32))
-    pPCorrelatedViewMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (correlatedViewMasks)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPCorrelatedViewMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (correlatedViewMasks)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPCorrelatedViewMasks')
-    lift $ f
-  cStructSize = 80
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPAttachments' <- ContT $ allocaBytesAligned @(AttachmentDescription2 _) ((Data.Vector.length (mempty)) * 56) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPAttachments' `plusPtr` (56 * (i)) :: Ptr (AttachmentDescription2 _))) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (AttachmentDescription2 _)))) (pPAttachments')
-    pPSubpasses' <- ContT $ allocaBytesAligned @(SubpassDescription2 _) ((Data.Vector.length (mempty)) * 88) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPSubpasses' `plusPtr` (88 * (i)) :: Ptr (SubpassDescription2 _))) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (SubpassDescription2 _)))) (pPSubpasses')
-    pPDependencies' <- ContT $ allocaBytesAligned @SubpassDependency2 ((Data.Vector.length (mempty)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDependencies' `plusPtr` (48 * (i)) :: Ptr SubpassDependency2) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency2))) (pPDependencies')
-    pPCorrelatedViewMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPCorrelatedViewMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPCorrelatedViewMasks')
-    lift $ f
-
-instance PeekChain es => FromCStruct (RenderPassCreateInfo2 es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @RenderPassCreateFlags ((p `plusPtr` 16 :: Ptr RenderPassCreateFlags))
-    attachmentCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pAttachments <- peek @(Ptr (AttachmentDescription2 _)) ((p `plusPtr` 24 :: Ptr (Ptr (AttachmentDescription2 a))))
-    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peekSomeCStruct (forgetExtensions ((pAttachments `advancePtrBytes` (56 * (i)) :: Ptr (AttachmentDescription2 _)))))
-    subpassCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pSubpasses <- peek @(Ptr (SubpassDescription2 _)) ((p `plusPtr` 40 :: Ptr (Ptr (SubpassDescription2 a))))
-    pSubpasses' <- generateM (fromIntegral subpassCount) (\i -> peekSomeCStruct (forgetExtensions ((pSubpasses `advancePtrBytes` (88 * (i)) :: Ptr (SubpassDescription2 _)))))
-    dependencyCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pDependencies <- peek @(Ptr SubpassDependency2) ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency2)))
-    pDependencies' <- generateM (fromIntegral dependencyCount) (\i -> peekCStruct @SubpassDependency2 ((pDependencies `advancePtrBytes` (48 * (i)) :: Ptr SubpassDependency2)))
-    correlatedViewMaskCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    pCorrelatedViewMasks <- peek @(Ptr Word32) ((p `plusPtr` 72 :: Ptr (Ptr Word32)))
-    pCorrelatedViewMasks' <- generateM (fromIntegral correlatedViewMaskCount) (\i -> peek @Word32 ((pCorrelatedViewMasks `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ RenderPassCreateInfo2
-             next flags pAttachments' pSubpasses' pDependencies' pCorrelatedViewMasks'
-
-instance es ~ '[] => Zero (RenderPassCreateInfo2 es) where
-  zero = RenderPassCreateInfo2
-           ()
-           zero
-           mempty
-           mempty
-           mempty
-           mempty
-
-
--- | VkSubpassBeginInfo - Structure specifying subpass begin info
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Core10.Enums.SubpassContents.SubpassContents',
--- 'cmdBeginRenderPass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.cmdBeginRenderPass2KHR',
--- 'cmdNextSubpass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.cmdNextSubpass2KHR'
-data SubpassBeginInfo = SubpassBeginInfo
-  { -- | @contents@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.SubpassContents.SubpassContents' value
-    contents :: SubpassContents }
-  deriving (Typeable)
-deriving instance Show SubpassBeginInfo
-
-instance ToCStruct SubpassBeginInfo where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SubpassBeginInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_BEGIN_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SubpassContents)) (contents)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_BEGIN_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SubpassContents)) (zero)
-    f
-
-instance FromCStruct SubpassBeginInfo where
-  peekCStruct p = do
-    contents <- peek @SubpassContents ((p `plusPtr` 16 :: Ptr SubpassContents))
-    pure $ SubpassBeginInfo
-             contents
-
-instance Storable SubpassBeginInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SubpassBeginInfo where
-  zero = SubpassBeginInfo
-           zero
-
-
--- | VkSubpassEndInfo - Structure specifying subpass end info
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdEndRenderPass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.cmdEndRenderPass2KHR',
--- 'cmdNextSubpass2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2.cmdNextSubpass2KHR'
-data SubpassEndInfo = SubpassEndInfo
-  {}
-  deriving (Typeable)
-deriving instance Show SubpassEndInfo
-
-instance ToCStruct SubpassEndInfo where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SubpassEndInfo f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_END_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_END_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct SubpassEndInfo where
-  peekCStruct _ = pure $ SubpassEndInfo
-                           
-
-instance Storable SubpassEndInfo where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SubpassEndInfo where
-  zero = SubpassEndInfo
-           
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs-boot
+++ /dev/null
@@ -1,75 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2  ( AttachmentDescription2
-                                                                       , AttachmentReference2
-                                                                       , RenderPassCreateInfo2
-                                                                       , SubpassBeginInfo
-                                                                       , SubpassDependency2
-                                                                       , SubpassDescription2
-                                                                       , SubpassEndInfo
-                                                                       ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role AttachmentDescription2 nominal
-data AttachmentDescription2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (AttachmentDescription2 es)
-instance Show (Chain es) => Show (AttachmentDescription2 es)
-
-instance PeekChain es => FromCStruct (AttachmentDescription2 es)
-
-
-type role AttachmentReference2 nominal
-data AttachmentReference2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (AttachmentReference2 es)
-instance Show (Chain es) => Show (AttachmentReference2 es)
-
-instance PeekChain es => FromCStruct (AttachmentReference2 es)
-
-
-type role RenderPassCreateInfo2 nominal
-data RenderPassCreateInfo2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (RenderPassCreateInfo2 es)
-instance Show (Chain es) => Show (RenderPassCreateInfo2 es)
-
-instance PeekChain es => FromCStruct (RenderPassCreateInfo2 es)
-
-
-data SubpassBeginInfo
-
-instance ToCStruct SubpassBeginInfo
-instance Show SubpassBeginInfo
-
-instance FromCStruct SubpassBeginInfo
-
-
-data SubpassDependency2
-
-instance ToCStruct SubpassDependency2
-instance Show SubpassDependency2
-
-instance FromCStruct SubpassDependency2
-
-
-type role SubpassDescription2 nominal
-data SubpassDescription2 (es :: [Type])
-
-instance PokeChain es => ToCStruct (SubpassDescription2 es)
-instance Show (Chain es) => Show (SubpassDescription2 es)
-
-instance PeekChain es => FromCStruct (SubpassDescription2 es)
-
-
-data SubpassEndInfo
-
-instance ToCStruct SubpassEndInfo
-instance Show SubpassEndInfo
-
-instance FromCStruct SubpassEndInfo
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs
+++ /dev/null
@@ -1,289 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve  ( PhysicalDeviceDepthStencilResolveProperties(..)
-                                                                          , SubpassDescriptionDepthStencilResolve(..)
-                                                                          , StructureType(..)
-                                                                          , ResolveModeFlagBits(..)
-                                                                          , ResolveModeFlags
-                                                                          ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Extends (forgetExtensions)
-import Graphics.Vulkan.CStruct.Extends (peekSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (withSomeCStruct)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentReference2)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits)
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
-import Graphics.Vulkan.CStruct.Extends (SomeStruct)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE))
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(..))
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceDepthStencilResolveProperties - Structure describing
--- depth\/stencil resolve properties that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceDepthStencilResolveProperties'
--- structure describe the following implementation-dependent limits:
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceDepthStencilResolveProperties = PhysicalDeviceDepthStencilResolveProperties
-  { -- | @supportedDepthResolveModes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'
-    -- indicating the set of supported depth resolve modes.
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'
-    -- /must/ be included in the set but implementations /may/ support
-    -- additional modes.
-    supportedDepthResolveModes :: ResolveModeFlags
-  , -- | @supportedStencilResolveModes@ is a bitmask of
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'
-    -- indicating the set of supported stencil resolve modes.
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'
-    -- /must/ be included in the set but implementations /may/ support
-    -- additional modes.
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_AVERAGE_BIT'
-    -- /must/ not be included in the set.
-    supportedStencilResolveModes :: ResolveModeFlags
-  , -- | @independentResolveNone@ is 'Graphics.Vulkan.Core10.BaseType.TRUE' if
-    -- the implementation supports setting the depth and stencil resolve modes
-    -- to different values when one of those modes is
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'.
-    -- Otherwise the implementation only supports setting both modes to the
-    -- same value.
-    independentResolveNone :: Bool
-  , -- | @independentResolve@ is 'Graphics.Vulkan.Core10.BaseType.TRUE' if the
-    -- implementation supports all combinations of the supported depth and
-    -- stencil resolve modes, including setting either depth or stencil resolve
-    -- mode to
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. An
-    -- implementation that supports @independentResolve@ /must/ also support
-    -- @independentResolveNone@.
-    independentResolve :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceDepthStencilResolveProperties
-
-instance ToCStruct PhysicalDeviceDepthStencilResolveProperties where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceDepthStencilResolveProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ResolveModeFlags)) (supportedDepthResolveModes)
-    poke ((p `plusPtr` 20 :: Ptr ResolveModeFlags)) (supportedStencilResolveModes)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (independentResolveNone))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (independentResolve))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ResolveModeFlags)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr ResolveModeFlags)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceDepthStencilResolveProperties where
-  peekCStruct p = do
-    supportedDepthResolveModes <- peek @ResolveModeFlags ((p `plusPtr` 16 :: Ptr ResolveModeFlags))
-    supportedStencilResolveModes <- peek @ResolveModeFlags ((p `plusPtr` 20 :: Ptr ResolveModeFlags))
-    independentResolveNone <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    independentResolve <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    pure $ PhysicalDeviceDepthStencilResolveProperties
-             supportedDepthResolveModes supportedStencilResolveModes (bool32ToBool independentResolveNone) (bool32ToBool independentResolve)
-
-instance Storable PhysicalDeviceDepthStencilResolveProperties where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceDepthStencilResolveProperties where
-  zero = PhysicalDeviceDepthStencilResolveProperties
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkSubpassDescriptionDepthStencilResolve - Structure specifying
--- depth\/stencil resolve operations for a subpass
---
--- == Valid Usage
---
--- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have
---     the value 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     @pDepthStencilAttachment@ /must/ not have the value
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---
--- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have
---     the value 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     @depthResolveMode@ and @stencilResolveMode@ /must/ not both be
---     'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'
---
--- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have
---     the value 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     @pDepthStencilAttachment@ /must/ not have a sample count of
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have
---     the value 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     @pDepthStencilResolveAttachment@ /must/ have a sample count of
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
---
--- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have
---     the value 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
---     then it /must/ have a format whose features contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
---
--- -   If the 'Graphics.Vulkan.Core10.Enums.Format.Format' of
---     @pDepthStencilResolveAttachment@ has a depth component, then the
---     'Graphics.Vulkan.Core10.Enums.Format.Format' of
---     @pDepthStencilAttachment@ /must/ have a depth component with the
---     same number of bits and numerical type
---
--- -   If the 'Graphics.Vulkan.Core10.Enums.Format.Format' of
---     @pDepthStencilResolveAttachment@ has a stencil component, then the
---     'Graphics.Vulkan.Core10.Enums.Format.Format' of
---     @pDepthStencilAttachment@ /must/ have a stencil component with the
---     same number of bits and numerical type
---
--- -   The value of @depthResolveMode@ /must/ be one of the bits set in
---     'PhysicalDeviceDepthStencilResolveProperties'::@supportedDepthResolveModes@
---     or
---     'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'
---
--- -   The value of @stencilResolveMode@ /must/ be one of the bits set in
---     'PhysicalDeviceDepthStencilResolveProperties'::@supportedStencilResolveModes@
---     or
---     'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'
---
--- -   If the 'Graphics.Vulkan.Core10.Enums.Format.Format' of
---     @pDepthStencilResolveAttachment@ has both depth and stencil
---     components,
---     'PhysicalDeviceDepthStencilResolveProperties'::@independentResolve@
---     is 'Graphics.Vulkan.Core10.BaseType.FALSE', and
---     'PhysicalDeviceDepthStencilResolveProperties'::@independentResolveNone@
---     is 'Graphics.Vulkan.Core10.BaseType.FALSE', then the values of
---     @depthResolveMode@ and @stencilResolveMode@ /must/ be identical
---
--- -   If the 'Graphics.Vulkan.Core10.Enums.Format.Format' of
---     @pDepthStencilResolveAttachment@ has both depth and stencil
---     components,
---     'PhysicalDeviceDepthStencilResolveProperties'::@independentResolve@
---     is 'Graphics.Vulkan.Core10.BaseType.FALSE' and
---     'PhysicalDeviceDepthStencilResolveProperties'::@independentResolveNone@
---     is 'Graphics.Vulkan.Core10.BaseType.TRUE', then the values of
---     @depthResolveMode@ and @stencilResolveMode@ /must/ be identical or
---     one of them /must/ be
---     'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE'
---
--- -   @depthResolveMode@ /must/ be a valid
---     'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'
---     value
---
--- -   @stencilResolveMode@ /must/ be a valid
---     'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'
---     value
---
--- -   If @pDepthStencilResolveAttachment@ is not @NULL@,
---     @pDepthStencilResolveAttachment@ /must/ be a valid pointer to a
---     valid
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2'
---     structure
---
--- = See Also
---
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2',
--- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SubpassDescriptionDepthStencilResolve = SubpassDescriptionDepthStencilResolve
-  { -- | @depthResolveMode@ is a bitmask of
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'
-    -- describing the depth resolve mode.
-    depthResolveMode :: ResolveModeFlagBits
-  , -- | @stencilResolveMode@ is a bitmask of
-    -- 'Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'
-    -- describing the stencil resolve mode.
-    stencilResolveMode :: ResolveModeFlagBits
-  , -- | @pDepthStencilResolveAttachment@ is an optional
-    -- 'Graphics.Vulkan.Core10.Pass.AttachmentReference' structure defining the
-    -- depth\/stencil resolve attachment for this subpass and its layout.
-    depthStencilResolveAttachment :: Maybe (SomeStruct AttachmentReference2)
-  }
-  deriving (Typeable)
-deriving instance Show SubpassDescriptionDepthStencilResolve
-
-instance ToCStruct SubpassDescriptionDepthStencilResolve where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SubpassDescriptionDepthStencilResolve{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr ResolveModeFlagBits)) (depthResolveMode)
-    lift $ poke ((p `plusPtr` 20 :: Ptr ResolveModeFlagBits)) (stencilResolveMode)
-    pDepthStencilResolveAttachment'' <- case (depthStencilResolveAttachment) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (AttachmentReference2 '[])) $ \cont -> withSomeCStruct @AttachmentReference2 (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (AttachmentReference2 _)))) pDepthStencilResolveAttachment''
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ResolveModeFlagBits)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr ResolveModeFlagBits)) (zero)
-    f
-
-instance FromCStruct SubpassDescriptionDepthStencilResolve where
-  peekCStruct p = do
-    depthResolveMode <- peek @ResolveModeFlagBits ((p `plusPtr` 16 :: Ptr ResolveModeFlagBits))
-    stencilResolveMode <- peek @ResolveModeFlagBits ((p `plusPtr` 20 :: Ptr ResolveModeFlagBits))
-    pDepthStencilResolveAttachment <- peek @(Ptr (AttachmentReference2 _)) ((p `plusPtr` 24 :: Ptr (Ptr (AttachmentReference2 a))))
-    pDepthStencilResolveAttachment' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pDepthStencilResolveAttachment
-    pure $ SubpassDescriptionDepthStencilResolve
-             depthResolveMode stencilResolveMode pDepthStencilResolveAttachment'
-
-instance Zero SubpassDescriptionDepthStencilResolve where
-  zero = SubpassDescriptionDepthStencilResolve
-           zero
-           zero
-           Nothing
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve  ( PhysicalDeviceDepthStencilResolveProperties
-                                                                          , SubpassDescriptionDepthStencilResolve
-                                                                          ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceDepthStencilResolveProperties
-
-instance ToCStruct PhysicalDeviceDepthStencilResolveProperties
-instance Show PhysicalDeviceDepthStencilResolveProperties
-
-instance FromCStruct PhysicalDeviceDepthStencilResolveProperties
-
-
-data SubpassDescriptionDepthStencilResolve
-
-instance ToCStruct SubpassDescriptionDepthStencilResolve
-instance Show SubpassDescriptionDepthStencilResolve
-
-instance FromCStruct SubpassDescriptionDepthStencilResolve
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs
+++ /dev/null
@@ -1,692 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count  ( cmdDrawIndirectCount
-                                                                        , cmdDrawIndexedIndirectCount
-                                                                        ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Control.Monad.IO.Class (MonadIO)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndexedIndirectCount))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndirectCount))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDrawIndirectCount
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDrawIndirectCount - Perform an indirect draw with the draw count
--- sourced from a buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @buffer@ is the buffer containing draw parameters.
---
--- -   @offset@ is the byte offset into @buffer@ where parameters begin.
---
--- -   @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
---
--- 'cmdDrawIndirectCount' behaves similarly to
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' 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 a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   The current render pass /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   Image subresources used as attachments in the current render pass
---     /must/ not be accessed in any way other than as an attachment by
---     this command
---
--- -   If the draw is recorded in a render pass instance with multiview
---     enabled, the maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   If the bound graphics pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     either valid or 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     buffers bound
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, all vertex input bindings accessed via
---     vertex input variables declared in the vertex shader entry point’s
---     interface /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   For a given vertex buffer binding, any attribute data fetched /must/
---     be entirely contained within the corresponding vertex buffer
---     binding, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @buffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If @countBuffer@ is non-sparse then it /must/ be bound completely
---     and contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @countBuffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @countBufferOffset@ /must/ be a multiple of @4@
---
--- -   The count stored in @countBuffer@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
---
--- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or
---     equal to
---     sizeof('Graphics.Vulkan.Core10.OtherTypes.DrawIndirectCommand')
---
--- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×
---     (@maxDrawCount@ - 1) + @offset@ +
---     sizeof('Graphics.Vulkan.Core10.OtherTypes.DrawIndirectCommand'))
---     /must/ be less than or equal to the size of @buffer@
---
--- -   If the count stored in @countBuffer@ is equal to @1@, (@offset@ +
---     sizeof('Graphics.Vulkan.Core10.OtherTypes.DrawIndirectCommand'))
---     /must/ be less than or equal to the size of @buffer@
---
--- -   If the count stored in @countBuffer@ is greater than @1@, (@stride@
---     × (@drawCount@ - 1) + @offset@ +
---     sizeof('Graphics.Vulkan.Core10.OtherTypes.DrawIndirectCommand'))
---     /must/ be less than or equal to the size of @buffer@
---
--- -   If
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectCount drawIndirectCount>
---     is not enabled this function /must/ not be used
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @countBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /must/ have
---     been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdDrawIndirectCount :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
-cmdDrawIndirectCount commandBuffer buffer offset countBuffer countBufferOffset maxDrawCount stride = liftIO $ do
-  let vkCmdDrawIndirectCount' = mkVkCmdDrawIndirectCount (pVkCmdDrawIndirectCount (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDrawIndirectCount' (commandBufferHandle (commandBuffer)) (buffer) (offset) (countBuffer) (countBufferOffset) (maxDrawCount) (stride)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDrawIndexedIndirectCount
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDrawIndexedIndirectCount - Perform an indexed indirect draw with
--- the draw count sourced from a buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @buffer@ is the buffer containing draw parameters.
---
--- -   @offset@ is the byte offset into @buffer@ where parameters begin.
---
--- -   @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
---
--- 'cmdDrawIndexedIndirectCount' behaves similarly to
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'
--- 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 a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   The current render pass /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   Image subresources used as attachments in the current render pass
---     /must/ not be accessed in any way other than as an attachment by
---     this command
---
--- -   If the draw is recorded in a render pass instance with multiview
---     enabled, the maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   If the bound graphics pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     either valid or 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     buffers bound
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, all vertex input bindings accessed via
---     vertex input variables declared in the vertex shader entry point’s
---     interface /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   For a given vertex buffer binding, any attribute data fetched /must/
---     be entirely contained within the corresponding vertex buffer
---     binding, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @buffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If @countBuffer@ is non-sparse then it /must/ be bound completely
---     and contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @countBuffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @countBufferOffset@ /must/ be a multiple of @4@
---
--- -   The count stored in @countBuffer@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
---
--- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or
---     equal to
---     sizeof('Graphics.Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')
---
--- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×
---     (@maxDrawCount@ - 1) + @offset@ +
---     sizeof('Graphics.Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))
---     /must/ be less than or equal to the size of @buffer@
---
--- -   If count stored in @countBuffer@ is equal to @1@, (@offset@ +
---     sizeof('Graphics.Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))
---     /must/ be less than or equal to the size of @buffer@
---
--- -   If count stored in @countBuffer@ is greater than @1@, (@stride@ ×
---     (@drawCount@ - 1) + @offset@ +
---     sizeof('Graphics.Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))
---     /must/ be less than or equal to the size of @buffer@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @countBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /must/ have
---     been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdDrawIndexedIndirectCount :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
-cmdDrawIndexedIndirectCount commandBuffer buffer offset countBuffer countBufferOffset maxDrawCount stride = liftIO $ do
-  let vkCmdDrawIndexedIndirectCount' = mkVkCmdDrawIndexedIndirectCount (pVkCmdDrawIndexedIndirectCount (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDrawIndexedIndirectCount' (commandBufferHandle (commandBuffer)) (buffer) (offset) (countBuffer) (countBufferOffset) (maxDrawCount) (stride)
-  pure $ ()
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs
+++ /dev/null
@@ -1,178 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties  ( ConformanceVersion(..)
-                                                                      , PhysicalDeviceDriverProperties(..)
-                                                                      , StructureType(..)
-                                                                      , DriverId(..)
-                                                                      , MAX_DRIVER_NAME_SIZE
-                                                                      , pattern MAX_DRIVER_NAME_SIZE
-                                                                      , MAX_DRIVER_INFO_SIZE
-                                                                      , pattern MAX_DRIVER_INFO_SIZE
-                                                                      ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.ByteString (packCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word8)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.APIConstants (MAX_DRIVER_INFO_SIZE)
-import Graphics.Vulkan.Core10.APIConstants (MAX_DRIVER_NAME_SIZE)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(..))
-import Graphics.Vulkan.Core10.APIConstants (MAX_DRIVER_INFO_SIZE)
-import Graphics.Vulkan.Core10.APIConstants (MAX_DRIVER_NAME_SIZE)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_DRIVER_INFO_SIZE)
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_DRIVER_NAME_SIZE)
--- | VkConformanceVersion - Structure containing the conformance test suite
--- version the implementation is compliant with
---
--- = See Also
---
--- 'PhysicalDeviceDriverProperties',
--- 'Graphics.Vulkan.Core12.PhysicalDeviceVulkan12Properties'
-data ConformanceVersion = ConformanceVersion
-  { -- | @major@ is the major version number of the conformance test suite.
-    major :: Word8
-  , -- | @minor@ is the minor version number of the conformance test suite.
-    minor :: Word8
-  , -- | @subminor@ is the subminor version number of the conformance test suite.
-    subminor :: Word8
-  , -- | @patch@ is the patch version number of the conformance test suite.
-    patch :: Word8
-  }
-  deriving (Typeable)
-deriving instance Show ConformanceVersion
-
-instance ToCStruct ConformanceVersion where
-  withCStruct x f = allocaBytesAligned 4 1 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ConformanceVersion{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word8)) (major)
-    poke ((p `plusPtr` 1 :: Ptr Word8)) (minor)
-    poke ((p `plusPtr` 2 :: Ptr Word8)) (subminor)
-    poke ((p `plusPtr` 3 :: Ptr Word8)) (patch)
-    f
-  cStructSize = 4
-  cStructAlignment = 1
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word8)) (zero)
-    poke ((p `plusPtr` 1 :: Ptr Word8)) (zero)
-    poke ((p `plusPtr` 2 :: Ptr Word8)) (zero)
-    poke ((p `plusPtr` 3 :: Ptr Word8)) (zero)
-    f
-
-instance FromCStruct ConformanceVersion where
-  peekCStruct p = do
-    major <- peek @Word8 ((p `plusPtr` 0 :: Ptr Word8))
-    minor <- peek @Word8 ((p `plusPtr` 1 :: Ptr Word8))
-    subminor <- peek @Word8 ((p `plusPtr` 2 :: Ptr Word8))
-    patch <- peek @Word8 ((p `plusPtr` 3 :: Ptr Word8))
-    pure $ ConformanceVersion
-             major minor subminor patch
-
-instance Storable ConformanceVersion where
-  sizeOf ~_ = 4
-  alignment ~_ = 1
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ConformanceVersion where
-  zero = ConformanceVersion
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceDriverProperties - Structure containing driver
--- identification information
---
--- = Description
---
--- @driverID@ /must/ be immutable for a given driver across instances,
--- processes, driver versions, and system reboots.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'ConformanceVersion', 'Graphics.Vulkan.Core12.Enums.DriverId.DriverId',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceDriverProperties = PhysicalDeviceDriverProperties
-  { -- | @driverID@ is a unique identifier for the driver of the physical device.
-    driverID :: DriverId
-  , -- | @driverName@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DRIVER_NAME_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which is the name of the
-    -- driver.
-    driverName :: ByteString
-  , -- | @driverInfo@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DRIVER_INFO_SIZE' @char@
-    -- containing a null-terminated UTF-8 string with additional information
-    -- about the driver.
-    driverInfo :: ByteString
-  , -- | @conformanceVersion@ is the version of the Vulkan conformance test this
-    -- driver is conformant against (see 'ConformanceVersion').
-    conformanceVersion :: ConformanceVersion
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceDriverProperties
-
-instance ToCStruct PhysicalDeviceDriverProperties where
-  withCStruct x f = allocaBytesAligned 536 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceDriverProperties{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DriverId)) (driverID)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))) (driverName)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))) (driverInfo)
-    ContT $ pokeCStruct ((p `plusPtr` 532 :: Ptr ConformanceVersion)) (conformanceVersion) . ($ ())
-    lift $ f
-  cStructSize = 536
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DriverId)) (zero)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))) (mempty)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))) (mempty)
-    ContT $ pokeCStruct ((p `plusPtr` 532 :: Ptr ConformanceVersion)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct PhysicalDeviceDriverProperties where
-  peekCStruct p = do
-    driverID <- peek @DriverId ((p `plusPtr` 16 :: Ptr DriverId))
-    driverName <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))))
-    driverInfo <- packCString (lowerArrayPtr ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))))
-    conformanceVersion <- peekCStruct @ConformanceVersion ((p `plusPtr` 532 :: Ptr ConformanceVersion))
-    pure $ PhysicalDeviceDriverProperties
-             driverID driverName driverInfo conformanceVersion
-
-instance Zero PhysicalDeviceDriverProperties where
-  zero = PhysicalDeviceDriverProperties
-           zero
-           mempty
-           mempty
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties  ( ConformanceVersion
-                                                                      , PhysicalDeviceDriverProperties
-                                                                      ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ConformanceVersion
-
-instance ToCStruct ConformanceVersion
-instance Show ConformanceVersion
-
-instance FromCStruct ConformanceVersion
-
-
-data PhysicalDeviceDriverProperties
-
-instance ToCStruct PhysicalDeviceDriverProperties
-instance Show PhysicalDeviceDriverProperties
-
-instance FromCStruct PhysicalDeviceDriverProperties
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs
+++ /dev/null
@@ -1,110 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list  ( ImageFormatListCreateInfo(..)
-                                                                      , StructureType(..)
-                                                                      ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkImageFormatListCreateInfo - Specify that an image /can/ be used with a
--- particular set of formats
---
--- = Description
---
--- If @viewFormatCount@ is zero, @pViewFormats@ is ignored and the image is
--- created as if the 'ImageFormatListCreateInfo' structure were not
--- included in the @pNext@ list of
--- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'.
---
--- == 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
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo', as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility compatibility table>
---
--- -   If 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ does not
---     contain
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
---     @viewFormatCount@ /must/ be @0@ or @1@
---
--- -   If @viewFormatCount@ is not @0@,
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@format@ /must/ be
---     in @pViewFormats@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO'
---
--- -   If @viewFormatCount@ is not @0@, @pViewFormats@ /must/ be a valid
---     pointer to an array of @viewFormatCount@ valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImageFormatListCreateInfo = ImageFormatListCreateInfo
-  { -- | @pViewFormats@ is an array which lists of all formats which /can/ be
-    -- used when creating views of this image.
-    viewFormats :: Vector Format }
-  deriving (Typeable)
-deriving instance Show ImageFormatListCreateInfo
-
-instance ToCStruct ImageFormatListCreateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageFormatListCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (viewFormats)) :: Word32))
-    pPViewFormats' <- ContT $ allocaBytesAligned @Format ((Data.Vector.length (viewFormats)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewFormats' `plusPtr` (4 * (i)) :: Ptr Format) (e)) (viewFormats)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Format))) (pPViewFormats')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPViewFormats' <- ContT $ allocaBytesAligned @Format ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewFormats' `plusPtr` (4 * (i)) :: Ptr Format) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Format))) (pPViewFormats')
-    lift $ f
-
-instance FromCStruct ImageFormatListCreateInfo where
-  peekCStruct p = do
-    viewFormatCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pViewFormats <- peek @(Ptr Format) ((p `plusPtr` 24 :: Ptr (Ptr Format)))
-    pViewFormats' <- generateM (fromIntegral viewFormatCount) (\i -> peek @Format ((pViewFormats `advancePtrBytes` (4 * (i)) :: Ptr Format)))
-    pure $ ImageFormatListCreateInfo
-             pViewFormats'
-
-instance Zero ImageFormatListCreateInfo where
-  zero = ImageFormatListCreateInfo
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list  (ImageFormatListCreateInfo) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ImageFormatListCreateInfo
-
-instance ToCStruct ImageFormatListCreateInfo
-instance Show ImageFormatListCreateInfo
-
-instance FromCStruct ImageFormatListCreateInfo
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs
+++ /dev/null
@@ -1,352 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer  ( PhysicalDeviceImagelessFramebufferFeatures(..)
-                                                                          , FramebufferAttachmentsCreateInfo(..)
-                                                                          , FramebufferAttachmentImageInfo(..)
-                                                                          , RenderPassAttachmentBeginInfo(..)
-                                                                          , StructureType(..)
-                                                                          , FramebufferCreateFlagBits(..)
-                                                                          , FramebufferCreateFlags
-                                                                          ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Core10.Handles (ImageView)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO))
-import Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits (FramebufferCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits (FramebufferCreateFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceImagelessFramebufferFeatures - Structure indicating
--- support for imageless framebuffers
---
--- = Members
---
--- The members of the 'PhysicalDeviceImagelessFramebufferFeatures'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceImagelessFramebufferFeatures' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceImagelessFramebufferFeatures' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable this feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceImagelessFramebufferFeatures = PhysicalDeviceImagelessFramebufferFeatures
-  { -- | @imagelessFramebuffer@ indicates that the implementation supports
-    -- specifying the image view for attachments at render pass begin time via
-    -- 'RenderPassAttachmentBeginInfo'.
-    imagelessFramebuffer :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceImagelessFramebufferFeatures
-
-instance ToCStruct PhysicalDeviceImagelessFramebufferFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceImagelessFramebufferFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (imagelessFramebuffer))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceImagelessFramebufferFeatures where
-  peekCStruct p = do
-    imagelessFramebuffer <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceImagelessFramebufferFeatures
-             (bool32ToBool imagelessFramebuffer)
-
-instance Storable PhysicalDeviceImagelessFramebufferFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceImagelessFramebufferFeatures where
-  zero = PhysicalDeviceImagelessFramebufferFeatures
-           zero
-
-
--- | VkFramebufferAttachmentsCreateInfo - Structure specifying parameters of
--- images that will be used with a framebuffer
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO'
---
--- -   If @attachmentImageInfoCount@ is not @0@, @pAttachmentImageInfos@
---     /must/ be a valid pointer to an array of @attachmentImageInfoCount@
---     valid 'FramebufferAttachmentImageInfo' structures
---
--- = See Also
---
--- 'FramebufferAttachmentImageInfo',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data FramebufferAttachmentsCreateInfo = FramebufferAttachmentsCreateInfo
-  { -- | @pAttachmentImageInfos@ is a pointer to an array of
-    -- 'FramebufferAttachmentImageInfo' instances, each of which describes a
-    -- number of parameters of the corresponding attachment in a render pass
-    -- instance.
-    attachmentImageInfos :: Vector FramebufferAttachmentImageInfo }
-  deriving (Typeable)
-deriving instance Show FramebufferAttachmentsCreateInfo
-
-instance ToCStruct FramebufferAttachmentsCreateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p FramebufferAttachmentsCreateInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachmentImageInfos)) :: Word32))
-    pPAttachmentImageInfos' <- ContT $ allocaBytesAligned @FramebufferAttachmentImageInfo ((Data.Vector.length (attachmentImageInfos)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachmentImageInfos' `plusPtr` (48 * (i)) :: Ptr FramebufferAttachmentImageInfo) (e) . ($ ())) (attachmentImageInfos)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr FramebufferAttachmentImageInfo))) (pPAttachmentImageInfos')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPAttachmentImageInfos' <- ContT $ allocaBytesAligned @FramebufferAttachmentImageInfo ((Data.Vector.length (mempty)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachmentImageInfos' `plusPtr` (48 * (i)) :: Ptr FramebufferAttachmentImageInfo) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr FramebufferAttachmentImageInfo))) (pPAttachmentImageInfos')
-    lift $ f
-
-instance FromCStruct FramebufferAttachmentsCreateInfo where
-  peekCStruct p = do
-    attachmentImageInfoCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pAttachmentImageInfos <- peek @(Ptr FramebufferAttachmentImageInfo) ((p `plusPtr` 24 :: Ptr (Ptr FramebufferAttachmentImageInfo)))
-    pAttachmentImageInfos' <- generateM (fromIntegral attachmentImageInfoCount) (\i -> peekCStruct @FramebufferAttachmentImageInfo ((pAttachmentImageInfos `advancePtrBytes` (48 * (i)) :: Ptr FramebufferAttachmentImageInfo)))
-    pure $ FramebufferAttachmentsCreateInfo
-             pAttachmentImageInfos'
-
-instance Zero FramebufferAttachmentsCreateInfo where
-  zero = FramebufferAttachmentsCreateInfo
-           mempty
-
-
--- | VkFramebufferAttachmentImageInfo - Structure specifying parameters of an
--- image that will be used with a framebuffer
---
--- = Description
---
--- Images that /can/ be used with the framebuffer when beginning a render
--- pass, as specified by 'RenderPassAttachmentBeginInfo', /must/ be created
--- with parameters that are identical to those specified here.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits'
---     values
---
--- -   @usage@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
---     values
---
--- -   @usage@ /must/ not be @0@
---
--- -   If @viewFormatCount@ is not @0@, @pViewFormats@ /must/ be a valid
---     pointer to an array of @viewFormatCount@ valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'FramebufferAttachmentsCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data FramebufferAttachmentImageInfo = FramebufferAttachmentImageInfo
-  { -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits',
-    -- matching the value of
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ used to create
-    -- an image that will be used with this framebuffer.
-    flags :: ImageCreateFlags
-  , -- | @usage@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits',
-    -- matching the value of
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create
-    -- an image used with this framebuffer.
-    usage :: ImageUsageFlags
-  , -- | @width@ is the width of the image view used for rendering.
-    width :: Word32
-  , -- | @height@ is the height of the image view used for rendering.
-    height :: Word32
-  , -- No documentation found for Nested "VkFramebufferAttachmentImageInfo" "layerCount"
-    layerCount :: Word32
-  , -- | @pViewFormats@ is an array which lists of all formats which /can/ be
-    -- used when creating views of the image, matching the value of
-    -- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::pViewFormats
-    -- used to create an image used with this framebuffer.
-    viewFormats :: Vector Format
-  }
-  deriving (Typeable)
-deriving instance Show FramebufferAttachmentImageInfo
-
-instance ToCStruct FramebufferAttachmentImageInfo where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p FramebufferAttachmentImageInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr ImageCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr ImageUsageFlags)) (usage)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (width)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (height)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (layerCount)
-    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (viewFormats)) :: Word32))
-    pPViewFormats' <- ContT $ allocaBytesAligned @Format ((Data.Vector.length (viewFormats)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewFormats' `plusPtr` (4 * (i)) :: Ptr Format) (e)) (viewFormats)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Format))) (pPViewFormats')
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 20 :: Ptr ImageUsageFlags)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    pPViewFormats' <- ContT $ allocaBytesAligned @Format ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewFormats' `plusPtr` (4 * (i)) :: Ptr Format) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Format))) (pPViewFormats')
-    lift $ f
-
-instance FromCStruct FramebufferAttachmentImageInfo where
-  peekCStruct p = do
-    flags <- peek @ImageCreateFlags ((p `plusPtr` 16 :: Ptr ImageCreateFlags))
-    usage <- peek @ImageUsageFlags ((p `plusPtr` 20 :: Ptr ImageUsageFlags))
-    width <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    height <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    layerCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    viewFormatCount <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
-    pViewFormats <- peek @(Ptr Format) ((p `plusPtr` 40 :: Ptr (Ptr Format)))
-    pViewFormats' <- generateM (fromIntegral viewFormatCount) (\i -> peek @Format ((pViewFormats `advancePtrBytes` (4 * (i)) :: Ptr Format)))
-    pure $ FramebufferAttachmentImageInfo
-             flags usage width height layerCount pViewFormats'
-
-instance Zero FramebufferAttachmentImageInfo where
-  zero = FramebufferAttachmentImageInfo
-           zero
-           zero
-           zero
-           zero
-           zero
-           mempty
-
-
--- | VkRenderPassAttachmentBeginInfo - Structure specifying images to be used
--- as framebuffer attachments
---
--- == Valid Usage
---
--- -   Each element of @pAttachments@ /must/ only specify a single mip
---     level
---
--- -   Each element of @pAttachments@ /must/ have been created with the
---     identity swizzle
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO'
---
--- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
---     pointer to an array of @attachmentCount@ valid
---     'Graphics.Vulkan.Core10.Handles.ImageView' handles
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.ImageView',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data RenderPassAttachmentBeginInfo = RenderPassAttachmentBeginInfo
-  { -- | @pAttachments@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.ImageView' handles, each of which will
-    -- be used as the corresponding attachment in the render pass instance.
-    attachments :: Vector ImageView }
-  deriving (Typeable)
-deriving instance Show RenderPassAttachmentBeginInfo
-
-instance ToCStruct RenderPassAttachmentBeginInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RenderPassAttachmentBeginInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
-    pPAttachments' <- ContT $ allocaBytesAligned @ImageView ((Data.Vector.length (attachments)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAttachments' `plusPtr` (8 * (i)) :: Ptr ImageView) (e)) (attachments)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ImageView))) (pPAttachments')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPAttachments' <- ContT $ allocaBytesAligned @ImageView ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAttachments' `plusPtr` (8 * (i)) :: Ptr ImageView) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ImageView))) (pPAttachments')
-    lift $ f
-
-instance FromCStruct RenderPassAttachmentBeginInfo where
-  peekCStruct p = do
-    attachmentCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pAttachments <- peek @(Ptr ImageView) ((p `plusPtr` 24 :: Ptr (Ptr ImageView)))
-    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peek @ImageView ((pAttachments `advancePtrBytes` (8 * (i)) :: Ptr ImageView)))
-    pure $ RenderPassAttachmentBeginInfo
-             pAttachments'
-
-instance Zero RenderPassAttachmentBeginInfo where
-  zero = RenderPassAttachmentBeginInfo
-           mempty
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs-boot
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer  ( FramebufferAttachmentImageInfo
-                                                                          , FramebufferAttachmentsCreateInfo
-                                                                          , PhysicalDeviceImagelessFramebufferFeatures
-                                                                          , RenderPassAttachmentBeginInfo
-                                                                          ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data FramebufferAttachmentImageInfo
-
-instance ToCStruct FramebufferAttachmentImageInfo
-instance Show FramebufferAttachmentImageInfo
-
-instance FromCStruct FramebufferAttachmentImageInfo
-
-
-data FramebufferAttachmentsCreateInfo
-
-instance ToCStruct FramebufferAttachmentsCreateInfo
-instance Show FramebufferAttachmentsCreateInfo
-
-instance FromCStruct FramebufferAttachmentsCreateInfo
-
-
-data PhysicalDeviceImagelessFramebufferFeatures
-
-instance ToCStruct PhysicalDeviceImagelessFramebufferFeatures
-instance Show PhysicalDeviceImagelessFramebufferFeatures
-
-instance FromCStruct PhysicalDeviceImagelessFramebufferFeatures
-
-
-data RenderPassAttachmentBeginInfo
-
-instance ToCStruct RenderPassAttachmentBeginInfo
-instance Show RenderPassAttachmentBeginInfo
-
-instance FromCStruct RenderPassAttachmentBeginInfo
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs
+++ /dev/null
@@ -1,211 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts  ( PhysicalDeviceSeparateDepthStencilLayoutsFeatures(..)
-                                                                                   , AttachmentReferenceStencilLayout(..)
-                                                                                   , AttachmentDescriptionStencilLayout(..)
-                                                                                   , ImageLayout(..)
-                                                                                   , StructureType(..)
-                                                                                   ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES))
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures - Structure
--- describing whether the implementation can do depth and stencil image
--- barriers separately
---
--- = Members
---
--- The members of the 'PhysicalDeviceSeparateDepthStencilLayoutsFeatures'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceSeparateDepthStencilLayoutsFeatures' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceSeparateDepthStencilLayoutsFeatures' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceSeparateDepthStencilLayoutsFeatures = PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-  { -- | @separateDepthStencilLayouts@ indicates whether the implementation
-    -- supports a 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier' for a
-    -- depth\/stencil image with only one of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
-    -- set, and whether
-    -- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
-    -- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
-    -- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
-    -- or
-    -- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
-    -- can be used.
-    separateDepthStencilLayouts :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-
-instance ToCStruct PhysicalDeviceSeparateDepthStencilLayoutsFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceSeparateDepthStencilLayoutsFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (separateDepthStencilLayouts))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceSeparateDepthStencilLayoutsFeatures where
-  peekCStruct p = do
-    separateDepthStencilLayouts <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-             (bool32ToBool separateDepthStencilLayouts)
-
-instance Storable PhysicalDeviceSeparateDepthStencilLayoutsFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceSeparateDepthStencilLayoutsFeatures where
-  zero = PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-           zero
-
-
--- | VkAttachmentReferenceStencilLayout - Structure specifying an attachment
--- description
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data AttachmentReferenceStencilLayout = AttachmentReferenceStencilLayout
-  { -- | @stencilLayout@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
-    stencilLayout :: ImageLayout }
-  deriving (Typeable)
-deriving instance Show AttachmentReferenceStencilLayout
-
-instance ToCStruct AttachmentReferenceStencilLayout where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AttachmentReferenceStencilLayout{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (stencilLayout)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (zero)
-    f
-
-instance FromCStruct AttachmentReferenceStencilLayout where
-  peekCStruct p = do
-    stencilLayout <- peek @ImageLayout ((p `plusPtr` 16 :: Ptr ImageLayout))
-    pure $ AttachmentReferenceStencilLayout
-             stencilLayout
-
-instance Storable AttachmentReferenceStencilLayout where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AttachmentReferenceStencilLayout where
-  zero = AttachmentReferenceStencilLayout
-           zero
-
-
--- | VkAttachmentDescriptionStencilLayout - Structure specifying an
--- attachment description
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data AttachmentDescriptionStencilLayout = AttachmentDescriptionStencilLayout
-  { -- | @stencilInitialLayout@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
-    stencilInitialLayout :: ImageLayout
-  , -- | @stencilFinalLayout@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
-    stencilFinalLayout :: ImageLayout
-  }
-  deriving (Typeable)
-deriving instance Show AttachmentDescriptionStencilLayout
-
-instance ToCStruct AttachmentDescriptionStencilLayout where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AttachmentDescriptionStencilLayout{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (stencilInitialLayout)
-    poke ((p `plusPtr` 20 :: Ptr ImageLayout)) (stencilFinalLayout)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr ImageLayout)) (zero)
-    f
-
-instance FromCStruct AttachmentDescriptionStencilLayout where
-  peekCStruct p = do
-    stencilInitialLayout <- peek @ImageLayout ((p `plusPtr` 16 :: Ptr ImageLayout))
-    stencilFinalLayout <- peek @ImageLayout ((p `plusPtr` 20 :: Ptr ImageLayout))
-    pure $ AttachmentDescriptionStencilLayout
-             stencilInitialLayout stencilFinalLayout
-
-instance Storable AttachmentDescriptionStencilLayout where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AttachmentDescriptionStencilLayout where
-  zero = AttachmentDescriptionStencilLayout
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts  ( AttachmentDescriptionStencilLayout
-                                                                                   , AttachmentReferenceStencilLayout
-                                                                                   , PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-                                                                                   ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data AttachmentDescriptionStencilLayout
-
-instance ToCStruct AttachmentDescriptionStencilLayout
-instance Show AttachmentDescriptionStencilLayout
-
-instance FromCStruct AttachmentDescriptionStencilLayout
-
-
-data AttachmentReferenceStencilLayout
-
-instance ToCStruct AttachmentReferenceStencilLayout
-instance Show AttachmentReferenceStencilLayout
-
-instance FromCStruct AttachmentReferenceStencilLayout
-
-
-data PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-
-instance ToCStruct PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-instance Show PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-
-instance FromCStruct PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs
+++ /dev/null
@@ -1,81 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64  ( PhysicalDeviceShaderAtomicInt64Features(..)
-                                                                        , StructureType(..)
-                                                                        ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceShaderAtomicInt64Features - Structure describing
--- features supported by VK_KHR_shader_atomic_int64
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderAtomicInt64Features = PhysicalDeviceShaderAtomicInt64Features
-  { -- | @shaderBufferInt64Atomics@ indicates whether shaders /can/ support
-    -- 64-bit unsigned and signed integer atomic operations on buffers.
-    shaderBufferInt64Atomics :: Bool
-  , -- | @shaderSharedInt64Atomics@ indicates whether shaders /can/ support
-    -- 64-bit unsigned and signed integer atomic operations on shared memory.
-    shaderSharedInt64Atomics :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderAtomicInt64Features
-
-instance ToCStruct PhysicalDeviceShaderAtomicInt64Features where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderAtomicInt64Features{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderBufferInt64Atomics))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderSharedInt64Atomics))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceShaderAtomicInt64Features where
-  peekCStruct p = do
-    shaderBufferInt64Atomics <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    shaderSharedInt64Atomics <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceShaderAtomicInt64Features
-             (bool32ToBool shaderBufferInt64Atomics) (bool32ToBool shaderSharedInt64Atomics)
-
-instance Storable PhysicalDeviceShaderAtomicInt64Features where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderAtomicInt64Features where
-  zero = PhysicalDeviceShaderAtomicInt64Features
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64  (PhysicalDeviceShaderAtomicInt64Features) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderAtomicInt64Features
-
-instance ToCStruct PhysicalDeviceShaderAtomicInt64Features
-instance Show PhysicalDeviceShaderAtomicInt64Features
-
-instance FromCStruct PhysicalDeviceShaderAtomicInt64Features
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs
+++ /dev/null
@@ -1,94 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8  ( PhysicalDeviceShaderFloat16Int8Features(..)
-                                                                        , StructureType(..)
-                                                                        ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceShaderFloat16Int8Features - Structure describing
--- features supported by VK_KHR_shader_float16_int8
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderFloat16Int8Features = PhysicalDeviceShaderFloat16Int8Features
-  { -- | @shaderFloat16@ indicates whether 16-bit floats (halfs) are supported in
-    -- shader code. This also indicates whether shader modules /can/ declare
-    -- the @Float16@ capability. However, this only enables a subset of the
-    -- storage classes that SPIR-V allows for the @Float16@ SPIR-V capability:
-    -- Declaring and using 16-bit floats in the @Private@, @Workgroup@, and
-    -- @Function@ storage classes is enabled, while declaring them in the
-    -- interface storage classes (e.g., @UniformConstant@, @Uniform@,
-    -- @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is not enabled.
-    shaderFloat16 :: Bool
-  , -- | @shaderInt8@ indicates whether 8-bit integers (signed and unsigned) are
-    -- supported in shader code. This also indicates whether shader modules
-    -- /can/ declare the @Int8@ capability. However, this only enables a subset
-    -- of the storage classes that SPIR-V allows for the @Int8@ SPIR-V
-    -- capability: Declaring and using 8-bit integers in the @Private@,
-    -- @Workgroup@, and @Function@ storage classes is enabled, while declaring
-    -- them in the interface storage classes (e.g., @UniformConstant@,
-    -- @Uniform@, @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is
-    -- not enabled.
-    shaderInt8 :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderFloat16Int8Features
-
-instance ToCStruct PhysicalDeviceShaderFloat16Int8Features where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderFloat16Int8Features{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderFloat16))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderInt8))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceShaderFloat16Int8Features where
-  peekCStruct p = do
-    shaderFloat16 <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    shaderInt8 <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceShaderFloat16Int8Features
-             (bool32ToBool shaderFloat16) (bool32ToBool shaderInt8)
-
-instance Storable PhysicalDeviceShaderFloat16Int8Features where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderFloat16Int8Features where
-  zero = PhysicalDeviceShaderFloat16Int8Features
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8  (PhysicalDeviceShaderFloat16Int8Features) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderFloat16Int8Features
-
-instance ToCStruct PhysicalDeviceShaderFloat16Int8Features
-instance Show PhysicalDeviceShaderFloat16Int8Features
-
-instance FromCStruct PhysicalDeviceShaderFloat16Int8Features
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs
+++ /dev/null
@@ -1,243 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls  ( PhysicalDeviceFloatControlsProperties(..)
-                                                                          , StructureType(..)
-                                                                          ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceFloatControlsProperties - Structure describing
--- properties supported by VK_KHR_shader_float_controls
---
--- = Members
---
--- The members of the 'PhysicalDeviceFloatControlsProperties' structure
--- describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceFloatControlsProperties' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceFloatControlsProperties = PhysicalDeviceFloatControlsProperties
-  { -- | @denormBehaviorIndependence@ is a
-    -- 'Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'
-    -- value indicating whether, and how, denorm behavior can be set
-    -- independently for different bit widths.
-    denormBehaviorIndependence :: ShaderFloatControlsIndependence
-  , -- | @roundingModeIndependence@ is a
-    -- 'Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'
-    -- value indicating whether, and how, rounding modes can be set
-    -- independently for different bit widths.
-    roundingModeIndependence :: ShaderFloatControlsIndependence
-  , -- | @shaderSignedZeroInfNanPreserveFloat16@ is a boolean value indicating
-    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
-    -- 16-bit floating-point computations. It also indicates whether the
-    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 16-bit
-    -- floating-point types.
-    shaderSignedZeroInfNanPreserveFloat16 :: Bool
-  , -- | @shaderSignedZeroInfNanPreserveFloat32@ is a boolean value indicating
-    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
-    -- 32-bit floating-point computations. It also indicates whether the
-    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 32-bit
-    -- floating-point types.
-    shaderSignedZeroInfNanPreserveFloat32 :: Bool
-  , -- | @shaderSignedZeroInfNanPreserveFloat64@ is a boolean value indicating
-    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
-    -- 64-bit floating-point computations. It also indicates whether the
-    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 64-bit
-    -- floating-point types.
-    shaderSignedZeroInfNanPreserveFloat64 :: Bool
-  , -- | @shaderDenormPreserveFloat16@ is a boolean value indicating whether
-    -- denormals /can/ be preserved in 16-bit floating-point computations. It
-    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
-    -- for 16-bit floating-point types.
-    shaderDenormPreserveFloat16 :: Bool
-  , -- | @shaderDenormPreserveFloat32@ is a boolean value indicating whether
-    -- denormals /can/ be preserved in 32-bit floating-point computations. It
-    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
-    -- for 32-bit floating-point types.
-    shaderDenormPreserveFloat32 :: Bool
-  , -- | @shaderDenormPreserveFloat64@ is a boolean value indicating whether
-    -- denormals /can/ be preserved in 64-bit floating-point computations. It
-    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
-    -- for 64-bit floating-point types.
-    shaderDenormPreserveFloat64 :: Bool
-  , -- | @shaderDenormFlushToZeroFloat16@ is a boolean value indicating whether
-    -- denormals /can/ be flushed to zero in 16-bit floating-point
-    -- computations. It also indicates whether the @DenormFlushToZero@
-    -- execution mode /can/ be used for 16-bit floating-point types.
-    shaderDenormFlushToZeroFloat16 :: Bool
-  , -- | @shaderDenormFlushToZeroFloat32@ is a boolean value indicating whether
-    -- denormals /can/ be flushed to zero in 32-bit floating-point
-    -- computations. It also indicates whether the @DenormFlushToZero@
-    -- execution mode /can/ be used for 32-bit floating-point types.
-    shaderDenormFlushToZeroFloat32 :: Bool
-  , -- | @shaderDenormFlushToZeroFloat64@ is a boolean value indicating whether
-    -- denormals /can/ be flushed to zero in 64-bit floating-point
-    -- computations. It also indicates whether the @DenormFlushToZero@
-    -- execution mode /can/ be used for 64-bit floating-point types.
-    shaderDenormFlushToZeroFloat64 :: Bool
-  , -- | @shaderRoundingModeRTEFloat16@ is a boolean value indicating whether an
-    -- implementation supports the round-to-nearest-even rounding mode for
-    -- 16-bit floating-point arithmetic and conversion instructions. It also
-    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
-    -- 16-bit floating-point types.
-    shaderRoundingModeRTEFloat16 :: Bool
-  , -- | @shaderRoundingModeRTEFloat32@ is a boolean value indicating whether an
-    -- implementation supports the round-to-nearest-even rounding mode for
-    -- 32-bit floating-point arithmetic and conversion instructions. It also
-    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
-    -- 32-bit floating-point types.
-    shaderRoundingModeRTEFloat32 :: Bool
-  , -- | @shaderRoundingModeRTEFloat64@ is a boolean value indicating whether an
-    -- implementation supports the round-to-nearest-even rounding mode for
-    -- 64-bit floating-point arithmetic and conversion instructions. It also
-    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
-    -- 64-bit floating-point types.
-    shaderRoundingModeRTEFloat64 :: Bool
-  , -- | @shaderRoundingModeRTZFloat16@ is a boolean value indicating whether an
-    -- implementation supports the round-towards-zero rounding mode for 16-bit
-    -- floating-point arithmetic and conversion instructions. It also indicates
-    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 16-bit
-    -- floating-point types.
-    shaderRoundingModeRTZFloat16 :: Bool
-  , -- | @shaderRoundingModeRTZFloat32@ is a boolean value indicating whether an
-    -- implementation supports the round-towards-zero rounding mode for 32-bit
-    -- floating-point arithmetic and conversion instructions. It also indicates
-    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 32-bit
-    -- floating-point types.
-    shaderRoundingModeRTZFloat32 :: Bool
-  , -- | @shaderRoundingModeRTZFloat64@ is a boolean value indicating whether an
-    -- implementation supports the round-towards-zero rounding mode for 64-bit
-    -- floating-point arithmetic and conversion instructions. It also indicates
-    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 64-bit
-    -- floating-point types.
-    shaderRoundingModeRTZFloat64 :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceFloatControlsProperties
-
-instance ToCStruct PhysicalDeviceFloatControlsProperties where
-  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceFloatControlsProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ShaderFloatControlsIndependence)) (denormBehaviorIndependence)
-    poke ((p `plusPtr` 20 :: Ptr ShaderFloatControlsIndependence)) (roundingModeIndependence)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat16))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat32))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat64))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat16))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat32))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat64))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat16))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat32))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat64))
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat16))
-    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat32))
-    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat64))
-    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat16))
-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat32))
-    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat64))
-    f
-  cStructSize = 88
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ShaderFloatControlsIndependence)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr ShaderFloatControlsIndependence)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceFloatControlsProperties where
-  peekCStruct p = do
-    denormBehaviorIndependence <- peek @ShaderFloatControlsIndependence ((p `plusPtr` 16 :: Ptr ShaderFloatControlsIndependence))
-    roundingModeIndependence <- peek @ShaderFloatControlsIndependence ((p `plusPtr` 20 :: Ptr ShaderFloatControlsIndependence))
-    shaderSignedZeroInfNanPreserveFloat16 <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    shaderSignedZeroInfNanPreserveFloat32 <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    shaderSignedZeroInfNanPreserveFloat64 <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    shaderDenormPreserveFloat16 <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    shaderDenormPreserveFloat32 <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    shaderDenormPreserveFloat64 <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    shaderDenormFlushToZeroFloat16 <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
-    shaderDenormFlushToZeroFloat32 <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
-    shaderDenormFlushToZeroFloat64 <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
-    shaderRoundingModeRTEFloat16 <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
-    shaderRoundingModeRTEFloat32 <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))
-    shaderRoundingModeRTEFloat64 <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))
-    shaderRoundingModeRTZFloat16 <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))
-    shaderRoundingModeRTZFloat32 <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
-    shaderRoundingModeRTZFloat64 <- peek @Bool32 ((p `plusPtr` 80 :: Ptr Bool32))
-    pure $ PhysicalDeviceFloatControlsProperties
-             denormBehaviorIndependence roundingModeIndependence (bool32ToBool shaderSignedZeroInfNanPreserveFloat16) (bool32ToBool shaderSignedZeroInfNanPreserveFloat32) (bool32ToBool shaderSignedZeroInfNanPreserveFloat64) (bool32ToBool shaderDenormPreserveFloat16) (bool32ToBool shaderDenormPreserveFloat32) (bool32ToBool shaderDenormPreserveFloat64) (bool32ToBool shaderDenormFlushToZeroFloat16) (bool32ToBool shaderDenormFlushToZeroFloat32) (bool32ToBool shaderDenormFlushToZeroFloat64) (bool32ToBool shaderRoundingModeRTEFloat16) (bool32ToBool shaderRoundingModeRTEFloat32) (bool32ToBool shaderRoundingModeRTEFloat64) (bool32ToBool shaderRoundingModeRTZFloat16) (bool32ToBool shaderRoundingModeRTZFloat32) (bool32ToBool shaderRoundingModeRTZFloat64)
-
-instance Storable PhysicalDeviceFloatControlsProperties where
-  sizeOf ~_ = 88
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceFloatControlsProperties where
-  zero = PhysicalDeviceFloatControlsProperties
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls  (PhysicalDeviceFloatControlsProperties) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceFloatControlsProperties
-
-instance ToCStruct PhysicalDeviceFloatControlsProperties
-instance Show PhysicalDeviceFloatControlsProperties
-
-instance FromCStruct PhysicalDeviceFloatControlsProperties
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs
+++ /dev/null
@@ -1,94 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types  ( PhysicalDeviceShaderSubgroupExtendedTypesFeatures(..)
-                                                                                   , StructureType(..)
-                                                                                   ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures - Structure
--- describing the extended types subgroups support feature for an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceShaderSubgroupExtendedTypesFeatures'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceShaderSubgroupExtendedTypesFeatures' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceShaderSubgroupExtendedTypesFeatures' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderSubgroupExtendedTypesFeatures = PhysicalDeviceShaderSubgroupExtendedTypesFeatures
-  { -- | @shaderSubgroupExtendedTypes@ is a boolean that specifies whether
-    -- subgroup operations can use 8-bit integer, 16-bit integer, 64-bit
-    -- integer, 16-bit floating-point, and vectors of these types in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>
-    -- with
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-scope-subgroup subgroup scope>if
-    -- the implementation supports the types.
-    shaderSubgroupExtendedTypes :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderSubgroupExtendedTypesFeatures
-
-instance ToCStruct PhysicalDeviceShaderSubgroupExtendedTypesFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderSubgroupExtendedTypesFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderSubgroupExtendedTypes))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceShaderSubgroupExtendedTypesFeatures where
-  peekCStruct p = do
-    shaderSubgroupExtendedTypes <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceShaderSubgroupExtendedTypesFeatures
-             (bool32ToBool shaderSubgroupExtendedTypes)
-
-instance Storable PhysicalDeviceShaderSubgroupExtendedTypesFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderSubgroupExtendedTypesFeatures where
-  zero = PhysicalDeviceShaderSubgroupExtendedTypesFeatures
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types  (PhysicalDeviceShaderSubgroupExtendedTypesFeatures) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderSubgroupExtendedTypesFeatures
-
-instance ToCStruct PhysicalDeviceShaderSubgroupExtendedTypesFeatures
-instance Show PhysicalDeviceShaderSubgroupExtendedTypesFeatures
-
-instance FromCStruct PhysicalDeviceShaderSubgroupExtendedTypesFeatures
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs
+++ /dev/null
@@ -1,721 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore  ( getSemaphoreCounterValue
-                                                                       , waitSemaphores
-                                                                       , signalSemaphore
-                                                                       , PhysicalDeviceTimelineSemaphoreFeatures(..)
-                                                                       , PhysicalDeviceTimelineSemaphoreProperties(..)
-                                                                       , SemaphoreTypeCreateInfo(..)
-                                                                       , TimelineSemaphoreSubmitInfo(..)
-                                                                       , SemaphoreWaitInfo(..)
-                                                                       , SemaphoreSignalInfo(..)
-                                                                       , StructureType(..)
-                                                                       , SemaphoreType(..)
-                                                                       , SemaphoreWaitFlagBits(..)
-                                                                       , SemaphoreWaitFlags
-                                                                       ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Either (Either)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetSemaphoreCounterValue))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkSignalSemaphore))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkWaitSemaphores))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Handles (Semaphore)
-import Graphics.Vulkan.Core10.Handles (Semaphore(..))
-import Graphics.Vulkan.Core12.Enums.SemaphoreType (SemaphoreType)
-import Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Core12.Enums.SemaphoreType (SemaphoreType(..))
-import Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlagBits(..))
-import Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetSemaphoreCounterValue
-  :: FunPtr (Ptr Device_T -> Semaphore -> Ptr Word64 -> IO Result) -> Ptr Device_T -> Semaphore -> Ptr Word64 -> IO Result
-
--- | vkGetSemaphoreCounterValue - Query the current state of a timeline
--- semaphore
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the semaphore.
---
--- -   @semaphore@ is the handle of the semaphore to query.
---
--- -   @pValue@ is a pointer to a 64-bit integer value in which the current
---     counter value of the semaphore is returned.
---
--- = Description
---
--- Note
---
--- If a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-submission queue submission>
--- command is pending execution, then the value returned by this command
--- /may/ immediately be out of date.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore'
-getSemaphoreCounterValue :: forall io . MonadIO io => Device -> Semaphore -> io (("value" ::: Word64))
-getSemaphoreCounterValue device semaphore = liftIO . evalContT $ do
-  let vkGetSemaphoreCounterValue' = mkVkGetSemaphoreCounterValue (pVkGetSemaphoreCounterValue (deviceCmds (device :: Device)))
-  pPValue <- ContT $ bracket (callocBytes @Word64 8) free
-  r <- lift $ vkGetSemaphoreCounterValue' (deviceHandle (device)) (semaphore) (pPValue)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pValue <- lift $ peek @Word64 pPValue
-  pure $ (pValue)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkWaitSemaphores
-  :: FunPtr (Ptr Device_T -> Ptr SemaphoreWaitInfo -> Word64 -> IO Result) -> Ptr Device_T -> Ptr SemaphoreWaitInfo -> Word64 -> IO Result
-
--- | vkWaitSemaphores - Wait for timeline semaphores on the host
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the semaphore.
---
--- -   @pWaitInfo@ is a pointer to a 'SemaphoreWaitInfo' structure
---     containing information about the wait condition.
---
--- -   @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
---
--- If the condition is satisfied when 'waitSemaphores' is called, then
--- 'waitSemaphores' returns immediately. If the condition is not satisfied
--- at the time 'waitSemaphores' is called, then 'waitSemaphores' will block
--- and wait up to @timeout@ nanoseconds for the condition to become
--- satisfied.
---
--- If @timeout@ is zero, then 'waitSemaphores' does not wait, but simply
--- returns information about the current state of the semaphore.
--- 'Graphics.Vulkan.Core10.Enums.Result.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, 'waitSemaphores' returns
--- 'Graphics.Vulkan.Core10.Enums.Result.TIMEOUT'. If the condition is
--- satisfied before @timeout@ nanoseconds has expired, 'waitSemaphores'
--- returns 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'.
---
--- If device loss occurs (see
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>)
--- before the timeout has expired, 'waitSemaphores' /must/ return in finite
--- time with either 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' or
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.TIMEOUT'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'SemaphoreWaitInfo'
-waitSemaphores :: forall io . MonadIO io => Device -> SemaphoreWaitInfo -> ("timeout" ::: Word64) -> io (Result)
-waitSemaphores device waitInfo timeout = liftIO . evalContT $ do
-  let vkWaitSemaphores' = mkVkWaitSemaphores (pVkWaitSemaphores (deviceCmds (device :: Device)))
-  pWaitInfo <- ContT $ withCStruct (waitInfo)
-  r <- lift $ vkWaitSemaphores' (deviceHandle (device)) pWaitInfo (timeout)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkSignalSemaphore
-  :: FunPtr (Ptr Device_T -> Ptr SemaphoreSignalInfo -> IO Result) -> Ptr Device_T -> Ptr SemaphoreSignalInfo -> IO Result
-
--- | vkSignalSemaphore - Signal a timeline semaphore on the host
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the semaphore.
---
--- -   @pSignalInfo@ is a pointer to a 'SemaphoreSignalInfo' structure
---     containing information about the signal operation.
---
--- = Description
---
--- When 'signalSemaphore' is executed on the host, it defines and
--- immediately executes a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
--- which sets the timeline semaphore to the given value.
---
--- The first synchronization scope is defined by the host execution model,
--- but includes execution of 'signalSemaphore' on the host and anything
--- that happened-before it.
---
--- The second synchronization scope is empty.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'SemaphoreSignalInfo'
-signalSemaphore :: forall io . MonadIO io => Device -> SemaphoreSignalInfo -> io ()
-signalSemaphore device signalInfo = liftIO . evalContT $ do
-  let vkSignalSemaphore' = mkVkSignalSemaphore (pVkSignalSemaphore (deviceCmds (device :: Device)))
-  pSignalInfo <- ContT $ withCStruct (signalInfo)
-  r <- lift $ vkSignalSemaphore' (deviceHandle (device)) pSignalInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkPhysicalDeviceTimelineSemaphoreFeatures - Structure describing
--- timeline semaphore features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceTimelineSemaphoreFeatures' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceTimelineSemaphoreFeatures' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceTimelineSemaphoreFeatures' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceTimelineSemaphoreFeatures = PhysicalDeviceTimelineSemaphoreFeatures
-  { -- | @timelineSemaphore@ indicates whether semaphores created with a
-    -- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
-    -- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' are
-    -- supported.
-    timelineSemaphore :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceTimelineSemaphoreFeatures
-
-instance ToCStruct PhysicalDeviceTimelineSemaphoreFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceTimelineSemaphoreFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (timelineSemaphore))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceTimelineSemaphoreFeatures where
-  peekCStruct p = do
-    timelineSemaphore <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceTimelineSemaphoreFeatures
-             (bool32ToBool timelineSemaphore)
-
-instance Storable PhysicalDeviceTimelineSemaphoreFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceTimelineSemaphoreFeatures where
-  zero = PhysicalDeviceTimelineSemaphoreFeatures
-           zero
-
-
--- | VkPhysicalDeviceTimelineSemaphoreProperties - Structure describing
--- timeline semaphore properties that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceTimelineSemaphoreProperties' structure
--- describe the following implementation-dependent limits:
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceTimelineSemaphoreProperties = PhysicalDeviceTimelineSemaphoreProperties
-  { -- | @maxTimelineSemaphoreValueDifference@ indicates the maximum difference
-    -- allowed by the implementation between the current value of a timeline
-    -- semaphore and any pending signal or wait operations.
-    maxTimelineSemaphoreValueDifference :: Word64 }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceTimelineSemaphoreProperties
-
-instance ToCStruct PhysicalDeviceTimelineSemaphoreProperties where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceTimelineSemaphoreProperties{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (maxTimelineSemaphoreValueDifference)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceTimelineSemaphoreProperties where
-  peekCStruct p = do
-    maxTimelineSemaphoreValueDifference <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
-    pure $ PhysicalDeviceTimelineSemaphoreProperties
-             maxTimelineSemaphoreValueDifference
-
-instance Storable PhysicalDeviceTimelineSemaphoreProperties where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceTimelineSemaphoreProperties where
-  zero = PhysicalDeviceTimelineSemaphoreProperties
-           zero
-
-
--- | VkSemaphoreTypeCreateInfo - Structure specifying the type of a newly
--- created semaphore
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO'
---
--- -   @semaphoreType@ /must/ be a valid
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' value
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-timelineSemaphore timelineSemaphore>
---     feature is not enabled, @semaphoreType@ /must/ not equal
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---
--- -   If @semaphoreType@ is
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY',
---     @initialValue@ /must/ be zero
---
--- If no 'SemaphoreTypeCreateInfo' structure is included in the @pNext@
--- chain of 'Graphics.Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo',
--- then the created semaphore will have a default
--- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
--- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SemaphoreTypeCreateInfo = SemaphoreTypeCreateInfo
-  { -- | @semaphoreType@ is a
-    -- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' value
-    -- specifying the type of the semaphore.
-    semaphoreType :: SemaphoreType
-  , -- | @initialValue@ is the initial payload value if @semaphoreType@ is
-    -- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'.
-    initialValue :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show SemaphoreTypeCreateInfo
-
-instance ToCStruct SemaphoreTypeCreateInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SemaphoreTypeCreateInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SemaphoreType)) (semaphoreType)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (initialValue)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SemaphoreType)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct SemaphoreTypeCreateInfo where
-  peekCStruct p = do
-    semaphoreType <- peek @SemaphoreType ((p `plusPtr` 16 :: Ptr SemaphoreType))
-    initialValue <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    pure $ SemaphoreTypeCreateInfo
-             semaphoreType initialValue
-
-instance Storable SemaphoreTypeCreateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SemaphoreTypeCreateInfo where
-  zero = SemaphoreTypeCreateInfo
-           zero
-           zero
-
-
--- | VkTimelineSemaphoreSubmitInfo - Structure specifying signal and wait
--- values for timeline semaphores
---
--- = Description
---
--- If the semaphore in
--- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pWaitSemaphores@ or
--- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pSignalSemaphores@
--- corresponding to an entry in @pWaitSemaphoreValues@ or
--- @pSignalSemaphoreValues@ respectively was not created with a
--- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
--- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE',
--- the implementation /must/ ignore the value in the @pWaitSemaphoreValues@
--- or @pSignalSemaphoreValues@ entry.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO'
---
--- -   If @waitSemaphoreValueCount@ is not @0@, and @pWaitSemaphoreValues@
---     is not @NULL@, @pWaitSemaphoreValues@ /must/ be a valid pointer to
---     an array of @waitSemaphoreValueCount@ @uint64_t@ values
---
--- -   If @signalSemaphoreValueCount@ is not @0@, and
---     @pSignalSemaphoreValues@ is not @NULL@, @pSignalSemaphoreValues@
---     /must/ be a valid pointer to an array of @signalSemaphoreValueCount@
---     @uint64_t@ values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data TimelineSemaphoreSubmitInfo = TimelineSemaphoreSubmitInfo
-  { -- | @pWaitSemaphoreValues@ is an array of length @waitSemaphoreValueCount@
-    -- containing values for the corresponding semaphores in
-    -- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pWaitSemaphores@ to wait
-    -- for.
-    waitSemaphoreValues :: Either Word32 (Vector Word64)
-  , -- | @pSignalSemaphoreValues@ is an array of length
-    -- @signalSemaphoreValueCount@ containing values for the corresponding
-    -- semaphores in
-    -- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pSignalSemaphores@ to set
-    -- when signaled.
-    signalSemaphoreValues :: Either Word32 (Vector Word64)
-  }
-  deriving (Typeable)
-deriving instance Show TimelineSemaphoreSubmitInfo
-
-instance ToCStruct TimelineSemaphoreSubmitInfo where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p TimelineSemaphoreSubmitInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (waitSemaphoreValues)) :: Word32))
-    pWaitSemaphoreValues'' <- case (waitSemaphoreValues) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPWaitSemaphoreValues' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (v)) * 8) 8
-        lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphoreValues' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (v)
-        pure $ pPWaitSemaphoreValues'
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word64))) pWaitSemaphoreValues''
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (signalSemaphoreValues)) :: Word32))
-    pSignalSemaphoreValues'' <- case (signalSemaphoreValues) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPSignalSemaphoreValues' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (v)) * 8) 8
-        lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphoreValues' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (v)
-        pure $ pPSignalSemaphoreValues'
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word64))) pSignalSemaphoreValues''
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct TimelineSemaphoreSubmitInfo where
-  peekCStruct p = do
-    waitSemaphoreValueCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pWaitSemaphoreValues <- peek @(Ptr Word64) ((p `plusPtr` 24 :: Ptr (Ptr Word64)))
-    pWaitSemaphoreValues' <- maybePeek (\j -> generateM (fromIntegral waitSemaphoreValueCount) (\i -> peek @Word64 (((j) `advancePtrBytes` (8 * (i)) :: Ptr Word64)))) pWaitSemaphoreValues
-    let pWaitSemaphoreValues'' = maybe (Left waitSemaphoreValueCount) Right pWaitSemaphoreValues'
-    signalSemaphoreValueCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pSignalSemaphoreValues <- peek @(Ptr Word64) ((p `plusPtr` 40 :: Ptr (Ptr Word64)))
-    pSignalSemaphoreValues' <- maybePeek (\j -> generateM (fromIntegral signalSemaphoreValueCount) (\i -> peek @Word64 (((j) `advancePtrBytes` (8 * (i)) :: Ptr Word64)))) pSignalSemaphoreValues
-    let pSignalSemaphoreValues'' = maybe (Left signalSemaphoreValueCount) Right pSignalSemaphoreValues'
-    pure $ TimelineSemaphoreSubmitInfo
-             pWaitSemaphoreValues'' pSignalSemaphoreValues''
-
-instance Zero TimelineSemaphoreSubmitInfo where
-  zero = TimelineSemaphoreSubmitInfo
-           (Left 0)
-           (Left 0)
-
-
--- | VkSemaphoreWaitInfo - Structure containing information about the
--- semaphore wait condition
---
--- == Valid Usage
---
--- -   All of the elements of @pSemaphores@ /must/ reference a semaphore
---     that was created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits.SemaphoreWaitFlagBits'
---     values
---
--- -   @pSemaphores@ /must/ be a valid pointer to an array of
---     @semaphoreCount@ valid 'Graphics.Vulkan.Core10.Handles.Semaphore'
---     handles
---
--- -   @pValues@ /must/ be a valid pointer to an array of @semaphoreCount@
---     @uint64_t@ values
---
--- -   @semaphoreCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits.SemaphoreWaitFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'waitSemaphores',
--- 'Graphics.Vulkan.Extensions.VK_KHR_timeline_semaphore.waitSemaphoresKHR'
-data SemaphoreWaitInfo = SemaphoreWaitInfo
-  { -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits.SemaphoreWaitFlagBits'
-    -- specifying additional parameters for the semaphore wait operation.
-    flags :: SemaphoreWaitFlags
-  , -- | @pSemaphores@ is a pointer to an array of @semaphoreCount@ semaphore
-    -- handles to wait on.
-    semaphores :: Vector Semaphore
-  , -- | @pValues@ is a pointer to an array of @semaphoreCount@ timeline
-    -- semaphore values.
-    values :: Vector Word64
-  }
-  deriving (Typeable)
-deriving instance Show SemaphoreWaitInfo
-
-instance ToCStruct SemaphoreWaitInfo where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SemaphoreWaitInfo{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr SemaphoreWaitFlags)) (flags)
-    let pSemaphoresLength = Data.Vector.length $ (semaphores)
-    let pValuesLength = Data.Vector.length $ (values)
-    lift $ unless (pValuesLength == pSemaphoresLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pValues and pSemaphores must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral pSemaphoresLength :: Word32))
-    pPSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (semaphores)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (semaphores)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPSemaphores')
-    pPValues' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (values)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPValues' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (values)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPValues')
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPSemaphores')
-    pPValues' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPValues' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPValues')
-    lift $ f
-
-instance FromCStruct SemaphoreWaitInfo where
-  peekCStruct p = do
-    flags <- peek @SemaphoreWaitFlags ((p `plusPtr` 16 :: Ptr SemaphoreWaitFlags))
-    semaphoreCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 24 :: Ptr (Ptr Semaphore)))
-    pSemaphores' <- generateM (fromIntegral semaphoreCount) (\i -> peek @Semaphore ((pSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
-    pValues <- peek @(Ptr Word64) ((p `plusPtr` 32 :: Ptr (Ptr Word64)))
-    pValues' <- generateM (fromIntegral semaphoreCount) (\i -> peek @Word64 ((pValues `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
-    pure $ SemaphoreWaitInfo
-             flags pSemaphores' pValues'
-
-instance Zero SemaphoreWaitInfo where
-  zero = SemaphoreWaitInfo
-           zero
-           mempty
-           mempty
-
-
--- | VkSemaphoreSignalInfo - Structure containing information about a
--- semaphore signal operation
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'signalSemaphore',
--- 'Graphics.Vulkan.Extensions.VK_KHR_timeline_semaphore.signalSemaphoreKHR'
-data SemaphoreSignalInfo = SemaphoreSignalInfo
-  { -- | @semaphore@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Semaphore'
-    -- handle
-    semaphore :: Semaphore
-  , -- | @value@ /must/ have a value which does not differ from the current value
-    -- of the semaphore or the value of any outstanding semaphore wait or
-    -- signal operation on @semaphore@ by more than
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
-    value :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show SemaphoreSignalInfo
-
-instance ToCStruct SemaphoreSignalInfo where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SemaphoreSignalInfo{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (semaphore)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (value)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct SemaphoreSignalInfo where
-  peekCStruct p = do
-    semaphore <- peek @Semaphore ((p `plusPtr` 16 :: Ptr Semaphore))
-    value <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    pure $ SemaphoreSignalInfo
-             semaphore value
-
-instance Storable SemaphoreSignalInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SemaphoreSignalInfo where
-  zero = SemaphoreSignalInfo
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs-boot
+++ /dev/null
@@ -1,59 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore  ( PhysicalDeviceTimelineSemaphoreFeatures
-                                                                       , PhysicalDeviceTimelineSemaphoreProperties
-                                                                       , SemaphoreSignalInfo
-                                                                       , SemaphoreTypeCreateInfo
-                                                                       , SemaphoreWaitInfo
-                                                                       , TimelineSemaphoreSubmitInfo
-                                                                       ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceTimelineSemaphoreFeatures
-
-instance ToCStruct PhysicalDeviceTimelineSemaphoreFeatures
-instance Show PhysicalDeviceTimelineSemaphoreFeatures
-
-instance FromCStruct PhysicalDeviceTimelineSemaphoreFeatures
-
-
-data PhysicalDeviceTimelineSemaphoreProperties
-
-instance ToCStruct PhysicalDeviceTimelineSemaphoreProperties
-instance Show PhysicalDeviceTimelineSemaphoreProperties
-
-instance FromCStruct PhysicalDeviceTimelineSemaphoreProperties
-
-
-data SemaphoreSignalInfo
-
-instance ToCStruct SemaphoreSignalInfo
-instance Show SemaphoreSignalInfo
-
-instance FromCStruct SemaphoreSignalInfo
-
-
-data SemaphoreTypeCreateInfo
-
-instance ToCStruct SemaphoreTypeCreateInfo
-instance Show SemaphoreTypeCreateInfo
-
-instance FromCStruct SemaphoreTypeCreateInfo
-
-
-data SemaphoreWaitInfo
-
-instance ToCStruct SemaphoreWaitInfo
-instance Show SemaphoreWaitInfo
-
-instance FromCStruct SemaphoreWaitInfo
-
-
-data TimelineSemaphoreSubmitInfo
-
-instance ToCStruct TimelineSemaphoreSubmitInfo
-instance Show TimelineSemaphoreSubmitInfo
-
-instance FromCStruct TimelineSemaphoreSubmitInfo
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs
+++ /dev/null
@@ -1,90 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout  ( PhysicalDeviceUniformBufferStandardLayoutFeatures(..)
-                                                                                   , StructureType(..)
-                                                                                   ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceUniformBufferStandardLayoutFeatures - Structure
--- indicating support for std430-like packing in uniform buffers
---
--- = Members
---
--- The members of the 'PhysicalDeviceUniformBufferStandardLayoutFeatures'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceUniformBufferStandardLayoutFeatures' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceUniformBufferStandardLayoutFeatures' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable this feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceUniformBufferStandardLayoutFeatures = PhysicalDeviceUniformBufferStandardLayoutFeatures
-  { -- | @uniformBufferStandardLayout@ indicates that the implementation supports
-    -- the same layouts for uniform buffers as for storage and other kinds of
-    -- buffers. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Buffer Layout>.
-    uniformBufferStandardLayout :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceUniformBufferStandardLayoutFeatures
-
-instance ToCStruct PhysicalDeviceUniformBufferStandardLayoutFeatures where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceUniformBufferStandardLayoutFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (uniformBufferStandardLayout))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceUniformBufferStandardLayoutFeatures where
-  peekCStruct p = do
-    uniformBufferStandardLayout <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceUniformBufferStandardLayoutFeatures
-             (bool32ToBool uniformBufferStandardLayout)
-
-instance Storable PhysicalDeviceUniformBufferStandardLayoutFeatures where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceUniformBufferStandardLayoutFeatures where
-  zero = PhysicalDeviceUniformBufferStandardLayoutFeatures
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout  (PhysicalDeviceUniformBufferStandardLayoutFeatures) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceUniformBufferStandardLayoutFeatures
-
-instance ToCStruct PhysicalDeviceUniformBufferStandardLayoutFeatures
-instance Show PhysicalDeviceUniformBufferStandardLayoutFeatures
-
-instance FromCStruct PhysicalDeviceUniformBufferStandardLayoutFeatures
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs
+++ /dev/null
@@ -1,95 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model  ( PhysicalDeviceVulkanMemoryModelFeatures(..)
-                                                                        , StructureType(..)
-                                                                        ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(..))
--- | VkPhysicalDeviceVulkanMemoryModelFeatures - Structure describing
--- features supported by the memory model
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceVulkanMemoryModelFeatures = PhysicalDeviceVulkanMemoryModelFeatures
-  { -- | @vulkanMemoryModel@ indicates whether the Vulkan Memory Model is
-    -- supported, as defined in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model Vulkan Memory Model>.
-    -- This also indicates whether shader modules /can/ declare the
-    -- @VulkanMemoryModel@ capability.
-    vulkanMemoryModel :: Bool
-  , -- | @vulkanMemoryModelDeviceScope@ indicates whether the Vulkan Memory Model
-    -- can use 'Graphics.Vulkan.Core10.Handles.Device' scope synchronization.
-    -- This also indicates whether shader modules /can/ declare the
-    -- @VulkanMemoryModelDeviceScope@ capability.
-    vulkanMemoryModelDeviceScope :: Bool
-  , -- | @vulkanMemoryModelAvailabilityVisibilityChains@ indicates whether the
-    -- Vulkan Memory Model can use
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model-availability-visibility availability and visibility chains>
-    -- with more than one element.
-    vulkanMemoryModelAvailabilityVisibilityChains :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceVulkanMemoryModelFeatures
-
-instance ToCStruct PhysicalDeviceVulkanMemoryModelFeatures where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceVulkanMemoryModelFeatures{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModel))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModelDeviceScope))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModelAvailabilityVisibilityChains))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceVulkanMemoryModelFeatures where
-  peekCStruct p = do
-    vulkanMemoryModel <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    vulkanMemoryModelDeviceScope <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    vulkanMemoryModelAvailabilityVisibilityChains <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    pure $ PhysicalDeviceVulkanMemoryModelFeatures
-             (bool32ToBool vulkanMemoryModel) (bool32ToBool vulkanMemoryModelDeviceScope) (bool32ToBool vulkanMemoryModelAvailabilityVisibilityChains)
-
-instance Storable PhysicalDeviceVulkanMemoryModelFeatures where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceVulkanMemoryModelFeatures where
-  zero = PhysicalDeviceVulkanMemoryModelFeatures
-           zero
-           zero
-           zero
-
diff --git a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs-boot b/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model  (PhysicalDeviceVulkanMemoryModelFeatures) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceVulkanMemoryModelFeatures
-
-instance ToCStruct PhysicalDeviceVulkanMemoryModelFeatures
-instance Show PhysicalDeviceVulkanMemoryModelFeatures
-
-instance FromCStruct PhysicalDeviceVulkanMemoryModelFeatures
-
diff --git a/src/Graphics/Vulkan/Dynamic.hs b/src/Graphics/Vulkan/Dynamic.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Dynamic.hs
+++ /dev/null
@@ -1,1514 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Dynamic  ( InstanceCmds(..)
-                                , getInstanceProcAddr'
-                                , initInstanceCmds
-                                , DeviceCmds(..)
-                                , initDeviceCmds
-                                ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Foreign.Ptr (castFunPtr)
-import GHC.Ptr (nullFunPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CInt)
-import Foreign.C.Types (CSize)
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Ptr (Ptr(Ptr))
-import Data.Word (Word16)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Graphics.Vulkan.NamedType ((:::))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.WSITypes (AHardwareBuffer)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureBuildGeometryInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureBuildOffsetInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureDeviceAddressInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (AccelerationStructureKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureMemoryRequirementsInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureVersionKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (AcquireNextImageInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (AcquireProfilingLockInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (AndroidHardwareBufferPropertiesANDROID)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_android_surface (AndroidSurfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BindAccelerationStructureMemoryInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindBufferMemoryInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindImageMemoryInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (BindSparseInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.BaseType (Bool32)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Buffer)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (BufferCopy)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Buffer (BufferCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferDeviceAddressInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (BufferImageCopy)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.OtherTypes (BufferMemoryBarrier)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (BufferMemoryRequirementsInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (BufferView)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.BufferView (BufferViewCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps (CalibratedTimestampInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints (CheckpointDataNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (ClearAttachment)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (ClearColorValue)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (ClearDepthStencilValue)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (ClearRect)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (CoarseSampleOrderCustomNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (CoarseSampleOrderTypeNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBuffer (CommandBufferAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBuffer (CommandBufferBeginInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits (CommandBufferResetFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (CommandPool)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandPool (CommandPoolCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits (CommandPoolResetFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags (CommandPoolTrimFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (ComputePipelineCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering (ConditionalRenderingBeginInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix (CooperativeMatrixPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureToMemoryInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (CopyDescriptorSet)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyMemoryToAccelerationStructureInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerMarkerInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerObjectNameInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerObjectTagInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportCallbackCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (DebugReportCallbackEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportFlagsEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsLabelEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessageSeverityFlagBitsEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessageTypeFlagsEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessengerCallbackDataEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessengerCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (DebugUtilsMessengerEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsObjectNameInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsObjectTagInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (DeferredOperationKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (DescriptorPool)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (DescriptorPoolCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.DescriptorPoolResetFlags (DescriptorPoolResetFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (DescriptorSet)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (DescriptorSetAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (DescriptorSetLayout)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (DescriptorSetLayoutCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (DescriptorSetLayoutSupport)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Handles (DescriptorUpdateTemplate)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.BaseType (DeviceAddress)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Device (DeviceCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_control (DeviceEventInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentCapabilitiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagsKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (DeviceMemoryOpaqueCaptureAddressInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (DeviceQueueInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Device_T)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.WSITypes (Display)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_control (DisplayEventInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (DisplayKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayModeCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (DisplayModeKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayModeProperties2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayModePropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneCapabilities2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPlaneCapabilitiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneInfo2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneProperties2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPlanePropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_control (DisplayPowerInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayProperties2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display (DisplaySurfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Event)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Event (EventCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.ExtensionDiscovery (ExtensionProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalBufferProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (ExternalFenceProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalImageFormatPropertiesNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagsNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (ExternalSemaphoreProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Fence)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Fence (FenceCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd (FenceGetFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32 (FenceGetWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.Filter (Filter)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.Format (Format)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (FormatProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (FormatProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Framebuffer)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pass (FramebufferCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode (FramebufferMixedSamplesCombinationNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (GeneratedCommandsInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (GeneratedCommandsMemoryRequirementsInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pipeline (GraphicsPipelineCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.WSITypes (HANDLE)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata (HdrMetadataEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_headless_surface (HeadlessSurfaceCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_MVK_ios_surface (IOSSurfaceCreateInfoMVK)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Image)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (ImageBlit)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (ImageCopy)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Image (ImageCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (ImageFormatProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (ImageFormatProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.OtherTypes (ImageMemoryBarrier)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageMemoryRequirementsInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface (ImagePipeSurfaceCreateInfoFUCHSIA)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (ImageResolve)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageSparseMemoryRequirementsInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Image (ImageSubresource)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SharedTypes (ImageSubresourceRange)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.ImageTiling (ImageTiling)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.ImageType (ImageType)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (ImageView)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NVX_image_view_handle (ImageViewAddressPropertiesNVX)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.ImageView (ImageViewCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NVX_image_view_handle (ImageViewHandleInfoNVX)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd (ImportFenceFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32 (ImportFenceWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd (ImportSemaphoreFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32 (ImportSemaphoreWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.IndexType (IndexType)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_device_generated_commands (IndirectCommandsLayoutCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (IndirectCommandsLayoutNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (InitializePerformanceApiInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Instance_T)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.LayerDiscovery (LayerProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_MVK_macos_surface (MacOSSurfaceCreateInfoMVK)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Memory (MappedMemoryRange)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Memory (MemoryAllocateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.OtherTypes (MemoryBarrier)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryFdPropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (MemoryGetAndroidHardwareBufferInfoANDROID)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryGetFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryGetWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_external_memory_host (MemoryHostPointerPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.MemoryMapFlags (MemoryMapFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.MemoryManagement (MemoryRequirements)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryWin32HandlePropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_metal_surface (MetalSurfaceCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (MultisamplePropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.FuncPointers (PFN_vkVoidFunction)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing (PastPresentationTimingGOOGLE)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceConfigurationAcquireInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (PerformanceConfigurationINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PerformanceCounterDescriptionKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (PerformanceCounterKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceMarkerInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceOverrideInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceParameterTypeINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceStreamMarkerInfoINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_INTEL_performance_query (PerformanceValueINTEL)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalBufferInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (PhysicalDeviceExternalFenceInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (PhysicalDeviceExternalSemaphoreInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (PhysicalDeviceGroupProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceImageFormatInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceMemoryProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceMemoryProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceSparseImageFormatInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (PhysicalDeviceSurfaceInfo2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_tooling_info (PhysicalDeviceToolPropertiesEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Pipeline)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (PipelineCache)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.PipelineCache (PipelineCacheCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableInternalRepresentationKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutablePropertiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableStatisticKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (PipelineLayout)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.PipelineLayout (PipelineLayoutCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (PresentInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (PresentModeKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (QueryPool)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Query (QueryPoolCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_performance_query (QueryPoolPerformanceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.QueryResultFlagBits (QueryResultFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.QueryType (QueryType)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DeviceInitialization (QueueFamilyProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (QueueFamilyProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Queue_T)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.WSITypes (RROutput)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingPipelineCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_ray_tracing (RayTracingPipelineCreateInfoNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (Rect2D)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing (RefreshCycleDurationGOOGLE)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (RenderPass)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Pass (RenderPassCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (RenderPassCreateInfo2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.Result (Result)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Sampler)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Sampler (SamplerCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Handles (SamplerYcbcrConversion)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (Semaphore)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.QueueSemaphore (SemaphoreCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd (SemaphoreGetFdInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32 (SemaphoreGetWin32HandleInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreSignalInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreWaitInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_shader_info (ShaderInfoTypeAMD)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Handles (ShaderModule)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Shader (ShaderModuleCreateInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_shading_rate_image (ShadingRatePaletteNV)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseImageFormatProperties)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (SparseImageFormatProperties2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.SparseResourceMemoryManagement (SparseImageMemoryRequirements)
-import {-# SOURCE #-} Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (SparseImageMemoryRequirements2)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits (StencilFaceFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface (StreamDescriptorSurfaceCreateInfoGGP)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (StridedBufferRegionKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Queue (SubmitInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassBeginInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Enums.SubpassContents (SubpassContents)
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassEndInfo)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.Image (SubresourceLayout)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCapabilities2EXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (SurfaceCapabilities2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_surface (SurfaceCapabilitiesKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagBitsEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (SurfaceFormat2KHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_surface (SurfaceFormatKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (SwapchainKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps (TimeDomainEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_validation_cache (ValidationCacheCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (ValidationCacheEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NN_vi_surface (ViSurfaceCreateInfoNN)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.CommandBufferBuilding (Viewport)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling (ViewportWScalingNV)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.WSITypes (VisualID)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_wayland_surface (WaylandSurfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_win32_surface (Win32SurfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.WSITypes (Wl_display)
-import {-# SOURCE #-} Graphics.Vulkan.Core10.DescriptorSet (WriteDescriptorSet)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_xcb_surface (XcbSurfaceCreateInfoKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.WSITypes (Xcb_connection_t)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.WSITypes (Xcb_visualid_t)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_xlib_surface (XlibSurfaceCreateInfoKHR)
-import Graphics.Vulkan.Zero (Zero(..))
-data InstanceCmds = InstanceCmds
-  { instanceCmdsHandle :: Ptr Instance_T
-  , pVkDestroyInstance :: FunPtr (Ptr Instance_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkEnumeratePhysicalDevices :: FunPtr (Ptr Instance_T -> ("pPhysicalDeviceCount" ::: Ptr Word32) -> ("pPhysicalDevices" ::: Ptr (Ptr PhysicalDevice_T)) -> IO Result)
-  , pVkGetInstanceProcAddr :: FunPtr (Ptr Instance_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction)
-  , pVkGetPhysicalDeviceProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pProperties" ::: Ptr PhysicalDeviceProperties) -> IO ())
-  , pVkGetPhysicalDeviceQueueFamilyProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr QueueFamilyProperties) -> IO ())
-  , pVkGetPhysicalDeviceMemoryProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pMemoryProperties" ::: Ptr PhysicalDeviceMemoryProperties) -> IO ())
-  , pVkGetPhysicalDeviceFeatures :: FunPtr (Ptr PhysicalDevice_T -> ("pFeatures" ::: Ptr PhysicalDeviceFeatures) -> IO ())
-  , pVkGetPhysicalDeviceFormatProperties :: FunPtr (Ptr PhysicalDevice_T -> Format -> ("pFormatProperties" ::: Ptr FormatProperties) -> IO ())
-  , pVkGetPhysicalDeviceImageFormatProperties :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ("pImageFormatProperties" ::: Ptr ImageFormatProperties) -> IO Result)
-  , pVkCreateDevice :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pCreateInfo" ::: Ptr (DeviceCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDevice" ::: Ptr (Ptr Device_T)) -> IO Result)
-  , pVkEnumerateDeviceLayerProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr LayerProperties) -> IO Result)
-  , pVkEnumerateDeviceExtensionProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr ExtensionProperties) -> IO Result)
-  , pVkGetPhysicalDeviceSparseImageFormatProperties :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ("samples" ::: SampleCountFlagBits) -> ImageUsageFlags -> ImageTiling -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr SparseImageFormatProperties) -> IO ())
-  , pVkCreateAndroidSurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr AndroidSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkGetPhysicalDeviceDisplayPropertiesKHR :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPropertiesKHR) -> IO Result)
-  , pVkGetPhysicalDeviceDisplayPlanePropertiesKHR :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPlanePropertiesKHR) -> IO Result)
-  , pVkGetDisplayPlaneSupportedDisplaysKHR :: FunPtr (Ptr PhysicalDevice_T -> ("planeIndex" ::: Word32) -> ("pDisplayCount" ::: Ptr Word32) -> ("pDisplays" ::: Ptr DisplayKHR) -> IO Result)
-  , pVkGetDisplayModePropertiesKHR :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayModePropertiesKHR) -> IO Result)
-  , pVkCreateDisplayModeKHR :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> ("pCreateInfo" ::: Ptr DisplayModeCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMode" ::: Ptr DisplayModeKHR) -> IO Result)
-  , pVkGetDisplayPlaneCapabilitiesKHR :: FunPtr (Ptr PhysicalDevice_T -> DisplayModeKHR -> ("planeIndex" ::: Word32) -> ("pCapabilities" ::: Ptr DisplayPlaneCapabilitiesKHR) -> IO Result)
-  , pVkCreateDisplayPlaneSurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr DisplaySurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkDestroySurfaceKHR :: FunPtr (Ptr Instance_T -> SurfaceKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetPhysicalDeviceSurfaceSupportKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> SurfaceKHR -> ("pSupported" ::: Ptr Bool32) -> IO Result)
-  , pVkGetPhysicalDeviceSurfaceCapabilitiesKHR :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR) -> IO Result)
-  , pVkGetPhysicalDeviceSurfaceFormatsKHR :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceFormatCount" ::: Ptr Word32) -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO Result)
-  , pVkGetPhysicalDeviceSurfacePresentModesKHR :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> ("pPresentModeCount" ::: Ptr Word32) -> ("pPresentModes" ::: Ptr PresentModeKHR) -> IO Result)
-  , pVkCreateViSurfaceNN :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr ViSurfaceCreateInfoNN) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkCreateWaylandSurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr WaylandSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkGetPhysicalDeviceWaylandPresentationSupportKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> Ptr Wl_display -> IO Bool32)
-  , pVkCreateWin32SurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr Win32SurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkGetPhysicalDeviceWin32PresentationSupportKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> IO Bool32)
-  , pVkCreateXlibSurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr XlibSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkGetPhysicalDeviceXlibPresentationSupportKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> ("dpy" ::: Ptr Display) -> VisualID -> IO Bool32)
-  , pVkCreateXcbSurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr XcbSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkGetPhysicalDeviceXcbPresentationSupportKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> Ptr Xcb_connection_t -> ("visual_id" ::: Xcb_visualid_t) -> IO Bool32)
-  , pVkCreateImagePipeSurfaceFUCHSIA :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr ImagePipeSurfaceCreateInfoFUCHSIA) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkCreateStreamDescriptorSurfaceGGP :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr StreamDescriptorSurfaceCreateInfoGGP) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkCreateDebugReportCallbackEXT :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr DebugReportCallbackCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pCallback" ::: Ptr DebugReportCallbackEXT) -> IO Result)
-  , pVkDestroyDebugReportCallbackEXT :: FunPtr (Ptr Instance_T -> DebugReportCallbackEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkDebugReportMessageEXT :: FunPtr (Ptr Instance_T -> DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> ("object" ::: Word64) -> ("location" ::: CSize) -> ("messageCode" ::: Int32) -> ("pLayerPrefix" ::: Ptr CChar) -> ("pMessage" ::: Ptr CChar) -> IO ())
-  , pVkGetPhysicalDeviceExternalImageFormatPropertiesNV :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ("externalHandleType" ::: ExternalMemoryHandleTypeFlagsNV) -> ("pExternalImageFormatProperties" ::: Ptr ExternalImageFormatPropertiesNV) -> IO Result)
-  , pVkGetPhysicalDeviceFeatures2 :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pFeatures" ::: Ptr (PhysicalDeviceFeatures2 a)) -> IO ())
-  , pVkGetPhysicalDeviceProperties2 :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pProperties" ::: Ptr (PhysicalDeviceProperties2 a)) -> IO ())
-  , pVkGetPhysicalDeviceFormatProperties2 :: forall a . FunPtr (Ptr PhysicalDevice_T -> Format -> ("pFormatProperties" ::: Ptr (FormatProperties2 a)) -> IO ())
-  , pVkGetPhysicalDeviceImageFormatProperties2 :: forall a b . FunPtr (Ptr PhysicalDevice_T -> ("pImageFormatInfo" ::: Ptr (PhysicalDeviceImageFormatInfo2 a)) -> ("pImageFormatProperties" ::: Ptr (ImageFormatProperties2 b)) -> IO Result)
-  , pVkGetPhysicalDeviceQueueFamilyProperties2 :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr (QueueFamilyProperties2 a)) -> IO ())
-  , pVkGetPhysicalDeviceMemoryProperties2 :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pMemoryProperties" ::: Ptr (PhysicalDeviceMemoryProperties2 a)) -> IO ())
-  , pVkGetPhysicalDeviceSparseImageFormatProperties2 :: FunPtr (Ptr PhysicalDevice_T -> ("pFormatInfo" ::: Ptr PhysicalDeviceSparseImageFormatInfo2) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr SparseImageFormatProperties2) -> IO ())
-  , pVkGetPhysicalDeviceExternalBufferProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pExternalBufferInfo" ::: Ptr PhysicalDeviceExternalBufferInfo) -> ("pExternalBufferProperties" ::: Ptr ExternalBufferProperties) -> IO ())
-  , pVkGetPhysicalDeviceExternalSemaphoreProperties :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pExternalSemaphoreInfo" ::: Ptr (PhysicalDeviceExternalSemaphoreInfo a)) -> ("pExternalSemaphoreProperties" ::: Ptr ExternalSemaphoreProperties) -> IO ())
-  , pVkGetPhysicalDeviceExternalFenceProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pExternalFenceInfo" ::: Ptr PhysicalDeviceExternalFenceInfo) -> ("pExternalFenceProperties" ::: Ptr ExternalFenceProperties) -> IO ())
-  , pVkReleaseDisplayEXT :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> IO Result)
-  , pVkAcquireXlibDisplayEXT :: FunPtr (Ptr PhysicalDevice_T -> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result)
-  , pVkGetRandROutputDisplayEXT :: FunPtr (Ptr PhysicalDevice_T -> ("dpy" ::: Ptr Display) -> RROutput -> ("pDisplay" ::: Ptr DisplayKHR) -> IO Result)
-  , pVkGetPhysicalDeviceSurfaceCapabilities2EXT :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilities2EXT) -> IO Result)
-  , pVkEnumeratePhysicalDeviceGroups :: FunPtr (Ptr Instance_T -> ("pPhysicalDeviceGroupCount" ::: Ptr Word32) -> ("pPhysicalDeviceGroupProperties" ::: Ptr PhysicalDeviceGroupProperties) -> IO Result)
-  , pVkGetPhysicalDevicePresentRectanglesKHR :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> ("pRectCount" ::: Ptr Word32) -> ("pRects" ::: Ptr Rect2D) -> IO Result)
-  , pVkCreateIOSSurfaceMVK :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr IOSSurfaceCreateInfoMVK) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkCreateMacOSSurfaceMVK :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr MacOSSurfaceCreateInfoMVK) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkCreateMetalSurfaceEXT :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr MetalSurfaceCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkGetPhysicalDeviceMultisamplePropertiesEXT :: FunPtr (Ptr PhysicalDevice_T -> ("samples" ::: SampleCountFlagBits) -> ("pMultisampleProperties" ::: Ptr MultisamplePropertiesEXT) -> IO ())
-  , pVkGetPhysicalDeviceSurfaceCapabilities2KHR :: forall a b . FunPtr (Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR a)) -> ("pSurfaceCapabilities" ::: Ptr (SurfaceCapabilities2KHR b)) -> IO Result)
-  , pVkGetPhysicalDeviceSurfaceFormats2KHR :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR a)) -> ("pSurfaceFormatCount" ::: Ptr Word32) -> ("pSurfaceFormats" ::: Ptr SurfaceFormat2KHR) -> IO Result)
-  , pVkGetPhysicalDeviceDisplayProperties2KHR :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayProperties2KHR) -> IO Result)
-  , pVkGetPhysicalDeviceDisplayPlaneProperties2KHR :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPlaneProperties2KHR) -> IO Result)
-  , pVkGetDisplayModeProperties2KHR :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayModeProperties2KHR) -> IO Result)
-  , pVkGetDisplayPlaneCapabilities2KHR :: FunPtr (Ptr PhysicalDevice_T -> ("pDisplayPlaneInfo" ::: Ptr DisplayPlaneInfo2KHR) -> ("pCapabilities" ::: Ptr DisplayPlaneCapabilities2KHR) -> IO Result)
-  , pVkGetPhysicalDeviceCalibrateableTimeDomainsEXT :: FunPtr (Ptr PhysicalDevice_T -> ("pTimeDomainCount" ::: Ptr Word32) -> ("pTimeDomains" ::: Ptr TimeDomainEXT) -> IO Result)
-  , pVkCreateDebugUtilsMessengerEXT :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT) -> IO Result)
-  , pVkDestroyDebugUtilsMessengerEXT :: FunPtr (Ptr Instance_T -> DebugUtilsMessengerEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkSubmitDebugUtilsMessageEXT :: FunPtr (Ptr Instance_T -> DebugUtilsMessageSeverityFlagBitsEXT -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT) -> IO ())
-  , pVkGetPhysicalDeviceCooperativeMatrixPropertiesNV :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr CooperativeMatrixPropertiesNV) -> IO Result)
-  , pVkGetPhysicalDeviceSurfacePresentModes2EXT :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR a)) -> ("pPresentModeCount" ::: Ptr Word32) -> ("pPresentModes" ::: Ptr PresentModeKHR) -> IO Result)
-  , pVkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> ("pCounterCount" ::: Ptr Word32) -> ("pCounters" ::: Ptr PerformanceCounterKHR) -> ("pCounterDescriptions" ::: Ptr PerformanceCounterDescriptionKHR) -> IO Result)
-  , pVkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR :: FunPtr (Ptr PhysicalDevice_T -> ("pPerformanceQueryCreateInfo" ::: Ptr QueryPoolPerformanceCreateInfoKHR) -> ("pNumPasses" ::: Ptr Word32) -> IO ())
-  , pVkCreateHeadlessSurfaceEXT :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr HeadlessSurfaceCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
-  , pVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV :: FunPtr (Ptr PhysicalDevice_T -> ("pCombinationCount" ::: Ptr Word32) -> ("pCombinations" ::: Ptr FramebufferMixedSamplesCombinationNV) -> IO Result)
-  , pVkGetPhysicalDeviceToolPropertiesEXT :: FunPtr (Ptr PhysicalDevice_T -> ("pToolCount" ::: Ptr Word32) -> ("pToolProperties" ::: Ptr PhysicalDeviceToolPropertiesEXT) -> IO Result)
-  }
-
-deriving instance Eq InstanceCmds
-deriving instance Show InstanceCmds
-instance Zero InstanceCmds where
-  zero = InstanceCmds
-    nullPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-
--- | A version of 'getInstanceProcAddr' which can be called
--- with a null pointer for the instance.
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "vkGetInstanceProcAddr" getInstanceProcAddr' :: Ptr Instance_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
-
-initInstanceCmds :: Ptr Instance_T -> IO InstanceCmds
-initInstanceCmds handle = do
-  vkDestroyInstance <- getInstanceProcAddr' handle (Ptr "vkDestroyInstance"#)
-  vkEnumeratePhysicalDevices <- getInstanceProcAddr' handle (Ptr "vkEnumeratePhysicalDevices"#)
-  vkGetInstanceProcAddr <- getInstanceProcAddr' handle (Ptr "vkGetInstanceProcAddr"#)
-  vkGetPhysicalDeviceProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceProperties"#)
-  vkGetPhysicalDeviceQueueFamilyProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceQueueFamilyProperties"#)
-  vkGetPhysicalDeviceMemoryProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceMemoryProperties"#)
-  vkGetPhysicalDeviceFeatures <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceFeatures"#)
-  vkGetPhysicalDeviceFormatProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceFormatProperties"#)
-  vkGetPhysicalDeviceImageFormatProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceImageFormatProperties"#)
-  vkCreateDevice <- getInstanceProcAddr' handle (Ptr "vkCreateDevice"#)
-  vkEnumerateDeviceLayerProperties <- getInstanceProcAddr' handle (Ptr "vkEnumerateDeviceLayerProperties"#)
-  vkEnumerateDeviceExtensionProperties <- getInstanceProcAddr' handle (Ptr "vkEnumerateDeviceExtensionProperties"#)
-  vkGetPhysicalDeviceSparseImageFormatProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSparseImageFormatProperties"#)
-  vkCreateAndroidSurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateAndroidSurfaceKHR"#)
-  vkGetPhysicalDeviceDisplayPropertiesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceDisplayPropertiesKHR"#)
-  vkGetPhysicalDeviceDisplayPlanePropertiesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"#)
-  vkGetDisplayPlaneSupportedDisplaysKHR <- getInstanceProcAddr' handle (Ptr "vkGetDisplayPlaneSupportedDisplaysKHR"#)
-  vkGetDisplayModePropertiesKHR <- getInstanceProcAddr' handle (Ptr "vkGetDisplayModePropertiesKHR"#)
-  vkCreateDisplayModeKHR <- getInstanceProcAddr' handle (Ptr "vkCreateDisplayModeKHR"#)
-  vkGetDisplayPlaneCapabilitiesKHR <- getInstanceProcAddr' handle (Ptr "vkGetDisplayPlaneCapabilitiesKHR"#)
-  vkCreateDisplayPlaneSurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateDisplayPlaneSurfaceKHR"#)
-  vkDestroySurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkDestroySurfaceKHR"#)
-  vkGetPhysicalDeviceSurfaceSupportKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceSupportKHR"#)
-  vkGetPhysicalDeviceSurfaceCapabilitiesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"#)
-  vkGetPhysicalDeviceSurfaceFormatsKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceFormatsKHR"#)
-  vkGetPhysicalDeviceSurfacePresentModesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfacePresentModesKHR"#)
-  vkCreateViSurfaceNN <- getInstanceProcAddr' handle (Ptr "vkCreateViSurfaceNN"#)
-  vkCreateWaylandSurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateWaylandSurfaceKHR"#)
-  vkGetPhysicalDeviceWaylandPresentationSupportKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceWaylandPresentationSupportKHR"#)
-  vkCreateWin32SurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateWin32SurfaceKHR"#)
-  vkGetPhysicalDeviceWin32PresentationSupportKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceWin32PresentationSupportKHR"#)
-  vkCreateXlibSurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateXlibSurfaceKHR"#)
-  vkGetPhysicalDeviceXlibPresentationSupportKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceXlibPresentationSupportKHR"#)
-  vkCreateXcbSurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateXcbSurfaceKHR"#)
-  vkGetPhysicalDeviceXcbPresentationSupportKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceXcbPresentationSupportKHR"#)
-  vkCreateImagePipeSurfaceFUCHSIA <- getInstanceProcAddr' handle (Ptr "vkCreateImagePipeSurfaceFUCHSIA"#)
-  vkCreateStreamDescriptorSurfaceGGP <- getInstanceProcAddr' handle (Ptr "vkCreateStreamDescriptorSurfaceGGP"#)
-  vkCreateDebugReportCallbackEXT <- getInstanceProcAddr' handle (Ptr "vkCreateDebugReportCallbackEXT"#)
-  vkDestroyDebugReportCallbackEXT <- getInstanceProcAddr' handle (Ptr "vkDestroyDebugReportCallbackEXT"#)
-  vkDebugReportMessageEXT <- getInstanceProcAddr' handle (Ptr "vkDebugReportMessageEXT"#)
-  vkGetPhysicalDeviceExternalImageFormatPropertiesNV <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceExternalImageFormatPropertiesNV"#)
-  vkGetPhysicalDeviceFeatures2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceFeatures2"#)
-  vkGetPhysicalDeviceProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceProperties2"#)
-  vkGetPhysicalDeviceFormatProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceFormatProperties2"#)
-  vkGetPhysicalDeviceImageFormatProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceImageFormatProperties2"#)
-  vkGetPhysicalDeviceQueueFamilyProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceQueueFamilyProperties2"#)
-  vkGetPhysicalDeviceMemoryProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceMemoryProperties2"#)
-  vkGetPhysicalDeviceSparseImageFormatProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSparseImageFormatProperties2"#)
-  vkGetPhysicalDeviceExternalBufferProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceExternalBufferProperties"#)
-  vkGetPhysicalDeviceExternalSemaphoreProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceExternalSemaphoreProperties"#)
-  vkGetPhysicalDeviceExternalFenceProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceExternalFenceProperties"#)
-  vkReleaseDisplayEXT <- getInstanceProcAddr' handle (Ptr "vkReleaseDisplayEXT"#)
-  vkAcquireXlibDisplayEXT <- getInstanceProcAddr' handle (Ptr "vkAcquireXlibDisplayEXT"#)
-  vkGetRandROutputDisplayEXT <- getInstanceProcAddr' handle (Ptr "vkGetRandROutputDisplayEXT"#)
-  vkGetPhysicalDeviceSurfaceCapabilities2EXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceCapabilities2EXT"#)
-  vkEnumeratePhysicalDeviceGroups <- getInstanceProcAddr' handle (Ptr "vkEnumeratePhysicalDeviceGroups"#)
-  vkGetPhysicalDevicePresentRectanglesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDevicePresentRectanglesKHR"#)
-  vkCreateIOSSurfaceMVK <- getInstanceProcAddr' handle (Ptr "vkCreateIOSSurfaceMVK"#)
-  vkCreateMacOSSurfaceMVK <- getInstanceProcAddr' handle (Ptr "vkCreateMacOSSurfaceMVK"#)
-  vkCreateMetalSurfaceEXT <- getInstanceProcAddr' handle (Ptr "vkCreateMetalSurfaceEXT"#)
-  vkGetPhysicalDeviceMultisamplePropertiesEXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceMultisamplePropertiesEXT"#)
-  vkGetPhysicalDeviceSurfaceCapabilities2KHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceCapabilities2KHR"#)
-  vkGetPhysicalDeviceSurfaceFormats2KHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceFormats2KHR"#)
-  vkGetPhysicalDeviceDisplayProperties2KHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceDisplayProperties2KHR"#)
-  vkGetPhysicalDeviceDisplayPlaneProperties2KHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceDisplayPlaneProperties2KHR"#)
-  vkGetDisplayModeProperties2KHR <- getInstanceProcAddr' handle (Ptr "vkGetDisplayModeProperties2KHR"#)
-  vkGetDisplayPlaneCapabilities2KHR <- getInstanceProcAddr' handle (Ptr "vkGetDisplayPlaneCapabilities2KHR"#)
-  vkGetPhysicalDeviceCalibrateableTimeDomainsEXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"#)
-  vkCreateDebugUtilsMessengerEXT <- getInstanceProcAddr' handle (Ptr "vkCreateDebugUtilsMessengerEXT"#)
-  vkDestroyDebugUtilsMessengerEXT <- getInstanceProcAddr' handle (Ptr "vkDestroyDebugUtilsMessengerEXT"#)
-  vkSubmitDebugUtilsMessageEXT <- getInstanceProcAddr' handle (Ptr "vkSubmitDebugUtilsMessageEXT"#)
-  vkGetPhysicalDeviceCooperativeMatrixPropertiesNV <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV"#)
-  vkGetPhysicalDeviceSurfacePresentModes2EXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfacePresentModes2EXT"#)
-  vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR <- getInstanceProcAddr' handle (Ptr "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"#)
-  vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"#)
-  vkCreateHeadlessSurfaceEXT <- getInstanceProcAddr' handle (Ptr "vkCreateHeadlessSurfaceEXT"#)
-  vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"#)
-  vkGetPhysicalDeviceToolPropertiesEXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceToolPropertiesEXT"#)
-  pure $ InstanceCmds handle
-    (castFunPtr @_ @(Ptr Instance_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyInstance)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pPhysicalDeviceCount" ::: Ptr Word32) -> ("pPhysicalDevices" ::: Ptr (Ptr PhysicalDevice_T)) -> IO Result) vkEnumeratePhysicalDevices)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) vkGetInstanceProcAddr)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pProperties" ::: Ptr PhysicalDeviceProperties) -> IO ()) vkGetPhysicalDeviceProperties)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr QueueFamilyProperties) -> IO ()) vkGetPhysicalDeviceQueueFamilyProperties)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pMemoryProperties" ::: Ptr PhysicalDeviceMemoryProperties) -> IO ()) vkGetPhysicalDeviceMemoryProperties)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pFeatures" ::: Ptr PhysicalDeviceFeatures) -> IO ()) vkGetPhysicalDeviceFeatures)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> Format -> ("pFormatProperties" ::: Ptr FormatProperties) -> IO ()) vkGetPhysicalDeviceFormatProperties)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ("pImageFormatProperties" ::: Ptr ImageFormatProperties) -> IO Result) vkGetPhysicalDeviceImageFormatProperties)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pCreateInfo" ::: Ptr (DeviceCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDevice" ::: Ptr (Ptr Device_T)) -> IO Result) vkCreateDevice)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr LayerProperties) -> IO Result) vkEnumerateDeviceLayerProperties)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr ExtensionProperties) -> IO Result) vkEnumerateDeviceExtensionProperties)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> Format -> ImageType -> ("samples" ::: SampleCountFlagBits) -> ImageUsageFlags -> ImageTiling -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr SparseImageFormatProperties) -> IO ()) vkGetPhysicalDeviceSparseImageFormatProperties)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr AndroidSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateAndroidSurfaceKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPropertiesKHR) -> IO Result) vkGetPhysicalDeviceDisplayPropertiesKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPlanePropertiesKHR) -> IO Result) vkGetPhysicalDeviceDisplayPlanePropertiesKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("planeIndex" ::: Word32) -> ("pDisplayCount" ::: Ptr Word32) -> ("pDisplays" ::: Ptr DisplayKHR) -> IO Result) vkGetDisplayPlaneSupportedDisplaysKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> DisplayKHR -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayModePropertiesKHR) -> IO Result) vkGetDisplayModePropertiesKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> DisplayKHR -> ("pCreateInfo" ::: Ptr DisplayModeCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMode" ::: Ptr DisplayModeKHR) -> IO Result) vkCreateDisplayModeKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> DisplayModeKHR -> ("planeIndex" ::: Word32) -> ("pCapabilities" ::: Ptr DisplayPlaneCapabilitiesKHR) -> IO Result) vkGetDisplayPlaneCapabilitiesKHR)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr DisplaySurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateDisplayPlaneSurfaceKHR)
-    (castFunPtr @_ @(Ptr Instance_T -> SurfaceKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroySurfaceKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> SurfaceKHR -> ("pSupported" ::: Ptr Bool32) -> IO Result) vkGetPhysicalDeviceSurfaceSupportKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR) -> IO Result) vkGetPhysicalDeviceSurfaceCapabilitiesKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceFormatCount" ::: Ptr Word32) -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO Result) vkGetPhysicalDeviceSurfaceFormatsKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> SurfaceKHR -> ("pPresentModeCount" ::: Ptr Word32) -> ("pPresentModes" ::: Ptr PresentModeKHR) -> IO Result) vkGetPhysicalDeviceSurfacePresentModesKHR)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr ViSurfaceCreateInfoNN) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateViSurfaceNN)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr WaylandSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateWaylandSurfaceKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> Ptr Wl_display -> IO Bool32) vkGetPhysicalDeviceWaylandPresentationSupportKHR)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr Win32SurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateWin32SurfaceKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> IO Bool32) vkGetPhysicalDeviceWin32PresentationSupportKHR)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr XlibSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateXlibSurfaceKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> ("dpy" ::: Ptr Display) -> VisualID -> IO Bool32) vkGetPhysicalDeviceXlibPresentationSupportKHR)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr XcbSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateXcbSurfaceKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> Ptr Xcb_connection_t -> ("visual_id" ::: Xcb_visualid_t) -> IO Bool32) vkGetPhysicalDeviceXcbPresentationSupportKHR)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr ImagePipeSurfaceCreateInfoFUCHSIA) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateImagePipeSurfaceFUCHSIA)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr StreamDescriptorSurfaceCreateInfoGGP) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateStreamDescriptorSurfaceGGP)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr DebugReportCallbackCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pCallback" ::: Ptr DebugReportCallbackEXT) -> IO Result) vkCreateDebugReportCallbackEXT)
-    (castFunPtr @_ @(Ptr Instance_T -> DebugReportCallbackEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDebugReportCallbackEXT)
-    (castFunPtr @_ @(Ptr Instance_T -> DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> ("object" ::: Word64) -> ("location" ::: CSize) -> ("messageCode" ::: Int32) -> ("pLayerPrefix" ::: Ptr CChar) -> ("pMessage" ::: Ptr CChar) -> IO ()) vkDebugReportMessageEXT)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ("externalHandleType" ::: ExternalMemoryHandleTypeFlagsNV) -> ("pExternalImageFormatProperties" ::: Ptr ExternalImageFormatPropertiesNV) -> IO Result) vkGetPhysicalDeviceExternalImageFormatPropertiesNV)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pFeatures" ::: Ptr (PhysicalDeviceFeatures2 _)) -> IO ()) vkGetPhysicalDeviceFeatures2)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pProperties" ::: Ptr (PhysicalDeviceProperties2 _)) -> IO ()) vkGetPhysicalDeviceProperties2)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> Format -> ("pFormatProperties" ::: Ptr (FormatProperties2 _)) -> IO ()) vkGetPhysicalDeviceFormatProperties2)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pImageFormatInfo" ::: Ptr (PhysicalDeviceImageFormatInfo2 _)) -> ("pImageFormatProperties" ::: Ptr (ImageFormatProperties2 _)) -> IO Result) vkGetPhysicalDeviceImageFormatProperties2)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr (QueueFamilyProperties2 _)) -> IO ()) vkGetPhysicalDeviceQueueFamilyProperties2)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pMemoryProperties" ::: Ptr (PhysicalDeviceMemoryProperties2 _)) -> IO ()) vkGetPhysicalDeviceMemoryProperties2)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pFormatInfo" ::: Ptr PhysicalDeviceSparseImageFormatInfo2) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr SparseImageFormatProperties2) -> IO ()) vkGetPhysicalDeviceSparseImageFormatProperties2)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pExternalBufferInfo" ::: Ptr PhysicalDeviceExternalBufferInfo) -> ("pExternalBufferProperties" ::: Ptr ExternalBufferProperties) -> IO ()) vkGetPhysicalDeviceExternalBufferProperties)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pExternalSemaphoreInfo" ::: Ptr (PhysicalDeviceExternalSemaphoreInfo _)) -> ("pExternalSemaphoreProperties" ::: Ptr ExternalSemaphoreProperties) -> IO ()) vkGetPhysicalDeviceExternalSemaphoreProperties)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pExternalFenceInfo" ::: Ptr PhysicalDeviceExternalFenceInfo) -> ("pExternalFenceProperties" ::: Ptr ExternalFenceProperties) -> IO ()) vkGetPhysicalDeviceExternalFenceProperties)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> DisplayKHR -> IO Result) vkReleaseDisplayEXT)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result) vkAcquireXlibDisplayEXT)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("dpy" ::: Ptr Display) -> RROutput -> ("pDisplay" ::: Ptr DisplayKHR) -> IO Result) vkGetRandROutputDisplayEXT)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilities2EXT) -> IO Result) vkGetPhysicalDeviceSurfaceCapabilities2EXT)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pPhysicalDeviceGroupCount" ::: Ptr Word32) -> ("pPhysicalDeviceGroupProperties" ::: Ptr PhysicalDeviceGroupProperties) -> IO Result) vkEnumeratePhysicalDeviceGroups)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> SurfaceKHR -> ("pRectCount" ::: Ptr Word32) -> ("pRects" ::: Ptr Rect2D) -> IO Result) vkGetPhysicalDevicePresentRectanglesKHR)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr IOSSurfaceCreateInfoMVK) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateIOSSurfaceMVK)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr MacOSSurfaceCreateInfoMVK) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateMacOSSurfaceMVK)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr MetalSurfaceCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateMetalSurfaceEXT)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("samples" ::: SampleCountFlagBits) -> ("pMultisampleProperties" ::: Ptr MultisamplePropertiesEXT) -> IO ()) vkGetPhysicalDeviceMultisamplePropertiesEXT)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR _)) -> ("pSurfaceCapabilities" ::: Ptr (SurfaceCapabilities2KHR _)) -> IO Result) vkGetPhysicalDeviceSurfaceCapabilities2KHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR _)) -> ("pSurfaceFormatCount" ::: Ptr Word32) -> ("pSurfaceFormats" ::: Ptr SurfaceFormat2KHR) -> IO Result) vkGetPhysicalDeviceSurfaceFormats2KHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayProperties2KHR) -> IO Result) vkGetPhysicalDeviceDisplayProperties2KHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPlaneProperties2KHR) -> IO Result) vkGetPhysicalDeviceDisplayPlaneProperties2KHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> DisplayKHR -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayModeProperties2KHR) -> IO Result) vkGetDisplayModeProperties2KHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pDisplayPlaneInfo" ::: Ptr DisplayPlaneInfo2KHR) -> ("pCapabilities" ::: Ptr DisplayPlaneCapabilities2KHR) -> IO Result) vkGetDisplayPlaneCapabilities2KHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pTimeDomainCount" ::: Ptr Word32) -> ("pTimeDomains" ::: Ptr TimeDomainEXT) -> IO Result) vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT) -> IO Result) vkCreateDebugUtilsMessengerEXT)
-    (castFunPtr @_ @(Ptr Instance_T -> DebugUtilsMessengerEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDebugUtilsMessengerEXT)
-    (castFunPtr @_ @(Ptr Instance_T -> DebugUtilsMessageSeverityFlagBitsEXT -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT) -> IO ()) vkSubmitDebugUtilsMessageEXT)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr CooperativeMatrixPropertiesNV) -> IO Result) vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR _)) -> ("pPresentModeCount" ::: Ptr Word32) -> ("pPresentModes" ::: Ptr PresentModeKHR) -> IO Result) vkGetPhysicalDeviceSurfacePresentModes2EXT)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> ("pCounterCount" ::: Ptr Word32) -> ("pCounters" ::: Ptr PerformanceCounterKHR) -> ("pCounterDescriptions" ::: Ptr PerformanceCounterDescriptionKHR) -> IO Result) vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPerformanceQueryCreateInfo" ::: Ptr QueryPoolPerformanceCreateInfoKHR) -> ("pNumPasses" ::: Ptr Word32) -> IO ()) vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)
-    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr HeadlessSurfaceCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateHeadlessSurfaceEXT)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pCombinationCount" ::: Ptr Word32) -> ("pCombinations" ::: Ptr FramebufferMixedSamplesCombinationNV) -> IO Result) vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)
-    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pToolCount" ::: Ptr Word32) -> ("pToolProperties" ::: Ptr PhysicalDeviceToolPropertiesEXT) -> IO Result) vkGetPhysicalDeviceToolPropertiesEXT)
-
-data DeviceCmds = DeviceCmds
-  { deviceCmdsHandle :: Ptr Device_T
-  , pVkGetDeviceProcAddr :: FunPtr (Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction)
-  , pVkDestroyDevice :: FunPtr (Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetDeviceQueue :: FunPtr (Ptr Device_T -> ("queueFamilyIndex" ::: Word32) -> ("queueIndex" ::: Word32) -> ("pQueue" ::: Ptr (Ptr Queue_T)) -> IO ())
-  , pVkQueueSubmit :: forall a . FunPtr (Ptr Queue_T -> ("submitCount" ::: Word32) -> ("pSubmits" ::: Ptr (SubmitInfo a)) -> Fence -> IO Result)
-  , pVkQueueWaitIdle :: FunPtr (Ptr Queue_T -> IO Result)
-  , pVkDeviceWaitIdle :: FunPtr (Ptr Device_T -> IO Result)
-  , pVkAllocateMemory :: forall a . FunPtr (Ptr Device_T -> ("pAllocateInfo" ::: Ptr (MemoryAllocateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMemory" ::: Ptr DeviceMemory) -> IO Result)
-  , pVkFreeMemory :: FunPtr (Ptr Device_T -> DeviceMemory -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkMapMemory :: FunPtr (Ptr Device_T -> DeviceMemory -> ("offset" ::: DeviceSize) -> DeviceSize -> MemoryMapFlags -> ("ppData" ::: Ptr (Ptr ())) -> IO Result)
-  , pVkUnmapMemory :: FunPtr (Ptr Device_T -> DeviceMemory -> IO ())
-  , pVkFlushMappedMemoryRanges :: FunPtr (Ptr Device_T -> ("memoryRangeCount" ::: Word32) -> ("pMemoryRanges" ::: Ptr MappedMemoryRange) -> IO Result)
-  , pVkInvalidateMappedMemoryRanges :: FunPtr (Ptr Device_T -> ("memoryRangeCount" ::: Word32) -> ("pMemoryRanges" ::: Ptr MappedMemoryRange) -> IO Result)
-  , pVkGetDeviceMemoryCommitment :: FunPtr (Ptr Device_T -> DeviceMemory -> ("pCommittedMemoryInBytes" ::: Ptr DeviceSize) -> IO ())
-  , pVkGetBufferMemoryRequirements :: FunPtr (Ptr Device_T -> Buffer -> ("pMemoryRequirements" ::: Ptr MemoryRequirements) -> IO ())
-  , pVkBindBufferMemory :: FunPtr (Ptr Device_T -> Buffer -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> IO Result)
-  , pVkGetImageMemoryRequirements :: FunPtr (Ptr Device_T -> Image -> ("pMemoryRequirements" ::: Ptr MemoryRequirements) -> IO ())
-  , pVkBindImageMemory :: FunPtr (Ptr Device_T -> Image -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> IO Result)
-  , pVkGetImageSparseMemoryRequirements :: FunPtr (Ptr Device_T -> Image -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements) -> IO ())
-  , pVkQueueBindSparse :: forall a . FunPtr (Ptr Queue_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfo" ::: Ptr (BindSparseInfo a)) -> Fence -> IO Result)
-  , pVkCreateFence :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (FenceCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result)
-  , pVkDestroyFence :: FunPtr (Ptr Device_T -> Fence -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkResetFences :: FunPtr (Ptr Device_T -> ("fenceCount" ::: Word32) -> ("pFences" ::: Ptr Fence) -> IO Result)
-  , pVkGetFenceStatus :: FunPtr (Ptr Device_T -> Fence -> IO Result)
-  , pVkWaitForFences :: FunPtr (Ptr Device_T -> ("fenceCount" ::: Word32) -> ("pFences" ::: Ptr Fence) -> ("waitAll" ::: Bool32) -> ("timeout" ::: Word64) -> IO Result)
-  , pVkCreateSemaphore :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (SemaphoreCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSemaphore" ::: Ptr Semaphore) -> IO Result)
-  , pVkDestroySemaphore :: FunPtr (Ptr Device_T -> Semaphore -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCreateEvent :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr EventCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pEvent" ::: Ptr Event) -> IO Result)
-  , pVkDestroyEvent :: FunPtr (Ptr Device_T -> Event -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetEventStatus :: FunPtr (Ptr Device_T -> Event -> IO Result)
-  , pVkSetEvent :: FunPtr (Ptr Device_T -> Event -> IO Result)
-  , pVkResetEvent :: FunPtr (Ptr Device_T -> Event -> IO Result)
-  , pVkCreateQueryPool :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (QueryPoolCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pQueryPool" ::: Ptr QueryPool) -> IO Result)
-  , pVkDestroyQueryPool :: FunPtr (Ptr Device_T -> QueryPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetQueryPoolResults :: FunPtr (Ptr Device_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> IO Result)
-  , pVkResetQueryPool :: FunPtr (Ptr Device_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ())
-  , pVkCreateBuffer :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (BufferCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pBuffer" ::: Ptr Buffer) -> IO Result)
-  , pVkDestroyBuffer :: FunPtr (Ptr Device_T -> Buffer -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCreateBufferView :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr BufferViewCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pView" ::: Ptr BufferView) -> IO Result)
-  , pVkDestroyBufferView :: FunPtr (Ptr Device_T -> BufferView -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCreateImage :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (ImageCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pImage" ::: Ptr Image) -> IO Result)
-  , pVkDestroyImage :: FunPtr (Ptr Device_T -> Image -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetImageSubresourceLayout :: FunPtr (Ptr Device_T -> Image -> ("pSubresource" ::: Ptr ImageSubresource) -> ("pLayout" ::: Ptr SubresourceLayout) -> IO ())
-  , pVkCreateImageView :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (ImageViewCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pView" ::: Ptr ImageView) -> IO Result)
-  , pVkDestroyImageView :: FunPtr (Ptr Device_T -> ImageView -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCreateShaderModule :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (ShaderModuleCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pShaderModule" ::: Ptr ShaderModule) -> IO Result)
-  , pVkDestroyShaderModule :: FunPtr (Ptr Device_T -> ShaderModule -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCreatePipelineCache :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr PipelineCacheCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelineCache" ::: Ptr PipelineCache) -> IO Result)
-  , pVkDestroyPipelineCache :: FunPtr (Ptr Device_T -> PipelineCache -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetPipelineCacheData :: FunPtr (Ptr Device_T -> PipelineCache -> ("pDataSize" ::: Ptr CSize) -> ("pData" ::: Ptr ()) -> IO Result)
-  , pVkMergePipelineCaches :: FunPtr (Ptr Device_T -> ("dstCache" ::: PipelineCache) -> ("srcCacheCount" ::: Word32) -> ("pSrcCaches" ::: Ptr PipelineCache) -> IO Result)
-  , pVkCreateGraphicsPipelines :: forall a . FunPtr (Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (GraphicsPipelineCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result)
-  , pVkCreateComputePipelines :: forall a . FunPtr (Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (ComputePipelineCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result)
-  , pVkDestroyPipeline :: FunPtr (Ptr Device_T -> Pipeline -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCreatePipelineLayout :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr PipelineLayoutCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelineLayout" ::: Ptr PipelineLayout) -> IO Result)
-  , pVkDestroyPipelineLayout :: FunPtr (Ptr Device_T -> PipelineLayout -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCreateSampler :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (SamplerCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSampler" ::: Ptr Sampler) -> IO Result)
-  , pVkDestroySampler :: FunPtr (Ptr Device_T -> Sampler -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCreateDescriptorSetLayout :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorSetLayoutCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSetLayout" ::: Ptr DescriptorSetLayout) -> IO Result)
-  , pVkDestroyDescriptorSetLayout :: FunPtr (Ptr Device_T -> DescriptorSetLayout -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCreateDescriptorPool :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorPoolCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDescriptorPool" ::: Ptr DescriptorPool) -> IO Result)
-  , pVkDestroyDescriptorPool :: FunPtr (Ptr Device_T -> DescriptorPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkResetDescriptorPool :: FunPtr (Ptr Device_T -> DescriptorPool -> DescriptorPoolResetFlags -> IO Result)
-  , pVkAllocateDescriptorSets :: forall a . FunPtr (Ptr Device_T -> ("pAllocateInfo" ::: Ptr (DescriptorSetAllocateInfo a)) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> IO Result)
-  , pVkFreeDescriptorSets :: FunPtr (Ptr Device_T -> DescriptorPool -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> IO Result)
-  , pVkUpdateDescriptorSets :: forall a . FunPtr (Ptr Device_T -> ("descriptorWriteCount" ::: Word32) -> ("pDescriptorWrites" ::: Ptr (WriteDescriptorSet a)) -> ("descriptorCopyCount" ::: Word32) -> ("pDescriptorCopies" ::: Ptr CopyDescriptorSet) -> IO ())
-  , pVkCreateFramebuffer :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (FramebufferCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFramebuffer" ::: Ptr Framebuffer) -> IO Result)
-  , pVkDestroyFramebuffer :: FunPtr (Ptr Device_T -> Framebuffer -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCreateRenderPass :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (RenderPassCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pRenderPass" ::: Ptr RenderPass) -> IO Result)
-  , pVkDestroyRenderPass :: FunPtr (Ptr Device_T -> RenderPass -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetRenderAreaGranularity :: FunPtr (Ptr Device_T -> RenderPass -> ("pGranularity" ::: Ptr Extent2D) -> IO ())
-  , pVkCreateCommandPool :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr CommandPoolCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pCommandPool" ::: Ptr CommandPool) -> IO Result)
-  , pVkDestroyCommandPool :: FunPtr (Ptr Device_T -> CommandPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkResetCommandPool :: FunPtr (Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result)
-  , pVkAllocateCommandBuffers :: FunPtr (Ptr Device_T -> ("pAllocateInfo" ::: Ptr CommandBufferAllocateInfo) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO Result)
-  , pVkFreeCommandBuffers :: FunPtr (Ptr Device_T -> CommandPool -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO ())
-  , pVkBeginCommandBuffer :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pBeginInfo" ::: Ptr (CommandBufferBeginInfo a)) -> IO Result)
-  , pVkEndCommandBuffer :: FunPtr (Ptr CommandBuffer_T -> IO Result)
-  , pVkResetCommandBuffer :: FunPtr (Ptr CommandBuffer_T -> CommandBufferResetFlags -> IO Result)
-  , pVkCmdBindPipeline :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> IO ())
-  , pVkCmdSetViewport :: FunPtr (Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewports" ::: Ptr Viewport) -> IO ())
-  , pVkCmdSetScissor :: FunPtr (Ptr CommandBuffer_T -> ("firstScissor" ::: Word32) -> ("scissorCount" ::: Word32) -> ("pScissors" ::: Ptr Rect2D) -> IO ())
-  , pVkCmdSetLineWidth :: FunPtr (Ptr CommandBuffer_T -> ("lineWidth" ::: CFloat) -> IO ())
-  , pVkCmdSetDepthBias :: FunPtr (Ptr CommandBuffer_T -> ("depthBiasConstantFactor" ::: CFloat) -> ("depthBiasClamp" ::: CFloat) -> ("depthBiasSlopeFactor" ::: CFloat) -> IO ())
-  , pVkCmdSetBlendConstants :: FunPtr (Ptr CommandBuffer_T -> ("blendConstants" ::: Ptr (FixedArray 4 CFloat)) -> IO ())
-  , pVkCmdSetDepthBounds :: FunPtr (Ptr CommandBuffer_T -> ("minDepthBounds" ::: CFloat) -> ("maxDepthBounds" ::: CFloat) -> IO ())
-  , pVkCmdSetStencilCompareMask :: FunPtr (Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("compareMask" ::: Word32) -> IO ())
-  , pVkCmdSetStencilWriteMask :: FunPtr (Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("writeMask" ::: Word32) -> IO ())
-  , pVkCmdSetStencilReference :: FunPtr (Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("reference" ::: Word32) -> IO ())
-  , pVkCmdBindDescriptorSets :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> ("firstSet" ::: Word32) -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> ("dynamicOffsetCount" ::: Word32) -> ("pDynamicOffsets" ::: Ptr Word32) -> IO ())
-  , pVkCmdBindIndexBuffer :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> IndexType -> IO ())
-  , pVkCmdBindVertexBuffers :: FunPtr (Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> IO ())
-  , pVkCmdDraw :: FunPtr (Ptr CommandBuffer_T -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ())
-  , pVkCmdDrawIndexed :: FunPtr (Ptr CommandBuffer_T -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ())
-  , pVkCmdDrawIndirect :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
-  , pVkCmdDrawIndexedIndirect :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
-  , pVkCmdDispatch :: FunPtr (Ptr CommandBuffer_T -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ())
-  , pVkCmdDispatchIndirect :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> IO ())
-  , pVkCmdCopyBuffer :: FunPtr (Ptr CommandBuffer_T -> ("srcBuffer" ::: Buffer) -> ("dstBuffer" ::: Buffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferCopy) -> IO ())
-  , pVkCmdCopyImage :: FunPtr (Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageCopy) -> IO ())
-  , pVkCmdBlitImage :: FunPtr (Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageBlit) -> Filter -> IO ())
-  , pVkCmdCopyBufferToImage :: FunPtr (Ptr CommandBuffer_T -> ("srcBuffer" ::: Buffer) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferImageCopy) -> IO ())
-  , pVkCmdCopyImageToBuffer :: FunPtr (Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstBuffer" ::: Buffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferImageCopy) -> IO ())
-  , pVkCmdUpdateBuffer :: FunPtr (Ptr CommandBuffer_T -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("dataSize" ::: DeviceSize) -> ("pData" ::: Ptr ()) -> IO ())
-  , pVkCmdFillBuffer :: FunPtr (Ptr CommandBuffer_T -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> DeviceSize -> ("data" ::: Word32) -> IO ())
-  , pVkCmdClearColorImage :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> ("pColor" ::: Ptr ClearColorValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr ImageSubresourceRange) -> IO ())
-  , pVkCmdClearDepthStencilImage :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> ("pDepthStencil" ::: Ptr ClearDepthStencilValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr ImageSubresourceRange) -> IO ())
-  , pVkCmdClearAttachments :: FunPtr (Ptr CommandBuffer_T -> ("attachmentCount" ::: Word32) -> ("pAttachments" ::: Ptr ClearAttachment) -> ("rectCount" ::: Word32) -> ("pRects" ::: Ptr ClearRect) -> IO ())
-  , pVkCmdResolveImage :: FunPtr (Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageResolve) -> IO ())
-  , pVkCmdSetEvent :: FunPtr (Ptr CommandBuffer_T -> Event -> ("stageMask" ::: PipelineStageFlags) -> IO ())
-  , pVkCmdResetEvent :: FunPtr (Ptr CommandBuffer_T -> Event -> ("stageMask" ::: PipelineStageFlags) -> IO ())
-  , pVkCmdWaitEvents :: forall a . FunPtr (Ptr CommandBuffer_T -> ("eventCount" ::: Word32) -> ("pEvents" ::: Ptr Event) -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr MemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr BufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr (ImageMemoryBarrier a)) -> IO ())
-  , pVkCmdPipelineBarrier :: forall a . FunPtr (Ptr CommandBuffer_T -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> DependencyFlags -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr MemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr BufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr (ImageMemoryBarrier a)) -> IO ())
-  , pVkCmdBeginQuery :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> IO ())
-  , pVkCmdEndQuery :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> IO ())
-  , pVkCmdBeginConditionalRenderingEXT :: FunPtr (Ptr CommandBuffer_T -> ("pConditionalRenderingBegin" ::: Ptr ConditionalRenderingBeginInfoEXT) -> IO ())
-  , pVkCmdEndConditionalRenderingEXT :: FunPtr (Ptr CommandBuffer_T -> IO ())
-  , pVkCmdResetQueryPool :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ())
-  , pVkCmdWriteTimestamp :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> ("query" ::: Word32) -> IO ())
-  , pVkCmdCopyQueryPoolResults :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> IO ())
-  , pVkCmdPushConstants :: FunPtr (Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("pValues" ::: Ptr ()) -> IO ())
-  , pVkCmdBeginRenderPass :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pRenderPassBegin" ::: Ptr (RenderPassBeginInfo a)) -> SubpassContents -> IO ())
-  , pVkCmdNextSubpass :: FunPtr (Ptr CommandBuffer_T -> SubpassContents -> IO ())
-  , pVkCmdEndRenderPass :: FunPtr (Ptr CommandBuffer_T -> IO ())
-  , pVkCmdExecuteCommands :: FunPtr (Ptr CommandBuffer_T -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO ())
-  , pVkCreateSharedSwapchainsKHR :: forall a . FunPtr (Ptr Device_T -> ("swapchainCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (SwapchainCreateInfoKHR a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSwapchains" ::: Ptr SwapchainKHR) -> IO Result)
-  , pVkCreateSwapchainKHR :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (SwapchainCreateInfoKHR a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSwapchain" ::: Ptr SwapchainKHR) -> IO Result)
-  , pVkDestroySwapchainKHR :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetSwapchainImagesKHR :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("pSwapchainImageCount" ::: Ptr Word32) -> ("pSwapchainImages" ::: Ptr Image) -> IO Result)
-  , pVkAcquireNextImageKHR :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("timeout" ::: Word64) -> Semaphore -> Fence -> ("pImageIndex" ::: Ptr Word32) -> IO Result)
-  , pVkQueuePresentKHR :: forall a . FunPtr (Ptr Queue_T -> ("pPresentInfo" ::: Ptr (PresentInfoKHR a)) -> IO Result)
-  , pVkDebugMarkerSetObjectNameEXT :: FunPtr (Ptr Device_T -> ("pNameInfo" ::: Ptr DebugMarkerObjectNameInfoEXT) -> IO Result)
-  , pVkDebugMarkerSetObjectTagEXT :: FunPtr (Ptr Device_T -> ("pTagInfo" ::: Ptr DebugMarkerObjectTagInfoEXT) -> IO Result)
-  , pVkCmdDebugMarkerBeginEXT :: FunPtr (Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr DebugMarkerMarkerInfoEXT) -> IO ())
-  , pVkCmdDebugMarkerEndEXT :: FunPtr (Ptr CommandBuffer_T -> IO ())
-  , pVkCmdDebugMarkerInsertEXT :: FunPtr (Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr DebugMarkerMarkerInfoEXT) -> IO ())
-  , pVkGetMemoryWin32HandleNV :: FunPtr (Ptr Device_T -> DeviceMemory -> ExternalMemoryHandleTypeFlagsNV -> ("pHandle" ::: Ptr HANDLE) -> IO Result)
-  , pVkCmdExecuteGeneratedCommandsNV :: FunPtr (Ptr CommandBuffer_T -> ("isPreprocessed" ::: Bool32) -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV) -> IO ())
-  , pVkCmdPreprocessGeneratedCommandsNV :: FunPtr (Ptr CommandBuffer_T -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV) -> IO ())
-  , pVkCmdBindPipelineShaderGroupNV :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> ("groupIndex" ::: Word32) -> IO ())
-  , pVkGetGeneratedCommandsMemoryRequirementsNV :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 a)) -> IO ())
-  , pVkCreateIndirectCommandsLayoutNV :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV) -> IO Result)
-  , pVkDestroyIndirectCommandsLayoutNV :: FunPtr (Ptr Device_T -> IndirectCommandsLayoutNV -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkCmdPushDescriptorSetKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> ("set" ::: Word32) -> ("descriptorWriteCount" ::: Word32) -> ("pDescriptorWrites" ::: Ptr (WriteDescriptorSet a)) -> IO ())
-  , pVkTrimCommandPool :: FunPtr (Ptr Device_T -> CommandPool -> CommandPoolTrimFlags -> IO ())
-  , pVkGetMemoryWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr MemoryGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result)
-  , pVkGetMemoryWin32HandlePropertiesKHR :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> HANDLE -> ("pMemoryWin32HandleProperties" ::: Ptr MemoryWin32HandlePropertiesKHR) -> IO Result)
-  , pVkGetMemoryFdKHR :: FunPtr (Ptr Device_T -> ("pGetFdInfo" ::: Ptr MemoryGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result)
-  , pVkGetMemoryFdPropertiesKHR :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("fd" ::: CInt) -> ("pMemoryFdProperties" ::: Ptr MemoryFdPropertiesKHR) -> IO Result)
-  , pVkGetSemaphoreWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr SemaphoreGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result)
-  , pVkImportSemaphoreWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pImportSemaphoreWin32HandleInfo" ::: Ptr ImportSemaphoreWin32HandleInfoKHR) -> IO Result)
-  , pVkGetSemaphoreFdKHR :: FunPtr (Ptr Device_T -> ("pGetFdInfo" ::: Ptr SemaphoreGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result)
-  , pVkImportSemaphoreFdKHR :: FunPtr (Ptr Device_T -> ("pImportSemaphoreFdInfo" ::: Ptr ImportSemaphoreFdInfoKHR) -> IO Result)
-  , pVkGetFenceWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr FenceGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result)
-  , pVkImportFenceWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pImportFenceWin32HandleInfo" ::: Ptr ImportFenceWin32HandleInfoKHR) -> IO Result)
-  , pVkGetFenceFdKHR :: FunPtr (Ptr Device_T -> ("pGetFdInfo" ::: Ptr FenceGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result)
-  , pVkImportFenceFdKHR :: FunPtr (Ptr Device_T -> ("pImportFenceFdInfo" ::: Ptr ImportFenceFdInfoKHR) -> IO Result)
-  , pVkDisplayPowerControlEXT :: FunPtr (Ptr Device_T -> DisplayKHR -> ("pDisplayPowerInfo" ::: Ptr DisplayPowerInfoEXT) -> IO Result)
-  , pVkRegisterDeviceEventEXT :: FunPtr (Ptr Device_T -> ("pDeviceEventInfo" ::: Ptr DeviceEventInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result)
-  , pVkRegisterDisplayEventEXT :: FunPtr (Ptr Device_T -> DisplayKHR -> ("pDisplayEventInfo" ::: Ptr DisplayEventInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result)
-  , pVkGetSwapchainCounterEXT :: FunPtr (Ptr Device_T -> SwapchainKHR -> SurfaceCounterFlagBitsEXT -> ("pCounterValue" ::: Ptr Word64) -> IO Result)
-  , pVkGetDeviceGroupPeerMemoryFeatures :: FunPtr (Ptr Device_T -> ("heapIndex" ::: Word32) -> ("localDeviceIndex" ::: Word32) -> ("remoteDeviceIndex" ::: Word32) -> ("pPeerMemoryFeatures" ::: Ptr PeerMemoryFeatureFlags) -> IO ())
-  , pVkBindBufferMemory2 :: forall a . FunPtr (Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr (BindBufferMemoryInfo a)) -> IO Result)
-  , pVkBindImageMemory2 :: forall a . FunPtr (Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr (BindImageMemoryInfo a)) -> IO Result)
-  , pVkCmdSetDeviceMask :: FunPtr (Ptr CommandBuffer_T -> ("deviceMask" ::: Word32) -> IO ())
-  , pVkGetDeviceGroupPresentCapabilitiesKHR :: FunPtr (Ptr Device_T -> ("pDeviceGroupPresentCapabilities" ::: Ptr DeviceGroupPresentCapabilitiesKHR) -> IO Result)
-  , pVkGetDeviceGroupSurfacePresentModesKHR :: FunPtr (Ptr Device_T -> SurfaceKHR -> ("pModes" ::: Ptr DeviceGroupPresentModeFlagsKHR) -> IO Result)
-  , pVkAcquireNextImage2KHR :: FunPtr (Ptr Device_T -> ("pAcquireInfo" ::: Ptr AcquireNextImageInfoKHR) -> ("pImageIndex" ::: Ptr Word32) -> IO Result)
-  , pVkCmdDispatchBase :: FunPtr (Ptr CommandBuffer_T -> ("baseGroupX" ::: Word32) -> ("baseGroupY" ::: Word32) -> ("baseGroupZ" ::: Word32) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ())
-  , pVkCreateDescriptorUpdateTemplate :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate) -> IO Result)
-  , pVkDestroyDescriptorUpdateTemplate :: FunPtr (Ptr Device_T -> DescriptorUpdateTemplate -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkUpdateDescriptorSetWithTemplate :: FunPtr (Ptr Device_T -> DescriptorSet -> DescriptorUpdateTemplate -> ("pData" ::: Ptr ()) -> IO ())
-  , pVkCmdPushDescriptorSetWithTemplateKHR :: FunPtr (Ptr CommandBuffer_T -> DescriptorUpdateTemplate -> PipelineLayout -> ("set" ::: Word32) -> ("pData" ::: Ptr ()) -> IO ())
-  , pVkSetHdrMetadataEXT :: FunPtr (Ptr Device_T -> ("swapchainCount" ::: Word32) -> ("pSwapchains" ::: Ptr SwapchainKHR) -> ("pMetadata" ::: Ptr HdrMetadataEXT) -> IO ())
-  , pVkGetSwapchainStatusKHR :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result)
-  , pVkGetRefreshCycleDurationGOOGLE :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE) -> IO Result)
-  , pVkGetPastPresentationTimingGOOGLE :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("pPresentationTimingCount" ::: Ptr Word32) -> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE) -> IO Result)
-  , pVkCmdSetViewportWScalingNV :: FunPtr (Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewportWScalings" ::: Ptr ViewportWScalingNV) -> IO ())
-  , pVkCmdSetDiscardRectangleEXT :: FunPtr (Ptr CommandBuffer_T -> ("firstDiscardRectangle" ::: Word32) -> ("discardRectangleCount" ::: Word32) -> ("pDiscardRectangles" ::: Ptr Rect2D) -> IO ())
-  , pVkCmdSetSampleLocationsEXT :: FunPtr (Ptr CommandBuffer_T -> ("pSampleLocationsInfo" ::: Ptr SampleLocationsInfoEXT) -> IO ())
-  , pVkGetBufferMemoryRequirements2 :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr BufferMemoryRequirementsInfo2) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 a)) -> IO ())
-  , pVkGetImageMemoryRequirements2 :: forall a b . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr (ImageMemoryRequirementsInfo2 a)) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 b)) -> IO ())
-  , pVkGetImageSparseMemoryRequirements2 :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr ImageSparseMemoryRequirementsInfo2) -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements2) -> IO ())
-  , pVkCreateSamplerYcbcrConversion :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (SamplerYcbcrConversionCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pYcbcrConversion" ::: Ptr SamplerYcbcrConversion) -> IO Result)
-  , pVkDestroySamplerYcbcrConversion :: FunPtr (Ptr Device_T -> SamplerYcbcrConversion -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetDeviceQueue2 :: FunPtr (Ptr Device_T -> ("pQueueInfo" ::: Ptr DeviceQueueInfo2) -> ("pQueue" ::: Ptr (Ptr Queue_T)) -> IO ())
-  , pVkCreateValidationCacheEXT :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr ValidationCacheCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pValidationCache" ::: Ptr ValidationCacheEXT) -> IO Result)
-  , pVkDestroyValidationCacheEXT :: FunPtr (Ptr Device_T -> ValidationCacheEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetValidationCacheDataEXT :: FunPtr (Ptr Device_T -> ValidationCacheEXT -> ("pDataSize" ::: Ptr CSize) -> ("pData" ::: Ptr ()) -> IO Result)
-  , pVkMergeValidationCachesEXT :: FunPtr (Ptr Device_T -> ("dstCache" ::: ValidationCacheEXT) -> ("srcCacheCount" ::: Word32) -> ("pSrcCaches" ::: Ptr ValidationCacheEXT) -> IO Result)
-  , pVkGetDescriptorSetLayoutSupport :: forall a b . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorSetLayoutCreateInfo a)) -> ("pSupport" ::: Ptr (DescriptorSetLayoutSupport b)) -> IO ())
-  , pVkGetShaderInfoAMD :: FunPtr (Ptr Device_T -> Pipeline -> ShaderStageFlagBits -> ShaderInfoTypeAMD -> ("pInfoSize" ::: Ptr CSize) -> ("pInfo" ::: Ptr ()) -> IO Result)
-  , pVkSetLocalDimmingAMD :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("localDimmingEnable" ::: Bool32) -> IO ())
-  , pVkGetCalibratedTimestampsEXT :: FunPtr (Ptr Device_T -> ("timestampCount" ::: Word32) -> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT) -> ("pTimestamps" ::: Ptr Word64) -> ("pMaxDeviation" ::: Ptr Word64) -> IO Result)
-  , pVkSetDebugUtilsObjectNameEXT :: FunPtr (Ptr Device_T -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result)
-  , pVkSetDebugUtilsObjectTagEXT :: FunPtr (Ptr Device_T -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result)
-  , pVkQueueBeginDebugUtilsLabelEXT :: FunPtr (Ptr Queue_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ())
-  , pVkQueueEndDebugUtilsLabelEXT :: FunPtr (Ptr Queue_T -> IO ())
-  , pVkQueueInsertDebugUtilsLabelEXT :: FunPtr (Ptr Queue_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ())
-  , pVkCmdBeginDebugUtilsLabelEXT :: FunPtr (Ptr CommandBuffer_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ())
-  , pVkCmdEndDebugUtilsLabelEXT :: FunPtr (Ptr CommandBuffer_T -> IO ())
-  , pVkCmdInsertDebugUtilsLabelEXT :: FunPtr (Ptr CommandBuffer_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ())
-  , pVkGetMemoryHostPointerPropertiesEXT :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("pHostPointer" ::: Ptr ()) -> ("pMemoryHostPointerProperties" ::: Ptr MemoryHostPointerPropertiesEXT) -> IO Result)
-  , pVkCmdWriteBufferMarkerAMD :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("marker" ::: Word32) -> IO ())
-  , pVkCreateRenderPass2 :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (RenderPassCreateInfo2 a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pRenderPass" ::: Ptr RenderPass) -> IO Result)
-  , pVkCmdBeginRenderPass2 :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pRenderPassBegin" ::: Ptr (RenderPassBeginInfo a)) -> ("pSubpassBeginInfo" ::: Ptr SubpassBeginInfo) -> IO ())
-  , pVkCmdNextSubpass2 :: FunPtr (Ptr CommandBuffer_T -> ("pSubpassBeginInfo" ::: Ptr SubpassBeginInfo) -> ("pSubpassEndInfo" ::: Ptr SubpassEndInfo) -> IO ())
-  , pVkCmdEndRenderPass2 :: FunPtr (Ptr CommandBuffer_T -> ("pSubpassEndInfo" ::: Ptr SubpassEndInfo) -> IO ())
-  , pVkGetSemaphoreCounterValue :: FunPtr (Ptr Device_T -> Semaphore -> ("pValue" ::: Ptr Word64) -> IO Result)
-  , pVkWaitSemaphores :: FunPtr (Ptr Device_T -> ("pWaitInfo" ::: Ptr SemaphoreWaitInfo) -> ("timeout" ::: Word64) -> IO Result)
-  , pVkSignalSemaphore :: FunPtr (Ptr Device_T -> ("pSignalInfo" ::: Ptr SemaphoreSignalInfo) -> IO Result)
-  , pVkGetAndroidHardwareBufferPropertiesANDROID :: forall a . FunPtr (Ptr Device_T -> Ptr AHardwareBuffer -> ("pProperties" ::: Ptr (AndroidHardwareBufferPropertiesANDROID a)) -> IO Result)
-  , pVkGetMemoryAndroidHardwareBufferANDROID :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr MemoryGetAndroidHardwareBufferInfoANDROID) -> ("pBuffer" ::: Ptr (Ptr AHardwareBuffer)) -> IO Result)
-  , pVkCmdDrawIndirectCount :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
-  , pVkCmdDrawIndexedIndirectCount :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
-  , pVkCmdSetCheckpointNV :: FunPtr (Ptr CommandBuffer_T -> ("pCheckpointMarker" ::: Ptr ()) -> IO ())
-  , pVkGetQueueCheckpointDataNV :: FunPtr (Ptr Queue_T -> ("pCheckpointDataCount" ::: Ptr Word32) -> ("pCheckpointData" ::: Ptr CheckpointDataNV) -> IO ())
-  , pVkCmdBindTransformFeedbackBuffersEXT :: FunPtr (Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> ("pSizes" ::: Ptr DeviceSize) -> IO ())
-  , pVkCmdBeginTransformFeedbackEXT :: FunPtr (Ptr CommandBuffer_T -> ("firstCounterBuffer" ::: Word32) -> ("counterBufferCount" ::: Word32) -> ("pCounterBuffers" ::: Ptr Buffer) -> ("pCounterBufferOffsets" ::: Ptr DeviceSize) -> IO ())
-  , pVkCmdEndTransformFeedbackEXT :: FunPtr (Ptr CommandBuffer_T -> ("firstCounterBuffer" ::: Word32) -> ("counterBufferCount" ::: Word32) -> ("pCounterBuffers" ::: Ptr Buffer) -> ("pCounterBufferOffsets" ::: Ptr DeviceSize) -> IO ())
-  , pVkCmdBeginQueryIndexedEXT :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> ("index" ::: Word32) -> IO ())
-  , pVkCmdEndQueryIndexedEXT :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> ("index" ::: Word32) -> IO ())
-  , pVkCmdDrawIndirectByteCountEXT :: FunPtr (Ptr CommandBuffer_T -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("counterBuffer" ::: Buffer) -> ("counterBufferOffset" ::: DeviceSize) -> ("counterOffset" ::: Word32) -> ("vertexStride" ::: Word32) -> IO ())
-  , pVkCmdSetExclusiveScissorNV :: FunPtr (Ptr CommandBuffer_T -> ("firstExclusiveScissor" ::: Word32) -> ("exclusiveScissorCount" ::: Word32) -> ("pExclusiveScissors" ::: Ptr Rect2D) -> IO ())
-  , pVkCmdBindShadingRateImageNV :: FunPtr (Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ())
-  , pVkCmdSetViewportShadingRatePaletteNV :: FunPtr (Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pShadingRatePalettes" ::: Ptr ShadingRatePaletteNV) -> IO ())
-  , pVkCmdSetCoarseSampleOrderNV :: FunPtr (Ptr CommandBuffer_T -> CoarseSampleOrderTypeNV -> ("customSampleOrderCount" ::: Word32) -> ("pCustomSampleOrders" ::: Ptr CoarseSampleOrderCustomNV) -> IO ())
-  , pVkCmdDrawMeshTasksNV :: FunPtr (Ptr CommandBuffer_T -> ("taskCount" ::: Word32) -> ("firstTask" ::: Word32) -> IO ())
-  , pVkCmdDrawMeshTasksIndirectNV :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
-  , pVkCmdDrawMeshTasksIndirectCountNV :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
-  , pVkCompileDeferredNV :: FunPtr (Ptr Device_T -> Pipeline -> ("shader" ::: Word32) -> IO Result)
-  , pVkCreateAccelerationStructureNV :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoNV) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureNV) -> IO Result)
-  , pVkDestroyAccelerationStructureKHR :: FunPtr (Ptr Device_T -> AccelerationStructureKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetAccelerationStructureMemoryRequirementsKHR :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureMemoryRequirementsInfoKHR) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 a)) -> IO ())
-  , pVkGetAccelerationStructureMemoryRequirementsNV :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureMemoryRequirementsInfoNV) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2KHR a)) -> IO ())
-  , pVkBindAccelerationStructureMemoryKHR :: FunPtr (Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr BindAccelerationStructureMemoryInfoKHR) -> IO Result)
-  , pVkCmdCopyAccelerationStructureNV :: FunPtr (Ptr CommandBuffer_T -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> CopyAccelerationStructureModeKHR -> IO ())
-  , pVkCmdCopyAccelerationStructureKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureInfoKHR a)) -> IO ())
-  , pVkCopyAccelerationStructureKHR :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureInfoKHR a)) -> IO Result)
-  , pVkCmdCopyAccelerationStructureToMemoryKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureToMemoryInfoKHR a)) -> IO ())
-  , pVkCopyAccelerationStructureToMemoryKHR :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureToMemoryInfoKHR a)) -> IO Result)
-  , pVkCmdCopyMemoryToAccelerationStructureKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyMemoryToAccelerationStructureInfoKHR a)) -> IO ())
-  , pVkCopyMemoryToAccelerationStructureKHR :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr (CopyMemoryToAccelerationStructureInfoKHR a)) -> IO Result)
-  , pVkCmdWriteAccelerationStructuresPropertiesKHR :: FunPtr (Ptr CommandBuffer_T -> ("accelerationStructureCount" ::: Word32) -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR) -> QueryType -> QueryPool -> ("firstQuery" ::: Word32) -> IO ())
-  , pVkCmdBuildAccelerationStructureNV :: FunPtr (Ptr CommandBuffer_T -> ("pInfo" ::: Ptr AccelerationStructureInfoNV) -> ("instanceData" ::: Buffer) -> ("instanceOffset" ::: DeviceSize) -> ("update" ::: Bool32) -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> ("scratch" ::: Buffer) -> ("scratchOffset" ::: DeviceSize) -> IO ())
-  , pVkWriteAccelerationStructuresPropertiesKHR :: FunPtr (Ptr Device_T -> ("accelerationStructureCount" ::: Word32) -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR) -> QueryType -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> ("stride" ::: CSize) -> IO Result)
-  , pVkCmdTraceRaysKHR :: FunPtr (Ptr CommandBuffer_T -> ("pRaygenShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pMissShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pHitShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pCallableShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> IO ())
-  , pVkCmdTraceRaysNV :: FunPtr (Ptr CommandBuffer_T -> ("raygenShaderBindingTableBuffer" ::: Buffer) -> ("raygenShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingTableBuffer" ::: Buffer) -> ("missShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingStride" ::: DeviceSize) -> ("hitShaderBindingTableBuffer" ::: Buffer) -> ("hitShaderBindingOffset" ::: DeviceSize) -> ("hitShaderBindingStride" ::: DeviceSize) -> ("callableShaderBindingTableBuffer" ::: Buffer) -> ("callableShaderBindingOffset" ::: DeviceSize) -> ("callableShaderBindingStride" ::: DeviceSize) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> IO ())
-  , pVkGetRayTracingShaderGroupHandlesKHR :: FunPtr (Ptr Device_T -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result)
-  , pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR :: FunPtr (Ptr Device_T -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result)
-  , pVkGetAccelerationStructureHandleNV :: FunPtr (Ptr Device_T -> AccelerationStructureKHR -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result)
-  , pVkCreateRayTracingPipelinesNV :: forall a . FunPtr (Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (RayTracingPipelineCreateInfoNV a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result)
-  , pVkCreateRayTracingPipelinesKHR :: forall a . FunPtr (Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (RayTracingPipelineCreateInfoKHR a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result)
-  , pVkCmdTraceRaysIndirectKHR :: FunPtr (Ptr CommandBuffer_T -> ("pRaygenShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pMissShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pHitShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pCallableShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> Buffer -> ("offset" ::: DeviceSize) -> IO ())
-  , pVkGetDeviceAccelerationStructureCompatibilityKHR :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result)
-  , pVkGetImageViewHandleNVX :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr ImageViewHandleInfoNVX) -> IO Word32)
-  , pVkGetImageViewAddressNVX :: FunPtr (Ptr Device_T -> ImageView -> ("pProperties" ::: Ptr ImageViewAddressPropertiesNVX) -> IO Result)
-  , pVkGetDeviceGroupSurfacePresentModes2EXT :: forall a . FunPtr (Ptr Device_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR a)) -> ("pModes" ::: Ptr DeviceGroupPresentModeFlagsKHR) -> IO Result)
-  , pVkAcquireFullScreenExclusiveModeEXT :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result)
-  , pVkReleaseFullScreenExclusiveModeEXT :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result)
-  , pVkAcquireProfilingLockKHR :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr AcquireProfilingLockInfoKHR) -> IO Result)
-  , pVkReleaseProfilingLockKHR :: FunPtr (Ptr Device_T -> IO ())
-  , pVkGetImageDrmFormatModifierPropertiesEXT :: FunPtr (Ptr Device_T -> Image -> ("pProperties" ::: Ptr ImageDrmFormatModifierPropertiesEXT) -> IO Result)
-  , pVkGetBufferOpaqueCaptureAddress :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr BufferDeviceAddressInfo) -> IO Word64)
-  , pVkGetBufferDeviceAddress :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr BufferDeviceAddressInfo) -> IO DeviceAddress)
-  , pVkInitializePerformanceApiINTEL :: FunPtr (Ptr Device_T -> ("pInitializeInfo" ::: Ptr InitializePerformanceApiInfoINTEL) -> IO Result)
-  , pVkUninitializePerformanceApiINTEL :: FunPtr (Ptr Device_T -> IO ())
-  , pVkCmdSetPerformanceMarkerINTEL :: FunPtr (Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr PerformanceMarkerInfoINTEL) -> IO Result)
-  , pVkCmdSetPerformanceStreamMarkerINTEL :: FunPtr (Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr PerformanceStreamMarkerInfoINTEL) -> IO Result)
-  , pVkCmdSetPerformanceOverrideINTEL :: FunPtr (Ptr CommandBuffer_T -> ("pOverrideInfo" ::: Ptr PerformanceOverrideInfoINTEL) -> IO Result)
-  , pVkAcquirePerformanceConfigurationINTEL :: FunPtr (Ptr Device_T -> ("pAcquireInfo" ::: Ptr PerformanceConfigurationAcquireInfoINTEL) -> ("pConfiguration" ::: Ptr PerformanceConfigurationINTEL) -> IO Result)
-  , pVkReleasePerformanceConfigurationINTEL :: FunPtr (Ptr Device_T -> PerformanceConfigurationINTEL -> IO Result)
-  , pVkQueueSetPerformanceConfigurationINTEL :: FunPtr (Ptr Queue_T -> PerformanceConfigurationINTEL -> IO Result)
-  , pVkGetPerformanceParameterINTEL :: FunPtr (Ptr Device_T -> PerformanceParameterTypeINTEL -> ("pValue" ::: Ptr PerformanceValueINTEL) -> IO Result)
-  , pVkGetDeviceMemoryOpaqueCaptureAddress :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr DeviceMemoryOpaqueCaptureAddressInfo) -> IO Word64)
-  , pVkGetPipelineExecutablePropertiesKHR :: FunPtr (Ptr Device_T -> ("pPipelineInfo" ::: Ptr PipelineInfoKHR) -> ("pExecutableCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr PipelineExecutablePropertiesKHR) -> IO Result)
-  , pVkGetPipelineExecutableStatisticsKHR :: FunPtr (Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pStatisticCount" ::: Ptr Word32) -> ("pStatistics" ::: Ptr PipelineExecutableStatisticKHR) -> IO Result)
-  , pVkGetPipelineExecutableInternalRepresentationsKHR :: FunPtr (Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pInternalRepresentationCount" ::: Ptr Word32) -> ("pInternalRepresentations" ::: Ptr PipelineExecutableInternalRepresentationKHR) -> IO Result)
-  , pVkCmdSetLineStippleEXT :: FunPtr (Ptr CommandBuffer_T -> ("lineStippleFactor" ::: Word32) -> ("lineStipplePattern" ::: Word16) -> IO ())
-  , pVkCreateAccelerationStructureKHR :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result)
-  , pVkCmdBuildAccelerationStructureKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR a)) -> ("ppOffsetInfos" ::: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) -> IO ())
-  , pVkCmdBuildAccelerationStructureIndirectKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR a)) -> ("indirectBuffer" ::: Buffer) -> ("indirectOffset" ::: DeviceSize) -> ("indirectStride" ::: Word32) -> IO ())
-  , pVkBuildAccelerationStructureKHR :: forall a . FunPtr (Ptr Device_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR a)) -> ("ppOffsetInfos" ::: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) -> IO Result)
-  , pVkGetAccelerationStructureDeviceAddressKHR :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR) -> IO DeviceAddress)
-  , pVkCreateDeferredOperationKHR :: FunPtr (Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDeferredOperation" ::: Ptr DeferredOperationKHR) -> IO Result)
-  , pVkDestroyDeferredOperationKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
-  , pVkGetDeferredOperationMaxConcurrencyKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Word32)
-  , pVkGetDeferredOperationResultKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Result)
-  , pVkDeferredOperationJoinKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Result)
-  }
-
-deriving instance Eq DeviceCmds
-deriving instance Show DeviceCmds
-instance Zero DeviceCmds where
-  zero = DeviceCmds
-    nullPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
-    nullFunPtr
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceProcAddr
-  :: FunPtr (Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) -> Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
-
-initDeviceCmds :: InstanceCmds -> Ptr Device_T -> IO DeviceCmds
-initDeviceCmds instanceCmds handle = do
-  pGetDeviceProcAddr <- castFunPtr @_ @(Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction)
-      <$> getInstanceProcAddr' (instanceCmdsHandle instanceCmds) (GHC.Ptr.Ptr "vkGetDeviceProcAddr"#)
-  let getDeviceProcAddr' = mkVkGetDeviceProcAddr pGetDeviceProcAddr
-  vkGetDeviceProcAddr <- getDeviceProcAddr' handle (Ptr "vkGetDeviceProcAddr"#)
-  vkDestroyDevice <- getDeviceProcAddr' handle (Ptr "vkDestroyDevice"#)
-  vkGetDeviceQueue <- getDeviceProcAddr' handle (Ptr "vkGetDeviceQueue"#)
-  vkQueueSubmit <- getDeviceProcAddr' handle (Ptr "vkQueueSubmit"#)
-  vkQueueWaitIdle <- getDeviceProcAddr' handle (Ptr "vkQueueWaitIdle"#)
-  vkDeviceWaitIdle <- getDeviceProcAddr' handle (Ptr "vkDeviceWaitIdle"#)
-  vkAllocateMemory <- getDeviceProcAddr' handle (Ptr "vkAllocateMemory"#)
-  vkFreeMemory <- getDeviceProcAddr' handle (Ptr "vkFreeMemory"#)
-  vkMapMemory <- getDeviceProcAddr' handle (Ptr "vkMapMemory"#)
-  vkUnmapMemory <- getDeviceProcAddr' handle (Ptr "vkUnmapMemory"#)
-  vkFlushMappedMemoryRanges <- getDeviceProcAddr' handle (Ptr "vkFlushMappedMemoryRanges"#)
-  vkInvalidateMappedMemoryRanges <- getDeviceProcAddr' handle (Ptr "vkInvalidateMappedMemoryRanges"#)
-  vkGetDeviceMemoryCommitment <- getDeviceProcAddr' handle (Ptr "vkGetDeviceMemoryCommitment"#)
-  vkGetBufferMemoryRequirements <- getDeviceProcAddr' handle (Ptr "vkGetBufferMemoryRequirements"#)
-  vkBindBufferMemory <- getDeviceProcAddr' handle (Ptr "vkBindBufferMemory"#)
-  vkGetImageMemoryRequirements <- getDeviceProcAddr' handle (Ptr "vkGetImageMemoryRequirements"#)
-  vkBindImageMemory <- getDeviceProcAddr' handle (Ptr "vkBindImageMemory"#)
-  vkGetImageSparseMemoryRequirements <- getDeviceProcAddr' handle (Ptr "vkGetImageSparseMemoryRequirements"#)
-  vkQueueBindSparse <- getDeviceProcAddr' handle (Ptr "vkQueueBindSparse"#)
-  vkCreateFence <- getDeviceProcAddr' handle (Ptr "vkCreateFence"#)
-  vkDestroyFence <- getDeviceProcAddr' handle (Ptr "vkDestroyFence"#)
-  vkResetFences <- getDeviceProcAddr' handle (Ptr "vkResetFences"#)
-  vkGetFenceStatus <- getDeviceProcAddr' handle (Ptr "vkGetFenceStatus"#)
-  vkWaitForFences <- getDeviceProcAddr' handle (Ptr "vkWaitForFences"#)
-  vkCreateSemaphore <- getDeviceProcAddr' handle (Ptr "vkCreateSemaphore"#)
-  vkDestroySemaphore <- getDeviceProcAddr' handle (Ptr "vkDestroySemaphore"#)
-  vkCreateEvent <- getDeviceProcAddr' handle (Ptr "vkCreateEvent"#)
-  vkDestroyEvent <- getDeviceProcAddr' handle (Ptr "vkDestroyEvent"#)
-  vkGetEventStatus <- getDeviceProcAddr' handle (Ptr "vkGetEventStatus"#)
-  vkSetEvent <- getDeviceProcAddr' handle (Ptr "vkSetEvent"#)
-  vkResetEvent <- getDeviceProcAddr' handle (Ptr "vkResetEvent"#)
-  vkCreateQueryPool <- getDeviceProcAddr' handle (Ptr "vkCreateQueryPool"#)
-  vkDestroyQueryPool <- getDeviceProcAddr' handle (Ptr "vkDestroyQueryPool"#)
-  vkGetQueryPoolResults <- getDeviceProcAddr' handle (Ptr "vkGetQueryPoolResults"#)
-  vkResetQueryPool <- getDeviceProcAddr' handle (Ptr "vkResetQueryPool"#)
-  vkCreateBuffer <- getDeviceProcAddr' handle (Ptr "vkCreateBuffer"#)
-  vkDestroyBuffer <- getDeviceProcAddr' handle (Ptr "vkDestroyBuffer"#)
-  vkCreateBufferView <- getDeviceProcAddr' handle (Ptr "vkCreateBufferView"#)
-  vkDestroyBufferView <- getDeviceProcAddr' handle (Ptr "vkDestroyBufferView"#)
-  vkCreateImage <- getDeviceProcAddr' handle (Ptr "vkCreateImage"#)
-  vkDestroyImage <- getDeviceProcAddr' handle (Ptr "vkDestroyImage"#)
-  vkGetImageSubresourceLayout <- getDeviceProcAddr' handle (Ptr "vkGetImageSubresourceLayout"#)
-  vkCreateImageView <- getDeviceProcAddr' handle (Ptr "vkCreateImageView"#)
-  vkDestroyImageView <- getDeviceProcAddr' handle (Ptr "vkDestroyImageView"#)
-  vkCreateShaderModule <- getDeviceProcAddr' handle (Ptr "vkCreateShaderModule"#)
-  vkDestroyShaderModule <- getDeviceProcAddr' handle (Ptr "vkDestroyShaderModule"#)
-  vkCreatePipelineCache <- getDeviceProcAddr' handle (Ptr "vkCreatePipelineCache"#)
-  vkDestroyPipelineCache <- getDeviceProcAddr' handle (Ptr "vkDestroyPipelineCache"#)
-  vkGetPipelineCacheData <- getDeviceProcAddr' handle (Ptr "vkGetPipelineCacheData"#)
-  vkMergePipelineCaches <- getDeviceProcAddr' handle (Ptr "vkMergePipelineCaches"#)
-  vkCreateGraphicsPipelines <- getDeviceProcAddr' handle (Ptr "vkCreateGraphicsPipelines"#)
-  vkCreateComputePipelines <- getDeviceProcAddr' handle (Ptr "vkCreateComputePipelines"#)
-  vkDestroyPipeline <- getDeviceProcAddr' handle (Ptr "vkDestroyPipeline"#)
-  vkCreatePipelineLayout <- getDeviceProcAddr' handle (Ptr "vkCreatePipelineLayout"#)
-  vkDestroyPipelineLayout <- getDeviceProcAddr' handle (Ptr "vkDestroyPipelineLayout"#)
-  vkCreateSampler <- getDeviceProcAddr' handle (Ptr "vkCreateSampler"#)
-  vkDestroySampler <- getDeviceProcAddr' handle (Ptr "vkDestroySampler"#)
-  vkCreateDescriptorSetLayout <- getDeviceProcAddr' handle (Ptr "vkCreateDescriptorSetLayout"#)
-  vkDestroyDescriptorSetLayout <- getDeviceProcAddr' handle (Ptr "vkDestroyDescriptorSetLayout"#)
-  vkCreateDescriptorPool <- getDeviceProcAddr' handle (Ptr "vkCreateDescriptorPool"#)
-  vkDestroyDescriptorPool <- getDeviceProcAddr' handle (Ptr "vkDestroyDescriptorPool"#)
-  vkResetDescriptorPool <- getDeviceProcAddr' handle (Ptr "vkResetDescriptorPool"#)
-  vkAllocateDescriptorSets <- getDeviceProcAddr' handle (Ptr "vkAllocateDescriptorSets"#)
-  vkFreeDescriptorSets <- getDeviceProcAddr' handle (Ptr "vkFreeDescriptorSets"#)
-  vkUpdateDescriptorSets <- getDeviceProcAddr' handle (Ptr "vkUpdateDescriptorSets"#)
-  vkCreateFramebuffer <- getDeviceProcAddr' handle (Ptr "vkCreateFramebuffer"#)
-  vkDestroyFramebuffer <- getDeviceProcAddr' handle (Ptr "vkDestroyFramebuffer"#)
-  vkCreateRenderPass <- getDeviceProcAddr' handle (Ptr "vkCreateRenderPass"#)
-  vkDestroyRenderPass <- getDeviceProcAddr' handle (Ptr "vkDestroyRenderPass"#)
-  vkGetRenderAreaGranularity <- getDeviceProcAddr' handle (Ptr "vkGetRenderAreaGranularity"#)
-  vkCreateCommandPool <- getDeviceProcAddr' handle (Ptr "vkCreateCommandPool"#)
-  vkDestroyCommandPool <- getDeviceProcAddr' handle (Ptr "vkDestroyCommandPool"#)
-  vkResetCommandPool <- getDeviceProcAddr' handle (Ptr "vkResetCommandPool"#)
-  vkAllocateCommandBuffers <- getDeviceProcAddr' handle (Ptr "vkAllocateCommandBuffers"#)
-  vkFreeCommandBuffers <- getDeviceProcAddr' handle (Ptr "vkFreeCommandBuffers"#)
-  vkBeginCommandBuffer <- getDeviceProcAddr' handle (Ptr "vkBeginCommandBuffer"#)
-  vkEndCommandBuffer <- getDeviceProcAddr' handle (Ptr "vkEndCommandBuffer"#)
-  vkResetCommandBuffer <- getDeviceProcAddr' handle (Ptr "vkResetCommandBuffer"#)
-  vkCmdBindPipeline <- getDeviceProcAddr' handle (Ptr "vkCmdBindPipeline"#)
-  vkCmdSetViewport <- getDeviceProcAddr' handle (Ptr "vkCmdSetViewport"#)
-  vkCmdSetScissor <- getDeviceProcAddr' handle (Ptr "vkCmdSetScissor"#)
-  vkCmdSetLineWidth <- getDeviceProcAddr' handle (Ptr "vkCmdSetLineWidth"#)
-  vkCmdSetDepthBias <- getDeviceProcAddr' handle (Ptr "vkCmdSetDepthBias"#)
-  vkCmdSetBlendConstants <- getDeviceProcAddr' handle (Ptr "vkCmdSetBlendConstants"#)
-  vkCmdSetDepthBounds <- getDeviceProcAddr' handle (Ptr "vkCmdSetDepthBounds"#)
-  vkCmdSetStencilCompareMask <- getDeviceProcAddr' handle (Ptr "vkCmdSetStencilCompareMask"#)
-  vkCmdSetStencilWriteMask <- getDeviceProcAddr' handle (Ptr "vkCmdSetStencilWriteMask"#)
-  vkCmdSetStencilReference <- getDeviceProcAddr' handle (Ptr "vkCmdSetStencilReference"#)
-  vkCmdBindDescriptorSets <- getDeviceProcAddr' handle (Ptr "vkCmdBindDescriptorSets"#)
-  vkCmdBindIndexBuffer <- getDeviceProcAddr' handle (Ptr "vkCmdBindIndexBuffer"#)
-  vkCmdBindVertexBuffers <- getDeviceProcAddr' handle (Ptr "vkCmdBindVertexBuffers"#)
-  vkCmdDraw <- getDeviceProcAddr' handle (Ptr "vkCmdDraw"#)
-  vkCmdDrawIndexed <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndexed"#)
-  vkCmdDrawIndirect <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndirect"#)
-  vkCmdDrawIndexedIndirect <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndexedIndirect"#)
-  vkCmdDispatch <- getDeviceProcAddr' handle (Ptr "vkCmdDispatch"#)
-  vkCmdDispatchIndirect <- getDeviceProcAddr' handle (Ptr "vkCmdDispatchIndirect"#)
-  vkCmdCopyBuffer <- getDeviceProcAddr' handle (Ptr "vkCmdCopyBuffer"#)
-  vkCmdCopyImage <- getDeviceProcAddr' handle (Ptr "vkCmdCopyImage"#)
-  vkCmdBlitImage <- getDeviceProcAddr' handle (Ptr "vkCmdBlitImage"#)
-  vkCmdCopyBufferToImage <- getDeviceProcAddr' handle (Ptr "vkCmdCopyBufferToImage"#)
-  vkCmdCopyImageToBuffer <- getDeviceProcAddr' handle (Ptr "vkCmdCopyImageToBuffer"#)
-  vkCmdUpdateBuffer <- getDeviceProcAddr' handle (Ptr "vkCmdUpdateBuffer"#)
-  vkCmdFillBuffer <- getDeviceProcAddr' handle (Ptr "vkCmdFillBuffer"#)
-  vkCmdClearColorImage <- getDeviceProcAddr' handle (Ptr "vkCmdClearColorImage"#)
-  vkCmdClearDepthStencilImage <- getDeviceProcAddr' handle (Ptr "vkCmdClearDepthStencilImage"#)
-  vkCmdClearAttachments <- getDeviceProcAddr' handle (Ptr "vkCmdClearAttachments"#)
-  vkCmdResolveImage <- getDeviceProcAddr' handle (Ptr "vkCmdResolveImage"#)
-  vkCmdSetEvent <- getDeviceProcAddr' handle (Ptr "vkCmdSetEvent"#)
-  vkCmdResetEvent <- getDeviceProcAddr' handle (Ptr "vkCmdResetEvent"#)
-  vkCmdWaitEvents <- getDeviceProcAddr' handle (Ptr "vkCmdWaitEvents"#)
-  vkCmdPipelineBarrier <- getDeviceProcAddr' handle (Ptr "vkCmdPipelineBarrier"#)
-  vkCmdBeginQuery <- getDeviceProcAddr' handle (Ptr "vkCmdBeginQuery"#)
-  vkCmdEndQuery <- getDeviceProcAddr' handle (Ptr "vkCmdEndQuery"#)
-  vkCmdBeginConditionalRenderingEXT <- getDeviceProcAddr' handle (Ptr "vkCmdBeginConditionalRenderingEXT"#)
-  vkCmdEndConditionalRenderingEXT <- getDeviceProcAddr' handle (Ptr "vkCmdEndConditionalRenderingEXT"#)
-  vkCmdResetQueryPool <- getDeviceProcAddr' handle (Ptr "vkCmdResetQueryPool"#)
-  vkCmdWriteTimestamp <- getDeviceProcAddr' handle (Ptr "vkCmdWriteTimestamp"#)
-  vkCmdCopyQueryPoolResults <- getDeviceProcAddr' handle (Ptr "vkCmdCopyQueryPoolResults"#)
-  vkCmdPushConstants <- getDeviceProcAddr' handle (Ptr "vkCmdPushConstants"#)
-  vkCmdBeginRenderPass <- getDeviceProcAddr' handle (Ptr "vkCmdBeginRenderPass"#)
-  vkCmdNextSubpass <- getDeviceProcAddr' handle (Ptr "vkCmdNextSubpass"#)
-  vkCmdEndRenderPass <- getDeviceProcAddr' handle (Ptr "vkCmdEndRenderPass"#)
-  vkCmdExecuteCommands <- getDeviceProcAddr' handle (Ptr "vkCmdExecuteCommands"#)
-  vkCreateSharedSwapchainsKHR <- getDeviceProcAddr' handle (Ptr "vkCreateSharedSwapchainsKHR"#)
-  vkCreateSwapchainKHR <- getDeviceProcAddr' handle (Ptr "vkCreateSwapchainKHR"#)
-  vkDestroySwapchainKHR <- getDeviceProcAddr' handle (Ptr "vkDestroySwapchainKHR"#)
-  vkGetSwapchainImagesKHR <- getDeviceProcAddr' handle (Ptr "vkGetSwapchainImagesKHR"#)
-  vkAcquireNextImageKHR <- getDeviceProcAddr' handle (Ptr "vkAcquireNextImageKHR"#)
-  vkQueuePresentKHR <- getDeviceProcAddr' handle (Ptr "vkQueuePresentKHR"#)
-  vkDebugMarkerSetObjectNameEXT <- getDeviceProcAddr' handle (Ptr "vkDebugMarkerSetObjectNameEXT"#)
-  vkDebugMarkerSetObjectTagEXT <- getDeviceProcAddr' handle (Ptr "vkDebugMarkerSetObjectTagEXT"#)
-  vkCmdDebugMarkerBeginEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDebugMarkerBeginEXT"#)
-  vkCmdDebugMarkerEndEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDebugMarkerEndEXT"#)
-  vkCmdDebugMarkerInsertEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDebugMarkerInsertEXT"#)
-  vkGetMemoryWin32HandleNV <- getDeviceProcAddr' handle (Ptr "vkGetMemoryWin32HandleNV"#)
-  vkCmdExecuteGeneratedCommandsNV <- getDeviceProcAddr' handle (Ptr "vkCmdExecuteGeneratedCommandsNV"#)
-  vkCmdPreprocessGeneratedCommandsNV <- getDeviceProcAddr' handle (Ptr "vkCmdPreprocessGeneratedCommandsNV"#)
-  vkCmdBindPipelineShaderGroupNV <- getDeviceProcAddr' handle (Ptr "vkCmdBindPipelineShaderGroupNV"#)
-  vkGetGeneratedCommandsMemoryRequirementsNV <- getDeviceProcAddr' handle (Ptr "vkGetGeneratedCommandsMemoryRequirementsNV"#)
-  vkCreateIndirectCommandsLayoutNV <- getDeviceProcAddr' handle (Ptr "vkCreateIndirectCommandsLayoutNV"#)
-  vkDestroyIndirectCommandsLayoutNV <- getDeviceProcAddr' handle (Ptr "vkDestroyIndirectCommandsLayoutNV"#)
-  vkCmdPushDescriptorSetKHR <- getDeviceProcAddr' handle (Ptr "vkCmdPushDescriptorSetKHR"#)
-  vkTrimCommandPool <- getDeviceProcAddr' handle (Ptr "vkTrimCommandPool"#)
-  vkGetMemoryWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkGetMemoryWin32HandleKHR"#)
-  vkGetMemoryWin32HandlePropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkGetMemoryWin32HandlePropertiesKHR"#)
-  vkGetMemoryFdKHR <- getDeviceProcAddr' handle (Ptr "vkGetMemoryFdKHR"#)
-  vkGetMemoryFdPropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkGetMemoryFdPropertiesKHR"#)
-  vkGetSemaphoreWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkGetSemaphoreWin32HandleKHR"#)
-  vkImportSemaphoreWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkImportSemaphoreWin32HandleKHR"#)
-  vkGetSemaphoreFdKHR <- getDeviceProcAddr' handle (Ptr "vkGetSemaphoreFdKHR"#)
-  vkImportSemaphoreFdKHR <- getDeviceProcAddr' handle (Ptr "vkImportSemaphoreFdKHR"#)
-  vkGetFenceWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkGetFenceWin32HandleKHR"#)
-  vkImportFenceWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkImportFenceWin32HandleKHR"#)
-  vkGetFenceFdKHR <- getDeviceProcAddr' handle (Ptr "vkGetFenceFdKHR"#)
-  vkImportFenceFdKHR <- getDeviceProcAddr' handle (Ptr "vkImportFenceFdKHR"#)
-  vkDisplayPowerControlEXT <- getDeviceProcAddr' handle (Ptr "vkDisplayPowerControlEXT"#)
-  vkRegisterDeviceEventEXT <- getDeviceProcAddr' handle (Ptr "vkRegisterDeviceEventEXT"#)
-  vkRegisterDisplayEventEXT <- getDeviceProcAddr' handle (Ptr "vkRegisterDisplayEventEXT"#)
-  vkGetSwapchainCounterEXT <- getDeviceProcAddr' handle (Ptr "vkGetSwapchainCounterEXT"#)
-  vkGetDeviceGroupPeerMemoryFeatures <- getDeviceProcAddr' handle (Ptr "vkGetDeviceGroupPeerMemoryFeatures"#)
-  vkBindBufferMemory2 <- getDeviceProcAddr' handle (Ptr "vkBindBufferMemory2"#)
-  vkBindImageMemory2 <- getDeviceProcAddr' handle (Ptr "vkBindImageMemory2"#)
-  vkCmdSetDeviceMask <- getDeviceProcAddr' handle (Ptr "vkCmdSetDeviceMask"#)
-  vkGetDeviceGroupPresentCapabilitiesKHR <- getDeviceProcAddr' handle (Ptr "vkGetDeviceGroupPresentCapabilitiesKHR"#)
-  vkGetDeviceGroupSurfacePresentModesKHR <- getDeviceProcAddr' handle (Ptr "vkGetDeviceGroupSurfacePresentModesKHR"#)
-  vkAcquireNextImage2KHR <- getDeviceProcAddr' handle (Ptr "vkAcquireNextImage2KHR"#)
-  vkCmdDispatchBase <- getDeviceProcAddr' handle (Ptr "vkCmdDispatchBase"#)
-  vkCreateDescriptorUpdateTemplate <- getDeviceProcAddr' handle (Ptr "vkCreateDescriptorUpdateTemplate"#)
-  vkDestroyDescriptorUpdateTemplate <- getDeviceProcAddr' handle (Ptr "vkDestroyDescriptorUpdateTemplate"#)
-  vkUpdateDescriptorSetWithTemplate <- getDeviceProcAddr' handle (Ptr "vkUpdateDescriptorSetWithTemplate"#)
-  vkCmdPushDescriptorSetWithTemplateKHR <- getDeviceProcAddr' handle (Ptr "vkCmdPushDescriptorSetWithTemplateKHR"#)
-  vkSetHdrMetadataEXT <- getDeviceProcAddr' handle (Ptr "vkSetHdrMetadataEXT"#)
-  vkGetSwapchainStatusKHR <- getDeviceProcAddr' handle (Ptr "vkGetSwapchainStatusKHR"#)
-  vkGetRefreshCycleDurationGOOGLE <- getDeviceProcAddr' handle (Ptr "vkGetRefreshCycleDurationGOOGLE"#)
-  vkGetPastPresentationTimingGOOGLE <- getDeviceProcAddr' handle (Ptr "vkGetPastPresentationTimingGOOGLE"#)
-  vkCmdSetViewportWScalingNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetViewportWScalingNV"#)
-  vkCmdSetDiscardRectangleEXT <- getDeviceProcAddr' handle (Ptr "vkCmdSetDiscardRectangleEXT"#)
-  vkCmdSetSampleLocationsEXT <- getDeviceProcAddr' handle (Ptr "vkCmdSetSampleLocationsEXT"#)
-  vkGetBufferMemoryRequirements2 <- getDeviceProcAddr' handle (Ptr "vkGetBufferMemoryRequirements2"#)
-  vkGetImageMemoryRequirements2 <- getDeviceProcAddr' handle (Ptr "vkGetImageMemoryRequirements2"#)
-  vkGetImageSparseMemoryRequirements2 <- getDeviceProcAddr' handle (Ptr "vkGetImageSparseMemoryRequirements2"#)
-  vkCreateSamplerYcbcrConversion <- getDeviceProcAddr' handle (Ptr "vkCreateSamplerYcbcrConversion"#)
-  vkDestroySamplerYcbcrConversion <- getDeviceProcAddr' handle (Ptr "vkDestroySamplerYcbcrConversion"#)
-  vkGetDeviceQueue2 <- getDeviceProcAddr' handle (Ptr "vkGetDeviceQueue2"#)
-  vkCreateValidationCacheEXT <- getDeviceProcAddr' handle (Ptr "vkCreateValidationCacheEXT"#)
-  vkDestroyValidationCacheEXT <- getDeviceProcAddr' handle (Ptr "vkDestroyValidationCacheEXT"#)
-  vkGetValidationCacheDataEXT <- getDeviceProcAddr' handle (Ptr "vkGetValidationCacheDataEXT"#)
-  vkMergeValidationCachesEXT <- getDeviceProcAddr' handle (Ptr "vkMergeValidationCachesEXT"#)
-  vkGetDescriptorSetLayoutSupport <- getDeviceProcAddr' handle (Ptr "vkGetDescriptorSetLayoutSupport"#)
-  vkGetShaderInfoAMD <- getDeviceProcAddr' handle (Ptr "vkGetShaderInfoAMD"#)
-  vkSetLocalDimmingAMD <- getDeviceProcAddr' handle (Ptr "vkSetLocalDimmingAMD"#)
-  vkGetCalibratedTimestampsEXT <- getDeviceProcAddr' handle (Ptr "vkGetCalibratedTimestampsEXT"#)
-  vkSetDebugUtilsObjectNameEXT <- getDeviceProcAddr' handle (Ptr "vkSetDebugUtilsObjectNameEXT"#)
-  vkSetDebugUtilsObjectTagEXT <- getDeviceProcAddr' handle (Ptr "vkSetDebugUtilsObjectTagEXT"#)
-  vkQueueBeginDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkQueueBeginDebugUtilsLabelEXT"#)
-  vkQueueEndDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkQueueEndDebugUtilsLabelEXT"#)
-  vkQueueInsertDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkQueueInsertDebugUtilsLabelEXT"#)
-  vkCmdBeginDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkCmdBeginDebugUtilsLabelEXT"#)
-  vkCmdEndDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkCmdEndDebugUtilsLabelEXT"#)
-  vkCmdInsertDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkCmdInsertDebugUtilsLabelEXT"#)
-  vkGetMemoryHostPointerPropertiesEXT <- getDeviceProcAddr' handle (Ptr "vkGetMemoryHostPointerPropertiesEXT"#)
-  vkCmdWriteBufferMarkerAMD <- getDeviceProcAddr' handle (Ptr "vkCmdWriteBufferMarkerAMD"#)
-  vkCreateRenderPass2 <- getDeviceProcAddr' handle (Ptr "vkCreateRenderPass2"#)
-  vkCmdBeginRenderPass2 <- getDeviceProcAddr' handle (Ptr "vkCmdBeginRenderPass2"#)
-  vkCmdNextSubpass2 <- getDeviceProcAddr' handle (Ptr "vkCmdNextSubpass2"#)
-  vkCmdEndRenderPass2 <- getDeviceProcAddr' handle (Ptr "vkCmdEndRenderPass2"#)
-  vkGetSemaphoreCounterValue <- getDeviceProcAddr' handle (Ptr "vkGetSemaphoreCounterValue"#)
-  vkWaitSemaphores <- getDeviceProcAddr' handle (Ptr "vkWaitSemaphores"#)
-  vkSignalSemaphore <- getDeviceProcAddr' handle (Ptr "vkSignalSemaphore"#)
-  vkGetAndroidHardwareBufferPropertiesANDROID <- getDeviceProcAddr' handle (Ptr "vkGetAndroidHardwareBufferPropertiesANDROID"#)
-  vkGetMemoryAndroidHardwareBufferANDROID <- getDeviceProcAddr' handle (Ptr "vkGetMemoryAndroidHardwareBufferANDROID"#)
-  vkCmdDrawIndirectCount <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndirectCount"#)
-  vkCmdDrawIndexedIndirectCount <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndexedIndirectCount"#)
-  vkCmdSetCheckpointNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetCheckpointNV"#)
-  vkGetQueueCheckpointDataNV <- getDeviceProcAddr' handle (Ptr "vkGetQueueCheckpointDataNV"#)
-  vkCmdBindTransformFeedbackBuffersEXT <- getDeviceProcAddr' handle (Ptr "vkCmdBindTransformFeedbackBuffersEXT"#)
-  vkCmdBeginTransformFeedbackEXT <- getDeviceProcAddr' handle (Ptr "vkCmdBeginTransformFeedbackEXT"#)
-  vkCmdEndTransformFeedbackEXT <- getDeviceProcAddr' handle (Ptr "vkCmdEndTransformFeedbackEXT"#)
-  vkCmdBeginQueryIndexedEXT <- getDeviceProcAddr' handle (Ptr "vkCmdBeginQueryIndexedEXT"#)
-  vkCmdEndQueryIndexedEXT <- getDeviceProcAddr' handle (Ptr "vkCmdEndQueryIndexedEXT"#)
-  vkCmdDrawIndirectByteCountEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndirectByteCountEXT"#)
-  vkCmdSetExclusiveScissorNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetExclusiveScissorNV"#)
-  vkCmdBindShadingRateImageNV <- getDeviceProcAddr' handle (Ptr "vkCmdBindShadingRateImageNV"#)
-  vkCmdSetViewportShadingRatePaletteNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetViewportShadingRatePaletteNV"#)
-  vkCmdSetCoarseSampleOrderNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetCoarseSampleOrderNV"#)
-  vkCmdDrawMeshTasksNV <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMeshTasksNV"#)
-  vkCmdDrawMeshTasksIndirectNV <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMeshTasksIndirectNV"#)
-  vkCmdDrawMeshTasksIndirectCountNV <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMeshTasksIndirectCountNV"#)
-  vkCompileDeferredNV <- getDeviceProcAddr' handle (Ptr "vkCompileDeferredNV"#)
-  vkCreateAccelerationStructureNV <- getDeviceProcAddr' handle (Ptr "vkCreateAccelerationStructureNV"#)
-  vkDestroyAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkDestroyAccelerationStructureKHR"#)
-  vkGetAccelerationStructureMemoryRequirementsKHR <- getDeviceProcAddr' handle (Ptr "vkGetAccelerationStructureMemoryRequirementsKHR"#)
-  vkGetAccelerationStructureMemoryRequirementsNV <- getDeviceProcAddr' handle (Ptr "vkGetAccelerationStructureMemoryRequirementsNV"#)
-  vkBindAccelerationStructureMemoryKHR <- getDeviceProcAddr' handle (Ptr "vkBindAccelerationStructureMemoryKHR"#)
-  vkCmdCopyAccelerationStructureNV <- getDeviceProcAddr' handle (Ptr "vkCmdCopyAccelerationStructureNV"#)
-  vkCmdCopyAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyAccelerationStructureKHR"#)
-  vkCopyAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCopyAccelerationStructureKHR"#)
-  vkCmdCopyAccelerationStructureToMemoryKHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyAccelerationStructureToMemoryKHR"#)
-  vkCopyAccelerationStructureToMemoryKHR <- getDeviceProcAddr' handle (Ptr "vkCopyAccelerationStructureToMemoryKHR"#)
-  vkCmdCopyMemoryToAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyMemoryToAccelerationStructureKHR"#)
-  vkCopyMemoryToAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCopyMemoryToAccelerationStructureKHR"#)
-  vkCmdWriteAccelerationStructuresPropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkCmdWriteAccelerationStructuresPropertiesKHR"#)
-  vkCmdBuildAccelerationStructureNV <- getDeviceProcAddr' handle (Ptr "vkCmdBuildAccelerationStructureNV"#)
-  vkWriteAccelerationStructuresPropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkWriteAccelerationStructuresPropertiesKHR"#)
-  vkCmdTraceRaysKHR <- getDeviceProcAddr' handle (Ptr "vkCmdTraceRaysKHR"#)
-  vkCmdTraceRaysNV <- getDeviceProcAddr' handle (Ptr "vkCmdTraceRaysNV"#)
-  vkGetRayTracingShaderGroupHandlesKHR <- getDeviceProcAddr' handle (Ptr "vkGetRayTracingShaderGroupHandlesKHR"#)
-  vkGetRayTracingCaptureReplayShaderGroupHandlesKHR <- getDeviceProcAddr' handle (Ptr "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"#)
-  vkGetAccelerationStructureHandleNV <- getDeviceProcAddr' handle (Ptr "vkGetAccelerationStructureHandleNV"#)
-  vkCreateRayTracingPipelinesNV <- getDeviceProcAddr' handle (Ptr "vkCreateRayTracingPipelinesNV"#)
-  vkCreateRayTracingPipelinesKHR <- getDeviceProcAddr' handle (Ptr "vkCreateRayTracingPipelinesKHR"#)
-  vkCmdTraceRaysIndirectKHR <- getDeviceProcAddr' handle (Ptr "vkCmdTraceRaysIndirectKHR"#)
-  vkGetDeviceAccelerationStructureCompatibilityKHR <- getDeviceProcAddr' handle (Ptr "vkGetDeviceAccelerationStructureCompatibilityKHR"#)
-  vkGetImageViewHandleNVX <- getDeviceProcAddr' handle (Ptr "vkGetImageViewHandleNVX"#)
-  vkGetImageViewAddressNVX <- getDeviceProcAddr' handle (Ptr "vkGetImageViewAddressNVX"#)
-  vkGetDeviceGroupSurfacePresentModes2EXT <- getDeviceProcAddr' handle (Ptr "vkGetDeviceGroupSurfacePresentModes2EXT"#)
-  vkAcquireFullScreenExclusiveModeEXT <- getDeviceProcAddr' handle (Ptr "vkAcquireFullScreenExclusiveModeEXT"#)
-  vkReleaseFullScreenExclusiveModeEXT <- getDeviceProcAddr' handle (Ptr "vkReleaseFullScreenExclusiveModeEXT"#)
-  vkAcquireProfilingLockKHR <- getDeviceProcAddr' handle (Ptr "vkAcquireProfilingLockKHR"#)
-  vkReleaseProfilingLockKHR <- getDeviceProcAddr' handle (Ptr "vkReleaseProfilingLockKHR"#)
-  vkGetImageDrmFormatModifierPropertiesEXT <- getDeviceProcAddr' handle (Ptr "vkGetImageDrmFormatModifierPropertiesEXT"#)
-  vkGetBufferOpaqueCaptureAddress <- getDeviceProcAddr' handle (Ptr "vkGetBufferOpaqueCaptureAddress"#)
-  vkGetBufferDeviceAddress <- getDeviceProcAddr' handle (Ptr "vkGetBufferDeviceAddress"#)
-  vkInitializePerformanceApiINTEL <- getDeviceProcAddr' handle (Ptr "vkInitializePerformanceApiINTEL"#)
-  vkUninitializePerformanceApiINTEL <- getDeviceProcAddr' handle (Ptr "vkUninitializePerformanceApiINTEL"#)
-  vkCmdSetPerformanceMarkerINTEL <- getDeviceProcAddr' handle (Ptr "vkCmdSetPerformanceMarkerINTEL"#)
-  vkCmdSetPerformanceStreamMarkerINTEL <- getDeviceProcAddr' handle (Ptr "vkCmdSetPerformanceStreamMarkerINTEL"#)
-  vkCmdSetPerformanceOverrideINTEL <- getDeviceProcAddr' handle (Ptr "vkCmdSetPerformanceOverrideINTEL"#)
-  vkAcquirePerformanceConfigurationINTEL <- getDeviceProcAddr' handle (Ptr "vkAcquirePerformanceConfigurationINTEL"#)
-  vkReleasePerformanceConfigurationINTEL <- getDeviceProcAddr' handle (Ptr "vkReleasePerformanceConfigurationINTEL"#)
-  vkQueueSetPerformanceConfigurationINTEL <- getDeviceProcAddr' handle (Ptr "vkQueueSetPerformanceConfigurationINTEL"#)
-  vkGetPerformanceParameterINTEL <- getDeviceProcAddr' handle (Ptr "vkGetPerformanceParameterINTEL"#)
-  vkGetDeviceMemoryOpaqueCaptureAddress <- getDeviceProcAddr' handle (Ptr "vkGetDeviceMemoryOpaqueCaptureAddress"#)
-  vkGetPipelineExecutablePropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkGetPipelineExecutablePropertiesKHR"#)
-  vkGetPipelineExecutableStatisticsKHR <- getDeviceProcAddr' handle (Ptr "vkGetPipelineExecutableStatisticsKHR"#)
-  vkGetPipelineExecutableInternalRepresentationsKHR <- getDeviceProcAddr' handle (Ptr "vkGetPipelineExecutableInternalRepresentationsKHR"#)
-  vkCmdSetLineStippleEXT <- getDeviceProcAddr' handle (Ptr "vkCmdSetLineStippleEXT"#)
-  vkCreateAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCreateAccelerationStructureKHR"#)
-  vkCmdBuildAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCmdBuildAccelerationStructureKHR"#)
-  vkCmdBuildAccelerationStructureIndirectKHR <- getDeviceProcAddr' handle (Ptr "vkCmdBuildAccelerationStructureIndirectKHR"#)
-  vkBuildAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkBuildAccelerationStructureKHR"#)
-  vkGetAccelerationStructureDeviceAddressKHR <- getDeviceProcAddr' handle (Ptr "vkGetAccelerationStructureDeviceAddressKHR"#)
-  vkCreateDeferredOperationKHR <- getDeviceProcAddr' handle (Ptr "vkCreateDeferredOperationKHR"#)
-  vkDestroyDeferredOperationKHR <- getDeviceProcAddr' handle (Ptr "vkDestroyDeferredOperationKHR"#)
-  vkGetDeferredOperationMaxConcurrencyKHR <- getDeviceProcAddr' handle (Ptr "vkGetDeferredOperationMaxConcurrencyKHR"#)
-  vkGetDeferredOperationResultKHR <- getDeviceProcAddr' handle (Ptr "vkGetDeferredOperationResultKHR"#)
-  vkDeferredOperationJoinKHR <- getDeviceProcAddr' handle (Ptr "vkDeferredOperationJoinKHR"#)
-  pure $ DeviceCmds handle
-    (castFunPtr @_ @(Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) vkGetDeviceProcAddr)
-    (castFunPtr @_ @(Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDevice)
-    (castFunPtr @_ @(Ptr Device_T -> ("queueFamilyIndex" ::: Word32) -> ("queueIndex" ::: Word32) -> ("pQueue" ::: Ptr (Ptr Queue_T)) -> IO ()) vkGetDeviceQueue)
-    (castFunPtr @_ @(Ptr Queue_T -> ("submitCount" ::: Word32) -> ("pSubmits" ::: Ptr (SubmitInfo _)) -> Fence -> IO Result) vkQueueSubmit)
-    (castFunPtr @_ @(Ptr Queue_T -> IO Result) vkQueueWaitIdle)
-    (castFunPtr @_ @(Ptr Device_T -> IO Result) vkDeviceWaitIdle)
-    (castFunPtr @_ @(Ptr Device_T -> ("pAllocateInfo" ::: Ptr (MemoryAllocateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMemory" ::: Ptr DeviceMemory) -> IO Result) vkAllocateMemory)
-    (castFunPtr @_ @(Ptr Device_T -> DeviceMemory -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkFreeMemory)
-    (castFunPtr @_ @(Ptr Device_T -> DeviceMemory -> ("offset" ::: DeviceSize) -> DeviceSize -> MemoryMapFlags -> ("ppData" ::: Ptr (Ptr ())) -> IO Result) vkMapMemory)
-    (castFunPtr @_ @(Ptr Device_T -> DeviceMemory -> IO ()) vkUnmapMemory)
-    (castFunPtr @_ @(Ptr Device_T -> ("memoryRangeCount" ::: Word32) -> ("pMemoryRanges" ::: Ptr MappedMemoryRange) -> IO Result) vkFlushMappedMemoryRanges)
-    (castFunPtr @_ @(Ptr Device_T -> ("memoryRangeCount" ::: Word32) -> ("pMemoryRanges" ::: Ptr MappedMemoryRange) -> IO Result) vkInvalidateMappedMemoryRanges)
-    (castFunPtr @_ @(Ptr Device_T -> DeviceMemory -> ("pCommittedMemoryInBytes" ::: Ptr DeviceSize) -> IO ()) vkGetDeviceMemoryCommitment)
-    (castFunPtr @_ @(Ptr Device_T -> Buffer -> ("pMemoryRequirements" ::: Ptr MemoryRequirements) -> IO ()) vkGetBufferMemoryRequirements)
-    (castFunPtr @_ @(Ptr Device_T -> Buffer -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> IO Result) vkBindBufferMemory)
-    (castFunPtr @_ @(Ptr Device_T -> Image -> ("pMemoryRequirements" ::: Ptr MemoryRequirements) -> IO ()) vkGetImageMemoryRequirements)
-    (castFunPtr @_ @(Ptr Device_T -> Image -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> IO Result) vkBindImageMemory)
-    (castFunPtr @_ @(Ptr Device_T -> Image -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements) -> IO ()) vkGetImageSparseMemoryRequirements)
-    (castFunPtr @_ @(Ptr Queue_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfo" ::: Ptr (BindSparseInfo _)) -> Fence -> IO Result) vkQueueBindSparse)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (FenceCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result) vkCreateFence)
-    (castFunPtr @_ @(Ptr Device_T -> Fence -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyFence)
-    (castFunPtr @_ @(Ptr Device_T -> ("fenceCount" ::: Word32) -> ("pFences" ::: Ptr Fence) -> IO Result) vkResetFences)
-    (castFunPtr @_ @(Ptr Device_T -> Fence -> IO Result) vkGetFenceStatus)
-    (castFunPtr @_ @(Ptr Device_T -> ("fenceCount" ::: Word32) -> ("pFences" ::: Ptr Fence) -> ("waitAll" ::: Bool32) -> ("timeout" ::: Word64) -> IO Result) vkWaitForFences)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (SemaphoreCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSemaphore" ::: Ptr Semaphore) -> IO Result) vkCreateSemaphore)
-    (castFunPtr @_ @(Ptr Device_T -> Semaphore -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroySemaphore)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr EventCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pEvent" ::: Ptr Event) -> IO Result) vkCreateEvent)
-    (castFunPtr @_ @(Ptr Device_T -> Event -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyEvent)
-    (castFunPtr @_ @(Ptr Device_T -> Event -> IO Result) vkGetEventStatus)
-    (castFunPtr @_ @(Ptr Device_T -> Event -> IO Result) vkSetEvent)
-    (castFunPtr @_ @(Ptr Device_T -> Event -> IO Result) vkResetEvent)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (QueryPoolCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pQueryPool" ::: Ptr QueryPool) -> IO Result) vkCreateQueryPool)
-    (castFunPtr @_ @(Ptr Device_T -> QueryPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyQueryPool)
-    (castFunPtr @_ @(Ptr Device_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> IO Result) vkGetQueryPoolResults)
-    (castFunPtr @_ @(Ptr Device_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ()) vkResetQueryPool)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (BufferCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pBuffer" ::: Ptr Buffer) -> IO Result) vkCreateBuffer)
-    (castFunPtr @_ @(Ptr Device_T -> Buffer -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyBuffer)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr BufferViewCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pView" ::: Ptr BufferView) -> IO Result) vkCreateBufferView)
-    (castFunPtr @_ @(Ptr Device_T -> BufferView -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyBufferView)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (ImageCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pImage" ::: Ptr Image) -> IO Result) vkCreateImage)
-    (castFunPtr @_ @(Ptr Device_T -> Image -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyImage)
-    (castFunPtr @_ @(Ptr Device_T -> Image -> ("pSubresource" ::: Ptr ImageSubresource) -> ("pLayout" ::: Ptr SubresourceLayout) -> IO ()) vkGetImageSubresourceLayout)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (ImageViewCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pView" ::: Ptr ImageView) -> IO Result) vkCreateImageView)
-    (castFunPtr @_ @(Ptr Device_T -> ImageView -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyImageView)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (ShaderModuleCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pShaderModule" ::: Ptr ShaderModule) -> IO Result) vkCreateShaderModule)
-    (castFunPtr @_ @(Ptr Device_T -> ShaderModule -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyShaderModule)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr PipelineCacheCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelineCache" ::: Ptr PipelineCache) -> IO Result) vkCreatePipelineCache)
-    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyPipelineCache)
-    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("pDataSize" ::: Ptr CSize) -> ("pData" ::: Ptr ()) -> IO Result) vkGetPipelineCacheData)
-    (castFunPtr @_ @(Ptr Device_T -> ("dstCache" ::: PipelineCache) -> ("srcCacheCount" ::: Word32) -> ("pSrcCaches" ::: Ptr PipelineCache) -> IO Result) vkMergePipelineCaches)
-    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (GraphicsPipelineCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result) vkCreateGraphicsPipelines)
-    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (ComputePipelineCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result) vkCreateComputePipelines)
-    (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyPipeline)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr PipelineLayoutCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelineLayout" ::: Ptr PipelineLayout) -> IO Result) vkCreatePipelineLayout)
-    (castFunPtr @_ @(Ptr Device_T -> PipelineLayout -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyPipelineLayout)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (SamplerCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSampler" ::: Ptr Sampler) -> IO Result) vkCreateSampler)
-    (castFunPtr @_ @(Ptr Device_T -> Sampler -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroySampler)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorSetLayoutCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSetLayout" ::: Ptr DescriptorSetLayout) -> IO Result) vkCreateDescriptorSetLayout)
-    (castFunPtr @_ @(Ptr Device_T -> DescriptorSetLayout -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDescriptorSetLayout)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorPoolCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDescriptorPool" ::: Ptr DescriptorPool) -> IO Result) vkCreateDescriptorPool)
-    (castFunPtr @_ @(Ptr Device_T -> DescriptorPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDescriptorPool)
-    (castFunPtr @_ @(Ptr Device_T -> DescriptorPool -> DescriptorPoolResetFlags -> IO Result) vkResetDescriptorPool)
-    (castFunPtr @_ @(Ptr Device_T -> ("pAllocateInfo" ::: Ptr (DescriptorSetAllocateInfo _)) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> IO Result) vkAllocateDescriptorSets)
-    (castFunPtr @_ @(Ptr Device_T -> DescriptorPool -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> IO Result) vkFreeDescriptorSets)
-    (castFunPtr @_ @(Ptr Device_T -> ("descriptorWriteCount" ::: Word32) -> ("pDescriptorWrites" ::: Ptr (WriteDescriptorSet _)) -> ("descriptorCopyCount" ::: Word32) -> ("pDescriptorCopies" ::: Ptr CopyDescriptorSet) -> IO ()) vkUpdateDescriptorSets)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (FramebufferCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFramebuffer" ::: Ptr Framebuffer) -> IO Result) vkCreateFramebuffer)
-    (castFunPtr @_ @(Ptr Device_T -> Framebuffer -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyFramebuffer)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (RenderPassCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pRenderPass" ::: Ptr RenderPass) -> IO Result) vkCreateRenderPass)
-    (castFunPtr @_ @(Ptr Device_T -> RenderPass -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyRenderPass)
-    (castFunPtr @_ @(Ptr Device_T -> RenderPass -> ("pGranularity" ::: Ptr Extent2D) -> IO ()) vkGetRenderAreaGranularity)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr CommandPoolCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pCommandPool" ::: Ptr CommandPool) -> IO Result) vkCreateCommandPool)
-    (castFunPtr @_ @(Ptr Device_T -> CommandPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyCommandPool)
-    (castFunPtr @_ @(Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result) vkResetCommandPool)
-    (castFunPtr @_ @(Ptr Device_T -> ("pAllocateInfo" ::: Ptr CommandBufferAllocateInfo) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO Result) vkAllocateCommandBuffers)
-    (castFunPtr @_ @(Ptr Device_T -> CommandPool -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO ()) vkFreeCommandBuffers)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pBeginInfo" ::: Ptr (CommandBufferBeginInfo _)) -> IO Result) vkBeginCommandBuffer)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> IO Result) vkEndCommandBuffer)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> CommandBufferResetFlags -> IO Result) vkResetCommandBuffer)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> IO ()) vkCmdBindPipeline)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewports" ::: Ptr Viewport) -> IO ()) vkCmdSetViewport)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstScissor" ::: Word32) -> ("scissorCount" ::: Word32) -> ("pScissors" ::: Ptr Rect2D) -> IO ()) vkCmdSetScissor)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("lineWidth" ::: CFloat) -> IO ()) vkCmdSetLineWidth)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("depthBiasConstantFactor" ::: CFloat) -> ("depthBiasClamp" ::: CFloat) -> ("depthBiasSlopeFactor" ::: CFloat) -> IO ()) vkCmdSetDepthBias)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("blendConstants" ::: Ptr (FixedArray 4 CFloat)) -> IO ()) vkCmdSetBlendConstants)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("minDepthBounds" ::: CFloat) -> ("maxDepthBounds" ::: CFloat) -> IO ()) vkCmdSetDepthBounds)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("compareMask" ::: Word32) -> IO ()) vkCmdSetStencilCompareMask)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("writeMask" ::: Word32) -> IO ()) vkCmdSetStencilWriteMask)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("reference" ::: Word32) -> IO ()) vkCmdSetStencilReference)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> ("firstSet" ::: Word32) -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> ("dynamicOffsetCount" ::: Word32) -> ("pDynamicOffsets" ::: Ptr Word32) -> IO ()) vkCmdBindDescriptorSets)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> IndexType -> IO ()) vkCmdBindIndexBuffer)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> IO ()) vkCmdBindVertexBuffers)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ()) vkCmdDraw)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ()) vkCmdDrawIndexed)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndirect)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndexedIndirect)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()) vkCmdDispatch)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> IO ()) vkCmdDispatchIndirect)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcBuffer" ::: Buffer) -> ("dstBuffer" ::: Buffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferCopy) -> IO ()) vkCmdCopyBuffer)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageCopy) -> IO ()) vkCmdCopyImage)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageBlit) -> Filter -> IO ()) vkCmdBlitImage)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcBuffer" ::: Buffer) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferImageCopy) -> IO ()) vkCmdCopyBufferToImage)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstBuffer" ::: Buffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferImageCopy) -> IO ()) vkCmdCopyImageToBuffer)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("dataSize" ::: DeviceSize) -> ("pData" ::: Ptr ()) -> IO ()) vkCmdUpdateBuffer)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> DeviceSize -> ("data" ::: Word32) -> IO ()) vkCmdFillBuffer)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Image -> ImageLayout -> ("pColor" ::: Ptr ClearColorValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr ImageSubresourceRange) -> IO ()) vkCmdClearColorImage)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Image -> ImageLayout -> ("pDepthStencil" ::: Ptr ClearDepthStencilValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr ImageSubresourceRange) -> IO ()) vkCmdClearDepthStencilImage)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("attachmentCount" ::: Word32) -> ("pAttachments" ::: Ptr ClearAttachment) -> ("rectCount" ::: Word32) -> ("pRects" ::: Ptr ClearRect) -> IO ()) vkCmdClearAttachments)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageResolve) -> IO ()) vkCmdResolveImage)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Event -> ("stageMask" ::: PipelineStageFlags) -> IO ()) vkCmdSetEvent)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Event -> ("stageMask" ::: PipelineStageFlags) -> IO ()) vkCmdResetEvent)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("eventCount" ::: Word32) -> ("pEvents" ::: Ptr Event) -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr MemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr BufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr (ImageMemoryBarrier _)) -> IO ()) vkCmdWaitEvents)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> DependencyFlags -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr MemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr BufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr (ImageMemoryBarrier _)) -> IO ()) vkCmdPipelineBarrier)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> IO ()) vkCmdBeginQuery)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> IO ()) vkCmdEndQuery)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pConditionalRenderingBegin" ::: Ptr ConditionalRenderingBeginInfoEXT) -> IO ()) vkCmdBeginConditionalRenderingEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> IO ()) vkCmdEndConditionalRenderingEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ()) vkCmdResetQueryPool)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> ("query" ::: Word32) -> IO ()) vkCmdWriteTimestamp)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> IO ()) vkCmdCopyQueryPoolResults)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("pValues" ::: Ptr ()) -> IO ()) vkCmdPushConstants)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pRenderPassBegin" ::: Ptr (RenderPassBeginInfo _)) -> SubpassContents -> IO ()) vkCmdBeginRenderPass)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> SubpassContents -> IO ()) vkCmdNextSubpass)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> IO ()) vkCmdEndRenderPass)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO ()) vkCmdExecuteCommands)
-    (castFunPtr @_ @(Ptr Device_T -> ("swapchainCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (SwapchainCreateInfoKHR _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSwapchains" ::: Ptr SwapchainKHR) -> IO Result) vkCreateSharedSwapchainsKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (SwapchainCreateInfoKHR _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSwapchain" ::: Ptr SwapchainKHR) -> IO Result) vkCreateSwapchainKHR)
-    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroySwapchainKHR)
-    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("pSwapchainImageCount" ::: Ptr Word32) -> ("pSwapchainImages" ::: Ptr Image) -> IO Result) vkGetSwapchainImagesKHR)
-    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("timeout" ::: Word64) -> Semaphore -> Fence -> ("pImageIndex" ::: Ptr Word32) -> IO Result) vkAcquireNextImageKHR)
-    (castFunPtr @_ @(Ptr Queue_T -> ("pPresentInfo" ::: Ptr (PresentInfoKHR _)) -> IO Result) vkQueuePresentKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pNameInfo" ::: Ptr DebugMarkerObjectNameInfoEXT) -> IO Result) vkDebugMarkerSetObjectNameEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("pTagInfo" ::: Ptr DebugMarkerObjectTagInfoEXT) -> IO Result) vkDebugMarkerSetObjectTagEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr DebugMarkerMarkerInfoEXT) -> IO ()) vkCmdDebugMarkerBeginEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> IO ()) vkCmdDebugMarkerEndEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr DebugMarkerMarkerInfoEXT) -> IO ()) vkCmdDebugMarkerInsertEXT)
-    (castFunPtr @_ @(Ptr Device_T -> DeviceMemory -> ExternalMemoryHandleTypeFlagsNV -> ("pHandle" ::: Ptr HANDLE) -> IO Result) vkGetMemoryWin32HandleNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("isPreprocessed" ::: Bool32) -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV) -> IO ()) vkCmdExecuteGeneratedCommandsNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV) -> IO ()) vkCmdPreprocessGeneratedCommandsNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> ("groupIndex" ::: Word32) -> IO ()) vkCmdBindPipelineShaderGroupNV)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 _)) -> IO ()) vkGetGeneratedCommandsMemoryRequirementsNV)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV) -> IO Result) vkCreateIndirectCommandsLayoutNV)
-    (castFunPtr @_ @(Ptr Device_T -> IndirectCommandsLayoutNV -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyIndirectCommandsLayoutNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> ("set" ::: Word32) -> ("descriptorWriteCount" ::: Word32) -> ("pDescriptorWrites" ::: Ptr (WriteDescriptorSet _)) -> IO ()) vkCmdPushDescriptorSetKHR)
-    (castFunPtr @_ @(Ptr Device_T -> CommandPool -> CommandPoolTrimFlags -> IO ()) vkTrimCommandPool)
-    (castFunPtr @_ @(Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr MemoryGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result) vkGetMemoryWin32HandleKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> HANDLE -> ("pMemoryWin32HandleProperties" ::: Ptr MemoryWin32HandlePropertiesKHR) -> IO Result) vkGetMemoryWin32HandlePropertiesKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pGetFdInfo" ::: Ptr MemoryGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result) vkGetMemoryFdKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("fd" ::: CInt) -> ("pMemoryFdProperties" ::: Ptr MemoryFdPropertiesKHR) -> IO Result) vkGetMemoryFdPropertiesKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr SemaphoreGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result) vkGetSemaphoreWin32HandleKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pImportSemaphoreWin32HandleInfo" ::: Ptr ImportSemaphoreWin32HandleInfoKHR) -> IO Result) vkImportSemaphoreWin32HandleKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pGetFdInfo" ::: Ptr SemaphoreGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result) vkGetSemaphoreFdKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pImportSemaphoreFdInfo" ::: Ptr ImportSemaphoreFdInfoKHR) -> IO Result) vkImportSemaphoreFdKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr FenceGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result) vkGetFenceWin32HandleKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pImportFenceWin32HandleInfo" ::: Ptr ImportFenceWin32HandleInfoKHR) -> IO Result) vkImportFenceWin32HandleKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pGetFdInfo" ::: Ptr FenceGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result) vkGetFenceFdKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pImportFenceFdInfo" ::: Ptr ImportFenceFdInfoKHR) -> IO Result) vkImportFenceFdKHR)
-    (castFunPtr @_ @(Ptr Device_T -> DisplayKHR -> ("pDisplayPowerInfo" ::: Ptr DisplayPowerInfoEXT) -> IO Result) vkDisplayPowerControlEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("pDeviceEventInfo" ::: Ptr DeviceEventInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result) vkRegisterDeviceEventEXT)
-    (castFunPtr @_ @(Ptr Device_T -> DisplayKHR -> ("pDisplayEventInfo" ::: Ptr DisplayEventInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result) vkRegisterDisplayEventEXT)
-    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> SurfaceCounterFlagBitsEXT -> ("pCounterValue" ::: Ptr Word64) -> IO Result) vkGetSwapchainCounterEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("heapIndex" ::: Word32) -> ("localDeviceIndex" ::: Word32) -> ("remoteDeviceIndex" ::: Word32) -> ("pPeerMemoryFeatures" ::: Ptr PeerMemoryFeatureFlags) -> IO ()) vkGetDeviceGroupPeerMemoryFeatures)
-    (castFunPtr @_ @(Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr (BindBufferMemoryInfo _)) -> IO Result) vkBindBufferMemory2)
-    (castFunPtr @_ @(Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr (BindImageMemoryInfo _)) -> IO Result) vkBindImageMemory2)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("deviceMask" ::: Word32) -> IO ()) vkCmdSetDeviceMask)
-    (castFunPtr @_ @(Ptr Device_T -> ("pDeviceGroupPresentCapabilities" ::: Ptr DeviceGroupPresentCapabilitiesKHR) -> IO Result) vkGetDeviceGroupPresentCapabilitiesKHR)
-    (castFunPtr @_ @(Ptr Device_T -> SurfaceKHR -> ("pModes" ::: Ptr DeviceGroupPresentModeFlagsKHR) -> IO Result) vkGetDeviceGroupSurfacePresentModesKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pAcquireInfo" ::: Ptr AcquireNextImageInfoKHR) -> ("pImageIndex" ::: Ptr Word32) -> IO Result) vkAcquireNextImage2KHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("baseGroupX" ::: Word32) -> ("baseGroupY" ::: Word32) -> ("baseGroupZ" ::: Word32) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()) vkCmdDispatchBase)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate) -> IO Result) vkCreateDescriptorUpdateTemplate)
-    (castFunPtr @_ @(Ptr Device_T -> DescriptorUpdateTemplate -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDescriptorUpdateTemplate)
-    (castFunPtr @_ @(Ptr Device_T -> DescriptorSet -> DescriptorUpdateTemplate -> ("pData" ::: Ptr ()) -> IO ()) vkUpdateDescriptorSetWithTemplate)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> DescriptorUpdateTemplate -> PipelineLayout -> ("set" ::: Word32) -> ("pData" ::: Ptr ()) -> IO ()) vkCmdPushDescriptorSetWithTemplateKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("swapchainCount" ::: Word32) -> ("pSwapchains" ::: Ptr SwapchainKHR) -> ("pMetadata" ::: Ptr HdrMetadataEXT) -> IO ()) vkSetHdrMetadataEXT)
-    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> IO Result) vkGetSwapchainStatusKHR)
-    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE) -> IO Result) vkGetRefreshCycleDurationGOOGLE)
-    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("pPresentationTimingCount" ::: Ptr Word32) -> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE) -> IO Result) vkGetPastPresentationTimingGOOGLE)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewportWScalings" ::: Ptr ViewportWScalingNV) -> IO ()) vkCmdSetViewportWScalingNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstDiscardRectangle" ::: Word32) -> ("discardRectangleCount" ::: Word32) -> ("pDiscardRectangles" ::: Ptr Rect2D) -> IO ()) vkCmdSetDiscardRectangleEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pSampleLocationsInfo" ::: Ptr SampleLocationsInfoEXT) -> IO ()) vkCmdSetSampleLocationsEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr BufferMemoryRequirementsInfo2) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 _)) -> IO ()) vkGetBufferMemoryRequirements2)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr (ImageMemoryRequirementsInfo2 _)) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 _)) -> IO ()) vkGetImageMemoryRequirements2)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr ImageSparseMemoryRequirementsInfo2) -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements2) -> IO ()) vkGetImageSparseMemoryRequirements2)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (SamplerYcbcrConversionCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pYcbcrConversion" ::: Ptr SamplerYcbcrConversion) -> IO Result) vkCreateSamplerYcbcrConversion)
-    (castFunPtr @_ @(Ptr Device_T -> SamplerYcbcrConversion -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroySamplerYcbcrConversion)
-    (castFunPtr @_ @(Ptr Device_T -> ("pQueueInfo" ::: Ptr DeviceQueueInfo2) -> ("pQueue" ::: Ptr (Ptr Queue_T)) -> IO ()) vkGetDeviceQueue2)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr ValidationCacheCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pValidationCache" ::: Ptr ValidationCacheEXT) -> IO Result) vkCreateValidationCacheEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ValidationCacheEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyValidationCacheEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ValidationCacheEXT -> ("pDataSize" ::: Ptr CSize) -> ("pData" ::: Ptr ()) -> IO Result) vkGetValidationCacheDataEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("dstCache" ::: ValidationCacheEXT) -> ("srcCacheCount" ::: Word32) -> ("pSrcCaches" ::: Ptr ValidationCacheEXT) -> IO Result) vkMergeValidationCachesEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorSetLayoutCreateInfo _)) -> ("pSupport" ::: Ptr (DescriptorSetLayoutSupport _)) -> IO ()) vkGetDescriptorSetLayoutSupport)
-    (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ShaderStageFlagBits -> ShaderInfoTypeAMD -> ("pInfoSize" ::: Ptr CSize) -> ("pInfo" ::: Ptr ()) -> IO Result) vkGetShaderInfoAMD)
-    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("localDimmingEnable" ::: Bool32) -> IO ()) vkSetLocalDimmingAMD)
-    (castFunPtr @_ @(Ptr Device_T -> ("timestampCount" ::: Word32) -> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT) -> ("pTimestamps" ::: Ptr Word64) -> ("pMaxDeviation" ::: Ptr Word64) -> IO Result) vkGetCalibratedTimestampsEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result) vkSetDebugUtilsObjectNameEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result) vkSetDebugUtilsObjectTagEXT)
-    (castFunPtr @_ @(Ptr Queue_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ()) vkQueueBeginDebugUtilsLabelEXT)
-    (castFunPtr @_ @(Ptr Queue_T -> IO ()) vkQueueEndDebugUtilsLabelEXT)
-    (castFunPtr @_ @(Ptr Queue_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ()) vkQueueInsertDebugUtilsLabelEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ()) vkCmdBeginDebugUtilsLabelEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> IO ()) vkCmdEndDebugUtilsLabelEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ()) vkCmdInsertDebugUtilsLabelEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("pHostPointer" ::: Ptr ()) -> ("pMemoryHostPointerProperties" ::: Ptr MemoryHostPointerPropertiesEXT) -> IO Result) vkGetMemoryHostPointerPropertiesEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineStageFlagBits -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("marker" ::: Word32) -> IO ()) vkCmdWriteBufferMarkerAMD)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (RenderPassCreateInfo2 _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pRenderPass" ::: Ptr RenderPass) -> IO Result) vkCreateRenderPass2)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pRenderPassBegin" ::: Ptr (RenderPassBeginInfo _)) -> ("pSubpassBeginInfo" ::: Ptr SubpassBeginInfo) -> IO ()) vkCmdBeginRenderPass2)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pSubpassBeginInfo" ::: Ptr SubpassBeginInfo) -> ("pSubpassEndInfo" ::: Ptr SubpassEndInfo) -> IO ()) vkCmdNextSubpass2)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pSubpassEndInfo" ::: Ptr SubpassEndInfo) -> IO ()) vkCmdEndRenderPass2)
-    (castFunPtr @_ @(Ptr Device_T -> Semaphore -> ("pValue" ::: Ptr Word64) -> IO Result) vkGetSemaphoreCounterValue)
-    (castFunPtr @_ @(Ptr Device_T -> ("pWaitInfo" ::: Ptr SemaphoreWaitInfo) -> ("timeout" ::: Word64) -> IO Result) vkWaitSemaphores)
-    (castFunPtr @_ @(Ptr Device_T -> ("pSignalInfo" ::: Ptr SemaphoreSignalInfo) -> IO Result) vkSignalSemaphore)
-    (castFunPtr @_ @(Ptr Device_T -> Ptr AHardwareBuffer -> ("pProperties" ::: Ptr (AndroidHardwareBufferPropertiesANDROID _)) -> IO Result) vkGetAndroidHardwareBufferPropertiesANDROID)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr MemoryGetAndroidHardwareBufferInfoANDROID) -> ("pBuffer" ::: Ptr (Ptr AHardwareBuffer)) -> IO Result) vkGetMemoryAndroidHardwareBufferANDROID)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndirectCount)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndexedIndirectCount)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pCheckpointMarker" ::: Ptr ()) -> IO ()) vkCmdSetCheckpointNV)
-    (castFunPtr @_ @(Ptr Queue_T -> ("pCheckpointDataCount" ::: Ptr Word32) -> ("pCheckpointData" ::: Ptr CheckpointDataNV) -> IO ()) vkGetQueueCheckpointDataNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> ("pSizes" ::: Ptr DeviceSize) -> IO ()) vkCmdBindTransformFeedbackBuffersEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstCounterBuffer" ::: Word32) -> ("counterBufferCount" ::: Word32) -> ("pCounterBuffers" ::: Ptr Buffer) -> ("pCounterBufferOffsets" ::: Ptr DeviceSize) -> IO ()) vkCmdBeginTransformFeedbackEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstCounterBuffer" ::: Word32) -> ("counterBufferCount" ::: Word32) -> ("pCounterBuffers" ::: Ptr Buffer) -> ("pCounterBufferOffsets" ::: Ptr DeviceSize) -> IO ()) vkCmdEndTransformFeedbackEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> ("index" ::: Word32) -> IO ()) vkCmdBeginQueryIndexedEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> ("index" ::: Word32) -> IO ()) vkCmdEndQueryIndexedEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("counterBuffer" ::: Buffer) -> ("counterBufferOffset" ::: DeviceSize) -> ("counterOffset" ::: Word32) -> ("vertexStride" ::: Word32) -> IO ()) vkCmdDrawIndirectByteCountEXT)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstExclusiveScissor" ::: Word32) -> ("exclusiveScissorCount" ::: Word32) -> ("pExclusiveScissors" ::: Ptr Rect2D) -> IO ()) vkCmdSetExclusiveScissorNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ()) vkCmdBindShadingRateImageNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pShadingRatePalettes" ::: Ptr ShadingRatePaletteNV) -> IO ()) vkCmdSetViewportShadingRatePaletteNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> CoarseSampleOrderTypeNV -> ("customSampleOrderCount" ::: Word32) -> ("pCustomSampleOrders" ::: Ptr CoarseSampleOrderCustomNV) -> IO ()) vkCmdSetCoarseSampleOrderNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("taskCount" ::: Word32) -> ("firstTask" ::: Word32) -> IO ()) vkCmdDrawMeshTasksNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawMeshTasksIndirectNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawMeshTasksIndirectCountNV)
-    (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ("shader" ::: Word32) -> IO Result) vkCompileDeferredNV)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoNV) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureNV) -> IO Result) vkCreateAccelerationStructureNV)
-    (castFunPtr @_ @(Ptr Device_T -> AccelerationStructureKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyAccelerationStructureKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureMemoryRequirementsInfoKHR) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 _)) -> IO ()) vkGetAccelerationStructureMemoryRequirementsKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureMemoryRequirementsInfoNV) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2KHR _)) -> IO ()) vkGetAccelerationStructureMemoryRequirementsNV)
-    (castFunPtr @_ @(Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr BindAccelerationStructureMemoryInfoKHR) -> IO Result) vkBindAccelerationStructureMemoryKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> CopyAccelerationStructureModeKHR -> IO ()) vkCmdCopyAccelerationStructureNV)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureInfoKHR _)) -> IO ()) vkCmdCopyAccelerationStructureKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureInfoKHR _)) -> IO Result) vkCopyAccelerationStructureKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureToMemoryInfoKHR _)) -> IO ()) vkCmdCopyAccelerationStructureToMemoryKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureToMemoryInfoKHR _)) -> IO Result) vkCopyAccelerationStructureToMemoryKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyMemoryToAccelerationStructureInfoKHR _)) -> IO ()) vkCmdCopyMemoryToAccelerationStructureKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr (CopyMemoryToAccelerationStructureInfoKHR _)) -> IO Result) vkCopyMemoryToAccelerationStructureKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("accelerationStructureCount" ::: Word32) -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR) -> QueryType -> QueryPool -> ("firstQuery" ::: Word32) -> IO ()) vkCmdWriteAccelerationStructuresPropertiesKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pInfo" ::: Ptr AccelerationStructureInfoNV) -> ("instanceData" ::: Buffer) -> ("instanceOffset" ::: DeviceSize) -> ("update" ::: Bool32) -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> ("scratch" ::: Buffer) -> ("scratchOffset" ::: DeviceSize) -> IO ()) vkCmdBuildAccelerationStructureNV)
-    (castFunPtr @_ @(Ptr Device_T -> ("accelerationStructureCount" ::: Word32) -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR) -> QueryType -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> ("stride" ::: CSize) -> IO Result) vkWriteAccelerationStructuresPropertiesKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pRaygenShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pMissShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pHitShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pCallableShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> IO ()) vkCmdTraceRaysKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("raygenShaderBindingTableBuffer" ::: Buffer) -> ("raygenShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingTableBuffer" ::: Buffer) -> ("missShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingStride" ::: DeviceSize) -> ("hitShaderBindingTableBuffer" ::: Buffer) -> ("hitShaderBindingOffset" ::: DeviceSize) -> ("hitShaderBindingStride" ::: DeviceSize) -> ("callableShaderBindingTableBuffer" ::: Buffer) -> ("callableShaderBindingOffset" ::: DeviceSize) -> ("callableShaderBindingStride" ::: DeviceSize) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> IO ()) vkCmdTraceRaysNV)
-    (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result) vkGetRayTracingShaderGroupHandlesKHR)
-    (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result) vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)
-    (castFunPtr @_ @(Ptr Device_T -> AccelerationStructureKHR -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result) vkGetAccelerationStructureHandleNV)
-    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (RayTracingPipelineCreateInfoNV _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result) vkCreateRayTracingPipelinesNV)
-    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (RayTracingPipelineCreateInfoKHR _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result) vkCreateRayTracingPipelinesKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pRaygenShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pMissShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pHitShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pCallableShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> Buffer -> ("offset" ::: DeviceSize) -> IO ()) vkCmdTraceRaysIndirectKHR)
-    (castFunPtr @_ @(Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result) vkGetDeviceAccelerationStructureCompatibilityKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr ImageViewHandleInfoNVX) -> IO Word32) vkGetImageViewHandleNVX)
-    (castFunPtr @_ @(Ptr Device_T -> ImageView -> ("pProperties" ::: Ptr ImageViewAddressPropertiesNVX) -> IO Result) vkGetImageViewAddressNVX)
-    (castFunPtr @_ @(Ptr Device_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR _)) -> ("pModes" ::: Ptr DeviceGroupPresentModeFlagsKHR) -> IO Result) vkGetDeviceGroupSurfacePresentModes2EXT)
-    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> IO Result) vkAcquireFullScreenExclusiveModeEXT)
-    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> IO Result) vkReleaseFullScreenExclusiveModeEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr AcquireProfilingLockInfoKHR) -> IO Result) vkAcquireProfilingLockKHR)
-    (castFunPtr @_ @(Ptr Device_T -> IO ()) vkReleaseProfilingLockKHR)
-    (castFunPtr @_ @(Ptr Device_T -> Image -> ("pProperties" ::: Ptr ImageDrmFormatModifierPropertiesEXT) -> IO Result) vkGetImageDrmFormatModifierPropertiesEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr BufferDeviceAddressInfo) -> IO Word64) vkGetBufferOpaqueCaptureAddress)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr BufferDeviceAddressInfo) -> IO DeviceAddress) vkGetBufferDeviceAddress)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInitializeInfo" ::: Ptr InitializePerformanceApiInfoINTEL) -> IO Result) vkInitializePerformanceApiINTEL)
-    (castFunPtr @_ @(Ptr Device_T -> IO ()) vkUninitializePerformanceApiINTEL)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr PerformanceMarkerInfoINTEL) -> IO Result) vkCmdSetPerformanceMarkerINTEL)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr PerformanceStreamMarkerInfoINTEL) -> IO Result) vkCmdSetPerformanceStreamMarkerINTEL)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pOverrideInfo" ::: Ptr PerformanceOverrideInfoINTEL) -> IO Result) vkCmdSetPerformanceOverrideINTEL)
-    (castFunPtr @_ @(Ptr Device_T -> ("pAcquireInfo" ::: Ptr PerformanceConfigurationAcquireInfoINTEL) -> ("pConfiguration" ::: Ptr PerformanceConfigurationINTEL) -> IO Result) vkAcquirePerformanceConfigurationINTEL)
-    (castFunPtr @_ @(Ptr Device_T -> PerformanceConfigurationINTEL -> IO Result) vkReleasePerformanceConfigurationINTEL)
-    (castFunPtr @_ @(Ptr Queue_T -> PerformanceConfigurationINTEL -> IO Result) vkQueueSetPerformanceConfigurationINTEL)
-    (castFunPtr @_ @(Ptr Device_T -> PerformanceParameterTypeINTEL -> ("pValue" ::: Ptr PerformanceValueINTEL) -> IO Result) vkGetPerformanceParameterINTEL)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr DeviceMemoryOpaqueCaptureAddressInfo) -> IO Word64) vkGetDeviceMemoryOpaqueCaptureAddress)
-    (castFunPtr @_ @(Ptr Device_T -> ("pPipelineInfo" ::: Ptr PipelineInfoKHR) -> ("pExecutableCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr PipelineExecutablePropertiesKHR) -> IO Result) vkGetPipelineExecutablePropertiesKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pStatisticCount" ::: Ptr Word32) -> ("pStatistics" ::: Ptr PipelineExecutableStatisticKHR) -> IO Result) vkGetPipelineExecutableStatisticsKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pInternalRepresentationCount" ::: Ptr Word32) -> ("pInternalRepresentations" ::: Ptr PipelineExecutableInternalRepresentationKHR) -> IO Result) vkGetPipelineExecutableInternalRepresentationsKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("lineStippleFactor" ::: Word32) -> ("lineStipplePattern" ::: Word16) -> IO ()) vkCmdSetLineStippleEXT)
-    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result) vkCreateAccelerationStructureKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR _)) -> ("ppOffsetInfos" ::: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) -> IO ()) vkCmdBuildAccelerationStructureKHR)
-    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR _)) -> ("indirectBuffer" ::: Buffer) -> ("indirectOffset" ::: DeviceSize) -> ("indirectStride" ::: Word32) -> IO ()) vkCmdBuildAccelerationStructureIndirectKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR _)) -> ("ppOffsetInfos" ::: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) -> IO Result) vkBuildAccelerationStructureKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR) -> IO DeviceAddress) vkGetAccelerationStructureDeviceAddressKHR)
-    (castFunPtr @_ @(Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDeferredOperation" ::: Ptr DeferredOperationKHR) -> IO Result) vkCreateDeferredOperationKHR)
-    (castFunPtr @_ @(Ptr Device_T -> DeferredOperationKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDeferredOperationKHR)
-    (castFunPtr @_ @(Ptr Device_T -> DeferredOperationKHR -> IO Word32) vkGetDeferredOperationMaxConcurrencyKHR)
-    (castFunPtr @_ @(Ptr Device_T -> DeferredOperationKHR -> IO Result) vkGetDeferredOperationResultKHR)
-    (castFunPtr @_ @(Ptr Device_T -> DeferredOperationKHR -> IO Result) vkDeferredOperationJoinKHR)
-
diff --git a/src/Graphics/Vulkan/Dynamic.hs-boot b/src/Graphics/Vulkan/Dynamic.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Dynamic.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Dynamic  ( InstanceCmds
-                                , DeviceCmds
-                                ) where
-
-
-
-data InstanceCmds
-
-data DeviceCmds
-
diff --git a/src/Graphics/Vulkan/Exception.hs b/src/Graphics/Vulkan/Exception.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Exception.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Exception  (VulkanException(..)) where
-
-import GHC.Exception.Type (Exception(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
--- | This exception is thrown from calls to marshalled Vulkan commands
--- which return a negative VkResult.
-newtype VulkanException = VulkanException { vulkanExceptionResult :: Result }
-  deriving (Eq, Ord, Read, Show)
-
-instance Exception VulkanException where
-  displayException (VulkanException r) = show r ++ ": " ++ resultString r
-
--- | A human understandable message for each VkResult
-resultString :: Result -> String
-resultString = \case
-  SUCCESS -> "Command successfully completed"
-  NOT_READY -> "A fence or query has not yet completed"
-  TIMEOUT -> "A wait operation has not completed in the specified time"
-  EVENT_SET -> "An event is signaled"
-  EVENT_RESET -> "An event is unsignaled"
-  INCOMPLETE -> "A return array was too small for the result"
-  ERROR_OUT_OF_HOST_MEMORY -> "A host memory allocation has failed"
-  ERROR_OUT_OF_DEVICE_MEMORY -> "A device memory allocation has failed"
-  ERROR_INITIALIZATION_FAILED -> "Initialization of an object could not be completed for implementation-specific reasons"
-  ERROR_DEVICE_LOST -> "The logical or physical device has been lost"
-  ERROR_MEMORY_MAP_FAILED -> "Mapping of a memory object has failed"
-  ERROR_LAYER_NOT_PRESENT -> "A requested layer is not present or could not be loaded"
-  ERROR_EXTENSION_NOT_PRESENT -> "A requested extension is not supported"
-  ERROR_FEATURE_NOT_PRESENT -> "A requested feature is not supported"
-  ERROR_INCOMPATIBLE_DRIVER -> "The requested version of Vulkan is not supported by the driver or is otherwise incompatible for implementation-specific reasons"
-  ERROR_TOO_MANY_OBJECTS -> "Too many objects of the type have already been created"
-  ERROR_FORMAT_NOT_SUPPORTED -> "A requested format is not supported on this device"
-  ERROR_FRAGMENTED_POOL -> "A pool allocation has failed due to fragmentation of the pool's memory"
-  ERROR_UNKNOWN -> "An unknown error has occurred; either the application has provided invalid input, or an implementation failure has occurred"
-  PIPELINE_COMPILE_REQUIRED_EXT -> "A requested pipeline creation would have required compilation, but the application requested compilation to not be performed"
-  OPERATION_NOT_DEFERRED_KHR -> "A deferred operation was requested and no operations were deferred"
-  OPERATION_DEFERRED_KHR -> "A deferred operation was requested and at least some of the work was deferred"
-  THREAD_DONE_KHR -> "A deferred operation is not complete but there is no work remaining to assign to additional threads"
-  THREAD_IDLE_KHR -> "A deferred operation is not complete but there is currently no work for this thread to do at the time of this call"
-  ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT -> "An operation on a swapchain created with VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT failed as it did not have exlusive full-screen access"
-  ERROR_INVALID_SHADER_NV -> "One or more shaders failed to compile or link"
-  ERROR_INCOMPATIBLE_DISPLAY_KHR -> "The display used by a swapchain does not use the same presentable image layout, or is incompatible in a way that prevents sharing an image"
-  ERROR_OUT_OF_DATE_KHR -> "A surface has changed in such a way that it is no longer compatible with the swapchain, and further presentation requests using the swapchain will fail"
-  SUBOPTIMAL_KHR -> "A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully"
-  ERROR_NATIVE_WINDOW_IN_USE_KHR -> "The requested window is already in use by Vulkan or another API in a manner which prevents it from being used again"
-  ERROR_SURFACE_LOST_KHR -> "A surface is no longer available"
-  ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS -> "A buffer creation or memory allocation failed because the requested address is not available"
-  ERROR_FRAGMENTATION -> "A descriptor pool creation has failed due to fragmentation"
-  ERROR_INVALID_EXTERNAL_HANDLE -> "An external handle is not a valid handle of the specified type"
-  ERROR_OUT_OF_POOL_MEMORY -> "A pool memory allocation has failed"
-  r -> show r
-
diff --git a/src/Graphics/Vulkan/Extensions.hs b/src/Graphics/Vulkan/Extensions.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions.hs
+++ /dev/null
@@ -1,413 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions  ( module Graphics.Vulkan.Extensions.Handles
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_buffer_marker
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_gcn_shader
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_half_float
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_int16
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_memory_overallocation_behavior
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_mixed_attachment_samples
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_negative_viewport_height
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_pipeline_compiler_control
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_rasterization_order
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_shader_ballot
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties2
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_shader_fragment_mask
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_shader_image_load_store_lod
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_shader_info
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_shader_trinary_minmax
-                                   , module Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
-                                   , module Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_debug_marker
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_debug_report
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_debug_utils
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_depth_range_unrestricted
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_display_control
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_external_memory_dma_buf
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_external_memory_host
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_filter_cubic
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_global_priority
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_headless_surface
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_host_query_reset
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_line_rasterization
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_memory_budget
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_memory_priority
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_metal_surface
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_pci_bus_info
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_post_depth_coverage
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_queue_family_foreign
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_robustness2
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_sample_locations
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_scalar_block_layout
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_separate_stencil_usage
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_shader_stencil_export
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_ballot
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_vote
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_tooling_info
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_transform_feedback
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_validation_cache
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_validation_features
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_validation_flags
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor
-                                   , module Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays
-                                   , module Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface
-                                   , module Graphics.Vulkan.Extensions.VK_GGP_frame_token
-                                   , module Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface
-                                   , module Graphics.Vulkan.Extensions.VK_GOOGLE_decorate_string
-                                   , module Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing
-                                   , module Graphics.Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1
-                                   , module Graphics.Vulkan.Extensions.VK_GOOGLE_user_type
-                                   , module Graphics.Vulkan.Extensions.VK_IMG_filter_cubic
-                                   , module Graphics.Vulkan.Extensions.VK_IMG_format_pvrtc
-                                   , module Graphics.Vulkan.Extensions.VK_INTEL_performance_query
-                                   , module Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_16bit_storage
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_8bit_storage
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_android_surface
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_bind_memory2
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_dedicated_allocation
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_depth_stencil_resolve
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_device_group
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_device_group_creation
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_display
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_display_swapchain
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_driver_properties
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_fence
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_memory
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_image_format_list
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_imageless_framebuffer
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_incremental_present
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_maintenance1
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_maintenance2
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_maintenance3
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_multiview
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_performance_query
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_pipeline_library
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_push_descriptor
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_ray_tracing
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_relaxed_block_layout
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_shader_atomic_int64
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_shader_clock
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_shader_draw_parameters
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_shader_float16_int8
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_shader_float_controls
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_shader_non_semantic_info
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_shader_subgroup_extended_types
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_spirv_1_4
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_storage_buffer_storage_class
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_surface
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_swapchain
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_swapchain_mutable_format
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_timeline_semaphore
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_uniform_buffer_standard_layout
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_variable_pointers
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_vulkan_memory_model
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_wayland_surface
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_win32_surface
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_xcb_surface
-                                   , module Graphics.Vulkan.Extensions.VK_KHR_xlib_surface
-                                   , module Graphics.Vulkan.Extensions.VK_MVK_ios_surface
-                                   , module Graphics.Vulkan.Extensions.VK_MVK_macos_surface
-                                   , module Graphics.Vulkan.Extensions.VK_NN_vi_surface
-                                   , module Graphics.Vulkan.Extensions.VK_NVX_image_view_handle
-                                   , module Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes
-                                   , module Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling
-                                   , module Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives
-                                   , module Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix
-                                   , module Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image
-                                   , module Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode
-                                   , module Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation
-                                   , module Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing
-                                   , module Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints
-                                   , module Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config
-                                   , module Graphics.Vulkan.Extensions.VK_NV_device_generated_commands
-                                   , module Graphics.Vulkan.Extensions.VK_NV_external_memory
-                                   , module Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities
-                                   , module Graphics.Vulkan.Extensions.VK_NV_external_memory_win32
-                                   , module Graphics.Vulkan.Extensions.VK_NV_fill_rectangle
-                                   , module Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color
-                                   , module Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric
-                                   , module Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples
-                                   , module Graphics.Vulkan.Extensions.VK_NV_geometry_shader_passthrough
-                                   , module Graphics.Vulkan.Extensions.VK_NV_glsl_shader
-                                   , module Graphics.Vulkan.Extensions.VK_NV_mesh_shader
-                                   , module Graphics.Vulkan.Extensions.VK_NV_ray_tracing
-                                   , module Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test
-                                   , module Graphics.Vulkan.Extensions.VK_NV_sample_mask_override_coverage
-                                   , module Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive
-                                   , module Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint
-                                   , module Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins
-                                   , module Graphics.Vulkan.Extensions.VK_NV_shader_subgroup_partitioned
-                                   , module Graphics.Vulkan.Extensions.VK_NV_shading_rate_image
-                                   , module Graphics.Vulkan.Extensions.VK_NV_viewport_array2
-                                   , module Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle
-                                   , module Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex
-                                   , module Graphics.Vulkan.Extensions.VK_QCOM_render_pass_shader_resolve
-                                   , module Graphics.Vulkan.Extensions.VK_QCOM_render_pass_store_ops
-                                   , module Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform
-                                   , module Graphics.Vulkan.Extensions.WSITypes
-                                   ) where
-import Graphics.Vulkan.Extensions.Handles
-import Graphics.Vulkan.Extensions.VK_AMD_buffer_marker
-import Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory
-import Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr
-import Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count
-import Graphics.Vulkan.Extensions.VK_AMD_gcn_shader
-import Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_half_float
-import Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_int16
-import Graphics.Vulkan.Extensions.VK_AMD_memory_overallocation_behavior
-import Graphics.Vulkan.Extensions.VK_AMD_mixed_attachment_samples
-import Graphics.Vulkan.Extensions.VK_AMD_negative_viewport_height
-import Graphics.Vulkan.Extensions.VK_AMD_pipeline_compiler_control
-import Graphics.Vulkan.Extensions.VK_AMD_rasterization_order
-import Graphics.Vulkan.Extensions.VK_AMD_shader_ballot
-import Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties
-import Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties2
-import Graphics.Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter
-import Graphics.Vulkan.Extensions.VK_AMD_shader_fragment_mask
-import Graphics.Vulkan.Extensions.VK_AMD_shader_image_load_store_lod
-import Graphics.Vulkan.Extensions.VK_AMD_shader_info
-import Graphics.Vulkan.Extensions.VK_AMD_shader_trinary_minmax
-import Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
-import Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
-import Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display
-import Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode
-import Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced
-import Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address
-import Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps
-import Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering
-import Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization
-import Graphics.Vulkan.Extensions.VK_EXT_debug_marker
-import Graphics.Vulkan.Extensions.VK_EXT_debug_report
-import Graphics.Vulkan.Extensions.VK_EXT_debug_utils
-import Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable
-import Graphics.Vulkan.Extensions.VK_EXT_depth_range_unrestricted
-import Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing
-import Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display
-import Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles
-import Graphics.Vulkan.Extensions.VK_EXT_display_control
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter
-import Graphics.Vulkan.Extensions.VK_EXT_external_memory_dma_buf
-import Graphics.Vulkan.Extensions.VK_EXT_external_memory_host
-import Graphics.Vulkan.Extensions.VK_EXT_filter_cubic
-import Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map
-import Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock
-import Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive
-import Graphics.Vulkan.Extensions.VK_EXT_global_priority
-import Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata
-import Graphics.Vulkan.Extensions.VK_EXT_headless_surface
-import Graphics.Vulkan.Extensions.VK_EXT_host_query_reset
-import Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier
-import Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8
-import Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block
-import Graphics.Vulkan.Extensions.VK_EXT_line_rasterization
-import Graphics.Vulkan.Extensions.VK_EXT_memory_budget
-import Graphics.Vulkan.Extensions.VK_EXT_memory_priority
-import Graphics.Vulkan.Extensions.VK_EXT_metal_surface
-import Graphics.Vulkan.Extensions.VK_EXT_pci_bus_info
-import Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control
-import Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
-import Graphics.Vulkan.Extensions.VK_EXT_post_depth_coverage
-import Graphics.Vulkan.Extensions.VK_EXT_queue_family_foreign
-import Graphics.Vulkan.Extensions.VK_EXT_robustness2
-import Graphics.Vulkan.Extensions.VK_EXT_sample_locations
-import Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax
-import Graphics.Vulkan.Extensions.VK_EXT_scalar_block_layout
-import Graphics.Vulkan.Extensions.VK_EXT_separate_stencil_usage
-import Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation
-import Graphics.Vulkan.Extensions.VK_EXT_shader_stencil_export
-import Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_ballot
-import Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_vote
-import Graphics.Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
-import Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control
-import Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace
-import Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment
-import Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr
-import Graphics.Vulkan.Extensions.VK_EXT_tooling_info
-import Graphics.Vulkan.Extensions.VK_EXT_transform_feedback
-import Graphics.Vulkan.Extensions.VK_EXT_validation_cache
-import Graphics.Vulkan.Extensions.VK_EXT_validation_features
-import Graphics.Vulkan.Extensions.VK_EXT_validation_flags
-import Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor
-import Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays
-import Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface
-import Graphics.Vulkan.Extensions.VK_GGP_frame_token
-import Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface
-import Graphics.Vulkan.Extensions.VK_GOOGLE_decorate_string
-import Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing
-import Graphics.Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1
-import Graphics.Vulkan.Extensions.VK_GOOGLE_user_type
-import Graphics.Vulkan.Extensions.VK_IMG_filter_cubic
-import Graphics.Vulkan.Extensions.VK_IMG_format_pvrtc
-import Graphics.Vulkan.Extensions.VK_INTEL_performance_query
-import Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2
-import Graphics.Vulkan.Extensions.VK_KHR_16bit_storage
-import Graphics.Vulkan.Extensions.VK_KHR_8bit_storage
-import Graphics.Vulkan.Extensions.VK_KHR_android_surface
-import Graphics.Vulkan.Extensions.VK_KHR_bind_memory2
-import Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address
-import Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2
-import Graphics.Vulkan.Extensions.VK_KHR_dedicated_allocation
-import Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations
-import Graphics.Vulkan.Extensions.VK_KHR_depth_stencil_resolve
-import Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template
-import Graphics.Vulkan.Extensions.VK_KHR_device_group
-import Graphics.Vulkan.Extensions.VK_KHR_device_group_creation
-import Graphics.Vulkan.Extensions.VK_KHR_display
-import Graphics.Vulkan.Extensions.VK_KHR_display_swapchain
-import Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count
-import Graphics.Vulkan.Extensions.VK_KHR_driver_properties
-import Graphics.Vulkan.Extensions.VK_KHR_external_fence
-import Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities
-import Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd
-import Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32
-import Graphics.Vulkan.Extensions.VK_KHR_external_memory
-import Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities
-import Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd
-import Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32
-import Graphics.Vulkan.Extensions.VK_KHR_external_semaphore
-import Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities
-import Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd
-import Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32
-import Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2
-import Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2
-import Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2
-import Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2
-import Graphics.Vulkan.Extensions.VK_KHR_image_format_list
-import Graphics.Vulkan.Extensions.VK_KHR_imageless_framebuffer
-import Graphics.Vulkan.Extensions.VK_KHR_incremental_present
-import Graphics.Vulkan.Extensions.VK_KHR_maintenance1
-import Graphics.Vulkan.Extensions.VK_KHR_maintenance2
-import Graphics.Vulkan.Extensions.VK_KHR_maintenance3
-import Graphics.Vulkan.Extensions.VK_KHR_multiview
-import Graphics.Vulkan.Extensions.VK_KHR_performance_query
-import Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties
-import Graphics.Vulkan.Extensions.VK_KHR_pipeline_library
-import Graphics.Vulkan.Extensions.VK_KHR_push_descriptor
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing
-import Graphics.Vulkan.Extensions.VK_KHR_relaxed_block_layout
-import Graphics.Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge
-import Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion
-import Graphics.Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts
-import Graphics.Vulkan.Extensions.VK_KHR_shader_atomic_int64
-import Graphics.Vulkan.Extensions.VK_KHR_shader_clock
-import Graphics.Vulkan.Extensions.VK_KHR_shader_draw_parameters
-import Graphics.Vulkan.Extensions.VK_KHR_shader_float16_int8
-import Graphics.Vulkan.Extensions.VK_KHR_shader_float_controls
-import Graphics.Vulkan.Extensions.VK_KHR_shader_non_semantic_info
-import Graphics.Vulkan.Extensions.VK_KHR_shader_subgroup_extended_types
-import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image
-import Graphics.Vulkan.Extensions.VK_KHR_spirv_1_4
-import Graphics.Vulkan.Extensions.VK_KHR_storage_buffer_storage_class
-import Graphics.Vulkan.Extensions.VK_KHR_surface
-import Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain_mutable_format
-import Graphics.Vulkan.Extensions.VK_KHR_timeline_semaphore
-import Graphics.Vulkan.Extensions.VK_KHR_uniform_buffer_standard_layout
-import Graphics.Vulkan.Extensions.VK_KHR_variable_pointers
-import Graphics.Vulkan.Extensions.VK_KHR_vulkan_memory_model
-import Graphics.Vulkan.Extensions.VK_KHR_wayland_surface
-import Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex
-import Graphics.Vulkan.Extensions.VK_KHR_win32_surface
-import Graphics.Vulkan.Extensions.VK_KHR_xcb_surface
-import Graphics.Vulkan.Extensions.VK_KHR_xlib_surface
-import Graphics.Vulkan.Extensions.VK_MVK_ios_surface
-import Graphics.Vulkan.Extensions.VK_MVK_macos_surface
-import Graphics.Vulkan.Extensions.VK_NN_vi_surface
-import Graphics.Vulkan.Extensions.VK_NVX_image_view_handle
-import Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes
-import Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling
-import Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives
-import Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix
-import Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image
-import Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode
-import Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation
-import Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing
-import Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints
-import Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config
-import Graphics.Vulkan.Extensions.VK_NV_device_generated_commands
-import Graphics.Vulkan.Extensions.VK_NV_external_memory
-import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities
-import Graphics.Vulkan.Extensions.VK_NV_external_memory_win32
-import Graphics.Vulkan.Extensions.VK_NV_fill_rectangle
-import Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color
-import Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric
-import Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples
-import Graphics.Vulkan.Extensions.VK_NV_geometry_shader_passthrough
-import Graphics.Vulkan.Extensions.VK_NV_glsl_shader
-import Graphics.Vulkan.Extensions.VK_NV_mesh_shader
-import Graphics.Vulkan.Extensions.VK_NV_ray_tracing
-import Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test
-import Graphics.Vulkan.Extensions.VK_NV_sample_mask_override_coverage
-import Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive
-import Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint
-import Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins
-import Graphics.Vulkan.Extensions.VK_NV_shader_subgroup_partitioned
-import Graphics.Vulkan.Extensions.VK_NV_shading_rate_image
-import Graphics.Vulkan.Extensions.VK_NV_viewport_array2
-import Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle
-import Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex
-import Graphics.Vulkan.Extensions.VK_QCOM_render_pass_shader_resolve
-import Graphics.Vulkan.Extensions.VK_QCOM_render_pass_store_ops
-import Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform
-import Graphics.Vulkan.Extensions.WSITypes
-
diff --git a/src/Graphics/Vulkan/Extensions/Handles.hs b/src/Graphics/Vulkan/Extensions/Handles.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/Handles.hs
+++ /dev/null
@@ -1,369 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.Handles  ( IndirectCommandsLayoutNV(..)
-                                           , ValidationCacheEXT(..)
-                                           , AccelerationStructureKHR(..)
-                                           , PerformanceConfigurationINTEL(..)
-                                           , DeferredOperationKHR(..)
-                                           , DisplayKHR(..)
-                                           , DisplayModeKHR(..)
-                                           , SurfaceKHR(..)
-                                           , SwapchainKHR(..)
-                                           , DebugReportCallbackEXT(..)
-                                           , DebugUtilsMessengerEXT(..)
-                                           , Instance(..)
-                                           , PhysicalDevice(..)
-                                           , Device(..)
-                                           , Queue(..)
-                                           , CommandBuffer(..)
-                                           , DeviceMemory(..)
-                                           , CommandPool(..)
-                                           , Buffer(..)
-                                           , BufferView(..)
-                                           , Image(..)
-                                           , ImageView(..)
-                                           , ShaderModule(..)
-                                           , Pipeline(..)
-                                           , PipelineLayout(..)
-                                           , Sampler(..)
-                                           , DescriptorSet(..)
-                                           , DescriptorSetLayout(..)
-                                           , Fence(..)
-                                           , Semaphore(..)
-                                           , QueryPool(..)
-                                           , Framebuffer(..)
-                                           , RenderPass(..)
-                                           , PipelineCache(..)
-                                           , DescriptorUpdateTemplate(..)
-                                           , SamplerYcbcrConversion(..)
-                                           ) where
-
-import GHC.Show (showParen)
-import Numeric (showHex)
-import Foreign.Storable (Storable)
-import Data.Word (Word64)
-import Graphics.Vulkan.Core10.APIConstants (IsHandle)
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.Core10.Handles (BufferView(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandPool(..))
-import Graphics.Vulkan.Core10.Handles (DescriptorSet(..))
-import Graphics.Vulkan.Core10.Handles (DescriptorSetLayout(..))
-import Graphics.Vulkan.Core11.Handles (DescriptorUpdateTemplate(..))
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory(..))
-import Graphics.Vulkan.Core10.Handles (Fence(..))
-import Graphics.Vulkan.Core10.Handles (Framebuffer(..))
-import Graphics.Vulkan.Core10.Handles (Image(..))
-import Graphics.Vulkan.Core10.Handles (ImageView(..))
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (Pipeline(..))
-import Graphics.Vulkan.Core10.Handles (PipelineCache(..))
-import Graphics.Vulkan.Core10.Handles (PipelineLayout(..))
-import Graphics.Vulkan.Core10.Handles (QueryPool(..))
-import Graphics.Vulkan.Core10.Handles (Queue(..))
-import Graphics.Vulkan.Core10.Handles (RenderPass(..))
-import Graphics.Vulkan.Core10.Handles (Sampler(..))
-import Graphics.Vulkan.Core11.Handles (SamplerYcbcrConversion(..))
-import Graphics.Vulkan.Core10.Handles (Semaphore(..))
-import Graphics.Vulkan.Core10.Handles (ShaderModule(..))
--- | VkIndirectCommandsLayoutNV - Opaque handle to an indirect commands
--- layout object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsMemoryRequirementsInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.createIndirectCommandsLayoutNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_device_generated_commands.destroyIndirectCommandsLayoutNV'
-newtype IndirectCommandsLayoutNV = IndirectCommandsLayoutNV Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show IndirectCommandsLayoutNV where
-  showsPrec p (IndirectCommandsLayoutNV x) = showParen (p >= 11) (showString "IndirectCommandsLayoutNV 0x" . showHex x)
-
-
--- | VkValidationCacheEXT - Opaque handle to a validation cache object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.ShaderModuleValidationCacheCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.createValidationCacheEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.destroyValidationCacheEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.getValidationCacheDataEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.mergeValidationCachesEXT'
-newtype ValidationCacheEXT = ValidationCacheEXT Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show ValidationCacheEXT where
-  showsPrec p (ValidationCacheEXT x) = showParen (p >= 11) (showString "ValidationCacheEXT 0x" . showHex x)
-
-
--- | VkAccelerationStructureKHR - Opaque handle to an acceleration structure
--- object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureBuildGeometryInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureDeviceAddressInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureMemoryRequirementsInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.BindAccelerationStructureMemoryInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureToMemoryInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.CopyMemoryToAccelerationStructureInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdCopyAccelerationStructureNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.cmdWriteAccelerationStructuresPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdWriteAccelerationStructuresPropertiesNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.createAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.destroyAccelerationStructureKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.destroyAccelerationStructureNV',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.writeAccelerationStructuresPropertiesKHR'
-newtype AccelerationStructureKHR = AccelerationStructureKHR Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show AccelerationStructureKHR where
-  showsPrec p (AccelerationStructureKHR x) = showParen (p >= 11) (showString "AccelerationStructureKHR 0x" . showHex x)
-
-
--- | VkPerformanceConfigurationINTEL - Device configuration for performance
--- queries
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.acquirePerformanceConfigurationINTEL',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.queueSetPerformanceConfigurationINTEL',
--- 'Graphics.Vulkan.Extensions.VK_INTEL_performance_query.releasePerformanceConfigurationINTEL'
-newtype PerformanceConfigurationINTEL = PerformanceConfigurationINTEL Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show PerformanceConfigurationINTEL where
-  showsPrec p (PerformanceConfigurationINTEL x) = showParen (p >= 11) (showString "PerformanceConfigurationINTEL 0x" . showHex x)
-
-
--- | VkDeferredOperationKHR - A deferred operation
---
--- = Description
---
--- This handle refers to a tracking structure which manages the execution
--- state for a deferred command.
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.createDeferredOperationKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.deferredOperationJoinKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.destroyDeferredOperationKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.getDeferredOperationMaxConcurrencyKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.getDeferredOperationResultKHR'
-newtype DeferredOperationKHR = DeferredOperationKHR Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show DeferredOperationKHR where
-  showsPrec p (DeferredOperationKHR x) = showParen (p >= 11) (showString "DeferredOperationKHR 0x" . showHex x)
-
-
--- | VkDisplayKHR - Opaque handle to a display object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPlanePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.acquireXlibDisplayEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.createDisplayModeKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.displayPowerControlEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.getDisplayModeProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getDisplayModePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getDisplayPlaneSupportedDisplaysKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.getRandROutputDisplayEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.registerDisplayEventEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display.releaseDisplayEXT'
-newtype DisplayKHR = DisplayKHR Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show DisplayKHR where
-  showsPrec p (DisplayKHR x) = showParen (p >= 11) (showString "DisplayKHR 0x" . showHex x)
-
-
--- | VkDisplayModeKHR - Opaque handle to a display mode object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayModePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneInfo2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplaySurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.createDisplayModeKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getDisplayPlaneCapabilitiesKHR'
-newtype DisplayModeKHR = DisplayModeKHR Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show DisplayModeKHR where
-  showsPrec p (DisplayModeKHR x) = showParen (p >= 11) (showString "DisplayModeKHR 0x" . showHex x)
-
-
--- | VkSurfaceKHR - Opaque handle to a surface object
---
--- = Description
---
--- The @VK_KHR_surface@ extension declares the 'SurfaceKHR' object, and
--- provides a function for destroying 'SurfaceKHR' objects. Separate
--- platform-specific extensions each provide a function for creating a
--- 'SurfaceKHR' 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
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.createAndroidSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.createDisplayPlaneSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_headless_surface.createHeadlessSurfaceEXT',
--- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.createIOSSurfaceMVK',
--- 'Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface.createImagePipeSurfaceFUCHSIA',
--- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.createMacOSSurfaceMVK',
--- 'Graphics.Vulkan.Extensions.VK_EXT_metal_surface.createMetalSurfaceEXT',
--- 'Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface.createStreamDescriptorSurfaceGGP',
--- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.createViSurfaceNN',
--- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.createWaylandSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.createWin32SurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.createXcbSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.createXlibSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.destroySurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.getDeviceGroupSurfacePresentModesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.getPhysicalDevicePresentRectanglesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.getPhysicalDeviceSurfaceCapabilities2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceFormatsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR'
-newtype SurfaceKHR = SurfaceKHR Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show SurfaceKHR where
-  showsPrec p (SurfaceKHR x) = showParen (p >= 11) (showString "SurfaceKHR 0x" . showHex x)
-
-
--- | VkSwapchainKHR - Opaque handle to a swapchain object
---
--- = Description
---
--- A swapchain is an abstraction for an array of presentable images that
--- are associated with a surface. The presentable images are represented by
--- 'Graphics.Vulkan.Core10.Handles.Image' 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 non-retired
--- 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
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR', and
--- before it is presented by
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR'. This
--- includes transitioning the image layout and rendering commands.
---
--- An application /can/ acquire use of a presentable image with
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR'. 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
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR', 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
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.AcquireNextImageInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.acquireFullScreenExclusiveModeEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.createSharedSwapchainsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.destroySwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.getPastPresentationTimingGOOGLE',
--- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.getRefreshCycleDurationGOOGLE',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.getSwapchainCounterEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.getSwapchainImagesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.getSwapchainStatusKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.releaseFullScreenExclusiveModeEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata.setHdrMetadataEXT',
--- 'Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr.setLocalDimmingAMD'
-newtype SwapchainKHR = SwapchainKHR Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show SwapchainKHR where
-  showsPrec p (SwapchainKHR x) = showParen (p >= 11) (showString "SwapchainKHR 0x" . showHex x)
-
-
--- | VkDebugReportCallbackEXT - Opaque handle to a debug report callback
--- object
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.createDebugReportCallbackEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.destroyDebugReportCallbackEXT'
-newtype DebugReportCallbackEXT = DebugReportCallbackEXT Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show DebugReportCallbackEXT where
-  showsPrec p (DebugReportCallbackEXT x) = showParen (p >= 11) (showString "DebugReportCallbackEXT 0x" . showHex x)
-
-
--- | VkDebugUtilsMessengerEXT - Opaque handle to a debug messenger object
---
--- = 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 is not interested in and will only provide desired debug
--- messages.
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.createDebugUtilsMessengerEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.destroyDebugUtilsMessengerEXT'
-newtype DebugUtilsMessengerEXT = DebugUtilsMessengerEXT Word64
-  deriving newtype (Eq, Ord, Storable, Zero)
-  deriving anyclass (IsHandle)
-instance Show DebugUtilsMessengerEXT where
-  showsPrec p (DebugUtilsMessengerEXT x) = showParen (p >= 11) (showString "DebugUtilsMessengerEXT 0x" . showHex x)
-
diff --git a/src/Graphics/Vulkan/Extensions/Handles.hs-boot b/src/Graphics/Vulkan/Extensions/Handles.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/Handles.hs-boot
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.Handles  ( AccelerationStructureKHR
-                                           , DebugReportCallbackEXT
-                                           , DebugUtilsMessengerEXT
-                                           , DeferredOperationKHR
-                                           , DisplayKHR
-                                           , DisplayModeKHR
-                                           , IndirectCommandsLayoutNV
-                                           , PerformanceConfigurationINTEL
-                                           , SurfaceKHR
-                                           , SwapchainKHR
-                                           , ValidationCacheEXT
-                                           ) where
-
-
-
-data AccelerationStructureKHR
-
-
-data DebugReportCallbackEXT
-
-
-data DebugUtilsMessengerEXT
-
-
-data DeferredOperationKHR
-
-
-data DisplayKHR
-
-
-data DisplayModeKHR
-
-
-data IndirectCommandsLayoutNV
-
-
-data PerformanceConfigurationINTEL
-
-
-data SurfaceKHR
-
-
-data SwapchainKHR
-
-
-data ValidationCacheEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_buffer_marker.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_buffer_marker.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_buffer_marker.hs
+++ /dev/null
@@ -1,166 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_buffer_marker  ( cmdWriteBufferMarkerAMD
-                                                        , AMD_BUFFER_MARKER_SPEC_VERSION
-                                                        , pattern AMD_BUFFER_MARKER_SPEC_VERSION
-                                                        , AMD_BUFFER_MARKER_EXTENSION_NAME
-                                                        , pattern AMD_BUFFER_MARKER_EXTENSION_NAME
-                                                        ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdWriteBufferMarkerAMD))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits)
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdWriteBufferMarkerAMD
-  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> Buffer -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlagBits -> Buffer -> DeviceSize -> Word32 -> IO ()
-
--- | vkCmdWriteBufferMarkerAMD - Execute a pipelined write of a marker value
--- into a buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pipelineStage@ is one of the
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     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
---
--- 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 'cmdWriteBufferMarkerAMD' 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
--- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_WRITE_BIT',
--- and the pipeline stages for identifying the synchronization scope /must/
--- include both @pipelineStage@ and
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'.
---
--- Note
---
--- Similar to
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp', 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
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
---     usage flag
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @dstOffset@ /must/ be a multiple of @4@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pipelineStage@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
---     value
---
--- -   @dstBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support transfer,
---     graphics, or compute operations
---
--- -   Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              | Transfer                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
-cmdWriteBufferMarkerAMD :: forall io . MonadIO io => CommandBuffer -> PipelineStageFlagBits -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("marker" ::: Word32) -> io ()
-cmdWriteBufferMarkerAMD commandBuffer pipelineStage dstBuffer dstOffset marker = liftIO $ do
-  let vkCmdWriteBufferMarkerAMD' = mkVkCmdWriteBufferMarkerAMD (pVkCmdWriteBufferMarkerAMD (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdWriteBufferMarkerAMD' (commandBufferHandle (commandBuffer)) (pipelineStage) (dstBuffer) (dstOffset) (marker)
-  pure $ ()
-
-
-type AMD_BUFFER_MARKER_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_BUFFER_MARKER_SPEC_VERSION"
-pattern AMD_BUFFER_MARKER_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_BUFFER_MARKER_SPEC_VERSION = 1
-
-
-type AMD_BUFFER_MARKER_EXTENSION_NAME = "VK_AMD_buffer_marker"
-
--- No documentation found for TopLevel "VK_AMD_BUFFER_MARKER_EXTENSION_NAME"
-pattern AMD_BUFFER_MARKER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_BUFFER_MARKER_EXTENSION_NAME = "VK_AMD_buffer_marker"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs
+++ /dev/null
@@ -1,95 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory  ( PhysicalDeviceCoherentMemoryFeaturesAMD(..)
-                                                                 , AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION
-                                                                 , pattern AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION
-                                                                 , AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME
-                                                                 , pattern AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME
-                                                                 ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD))
--- | VkPhysicalDeviceCoherentMemoryFeaturesAMD - Structure describing whether
--- device coherent memory can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceCoherentMemoryFeaturesAMD' structure
--- describe the following features:
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceCoherentMemoryFeaturesAMD = PhysicalDeviceCoherentMemoryFeaturesAMD
-  { -- | @deviceCoherentMemory@ indicates that the implementation supports
-    -- <VkMemoryPropertyFlagBits.html device coherent memory>.
-    deviceCoherentMemory :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceCoherentMemoryFeaturesAMD
-
-instance ToCStruct PhysicalDeviceCoherentMemoryFeaturesAMD where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceCoherentMemoryFeaturesAMD{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (deviceCoherentMemory))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceCoherentMemoryFeaturesAMD where
-  peekCStruct p = do
-    deviceCoherentMemory <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceCoherentMemoryFeaturesAMD
-             (bool32ToBool deviceCoherentMemory)
-
-instance Storable PhysicalDeviceCoherentMemoryFeaturesAMD where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceCoherentMemoryFeaturesAMD where
-  zero = PhysicalDeviceCoherentMemoryFeaturesAMD
-           zero
-
-
-type AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION"
-pattern AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION = 1
-
-
-type AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME = "VK_AMD_device_coherent_memory"
-
--- No documentation found for TopLevel "VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME"
-pattern AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME = "VK_AMD_device_coherent_memory"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs-boot b/src/Graphics/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory  (PhysicalDeviceCoherentMemoryFeaturesAMD) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceCoherentMemoryFeaturesAMD
-
-instance ToCStruct PhysicalDeviceCoherentMemoryFeaturesAMD
-instance Show PhysicalDeviceCoherentMemoryFeaturesAMD
-
-instance FromCStruct PhysicalDeviceCoherentMemoryFeaturesAMD
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_display_native_hdr.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_display_native_hdr.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_display_native_hdr.hs
+++ /dev/null
@@ -1,226 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr  ( setLocalDimmingAMD
-                                                             , DisplayNativeHdrSurfaceCapabilitiesAMD(..)
-                                                             , SwapchainDisplayNativeHdrCreateInfoAMD(..)
-                                                             , AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION
-                                                             , pattern AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION
-                                                             , AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME
-                                                             , pattern AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME
-                                                             , SwapchainKHR(..)
-                                                             , ColorSpaceKHR(..)
-                                                             ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32(..))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkSetLocalDimmingAMD))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD))
-import Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace (ColorSpaceKHR(..))
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkSetLocalDimmingAMD
-  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Bool32 -> IO ()) -> Ptr Device_T -> SwapchainKHR -> Bool32 -> IO ()
-
--- | vkSetLocalDimmingAMD - Set Local Dimming
---
--- = Parameters
---
--- -   @device@ is the device associated with @swapChain@.
---
--- -   @swapChain@ handle to enable local dimming.
---
--- -   @localDimmingEnable@ specifies whether local dimming is enabled for
---     the swapchain.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @swapChain@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handle
---
--- -   Both of @device@, and @swapChain@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Valid Usage
---
--- -   It is only valid to call 'setLocalDimmingAMD' if
---     'DisplayNativeHdrSurfaceCapabilitiesAMD'::@localDimmingSupport@ is
---     supported
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-setLocalDimmingAMD :: forall io . MonadIO io => Device -> SwapchainKHR -> ("localDimmingEnable" ::: Bool) -> io ()
-setLocalDimmingAMD device swapChain localDimmingEnable = liftIO $ do
-  let vkSetLocalDimmingAMD' = mkVkSetLocalDimmingAMD (pVkSetLocalDimmingAMD (deviceCmds (device :: Device)))
-  vkSetLocalDimmingAMD' (deviceHandle (device)) (swapChain) (boolToBool32 (localDimmingEnable))
-  pure $ ()
-
-
--- | VkDisplayNativeHdrSurfaceCapabilitiesAMD - Structure describing display
--- native HDR specific capabilities of a surface
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DisplayNativeHdrSurfaceCapabilitiesAMD = DisplayNativeHdrSurfaceCapabilitiesAMD
-  { -- | @localDimmingSupport@ specifies whether the surface supports local
-    -- dimming. If this is 'Graphics.Vulkan.Core10.BaseType.TRUE',
-    -- 'SwapchainDisplayNativeHdrCreateInfoAMD' /can/ be used to explicitly
-    -- enable or disable local dimming for the surface. Local dimming may also
-    -- be overriden by 'setLocalDimmingAMD' during the lifetime of the
-    -- swapchain.
-    localDimmingSupport :: Bool }
-  deriving (Typeable)
-deriving instance Show DisplayNativeHdrSurfaceCapabilitiesAMD
-
-instance ToCStruct DisplayNativeHdrSurfaceCapabilitiesAMD where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayNativeHdrSurfaceCapabilitiesAMD{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (localDimmingSupport))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct DisplayNativeHdrSurfaceCapabilitiesAMD where
-  peekCStruct p = do
-    localDimmingSupport <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ DisplayNativeHdrSurfaceCapabilitiesAMD
-             (bool32ToBool localDimmingSupport)
-
-instance Storable DisplayNativeHdrSurfaceCapabilitiesAMD where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DisplayNativeHdrSurfaceCapabilitiesAMD where
-  zero = DisplayNativeHdrSurfaceCapabilitiesAMD
-           zero
-
-
--- | VkSwapchainDisplayNativeHdrCreateInfoAMD - Structure specifying display
--- native HDR parameters of a newly created swapchain object
---
--- = Description
---
--- If the @pNext@ chain of
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
--- does not include this structure, the default value for
--- @localDimmingEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', meaning
--- local dimming is initially enabled for the swapchain.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD'
---
--- == Valid Usage
---
--- -   It is only valid to set @localDimmingEnable@ to
---     'Graphics.Vulkan.Core10.BaseType.TRUE' if
---     'DisplayNativeHdrSurfaceCapabilitiesAMD'::@localDimmingSupport@ is
---     supported
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SwapchainDisplayNativeHdrCreateInfoAMD = SwapchainDisplayNativeHdrCreateInfoAMD
-  { -- | @localDimmingEnable@ specifies whether local dimming is enabled for the
-    -- swapchain.
-    localDimmingEnable :: Bool }
-  deriving (Typeable)
-deriving instance Show SwapchainDisplayNativeHdrCreateInfoAMD
-
-instance ToCStruct SwapchainDisplayNativeHdrCreateInfoAMD where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SwapchainDisplayNativeHdrCreateInfoAMD{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (localDimmingEnable))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct SwapchainDisplayNativeHdrCreateInfoAMD where
-  peekCStruct p = do
-    localDimmingEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ SwapchainDisplayNativeHdrCreateInfoAMD
-             (bool32ToBool localDimmingEnable)
-
-instance Storable SwapchainDisplayNativeHdrCreateInfoAMD where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SwapchainDisplayNativeHdrCreateInfoAMD where
-  zero = SwapchainDisplayNativeHdrCreateInfoAMD
-           zero
-
-
-type AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION"
-pattern AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION = 1
-
-
-type AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME = "VK_AMD_display_native_hdr"
-
--- No documentation found for TopLevel "VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME"
-pattern AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME = "VK_AMD_display_native_hdr"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_display_native_hdr.hs-boot b/src/Graphics/Vulkan/Extensions/VK_AMD_display_native_hdr.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_display_native_hdr.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr  ( DisplayNativeHdrSurfaceCapabilitiesAMD
-                                                             , SwapchainDisplayNativeHdrCreateInfoAMD
-                                                             ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DisplayNativeHdrSurfaceCapabilitiesAMD
-
-instance ToCStruct DisplayNativeHdrSurfaceCapabilitiesAMD
-instance Show DisplayNativeHdrSurfaceCapabilitiesAMD
-
-instance FromCStruct DisplayNativeHdrSurfaceCapabilitiesAMD
-
-
-data SwapchainDisplayNativeHdrCreateInfoAMD
-
-instance ToCStruct SwapchainDisplayNativeHdrCreateInfoAMD
-instance Show SwapchainDisplayNativeHdrCreateInfoAMD
-
-instance FromCStruct SwapchainDisplayNativeHdrCreateInfoAMD
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count  ( cmdDrawIndirectCountAMD
-                                                              , cmdDrawIndexedIndirectCountAMD
-                                                              , AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION
-                                                              , pattern AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION
-                                                              , AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME
-                                                              , pattern AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME
-                                                              ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count (cmdDrawIndexedIndirectCount)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count (cmdDrawIndirectCount)
--- No documentation found for TopLevel "vkCmdDrawIndirectCountAMD"
-cmdDrawIndirectCountAMD = cmdDrawIndirectCount
-
-
--- No documentation found for TopLevel "vkCmdDrawIndexedIndirectCountAMD"
-cmdDrawIndexedIndirectCountAMD = cmdDrawIndexedIndirectCount
-
-
-type AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION"
-pattern AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION = 2
-
-
-type AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME = "VK_AMD_draw_indirect_count"
-
--- No documentation found for TopLevel "VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME"
-pattern AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME = "VK_AMD_draw_indirect_count"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_gcn_shader.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_gcn_shader.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_gcn_shader.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_gcn_shader  ( AMD_GCN_SHADER_SPEC_VERSION
-                                                     , pattern AMD_GCN_SHADER_SPEC_VERSION
-                                                     , AMD_GCN_SHADER_EXTENSION_NAME
-                                                     , pattern AMD_GCN_SHADER_EXTENSION_NAME
-                                                     ) where
-
-import Data.String (IsString)
-
-type AMD_GCN_SHADER_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_GCN_SHADER_SPEC_VERSION"
-pattern AMD_GCN_SHADER_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_GCN_SHADER_SPEC_VERSION = 1
-
-
-type AMD_GCN_SHADER_EXTENSION_NAME = "VK_AMD_gcn_shader"
-
--- No documentation found for TopLevel "VK_AMD_GCN_SHADER_EXTENSION_NAME"
-pattern AMD_GCN_SHADER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_gpu_shader_half_float.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_half_float  ( AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION
-                                                                , pattern AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION
-                                                                , AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME
-                                                                , pattern AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME
-                                                                ) where
-
-import Data.String (IsString)
-
-type AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION"
-pattern AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION = 2
-
-
-type AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME = "VK_AMD_gpu_shader_half_float"
-
--- No documentation found for TopLevel "VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME"
-pattern AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_gpu_shader_int16.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_int16  ( AMD_GPU_SHADER_INT16_SPEC_VERSION
-                                                           , pattern AMD_GPU_SHADER_INT16_SPEC_VERSION
-                                                           , AMD_GPU_SHADER_INT16_EXTENSION_NAME
-                                                           , pattern AMD_GPU_SHADER_INT16_EXTENSION_NAME
-                                                           ) where
-
-import Data.String (IsString)
-
-type AMD_GPU_SHADER_INT16_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_AMD_GPU_SHADER_INT16_SPEC_VERSION"
-pattern AMD_GPU_SHADER_INT16_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_GPU_SHADER_INT16_SPEC_VERSION = 2
-
-
-type AMD_GPU_SHADER_INT16_EXTENSION_NAME = "VK_AMD_gpu_shader_int16"
-
--- No documentation found for TopLevel "VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME"
-pattern AMD_GPU_SHADER_INT16_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_GPU_SHADER_INT16_EXTENSION_NAME = "VK_AMD_gpu_shader_int16"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs
+++ /dev/null
@@ -1,149 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_memory_overallocation_behavior  ( DeviceMemoryOverallocationCreateInfoAMD(..)
-                                                                         , MemoryOverallocationBehaviorAMD( MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD
-                                                                                                          , MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD
-                                                                                                          , MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD
-                                                                                                          , ..
-                                                                                                          )
-                                                                         , AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION
-                                                                         , pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION
-                                                                         , AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME
-                                                                         , pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME
-                                                                         ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD))
--- | VkDeviceMemoryOverallocationCreateInfoAMD - Specify memory
--- overallocation behavior for a Vulkan device
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'MemoryOverallocationBehaviorAMD',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceMemoryOverallocationCreateInfoAMD = DeviceMemoryOverallocationCreateInfoAMD
-  { -- | @overallocationBehavior@ /must/ be a valid
-    -- 'MemoryOverallocationBehaviorAMD' value
-    overallocationBehavior :: MemoryOverallocationBehaviorAMD }
-  deriving (Typeable)
-deriving instance Show DeviceMemoryOverallocationCreateInfoAMD
-
-instance ToCStruct DeviceMemoryOverallocationCreateInfoAMD where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceMemoryOverallocationCreateInfoAMD{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr MemoryOverallocationBehaviorAMD)) (overallocationBehavior)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr MemoryOverallocationBehaviorAMD)) (zero)
-    f
-
-instance FromCStruct DeviceMemoryOverallocationCreateInfoAMD where
-  peekCStruct p = do
-    overallocationBehavior <- peek @MemoryOverallocationBehaviorAMD ((p `plusPtr` 16 :: Ptr MemoryOverallocationBehaviorAMD))
-    pure $ DeviceMemoryOverallocationCreateInfoAMD
-             overallocationBehavior
-
-instance Storable DeviceMemoryOverallocationCreateInfoAMD where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeviceMemoryOverallocationCreateInfoAMD where
-  zero = DeviceMemoryOverallocationCreateInfoAMD
-           zero
-
-
--- | VkMemoryOverallocationBehaviorAMD - Specify memory overallocation
--- behavior
---
--- = See Also
---
--- 'DeviceMemoryOverallocationCreateInfoAMD'
-newtype MemoryOverallocationBehaviorAMD = MemoryOverallocationBehaviorAMD Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD' lets the implementation
--- decide if overallocation is allowed.
-pattern MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = MemoryOverallocationBehaviorAMD 0
--- | 'MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD' specifies overallocation is
--- allowed if platform permits.
-pattern MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = MemoryOverallocationBehaviorAMD 1
--- | 'MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD' specifies the
--- application is not allowed to allocate device memory beyond the heap
--- sizes reported by
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'.
--- Allocations that are not explicitly made by the application within the
--- scope of the Vulkan instance are not accounted for.
-pattern MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = MemoryOverallocationBehaviorAMD 2
-{-# complete MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD,
-             MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD,
-             MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD :: MemoryOverallocationBehaviorAMD #-}
-
-instance Show MemoryOverallocationBehaviorAMD where
-  showsPrec p = \case
-    MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD -> showString "MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD"
-    MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD -> showString "MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD"
-    MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD -> showString "MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD"
-    MemoryOverallocationBehaviorAMD x -> showParen (p >= 11) (showString "MemoryOverallocationBehaviorAMD " . showsPrec 11 x)
-
-instance Read MemoryOverallocationBehaviorAMD where
-  readPrec = parens (choose [("MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD", pure MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD)
-                            , ("MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD", pure MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD)
-                            , ("MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD", pure MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "MemoryOverallocationBehaviorAMD")
-                       v <- step readPrec
-                       pure (MemoryOverallocationBehaviorAMD v)))
-
-
-type AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION"
-pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION = 1
-
-
-type AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME = "VK_AMD_memory_overallocation_behavior"
-
--- No documentation found for TopLevel "VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME"
-pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME = "VK_AMD_memory_overallocation_behavior"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs-boot b/src/Graphics/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_memory_overallocation_behavior  (DeviceMemoryOverallocationCreateInfoAMD) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DeviceMemoryOverallocationCreateInfoAMD
-
-instance ToCStruct DeviceMemoryOverallocationCreateInfoAMD
-instance Show DeviceMemoryOverallocationCreateInfoAMD
-
-instance FromCStruct DeviceMemoryOverallocationCreateInfoAMD
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_mixed_attachment_samples.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_mixed_attachment_samples.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_mixed_attachment_samples.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_mixed_attachment_samples  ( AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION
-                                                                   , pattern AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION
-                                                                   , AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME
-                                                                   , pattern AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME
-                                                                   ) where
-
-import Data.String (IsString)
-
-type AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION"
-pattern AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION = 1
-
-
-type AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME = "VK_AMD_mixed_attachment_samples"
-
--- No documentation found for TopLevel "VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME"
-pattern AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_negative_viewport_height.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_negative_viewport_height  ( AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION
-                                                                   , pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION
-                                                                   , AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME
-                                                                   , pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME
-                                                                   ) where
-
-import Data.String (IsString)
-
-type AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION"
-pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION = 1
-
-
-type AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME = "VK_AMD_negative_viewport_height"
-
--- No documentation found for TopLevel "VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME"
-pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME = "VK_AMD_negative_viewport_height"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs
+++ /dev/null
@@ -1,127 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_pipeline_compiler_control  ( PipelineCompilerControlCreateInfoAMD(..)
-                                                                    , PipelineCompilerControlFlagBitsAMD(..)
-                                                                    , PipelineCompilerControlFlagsAMD
-                                                                    , AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION
-                                                                    , pattern AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION
-                                                                    , AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME
-                                                                    , pattern AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME
-                                                                    ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD))
--- | VkPipelineCompilerControlCreateInfoAMD - Structure used to pass
--- compilation control flags to a pipeline
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PipelineCompilerControlFlagsAMD',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineCompilerControlCreateInfoAMD = PipelineCompilerControlCreateInfoAMD
-  { -- | @compilerControlFlags@ /must/ be @0@
-    compilerControlFlags :: PipelineCompilerControlFlagsAMD }
-  deriving (Typeable)
-deriving instance Show PipelineCompilerControlCreateInfoAMD
-
-instance ToCStruct PipelineCompilerControlCreateInfoAMD where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineCompilerControlCreateInfoAMD{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineCompilerControlFlagsAMD)) (compilerControlFlags)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct PipelineCompilerControlCreateInfoAMD where
-  peekCStruct p = do
-    compilerControlFlags <- peek @PipelineCompilerControlFlagsAMD ((p `plusPtr` 16 :: Ptr PipelineCompilerControlFlagsAMD))
-    pure $ PipelineCompilerControlCreateInfoAMD
-             compilerControlFlags
-
-instance Storable PipelineCompilerControlCreateInfoAMD where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineCompilerControlCreateInfoAMD where
-  zero = PipelineCompilerControlCreateInfoAMD
-           zero
-
-
--- | VkPipelineCompilerControlFlagBitsAMD - Enum specifying available
--- compilation control flags
---
--- = See Also
---
--- 'PipelineCompilerControlFlagsAMD'
-newtype PipelineCompilerControlFlagBitsAMD = PipelineCompilerControlFlagBitsAMD Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-type PipelineCompilerControlFlagsAMD = PipelineCompilerControlFlagBitsAMD
-
-instance Show PipelineCompilerControlFlagBitsAMD where
-  showsPrec p = \case
-    PipelineCompilerControlFlagBitsAMD x -> showParen (p >= 11) (showString "PipelineCompilerControlFlagBitsAMD 0x" . showHex x)
-
-instance Read PipelineCompilerControlFlagBitsAMD where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineCompilerControlFlagBitsAMD")
-                       v <- step readPrec
-                       pure (PipelineCompilerControlFlagBitsAMD v)))
-
-
-type AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION"
-pattern AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION = 1
-
-
-type AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME = "VK_AMD_pipeline_compiler_control"
-
--- No documentation found for TopLevel "VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME"
-pattern AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME = "VK_AMD_pipeline_compiler_control"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs-boot b/src/Graphics/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_pipeline_compiler_control  (PipelineCompilerControlCreateInfoAMD) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PipelineCompilerControlCreateInfoAMD
-
-instance ToCStruct PipelineCompilerControlCreateInfoAMD
-instance Show PipelineCompilerControlCreateInfoAMD
-
-instance FromCStruct PipelineCompilerControlCreateInfoAMD
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs
+++ /dev/null
@@ -1,145 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_rasterization_order  ( PipelineRasterizationStateRasterizationOrderAMD(..)
-                                                              , RasterizationOrderAMD( RASTERIZATION_ORDER_STRICT_AMD
-                                                                                     , RASTERIZATION_ORDER_RELAXED_AMD
-                                                                                     , ..
-                                                                                     )
-                                                              , AMD_RASTERIZATION_ORDER_SPEC_VERSION
-                                                              , pattern AMD_RASTERIZATION_ORDER_SPEC_VERSION
-                                                              , AMD_RASTERIZATION_ORDER_EXTENSION_NAME
-                                                              , pattern AMD_RASTERIZATION_ORDER_EXTENSION_NAME
-                                                              ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD))
--- | VkPipelineRasterizationStateRasterizationOrderAMD - Structure defining
--- rasterization order for a graphics pipeline
---
--- == Valid Usage (Implicit)
---
--- If the @VK_AMD_rasterization_order@ device extension is not enabled or
--- the application does not request a particular rasterization order
--- through specifying a 'PipelineRasterizationStateRasterizationOrderAMD'
--- structure then the rasterization order used by the graphics pipeline
--- defaults to 'RASTERIZATION_ORDER_STRICT_AMD'.
---
--- = See Also
---
--- 'RasterizationOrderAMD',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineRasterizationStateRasterizationOrderAMD = PipelineRasterizationStateRasterizationOrderAMD
-  { -- | @rasterizationOrder@ /must/ be a valid 'RasterizationOrderAMD' value
-    rasterizationOrder :: RasterizationOrderAMD }
-  deriving (Typeable)
-deriving instance Show PipelineRasterizationStateRasterizationOrderAMD
-
-instance ToCStruct PipelineRasterizationStateRasterizationOrderAMD where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineRasterizationStateRasterizationOrderAMD{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr RasterizationOrderAMD)) (rasterizationOrder)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr RasterizationOrderAMD)) (zero)
-    f
-
-instance FromCStruct PipelineRasterizationStateRasterizationOrderAMD where
-  peekCStruct p = do
-    rasterizationOrder <- peek @RasterizationOrderAMD ((p `plusPtr` 16 :: Ptr RasterizationOrderAMD))
-    pure $ PipelineRasterizationStateRasterizationOrderAMD
-             rasterizationOrder
-
-instance Storable PipelineRasterizationStateRasterizationOrderAMD where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineRasterizationStateRasterizationOrderAMD where
-  zero = PipelineRasterizationStateRasterizationOrderAMD
-           zero
-
-
--- | VkRasterizationOrderAMD - Specify rasterization order for a graphics
--- pipeline
---
--- = See Also
---
--- 'PipelineRasterizationStateRasterizationOrderAMD'
-newtype RasterizationOrderAMD = RasterizationOrderAMD Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'RASTERIZATION_ORDER_STRICT_AMD' specifies that operations for each
--- primitive in a subpass /must/ occur in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-order primitive order>.
-pattern RASTERIZATION_ORDER_STRICT_AMD = RasterizationOrderAMD 0
--- | 'RASTERIZATION_ORDER_RELAXED_AMD' specifies that operations for each
--- primitive in a subpass /may/ not occur in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-order primitive order>.
-pattern RASTERIZATION_ORDER_RELAXED_AMD = RasterizationOrderAMD 1
-{-# complete RASTERIZATION_ORDER_STRICT_AMD,
-             RASTERIZATION_ORDER_RELAXED_AMD :: RasterizationOrderAMD #-}
-
-instance Show RasterizationOrderAMD where
-  showsPrec p = \case
-    RASTERIZATION_ORDER_STRICT_AMD -> showString "RASTERIZATION_ORDER_STRICT_AMD"
-    RASTERIZATION_ORDER_RELAXED_AMD -> showString "RASTERIZATION_ORDER_RELAXED_AMD"
-    RasterizationOrderAMD x -> showParen (p >= 11) (showString "RasterizationOrderAMD " . showsPrec 11 x)
-
-instance Read RasterizationOrderAMD where
-  readPrec = parens (choose [("RASTERIZATION_ORDER_STRICT_AMD", pure RASTERIZATION_ORDER_STRICT_AMD)
-                            , ("RASTERIZATION_ORDER_RELAXED_AMD", pure RASTERIZATION_ORDER_RELAXED_AMD)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "RasterizationOrderAMD")
-                       v <- step readPrec
-                       pure (RasterizationOrderAMD v)))
-
-
-type AMD_RASTERIZATION_ORDER_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION"
-pattern AMD_RASTERIZATION_ORDER_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_RASTERIZATION_ORDER_SPEC_VERSION = 1
-
-
-type AMD_RASTERIZATION_ORDER_EXTENSION_NAME = "VK_AMD_rasterization_order"
-
--- No documentation found for TopLevel "VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME"
-pattern AMD_RASTERIZATION_ORDER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_RASTERIZATION_ORDER_EXTENSION_NAME = "VK_AMD_rasterization_order"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs-boot b/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_rasterization_order  (PipelineRasterizationStateRasterizationOrderAMD) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PipelineRasterizationStateRasterizationOrderAMD
-
-instance ToCStruct PipelineRasterizationStateRasterizationOrderAMD
-instance Show PipelineRasterizationStateRasterizationOrderAMD
-
-instance FromCStruct PipelineRasterizationStateRasterizationOrderAMD
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_ballot.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_ballot.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_ballot.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_ballot  ( AMD_SHADER_BALLOT_SPEC_VERSION
-                                                        , pattern AMD_SHADER_BALLOT_SPEC_VERSION
-                                                        , AMD_SHADER_BALLOT_EXTENSION_NAME
-                                                        , pattern AMD_SHADER_BALLOT_EXTENSION_NAME
-                                                        ) where
-
-import Data.String (IsString)
-
-type AMD_SHADER_BALLOT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_SHADER_BALLOT_SPEC_VERSION"
-pattern AMD_SHADER_BALLOT_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_SHADER_BALLOT_SPEC_VERSION = 1
-
-
-type AMD_SHADER_BALLOT_EXTENSION_NAME = "VK_AMD_shader_ballot"
-
--- No documentation found for TopLevel "VK_AMD_SHADER_BALLOT_EXTENSION_NAME"
-pattern AMD_SHADER_BALLOT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs
+++ /dev/null
@@ -1,198 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties  ( PhysicalDeviceShaderCorePropertiesAMD(..)
-                                                                 , AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION
-                                                                 , pattern AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION
-                                                                 , AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME
-                                                                 , pattern AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME
-                                                                 ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD))
--- | VkPhysicalDeviceShaderCorePropertiesAMD - Structure describing shader
--- core properties that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceShaderCorePropertiesAMD' structure
--- describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceShaderCorePropertiesAMD' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderCorePropertiesAMD = PhysicalDeviceShaderCorePropertiesAMD
-  { -- | @shaderEngineCount@ is an unsigned integer value indicating the number
-    -- of shader engines found inside the shader core of the physical device.
-    shaderEngineCount :: Word32
-  , -- | @shaderArraysPerEngineCount@ is an unsigned integer value indicating the
-    -- number of shader arrays inside a shader engine. Each shader array has
-    -- its own scan converter, set of compute units, and a render back end
-    -- (color and depth buffers). Shader arrays within a shader engine share
-    -- shader processor input (wave launcher) and shader export (export buffer)
-    -- units. Currently, a shader engine can have one or two shader arrays.
-    shaderArraysPerEngineCount :: Word32
-  , -- | @computeUnitsPerShaderArray@ is an unsigned integer value indicating the
-    -- physical number of compute units within a shader array. The active
-    -- number of compute units in a shader array /may/ be lower. A compute unit
-    -- houses a set of SIMDs along with a sequencer module and a local data
-    -- store.
-    computeUnitsPerShaderArray :: Word32
-  , -- | @simdPerComputeUnit@ is an unsigned integer value indicating the number
-    -- of SIMDs inside a compute unit. Each SIMD processes a single instruction
-    -- at a time.
-    simdPerComputeUnit :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "wavefrontsPerSimd"
-    wavefrontsPerSimd :: Word32
-  , -- | @wavefrontSize@ is an unsigned integer value indicating the maximum size
-    -- of a subgroup.
-    wavefrontSize :: Word32
-  , -- | @sgprsPerSimd@ is an unsigned integer value indicating the number of
-    -- physical Scalar General Purpose Registers (SGPRs) per SIMD.
-    sgprsPerSimd :: Word32
-  , -- | @minSgprAllocation@ is an unsigned integer value indicating the minimum
-    -- number of SGPRs allocated for a wave.
-    minSgprAllocation :: Word32
-  , -- | @maxSgprAllocation@ is an unsigned integer value indicating the maximum
-    -- number of SGPRs allocated for a wave.
-    maxSgprAllocation :: Word32
-  , -- | @sgprAllocationGranularity@ is an unsigned integer value indicating the
-    -- granularity of SGPR allocation for a wave.
-    sgprAllocationGranularity :: Word32
-  , -- | @vgprsPerSimd@ is an unsigned integer value indicating the number of
-    -- physical Vector General Purpose Registers (VGPRs) per SIMD.
-    vgprsPerSimd :: Word32
-  , -- | @minVgprAllocation@ is an unsigned integer value indicating the minimum
-    -- number of VGPRs allocated for a wave.
-    minVgprAllocation :: Word32
-  , -- | @maxVgprAllocation@ is an unsigned integer value indicating the maximum
-    -- number of VGPRs allocated for a wave.
-    maxVgprAllocation :: Word32
-  , -- | @vgprAllocationGranularity@ is an unsigned integer value indicating the
-    -- granularity of VGPR allocation for a wave.
-    vgprAllocationGranularity :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderCorePropertiesAMD
-
-instance ToCStruct PhysicalDeviceShaderCorePropertiesAMD where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderCorePropertiesAMD{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (shaderEngineCount)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (shaderArraysPerEngineCount)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (computeUnitsPerShaderArray)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (simdPerComputeUnit)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (wavefrontsPerSimd)
-    poke ((p `plusPtr` 36 :: Ptr Word32)) (wavefrontSize)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (sgprsPerSimd)
-    poke ((p `plusPtr` 44 :: Ptr Word32)) (minSgprAllocation)
-    poke ((p `plusPtr` 48 :: Ptr Word32)) (maxSgprAllocation)
-    poke ((p `plusPtr` 52 :: Ptr Word32)) (sgprAllocationGranularity)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (vgprsPerSimd)
-    poke ((p `plusPtr` 60 :: Ptr Word32)) (minVgprAllocation)
-    poke ((p `plusPtr` 64 :: Ptr Word32)) (maxVgprAllocation)
-    poke ((p `plusPtr` 68 :: Ptr Word32)) (vgprAllocationGranularity)
-    f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 60 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 68 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceShaderCorePropertiesAMD where
-  peekCStruct p = do
-    shaderEngineCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    shaderArraysPerEngineCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    computeUnitsPerShaderArray <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    simdPerComputeUnit <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    wavefrontsPerSimd <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    wavefrontSize <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
-    sgprsPerSimd <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    minSgprAllocation <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
-    maxSgprAllocation <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    sgprAllocationGranularity <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
-    vgprsPerSimd <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    minVgprAllocation <- peek @Word32 ((p `plusPtr` 60 :: Ptr Word32))
-    maxVgprAllocation <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    vgprAllocationGranularity <- peek @Word32 ((p `plusPtr` 68 :: Ptr Word32))
-    pure $ PhysicalDeviceShaderCorePropertiesAMD
-             shaderEngineCount shaderArraysPerEngineCount computeUnitsPerShaderArray simdPerComputeUnit wavefrontsPerSimd wavefrontSize sgprsPerSimd minSgprAllocation maxSgprAllocation sgprAllocationGranularity vgprsPerSimd minVgprAllocation maxVgprAllocation vgprAllocationGranularity
-
-instance Storable PhysicalDeviceShaderCorePropertiesAMD where
-  sizeOf ~_ = 72
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderCorePropertiesAMD where
-  zero = PhysicalDeviceShaderCorePropertiesAMD
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
-type AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION"
-pattern AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION = 2
-
-
-type AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME = "VK_AMD_shader_core_properties"
-
--- No documentation found for TopLevel "VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME"
-pattern AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME = "VK_AMD_shader_core_properties"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs-boot b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties  (PhysicalDeviceShaderCorePropertiesAMD) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderCorePropertiesAMD
-
-instance ToCStruct PhysicalDeviceShaderCorePropertiesAMD
-instance Show PhysicalDeviceShaderCorePropertiesAMD
-
-instance FromCStruct PhysicalDeviceShaderCorePropertiesAMD
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs
+++ /dev/null
@@ -1,150 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties2  ( PhysicalDeviceShaderCoreProperties2AMD(..)
-                                                                  , ShaderCorePropertiesFlagBitsAMD(..)
-                                                                  , ShaderCorePropertiesFlagsAMD
-                                                                  , AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION
-                                                                  , pattern AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION
-                                                                  , AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME
-                                                                  , pattern AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME
-                                                                  ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD))
--- | VkPhysicalDeviceShaderCoreProperties2AMD - Structure describing shader
--- core properties that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceShaderCoreProperties2AMD' structure
--- describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceShaderCoreProperties2AMD' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'ShaderCorePropertiesFlagsAMD',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderCoreProperties2AMD = PhysicalDeviceShaderCoreProperties2AMD
-  { -- | @shaderCoreFeatures@ is a bitmask of 'ShaderCorePropertiesFlagBitsAMD'
-    -- indicating the set of features supported by the shader core.
-    shaderCoreFeatures :: ShaderCorePropertiesFlagsAMD
-  , -- | @activeComputeUnitCount@ is an unsigned integer value indicating the
-    -- number of compute units that have been enabled.
-    activeComputeUnitCount :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderCoreProperties2AMD
-
-instance ToCStruct PhysicalDeviceShaderCoreProperties2AMD where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderCoreProperties2AMD{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ShaderCorePropertiesFlagsAMD)) (shaderCoreFeatures)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (activeComputeUnitCount)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ShaderCorePropertiesFlagsAMD)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceShaderCoreProperties2AMD where
-  peekCStruct p = do
-    shaderCoreFeatures <- peek @ShaderCorePropertiesFlagsAMD ((p `plusPtr` 16 :: Ptr ShaderCorePropertiesFlagsAMD))
-    activeComputeUnitCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pure $ PhysicalDeviceShaderCoreProperties2AMD
-             shaderCoreFeatures activeComputeUnitCount
-
-instance Storable PhysicalDeviceShaderCoreProperties2AMD where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderCoreProperties2AMD where
-  zero = PhysicalDeviceShaderCoreProperties2AMD
-           zero
-           zero
-
-
--- | VkShaderCorePropertiesFlagBitsAMD - Bitmask specifying shader core
--- properties
---
--- = See Also
---
--- 'PhysicalDeviceShaderCoreProperties2AMD', 'ShaderCorePropertiesFlagsAMD'
-newtype ShaderCorePropertiesFlagBitsAMD = ShaderCorePropertiesFlagBitsAMD Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-type ShaderCorePropertiesFlagsAMD = ShaderCorePropertiesFlagBitsAMD
-
-instance Show ShaderCorePropertiesFlagBitsAMD where
-  showsPrec p = \case
-    ShaderCorePropertiesFlagBitsAMD x -> showParen (p >= 11) (showString "ShaderCorePropertiesFlagBitsAMD 0x" . showHex x)
-
-instance Read ShaderCorePropertiesFlagBitsAMD where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ShaderCorePropertiesFlagBitsAMD")
-                       v <- step readPrec
-                       pure (ShaderCorePropertiesFlagBitsAMD v)))
-
-
-type AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION"
-pattern AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION = 1
-
-
-type AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME = "VK_AMD_shader_core_properties2"
-
--- No documentation found for TopLevel "VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME"
-pattern AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME = "VK_AMD_shader_core_properties2"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs-boot b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties2  (PhysicalDeviceShaderCoreProperties2AMD) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderCoreProperties2AMD
-
-instance ToCStruct PhysicalDeviceShaderCoreProperties2AMD
-instance Show PhysicalDeviceShaderCoreProperties2AMD
-
-instance FromCStruct PhysicalDeviceShaderCoreProperties2AMD
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_explicit_vertex_parameter.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter  ( AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION
-                                                                           , pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION
-                                                                           , AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME
-                                                                           , pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME
-                                                                           ) where
-
-import Data.String (IsString)
-
-type AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION"
-pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION = 1
-
-
-type AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME = "VK_AMD_shader_explicit_vertex_parameter"
-
--- No documentation found for TopLevel "VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME"
-pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_fragment_mask.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_fragment_mask  ( AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION
-                                                               , pattern AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION
-                                                               , AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME
-                                                               , pattern AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME
-                                                               ) where
-
-import Data.String (IsString)
-
-type AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION"
-pattern AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION = 1
-
-
-type AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME = "VK_AMD_shader_fragment_mask"
-
--- No documentation found for TopLevel "VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME"
-pattern AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_image_load_store_lod.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_image_load_store_lod  ( AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION
-                                                                      , pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION
-                                                                      , AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME
-                                                                      , pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME
-                                                                      ) where
-
-import Data.String (IsString)
-
-type AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION"
-pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION = 1
-
-
-type AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME = "VK_AMD_shader_image_load_store_lod"
-
--- No documentation found for TopLevel "VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME"
-pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs
+++ /dev/null
@@ -1,431 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_info  ( getShaderInfoAMD
-                                                      , ShaderResourceUsageAMD(..)
-                                                      , ShaderStatisticsInfoAMD(..)
-                                                      , ShaderInfoTypeAMD( SHADER_INFO_TYPE_STATISTICS_AMD
-                                                                         , SHADER_INFO_TYPE_BINARY_AMD
-                                                                         , SHADER_INFO_TYPE_DISASSEMBLY_AMD
-                                                                         , ..
-                                                                         )
-                                                      , AMD_SHADER_INFO_SPEC_VERSION
-                                                      , pattern AMD_SHADER_INFO_SPEC_VERSION
-                                                      , AMD_SHADER_INFO_EXTENSION_NAME
-                                                      , pattern AMD_SHADER_INFO_EXTENSION_NAME
-                                                      ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.ByteString (packCStringLen)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Foreign.C.Types (CSize(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetShaderInfoAMD))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Pipeline)
-import Graphics.Vulkan.Core10.Handles (Pipeline(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetShaderInfoAMD
-  :: FunPtr (Ptr Device_T -> Pipeline -> ShaderStageFlagBits -> ShaderInfoTypeAMD -> Ptr CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> ShaderStageFlagBits -> ShaderInfoTypeAMD -> Ptr CSize -> Ptr () -> IO Result
-
--- | vkGetShaderInfoAMD - Get information about a shader in a pipeline
---
--- = 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
---
--- 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 'getShaderInfoAMD' will return
--- 'Graphics.Vulkan.Core10.Enums.Result.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
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_FEATURE_NOT_PRESENT'.
---
--- If information is successfully and fully queried, the function will
--- return 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'.
---
--- For @infoType@ 'SHADER_INFO_TYPE_STATISTICS_AMD', a
--- 'ShaderStatisticsInfoAMD' structure 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 @infoType@ 'SHADER_INFO_TYPE_DISASSEMBLY_AMD', @pInfo@ is a pointer
--- 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
--- @infoType@ '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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pipeline@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handle
---
--- -   @shaderStage@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
---     value
---
--- -   @infoType@ /must/ be a valid 'ShaderInfoTypeAMD' 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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_FEATURE_NOT_PRESENT'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline', 'ShaderInfoTypeAMD',
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
-getShaderInfoAMD :: forall io . MonadIO io => Device -> Pipeline -> ShaderStageFlagBits -> ShaderInfoTypeAMD -> io (Result, ("info" ::: ByteString))
-getShaderInfoAMD device pipeline shaderStage infoType = liftIO . evalContT $ do
-  let vkGetShaderInfoAMD' = mkVkGetShaderInfoAMD (pVkGetShaderInfoAMD (deviceCmds (device :: Device)))
-  let device' = deviceHandle (device)
-  pPInfoSize <- ContT $ bracket (callocBytes @CSize 8) free
-  r <- lift $ vkGetShaderInfoAMD' device' (pipeline) (shaderStage) (infoType) (pPInfoSize) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pInfoSize <- lift $ peek @CSize pPInfoSize
-  pPInfo <- ContT $ bracket (callocBytes @(()) (fromIntegral (((\(CSize a) -> a) pInfoSize)))) free
-  r' <- lift $ vkGetShaderInfoAMD' device' (pipeline) (shaderStage) (infoType) (pPInfoSize) (pPInfo)
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pInfoSize'' <- lift $ peek @CSize pPInfoSize
-  pInfo' <- lift $ packCStringLen  (castPtr @() @CChar pPInfo, (fromIntegral (((\(CSize a) -> a) pInfoSize''))))
-  pure $ ((r'), pInfo')
-
-
--- | VkShaderResourceUsageAMD - Resource usage information about a particular
--- shader within a pipeline
---
--- = See Also
---
--- 'ShaderStatisticsInfoAMD'
-data ShaderResourceUsageAMD = ShaderResourceUsageAMD
-  { -- | @numUsedVgprs@ is the number of vector instruction general-purpose
-    -- registers used by this shader.
-    numUsedVgprs :: Word32
-  , -- | @numUsedSgprs@ is the number of scalar instruction general-purpose
-    -- registers used by this shader.
-    numUsedSgprs :: Word32
-  , -- | @ldsSizePerLocalWorkGroup@ is the maximum local data store size per work
-    -- group in bytes.
-    ldsSizePerLocalWorkGroup :: Word32
-  , -- | @ldsUsageSizeInBytes@ is the LDS usage size in bytes per work group by
-    -- this shader.
-    ldsUsageSizeInBytes :: Word64
-  , -- | @scratchMemUsageInBytes@ is the scratch memory usage in bytes by this
-    -- shader.
-    scratchMemUsageInBytes :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show ShaderResourceUsageAMD
-
-instance ToCStruct ShaderResourceUsageAMD where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ShaderResourceUsageAMD{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (numUsedVgprs)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (numUsedSgprs)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (ldsSizePerLocalWorkGroup)
-    poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (ldsUsageSizeInBytes))
-    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (scratchMemUsageInBytes))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (zero))
-    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (zero))
-    f
-
-instance FromCStruct ShaderResourceUsageAMD where
-  peekCStruct p = do
-    numUsedVgprs <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    numUsedSgprs <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    ldsSizePerLocalWorkGroup <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    ldsUsageSizeInBytes <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))
-    scratchMemUsageInBytes <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
-    pure $ ShaderResourceUsageAMD
-             numUsedVgprs numUsedSgprs ldsSizePerLocalWorkGroup ((\(CSize a) -> a) ldsUsageSizeInBytes) ((\(CSize a) -> a) scratchMemUsageInBytes)
-
-instance Storable ShaderResourceUsageAMD where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ShaderResourceUsageAMD where
-  zero = ShaderResourceUsageAMD
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkShaderStatisticsInfoAMD - Statistical information about a particular
--- shader within a pipeline
---
--- = 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 'getShaderInfoAMD',
--- 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
---
--- 'ShaderResourceUsageAMD',
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'
-data ShaderStatisticsInfoAMD = ShaderStatisticsInfoAMD
-  { -- | @shaderStageMask@ are the combination of logical shader stages contained
-    -- within this shader.
-    shaderStageMask :: ShaderStageFlags
-  , -- | @resourceUsage@ is a 'ShaderResourceUsageAMD' structure describing
-    -- internal physical device resources used by this shader.
-    resourceUsage :: ShaderResourceUsageAMD
-  , -- | @numPhysicalVgprs@ is the maximum number of vector instruction
-    -- general-purpose registers (VGPRs) available to the physical device.
-    numPhysicalVgprs :: Word32
-  , -- | @numPhysicalSgprs@ is the maximum number of scalar instruction
-    -- general-purpose registers (SGPRs) available to the physical device.
-    numPhysicalSgprs :: Word32
-  , -- | @numAvailableVgprs@ is the maximum limit of VGPRs made available to the
-    -- shader compiler.
-    numAvailableVgprs :: Word32
-  , -- | @numAvailableSgprs@ is the maximum limit of SGPRs made available to the
-    -- shader compiler.
-    numAvailableSgprs :: Word32
-  , -- | @computeWorkGroupSize@ is the local workgroup size of this shader in {
-    -- X, Y, Z } dimensions.
-    computeWorkGroupSize :: (Word32, Word32, Word32)
-  }
-  deriving (Typeable)
-deriving instance Show ShaderStatisticsInfoAMD
-
-instance ToCStruct ShaderStatisticsInfoAMD where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ShaderStatisticsInfoAMD{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr ShaderStageFlags)) (shaderStageMask)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr ShaderResourceUsageAMD)) (resourceUsage) . ($ ())
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (numPhysicalVgprs)
-    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (numPhysicalSgprs)
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (numAvailableVgprs)
-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (numAvailableSgprs)
-    let pComputeWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 3 Word32)))
-    lift $ case (computeWorkGroupSize) of
-      (e0, e1, e2) -> do
-        poke (pComputeWorkGroupSize' :: Ptr Word32) (e0)
-        poke (pComputeWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
-        poke (pComputeWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr ShaderStageFlags)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr ShaderResourceUsageAMD)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
-    let pComputeWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 3 Word32)))
-    lift $ case ((zero, zero, zero)) of
-      (e0, e1, e2) -> do
-        poke (pComputeWorkGroupSize' :: Ptr Word32) (e0)
-        poke (pComputeWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
-        poke (pComputeWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
-    lift $ f
-
-instance FromCStruct ShaderStatisticsInfoAMD where
-  peekCStruct p = do
-    shaderStageMask <- peek @ShaderStageFlags ((p `plusPtr` 0 :: Ptr ShaderStageFlags))
-    resourceUsage <- peekCStruct @ShaderResourceUsageAMD ((p `plusPtr` 8 :: Ptr ShaderResourceUsageAMD))
-    numPhysicalVgprs <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    numPhysicalSgprs <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
-    numAvailableVgprs <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    numAvailableSgprs <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
-    let pcomputeWorkGroupSize = lowerArrayPtr @Word32 ((p `plusPtr` 56 :: Ptr (FixedArray 3 Word32)))
-    computeWorkGroupSize0 <- peek @Word32 ((pcomputeWorkGroupSize `advancePtrBytes` 0 :: Ptr Word32))
-    computeWorkGroupSize1 <- peek @Word32 ((pcomputeWorkGroupSize `advancePtrBytes` 4 :: Ptr Word32))
-    computeWorkGroupSize2 <- peek @Word32 ((pcomputeWorkGroupSize `advancePtrBytes` 8 :: Ptr Word32))
-    pure $ ShaderStatisticsInfoAMD
-             shaderStageMask resourceUsage numPhysicalVgprs numPhysicalSgprs numAvailableVgprs numAvailableSgprs ((computeWorkGroupSize0, computeWorkGroupSize1, computeWorkGroupSize2))
-
-instance Zero ShaderStatisticsInfoAMD where
-  zero = ShaderStatisticsInfoAMD
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           (zero, zero, zero)
-
-
--- | VkShaderInfoTypeAMD - Enum specifying which type of shader info to query
---
--- = See Also
---
--- 'getShaderInfoAMD'
-newtype ShaderInfoTypeAMD = ShaderInfoTypeAMD Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'SHADER_INFO_TYPE_STATISTICS_AMD' specifies that device resources used
--- by a shader will be queried.
-pattern SHADER_INFO_TYPE_STATISTICS_AMD = ShaderInfoTypeAMD 0
--- | 'SHADER_INFO_TYPE_BINARY_AMD' specifies that implementation-specific
--- information will be queried.
-pattern SHADER_INFO_TYPE_BINARY_AMD = ShaderInfoTypeAMD 1
--- | 'SHADER_INFO_TYPE_DISASSEMBLY_AMD' specifies that human-readable
--- dissassembly of a shader.
-pattern SHADER_INFO_TYPE_DISASSEMBLY_AMD = ShaderInfoTypeAMD 2
-{-# complete SHADER_INFO_TYPE_STATISTICS_AMD,
-             SHADER_INFO_TYPE_BINARY_AMD,
-             SHADER_INFO_TYPE_DISASSEMBLY_AMD :: ShaderInfoTypeAMD #-}
-
-instance Show ShaderInfoTypeAMD where
-  showsPrec p = \case
-    SHADER_INFO_TYPE_STATISTICS_AMD -> showString "SHADER_INFO_TYPE_STATISTICS_AMD"
-    SHADER_INFO_TYPE_BINARY_AMD -> showString "SHADER_INFO_TYPE_BINARY_AMD"
-    SHADER_INFO_TYPE_DISASSEMBLY_AMD -> showString "SHADER_INFO_TYPE_DISASSEMBLY_AMD"
-    ShaderInfoTypeAMD x -> showParen (p >= 11) (showString "ShaderInfoTypeAMD " . showsPrec 11 x)
-
-instance Read ShaderInfoTypeAMD where
-  readPrec = parens (choose [("SHADER_INFO_TYPE_STATISTICS_AMD", pure SHADER_INFO_TYPE_STATISTICS_AMD)
-                            , ("SHADER_INFO_TYPE_BINARY_AMD", pure SHADER_INFO_TYPE_BINARY_AMD)
-                            , ("SHADER_INFO_TYPE_DISASSEMBLY_AMD", pure SHADER_INFO_TYPE_DISASSEMBLY_AMD)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ShaderInfoTypeAMD")
-                       v <- step readPrec
-                       pure (ShaderInfoTypeAMD v)))
-
-
-type AMD_SHADER_INFO_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_SHADER_INFO_SPEC_VERSION"
-pattern AMD_SHADER_INFO_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_SHADER_INFO_SPEC_VERSION = 1
-
-
-type AMD_SHADER_INFO_EXTENSION_NAME = "VK_AMD_shader_info"
-
--- No documentation found for TopLevel "VK_AMD_SHADER_INFO_EXTENSION_NAME"
-pattern AMD_SHADER_INFO_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_SHADER_INFO_EXTENSION_NAME = "VK_AMD_shader_info"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs-boot b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs-boot
+++ /dev/null
@@ -1,27 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_info  ( ShaderResourceUsageAMD
-                                                      , ShaderStatisticsInfoAMD
-                                                      , ShaderInfoTypeAMD
-                                                      ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ShaderResourceUsageAMD
-
-instance ToCStruct ShaderResourceUsageAMD
-instance Show ShaderResourceUsageAMD
-
-instance FromCStruct ShaderResourceUsageAMD
-
-
-data ShaderStatisticsInfoAMD
-
-instance ToCStruct ShaderStatisticsInfoAMD
-instance Show ShaderStatisticsInfoAMD
-
-instance FromCStruct ShaderStatisticsInfoAMD
-
-
-data ShaderInfoTypeAMD
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_trinary_minmax.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_trinary_minmax.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_trinary_minmax.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_shader_trinary_minmax  ( AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION
-                                                                , pattern AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION
-                                                                , AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME
-                                                                , pattern AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME
-                                                                ) where
-
-import Data.String (IsString)
-
-type AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION"
-pattern AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION = 1
-
-
-type AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME = "VK_AMD_shader_trinary_minmax"
-
--- No documentation found for TopLevel "VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME"
-pattern AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs
+++ /dev/null
@@ -1,93 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod  ( TextureLODGatherFormatPropertiesAMD(..)
-                                                                  , AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION
-                                                                  , pattern AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION
-                                                                  , AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME
-                                                                  , pattern AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME
-                                                                  ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD))
--- | VkTextureLODGatherFormatPropertiesAMD - Structure informing whether or
--- not texture gather bias\/LOD functionality is supported for a given
--- image format and a given physical device.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data TextureLODGatherFormatPropertiesAMD = TextureLODGatherFormatPropertiesAMD
-  { -- | @supportsTextureGatherLODBiasAMD@ tells if the image format can be used
-    -- with texture gather bias\/LOD functions, as introduced by the
-    -- @VK_AMD_texture_gather_bias_lod@ extension. This field is set by the
-    -- implementation. User-specified value is ignored.
-    supportsTextureGatherLODBiasAMD :: Bool }
-  deriving (Typeable)
-deriving instance Show TextureLODGatherFormatPropertiesAMD
-
-instance ToCStruct TextureLODGatherFormatPropertiesAMD where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p TextureLODGatherFormatPropertiesAMD{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (supportsTextureGatherLODBiasAMD))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct TextureLODGatherFormatPropertiesAMD where
-  peekCStruct p = do
-    supportsTextureGatherLODBiasAMD <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ TextureLODGatherFormatPropertiesAMD
-             (bool32ToBool supportsTextureGatherLODBiasAMD)
-
-instance Storable TextureLODGatherFormatPropertiesAMD where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero TextureLODGatherFormatPropertiesAMD where
-  zero = TextureLODGatherFormatPropertiesAMD
-           zero
-
-
-type AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION"
-pattern AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION :: forall a . Integral a => a
-pattern AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION = 1
-
-
-type AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME = "VK_AMD_texture_gather_bias_lod"
-
--- No documentation found for TopLevel "VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME"
-pattern AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME = "VK_AMD_texture_gather_bias_lod"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs-boot b/src/Graphics/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod  (TextureLODGatherFormatPropertiesAMD) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data TextureLODGatherFormatPropertiesAMD
-
-instance ToCStruct TextureLODGatherFormatPropertiesAMD
-instance Show TextureLODGatherFormatPropertiesAMD
-
-instance FromCStruct TextureLODGatherFormatPropertiesAMD
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
+++ /dev/null
@@ -1,731 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer  ( getAndroidHardwareBufferPropertiesANDROID
-                                                                                      , getMemoryAndroidHardwareBufferANDROID
-                                                                                      , ImportAndroidHardwareBufferInfoANDROID(..)
-                                                                                      , AndroidHardwareBufferUsageANDROID(..)
-                                                                                      , AndroidHardwareBufferPropertiesANDROID(..)
-                                                                                      , MemoryGetAndroidHardwareBufferInfoANDROID(..)
-                                                                                      , AndroidHardwareBufferFormatPropertiesANDROID(..)
-                                                                                      , ExternalFormatANDROID(..)
-                                                                                      , ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION
-                                                                                      , pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION
-                                                                                      , ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME
-                                                                                      , pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME
-                                                                                      , AHardwareBuffer
-                                                                                      ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Extensions.WSITypes (AHardwareBuffer)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core11.Enums.ChromaLocation (ChromaLocation)
-import Graphics.Vulkan.Core10.ImageView (ComponentMapping)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetAndroidHardwareBufferPropertiesANDROID))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetMemoryAndroidHardwareBufferANDROID))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion)
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (AHardwareBuffer)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetAndroidHardwareBufferPropertiesANDROID
-  :: FunPtr (Ptr Device_T -> Ptr AHardwareBuffer -> Ptr (AndroidHardwareBufferPropertiesANDROID a) -> IO Result) -> Ptr Device_T -> Ptr AHardwareBuffer -> Ptr (AndroidHardwareBufferPropertiesANDROID a) -> IO Result
-
--- | vkGetAndroidHardwareBufferPropertiesANDROID - Get Properties of External
--- Memory Android Hardware Buffers
---
--- = Parameters
---
--- -   @device@ is the logical device that will be importing @buffer@.
---
--- -   @buffer@ is the Android hardware buffer which will be imported.
---
--- -   @pProperties@ is a pointer to a
---     'AndroidHardwareBufferPropertiesANDROID' structure in which the
---     properties of @buffer@ are returned.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Extensions.VK_KHR_external_memory.ERROR_INVALID_EXTERNAL_HANDLE_KHR'
---
--- = See Also
---
--- 'AndroidHardwareBufferPropertiesANDROID',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-getAndroidHardwareBufferPropertiesANDROID :: forall a io . (PokeChain a, PeekChain a, MonadIO io) => Device -> Ptr AHardwareBuffer -> io (AndroidHardwareBufferPropertiesANDROID a)
-getAndroidHardwareBufferPropertiesANDROID device buffer = liftIO . evalContT $ do
-  let vkGetAndroidHardwareBufferPropertiesANDROID' = mkVkGetAndroidHardwareBufferPropertiesANDROID (pVkGetAndroidHardwareBufferPropertiesANDROID (deviceCmds (device :: Device)))
-  pPProperties <- ContT (withZeroCStruct @(AndroidHardwareBufferPropertiesANDROID _))
-  r <- lift $ vkGetAndroidHardwareBufferPropertiesANDROID' (deviceHandle (device)) (buffer) (pPProperties)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pProperties <- lift $ peekCStruct @(AndroidHardwareBufferPropertiesANDROID _) pPProperties
-  pure $ (pProperties)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetMemoryAndroidHardwareBufferANDROID
-  :: FunPtr (Ptr Device_T -> Ptr MemoryGetAndroidHardwareBufferInfoANDROID -> Ptr (Ptr AHardwareBuffer) -> IO Result) -> Ptr Device_T -> Ptr MemoryGetAndroidHardwareBufferInfoANDROID -> Ptr (Ptr AHardwareBuffer) -> IO Result
-
--- | vkGetMemoryAndroidHardwareBufferANDROID - Get an Android hardware buffer
--- for a memory object
---
--- = Parameters
---
--- -   @device@ is the logical device that created the device memory being
---     exported.
---
--- -   @pInfo@ is a pointer to a
---     'MemoryGetAndroidHardwareBufferInfoANDROID' structure containing
---     parameters of the export operation.
---
--- -   @pBuffer@ will return an Android hardware buffer representing the
---     underlying resources of the device memory object.
---
--- = Description
---
--- Each call to 'getMemoryAndroidHardwareBufferANDROID' /must/ return an
--- Android hardware buffer with a new reference acquired in addition to the
--- reference held by the 'Graphics.Vulkan.Core10.Handles.DeviceMemory'. 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
--- 'MemoryGetAndroidHardwareBufferInfoANDROID'::@memory@,
--- 'getMemoryAndroidHardwareBufferANDROID' /must/ return the same Android
--- hardware buffer object. If the device memory was created by importing an
--- Android hardware buffer, 'getMemoryAndroidHardwareBufferANDROID' /must/
--- return that same Android hardware buffer object.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'MemoryGetAndroidHardwareBufferInfoANDROID'
-getMemoryAndroidHardwareBufferANDROID :: forall io . MonadIO io => Device -> MemoryGetAndroidHardwareBufferInfoANDROID -> io (Ptr AHardwareBuffer)
-getMemoryAndroidHardwareBufferANDROID device info = liftIO . evalContT $ do
-  let vkGetMemoryAndroidHardwareBufferANDROID' = mkVkGetMemoryAndroidHardwareBufferANDROID (pVkGetMemoryAndroidHardwareBufferANDROID (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  pPBuffer <- ContT $ bracket (callocBytes @(Ptr AHardwareBuffer) 8) free
-  r <- lift $ vkGetMemoryAndroidHardwareBufferANDROID' (deviceHandle (device)) pInfo (pPBuffer)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pBuffer <- lift $ peek @(Ptr AHardwareBuffer) pPBuffer
-  pure $ (pBuffer)
-
-
--- | VkImportAndroidHardwareBufferInfoANDROID - Import memory from an Android
--- hardware buffer
---
--- = Description
---
--- If the 'Graphics.Vulkan.Core10.Memory.allocateMemory' 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.ExternalImageFormatProperties'
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'
---
--- -   If @buffer@ is not @NULL@, it /must/ be a valid Android hardware
---     buffer object with @AHardwareBuffer_Desc@::@format@ and
---     @AHardwareBuffer_Desc@::@usage@ compatible with Vulkan as described
---     in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer Android Hardware Buffers>
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID'
---
--- -   @buffer@ /must/ be a valid pointer to an
---     'Graphics.Vulkan.Extensions.WSITypes.AHardwareBuffer' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImportAndroidHardwareBufferInfoANDROID = ImportAndroidHardwareBufferInfoANDROID
-  { -- | @buffer@ is the Android hardware buffer to import.
-    buffer :: Ptr AHardwareBuffer }
-  deriving (Typeable)
-deriving instance Show ImportAndroidHardwareBufferInfoANDROID
-
-instance ToCStruct ImportAndroidHardwareBufferInfoANDROID where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImportAndroidHardwareBufferInfoANDROID{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr (Ptr AHardwareBuffer))) (buffer)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr (Ptr AHardwareBuffer))) (zero)
-    f
-
-instance FromCStruct ImportAndroidHardwareBufferInfoANDROID where
-  peekCStruct p = do
-    buffer <- peek @(Ptr AHardwareBuffer) ((p `plusPtr` 16 :: Ptr (Ptr AHardwareBuffer)))
-    pure $ ImportAndroidHardwareBufferInfoANDROID
-             buffer
-
-instance Storable ImportAndroidHardwareBufferInfoANDROID where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImportAndroidHardwareBufferInfoANDROID where
-  zero = ImportAndroidHardwareBufferInfoANDROID
-           zero
-
-
--- | VkAndroidHardwareBufferUsageANDROID - Struct containing Android hardware
--- buffer usage flags
---
--- = Description
---
--- The @androidHardwareBufferUsage@ field /must/ include Android hardware
--- buffer usage flags listed in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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.PhysicalDeviceImageFormatInfo2'.
--- 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 does not 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.ImageFormatProperties2'
--- are required.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data AndroidHardwareBufferUsageANDROID = AndroidHardwareBufferUsageANDROID
-  { -- | @androidHardwareBufferUsage@ returns the Android hardware buffer usage
-    -- flags.
-    androidHardwareBufferUsage :: Word64 }
-  deriving (Typeable)
-deriving instance Show AndroidHardwareBufferUsageANDROID
-
-instance ToCStruct AndroidHardwareBufferUsageANDROID where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AndroidHardwareBufferUsageANDROID{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (androidHardwareBufferUsage)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct AndroidHardwareBufferUsageANDROID where
-  peekCStruct p = do
-    androidHardwareBufferUsage <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
-    pure $ AndroidHardwareBufferUsageANDROID
-             androidHardwareBufferUsage
-
-instance Storable AndroidHardwareBufferUsageANDROID where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AndroidHardwareBufferUsageANDROID where
-  zero = AndroidHardwareBufferUsageANDROID
-           zero
-
-
--- | VkAndroidHardwareBufferPropertiesANDROID - Properties of External Memory
--- Android Hardware Buffers
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'AndroidHardwareBufferFormatPropertiesANDROID'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getAndroidHardwareBufferPropertiesANDROID'
-data AndroidHardwareBufferPropertiesANDROID (es :: [Type]) = AndroidHardwareBufferPropertiesANDROID
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @allocationSize@ is the size of the external memory
-    allocationSize :: DeviceSize
-  , -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
-    -- type which the specified Android hardware buffer /can/ be imported as.
-    memoryTypeBits :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (AndroidHardwareBufferPropertiesANDROID es)
-
-instance Extensible AndroidHardwareBufferPropertiesANDROID where
-  extensibleType = STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID
-  setNext x next = x{next = next}
-  getNext AndroidHardwareBufferPropertiesANDROID{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AndroidHardwareBufferPropertiesANDROID e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @AndroidHardwareBufferFormatPropertiesANDROID = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (AndroidHardwareBufferPropertiesANDROID es) where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AndroidHardwareBufferPropertiesANDROID{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (allocationSize)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (memoryTypeBits)
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (AndroidHardwareBufferPropertiesANDROID es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    allocationSize <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    memoryTypeBits <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pure $ AndroidHardwareBufferPropertiesANDROID
-             next allocationSize memoryTypeBits
-
-instance es ~ '[] => Zero (AndroidHardwareBufferPropertiesANDROID es) where
-  zero = AndroidHardwareBufferPropertiesANDROID
-           ()
-           zero
-           zero
-
-
--- | VkMemoryGetAndroidHardwareBufferInfoANDROID - Structure describing an
--- Android hardware buffer memory export operation
---
--- == Valid Usage
---
--- -   'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
---     /must/ have been included in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
---     when @memory@ was created
---
--- -   If the @pNext@ chain of the
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' used to allocate
---     @memory@ included a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
---     with non-@NULL@ @image@ member, then that @image@ /must/ already be
---     bound to @memory@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @memory@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getMemoryAndroidHardwareBufferANDROID'
-data MemoryGetAndroidHardwareBufferInfoANDROID = MemoryGetAndroidHardwareBufferInfoANDROID
-  { -- | @memory@ is the memory object from which the Android hardware buffer
-    -- will be exported.
-    memory :: DeviceMemory }
-  deriving (Typeable)
-deriving instance Show MemoryGetAndroidHardwareBufferInfoANDROID
-
-instance ToCStruct MemoryGetAndroidHardwareBufferInfoANDROID where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryGetAndroidHardwareBufferInfoANDROID{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
-    f
-
-instance FromCStruct MemoryGetAndroidHardwareBufferInfoANDROID where
-  peekCStruct p = do
-    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
-    pure $ MemoryGetAndroidHardwareBufferInfoANDROID
-             memory
-
-instance Storable MemoryGetAndroidHardwareBufferInfoANDROID where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryGetAndroidHardwareBufferInfoANDROID where
-  zero = MemoryGetAndroidHardwareBufferInfoANDROID
-           zero
-
-
--- | VkAndroidHardwareBufferFormatPropertiesANDROID - Structure describing
--- the image format properties of an Android hardware buffer
---
--- = Description
---
--- If the Android hardware buffer has one of the formats listed in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', indicating the
--- Android hardware buffer /can/ only be used with an external format.
---
--- The @formatFeatures@ member /must/ include
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT'
--- and at least one of
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT'
--- or
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT',
--- and /should/ include
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
--- and
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT'.
---
--- Note
---
--- The @formatFeatures@ member only indicates the features available when
--- using an
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external-format image>
--- created from the Android hardware buffer. Images from Android hardware
--- buffers with a format other than
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' are subject to
--- the format capabilities obtained from
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2',
--- and
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
--- with appropriate parameters. These sets of features are independent of
--- each other, e.g. the external format will support sampler Y′CBCR
--- conversion even if the non-external format does not, and writing to
--- non-external format images is possible but writing to external format
--- images is not.
---
--- Android hardware buffers with the same external format /must/ have the
--- same support for
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT',
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT',
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT',
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT',
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT',
--- and
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'.
--- in @formatFeatures@. 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.Handles.SamplerYcbcrConversion' object (and
--- samplers and pipelines created from them) for any Android hardware
--- buffers that have the same external format.
---
--- If @format@ is not
--- 'Graphics.Vulkan.Core10.Enums.Format.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.SamplerYcbcrConversionCreateInfo'
--- with that format. If @format@ is
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', all members of
--- @samplerYcbcrConversionComponents@ /must/ be
--- 'Graphics.Vulkan.Core10.Enums.ComponentSwizzle.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 'AndroidHardwareBufferFormatPropertiesANDROID' 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
--- <https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt 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
--- <https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt 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)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ChromaLocation.ChromaLocation',
--- 'Graphics.Vulkan.Core10.ImageView.ComponentMapping',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlags',
--- 'Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SamplerYcbcrModelConversion',
--- 'Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange.SamplerYcbcrRange',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data AndroidHardwareBufferFormatPropertiesANDROID = AndroidHardwareBufferFormatPropertiesANDROID
-  { -- | @format@ is the Vulkan format corresponding to the Android hardware
-    -- buffer’s format, or
-    -- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' if there is not
-    -- an equivalent Vulkan format.
-    format :: Format
-  , -- | @externalFormat@ is an implementation-defined external format identifier
-    -- for use with 'ExternalFormatANDROID'. It /must/ not be zero.
-    externalFormat :: Word64
-  , -- | @formatFeatures@ describes the capabilities of this external format when
-    -- used with an image bound to memory imported from @buffer@.
-    formatFeatures :: FormatFeatureFlags
-  , -- | @samplerYcbcrConversionComponents@ is the component swizzle that
-    -- /should/ be used in
-    -- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'.
-    samplerYcbcrConversionComponents :: ComponentMapping
-  , -- | @suggestedYcbcrModel@ is a suggested color model to use in the
-    -- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'.
-    suggestedYcbcrModel :: SamplerYcbcrModelConversion
-  , -- | @suggestedYcbcrRange@ is a suggested numerical value range to use in
-    -- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'.
-    suggestedYcbcrRange :: SamplerYcbcrRange
-  , -- | @suggestedXChromaOffset@ is a suggested X chroma offset to use in
-    -- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'.
-    suggestedXChromaOffset :: ChromaLocation
-  , -- | @suggestedYChromaOffset@ is a suggested Y chroma offset to use in
-    -- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'.
-    suggestedYChromaOffset :: ChromaLocation
-  }
-  deriving (Typeable)
-deriving instance Show AndroidHardwareBufferFormatPropertiesANDROID
-
-instance ToCStruct AndroidHardwareBufferFormatPropertiesANDROID where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AndroidHardwareBufferFormatPropertiesANDROID{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (format)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word64)) (externalFormat)
-    lift $ poke ((p `plusPtr` 32 :: Ptr FormatFeatureFlags)) (formatFeatures)
-    ContT $ pokeCStruct ((p `plusPtr` 36 :: Ptr ComponentMapping)) (samplerYcbcrConversionComponents) . ($ ())
-    lift $ poke ((p `plusPtr` 52 :: Ptr SamplerYcbcrModelConversion)) (suggestedYcbcrModel)
-    lift $ poke ((p `plusPtr` 56 :: Ptr SamplerYcbcrRange)) (suggestedYcbcrRange)
-    lift $ poke ((p `plusPtr` 60 :: Ptr ChromaLocation)) (suggestedXChromaOffset)
-    lift $ poke ((p `plusPtr` 64 :: Ptr ChromaLocation)) (suggestedYChromaOffset)
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr FormatFeatureFlags)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 36 :: Ptr ComponentMapping)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 52 :: Ptr SamplerYcbcrModelConversion)) (zero)
-    lift $ poke ((p `plusPtr` 56 :: Ptr SamplerYcbcrRange)) (zero)
-    lift $ poke ((p `plusPtr` 60 :: Ptr ChromaLocation)) (zero)
-    lift $ poke ((p `plusPtr` 64 :: Ptr ChromaLocation)) (zero)
-    lift $ f
-
-instance FromCStruct AndroidHardwareBufferFormatPropertiesANDROID where
-  peekCStruct p = do
-    format <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
-    externalFormat <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    formatFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 32 :: Ptr FormatFeatureFlags))
-    samplerYcbcrConversionComponents <- peekCStruct @ComponentMapping ((p `plusPtr` 36 :: Ptr ComponentMapping))
-    suggestedYcbcrModel <- peek @SamplerYcbcrModelConversion ((p `plusPtr` 52 :: Ptr SamplerYcbcrModelConversion))
-    suggestedYcbcrRange <- peek @SamplerYcbcrRange ((p `plusPtr` 56 :: Ptr SamplerYcbcrRange))
-    suggestedXChromaOffset <- peek @ChromaLocation ((p `plusPtr` 60 :: Ptr ChromaLocation))
-    suggestedYChromaOffset <- peek @ChromaLocation ((p `plusPtr` 64 :: Ptr ChromaLocation))
-    pure $ AndroidHardwareBufferFormatPropertiesANDROID
-             format externalFormat formatFeatures samplerYcbcrConversionComponents suggestedYcbcrModel suggestedYcbcrRange suggestedXChromaOffset suggestedYChromaOffset
-
-instance Zero AndroidHardwareBufferFormatPropertiesANDROID where
-  zero = AndroidHardwareBufferFormatPropertiesANDROID
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkExternalFormatANDROID - Structure containing an Android hardware
--- buffer external format
---
--- = Description
---
--- If @externalFormat@ is zero, the effect is as if the
--- 'ExternalFormatANDROID' structure was not present. Otherwise, the
--- @image@ will have the specified external format.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExternalFormatANDROID = ExternalFormatANDROID
-  { -- | @externalFormat@ /must/ be @0@ or a value returned in the
-    -- @externalFormat@ member of
-    -- 'AndroidHardwareBufferFormatPropertiesANDROID' by an earlier call to
-    -- 'getAndroidHardwareBufferPropertiesANDROID'
-    externalFormat :: Word64 }
-  deriving (Typeable)
-deriving instance Show ExternalFormatANDROID
-
-instance ToCStruct ExternalFormatANDROID where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExternalFormatANDROID{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (externalFormat)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct ExternalFormatANDROID where
-  peekCStruct p = do
-    externalFormat <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
-    pure $ ExternalFormatANDROID
-             externalFormat
-
-instance Storable ExternalFormatANDROID where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExternalFormatANDROID where
-  zero = ExternalFormatANDROID
-           zero
-
-
-type ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION"
-pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION :: forall a . Integral a => a
-pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION = 3
-
-
-type ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME = "VK_ANDROID_external_memory_android_hardware_buffer"
-
--- No documentation found for TopLevel "VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME"
-pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME = "VK_ANDROID_external_memory_android_hardware_buffer"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot b/src/Graphics/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer  ( AndroidHardwareBufferFormatPropertiesANDROID
-                                                                                      , AndroidHardwareBufferPropertiesANDROID
-                                                                                      , AndroidHardwareBufferUsageANDROID
-                                                                                      , ExternalFormatANDROID
-                                                                                      , ImportAndroidHardwareBufferInfoANDROID
-                                                                                      , MemoryGetAndroidHardwareBufferInfoANDROID
-                                                                                      ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data AndroidHardwareBufferFormatPropertiesANDROID
-
-instance ToCStruct AndroidHardwareBufferFormatPropertiesANDROID
-instance Show AndroidHardwareBufferFormatPropertiesANDROID
-
-instance FromCStruct AndroidHardwareBufferFormatPropertiesANDROID
-
-
-type role AndroidHardwareBufferPropertiesANDROID nominal
-data AndroidHardwareBufferPropertiesANDROID (es :: [Type])
-
-instance PokeChain es => ToCStruct (AndroidHardwareBufferPropertiesANDROID es)
-instance Show (Chain es) => Show (AndroidHardwareBufferPropertiesANDROID es)
-
-instance PeekChain es => FromCStruct (AndroidHardwareBufferPropertiesANDROID es)
-
-
-data AndroidHardwareBufferUsageANDROID
-
-instance ToCStruct AndroidHardwareBufferUsageANDROID
-instance Show AndroidHardwareBufferUsageANDROID
-
-instance FromCStruct AndroidHardwareBufferUsageANDROID
-
-
-data ExternalFormatANDROID
-
-instance ToCStruct ExternalFormatANDROID
-instance Show ExternalFormatANDROID
-
-instance FromCStruct ExternalFormatANDROID
-
-
-data ImportAndroidHardwareBufferInfoANDROID
-
-instance ToCStruct ImportAndroidHardwareBufferInfoANDROID
-instance Show ImportAndroidHardwareBufferInfoANDROID
-
-instance FromCStruct ImportAndroidHardwareBufferInfoANDROID
-
-
-data MemoryGetAndroidHardwareBufferInfoANDROID
-
-instance ToCStruct MemoryGetAndroidHardwareBufferInfoANDROID
-instance Show MemoryGetAndroidHardwareBufferInfoANDROID
-
-instance FromCStruct MemoryGetAndroidHardwareBufferInfoANDROID
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
+++ /dev/null
@@ -1,162 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display  ( acquireXlibDisplayEXT
-                                                               , getRandROutputDisplayEXT
-                                                               , EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION
-                                                               , pattern EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION
-                                                               , EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME
-                                                               , pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME
-                                                               , DisplayKHR(..)
-                                                               , Display
-                                                               , RROutput
-                                                               ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Foreign.Storable (Storable(peek))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Extensions.WSITypes (Display)
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR)
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkAcquireXlibDisplayEXT))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetRandROutputDisplayEXT))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Extensions.WSITypes (RROutput)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (Display)
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR(..))
-import Graphics.Vulkan.Extensions.WSITypes (RROutput)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkAcquireXlibDisplayEXT
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Display -> DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Display -> DisplayKHR -> IO Result
-
--- | vkAcquireXlibDisplayEXT - Acquire access to a VkDisplayKHR using Xlib
---
--- = 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
---
--- 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 loses
--- 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
--- 'Graphics.Vulkan.Core10.Enums.Result.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.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-acquireXlibDisplayEXT :: forall io . MonadIO io => PhysicalDevice -> ("dpy" ::: Ptr Display) -> DisplayKHR -> io ()
-acquireXlibDisplayEXT physicalDevice dpy display = liftIO $ do
-  let vkAcquireXlibDisplayEXT' = mkVkAcquireXlibDisplayEXT (pVkAcquireXlibDisplayEXT (instanceCmds (physicalDevice :: PhysicalDevice)))
-  r <- vkAcquireXlibDisplayEXT' (physicalDeviceHandle (physicalDevice)) (dpy) (display)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetRandROutputDisplayEXT
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Display -> RROutput -> Ptr DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Display -> RROutput -> Ptr DisplayKHR -> IO Result
-
--- | vkGetRandROutputDisplayEXT - Query the VkDisplayKHR corresponding to an
--- X11 RandR Output
---
--- = 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.Handles.DisplayKHR' handle will be
---     returned here.
---
--- = Description
---
--- If there is no 'Graphics.Vulkan.Extensions.Handles.DisplayKHR'
--- corresponding to @rrOutput@ on @physicalDevice@,
--- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ be returned in
--- @pDisplay@.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getRandROutputDisplayEXT :: forall io . MonadIO io => PhysicalDevice -> ("dpy" ::: Ptr Display) -> RROutput -> io (DisplayKHR)
-getRandROutputDisplayEXT physicalDevice dpy rrOutput = liftIO . evalContT $ do
-  let vkGetRandROutputDisplayEXT' = mkVkGetRandROutputDisplayEXT (pVkGetRandROutputDisplayEXT (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPDisplay <- ContT $ bracket (callocBytes @DisplayKHR 8) free
-  _ <- lift $ vkGetRandROutputDisplayEXT' (physicalDeviceHandle (physicalDevice)) (dpy) (rrOutput) (pPDisplay)
-  pDisplay <- lift $ peek @DisplayKHR pPDisplay
-  pure $ (pDisplay)
-
-
-type EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION"
-pattern EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION = 1
-
-
-type EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_xlib_display"
-
--- No documentation found for TopLevel "VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME"
-pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_xlib_display"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs
+++ /dev/null
@@ -1,213 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode  ( ImageViewASTCDecodeModeEXT(..)
-                                                           , PhysicalDeviceASTCDecodeFeaturesEXT(..)
-                                                           , EXT_ASTC_DECODE_MODE_SPEC_VERSION
-                                                           , pattern EXT_ASTC_DECODE_MODE_SPEC_VERSION
-                                                           , EXT_ASTC_DECODE_MODE_EXTENSION_NAME
-                                                           , pattern EXT_ASTC_DECODE_MODE_EXTENSION_NAME
-                                                           ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT))
--- | VkImageViewASTCDecodeModeEXT - Structure describing the ASTC decode mode
--- for an image view
---
--- == Valid Usage
---
--- -   @decodeMode@ /must/ be one of
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_SFLOAT',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM', or
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-astc-decodeModeSharedExponent decodeModeSharedExponent>
---     feature is not enabled, @decodeMode@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32'
---
--- -   If @decodeMode@ is
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM' the
---     image view /must/ not include blocks using any of the ASTC HDR modes
---
--- -   @format@ of the image view /must/ be one of
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_UNORM_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_SRGB_BLOCK',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_UNORM_BLOCK',
---     or
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_SRGB_BLOCK'
---
--- If @format@ uses sRGB encoding then the @decodeMode@ has no effect.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT'
---
--- -   @decodeMode@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImageViewASTCDecodeModeEXT = ImageViewASTCDecodeModeEXT
-  { -- | @decodeMode@ is the intermediate format used to decode ASTC compressed
-    -- formats.
-    decodeMode :: Format }
-  deriving (Typeable)
-deriving instance Show ImageViewASTCDecodeModeEXT
-
-instance ToCStruct ImageViewASTCDecodeModeEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageViewASTCDecodeModeEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Format)) (decodeMode)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
-    f
-
-instance FromCStruct ImageViewASTCDecodeModeEXT where
-  peekCStruct p = do
-    decodeMode <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
-    pure $ ImageViewASTCDecodeModeEXT
-             decodeMode
-
-instance Storable ImageViewASTCDecodeModeEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageViewASTCDecodeModeEXT where
-  zero = ImageViewASTCDecodeModeEXT
-           zero
-
-
--- | VkPhysicalDeviceASTCDecodeFeaturesEXT - Structure describing ASTC decode
--- mode features
---
--- = Members
---
--- The members of the 'PhysicalDeviceASTCDecodeFeaturesEXT' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceASTCDecodeFeaturesEXT' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceASTCDecodeFeaturesEXT' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.createDevice' to enable
--- features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceASTCDecodeFeaturesEXT = PhysicalDeviceASTCDecodeFeaturesEXT
-  { -- | @decodeModeSharedExponent@ indicates whether the implementation supports
-    -- decoding ASTC compressed formats to
-    -- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32'
-    -- internal precision.
-    decodeModeSharedExponent :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceASTCDecodeFeaturesEXT
-
-instance ToCStruct PhysicalDeviceASTCDecodeFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceASTCDecodeFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (decodeModeSharedExponent))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceASTCDecodeFeaturesEXT where
-  peekCStruct p = do
-    decodeModeSharedExponent <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceASTCDecodeFeaturesEXT
-             (bool32ToBool decodeModeSharedExponent)
-
-instance Storable PhysicalDeviceASTCDecodeFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceASTCDecodeFeaturesEXT where
-  zero = PhysicalDeviceASTCDecodeFeaturesEXT
-           zero
-
-
-type EXT_ASTC_DECODE_MODE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION"
-pattern EXT_ASTC_DECODE_MODE_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_ASTC_DECODE_MODE_SPEC_VERSION = 1
-
-
-type EXT_ASTC_DECODE_MODE_EXTENSION_NAME = "VK_EXT_astc_decode_mode"
-
--- No documentation found for TopLevel "VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME"
-pattern EXT_ASTC_DECODE_MODE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_ASTC_DECODE_MODE_EXTENSION_NAME = "VK_EXT_astc_decode_mode"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode  ( ImageViewASTCDecodeModeEXT
-                                                           , PhysicalDeviceASTCDecodeFeaturesEXT
-                                                           ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ImageViewASTCDecodeModeEXT
-
-instance ToCStruct ImageViewASTCDecodeModeEXT
-instance Show ImageViewASTCDecodeModeEXT
-
-instance FromCStruct ImageViewASTCDecodeModeEXT
-
-
-data PhysicalDeviceASTCDecodeFeaturesEXT
-
-instance ToCStruct PhysicalDeviceASTCDecodeFeaturesEXT
-instance Show PhysicalDeviceASTCDecodeFeaturesEXT
-
-instance FromCStruct PhysicalDeviceASTCDecodeFeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs
+++ /dev/null
@@ -1,406 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced  ( PhysicalDeviceBlendOperationAdvancedFeaturesEXT(..)
-                                                                   , PhysicalDeviceBlendOperationAdvancedPropertiesEXT(..)
-                                                                   , PipelineColorBlendAdvancedStateCreateInfoEXT(..)
-                                                                   , BlendOverlapEXT( BLEND_OVERLAP_UNCORRELATED_EXT
-                                                                                    , BLEND_OVERLAP_DISJOINT_EXT
-                                                                                    , BLEND_OVERLAP_CONJOINT_EXT
-                                                                                    , ..
-                                                                                    )
-                                                                   , EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION
-                                                                   , pattern EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION
-                                                                   , EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME
-                                                                   , pattern EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME
-                                                                   ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT))
--- | VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT - Structure describing
--- advanced blending features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceBlendOperationAdvancedFeaturesEXT'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceBlendOperationAdvancedFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceBlendOperationAdvancedFeaturesEXT' /can/ also be included
--- in the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo'
--- to enable the features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceBlendOperationAdvancedFeaturesEXT = PhysicalDeviceBlendOperationAdvancedFeaturesEXT
-  { -- | @advancedBlendCoherentOperations@ specifies whether blending using
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operations>
-    -- is guaranteed to execute atomically and in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-order primitive order>.
-    -- If this is 'Graphics.Vulkan.Core10.BaseType.TRUE',
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT'
-    -- is treated the same as
-    -- 'Graphics.Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_READ_BIT',
-    -- and advanced blending needs no additional synchronization over basic
-    -- blending. If this is 'Graphics.Vulkan.Core10.BaseType.FALSE', then
-    -- memory dependencies are required to guarantee order between two advanced
-    -- blending operations that occur on the same sample.
-    advancedBlendCoherentOperations :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceBlendOperationAdvancedFeaturesEXT
-
-instance ToCStruct PhysicalDeviceBlendOperationAdvancedFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceBlendOperationAdvancedFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (advancedBlendCoherentOperations))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceBlendOperationAdvancedFeaturesEXT where
-  peekCStruct p = do
-    advancedBlendCoherentOperations <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceBlendOperationAdvancedFeaturesEXT
-             (bool32ToBool advancedBlendCoherentOperations)
-
-instance Storable PhysicalDeviceBlendOperationAdvancedFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceBlendOperationAdvancedFeaturesEXT where
-  zero = PhysicalDeviceBlendOperationAdvancedFeaturesEXT
-           zero
-
-
--- | VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT - Structure
--- describing advanced blending limits that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceBlendOperationAdvancedPropertiesEXT'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceBlendOperationAdvancedPropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceBlendOperationAdvancedPropertiesEXT = PhysicalDeviceBlendOperationAdvancedPropertiesEXT
-  { -- | @advancedBlendMaxColorAttachments@ is one greater than the highest color
-    -- attachment index that /can/ be used in a subpass, for a pipeline that
-    -- uses an
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>.
-    advancedBlendMaxColorAttachments :: Word32
-  , -- | @advancedBlendIndependentBlend@ specifies whether advanced blend
-    -- operations /can/ vary per-attachment.
-    advancedBlendIndependentBlend :: Bool
-  , -- | @advancedBlendNonPremultipliedSrcColor@ specifies whether the source
-    -- color /can/ be treated as non-premultiplied. If this is
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', then
-    -- 'PipelineColorBlendAdvancedStateCreateInfoEXT'::@srcPremultiplied@
-    -- /must/ be 'Graphics.Vulkan.Core10.BaseType.TRUE'.
-    advancedBlendNonPremultipliedSrcColor :: Bool
-  , -- | @advancedBlendNonPremultipliedDstColor@ specifies whether the
-    -- destination color /can/ be treated as non-premultiplied. If this is
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', then
-    -- 'PipelineColorBlendAdvancedStateCreateInfoEXT'::@dstPremultiplied@
-    -- /must/ be 'Graphics.Vulkan.Core10.BaseType.TRUE'.
-    advancedBlendNonPremultipliedDstColor :: Bool
-  , -- | @advancedBlendCorrelatedOverlap@ specifies whether the overlap mode
-    -- /can/ be treated as correlated. If this is
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', then
-    -- 'PipelineColorBlendAdvancedStateCreateInfoEXT'::@blendOverlap@ /must/ be
-    -- 'BLEND_OVERLAP_UNCORRELATED_EXT'.
-    advancedBlendCorrelatedOverlap :: Bool
-  , -- | @advancedBlendAllOperations@ specifies whether all advanced blend
-    -- operation enums are supported. See the valid usage of
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'.
-    advancedBlendAllOperations :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceBlendOperationAdvancedPropertiesEXT
-
-instance ToCStruct PhysicalDeviceBlendOperationAdvancedPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceBlendOperationAdvancedPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (advancedBlendMaxColorAttachments)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (advancedBlendIndependentBlend))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (advancedBlendNonPremultipliedSrcColor))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (advancedBlendNonPremultipliedDstColor))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (advancedBlendCorrelatedOverlap))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (advancedBlendAllOperations))
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceBlendOperationAdvancedPropertiesEXT where
-  peekCStruct p = do
-    advancedBlendMaxColorAttachments <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    advancedBlendIndependentBlend <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    advancedBlendNonPremultipliedSrcColor <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    advancedBlendNonPremultipliedDstColor <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    advancedBlendCorrelatedOverlap <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    advancedBlendAllOperations <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    pure $ PhysicalDeviceBlendOperationAdvancedPropertiesEXT
-             advancedBlendMaxColorAttachments (bool32ToBool advancedBlendIndependentBlend) (bool32ToBool advancedBlendNonPremultipliedSrcColor) (bool32ToBool advancedBlendNonPremultipliedDstColor) (bool32ToBool advancedBlendCorrelatedOverlap) (bool32ToBool advancedBlendAllOperations)
-
-instance Storable PhysicalDeviceBlendOperationAdvancedPropertiesEXT where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceBlendOperationAdvancedPropertiesEXT where
-  zero = PhysicalDeviceBlendOperationAdvancedPropertiesEXT
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineColorBlendAdvancedStateCreateInfoEXT - Structure specifying
--- parameters that affect advanced blend operations
---
--- = Description
---
--- If this structure is not present, @srcPremultiplied@ and
--- @dstPremultiplied@ are both considered to be
--- 'Graphics.Vulkan.Core10.BaseType.TRUE', and @blendOverlap@ is considered
--- to be 'BLEND_OVERLAP_UNCORRELATED_EXT'.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-advancedBlendNonPremultipliedSrcColor non-premultiplied source color>
---     property is not supported, @srcPremultiplied@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-advancedBlendNonPremultipliedDstColor non-premultiplied destination color>
---     property is not supported, @dstPremultiplied@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-advancedBlendCorrelatedOverlap correlated overlap>
---     property is not supported, @blendOverlap@ /must/ be
---     'BLEND_OVERLAP_UNCORRELATED_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT'
---
--- -   @blendOverlap@ /must/ be a valid 'BlendOverlapEXT' value
---
--- = See Also
---
--- 'BlendOverlapEXT', 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineColorBlendAdvancedStateCreateInfoEXT = PipelineColorBlendAdvancedStateCreateInfoEXT
-  { -- | @srcPremultiplied@ specifies whether the source color of the blend
-    -- operation is treated as premultiplied.
-    srcPremultiplied :: Bool
-  , -- | @dstPremultiplied@ specifies whether the destination color of the blend
-    -- operation is treated as premultiplied.
-    dstPremultiplied :: Bool
-  , -- | @blendOverlap@ is a 'BlendOverlapEXT' value specifying how the source
-    -- and destination sample’s coverage is correlated.
-    blendOverlap :: BlendOverlapEXT
-  }
-  deriving (Typeable)
-deriving instance Show PipelineColorBlendAdvancedStateCreateInfoEXT
-
-instance ToCStruct PipelineColorBlendAdvancedStateCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineColorBlendAdvancedStateCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (srcPremultiplied))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (dstPremultiplied))
-    poke ((p `plusPtr` 24 :: Ptr BlendOverlapEXT)) (blendOverlap)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr BlendOverlapEXT)) (zero)
-    f
-
-instance FromCStruct PipelineColorBlendAdvancedStateCreateInfoEXT where
-  peekCStruct p = do
-    srcPremultiplied <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    dstPremultiplied <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    blendOverlap <- peek @BlendOverlapEXT ((p `plusPtr` 24 :: Ptr BlendOverlapEXT))
-    pure $ PipelineColorBlendAdvancedStateCreateInfoEXT
-             (bool32ToBool srcPremultiplied) (bool32ToBool dstPremultiplied) blendOverlap
-
-instance Storable PipelineColorBlendAdvancedStateCreateInfoEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineColorBlendAdvancedStateCreateInfoEXT where
-  zero = PipelineColorBlendAdvancedStateCreateInfoEXT
-           zero
-           zero
-           zero
-
-
--- | VkBlendOverlapEXT - Enumerant specifying the blend overlap parameter
---
--- = Description
---
--- \'
---
--- +-----------------------------------+--------------------------------------------------------------------------------------+
--- | Overlap Mode                      | Weighting Equations                                                                  |
--- +===================================+======================================================================================+
--- | 'BLEND_OVERLAP_UNCORRELATED_EXT'  | \[                                              \begin{aligned}                      |
--- |                                   |                                                 p_0(A_s,A_d) & = A_sA_d \\           |
--- |                                   |                                                 p_1(A_s,A_d) & = A_s(1-A_d) \\       |
--- |                                   |                                                 p_2(A_s,A_d) & = A_d(1-A_s) \\       |
--- |                                   |                                               \end{aligned}\]                        |
--- +-----------------------------------+--------------------------------------------------------------------------------------+
--- | 'BLEND_OVERLAP_CONJOINT_EXT'      | \[                                              \begin{aligned}                      |
--- |                                   |                                                 p_0(A_s,A_d) & = min(A_s,A_d) \\     |
--- |                                   |                                                 p_1(A_s,A_d) & = max(A_s-A_d,0) \\   |
--- |                                   |                                                 p_2(A_s,A_d) & = max(A_d-A_s,0) \\   |
--- |                                   |                                               \end{aligned}\]                        |
--- +-----------------------------------+--------------------------------------------------------------------------------------+
--- | 'BLEND_OVERLAP_DISJOINT_EXT'      | \[                                              \begin{aligned}                      |
--- |                                   |                                                 p_0(A_s,A_d) & = max(A_s+A_d-1,0) \\ |
--- |                                   |                                                 p_1(A_s,A_d) & = min(A_s,1-A_d) \\   |
--- |                                   |                                                 p_2(A_s,A_d) & = min(A_d,1-A_s) \\   |
--- |                                   |                                               \end{aligned}\]                        |
--- +-----------------------------------+--------------------------------------------------------------------------------------+
---
--- Advanced Blend Overlap Modes
---
--- = See Also
---
--- 'PipelineColorBlendAdvancedStateCreateInfoEXT'
-newtype BlendOverlapEXT = BlendOverlapEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'BLEND_OVERLAP_UNCORRELATED_EXT' specifies that there is no correlation
--- between the source and destination coverage.
-pattern BLEND_OVERLAP_UNCORRELATED_EXT = BlendOverlapEXT 0
--- | 'BLEND_OVERLAP_DISJOINT_EXT' specifies that the source and destination
--- coverage are considered to have minimal overlap.
-pattern BLEND_OVERLAP_DISJOINT_EXT = BlendOverlapEXT 1
--- | 'BLEND_OVERLAP_CONJOINT_EXT' specifies that the source and destination
--- coverage are considered to have maximal overlap.
-pattern BLEND_OVERLAP_CONJOINT_EXT = BlendOverlapEXT 2
-{-# complete BLEND_OVERLAP_UNCORRELATED_EXT,
-             BLEND_OVERLAP_DISJOINT_EXT,
-             BLEND_OVERLAP_CONJOINT_EXT :: BlendOverlapEXT #-}
-
-instance Show BlendOverlapEXT where
-  showsPrec p = \case
-    BLEND_OVERLAP_UNCORRELATED_EXT -> showString "BLEND_OVERLAP_UNCORRELATED_EXT"
-    BLEND_OVERLAP_DISJOINT_EXT -> showString "BLEND_OVERLAP_DISJOINT_EXT"
-    BLEND_OVERLAP_CONJOINT_EXT -> showString "BLEND_OVERLAP_CONJOINT_EXT"
-    BlendOverlapEXT x -> showParen (p >= 11) (showString "BlendOverlapEXT " . showsPrec 11 x)
-
-instance Read BlendOverlapEXT where
-  readPrec = parens (choose [("BLEND_OVERLAP_UNCORRELATED_EXT", pure BLEND_OVERLAP_UNCORRELATED_EXT)
-                            , ("BLEND_OVERLAP_DISJOINT_EXT", pure BLEND_OVERLAP_DISJOINT_EXT)
-                            , ("BLEND_OVERLAP_CONJOINT_EXT", pure BLEND_OVERLAP_CONJOINT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "BlendOverlapEXT")
-                       v <- step readPrec
-                       pure (BlendOverlapEXT v)))
-
-
-type EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION"
-pattern EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION = 2
-
-
-type EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME = "VK_EXT_blend_operation_advanced"
-
--- No documentation found for TopLevel "VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME"
-pattern EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME = "VK_EXT_blend_operation_advanced"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced  ( PhysicalDeviceBlendOperationAdvancedFeaturesEXT
-                                                                   , PhysicalDeviceBlendOperationAdvancedPropertiesEXT
-                                                                   , PipelineColorBlendAdvancedStateCreateInfoEXT
-                                                                   ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceBlendOperationAdvancedFeaturesEXT
-
-instance ToCStruct PhysicalDeviceBlendOperationAdvancedFeaturesEXT
-instance Show PhysicalDeviceBlendOperationAdvancedFeaturesEXT
-
-instance FromCStruct PhysicalDeviceBlendOperationAdvancedFeaturesEXT
-
-
-data PhysicalDeviceBlendOperationAdvancedPropertiesEXT
-
-instance ToCStruct PhysicalDeviceBlendOperationAdvancedPropertiesEXT
-instance Show PhysicalDeviceBlendOperationAdvancedPropertiesEXT
-
-instance FromCStruct PhysicalDeviceBlendOperationAdvancedPropertiesEXT
-
-
-data PipelineColorBlendAdvancedStateCreateInfoEXT
-
-instance ToCStruct PipelineColorBlendAdvancedStateCreateInfoEXT
-instance Show PipelineColorBlendAdvancedStateCreateInfoEXT
-
-instance FromCStruct PipelineColorBlendAdvancedStateCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_buffer_device_address.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_buffer_device_address.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_buffer_device_address.hs
+++ /dev/null
@@ -1,250 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT
-                                                                , pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT
-                                                                , pattern BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT
-                                                                , pattern BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT
-                                                                , pattern ERROR_INVALID_DEVICE_ADDRESS_EXT
-                                                                , getBufferDeviceAddressEXT
-                                                                , PhysicalDeviceBufferDeviceAddressFeaturesEXT(..)
-                                                                , BufferDeviceAddressCreateInfoEXT(..)
-                                                                , PhysicalDeviceBufferAddressFeaturesEXT
-                                                                , BufferDeviceAddressInfoEXT
-                                                                , EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION
-                                                                , pattern EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION
-                                                                , EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
-                                                                , pattern EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
-                                                                ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (getBufferDeviceAddress)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferDeviceAddressInfo)
-import Graphics.Vulkan.Core10.BaseType (DeviceAddress)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlagBits(BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT))
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlagBits(BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT"
-pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO
-
-
--- No documentation found for TopLevel "VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT"
-pattern BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT = BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
-
-
--- No documentation found for TopLevel "VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT"
-pattern BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
-
-
--- No documentation found for TopLevel "VK_ERROR_INVALID_DEVICE_ADDRESS_EXT"
-pattern ERROR_INVALID_DEVICE_ADDRESS_EXT = ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
-
-
--- No documentation found for TopLevel "vkGetBufferDeviceAddressEXT"
-getBufferDeviceAddressEXT = getBufferDeviceAddress
-
-
--- | VkPhysicalDeviceBufferDeviceAddressFeaturesEXT - Structure describing
--- buffer address features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceBufferDeviceAddressFeaturesEXT'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceBufferDeviceAddressFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceBufferDeviceAddressFeaturesEXT' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- Note
---
--- The 'PhysicalDeviceBufferDeviceAddressFeaturesEXT' structure has the
--- same members as the
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures'
--- structure, but the functionality indicated by the members is expressed
--- differently. The features indicated by the
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures'
--- structure requires additional flags to be passed at memory allocation
--- time, and the capture and replay mechanism is built around opaque
--- capture addresses for buffer and memory objects.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceBufferDeviceAddressFeaturesEXT = PhysicalDeviceBufferDeviceAddressFeaturesEXT
-  { -- | @bufferDeviceAddress@ indicates that the implementation supports
-    -- accessing buffer memory in shaders as storage buffers via an address
-    -- queried from 'getBufferDeviceAddressEXT'.
-    bufferDeviceAddress :: Bool
-  , -- | @bufferDeviceAddressCaptureReplay@ indicates that the implementation
-    -- supports saving and reusing buffer addresses, e.g. for trace capture and
-    -- replay.
-    bufferDeviceAddressCaptureReplay :: Bool
-  , -- | @bufferDeviceAddressMultiDevice@ indicates that the implementation
-    -- supports the @bufferDeviceAddress@ feature for logical devices created
-    -- with multiple physical devices. If this feature is not supported, buffer
-    -- addresses /must/ not be queried on a logical device created with more
-    -- than one physical device.
-    bufferDeviceAddressMultiDevice :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceBufferDeviceAddressFeaturesEXT
-
-instance ToCStruct PhysicalDeviceBufferDeviceAddressFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceBufferDeviceAddressFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddress))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressCaptureReplay))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressMultiDevice))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceBufferDeviceAddressFeaturesEXT where
-  peekCStruct p = do
-    bufferDeviceAddress <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    bufferDeviceAddressCaptureReplay <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    bufferDeviceAddressMultiDevice <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    pure $ PhysicalDeviceBufferDeviceAddressFeaturesEXT
-             (bool32ToBool bufferDeviceAddress) (bool32ToBool bufferDeviceAddressCaptureReplay) (bool32ToBool bufferDeviceAddressMultiDevice)
-
-instance Storable PhysicalDeviceBufferDeviceAddressFeaturesEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceBufferDeviceAddressFeaturesEXT where
-  zero = PhysicalDeviceBufferDeviceAddressFeaturesEXT
-           zero
-           zero
-           zero
-
-
--- | VkBufferDeviceAddressCreateInfoEXT - Request a specific address for a
--- buffer
---
--- = Description
---
--- If @deviceAddress@ is zero, no specific address is requested.
---
--- If @deviceAddress@ is not zero, then it /must/ be an address retrieved
--- from an identically created buffer on the same implementation. The
--- buffer /must/ also be bound to an identically created
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object.
---
--- If this structure is not present, it is as if @deviceAddress@ is zero.
---
--- Apps /should/ avoid creating buffers with app-provided addresses and
--- implementation-provided addresses in the same process, to reduce the
--- likelihood of 'ERROR_INVALID_DEVICE_ADDRESS_EXT' errors.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceAddress',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data BufferDeviceAddressCreateInfoEXT = BufferDeviceAddressCreateInfoEXT
-  { -- | @deviceAddress@ is the device address requested for the buffer.
-    deviceAddress :: DeviceAddress }
-  deriving (Typeable)
-deriving instance Show BufferDeviceAddressCreateInfoEXT
-
-instance ToCStruct BufferDeviceAddressCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BufferDeviceAddressCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceAddress)) (deviceAddress)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceAddress)) (zero)
-    f
-
-instance FromCStruct BufferDeviceAddressCreateInfoEXT where
-  peekCStruct p = do
-    deviceAddress <- peek @DeviceAddress ((p `plusPtr` 16 :: Ptr DeviceAddress))
-    pure $ BufferDeviceAddressCreateInfoEXT
-             deviceAddress
-
-instance Storable BufferDeviceAddressCreateInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BufferDeviceAddressCreateInfoEXT where
-  zero = BufferDeviceAddressCreateInfoEXT
-           zero
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceBufferAddressFeaturesEXT"
-type PhysicalDeviceBufferAddressFeaturesEXT = PhysicalDeviceBufferDeviceAddressFeaturesEXT
-
-
--- No documentation found for TopLevel "VkBufferDeviceAddressInfoEXT"
-type BufferDeviceAddressInfoEXT = BufferDeviceAddressInfo
-
-
-type EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION"
-pattern EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION = 2
-
-
-type EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME = "VK_EXT_buffer_device_address"
-
--- No documentation found for TopLevel "VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME"
-pattern EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME = "VK_EXT_buffer_device_address"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_buffer_device_address.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_buffer_device_address.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_buffer_device_address.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address  ( BufferDeviceAddressCreateInfoEXT
-                                                                , PhysicalDeviceBufferDeviceAddressFeaturesEXT
-                                                                ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data BufferDeviceAddressCreateInfoEXT
-
-instance ToCStruct BufferDeviceAddressCreateInfoEXT
-instance Show BufferDeviceAddressCreateInfoEXT
-
-instance FromCStruct BufferDeviceAddressCreateInfoEXT
-
-
-data PhysicalDeviceBufferDeviceAddressFeaturesEXT
-
-instance ToCStruct PhysicalDeviceBufferDeviceAddressFeaturesEXT
-instance Show PhysicalDeviceBufferDeviceAddressFeaturesEXT
-
-instance FromCStruct PhysicalDeviceBufferDeviceAddressFeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs
+++ /dev/null
@@ -1,370 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps  ( getPhysicalDeviceCalibrateableTimeDomainsEXT
-                                                                , getCalibratedTimestampsEXT
-                                                                , CalibratedTimestampInfoEXT(..)
-                                                                , TimeDomainEXT( TIME_DOMAIN_DEVICE_EXT
-                                                                               , TIME_DOMAIN_CLOCK_MONOTONIC_EXT
-                                                                               , TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT
-                                                                               , TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT
-                                                                               , ..
-                                                                               )
-                                                                , EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION
-                                                                , pattern EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION
-                                                                , EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME
-                                                                , pattern EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME
-                                                                ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetCalibratedTimestampsEXT))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceCalibrateableTimeDomainsEXT))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceCalibrateableTimeDomainsEXT
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr TimeDomainEXT -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr TimeDomainEXT -> IO Result
-
--- | vkGetPhysicalDeviceCalibrateableTimeDomainsEXT - Query calibrateable
--- time domains
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the set
---     of calibrateable time domains.
---
--- -   @pTimeDomainCount@ is a pointer to an integer related to the number
---     of calibrateable time domains available or queried, as described
---     below.
---
--- -   @pTimeDomains@ is either @NULL@ or a pointer to an array of
---     'TimeDomainEXT' values, indicating the supported calibrateable time
---     domains.
---
--- = Description
---
--- If @pTimeDomains@ is @NULL@, then the number of calibrateable time
--- domains supported for the given @physicalDevice@ is returned in
--- @pTimeDomainCount@. Otherwise, @pTimeDomainCount@ /must/ point to a
--- variable set by the user to the number of elements in the @pTimeDomains@
--- array, and on return the variable is overwritten with the number of
--- values actually written to @pTimeDomains@. If the value of
--- @pTimeDomainCount@ is less than the number of calibrateable time domains
--- supported, at most @pTimeDomainCount@ values will be written to
--- @pTimeDomains@. If @pTimeDomainCount@ is smaller than the number of
--- calibrateable time domains supported for the given @physicalDevice@,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' to indicate
--- that not all the available values were returned.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pTimeDomainCount@ /must/ be a valid pointer to a @uint32_t@ value
---
--- -   If the value referenced by @pTimeDomainCount@ is not @0@, and
---     @pTimeDomains@ is not @NULL@, @pTimeDomains@ /must/ be a valid
---     pointer to an array of @pTimeDomainCount@ 'TimeDomainEXT' values
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice', 'TimeDomainEXT'
-getPhysicalDeviceCalibrateableTimeDomainsEXT :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("timeDomains" ::: Vector TimeDomainEXT))
-getPhysicalDeviceCalibrateableTimeDomainsEXT physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceCalibrateableTimeDomainsEXT' = mkVkGetPhysicalDeviceCalibrateableTimeDomainsEXT (pVkGetPhysicalDeviceCalibrateableTimeDomainsEXT (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPTimeDomainCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceCalibrateableTimeDomainsEXT' physicalDevice' (pPTimeDomainCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pTimeDomainCount <- lift $ peek @Word32 pPTimeDomainCount
-  pPTimeDomains <- ContT $ bracket (callocBytes @TimeDomainEXT ((fromIntegral (pTimeDomainCount)) * 4)) free
-  r' <- lift $ vkGetPhysicalDeviceCalibrateableTimeDomainsEXT' physicalDevice' (pPTimeDomainCount) (pPTimeDomains)
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pTimeDomainCount' <- lift $ peek @Word32 pPTimeDomainCount
-  pTimeDomains' <- lift $ generateM (fromIntegral (pTimeDomainCount')) (\i -> peek @TimeDomainEXT ((pPTimeDomains `advancePtrBytes` (4 * (i)) :: Ptr TimeDomainEXT)))
-  pure $ ((r'), pTimeDomains')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetCalibratedTimestampsEXT
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr CalibratedTimestampInfoEXT -> Ptr Word64 -> Ptr Word64 -> IO Result) -> Ptr Device_T -> Word32 -> Ptr CalibratedTimestampInfoEXT -> Ptr Word64 -> Ptr Word64 -> IO Result
-
--- | vkGetCalibratedTimestampsEXT - Query calibrated timestamps
---
--- = Parameters
---
--- -   @device@ is the logical device used to perform the query.
---
--- -   @timestampCount@ is the number of timestamps to query.
---
--- -   @pTimestampInfos@ is a pointer to an array of @timestampCount@
---     'CalibratedTimestampInfoEXT' structures, describing the time domains
---     the calibrated timestamps should be captured from.
---
--- -   @pTimestamps@ is a pointer to an array of @timestampCount@ 64-bit
---     unsigned integer values in which the requested calibrated timestamp
---     values are returned.
---
--- -   @pMaxDeviation@ is a pointer to a 64-bit unsigned integer value in
---     which the strictly positive maximum deviation, in nanoseconds, of
---     the calibrated timestamp values is returned.
---
--- = Description
---
--- Note
---
--- The maximum deviation /may/ vary between calls to
--- 'getCalibratedTimestampsEXT' even for the same set of time domains due
--- to implementation and platform specific reasons. It is the application’s
--- responsibility to assess whether the returned maximum deviation makes
--- the timestamp values suitable for any particular purpose and /can/
--- choose to re-issue the timestamp calibration call pursuing a lower
--- devation value.
---
--- Calibrated timestamp values /can/ be extrapolated to estimate future
--- coinciding timestamp values, however, depending on the nature of the
--- time domains and other properties of the platform extrapolating values
--- over a sufficiently long period of time /may/ no longer be accurate
--- enough to fit any particular purpose so applications are expected to
--- re-calibrate the timestamps on a regular basis.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'CalibratedTimestampInfoEXT', 'Graphics.Vulkan.Core10.Handles.Device'
-getCalibratedTimestampsEXT :: forall io . MonadIO io => Device -> ("timestampInfos" ::: Vector CalibratedTimestampInfoEXT) -> io (("timestamps" ::: Vector Word64), ("maxDeviation" ::: Word64))
-getCalibratedTimestampsEXT device timestampInfos = liftIO . evalContT $ do
-  let vkGetCalibratedTimestampsEXT' = mkVkGetCalibratedTimestampsEXT (pVkGetCalibratedTimestampsEXT (deviceCmds (device :: Device)))
-  pPTimestampInfos <- ContT $ allocaBytesAligned @CalibratedTimestampInfoEXT ((Data.Vector.length (timestampInfos)) * 24) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPTimestampInfos `plusPtr` (24 * (i)) :: Ptr CalibratedTimestampInfoEXT) (e) . ($ ())) (timestampInfos)
-  pPTimestamps <- ContT $ bracket (callocBytes @Word64 ((fromIntegral ((fromIntegral (Data.Vector.length $ (timestampInfos)) :: Word32))) * 8)) free
-  pPMaxDeviation <- ContT $ bracket (callocBytes @Word64 8) free
-  r <- lift $ vkGetCalibratedTimestampsEXT' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (timestampInfos)) :: Word32)) (pPTimestampInfos) (pPTimestamps) (pPMaxDeviation)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pTimestamps <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (timestampInfos)) :: Word32))) (\i -> peek @Word64 ((pPTimestamps `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
-  pMaxDeviation <- lift $ peek @Word64 pPMaxDeviation
-  pure $ (pTimestamps, pMaxDeviation)
-
-
--- | VkCalibratedTimestampInfoEXT - Structure specifying the input parameters
--- of a calibrated timestamp query
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'TimeDomainEXT', 'getCalibratedTimestampsEXT'
-data CalibratedTimestampInfoEXT = CalibratedTimestampInfoEXT
-  { -- | @timeDomain@ /must/ be a valid 'TimeDomainEXT' value
-    timeDomain :: TimeDomainEXT }
-  deriving (Typeable)
-deriving instance Show CalibratedTimestampInfoEXT
-
-instance ToCStruct CalibratedTimestampInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CalibratedTimestampInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr TimeDomainEXT)) (timeDomain)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr TimeDomainEXT)) (zero)
-    f
-
-instance FromCStruct CalibratedTimestampInfoEXT where
-  peekCStruct p = do
-    timeDomain <- peek @TimeDomainEXT ((p `plusPtr` 16 :: Ptr TimeDomainEXT))
-    pure $ CalibratedTimestampInfoEXT
-             timeDomain
-
-instance Storable CalibratedTimestampInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero CalibratedTimestampInfoEXT where
-  zero = CalibratedTimestampInfoEXT
-           zero
-
-
--- | VkTimeDomainEXT - Supported time domains
---
--- = Description
---
--- > struct timespec tv;
--- > clock_gettime(CLOCK_MONOTONIC, &tv);
--- > return tv.tv_nsec + tv.tv_sec*1000000000ull;
---
--- > struct timespec tv;
--- > clock_gettime(CLOCK_MONOTONIC_RAW, &tv);
--- > return tv.tv_nsec + tv.tv_sec*1000000000ull;
---
--- > LARGE_INTEGER counter;
--- > QueryPerformanceCounter(&counter);
--- > return counter.QuadPart;
---
--- = See Also
---
--- 'CalibratedTimestampInfoEXT',
--- 'getPhysicalDeviceCalibrateableTimeDomainsEXT'
-newtype TimeDomainEXT = TimeDomainEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'TIME_DOMAIN_DEVICE_EXT' specifies the device time domain. Timestamp
--- values in this time domain use the same units and are comparable with
--- device timestamp values captured using
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp' and are
--- defined to be incrementing according to the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-timestampPeriod timestampPeriod>
--- of the device.
-pattern TIME_DOMAIN_DEVICE_EXT = TimeDomainEXT 0
--- | 'TIME_DOMAIN_CLOCK_MONOTONIC_EXT' specifies the CLOCK_MONOTONIC time
--- domain available on POSIX platforms. Timestamp values in this time
--- domain are in units of nanoseconds and are comparable with platform
--- timestamp values captured using the POSIX clock_gettime API as computed
--- by this example:
-pattern TIME_DOMAIN_CLOCK_MONOTONIC_EXT = TimeDomainEXT 1
--- | 'TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT' specifies the CLOCK_MONOTONIC_RAW
--- time domain available on POSIX platforms. Timestamp values in this time
--- domain are in units of nanoseconds and are comparable with platform
--- timestamp values captured using the POSIX clock_gettime API as computed
--- by this example:
-pattern TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = TimeDomainEXT 2
--- | 'TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT' specifies the performance
--- counter (QPC) time domain available on Windows. Timestamp values in this
--- time domain are in the same units as those provided by the Windows
--- QueryPerformanceCounter API and are comparable with platform timestamp
--- values captured using that API as computed by this example:
-pattern TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = TimeDomainEXT 3
-{-# complete TIME_DOMAIN_DEVICE_EXT,
-             TIME_DOMAIN_CLOCK_MONOTONIC_EXT,
-             TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT,
-             TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT :: TimeDomainEXT #-}
-
-instance Show TimeDomainEXT where
-  showsPrec p = \case
-    TIME_DOMAIN_DEVICE_EXT -> showString "TIME_DOMAIN_DEVICE_EXT"
-    TIME_DOMAIN_CLOCK_MONOTONIC_EXT -> showString "TIME_DOMAIN_CLOCK_MONOTONIC_EXT"
-    TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT -> showString "TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT"
-    TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT -> showString "TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT"
-    TimeDomainEXT x -> showParen (p >= 11) (showString "TimeDomainEXT " . showsPrec 11 x)
-
-instance Read TimeDomainEXT where
-  readPrec = parens (choose [("TIME_DOMAIN_DEVICE_EXT", pure TIME_DOMAIN_DEVICE_EXT)
-                            , ("TIME_DOMAIN_CLOCK_MONOTONIC_EXT", pure TIME_DOMAIN_CLOCK_MONOTONIC_EXT)
-                            , ("TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT", pure TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT)
-                            , ("TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT", pure TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "TimeDomainEXT")
-                       v <- step readPrec
-                       pure (TimeDomainEXT v)))
-
-
-type EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION"
-pattern EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION = 1
-
-
-type EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME = "VK_EXT_calibrated_timestamps"
-
--- No documentation found for TopLevel "VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME"
-pattern EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME = "VK_EXT_calibrated_timestamps"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs-boot
+++ /dev/null
@@ -1,18 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps  ( CalibratedTimestampInfoEXT
-                                                                , TimeDomainEXT
-                                                                ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data CalibratedTimestampInfoEXT
-
-instance ToCStruct CalibratedTimestampInfoEXT
-instance Show CalibratedTimestampInfoEXT
-
-instance FromCStruct CalibratedTimestampInfoEXT
-
-
-data TimeDomainEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_conditional_rendering.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_conditional_rendering.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_conditional_rendering.hs
+++ /dev/null
@@ -1,503 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering  ( cmdBeginConditionalRenderingEXT
-                                                                , cmdWithConditionalRenderingEXT
-                                                                , cmdEndConditionalRenderingEXT
-                                                                , ConditionalRenderingBeginInfoEXT(..)
-                                                                , CommandBufferInheritanceConditionalRenderingInfoEXT(..)
-                                                                , PhysicalDeviceConditionalRenderingFeaturesEXT(..)
-                                                                , ConditionalRenderingFlagBitsEXT( CONDITIONAL_RENDERING_INVERTED_BIT_EXT
-                                                                                                 , ..
-                                                                                                 )
-                                                                , ConditionalRenderingFlagsEXT
-                                                                , EXT_CONDITIONAL_RENDERING_SPEC_VERSION
-                                                                , pattern EXT_CONDITIONAL_RENDERING_SPEC_VERSION
-                                                                , EXT_CONDITIONAL_RENDERING_EXTENSION_NAME
-                                                                , pattern EXT_CONDITIONAL_RENDERING_EXTENSION_NAME
-                                                                ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBeginConditionalRenderingEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdEndConditionalRenderingEXT))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBeginConditionalRenderingEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr ConditionalRenderingBeginInfoEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr ConditionalRenderingBeginInfoEXT -> IO ()
-
--- | vkCmdBeginConditionalRenderingEXT - Define the beginning of a
--- conditional rendering block
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which this command will
---     be recorded.
---
--- -   @pConditionalRenderingBegin@ is a pointer to a
---     'ConditionalRenderingBeginInfoEXT' structure specifying parameters
---     of conditional rendering.
---
--- == Valid Usage
---
--- -   Conditional rendering /must/ not already be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active>
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pConditionalRenderingBegin@ /must/ be a valid pointer to a valid
---     'ConditionalRenderingBeginInfoEXT' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'ConditionalRenderingBeginInfoEXT'
-cmdBeginConditionalRenderingEXT :: forall io . MonadIO io => CommandBuffer -> ConditionalRenderingBeginInfoEXT -> io ()
-cmdBeginConditionalRenderingEXT commandBuffer conditionalRenderingBegin = liftIO . evalContT $ do
-  let vkCmdBeginConditionalRenderingEXT' = mkVkCmdBeginConditionalRenderingEXT (pVkCmdBeginConditionalRenderingEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  pConditionalRenderingBegin <- ContT $ withCStruct (conditionalRenderingBegin)
-  lift $ vkCmdBeginConditionalRenderingEXT' (commandBufferHandle (commandBuffer)) pConditionalRenderingBegin
-  pure $ ()
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'cmdBeginConditionalRenderingEXT' and 'cmdEndConditionalRenderingEXT'
---
--- To ensure that 'cmdEndConditionalRenderingEXT' is always called: pass
--- 'Control.Exception.bracket_' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
--- Note that there is no inner resource
-cmdWithConditionalRenderingEXT :: forall io r . MonadIO io => (io () -> io () -> r) -> CommandBuffer -> ConditionalRenderingBeginInfoEXT -> r
-cmdWithConditionalRenderingEXT b commandBuffer pConditionalRenderingBegin =
-  b (cmdBeginConditionalRenderingEXT commandBuffer pConditionalRenderingBegin)
-    (cmdEndConditionalRenderingEXT commandBuffer)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdEndConditionalRenderingEXT
-  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()
-
--- | vkCmdEndConditionalRenderingEXT - Define the end of a conditional
--- rendering block
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which this command will
---     be recorded.
---
--- = Description
---
--- Once ended, conditional rendering becomes inactive.
---
--- == Valid Usage
---
--- -   Conditional rendering /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active>
---
--- -   If conditional rendering was made
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active>
---     outside of a render pass instance, it /must/ not be ended inside a
---     render pass instance
---
--- -   If conditional rendering was made
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active>
---     within a subpass it /must/ be ended in the same subpass
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdEndConditionalRenderingEXT :: forall io . MonadIO io => CommandBuffer -> io ()
-cmdEndConditionalRenderingEXT commandBuffer = liftIO $ do
-  let vkCmdEndConditionalRenderingEXT' = mkVkCmdEndConditionalRenderingEXT (pVkCmdEndConditionalRenderingEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdEndConditionalRenderingEXT' (commandBufferHandle (commandBuffer))
-  pure $ ()
-
-
--- | VkConditionalRenderingBeginInfoEXT - Structure specifying conditional
--- rendering begin info
---
--- = Description
---
--- If the 32-bit value at @offset@ in @buffer@ memory is zero, then the
--- rendering commands are discarded, otherwise they are executed as normal.
--- If the value of the predicate in buffer memory changes while conditional
--- rendering is active, the rendering commands /may/ be discarded in an
--- implementation-dependent way. Some implementations may latch the value
--- of the predicate upon beginning conditional rendering while others may
--- read it before every rendering command.
---
--- == Valid Usage
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @buffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT'
---     bit set
---
--- -   @offset@ /must/ be less than the size of @buffer@ by at least 32
---     bits
---
--- -   @offset@ /must/ be a multiple of 4
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @flags@ /must/ be a valid combination of
---     'ConditionalRenderingFlagBitsEXT' values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer', 'ConditionalRenderingFlagsEXT',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdBeginConditionalRenderingEXT'
-data ConditionalRenderingBeginInfoEXT = ConditionalRenderingBeginInfoEXT
-  { -- | @buffer@ is a buffer containing the predicate for conditional rendering.
-    buffer :: Buffer
-  , -- | @offset@ is the byte offset into @buffer@ where the predicate is
-    -- located.
-    offset :: DeviceSize
-  , -- | @flags@ is a bitmask of 'ConditionalRenderingFlagsEXT' specifying the
-    -- behavior of conditional rendering.
-    flags :: ConditionalRenderingFlagsEXT
-  }
-  deriving (Typeable)
-deriving instance Show ConditionalRenderingBeginInfoEXT
-
-instance ToCStruct ConditionalRenderingBeginInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ConditionalRenderingBeginInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Buffer)) (buffer)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (offset)
-    poke ((p `plusPtr` 32 :: Ptr ConditionalRenderingFlagsEXT)) (flags)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct ConditionalRenderingBeginInfoEXT where
-  peekCStruct p = do
-    buffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
-    offset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    flags <- peek @ConditionalRenderingFlagsEXT ((p `plusPtr` 32 :: Ptr ConditionalRenderingFlagsEXT))
-    pure $ ConditionalRenderingBeginInfoEXT
-             buffer offset flags
-
-instance Storable ConditionalRenderingBeginInfoEXT where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ConditionalRenderingBeginInfoEXT where
-  zero = ConditionalRenderingBeginInfoEXT
-           zero
-           zero
-           zero
-
-
--- | VkCommandBufferInheritanceConditionalRenderingInfoEXT - Structure
--- specifying command buffer inheritance info
---
--- = Description
---
--- If this structure is not present, the behavior is as if
--- @conditionalRenderingEnable@ is 'Graphics.Vulkan.Core10.BaseType.FALSE'.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedConditionalRendering inherited conditional rendering>
---     feature is not enabled, @conditionalRenderingEnable@ /must/ be
---     'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data CommandBufferInheritanceConditionalRenderingInfoEXT = CommandBufferInheritanceConditionalRenderingInfoEXT
-  { -- | @conditionalRenderingEnable@ specifies whether the command buffer /can/
-    -- be executed while conditional rendering is active in the primary command
-    -- buffer. If this is 'Graphics.Vulkan.Core10.BaseType.TRUE', then this
-    -- command buffer /can/ be executed whether the primary command buffer has
-    -- active conditional rendering or not. If this is
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', then the primary command buffer
-    -- /must/ not have conditional rendering active.
-    conditionalRenderingEnable :: Bool }
-  deriving (Typeable)
-deriving instance Show CommandBufferInheritanceConditionalRenderingInfoEXT
-
-instance ToCStruct CommandBufferInheritanceConditionalRenderingInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CommandBufferInheritanceConditionalRenderingInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (conditionalRenderingEnable))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct CommandBufferInheritanceConditionalRenderingInfoEXT where
-  peekCStruct p = do
-    conditionalRenderingEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ CommandBufferInheritanceConditionalRenderingInfoEXT
-             (bool32ToBool conditionalRenderingEnable)
-
-instance Storable CommandBufferInheritanceConditionalRenderingInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero CommandBufferInheritanceConditionalRenderingInfoEXT where
-  zero = CommandBufferInheritanceConditionalRenderingInfoEXT
-           zero
-
-
--- | VkPhysicalDeviceConditionalRenderingFeaturesEXT - Structure describing
--- if a secondary command buffer can be executed if conditional rendering
--- is active in the primary command buffer
---
--- = Description
---
--- If the 'PhysicalDeviceConditionalRenderingFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating the implementation-dependent
--- behavior. 'PhysicalDeviceConditionalRenderingFeaturesEXT' /can/ also be
--- included in @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceConditionalRenderingFeaturesEXT = PhysicalDeviceConditionalRenderingFeaturesEXT
-  { -- | @conditionalRendering@ specifies whether conditional rendering is
-    -- supported.
-    conditionalRendering :: Bool
-  , -- | @inheritedConditionalRendering@ specifies whether a secondary command
-    -- buffer /can/ be executed while conditional rendering is active in the
-    -- primary command buffer.
-    inheritedConditionalRendering :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceConditionalRenderingFeaturesEXT
-
-instance ToCStruct PhysicalDeviceConditionalRenderingFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceConditionalRenderingFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (conditionalRendering))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (inheritedConditionalRendering))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceConditionalRenderingFeaturesEXT where
-  peekCStruct p = do
-    conditionalRendering <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    inheritedConditionalRendering <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceConditionalRenderingFeaturesEXT
-             (bool32ToBool conditionalRendering) (bool32ToBool inheritedConditionalRendering)
-
-instance Storable PhysicalDeviceConditionalRenderingFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceConditionalRenderingFeaturesEXT where
-  zero = PhysicalDeviceConditionalRenderingFeaturesEXT
-           zero
-           zero
-
-
--- | VkConditionalRenderingFlagBitsEXT - Specify the behavior of conditional
--- rendering
---
--- = See Also
---
--- 'ConditionalRenderingFlagsEXT'
-newtype ConditionalRenderingFlagBitsEXT = ConditionalRenderingFlagBitsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'CONDITIONAL_RENDERING_INVERTED_BIT_EXT' specifies the condition used to
--- determine whether to discard rendering commands or not. That is, if the
--- 32-bit predicate read from @buffer@ memory at @offset@ is zero, the
--- rendering commands are not discarded, and if non zero, then they are
--- discarded.
-pattern CONDITIONAL_RENDERING_INVERTED_BIT_EXT = ConditionalRenderingFlagBitsEXT 0x00000001
-
-type ConditionalRenderingFlagsEXT = ConditionalRenderingFlagBitsEXT
-
-instance Show ConditionalRenderingFlagBitsEXT where
-  showsPrec p = \case
-    CONDITIONAL_RENDERING_INVERTED_BIT_EXT -> showString "CONDITIONAL_RENDERING_INVERTED_BIT_EXT"
-    ConditionalRenderingFlagBitsEXT x -> showParen (p >= 11) (showString "ConditionalRenderingFlagBitsEXT 0x" . showHex x)
-
-instance Read ConditionalRenderingFlagBitsEXT where
-  readPrec = parens (choose [("CONDITIONAL_RENDERING_INVERTED_BIT_EXT", pure CONDITIONAL_RENDERING_INVERTED_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ConditionalRenderingFlagBitsEXT")
-                       v <- step readPrec
-                       pure (ConditionalRenderingFlagBitsEXT v)))
-
-
-type EXT_CONDITIONAL_RENDERING_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION"
-pattern EXT_CONDITIONAL_RENDERING_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_CONDITIONAL_RENDERING_SPEC_VERSION = 2
-
-
-type EXT_CONDITIONAL_RENDERING_EXTENSION_NAME = "VK_EXT_conditional_rendering"
-
--- No documentation found for TopLevel "VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME"
-pattern EXT_CONDITIONAL_RENDERING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_CONDITIONAL_RENDERING_EXTENSION_NAME = "VK_EXT_conditional_rendering"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_conditional_rendering.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_conditional_rendering.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_conditional_rendering.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering  ( CommandBufferInheritanceConditionalRenderingInfoEXT
-                                                                , ConditionalRenderingBeginInfoEXT
-                                                                , PhysicalDeviceConditionalRenderingFeaturesEXT
-                                                                ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data CommandBufferInheritanceConditionalRenderingInfoEXT
-
-instance ToCStruct CommandBufferInheritanceConditionalRenderingInfoEXT
-instance Show CommandBufferInheritanceConditionalRenderingInfoEXT
-
-instance FromCStruct CommandBufferInheritanceConditionalRenderingInfoEXT
-
-
-data ConditionalRenderingBeginInfoEXT
-
-instance ToCStruct ConditionalRenderingBeginInfoEXT
-instance Show ConditionalRenderingBeginInfoEXT
-
-instance FromCStruct ConditionalRenderingBeginInfoEXT
-
-
-data PhysicalDeviceConditionalRenderingFeaturesEXT
-
-instance ToCStruct PhysicalDeviceConditionalRenderingFeaturesEXT
-instance Show PhysicalDeviceConditionalRenderingFeaturesEXT
-
-instance FromCStruct PhysicalDeviceConditionalRenderingFeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
+++ /dev/null
@@ -1,362 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization  ( PhysicalDeviceConservativeRasterizationPropertiesEXT(..)
-                                                                     , PipelineRasterizationConservativeStateCreateInfoEXT(..)
-                                                                     , PipelineRasterizationConservativeStateCreateFlagsEXT(..)
-                                                                     , ConservativeRasterizationModeEXT( CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
-                                                                                                       , CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
-                                                                                                       , CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT
-                                                                                                       , ..
-                                                                                                       )
-                                                                     , EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION
-                                                                     , pattern EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION
-                                                                     , EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME
-                                                                     , pattern EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME
-                                                                     ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT))
--- | VkPhysicalDeviceConservativeRasterizationPropertiesEXT - Structure
--- describing conservative raster properties that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the
--- 'PhysicalDeviceConservativeRasterizationPropertiesEXT' structure
--- describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceConservativeRasterizationPropertiesEXT' structure
--- is included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits and properties.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceConservativeRasterizationPropertiesEXT = PhysicalDeviceConservativeRasterizationPropertiesEXT
-  { -- | @primitiveOverestimationSize@ is the size in pixels the generating
-    -- primitive is increased at each of its edges during conservative
-    -- rasterization overestimation mode. Even with a size of 0.0, conservative
-    -- rasterization overestimation rules still apply and if any part of the
-    -- pixel rectangle is covered by the generating primitive, fragments are
-    -- generated for the entire pixel. However implementations /may/ make the
-    -- pixel coverage area even more conservative by increasing the size of the
-    -- generating primitive.
-    primitiveOverestimationSize :: Float
-  , -- | @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.
-    maxExtraPrimitiveOverestimationSize :: Float
-  , -- | @extraPrimitiveOverestimationSizeGranularity@ is the granularity of
-    -- extra overestimation that can be specified in the pipeline state between
-    -- 0.0 and @maxExtraPrimitiveOverestimationSize@ inclusive. A value of 0.0
-    -- means the implementation can use the smallest representable non-zero
-    -- value in the screen space pixel fixed-point grid.
-    extraPrimitiveOverestimationSizeGranularity :: Float
-  , -- | @primitiveUnderestimation@ is true if the implementation supports the
-    -- 'CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT' conservative
-    -- rasterization mode in addition to
-    -- 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT'. Otherwise the
-    -- implementation only supports
-    -- 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT'.
-    primitiveUnderestimation :: Bool
-  , -- | @conservativePointAndLineRasterization@ is true if the implementation
-    -- supports conservative rasterization of point and line primitives as well
-    -- as triangle primitives. Otherwise the implementation only supports
-    -- triangle primitives.
-    conservativePointAndLineRasterization :: Bool
-  , -- | @degenerateTrianglesRasterized@ is false if the implementation culls
-    -- primitives generated from triangles that become zero area after they are
-    -- quantized to the fixed-point rasterization pixel grid.
-    -- @degenerateTrianglesRasterized@ is true if these primitives are not
-    -- culled and the provoking vertex attributes and depth value are used for
-    -- the fragments. The primitive area calculation is done on the primitive
-    -- generated from the clipped triangle if applicable. Zero area primitives
-    -- are backfacing and the application /can/ enable backface culling if
-    -- desired.
-    degenerateTrianglesRasterized :: Bool
-  , -- | @degenerateLinesRasterized@ is false if the implementation culls lines
-    -- that become zero length after they are quantized to the fixed-point
-    -- rasterization pixel grid. @degenerateLinesRasterized@ is true if zero
-    -- length lines are not culled and the provoking vertex attributes and
-    -- depth value are used for the fragments.
-    degenerateLinesRasterized :: Bool
-  , -- | @fullyCoveredFragmentShaderInputVariable@ is true if the implementation
-    -- supports the SPIR-V builtin fragment shader input variable
-    -- @FullyCoveredEXT@ which specifies that conservative rasterization is
-    -- enabled and the fragment area is fully covered by the generating
-    -- primitive.
-    fullyCoveredFragmentShaderInputVariable :: Bool
-  , -- | @conservativeRasterizationPostDepthCoverage@ is true if the
-    -- implementation supports conservative rasterization with the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-earlytest-postdepthcoverage PostDepthCoverage>
-    -- execution mode enabled. When supported the
-    -- 'Graphics.Vulkan.Core10.BaseType.SampleMask' built-in input variable
-    -- will reflect the coverage after the early per-fragment depth and stencil
-    -- tests are applied even when conservative rasterization is enabled.
-    -- Otherwise
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-earlytest-postdepthcoverage PostDepthCoverage>
-    -- execution mode /must/ not be used when conservative rasterization is
-    -- enabled.
-    conservativeRasterizationPostDepthCoverage :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceConservativeRasterizationPropertiesEXT
-
-instance ToCStruct PhysicalDeviceConservativeRasterizationPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceConservativeRasterizationPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (primitiveOverestimationSize))
-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxExtraPrimitiveOverestimationSize))
-    poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (extraPrimitiveOverestimationSizeGranularity))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (primitiveUnderestimation))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (conservativePointAndLineRasterization))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (degenerateTrianglesRasterized))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (degenerateLinesRasterized))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (fullyCoveredFragmentShaderInputVariable))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (conservativeRasterizationPostDepthCoverage))
-    f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceConservativeRasterizationPropertiesEXT where
-  peekCStruct p = do
-    primitiveOverestimationSize <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
-    maxExtraPrimitiveOverestimationSize <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))
-    extraPrimitiveOverestimationSizeGranularity <- peek @CFloat ((p `plusPtr` 24 :: Ptr CFloat))
-    primitiveUnderestimation <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    conservativePointAndLineRasterization <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    degenerateTrianglesRasterized <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    degenerateLinesRasterized <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    fullyCoveredFragmentShaderInputVariable <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    conservativeRasterizationPostDepthCoverage <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
-    pure $ PhysicalDeviceConservativeRasterizationPropertiesEXT
-             ((\(CFloat a) -> a) primitiveOverestimationSize) ((\(CFloat a) -> a) maxExtraPrimitiveOverestimationSize) ((\(CFloat a) -> a) extraPrimitiveOverestimationSizeGranularity) (bool32ToBool primitiveUnderestimation) (bool32ToBool conservativePointAndLineRasterization) (bool32ToBool degenerateTrianglesRasterized) (bool32ToBool degenerateLinesRasterized) (bool32ToBool fullyCoveredFragmentShaderInputVariable) (bool32ToBool conservativeRasterizationPostDepthCoverage)
-
-instance Storable PhysicalDeviceConservativeRasterizationPropertiesEXT where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceConservativeRasterizationPropertiesEXT where
-  zero = PhysicalDeviceConservativeRasterizationPropertiesEXT
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineRasterizationConservativeStateCreateInfoEXT - Structure
--- specifying conservative raster state
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'ConservativeRasterizationModeEXT',
--- 'PipelineRasterizationConservativeStateCreateFlagsEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineRasterizationConservativeStateCreateInfoEXT = PipelineRasterizationConservativeStateCreateInfoEXT
-  { -- | @flags@ /must/ be @0@
-    flags :: PipelineRasterizationConservativeStateCreateFlagsEXT
-  , -- | @conservativeRasterizationMode@ /must/ be a valid
-    -- 'ConservativeRasterizationModeEXT' value
-    conservativeRasterizationMode :: ConservativeRasterizationModeEXT
-  , -- | @extraPrimitiveOverestimationSize@ /must/ be in the range of @0.0@ to
-    -- 'PhysicalDeviceConservativeRasterizationPropertiesEXT'::@maxExtraPrimitiveOverestimationSize@
-    -- inclusive
-    extraPrimitiveOverestimationSize :: Float
-  }
-  deriving (Typeable)
-deriving instance Show PipelineRasterizationConservativeStateCreateInfoEXT
-
-instance ToCStruct PipelineRasterizationConservativeStateCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineRasterizationConservativeStateCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationConservativeStateCreateFlagsEXT)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr ConservativeRasterizationModeEXT)) (conservativeRasterizationMode)
-    poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (extraPrimitiveOverestimationSize))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr ConservativeRasterizationModeEXT)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (zero))
-    f
-
-instance FromCStruct PipelineRasterizationConservativeStateCreateInfoEXT where
-  peekCStruct p = do
-    flags <- peek @PipelineRasterizationConservativeStateCreateFlagsEXT ((p `plusPtr` 16 :: Ptr PipelineRasterizationConservativeStateCreateFlagsEXT))
-    conservativeRasterizationMode <- peek @ConservativeRasterizationModeEXT ((p `plusPtr` 20 :: Ptr ConservativeRasterizationModeEXT))
-    extraPrimitiveOverestimationSize <- peek @CFloat ((p `plusPtr` 24 :: Ptr CFloat))
-    pure $ PipelineRasterizationConservativeStateCreateInfoEXT
-             flags conservativeRasterizationMode ((\(CFloat a) -> a) extraPrimitiveOverestimationSize)
-
-instance Storable PipelineRasterizationConservativeStateCreateInfoEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineRasterizationConservativeStateCreateInfoEXT where
-  zero = PipelineRasterizationConservativeStateCreateInfoEXT
-           zero
-           zero
-           zero
-
-
--- | VkPipelineRasterizationConservativeStateCreateFlagsEXT - Reserved for
--- future use
---
--- = Description
---
--- 'PipelineRasterizationConservativeStateCreateFlagsEXT' is a bitmask type
--- for setting a mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'PipelineRasterizationConservativeStateCreateInfoEXT'
-newtype PipelineRasterizationConservativeStateCreateFlagsEXT = PipelineRasterizationConservativeStateCreateFlagsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineRasterizationConservativeStateCreateFlagsEXT where
-  showsPrec p = \case
-    PipelineRasterizationConservativeStateCreateFlagsEXT x -> showParen (p >= 11) (showString "PipelineRasterizationConservativeStateCreateFlagsEXT 0x" . showHex x)
-
-instance Read PipelineRasterizationConservativeStateCreateFlagsEXT where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineRasterizationConservativeStateCreateFlagsEXT")
-                       v <- step readPrec
-                       pure (PipelineRasterizationConservativeStateCreateFlagsEXT v)))
-
-
--- | VkConservativeRasterizationModeEXT - Specify the conservative
--- rasterization mode
---
--- = See Also
---
--- 'PipelineRasterizationConservativeStateCreateInfoEXT'
-newtype ConservativeRasterizationModeEXT = ConservativeRasterizationModeEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT' specifies that
--- conservative rasterization is disabled and rasterization proceeds as
--- normal.
-pattern CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = ConservativeRasterizationModeEXT 0
--- | 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT' specifies that
--- conservative rasterization is enabled in overestimation mode.
-pattern CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = ConservativeRasterizationModeEXT 1
--- | 'CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT' specifies that
--- conservative rasterization is enabled in underestimation mode.
-pattern CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = ConservativeRasterizationModeEXT 2
-{-# complete CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT,
-             CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT,
-             CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT :: ConservativeRasterizationModeEXT #-}
-
-instance Show ConservativeRasterizationModeEXT where
-  showsPrec p = \case
-    CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT -> showString "CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT"
-    CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT -> showString "CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT"
-    CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT -> showString "CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT"
-    ConservativeRasterizationModeEXT x -> showParen (p >= 11) (showString "ConservativeRasterizationModeEXT " . showsPrec 11 x)
-
-instance Read ConservativeRasterizationModeEXT where
-  readPrec = parens (choose [("CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", pure CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT)
-                            , ("CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT", pure CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT)
-                            , ("CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT", pure CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ConservativeRasterizationModeEXT")
-                       v <- step readPrec
-                       pure (ConservativeRasterizationModeEXT v)))
-
-
-type EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION"
-pattern EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION = 1
-
-
-type EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_conservative_rasterization"
-
--- No documentation found for TopLevel "VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME"
-pattern EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_conservative_rasterization"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization  ( PhysicalDeviceConservativeRasterizationPropertiesEXT
-                                                                     , PipelineRasterizationConservativeStateCreateInfoEXT
-                                                                     ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceConservativeRasterizationPropertiesEXT
-
-instance ToCStruct PhysicalDeviceConservativeRasterizationPropertiesEXT
-instance Show PhysicalDeviceConservativeRasterizationPropertiesEXT
-
-instance FromCStruct PhysicalDeviceConservativeRasterizationPropertiesEXT
-
-
-data PipelineRasterizationConservativeStateCreateInfoEXT
-
-instance ToCStruct PipelineRasterizationConservativeStateCreateInfoEXT
-instance Show PipelineRasterizationConservativeStateCreateInfoEXT
-
-instance FromCStruct PipelineRasterizationConservativeStateCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs
+++ /dev/null
@@ -1,593 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_debug_marker  ( debugMarkerSetObjectNameEXT
-                                                       , debugMarkerSetObjectTagEXT
-                                                       , cmdDebugMarkerBeginEXT
-                                                       , cmdDebugMarkerEndEXT
-                                                       , cmdDebugMarkerInsertEXT
-                                                       , DebugMarkerObjectNameInfoEXT(..)
-                                                       , DebugMarkerObjectTagInfoEXT(..)
-                                                       , DebugMarkerMarkerInfoEXT(..)
-                                                       , EXT_DEBUG_MARKER_SPEC_VERSION
-                                                       , pattern EXT_DEBUG_MARKER_SPEC_VERSION
-                                                       , EXT_DEBUG_MARKER_EXTENSION_NAME
-                                                       , pattern EXT_DEBUG_MARKER_EXTENSION_NAME
-                                                       , DebugReportObjectTypeEXT(..)
-                                                       ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.ByteString (packCString)
-import Data.ByteString (useAsCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word64)
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDebugMarkerBeginEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDebugMarkerEndEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDebugMarkerInsertEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDebugMarkerSetObjectNameEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDebugMarkerSetObjectTagEXT))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDebugMarkerSetObjectNameEXT
-  :: FunPtr (Ptr Device_T -> Ptr DebugMarkerObjectNameInfoEXT -> IO Result) -> Ptr Device_T -> Ptr DebugMarkerObjectNameInfoEXT -> IO Result
-
--- | vkDebugMarkerSetObjectNameEXT - Give a user-friendly name to an object
---
--- = Parameters
---
--- -   @device@ is the device that created the object.
---
--- -   @pNameInfo@ is a pointer to a 'DebugMarkerObjectNameInfoEXT'
---     structure specifying the parameters of the name to set on the
---     object.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pNameInfo@ /must/ be a valid pointer to a valid
---     'DebugMarkerObjectNameInfoEXT' structure
---
--- == Host Synchronization
---
--- -   Host access to @pNameInfo->object@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'DebugMarkerObjectNameInfoEXT', 'Graphics.Vulkan.Core10.Handles.Device'
-debugMarkerSetObjectNameEXT :: forall io . MonadIO io => Device -> DebugMarkerObjectNameInfoEXT -> io ()
-debugMarkerSetObjectNameEXT device nameInfo = liftIO . evalContT $ do
-  let vkDebugMarkerSetObjectNameEXT' = mkVkDebugMarkerSetObjectNameEXT (pVkDebugMarkerSetObjectNameEXT (deviceCmds (device :: Device)))
-  pNameInfo <- ContT $ withCStruct (nameInfo)
-  r <- lift $ vkDebugMarkerSetObjectNameEXT' (deviceHandle (device)) pNameInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDebugMarkerSetObjectTagEXT
-  :: FunPtr (Ptr Device_T -> Ptr DebugMarkerObjectTagInfoEXT -> IO Result) -> Ptr Device_T -> Ptr DebugMarkerObjectTagInfoEXT -> IO Result
-
--- | vkDebugMarkerSetObjectTagEXT - Attach arbitrary data to an object
---
--- = Parameters
---
--- -   @device@ is the device that created the object.
---
--- -   @pTagInfo@ is a pointer to a 'DebugMarkerObjectTagInfoEXT' structure
---     specifying the parameters of the tag to attach to the object.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pTagInfo@ /must/ be a valid pointer to a valid
---     'DebugMarkerObjectTagInfoEXT' structure
---
--- == Host Synchronization
---
--- -   Host access to @pTagInfo->object@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'DebugMarkerObjectTagInfoEXT', 'Graphics.Vulkan.Core10.Handles.Device'
-debugMarkerSetObjectTagEXT :: forall io . MonadIO io => Device -> DebugMarkerObjectTagInfoEXT -> io ()
-debugMarkerSetObjectTagEXT device tagInfo = liftIO . evalContT $ do
-  let vkDebugMarkerSetObjectTagEXT' = mkVkDebugMarkerSetObjectTagEXT (pVkDebugMarkerSetObjectTagEXT (deviceCmds (device :: Device)))
-  pTagInfo <- ContT $ withCStruct (tagInfo)
-  r <- lift $ vkDebugMarkerSetObjectTagEXT' (deviceHandle (device)) pTagInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDebugMarkerBeginEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr DebugMarkerMarkerInfoEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr DebugMarkerMarkerInfoEXT -> IO ()
-
--- | vkCmdDebugMarkerBeginEXT - Open a command buffer marker region
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @pMarkerInfo@ is a pointer to a 'DebugMarkerMarkerInfoEXT' structure
---     specifying the parameters of the marker region to open.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
---     'DebugMarkerMarkerInfoEXT' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'DebugMarkerMarkerInfoEXT'
-cmdDebugMarkerBeginEXT :: forall io . MonadIO io => CommandBuffer -> DebugMarkerMarkerInfoEXT -> io ()
-cmdDebugMarkerBeginEXT commandBuffer markerInfo = liftIO . evalContT $ do
-  let vkCmdDebugMarkerBeginEXT' = mkVkCmdDebugMarkerBeginEXT (pVkCmdDebugMarkerBeginEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  pMarkerInfo <- ContT $ withCStruct (markerInfo)
-  lift $ vkCmdDebugMarkerBeginEXT' (commandBufferHandle (commandBuffer)) pMarkerInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDebugMarkerEndEXT
-  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()
-
--- | vkCmdDebugMarkerEndEXT - Close a command buffer marker region
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- = 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
--- 'cmdDebugMarkerBeginEXT' and 'cmdDebugMarkerEndEXT' /must/ be matched
--- and balanced.
---
--- == Valid Usage
---
--- -   There /must/ be an outstanding 'cmdDebugMarkerBeginEXT' command
---     prior to the 'cmdDebugMarkerEndEXT' on the queue that
---     @commandBuffer@ is submitted to
---
--- -   If @commandBuffer@ is a secondary command buffer, there /must/ be an
---     outstanding 'cmdDebugMarkerBeginEXT' command recorded to
---     @commandBuffer@ that has not previously been ended by a call to
---     'cmdDebugMarkerEndEXT'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdDebugMarkerEndEXT :: forall io . MonadIO io => CommandBuffer -> io ()
-cmdDebugMarkerEndEXT commandBuffer = liftIO $ do
-  let vkCmdDebugMarkerEndEXT' = mkVkCmdDebugMarkerEndEXT (pVkCmdDebugMarkerEndEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDebugMarkerEndEXT' (commandBufferHandle (commandBuffer))
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDebugMarkerInsertEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr DebugMarkerMarkerInfoEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr DebugMarkerMarkerInfoEXT -> IO ()
-
--- | vkCmdDebugMarkerInsertEXT - Insert a marker label into a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @pMarkerInfo@ is a pointer to a 'DebugMarkerMarkerInfoEXT' structure
---     specifying the parameters of the marker to insert.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
---     'DebugMarkerMarkerInfoEXT' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'DebugMarkerMarkerInfoEXT'
-cmdDebugMarkerInsertEXT :: forall io . MonadIO io => CommandBuffer -> DebugMarkerMarkerInfoEXT -> io ()
-cmdDebugMarkerInsertEXT commandBuffer markerInfo = liftIO . evalContT $ do
-  let vkCmdDebugMarkerInsertEXT' = mkVkCmdDebugMarkerInsertEXT (pVkCmdDebugMarkerInsertEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  pMarkerInfo <- ContT $ withCStruct (markerInfo)
-  lift $ vkCmdDebugMarkerInsertEXT' (commandBufferHandle (commandBuffer)) pMarkerInfo
-  pure $ ()
-
-
--- | VkDebugMarkerObjectNameInfoEXT - Specify parameters of a name to give to
--- an object
---
--- = Description
---
--- Applications /may/ change the name associated with an object simply by
--- calling 'debugMarkerSetObjectNameEXT' again with a new string. To remove
--- a previously set name, @pObjectName@ /should/ be set to an empty string.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'debugMarkerSetObjectNameEXT'
-data DebugMarkerObjectNameInfoEXT = DebugMarkerObjectNameInfoEXT
-  { -- | @objectType@ /must/ be a valid
-    -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT'
-    -- value
-    objectType :: DebugReportObjectTypeEXT
-  , -- | @object@ /must/ be a Vulkan object of the type associated with
-    -- @objectType@ as defined in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types>
-    object :: Word64
-  , -- | @pObjectName@ /must/ be a null-terminated UTF-8 string
-    objectName :: ByteString
-  }
-  deriving (Typeable)
-deriving instance Show DebugMarkerObjectNameInfoEXT
-
-instance ToCStruct DebugMarkerObjectNameInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DebugMarkerObjectNameInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT)) (objectType)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word64)) (object)
-    pObjectName'' <- ContT $ useAsCString (objectName)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pObjectName''
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    pObjectName'' <- ContT $ useAsCString (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pObjectName''
-    lift $ f
-
-instance FromCStruct DebugMarkerObjectNameInfoEXT where
-  peekCStruct p = do
-    objectType <- peek @DebugReportObjectTypeEXT ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT))
-    object <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    pObjectName <- packCString =<< peek ((p `plusPtr` 32 :: Ptr (Ptr CChar)))
-    pure $ DebugMarkerObjectNameInfoEXT
-             objectType object pObjectName
-
-instance Zero DebugMarkerObjectNameInfoEXT where
-  zero = DebugMarkerObjectNameInfoEXT
-           zero
-           zero
-           mempty
-
-
--- | VkDebugMarkerObjectTagInfoEXT - Specify parameters of a tag to attach to
--- an object
---
--- = 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 (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'debugMarkerSetObjectTagEXT'
-data DebugMarkerObjectTagInfoEXT = DebugMarkerObjectTagInfoEXT
-  { -- | @objectType@ /must/ be a valid
-    -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT'
-    -- value
-    objectType :: DebugReportObjectTypeEXT
-  , -- | @object@ /must/ be a Vulkan object of the type associated with
-    -- @objectType@ as defined in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types>
-    object :: Word64
-  , -- | @tagName@ is a numerical identifier of the tag.
-    tagName :: Word64
-  , -- | @tagSize@ /must/ be greater than @0@
-    tagSize :: Word64
-  , -- | @pTag@ /must/ be a valid pointer to an array of @tagSize@ bytes
-    tag :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show DebugMarkerObjectTagInfoEXT
-
-instance ToCStruct DebugMarkerObjectTagInfoEXT where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DebugMarkerObjectTagInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT)) (objectType)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (object)
-    poke ((p `plusPtr` 32 :: Ptr Word64)) (tagName)
-    poke ((p `plusPtr` 40 :: Ptr CSize)) (CSize (tagSize))
-    poke ((p `plusPtr` 48 :: Ptr (Ptr ()))) (tag)
-    f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr CSize)) (CSize (zero))
-    poke ((p `plusPtr` 48 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct DebugMarkerObjectTagInfoEXT where
-  peekCStruct p = do
-    objectType <- peek @DebugReportObjectTypeEXT ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT))
-    object <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    tagName <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))
-    tagSize <- peek @CSize ((p `plusPtr` 40 :: Ptr CSize))
-    pTag <- peek @(Ptr ()) ((p `plusPtr` 48 :: Ptr (Ptr ())))
-    pure $ DebugMarkerObjectTagInfoEXT
-             objectType object tagName ((\(CSize a) -> a) tagSize) pTag
-
-instance Storable DebugMarkerObjectTagInfoEXT where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DebugMarkerObjectTagInfoEXT where
-  zero = DebugMarkerObjectTagInfoEXT
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDebugMarkerMarkerInfoEXT - Specify parameters of a command buffer
--- marker region
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdDebugMarkerBeginEXT', 'cmdDebugMarkerInsertEXT'
-data DebugMarkerMarkerInfoEXT = DebugMarkerMarkerInfoEXT
-  { -- | @pMarkerName@ /must/ be a null-terminated UTF-8 string
-    markerName :: ByteString
-  , -- | @color@ is an /optional/ RGBA color value that can be associated with
-    -- the marker. A particular implementation /may/ choose to ignore this
-    -- color value. The values contain RGBA values in order, in the range 0.0
-    -- to 1.0. If all elements in @color@ are set to 0.0 then it is ignored.
-    color :: (Float, Float, Float, Float)
-  }
-  deriving (Typeable)
-deriving instance Show DebugMarkerMarkerInfoEXT
-
-instance ToCStruct DebugMarkerMarkerInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DebugMarkerMarkerInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pMarkerName'' <- ContT $ useAsCString (markerName)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pMarkerName''
-    let pColor' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 4 CFloat)))
-    lift $ case (color) of
-      (e0, e1, e2, e3) -> do
-        poke (pColor' :: Ptr CFloat) (CFloat (e0))
-        poke (pColor' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-        poke (pColor' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
-        poke (pColor' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pMarkerName'' <- ContT $ useAsCString (mempty)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pMarkerName''
-    lift $ f
-
-instance FromCStruct DebugMarkerMarkerInfoEXT where
-  peekCStruct p = do
-    pMarkerName <- packCString =<< peek ((p `plusPtr` 16 :: Ptr (Ptr CChar)))
-    let pcolor = lowerArrayPtr @CFloat ((p `plusPtr` 24 :: Ptr (FixedArray 4 CFloat)))
-    color0 <- peek @CFloat ((pcolor `advancePtrBytes` 0 :: Ptr CFloat))
-    color1 <- peek @CFloat ((pcolor `advancePtrBytes` 4 :: Ptr CFloat))
-    color2 <- peek @CFloat ((pcolor `advancePtrBytes` 8 :: Ptr CFloat))
-    color3 <- peek @CFloat ((pcolor `advancePtrBytes` 12 :: Ptr CFloat))
-    pure $ DebugMarkerMarkerInfoEXT
-             pMarkerName ((((\(CFloat a) -> a) color0), ((\(CFloat a) -> a) color1), ((\(CFloat a) -> a) color2), ((\(CFloat a) -> a) color3)))
-
-instance Zero DebugMarkerMarkerInfoEXT where
-  zero = DebugMarkerMarkerInfoEXT
-           mempty
-           (zero, zero, zero, zero)
-
-
-type EXT_DEBUG_MARKER_SPEC_VERSION = 4
-
--- No documentation found for TopLevel "VK_EXT_DEBUG_MARKER_SPEC_VERSION"
-pattern EXT_DEBUG_MARKER_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DEBUG_MARKER_SPEC_VERSION = 4
-
-
-type EXT_DEBUG_MARKER_EXTENSION_NAME = "VK_EXT_debug_marker"
-
--- No documentation found for TopLevel "VK_EXT_DEBUG_MARKER_EXTENSION_NAME"
-pattern EXT_DEBUG_MARKER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_DEBUG_MARKER_EXTENSION_NAME = "VK_EXT_debug_marker"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_debug_marker  ( DebugMarkerMarkerInfoEXT
-                                                       , DebugMarkerObjectNameInfoEXT
-                                                       , DebugMarkerObjectTagInfoEXT
-                                                       ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DebugMarkerMarkerInfoEXT
-
-instance ToCStruct DebugMarkerMarkerInfoEXT
-instance Show DebugMarkerMarkerInfoEXT
-
-instance FromCStruct DebugMarkerMarkerInfoEXT
-
-
-data DebugMarkerObjectNameInfoEXT
-
-instance ToCStruct DebugMarkerObjectNameInfoEXT
-instance Show DebugMarkerObjectNameInfoEXT
-
-instance FromCStruct DebugMarkerObjectNameInfoEXT
-
-
-data DebugMarkerObjectTagInfoEXT
-
-instance ToCStruct DebugMarkerObjectTagInfoEXT
-instance Show DebugMarkerObjectTagInfoEXT
-
-instance FromCStruct DebugMarkerObjectTagInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs
+++ /dev/null
@@ -1,860 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_debug_report  ( createDebugReportCallbackEXT
-                                                       , withDebugReportCallbackEXT
-                                                       , destroyDebugReportCallbackEXT
-                                                       , debugReportMessageEXT
-                                                       , pattern STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT
-                                                       , DebugReportCallbackCreateInfoEXT(..)
-                                                       , DebugReportFlagBitsEXT( DEBUG_REPORT_INFORMATION_BIT_EXT
-                                                                               , DEBUG_REPORT_WARNING_BIT_EXT
-                                                                               , DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT
-                                                                               , DEBUG_REPORT_ERROR_BIT_EXT
-                                                                               , DEBUG_REPORT_DEBUG_BIT_EXT
-                                                                               , ..
-                                                                               )
-                                                       , DebugReportFlagsEXT
-                                                       , DebugReportObjectTypeEXT( DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT
-                                                                                 , DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT
-                                                                                 , ..
-                                                                                 )
-                                                       , PFN_vkDebugReportCallbackEXT
-                                                       , FN_vkDebugReportCallbackEXT
-                                                       , EXT_DEBUG_REPORT_SPEC_VERSION
-                                                       , pattern EXT_DEBUG_REPORT_SPEC_VERSION
-                                                       , EXT_DEBUG_REPORT_EXTENSION_NAME
-                                                       , pattern EXT_DEBUG_REPORT_EXTENSION_NAME
-                                                       , DebugReportCallbackEXT(..)
-                                                       ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.ByteString (useAsCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Foreign.C.Types (CChar(..))
-import Foreign.C.Types (CSize(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Extensions.Handles (DebugReportCallbackEXT)
-import Graphics.Vulkan.Extensions.Handles (DebugReportCallbackEXT(..))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateDebugReportCallbackEXT))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkDebugReportMessageEXT))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkDestroyDebugReportCallbackEXT))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (DebugReportCallbackEXT(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateDebugReportCallbackEXT
-  :: FunPtr (Ptr Instance_T -> Ptr DebugReportCallbackCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr DebugReportCallbackEXT -> IO Result) -> Ptr Instance_T -> Ptr DebugReportCallbackCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr DebugReportCallbackEXT -> IO Result
-
--- | vkCreateDebugReportCallbackEXT - Create a debug report callback object
---
--- = Parameters
---
--- -   @instance@ is the instance the callback will be logged on.
---
--- -   @pCreateInfo@ is a pointer to a 'DebugReportCallbackCreateInfoEXT'
---     structure defining the conditions under which this callback will be
---     called.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pCallback@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT' handle
---     in which the created object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'DebugReportCallbackCreateInfoEXT' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pCallback@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'DebugReportCallbackCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT',
--- 'Graphics.Vulkan.Core10.Handles.Instance'
-createDebugReportCallbackEXT :: forall io . MonadIO io => Instance -> DebugReportCallbackCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DebugReportCallbackEXT)
-createDebugReportCallbackEXT instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateDebugReportCallbackEXT' = mkVkCreateDebugReportCallbackEXT (pVkCreateDebugReportCallbackEXT (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPCallback <- ContT $ bracket (callocBytes @DebugReportCallbackEXT 8) free
-  r <- lift $ vkCreateDebugReportCallbackEXT' (instanceHandle (instance')) pCreateInfo pAllocator (pPCallback)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pCallback <- lift $ peek @DebugReportCallbackEXT pPCallback
-  pure $ (pCallback)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createDebugReportCallbackEXT' and 'destroyDebugReportCallbackEXT'
---
--- To ensure that 'destroyDebugReportCallbackEXT' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withDebugReportCallbackEXT :: forall io r . MonadIO io => (io (DebugReportCallbackEXT) -> ((DebugReportCallbackEXT) -> io ()) -> r) -> Instance -> DebugReportCallbackCreateInfoEXT -> Maybe AllocationCallbacks -> r
-withDebugReportCallbackEXT b instance' pCreateInfo pAllocator =
-  b (createDebugReportCallbackEXT instance' pCreateInfo pAllocator)
-    (\(o0) -> destroyDebugReportCallbackEXT instance' o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyDebugReportCallbackEXT
-  :: FunPtr (Ptr Instance_T -> DebugReportCallbackEXT -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> DebugReportCallbackEXT -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyDebugReportCallbackEXT - Destroy a debug report callback object
---
--- = Parameters
---
--- -   @instance@ is the instance where the callback was created.
---
--- -   @callback@ is the
---     'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT' 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 'destroyDebugReportCallbackEXT' /must/ not be called when a
---     callback is active.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @callback@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @callback@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @callback@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @callback@ /must/ have been created, allocated, or retrieved from
---     @instance@
---
--- == Host Synchronization
---
--- -   Host access to @callback@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT',
--- 'Graphics.Vulkan.Core10.Handles.Instance'
-destroyDebugReportCallbackEXT :: forall io . MonadIO io => Instance -> DebugReportCallbackEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyDebugReportCallbackEXT instance' callback allocator = liftIO . evalContT $ do
-  let vkDestroyDebugReportCallbackEXT' = mkVkDestroyDebugReportCallbackEXT (pVkDestroyDebugReportCallbackEXT (instanceCmds (instance' :: Instance)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyDebugReportCallbackEXT' (instanceHandle (instance')) (callback) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDebugReportMessageEXT
-  :: FunPtr (Ptr Instance_T -> DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> Word64 -> CSize -> Int32 -> Ptr CChar -> Ptr CChar -> IO ()) -> Ptr Instance_T -> DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> Word64 -> CSize -> Int32 -> Ptr CChar -> Ptr CChar -> IO ()
-
--- | vkDebugReportMessageEXT - Inject a message into a debug stream
---
--- = Parameters
---
--- -   @instance@ is the debug stream’s
---     'Graphics.Vulkan.Core10.Handles.Instance'.
---
--- -   @flags@ specifies the 'DebugReportFlagBitsEXT' classification of
---     this event\/message.
---
--- -   @objectType@ is a 'DebugReportObjectTypeEXT' 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. @object@ /can/
---     be 'Graphics.Vulkan.Core10.APIConstants.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
---
--- 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
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @objectType@ is not 'DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT' and
---     @object@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @object@ /must/ be a Vulkan object of the corresponding type
---     associated with @objectType@ as defined in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types>
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @flags@ /must/ be a valid combination of 'DebugReportFlagBitsEXT'
---     values
---
--- -   @flags@ /must/ not be @0@
---
--- -   @objectType@ /must/ be a valid 'DebugReportObjectTypeEXT' value
---
--- -   @pLayerPrefix@ /must/ be a null-terminated UTF-8 string
---
--- -   @pMessage@ /must/ be a null-terminated UTF-8 string
---
--- = See Also
---
--- 'DebugReportFlagsEXT', 'DebugReportObjectTypeEXT',
--- 'Graphics.Vulkan.Core10.Handles.Instance'
-debugReportMessageEXT :: forall io . MonadIO io => Instance -> DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> ("object" ::: Word64) -> ("location" ::: Word64) -> ("messageCode" ::: Int32) -> ("layerPrefix" ::: ByteString) -> ("message" ::: ByteString) -> io ()
-debugReportMessageEXT instance' flags objectType object location messageCode layerPrefix message = liftIO . evalContT $ do
-  let vkDebugReportMessageEXT' = mkVkDebugReportMessageEXT (pVkDebugReportMessageEXT (instanceCmds (instance' :: Instance)))
-  pLayerPrefix <- ContT $ useAsCString (layerPrefix)
-  pMessage <- ContT $ useAsCString (message)
-  lift $ vkDebugReportMessageEXT' (instanceHandle (instance')) (flags) (objectType) (object) (CSize (location)) (messageCode) pLayerPrefix pMessage
-  pure $ ()
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
-
-
--- | VkDebugReportCallbackCreateInfoEXT - Structure specifying parameters of
--- a newly created debug report callback
---
--- = Description
---
--- For each 'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT'
--- that is created the 'DebugReportCallbackCreateInfoEXT'::@flags@
--- determine when that 'DebugReportCallbackCreateInfoEXT'::@pfnCallback@ is
--- called. When an event happens, the implementation will do a bitwise AND
--- of the event’s 'DebugReportFlagBitsEXT' flags to each
--- 'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT' 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
--- 'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT' 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 (Implicit)
---
--- = See Also
---
--- 'PFN_vkDebugReportCallbackEXT', 'DebugReportFlagsEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createDebugReportCallbackEXT'
-data DebugReportCallbackCreateInfoEXT = DebugReportCallbackCreateInfoEXT
-  { -- | @flags@ /must/ be a valid combination of 'DebugReportFlagBitsEXT' values
-    flags :: DebugReportFlagsEXT
-  , -- | @pfnCallback@ /must/ be a valid 'PFN_vkDebugReportCallbackEXT' value
-    pfnCallback :: PFN_vkDebugReportCallbackEXT
-  , -- | @pUserData@ is user data to be passed to the callback.
-    userData :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show DebugReportCallbackCreateInfoEXT
-
-instance ToCStruct DebugReportCallbackCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DebugReportCallbackCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DebugReportFlagsEXT)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr PFN_vkDebugReportCallbackEXT)) (pfnCallback)
-    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (userData)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr PFN_vkDebugReportCallbackEXT)) (zero)
-    f
-
-instance FromCStruct DebugReportCallbackCreateInfoEXT where
-  peekCStruct p = do
-    flags <- peek @DebugReportFlagsEXT ((p `plusPtr` 16 :: Ptr DebugReportFlagsEXT))
-    pfnCallback <- peek @PFN_vkDebugReportCallbackEXT ((p `plusPtr` 24 :: Ptr PFN_vkDebugReportCallbackEXT))
-    pUserData <- peek @(Ptr ()) ((p `plusPtr` 32 :: Ptr (Ptr ())))
-    pure $ DebugReportCallbackCreateInfoEXT
-             flags pfnCallback pUserData
-
-instance Storable DebugReportCallbackCreateInfoEXT where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DebugReportCallbackCreateInfoEXT where
-  zero = DebugReportCallbackCreateInfoEXT
-           zero
-           zero
-           zero
-
-
--- | VkDebugReportFlagBitsEXT - Bitmask specifying events which cause a debug
--- report callback
---
--- = See Also
---
--- 'DebugReportFlagsEXT'
-newtype DebugReportFlagBitsEXT = DebugReportFlagBitsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'DEBUG_REPORT_INFORMATION_BIT_EXT' specifies an informational message
--- such as resource details that may be handy when debugging an
--- application.
-pattern DEBUG_REPORT_INFORMATION_BIT_EXT = DebugReportFlagBitsEXT 0x00000001
--- | '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 DEBUG_REPORT_WARNING_BIT_EXT = DebugReportFlagBitsEXT 0x00000002
--- | 'DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT' specifies a potentially
--- non-optimal use of Vulkan, e.g. using
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage' when
--- setting 'Graphics.Vulkan.Core10.Pass.AttachmentDescription'::@loadOp@ to
--- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'
--- would have worked.
-pattern DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = DebugReportFlagBitsEXT 0x00000004
--- | 'DEBUG_REPORT_ERROR_BIT_EXT' specifies that the application has violated
--- a valid usage condition of the specification.
-pattern DEBUG_REPORT_ERROR_BIT_EXT = DebugReportFlagBitsEXT 0x00000008
--- | 'DEBUG_REPORT_DEBUG_BIT_EXT' specifies diagnostic information from the
--- implementation and layers.
-pattern DEBUG_REPORT_DEBUG_BIT_EXT = DebugReportFlagBitsEXT 0x00000010
-
-type DebugReportFlagsEXT = DebugReportFlagBitsEXT
-
-instance Show DebugReportFlagBitsEXT where
-  showsPrec p = \case
-    DEBUG_REPORT_INFORMATION_BIT_EXT -> showString "DEBUG_REPORT_INFORMATION_BIT_EXT"
-    DEBUG_REPORT_WARNING_BIT_EXT -> showString "DEBUG_REPORT_WARNING_BIT_EXT"
-    DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT -> showString "DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT"
-    DEBUG_REPORT_ERROR_BIT_EXT -> showString "DEBUG_REPORT_ERROR_BIT_EXT"
-    DEBUG_REPORT_DEBUG_BIT_EXT -> showString "DEBUG_REPORT_DEBUG_BIT_EXT"
-    DebugReportFlagBitsEXT x -> showParen (p >= 11) (showString "DebugReportFlagBitsEXT 0x" . showHex x)
-
-instance Read DebugReportFlagBitsEXT where
-  readPrec = parens (choose [("DEBUG_REPORT_INFORMATION_BIT_EXT", pure DEBUG_REPORT_INFORMATION_BIT_EXT)
-                            , ("DEBUG_REPORT_WARNING_BIT_EXT", pure DEBUG_REPORT_WARNING_BIT_EXT)
-                            , ("DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT", pure DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT)
-                            , ("DEBUG_REPORT_ERROR_BIT_EXT", pure DEBUG_REPORT_ERROR_BIT_EXT)
-                            , ("DEBUG_REPORT_DEBUG_BIT_EXT", pure DEBUG_REPORT_DEBUG_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DebugReportFlagBitsEXT")
-                       v <- step readPrec
-                       pure (DebugReportFlagBitsEXT v)))
-
-
--- | VkDebugReportObjectTypeEXT - Specify the type of an object handle
---
--- = Description
---
--- \'
---
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DebugReportObjectTypeEXT'                                | Vulkan Handle Type                                          |
--- +===========================================================+=============================================================+
--- | 'DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT'                    | Unknown\/Undefined Handle                                   |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT'                   | 'Graphics.Vulkan.Core10.Handles.Instance'                   |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT'            | 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'             |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT'                     | 'Graphics.Vulkan.Core10.Handles.Device'                     |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT'                      | 'Graphics.Vulkan.Core10.Handles.Queue'                      |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT'                  | 'Graphics.Vulkan.Core10.Handles.Semaphore'                  |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT'             | 'Graphics.Vulkan.Core10.Handles.CommandBuffer'              |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT'                      | 'Graphics.Vulkan.Core10.Handles.Fence'                      |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT'              | 'Graphics.Vulkan.Core10.Handles.DeviceMemory'               |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT'                     | 'Graphics.Vulkan.Core10.Handles.Buffer'                     |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT'                      | 'Graphics.Vulkan.Core10.Handles.Image'                      |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT'                      | 'Graphics.Vulkan.Core10.Handles.Event'                      |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT'                 | 'Graphics.Vulkan.Core10.Handles.QueryPool'                  |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT'                | 'Graphics.Vulkan.Core10.Handles.BufferView'                 |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT'                 | 'Graphics.Vulkan.Core10.Handles.ImageView'                  |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT'              | 'Graphics.Vulkan.Core10.Handles.ShaderModule'               |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT'             | 'Graphics.Vulkan.Core10.Handles.PipelineCache'              |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT'            | 'Graphics.Vulkan.Core10.Handles.PipelineLayout'             |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT'                | 'Graphics.Vulkan.Core10.Handles.RenderPass'                 |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT'                   | 'Graphics.Vulkan.Core10.Handles.Pipeline'                   |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT'      | 'Graphics.Vulkan.Core10.Handles.DescriptorSetLayout'        |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT'                    | 'Graphics.Vulkan.Core10.Handles.Sampler'                    |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT'            | 'Graphics.Vulkan.Core10.Handles.DescriptorPool'             |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT'             | 'Graphics.Vulkan.Core10.Handles.DescriptorSet'              |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT'                | 'Graphics.Vulkan.Core10.Handles.Framebuffer'                |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT'               | 'Graphics.Vulkan.Core10.Handles.CommandPool'                |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT'                | 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'             |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT'              | 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'           |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT'  | 'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT' |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT'                | 'Graphics.Vulkan.Extensions.Handles.DisplayKHR'             |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT'           | 'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR'         |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
--- | 'DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT' | 'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate'   |
--- +-----------------------------------------------------------+-------------------------------------------------------------+
---
--- 'DebugReportObjectTypeEXT' and Vulkan Handle Relationship
---
--- Note
---
--- The primary expected use of
--- 'Graphics.Vulkan.Core10.Enums.Result.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
---
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerObjectNameInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerObjectTagInfoEXT',
--- 'debugReportMessageEXT'
-newtype DebugReportObjectTypeEXT = DebugReportObjectTypeEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = DebugReportObjectTypeEXT 0
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = DebugReportObjectTypeEXT 1
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = DebugReportObjectTypeEXT 2
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = DebugReportObjectTypeEXT 3
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = DebugReportObjectTypeEXT 4
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = DebugReportObjectTypeEXT 5
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = DebugReportObjectTypeEXT 6
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = DebugReportObjectTypeEXT 7
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = DebugReportObjectTypeEXT 8
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = DebugReportObjectTypeEXT 9
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = DebugReportObjectTypeEXT 10
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = DebugReportObjectTypeEXT 11
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = DebugReportObjectTypeEXT 12
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = DebugReportObjectTypeEXT 13
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = DebugReportObjectTypeEXT 14
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = DebugReportObjectTypeEXT 15
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = DebugReportObjectTypeEXT 16
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = DebugReportObjectTypeEXT 17
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = DebugReportObjectTypeEXT 18
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = DebugReportObjectTypeEXT 19
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = DebugReportObjectTypeEXT 20
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = DebugReportObjectTypeEXT 21
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = DebugReportObjectTypeEXT 22
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = DebugReportObjectTypeEXT 23
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = DebugReportObjectTypeEXT 24
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = DebugReportObjectTypeEXT 25
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = DebugReportObjectTypeEXT 26
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = DebugReportObjectTypeEXT 27
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = DebugReportObjectTypeEXT 28
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = DebugReportObjectTypeEXT 29
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = DebugReportObjectTypeEXT 30
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = DebugReportObjectTypeEXT 33
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = DebugReportObjectTypeEXT 1000156000
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT = DebugReportObjectTypeEXT 1000165000
--- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = DebugReportObjectTypeEXT 1000085000
-{-# complete DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT,
-             DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT :: DebugReportObjectTypeEXT #-}
-
-instance Show DebugReportObjectTypeEXT where
-  showsPrec p = \case
-    DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT"
-    DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT"
-    DebugReportObjectTypeEXT x -> showParen (p >= 11) (showString "DebugReportObjectTypeEXT " . showsPrec 11 x)
-
-instance Read DebugReportObjectTypeEXT where
-  readPrec = parens (choose [("DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT", pure DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT", pure DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT", pure DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT", pure DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT", pure DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT", pure DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT", pure DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT", pure DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT", pure DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT", pure DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT", pure DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT", pure DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT", pure DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT)
-                            , ("DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DebugReportObjectTypeEXT")
-                       v <- step readPrec
-                       pure (DebugReportObjectTypeEXT v)))
-
-
-type FN_vkDebugReportCallbackEXT = DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> ("object" ::: Word64) -> ("location" ::: CSize) -> ("messageCode" ::: Int32) -> ("pLayerPrefix" ::: Ptr CChar) -> ("pMessage" ::: Ptr CChar) -> ("pUserData" ::: Ptr ()) -> IO Bool32
--- | PFN_vkDebugReportCallbackEXT - Application-defined debug report callback
--- function
---
--- = Parameters
---
--- -   @flags@ specifies the 'DebugReportFlagBitsEXT' that triggered this
---     callback.
---
--- -   @objectType@ is a 'DebugReportObjectTypeEXT' 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 'DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT', @object@ is undefined.
---
--- -   @location@ is a component (layer, driver, loader) defined value
---     specifying 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
---     'Graphics.Vulkan.Extensions.Handles.DebugReportCallbackEXT' was
---     created.
---
--- = Description
---
--- The callback /must/ not call 'destroyDebugReportCallbackEXT'.
---
--- The callback returns a 'Graphics.Vulkan.Core10.BaseType.Bool32', which
--- is interpreted in a layer-specified manner. The application /should/
--- always return 'Graphics.Vulkan.Core10.BaseType.FALSE'. The
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' value is reserved for use in
--- layer development.
---
--- @object@ /must/ be a Vulkan object or
--- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'. If @objectType@ is
--- not 'DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT' and @object@ is not
--- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @object@ /must/ be a
--- Vulkan object of the corresponding type associated with @objectType@ as
--- defined in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types>.
---
--- = See Also
---
--- 'DebugReportCallbackCreateInfoEXT'
-type PFN_vkDebugReportCallbackEXT = FunPtr FN_vkDebugReportCallbackEXT
-
-
-type EXT_DEBUG_REPORT_SPEC_VERSION = 9
-
--- No documentation found for TopLevel "VK_EXT_DEBUG_REPORT_SPEC_VERSION"
-pattern EXT_DEBUG_REPORT_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DEBUG_REPORT_SPEC_VERSION = 9
-
-
-type EXT_DEBUG_REPORT_EXTENSION_NAME = "VK_EXT_debug_report"
-
--- No documentation found for TopLevel "VK_EXT_DEBUG_REPORT_EXTENSION_NAME"
-pattern EXT_DEBUG_REPORT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_DEBUG_REPORT_EXTENSION_NAME = "VK_EXT_debug_report"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs-boot
+++ /dev/null
@@ -1,25 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_debug_report  ( DebugReportCallbackCreateInfoEXT
-                                                       , DebugReportFlagBitsEXT
-                                                       , DebugReportFlagsEXT
-                                                       , DebugReportObjectTypeEXT
-                                                       ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DebugReportCallbackCreateInfoEXT
-
-instance ToCStruct DebugReportCallbackCreateInfoEXT
-instance Show DebugReportCallbackCreateInfoEXT
-
-instance FromCStruct DebugReportCallbackCreateInfoEXT
-
-
-data DebugReportFlagBitsEXT
-
-type DebugReportFlagsEXT = DebugReportFlagBitsEXT
-
-
-data DebugReportObjectTypeEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs
+++ /dev/null
@@ -1,1522 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_debug_utils  ( setDebugUtilsObjectNameEXT
-                                                      , setDebugUtilsObjectTagEXT
-                                                      , queueBeginDebugUtilsLabelEXT
-                                                      , queueEndDebugUtilsLabelEXT
-                                                      , queueInsertDebugUtilsLabelEXT
-                                                      , cmdBeginDebugUtilsLabelEXT
-                                                      , cmdWithDebugUtilsLabelEXT
-                                                      , cmdEndDebugUtilsLabelEXT
-                                                      , cmdInsertDebugUtilsLabelEXT
-                                                      , createDebugUtilsMessengerEXT
-                                                      , withDebugUtilsMessengerEXT
-                                                      , destroyDebugUtilsMessengerEXT
-                                                      , submitDebugUtilsMessageEXT
-                                                      , DebugUtilsObjectNameInfoEXT(..)
-                                                      , DebugUtilsObjectTagInfoEXT(..)
-                                                      , DebugUtilsLabelEXT(..)
-                                                      , DebugUtilsMessengerCreateInfoEXT(..)
-                                                      , DebugUtilsMessengerCallbackDataEXT(..)
-                                                      , DebugUtilsMessengerCreateFlagsEXT(..)
-                                                      , DebugUtilsMessengerCallbackDataFlagsEXT(..)
-                                                      , DebugUtilsMessageSeverityFlagBitsEXT( DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT
-                                                                                            , DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT
-                                                                                            , DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT
-                                                                                            , DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT
-                                                                                            , ..
-                                                                                            )
-                                                      , DebugUtilsMessageSeverityFlagsEXT
-                                                      , DebugUtilsMessageTypeFlagBitsEXT( DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT
-                                                                                        , DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT
-                                                                                        , DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT
-                                                                                        , ..
-                                                                                        )
-                                                      , DebugUtilsMessageTypeFlagsEXT
-                                                      , PFN_vkDebugUtilsMessengerCallbackEXT
-                                                      , FN_vkDebugUtilsMessengerCallbackEXT
-                                                      , EXT_DEBUG_UTILS_SPEC_VERSION
-                                                      , pattern EXT_DEBUG_UTILS_SPEC_VERSION
-                                                      , EXT_DEBUG_UTILS_EXTENSION_NAME
-                                                      , pattern EXT_DEBUG_UTILS_EXTENSION_NAME
-                                                      , DebugUtilsMessengerEXT(..)
-                                                      ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.ByteString (packCString)
-import Data.ByteString (useAsCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Extensions.Handles (DebugUtilsMessengerEXT)
-import Graphics.Vulkan.Extensions.Handles (DebugUtilsMessengerEXT(..))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBeginDebugUtilsLabelEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdEndDebugUtilsLabelEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdInsertDebugUtilsLabelEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkQueueBeginDebugUtilsLabelEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkQueueEndDebugUtilsLabelEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkQueueInsertDebugUtilsLabelEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkSetDebugUtilsObjectNameEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkSetDebugUtilsObjectTagEXT))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateDebugUtilsMessengerEXT))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkDestroyDebugUtilsMessengerEXT))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkSubmitDebugUtilsMessageEXT))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Enums.ObjectType (ObjectType)
-import Graphics.Vulkan.Core10.Handles (Queue)
-import Graphics.Vulkan.Core10.Handles (Queue(..))
-import Graphics.Vulkan.Core10.Handles (Queue_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (DebugUtilsMessengerEXT(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkSetDebugUtilsObjectNameEXT
-  :: FunPtr (Ptr Device_T -> Ptr DebugUtilsObjectNameInfoEXT -> IO Result) -> Ptr Device_T -> Ptr DebugUtilsObjectNameInfoEXT -> IO Result
-
--- | vkSetDebugUtilsObjectNameEXT - Give a user-friendly name to an object
---
--- = Parameters
---
--- -   @device@ is the device that created the object.
---
--- -   @pNameInfo@ is a pointer to a 'DebugUtilsObjectNameInfoEXT'
---     structure specifying parameters of the name to set on the object.
---
--- == Valid Usage
---
--- -   @pNameInfo->objectType@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
---
--- -   @pNameInfo->objectHandle@ /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pNameInfo@ /must/ be a valid pointer to a valid
---     'DebugUtilsObjectNameInfoEXT' structure
---
--- == Host Synchronization
---
--- -   Host access to @pNameInfo->objectHandle@ /must/ be externally
---     synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'DebugUtilsObjectNameInfoEXT', 'Graphics.Vulkan.Core10.Handles.Device'
-setDebugUtilsObjectNameEXT :: forall io . MonadIO io => Device -> DebugUtilsObjectNameInfoEXT -> io ()
-setDebugUtilsObjectNameEXT device nameInfo = liftIO . evalContT $ do
-  let vkSetDebugUtilsObjectNameEXT' = mkVkSetDebugUtilsObjectNameEXT (pVkSetDebugUtilsObjectNameEXT (deviceCmds (device :: Device)))
-  pNameInfo <- ContT $ withCStruct (nameInfo)
-  r <- lift $ vkSetDebugUtilsObjectNameEXT' (deviceHandle (device)) pNameInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkSetDebugUtilsObjectTagEXT
-  :: FunPtr (Ptr Device_T -> Ptr DebugUtilsObjectTagInfoEXT -> IO Result) -> Ptr Device_T -> Ptr DebugUtilsObjectTagInfoEXT -> IO Result
-
--- | vkSetDebugUtilsObjectTagEXT - Attach arbitrary data to an object
---
--- = Parameters
---
--- -   @device@ is the device that created the object.
---
--- -   @pTagInfo@ is a pointer to a 'DebugUtilsObjectTagInfoEXT' structure
---     specifying parameters of the tag to attach to the object.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pTagInfo@ /must/ be a valid pointer to a valid
---     'DebugUtilsObjectTagInfoEXT' structure
---
--- == Host Synchronization
---
--- -   Host access to @pTagInfo->objectHandle@ /must/ be externally
---     synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'DebugUtilsObjectTagInfoEXT', 'Graphics.Vulkan.Core10.Handles.Device'
-setDebugUtilsObjectTagEXT :: forall io . MonadIO io => Device -> DebugUtilsObjectTagInfoEXT -> io ()
-setDebugUtilsObjectTagEXT device tagInfo = liftIO . evalContT $ do
-  let vkSetDebugUtilsObjectTagEXT' = mkVkSetDebugUtilsObjectTagEXT (pVkSetDebugUtilsObjectTagEXT (deviceCmds (device :: Device)))
-  pTagInfo <- ContT $ withCStruct (tagInfo)
-  r <- lift $ vkSetDebugUtilsObjectTagEXT' (deviceHandle (device)) pTagInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkQueueBeginDebugUtilsLabelEXT
-  :: FunPtr (Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()
-
--- | vkQueueBeginDebugUtilsLabelEXT - Open a queue debug label region
---
--- = Parameters
---
--- -   @queue@ is the queue in which to start a debug label region.
---
--- -   @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure
---     specifying parameters of the label region to open.
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'DebugUtilsLabelEXT', 'Graphics.Vulkan.Core10.Handles.Queue'
-queueBeginDebugUtilsLabelEXT :: forall io . MonadIO io => Queue -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
-queueBeginDebugUtilsLabelEXT queue labelInfo = liftIO . evalContT $ do
-  let vkQueueBeginDebugUtilsLabelEXT' = mkVkQueueBeginDebugUtilsLabelEXT (pVkQueueBeginDebugUtilsLabelEXT (deviceCmds (queue :: Queue)))
-  pLabelInfo <- ContT $ withCStruct (labelInfo)
-  lift $ vkQueueBeginDebugUtilsLabelEXT' (queueHandle (queue)) pLabelInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkQueueEndDebugUtilsLabelEXT
-  :: FunPtr (Ptr Queue_T -> IO ()) -> Ptr Queue_T -> IO ()
-
--- | vkQueueEndDebugUtilsLabelEXT - Close a queue debug label region
---
--- = Parameters
---
--- -   @queue@ is the queue in which a debug label region should be closed.
---
--- = Description
---
--- The calls to 'queueBeginDebugUtilsLabelEXT' and
--- 'queueEndDebugUtilsLabelEXT' /must/ be matched and balanced.
---
--- == Valid Usage
---
--- -   There /must/ be an outstanding 'queueBeginDebugUtilsLabelEXT'
---     command prior to the 'queueEndDebugUtilsLabelEXT' on the queue
---
--- == Valid Usage (Implicit)
---
--- -   @queue@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Queue'
---     handle
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Queue'
-queueEndDebugUtilsLabelEXT :: forall io . MonadIO io => Queue -> io ()
-queueEndDebugUtilsLabelEXT queue = liftIO $ do
-  let vkQueueEndDebugUtilsLabelEXT' = mkVkQueueEndDebugUtilsLabelEXT (pVkQueueEndDebugUtilsLabelEXT (deviceCmds (queue :: Queue)))
-  vkQueueEndDebugUtilsLabelEXT' (queueHandle (queue))
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkQueueInsertDebugUtilsLabelEXT
-  :: FunPtr (Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()
-
--- | vkQueueInsertDebugUtilsLabelEXT - Insert a label into a queue
---
--- = Parameters
---
--- -   @queue@ is the queue into which a debug label will be inserted.
---
--- -   @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure
---     specifying parameters of the label to insert.
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'DebugUtilsLabelEXT', 'Graphics.Vulkan.Core10.Handles.Queue'
-queueInsertDebugUtilsLabelEXT :: forall io . MonadIO io => Queue -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
-queueInsertDebugUtilsLabelEXT queue labelInfo = liftIO . evalContT $ do
-  let vkQueueInsertDebugUtilsLabelEXT' = mkVkQueueInsertDebugUtilsLabelEXT (pVkQueueInsertDebugUtilsLabelEXT (deviceCmds (queue :: Queue)))
-  pLabelInfo <- ContT $ withCStruct (labelInfo)
-  lift $ vkQueueInsertDebugUtilsLabelEXT' (queueHandle (queue)) pLabelInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBeginDebugUtilsLabelEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()
-
--- | vkCmdBeginDebugUtilsLabelEXT - Open a command buffer debug label region
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure
---     specifying parameters of the label region to open.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pLabelInfo@ /must/ be a valid pointer to a valid
---     'DebugUtilsLabelEXT' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'DebugUtilsLabelEXT'
-cmdBeginDebugUtilsLabelEXT :: forall io . MonadIO io => CommandBuffer -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
-cmdBeginDebugUtilsLabelEXT commandBuffer labelInfo = liftIO . evalContT $ do
-  let vkCmdBeginDebugUtilsLabelEXT' = mkVkCmdBeginDebugUtilsLabelEXT (pVkCmdBeginDebugUtilsLabelEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  pLabelInfo <- ContT $ withCStruct (labelInfo)
-  lift $ vkCmdBeginDebugUtilsLabelEXT' (commandBufferHandle (commandBuffer)) pLabelInfo
-  pure $ ()
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'cmdBeginDebugUtilsLabelEXT' and 'cmdEndDebugUtilsLabelEXT'
---
--- To ensure that 'cmdEndDebugUtilsLabelEXT' is always called: pass
--- 'Control.Exception.bracket_' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
--- Note that there is no inner resource
-cmdWithDebugUtilsLabelEXT :: forall io r . MonadIO io => (io () -> io () -> r) -> CommandBuffer -> DebugUtilsLabelEXT -> r
-cmdWithDebugUtilsLabelEXT b commandBuffer pLabelInfo =
-  b (cmdBeginDebugUtilsLabelEXT commandBuffer pLabelInfo)
-    (cmdEndDebugUtilsLabelEXT commandBuffer)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdEndDebugUtilsLabelEXT
-  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()
-
--- | vkCmdEndDebugUtilsLabelEXT - Close a command buffer label region
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- = 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
--- 'cmdBeginDebugUtilsLabelEXT' and 'cmdEndDebugUtilsLabelEXT' /must/ be
--- matched and balanced.
---
--- == Valid Usage
---
--- -   There /must/ be an outstanding 'cmdBeginDebugUtilsLabelEXT' command
---     prior to the 'cmdEndDebugUtilsLabelEXT' on the queue that
---     @commandBuffer@ is submitted to
---
--- -   If @commandBuffer@ is a secondary command buffer, there /must/ be an
---     outstanding 'cmdBeginDebugUtilsLabelEXT' command recorded to
---     @commandBuffer@ that has not previously been ended by a call to
---     'cmdEndDebugUtilsLabelEXT'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdEndDebugUtilsLabelEXT :: forall io . MonadIO io => CommandBuffer -> io ()
-cmdEndDebugUtilsLabelEXT commandBuffer = liftIO $ do
-  let vkCmdEndDebugUtilsLabelEXT' = mkVkCmdEndDebugUtilsLabelEXT (pVkCmdEndDebugUtilsLabelEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdEndDebugUtilsLabelEXT' (commandBufferHandle (commandBuffer))
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdInsertDebugUtilsLabelEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()
-
--- | vkCmdInsertDebugUtilsLabelEXT - Insert a label into a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @pInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure specifying
---     parameters of the label to insert.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pLabelInfo@ /must/ be a valid pointer to a valid
---     'DebugUtilsLabelEXT' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'DebugUtilsLabelEXT'
-cmdInsertDebugUtilsLabelEXT :: forall io . MonadIO io => CommandBuffer -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
-cmdInsertDebugUtilsLabelEXT commandBuffer labelInfo = liftIO . evalContT $ do
-  let vkCmdInsertDebugUtilsLabelEXT' = mkVkCmdInsertDebugUtilsLabelEXT (pVkCmdInsertDebugUtilsLabelEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  pLabelInfo <- ContT $ withCStruct (labelInfo)
-  lift $ vkCmdInsertDebugUtilsLabelEXT' (commandBufferHandle (commandBuffer)) pLabelInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateDebugUtilsMessengerEXT
-  :: FunPtr (Ptr Instance_T -> Ptr DebugUtilsMessengerCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr DebugUtilsMessengerEXT -> IO Result) -> Ptr Instance_T -> Ptr DebugUtilsMessengerCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr DebugUtilsMessengerEXT -> IO Result
-
--- | vkCreateDebugUtilsMessengerEXT - Create a debug messenger object
---
--- = Parameters
---
--- -   @instance@ is the instance the messenger will be used with.
---
--- -   @pCreateInfo@ is a pointer to a 'DebugUtilsMessengerCreateInfoEXT'
---     structure containing the callback pointer, as well as defining
---     conditions under which this messenger will trigger the callback.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pMessenger@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' handle
---     in which the created object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'DebugUtilsMessengerCreateInfoEXT' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pMessenger@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- The application /must/ ensure that 'createDebugUtilsMessengerEXT' is not
--- executed in parallel with any Vulkan command that is also called with
--- @instance@ or child of @instance@ as the dispatchable argument.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'DebugUtilsMessengerCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT',
--- 'Graphics.Vulkan.Core10.Handles.Instance'
-createDebugUtilsMessengerEXT :: forall io . MonadIO io => Instance -> DebugUtilsMessengerCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DebugUtilsMessengerEXT)
-createDebugUtilsMessengerEXT instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateDebugUtilsMessengerEXT' = mkVkCreateDebugUtilsMessengerEXT (pVkCreateDebugUtilsMessengerEXT (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPMessenger <- ContT $ bracket (callocBytes @DebugUtilsMessengerEXT 8) free
-  r <- lift $ vkCreateDebugUtilsMessengerEXT' (instanceHandle (instance')) pCreateInfo pAllocator (pPMessenger)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pMessenger <- lift $ peek @DebugUtilsMessengerEXT pPMessenger
-  pure $ (pMessenger)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createDebugUtilsMessengerEXT' and 'destroyDebugUtilsMessengerEXT'
---
--- To ensure that 'destroyDebugUtilsMessengerEXT' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withDebugUtilsMessengerEXT :: forall io r . MonadIO io => (io (DebugUtilsMessengerEXT) -> ((DebugUtilsMessengerEXT) -> io ()) -> r) -> Instance -> DebugUtilsMessengerCreateInfoEXT -> Maybe AllocationCallbacks -> r
-withDebugUtilsMessengerEXT b instance' pCreateInfo pAllocator =
-  b (createDebugUtilsMessengerEXT instance' pCreateInfo pAllocator)
-    (\(o0) -> destroyDebugUtilsMessengerEXT instance' o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyDebugUtilsMessengerEXT
-  :: FunPtr (Ptr Instance_T -> DebugUtilsMessengerEXT -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> DebugUtilsMessengerEXT -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyDebugUtilsMessengerEXT - Destroy a debug messenger object
---
--- = Parameters
---
--- -   @instance@ is the instance where the callback was created.
---
--- -   @messenger@ is the
---     'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' 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 'destroyDebugUtilsMessengerEXT' /must/ not be called when a
---     callback is active.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @messenger@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @messenger@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @messenger@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @messenger@ /must/ have been created, allocated, or retrieved from
---     @instance@
---
--- == Host Synchronization
---
--- -   Host access to @messenger@ /must/ be externally synchronized
---
--- The application /must/ ensure that 'destroyDebugUtilsMessengerEXT' is
--- not executed in parallel with any Vulkan command that is also called
--- with @instance@ or child of @instance@ as the dispatchable argument.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT',
--- 'Graphics.Vulkan.Core10.Handles.Instance'
-destroyDebugUtilsMessengerEXT :: forall io . MonadIO io => Instance -> DebugUtilsMessengerEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyDebugUtilsMessengerEXT instance' messenger allocator = liftIO . evalContT $ do
-  let vkDestroyDebugUtilsMessengerEXT' = mkVkDestroyDebugUtilsMessengerEXT (pVkDestroyDebugUtilsMessengerEXT (instanceCmds (instance' :: Instance)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyDebugUtilsMessengerEXT' (instanceHandle (instance')) (messenger) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkSubmitDebugUtilsMessageEXT
-  :: FunPtr (Ptr Instance_T -> DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageTypeFlagsEXT -> Ptr DebugUtilsMessengerCallbackDataEXT -> IO ()) -> Ptr Instance_T -> DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageTypeFlagsEXT -> Ptr DebugUtilsMessengerCallbackDataEXT -> IO ()
-
--- | vkSubmitDebugUtilsMessageEXT - Inject a message into a debug stream
---
--- = Parameters
---
--- -   @instance@ is the debug stream’s
---     'Graphics.Vulkan.Core10.Handles.Instance'.
---
--- -   @messageSeverity@ is the 'DebugUtilsMessageSeverityFlagBitsEXT'
---     severity of this event\/message.
---
--- -   @messageTypes@ is a bitmask of 'DebugUtilsMessageTypeFlagBitsEXT'
---     specifying which type of event(s) to identify with this message.
---
--- -   @pCallbackData@ contains all the callback related data in the
---     'DebugUtilsMessengerCallbackDataEXT' structure.
---
--- = 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
---
--- -   The @objectType@ member of each element of @pCallbackData->pObjects@
---     /must/ not be
---     'Graphics.Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @messageSeverity@ /must/ be a valid
---     'DebugUtilsMessageSeverityFlagBitsEXT' value
---
--- -   @messageTypes@ /must/ be a valid combination of
---     'DebugUtilsMessageTypeFlagBitsEXT' values
---
--- -   @messageTypes@ /must/ not be @0@
---
--- -   @pCallbackData@ /must/ be a valid pointer to a valid
---     'DebugUtilsMessengerCallbackDataEXT' structure
---
--- = See Also
---
--- 'DebugUtilsMessageSeverityFlagBitsEXT', 'DebugUtilsMessageTypeFlagsEXT',
--- 'DebugUtilsMessengerCallbackDataEXT',
--- 'Graphics.Vulkan.Core10.Handles.Instance'
-submitDebugUtilsMessageEXT :: forall io . MonadIO io => Instance -> DebugUtilsMessageSeverityFlagBitsEXT -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> DebugUtilsMessengerCallbackDataEXT -> io ()
-submitDebugUtilsMessageEXT instance' messageSeverity messageTypes callbackData = liftIO . evalContT $ do
-  let vkSubmitDebugUtilsMessageEXT' = mkVkSubmitDebugUtilsMessageEXT (pVkSubmitDebugUtilsMessageEXT (instanceCmds (instance' :: Instance)))
-  pCallbackData <- ContT $ withCStruct (callbackData)
-  lift $ vkSubmitDebugUtilsMessageEXT' (instanceHandle (instance')) (messageSeverity) (messageTypes) pCallbackData
-  pure $ ()
-
-
--- | VkDebugUtilsObjectNameInfoEXT - Specify parameters of a name to give to
--- an object
---
--- = Description
---
--- Applications /may/ change the name associated with an object simply by
--- calling 'setDebugUtilsObjectNameEXT' again with a new string. If
--- @pObjectName@ is either @NULL@ or an empty string, then any previously
--- set name is removed.
---
--- == Valid Usage
---
--- -   If @objectType@ is
---     'Graphics.Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN',
---     @objectHandle@ /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @objectType@ is not
---     'Graphics.Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN',
---     @objectHandle@ /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or a valid Vulkan
---     handle of the type associated with @objectType@ as defined in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-types VkObjectType and Vulkan Handle Relationship>
---     table
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @objectType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ObjectType.ObjectType' value
---
--- -   If @pObjectName@ is not @NULL@, @pObjectName@ /must/ be a
---     null-terminated UTF-8 string
---
--- = See Also
---
--- 'DebugUtilsMessengerCallbackDataEXT',
--- 'Graphics.Vulkan.Core10.Enums.ObjectType.ObjectType',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'setDebugUtilsObjectNameEXT'
-data DebugUtilsObjectNameInfoEXT = DebugUtilsObjectNameInfoEXT
-  { -- | @objectType@ is a 'Graphics.Vulkan.Core10.Enums.ObjectType.ObjectType'
-    -- specifying the type of the object to be named.
-    objectType :: ObjectType
-  , -- | @objectHandle@ is the object to be named.
-    objectHandle :: Word64
-  , -- | @pObjectName@ is either @NULL@ or a null-terminated UTF-8 string
-    -- specifying the name to apply to @objectHandle@.
-    objectName :: Maybe ByteString
-  }
-  deriving (Typeable)
-deriving instance Show DebugUtilsObjectNameInfoEXT
-
-instance ToCStruct DebugUtilsObjectNameInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DebugUtilsObjectNameInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr ObjectType)) (objectType)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word64)) (objectHandle)
-    pObjectName'' <- case (objectName) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ useAsCString (j)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pObjectName''
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ObjectType)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct DebugUtilsObjectNameInfoEXT where
-  peekCStruct p = do
-    objectType <- peek @ObjectType ((p `plusPtr` 16 :: Ptr ObjectType))
-    objectHandle <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    pObjectName <- peek @(Ptr CChar) ((p `plusPtr` 32 :: Ptr (Ptr CChar)))
-    pObjectName' <- maybePeek (\j -> packCString  (j)) pObjectName
-    pure $ DebugUtilsObjectNameInfoEXT
-             objectType objectHandle pObjectName'
-
-instance Zero DebugUtilsObjectNameInfoEXT where
-  zero = DebugUtilsObjectNameInfoEXT
-           zero
-           zero
-           Nothing
-
-
--- | VkDebugUtilsObjectTagInfoEXT - Specify parameters of a tag to attach to
--- an object
---
--- = 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 (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ObjectType.ObjectType',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'setDebugUtilsObjectTagEXT'
-data DebugUtilsObjectTagInfoEXT = DebugUtilsObjectTagInfoEXT
-  { -- | @objectType@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ObjectType.ObjectType' value
-    objectType :: ObjectType
-  , -- | @objectHandle@ /must/ be a valid Vulkan handle of the type associated
-    -- with @objectType@ as defined in the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-types VkObjectType and Vulkan Handle Relationship>
-    -- table
-    objectHandle :: Word64
-  , -- | @tagName@ is a numerical identifier of the tag.
-    tagName :: Word64
-  , -- | @tagSize@ /must/ be greater than @0@
-    tagSize :: Word64
-  , -- | @pTag@ /must/ be a valid pointer to an array of @tagSize@ bytes
-    tag :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show DebugUtilsObjectTagInfoEXT
-
-instance ToCStruct DebugUtilsObjectTagInfoEXT where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DebugUtilsObjectTagInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ObjectType)) (objectType)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (objectHandle)
-    poke ((p `plusPtr` 32 :: Ptr Word64)) (tagName)
-    poke ((p `plusPtr` 40 :: Ptr CSize)) (CSize (tagSize))
-    poke ((p `plusPtr` 48 :: Ptr (Ptr ()))) (tag)
-    f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ObjectType)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr CSize)) (CSize (zero))
-    poke ((p `plusPtr` 48 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct DebugUtilsObjectTagInfoEXT where
-  peekCStruct p = do
-    objectType <- peek @ObjectType ((p `plusPtr` 16 :: Ptr ObjectType))
-    objectHandle <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    tagName <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))
-    tagSize <- peek @CSize ((p `plusPtr` 40 :: Ptr CSize))
-    pTag <- peek @(Ptr ()) ((p `plusPtr` 48 :: Ptr (Ptr ())))
-    pure $ DebugUtilsObjectTagInfoEXT
-             objectType objectHandle tagName ((\(CSize a) -> a) tagSize) pTag
-
-instance Storable DebugUtilsObjectTagInfoEXT where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DebugUtilsObjectTagInfoEXT where
-  zero = DebugUtilsObjectTagInfoEXT
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDebugUtilsLabelEXT - Specify parameters of a label region
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'DebugUtilsMessengerCallbackDataEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdBeginDebugUtilsLabelEXT', 'cmdInsertDebugUtilsLabelEXT',
--- 'queueBeginDebugUtilsLabelEXT', 'queueInsertDebugUtilsLabelEXT'
-data DebugUtilsLabelEXT = DebugUtilsLabelEXT
-  { -- | @pLabelName@ /must/ be a null-terminated UTF-8 string
-    labelName :: ByteString
-  , -- | @color@ is an optional RGBA color value that can be associated with the
-    -- label. A particular implementation /may/ choose to ignore this color
-    -- value. The values contain RGBA values in order, in the range 0.0 to 1.0.
-    -- If all elements in @color@ are set to 0.0 then it is ignored.
-    color :: (Float, Float, Float, Float)
-  }
-  deriving (Typeable)
-deriving instance Show DebugUtilsLabelEXT
-
-instance ToCStruct DebugUtilsLabelEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DebugUtilsLabelEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pLabelName'' <- ContT $ useAsCString (labelName)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pLabelName''
-    let pColor' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 4 CFloat)))
-    lift $ case (color) of
-      (e0, e1, e2, e3) -> do
-        poke (pColor' :: Ptr CFloat) (CFloat (e0))
-        poke (pColor' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-        poke (pColor' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
-        poke (pColor' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pLabelName'' <- ContT $ useAsCString (mempty)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pLabelName''
-    lift $ f
-
-instance FromCStruct DebugUtilsLabelEXT where
-  peekCStruct p = do
-    pLabelName <- packCString =<< peek ((p `plusPtr` 16 :: Ptr (Ptr CChar)))
-    let pcolor = lowerArrayPtr @CFloat ((p `plusPtr` 24 :: Ptr (FixedArray 4 CFloat)))
-    color0 <- peek @CFloat ((pcolor `advancePtrBytes` 0 :: Ptr CFloat))
-    color1 <- peek @CFloat ((pcolor `advancePtrBytes` 4 :: Ptr CFloat))
-    color2 <- peek @CFloat ((pcolor `advancePtrBytes` 8 :: Ptr CFloat))
-    color3 <- peek @CFloat ((pcolor `advancePtrBytes` 12 :: Ptr CFloat))
-    pure $ DebugUtilsLabelEXT
-             pLabelName ((((\(CFloat a) -> a) color0), ((\(CFloat a) -> a) color1), ((\(CFloat a) -> a) color2), ((\(CFloat a) -> a) color3)))
-
-instance Zero DebugUtilsLabelEXT where
-  zero = DebugUtilsLabelEXT
-           mempty
-           (zero, zero, zero, zero)
-
-
--- | VkDebugUtilsMessengerCreateInfoEXT - Structure specifying parameters of
--- a newly created debug messenger
---
--- = Description
---
--- For each 'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT'
--- that is created the
--- 'DebugUtilsMessengerCreateInfoEXT'::@messageSeverity@ and
--- 'DebugUtilsMessengerCreateInfoEXT'::@messageType@ determine when that
--- 'DebugUtilsMessengerCreateInfoEXT'::@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
---     'DebugUtilsMessageSeverityFlagBitsEXT' with the @messageSeverity@
---     provided during creation of the
---     'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' object.
---
---     1.  If the value is 0, the message is skipped.
---
--- 2.  The implementation will perform bitwise AND of the event’s
---     'DebugUtilsMessageTypeFlagBitsEXT' with the @messageType@ provided
---     during the creation of the
---     'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' 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
--- 'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' 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 (Implicit)
---
--- = See Also
---
--- 'PFN_vkDebugUtilsMessengerCallbackEXT',
--- 'DebugUtilsMessageSeverityFlagsEXT', 'DebugUtilsMessageTypeFlagsEXT',
--- 'DebugUtilsMessengerCreateFlagsEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createDebugUtilsMessengerEXT'
-data DebugUtilsMessengerCreateInfoEXT = DebugUtilsMessengerCreateInfoEXT
-  { -- | @flags@ /must/ be @0@
-    flags :: DebugUtilsMessengerCreateFlagsEXT
-  , -- | @messageSeverity@ /must/ not be @0@
-    messageSeverity :: DebugUtilsMessageSeverityFlagsEXT
-  , -- | @messageType@ /must/ not be @0@
-    messageType :: DebugUtilsMessageTypeFlagsEXT
-  , -- | @pfnUserCallback@ /must/ be a valid
-    -- 'PFN_vkDebugUtilsMessengerCallbackEXT' value
-    pfnUserCallback :: PFN_vkDebugUtilsMessengerCallbackEXT
-  , -- | @pUserData@ is user data to be passed to the callback.
-    userData :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show DebugUtilsMessengerCreateInfoEXT
-
-instance ToCStruct DebugUtilsMessengerCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DebugUtilsMessengerCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DebugUtilsMessengerCreateFlagsEXT)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr DebugUtilsMessageSeverityFlagsEXT)) (messageSeverity)
-    poke ((p `plusPtr` 24 :: Ptr DebugUtilsMessageTypeFlagsEXT)) (messageType)
-    poke ((p `plusPtr` 32 :: Ptr PFN_vkDebugUtilsMessengerCallbackEXT)) (pfnUserCallback)
-    poke ((p `plusPtr` 40 :: Ptr (Ptr ()))) (userData)
-    f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr DebugUtilsMessageSeverityFlagsEXT)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DebugUtilsMessageTypeFlagsEXT)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr PFN_vkDebugUtilsMessengerCallbackEXT)) (zero)
-    f
-
-instance FromCStruct DebugUtilsMessengerCreateInfoEXT where
-  peekCStruct p = do
-    flags <- peek @DebugUtilsMessengerCreateFlagsEXT ((p `plusPtr` 16 :: Ptr DebugUtilsMessengerCreateFlagsEXT))
-    messageSeverity <- peek @DebugUtilsMessageSeverityFlagsEXT ((p `plusPtr` 20 :: Ptr DebugUtilsMessageSeverityFlagsEXT))
-    messageType <- peek @DebugUtilsMessageTypeFlagsEXT ((p `plusPtr` 24 :: Ptr DebugUtilsMessageTypeFlagsEXT))
-    pfnUserCallback <- peek @PFN_vkDebugUtilsMessengerCallbackEXT ((p `plusPtr` 32 :: Ptr PFN_vkDebugUtilsMessengerCallbackEXT))
-    pUserData <- peek @(Ptr ()) ((p `plusPtr` 40 :: Ptr (Ptr ())))
-    pure $ DebugUtilsMessengerCreateInfoEXT
-             flags messageSeverity messageType pfnUserCallback pUserData
-
-instance Storable DebugUtilsMessengerCreateInfoEXT where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DebugUtilsMessengerCreateInfoEXT where
-  zero = DebugUtilsMessengerCreateInfoEXT
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDebugUtilsMessengerCallbackDataEXT - Structure specifying parameters
--- returned to the callback
---
--- = 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
--- 'Graphics.Vulkan.Core10.Handles.Queue' 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
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer' 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
---     'Graphics.Vulkan.Core10.Enums.StructureType.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
---
--- -   If @queueLabelCount@ is not @0@, @pQueueLabels@ /must/ be a valid
---     pointer to an array of @queueLabelCount@ valid 'DebugUtilsLabelEXT'
---     structures
---
--- -   If @cmdBufLabelCount@ is not @0@, @pCmdBufLabels@ /must/ be a valid
---     pointer to an array of @cmdBufLabelCount@ valid 'DebugUtilsLabelEXT'
---     structures
---
--- -   If @objectCount@ is not @0@, @pObjects@ /must/ be a valid pointer to
---     an array of @objectCount@ valid 'DebugUtilsObjectNameInfoEXT'
---     structures
---
--- = See Also
---
--- 'DebugUtilsLabelEXT', 'DebugUtilsMessengerCallbackDataFlagsEXT',
--- 'DebugUtilsObjectNameInfoEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'submitDebugUtilsMessageEXT'
-data DebugUtilsMessengerCallbackDataEXT = DebugUtilsMessengerCallbackDataEXT
-  { -- | @flags@ is @0@ and is reserved for future use.
-    flags :: DebugUtilsMessengerCallbackDataFlagsEXT
-  , -- | @pMessageIdName@ is a null-terminated string that identifies the
-    -- particular message ID that is associated with the provided message. If
-    -- the message corresponds to a validation layer message, then this string
-    -- may contain the portion of the Vulkan specification that is believed to
-    -- have been violated.
-    messageIdName :: Maybe ByteString
-  , -- | @messageIdNumber@ is the ID number of the triggering message. If the
-    -- message corresponds to a validation layer message, then this number is
-    -- related to the internal number associated with the message being
-    -- triggered.
-    messageIdNumber :: Int32
-  , -- | @pMessage@ is a null-terminated string detailing the trigger conditions.
-    message :: ByteString
-  , -- | @pQueueLabels@ is @NULL@ or a pointer to an array of
-    -- 'DebugUtilsLabelEXT' active in the current
-    -- 'Graphics.Vulkan.Core10.Handles.Queue' at the time the callback was
-    -- triggered. Refer to
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-queue-labels Queue Labels>
-    -- for more information.
-    queueLabels :: Vector DebugUtilsLabelEXT
-  , -- | @pCmdBufLabels@ is @NULL@ or a pointer to an array of
-    -- 'DebugUtilsLabelEXT' active in the current
-    -- 'Graphics.Vulkan.Core10.Handles.CommandBuffer' at the time the callback
-    -- was triggered. Refer to
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-command-buffer-labels Command Buffer Labels>
-    -- for more information.
-    cmdBufLabels :: Vector DebugUtilsLabelEXT
-  , -- | @pObjects@ is a pointer to an array of 'DebugUtilsObjectNameInfoEXT'
-    -- objects related to the detected issue. The array is roughly in order or
-    -- importance, but the 0th element is always guaranteed to be the most
-    -- important object for this message.
-    objects :: Vector DebugUtilsObjectNameInfoEXT
-  }
-  deriving (Typeable)
-deriving instance Show DebugUtilsMessengerCallbackDataEXT
-
-instance ToCStruct DebugUtilsMessengerCallbackDataEXT where
-  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DebugUtilsMessengerCallbackDataEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT)) (flags)
-    pMessageIdName'' <- case (messageIdName) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ useAsCString (j)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr CChar))) pMessageIdName''
-    lift $ poke ((p `plusPtr` 32 :: Ptr Int32)) (messageIdNumber)
-    pMessage'' <- ContT $ useAsCString (message)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr CChar))) pMessage''
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueLabels)) :: Word32))
-    pPQueueLabels' <- ContT $ allocaBytesAligned @DebugUtilsLabelEXT ((Data.Vector.length (queueLabels)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPQueueLabels' `plusPtr` (40 * (i)) :: Ptr DebugUtilsLabelEXT) (e) . ($ ())) (queueLabels)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DebugUtilsLabelEXT))) (pPQueueLabels')
-    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (cmdBufLabels)) :: Word32))
-    pPCmdBufLabels' <- ContT $ allocaBytesAligned @DebugUtilsLabelEXT ((Data.Vector.length (cmdBufLabels)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCmdBufLabels' `plusPtr` (40 * (i)) :: Ptr DebugUtilsLabelEXT) (e) . ($ ())) (cmdBufLabels)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr DebugUtilsLabelEXT))) (pPCmdBufLabels')
-    lift $ poke ((p `plusPtr` 80 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (objects)) :: Word32))
-    pPObjects' <- ContT $ allocaBytesAligned @DebugUtilsObjectNameInfoEXT ((Data.Vector.length (objects)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPObjects' `plusPtr` (40 * (i)) :: Ptr DebugUtilsObjectNameInfoEXT) (e) . ($ ())) (objects)
-    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr DebugUtilsObjectNameInfoEXT))) (pPObjects')
-    lift $ f
-  cStructSize = 96
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pMessage'' <- ContT $ useAsCString (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr CChar))) pMessage''
-    pPQueueLabels' <- ContT $ allocaBytesAligned @DebugUtilsLabelEXT ((Data.Vector.length (mempty)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPQueueLabels' `plusPtr` (40 * (i)) :: Ptr DebugUtilsLabelEXT) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DebugUtilsLabelEXT))) (pPQueueLabels')
-    pPCmdBufLabels' <- ContT $ allocaBytesAligned @DebugUtilsLabelEXT ((Data.Vector.length (mempty)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCmdBufLabels' `plusPtr` (40 * (i)) :: Ptr DebugUtilsLabelEXT) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr DebugUtilsLabelEXT))) (pPCmdBufLabels')
-    pPObjects' <- ContT $ allocaBytesAligned @DebugUtilsObjectNameInfoEXT ((Data.Vector.length (mempty)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPObjects' `plusPtr` (40 * (i)) :: Ptr DebugUtilsObjectNameInfoEXT) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr DebugUtilsObjectNameInfoEXT))) (pPObjects')
-    lift $ f
-
-instance FromCStruct DebugUtilsMessengerCallbackDataEXT where
-  peekCStruct p = do
-    flags <- peek @DebugUtilsMessengerCallbackDataFlagsEXT ((p `plusPtr` 16 :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT))
-    pMessageIdName <- peek @(Ptr CChar) ((p `plusPtr` 24 :: Ptr (Ptr CChar)))
-    pMessageIdName' <- maybePeek (\j -> packCString  (j)) pMessageIdName
-    messageIdNumber <- peek @Int32 ((p `plusPtr` 32 :: Ptr Int32))
-    pMessage <- packCString =<< peek ((p `plusPtr` 40 :: Ptr (Ptr CChar)))
-    queueLabelCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pQueueLabels <- peek @(Ptr DebugUtilsLabelEXT) ((p `plusPtr` 56 :: Ptr (Ptr DebugUtilsLabelEXT)))
-    pQueueLabels' <- generateM (fromIntegral queueLabelCount) (\i -> peekCStruct @DebugUtilsLabelEXT ((pQueueLabels `advancePtrBytes` (40 * (i)) :: Ptr DebugUtilsLabelEXT)))
-    cmdBufLabelCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    pCmdBufLabels <- peek @(Ptr DebugUtilsLabelEXT) ((p `plusPtr` 72 :: Ptr (Ptr DebugUtilsLabelEXT)))
-    pCmdBufLabels' <- generateM (fromIntegral cmdBufLabelCount) (\i -> peekCStruct @DebugUtilsLabelEXT ((pCmdBufLabels `advancePtrBytes` (40 * (i)) :: Ptr DebugUtilsLabelEXT)))
-    objectCount <- peek @Word32 ((p `plusPtr` 80 :: Ptr Word32))
-    pObjects <- peek @(Ptr DebugUtilsObjectNameInfoEXT) ((p `plusPtr` 88 :: Ptr (Ptr DebugUtilsObjectNameInfoEXT)))
-    pObjects' <- generateM (fromIntegral objectCount) (\i -> peekCStruct @DebugUtilsObjectNameInfoEXT ((pObjects `advancePtrBytes` (40 * (i)) :: Ptr DebugUtilsObjectNameInfoEXT)))
-    pure $ DebugUtilsMessengerCallbackDataEXT
-             flags pMessageIdName' messageIdNumber pMessage pQueueLabels' pCmdBufLabels' pObjects'
-
-instance Zero DebugUtilsMessengerCallbackDataEXT where
-  zero = DebugUtilsMessengerCallbackDataEXT
-           zero
-           Nothing
-           zero
-           mempty
-           mempty
-           mempty
-           mempty
-
-
--- No documentation found for TopLevel "VkDebugUtilsMessengerCreateFlagsEXT"
-newtype DebugUtilsMessengerCreateFlagsEXT = DebugUtilsMessengerCreateFlagsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show DebugUtilsMessengerCreateFlagsEXT where
-  showsPrec p = \case
-    DebugUtilsMessengerCreateFlagsEXT x -> showParen (p >= 11) (showString "DebugUtilsMessengerCreateFlagsEXT 0x" . showHex x)
-
-instance Read DebugUtilsMessengerCreateFlagsEXT where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DebugUtilsMessengerCreateFlagsEXT")
-                       v <- step readPrec
-                       pure (DebugUtilsMessengerCreateFlagsEXT v)))
-
-
--- No documentation found for TopLevel "VkDebugUtilsMessengerCallbackDataFlagsEXT"
-newtype DebugUtilsMessengerCallbackDataFlagsEXT = DebugUtilsMessengerCallbackDataFlagsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show DebugUtilsMessengerCallbackDataFlagsEXT where
-  showsPrec p = \case
-    DebugUtilsMessengerCallbackDataFlagsEXT x -> showParen (p >= 11) (showString "DebugUtilsMessengerCallbackDataFlagsEXT 0x" . showHex x)
-
-instance Read DebugUtilsMessengerCallbackDataFlagsEXT where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DebugUtilsMessengerCallbackDataFlagsEXT")
-                       v <- step readPrec
-                       pure (DebugUtilsMessengerCallbackDataFlagsEXT v)))
-
-
--- | VkDebugUtilsMessageSeverityFlagBitsEXT - Bitmask specifying which
--- severities of events cause a debug messenger callback
---
--- = See Also
---
--- 'DebugUtilsMessageSeverityFlagsEXT', 'submitDebugUtilsMessageEXT'
-newtype DebugUtilsMessageSeverityFlagBitsEXT = DebugUtilsMessageSeverityFlagBitsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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 DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = DebugUtilsMessageSeverityFlagBitsEXT 0x00000001
--- | 'DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT' specifies an informational
--- message such as resource details that may be handy when debugging an
--- application.
-pattern DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = DebugUtilsMessageSeverityFlagBitsEXT 0x00000010
--- | '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 DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = DebugUtilsMessageSeverityFlagBitsEXT 0x00000100
--- | 'DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT' specifies that the
--- application has violated a valid usage condition of the specification.
-pattern DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = DebugUtilsMessageSeverityFlagBitsEXT 0x00001000
-
-type DebugUtilsMessageSeverityFlagsEXT = DebugUtilsMessageSeverityFlagBitsEXT
-
-instance Show DebugUtilsMessageSeverityFlagBitsEXT where
-  showsPrec p = \case
-    DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT"
-    DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT"
-    DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT"
-    DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT"
-    DebugUtilsMessageSeverityFlagBitsEXT x -> showParen (p >= 11) (showString "DebugUtilsMessageSeverityFlagBitsEXT 0x" . showHex x)
-
-instance Read DebugUtilsMessageSeverityFlagBitsEXT where
-  readPrec = parens (choose [("DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT", pure DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT)
-                            , ("DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT", pure DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT)
-                            , ("DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT", pure DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT)
-                            , ("DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT", pure DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DebugUtilsMessageSeverityFlagBitsEXT")
-                       v <- step readPrec
-                       pure (DebugUtilsMessageSeverityFlagBitsEXT v)))
-
-
--- | VkDebugUtilsMessageTypeFlagBitsEXT - Bitmask specifying which types of
--- events cause a debug messenger callback
---
--- = See Also
---
--- 'DebugUtilsMessageTypeFlagsEXT'
-newtype DebugUtilsMessageTypeFlagBitsEXT = DebugUtilsMessageTypeFlagBitsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT' specifies that some general
--- event has occurred. This is typically a non-specification,
--- non-performance event.
-pattern DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = DebugUtilsMessageTypeFlagBitsEXT 0x00000001
--- | 'DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT' specifies that something
--- has occurred during validation against the Vulkan specification that may
--- indicate invalid behavior.
-pattern DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = DebugUtilsMessageTypeFlagBitsEXT 0x00000002
--- | 'DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT' specifies a potentially
--- non-optimal use of Vulkan, e.g. using
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage' when
--- setting 'Graphics.Vulkan.Core10.Pass.AttachmentDescription'::@loadOp@ to
--- 'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'
--- would have worked.
-pattern DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = DebugUtilsMessageTypeFlagBitsEXT 0x00000004
-
-type DebugUtilsMessageTypeFlagsEXT = DebugUtilsMessageTypeFlagBitsEXT
-
-instance Show DebugUtilsMessageTypeFlagBitsEXT where
-  showsPrec p = \case
-    DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT"
-    DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT"
-    DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT"
-    DebugUtilsMessageTypeFlagBitsEXT x -> showParen (p >= 11) (showString "DebugUtilsMessageTypeFlagBitsEXT 0x" . showHex x)
-
-instance Read DebugUtilsMessageTypeFlagBitsEXT where
-  readPrec = parens (choose [("DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT", pure DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT)
-                            , ("DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT", pure DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT)
-                            , ("DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT", pure DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DebugUtilsMessageTypeFlagBitsEXT")
-                       v <- step readPrec
-                       pure (DebugUtilsMessageTypeFlagBitsEXT v)))
-
-
-type FN_vkDebugUtilsMessengerCallbackEXT = DebugUtilsMessageSeverityFlagBitsEXT -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT) -> ("pUserData" ::: Ptr ()) -> IO Bool32
--- | PFN_vkDebugUtilsMessengerCallbackEXT - Application-defined debug
--- messenger callback function
---
--- = Parameters
---
--- -   @messageSeverity@ specifies the
---     'DebugUtilsMessageSeverityFlagBitsEXT' that triggered this callback.
---
--- -   @messageTypes@ is a bitmask of 'DebugUtilsMessageTypeFlagBitsEXT'
---     specifying which type of event(s) triggered this callback.
---
--- -   @pCallbackData@ contains all the callback related data in the
---     'DebugUtilsMessengerCallbackDataEXT' structure.
---
--- -   @pUserData@ is the user data provided when the
---     'Graphics.Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' was
---     created.
---
--- = Description
---
--- The callback /must/ not call 'destroyDebugUtilsMessengerEXT'.
---
--- The callback returns a 'Graphics.Vulkan.Core10.BaseType.Bool32', which
--- is interpreted in a layer-specified manner. The application /should/
--- always return 'Graphics.Vulkan.Core10.BaseType.FALSE'. The
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' value is reserved for use in
--- layer development.
---
--- = See Also
---
--- 'DebugUtilsMessengerCreateInfoEXT'
-type PFN_vkDebugUtilsMessengerCallbackEXT = FunPtr FN_vkDebugUtilsMessengerCallbackEXT
-
-
-type EXT_DEBUG_UTILS_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_DEBUG_UTILS_SPEC_VERSION"
-pattern EXT_DEBUG_UTILS_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DEBUG_UTILS_SPEC_VERSION = 2
-
-
-type EXT_DEBUG_UTILS_EXTENSION_NAME = "VK_EXT_debug_utils"
-
--- No documentation found for TopLevel "VK_EXT_DEBUG_UTILS_EXTENSION_NAME"
-pattern EXT_DEBUG_UTILS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_DEBUG_UTILS_EXTENSION_NAME = "VK_EXT_debug_utils"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot
+++ /dev/null
@@ -1,64 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_debug_utils  ( DebugUtilsLabelEXT
-                                                      , DebugUtilsMessengerCallbackDataEXT
-                                                      , DebugUtilsMessengerCreateInfoEXT
-                                                      , DebugUtilsObjectNameInfoEXT
-                                                      , DebugUtilsObjectTagInfoEXT
-                                                      , DebugUtilsMessageSeverityFlagBitsEXT
-                                                      , DebugUtilsMessageSeverityFlagsEXT
-                                                      , DebugUtilsMessageTypeFlagBitsEXT
-                                                      , DebugUtilsMessageTypeFlagsEXT
-                                                      ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DebugUtilsLabelEXT
-
-instance ToCStruct DebugUtilsLabelEXT
-instance Show DebugUtilsLabelEXT
-
-instance FromCStruct DebugUtilsLabelEXT
-
-
-data DebugUtilsMessengerCallbackDataEXT
-
-instance ToCStruct DebugUtilsMessengerCallbackDataEXT
-instance Show DebugUtilsMessengerCallbackDataEXT
-
-instance FromCStruct DebugUtilsMessengerCallbackDataEXT
-
-
-data DebugUtilsMessengerCreateInfoEXT
-
-instance ToCStruct DebugUtilsMessengerCreateInfoEXT
-instance Show DebugUtilsMessengerCreateInfoEXT
-
-instance FromCStruct DebugUtilsMessengerCreateInfoEXT
-
-
-data DebugUtilsObjectNameInfoEXT
-
-instance ToCStruct DebugUtilsObjectNameInfoEXT
-instance Show DebugUtilsObjectNameInfoEXT
-
-instance FromCStruct DebugUtilsObjectNameInfoEXT
-
-
-data DebugUtilsObjectTagInfoEXT
-
-instance ToCStruct DebugUtilsObjectTagInfoEXT
-instance Show DebugUtilsObjectTagInfoEXT
-
-instance FromCStruct DebugUtilsObjectTagInfoEXT
-
-
-data DebugUtilsMessageSeverityFlagBitsEXT
-
-type DebugUtilsMessageSeverityFlagsEXT = DebugUtilsMessageSeverityFlagBitsEXT
-
-
-data DebugUtilsMessageTypeFlagBitsEXT
-
-type DebugUtilsMessageTypeFlagsEXT = DebugUtilsMessageTypeFlagBitsEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs
+++ /dev/null
@@ -1,211 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable  ( PhysicalDeviceDepthClipEnableFeaturesEXT(..)
-                                                            , PipelineRasterizationDepthClipStateCreateInfoEXT(..)
-                                                            , PipelineRasterizationDepthClipStateCreateFlagsEXT(..)
-                                                            , EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION
-                                                            , pattern EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION
-                                                            , EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME
-                                                            , pattern EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME
-                                                            ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT))
--- | VkPhysicalDeviceDepthClipEnableFeaturesEXT - Structure indicating
--- support for explicit enable of depth clip
---
--- = Members
---
--- The members of the 'PhysicalDeviceDepthClipEnableFeaturesEXT' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceDepthClipEnableFeaturesEXT' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceDepthClipEnableFeaturesEXT' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable this feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceDepthClipEnableFeaturesEXT = PhysicalDeviceDepthClipEnableFeaturesEXT
-  { -- | @depthClipEnable@ indicates that the implementation supports setting the
-    -- depth clipping operation explicitly via the
-    -- 'PipelineRasterizationDepthClipStateCreateInfoEXT' pipeline state.
-    -- Otherwise depth clipping is only enabled when
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@depthClampEnable@
-    -- is set to 'Graphics.Vulkan.Core10.BaseType.FALSE'.
-    depthClipEnable :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceDepthClipEnableFeaturesEXT
-
-instance ToCStruct PhysicalDeviceDepthClipEnableFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceDepthClipEnableFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (depthClipEnable))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceDepthClipEnableFeaturesEXT where
-  peekCStruct p = do
-    depthClipEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceDepthClipEnableFeaturesEXT
-             (bool32ToBool depthClipEnable)
-
-instance Storable PhysicalDeviceDepthClipEnableFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceDepthClipEnableFeaturesEXT where
-  zero = PhysicalDeviceDepthClipEnableFeaturesEXT
-           zero
-
-
--- | VkPipelineRasterizationDepthClipStateCreateInfoEXT - Structure
--- specifying depth clipping state
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'PipelineRasterizationDepthClipStateCreateFlagsEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineRasterizationDepthClipStateCreateInfoEXT = PipelineRasterizationDepthClipStateCreateInfoEXT
-  { -- | @flags@ /must/ be @0@
-    flags :: PipelineRasterizationDepthClipStateCreateFlagsEXT
-  , -- | @depthClipEnable@ controls whether depth clipping is enabled as
-    -- described in
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>.
-    depthClipEnable :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PipelineRasterizationDepthClipStateCreateInfoEXT
-
-instance ToCStruct PipelineRasterizationDepthClipStateCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineRasterizationDepthClipStateCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationDepthClipStateCreateFlagsEXT)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthClipEnable))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PipelineRasterizationDepthClipStateCreateInfoEXT where
-  peekCStruct p = do
-    flags <- peek @PipelineRasterizationDepthClipStateCreateFlagsEXT ((p `plusPtr` 16 :: Ptr PipelineRasterizationDepthClipStateCreateFlagsEXT))
-    depthClipEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PipelineRasterizationDepthClipStateCreateInfoEXT
-             flags (bool32ToBool depthClipEnable)
-
-instance Storable PipelineRasterizationDepthClipStateCreateInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineRasterizationDepthClipStateCreateInfoEXT where
-  zero = PipelineRasterizationDepthClipStateCreateInfoEXT
-           zero
-           zero
-
-
--- | VkPipelineRasterizationDepthClipStateCreateFlagsEXT - Reserved for
--- future use
---
--- = Description
---
--- 'PipelineRasterizationDepthClipStateCreateFlagsEXT' is a bitmask type
--- for setting a mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'PipelineRasterizationDepthClipStateCreateInfoEXT'
-newtype PipelineRasterizationDepthClipStateCreateFlagsEXT = PipelineRasterizationDepthClipStateCreateFlagsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineRasterizationDepthClipStateCreateFlagsEXT where
-  showsPrec p = \case
-    PipelineRasterizationDepthClipStateCreateFlagsEXT x -> showParen (p >= 11) (showString "PipelineRasterizationDepthClipStateCreateFlagsEXT 0x" . showHex x)
-
-instance Read PipelineRasterizationDepthClipStateCreateFlagsEXT where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineRasterizationDepthClipStateCreateFlagsEXT")
-                       v <- step readPrec
-                       pure (PipelineRasterizationDepthClipStateCreateFlagsEXT v)))
-
-
-type EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION"
-pattern EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION = 1
-
-
-type EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME = "VK_EXT_depth_clip_enable"
-
--- No documentation found for TopLevel "VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME"
-pattern EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME = "VK_EXT_depth_clip_enable"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable  ( PhysicalDeviceDepthClipEnableFeaturesEXT
-                                                            , PipelineRasterizationDepthClipStateCreateInfoEXT
-                                                            ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceDepthClipEnableFeaturesEXT
-
-instance ToCStruct PhysicalDeviceDepthClipEnableFeaturesEXT
-instance Show PhysicalDeviceDepthClipEnableFeaturesEXT
-
-instance FromCStruct PhysicalDeviceDepthClipEnableFeaturesEXT
-
-
-data PipelineRasterizationDepthClipStateCreateInfoEXT
-
-instance ToCStruct PipelineRasterizationDepthClipStateCreateInfoEXT
-instance Show PipelineRasterizationDepthClipStateCreateInfoEXT
-
-instance FromCStruct PipelineRasterizationDepthClipStateCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_depth_range_unrestricted.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_depth_range_unrestricted.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_depth_range_unrestricted.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_depth_range_unrestricted  ( EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION
-                                                                   , pattern EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION
-                                                                   , EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME
-                                                                   , pattern EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME
-                                                                   ) where
-
-import Data.String (IsString)
-
-type EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION"
-pattern EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION = 1
-
-
-type EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME = "VK_EXT_depth_range_unrestricted"
-
--- No documentation found for TopLevel "VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME"
-pattern EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs
+++ /dev/null
@@ -1,141 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing  ( pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT
-                                                              , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT
-                                                              , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT
-                                                              , pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT
-                                                              , pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT
-                                                              , pattern DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
-                                                              , pattern DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT
-                                                              , pattern DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT
-                                                              , pattern DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT
-                                                              , pattern DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT
-                                                              , pattern DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
-                                                              , pattern ERROR_FRAGMENTATION_EXT
-                                                              , DescriptorBindingFlagsEXT
-                                                              , DescriptorBindingFlagBitsEXT
-                                                              , PhysicalDeviceDescriptorIndexingFeaturesEXT
-                                                              , PhysicalDeviceDescriptorIndexingPropertiesEXT
-                                                              , DescriptorSetLayoutBindingFlagsCreateInfoEXT
-                                                              , DescriptorSetVariableDescriptorCountAllocateInfoEXT
-                                                              , DescriptorSetVariableDescriptorCountLayoutSupportEXT
-                                                              , EXT_DESCRIPTOR_INDEXING_SPEC_VERSION
-                                                              , pattern EXT_DESCRIPTOR_INDEXING_SPEC_VERSION
-                                                              , EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME
-                                                              , pattern EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME
-                                                              ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits)
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetLayoutBindingFlagsCreateInfo)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountAllocateInfo)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountLayoutSupport)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingProperties)
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits(DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT))
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits(DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT))
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits(DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT))
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
-import Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits(DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT))
-import Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits (DescriptorPoolCreateFlags)
-import Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits (DescriptorPoolCreateFlagBits(DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT))
-import Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits (DescriptorSetLayoutCreateFlags)
-import Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits (DescriptorSetLayoutCreateFlagBits(DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(ERROR_FRAGMENTATION))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT"
-pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT"
-pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT
-
-
--- No documentation found for TopLevel "VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT"
-pattern DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
-
-
--- No documentation found for TopLevel "VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT"
-pattern DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT
-
-
--- No documentation found for TopLevel "VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT"
-pattern DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT
-
-
--- No documentation found for TopLevel "VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT"
-pattern DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
-
-
--- No documentation found for TopLevel "VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT"
-pattern DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT
-
-
--- No documentation found for TopLevel "VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT"
-pattern DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
-
-
--- No documentation found for TopLevel "VK_ERROR_FRAGMENTATION_EXT"
-pattern ERROR_FRAGMENTATION_EXT = ERROR_FRAGMENTATION
-
-
--- No documentation found for TopLevel "VkDescriptorBindingFlagsEXT"
-type DescriptorBindingFlagsEXT = DescriptorBindingFlags
-
-
--- No documentation found for TopLevel "VkDescriptorBindingFlagBitsEXT"
-type DescriptorBindingFlagBitsEXT = DescriptorBindingFlagBits
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceDescriptorIndexingFeaturesEXT"
-type PhysicalDeviceDescriptorIndexingFeaturesEXT = PhysicalDeviceDescriptorIndexingFeatures
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceDescriptorIndexingPropertiesEXT"
-type PhysicalDeviceDescriptorIndexingPropertiesEXT = PhysicalDeviceDescriptorIndexingProperties
-
-
--- No documentation found for TopLevel "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT"
-type DescriptorSetLayoutBindingFlagsCreateInfoEXT = DescriptorSetLayoutBindingFlagsCreateInfo
-
-
--- No documentation found for TopLevel "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT"
-type DescriptorSetVariableDescriptorCountAllocateInfoEXT = DescriptorSetVariableDescriptorCountAllocateInfo
-
-
--- No documentation found for TopLevel "VkDescriptorSetVariableDescriptorCountLayoutSupportEXT"
-type DescriptorSetVariableDescriptorCountLayoutSupportEXT = DescriptorSetVariableDescriptorCountLayoutSupport
-
-
-type EXT_DESCRIPTOR_INDEXING_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION"
-pattern EXT_DESCRIPTOR_INDEXING_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DESCRIPTOR_INDEXING_SPEC_VERSION = 2
-
-
-type EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME = "VK_EXT_descriptor_indexing"
-
--- No documentation found for TopLevel "VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME"
-pattern EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME = "VK_EXT_descriptor_indexing"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_direct_mode_display.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_direct_mode_display.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_direct_mode_display.hs
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display  ( releaseDisplayEXT
-                                                              , EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION
-                                                              , pattern EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION
-                                                              , EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME
-                                                              , pattern EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME
-                                                              , DisplayKHR(..)
-                                                              ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR)
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkReleaseDisplayEXT))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkReleaseDisplayEXT
-  :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> DisplayKHR -> IO Result
-
--- | vkReleaseDisplayEXT - Release access to an acquired VkDisplayKHR
---
--- = Parameters
---
--- -   @physicalDevice@ The physical device the display is on.
---
--- -   @display@ The display to release control of.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-releaseDisplayEXT :: forall io . MonadIO io => PhysicalDevice -> DisplayKHR -> io ()
-releaseDisplayEXT physicalDevice display = liftIO $ do
-  let vkReleaseDisplayEXT' = mkVkReleaseDisplayEXT (pVkReleaseDisplayEXT (instanceCmds (physicalDevice :: PhysicalDevice)))
-  _ <- vkReleaseDisplayEXT' (physicalDeviceHandle (physicalDevice)) (display)
-  pure $ ()
-
-
-type EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION"
-pattern EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION = 1
-
-
-type EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME = "VK_EXT_direct_mode_display"
-
--- No documentation found for TopLevel "VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME"
-pattern EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME = "VK_EXT_direct_mode_display"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs
+++ /dev/null
@@ -1,369 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles  ( cmdSetDiscardRectangleEXT
-                                                             , PhysicalDeviceDiscardRectanglePropertiesEXT(..)
-                                                             , PipelineDiscardRectangleStateCreateInfoEXT(..)
-                                                             , PipelineDiscardRectangleStateCreateFlagsEXT(..)
-                                                             , DiscardRectangleModeEXT( DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT
-                                                                                      , DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT
-                                                                                      , ..
-                                                                                      )
-                                                             , EXT_DISCARD_RECTANGLES_SPEC_VERSION
-                                                             , pattern EXT_DISCARD_RECTANGLES_SPEC_VERSION
-                                                             , EXT_DISCARD_RECTANGLES_EXTENSION_NAME
-                                                             , pattern EXT_DISCARD_RECTANGLES_EXTENSION_NAME
-                                                             ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Utils (maybePeek)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.Either (Either)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetDiscardRectangleEXT))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.CommandBufferBuilding (Rect2D)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetDiscardRectangleEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()
-
--- | vkCmdSetDiscardRectangleEXT - Set discard rectangles dynamically
---
--- = 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.CommandBufferBuilding.Rect2D' structures
---     specifying discard rectangles.
---
--- = 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 sum of @firstDiscardRectangle@ and @discardRectangleCount@
---     /must/ be less than or equal to
---     'PhysicalDeviceDiscardRectanglePropertiesEXT'::@maxDiscardRectangles@
---
--- -   The @x@ and @y@ member of @offset@ in each
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' element of
---     @pDiscardRectangles@ /must/ be greater than or equal to @0@
---
--- -   Evaluation of (@offset.x@ + @extent.width@) in each
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' element of
---     @pDiscardRectangles@ /must/ not cause a signed integer addition
---     overflow
---
--- -   Evaluation of (@offset.y@ + @extent.height@) in each
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' element of
---     @pDiscardRectangles@ /must/ not cause a signed integer addition
---     overflow
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pDiscardRectangles@ /must/ be a valid pointer to an array of
---     @discardRectangleCount@
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' 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 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D'
-cmdSetDiscardRectangleEXT :: forall io . MonadIO io => CommandBuffer -> ("firstDiscardRectangle" ::: Word32) -> ("discardRectangles" ::: Vector Rect2D) -> io ()
-cmdSetDiscardRectangleEXT commandBuffer firstDiscardRectangle discardRectangles = liftIO . evalContT $ do
-  let vkCmdSetDiscardRectangleEXT' = mkVkCmdSetDiscardRectangleEXT (pVkCmdSetDiscardRectangleEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPDiscardRectangles <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (discardRectangles)) * 16) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDiscardRectangles `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (discardRectangles)
-  lift $ vkCmdSetDiscardRectangleEXT' (commandBufferHandle (commandBuffer)) (firstDiscardRectangle) ((fromIntegral (Data.Vector.length $ (discardRectangles)) :: Word32)) (pPDiscardRectangles)
-  pure $ ()
-
-
--- | VkPhysicalDeviceDiscardRectanglePropertiesEXT - Structure describing
--- discard rectangle limits that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceDiscardRectanglePropertiesEXT'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceDiscardRectanglePropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceDiscardRectanglePropertiesEXT = PhysicalDeviceDiscardRectanglePropertiesEXT
-  { -- | @maxDiscardRectangles@ is the maximum number of active discard
-    -- rectangles that /can/ be specified.
-    maxDiscardRectangles :: Word32 }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceDiscardRectanglePropertiesEXT
-
-instance ToCStruct PhysicalDeviceDiscardRectanglePropertiesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceDiscardRectanglePropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxDiscardRectangles)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceDiscardRectanglePropertiesEXT where
-  peekCStruct p = do
-    maxDiscardRectangles <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ PhysicalDeviceDiscardRectanglePropertiesEXT
-             maxDiscardRectangles
-
-instance Storable PhysicalDeviceDiscardRectanglePropertiesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceDiscardRectanglePropertiesEXT where
-  zero = PhysicalDeviceDiscardRectanglePropertiesEXT
-           zero
-
-
--- | VkPipelineDiscardRectangleStateCreateInfoEXT - Structure specifying
--- discard rectangle
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'DiscardRectangleModeEXT',
--- 'PipelineDiscardRectangleStateCreateFlagsEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineDiscardRectangleStateCreateInfoEXT = PipelineDiscardRectangleStateCreateInfoEXT
-  { -- | @flags@ /must/ be @0@
-    flags :: PipelineDiscardRectangleStateCreateFlagsEXT
-  , -- | @discardRectangleMode@ /must/ be a valid 'DiscardRectangleModeEXT' value
-    discardRectangleMode :: DiscardRectangleModeEXT
-  , -- | @pDiscardRectangles@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures,
-    -- defining the discard rectangles. If the discard rectangle state is
-    -- dynamic, this member is ignored.
-    discardRectangles :: Either Word32 (Vector Rect2D)
-  }
-  deriving (Typeable)
-deriving instance Show PipelineDiscardRectangleStateCreateInfoEXT
-
-instance ToCStruct PipelineDiscardRectangleStateCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineDiscardRectangleStateCreateInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDiscardRectangleStateCreateFlagsEXT)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr DiscardRectangleModeEXT)) (discardRectangleMode)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (discardRectangles)) :: Word32))
-    pDiscardRectangles'' <- case (discardRectangles) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPDiscardRectangles' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (v)) * 16) 4
-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDiscardRectangles' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (v)
-        pure $ pPDiscardRectangles'
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Rect2D))) pDiscardRectangles''
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr DiscardRectangleModeEXT)) (zero)
-    f
-
-instance FromCStruct PipelineDiscardRectangleStateCreateInfoEXT where
-  peekCStruct p = do
-    flags <- peek @PipelineDiscardRectangleStateCreateFlagsEXT ((p `plusPtr` 16 :: Ptr PipelineDiscardRectangleStateCreateFlagsEXT))
-    discardRectangleMode <- peek @DiscardRectangleModeEXT ((p `plusPtr` 20 :: Ptr DiscardRectangleModeEXT))
-    discardRectangleCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pDiscardRectangles <- peek @(Ptr Rect2D) ((p `plusPtr` 32 :: Ptr (Ptr Rect2D)))
-    pDiscardRectangles' <- maybePeek (\j -> generateM (fromIntegral discardRectangleCount) (\i -> peekCStruct @Rect2D (((j) `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))) pDiscardRectangles
-    let pDiscardRectangles'' = maybe (Left discardRectangleCount) Right pDiscardRectangles'
-    pure $ PipelineDiscardRectangleStateCreateInfoEXT
-             flags discardRectangleMode pDiscardRectangles''
-
-instance Zero PipelineDiscardRectangleStateCreateInfoEXT where
-  zero = PipelineDiscardRectangleStateCreateInfoEXT
-           zero
-           zero
-           (Left 0)
-
-
--- | VkPipelineDiscardRectangleStateCreateFlagsEXT - Reserved for future use
---
--- = Description
---
--- 'PipelineDiscardRectangleStateCreateFlagsEXT' is a bitmask type for
--- setting a mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'PipelineDiscardRectangleStateCreateInfoEXT'
-newtype PipelineDiscardRectangleStateCreateFlagsEXT = PipelineDiscardRectangleStateCreateFlagsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineDiscardRectangleStateCreateFlagsEXT where
-  showsPrec p = \case
-    PipelineDiscardRectangleStateCreateFlagsEXT x -> showParen (p >= 11) (showString "PipelineDiscardRectangleStateCreateFlagsEXT 0x" . showHex x)
-
-instance Read PipelineDiscardRectangleStateCreateFlagsEXT where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineDiscardRectangleStateCreateFlagsEXT")
-                       v <- step readPrec
-                       pure (PipelineDiscardRectangleStateCreateFlagsEXT v)))
-
-
--- | VkDiscardRectangleModeEXT - Specify the discard rectangle mode
---
--- = See Also
---
--- 'PipelineDiscardRectangleStateCreateInfoEXT'
-newtype DiscardRectangleModeEXT = DiscardRectangleModeEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT' specifies that a fragment within
--- any discard rectangle satisfies the test.
-pattern DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = DiscardRectangleModeEXT 0
--- | 'DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT' specifies that a fragment not
--- within any of the discard rectangles satisfies the test.
-pattern DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = DiscardRectangleModeEXT 1
-{-# complete DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT,
-             DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT :: DiscardRectangleModeEXT #-}
-
-instance Show DiscardRectangleModeEXT where
-  showsPrec p = \case
-    DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT -> showString "DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT"
-    DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT -> showString "DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT"
-    DiscardRectangleModeEXT x -> showParen (p >= 11) (showString "DiscardRectangleModeEXT " . showsPrec 11 x)
-
-instance Read DiscardRectangleModeEXT where
-  readPrec = parens (choose [("DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT", pure DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT)
-                            , ("DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT", pure DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DiscardRectangleModeEXT")
-                       v <- step readPrec
-                       pure (DiscardRectangleModeEXT v)))
-
-
-type EXT_DISCARD_RECTANGLES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION"
-pattern EXT_DISCARD_RECTANGLES_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DISCARD_RECTANGLES_SPEC_VERSION = 1
-
-
-type EXT_DISCARD_RECTANGLES_EXTENSION_NAME = "VK_EXT_discard_rectangles"
-
--- No documentation found for TopLevel "VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME"
-pattern EXT_DISCARD_RECTANGLES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_DISCARD_RECTANGLES_EXTENSION_NAME = "VK_EXT_discard_rectangles"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles  ( PhysicalDeviceDiscardRectanglePropertiesEXT
-                                                             , PipelineDiscardRectangleStateCreateInfoEXT
-                                                             ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceDiscardRectanglePropertiesEXT
-
-instance ToCStruct PhysicalDeviceDiscardRectanglePropertiesEXT
-instance Show PhysicalDeviceDiscardRectanglePropertiesEXT
-
-instance FromCStruct PhysicalDeviceDiscardRectanglePropertiesEXT
-
-
-data PipelineDiscardRectangleStateCreateInfoEXT
-
-instance ToCStruct PipelineDiscardRectangleStateCreateInfoEXT
-instance Show PipelineDiscardRectangleStateCreateInfoEXT
-
-instance FromCStruct PipelineDiscardRectangleStateCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs
+++ /dev/null
@@ -1,678 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_display_control  ( displayPowerControlEXT
-                                                          , registerDeviceEventEXT
-                                                          , registerDisplayEventEXT
-                                                          , getSwapchainCounterEXT
-                                                          , DisplayPowerInfoEXT(..)
-                                                          , DeviceEventInfoEXT(..)
-                                                          , DisplayEventInfoEXT(..)
-                                                          , SwapchainCounterCreateInfoEXT(..)
-                                                          , DisplayPowerStateEXT( DISPLAY_POWER_STATE_OFF_EXT
-                                                                                , DISPLAY_POWER_STATE_SUSPEND_EXT
-                                                                                , DISPLAY_POWER_STATE_ON_EXT
-                                                                                , ..
-                                                                                )
-                                                          , DeviceEventTypeEXT( DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT
-                                                                              , ..
-                                                                              )
-                                                          , DisplayEventTypeEXT( DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT
-                                                                               , ..
-                                                                               )
-                                                          , EXT_DISPLAY_CONTROL_SPEC_VERSION
-                                                          , pattern EXT_DISPLAY_CONTROL_SPEC_VERSION
-                                                          , EXT_DISPLAY_CONTROL_EXTENSION_NAME
-                                                          , pattern EXT_DISPLAY_CONTROL_EXTENSION_NAME
-                                                          , DisplayKHR(..)
-                                                          , SwapchainKHR(..)
-                                                          , SurfaceCounterFlagBitsEXT(..)
-                                                          , SurfaceCounterFlagsEXT
-                                                          ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDisplayPowerControlEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetSwapchainCounterEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkRegisterDeviceEventEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkRegisterDisplayEventEXT))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR)
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR(..))
-import Graphics.Vulkan.Core10.Handles (Fence)
-import Graphics.Vulkan.Core10.Handles (Fence(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagBitsEXT)
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagBitsEXT(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagsEXT)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagBitsEXT(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagsEXT)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDisplayPowerControlEXT
-  :: FunPtr (Ptr Device_T -> DisplayKHR -> Ptr DisplayPowerInfoEXT -> IO Result) -> Ptr Device_T -> DisplayKHR -> Ptr DisplayPowerInfoEXT -> IO Result
-
--- | vkDisplayPowerControlEXT - Set the power state of a display
---
--- = Parameters
---
--- -   @device@ is a logical device associated with @display@.
---
--- -   @display@ is the display whose power state is modified.
---
--- -   @pDisplayPowerInfo@ is a 'DisplayPowerInfoEXT' structure specifying
---     the new power state of @display@.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @display@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DisplayKHR' handle
---
--- -   @pDisplayPowerInfo@ /must/ be a valid pointer to a valid
---     'DisplayPowerInfoEXT' structure
---
--- -   Both of @device@, and @display@ /must/ have been created, allocated,
---     or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR', 'DisplayPowerInfoEXT'
-displayPowerControlEXT :: forall io . MonadIO io => Device -> DisplayKHR -> DisplayPowerInfoEXT -> io ()
-displayPowerControlEXT device display displayPowerInfo = liftIO . evalContT $ do
-  let vkDisplayPowerControlEXT' = mkVkDisplayPowerControlEXT (pVkDisplayPowerControlEXT (deviceCmds (device :: Device)))
-  pDisplayPowerInfo <- ContT $ withCStruct (displayPowerInfo)
-  _ <- lift $ vkDisplayPowerControlEXT' (deviceHandle (device)) (display) pDisplayPowerInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkRegisterDeviceEventEXT
-  :: FunPtr (Ptr Device_T -> Ptr DeviceEventInfoEXT -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result) -> Ptr Device_T -> Ptr DeviceEventInfoEXT -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result
-
--- | vkRegisterDeviceEventEXT - Signal a fence when a device event occurs
---
--- = Parameters
---
--- -   @device@ is a logical device on which the event /may/ occur.
---
--- -   @pDeviceEventInfo@ is a pointer to a 'DeviceEventInfoEXT' structure
---     describing the event of interest to the application.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pFence@ is a pointer to a handle in which the resulting fence
---     object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pDeviceEventInfo@ /must/ be a valid pointer to a valid
---     'DeviceEventInfoEXT' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pFence@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Fence' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device', 'DeviceEventInfoEXT',
--- 'Graphics.Vulkan.Core10.Handles.Fence'
-registerDeviceEventEXT :: forall io . MonadIO io => Device -> DeviceEventInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Fence)
-registerDeviceEventEXT device deviceEventInfo allocator = liftIO . evalContT $ do
-  let vkRegisterDeviceEventEXT' = mkVkRegisterDeviceEventEXT (pVkRegisterDeviceEventEXT (deviceCmds (device :: Device)))
-  pDeviceEventInfo <- ContT $ withCStruct (deviceEventInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPFence <- ContT $ bracket (callocBytes @Fence 8) free
-  _ <- lift $ vkRegisterDeviceEventEXT' (deviceHandle (device)) pDeviceEventInfo pAllocator (pPFence)
-  pFence <- lift $ peek @Fence pPFence
-  pure $ (pFence)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkRegisterDisplayEventEXT
-  :: FunPtr (Ptr Device_T -> DisplayKHR -> Ptr DisplayEventInfoEXT -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result) -> Ptr Device_T -> DisplayKHR -> Ptr DisplayEventInfoEXT -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result
-
--- | vkRegisterDisplayEventEXT - Signal a fence when a display event occurs
---
--- = Parameters
---
--- -   @device@ is a logical device associated with @display@
---
--- -   @display@ is the display on which the event /may/ occur.
---
--- -   @pDisplayEventInfo@ is a pointer to a 'DisplayEventInfoEXT'
---     structure describing the event of interest to the application.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pFence@ is a pointer to a handle in which the resulting fence
---     object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @display@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DisplayKHR' handle
---
--- -   @pDisplayEventInfo@ /must/ be a valid pointer to a valid
---     'DisplayEventInfoEXT' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pFence@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.Handles.Fence' handle
---
--- -   Both of @device@, and @display@ /must/ have been created, allocated,
---     or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device', 'DisplayEventInfoEXT',
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR',
--- 'Graphics.Vulkan.Core10.Handles.Fence'
-registerDisplayEventEXT :: forall io . MonadIO io => Device -> DisplayKHR -> DisplayEventInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Fence)
-registerDisplayEventEXT device display displayEventInfo allocator = liftIO . evalContT $ do
-  let vkRegisterDisplayEventEXT' = mkVkRegisterDisplayEventEXT (pVkRegisterDisplayEventEXT (deviceCmds (device :: Device)))
-  pDisplayEventInfo <- ContT $ withCStruct (displayEventInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPFence <- ContT $ bracket (callocBytes @Fence 8) free
-  _ <- lift $ vkRegisterDisplayEventEXT' (deviceHandle (device)) (display) pDisplayEventInfo pAllocator (pPFence)
-  pFence <- lift $ peek @Fence pPFence
-  pure $ (pFence)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetSwapchainCounterEXT
-  :: FunPtr (Ptr Device_T -> SwapchainKHR -> SurfaceCounterFlagBitsEXT -> Ptr Word64 -> IO Result) -> Ptr Device_T -> SwapchainKHR -> SurfaceCounterFlagBitsEXT -> Ptr Word64 -> IO Result
-
--- | vkGetSwapchainCounterEXT - Query the current value of a surface counter
---
--- = Parameters
---
--- -   @device@ is the 'Graphics.Vulkan.Core10.Handles.Device' 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
---
--- If a counter is not available because the swapchain is out of date, the
--- implementation /may/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @swapchain@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handle
---
--- -   @counter@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagBitsEXT'
---     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
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagBitsEXT',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-getSwapchainCounterEXT :: forall io . MonadIO io => Device -> SwapchainKHR -> SurfaceCounterFlagBitsEXT -> io (("counterValue" ::: Word64))
-getSwapchainCounterEXT device swapchain counter = liftIO . evalContT $ do
-  let vkGetSwapchainCounterEXT' = mkVkGetSwapchainCounterEXT (pVkGetSwapchainCounterEXT (deviceCmds (device :: Device)))
-  pPCounterValue <- ContT $ bracket (callocBytes @Word64 8) free
-  r <- lift $ vkGetSwapchainCounterEXT' (deviceHandle (device)) (swapchain) (counter) (pPCounterValue)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pCounterValue <- lift $ peek @Word64 pPCounterValue
-  pure $ (pCounterValue)
-
-
--- | VkDisplayPowerInfoEXT - Describe the power state of a display
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'DisplayPowerStateEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'displayPowerControlEXT'
-data DisplayPowerInfoEXT = DisplayPowerInfoEXT
-  { -- | @powerState@ /must/ be a valid 'DisplayPowerStateEXT' value
-    powerState :: DisplayPowerStateEXT }
-  deriving (Typeable)
-deriving instance Show DisplayPowerInfoEXT
-
-instance ToCStruct DisplayPowerInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayPowerInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DisplayPowerStateEXT)) (powerState)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DisplayPowerStateEXT)) (zero)
-    f
-
-instance FromCStruct DisplayPowerInfoEXT where
-  peekCStruct p = do
-    powerState <- peek @DisplayPowerStateEXT ((p `plusPtr` 16 :: Ptr DisplayPowerStateEXT))
-    pure $ DisplayPowerInfoEXT
-             powerState
-
-instance Storable DisplayPowerInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DisplayPowerInfoEXT where
-  zero = DisplayPowerInfoEXT
-           zero
-
-
--- | VkDeviceEventInfoEXT - Describe a device event to create
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'DeviceEventTypeEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'registerDeviceEventEXT'
-data DeviceEventInfoEXT = DeviceEventInfoEXT
-  { -- | @deviceEvent@ /must/ be a valid 'DeviceEventTypeEXT' value
-    deviceEvent :: DeviceEventTypeEXT }
-  deriving (Typeable)
-deriving instance Show DeviceEventInfoEXT
-
-instance ToCStruct DeviceEventInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceEventInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceEventTypeEXT)) (deviceEvent)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceEventTypeEXT)) (zero)
-    f
-
-instance FromCStruct DeviceEventInfoEXT where
-  peekCStruct p = do
-    deviceEvent <- peek @DeviceEventTypeEXT ((p `plusPtr` 16 :: Ptr DeviceEventTypeEXT))
-    pure $ DeviceEventInfoEXT
-             deviceEvent
-
-instance Storable DeviceEventInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeviceEventInfoEXT where
-  zero = DeviceEventInfoEXT
-           zero
-
-
--- | VkDisplayEventInfoEXT - Describe a display event to create
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'DisplayEventTypeEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'registerDisplayEventEXT'
-data DisplayEventInfoEXT = DisplayEventInfoEXT
-  { -- | @displayEvent@ /must/ be a valid 'DisplayEventTypeEXT' value
-    displayEvent :: DisplayEventTypeEXT }
-  deriving (Typeable)
-deriving instance Show DisplayEventInfoEXT
-
-instance ToCStruct DisplayEventInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayEventInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DisplayEventTypeEXT)) (displayEvent)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DisplayEventTypeEXT)) (zero)
-    f
-
-instance FromCStruct DisplayEventInfoEXT where
-  peekCStruct p = do
-    displayEvent <- peek @DisplayEventTypeEXT ((p `plusPtr` 16 :: Ptr DisplayEventTypeEXT))
-    pure $ DisplayEventInfoEXT
-             displayEvent
-
-instance Storable DisplayEventInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DisplayEventInfoEXT where
-  zero = DisplayEventInfoEXT
-           zero
-
-
--- | VkSwapchainCounterCreateInfoEXT - Specify the surface counters desired
---
--- == Valid Usage
---
--- -   The bits in @surfaceCounters@ /must/ be supported by
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'::@surface@,
---     as reported by
---     'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.getPhysicalDeviceSurfaceCapabilities2EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT'
---
--- -   @surfaceCounters@ /must/ be a valid combination of
---     'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagBitsEXT'
---     values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagsEXT'
-data SwapchainCounterCreateInfoEXT = SwapchainCounterCreateInfoEXT
-  { -- | @surfaceCounters@ is a bitmask of
-    -- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagBitsEXT'
-    -- specifying surface counters to enable for the swapchain.
-    surfaceCounters :: SurfaceCounterFlagsEXT }
-  deriving (Typeable)
-deriving instance Show SwapchainCounterCreateInfoEXT
-
-instance ToCStruct SwapchainCounterCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SwapchainCounterCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SurfaceCounterFlagsEXT)) (surfaceCounters)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct SwapchainCounterCreateInfoEXT where
-  peekCStruct p = do
-    surfaceCounters <- peek @SurfaceCounterFlagsEXT ((p `plusPtr` 16 :: Ptr SurfaceCounterFlagsEXT))
-    pure $ SwapchainCounterCreateInfoEXT
-             surfaceCounters
-
-instance Storable SwapchainCounterCreateInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SwapchainCounterCreateInfoEXT where
-  zero = SwapchainCounterCreateInfoEXT
-           zero
-
-
--- | VkDisplayPowerStateEXT - Possible power states for a display
---
--- = See Also
---
--- 'DisplayPowerInfoEXT'
-newtype DisplayPowerStateEXT = DisplayPowerStateEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'DISPLAY_POWER_STATE_OFF_EXT' specifies that the display is powered
--- down.
-pattern DISPLAY_POWER_STATE_OFF_EXT = DisplayPowerStateEXT 0
--- | '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
--- 'DISPLAY_POWER_STATE_ON_EXT' more quickly than if it were in
--- 'DISPLAY_POWER_STATE_OFF_EXT'. This state /may/ be the same as
--- 'DISPLAY_POWER_STATE_OFF_EXT'.
-pattern DISPLAY_POWER_STATE_SUSPEND_EXT = DisplayPowerStateEXT 1
--- | 'DISPLAY_POWER_STATE_ON_EXT' specifies that the display is powered on.
-pattern DISPLAY_POWER_STATE_ON_EXT = DisplayPowerStateEXT 2
-{-# complete DISPLAY_POWER_STATE_OFF_EXT,
-             DISPLAY_POWER_STATE_SUSPEND_EXT,
-             DISPLAY_POWER_STATE_ON_EXT :: DisplayPowerStateEXT #-}
-
-instance Show DisplayPowerStateEXT where
-  showsPrec p = \case
-    DISPLAY_POWER_STATE_OFF_EXT -> showString "DISPLAY_POWER_STATE_OFF_EXT"
-    DISPLAY_POWER_STATE_SUSPEND_EXT -> showString "DISPLAY_POWER_STATE_SUSPEND_EXT"
-    DISPLAY_POWER_STATE_ON_EXT -> showString "DISPLAY_POWER_STATE_ON_EXT"
-    DisplayPowerStateEXT x -> showParen (p >= 11) (showString "DisplayPowerStateEXT " . showsPrec 11 x)
-
-instance Read DisplayPowerStateEXT where
-  readPrec = parens (choose [("DISPLAY_POWER_STATE_OFF_EXT", pure DISPLAY_POWER_STATE_OFF_EXT)
-                            , ("DISPLAY_POWER_STATE_SUSPEND_EXT", pure DISPLAY_POWER_STATE_SUSPEND_EXT)
-                            , ("DISPLAY_POWER_STATE_ON_EXT", pure DISPLAY_POWER_STATE_ON_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DisplayPowerStateEXT")
-                       v <- step readPrec
-                       pure (DisplayPowerStateEXT v)))
-
-
--- | VkDeviceEventTypeEXT - Events that can occur on a device object
---
--- = See Also
---
--- 'DeviceEventInfoEXT'
-newtype DeviceEventTypeEXT = DeviceEventTypeEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | '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 DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = DeviceEventTypeEXT 0
-{-# complete DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT :: DeviceEventTypeEXT #-}
-
-instance Show DeviceEventTypeEXT where
-  showsPrec p = \case
-    DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT -> showString "DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT"
-    DeviceEventTypeEXT x -> showParen (p >= 11) (showString "DeviceEventTypeEXT " . showsPrec 11 x)
-
-instance Read DeviceEventTypeEXT where
-  readPrec = parens (choose [("DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT", pure DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DeviceEventTypeEXT")
-                       v <- step readPrec
-                       pure (DeviceEventTypeEXT v)))
-
-
--- | VkDisplayEventTypeEXT - Events that can occur on a display object
---
--- = See Also
---
--- 'DisplayEventInfoEXT'
-newtype DisplayEventTypeEXT = DisplayEventTypeEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | '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 DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = DisplayEventTypeEXT 0
-{-# complete DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT :: DisplayEventTypeEXT #-}
-
-instance Show DisplayEventTypeEXT where
-  showsPrec p = \case
-    DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT -> showString "DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT"
-    DisplayEventTypeEXT x -> showParen (p >= 11) (showString "DisplayEventTypeEXT " . showsPrec 11 x)
-
-instance Read DisplayEventTypeEXT where
-  readPrec = parens (choose [("DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT", pure DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DisplayEventTypeEXT")
-                       v <- step readPrec
-                       pure (DisplayEventTypeEXT v)))
-
-
-type EXT_DISPLAY_CONTROL_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_DISPLAY_CONTROL_SPEC_VERSION"
-pattern EXT_DISPLAY_CONTROL_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DISPLAY_CONTROL_SPEC_VERSION = 1
-
-
-type EXT_DISPLAY_CONTROL_EXTENSION_NAME = "VK_EXT_display_control"
-
--- No documentation found for TopLevel "VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME"
-pattern EXT_DISPLAY_CONTROL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_DISPLAY_CONTROL_EXTENSION_NAME = "VK_EXT_display_control"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs-boot
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_display_control  ( DeviceEventInfoEXT
-                                                          , DisplayEventInfoEXT
-                                                          , DisplayPowerInfoEXT
-                                                          , SwapchainCounterCreateInfoEXT
-                                                          ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DeviceEventInfoEXT
-
-instance ToCStruct DeviceEventInfoEXT
-instance Show DeviceEventInfoEXT
-
-instance FromCStruct DeviceEventInfoEXT
-
-
-data DisplayEventInfoEXT
-
-instance ToCStruct DisplayEventInfoEXT
-instance Show DisplayEventInfoEXT
-
-instance FromCStruct DisplayEventInfoEXT
-
-
-data DisplayPowerInfoEXT
-
-instance ToCStruct DisplayPowerInfoEXT
-instance Show DisplayPowerInfoEXT
-
-instance FromCStruct DisplayPowerInfoEXT
-
-
-data SwapchainCounterCreateInfoEXT
-
-instance ToCStruct SwapchainCounterCreateInfoEXT
-instance Show SwapchainCounterCreateInfoEXT
-
-instance FromCStruct SwapchainCounterCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs
+++ /dev/null
@@ -1,371 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter  ( getPhysicalDeviceSurfaceCapabilities2EXT
-                                                                  , pattern STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT
-                                                                  , SurfaceCapabilities2EXT(..)
-                                                                  , CompositeAlphaFlagBitsKHR( COMPOSITE_ALPHA_OPAQUE_BIT_KHR
-                                                                                             , COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR
-                                                                                             , COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR
-                                                                                             , COMPOSITE_ALPHA_INHERIT_BIT_KHR
-                                                                                             , ..
-                                                                                             )
-                                                                  , CompositeAlphaFlagsKHR
-                                                                  , SurfaceCounterFlagBitsEXT( SURFACE_COUNTER_VBLANK_EXT
-                                                                                             , ..
-                                                                                             )
-                                                                  , SurfaceCounterFlagsEXT
-                                                                  , EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION
-                                                                  , pattern EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION
-                                                                  , EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME
-                                                                  , pattern EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME
-                                                                  , SurfaceKHR(..)
-                                                                  , SurfaceTransformFlagBitsKHR(..)
-                                                                  , SurfaceTransformFlagsKHR
-                                                                  ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceCapabilities2EXT))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagsKHR)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagsKHR)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSurfaceCapabilities2EXT
-  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr SurfaceCapabilities2EXT -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr SurfaceCapabilities2EXT -> IO Result
-
--- | vkGetPhysicalDeviceSurfaceCapabilities2EXT - Query surface capabilities
---
--- = 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.createSwapchainKHR'.
---
--- -   @surface@ is the surface that will be associated with the swapchain.
---
--- -   @pSurfaceCapabilities@ is a pointer to a 'SurfaceCapabilities2EXT'
---     structure in which the capabilities are returned.
---
--- = Description
---
--- 'getPhysicalDeviceSurfaceCapabilities2EXT' behaves similarly to
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
--- 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
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @surface@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a
---     'SurfaceCapabilities2EXT' structure
---
--- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'SurfaceCapabilities2EXT',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-getPhysicalDeviceSurfaceCapabilities2EXT :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (SurfaceCapabilities2EXT)
-getPhysicalDeviceSurfaceCapabilities2EXT physicalDevice surface = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSurfaceCapabilities2EXT' = mkVkGetPhysicalDeviceSurfaceCapabilities2EXT (pVkGetPhysicalDeviceSurfaceCapabilities2EXT (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPSurfaceCapabilities <- ContT (withZeroCStruct @SurfaceCapabilities2EXT)
-  r <- lift $ vkGetPhysicalDeviceSurfaceCapabilities2EXT' (physicalDeviceHandle (physicalDevice)) (surface) (pPSurfaceCapabilities)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurfaceCapabilities <- lift $ peekCStruct @SurfaceCapabilities2EXT pPSurfaceCapabilities
-  pure $ (pSurfaceCapabilities)
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT"
-pattern STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT
-
-
--- | VkSurfaceCapabilities2EXT - Structure describing capabilities of a
--- surface
---
--- = Members
---
--- All members of 'SurfaceCapabilities2EXT' are identical to the
--- corresponding members of
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' where
--- one exists. The remaining members are:
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'CompositeAlphaFlagsKHR', 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'SurfaceCounterFlagsEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagBitsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagsKHR',
--- 'getPhysicalDeviceSurfaceCapabilities2EXT'
-data SurfaceCapabilities2EXT = SurfaceCapabilities2EXT
-  { -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "minImageCount"
-    minImageCount :: Word32
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "maxImageCount"
-    maxImageCount :: Word32
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "currentExtent"
-    currentExtent :: Extent2D
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "minImageExtent"
-    minImageExtent :: Extent2D
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "maxImageExtent"
-    maxImageExtent :: Extent2D
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "maxImageArrayLayers"
-    maxImageArrayLayers :: Word32
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "supportedTransforms"
-    supportedTransforms :: SurfaceTransformFlagsKHR
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "currentTransform"
-    currentTransform :: SurfaceTransformFlagBitsKHR
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "supportedCompositeAlpha"
-    supportedCompositeAlpha :: CompositeAlphaFlagsKHR
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "supportedUsageFlags"
-    supportedUsageFlags :: ImageUsageFlags
-  , -- | @supportedSurfaceCounters@ /must/ not include
-    -- 'SURFACE_COUNTER_VBLANK_EXT' unless the surface queried is a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#wsi-display-surfaces display surface>
-    supportedSurfaceCounters :: SurfaceCounterFlagsEXT
-  }
-  deriving (Typeable)
-deriving instance Show SurfaceCapabilities2EXT
-
-instance ToCStruct SurfaceCapabilities2EXT where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SurfaceCapabilities2EXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (minImageCount)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (maxImageCount)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (currentExtent) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Extent2D)) (minImageExtent) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr Extent2D)) (maxImageExtent) . ($ ())
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (maxImageArrayLayers)
-    lift $ poke ((p `plusPtr` 52 :: Ptr SurfaceTransformFlagsKHR)) (supportedTransforms)
-    lift $ poke ((p `plusPtr` 56 :: Ptr SurfaceTransformFlagBitsKHR)) (currentTransform)
-    lift $ poke ((p `plusPtr` 60 :: Ptr CompositeAlphaFlagsKHR)) (supportedCompositeAlpha)
-    lift $ poke ((p `plusPtr` 64 :: Ptr ImageUsageFlags)) (supportedUsageFlags)
-    lift $ poke ((p `plusPtr` 68 :: Ptr SurfaceCounterFlagsEXT)) (supportedSurfaceCounters)
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Extent2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 56 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
-    lift $ f
-
-instance FromCStruct SurfaceCapabilities2EXT where
-  peekCStruct p = do
-    minImageCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxImageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    currentExtent <- peekCStruct @Extent2D ((p `plusPtr` 24 :: Ptr Extent2D))
-    minImageExtent <- peekCStruct @Extent2D ((p `plusPtr` 32 :: Ptr Extent2D))
-    maxImageExtent <- peekCStruct @Extent2D ((p `plusPtr` 40 :: Ptr Extent2D))
-    maxImageArrayLayers <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    supportedTransforms <- peek @SurfaceTransformFlagsKHR ((p `plusPtr` 52 :: Ptr SurfaceTransformFlagsKHR))
-    currentTransform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 56 :: Ptr SurfaceTransformFlagBitsKHR))
-    supportedCompositeAlpha <- peek @CompositeAlphaFlagsKHR ((p `plusPtr` 60 :: Ptr CompositeAlphaFlagsKHR))
-    supportedUsageFlags <- peek @ImageUsageFlags ((p `plusPtr` 64 :: Ptr ImageUsageFlags))
-    supportedSurfaceCounters <- peek @SurfaceCounterFlagsEXT ((p `plusPtr` 68 :: Ptr SurfaceCounterFlagsEXT))
-    pure $ SurfaceCapabilities2EXT
-             minImageCount maxImageCount currentExtent minImageExtent maxImageExtent maxImageArrayLayers supportedTransforms currentTransform supportedCompositeAlpha supportedUsageFlags supportedSurfaceCounters
-
-instance Zero SurfaceCapabilities2EXT where
-  zero = SurfaceCapabilities2EXT
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkCompositeAlphaFlagBitsKHR - alpha compositing modes supported on a
--- device
---
--- = Description
---
--- These values are described as follows:
---
--- = See Also
---
--- 'CompositeAlphaFlagsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
-newtype CompositeAlphaFlagBitsKHR = CompositeAlphaFlagBitsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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.
-pattern COMPOSITE_ALPHA_OPAQUE_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000001
--- | '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.
-pattern COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000002
--- | '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.
-pattern COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000004
--- | '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.
-pattern COMPOSITE_ALPHA_INHERIT_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000008
-
-type CompositeAlphaFlagsKHR = CompositeAlphaFlagBitsKHR
-
-instance Show CompositeAlphaFlagBitsKHR where
-  showsPrec p = \case
-    COMPOSITE_ALPHA_OPAQUE_BIT_KHR -> showString "COMPOSITE_ALPHA_OPAQUE_BIT_KHR"
-    COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR -> showString "COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"
-    COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR -> showString "COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"
-    COMPOSITE_ALPHA_INHERIT_BIT_KHR -> showString "COMPOSITE_ALPHA_INHERIT_BIT_KHR"
-    CompositeAlphaFlagBitsKHR x -> showParen (p >= 11) (showString "CompositeAlphaFlagBitsKHR 0x" . showHex x)
-
-instance Read CompositeAlphaFlagBitsKHR where
-  readPrec = parens (choose [("COMPOSITE_ALPHA_OPAQUE_BIT_KHR", pure COMPOSITE_ALPHA_OPAQUE_BIT_KHR)
-                            , ("COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR", pure COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR)
-                            , ("COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR", pure COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR)
-                            , ("COMPOSITE_ALPHA_INHERIT_BIT_KHR", pure COMPOSITE_ALPHA_INHERIT_BIT_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CompositeAlphaFlagBitsKHR")
-                       v <- step readPrec
-                       pure (CompositeAlphaFlagBitsKHR v)))
-
-
--- | VkSurfaceCounterFlagBitsEXT - Surface-relative counter types
---
--- = See Also
---
--- 'SurfaceCounterFlagsEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.getSwapchainCounterEXT'
-newtype SurfaceCounterFlagBitsEXT = SurfaceCounterFlagBitsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SURFACE_COUNTER_VBLANK_EXT' specifies a counter incrementing once every
--- time a vertical blanking period occurs on the display associated with
--- the surface.
-pattern SURFACE_COUNTER_VBLANK_EXT = SurfaceCounterFlagBitsEXT 0x00000001
-
-type SurfaceCounterFlagsEXT = SurfaceCounterFlagBitsEXT
-
-instance Show SurfaceCounterFlagBitsEXT where
-  showsPrec p = \case
-    SURFACE_COUNTER_VBLANK_EXT -> showString "SURFACE_COUNTER_VBLANK_EXT"
-    SurfaceCounterFlagBitsEXT x -> showParen (p >= 11) (showString "SurfaceCounterFlagBitsEXT 0x" . showHex x)
-
-instance Read SurfaceCounterFlagBitsEXT where
-  readPrec = parens (choose [("SURFACE_COUNTER_VBLANK_EXT", pure SURFACE_COUNTER_VBLANK_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SurfaceCounterFlagBitsEXT")
-                       v <- step readPrec
-                       pure (SurfaceCounterFlagBitsEXT v)))
-
-
-type EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION"
-pattern EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION = 1
-
-
-type EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME = "VK_EXT_display_surface_counter"
-
--- No documentation found for TopLevel "VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME"
-pattern EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME = "VK_EXT_display_surface_counter"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs-boot
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter  ( SurfaceCapabilities2EXT
-                                                                  , SurfaceCounterFlagBitsEXT
-                                                                  , SurfaceCounterFlagsEXT
-                                                                  ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data SurfaceCapabilities2EXT
-
-instance ToCStruct SurfaceCapabilities2EXT
-instance Show SurfaceCapabilities2EXT
-
-instance FromCStruct SurfaceCapabilities2EXT
-
-
-data SurfaceCounterFlagBitsEXT
-
-type SurfaceCounterFlagsEXT = SurfaceCounterFlagBitsEXT
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_dma_buf.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_external_memory_dma_buf  ( EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION
-                                                                  , pattern EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION
-                                                                  , EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME
-                                                                  , pattern EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME
-                                                                  ) where
-
-import Data.String (IsString)
-
-type EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION"
-pattern EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION = 1
-
-
-type EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME = "VK_EXT_external_memory_dma_buf"
-
--- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME"
-pattern EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs
+++ /dev/null
@@ -1,373 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_external_memory_host  ( getMemoryHostPointerPropertiesEXT
-                                                               , ImportMemoryHostPointerInfoEXT(..)
-                                                               , MemoryHostPointerPropertiesEXT(..)
-                                                               , PhysicalDeviceExternalMemoryHostPropertiesEXT(..)
-                                                               , EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION
-                                                               , pattern EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION
-                                                               , EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME
-                                                               , pattern EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME
-                                                               , ExternalMemoryHandleTypeFlagsKHR
-                                                               , ExternalMemoryHandleTypeFlagBitsKHR
-                                                               ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetMemoryHostPointerPropertiesEXT))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities (ExternalMemoryHandleTypeFlagBitsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities (ExternalMemoryHandleTypeFlagsKHR)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetMemoryHostPointerPropertiesEXT
-  :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> Ptr () -> Ptr MemoryHostPointerPropertiesEXT -> IO Result) -> Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> Ptr () -> Ptr MemoryHostPointerPropertiesEXT -> IO Result
-
--- | vkGetMemoryHostPointerPropertiesEXT - Get properties of external memory
--- host pointer
---
--- = 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.
---
--- -   @pMemoryHostPointerProperties@ is a pointer to a
---     'MemoryHostPointerPropertiesEXT' structure in which the host pointer
---     properties are returned.
---
--- == Valid Usage
---
--- -   @handleType@ /must/ be
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT'
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT'
---
--- -   @pHostPointer@ /must/ be a pointer aligned to an integer multiple of
---     'PhysicalDeviceExternalMemoryHostPropertiesEXT'::@minImportedHostPointerAlignment@
---
--- -   If @handleType@ is
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT',
---     @pHostPointer@ /must/ be a pointer to host memory
---
--- -   If @handleType@ is
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT',
---     @pHostPointer@ /must/ be a pointer to host mapped foreign memory
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
---     value
---
--- -   @pMemoryHostPointerProperties@ /must/ be a valid pointer to a
---     'MemoryHostPointerPropertiesEXT' structure
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
--- 'MemoryHostPointerPropertiesEXT'
-getMemoryHostPointerPropertiesEXT :: forall io . MonadIO io => Device -> ExternalMemoryHandleTypeFlagBits -> ("hostPointer" ::: Ptr ()) -> io (MemoryHostPointerPropertiesEXT)
-getMemoryHostPointerPropertiesEXT device handleType hostPointer = liftIO . evalContT $ do
-  let vkGetMemoryHostPointerPropertiesEXT' = mkVkGetMemoryHostPointerPropertiesEXT (pVkGetMemoryHostPointerPropertiesEXT (deviceCmds (device :: Device)))
-  pPMemoryHostPointerProperties <- ContT (withZeroCStruct @MemoryHostPointerPropertiesEXT)
-  r <- lift $ vkGetMemoryHostPointerPropertiesEXT' (deviceHandle (device)) (handleType) (hostPointer) (pPMemoryHostPointerProperties)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pMemoryHostPointerProperties <- lift $ peekCStruct @MemoryHostPointerPropertiesEXT pPMemoryHostPointerProperties
-  pure $ (pMemoryHostPointerProperties)
-
-
--- | VkImportMemoryHostPointerInfoEXT - import memory from a host pointer
---
--- = 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory.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.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalMemoryProperties'
---
--- -   If @handleType@ is not @0@, it /must/ be
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT'
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT'
---
--- -   @pHostPointer@ /must/ be a pointer aligned to an integer multiple of
---     'PhysicalDeviceExternalMemoryHostPropertiesEXT'::@minImportedHostPointerAlignment@
---
--- -   If @handleType@ is
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT',
---     @pHostPointer@ /must/ be a pointer to @allocationSize@ number of
---     bytes of host memory, where @allocationSize@ is the member of the
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' structure this
---     structure is chained to
---
--- -   If @handleType@ is
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT',
---     @pHostPointer@ /must/ be a pointer to @allocationSize@ number of
---     bytes of host mapped foreign memory, where @allocationSize@ is the
---     member of the 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo'
---     structure this structure is chained to
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT'
---
--- -   @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImportMemoryHostPointerInfoEXT = ImportMemoryHostPointerInfoEXT
-  { -- | @handleType@ specifies the handle type.
-    handleType :: ExternalMemoryHandleTypeFlagBits
-  , -- | @pHostPointer@ is the host pointer to import from.
-    hostPointer :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show ImportMemoryHostPointerInfoEXT
-
-instance ToCStruct ImportMemoryHostPointerInfoEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImportMemoryHostPointerInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (hostPointer)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct ImportMemoryHostPointerInfoEXT where
-  peekCStruct p = do
-    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits))
-    pHostPointer <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
-    pure $ ImportMemoryHostPointerInfoEXT
-             handleType pHostPointer
-
-instance Storable ImportMemoryHostPointerInfoEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImportMemoryHostPointerInfoEXT where
-  zero = ImportMemoryHostPointerInfoEXT
-           zero
-           zero
-
-
--- | VkMemoryHostPointerPropertiesEXT - Properties of external memory host
--- pointer
---
--- = Description
---
--- The value returned by @memoryTypeBits@ /must/ only include bits that
--- identify memory types which are host visible.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getMemoryHostPointerPropertiesEXT'
-data MemoryHostPointerPropertiesEXT = MemoryHostPointerPropertiesEXT
-  { -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
-    -- type which the specified host pointer /can/ be imported as.
-    memoryTypeBits :: Word32 }
-  deriving (Typeable)
-deriving instance Show MemoryHostPointerPropertiesEXT
-
-instance ToCStruct MemoryHostPointerPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryHostPointerPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (memoryTypeBits)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct MemoryHostPointerPropertiesEXT where
-  peekCStruct p = do
-    memoryTypeBits <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ MemoryHostPointerPropertiesEXT
-             memoryTypeBits
-
-instance Storable MemoryHostPointerPropertiesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryHostPointerPropertiesEXT where
-  zero = MemoryHostPointerPropertiesEXT
-           zero
-
-
--- | VkPhysicalDeviceExternalMemoryHostPropertiesEXT - Structure describing
--- external memory host pointer limits that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceExternalMemoryHostPropertiesEXT'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceExternalMemoryHostPropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceExternalMemoryHostPropertiesEXT = PhysicalDeviceExternalMemoryHostPropertiesEXT
-  { -- | @minImportedHostPointerAlignment@ is the minimum /required/ alignment,
-    -- in bytes, for the base address and size of host pointers that /can/ be
-    -- imported to a Vulkan memory object.
-    minImportedHostPointerAlignment :: DeviceSize }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceExternalMemoryHostPropertiesEXT
-
-instance ToCStruct PhysicalDeviceExternalMemoryHostPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceExternalMemoryHostPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (minImportedHostPointerAlignment)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceExternalMemoryHostPropertiesEXT where
-  peekCStruct p = do
-    minImportedHostPointerAlignment <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    pure $ PhysicalDeviceExternalMemoryHostPropertiesEXT
-             minImportedHostPointerAlignment
-
-instance Storable PhysicalDeviceExternalMemoryHostPropertiesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceExternalMemoryHostPropertiesEXT where
-  zero = PhysicalDeviceExternalMemoryHostPropertiesEXT
-           zero
-
-
-type EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION"
-pattern EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION = 1
-
-
-type EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME = "VK_EXT_external_memory_host"
-
--- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME"
-pattern EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME = "VK_EXT_external_memory_host"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_external_memory_host  ( ImportMemoryHostPointerInfoEXT
-                                                               , MemoryHostPointerPropertiesEXT
-                                                               , PhysicalDeviceExternalMemoryHostPropertiesEXT
-                                                               ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ImportMemoryHostPointerInfoEXT
-
-instance ToCStruct ImportMemoryHostPointerInfoEXT
-instance Show ImportMemoryHostPointerInfoEXT
-
-instance FromCStruct ImportMemoryHostPointerInfoEXT
-
-
-data MemoryHostPointerPropertiesEXT
-
-instance ToCStruct MemoryHostPointerPropertiesEXT
-instance Show MemoryHostPointerPropertiesEXT
-
-instance FromCStruct MemoryHostPointerPropertiesEXT
-
-
-data PhysicalDeviceExternalMemoryHostPropertiesEXT
-
-instance ToCStruct PhysicalDeviceExternalMemoryHostPropertiesEXT
-instance Show PhysicalDeviceExternalMemoryHostPropertiesEXT
-
-instance FromCStruct PhysicalDeviceExternalMemoryHostPropertiesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_filter_cubic.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_filter_cubic.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_filter_cubic.hs
+++ /dev/null
@@ -1,178 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_filter_cubic  ( pattern FILTER_CUBIC_EXT
-                                                       , pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
-                                                       , PhysicalDeviceImageViewImageFormatInfoEXT(..)
-                                                       , FilterCubicImageViewImageFormatPropertiesEXT(..)
-                                                       , EXT_FILTER_CUBIC_SPEC_VERSION
-                                                       , pattern EXT_FILTER_CUBIC_SPEC_VERSION
-                                                       , EXT_FILTER_CUBIC_EXTENSION_NAME
-                                                       , pattern EXT_FILTER_CUBIC_EXTENSION_NAME
-                                                       ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageViewType (ImageViewType)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.Filter (Filter(FILTER_CUBIC_IMG))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT))
--- No documentation found for TopLevel "VK_FILTER_CUBIC_EXT"
-pattern FILTER_CUBIC_EXT = FILTER_CUBIC_IMG
-
-
--- No documentation found for TopLevel "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT"
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
-
-
--- | VkPhysicalDeviceImageViewImageFormatInfoEXT - Structure for providing
--- image view type
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceImageViewImageFormatInfoEXT = PhysicalDeviceImageViewImageFormatInfoEXT
-  { -- | @imageViewType@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' value
-    imageViewType :: ImageViewType }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceImageViewImageFormatInfoEXT
-
-instance ToCStruct PhysicalDeviceImageViewImageFormatInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceImageViewImageFormatInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageViewType)) (imageViewType)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageViewType)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceImageViewImageFormatInfoEXT where
-  peekCStruct p = do
-    imageViewType <- peek @ImageViewType ((p `plusPtr` 16 :: Ptr ImageViewType))
-    pure $ PhysicalDeviceImageViewImageFormatInfoEXT
-             imageViewType
-
-instance Storable PhysicalDeviceImageViewImageFormatInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceImageViewImageFormatInfoEXT where
-  zero = PhysicalDeviceImageViewImageFormatInfoEXT
-           zero
-
-
--- | VkFilterCubicImageViewImageFormatPropertiesEXT - Structure for querying
--- cubic filtering capabilities of an image view type
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT'
---
--- == Valid Usage
---
--- -   If the @pNext@ chain of the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2'
---     structure includes a 'FilterCubicImageViewImageFormatPropertiesEXT'
---     structure, the @pNext@ chain of the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
---     structure /must/ include a
---     'PhysicalDeviceImageViewImageFormatInfoEXT' structure with an
---     @imageViewType@ that is compatible with @imageType@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data FilterCubicImageViewImageFormatPropertiesEXT = FilterCubicImageViewImageFormatPropertiesEXT
-  { -- | @filterCubic@ tells if image format, image type and image view type
-    -- /can/ be used with cubic filtering. This field is set by the
-    -- implementation. User-specified value is ignored.
-    filterCubic :: Bool
-  , -- | @filterCubicMinmax@ tells if image format, image type and image view
-    -- type /can/ be used with cubic filtering and minmax filtering. This field
-    -- is set by the implementation. User-specified value is ignored.
-    filterCubicMinmax :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show FilterCubicImageViewImageFormatPropertiesEXT
-
-instance ToCStruct FilterCubicImageViewImageFormatPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p FilterCubicImageViewImageFormatPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (filterCubic))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (filterCubicMinmax))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct FilterCubicImageViewImageFormatPropertiesEXT where
-  peekCStruct p = do
-    filterCubic <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    filterCubicMinmax <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ FilterCubicImageViewImageFormatPropertiesEXT
-             (bool32ToBool filterCubic) (bool32ToBool filterCubicMinmax)
-
-instance Storable FilterCubicImageViewImageFormatPropertiesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero FilterCubicImageViewImageFormatPropertiesEXT where
-  zero = FilterCubicImageViewImageFormatPropertiesEXT
-           zero
-           zero
-
-
-type EXT_FILTER_CUBIC_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_EXT_FILTER_CUBIC_SPEC_VERSION"
-pattern EXT_FILTER_CUBIC_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_FILTER_CUBIC_SPEC_VERSION = 3
-
-
-type EXT_FILTER_CUBIC_EXTENSION_NAME = "VK_EXT_filter_cubic"
-
--- No documentation found for TopLevel "VK_EXT_FILTER_CUBIC_EXTENSION_NAME"
-pattern EXT_FILTER_CUBIC_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_FILTER_CUBIC_EXTENSION_NAME = "VK_EXT_filter_cubic"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_filter_cubic.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_filter_cubic.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_filter_cubic.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_filter_cubic  ( FilterCubicImageViewImageFormatPropertiesEXT
-                                                       , PhysicalDeviceImageViewImageFormatInfoEXT
-                                                       ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data FilterCubicImageViewImageFormatPropertiesEXT
-
-instance ToCStruct FilterCubicImageViewImageFormatPropertiesEXT
-instance Show FilterCubicImageViewImageFormatPropertiesEXT
-
-instance FromCStruct FilterCubicImageViewImageFormatPropertiesEXT
-
-
-data PhysicalDeviceImageViewImageFormatInfoEXT
-
-instance ToCStruct PhysicalDeviceImageViewImageFormatInfoEXT
-instance Show PhysicalDeviceImageViewImageFormatInfoEXT
-
-instance FromCStruct PhysicalDeviceImageViewImageFormatInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_density_map.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_density_map.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_density_map.hs
+++ /dev/null
@@ -1,313 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map  ( PhysicalDeviceFragmentDensityMapFeaturesEXT(..)
-                                                               , PhysicalDeviceFragmentDensityMapPropertiesEXT(..)
-                                                               , RenderPassFragmentDensityMapCreateInfoEXT(..)
-                                                               , EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION
-                                                               , pattern EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION
-                                                               , EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME
-                                                               , pattern EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME
-                                                               ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.Pass (AttachmentReference)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT))
--- | VkPhysicalDeviceFragmentDensityMapFeaturesEXT - Structure describing
--- fragment density map features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceFragmentDensityMapFeaturesEXT'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceFragmentDensityMapFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceFragmentDensityMapFeaturesEXT' /can/ also be included in
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable the features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceFragmentDensityMapFeaturesEXT = PhysicalDeviceFragmentDensityMapFeaturesEXT
-  { -- | @fragmentDensityMap@ specifies whether the implementation supports
-    -- render passes with a fragment density map attachment. If this feature is
-    -- not enabled and the @pNext@ chain of
-    -- 'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo' includes a
-    -- 'RenderPassFragmentDensityMapCreateInfoEXT' structure,
-    -- @fragmentDensityMapAttachment@ /must/ be
-    -- 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'.
-    fragmentDensityMap :: Bool
-  , -- | @fragmentDensityMapDynamic@ specifies whether the implementation
-    -- supports dynamic fragment density map image views. If this feature is
-    -- not enabled,
-    -- 'Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT'
-    -- /must/ not be included in
-    -- 'Graphics.Vulkan.Core10.ImageView.ImageViewCreateInfo'::@flags@.
-    fragmentDensityMapDynamic :: Bool
-  , -- | @fragmentDensityMapNonSubsampledImages@ specifies whether the
-    -- implementation supports regular non-subsampled image attachments with
-    -- fragment density map render passes. If this feature is not enabled,
-    -- render passes with a
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>
-    -- /must/ only have
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-subsamplesampler subsampled attachments>
-    -- bound.
-    fragmentDensityMapNonSubsampledImages :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceFragmentDensityMapFeaturesEXT
-
-instance ToCStruct PhysicalDeviceFragmentDensityMapFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceFragmentDensityMapFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (fragmentDensityMap))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (fragmentDensityMapDynamic))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (fragmentDensityMapNonSubsampledImages))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceFragmentDensityMapFeaturesEXT where
-  peekCStruct p = do
-    fragmentDensityMap <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    fragmentDensityMapDynamic <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    fragmentDensityMapNonSubsampledImages <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    pure $ PhysicalDeviceFragmentDensityMapFeaturesEXT
-             (bool32ToBool fragmentDensityMap) (bool32ToBool fragmentDensityMapDynamic) (bool32ToBool fragmentDensityMapNonSubsampledImages)
-
-instance Storable PhysicalDeviceFragmentDensityMapFeaturesEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceFragmentDensityMapFeaturesEXT where
-  zero = PhysicalDeviceFragmentDensityMapFeaturesEXT
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceFragmentDensityMapPropertiesEXT - Structure describing
--- fragment density map properties that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceFragmentDensityMapPropertiesEXT'
--- structure describe the following implementation-dependent limits:
---
--- == Valid Usage (Implicit)
---
--- If the 'PhysicalDeviceFragmentDensityMapPropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits and properties.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceFragmentDensityMapPropertiesEXT = PhysicalDeviceFragmentDensityMapPropertiesEXT
-  { -- | @minFragmentDensityTexelSize@ is the minimum
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-fragment-density-texel-size fragment density texel size>.
-    minFragmentDensityTexelSize :: Extent2D
-  , -- | @maxFragmentDensityTexelSize@ is the maximum fragment density texel
-    -- size.
-    maxFragmentDensityTexelSize :: Extent2D
-  , -- | @fragmentDensityInvocations@ specifies whether the implementation /may/
-    -- invoke additional fragment shader invocations for each covered sample.
-    fragmentDensityInvocations :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceFragmentDensityMapPropertiesEXT
-
-instance ToCStruct PhysicalDeviceFragmentDensityMapPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceFragmentDensityMapPropertiesEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (minFragmentDensityTexelSize) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (maxFragmentDensityTexelSize) . ($ ())
-    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (fragmentDensityInvocations))
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance FromCStruct PhysicalDeviceFragmentDensityMapPropertiesEXT where
-  peekCStruct p = do
-    minFragmentDensityTexelSize <- peekCStruct @Extent2D ((p `plusPtr` 16 :: Ptr Extent2D))
-    maxFragmentDensityTexelSize <- peekCStruct @Extent2D ((p `plusPtr` 24 :: Ptr Extent2D))
-    fragmentDensityInvocations <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    pure $ PhysicalDeviceFragmentDensityMapPropertiesEXT
-             minFragmentDensityTexelSize maxFragmentDensityTexelSize (bool32ToBool fragmentDensityInvocations)
-
-instance Zero PhysicalDeviceFragmentDensityMapPropertiesEXT where
-  zero = PhysicalDeviceFragmentDensityMapPropertiesEXT
-           zero
-           zero
-           zero
-
-
--- | VkRenderPassFragmentDensityMapCreateInfoEXT - Structure containing
--- fragment density map attachment for render pass
---
--- = Description
---
--- The fragment density map attachment is read at an
--- implementation-dependent time either by the host during
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass' if the
--- attachment’s image view was not created with @flags@ containing
--- 'Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT',
--- or by the device when drawing commands in the renderpass execute
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'.
---
--- If this structure is not present, it is as if
--- @fragmentDensityMapAttachment@ was given as
--- 'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'.
---
--- == Valid Usage
---
--- -   If @fragmentDensityMapAttachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     @fragmentDensityMapAttachment@ /must/ be less than
---     'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo'::@attachmentCount@
---
--- -   If @fragmentDensityMapAttachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     @fragmentDensityMapAttachment@ /must/ not be an element of
---     'Graphics.Vulkan.Core10.Pass.SubpassDescription'::@pInputAttachments@,
---     'Graphics.Vulkan.Core10.Pass.SubpassDescription'::@pColorAttachments@,
---     'Graphics.Vulkan.Core10.Pass.SubpassDescription'::@pResolveAttachments@,
---     'Graphics.Vulkan.Core10.Pass.SubpassDescription'::@pDepthStencilAttachment@,
---     or
---     'Graphics.Vulkan.Core10.Pass.SubpassDescription'::@pPreserveAttachments@
---     for any subpass
---
--- -   If @fragmentDensityMapAttachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@
---     /must/ be equal to
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT',
---     or 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
---
--- -   If @fragmentDensityMapAttachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     @fragmentDensityMapAttachment@ /must/ reference an attachment with a
---     @loadOp@ equal to
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_LOAD'
---     or
---     'Graphics.Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_DONT_CARE'
---
--- -   If @fragmentDensityMapAttachment@ is not
---     'Graphics.Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
---     @fragmentDensityMapAttachment@ /must/ reference an attachment with a
---     @storeOp@ equal to
---     'Graphics.Vulkan.Core10.Enums.AttachmentStoreOp.ATTACHMENT_STORE_OP_DONT_CARE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT'
---
--- -   @fragmentDensityMapAttachment@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Pass.AttachmentReference' structure
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pass.AttachmentReference',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data RenderPassFragmentDensityMapCreateInfoEXT = RenderPassFragmentDensityMapCreateInfoEXT
-  { -- | @fragmentDensityMapAttachment@ is the fragment density map to use for
-    -- the render pass.
-    fragmentDensityMapAttachment :: AttachmentReference }
-  deriving (Typeable)
-deriving instance Show RenderPassFragmentDensityMapCreateInfoEXT
-
-instance ToCStruct RenderPassFragmentDensityMapCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RenderPassFragmentDensityMapCreateInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr AttachmentReference)) (fragmentDensityMapAttachment) . ($ ())
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr AttachmentReference)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct RenderPassFragmentDensityMapCreateInfoEXT where
-  peekCStruct p = do
-    fragmentDensityMapAttachment <- peekCStruct @AttachmentReference ((p `plusPtr` 16 :: Ptr AttachmentReference))
-    pure $ RenderPassFragmentDensityMapCreateInfoEXT
-             fragmentDensityMapAttachment
-
-instance Zero RenderPassFragmentDensityMapCreateInfoEXT where
-  zero = RenderPassFragmentDensityMapCreateInfoEXT
-           zero
-
-
-type EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION"
-pattern EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION = 1
-
-
-type EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME = "VK_EXT_fragment_density_map"
-
--- No documentation found for TopLevel "VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME"
-pattern EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME = "VK_EXT_fragment_density_map"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_density_map.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_density_map.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_density_map.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map  ( PhysicalDeviceFragmentDensityMapFeaturesEXT
-                                                               , PhysicalDeviceFragmentDensityMapPropertiesEXT
-                                                               , RenderPassFragmentDensityMapCreateInfoEXT
-                                                               ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceFragmentDensityMapFeaturesEXT
-
-instance ToCStruct PhysicalDeviceFragmentDensityMapFeaturesEXT
-instance Show PhysicalDeviceFragmentDensityMapFeaturesEXT
-
-instance FromCStruct PhysicalDeviceFragmentDensityMapFeaturesEXT
-
-
-data PhysicalDeviceFragmentDensityMapPropertiesEXT
-
-instance ToCStruct PhysicalDeviceFragmentDensityMapPropertiesEXT
-instance Show PhysicalDeviceFragmentDensityMapPropertiesEXT
-
-instance FromCStruct PhysicalDeviceFragmentDensityMapPropertiesEXT
-
-
-data RenderPassFragmentDensityMapCreateInfoEXT
-
-instance ToCStruct RenderPassFragmentDensityMapCreateInfoEXT
-instance Show RenderPassFragmentDensityMapCreateInfoEXT
-
-instance FromCStruct RenderPassFragmentDensityMapCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock  ( PhysicalDeviceFragmentShaderInterlockFeaturesEXT(..)
-                                                                    , EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION
-                                                                    , pattern EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION
-                                                                    , EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME
-                                                                    , pattern EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME
-                                                                    ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT))
--- | VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT - Structure
--- describing fragment shader interlock features that can be supported by
--- an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceFragmentShaderInterlockFeaturesEXT'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceFragmentShaderInterlockFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceFragmentShaderInterlockFeaturesEXT' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceFragmentShaderInterlockFeaturesEXT = PhysicalDeviceFragmentShaderInterlockFeaturesEXT
-  { -- | @fragmentShaderSampleInterlock@ indicates that the implementation
-    -- supports the @FragmentShaderSampleInterlockEXT@ SPIR-V capability.
-    fragmentShaderSampleInterlock :: Bool
-  , -- | @fragmentShaderPixelInterlock@ indicates that the implementation
-    -- supports the @FragmentShaderPixelInterlockEXT@ SPIR-V capability.
-    fragmentShaderPixelInterlock :: Bool
-  , -- | @fragmentShaderShadingRateInterlock@ indicates that the implementation
-    -- supports the @FragmentShaderShadingRateInterlockEXT@ SPIR-V capability.
-    fragmentShaderShadingRateInterlock :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceFragmentShaderInterlockFeaturesEXT
-
-instance ToCStruct PhysicalDeviceFragmentShaderInterlockFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceFragmentShaderInterlockFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (fragmentShaderSampleInterlock))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (fragmentShaderPixelInterlock))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (fragmentShaderShadingRateInterlock))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceFragmentShaderInterlockFeaturesEXT where
-  peekCStruct p = do
-    fragmentShaderSampleInterlock <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    fragmentShaderPixelInterlock <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    fragmentShaderShadingRateInterlock <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    pure $ PhysicalDeviceFragmentShaderInterlockFeaturesEXT
-             (bool32ToBool fragmentShaderSampleInterlock) (bool32ToBool fragmentShaderPixelInterlock) (bool32ToBool fragmentShaderShadingRateInterlock)
-
-instance Storable PhysicalDeviceFragmentShaderInterlockFeaturesEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceFragmentShaderInterlockFeaturesEXT where
-  zero = PhysicalDeviceFragmentShaderInterlockFeaturesEXT
-           zero
-           zero
-           zero
-
-
-type EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION"
-pattern EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION = 1
-
-
-type EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME = "VK_EXT_fragment_shader_interlock"
-
--- No documentation found for TopLevel "VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME"
-pattern EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME = "VK_EXT_fragment_shader_interlock"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock  (PhysicalDeviceFragmentShaderInterlockFeaturesEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceFragmentShaderInterlockFeaturesEXT
-
-instance ToCStruct PhysicalDeviceFragmentShaderInterlockFeaturesEXT
-instance Show PhysicalDeviceFragmentShaderInterlockFeaturesEXT
-
-instance FromCStruct PhysicalDeviceFragmentShaderInterlockFeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs
+++ /dev/null
@@ -1,629 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive  ( getPhysicalDeviceSurfacePresentModes2EXT
-                                                                , getDeviceGroupSurfacePresentModes2EXT
-                                                                , acquireFullScreenExclusiveModeEXT
-                                                                , releaseFullScreenExclusiveModeEXT
-                                                                , SurfaceFullScreenExclusiveInfoEXT(..)
-                                                                , SurfaceFullScreenExclusiveWin32InfoEXT(..)
-                                                                , SurfaceCapabilitiesFullScreenExclusiveEXT(..)
-                                                                , FullScreenExclusiveEXT( FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT
-                                                                                        , FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT
-                                                                                        , FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT
-                                                                                        , FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
-                                                                                        , ..
-                                                                                        )
-                                                                , EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION
-                                                                , pattern EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION
-                                                                , EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME
-                                                                , pattern EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME
-                                                                , SurfaceKHR(..)
-                                                                , SwapchainKHR(..)
-                                                                , PhysicalDeviceSurfaceInfo2KHR(..)
-                                                                , PresentModeKHR(..)
-                                                                , DeviceGroupPresentModeFlagBitsKHR(..)
-                                                                , DeviceGroupPresentModeFlagsKHR
-                                                                , HMONITOR
-                                                                ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkAcquireFullScreenExclusiveModeEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeviceGroupSurfacePresentModes2EXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkReleaseFullScreenExclusiveModeEXT))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagsKHR)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Extensions.WSITypes (HMONITOR)
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfacePresentModes2EXT))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (PhysicalDeviceSurfaceInfo2KHR)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (PresentModeKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (PresentModeKHR(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagsKHR)
-import Graphics.Vulkan.Extensions.WSITypes (HMONITOR)
-import Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (PhysicalDeviceSurfaceInfo2KHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (PresentModeKHR(..))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSurfacePresentModes2EXT
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr Word32 -> Ptr PresentModeKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr Word32 -> Ptr PresentModeKHR -> IO Result
-
--- | vkGetPhysicalDeviceSurfacePresentModes2EXT - Query supported
--- presentation modes
---
--- = 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.createSwapchainKHR'.
---
--- -   @pSurfaceInfo@ is a pointer to a
---     'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'
---     structure describing the surface and other fixed parameters that
---     would be consumed by
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
---
--- -   @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
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PresentModeKHR'
---     values, indicating the supported presentation modes.
---
--- = Description
---
--- 'getPhysicalDeviceSurfacePresentModes2EXT' behaves similarly to
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR',
--- with the ability to specify extended inputs via chained input
--- structures.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid
---     'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'
---     structure
---
--- -   @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@
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PresentModeKHR'
---     values
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PresentModeKHR'
-getPhysicalDeviceSurfacePresentModes2EXT :: forall a io . (PokeChain a, MonadIO io) => PhysicalDevice -> PhysicalDeviceSurfaceInfo2KHR a -> io (Result, ("presentModes" ::: Vector PresentModeKHR))
-getPhysicalDeviceSurfacePresentModes2EXT physicalDevice surfaceInfo = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSurfacePresentModes2EXT' = mkVkGetPhysicalDeviceSurfacePresentModes2EXT (pVkGetPhysicalDeviceSurfacePresentModes2EXT (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pSurfaceInfo <- ContT $ withCStruct (surfaceInfo)
-  pPPresentModeCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceSurfacePresentModes2EXT' physicalDevice' pSurfaceInfo (pPPresentModeCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPresentModeCount <- lift $ peek @Word32 pPPresentModeCount
-  pPPresentModes <- ContT $ bracket (callocBytes @PresentModeKHR ((fromIntegral (pPresentModeCount)) * 4)) free
-  r' <- lift $ vkGetPhysicalDeviceSurfacePresentModes2EXT' physicalDevice' pSurfaceInfo (pPPresentModeCount) (pPPresentModes)
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPresentModeCount' <- lift $ peek @Word32 pPPresentModeCount
-  pPresentModes' <- lift $ generateM (fromIntegral (pPresentModeCount')) (\i -> peek @PresentModeKHR ((pPPresentModes `advancePtrBytes` (4 * (i)) :: Ptr PresentModeKHR)))
-  pure $ ((r'), pPresentModes')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceGroupSurfacePresentModes2EXT
-  :: FunPtr (Ptr Device_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr DeviceGroupPresentModeFlagsKHR -> IO Result) -> Ptr Device_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr DeviceGroupPresentModeFlagsKHR -> IO Result
-
--- | vkGetDeviceGroupSurfacePresentModes2EXT - Query device group present
--- capabilities for a surface
---
--- = Parameters
---
--- -   @device@ is the logical device.
---
--- -   @pSurfaceInfo@ is a pointer to a
---     'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'
---     structure describing the surface and other fixed parameters that
---     would be consumed by
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
---
--- -   @pModes@ is a pointer to a
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupPresentModeFlagsKHR'
---     in which the supported device group present modes for the surface
---     are returned.
---
--- = Description
---
--- 'getDeviceGroupSurfacePresentModes2EXT' behaves similarly to
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.getDeviceGroupSurfacePresentModesKHR',
--- with the ability to specify extended inputs via chained input
--- structures.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupPresentModeFlagsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'
-getDeviceGroupSurfacePresentModes2EXT :: forall a io . (PokeChain a, MonadIO io) => Device -> PhysicalDeviceSurfaceInfo2KHR a -> io (("modes" ::: DeviceGroupPresentModeFlagsKHR))
-getDeviceGroupSurfacePresentModes2EXT device surfaceInfo = liftIO . evalContT $ do
-  let vkGetDeviceGroupSurfacePresentModes2EXT' = mkVkGetDeviceGroupSurfacePresentModes2EXT (pVkGetDeviceGroupSurfacePresentModes2EXT (deviceCmds (device :: Device)))
-  pSurfaceInfo <- ContT $ withCStruct (surfaceInfo)
-  pPModes <- ContT $ bracket (callocBytes @DeviceGroupPresentModeFlagsKHR 4) free
-  r <- lift $ vkGetDeviceGroupSurfacePresentModes2EXT' (deviceHandle (device)) pSurfaceInfo (pPModes)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pModes <- lift $ peek @DeviceGroupPresentModeFlagsKHR pPModes
-  pure $ (pModes)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkAcquireFullScreenExclusiveModeEXT
-  :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result) -> Ptr Device_T -> SwapchainKHR -> IO Result
-
--- | vkAcquireFullScreenExclusiveModeEXT - Acquire full-screen exclusive mode
--- for a swapchain
---
--- = Parameters
---
--- -   @device@ is the device associated with @swapchain@.
---
--- -   @swapchain@ is the swapchain to acquire exclusive full-screen access
---     for.
---
--- == Valid Usage
---
--- -   @swapchain@ /must/ not be in the retired state
---
--- -   @swapchain@ /must/ be a swapchain created with a
---     'SurfaceFullScreenExclusiveInfoEXT' structure, with
---     @fullScreenExclusive@ set to
---     'FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT'
---
--- -   @swapchain@ /must/ not currently have exclusive full-screen access
---
--- A return value of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
--- indicates that the @swapchain@ successfully acquired exclusive
--- full-screen access. The swapchain will retain this exclusivity until
--- either the application releases exclusive full-screen access with
--- 'releaseFullScreenExclusiveModeEXT', destroys the swapchain, or if any
--- of the swapchain commands return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
--- indicating that the mode was lost because of platform-specific changes.
---
--- If the swapchain was unable to acquire exclusive full-screen access to
--- the display then
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED' is
--- returned. An application /can/ attempt to acquire exclusive full-screen
--- access again for the same swapchain even if this command fails, or if
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
--- has been returned by a swapchain command.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @swapchain@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handle
---
--- -   Both of @device@, and @swapchain@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-acquireFullScreenExclusiveModeEXT :: forall io . MonadIO io => Device -> SwapchainKHR -> io ()
-acquireFullScreenExclusiveModeEXT device swapchain = liftIO $ do
-  let vkAcquireFullScreenExclusiveModeEXT' = mkVkAcquireFullScreenExclusiveModeEXT (pVkAcquireFullScreenExclusiveModeEXT (deviceCmds (device :: Device)))
-  r <- vkAcquireFullScreenExclusiveModeEXT' (deviceHandle (device)) (swapchain)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkReleaseFullScreenExclusiveModeEXT
-  :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result) -> Ptr Device_T -> SwapchainKHR -> IO Result
-
--- | vkReleaseFullScreenExclusiveModeEXT - Release full-screen exclusive mode
--- from a swapchain
---
--- = Parameters
---
--- -   @device@ is the device associated with @swapchain@.
---
--- -   @swapchain@ is the swapchain to release exclusive full-screen access
---     from.
---
--- = Description
---
--- Note
---
--- Applications will not be able to present to @swapchain@ after this call
--- until exclusive full-screen access is reacquired. This is usually useful
--- to handle when an application is minimised or otherwise intends to stop
--- presenting for a time.
---
--- == Valid Usage
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-releaseFullScreenExclusiveModeEXT :: forall io . MonadIO io => Device -> SwapchainKHR -> io ()
-releaseFullScreenExclusiveModeEXT device swapchain = liftIO $ do
-  let vkReleaseFullScreenExclusiveModeEXT' = mkVkReleaseFullScreenExclusiveModeEXT (pVkReleaseFullScreenExclusiveModeEXT (deviceCmds (device :: Device)))
-  r <- vkReleaseFullScreenExclusiveModeEXT' (deviceHandle (device)) (swapchain)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkSurfaceFullScreenExclusiveInfoEXT - Structure specifying the preferred
--- full-screen transition behavior
---
--- = Description
---
--- If this structure is not present, @fullScreenExclusive@ is considered to
--- be 'FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'FullScreenExclusiveEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SurfaceFullScreenExclusiveInfoEXT = SurfaceFullScreenExclusiveInfoEXT
-  { -- | @fullScreenExclusive@ /must/ be a valid 'FullScreenExclusiveEXT' value
-    fullScreenExclusive :: FullScreenExclusiveEXT }
-  deriving (Typeable)
-deriving instance Show SurfaceFullScreenExclusiveInfoEXT
-
-instance ToCStruct SurfaceFullScreenExclusiveInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SurfaceFullScreenExclusiveInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr FullScreenExclusiveEXT)) (fullScreenExclusive)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr FullScreenExclusiveEXT)) (zero)
-    f
-
-instance FromCStruct SurfaceFullScreenExclusiveInfoEXT where
-  peekCStruct p = do
-    fullScreenExclusive <- peek @FullScreenExclusiveEXT ((p `plusPtr` 16 :: Ptr FullScreenExclusiveEXT))
-    pure $ SurfaceFullScreenExclusiveInfoEXT
-             fullScreenExclusive
-
-instance Storable SurfaceFullScreenExclusiveInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SurfaceFullScreenExclusiveInfoEXT where
-  zero = SurfaceFullScreenExclusiveInfoEXT
-           zero
-
-
--- | VkSurfaceFullScreenExclusiveWin32InfoEXT - Structure specifying
--- additional creation parameters specific to Win32 fullscreen exclusive
--- mode
---
--- = Description
---
--- Note
---
--- If @hmonitor@ is invalidated (e.g. the monitor is unplugged) during the
--- lifetime of a swapchain created with this structure, operations on that
--- swapchain will return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'.
---
--- Note
---
--- It is the responsibility of the application to change the display
--- settings of the targeted Win32 display using the appropriate platform
--- APIs. Such changes /may/ alter the surface capabilities reported for the
--- created surface.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SurfaceFullScreenExclusiveWin32InfoEXT = SurfaceFullScreenExclusiveWin32InfoEXT
-  { -- | @hmonitor@ /must/ be a valid
-    -- 'Graphics.Vulkan.Extensions.WSITypes.HMONITOR'
-    hmonitor :: HMONITOR }
-  deriving (Typeable)
-deriving instance Show SurfaceFullScreenExclusiveWin32InfoEXT
-
-instance ToCStruct SurfaceFullScreenExclusiveWin32InfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SurfaceFullScreenExclusiveWin32InfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr HMONITOR)) (hmonitor)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr HMONITOR)) (zero)
-    f
-
-instance FromCStruct SurfaceFullScreenExclusiveWin32InfoEXT where
-  peekCStruct p = do
-    hmonitor <- peek @HMONITOR ((p `plusPtr` 16 :: Ptr HMONITOR))
-    pure $ SurfaceFullScreenExclusiveWin32InfoEXT
-             hmonitor
-
-instance Storable SurfaceFullScreenExclusiveWin32InfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SurfaceFullScreenExclusiveWin32InfoEXT where
-  zero = SurfaceFullScreenExclusiveWin32InfoEXT
-           zero
-
-
--- | VkSurfaceCapabilitiesFullScreenExclusiveEXT - Structure describing full
--- screen exclusive capabilities of a surface
---
--- = Description
---
--- This structure /can/ be included in the @pNext@ chain of
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR'
--- to determine support for exclusive full-screen access. If
--- @fullScreenExclusiveSupported@ is
--- 'Graphics.Vulkan.Core10.BaseType.FALSE', it indicates that exclusive
--- full-screen access is not obtainable for this surface.
---
--- Applications /must/ not attempt to create swapchains with
--- 'FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT' set if
--- @fullScreenExclusiveSupported@ is
--- 'Graphics.Vulkan.Core10.BaseType.FALSE'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SurfaceCapabilitiesFullScreenExclusiveEXT = SurfaceCapabilitiesFullScreenExclusiveEXT
-  { -- No documentation found for Nested "VkSurfaceCapabilitiesFullScreenExclusiveEXT" "fullScreenExclusiveSupported"
-    fullScreenExclusiveSupported :: Bool }
-  deriving (Typeable)
-deriving instance Show SurfaceCapabilitiesFullScreenExclusiveEXT
-
-instance ToCStruct SurfaceCapabilitiesFullScreenExclusiveEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SurfaceCapabilitiesFullScreenExclusiveEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (fullScreenExclusiveSupported))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct SurfaceCapabilitiesFullScreenExclusiveEXT where
-  peekCStruct p = do
-    fullScreenExclusiveSupported <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ SurfaceCapabilitiesFullScreenExclusiveEXT
-             (bool32ToBool fullScreenExclusiveSupported)
-
-instance Storable SurfaceCapabilitiesFullScreenExclusiveEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SurfaceCapabilitiesFullScreenExclusiveEXT where
-  zero = SurfaceCapabilitiesFullScreenExclusiveEXT
-           zero
-
-
--- | VkFullScreenExclusiveEXT - Hint values an application can specify
--- affecting full-screen transition behavior
---
--- = See Also
---
--- 'SurfaceFullScreenExclusiveInfoEXT'
-newtype FullScreenExclusiveEXT = FullScreenExclusiveEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT' indicates the implementation
--- /should/ determine the appropriate full-screen method by whatever means
--- it deems appropriate.
-pattern FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = FullScreenExclusiveEXT 0
--- | 'FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT' indicates the implementation /may/
--- use full-screen exclusive mechanisms when available. Such mechanisms
--- /may/ result in better performance and\/or the availability of different
--- presentation capabilities, but /may/ require a more disruptive
--- transition during swapchain initialization, first presentation and\/or
--- destruction.
-pattern FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = FullScreenExclusiveEXT 1
--- | 'FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT' indicates the implementation
--- /should/ avoid using full-screen mechanisms which rely on disruptive
--- transitions.
-pattern FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = FullScreenExclusiveEXT 2
--- | 'FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT' indicates the
--- application will manage full-screen exclusive mode by using the
--- 'acquireFullScreenExclusiveModeEXT' and
--- 'releaseFullScreenExclusiveModeEXT' commands.
-pattern FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = FullScreenExclusiveEXT 3
-{-# complete FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT,
-             FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT,
-             FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT,
-             FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT :: FullScreenExclusiveEXT #-}
-
-instance Show FullScreenExclusiveEXT where
-  showsPrec p = \case
-    FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT -> showString "FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT"
-    FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT -> showString "FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT"
-    FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT -> showString "FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT"
-    FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT -> showString "FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT"
-    FullScreenExclusiveEXT x -> showParen (p >= 11) (showString "FullScreenExclusiveEXT " . showsPrec 11 x)
-
-instance Read FullScreenExclusiveEXT where
-  readPrec = parens (choose [("FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT", pure FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT)
-                            , ("FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT", pure FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT)
-                            , ("FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT", pure FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT)
-                            , ("FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT", pure FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "FullScreenExclusiveEXT")
-                       v <- step readPrec
-                       pure (FullScreenExclusiveEXT v)))
-
-
-type EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION = 4
-
--- No documentation found for TopLevel "VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION"
-pattern EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION = 4
-
-
-type EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME = "VK_EXT_full_screen_exclusive"
-
--- No documentation found for TopLevel "VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME"
-pattern EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME = "VK_EXT_full_screen_exclusive"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive  ( SurfaceCapabilitiesFullScreenExclusiveEXT
-                                                                , SurfaceFullScreenExclusiveInfoEXT
-                                                                , SurfaceFullScreenExclusiveWin32InfoEXT
-                                                                ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data SurfaceCapabilitiesFullScreenExclusiveEXT
-
-instance ToCStruct SurfaceCapabilitiesFullScreenExclusiveEXT
-instance Show SurfaceCapabilitiesFullScreenExclusiveEXT
-
-instance FromCStruct SurfaceCapabilitiesFullScreenExclusiveEXT
-
-
-data SurfaceFullScreenExclusiveInfoEXT
-
-instance ToCStruct SurfaceFullScreenExclusiveInfoEXT
-instance Show SurfaceFullScreenExclusiveInfoEXT
-
-instance FromCStruct SurfaceFullScreenExclusiveInfoEXT
-
-
-data SurfaceFullScreenExclusiveWin32InfoEXT
-
-instance ToCStruct SurfaceFullScreenExclusiveWin32InfoEXT
-instance Show SurfaceFullScreenExclusiveWin32InfoEXT
-
-instance FromCStruct SurfaceFullScreenExclusiveWin32InfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs
+++ /dev/null
@@ -1,161 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_global_priority  ( DeviceQueueGlobalPriorityCreateInfoEXT(..)
-                                                          , QueueGlobalPriorityEXT( QUEUE_GLOBAL_PRIORITY_LOW_EXT
-                                                                                  , QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT
-                                                                                  , QUEUE_GLOBAL_PRIORITY_HIGH_EXT
-                                                                                  , QUEUE_GLOBAL_PRIORITY_REALTIME_EXT
-                                                                                  , ..
-                                                                                  )
-                                                          , EXT_GLOBAL_PRIORITY_SPEC_VERSION
-                                                          , pattern EXT_GLOBAL_PRIORITY_SPEC_VERSION
-                                                          , EXT_GLOBAL_PRIORITY_EXTENSION_NAME
-                                                          , pattern EXT_GLOBAL_PRIORITY_EXTENSION_NAME
-                                                          ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT))
--- | VkDeviceQueueGlobalPriorityCreateInfoEXT - Specify a system wide
--- priority
---
--- = Description
---
--- A queue created without specifying
--- 'DeviceQueueGlobalPriorityCreateInfoEXT' will default to
--- 'QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'QueueGlobalPriorityEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceQueueGlobalPriorityCreateInfoEXT = DeviceQueueGlobalPriorityCreateInfoEXT
-  { -- | @globalPriority@ /must/ be a valid 'QueueGlobalPriorityEXT' value
-    globalPriority :: QueueGlobalPriorityEXT }
-  deriving (Typeable)
-deriving instance Show DeviceQueueGlobalPriorityCreateInfoEXT
-
-instance ToCStruct DeviceQueueGlobalPriorityCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceQueueGlobalPriorityCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr QueueGlobalPriorityEXT)) (globalPriority)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr QueueGlobalPriorityEXT)) (zero)
-    f
-
-instance FromCStruct DeviceQueueGlobalPriorityCreateInfoEXT where
-  peekCStruct p = do
-    globalPriority <- peek @QueueGlobalPriorityEXT ((p `plusPtr` 16 :: Ptr QueueGlobalPriorityEXT))
-    pure $ DeviceQueueGlobalPriorityCreateInfoEXT
-             globalPriority
-
-instance Storable DeviceQueueGlobalPriorityCreateInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeviceQueueGlobalPriorityCreateInfoEXT where
-  zero = DeviceQueueGlobalPriorityCreateInfoEXT
-           zero
-
-
--- | VkQueueGlobalPriorityEXT - Values specifying a system-wide queue
--- priority
---
--- = Description
---
--- Priority values are sorted in ascending order. A comparison operation on
--- the enum values can be used to determine the priority order.
---
--- = See Also
---
--- 'DeviceQueueGlobalPriorityCreateInfoEXT'
-newtype QueueGlobalPriorityEXT = QueueGlobalPriorityEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
--- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
-
--- | 'QUEUE_GLOBAL_PRIORITY_LOW_EXT' is below the system default. Useful for
--- non-interactive tasks.
-pattern QUEUE_GLOBAL_PRIORITY_LOW_EXT = QueueGlobalPriorityEXT 128
--- | 'QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT' is the system default priority.
-pattern QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = QueueGlobalPriorityEXT 256
--- | 'QUEUE_GLOBAL_PRIORITY_HIGH_EXT' is above the system default.
-pattern QUEUE_GLOBAL_PRIORITY_HIGH_EXT = QueueGlobalPriorityEXT 512
--- | 'QUEUE_GLOBAL_PRIORITY_REALTIME_EXT' is the highest priority. Useful for
--- critical tasks.
-pattern QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = QueueGlobalPriorityEXT 1024
-{-# complete QUEUE_GLOBAL_PRIORITY_LOW_EXT,
-             QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT,
-             QUEUE_GLOBAL_PRIORITY_HIGH_EXT,
-             QUEUE_GLOBAL_PRIORITY_REALTIME_EXT :: QueueGlobalPriorityEXT #-}
-
-instance Show QueueGlobalPriorityEXT where
-  showsPrec p = \case
-    QUEUE_GLOBAL_PRIORITY_LOW_EXT -> showString "QUEUE_GLOBAL_PRIORITY_LOW_EXT"
-    QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT -> showString "QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT"
-    QUEUE_GLOBAL_PRIORITY_HIGH_EXT -> showString "QUEUE_GLOBAL_PRIORITY_HIGH_EXT"
-    QUEUE_GLOBAL_PRIORITY_REALTIME_EXT -> showString "QUEUE_GLOBAL_PRIORITY_REALTIME_EXT"
-    QueueGlobalPriorityEXT x -> showParen (p >= 11) (showString "QueueGlobalPriorityEXT " . showsPrec 11 x)
-
-instance Read QueueGlobalPriorityEXT where
-  readPrec = parens (choose [("QUEUE_GLOBAL_PRIORITY_LOW_EXT", pure QUEUE_GLOBAL_PRIORITY_LOW_EXT)
-                            , ("QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT", pure QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT)
-                            , ("QUEUE_GLOBAL_PRIORITY_HIGH_EXT", pure QUEUE_GLOBAL_PRIORITY_HIGH_EXT)
-                            , ("QUEUE_GLOBAL_PRIORITY_REALTIME_EXT", pure QUEUE_GLOBAL_PRIORITY_REALTIME_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "QueueGlobalPriorityEXT")
-                       v <- step readPrec
-                       pure (QueueGlobalPriorityEXT v)))
-
-
-type EXT_GLOBAL_PRIORITY_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION"
-pattern EXT_GLOBAL_PRIORITY_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_GLOBAL_PRIORITY_SPEC_VERSION = 2
-
-
-type EXT_GLOBAL_PRIORITY_EXTENSION_NAME = "VK_EXT_global_priority"
-
--- No documentation found for TopLevel "VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME"
-pattern EXT_GLOBAL_PRIORITY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_GLOBAL_PRIORITY_EXTENSION_NAME = "VK_EXT_global_priority"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_global_priority  (DeviceQueueGlobalPriorityCreateInfoEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DeviceQueueGlobalPriorityCreateInfoEXT
-
-instance ToCStruct DeviceQueueGlobalPriorityCreateInfoEXT
-instance Show DeviceQueueGlobalPriorityCreateInfoEXT
-
-instance FromCStruct DeviceQueueGlobalPriorityCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
+++ /dev/null
@@ -1,263 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata  ( setHdrMetadataEXT
-                                                       , XYColorEXT(..)
-                                                       , HdrMetadataEXT(..)
-                                                       , EXT_HDR_METADATA_SPEC_VERSION
-                                                       , pattern EXT_HDR_METADATA_SPEC_VERSION
-                                                       , EXT_HDR_METADATA_EXTENSION_NAME
-                                                       , pattern EXT_HDR_METADATA_EXTENSION_NAME
-                                                       , SwapchainKHR(..)
-                                                       ) where
-
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkSetHdrMetadataEXT))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_HDR_METADATA_EXT))
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkSetHdrMetadataEXT
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr SwapchainKHR -> Ptr HdrMetadataEXT -> IO ()) -> Ptr Device_T -> Word32 -> Ptr SwapchainKHR -> Ptr HdrMetadataEXT -> IO ()
-
--- | vkSetHdrMetadataEXT - function to set Hdr metadata
---
--- = 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 an array of @swapchainCount@
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handles.
---
--- -   @pMetadata@ is a pointer to an array of @swapchainCount@
---     'HdrMetadataEXT' structures.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pSwapchains@ /must/ be a valid pointer to an array of
---     @swapchainCount@ valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handles
---
--- -   @pMetadata@ /must/ be a valid pointer to an array of
---     @swapchainCount@ valid 'HdrMetadataEXT' 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
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'HdrMetadataEXT',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-setHdrMetadataEXT :: forall io . MonadIO io => Device -> ("swapchains" ::: Vector SwapchainKHR) -> ("metadata" ::: Vector HdrMetadataEXT) -> io ()
-setHdrMetadataEXT device swapchains metadata = liftIO . evalContT $ do
-  let vkSetHdrMetadataEXT' = mkVkSetHdrMetadataEXT (pVkSetHdrMetadataEXT (deviceCmds (device :: Device)))
-  let pSwapchainsLength = Data.Vector.length $ (swapchains)
-  let pMetadataLength = Data.Vector.length $ (metadata)
-  lift $ unless (pMetadataLength == pSwapchainsLength) $
-    throwIO $ IOError Nothing InvalidArgument "" "pMetadata and pSwapchains must have the same length" Nothing Nothing
-  pPSwapchains <- ContT $ allocaBytesAligned @SwapchainKHR ((Data.Vector.length (swapchains)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPSwapchains `plusPtr` (8 * (i)) :: Ptr SwapchainKHR) (e)) (swapchains)
-  pPMetadata <- ContT $ allocaBytesAligned @HdrMetadataEXT ((Data.Vector.length (metadata)) * 64) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMetadata `plusPtr` (64 * (i)) :: Ptr HdrMetadataEXT) (e) . ($ ())) (metadata)
-  lift $ vkSetHdrMetadataEXT' (deviceHandle (device)) ((fromIntegral pSwapchainsLength :: Word32)) (pPSwapchains) (pPMetadata)
-  pure $ ()
-
-
--- | VkXYColorEXT - structure to specify X,Y chromaticity coordinates
---
--- = See Also
---
--- 'HdrMetadataEXT'
-data XYColorEXT = XYColorEXT
-  { -- No documentation found for Nested "VkXYColorEXT" "x"
-    x :: Float
-  , -- No documentation found for Nested "VkXYColorEXT" "y"
-    y :: Float
-  }
-  deriving (Typeable)
-deriving instance Show XYColorEXT
-
-instance ToCStruct XYColorEXT where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p XYColorEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (x))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (y))
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
-    f
-
-instance FromCStruct XYColorEXT where
-  peekCStruct p = do
-    x <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
-    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
-    pure $ XYColorEXT
-             ((\(CFloat a) -> a) x) ((\(CFloat a) -> a) y)
-
-instance Storable XYColorEXT where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero XYColorEXT where
-  zero = XYColorEXT
-           zero
-           zero
-
-
--- | VkHdrMetadataEXT - structure to specify Hdr metadata
---
--- == Valid Usage (Implicit)
---
--- Note
---
--- The validity and use of this data is outside the scope of Vulkan.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'XYColorEXT', 'setHdrMetadataEXT'
-data HdrMetadataEXT = HdrMetadataEXT
-  { -- | @displayPrimaryRed@ is the mastering display’s red primary in
-    -- chromaticity coordinates
-    displayPrimaryRed :: XYColorEXT
-  , -- | @displayPrimaryGreen@ is the mastering display’s green primary in
-    -- chromaticity coordinates
-    displayPrimaryGreen :: XYColorEXT
-  , -- | @displayPrimaryBlue@ is the mastering display’s blue primary in
-    -- chromaticity coordinates
-    displayPrimaryBlue :: XYColorEXT
-  , -- | @whitePoint@ is the mastering display’s white-point in chromaticity
-    -- coordinates
-    whitePoint :: XYColorEXT
-  , -- | @maxLuminance@ is the maximum luminance of the mastering display in nits
-    maxLuminance :: Float
-  , -- | @minLuminance@ is the minimum luminance of the mastering display in nits
-    minLuminance :: Float
-  , -- | @maxContentLightLevel@ is content’s maximum luminance in nits
-    maxContentLightLevel :: Float
-  , -- | @maxFrameAverageLightLevel@ is the maximum frame average light level in
-    -- nits
-    maxFrameAverageLightLevel :: Float
-  }
-  deriving (Typeable)
-deriving instance Show HdrMetadataEXT
-
-instance ToCStruct HdrMetadataEXT where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p HdrMetadataEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_HDR_METADATA_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr XYColorEXT)) (displayPrimaryRed) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr XYColorEXT)) (displayPrimaryGreen) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr XYColorEXT)) (displayPrimaryBlue) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr XYColorEXT)) (whitePoint) . ($ ())
-    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (maxLuminance))
-    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (minLuminance))
-    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (maxContentLightLevel))
-    lift $ poke ((p `plusPtr` 60 :: Ptr CFloat)) (CFloat (maxFrameAverageLightLevel))
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_HDR_METADATA_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr XYColorEXT)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr XYColorEXT)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr XYColorEXT)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr XYColorEXT)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 60 :: Ptr CFloat)) (CFloat (zero))
-    lift $ f
-
-instance FromCStruct HdrMetadataEXT where
-  peekCStruct p = do
-    displayPrimaryRed <- peekCStruct @XYColorEXT ((p `plusPtr` 16 :: Ptr XYColorEXT))
-    displayPrimaryGreen <- peekCStruct @XYColorEXT ((p `plusPtr` 24 :: Ptr XYColorEXT))
-    displayPrimaryBlue <- peekCStruct @XYColorEXT ((p `plusPtr` 32 :: Ptr XYColorEXT))
-    whitePoint <- peekCStruct @XYColorEXT ((p `plusPtr` 40 :: Ptr XYColorEXT))
-    maxLuminance <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat))
-    minLuminance <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))
-    maxContentLightLevel <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat))
-    maxFrameAverageLightLevel <- peek @CFloat ((p `plusPtr` 60 :: Ptr CFloat))
-    pure $ HdrMetadataEXT
-             displayPrimaryRed displayPrimaryGreen displayPrimaryBlue whitePoint ((\(CFloat a) -> a) maxLuminance) ((\(CFloat a) -> a) minLuminance) ((\(CFloat a) -> a) maxContentLightLevel) ((\(CFloat a) -> a) maxFrameAverageLightLevel)
-
-instance Zero HdrMetadataEXT where
-  zero = HdrMetadataEXT
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
-type EXT_HDR_METADATA_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_HDR_METADATA_SPEC_VERSION"
-pattern EXT_HDR_METADATA_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_HDR_METADATA_SPEC_VERSION = 2
-
-
-type EXT_HDR_METADATA_EXTENSION_NAME = "VK_EXT_hdr_metadata"
-
--- No documentation found for TopLevel "VK_EXT_HDR_METADATA_EXTENSION_NAME"
-pattern EXT_HDR_METADATA_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_HDR_METADATA_EXTENSION_NAME = "VK_EXT_hdr_metadata"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata  ( HdrMetadataEXT
-                                                       , XYColorEXT
-                                                       ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data HdrMetadataEXT
-
-instance ToCStruct HdrMetadataEXT
-instance Show HdrMetadataEXT
-
-instance FromCStruct HdrMetadataEXT
-
-
-data XYColorEXT
-
-instance ToCStruct XYColorEXT
-instance Show XYColorEXT
-
-instance FromCStruct XYColorEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_headless_surface.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_headless_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_headless_surface.hs
+++ /dev/null
@@ -1,221 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_headless_surface  ( createHeadlessSurfaceEXT
-                                                           , HeadlessSurfaceCreateInfoEXT(..)
-                                                           , HeadlessSurfaceCreateFlagsEXT(..)
-                                                           , EXT_HEADLESS_SURFACE_SPEC_VERSION
-                                                           , pattern EXT_HEADLESS_SURFACE_SPEC_VERSION
-                                                           , EXT_HEADLESS_SURFACE_EXTENSION_NAME
-                                                           , pattern EXT_HEADLESS_SURFACE_EXTENSION_NAME
-                                                           , SurfaceKHR(..)
-                                                           ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateHeadlessSurfaceEXT))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateHeadlessSurfaceEXT
-  :: FunPtr (Ptr Instance_T -> Ptr HeadlessSurfaceCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr HeadlessSurfaceCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateHeadlessSurfaceEXT - Create a headless
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' object
---
--- = Parameters
---
--- -   @instance@ is the instance to associate the surface with.
---
--- -   @pCreateInfo@ is a pointer to a 'HeadlessSurfaceCreateInfoEXT'
---     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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'HeadlessSurfaceCreateInfoEXT' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'HeadlessSurfaceCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-createHeadlessSurfaceEXT :: forall io . MonadIO io => Instance -> HeadlessSurfaceCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createHeadlessSurfaceEXT instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateHeadlessSurfaceEXT' = mkVkCreateHeadlessSurfaceEXT (pVkCreateHeadlessSurfaceEXT (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateHeadlessSurfaceEXT' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
--- | VkHeadlessSurfaceCreateInfoEXT - Structure specifying parameters of a
--- newly created headless surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'HeadlessSurfaceCreateFlagsEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createHeadlessSurfaceEXT'
-data HeadlessSurfaceCreateInfoEXT = HeadlessSurfaceCreateInfoEXT
-  { -- | @flags@ /must/ be @0@
-    flags :: HeadlessSurfaceCreateFlagsEXT }
-  deriving (Typeable)
-deriving instance Show HeadlessSurfaceCreateInfoEXT
-
-instance ToCStruct HeadlessSurfaceCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p HeadlessSurfaceCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr HeadlessSurfaceCreateFlagsEXT)) (flags)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct HeadlessSurfaceCreateInfoEXT where
-  peekCStruct p = do
-    flags <- peek @HeadlessSurfaceCreateFlagsEXT ((p `plusPtr` 16 :: Ptr HeadlessSurfaceCreateFlagsEXT))
-    pure $ HeadlessSurfaceCreateInfoEXT
-             flags
-
-instance Storable HeadlessSurfaceCreateInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero HeadlessSurfaceCreateInfoEXT where
-  zero = HeadlessSurfaceCreateInfoEXT
-           zero
-
-
--- No documentation found for TopLevel "VkHeadlessSurfaceCreateFlagsEXT"
-newtype HeadlessSurfaceCreateFlagsEXT = HeadlessSurfaceCreateFlagsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show HeadlessSurfaceCreateFlagsEXT where
-  showsPrec p = \case
-    HeadlessSurfaceCreateFlagsEXT x -> showParen (p >= 11) (showString "HeadlessSurfaceCreateFlagsEXT 0x" . showHex x)
-
-instance Read HeadlessSurfaceCreateFlagsEXT where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "HeadlessSurfaceCreateFlagsEXT")
-                       v <- step readPrec
-                       pure (HeadlessSurfaceCreateFlagsEXT v)))
-
-
-type EXT_HEADLESS_SURFACE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_HEADLESS_SURFACE_SPEC_VERSION"
-pattern EXT_HEADLESS_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_HEADLESS_SURFACE_SPEC_VERSION = 1
-
-
-type EXT_HEADLESS_SURFACE_EXTENSION_NAME = "VK_EXT_headless_surface"
-
--- No documentation found for TopLevel "VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME"
-pattern EXT_HEADLESS_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_HEADLESS_SURFACE_EXTENSION_NAME = "VK_EXT_headless_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_headless_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_headless_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_headless_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_headless_surface  (HeadlessSurfaceCreateInfoEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data HeadlessSurfaceCreateInfoEXT
-
-instance ToCStruct HeadlessSurfaceCreateInfoEXT
-instance Show HeadlessSurfaceCreateInfoEXT
-
-instance FromCStruct HeadlessSurfaceCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_host_query_reset.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_host_query_reset.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_host_query_reset.hs
+++ /dev/null
@@ -1,39 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_host_query_reset  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT
-                                                           , resetQueryPoolEXT
-                                                           , PhysicalDeviceHostQueryResetFeaturesEXT
-                                                           , EXT_HOST_QUERY_RESET_SPEC_VERSION
-                                                           , pattern EXT_HOST_QUERY_RESET_SPEC_VERSION
-                                                           , EXT_HOST_QUERY_RESET_EXTENSION_NAME
-                                                           , pattern EXT_HOST_QUERY_RESET_EXTENSION_NAME
-                                                           ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (resetQueryPool)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES
-
-
--- No documentation found for TopLevel "vkResetQueryPoolEXT"
-resetQueryPoolEXT = resetQueryPool
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceHostQueryResetFeaturesEXT"
-type PhysicalDeviceHostQueryResetFeaturesEXT = PhysicalDeviceHostQueryResetFeatures
-
-
-type EXT_HOST_QUERY_RESET_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_HOST_QUERY_RESET_SPEC_VERSION"
-pattern EXT_HOST_QUERY_RESET_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_HOST_QUERY_RESET_SPEC_VERSION = 1
-
-
-type EXT_HOST_QUERY_RESET_EXTENSION_NAME = "VK_EXT_host_query_reset"
-
--- No documentation found for TopLevel "VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME"
-pattern EXT_HOST_QUERY_RESET_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_HOST_QUERY_RESET_EXTENSION_NAME = "VK_EXT_host_query_reset"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs
+++ /dev/null
@@ -1,656 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier  ( getImageDrmFormatModifierPropertiesEXT
-                                                                    , DrmFormatModifierPropertiesListEXT(..)
-                                                                    , DrmFormatModifierPropertiesEXT(..)
-                                                                    , PhysicalDeviceImageDrmFormatModifierInfoEXT(..)
-                                                                    , ImageDrmFormatModifierListCreateInfoEXT(..)
-                                                                    , ImageDrmFormatModifierExplicitCreateInfoEXT(..)
-                                                                    , ImageDrmFormatModifierPropertiesEXT(..)
-                                                                    , EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION
-                                                                    , pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION
-                                                                    , EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME
-                                                                    , pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME
-                                                                    ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetImageDrmFormatModifierPropertiesEXT))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.Core10.Handles (Image(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.SharingMode (SharingMode)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Core10.Image (SubresourceLayout)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetImageDrmFormatModifierPropertiesEXT
-  :: FunPtr (Ptr Device_T -> Image -> Ptr ImageDrmFormatModifierPropertiesEXT -> IO Result) -> Ptr Device_T -> Image -> Ptr ImageDrmFormatModifierPropertiesEXT -> IO Result
-
--- | vkGetImageDrmFormatModifierPropertiesEXT - Returns an image’s DRM format
--- modifier
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the image.
---
--- -   @image@ is the queried image.
---
--- -   @pProperties@ will return properties of the image’s /DRM format
---     modifier/.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'ImageDrmFormatModifierPropertiesEXT'
-getImageDrmFormatModifierPropertiesEXT :: forall io . MonadIO io => Device -> Image -> io (ImageDrmFormatModifierPropertiesEXT)
-getImageDrmFormatModifierPropertiesEXT device image = liftIO . evalContT $ do
-  let vkGetImageDrmFormatModifierPropertiesEXT' = mkVkGetImageDrmFormatModifierPropertiesEXT (pVkGetImageDrmFormatModifierPropertiesEXT (deviceCmds (device :: Device)))
-  pPProperties <- ContT (withZeroCStruct @ImageDrmFormatModifierPropertiesEXT)
-  _ <- lift $ vkGetImageDrmFormatModifierPropertiesEXT' (deviceHandle (device)) (image) (pPProperties)
-  pProperties <- lift $ peekCStruct @ImageDrmFormatModifierPropertiesEXT pPProperties
-  pure $ (pProperties)
-
-
--- | VkDrmFormatModifierPropertiesListEXT - Structure specifying the list of
--- DRM format modifiers supported for a format
---
--- = Description
---
--- If @pDrmFormatModifierProperties@ is @NULL@, then the function returns
--- in @drmFormatModifierCount@ the number of modifiers compatible with the
--- queried @format@. Otherwise, the application /must/ set
--- @drmFormatModifierCount@ to the length of the array
--- @pDrmFormatModifierProperties@; the function will write at most
--- @drmFormatModifierCount@ elements to the array, and will return in
--- @drmFormatModifierCount@ the number of elements written.
---
--- Among the elements in array @pDrmFormatModifierProperties@, each
--- returned @drmFormatModifier@ /must/ be unique.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'DrmFormatModifierPropertiesEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DrmFormatModifierPropertiesListEXT = DrmFormatModifierPropertiesListEXT
-  { -- | @drmFormatModifierCount@ is an inout parameter related to the number of
-    -- modifiers compatible with the @format@, as described below.
-    drmFormatModifierCount :: Word32
-  , -- | @pDrmFormatModifierProperties@ is either @NULL@ or an array of
-    -- 'DrmFormatModifierPropertiesEXT' structures.
-    drmFormatModifierProperties :: Ptr DrmFormatModifierPropertiesEXT
-  }
-  deriving (Typeable)
-deriving instance Show DrmFormatModifierPropertiesListEXT
-
-instance ToCStruct DrmFormatModifierPropertiesListEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DrmFormatModifierPropertiesListEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (drmFormatModifierCount)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr DrmFormatModifierPropertiesEXT))) (drmFormatModifierProperties)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct DrmFormatModifierPropertiesListEXT where
-  peekCStruct p = do
-    drmFormatModifierCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pDrmFormatModifierProperties <- peek @(Ptr DrmFormatModifierPropertiesEXT) ((p `plusPtr` 24 :: Ptr (Ptr DrmFormatModifierPropertiesEXT)))
-    pure $ DrmFormatModifierPropertiesListEXT
-             drmFormatModifierCount pDrmFormatModifierProperties
-
-instance Storable DrmFormatModifierPropertiesListEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DrmFormatModifierPropertiesListEXT where
-  zero = DrmFormatModifierPropertiesListEXT
-           zero
-           zero
-
-
--- | VkDrmFormatModifierPropertiesEXT - Structure specifying properties of a
--- format when combined with a DRM format modifier
---
--- = Description
---
--- The returned @drmFormatModifierTilingFeatures@ /must/ contain at least
--- one bit.
---
--- The implementation /must/ not return @DRM_FORMAT_MOD_INVALID@ in
--- @drmFormatModifier@.
---
--- An image’s /memory planecount/ (as returned by
--- @drmFormatModifierPlaneCount@) is distinct from its /format planecount/
--- (in the sense of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
--- Y′CBCR formats). In
--- 'Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
--- each @VK_IMAGE_ASPECT_MEMORY_PLANE@//i/_BIT_EXT represents a _memory
--- plane/ and each @VK_IMAGE_ASPECT_PLANE@//i/_BIT a _format plane/.
---
--- An image’s set of /format planes/ is an ordered partition of the image’s
--- __content__ into separable groups of format channels. The ordered
--- partition is encoded in the name of each
--- 'Graphics.Vulkan.Core10.Enums.Format.Format'. For example,
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_G8_B8R8_2PLANE_420_UNORM'
--- contains two /format planes/; the first plane contains the green channel
--- and the second plane contains the blue channel and red channel. If the
--- format name does not contain @PLANE@, then the format contains a single
--- plane; for example,
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM'. Some
--- commands, such as
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', do
--- not operate on all format channels in the image, but instead operate
--- only on the /format planes/ explicitly chosen by the application and
--- operate on each /format plane/ independently.
---
--- An image’s set of /memory planes/ is an ordered partition of the image’s
--- __memory__ rather than the image’s __content__. Each /memory plane/ is a
--- contiguous range of memory. The union of an image’s /memory planes/ is
--- not necessarily contiguous.
---
--- If an image is
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource linear>,
--- then the partition is the same for /memory planes/ and for /format
--- planes/. Therefore, if the returned @drmFormatModifier@ is
--- @DRM_FORMAT_MOD_LINEAR@, then @drmFormatModifierPlaneCount@ /must/ equal
--- the /format planecount/, and @drmFormatModifierTilingFeatures@ /must/ be
--- identical to the
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.FormatProperties2'::@linearTilingFeatures@
--- returned in the same @pNext@ chain.
---
--- If an image is
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource non-linear>,
--- then the partition of the image’s __memory__ into /memory planes/ is
--- implementation-specific and /may/ be unrelated to the partition of the
--- image’s __content__ into /format planes/. For example, consider an image
--- whose @format@ is
--- 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_G8_B8_R8_3PLANE_420_UNORM',
--- @tiling@ is
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
--- whose @drmFormatModifier@ is not @DRM_FORMAT_MOD_LINEAR@, and @flags@
--- lacks
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'.
--- The image has 3 /format planes/, and commands such
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage' act
--- on each /format plane/ independently as if the data of each /format
--- plane/ were separable from the data of the other planes. In a
--- straightforward implementation, the implementation /may/ store the
--- image’s content in 3 adjacent /memory planes/ where each /memory plane/
--- corresponds exactly to a /format plane/. However, the implementation
--- /may/ also store the image’s content in a single /memory plane/ where
--- all format channels are combined using an implementation-private
--- block-compressed format; or the implementation /may/ store the image’s
--- content in a collection of 7 adjacent /memory planes/ using an
--- implementation-private sharding technique. Because the image is
--- non-linear and non-disjoint, the implementation has much freedom when
--- choosing the image’s placement in memory.
---
--- The /memory planecount/ applies to function parameters and structures
--- only when the API specifies an explicit requirement on
--- @drmFormatModifierPlaneCount@. In all other cases, the /memory
--- planecount/ is ignored.
---
--- = See Also
---
--- 'DrmFormatModifierPropertiesListEXT',
--- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlags'
-data DrmFormatModifierPropertiesEXT = DrmFormatModifierPropertiesEXT
-  { -- | @drmFormatModifier@ is a /Linux DRM format modifier/.
-    drmFormatModifier :: Word64
-  , -- | @drmFormatModifierPlaneCount@ is the number of /memory planes/ in any
-    -- image created with @format@ and @drmFormatModifier@. An image’s /memory
-    -- planecount/ is distinct from its /format planecount/, as explained
-    -- below.
-    drmFormatModifierPlaneCount :: Word32
-  , -- | @drmFormatModifierTilingFeatures@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'
-    -- that are supported by any image created with @format@ and
-    -- @drmFormatModifier@.
-    drmFormatModifierTilingFeatures :: FormatFeatureFlags
-  }
-  deriving (Typeable)
-deriving instance Show DrmFormatModifierPropertiesEXT
-
-instance ToCStruct DrmFormatModifierPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DrmFormatModifierPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word64)) (drmFormatModifier)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (drmFormatModifierPlaneCount)
-    poke ((p `plusPtr` 12 :: Ptr FormatFeatureFlags)) (drmFormatModifierTilingFeatures)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr FormatFeatureFlags)) (zero)
-    f
-
-instance FromCStruct DrmFormatModifierPropertiesEXT where
-  peekCStruct p = do
-    drmFormatModifier <- peek @Word64 ((p `plusPtr` 0 :: Ptr Word64))
-    drmFormatModifierPlaneCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    drmFormatModifierTilingFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 12 :: Ptr FormatFeatureFlags))
-    pure $ DrmFormatModifierPropertiesEXT
-             drmFormatModifier drmFormatModifierPlaneCount drmFormatModifierTilingFeatures
-
-instance Storable DrmFormatModifierPropertiesEXT where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DrmFormatModifierPropertiesEXT where
-  zero = DrmFormatModifierPropertiesEXT
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceImageDrmFormatModifierInfoEXT - Structure specifying a
--- DRM format modifier as image creation parameter
---
--- = Description
---
--- If the @drmFormatModifier@ is incompatible with the parameters specified
--- in
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
--- and its @pNext@ chain, then
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
--- returns
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'. The
--- implementation /must/ support the query of any @drmFormatModifier@,
--- including unknown and invalid modifier values.
---
--- == Valid Usage
---
--- -   If @sharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     then @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
---     @queueFamilyIndexCount@ @uint32_t@ values
---
--- -   If @sharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     then @queueFamilyIndexCount@ /must/ be greater than @1@
---
--- -   If @sharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     each element of @pQueueFamilyIndices@ /must/ be unique and /must/ be
---     less than the @pQueueFamilyPropertyCount@ returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'
---     for the @physicalDevice@ that was used to create @device@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT'
---
--- -   @sharingMode@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SharingMode' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.SharingMode.SharingMode',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceImageDrmFormatModifierInfoEXT = PhysicalDeviceImageDrmFormatModifierInfoEXT
-  { -- | @drmFormatModifier@ is the image’s /Linux DRM format modifier/,
-    -- corresponding to
-    -- 'ImageDrmFormatModifierExplicitCreateInfoEXT'::@modifier@ or to
-    -- 'ImageDrmFormatModifierListCreateInfoEXT'::@pModifiers@.
-    drmFormatModifier :: Word64
-  , -- | @sharingMode@ specifies how the image will be accessed by multiple queue
-    -- families.
-    sharingMode :: SharingMode
-  , -- | @pQueueFamilyIndices@ is a list of queue families that will access the
-    -- image (ignored if @sharingMode@ is not
-    -- 'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT').
-    queueFamilyIndices :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceImageDrmFormatModifierInfoEXT
-
-instance ToCStruct PhysicalDeviceImageDrmFormatModifierInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceImageDrmFormatModifierInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word64)) (drmFormatModifier)
-    lift $ poke ((p `plusPtr` 24 :: Ptr SharingMode)) (sharingMode)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueFamilyIndices)) :: Word32))
-    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (queueFamilyIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (queueFamilyIndices)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr SharingMode)) (zero)
-    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
-    lift $ f
-
-instance FromCStruct PhysicalDeviceImageDrmFormatModifierInfoEXT where
-  peekCStruct p = do
-    drmFormatModifier <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
-    sharingMode <- peek @SharingMode ((p `plusPtr` 24 :: Ptr SharingMode))
-    queueFamilyIndexCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    pQueueFamilyIndices <- peek @(Ptr Word32) ((p `plusPtr` 32 :: Ptr (Ptr Word32)))
-    pQueueFamilyIndices' <- generateM (fromIntegral queueFamilyIndexCount) (\i -> peek @Word32 ((pQueueFamilyIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ PhysicalDeviceImageDrmFormatModifierInfoEXT
-             drmFormatModifier sharingMode pQueueFamilyIndices'
-
-instance Zero PhysicalDeviceImageDrmFormatModifierInfoEXT where
-  zero = PhysicalDeviceImageDrmFormatModifierInfoEXT
-           zero
-           zero
-           mempty
-
-
--- | VkImageDrmFormatModifierListCreateInfoEXT - Specify that an image must
--- be created with a DRM format modifier from the provided list
---
--- == Valid Usage
---
--- -   Each /modifier/ in @pDrmFormatModifiers@ /must/ be compatible with
---     the parameters in 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' and
---     its @pNext@ chain, as determined by querying
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
---     extended with 'PhysicalDeviceImageDrmFormatModifierInfoEXT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT'
---
--- -   @pDrmFormatModifiers@ /must/ be a valid pointer to an array of
---     @drmFormatModifierCount@ @uint64_t@ values
---
--- -   @drmFormatModifierCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImageDrmFormatModifierListCreateInfoEXT = ImageDrmFormatModifierListCreateInfoEXT
-  { -- | @pDrmFormatModifiers@ is a pointer to an array of /Linux DRM format
-    -- modifiers/.
-    drmFormatModifiers :: Vector Word64 }
-  deriving (Typeable)
-deriving instance Show ImageDrmFormatModifierListCreateInfoEXT
-
-instance ToCStruct ImageDrmFormatModifierListCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageDrmFormatModifierListCreateInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (drmFormatModifiers)) :: Word32))
-    pPDrmFormatModifiers' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (drmFormatModifiers)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDrmFormatModifiers' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (drmFormatModifiers)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word64))) (pPDrmFormatModifiers')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPDrmFormatModifiers' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDrmFormatModifiers' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word64))) (pPDrmFormatModifiers')
-    lift $ f
-
-instance FromCStruct ImageDrmFormatModifierListCreateInfoEXT where
-  peekCStruct p = do
-    drmFormatModifierCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pDrmFormatModifiers <- peek @(Ptr Word64) ((p `plusPtr` 24 :: Ptr (Ptr Word64)))
-    pDrmFormatModifiers' <- generateM (fromIntegral drmFormatModifierCount) (\i -> peek @Word64 ((pDrmFormatModifiers `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
-    pure $ ImageDrmFormatModifierListCreateInfoEXT
-             pDrmFormatModifiers'
-
-instance Zero ImageDrmFormatModifierListCreateInfoEXT where
-  zero = ImageDrmFormatModifierListCreateInfoEXT
-           mempty
-
-
--- | VkImageDrmFormatModifierExplicitCreateInfoEXT - Specify that an image be
--- created with the provided DRM format modifier and explicit memory layout
---
--- = Description
---
--- The @i@th member of @pPlaneLayouts@ describes the layout of the image’s
--- @i@th /memory plane/ (that is,
--- @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@). In each element of
--- @pPlaneLayouts@, the implementation /must/ ignore @size@. The
--- implementation calculates the size of each plane, which the application
--- /can/ query with
--- 'Graphics.Vulkan.Core10.Image.getImageSubresourceLayout'.
---
--- When creating an image with
--- 'ImageDrmFormatModifierExplicitCreateInfoEXT', it is the application’s
--- responsibility to satisfy all valid usage requirements. However, the
--- implementation /must/ validate that the provided @pPlaneLayouts@, when
--- combined with the provided @drmFormatModifier@ and other creation
--- parameters in 'Graphics.Vulkan.Core10.Image.ImageCreateInfo' and its
--- @pNext@ chain, produce a valid image. (This validation is necessarily
--- implementation-dependent and outside the scope of Vulkan, and therefore
--- not described by valid usage requirements). If this validation fails,
--- then 'Graphics.Vulkan.Core10.Image.createImage' returns
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT'.
---
--- == Valid Usage
---
--- -   @drmFormatModifier@ /must/ be compatible with the parameters in
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' and its @pNext@
---     chain, as determined by querying
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
---     extended with 'PhysicalDeviceImageDrmFormatModifierInfoEXT'
---
--- -   @drmFormatModifierPlaneCount@ /must/ be equal to the
---     'DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
---     associated with
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@format@ and
---     @drmFormatModifier@, as found by querying
---     'DrmFormatModifierPropertiesListEXT'
---
--- -   For each element of @pPlaneLayouts@, @size@ /must/ be 0
---
--- -   For each element of @pPlaneLayouts@, @arrayPitch@ /must/ be 0 if
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@arrayLayers@ is 1
---
--- -   For each element of @pPlaneLayouts@, @depthPitch@ /must/ be 0 if
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@extent.depth@ is 1
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT'
---
--- -   If @drmFormatModifierPlaneCount@ is not @0@, @pPlaneLayouts@ /must/
---     be a valid pointer to an array of @drmFormatModifierPlaneCount@
---     'Graphics.Vulkan.Core10.Image.SubresourceLayout' structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Core10.Image.SubresourceLayout'
-data ImageDrmFormatModifierExplicitCreateInfoEXT = ImageDrmFormatModifierExplicitCreateInfoEXT
-  { -- | @drmFormatModifier@ is the /Linux DRM format modifier/ with which the
-    -- image will be created.
-    drmFormatModifier :: Word64
-  , -- | @pPlaneLayouts@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Image.SubresourceLayout' structures describing
-    -- the image’s /memory planes/.
-    planeLayouts :: Vector SubresourceLayout
-  }
-  deriving (Typeable)
-deriving instance Show ImageDrmFormatModifierExplicitCreateInfoEXT
-
-instance ToCStruct ImageDrmFormatModifierExplicitCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageDrmFormatModifierExplicitCreateInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word64)) (drmFormatModifier)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (planeLayouts)) :: Word32))
-    pPPlaneLayouts' <- ContT $ allocaBytesAligned @SubresourceLayout ((Data.Vector.length (planeLayouts)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPlaneLayouts' `plusPtr` (40 * (i)) :: Ptr SubresourceLayout) (e) . ($ ())) (planeLayouts)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SubresourceLayout))) (pPPlaneLayouts')
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
-    pPPlaneLayouts' <- ContT $ allocaBytesAligned @SubresourceLayout ((Data.Vector.length (mempty)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPlaneLayouts' `plusPtr` (40 * (i)) :: Ptr SubresourceLayout) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SubresourceLayout))) (pPPlaneLayouts')
-    lift $ f
-
-instance FromCStruct ImageDrmFormatModifierExplicitCreateInfoEXT where
-  peekCStruct p = do
-    drmFormatModifier <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
-    drmFormatModifierPlaneCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pPlaneLayouts <- peek @(Ptr SubresourceLayout) ((p `plusPtr` 32 :: Ptr (Ptr SubresourceLayout)))
-    pPlaneLayouts' <- generateM (fromIntegral drmFormatModifierPlaneCount) (\i -> peekCStruct @SubresourceLayout ((pPlaneLayouts `advancePtrBytes` (40 * (i)) :: Ptr SubresourceLayout)))
-    pure $ ImageDrmFormatModifierExplicitCreateInfoEXT
-             drmFormatModifier pPlaneLayouts'
-
-instance Zero ImageDrmFormatModifierExplicitCreateInfoEXT where
-  zero = ImageDrmFormatModifierExplicitCreateInfoEXT
-           zero
-           mempty
-
-
--- | VkImageDrmFormatModifierPropertiesEXT - Properties of an image’s Linux
--- DRM format modifier
---
--- = Description
---
--- If the @image@ was created with
--- 'ImageDrmFormatModifierListCreateInfoEXT', then the returned
--- @drmFormatModifier@ /must/ belong to the list of modifiers provided at
--- time of image creation in
--- 'ImageDrmFormatModifierListCreateInfoEXT'::@pDrmFormatModifiers@. If the
--- @image@ was created with 'ImageDrmFormatModifierExplicitCreateInfoEXT',
--- then the returned @drmFormatModifier@ /must/ be the modifier provided at
--- time of image creation in
--- 'ImageDrmFormatModifierExplicitCreateInfoEXT'::@drmFormatModifier@.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getImageDrmFormatModifierPropertiesEXT'
-data ImageDrmFormatModifierPropertiesEXT = ImageDrmFormatModifierPropertiesEXT
-  { -- | @drmFormatModifier@ returns the image’s
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-drm-format-modifier Linux DRM format modifier>.
-    drmFormatModifier :: Word64 }
-  deriving (Typeable)
-deriving instance Show ImageDrmFormatModifierPropertiesEXT
-
-instance ToCStruct ImageDrmFormatModifierPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageDrmFormatModifierPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (drmFormatModifier)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct ImageDrmFormatModifierPropertiesEXT where
-  peekCStruct p = do
-    drmFormatModifier <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
-    pure $ ImageDrmFormatModifierPropertiesEXT
-             drmFormatModifier
-
-instance Storable ImageDrmFormatModifierPropertiesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageDrmFormatModifierPropertiesEXT where
-  zero = ImageDrmFormatModifierPropertiesEXT
-           zero
-
-
-type EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION"
-pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION = 1
-
-
-type EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME = "VK_EXT_image_drm_format_modifier"
-
--- No documentation found for TopLevel "VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME"
-pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME = "VK_EXT_image_drm_format_modifier"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs-boot
+++ /dev/null
@@ -1,59 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier  ( DrmFormatModifierPropertiesEXT
-                                                                    , DrmFormatModifierPropertiesListEXT
-                                                                    , ImageDrmFormatModifierExplicitCreateInfoEXT
-                                                                    , ImageDrmFormatModifierListCreateInfoEXT
-                                                                    , ImageDrmFormatModifierPropertiesEXT
-                                                                    , PhysicalDeviceImageDrmFormatModifierInfoEXT
-                                                                    ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DrmFormatModifierPropertiesEXT
-
-instance ToCStruct DrmFormatModifierPropertiesEXT
-instance Show DrmFormatModifierPropertiesEXT
-
-instance FromCStruct DrmFormatModifierPropertiesEXT
-
-
-data DrmFormatModifierPropertiesListEXT
-
-instance ToCStruct DrmFormatModifierPropertiesListEXT
-instance Show DrmFormatModifierPropertiesListEXT
-
-instance FromCStruct DrmFormatModifierPropertiesListEXT
-
-
-data ImageDrmFormatModifierExplicitCreateInfoEXT
-
-instance ToCStruct ImageDrmFormatModifierExplicitCreateInfoEXT
-instance Show ImageDrmFormatModifierExplicitCreateInfoEXT
-
-instance FromCStruct ImageDrmFormatModifierExplicitCreateInfoEXT
-
-
-data ImageDrmFormatModifierListCreateInfoEXT
-
-instance ToCStruct ImageDrmFormatModifierListCreateInfoEXT
-instance Show ImageDrmFormatModifierListCreateInfoEXT
-
-instance FromCStruct ImageDrmFormatModifierListCreateInfoEXT
-
-
-data ImageDrmFormatModifierPropertiesEXT
-
-instance ToCStruct ImageDrmFormatModifierPropertiesEXT
-instance Show ImageDrmFormatModifierPropertiesEXT
-
-instance FromCStruct ImageDrmFormatModifierPropertiesEXT
-
-
-data PhysicalDeviceImageDrmFormatModifierInfoEXT
-
-instance ToCStruct PhysicalDeviceImageDrmFormatModifierInfoEXT
-instance Show PhysicalDeviceImageDrmFormatModifierInfoEXT
-
-instance FromCStruct PhysicalDeviceImageDrmFormatModifierInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_index_type_uint8.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_index_type_uint8.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_index_type_uint8.hs
+++ /dev/null
@@ -1,107 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8  ( PhysicalDeviceIndexTypeUint8FeaturesEXT(..)
-                                                           , EXT_INDEX_TYPE_UINT8_SPEC_VERSION
-                                                           , pattern EXT_INDEX_TYPE_UINT8_SPEC_VERSION
-                                                           , EXT_INDEX_TYPE_UINT8_EXTENSION_NAME
-                                                           , pattern EXT_INDEX_TYPE_UINT8_EXTENSION_NAME
-                                                           ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT))
--- | VkPhysicalDeviceIndexTypeUint8FeaturesEXT - Structure describing whether
--- uint8 index type can be used
---
--- = Members
---
--- The members of the 'PhysicalDeviceIndexTypeUint8FeaturesEXT' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceIndexTypeUint8FeaturesEXT' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceIndexTypeUint8FeaturesEXT' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceIndexTypeUint8FeaturesEXT = PhysicalDeviceIndexTypeUint8FeaturesEXT
-  { -- | @indexTypeUint8@ indicates that
-    -- 'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT' can be
-    -- used with
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'.
-    indexTypeUint8 :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceIndexTypeUint8FeaturesEXT
-
-instance ToCStruct PhysicalDeviceIndexTypeUint8FeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceIndexTypeUint8FeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (indexTypeUint8))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceIndexTypeUint8FeaturesEXT where
-  peekCStruct p = do
-    indexTypeUint8 <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceIndexTypeUint8FeaturesEXT
-             (bool32ToBool indexTypeUint8)
-
-instance Storable PhysicalDeviceIndexTypeUint8FeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceIndexTypeUint8FeaturesEXT where
-  zero = PhysicalDeviceIndexTypeUint8FeaturesEXT
-           zero
-
-
-type EXT_INDEX_TYPE_UINT8_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION"
-pattern EXT_INDEX_TYPE_UINT8_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_INDEX_TYPE_UINT8_SPEC_VERSION = 1
-
-
-type EXT_INDEX_TYPE_UINT8_EXTENSION_NAME = "VK_EXT_index_type_uint8"
-
--- No documentation found for TopLevel "VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME"
-pattern EXT_INDEX_TYPE_UINT8_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_INDEX_TYPE_UINT8_EXTENSION_NAME = "VK_EXT_index_type_uint8"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_index_type_uint8.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_index_type_uint8.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_index_type_uint8.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8  (PhysicalDeviceIndexTypeUint8FeaturesEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceIndexTypeUint8FeaturesEXT
-
-instance ToCStruct PhysicalDeviceIndexTypeUint8FeaturesEXT
-instance Show PhysicalDeviceIndexTypeUint8FeaturesEXT
-
-instance FromCStruct PhysicalDeviceIndexTypeUint8FeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs
+++ /dev/null
@@ -1,329 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block  ( PhysicalDeviceInlineUniformBlockFeaturesEXT(..)
-                                                               , PhysicalDeviceInlineUniformBlockPropertiesEXT(..)
-                                                               , WriteDescriptorSetInlineUniformBlockEXT(..)
-                                                               , DescriptorPoolInlineUniformBlockCreateInfoEXT(..)
-                                                               , EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION
-                                                               , pattern EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION
-                                                               , EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME
-                                                               , pattern EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME
-                                                               ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT))
--- | VkPhysicalDeviceInlineUniformBlockFeaturesEXT - Structure describing
--- inline uniform block features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceInlineUniformBlockFeaturesEXT'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceInlineUniformBlockFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceInlineUniformBlockFeaturesEXT' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceInlineUniformBlockFeaturesEXT = PhysicalDeviceInlineUniformBlockFeaturesEXT
-  { -- | @inlineUniformBlock@ indicates whether the implementation supports
-    -- inline uniform block descriptors. If this feature is not enabled,
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- /must/ not be used.
-    inlineUniformBlock :: Bool
-  , -- | @descriptorBindingInlineUniformBlockUpdateAfterBind@ indicates whether
-    -- the implementation supports updating inline uniform block descriptors
-    -- after a set is bound. If this feature is not enabled,
-    -- 'Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
-    -- /must/ not be used with
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'.
-    descriptorBindingInlineUniformBlockUpdateAfterBind :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceInlineUniformBlockFeaturesEXT
-
-instance ToCStruct PhysicalDeviceInlineUniformBlockFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceInlineUniformBlockFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (inlineUniformBlock))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (descriptorBindingInlineUniformBlockUpdateAfterBind))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceInlineUniformBlockFeaturesEXT where
-  peekCStruct p = do
-    inlineUniformBlock <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    descriptorBindingInlineUniformBlockUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceInlineUniformBlockFeaturesEXT
-             (bool32ToBool inlineUniformBlock) (bool32ToBool descriptorBindingInlineUniformBlockUpdateAfterBind)
-
-instance Storable PhysicalDeviceInlineUniformBlockFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceInlineUniformBlockFeaturesEXT where
-  zero = PhysicalDeviceInlineUniformBlockFeaturesEXT
-           zero
-           zero
-
-
--- | VkPhysicalDeviceInlineUniformBlockPropertiesEXT - Structure describing
--- inline uniform block properties that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceInlineUniformBlockPropertiesEXT'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceInlineUniformBlockPropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceInlineUniformBlockPropertiesEXT = PhysicalDeviceInlineUniformBlockPropertiesEXT
-  { -- | @maxInlineUniformBlockSize@ is the maximum size in bytes of an
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inlineuniformblock inline uniform block>
-    -- binding.
-    maxInlineUniformBlockSize :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceInlineUniformBlockPropertiesEXT" "maxPerStageDescriptorInlineUniformBlocks"
-    maxPerStageDescriptorInlineUniformBlocks :: Word32
-  , -- | @maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks@ is similar to
-    -- @maxPerStageDescriptorInlineUniformBlocks@ but counts descriptor
-    -- bindings from descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks :: Word32
-  , -- | @maxDescriptorSetInlineUniformBlocks@ is the maximum number of inline
-    -- uniform block bindings that /can/ be included in descriptor bindings in
-    -- a pipeline layout across all pipeline shader stages and descriptor set
-    -- numbers. Descriptor bindings with a descriptor type of
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
-    -- count against this limit. Only descriptor bindings in descriptor set
-    -- layouts created without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set count against this limit.
-    maxDescriptorSetInlineUniformBlocks :: Word32
-  , -- | @maxDescriptorSetUpdateAfterBindInlineUniformBlocks@ is similar to
-    -- @maxDescriptorSetInlineUniformBlocks@ but counts descriptor bindings
-    -- from descriptor sets created with or without the
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
-    -- bit set.
-    maxDescriptorSetUpdateAfterBindInlineUniformBlocks :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceInlineUniformBlockPropertiesEXT
-
-instance ToCStruct PhysicalDeviceInlineUniformBlockPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceInlineUniformBlockPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxInlineUniformBlockSize)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxPerStageDescriptorInlineUniformBlocks)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (maxDescriptorSetInlineUniformBlocks)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindInlineUniformBlocks)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceInlineUniformBlockPropertiesEXT where
-  peekCStruct p = do
-    maxInlineUniformBlockSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxPerStageDescriptorInlineUniformBlocks <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    maxDescriptorSetInlineUniformBlocks <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    maxDescriptorSetUpdateAfterBindInlineUniformBlocks <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pure $ PhysicalDeviceInlineUniformBlockPropertiesEXT
-             maxInlineUniformBlockSize maxPerStageDescriptorInlineUniformBlocks maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks maxDescriptorSetInlineUniformBlocks maxDescriptorSetUpdateAfterBindInlineUniformBlocks
-
-instance Storable PhysicalDeviceInlineUniformBlockPropertiesEXT where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceInlineUniformBlockPropertiesEXT where
-  zero = PhysicalDeviceInlineUniformBlockPropertiesEXT
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkWriteDescriptorSetInlineUniformBlockEXT - Structure specifying inline
--- uniform block data
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data WriteDescriptorSetInlineUniformBlockEXT = WriteDescriptorSetInlineUniformBlockEXT
-  { -- | @dataSize@ /must/ be greater than @0@
-    dataSize :: Word32
-  , -- | @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
-    data' :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show WriteDescriptorSetInlineUniformBlockEXT
-
-instance ToCStruct WriteDescriptorSetInlineUniformBlockEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p WriteDescriptorSetInlineUniformBlockEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (dataSize)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (data')
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct WriteDescriptorSetInlineUniformBlockEXT where
-  peekCStruct p = do
-    dataSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pData <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
-    pure $ WriteDescriptorSetInlineUniformBlockEXT
-             dataSize pData
-
-instance Storable WriteDescriptorSetInlineUniformBlockEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero WriteDescriptorSetInlineUniformBlockEXT where
-  zero = WriteDescriptorSetInlineUniformBlockEXT
-           zero
-           zero
-
-
--- | VkDescriptorPoolInlineUniformBlockCreateInfoEXT - Structure specifying
--- the maximum number of inline uniform block bindings of a newly created
--- descriptor pool
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DescriptorPoolInlineUniformBlockCreateInfoEXT = DescriptorPoolInlineUniformBlockCreateInfoEXT
-  { -- | @maxInlineUniformBlockBindings@ is the number of inline uniform block
-    -- bindings to allocate.
-    maxInlineUniformBlockBindings :: Word32 }
-  deriving (Typeable)
-deriving instance Show DescriptorPoolInlineUniformBlockCreateInfoEXT
-
-instance ToCStruct DescriptorPoolInlineUniformBlockCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DescriptorPoolInlineUniformBlockCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxInlineUniformBlockBindings)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DescriptorPoolInlineUniformBlockCreateInfoEXT where
-  peekCStruct p = do
-    maxInlineUniformBlockBindings <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ DescriptorPoolInlineUniformBlockCreateInfoEXT
-             maxInlineUniformBlockBindings
-
-instance Storable DescriptorPoolInlineUniformBlockCreateInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DescriptorPoolInlineUniformBlockCreateInfoEXT where
-  zero = DescriptorPoolInlineUniformBlockCreateInfoEXT
-           zero
-
-
-type EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION"
-pattern EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION = 1
-
-
-type EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME = "VK_EXT_inline_uniform_block"
-
--- No documentation found for TopLevel "VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME"
-pattern EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME = "VK_EXT_inline_uniform_block"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs-boot
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block  ( DescriptorPoolInlineUniformBlockCreateInfoEXT
-                                                               , PhysicalDeviceInlineUniformBlockFeaturesEXT
-                                                               , PhysicalDeviceInlineUniformBlockPropertiesEXT
-                                                               , WriteDescriptorSetInlineUniformBlockEXT
-                                                               ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DescriptorPoolInlineUniformBlockCreateInfoEXT
-
-instance ToCStruct DescriptorPoolInlineUniformBlockCreateInfoEXT
-instance Show DescriptorPoolInlineUniformBlockCreateInfoEXT
-
-instance FromCStruct DescriptorPoolInlineUniformBlockCreateInfoEXT
-
-
-data PhysicalDeviceInlineUniformBlockFeaturesEXT
-
-instance ToCStruct PhysicalDeviceInlineUniformBlockFeaturesEXT
-instance Show PhysicalDeviceInlineUniformBlockFeaturesEXT
-
-instance FromCStruct PhysicalDeviceInlineUniformBlockFeaturesEXT
-
-
-data PhysicalDeviceInlineUniformBlockPropertiesEXT
-
-instance ToCStruct PhysicalDeviceInlineUniformBlockPropertiesEXT
-instance Show PhysicalDeviceInlineUniformBlockPropertiesEXT
-
-instance FromCStruct PhysicalDeviceInlineUniformBlockPropertiesEXT
-
-
-data WriteDescriptorSetInlineUniformBlockEXT
-
-instance ToCStruct WriteDescriptorSetInlineUniformBlockEXT
-instance Show WriteDescriptorSetInlineUniformBlockEXT
-
-instance FromCStruct WriteDescriptorSetInlineUniformBlockEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_line_rasterization.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_line_rasterization.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_line_rasterization.hs
+++ /dev/null
@@ -1,475 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_line_rasterization  ( cmdSetLineStippleEXT
-                                                             , PhysicalDeviceLineRasterizationFeaturesEXT(..)
-                                                             , PhysicalDeviceLineRasterizationPropertiesEXT(..)
-                                                             , PipelineRasterizationLineStateCreateInfoEXT(..)
-                                                             , LineRasterizationModeEXT( LINE_RASTERIZATION_MODE_DEFAULT_EXT
-                                                                                       , LINE_RASTERIZATION_MODE_RECTANGULAR_EXT
-                                                                                       , LINE_RASTERIZATION_MODE_BRESENHAM_EXT
-                                                                                       , LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT
-                                                                                       , ..
-                                                                                       )
-                                                             , EXT_LINE_RASTERIZATION_SPEC_VERSION
-                                                             , pattern EXT_LINE_RASTERIZATION_SPEC_VERSION
-                                                             , EXT_LINE_RASTERIZATION_EXTENSION_NAME
-                                                             , pattern EXT_LINE_RASTERIZATION_EXTENSION_NAME
-                                                             ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word16)
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetLineStippleEXT))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetLineStippleEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word16 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word16 -> IO ()
-
--- | vkCmdSetLineStippleEXT - Set the dynamic line width state
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @lineStippleFactor@ is the repeat factor used in stippled line
---     rasterization.
---
--- -   @lineStipplePattern@ is the bit pattern used in stippled line
---     rasterization.
---
--- == Valid Usage
---
--- -   @lineStippleFactor@ /must/ be in the range [1,256]
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdSetLineStippleEXT :: forall io . MonadIO io => CommandBuffer -> ("lineStippleFactor" ::: Word32) -> ("lineStipplePattern" ::: Word16) -> io ()
-cmdSetLineStippleEXT commandBuffer lineStippleFactor lineStipplePattern = liftIO $ do
-  let vkCmdSetLineStippleEXT' = mkVkCmdSetLineStippleEXT (pVkCmdSetLineStippleEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdSetLineStippleEXT' (commandBufferHandle (commandBuffer)) (lineStippleFactor) (lineStipplePattern)
-  pure $ ()
-
-
--- | VkPhysicalDeviceLineRasterizationFeaturesEXT - Structure describing the
--- line rasterization features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceLineRasterizationFeaturesEXT'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceLineRasterizationFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceLineRasterizationFeaturesEXT' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable the feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceLineRasterizationFeaturesEXT = PhysicalDeviceLineRasterizationFeaturesEXT
-  { -- | @rectangularLines@ indicates whether the implementation supports
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines rectangular line rasterization>.
-    rectangularLines :: Bool
-  , -- | @bresenhamLines@ indicates whether the implementation supports
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-bresenham Bresenham-style line rasterization>.
-    bresenhamLines :: Bool
-  , -- | @smoothLines@ indicates whether the implementation supports
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-smooth smooth line rasterization>.
-    smoothLines :: Bool
-  , -- | @stippledRectangularLines@ indicates whether the implementation supports
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>
-    -- with 'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT' lines, or with
-    -- 'LINE_RASTERIZATION_MODE_DEFAULT_EXT' lines if
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@strictLines@
-    -- is 'Graphics.Vulkan.Core10.BaseType.TRUE'.
-    stippledRectangularLines :: Bool
-  , -- | @stippledBresenhamLines@ indicates whether the implementation supports
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>
-    -- with 'LINE_RASTERIZATION_MODE_BRESENHAM_EXT' lines.
-    stippledBresenhamLines :: Bool
-  , -- | @stippledSmoothLines@ indicates whether the implementation supports
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>
-    -- with 'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT' lines.
-    stippledSmoothLines :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceLineRasterizationFeaturesEXT
-
-instance ToCStruct PhysicalDeviceLineRasterizationFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceLineRasterizationFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (rectangularLines))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (bresenhamLines))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (smoothLines))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (stippledRectangularLines))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (stippledBresenhamLines))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (stippledSmoothLines))
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceLineRasterizationFeaturesEXT where
-  peekCStruct p = do
-    rectangularLines <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    bresenhamLines <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    smoothLines <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    stippledRectangularLines <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    stippledBresenhamLines <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    stippledSmoothLines <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    pure $ PhysicalDeviceLineRasterizationFeaturesEXT
-             (bool32ToBool rectangularLines) (bool32ToBool bresenhamLines) (bool32ToBool smoothLines) (bool32ToBool stippledRectangularLines) (bool32ToBool stippledBresenhamLines) (bool32ToBool stippledSmoothLines)
-
-instance Storable PhysicalDeviceLineRasterizationFeaturesEXT where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceLineRasterizationFeaturesEXT where
-  zero = PhysicalDeviceLineRasterizationFeaturesEXT
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceLineRasterizationPropertiesEXT - Structure describing
--- line rasterization properties supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceLineRasterizationPropertiesEXT'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceLineRasterizationPropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceLineRasterizationPropertiesEXT = PhysicalDeviceLineRasterizationPropertiesEXT
-  { -- | @lineSubPixelPrecisionBits@ is the number of bits of subpixel precision
-    -- in framebuffer coordinates xf and yf when rasterizing
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines line segments>.
-    lineSubPixelPrecisionBits :: Word32 }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceLineRasterizationPropertiesEXT
-
-instance ToCStruct PhysicalDeviceLineRasterizationPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceLineRasterizationPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (lineSubPixelPrecisionBits)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceLineRasterizationPropertiesEXT where
-  peekCStruct p = do
-    lineSubPixelPrecisionBits <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ PhysicalDeviceLineRasterizationPropertiesEXT
-             lineSubPixelPrecisionBits
-
-instance Storable PhysicalDeviceLineRasterizationPropertiesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceLineRasterizationPropertiesEXT where
-  zero = PhysicalDeviceLineRasterizationPropertiesEXT
-           zero
-
-
--- | VkPipelineRasterizationLineStateCreateInfoEXT - Structure specifying
--- parameters of a newly created pipeline line rasterization state
---
--- == Valid Usage
---
--- -   If @lineRasterizationMode@ is
---     'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT', then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rectangularLines rectangularLines>
---     feature /must/ be enabled
---
--- -   If @lineRasterizationMode@ is
---     'LINE_RASTERIZATION_MODE_BRESENHAM_EXT', then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bresenhamLines bresenhamLines>
---     feature /must/ be enabled
---
--- -   If @lineRasterizationMode@ is
---     'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT', then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bresenhamLines smoothLines>
---     feature /must/ be enabled
---
--- -   If @stippledLineEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE'
---     and @lineRasterizationMode@ is
---     'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT', then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>
---     feature /must/ be enabled
---
--- -   If @stippledLineEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE'
---     and @lineRasterizationMode@ is
---     'LINE_RASTERIZATION_MODE_BRESENHAM_EXT', then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
---     feature /must/ be enabled
---
--- -   If @stippledLineEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE'
---     and @lineRasterizationMode@ is
---     'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT', then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
---     feature /must/ be enabled
---
--- -   If @stippledLineEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE'
---     and @lineRasterizationMode@ is
---     'LINE_RASTERIZATION_MODE_DEFAULT_EXT', then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>
---     feature /must/ be enabled and
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@strictLines@
---     /must/ be 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT'
---
--- -   @lineRasterizationMode@ /must/ be a valid 'LineRasterizationModeEXT'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32', 'LineRasterizationModeEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineRasterizationLineStateCreateInfoEXT = PipelineRasterizationLineStateCreateInfoEXT
-  { -- | @lineRasterizationMode@ is a 'LineRasterizationModeEXT' value selecting
-    -- the style of line rasterization.
-    lineRasterizationMode :: LineRasterizationModeEXT
-  , -- | @stippledLineEnable@ enables
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>.
-    stippledLineEnable :: Bool
-  , -- | @lineStippleFactor@ is the repeat factor used in stippled line
-    -- rasterization.
-    lineStippleFactor :: Word32
-  , -- | @lineStipplePattern@ is the bit pattern used in stippled line
-    -- rasterization.
-    lineStipplePattern :: Word16
-  }
-  deriving (Typeable)
-deriving instance Show PipelineRasterizationLineStateCreateInfoEXT
-
-instance ToCStruct PipelineRasterizationLineStateCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineRasterizationLineStateCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr LineRasterizationModeEXT)) (lineRasterizationMode)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (stippledLineEnable))
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (lineStippleFactor)
-    poke ((p `plusPtr` 28 :: Ptr Word16)) (lineStipplePattern)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr LineRasterizationModeEXT)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PipelineRasterizationLineStateCreateInfoEXT where
-  peekCStruct p = do
-    lineRasterizationMode <- peek @LineRasterizationModeEXT ((p `plusPtr` 16 :: Ptr LineRasterizationModeEXT))
-    stippledLineEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    lineStippleFactor <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    lineStipplePattern <- peek @Word16 ((p `plusPtr` 28 :: Ptr Word16))
-    pure $ PipelineRasterizationLineStateCreateInfoEXT
-             lineRasterizationMode (bool32ToBool stippledLineEnable) lineStippleFactor lineStipplePattern
-
-instance Storable PipelineRasterizationLineStateCreateInfoEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineRasterizationLineStateCreateInfoEXT where
-  zero = PipelineRasterizationLineStateCreateInfoEXT
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkLineRasterizationModeEXT - Line rasterization modes
---
--- = See Also
---
--- 'PipelineRasterizationLineStateCreateInfoEXT'
-newtype LineRasterizationModeEXT = LineRasterizationModeEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'LINE_RASTERIZATION_MODE_DEFAULT_EXT' is equivalent to
--- 'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT' if
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@strictLines@
--- is 'Graphics.Vulkan.Core10.BaseType.TRUE', otherwise lines are drawn as
--- non-@strictLines@ parallelograms. Both of these modes are defined in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-basic Basic Line Segment Rasterization>.
-pattern LINE_RASTERIZATION_MODE_DEFAULT_EXT = LineRasterizationModeEXT 0
--- | 'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT' specifies lines drawn as if
--- they were rectangles extruded from the line
-pattern LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = LineRasterizationModeEXT 1
--- | 'LINE_RASTERIZATION_MODE_BRESENHAM_EXT' specifies lines drawn by
--- determining which pixel diamonds the line intersects and exits, as
--- defined in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-bresenham Bresenham Line Segment Rasterization>.
-pattern LINE_RASTERIZATION_MODE_BRESENHAM_EXT = LineRasterizationModeEXT 2
--- | 'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT' specifies lines drawn
--- if they were rectangles extruded from the line, with alpha falloff, as
--- defined in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-smooth Smooth Lines>.
-pattern LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = LineRasterizationModeEXT 3
-{-# complete LINE_RASTERIZATION_MODE_DEFAULT_EXT,
-             LINE_RASTERIZATION_MODE_RECTANGULAR_EXT,
-             LINE_RASTERIZATION_MODE_BRESENHAM_EXT,
-             LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT :: LineRasterizationModeEXT #-}
-
-instance Show LineRasterizationModeEXT where
-  showsPrec p = \case
-    LINE_RASTERIZATION_MODE_DEFAULT_EXT -> showString "LINE_RASTERIZATION_MODE_DEFAULT_EXT"
-    LINE_RASTERIZATION_MODE_RECTANGULAR_EXT -> showString "LINE_RASTERIZATION_MODE_RECTANGULAR_EXT"
-    LINE_RASTERIZATION_MODE_BRESENHAM_EXT -> showString "LINE_RASTERIZATION_MODE_BRESENHAM_EXT"
-    LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT -> showString "LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT"
-    LineRasterizationModeEXT x -> showParen (p >= 11) (showString "LineRasterizationModeEXT " . showsPrec 11 x)
-
-instance Read LineRasterizationModeEXT where
-  readPrec = parens (choose [("LINE_RASTERIZATION_MODE_DEFAULT_EXT", pure LINE_RASTERIZATION_MODE_DEFAULT_EXT)
-                            , ("LINE_RASTERIZATION_MODE_RECTANGULAR_EXT", pure LINE_RASTERIZATION_MODE_RECTANGULAR_EXT)
-                            , ("LINE_RASTERIZATION_MODE_BRESENHAM_EXT", pure LINE_RASTERIZATION_MODE_BRESENHAM_EXT)
-                            , ("LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT", pure LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "LineRasterizationModeEXT")
-                       v <- step readPrec
-                       pure (LineRasterizationModeEXT v)))
-
-
-type EXT_LINE_RASTERIZATION_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_LINE_RASTERIZATION_SPEC_VERSION"
-pattern EXT_LINE_RASTERIZATION_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_LINE_RASTERIZATION_SPEC_VERSION = 1
-
-
-type EXT_LINE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_line_rasterization"
-
--- No documentation found for TopLevel "VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME"
-pattern EXT_LINE_RASTERIZATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_LINE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_line_rasterization"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_line_rasterization.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_line_rasterization.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_line_rasterization.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_line_rasterization  ( PhysicalDeviceLineRasterizationFeaturesEXT
-                                                             , PhysicalDeviceLineRasterizationPropertiesEXT
-                                                             , PipelineRasterizationLineStateCreateInfoEXT
-                                                             ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceLineRasterizationFeaturesEXT
-
-instance ToCStruct PhysicalDeviceLineRasterizationFeaturesEXT
-instance Show PhysicalDeviceLineRasterizationFeaturesEXT
-
-instance FromCStruct PhysicalDeviceLineRasterizationFeaturesEXT
-
-
-data PhysicalDeviceLineRasterizationPropertiesEXT
-
-instance ToCStruct PhysicalDeviceLineRasterizationPropertiesEXT
-instance Show PhysicalDeviceLineRasterizationPropertiesEXT
-
-instance FromCStruct PhysicalDeviceLineRasterizationPropertiesEXT
-
-
-data PipelineRasterizationLineStateCreateInfoEXT
-
-instance ToCStruct PipelineRasterizationLineStateCreateInfoEXT
-instance Show PipelineRasterizationLineStateCreateInfoEXT
-
-instance FromCStruct PipelineRasterizationLineStateCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_memory_budget.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_memory_budget.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_memory_budget.hs
+++ /dev/null
@@ -1,138 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_memory_budget  ( PhysicalDeviceMemoryBudgetPropertiesEXT(..)
-                                                        , EXT_MEMORY_BUDGET_SPEC_VERSION
-                                                        , pattern EXT_MEMORY_BUDGET_SPEC_VERSION
-                                                        , EXT_MEMORY_BUDGET_EXTENSION_NAME
-                                                        , pattern EXT_MEMORY_BUDGET_EXTENSION_NAME
-                                                        ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Monad (unless)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.APIConstants (MAX_MEMORY_HEAPS)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_MEMORY_HEAPS)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT))
--- | VkPhysicalDeviceMemoryBudgetPropertiesEXT - Structure specifying
--- physical device memory budget and usage
---
--- = Description
---
--- The values returned in this structure are not invariant. The
--- @heapBudget@ and @heapUsage@ values /must/ be zero for array elements
--- greater than or equal to
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryHeapCount@.
--- The @heapBudget@ value /must/ be non-zero for array elements less than
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryHeapCount@.
--- The @heapBudget@ value /must/ be less than or equal to
--- 'Graphics.Vulkan.Core10.DeviceInitialization.MemoryHeap'::@size@ for
--- each heap.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceMemoryBudgetPropertiesEXT = PhysicalDeviceMemoryBudgetPropertiesEXT
-  { -- | @heapBudget@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS'
-    -- 'Graphics.Vulkan.Core10.BaseType.DeviceSize' values in which memory
-    -- budgets are returned, with one element for each memory heap. A heap’s
-    -- budget is a rough estimate of how much memory the process /can/ allocate
-    -- from that heap before allocations /may/ fail or cause performance
-    -- degradation. The budget includes any currently allocated device memory.
-    heapBudget :: Vector DeviceSize
-  , -- | @heapUsage@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS'
-    -- 'Graphics.Vulkan.Core10.BaseType.DeviceSize' values in which memory
-    -- usages are returned, with one element for each memory heap. A heap’s
-    -- usage is an estimate of how much memory the process is currently using
-    -- in that heap.
-    heapUsage :: Vector DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceMemoryBudgetPropertiesEXT
-
-instance ToCStruct PhysicalDeviceMemoryBudgetPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 272 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceMemoryBudgetPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    unless ((Data.Vector.length $ (heapBudget)) <= MAX_MEMORY_HEAPS) $
-      throwIO $ IOError Nothing InvalidArgument "" "heapBudget is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (heapBudget)
-    unless ((Data.Vector.length $ (heapUsage)) <= MAX_MEMORY_HEAPS) $
-      throwIO $ IOError Nothing InvalidArgument "" "heapUsage is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 144 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (heapUsage)
-    f
-  cStructSize = 272
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_HEAPS) $
-      throwIO $ IOError Nothing InvalidArgument "" "heapBudget is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (mempty)
-    unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_HEAPS) $
-      throwIO $ IOError Nothing InvalidArgument "" "heapUsage is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 144 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (mempty)
-    f
-
-instance FromCStruct PhysicalDeviceMemoryBudgetPropertiesEXT where
-  peekCStruct p = do
-    heapBudget <- generateM (MAX_MEMORY_HEAPS) (\i -> peek @DeviceSize (((lowerArrayPtr @DeviceSize ((p `plusPtr` 16 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `advancePtrBytes` (8 * (i)) :: Ptr DeviceSize)))
-    heapUsage <- generateM (MAX_MEMORY_HEAPS) (\i -> peek @DeviceSize (((lowerArrayPtr @DeviceSize ((p `plusPtr` 144 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `advancePtrBytes` (8 * (i)) :: Ptr DeviceSize)))
-    pure $ PhysicalDeviceMemoryBudgetPropertiesEXT
-             heapBudget heapUsage
-
-instance Storable PhysicalDeviceMemoryBudgetPropertiesEXT where
-  sizeOf ~_ = 272
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceMemoryBudgetPropertiesEXT where
-  zero = PhysicalDeviceMemoryBudgetPropertiesEXT
-           mempty
-           mempty
-
-
-type EXT_MEMORY_BUDGET_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_MEMORY_BUDGET_SPEC_VERSION"
-pattern EXT_MEMORY_BUDGET_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_MEMORY_BUDGET_SPEC_VERSION = 1
-
-
-type EXT_MEMORY_BUDGET_EXTENSION_NAME = "VK_EXT_memory_budget"
-
--- No documentation found for TopLevel "VK_EXT_MEMORY_BUDGET_EXTENSION_NAME"
-pattern EXT_MEMORY_BUDGET_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_MEMORY_BUDGET_EXTENSION_NAME = "VK_EXT_memory_budget"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_memory_budget.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_memory_budget.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_memory_budget.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_memory_budget  (PhysicalDeviceMemoryBudgetPropertiesEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceMemoryBudgetPropertiesEXT
-
-instance ToCStruct PhysicalDeviceMemoryBudgetPropertiesEXT
-instance Show PhysicalDeviceMemoryBudgetPropertiesEXT
-
-instance FromCStruct PhysicalDeviceMemoryBudgetPropertiesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_memory_priority.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_memory_priority.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_memory_priority.hs
+++ /dev/null
@@ -1,163 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_memory_priority  ( PhysicalDeviceMemoryPriorityFeaturesEXT(..)
-                                                          , MemoryPriorityAllocateInfoEXT(..)
-                                                          , EXT_MEMORY_PRIORITY_SPEC_VERSION
-                                                          , pattern EXT_MEMORY_PRIORITY_SPEC_VERSION
-                                                          , EXT_MEMORY_PRIORITY_EXTENSION_NAME
-                                                          , pattern EXT_MEMORY_PRIORITY_EXTENSION_NAME
-                                                          ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT))
--- | VkPhysicalDeviceMemoryPriorityFeaturesEXT - Structure describing memory
--- priority features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceMemoryPriorityFeaturesEXT' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceMemoryPriorityFeaturesEXT' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceMemoryPriorityFeaturesEXT' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceMemoryPriorityFeaturesEXT = PhysicalDeviceMemoryPriorityFeaturesEXT
-  { -- | @memoryPriority@ indicates that the implementation supports memory
-    -- priorities specified at memory allocation time via
-    -- 'MemoryPriorityAllocateInfoEXT'.
-    memoryPriority :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceMemoryPriorityFeaturesEXT
-
-instance ToCStruct PhysicalDeviceMemoryPriorityFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceMemoryPriorityFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (memoryPriority))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceMemoryPriorityFeaturesEXT where
-  peekCStruct p = do
-    memoryPriority <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceMemoryPriorityFeaturesEXT
-             (bool32ToBool memoryPriority)
-
-instance Storable PhysicalDeviceMemoryPriorityFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceMemoryPriorityFeaturesEXT where
-  zero = PhysicalDeviceMemoryPriorityFeaturesEXT
-           zero
-
-
--- | VkMemoryPriorityAllocateInfoEXT - Specify a memory allocation priority
---
--- = Description
---
--- Memory allocations with higher priority /may/ be more likely to stay in
--- device-local memory when the system is under memory pressure.
---
--- If this structure is not included, it is as if the @priority@ value were
--- @0.5@.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data MemoryPriorityAllocateInfoEXT = MemoryPriorityAllocateInfoEXT
-  { -- | @priority@ /must/ be between @0@ and @1@, inclusive
-    priority :: Float }
-  deriving (Typeable)
-deriving instance Show MemoryPriorityAllocateInfoEXT
-
-instance ToCStruct MemoryPriorityAllocateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryPriorityAllocateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (priority))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))
-    f
-
-instance FromCStruct MemoryPriorityAllocateInfoEXT where
-  peekCStruct p = do
-    priority <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
-    pure $ MemoryPriorityAllocateInfoEXT
-             ((\(CFloat a) -> a) priority)
-
-instance Storable MemoryPriorityAllocateInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryPriorityAllocateInfoEXT where
-  zero = MemoryPriorityAllocateInfoEXT
-           zero
-
-
-type EXT_MEMORY_PRIORITY_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_MEMORY_PRIORITY_SPEC_VERSION"
-pattern EXT_MEMORY_PRIORITY_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_MEMORY_PRIORITY_SPEC_VERSION = 1
-
-
-type EXT_MEMORY_PRIORITY_EXTENSION_NAME = "VK_EXT_memory_priority"
-
--- No documentation found for TopLevel "VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME"
-pattern EXT_MEMORY_PRIORITY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_MEMORY_PRIORITY_EXTENSION_NAME = "VK_EXT_memory_priority"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_memory_priority.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_memory_priority.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_memory_priority.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_memory_priority  ( MemoryPriorityAllocateInfoEXT
-                                                          , PhysicalDeviceMemoryPriorityFeaturesEXT
-                                                          ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data MemoryPriorityAllocateInfoEXT
-
-instance ToCStruct MemoryPriorityAllocateInfoEXT
-instance Show MemoryPriorityAllocateInfoEXT
-
-instance FromCStruct MemoryPriorityAllocateInfoEXT
-
-
-data PhysicalDeviceMemoryPriorityFeaturesEXT
-
-instance ToCStruct PhysicalDeviceMemoryPriorityFeaturesEXT
-instance Show PhysicalDeviceMemoryPriorityFeaturesEXT
-
-instance FromCStruct PhysicalDeviceMemoryPriorityFeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_metal_surface.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_metal_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_metal_surface.hs
+++ /dev/null
@@ -1,233 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_metal_surface  ( createMetalSurfaceEXT
-                                                        , MetalSurfaceCreateInfoEXT(..)
-                                                        , MetalSurfaceCreateFlagsEXT(..)
-                                                        , EXT_METAL_SURFACE_SPEC_VERSION
-                                                        , pattern EXT_METAL_SURFACE_SPEC_VERSION
-                                                        , EXT_METAL_SURFACE_EXTENSION_NAME
-                                                        , pattern EXT_METAL_SURFACE_EXTENSION_NAME
-                                                        , SurfaceKHR(..)
-                                                        , CAMetalLayer
-                                                        ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Extensions.WSITypes (CAMetalLayer)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateMetalSurfaceEXT))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (CAMetalLayer)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateMetalSurfaceEXT
-  :: FunPtr (Ptr Instance_T -> Ptr MetalSurfaceCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr MetalSurfaceCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateMetalSurfaceEXT - Create a VkSurfaceKHR object for CAMetalLayer
---
--- = Parameters
---
--- -   @instance@ is the instance with which to associate the surface.
---
--- -   @pCreateInfo@ is a pointer to a 'MetalSurfaceCreateInfoEXT'
---     structure specifying 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'MetalSurfaceCreateInfoEXT' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance', 'MetalSurfaceCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-createMetalSurfaceEXT :: forall io . MonadIO io => Instance -> MetalSurfaceCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createMetalSurfaceEXT instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateMetalSurfaceEXT' = mkVkCreateMetalSurfaceEXT (pVkCreateMetalSurfaceEXT (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateMetalSurfaceEXT' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
--- | VkMetalSurfaceCreateInfoEXT - Structure specifying parameters of a newly
--- created Metal surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'MetalSurfaceCreateFlagsEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createMetalSurfaceEXT'
-data MetalSurfaceCreateInfoEXT = MetalSurfaceCreateInfoEXT
-  { -- | @flags@ /must/ be @0@
-    flags :: MetalSurfaceCreateFlagsEXT
-  , -- | @pLayer@ is a reference to a
-    -- 'Graphics.Vulkan.Extensions.WSITypes.CAMetalLayer' object representing a
-    -- renderable surface.
-    layer :: Ptr CAMetalLayer
-  }
-  deriving (Typeable)
-deriving instance Show MetalSurfaceCreateInfoEXT
-
-instance ToCStruct MetalSurfaceCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MetalSurfaceCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr MetalSurfaceCreateFlagsEXT)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr CAMetalLayer))) (layer)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr CAMetalLayer))) (zero)
-    f
-
-instance FromCStruct MetalSurfaceCreateInfoEXT where
-  peekCStruct p = do
-    flags <- peek @MetalSurfaceCreateFlagsEXT ((p `plusPtr` 16 :: Ptr MetalSurfaceCreateFlagsEXT))
-    pLayer <- peek @(Ptr CAMetalLayer) ((p `plusPtr` 24 :: Ptr (Ptr CAMetalLayer)))
-    pure $ MetalSurfaceCreateInfoEXT
-             flags pLayer
-
-instance Storable MetalSurfaceCreateInfoEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MetalSurfaceCreateInfoEXT where
-  zero = MetalSurfaceCreateInfoEXT
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkMetalSurfaceCreateFlagsEXT"
-newtype MetalSurfaceCreateFlagsEXT = MetalSurfaceCreateFlagsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show MetalSurfaceCreateFlagsEXT where
-  showsPrec p = \case
-    MetalSurfaceCreateFlagsEXT x -> showParen (p >= 11) (showString "MetalSurfaceCreateFlagsEXT 0x" . showHex x)
-
-instance Read MetalSurfaceCreateFlagsEXT where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "MetalSurfaceCreateFlagsEXT")
-                       v <- step readPrec
-                       pure (MetalSurfaceCreateFlagsEXT v)))
-
-
-type EXT_METAL_SURFACE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_METAL_SURFACE_SPEC_VERSION"
-pattern EXT_METAL_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_METAL_SURFACE_SPEC_VERSION = 1
-
-
-type EXT_METAL_SURFACE_EXTENSION_NAME = "VK_EXT_metal_surface"
-
--- No documentation found for TopLevel "VK_EXT_METAL_SURFACE_EXTENSION_NAME"
-pattern EXT_METAL_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_METAL_SURFACE_EXTENSION_NAME = "VK_EXT_metal_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_metal_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_metal_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_metal_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_metal_surface  (MetalSurfaceCreateInfoEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data MetalSurfaceCreateInfoEXT
-
-instance ToCStruct MetalSurfaceCreateInfoEXT
-instance Show MetalSurfaceCreateInfoEXT
-
-instance FromCStruct MetalSurfaceCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_pci_bus_info.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_pci_bus_info.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_pci_bus_info.hs
+++ /dev/null
@@ -1,105 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_pci_bus_info  ( PhysicalDevicePCIBusInfoPropertiesEXT(..)
-                                                       , EXT_PCI_BUS_INFO_SPEC_VERSION
-                                                       , pattern EXT_PCI_BUS_INFO_SPEC_VERSION
-                                                       , EXT_PCI_BUS_INFO_EXTENSION_NAME
-                                                       , pattern EXT_PCI_BUS_INFO_EXTENSION_NAME
-                                                       ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT))
--- | VkPhysicalDevicePCIBusInfoPropertiesEXT - Structure containing PCI bus
--- information of a physical device
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDevicePCIBusInfoPropertiesEXT = PhysicalDevicePCIBusInfoPropertiesEXT
-  { -- | @pciDomain@ is the PCI bus domain.
-    pciDomain :: Word32
-  , -- | @pciBus@ is the PCI bus identifier.
-    pciBus :: Word32
-  , -- | @pciDevice@ is the PCI device identifier.
-    pciDevice :: Word32
-  , -- | @pciFunction@ is the PCI device function identifier.
-    pciFunction :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDevicePCIBusInfoPropertiesEXT
-
-instance ToCStruct PhysicalDevicePCIBusInfoPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDevicePCIBusInfoPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (pciDomain)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (pciBus)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (pciDevice)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (pciFunction)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDevicePCIBusInfoPropertiesEXT where
-  peekCStruct p = do
-    pciDomain <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pciBus <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pciDevice <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pciFunction <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    pure $ PhysicalDevicePCIBusInfoPropertiesEXT
-             pciDomain pciBus pciDevice pciFunction
-
-instance Storable PhysicalDevicePCIBusInfoPropertiesEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDevicePCIBusInfoPropertiesEXT where
-  zero = PhysicalDevicePCIBusInfoPropertiesEXT
-           zero
-           zero
-           zero
-           zero
-
-
-type EXT_PCI_BUS_INFO_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_PCI_BUS_INFO_SPEC_VERSION"
-pattern EXT_PCI_BUS_INFO_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_PCI_BUS_INFO_SPEC_VERSION = 2
-
-
-type EXT_PCI_BUS_INFO_EXTENSION_NAME = "VK_EXT_pci_bus_info"
-
--- No documentation found for TopLevel "VK_EXT_PCI_BUS_INFO_EXTENSION_NAME"
-pattern EXT_PCI_BUS_INFO_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_PCI_BUS_INFO_EXTENSION_NAME = "VK_EXT_pci_bus_info"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_pci_bus_info.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_pci_bus_info.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_pci_bus_info.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_pci_bus_info  (PhysicalDevicePCIBusInfoPropertiesEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDevicePCIBusInfoPropertiesEXT
-
-instance ToCStruct PhysicalDevicePCIBusInfoPropertiesEXT
-instance Show PhysicalDevicePCIBusInfoPropertiesEXT
-
-instance FromCStruct PhysicalDevicePCIBusInfoPropertiesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs
+++ /dev/null
@@ -1,124 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control  ( pattern ERROR_PIPELINE_COMPILE_REQUIRED_EXT
-                                                                          , PhysicalDevicePipelineCreationCacheControlFeaturesEXT(..)
-                                                                          , EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION
-                                                                          , pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION
-                                                                          , EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME
-                                                                          , pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME
-                                                                          ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result(PIPELINE_COMPILE_REQUIRED_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT))
--- No documentation found for TopLevel "VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT"
-pattern ERROR_PIPELINE_COMPILE_REQUIRED_EXT = PIPELINE_COMPILE_REQUIRED_EXT
-
-
--- | VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT - Structure
--- describing whether pipeline cache control can be supported by an
--- implementation
---
--- = Members
---
--- The members of the
--- 'PhysicalDevicePipelineCreationCacheControlFeaturesEXT' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDevicePipelineCreationCacheControlFeaturesEXT' structure
--- is included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDevicePipelineCreationCacheControlFeaturesEXT' /can/ also be
--- used in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDevicePipelineCreationCacheControlFeaturesEXT = PhysicalDevicePipelineCreationCacheControlFeaturesEXT
-  { -- | @pipelineCreationCacheControl@ indicates that the implementation
-    -- supports:
-    --
-    -- -   The following /can/ be used in @Vk*PipelineCreateInfo@::@flags@:
-    --
-    --     -   'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
-    --
-    --     -   'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
-    --
-    -- -   The following /can/ be used in
-    --     'Graphics.Vulkan.Core10.PipelineCache.PipelineCacheCreateInfo'::@flags@:
-    --
-    --     -   'Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT'
-    pipelineCreationCacheControl :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDevicePipelineCreationCacheControlFeaturesEXT
-
-instance ToCStruct PhysicalDevicePipelineCreationCacheControlFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDevicePipelineCreationCacheControlFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (pipelineCreationCacheControl))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDevicePipelineCreationCacheControlFeaturesEXT where
-  peekCStruct p = do
-    pipelineCreationCacheControl <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDevicePipelineCreationCacheControlFeaturesEXT
-             (bool32ToBool pipelineCreationCacheControl)
-
-instance Storable PhysicalDevicePipelineCreationCacheControlFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDevicePipelineCreationCacheControlFeaturesEXT where
-  zero = PhysicalDevicePipelineCreationCacheControlFeaturesEXT
-           zero
-
-
-type EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION"
-pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION = 3
-
-
-type EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME = "VK_EXT_pipeline_creation_cache_control"
-
--- No documentation found for TopLevel "VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME"
-pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME = "VK_EXT_pipeline_creation_cache_control"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control  (PhysicalDevicePipelineCreationCacheControlFeaturesEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDevicePipelineCreationCacheControlFeaturesEXT
-
-instance ToCStruct PhysicalDevicePipelineCreationCacheControlFeaturesEXT
-instance Show PhysicalDevicePipelineCreationCacheControlFeaturesEXT
-
-instance FromCStruct PhysicalDevicePipelineCreationCacheControlFeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs
+++ /dev/null
@@ -1,330 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback  ( PipelineCreationFeedbackEXT(..)
-                                                                     , PipelineCreationFeedbackCreateInfoEXT(..)
-                                                                     , PipelineCreationFeedbackFlagBitsEXT( PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT
-                                                                                                          , PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT
-                                                                                                          , PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT
-                                                                                                          , ..
-                                                                                                          )
-                                                                     , PipelineCreationFeedbackFlagsEXT
-                                                                     , EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION
-                                                                     , pattern EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION
-                                                                     , EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME
-                                                                     , pattern EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME
-                                                                     ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT))
--- | VkPipelineCreationFeedbackEXT - Feedback about the creation of a
--- pipeline or pipeline stage
---
--- = Description
---
--- If the 'PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT' is not set in @flags@,
--- an implementation /must/ not set any other bits in @flags@, and all
--- other 'PipelineCreationFeedbackEXT' data members are undefined.
---
--- = See Also
---
--- 'PipelineCreationFeedbackCreateInfoEXT',
--- 'PipelineCreationFeedbackFlagBitsEXT',
--- 'PipelineCreationFeedbackFlagsEXT'
-data PipelineCreationFeedbackEXT = PipelineCreationFeedbackEXT
-  { -- | @flags@ is a bitmask of 'PipelineCreationFeedbackFlagBitsEXT' providing
-    -- feedback about the creation of a pipeline or of a pipeline stage.
-    flags :: PipelineCreationFeedbackFlagsEXT
-  , -- | @duration@ is the duration spent creating a pipeline or pipeline stage
-    -- in nanoseconds.
-    duration :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show PipelineCreationFeedbackEXT
-
-instance ToCStruct PipelineCreationFeedbackEXT where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineCreationFeedbackEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr PipelineCreationFeedbackFlagsEXT)) (flags)
-    poke ((p `plusPtr` 8 :: Ptr Word64)) (duration)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr PipelineCreationFeedbackFlagsEXT)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct PipelineCreationFeedbackEXT where
-  peekCStruct p = do
-    flags <- peek @PipelineCreationFeedbackFlagsEXT ((p `plusPtr` 0 :: Ptr PipelineCreationFeedbackFlagsEXT))
-    duration <- peek @Word64 ((p `plusPtr` 8 :: Ptr Word64))
-    pure $ PipelineCreationFeedbackEXT
-             flags duration
-
-instance Storable PipelineCreationFeedbackEXT where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineCreationFeedbackEXT where
-  zero = PipelineCreationFeedbackEXT
-           zero
-           zero
-
-
--- | VkPipelineCreationFeedbackCreateInfoEXT - Request for feedback about the
--- creation of a pipeline
---
--- = Description
---
--- An implementation /should/ write pipeline creation feedback to
--- @pPipelineCreationFeedback@ and /may/ write pipeline stage creation
--- feedback to @pPipelineStageCreationFeedbacks@. An implementation /must/
--- set or clear the 'PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT' in
--- 'PipelineCreationFeedbackEXT'::@flags@ for @pPipelineCreationFeedback@
--- and every element of @pPipelineStageCreationFeedbacks@.
---
--- Note
---
--- One common scenario for an implementation to skip per-stage feedback is
--- when 'PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT'
--- is set in @pPipelineCreationFeedback@.
---
--- When chained to
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
--- or 'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo', the @i@
--- element of @pPipelineStageCreationFeedbacks@ corresponds to the @i@
--- element of
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR'::@pStages@,
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@pStages@,
--- or
--- 'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pStages@.
--- When chained to
--- 'Graphics.Vulkan.Core10.Pipeline.ComputePipelineCreateInfo', the first
--- element of @pPipelineStageCreationFeedbacks@ corresponds to
--- 'Graphics.Vulkan.Core10.Pipeline.ComputePipelineCreateInfo'::@stage@.
---
--- == Valid Usage
---
--- -   When chained to
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
---     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
---     /must/ equal
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@stageCount@
---
--- -   When chained to
---     'Graphics.Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
---     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
---     /must/ equal 1
---
--- -   When chained to
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
---     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
---     /must/ equal
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR'::@stageCount@
---
--- -   When chained to
---     'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
---     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
---     /must/ equal
---     'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@stageCount@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT'
---
--- -   @pPipelineCreationFeedback@ /must/ be a valid pointer to a
---     'PipelineCreationFeedbackEXT' structure
---
--- -   @pPipelineStageCreationFeedbacks@ /must/ be a valid pointer to an
---     array of @pipelineStageCreationFeedbackCount@
---     'PipelineCreationFeedbackEXT' structures
---
--- -   @pipelineStageCreationFeedbackCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
--- 'PipelineCreationFeedbackEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineCreationFeedbackCreateInfoEXT = PipelineCreationFeedbackCreateInfoEXT
-  { -- | @pPipelineCreationFeedback@ is a pointer to a
-    -- 'PipelineCreationFeedbackEXT' structure.
-    pipelineCreationFeedback :: Ptr PipelineCreationFeedbackEXT
-  , -- | @pipelineStageCreationFeedbackCount@ is the number of elements in
-    -- @pPipelineStageCreationFeedbacks@.
-    pipelineStageCreationFeedbackCount :: Word32
-  , -- | @pPipelineStageCreationFeedbacks@ is a pointer to an array of
-    -- @pipelineStageCreationFeedbackCount@ 'PipelineCreationFeedbackEXT'
-    -- structures.
-    pipelineStageCreationFeedbacks :: Ptr PipelineCreationFeedbackEXT
-  }
-  deriving (Typeable)
-deriving instance Show PipelineCreationFeedbackCreateInfoEXT
-
-instance ToCStruct PipelineCreationFeedbackCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineCreationFeedbackCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (pipelineCreationFeedback)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (pipelineStageCreationFeedbackCount)
-    poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (pipelineStageCreationFeedbacks)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (zero)
-    f
-
-instance FromCStruct PipelineCreationFeedbackCreateInfoEXT where
-  peekCStruct p = do
-    pPipelineCreationFeedback <- peek @(Ptr PipelineCreationFeedbackEXT) ((p `plusPtr` 16 :: Ptr (Ptr PipelineCreationFeedbackEXT)))
-    pipelineStageCreationFeedbackCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pPipelineStageCreationFeedbacks <- peek @(Ptr PipelineCreationFeedbackEXT) ((p `plusPtr` 32 :: Ptr (Ptr PipelineCreationFeedbackEXT)))
-    pure $ PipelineCreationFeedbackCreateInfoEXT
-             pPipelineCreationFeedback pipelineStageCreationFeedbackCount pPipelineStageCreationFeedbacks
-
-instance Storable PipelineCreationFeedbackCreateInfoEXT where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineCreationFeedbackCreateInfoEXT where
-  zero = PipelineCreationFeedbackCreateInfoEXT
-           zero
-           zero
-           zero
-
-
--- | VkPipelineCreationFeedbackFlagBitsEXT - Bitmask specifying pipeline or
--- pipeline stage creation feedback
---
--- = See Also
---
--- 'PipelineCreationFeedbackCreateInfoEXT', 'PipelineCreationFeedbackEXT',
--- 'PipelineCreationFeedbackFlagsEXT'
-newtype PipelineCreationFeedbackFlagBitsEXT = PipelineCreationFeedbackFlagBitsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT' indicates that the feedback
--- information is valid.
-pattern PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = PipelineCreationFeedbackFlagBitsEXT 0x00000001
--- | 'PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT'
--- indicates that a readily usable pipeline or pipeline stage was found in
--- the @pipelineCache@ specified by the application in the pipeline
--- creation command.
---
--- An implementation /should/ set the
--- 'PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT' bit
--- if it was able to avoid the large majority of pipeline or pipeline stage
--- creation work by using the @pipelineCache@ parameter of
--- 'Graphics.Vulkan.Core10.Pipeline.createGraphicsPipelines',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV',
--- or 'Graphics.Vulkan.Core10.Pipeline.createComputePipelines'. When an
--- implementation sets this bit for the entire pipeline, it /may/ leave it
--- unset for any stage.
---
--- Note
---
--- Implementations are encouraged to provide a meaningful signal to
--- applications using this bit. The intention is to communicate to the
--- application that the pipeline or pipeline stage was created \"as fast as
--- it gets\" using the pipeline cache provided by the application. If an
--- implementation uses an internal cache, it is discouraged from setting
--- this bit as the feedback would be unactionable.
-pattern PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = PipelineCreationFeedbackFlagBitsEXT 0x00000002
--- | 'PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT'
--- indicates that the base pipeline specified by the @basePipelineHandle@
--- or @basePipelineIndex@ member of the @Vk*PipelineCreateInfo@ structure
--- was used to accelerate the creation of the pipeline.
---
--- An implementation /should/ set the
--- 'PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT' bit if
--- it was able to avoid a significant amount of work by using the base
--- pipeline.
---
--- Note
---
--- While \"significant amount of work\" is subjective, implementations are
--- encouraged to provide a meaningful signal to applications using this
--- bit. For example, a 1% reduction in duration may not warrant setting
--- this bit, while a 50% reduction would.
-pattern PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = PipelineCreationFeedbackFlagBitsEXT 0x00000004
-
-type PipelineCreationFeedbackFlagsEXT = PipelineCreationFeedbackFlagBitsEXT
-
-instance Show PipelineCreationFeedbackFlagBitsEXT where
-  showsPrec p = \case
-    PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT -> showString "PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT"
-    PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT -> showString "PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT"
-    PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT -> showString "PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT"
-    PipelineCreationFeedbackFlagBitsEXT x -> showParen (p >= 11) (showString "PipelineCreationFeedbackFlagBitsEXT 0x" . showHex x)
-
-instance Read PipelineCreationFeedbackFlagBitsEXT where
-  readPrec = parens (choose [("PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT", pure PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT)
-                            , ("PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT", pure PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT)
-                            , ("PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT", pure PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineCreationFeedbackFlagBitsEXT")
-                       v <- step readPrec
-                       pure (PipelineCreationFeedbackFlagBitsEXT v)))
-
-
-type EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION"
-pattern EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION = 1
-
-
-type EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME = "VK_EXT_pipeline_creation_feedback"
-
--- No documentation found for TopLevel "VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME"
-pattern EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME = "VK_EXT_pipeline_creation_feedback"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback  ( PipelineCreationFeedbackCreateInfoEXT
-                                                                     , PipelineCreationFeedbackEXT
-                                                                     ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PipelineCreationFeedbackCreateInfoEXT
-
-instance ToCStruct PipelineCreationFeedbackCreateInfoEXT
-instance Show PipelineCreationFeedbackCreateInfoEXT
-
-instance FromCStruct PipelineCreationFeedbackCreateInfoEXT
-
-
-data PipelineCreationFeedbackEXT
-
-instance ToCStruct PipelineCreationFeedbackEXT
-instance Show PipelineCreationFeedbackEXT
-
-instance FromCStruct PipelineCreationFeedbackEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_post_depth_coverage.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_post_depth_coverage.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_post_depth_coverage.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_post_depth_coverage  ( EXT_POST_DEPTH_COVERAGE_SPEC_VERSION
-                                                              , pattern EXT_POST_DEPTH_COVERAGE_SPEC_VERSION
-                                                              , EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME
-                                                              , pattern EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME
-                                                              ) where
-
-import Data.String (IsString)
-
-type EXT_POST_DEPTH_COVERAGE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION"
-pattern EXT_POST_DEPTH_COVERAGE_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_POST_DEPTH_COVERAGE_SPEC_VERSION = 1
-
-
-type EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME = "VK_EXT_post_depth_coverage"
-
--- No documentation found for TopLevel "VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME"
-pattern EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_queue_family_foreign.hs
+++ /dev/null
@@ -1,25 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_queue_family_foreign  ( EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION
-                                                               , pattern EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION
-                                                               , EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME
-                                                               , pattern EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME
-                                                               , QUEUE_FAMILY_FOREIGN_EXT
-                                                               , pattern QUEUE_FAMILY_FOREIGN_EXT
-                                                               ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core10.APIConstants (QUEUE_FAMILY_FOREIGN_EXT)
-import Graphics.Vulkan.Core10.APIConstants (pattern QUEUE_FAMILY_FOREIGN_EXT)
-type EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION"
-pattern EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION = 1
-
-
-type EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME = "VK_EXT_queue_family_foreign"
-
--- No documentation found for TopLevel "VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME"
-pattern EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME = "VK_EXT_queue_family_foreign"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_robustness2.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_robustness2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_robustness2.hs
+++ /dev/null
@@ -1,223 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_robustness2  ( PhysicalDeviceRobustness2FeaturesEXT(..)
-                                                      , PhysicalDeviceRobustness2PropertiesEXT(..)
-                                                      , EXT_ROBUSTNESS_2_SPEC_VERSION
-                                                      , pattern EXT_ROBUSTNESS_2_SPEC_VERSION
-                                                      , EXT_ROBUSTNESS_2_EXTENSION_NAME
-                                                      , pattern EXT_ROBUSTNESS_2_EXTENSION_NAME
-                                                      ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT))
--- | VkPhysicalDeviceRobustness2FeaturesEXT - Structure describing the
--- out-of-bounds behavior for an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceRobustness2FeaturesEXT' structure
--- describe the following features:
---
--- = Description
---
--- -   @robustBufferAccess2@ indicates whether buffer accesses are tightly
---     bounds-checked against the range of the descriptor. Uniform buffers
---     /must/ be bounds-checked to the range of the descriptor, where the
---     range is rounded up to a multiple of
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>.
---     Storage buffers /must/ be bounds-checked to the range of the
---     descriptor, where the range is rounded up to a multiple of
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>.
---     Out of bounds buffer loads will return zero values, and formatted
---     loads will have (0,0,1) values inserted for missing G, B, or A
---     components based on the format.
---
--- -   @robustImageAccess2@ indicates whether image accesses are tightly
---     bounds-checked against the dimensions of the image view. Out of
---     bounds image loads will return zero values, with (0,0,1) values
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-conversion-to-rgba inserted for missing G, B, or A components>
---     based on the format.
---
--- -   @nullDescriptor@ indicates whether descriptors /can/ be written with
---     a 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' resource or
---     view, which are considered valid to access and act as if the
---     descriptor were bound to nothing.
---
--- If the 'PhysicalDeviceRobustness2FeaturesEXT' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
---
--- == Valid Usage
---
--- -   If @robustBufferAccess2@ is enabled then
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
---     /must/ also be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceRobustness2FeaturesEXT = PhysicalDeviceRobustness2FeaturesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceRobustness2FeaturesEXT" "robustBufferAccess2"
-    robustBufferAccess2 :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceRobustness2FeaturesEXT" "robustImageAccess2"
-    robustImageAccess2 :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceRobustness2FeaturesEXT" "nullDescriptor"
-    nullDescriptor :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceRobustness2FeaturesEXT
-
-instance ToCStruct PhysicalDeviceRobustness2FeaturesEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceRobustness2FeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (robustBufferAccess2))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (robustImageAccess2))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (nullDescriptor))
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceRobustness2FeaturesEXT where
-  peekCStruct p = do
-    robustBufferAccess2 <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    robustImageAccess2 <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    nullDescriptor <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    pure $ PhysicalDeviceRobustness2FeaturesEXT
-             (bool32ToBool robustBufferAccess2) (bool32ToBool robustImageAccess2) (bool32ToBool nullDescriptor)
-
-instance Storable PhysicalDeviceRobustness2FeaturesEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceRobustness2FeaturesEXT where
-  zero = PhysicalDeviceRobustness2FeaturesEXT
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceRobustness2PropertiesEXT - Structure describing robust
--- buffer access properties supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceRobustness2PropertiesEXT' structure
--- describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceRobustness2PropertiesEXT' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceRobustness2PropertiesEXT = PhysicalDeviceRobustness2PropertiesEXT
-  { -- | @robustStorageBufferAccessSizeAlignment@ is the number of bytes that the
-    -- range of a storage buffer descriptor is rounded up to when used for
-    -- bounds-checking when
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    -- is enabled. This value is either 1 or 4.
-    robustStorageBufferAccessSizeAlignment :: DeviceSize
-  , -- | @robustUniformBufferAccessSizeAlignment@ is the number of bytes that the
-    -- range of a uniform buffer descriptor is rounded up to when used for
-    -- bounds-checking when
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
-    -- is enabled. This value is a power of two in the range [1, 256].
-    robustUniformBufferAccessSizeAlignment :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceRobustness2PropertiesEXT
-
-instance ToCStruct PhysicalDeviceRobustness2PropertiesEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceRobustness2PropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (robustStorageBufferAccessSizeAlignment)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (robustUniformBufferAccessSizeAlignment)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceRobustness2PropertiesEXT where
-  peekCStruct p = do
-    robustStorageBufferAccessSizeAlignment <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    robustUniformBufferAccessSizeAlignment <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    pure $ PhysicalDeviceRobustness2PropertiesEXT
-             robustStorageBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment
-
-instance Storable PhysicalDeviceRobustness2PropertiesEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceRobustness2PropertiesEXT where
-  zero = PhysicalDeviceRobustness2PropertiesEXT
-           zero
-           zero
-
-
-type EXT_ROBUSTNESS_2_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_ROBUSTNESS_2_SPEC_VERSION"
-pattern EXT_ROBUSTNESS_2_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_ROBUSTNESS_2_SPEC_VERSION = 1
-
-
-type EXT_ROBUSTNESS_2_EXTENSION_NAME = "VK_EXT_robustness2"
-
--- No documentation found for TopLevel "VK_EXT_ROBUSTNESS_2_EXTENSION_NAME"
-pattern EXT_ROBUSTNESS_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_ROBUSTNESS_2_EXTENSION_NAME = "VK_EXT_robustness2"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_robustness2.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_robustness2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_robustness2.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_robustness2  ( PhysicalDeviceRobustness2FeaturesEXT
-                                                      , PhysicalDeviceRobustness2PropertiesEXT
-                                                      ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceRobustness2FeaturesEXT
-
-instance ToCStruct PhysicalDeviceRobustness2FeaturesEXT
-instance Show PhysicalDeviceRobustness2FeaturesEXT
-
-instance FromCStruct PhysicalDeviceRobustness2FeaturesEXT
-
-
-data PhysicalDeviceRobustness2PropertiesEXT
-
-instance ToCStruct PhysicalDeviceRobustness2PropertiesEXT
-instance Show PhysicalDeviceRobustness2PropertiesEXT
-
-instance FromCStruct PhysicalDeviceRobustness2PropertiesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs
+++ /dev/null
@@ -1,778 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_sample_locations  ( cmdSetSampleLocationsEXT
-                                                           , getPhysicalDeviceMultisamplePropertiesEXT
-                                                           , SampleLocationEXT(..)
-                                                           , SampleLocationsInfoEXT(..)
-                                                           , AttachmentSampleLocationsEXT(..)
-                                                           , SubpassSampleLocationsEXT(..)
-                                                           , RenderPassSampleLocationsBeginInfoEXT(..)
-                                                           , PipelineSampleLocationsStateCreateInfoEXT(..)
-                                                           , PhysicalDeviceSampleLocationsPropertiesEXT(..)
-                                                           , MultisamplePropertiesEXT(..)
-                                                           , EXT_SAMPLE_LOCATIONS_SPEC_VERSION
-                                                           , pattern EXT_SAMPLE_LOCATIONS_SPEC_VERSION
-                                                           , EXT_SAMPLE_LOCATIONS_EXTENSION_NAME
-                                                           , pattern EXT_SAMPLE_LOCATIONS_EXTENSION_NAME
-                                                           ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetSampleLocationsEXT))
-import Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceMultisamplePropertiesEXT))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetSampleLocationsEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr SampleLocationsInfoEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr SampleLocationsInfoEXT -> IO ()
-
--- | vkCmdSetSampleLocationsEXT - Set the dynamic sample locations state
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pSampleLocationsInfo@ is the sample locations state to set.
---
--- == Valid Usage
---
--- -   The @sampleLocationsPerPixel@ member of @pSampleLocationsInfo@
---     /must/ equal the @rasterizationSamples@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'
---     structure the bound graphics pipeline has been created with
---
--- -   If
---     'PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
---     is 'Graphics.Vulkan.Core10.BaseType.FALSE' then the current render
---     pass /must/ have been begun by specifying a
---     'RenderPassSampleLocationsBeginInfoEXT' structure whose
---     @pPostSubpassSampleLocations@ member contains an element with a
---     @subpassIndex@ matching the current subpass index and the
---     @sampleLocationsInfo@ member of that element /must/ match the sample
---     locations state pointed to by @pSampleLocationsInfo@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pSampleLocationsInfo@ /must/ be a valid pointer to a valid
---     'SampleLocationsInfoEXT' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'SampleLocationsInfoEXT'
-cmdSetSampleLocationsEXT :: forall io . MonadIO io => CommandBuffer -> SampleLocationsInfoEXT -> io ()
-cmdSetSampleLocationsEXT commandBuffer sampleLocationsInfo = liftIO . evalContT $ do
-  let vkCmdSetSampleLocationsEXT' = mkVkCmdSetSampleLocationsEXT (pVkCmdSetSampleLocationsEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  pSampleLocationsInfo <- ContT $ withCStruct (sampleLocationsInfo)
-  lift $ vkCmdSetSampleLocationsEXT' (commandBufferHandle (commandBuffer)) pSampleLocationsInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceMultisamplePropertiesEXT
-  :: FunPtr (Ptr PhysicalDevice_T -> SampleCountFlagBits -> Ptr MultisamplePropertiesEXT -> IO ()) -> Ptr PhysicalDevice_T -> SampleCountFlagBits -> Ptr MultisamplePropertiesEXT -> IO ()
-
--- | vkGetPhysicalDeviceMultisamplePropertiesEXT - Report sample count
--- specific multisampling capabilities of a physical device
---
--- = 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
---     'MultisamplePropertiesEXT' structure in which information about the
---     additional multisampling capabilities specific to the sample count
---     is returned.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'MultisamplePropertiesEXT',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-getPhysicalDeviceMultisamplePropertiesEXT :: forall io . MonadIO io => PhysicalDevice -> ("samples" ::: SampleCountFlagBits) -> io (MultisamplePropertiesEXT)
-getPhysicalDeviceMultisamplePropertiesEXT physicalDevice samples = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceMultisamplePropertiesEXT' = mkVkGetPhysicalDeviceMultisamplePropertiesEXT (pVkGetPhysicalDeviceMultisamplePropertiesEXT (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPMultisampleProperties <- ContT (withZeroCStruct @MultisamplePropertiesEXT)
-  lift $ vkGetPhysicalDeviceMultisamplePropertiesEXT' (physicalDeviceHandle (physicalDevice)) (samples) (pPMultisampleProperties)
-  pMultisampleProperties <- lift $ peekCStruct @MultisamplePropertiesEXT pPMultisampleProperties
-  pure $ (pMultisampleProperties)
-
-
--- | VkSampleLocationEXT - Structure specifying the coordinates of a sample
--- location
---
--- = 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 'SampleLocationEXT' structure are always
--- clamped to the implementation-dependent sample location coordinate range
--- [@sampleLocationCoordinateRange@[0],@sampleLocationCoordinateRange@[1]]
--- that /can/ be queried by adding a
--- 'PhysicalDeviceSampleLocationsPropertiesEXT' structure to the @pNext@
--- chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'.
---
--- = See Also
---
--- 'SampleLocationsInfoEXT'
-data SampleLocationEXT = SampleLocationEXT
-  { -- | @x@ is the horizontal coordinate of the sample’s location.
-    x :: Float
-  , -- | @y@ is the vertical coordinate of the sample’s location.
-    y :: Float
-  }
-  deriving (Typeable)
-deriving instance Show SampleLocationEXT
-
-instance ToCStruct SampleLocationEXT where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SampleLocationEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (x))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (y))
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
-    f
-
-instance FromCStruct SampleLocationEXT where
-  peekCStruct p = do
-    x <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
-    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
-    pure $ SampleLocationEXT
-             ((\(CFloat a) -> a) x) ((\(CFloat a) -> a) y)
-
-instance Storable SampleLocationEXT where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SampleLocationEXT where
-  zero = SampleLocationEXT
-           zero
-           zero
-
-
--- | VkSampleLocationsInfoEXT - Structure specifying a set of sample
--- locations
---
--- = 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
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.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].
---
--- If the render pass has a fragment density map, the implementation will
--- choose the sample locations for the fragment and the contents of
--- @pSampleLocations@ /may/ be ignored.
---
--- == Valid Usage
---
--- -   @sampleLocationsPerPixel@ /must/ be a bit value that is set in
---     'PhysicalDeviceSampleLocationsPropertiesEXT'::@sampleLocationSampleCounts@
---
--- -   @sampleLocationsCount@ /must/ equal @sampleLocationsPerPixel@ ×
---     @sampleLocationGridSize.width@ × @sampleLocationGridSize.height@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT'
---
--- -   If @sampleLocationsPerPixel@ is not @0@, @sampleLocationsPerPixel@
---     /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
---     value
---
--- -   If @sampleLocationsCount@ is not @0@, @pSampleLocations@ /must/ be a
---     valid pointer to an array of @sampleLocationsCount@
---     'SampleLocationEXT' structures
---
--- = See Also
---
--- 'AttachmentSampleLocationsEXT',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'PipelineSampleLocationsStateCreateInfoEXT',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
--- 'SampleLocationEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'SubpassSampleLocationsEXT', 'cmdSetSampleLocationsEXT'
-data SampleLocationsInfoEXT = SampleLocationsInfoEXT
-  { -- | @sampleLocationsPerPixel@ is a
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- specifying the number of sample locations per pixel.
-    sampleLocationsPerPixel :: SampleCountFlagBits
-  , -- | @sampleLocationGridSize@ is the size of the sample location grid to
-    -- select custom sample locations for.
-    sampleLocationGridSize :: Extent2D
-  , -- | @pSampleLocations@ is a pointer to an array of @sampleLocationsCount@
-    -- 'SampleLocationEXT' structures.
-    sampleLocations :: Vector SampleLocationEXT
-  }
-  deriving (Typeable)
-deriving instance Show SampleLocationsInfoEXT
-
-instance ToCStruct SampleLocationsInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SampleLocationsInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr SampleCountFlagBits)) (sampleLocationsPerPixel)
-    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (sampleLocationGridSize) . ($ ())
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (sampleLocations)) :: Word32))
-    pPSampleLocations' <- ContT $ allocaBytesAligned @SampleLocationEXT ((Data.Vector.length (sampleLocations)) * 8) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSampleLocations' `plusPtr` (8 * (i)) :: Ptr SampleLocationEXT) (e) . ($ ())) (sampleLocations)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SampleLocationEXT))) (pPSampleLocations')
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (zero) . ($ ())
-    pPSampleLocations' <- ContT $ allocaBytesAligned @SampleLocationEXT ((Data.Vector.length (mempty)) * 8) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSampleLocations' `plusPtr` (8 * (i)) :: Ptr SampleLocationEXT) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SampleLocationEXT))) (pPSampleLocations')
-    lift $ f
-
-instance FromCStruct SampleLocationsInfoEXT where
-  peekCStruct p = do
-    sampleLocationsPerPixel <- peek @SampleCountFlagBits ((p `plusPtr` 16 :: Ptr SampleCountFlagBits))
-    sampleLocationGridSize <- peekCStruct @Extent2D ((p `plusPtr` 20 :: Ptr Extent2D))
-    sampleLocationsCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    pSampleLocations <- peek @(Ptr SampleLocationEXT) ((p `plusPtr` 32 :: Ptr (Ptr SampleLocationEXT)))
-    pSampleLocations' <- generateM (fromIntegral sampleLocationsCount) (\i -> peekCStruct @SampleLocationEXT ((pSampleLocations `advancePtrBytes` (8 * (i)) :: Ptr SampleLocationEXT)))
-    pure $ SampleLocationsInfoEXT
-             sampleLocationsPerPixel sampleLocationGridSize pSampleLocations'
-
-instance Zero SampleLocationsInfoEXT where
-  zero = SampleLocationsInfoEXT
-           zero
-           zero
-           mempty
-
-
--- | VkAttachmentSampleLocationsEXT - Structure specifying the sample
--- locations state to use in the initial layout transition of attachments
---
--- = Description
---
--- If the image referenced by the framebuffer attachment at index
--- @attachmentIndex@ was not created with
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
--- then the values specified in @sampleLocationsInfo@ are ignored.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'RenderPassSampleLocationsBeginInfoEXT', 'SampleLocationsInfoEXT'
-data AttachmentSampleLocationsEXT = AttachmentSampleLocationsEXT
-  { -- | @attachmentIndex@ /must/ be less than the @attachmentCount@ specified in
-    -- 'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo' the render pass
-    -- specified by
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderPass@
-    -- was created with
-    attachmentIndex :: Word32
-  , -- | @sampleLocationsInfo@ /must/ be a valid 'SampleLocationsInfoEXT'
-    -- structure
-    sampleLocationsInfo :: SampleLocationsInfoEXT
-  }
-  deriving (Typeable)
-deriving instance Show AttachmentSampleLocationsEXT
-
-instance ToCStruct AttachmentSampleLocationsEXT where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AttachmentSampleLocationsEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (attachmentIndex)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT)) (sampleLocationsInfo) . ($ ())
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct AttachmentSampleLocationsEXT where
-  peekCStruct p = do
-    attachmentIndex <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    sampleLocationsInfo <- peekCStruct @SampleLocationsInfoEXT ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT))
-    pure $ AttachmentSampleLocationsEXT
-             attachmentIndex sampleLocationsInfo
-
-instance Zero AttachmentSampleLocationsEXT where
-  zero = AttachmentSampleLocationsEXT
-           zero
-           zero
-
-
--- | VkSubpassSampleLocationsEXT - Structure specifying the sample locations
--- state to use for layout transitions of attachments performed after a
--- given subpass
---
--- = Description
---
--- If the image referenced by the depth\/stencil attachment used in the
--- subpass identified by @subpassIndex@ was not created with
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
--- or if the subpass does not use a depth\/stencil attachment, and
--- 'PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
--- is 'Graphics.Vulkan.Core10.BaseType.TRUE' then the values specified in
--- @sampleLocationsInfo@ are ignored.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'RenderPassSampleLocationsBeginInfoEXT', 'SampleLocationsInfoEXT'
-data SubpassSampleLocationsEXT = SubpassSampleLocationsEXT
-  { -- | @subpassIndex@ /must/ be less than the @subpassCount@ specified in
-    -- 'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo' the render pass
-    -- specified by
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderPass@
-    -- was created with
-    subpassIndex :: Word32
-  , -- | @sampleLocationsInfo@ /must/ be a valid 'SampleLocationsInfoEXT'
-    -- structure
-    sampleLocationsInfo :: SampleLocationsInfoEXT
-  }
-  deriving (Typeable)
-deriving instance Show SubpassSampleLocationsEXT
-
-instance ToCStruct SubpassSampleLocationsEXT where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SubpassSampleLocationsEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (subpassIndex)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT)) (sampleLocationsInfo) . ($ ())
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct SubpassSampleLocationsEXT where
-  peekCStruct p = do
-    subpassIndex <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    sampleLocationsInfo <- peekCStruct @SampleLocationsInfoEXT ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT))
-    pure $ SubpassSampleLocationsEXT
-             subpassIndex sampleLocationsInfo
-
-instance Zero SubpassSampleLocationsEXT where
-  zero = SubpassSampleLocationsEXT
-           zero
-           zero
-
-
--- | VkRenderPassSampleLocationsBeginInfoEXT - Structure specifying sample
--- locations to use for the layout transition of custom sample locations
--- compatible depth\/stencil attachments
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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
---     'AttachmentSampleLocationsEXT' structures
---
--- -   If @postSubpassSampleLocationsCount@ is not @0@,
---     @pPostSubpassSampleLocations@ /must/ be a valid pointer to an array
---     of @postSubpassSampleLocationsCount@ valid
---     'SubpassSampleLocationsEXT' structures
---
--- = See Also
---
--- 'AttachmentSampleLocationsEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'SubpassSampleLocationsEXT'
-data RenderPassSampleLocationsBeginInfoEXT = RenderPassSampleLocationsBeginInfoEXT
-  { -- | @pAttachmentInitialSampleLocations@ is a pointer to an array of
-    -- @attachmentInitialSampleLocationsCount@ 'AttachmentSampleLocationsEXT'
-    -- structures specifying the attachment indices and their corresponding
-    -- sample location state. Each element of
-    -- @pAttachmentInitialSampleLocations@ /can/ specify the sample location
-    -- state to use in the automatic layout transition performed to transition
-    -- a depth\/stencil attachment from the initial layout of the attachment to
-    -- the image layout specified for the attachment in the first subpass using
-    -- it.
-    attachmentInitialSampleLocations :: Vector AttachmentSampleLocationsEXT
-  , -- | @pPostSubpassSampleLocations@ is a pointer to an array of
-    -- @postSubpassSampleLocationsCount@ 'SubpassSampleLocationsEXT' structures
-    -- specifying the subpass indices and their corresponding sample location
-    -- state. Each element of @pPostSubpassSampleLocations@ /can/ specify the
-    -- sample location state to use in the automatic layout transition
-    -- performed to transition the depth\/stencil attachment used by the
-    -- specified subpass to the image layout specified in a dependent subpass
-    -- or to the final layout of the attachment in case the specified subpass
-    -- is the last subpass using that attachment. In addition, if
-    -- 'PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
-    -- is 'Graphics.Vulkan.Core10.BaseType.FALSE', each element of
-    -- @pPostSubpassSampleLocations@ /must/ specify the sample location state
-    -- that matches the sample locations used by all pipelines that will be
-    -- bound to a command buffer during the specified subpass. If
-    -- @variableSampleLocations@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', the
-    -- sample locations used for rasterization do not depend on
-    -- @pPostSubpassSampleLocations@.
-    postSubpassSampleLocations :: Vector SubpassSampleLocationsEXT
-  }
-  deriving (Typeable)
-deriving instance Show RenderPassSampleLocationsBeginInfoEXT
-
-instance ToCStruct RenderPassSampleLocationsBeginInfoEXT where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RenderPassSampleLocationsBeginInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachmentInitialSampleLocations)) :: Word32))
-    pPAttachmentInitialSampleLocations' <- ContT $ allocaBytesAligned @AttachmentSampleLocationsEXT ((Data.Vector.length (attachmentInitialSampleLocations)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachmentInitialSampleLocations' `plusPtr` (48 * (i)) :: Ptr AttachmentSampleLocationsEXT) (e) . ($ ())) (attachmentInitialSampleLocations)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AttachmentSampleLocationsEXT))) (pPAttachmentInitialSampleLocations')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (postSubpassSampleLocations)) :: Word32))
-    pPPostSubpassSampleLocations' <- ContT $ allocaBytesAligned @SubpassSampleLocationsEXT ((Data.Vector.length (postSubpassSampleLocations)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPostSubpassSampleLocations' `plusPtr` (48 * (i)) :: Ptr SubpassSampleLocationsEXT) (e) . ($ ())) (postSubpassSampleLocations)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SubpassSampleLocationsEXT))) (pPPostSubpassSampleLocations')
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPAttachmentInitialSampleLocations' <- ContT $ allocaBytesAligned @AttachmentSampleLocationsEXT ((Data.Vector.length (mempty)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachmentInitialSampleLocations' `plusPtr` (48 * (i)) :: Ptr AttachmentSampleLocationsEXT) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AttachmentSampleLocationsEXT))) (pPAttachmentInitialSampleLocations')
-    pPPostSubpassSampleLocations' <- ContT $ allocaBytesAligned @SubpassSampleLocationsEXT ((Data.Vector.length (mempty)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPostSubpassSampleLocations' `plusPtr` (48 * (i)) :: Ptr SubpassSampleLocationsEXT) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SubpassSampleLocationsEXT))) (pPPostSubpassSampleLocations')
-    lift $ f
-
-instance FromCStruct RenderPassSampleLocationsBeginInfoEXT where
-  peekCStruct p = do
-    attachmentInitialSampleLocationsCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pAttachmentInitialSampleLocations <- peek @(Ptr AttachmentSampleLocationsEXT) ((p `plusPtr` 24 :: Ptr (Ptr AttachmentSampleLocationsEXT)))
-    pAttachmentInitialSampleLocations' <- generateM (fromIntegral attachmentInitialSampleLocationsCount) (\i -> peekCStruct @AttachmentSampleLocationsEXT ((pAttachmentInitialSampleLocations `advancePtrBytes` (48 * (i)) :: Ptr AttachmentSampleLocationsEXT)))
-    postSubpassSampleLocationsCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pPostSubpassSampleLocations <- peek @(Ptr SubpassSampleLocationsEXT) ((p `plusPtr` 40 :: Ptr (Ptr SubpassSampleLocationsEXT)))
-    pPostSubpassSampleLocations' <- generateM (fromIntegral postSubpassSampleLocationsCount) (\i -> peekCStruct @SubpassSampleLocationsEXT ((pPostSubpassSampleLocations `advancePtrBytes` (48 * (i)) :: Ptr SubpassSampleLocationsEXT)))
-    pure $ RenderPassSampleLocationsBeginInfoEXT
-             pAttachmentInitialSampleLocations' pPostSubpassSampleLocations'
-
-instance Zero RenderPassSampleLocationsBeginInfoEXT where
-  zero = RenderPassSampleLocationsBeginInfoEXT
-           mempty
-           mempty
-
-
--- | VkPipelineSampleLocationsStateCreateInfoEXT - Structure specifying
--- sample locations for a pipeline
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32', 'SampleLocationsInfoEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineSampleLocationsStateCreateInfoEXT = PipelineSampleLocationsStateCreateInfoEXT
-  { -- | @sampleLocationsEnable@ controls whether custom sample locations are
-    -- used. If @sampleLocationsEnable@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.FALSE', the default sample locations
-    -- are used and the values specified in @sampleLocationsInfo@ are ignored.
-    sampleLocationsEnable :: Bool
-  , -- | @sampleLocationsInfo@ /must/ be a valid 'SampleLocationsInfoEXT'
-    -- structure
-    sampleLocationsInfo :: SampleLocationsInfoEXT
-  }
-  deriving (Typeable)
-deriving instance Show PipelineSampleLocationsStateCreateInfoEXT
-
-instance ToCStruct PipelineSampleLocationsStateCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineSampleLocationsStateCreateInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (sampleLocationsEnable))
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr SampleLocationsInfoEXT)) (sampleLocationsInfo) . ($ ())
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr SampleLocationsInfoEXT)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct PipelineSampleLocationsStateCreateInfoEXT where
-  peekCStruct p = do
-    sampleLocationsEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    sampleLocationsInfo <- peekCStruct @SampleLocationsInfoEXT ((p `plusPtr` 24 :: Ptr SampleLocationsInfoEXT))
-    pure $ PipelineSampleLocationsStateCreateInfoEXT
-             (bool32ToBool sampleLocationsEnable) sampleLocationsInfo
-
-instance Zero PipelineSampleLocationsStateCreateInfoEXT where
-  zero = PipelineSampleLocationsStateCreateInfoEXT
-           zero
-           zero
-
-
--- | VkPhysicalDeviceSampleLocationsPropertiesEXT - Structure describing
--- sample location limits that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceSampleLocationsPropertiesEXT'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceSampleLocationsPropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceSampleLocationsPropertiesEXT = PhysicalDeviceSampleLocationsPropertiesEXT
-  { -- | @sampleLocationSampleCounts@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
-    -- indicating the sample counts supporting custom sample locations.
-    sampleLocationSampleCounts :: SampleCountFlags
-  , -- | @maxSampleLocationGridSize@ is the maximum size of the pixel grid in
-    -- which sample locations /can/ vary that is supported for all sample
-    -- counts in @sampleLocationSampleCounts@.
-    maxSampleLocationGridSize :: Extent2D
-  , -- | @sampleLocationCoordinateRange@[2] is the range of supported sample
-    -- location coordinates.
-    sampleLocationCoordinateRange :: (Float, Float)
-  , -- | @sampleLocationSubPixelBits@ is the number of bits of subpixel precision
-    -- for sample locations.
-    sampleLocationSubPixelBits :: Word32
-  , -- | @variableSampleLocations@ specifies whether the sample locations used by
-    -- all pipelines that will be bound to a command buffer during a subpass
-    -- /must/ match. If set to 'Graphics.Vulkan.Core10.BaseType.TRUE', the
-    -- implementation supports variable sample locations in a subpass. If set
-    -- to 'Graphics.Vulkan.Core10.BaseType.FALSE', then the sample locations
-    -- /must/ stay constant in each subpass.
-    variableSampleLocations :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceSampleLocationsPropertiesEXT
-
-instance ToCStruct PhysicalDeviceSampleLocationsPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceSampleLocationsPropertiesEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr SampleCountFlags)) (sampleLocationSampleCounts)
-    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (maxSampleLocationGridSize) . ($ ())
-    let pSampleLocationCoordinateRange' = lowerArrayPtr ((p `plusPtr` 28 :: Ptr (FixedArray 2 CFloat)))
-    lift $ case (sampleLocationCoordinateRange) of
-      (e0, e1) -> do
-        poke (pSampleLocationCoordinateRange' :: Ptr CFloat) (CFloat (e0))
-        poke (pSampleLocationCoordinateRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (sampleLocationSubPixelBits)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (variableSampleLocations))
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr SampleCountFlags)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (zero) . ($ ())
-    let pSampleLocationCoordinateRange' = lowerArrayPtr ((p `plusPtr` 28 :: Ptr (FixedArray 2 CFloat)))
-    lift $ case ((zero, zero)) of
-      (e0, e1) -> do
-        poke (pSampleLocationCoordinateRange' :: Ptr CFloat) (CFloat (e0))
-        poke (pSampleLocationCoordinateRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
-    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance FromCStruct PhysicalDeviceSampleLocationsPropertiesEXT where
-  peekCStruct p = do
-    sampleLocationSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 16 :: Ptr SampleCountFlags))
-    maxSampleLocationGridSize <- peekCStruct @Extent2D ((p `plusPtr` 20 :: Ptr Extent2D))
-    let psampleLocationCoordinateRange = lowerArrayPtr @CFloat ((p `plusPtr` 28 :: Ptr (FixedArray 2 CFloat)))
-    sampleLocationCoordinateRange0 <- peek @CFloat ((psampleLocationCoordinateRange `advancePtrBytes` 0 :: Ptr CFloat))
-    sampleLocationCoordinateRange1 <- peek @CFloat ((psampleLocationCoordinateRange `advancePtrBytes` 4 :: Ptr CFloat))
-    sampleLocationSubPixelBits <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
-    variableSampleLocations <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    pure $ PhysicalDeviceSampleLocationsPropertiesEXT
-             sampleLocationSampleCounts maxSampleLocationGridSize ((((\(CFloat a) -> a) sampleLocationCoordinateRange0), ((\(CFloat a) -> a) sampleLocationCoordinateRange1))) sampleLocationSubPixelBits (bool32ToBool variableSampleLocations)
-
-instance Zero PhysicalDeviceSampleLocationsPropertiesEXT where
-  zero = PhysicalDeviceSampleLocationsPropertiesEXT
-           zero
-           zero
-           (zero, zero)
-           zero
-           zero
-
-
--- | VkMultisamplePropertiesEXT - Structure returning information about
--- sample count specific additional multisampling capabilities
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceMultisamplePropertiesEXT'
-data MultisamplePropertiesEXT = MultisamplePropertiesEXT
-  { -- | @maxSampleLocationGridSize@ is the maximum size of the pixel grid in
-    -- which sample locations /can/ vary.
-    maxSampleLocationGridSize :: Extent2D }
-  deriving (Typeable)
-deriving instance Show MultisamplePropertiesEXT
-
-instance ToCStruct MultisamplePropertiesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MultisamplePropertiesEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (maxSampleLocationGridSize) . ($ ())
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct MultisamplePropertiesEXT where
-  peekCStruct p = do
-    maxSampleLocationGridSize <- peekCStruct @Extent2D ((p `plusPtr` 16 :: Ptr Extent2D))
-    pure $ MultisamplePropertiesEXT
-             maxSampleLocationGridSize
-
-instance Zero MultisamplePropertiesEXT where
-  zero = MultisamplePropertiesEXT
-           zero
-
-
-type EXT_SAMPLE_LOCATIONS_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION"
-pattern EXT_SAMPLE_LOCATIONS_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SAMPLE_LOCATIONS_SPEC_VERSION = 1
-
-
-type EXT_SAMPLE_LOCATIONS_EXTENSION_NAME = "VK_EXT_sample_locations"
-
--- No documentation found for TopLevel "VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME"
-pattern EXT_SAMPLE_LOCATIONS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_SAMPLE_LOCATIONS_EXTENSION_NAME = "VK_EXT_sample_locations"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs-boot
+++ /dev/null
@@ -1,77 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_sample_locations  ( AttachmentSampleLocationsEXT
-                                                           , MultisamplePropertiesEXT
-                                                           , PhysicalDeviceSampleLocationsPropertiesEXT
-                                                           , PipelineSampleLocationsStateCreateInfoEXT
-                                                           , RenderPassSampleLocationsBeginInfoEXT
-                                                           , SampleLocationEXT
-                                                           , SampleLocationsInfoEXT
-                                                           , SubpassSampleLocationsEXT
-                                                           ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data AttachmentSampleLocationsEXT
-
-instance ToCStruct AttachmentSampleLocationsEXT
-instance Show AttachmentSampleLocationsEXT
-
-instance FromCStruct AttachmentSampleLocationsEXT
-
-
-data MultisamplePropertiesEXT
-
-instance ToCStruct MultisamplePropertiesEXT
-instance Show MultisamplePropertiesEXT
-
-instance FromCStruct MultisamplePropertiesEXT
-
-
-data PhysicalDeviceSampleLocationsPropertiesEXT
-
-instance ToCStruct PhysicalDeviceSampleLocationsPropertiesEXT
-instance Show PhysicalDeviceSampleLocationsPropertiesEXT
-
-instance FromCStruct PhysicalDeviceSampleLocationsPropertiesEXT
-
-
-data PipelineSampleLocationsStateCreateInfoEXT
-
-instance ToCStruct PipelineSampleLocationsStateCreateInfoEXT
-instance Show PipelineSampleLocationsStateCreateInfoEXT
-
-instance FromCStruct PipelineSampleLocationsStateCreateInfoEXT
-
-
-data RenderPassSampleLocationsBeginInfoEXT
-
-instance ToCStruct RenderPassSampleLocationsBeginInfoEXT
-instance Show RenderPassSampleLocationsBeginInfoEXT
-
-instance FromCStruct RenderPassSampleLocationsBeginInfoEXT
-
-
-data SampleLocationEXT
-
-instance ToCStruct SampleLocationEXT
-instance Show SampleLocationEXT
-
-instance FromCStruct SampleLocationEXT
-
-
-data SampleLocationsInfoEXT
-
-instance ToCStruct SampleLocationsInfoEXT
-instance Show SampleLocationsInfoEXT
-
-instance FromCStruct SampleLocationsInfoEXT
-
-
-data SubpassSampleLocationsEXT
-
-instance ToCStruct SubpassSampleLocationsEXT
-instance Show SubpassSampleLocationsEXT
-
-instance FromCStruct SubpassSampleLocationsEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs
+++ /dev/null
@@ -1,76 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT
-                                                                , pattern STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT
-                                                                , pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT
-                                                                , pattern SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT
-                                                                , pattern SAMPLER_REDUCTION_MODE_MIN_EXT
-                                                                , pattern SAMPLER_REDUCTION_MODE_MAX_EXT
-                                                                , SamplerReductionModeEXT
-                                                                , PhysicalDeviceSamplerFilterMinmaxPropertiesEXT
-                                                                , SamplerReductionModeCreateInfoEXT
-                                                                , EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION
-                                                                , pattern EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION
-                                                                , EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME
-                                                                , pattern EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME
-                                                                ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (PhysicalDeviceSamplerFilterMinmaxProperties)
-import Graphics.Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (SamplerReductionModeCreateInfo)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT))
-import Graphics.Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode(SAMPLER_REDUCTION_MODE_MAX))
-import Graphics.Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode(SAMPLER_REDUCTION_MODE_MIN))
-import Graphics.Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode(SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT"
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT
-
-
--- No documentation found for TopLevel "VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT"
-pattern SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
-
-
--- No documentation found for TopLevel "VK_SAMPLER_REDUCTION_MODE_MIN_EXT"
-pattern SAMPLER_REDUCTION_MODE_MIN_EXT = SAMPLER_REDUCTION_MODE_MIN
-
-
--- No documentation found for TopLevel "VK_SAMPLER_REDUCTION_MODE_MAX_EXT"
-pattern SAMPLER_REDUCTION_MODE_MAX_EXT = SAMPLER_REDUCTION_MODE_MAX
-
-
--- No documentation found for TopLevel "VkSamplerReductionModeEXT"
-type SamplerReductionModeEXT = SamplerReductionMode
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT"
-type PhysicalDeviceSamplerFilterMinmaxPropertiesEXT = PhysicalDeviceSamplerFilterMinmaxProperties
-
-
--- No documentation found for TopLevel "VkSamplerReductionModeCreateInfoEXT"
-type SamplerReductionModeCreateInfoEXT = SamplerReductionModeCreateInfo
-
-
-type EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION"
-pattern EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION = 2
-
-
-type EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME = "VK_EXT_sampler_filter_minmax"
-
--- No documentation found for TopLevel "VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME"
-pattern EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME = "VK_EXT_sampler_filter_minmax"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_scalar_block_layout.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_scalar_block_layout.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_scalar_block_layout.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_scalar_block_layout  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT
-                                                              , PhysicalDeviceScalarBlockLayoutFeaturesEXT
-                                                              , EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION
-                                                              , pattern EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION
-                                                              , EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME
-                                                              , pattern EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME
-                                                              ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceScalarBlockLayoutFeaturesEXT"
-type PhysicalDeviceScalarBlockLayoutFeaturesEXT = PhysicalDeviceScalarBlockLayoutFeatures
-
-
-type EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION"
-pattern EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION = 1
-
-
-type EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME = "VK_EXT_scalar_block_layout"
-
--- No documentation found for TopLevel "VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME"
-pattern EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME = "VK_EXT_scalar_block_layout"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_separate_stencil_usage.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_separate_stencil_usage.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_separate_stencil_usage.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_separate_stencil_usage  ( pattern STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT
-                                                                 , ImageStencilUsageCreateInfoEXT
-                                                                 , EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION
-                                                                 , pattern EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION
-                                                                 , EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME
-                                                                 , pattern EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME
-                                                                 ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage (ImageStencilUsageCreateInfo)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT"
-pattern STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO
-
-
--- No documentation found for TopLevel "VkImageStencilUsageCreateInfoEXT"
-type ImageStencilUsageCreateInfoEXT = ImageStencilUsageCreateInfo
-
-
-type EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION"
-pattern EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION = 1
-
-
-type EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME = "VK_EXT_separate_stencil_usage"
-
--- No documentation found for TopLevel "VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME"
-pattern EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME = "VK_EXT_separate_stencil_usage"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs
+++ /dev/null
@@ -1,107 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation  ( PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(..)
-                                                                             , EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION
-                                                                             , pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION
-                                                                             , EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME
-                                                                             , pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME
-                                                                             ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT))
--- | VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT - Structure
--- describing the shader demote to helper invocations features that can be
--- supported by an implementation
---
--- = Members
---
--- The members of the
--- 'PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT'
--- structure is included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-  { -- | @shaderDemoteToHelperInvocation@ indicates whether the implementation
-    -- supports the SPIR-V @DemoteToHelperInvocationEXT@ capability.
-    shaderDemoteToHelperInvocation :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-
-instance ToCStruct PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderDemoteToHelperInvocation))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT where
-  peekCStruct p = do
-    shaderDemoteToHelperInvocation <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-             (bool32ToBool shaderDemoteToHelperInvocation)
-
-instance Storable PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT where
-  zero = PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-           zero
-
-
-type EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION"
-pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION = 1
-
-
-type EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME = "VK_EXT_shader_demote_to_helper_invocation"
-
--- No documentation found for TopLevel "VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME"
-pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME = "VK_EXT_shader_demote_to_helper_invocation"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation  (PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-
-instance ToCStruct PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-instance Show PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-
-instance FromCStruct PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_stencil_export.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_stencil_export.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_stencil_export.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_shader_stencil_export  ( EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION
-                                                                , pattern EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION
-                                                                , EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME
-                                                                , pattern EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME
-                                                                ) where
-
-import Data.String (IsString)
-
-type EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION"
-pattern EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION = 1
-
-
-type EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME = "VK_EXT_shader_stencil_export"
-
--- No documentation found for TopLevel "VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME"
-pattern EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_subgroup_ballot.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_ballot  ( EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION
-                                                                 , pattern EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION
-                                                                 , EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME
-                                                                 , pattern EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME
-                                                                 ) where
-
-import Data.String (IsString)
-
-type EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION"
-pattern EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION = 1
-
-
-type EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME = "VK_EXT_shader_subgroup_ballot"
-
--- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME"
-pattern EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_subgroup_vote.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_vote  ( EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION
-                                                               , pattern EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION
-                                                               , EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME
-                                                               , pattern EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME
-                                                               ) where
-
-import Data.String (IsString)
-
-type EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION"
-pattern EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION = 1
-
-
-type EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME = "VK_EXT_shader_subgroup_vote"
-
--- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME"
-pattern EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_viewport_index_layer.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_shader_viewport_index_layer  ( EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION
-                                                                      , pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION
-                                                                      , EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME
-                                                                      , pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME
-                                                                      ) where
-
-import Data.String (IsString)
-
-type EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION"
-pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION = 1
-
-
-type EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME = "VK_EXT_shader_viewport_index_layer"
-
--- No documentation found for TopLevel "VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME"
-pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME = "VK_EXT_shader_viewport_index_layer"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs
+++ /dev/null
@@ -1,299 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control  ( PhysicalDeviceSubgroupSizeControlFeaturesEXT(..)
-                                                                , PhysicalDeviceSubgroupSizeControlPropertiesEXT(..)
-                                                                , PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(..)
-                                                                , EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION
-                                                                , pattern EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION
-                                                                , EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME
-                                                                , pattern EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME
-                                                                ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT))
--- | VkPhysicalDeviceSubgroupSizeControlFeaturesEXT - Structure describing
--- the subgroup size control features that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceSubgroupSizeControlFeaturesEXT'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceSubgroupSizeControlFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceSubgroupSizeControlFeaturesEXT' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable the feature.
---
--- Note
---
--- The 'PhysicalDeviceSubgroupSizeControlFeaturesEXT' structure was added
--- in version 2 of the @VK_EXT_subgroup_size_control@ extension. Version 1
--- implementations of this extension will not fill out the features
--- structure but applications may assume that both @subgroupSizeControl@
--- and @computeFullSubgroups@ are supported if the extension is supported.
--- (See also the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-requirements Feature Requirements>
--- section.) Applications are advised to add a
--- 'PhysicalDeviceSubgroupSizeControlFeaturesEXT' structure to the @pNext@
--- chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the
--- features regardless of the version of the extension supported by the
--- implementation. If the implementation only supports version 1, it will
--- safely ignore the 'PhysicalDeviceSubgroupSizeControlFeaturesEXT'
--- structure.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeaturesEXT
-  { -- | @subgroupSizeControl@ indicates whether the implementation supports
-    -- controlling shader subgroup sizes via the
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
-    -- flag and the 'PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
-    -- structure.
-    subgroupSizeControl :: Bool
-  , -- | @computeFullSubgroups@ indicates whether the implementation supports
-    -- requiring full subgroups in compute shaders via the
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'
-    -- flag.
-    computeFullSubgroups :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceSubgroupSizeControlFeaturesEXT
-
-instance ToCStruct PhysicalDeviceSubgroupSizeControlFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceSubgroupSizeControlFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (subgroupSizeControl))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (computeFullSubgroups))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceSubgroupSizeControlFeaturesEXT where
-  peekCStruct p = do
-    subgroupSizeControl <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    computeFullSubgroups <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceSubgroupSizeControlFeaturesEXT
-             (bool32ToBool subgroupSizeControl) (bool32ToBool computeFullSubgroups)
-
-instance Storable PhysicalDeviceSubgroupSizeControlFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceSubgroupSizeControlFeaturesEXT where
-  zero = PhysicalDeviceSubgroupSizeControlFeaturesEXT
-           zero
-           zero
-
-
--- | VkPhysicalDeviceSubgroupSizeControlPropertiesEXT - Structure describing
--- the control subgroup size properties of an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceSubgroupSizeControlPropertiesEXT'
--- structure describe the following properties:
---
--- = Description
---
--- If the 'PhysicalDeviceSubgroupSizeControlPropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- If
--- 'Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties'::@supportedOperations@
--- includes
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroup-quad >,
--- @minSubgroupSize@ /must/ be greater than or equal to 4.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlPropertiesEXT
-  { -- | @minSubgroupSize@ is the minimum subgroup size supported by this device.
-    -- @minSubgroupSize@ is at least one if any of the physical device’s queues
-    -- support 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT'
-    -- or 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
-    -- @minSubgroupSize@ is a power-of-two. @minSubgroupSize@ is less than or
-    -- equal to @maxSubgroupSize@. @minSubgroupSize@ is less than or equal to
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>.
-    minSubgroupSize :: Word32
-  , -- | @maxSubgroupSize@ is the maximum subgroup size supported by this device.
-    -- @maxSubgroupSize@ is at least one if any of the physical device’s queues
-    -- support 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT'
-    -- or 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
-    -- @maxSubgroupSize@ is a power-of-two. @maxSubgroupSize@ is greater than
-    -- or equal to @minSubgroupSize@. @maxSubgroupSize@ is greater than or
-    -- equal to
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>.
-    maxSubgroupSize :: Word32
-  , -- | @maxComputeWorkgroupSubgroups@ is the maximum number of subgroups
-    -- supported by the implementation within a workgroup.
-    maxComputeWorkgroupSubgroups :: Word32
-  , -- | @requiredSubgroupSizeStages@ is a bitfield of what shader stages support
-    -- having a required subgroup size specified.
-    requiredSubgroupSizeStages :: ShaderStageFlags
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceSubgroupSizeControlPropertiesEXT
-
-instance ToCStruct PhysicalDeviceSubgroupSizeControlPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceSubgroupSizeControlPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (minSubgroupSize)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxSubgroupSize)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxComputeWorkgroupSubgroups)
-    poke ((p `plusPtr` 28 :: Ptr ShaderStageFlags)) (requiredSubgroupSizeStages)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr ShaderStageFlags)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceSubgroupSizeControlPropertiesEXT where
-  peekCStruct p = do
-    minSubgroupSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxSubgroupSize <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    maxComputeWorkgroupSubgroups <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    requiredSubgroupSizeStages <- peek @ShaderStageFlags ((p `plusPtr` 28 :: Ptr ShaderStageFlags))
-    pure $ PhysicalDeviceSubgroupSizeControlPropertiesEXT
-             minSubgroupSize maxSubgroupSize maxComputeWorkgroupSubgroups requiredSubgroupSizeStages
-
-instance Storable PhysicalDeviceSubgroupSizeControlPropertiesEXT where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceSubgroupSizeControlPropertiesEXT where
-  zero = PhysicalDeviceSubgroupSizeControlPropertiesEXT
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT - Structure
--- specifying the required subgroup size of a newly created pipeline shader
--- stage
---
--- == Valid Usage
---
--- = Description
---
--- If a 'PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo', it
--- specifies that the pipeline shader stage being compiled has a required
--- subgroup size.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-  { -- | @requiredSubgroupSize@ /must/ be less than or equal to
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size maxSubgroupSize>
-    requiredSubgroupSize :: Word32 }
-  deriving (Typeable)
-deriving instance Show PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-
-instance ToCStruct PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (requiredSubgroupSize)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT where
-  peekCStruct p = do
-    requiredSubgroupSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-             requiredSubgroupSize
-
-instance Storable PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT where
-  zero = PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-           zero
-
-
-type EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION"
-pattern EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION = 2
-
-
-type EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME = "VK_EXT_subgroup_size_control"
-
--- No documentation found for TopLevel "VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME"
-pattern EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME = "VK_EXT_subgroup_size_control"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control  ( PhysicalDeviceSubgroupSizeControlFeaturesEXT
-                                                                , PhysicalDeviceSubgroupSizeControlPropertiesEXT
-                                                                , PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-                                                                ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceSubgroupSizeControlFeaturesEXT
-
-instance ToCStruct PhysicalDeviceSubgroupSizeControlFeaturesEXT
-instance Show PhysicalDeviceSubgroupSizeControlFeaturesEXT
-
-instance FromCStruct PhysicalDeviceSubgroupSizeControlFeaturesEXT
-
-
-data PhysicalDeviceSubgroupSizeControlPropertiesEXT
-
-instance ToCStruct PhysicalDeviceSubgroupSizeControlPropertiesEXT
-instance Show PhysicalDeviceSubgroupSizeControlPropertiesEXT
-
-instance FromCStruct PhysicalDeviceSubgroupSizeControlPropertiesEXT
-
-
-data PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-
-instance ToCStruct PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-instance Show PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-
-instance FromCStruct PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs
+++ /dev/null
@@ -1,274 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace  ( pattern COLOR_SPACE_DCI_P3_LINEAR_EXT
-                                                               , ColorSpaceKHR( COLOR_SPACE_SRGB_NONLINEAR_KHR
-                                                                              , COLOR_SPACE_DISPLAY_NATIVE_AMD
-                                                                              , COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT
-                                                                              , COLOR_SPACE_PASS_THROUGH_EXT
-                                                                              , COLOR_SPACE_ADOBERGB_NONLINEAR_EXT
-                                                                              , COLOR_SPACE_ADOBERGB_LINEAR_EXT
-                                                                              , COLOR_SPACE_HDR10_HLG_EXT
-                                                                              , COLOR_SPACE_DOLBYVISION_EXT
-                                                                              , COLOR_SPACE_HDR10_ST2084_EXT
-                                                                              , COLOR_SPACE_BT2020_LINEAR_EXT
-                                                                              , COLOR_SPACE_BT709_NONLINEAR_EXT
-                                                                              , COLOR_SPACE_BT709_LINEAR_EXT
-                                                                              , COLOR_SPACE_DCI_P3_NONLINEAR_EXT
-                                                                              , COLOR_SPACE_DISPLAY_P3_LINEAR_EXT
-                                                                              , COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT
-                                                                              , COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT
-                                                                              , ..
-                                                                              )
-                                                               , EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION
-                                                               , pattern EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION
-                                                               , EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME
-                                                               , pattern EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME
-                                                               ) where
-
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.String (IsString)
-import Foreign.Storable (Storable)
-import Data.Int (Int32)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Graphics.Vulkan.Zero (Zero)
--- No documentation found for TopLevel "VK_COLOR_SPACE_DCI_P3_LINEAR_EXT"
-pattern COLOR_SPACE_DCI_P3_LINEAR_EXT = COLOR_SPACE_DISPLAY_P3_LINEAR_EXT
-
-
--- | VkColorSpaceKHR - supported color space of the presentation engine
---
--- = Description
---
--- Note
---
--- In the initial release of the @VK_KHR_surface@ and @VK_KHR_swapchain@
--- extensions, the token @VK_COLORSPACE_SRGB_NONLINEAR_KHR@ was used.
--- Starting in the 2016-05-13 updates to the extension branches, matching
--- release 1.0.13 of the core API specification,
--- 'COLOR_SPACE_SRGB_NONLINEAR_KHR' is used instead for consistency with
--- Vulkan naming rules. The older enum is still available for backwards
--- compatibility.
---
--- Note
---
--- In older versions of this extension 'COLOR_SPACE_DISPLAY_P3_LINEAR_EXT'
--- was misnamed 'COLOR_SPACE_DCI_P3_LINEAR_EXT'. This has been updated to
--- indicate that it uses RGB color encoding, not XYZ. The old name is
--- deprecated but is maintained for backwards compatibility.
---
--- The color components of non-linear color space swap chain images /must/
--- have had the appropriate transfer function applied. The color space
--- selected for the swap chain image will not affect the processing of data
--- written into the image by the implementation. Vulkan requires that all
--- implementations support the sRGB transfer function by use of an SRGB
--- pixel format. Other transfer functions, such as SMPTE 170M or SMPTE2084,
--- /can/ be performed by the application shader. This extension defines
--- enums for 'ColorSpaceKHR' that correspond to the following color spaces:
---
--- +--------------+----------+----------+----------+-------------+------------+
--- | Name         | Red      | Green    | Blue     | White-point | Transfer   |
--- |              | Primary  | Primary  | Primary  |             | function   |
--- +==============+==========+==========+==========+=============+============+
--- | DCI-P3       | 1.000,   | 0.000,   | 0.000,   | 0.3333,     | DCI P3     |
--- |              | 0.000    | 1.000    | 0.000    | 0.3333      |            |
--- +--------------+----------+----------+----------+-------------+------------+
--- | Display-P3   | 0.680,   | 0.265,   | 0.150,   | 0.3127,     | Display-P3 |
--- |              | 0.320    | 0.690    | 0.060    | 0.3290      |            |
--- |              |          |          |          | (D65)       |            |
--- +--------------+----------+----------+----------+-------------+------------+
--- | BT709        | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | ITU (SMPTE |
--- |              | 0.330    | 0.600    | 0.060    | 0.3290      | 170M)      |
--- |              |          |          |          | (D65)       |            |
--- +--------------+----------+----------+----------+-------------+------------+
--- | sRGB         | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | sRGB       |
--- |              | 0.330    | 0.600    | 0.060    | 0.3290      |            |
--- |              |          |          |          | (D65)       |            |
--- +--------------+----------+----------+----------+-------------+------------+
--- | extended     | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | extended   |
--- | sRGB         | 0.330    | 0.600    | 0.060    | 0.3290      | sRGB       |
--- |              |          |          |          | (D65)       |            |
--- +--------------+----------+----------+----------+-------------+------------+
--- | HDR10_ST2084 | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | ST2084 PQ  |
--- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
--- |              |          |          |          | (D65)       |            |
--- +--------------+----------+----------+----------+-------------+------------+
--- | DOLBYVISION  | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | ST2084 PQ  |
--- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
--- |              |          |          |          | (D65)       |            |
--- +--------------+----------+----------+----------+-------------+------------+
--- | HDR10_HLG    | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | HLG        |
--- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
--- |              |          |          |          | (D65)       |            |
--- +--------------+----------+----------+----------+-------------+------------+
--- | AdobeRGB     | 0.640,   | 0.210,   | 0.150,   | 0.3127,     | AdobeRGB   |
--- |              | 0.330    | 0.710    | 0.060    | 0.3290      |            |
--- |              |          |          |          | (D65)       |            |
--- +--------------+----------+----------+----------+-------------+------------+
---
--- Color Spaces and Attributes
---
--- The transfer functions are described in the “Transfer Functions” chapter
--- of the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#data-format Khronos Data Format Specification>.
---
--- Except Display-P3 OETF, which is:
---
--- \[\begin{aligned}
--- E & =
---   \begin{cases}
---     1.055 \times L^{1 \over 2.4} - 0.055 & \text{for}\  0.0030186 \leq L \leq 1 \\
---     12.92 \times L                       & \text{for}\  0 \leq L < 0.0030186
---   \end{cases}
--- \end{aligned}\]
---
--- where L is the linear value of a color channel and E is the encoded
--- value (as stored in the image in memory).
---
--- Note
---
--- For most uses, the sRGB OETF is equivalent.
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
-newtype ColorSpaceKHR = ColorSpaceKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'COLOR_SPACE_SRGB_NONLINEAR_KHR' specifies support for the sRGB color
--- space.
-pattern COLOR_SPACE_SRGB_NONLINEAR_KHR = ColorSpaceKHR 0
--- | 'COLOR_SPACE_DISPLAY_NATIVE_AMD' specifies support for the display’s
--- native color space. This matches the color space expectations of AMD’s
--- FreeSync2 standard, for displays supporting it.
-pattern COLOR_SPACE_DISPLAY_NATIVE_AMD = ColorSpaceKHR 1000213000
--- | 'COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT' specifies support for the
--- extended sRGB color space to be displayed using an sRGB EOTF.
-pattern COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = ColorSpaceKHR 1000104014
--- | 'COLOR_SPACE_PASS_THROUGH_EXT' specifies that color components are used
--- “as is”. This is intended to allow applications to supply data for color
--- spaces not described here.
-pattern COLOR_SPACE_PASS_THROUGH_EXT = ColorSpaceKHR 1000104013
--- | 'COLOR_SPACE_ADOBERGB_NONLINEAR_EXT' specifies support for the AdobeRGB
--- color space to be displayed using the Gamma 2.2 EOTF.
-pattern COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = ColorSpaceKHR 1000104012
--- | 'COLOR_SPACE_ADOBERGB_LINEAR_EXT' specifies support for the AdobeRGB
--- color space to be displayed using a linear EOTF.
-pattern COLOR_SPACE_ADOBERGB_LINEAR_EXT = ColorSpaceKHR 1000104011
--- | 'COLOR_SPACE_HDR10_HLG_EXT' specifies support for the HDR10 (BT2020
--- color space) to be displayed using the Hybrid Log Gamma (HLG) EOTF.
-pattern COLOR_SPACE_HDR10_HLG_EXT = ColorSpaceKHR 1000104010
--- | 'COLOR_SPACE_DOLBYVISION_EXT' specifies support for the Dolby Vision
--- (BT2020 color space), proprietary encoding, to be displayed using the
--- SMPTE ST2084 EOTF.
-pattern COLOR_SPACE_DOLBYVISION_EXT = ColorSpaceKHR 1000104009
--- | 'COLOR_SPACE_HDR10_ST2084_EXT' specifies support for the HDR10 (BT2020
--- color) space to be displayed using the SMPTE ST2084 Perceptual Quantizer
--- (PQ) EOTF.
-pattern COLOR_SPACE_HDR10_ST2084_EXT = ColorSpaceKHR 1000104008
--- | 'COLOR_SPACE_BT2020_LINEAR_EXT' specifies support for the BT2020 color
--- space to be displayed using a linear EOTF.
-pattern COLOR_SPACE_BT2020_LINEAR_EXT = ColorSpaceKHR 1000104007
--- | 'COLOR_SPACE_BT709_NONLINEAR_EXT' specifies support for the BT709 color
--- space to be displayed using the SMPTE 170M EOTF.
-pattern COLOR_SPACE_BT709_NONLINEAR_EXT = ColorSpaceKHR 1000104006
--- | 'COLOR_SPACE_BT709_LINEAR_EXT' specifies support for the BT709 color
--- space to be displayed using a linear EOTF.
-pattern COLOR_SPACE_BT709_LINEAR_EXT = ColorSpaceKHR 1000104005
--- | 'COLOR_SPACE_DCI_P3_NONLINEAR_EXT' specifies support for the DCI-P3
--- color space to be displayed using the DCI-P3 EOTF. Note that values in
--- such an image are interpreted as XYZ encoded color data by the
--- presentation engine.
-pattern COLOR_SPACE_DCI_P3_NONLINEAR_EXT = ColorSpaceKHR 1000104004
--- | 'COLOR_SPACE_DISPLAY_P3_LINEAR_EXT' specifies support for the Display-P3
--- color space to be displayed using a linear EOTF.
-pattern COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = ColorSpaceKHR 1000104003
--- | 'COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT' specifies support for the
--- extended sRGB color space to be displayed using a linear EOTF.
-pattern COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = ColorSpaceKHR 1000104002
--- | 'COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT' specifies support for the
--- Display-P3 color space to be displayed using an sRGB-like EOTF (defined
--- below).
-pattern COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = ColorSpaceKHR 1000104001
-{-# complete COLOR_SPACE_SRGB_NONLINEAR_KHR,
-             COLOR_SPACE_DISPLAY_NATIVE_AMD,
-             COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT,
-             COLOR_SPACE_PASS_THROUGH_EXT,
-             COLOR_SPACE_ADOBERGB_NONLINEAR_EXT,
-             COLOR_SPACE_ADOBERGB_LINEAR_EXT,
-             COLOR_SPACE_HDR10_HLG_EXT,
-             COLOR_SPACE_DOLBYVISION_EXT,
-             COLOR_SPACE_HDR10_ST2084_EXT,
-             COLOR_SPACE_BT2020_LINEAR_EXT,
-             COLOR_SPACE_BT709_NONLINEAR_EXT,
-             COLOR_SPACE_BT709_LINEAR_EXT,
-             COLOR_SPACE_DCI_P3_NONLINEAR_EXT,
-             COLOR_SPACE_DISPLAY_P3_LINEAR_EXT,
-             COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT,
-             COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT :: ColorSpaceKHR #-}
-
-instance Show ColorSpaceKHR where
-  showsPrec p = \case
-    COLOR_SPACE_SRGB_NONLINEAR_KHR -> showString "COLOR_SPACE_SRGB_NONLINEAR_KHR"
-    COLOR_SPACE_DISPLAY_NATIVE_AMD -> showString "COLOR_SPACE_DISPLAY_NATIVE_AMD"
-    COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT -> showString "COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT"
-    COLOR_SPACE_PASS_THROUGH_EXT -> showString "COLOR_SPACE_PASS_THROUGH_EXT"
-    COLOR_SPACE_ADOBERGB_NONLINEAR_EXT -> showString "COLOR_SPACE_ADOBERGB_NONLINEAR_EXT"
-    COLOR_SPACE_ADOBERGB_LINEAR_EXT -> showString "COLOR_SPACE_ADOBERGB_LINEAR_EXT"
-    COLOR_SPACE_HDR10_HLG_EXT -> showString "COLOR_SPACE_HDR10_HLG_EXT"
-    COLOR_SPACE_DOLBYVISION_EXT -> showString "COLOR_SPACE_DOLBYVISION_EXT"
-    COLOR_SPACE_HDR10_ST2084_EXT -> showString "COLOR_SPACE_HDR10_ST2084_EXT"
-    COLOR_SPACE_BT2020_LINEAR_EXT -> showString "COLOR_SPACE_BT2020_LINEAR_EXT"
-    COLOR_SPACE_BT709_NONLINEAR_EXT -> showString "COLOR_SPACE_BT709_NONLINEAR_EXT"
-    COLOR_SPACE_BT709_LINEAR_EXT -> showString "COLOR_SPACE_BT709_LINEAR_EXT"
-    COLOR_SPACE_DCI_P3_NONLINEAR_EXT -> showString "COLOR_SPACE_DCI_P3_NONLINEAR_EXT"
-    COLOR_SPACE_DISPLAY_P3_LINEAR_EXT -> showString "COLOR_SPACE_DISPLAY_P3_LINEAR_EXT"
-    COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT -> showString "COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT"
-    COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT -> showString "COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT"
-    ColorSpaceKHR x -> showParen (p >= 11) (showString "ColorSpaceKHR " . showsPrec 11 x)
-
-instance Read ColorSpaceKHR where
-  readPrec = parens (choose [("COLOR_SPACE_SRGB_NONLINEAR_KHR", pure COLOR_SPACE_SRGB_NONLINEAR_KHR)
-                            , ("COLOR_SPACE_DISPLAY_NATIVE_AMD", pure COLOR_SPACE_DISPLAY_NATIVE_AMD)
-                            , ("COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT", pure COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT)
-                            , ("COLOR_SPACE_PASS_THROUGH_EXT", pure COLOR_SPACE_PASS_THROUGH_EXT)
-                            , ("COLOR_SPACE_ADOBERGB_NONLINEAR_EXT", pure COLOR_SPACE_ADOBERGB_NONLINEAR_EXT)
-                            , ("COLOR_SPACE_ADOBERGB_LINEAR_EXT", pure COLOR_SPACE_ADOBERGB_LINEAR_EXT)
-                            , ("COLOR_SPACE_HDR10_HLG_EXT", pure COLOR_SPACE_HDR10_HLG_EXT)
-                            , ("COLOR_SPACE_DOLBYVISION_EXT", pure COLOR_SPACE_DOLBYVISION_EXT)
-                            , ("COLOR_SPACE_HDR10_ST2084_EXT", pure COLOR_SPACE_HDR10_ST2084_EXT)
-                            , ("COLOR_SPACE_BT2020_LINEAR_EXT", pure COLOR_SPACE_BT2020_LINEAR_EXT)
-                            , ("COLOR_SPACE_BT709_NONLINEAR_EXT", pure COLOR_SPACE_BT709_NONLINEAR_EXT)
-                            , ("COLOR_SPACE_BT709_LINEAR_EXT", pure COLOR_SPACE_BT709_LINEAR_EXT)
-                            , ("COLOR_SPACE_DCI_P3_NONLINEAR_EXT", pure COLOR_SPACE_DCI_P3_NONLINEAR_EXT)
-                            , ("COLOR_SPACE_DISPLAY_P3_LINEAR_EXT", pure COLOR_SPACE_DISPLAY_P3_LINEAR_EXT)
-                            , ("COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT", pure COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT)
-                            , ("COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT", pure COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ColorSpaceKHR")
-                       v <- step readPrec
-                       pure (ColorSpaceKHR v)))
-
-
-type EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION = 4
-
--- No documentation found for TopLevel "VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION"
-pattern EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION = 4
-
-
-type EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME = "VK_EXT_swapchain_colorspace"
-
--- No documentation found for TopLevel "VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME"
-pattern EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME = "VK_EXT_swapchain_colorspace"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs
+++ /dev/null
@@ -1,211 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment  ( PhysicalDeviceTexelBufferAlignmentFeaturesEXT(..)
-                                                                 , PhysicalDeviceTexelBufferAlignmentPropertiesEXT(..)
-                                                                 , EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION
-                                                                 , pattern EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION
-                                                                 , EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME
-                                                                 , pattern EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME
-                                                                 ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT))
--- | VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT - Structure describing
--- the texel buffer alignment features that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceTexelBufferAlignmentFeaturesEXT'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceTexelBufferAlignmentFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceTexelBufferAlignmentFeaturesEXT' /can/ also be included
--- in the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo'
--- to enable the feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceTexelBufferAlignmentFeaturesEXT = PhysicalDeviceTexelBufferAlignmentFeaturesEXT
-  { -- | @texelBufferAlignment@ indicates whether the implementation uses more
-    -- specific alignment requirements advertised in
-    -- 'PhysicalDeviceTexelBufferAlignmentPropertiesEXT' rather than
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minTexelBufferOffsetAlignment@.
-    texelBufferAlignment :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceTexelBufferAlignmentFeaturesEXT
-
-instance ToCStruct PhysicalDeviceTexelBufferAlignmentFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceTexelBufferAlignmentFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (texelBufferAlignment))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceTexelBufferAlignmentFeaturesEXT where
-  peekCStruct p = do
-    texelBufferAlignment <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceTexelBufferAlignmentFeaturesEXT
-             (bool32ToBool texelBufferAlignment)
-
-instance Storable PhysicalDeviceTexelBufferAlignmentFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceTexelBufferAlignmentFeaturesEXT where
-  zero = PhysicalDeviceTexelBufferAlignmentFeaturesEXT
-           zero
-
-
--- | VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT - Structure describing
--- the texel buffer alignment requirements supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceTexelBufferAlignmentPropertiesEXT'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceTexelBufferAlignmentPropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- If the single texel alignment property is
--- 'Graphics.Vulkan.Core10.BaseType.FALSE', then the buffer view’s offset
--- /must/ be aligned to the corresponding byte alignment value. If the
--- single texel alignment property is
--- 'Graphics.Vulkan.Core10.BaseType.TRUE', then the buffer view’s offset
--- /must/ be aligned to the lesser of the corresponding byte alignment
--- value or the size of a single texel, based on
--- 'Graphics.Vulkan.Core10.BufferView.BufferViewCreateInfo'::@format@. If
--- the size of a single texel is a multiple of three bytes, then the size
--- of a single component of the format is used instead.
---
--- These limits /must/ not advertise a larger alignment than the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-required required>
--- maximum minimum value of
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minTexelBufferOffsetAlignment@,
--- for any format that supports use as a texel buffer.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceTexelBufferAlignmentPropertiesEXT = PhysicalDeviceTexelBufferAlignmentPropertiesEXT
-  { -- | @storageTexelBufferOffsetAlignmentBytes@ is a byte alignment that is
-    -- sufficient for a storage texel buffer of any format.
-    storageTexelBufferOffsetAlignmentBytes :: DeviceSize
-  , -- | @storageTexelBufferOffsetSingleTexelAlignment@ indicates whether single
-    -- texel alignment is sufficient for a storage texel buffer of any format.
-    storageTexelBufferOffsetSingleTexelAlignment :: Bool
-  , -- | @uniformTexelBufferOffsetAlignmentBytes@ is a byte alignment that is
-    -- sufficient for a uniform texel buffer of any format.
-    uniformTexelBufferOffsetAlignmentBytes :: DeviceSize
-  , -- | @uniformTexelBufferOffsetSingleTexelAlignment@ indicates whether single
-    -- texel alignment is sufficient for a uniform texel buffer of any format.
-    uniformTexelBufferOffsetSingleTexelAlignment :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceTexelBufferAlignmentPropertiesEXT
-
-instance ToCStruct PhysicalDeviceTexelBufferAlignmentPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceTexelBufferAlignmentPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (storageTexelBufferOffsetAlignmentBytes)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (storageTexelBufferOffsetSingleTexelAlignment))
-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (uniformTexelBufferOffsetAlignmentBytes)
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (uniformTexelBufferOffsetSingleTexelAlignment))
-    f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceTexelBufferAlignmentPropertiesEXT where
-  peekCStruct p = do
-    storageTexelBufferOffsetAlignmentBytes <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    storageTexelBufferOffsetSingleTexelAlignment <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    uniformTexelBufferOffsetAlignmentBytes <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
-    uniformTexelBufferOffsetSingleTexelAlignment <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    pure $ PhysicalDeviceTexelBufferAlignmentPropertiesEXT
-             storageTexelBufferOffsetAlignmentBytes (bool32ToBool storageTexelBufferOffsetSingleTexelAlignment) uniformTexelBufferOffsetAlignmentBytes (bool32ToBool uniformTexelBufferOffsetSingleTexelAlignment)
-
-instance Storable PhysicalDeviceTexelBufferAlignmentPropertiesEXT where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceTexelBufferAlignmentPropertiesEXT where
-  zero = PhysicalDeviceTexelBufferAlignmentPropertiesEXT
-           zero
-           zero
-           zero
-           zero
-
-
-type EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION"
-pattern EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION = 1
-
-
-type EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME = "VK_EXT_texel_buffer_alignment"
-
--- No documentation found for TopLevel "VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME"
-pattern EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME = "VK_EXT_texel_buffer_alignment"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment  ( PhysicalDeviceTexelBufferAlignmentFeaturesEXT
-                                                                 , PhysicalDeviceTexelBufferAlignmentPropertiesEXT
-                                                                 ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceTexelBufferAlignmentFeaturesEXT
-
-instance ToCStruct PhysicalDeviceTexelBufferAlignmentFeaturesEXT
-instance Show PhysicalDeviceTexelBufferAlignmentFeaturesEXT
-
-instance FromCStruct PhysicalDeviceTexelBufferAlignmentFeaturesEXT
-
-
-data PhysicalDeviceTexelBufferAlignmentPropertiesEXT
-
-instance ToCStruct PhysicalDeviceTexelBufferAlignmentPropertiesEXT
-instance Show PhysicalDeviceTexelBufferAlignmentPropertiesEXT
-
-instance FromCStruct PhysicalDeviceTexelBufferAlignmentPropertiesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs
+++ /dev/null
@@ -1,147 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr  ( PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(..)
-                                                                       , EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION
-                                                                       , pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION
-                                                                       , EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME
-                                                                       , pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME
-                                                                       ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT))
--- | VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT - Structure
--- describing ASTC HDR features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.createDevice' to enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
-  { -- | @textureCompressionASTC_HDR@ indicates whether all of the ASTC HDR
-    -- compressed texture formats are supported. If this feature is enabled,
-    -- then the
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
-    -- and
-    -- 'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
-    -- features /must/ be supported in @optimalTilingFeatures@ for the
-    -- following formats:
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT'
-    --
-    -- -   'Graphics.Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT'
-    --
-    -- To query for additional properties, or if the feature is not enabled,
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
-    -- and
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties'
-    -- /can/ be used to check for supported properties of individual formats as
-    -- normal.
-    textureCompressionASTC_HDR :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
-
-instance ToCStruct PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (textureCompressionASTC_HDR))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT where
-  peekCStruct p = do
-    textureCompressionASTC_HDR <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
-             (bool32ToBool textureCompressionASTC_HDR)
-
-instance Storable PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT where
-  zero = PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
-           zero
-
-
-type EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION"
-pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION = 1
-
-
-type EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME = "VK_EXT_texture_compression_astc_hdr"
-
--- No documentation found for TopLevel "VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME"
-pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME = "VK_EXT_texture_compression_astc_hdr"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr  (PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
-
-instance ToCStruct PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
-instance Show PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
-
-instance FromCStruct PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_tooling_info.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_tooling_info.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_tooling_info.hs
+++ /dev/null
@@ -1,314 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_tooling_info  ( getPhysicalDeviceToolPropertiesEXT
-                                                       , PhysicalDeviceToolPropertiesEXT(..)
-                                                       , ToolPurposeFlagBitsEXT( TOOL_PURPOSE_VALIDATION_BIT_EXT
-                                                                               , TOOL_PURPOSE_PROFILING_BIT_EXT
-                                                                               , TOOL_PURPOSE_TRACING_BIT_EXT
-                                                                               , TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT
-                                                                               , TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT
-                                                                               , TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT
-                                                                               , TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT
-                                                                               , ..
-                                                                               )
-                                                       , ToolPurposeFlagsEXT
-                                                       , EXT_TOOLING_INFO_SPEC_VERSION
-                                                       , pattern EXT_TOOLING_INFO_SPEC_VERSION
-                                                       , EXT_TOOLING_INFO_EXTENSION_NAME
-                                                       , pattern EXT_TOOLING_INFO_EXTENSION_NAME
-                                                       ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.ByteString (packCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceToolPropertiesEXT))
-import Graphics.Vulkan.Core10.APIConstants (MAX_DESCRIPTION_SIZE)
-import Graphics.Vulkan.Core10.APIConstants (MAX_EXTENSION_NAME_SIZE)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceToolPropertiesEXT
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr PhysicalDeviceToolPropertiesEXT -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr PhysicalDeviceToolPropertiesEXT -> IO Result
-
--- | vkGetPhysicalDeviceToolPropertiesEXT - Reports properties of tools
--- active on the specified physical device
---
--- = Parameters
---
--- -   @physicalDevice@ is the handle to the physical device to query for
---     active tools.
---
--- -   @pToolCount@ is a pointer to an integer describing the number of
---     tools active on @physicalDevice@.
---
--- -   @pToolProperties@ is either @NULL@ or a pointer to an array of
---     'PhysicalDeviceToolPropertiesEXT' structures.
---
--- = Description
---
--- If @pToolProperties@ is @NULL@, then the number of tools currently
--- active on @physicalDevice@ is returned in @pToolCount@. Otherwise,
--- @pToolCount@ /must/ point to a variable set by the user to the number of
--- elements in the @pToolProperties@ array, and on return the variable is
--- overwritten with the number of structures actually written to
--- @pToolProperties@. If @pToolCount@ is less than the number of currently
--- active tools, at most @pToolCount@ structures will be written.
---
--- The count and properties of active tools /may/ change in response to
--- events outside the scope of the specification. An application /should/
--- assume these properties might change at any given time.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pToolCount@ /must/ be a valid pointer to a @uint32_t@ value
---
--- -   If the value referenced by @pToolCount@ is not @0@, and
---     @pToolProperties@ is not @NULL@, @pToolProperties@ /must/ be a valid
---     pointer to an array of @pToolCount@
---     'PhysicalDeviceToolPropertiesEXT' structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceToolPropertiesEXT'
-getPhysicalDeviceToolPropertiesEXT :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("toolProperties" ::: Vector PhysicalDeviceToolPropertiesEXT))
-getPhysicalDeviceToolPropertiesEXT physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceToolPropertiesEXT' = mkVkGetPhysicalDeviceToolPropertiesEXT (pVkGetPhysicalDeviceToolPropertiesEXT (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPToolCount <- ContT $ bracket (callocBytes @Word32 4) free
-  _ <- lift $ vkGetPhysicalDeviceToolPropertiesEXT' physicalDevice' (pPToolCount) (nullPtr)
-  pToolCount <- lift $ peek @Word32 pPToolCount
-  pPToolProperties <- ContT $ bracket (callocBytes @PhysicalDeviceToolPropertiesEXT ((fromIntegral (pToolCount)) * 1048)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPToolProperties `advancePtrBytes` (i * 1048) :: Ptr PhysicalDeviceToolPropertiesEXT) . ($ ())) [0..(fromIntegral (pToolCount)) - 1]
-  r <- lift $ vkGetPhysicalDeviceToolPropertiesEXT' physicalDevice' (pPToolCount) ((pPToolProperties))
-  pToolCount' <- lift $ peek @Word32 pPToolCount
-  pToolProperties' <- lift $ generateM (fromIntegral (pToolCount')) (\i -> peekCStruct @PhysicalDeviceToolPropertiesEXT (((pPToolProperties) `advancePtrBytes` (1048 * (i)) :: Ptr PhysicalDeviceToolPropertiesEXT)))
-  pure $ (r, pToolProperties')
-
-
--- | VkPhysicalDeviceToolPropertiesEXT - Structure providing information
--- about an active tool
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'ToolPurposeFlagsEXT', 'getPhysicalDeviceToolPropertiesEXT'
-data PhysicalDeviceToolPropertiesEXT = PhysicalDeviceToolPropertiesEXT
-  { -- | @name@ is a null-terminated UTF-8 string containing the name of the
-    -- tool.
-    name :: ByteString
-  , -- | @version@ is a null-terminated UTF-8 string containing the version of
-    -- the tool.
-    version :: ByteString
-  , -- | @purposes@ is a bitmask of 'ToolPurposeFlagBitsEXT' which is populated
-    -- with purposes supported by the tool.
-    purposes :: ToolPurposeFlagsEXT
-  , -- | @description@ is a null-terminated UTF-8 string containing a description
-    -- of the tool.
-    description :: ByteString
-  , -- | @layer@ is a null-terminated UTF-8 string that contains the name of the
-    -- layer implementing the tool, if the tool is implemented in a layer -
-    -- otherwise it /may/ be an empty string.
-    layer :: ByteString
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceToolPropertiesEXT
-
-instance ToCStruct PhysicalDeviceToolPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 1048 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceToolPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (name)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (version)
-    poke ((p `plusPtr` 528 :: Ptr ToolPurposeFlagsEXT)) (purposes)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 788 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (layer)
-    f
-  cStructSize = 1048
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (mempty)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (mempty)
-    poke ((p `plusPtr` 528 :: Ptr ToolPurposeFlagsEXT)) (zero)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 788 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (mempty)
-    f
-
-instance FromCStruct PhysicalDeviceToolPropertiesEXT where
-  peekCStruct p = do
-    name <- packCString (lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))))
-    version <- packCString (lowerArrayPtr ((p `plusPtr` 272 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))))
-    purposes <- peek @ToolPurposeFlagsEXT ((p `plusPtr` 528 :: Ptr ToolPurposeFlagsEXT))
-    description <- packCString (lowerArrayPtr ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    layer <- packCString (lowerArrayPtr ((p `plusPtr` 788 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))))
-    pure $ PhysicalDeviceToolPropertiesEXT
-             name version purposes description layer
-
-instance Storable PhysicalDeviceToolPropertiesEXT where
-  sizeOf ~_ = 1048
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceToolPropertiesEXT where
-  zero = PhysicalDeviceToolPropertiesEXT
-           mempty
-           mempty
-           zero
-           mempty
-           mempty
-
-
--- | VkToolPurposeFlagBitsEXT - Bitmask specifying the purposes of an active
--- tool
---
--- = See Also
---
--- 'ToolPurposeFlagsEXT'
-newtype ToolPurposeFlagBitsEXT = ToolPurposeFlagBitsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'TOOL_PURPOSE_VALIDATION_BIT_EXT' specifies that the tool provides
--- validation of API usage.
-pattern TOOL_PURPOSE_VALIDATION_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000001
--- | 'TOOL_PURPOSE_PROFILING_BIT_EXT' specifies that the tool provides
--- profiling of API usage.
-pattern TOOL_PURPOSE_PROFILING_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000002
--- | 'TOOL_PURPOSE_TRACING_BIT_EXT' specifies that the tool is capturing data
--- about the application’s API usage, including anything from simple
--- logging to capturing data for later replay.
-pattern TOOL_PURPOSE_TRACING_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000004
--- | 'TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT' specifies that the tool
--- provides additional API features\/extensions on top of the underlying
--- implementation.
-pattern TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000008
--- | 'TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT' specifies that the tool
--- modifies the API features\/limits\/extensions presented to the
--- application.
-pattern TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000010
--- | 'TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT' specifies that the tool consumes
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-debug-markers debug markers>
--- or
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-debug-annotation object debug annotation>,
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-queue-labels queue labels>,
--- or
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-command-buffer-labels command buffer labels>
-pattern TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000040
--- | 'TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT' specifies that the tool reports
--- additional information to the application via callbacks specified by
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.createDebugReportCallbackEXT'
--- or
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.createDebugUtilsMessengerEXT'
-pattern TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000020
-
-type ToolPurposeFlagsEXT = ToolPurposeFlagBitsEXT
-
-instance Show ToolPurposeFlagBitsEXT where
-  showsPrec p = \case
-    TOOL_PURPOSE_VALIDATION_BIT_EXT -> showString "TOOL_PURPOSE_VALIDATION_BIT_EXT"
-    TOOL_PURPOSE_PROFILING_BIT_EXT -> showString "TOOL_PURPOSE_PROFILING_BIT_EXT"
-    TOOL_PURPOSE_TRACING_BIT_EXT -> showString "TOOL_PURPOSE_TRACING_BIT_EXT"
-    TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT -> showString "TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT"
-    TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT -> showString "TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT"
-    TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT -> showString "TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT"
-    TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT -> showString "TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT"
-    ToolPurposeFlagBitsEXT x -> showParen (p >= 11) (showString "ToolPurposeFlagBitsEXT 0x" . showHex x)
-
-instance Read ToolPurposeFlagBitsEXT where
-  readPrec = parens (choose [("TOOL_PURPOSE_VALIDATION_BIT_EXT", pure TOOL_PURPOSE_VALIDATION_BIT_EXT)
-                            , ("TOOL_PURPOSE_PROFILING_BIT_EXT", pure TOOL_PURPOSE_PROFILING_BIT_EXT)
-                            , ("TOOL_PURPOSE_TRACING_BIT_EXT", pure TOOL_PURPOSE_TRACING_BIT_EXT)
-                            , ("TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT", pure TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT)
-                            , ("TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT", pure TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT)
-                            , ("TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT", pure TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT)
-                            , ("TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT", pure TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ToolPurposeFlagBitsEXT")
-                       v <- step readPrec
-                       pure (ToolPurposeFlagBitsEXT v)))
-
-
-type EXT_TOOLING_INFO_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_TOOLING_INFO_SPEC_VERSION"
-pattern EXT_TOOLING_INFO_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_TOOLING_INFO_SPEC_VERSION = 1
-
-
-type EXT_TOOLING_INFO_EXTENSION_NAME = "VK_EXT_tooling_info"
-
--- No documentation found for TopLevel "VK_EXT_TOOLING_INFO_EXTENSION_NAME"
-pattern EXT_TOOLING_INFO_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_TOOLING_INFO_EXTENSION_NAME = "VK_EXT_tooling_info"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_tooling_info.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_tooling_info.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_tooling_info.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_tooling_info  (PhysicalDeviceToolPropertiesEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceToolPropertiesEXT
-
-instance ToCStruct PhysicalDeviceToolPropertiesEXT
-instance Show PhysicalDeviceToolPropertiesEXT
-
-instance FromCStruct PhysicalDeviceToolPropertiesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_transform_feedback.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_transform_feedback.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_transform_feedback.hs
+++ /dev/null
@@ -1,1492 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_transform_feedback  ( cmdBindTransformFeedbackBuffersEXT
-                                                             , cmdBeginTransformFeedbackEXT
-                                                             , cmdWithTransformFeedbackEXT
-                                                             , cmdEndTransformFeedbackEXT
-                                                             , cmdBeginQueryIndexedEXT
-                                                             , cmdWithQueryIndexedEXT
-                                                             , cmdEndQueryIndexedEXT
-                                                             , cmdDrawIndirectByteCountEXT
-                                                             , PhysicalDeviceTransformFeedbackFeaturesEXT(..)
-                                                             , PhysicalDeviceTransformFeedbackPropertiesEXT(..)
-                                                             , PipelineRasterizationStateStreamCreateInfoEXT(..)
-                                                             , PipelineRasterizationStateStreamCreateFlagsEXT(..)
-                                                             , EXT_TRANSFORM_FEEDBACK_SPEC_VERSION
-                                                             , pattern EXT_TRANSFORM_FEEDBACK_SPEC_VERSION
-                                                             , EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME
-                                                             , pattern EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME
-                                                             ) where
-
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import qualified Data.Vector (null)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBeginQueryIndexedEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBeginTransformFeedbackEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBindTransformFeedbackBuffersEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndirectByteCountEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdEndQueryIndexedEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdEndTransformFeedbackEXT))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlags)
-import Graphics.Vulkan.Core10.Handles (QueryPool)
-import Graphics.Vulkan.Core10.Handles (QueryPool(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBindTransformFeedbackBuffersEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> Ptr DeviceSize -> IO ()
-
--- | vkCmdBindTransformFeedbackBuffersEXT - Bind transform feedback buffers
--- to a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @firstBinding@ is the index of the first transform feedback binding
---     whose state is updated by the command.
---
--- -   @bindingCount@ is the number of transform feedback 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.
---
--- -   @pSizes@ is an optional array of buffer sizes, specifying the
---     maximum number of bytes to capture to the corresponding transform
---     feedback buffer. If @pSizes@ is @NULL@, or the value of the @pSizes@
---     array element is 'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE',
---     then the maximum bytes captured will be the size of the
---     corresponding buffer minus the buffer offset.
---
--- = Description
---
--- The values taken from elements i of @pBuffers@, @pOffsets@ and @pSizes@
--- replace the current state for the transform feedback binding
--- @firstBinding@ + i, for i in [0, @bindingCount@). The transform feedback
--- binding is updated to start at the offset indicated by @pOffsets@[i]
--- from the start of the buffer @pBuffers@[i].
---
--- == Valid Usage
---
--- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@
---     /must/ be enabled
---
--- -   @firstBinding@ /must/ be less than
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
---
--- -   The sum of @firstBinding@ and @bindingCount@ /must/ be less than or
---     equal to
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
---
--- -   All elements of @pOffsets@ /must/ be less than the size of the
---     corresponding element in @pBuffers@
---
--- -   All elements of @pOffsets@ /must/ be a multiple of 4
---
--- -   All elements of @pBuffers@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT'
---     flag
---
--- -   If the optional @pSize@ array is specified, each element of @pSizes@
---     /must/ either be 'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE',
---     or be less than or equal to
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBufferSize@
---
--- -   All elements of @pSizes@ /must/ be less than or equal to the size of
---     the corresponding buffer in @pBuffers@
---
--- -   All elements of @pOffsets@ plus @pSizes@, where the @pSizes@,
---     element is not 'Graphics.Vulkan.Core10.APIConstants.WHOLE_SIZE',
---     /must/ be less than or equal to the size of the corresponding
---     element in @pBuffers@
---
--- -   Each element of @pBuffers@ that is non-sparse /must/ be bound
---     completely and contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   Transform feedback /must/ not be active when the
---     'cmdBindTransformFeedbackBuffersEXT' command is recorded
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@
---     valid 'Graphics.Vulkan.Core10.Handles.Buffer' handles
---
--- -   @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@
---     'Graphics.Vulkan.Core10.BaseType.DeviceSize' values
---
--- -   If @pSizes@ is not @NULL@, @pSizes@ /must/ be a valid pointer to an
---     array of @bindingCount@ 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
---     values
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   If @pSizes@ is not @NULL@, @bindingCount@ /must/ be greater than @0@
---
--- -   Both of @commandBuffer@, and the elements of @pBuffers@ /must/ have
---     been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdBindTransformFeedbackBuffersEXT :: forall io . MonadIO io => CommandBuffer -> ("firstBinding" ::: Word32) -> ("buffers" ::: Vector Buffer) -> ("offsets" ::: Vector DeviceSize) -> ("sizes" ::: Vector DeviceSize) -> io ()
-cmdBindTransformFeedbackBuffersEXT commandBuffer firstBinding buffers offsets sizes = liftIO . evalContT $ do
-  let vkCmdBindTransformFeedbackBuffersEXT' = mkVkCmdBindTransformFeedbackBuffersEXT (pVkCmdBindTransformFeedbackBuffersEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  let pBuffersLength = Data.Vector.length $ (buffers)
-  let pOffsetsLength = Data.Vector.length $ (offsets)
-  lift $ unless (pOffsetsLength == pBuffersLength) $
-    throwIO $ IOError Nothing InvalidArgument "" "pOffsets and pBuffers must have the same length" Nothing Nothing
-  let pSizesLength = Data.Vector.length $ (sizes)
-  lift $ unless (fromIntegral pSizesLength == pBuffersLength || pSizesLength == 0) $
-    throwIO $ IOError Nothing InvalidArgument "" "pSizes and pBuffers must have the same length" Nothing Nothing
-  pPBuffers <- ContT $ allocaBytesAligned @Buffer ((Data.Vector.length (buffers)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (buffers)
-  pPOffsets <- ContT $ allocaBytesAligned @DeviceSize ((Data.Vector.length (offsets)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (offsets)
-  pSizes <- if Data.Vector.null (sizes)
-    then pure nullPtr
-    else do
-      pPSizes <- ContT $ allocaBytesAligned @DeviceSize (((Data.Vector.length (sizes))) * 8) 8
-      lift $ Data.Vector.imapM_ (\i e -> poke (pPSizes `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) ((sizes))
-      pure $ pPSizes
-  lift $ vkCmdBindTransformFeedbackBuffersEXT' (commandBufferHandle (commandBuffer)) (firstBinding) ((fromIntegral pBuffersLength :: Word32)) (pPBuffers) (pPOffsets) pSizes
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBeginTransformFeedbackEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()
-
--- | vkCmdBeginTransformFeedbackEXT - Make transform feedback active in the
--- command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @firstCounterBuffer@ is the index of the first transform feedback
---     buffer corresponding to @pCounterBuffers@[0] and
---     @pCounterBufferOffsets@[0].
---
--- -   @counterBufferCount@ is the size of the @pCounterBuffers@ and
---     @pCounterBufferOffsets@ arrays.
---
--- -   @pCounterBuffers@ is an optional array of buffer handles to the
---     counter buffers which contain a 4 byte integer value representing
---     the byte offset from the start of the corresponding transform
---     feedback buffer from where to start capturing vertex data. If the
---     byte offset stored to the counter buffer location was done using
---     'cmdEndTransformFeedbackEXT' it can be used to resume transform
---     feedback from the previous location. If @pCounterBuffers@ is @NULL@,
---     then transform feedback will start capturing vertex data to byte
---     offset zero in all bound transform feedback buffers. For each
---     element of @pCounterBuffers@ that is
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', transform
---     feedback will start capturing vertex data to byte zero in the
---     corresponding bound transform feedback buffer.
---
--- -   @pCounterBufferOffsets@ is an optional array of offsets within each
---     of the @pCounterBuffers@ where the counter values were previously
---     written. The location in each counter buffer at these offsets /must/
---     be large enough to contain 4 bytes of data. This data is the number
---     of bytes captured by the previous transform feedback to this buffer.
---     If @pCounterBufferOffsets@ is @NULL@, then it is assumed the offsets
---     are zero.
---
--- = Description
---
--- The active transform feedback buffers will capture primitives emitted
--- from the corresponding @XfbBuffer@ in the bound graphics pipeline. Any
--- @XfbBuffer@ emitted that does not output to an active transform feedback
--- buffer will not be captured.
---
--- == Valid Usage
---
--- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@
---     /must/ be enabled
---
--- -   Transform feedback /must/ not be active
---
--- -   @firstCounterBuffer@ /must/ be less than
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
---
--- -   The sum of @firstCounterBuffer@ and @counterBufferCount@ /must/ be
---     less than or equal to
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
---
--- -   If @counterBufferCount@ is not @0@, and @pCounterBuffers@ is not
---     @NULL@, @pCounterBuffers@ /must/ be a valid pointer to an array of
---     @counterBufferCount@ 'Graphics.Vulkan.Core10.Handles.Buffer' handles
---     that are either valid or
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   For each buffer handle in the array, if it is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/
---     reference a buffer large enough to hold 4 bytes at the corresponding
---     offset from the @pCounterBufferOffsets@ array
---
--- -   If @pCounterBuffer@ is @NULL@, then @pCounterBufferOffsets@ /must/
---     also be @NULL@
---
--- -   For each buffer handle in the @pCounterBuffers@ array that is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ have
---     been created with a @usage@ value containing
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT'
---
--- -   Transform feedback /must/ not be made active in a render pass
---     instance with multiview enabled
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   If @counterBufferCount@ is not @0@, and @pCounterBufferOffsets@ is
---     not @NULL@, @pCounterBufferOffsets@ /must/ be a valid pointer to an
---     array of @counterBufferCount@
---     'Graphics.Vulkan.Core10.BaseType.DeviceSize' values
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   Both of @commandBuffer@, and the elements of @pCounterBuffers@ that
---     are valid handles of non-ignored parameters /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdBeginTransformFeedbackEXT :: forall io . MonadIO io => CommandBuffer -> ("firstCounterBuffer" ::: Word32) -> ("counterBuffers" ::: Vector Buffer) -> ("counterBufferOffsets" ::: Vector DeviceSize) -> io ()
-cmdBeginTransformFeedbackEXT commandBuffer firstCounterBuffer counterBuffers counterBufferOffsets = liftIO . evalContT $ do
-  let vkCmdBeginTransformFeedbackEXT' = mkVkCmdBeginTransformFeedbackEXT (pVkCmdBeginTransformFeedbackEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  let pCounterBuffersLength = Data.Vector.length $ (counterBuffers)
-  let pCounterBufferOffsetsLength = Data.Vector.length $ (counterBufferOffsets)
-  lift $ unless (fromIntegral pCounterBufferOffsetsLength == pCounterBuffersLength || pCounterBufferOffsetsLength == 0) $
-    throwIO $ IOError Nothing InvalidArgument "" "pCounterBufferOffsets and pCounterBuffers must have the same length" Nothing Nothing
-  pPCounterBuffers <- ContT $ allocaBytesAligned @Buffer ((Data.Vector.length (counterBuffers)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (counterBuffers)
-  pCounterBufferOffsets <- if Data.Vector.null (counterBufferOffsets)
-    then pure nullPtr
-    else do
-      pPCounterBufferOffsets <- ContT $ allocaBytesAligned @DeviceSize (((Data.Vector.length (counterBufferOffsets))) * 8) 8
-      lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterBufferOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) ((counterBufferOffsets))
-      pure $ pPCounterBufferOffsets
-  lift $ vkCmdBeginTransformFeedbackEXT' (commandBufferHandle (commandBuffer)) (firstCounterBuffer) ((fromIntegral pCounterBuffersLength :: Word32)) (pPCounterBuffers) pCounterBufferOffsets
-  pure $ ()
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'cmdBeginTransformFeedbackEXT' and 'cmdEndTransformFeedbackEXT'
---
--- To ensure that 'cmdEndTransformFeedbackEXT' is always called: pass
--- 'Control.Exception.bracket_' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
--- Note that there is no inner resource
-cmdWithTransformFeedbackEXT :: forall io r . MonadIO io => (io () -> io () -> r) -> CommandBuffer -> Word32 -> Vector Buffer -> Vector DeviceSize -> r
-cmdWithTransformFeedbackEXT b commandBuffer firstCounterBuffer pCounterBuffers pCounterBufferOffsets =
-  b (cmdBeginTransformFeedbackEXT commandBuffer firstCounterBuffer pCounterBuffers pCounterBufferOffsets)
-    (cmdEndTransformFeedbackEXT commandBuffer firstCounterBuffer pCounterBuffers pCounterBufferOffsets)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdEndTransformFeedbackEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()
-
--- | vkCmdEndTransformFeedbackEXT - Make transform feedback inactive in the
--- command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @firstCounterBuffer@ is the index of the first transform feedback
---     buffer corresponding to @pCounterBuffers@[0] and
---     @pCounterBufferOffsets@[0].
---
--- -   @counterBufferCount@ is the size of the @pCounterBuffers@ and
---     @pCounterBufferOffsets@ arrays.
---
--- -   @pCounterBuffers@ is an optional array of buffer handles to the
---     counter buffers used to record the current byte positions of each
---     transform feedback buffer where the next vertex output data would be
---     captured. This /can/ be used by a subsequent
---     'cmdBeginTransformFeedbackEXT' call to resume transform feedback
---     capture from this position. It can also be used by
---     'cmdDrawIndirectByteCountEXT' to determine the vertex count of the
---     draw call.
---
--- -   @pCounterBufferOffsets@ is an optional array of offsets within each
---     of the @pCounterBuffers@ where the counter values can be written.
---     The location in each counter buffer at these offsets /must/ be large
---     enough to contain 4 bytes of data. The data stored at this location
---     is the byte offset from the start of the transform feedback buffer
---     binding where the next vertex data would be written. If
---     @pCounterBufferOffsets@ is @NULL@, then it is assumed the offsets
---     are zero.
---
--- == Valid Usage
---
--- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@
---     /must/ be enabled
---
--- -   Transform feedback /must/ be active
---
--- -   @firstCounterBuffer@ /must/ be less than
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
---
--- -   The sum of @firstCounterBuffer@ and @counterBufferCount@ /must/ be
---     less than or equal to
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
---
--- -   If @counterBufferCount@ is not @0@, and @pCounterBuffers@ is not
---     @NULL@, @pCounterBuffers@ /must/ be a valid pointer to an array of
---     @counterBufferCount@ 'Graphics.Vulkan.Core10.Handles.Buffer' handles
---     that are either valid or
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   For each buffer handle in the array, if it is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/
---     reference a buffer large enough to hold 4 bytes at the corresponding
---     offset from the @pCounterBufferOffsets@ array
---
--- -   If @pCounterBuffer@ is @NULL@, then @pCounterBufferOffsets@ /must/
---     also be @NULL@
---
--- -   For each buffer handle in the @pCounterBuffers@ array that is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ have
---     been created with a @usage@ value containing
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   If @counterBufferCount@ is not @0@, and @pCounterBufferOffsets@ is
---     not @NULL@, @pCounterBufferOffsets@ /must/ be a valid pointer to an
---     array of @counterBufferCount@
---     'Graphics.Vulkan.Core10.BaseType.DeviceSize' values
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   Both of @commandBuffer@, and the elements of @pCounterBuffers@ that
---     are valid handles of non-ignored parameters /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdEndTransformFeedbackEXT :: forall io . MonadIO io => CommandBuffer -> ("firstCounterBuffer" ::: Word32) -> ("counterBuffers" ::: Vector Buffer) -> ("counterBufferOffsets" ::: Vector DeviceSize) -> io ()
-cmdEndTransformFeedbackEXT commandBuffer firstCounterBuffer counterBuffers counterBufferOffsets = liftIO . evalContT $ do
-  let vkCmdEndTransformFeedbackEXT' = mkVkCmdEndTransformFeedbackEXT (pVkCmdEndTransformFeedbackEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  let pCounterBuffersLength = Data.Vector.length $ (counterBuffers)
-  let pCounterBufferOffsetsLength = Data.Vector.length $ (counterBufferOffsets)
-  lift $ unless (fromIntegral pCounterBufferOffsetsLength == pCounterBuffersLength || pCounterBufferOffsetsLength == 0) $
-    throwIO $ IOError Nothing InvalidArgument "" "pCounterBufferOffsets and pCounterBuffers must have the same length" Nothing Nothing
-  pPCounterBuffers <- ContT $ allocaBytesAligned @Buffer ((Data.Vector.length (counterBuffers)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (counterBuffers)
-  pCounterBufferOffsets <- if Data.Vector.null (counterBufferOffsets)
-    then pure nullPtr
-    else do
-      pPCounterBufferOffsets <- ContT $ allocaBytesAligned @DeviceSize (((Data.Vector.length (counterBufferOffsets))) * 8) 8
-      lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterBufferOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) ((counterBufferOffsets))
-      pure $ pPCounterBufferOffsets
-  lift $ vkCmdEndTransformFeedbackEXT' (commandBufferHandle (commandBuffer)) (firstCounterBuffer) ((fromIntegral pCounterBuffersLength :: Word32)) (pPCounterBuffers) pCounterBufferOffsets
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBeginQueryIndexedEXT
-  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> Word32 -> IO ()
-
--- | vkCmdBeginQueryIndexedEXT - Begin an indexed query
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which this command will
---     be recorded.
---
--- -   @queryPool@ is the query pool that will manage the results of the
---     query.
---
--- -   @query@ is the query index within the query pool that will contain
---     the results.
---
--- -   @flags@ is a bitmask of
---     'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'
---     specifying constraints on the types of queries that /can/ be
---     performed.
---
--- -   @index@ is the query type specific index. When the query type is
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
---     the index represents the vertex stream.
---
--- = Description
---
--- The 'cmdBeginQueryIndexedEXT' command operates the same as the
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery' command,
--- except that it also accepts a query type specific @index@ parameter.
---
--- == Valid Usage
---
--- -   @queryPool@ /must/ have been created with a @queryType@ that differs
---     from that of any queries that are
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
---     within @commandBuffer@
---
--- -   All queries used by the command /must/ be unavailable
---
--- -   The @queryType@ used to create @queryPool@ /must/ not be
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries>
---     feature is not enabled, or the @queryType@ used to create
---     @queryPool@ was not
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION',
---     @flags@ /must/ not contain
---     'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'
---
--- -   @query@ /must/ be less than the number of queries in @queryPool@
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', the
---     'Graphics.Vulkan.Core10.Handles.CommandPool' that @commandBuffer@
---     was allocated from /must/ support graphics operations
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'
---     and any of the @pipelineStatistics@ indicate graphics operations,
---     the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'
---     and any of the @pipelineStatistics@ indicate compute operations, the
---     'Graphics.Vulkan.Core10.Handles.CommandPool' that @commandBuffer@
---     was allocated from /must/ support compute operations
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If called within a render pass instance, the sum of @query@ and the
---     number of bits set in the current subpass’s view mask /must/ be less
---     than or equal to the number of queries in @queryPool@
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
---     the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
---     the @index@ parameter /must/ be less than
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackStreams@
---
--- -   If the @queryType@ used to create @queryPool@ was not
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
---     the @index@ /must/ be zero
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
---     then
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackQueries@
---     /must/ be supported
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#profiling-lock profiling lock>
---     /must/ have been held before
---     'Graphics.Vulkan.Core10.CommandBuffer.beginCommandBuffer' was called
---     on @commandBuffer@
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
---     and one of the counters used to create @queryPool@ was
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',
---     the query begin /must/ be the first recorded command in
---     @commandBuffer@
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
---     and one of the counters used to create @queryPool@ was
---     'Graphics.Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',
---     the begin command /must/ not be recorded within a render pass
---     instance
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
---     and another query pool with a @queryType@
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR'
---     has been used within @commandBuffer@, its parent primary command
---     buffer or secondary command buffer recorded within the same parent
---     primary command buffer as @commandBuffer@, the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-features-performanceCounterMultipleQueryPools performanceCounterMultipleQueryPools>
---     feature /must/ be enabled
---
--- -   If @queryPool@ was created with a @queryType@ of
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
---     this command /must/ not be recorded in a command buffer that, either
---     directly or through secondary command buffers, also contains a
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool'
---     command affecting the same query
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @queryPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'
---     values
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlags',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool'
-cmdBeginQueryIndexedEXT :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> ("index" ::: Word32) -> io ()
-cmdBeginQueryIndexedEXT commandBuffer queryPool query flags index = liftIO $ do
-  let vkCmdBeginQueryIndexedEXT' = mkVkCmdBeginQueryIndexedEXT (pVkCmdBeginQueryIndexedEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdBeginQueryIndexedEXT' (commandBufferHandle (commandBuffer)) (queryPool) (query) (flags) (index)
-  pure $ ()
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'cmdBeginQueryIndexedEXT' and 'cmdEndQueryIndexedEXT'
---
--- To ensure that 'cmdEndQueryIndexedEXT' is always called: pass
--- 'Control.Exception.bracket_' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
--- Note that there is no inner resource
-cmdWithQueryIndexedEXT :: forall io r . MonadIO io => (io () -> io () -> r) -> CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> Word32 -> r
-cmdWithQueryIndexedEXT b commandBuffer queryPool query flags index =
-  b (cmdBeginQueryIndexedEXT commandBuffer queryPool query flags index)
-    (cmdEndQueryIndexedEXT commandBuffer queryPool query index)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdEndQueryIndexedEXT
-  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()
-
--- | vkCmdEndQueryIndexedEXT - Ends a query
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which this command will
---     be recorded.
---
--- -   @queryPool@ is the query pool that is managing the results of the
---     query.
---
--- -   @query@ is the query index within the query pool where the result is
---     stored.
---
--- -   @index@ is the query type specific index.
---
--- = Description
---
--- The 'cmdEndQueryIndexedEXT' command operates the same as the
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdEndQuery' command,
--- except that it also accepts a query type specific @index@ parameter.
---
--- == Valid Usage
---
--- -   All queries used by the command /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
---
--- -   @query@ /must/ be less than the number of queries in @queryPool@
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If 'cmdEndQueryIndexedEXT' is called within a render pass instance,
---     the sum of @query@ and the number of bits set in the current
---     subpass’s view mask /must/ be less than or equal to the number of
---     queries in @queryPool@
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
---     the @index@ parameter /must/ be less than
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackStreams@
---
--- -   If the @queryType@ used to create @queryPool@ was not
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
---     the @index@ /must/ be zero
---
--- -   If the @queryType@ used to create @queryPool@ was
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
---     @index@ /must/ equal the @index@ used to begin the query
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @queryPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool'
-cmdEndQueryIndexedEXT :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> ("index" ::: Word32) -> io ()
-cmdEndQueryIndexedEXT commandBuffer queryPool query index = liftIO $ do
-  let vkCmdEndQueryIndexedEXT' = mkVkCmdEndQueryIndexedEXT (pVkCmdEndQueryIndexedEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdEndQueryIndexedEXT' (commandBufferHandle (commandBuffer)) (queryPool) (query) (index)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDrawIndirectByteCountEXT
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDrawIndirectByteCountEXT - Draw primitives where the vertex count
--- is derived from the counter byte value in the counter buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @instanceCount@ is the number of instances to draw.
---
--- -   @firstInstance@ is the instance ID of the first instance to draw.
---
--- -   @counterBuffer@ is the buffer handle from where the byte count is
---     read.
---
--- -   @counterBufferOffset@ is the offset into the buffer used to read the
---     byte count, which is used to calculate the vertex count for this
---     draw call.
---
--- -   @counterOffset@ is subtracted from the byte count read from the
---     @counterBuffer@ at the @counterBufferOffset@
---
--- -   @vertexStride@ is the stride in bytes between each element of the
---     vertex data that is used to calculate the vertex count from the
---     counter value. This value is typically the same value that was used
---     in the graphics pipeline state when the transform feedback was
---     captured as the @XfbStride@.
---
--- = Description
---
--- When the command is executed, primitives are assembled in the same way
--- as done with 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDraw'
--- except the @vertexCount@ is calculated based on the byte count read from
--- @counterBuffer@ at offset @counterBufferOffset@. The assembled
--- primitives execute the bound graphics pipeline.
---
--- The effective @vertexCount@ is calculated as follows:
---
--- > const uint32_t * counterBufferPtr = (const uint8_t *)counterBuffer.address + counterBufferOffset;
--- > vertexCount = floor(max(0, (*counterBufferPtr - counterOffset)) / vertexStride);
---
--- The effective @firstVertex@ is zero.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   The current render pass /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   Image subresources used as attachments in the current render pass
---     /must/ not be accessed in any way other than as an attachment by
---     this command
---
--- -   If the draw is recorded in a render pass instance with multiview
---     enabled, the maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   If the bound graphics pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     either valid or 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     buffers bound
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, all vertex input bindings accessed via
---     vertex input variables declared in the vertex shader entry point’s
---     interface /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   For a given vertex buffer binding, any attribute data fetched /must/
---     be entirely contained within the corresponding vertex buffer
---     binding, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
---
--- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@
---     /must/ be enabled
---
--- -   The implementation /must/ support
---     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackDraw@
---
--- -   @vertexStride@ /must/ be greater than 0 and less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTransformFeedbackBufferDataStride@
---
--- -   @counterBuffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @counterBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   Both of @commandBuffer@, and @counterBuffer@ /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdDrawIndirectByteCountEXT :: forall io . MonadIO io => CommandBuffer -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("counterBuffer" ::: Buffer) -> ("counterBufferOffset" ::: DeviceSize) -> ("counterOffset" ::: Word32) -> ("vertexStride" ::: Word32) -> io ()
-cmdDrawIndirectByteCountEXT commandBuffer instanceCount firstInstance counterBuffer counterBufferOffset counterOffset vertexStride = liftIO $ do
-  let vkCmdDrawIndirectByteCountEXT' = mkVkCmdDrawIndirectByteCountEXT (pVkCmdDrawIndirectByteCountEXT (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDrawIndirectByteCountEXT' (commandBufferHandle (commandBuffer)) (instanceCount) (firstInstance) (counterBuffer) (counterBufferOffset) (counterOffset) (vertexStride)
-  pure $ ()
-
-
--- | VkPhysicalDeviceTransformFeedbackFeaturesEXT - Structure describing
--- transform feedback features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceTransformFeedbackFeaturesEXT'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceTransformFeedbackFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceTransformFeedbackFeaturesEXT' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceTransformFeedbackFeaturesEXT = PhysicalDeviceTransformFeedbackFeaturesEXT
-  { -- | @transformFeedback@ indicates whether the implementation supports
-    -- transform feedback and shader modules /can/ declare the
-    -- @TransformFeedback@ capability.
-    transformFeedback :: Bool
-  , -- | @geometryStreams@ indicates whether the implementation supports the
-    -- @GeometryStreams@ SPIR-V capability.
-    geometryStreams :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceTransformFeedbackFeaturesEXT
-
-instance ToCStruct PhysicalDeviceTransformFeedbackFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceTransformFeedbackFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (transformFeedback))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (geometryStreams))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceTransformFeedbackFeaturesEXT where
-  peekCStruct p = do
-    transformFeedback <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    geometryStreams <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceTransformFeedbackFeaturesEXT
-             (bool32ToBool transformFeedback) (bool32ToBool geometryStreams)
-
-instance Storable PhysicalDeviceTransformFeedbackFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceTransformFeedbackFeaturesEXT where
-  zero = PhysicalDeviceTransformFeedbackFeaturesEXT
-           zero
-           zero
-
-
--- | VkPhysicalDeviceTransformFeedbackPropertiesEXT - Structure describing
--- transform feedback properties that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceTransformFeedbackPropertiesEXT'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceTransformFeedbackPropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits and properties.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceTransformFeedbackPropertiesEXT = PhysicalDeviceTransformFeedbackPropertiesEXT
-  { -- | @maxTransformFeedbackStreams@ is the maximum number of vertex streams
-    -- that can be output from geometry shaders declared with the
-    -- @GeometryStreams@ capability. If the implementation does not support
-    -- 'PhysicalDeviceTransformFeedbackFeaturesEXT'::@geometryStreams@ then
-    -- @maxTransformFeedbackStreams@ /must/ be set to @1@.
-    maxTransformFeedbackStreams :: Word32
-  , -- | @maxTransformFeedbackBuffers@ is the maximum number of transform
-    -- feedback buffers that can be bound for capturing shader outputs from the
-    -- last vertex processing stage.
-    maxTransformFeedbackBuffers :: Word32
-  , -- | @maxTransformFeedbackBufferSize@ is the maximum size that can be
-    -- specified when binding a buffer for transform feedback in
-    -- 'cmdBindTransformFeedbackBuffersEXT'.
-    maxTransformFeedbackBufferSize :: DeviceSize
-  , -- | @maxTransformFeedbackStreamDataSize@ is the maximum amount of data in
-    -- bytes for each vertex that captured to one or more transform feedback
-    -- buffers associated with a specific vertex stream.
-    maxTransformFeedbackStreamDataSize :: Word32
-  , -- | @maxTransformFeedbackBufferDataSize@ is the maximum amount of data in
-    -- bytes for each vertex that can be captured to a specific transform
-    -- feedback buffer.
-    maxTransformFeedbackBufferDataSize :: Word32
-  , -- | @maxTransformFeedbackBufferDataStride@ is the maximum stride between
-    -- each capture of vertex data to the buffer.
-    maxTransformFeedbackBufferDataStride :: Word32
-  , -- | @transformFeedbackQueries@ is true if the implementation supports the
-    -- 'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
-    -- query type. @transformFeedbackQueries@ is false if queries of this type
-    -- /cannot/ be created.
-    transformFeedbackQueries :: Bool
-  , -- | @transformFeedbackStreamsLinesTriangles@ is true if the implementation
-    -- supports the geometry shader @OpExecutionMode@ of @OutputLineStrip@ and
-    -- @OutputTriangleStrip@ in addition to @OutputPoints@ when more than one
-    -- vertex stream is output. If @transformFeedbackStreamsLinesTriangles@ is
-    -- false the implementation only supports an @OpExecutionMode@ of
-    -- @OutputPoints@ when more than one vertex stream is output from the
-    -- geometry shader.
-    transformFeedbackStreamsLinesTriangles :: Bool
-  , -- | @transformFeedbackRasterizationStreamSelect@ is true if the
-    -- implementation supports the @GeometryStreams@ SPIR-V capability and the
-    -- application can use 'PipelineRasterizationStateStreamCreateInfoEXT' to
-    -- modify which vertex stream output is used for rasterization. Otherwise
-    -- vertex stream @0@ /must/ always be used for rasterization.
-    transformFeedbackRasterizationStreamSelect :: Bool
-  , -- | @transformFeedbackDraw@ is true if the implementation supports the
-    -- 'cmdDrawIndirectByteCountEXT' function otherwise the function /must/ not
-    -- be called.
-    transformFeedbackDraw :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceTransformFeedbackPropertiesEXT
-
-instance ToCStruct PhysicalDeviceTransformFeedbackPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceTransformFeedbackPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxTransformFeedbackStreams)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxTransformFeedbackBuffers)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (maxTransformFeedbackBufferSize)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (maxTransformFeedbackStreamDataSize)
-    poke ((p `plusPtr` 36 :: Ptr Word32)) (maxTransformFeedbackBufferDataSize)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (maxTransformFeedbackBufferDataStride)
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (transformFeedbackQueries))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (transformFeedbackStreamsLinesTriangles))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (transformFeedbackRasterizationStreamSelect))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (transformFeedbackDraw))
-    f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceTransformFeedbackPropertiesEXT where
-  peekCStruct p = do
-    maxTransformFeedbackStreams <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxTransformFeedbackBuffers <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    maxTransformFeedbackBufferSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    maxTransformFeedbackStreamDataSize <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    maxTransformFeedbackBufferDataSize <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
-    maxTransformFeedbackBufferDataStride <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    transformFeedbackQueries <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    transformFeedbackStreamsLinesTriangles <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
-    transformFeedbackRasterizationStreamSelect <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
-    transformFeedbackDraw <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
-    pure $ PhysicalDeviceTransformFeedbackPropertiesEXT
-             maxTransformFeedbackStreams maxTransformFeedbackBuffers maxTransformFeedbackBufferSize maxTransformFeedbackStreamDataSize maxTransformFeedbackBufferDataSize maxTransformFeedbackBufferDataStride (bool32ToBool transformFeedbackQueries) (bool32ToBool transformFeedbackStreamsLinesTriangles) (bool32ToBool transformFeedbackRasterizationStreamSelect) (bool32ToBool transformFeedbackDraw)
-
-instance Storable PhysicalDeviceTransformFeedbackPropertiesEXT where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceTransformFeedbackPropertiesEXT where
-  zero = PhysicalDeviceTransformFeedbackPropertiesEXT
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineRasterizationStateStreamCreateInfoEXT - Structure defining the
--- geometry stream used for rasterization
---
--- = Description
---
--- If this structure is not present, @rasterizationStream@ is assumed to be
--- zero.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PipelineRasterizationStateStreamCreateFlagsEXT',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineRasterizationStateStreamCreateInfoEXT = PipelineRasterizationStateStreamCreateInfoEXT
-  { -- | @flags@ /must/ be @0@
-    flags :: PipelineRasterizationStateStreamCreateFlagsEXT
-  , -- | @rasterizationStream@ /must/ be zero if
-    -- 'PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackRasterizationStreamSelect@
-    -- is 'Graphics.Vulkan.Core10.BaseType.FALSE'
-    rasterizationStream :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PipelineRasterizationStateStreamCreateInfoEXT
-
-instance ToCStruct PipelineRasterizationStateStreamCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineRasterizationStateStreamCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateStreamCreateFlagsEXT)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (rasterizationStream)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PipelineRasterizationStateStreamCreateInfoEXT where
-  peekCStruct p = do
-    flags <- peek @PipelineRasterizationStateStreamCreateFlagsEXT ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateStreamCreateFlagsEXT))
-    rasterizationStream <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pure $ PipelineRasterizationStateStreamCreateInfoEXT
-             flags rasterizationStream
-
-instance Storable PipelineRasterizationStateStreamCreateInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineRasterizationStateStreamCreateInfoEXT where
-  zero = PipelineRasterizationStateStreamCreateInfoEXT
-           zero
-           zero
-
-
--- | VkPipelineRasterizationStateStreamCreateFlagsEXT - Reserved for future
--- use
---
--- = Description
---
--- 'PipelineRasterizationStateStreamCreateFlagsEXT' is a bitmask type for
--- setting a mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'PipelineRasterizationStateStreamCreateInfoEXT'
-newtype PipelineRasterizationStateStreamCreateFlagsEXT = PipelineRasterizationStateStreamCreateFlagsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineRasterizationStateStreamCreateFlagsEXT where
-  showsPrec p = \case
-    PipelineRasterizationStateStreamCreateFlagsEXT x -> showParen (p >= 11) (showString "PipelineRasterizationStateStreamCreateFlagsEXT 0x" . showHex x)
-
-instance Read PipelineRasterizationStateStreamCreateFlagsEXT where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineRasterizationStateStreamCreateFlagsEXT")
-                       v <- step readPrec
-                       pure (PipelineRasterizationStateStreamCreateFlagsEXT v)))
-
-
-type EXT_TRANSFORM_FEEDBACK_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION"
-pattern EXT_TRANSFORM_FEEDBACK_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_TRANSFORM_FEEDBACK_SPEC_VERSION = 1
-
-
-type EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME = "VK_EXT_transform_feedback"
-
--- No documentation found for TopLevel "VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME"
-pattern EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME = "VK_EXT_transform_feedback"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_transform_feedback.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_transform_feedback.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_transform_feedback.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_transform_feedback  ( PhysicalDeviceTransformFeedbackFeaturesEXT
-                                                             , PhysicalDeviceTransformFeedbackPropertiesEXT
-                                                             , PipelineRasterizationStateStreamCreateInfoEXT
-                                                             ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceTransformFeedbackFeaturesEXT
-
-instance ToCStruct PhysicalDeviceTransformFeedbackFeaturesEXT
-instance Show PhysicalDeviceTransformFeedbackFeaturesEXT
-
-instance FromCStruct PhysicalDeviceTransformFeedbackFeaturesEXT
-
-
-data PhysicalDeviceTransformFeedbackPropertiesEXT
-
-instance ToCStruct PhysicalDeviceTransformFeedbackPropertiesEXT
-instance Show PhysicalDeviceTransformFeedbackPropertiesEXT
-
-instance FromCStruct PhysicalDeviceTransformFeedbackPropertiesEXT
-
-
-data PipelineRasterizationStateStreamCreateInfoEXT
-
-instance ToCStruct PipelineRasterizationStateStreamCreateInfoEXT
-instance Show PipelineRasterizationStateStreamCreateInfoEXT
-
-instance FromCStruct PipelineRasterizationStateStreamCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs
+++ /dev/null
@@ -1,694 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_validation_cache  ( createValidationCacheEXT
-                                                           , withValidationCacheEXT
-                                                           , destroyValidationCacheEXT
-                                                           , getValidationCacheDataEXT
-                                                           , mergeValidationCachesEXT
-                                                           , ValidationCacheCreateInfoEXT(..)
-                                                           , ShaderModuleValidationCacheCreateInfoEXT(..)
-                                                           , ValidationCacheCreateFlagsEXT(..)
-                                                           , ValidationCacheHeaderVersionEXT( VALIDATION_CACHE_HEADER_VERSION_ONE_EXT
-                                                                                            , ..
-                                                                                            )
-                                                           , EXT_VALIDATION_CACHE_SPEC_VERSION
-                                                           , pattern EXT_VALIDATION_CACHE_SPEC_VERSION
-                                                           , EXT_VALIDATION_CACHE_EXTENSION_NAME
-                                                           , pattern EXT_VALIDATION_CACHE_EXTENSION_NAME
-                                                           , ValidationCacheEXT(..)
-                                                           ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.ByteString (packCStringLen)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Foreign.C.Types (CSize(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateValidationCacheEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyValidationCacheEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetValidationCacheDataEXT))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkMergeValidationCachesEXT))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Extensions.Handles (ValidationCacheEXT)
-import Graphics.Vulkan.Extensions.Handles (ValidationCacheEXT(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (ValidationCacheEXT(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateValidationCacheEXT
-  :: FunPtr (Ptr Device_T -> Ptr ValidationCacheCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr ValidationCacheEXT -> IO Result) -> Ptr Device_T -> Ptr ValidationCacheCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr ValidationCacheEXT -> IO Result
-
--- | vkCreateValidationCacheEXT - Creates a new validation cache
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the validation cache
---     object.
---
--- -   @pCreateInfo@ is a pointer to a 'ValidationCacheCreateInfoEXT'
---     structure containing the initial parameters for the validation cache
---     object.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pValidationCache@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT' handle in
---     which the resulting validation cache object is returned.
---
--- = 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
--- 'getValidationCacheDataEXT'. 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
--- 'Graphics.Vulkan.Core10.Shader.createShaderModule' command by adding
--- this object to the
--- 'Graphics.Vulkan.Core10.Shader.ShaderModuleCreateInfo' structure’s
--- @pNext@ chain. If a 'ShaderModuleValidationCacheCreateInfoEXT' object is
--- included in the
--- 'Graphics.Vulkan.Core10.Shader.ShaderModuleCreateInfo'::@pNext@ chain,
--- and its @validationCache@ field is not
--- 'Graphics.Vulkan.Core10.APIConstants.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
--- 'Graphics.Vulkan.Core10.Shader.createShaderModule' command.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'ValidationCacheCreateInfoEXT' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pValidationCache@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device', 'ValidationCacheCreateInfoEXT',
--- 'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT'
-createValidationCacheEXT :: forall io . MonadIO io => Device -> ValidationCacheCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (ValidationCacheEXT)
-createValidationCacheEXT device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateValidationCacheEXT' = mkVkCreateValidationCacheEXT (pVkCreateValidationCacheEXT (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPValidationCache <- ContT $ bracket (callocBytes @ValidationCacheEXT 8) free
-  r <- lift $ vkCreateValidationCacheEXT' (deviceHandle (device)) pCreateInfo pAllocator (pPValidationCache)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pValidationCache <- lift $ peek @ValidationCacheEXT pPValidationCache
-  pure $ (pValidationCache)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createValidationCacheEXT' and 'destroyValidationCacheEXT'
---
--- To ensure that 'destroyValidationCacheEXT' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withValidationCacheEXT :: forall io r . MonadIO io => (io (ValidationCacheEXT) -> ((ValidationCacheEXT) -> io ()) -> r) -> Device -> ValidationCacheCreateInfoEXT -> Maybe AllocationCallbacks -> r
-withValidationCacheEXT b device pCreateInfo pAllocator =
-  b (createValidationCacheEXT device pCreateInfo pAllocator)
-    (\(o0) -> destroyValidationCacheEXT device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyValidationCacheEXT
-  :: FunPtr (Ptr Device_T -> ValidationCacheEXT -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> ValidationCacheEXT -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyValidationCacheEXT - Destroy a validation cache object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @validationCache@ was created, a compatible set
---     of callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @validationCache@ was created, @pAllocator@
---     /must/ be @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @validationCache@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @validationCache@
---     /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT'
-destroyValidationCacheEXT :: forall io . MonadIO io => Device -> ValidationCacheEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyValidationCacheEXT device validationCache allocator = liftIO . evalContT $ do
-  let vkDestroyValidationCacheEXT' = mkVkDestroyValidationCacheEXT (pVkDestroyValidationCacheEXT (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyValidationCacheEXT' (deviceHandle (device)) (validationCache) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetValidationCacheDataEXT
-  :: FunPtr (Ptr Device_T -> ValidationCacheEXT -> Ptr CSize -> Ptr () -> IO Result) -> Ptr Device_T -> ValidationCacheEXT -> Ptr CSize -> Ptr () -> IO Result
-
--- | vkGetValidationCacheDataEXT - Get the data store from a validation cache
---
--- = 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
---
--- 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 'getValidationCacheDataEXT' will return
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'. Any data written to
--- @pData@ is valid and /can/ be provided as the @pInitialData@ member of
--- the 'ValidationCacheCreateInfoEXT' structure passed to
--- 'createValidationCacheEXT'.
---
--- Two calls to 'getValidationCacheDataEXT' 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:
---
--- +--------+-------------------------------------------------+--------------------------------------------------+
--- | Offset | Size                                            | Meaning                                          |
--- +========+=================================================+==================================================+
--- | 0      | 4                                               | length in bytes of the entire validation cache   |
--- |        |                                                 | header written as a stream of bytes, with the    |
--- |        |                                                 | least significant byte first                     |
--- +--------+-------------------------------------------------+--------------------------------------------------+
--- | 4      | 4                                               | a 'ValidationCacheHeaderVersionEXT' value        |
--- |        |                                                 | written as a stream of bytes, with the least     |
--- |        |                                                 | significant byte first                           |
--- +--------+-------------------------------------------------+--------------------------------------------------+
--- | 8      | 'Graphics.Vulkan.Core10.APIConstants.UUID_SIZE' | a layer commit ID expressed as a UUID, which     |
--- |        |                                                 | uniquely identifies the version of the           |
--- |        |                                                 | validation layers used to generate these         |
--- |        |                                                 | validation results                               |
--- +--------+-------------------------------------------------+--------------------------------------------------+
---
--- Layout for validation cache header version
--- '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 'ValidationCacheHeaderVersionEXT'. 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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @validationCache@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT' 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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT'
-getValidationCacheDataEXT :: forall io . MonadIO io => Device -> ValidationCacheEXT -> io (Result, ("data" ::: ByteString))
-getValidationCacheDataEXT device validationCache = liftIO . evalContT $ do
-  let vkGetValidationCacheDataEXT' = mkVkGetValidationCacheDataEXT (pVkGetValidationCacheDataEXT (deviceCmds (device :: Device)))
-  let device' = deviceHandle (device)
-  pPDataSize <- ContT $ bracket (callocBytes @CSize 8) free
-  r <- lift $ vkGetValidationCacheDataEXT' device' (validationCache) (pPDataSize) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pDataSize <- lift $ peek @CSize pPDataSize
-  pPData <- ContT $ bracket (callocBytes @(()) (fromIntegral (((\(CSize a) -> a) pDataSize)))) free
-  r' <- lift $ vkGetValidationCacheDataEXT' device' (validationCache) (pPDataSize) (pPData)
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pDataSize'' <- lift $ peek @CSize pPDataSize
-  pData' <- lift $ packCStringLen  (castPtr @() @CChar pPData, (fromIntegral (((\(CSize a) -> a) pDataSize''))))
-  pure $ ((r'), pData')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkMergeValidationCachesEXT
-  :: FunPtr (Ptr Device_T -> ValidationCacheEXT -> Word32 -> Ptr ValidationCacheEXT -> IO Result) -> Ptr Device_T -> ValidationCacheEXT -> Word32 -> Ptr ValidationCacheEXT -> IO Result
-
--- | vkMergeValidationCachesEXT - Combine the data stores of validation
--- caches
---
--- = 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 a pointer to an array of validation cache handles,
---     which will be merged into @dstCache@. The previous contents of
---     @dstCache@ are included after the merge.
---
--- = 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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @dstCache@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT' handle
---
--- -   @pSrcCaches@ /must/ be a valid pointer to an array of
---     @srcCacheCount@ valid
---     'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT' 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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT'
-mergeValidationCachesEXT :: forall io . MonadIO io => Device -> ("dstCache" ::: ValidationCacheEXT) -> ("srcCaches" ::: Vector ValidationCacheEXT) -> io ()
-mergeValidationCachesEXT device dstCache srcCaches = liftIO . evalContT $ do
-  let vkMergeValidationCachesEXT' = mkVkMergeValidationCachesEXT (pVkMergeValidationCachesEXT (deviceCmds (device :: Device)))
-  pPSrcCaches <- ContT $ allocaBytesAligned @ValidationCacheEXT ((Data.Vector.length (srcCaches)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPSrcCaches `plusPtr` (8 * (i)) :: Ptr ValidationCacheEXT) (e)) (srcCaches)
-  r <- lift $ vkMergeValidationCachesEXT' (deviceHandle (device)) (dstCache) ((fromIntegral (Data.Vector.length $ (srcCaches)) :: Word32)) (pPSrcCaches)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkValidationCacheCreateInfoEXT - Structure specifying parameters of a
--- newly created validation cache
---
--- == Valid Usage
---
--- -   If @initialDataSize@ is not @0@, it /must/ be equal to the size of
---     @pInitialData@, as returned by 'getValidationCacheDataEXT' when
---     @pInitialData@ was originally retrieved
---
--- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ have been
---     retrieved from a previous call to 'getValidationCacheDataEXT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'ValidationCacheCreateFlagsEXT', 'createValidationCacheEXT'
-data ValidationCacheCreateInfoEXT = ValidationCacheCreateInfoEXT
-  { -- | @flags@ is reserved for future use.
-    flags :: ValidationCacheCreateFlagsEXT
-  , -- | @initialDataSize@ is the number of bytes in @pInitialData@. If
-    -- @initialDataSize@ is zero, the validation cache will initially be empty.
-    initialDataSize :: Word64
-  , -- | @pInitialData@ is a pointer to previously retrieved validation cache
-    -- data. If the validation cache data is incompatible (as defined below)
-    -- with the device, the validation cache will be initially empty. If
-    -- @initialDataSize@ is zero, @pInitialData@ is ignored.
-    initialData :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show ValidationCacheCreateInfoEXT
-
-instance ToCStruct ValidationCacheCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ValidationCacheCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ValidationCacheCreateFlagsEXT)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (initialDataSize))
-    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (initialData)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct ValidationCacheCreateInfoEXT where
-  peekCStruct p = do
-    flags <- peek @ValidationCacheCreateFlagsEXT ((p `plusPtr` 16 :: Ptr ValidationCacheCreateFlagsEXT))
-    initialDataSize <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
-    pInitialData <- peek @(Ptr ()) ((p `plusPtr` 32 :: Ptr (Ptr ())))
-    pure $ ValidationCacheCreateInfoEXT
-             flags ((\(CSize a) -> a) initialDataSize) pInitialData
-
-instance Storable ValidationCacheCreateInfoEXT where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ValidationCacheCreateInfoEXT where
-  zero = ValidationCacheCreateInfoEXT
-           zero
-           zero
-           zero
-
-
--- | VkShaderModuleValidationCacheCreateInfoEXT - Specify validation cache to
--- use during shader module creation
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT'
-data ShaderModuleValidationCacheCreateInfoEXT = ShaderModuleValidationCacheCreateInfoEXT
-  { -- | @validationCache@ /must/ be a valid
-    -- 'Graphics.Vulkan.Extensions.Handles.ValidationCacheEXT' handle
-    validationCache :: ValidationCacheEXT }
-  deriving (Typeable)
-deriving instance Show ShaderModuleValidationCacheCreateInfoEXT
-
-instance ToCStruct ShaderModuleValidationCacheCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ShaderModuleValidationCacheCreateInfoEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ValidationCacheEXT)) (validationCache)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ValidationCacheEXT)) (zero)
-    f
-
-instance FromCStruct ShaderModuleValidationCacheCreateInfoEXT where
-  peekCStruct p = do
-    validationCache <- peek @ValidationCacheEXT ((p `plusPtr` 16 :: Ptr ValidationCacheEXT))
-    pure $ ShaderModuleValidationCacheCreateInfoEXT
-             validationCache
-
-instance Storable ShaderModuleValidationCacheCreateInfoEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ShaderModuleValidationCacheCreateInfoEXT where
-  zero = ShaderModuleValidationCacheCreateInfoEXT
-           zero
-
-
--- | VkValidationCacheCreateFlagsEXT - Reserved for future use
---
--- = Description
---
--- 'ValidationCacheCreateFlagsEXT' is a bitmask type for setting a mask,
--- but is currently reserved for future use.
---
--- = See Also
---
--- 'ValidationCacheCreateInfoEXT'
-newtype ValidationCacheCreateFlagsEXT = ValidationCacheCreateFlagsEXT Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show ValidationCacheCreateFlagsEXT where
-  showsPrec p = \case
-    ValidationCacheCreateFlagsEXT x -> showParen (p >= 11) (showString "ValidationCacheCreateFlagsEXT 0x" . showHex x)
-
-instance Read ValidationCacheCreateFlagsEXT where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ValidationCacheCreateFlagsEXT")
-                       v <- step readPrec
-                       pure (ValidationCacheCreateFlagsEXT v)))
-
-
--- | VkValidationCacheHeaderVersionEXT - Encode validation cache version
---
--- = See Also
---
--- 'createValidationCacheEXT', 'getValidationCacheDataEXT'
-newtype ValidationCacheHeaderVersionEXT = ValidationCacheHeaderVersionEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
--- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
-
--- | 'VALIDATION_CACHE_HEADER_VERSION_ONE_EXT' specifies version one of the
--- validation cache.
-pattern VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = ValidationCacheHeaderVersionEXT 1
-{-# complete VALIDATION_CACHE_HEADER_VERSION_ONE_EXT :: ValidationCacheHeaderVersionEXT #-}
-
-instance Show ValidationCacheHeaderVersionEXT where
-  showsPrec p = \case
-    VALIDATION_CACHE_HEADER_VERSION_ONE_EXT -> showString "VALIDATION_CACHE_HEADER_VERSION_ONE_EXT"
-    ValidationCacheHeaderVersionEXT x -> showParen (p >= 11) (showString "ValidationCacheHeaderVersionEXT " . showsPrec 11 x)
-
-instance Read ValidationCacheHeaderVersionEXT where
-  readPrec = parens (choose [("VALIDATION_CACHE_HEADER_VERSION_ONE_EXT", pure VALIDATION_CACHE_HEADER_VERSION_ONE_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ValidationCacheHeaderVersionEXT")
-                       v <- step readPrec
-                       pure (ValidationCacheHeaderVersionEXT v)))
-
-
-type EXT_VALIDATION_CACHE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_VALIDATION_CACHE_SPEC_VERSION"
-pattern EXT_VALIDATION_CACHE_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_VALIDATION_CACHE_SPEC_VERSION = 1
-
-
-type EXT_VALIDATION_CACHE_EXTENSION_NAME = "VK_EXT_validation_cache"
-
--- No documentation found for TopLevel "VK_EXT_VALIDATION_CACHE_EXTENSION_NAME"
-pattern EXT_VALIDATION_CACHE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_VALIDATION_CACHE_EXTENSION_NAME = "VK_EXT_validation_cache"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_validation_cache  ( ShaderModuleValidationCacheCreateInfoEXT
-                                                           , ValidationCacheCreateInfoEXT
-                                                           ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ShaderModuleValidationCacheCreateInfoEXT
-
-instance ToCStruct ShaderModuleValidationCacheCreateInfoEXT
-instance Show ShaderModuleValidationCacheCreateInfoEXT
-
-instance FromCStruct ShaderModuleValidationCacheCreateInfoEXT
-
-
-data ValidationCacheCreateInfoEXT
-
-instance ToCStruct ValidationCacheCreateInfoEXT
-instance Show ValidationCacheCreateInfoEXT
-
-instance FromCStruct ValidationCacheCreateInfoEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_features.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_features.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_features.hs
+++ /dev/null
@@ -1,289 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_validation_features  ( ValidationFeaturesEXT(..)
-                                                              , ValidationFeatureEnableEXT( VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT
-                                                                                          , VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT
-                                                                                          , VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT
-                                                                                          , VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT
-                                                                                          , ..
-                                                                                          )
-                                                              , ValidationFeatureDisableEXT( VALIDATION_FEATURE_DISABLE_ALL_EXT
-                                                                                           , VALIDATION_FEATURE_DISABLE_SHADERS_EXT
-                                                                                           , VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT
-                                                                                           , VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT
-                                                                                           , VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT
-                                                                                           , VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT
-                                                                                           , VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT
-                                                                                           , ..
-                                                                                           )
-                                                              , EXT_VALIDATION_FEATURES_SPEC_VERSION
-                                                              , pattern EXT_VALIDATION_FEATURES_SPEC_VERSION
-                                                              , EXT_VALIDATION_FEATURES_EXTENSION_NAME
-                                                              , pattern EXT_VALIDATION_FEATURES_EXTENSION_NAME
-                                                              ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_VALIDATION_FEATURES_EXT))
--- | VkValidationFeaturesEXT - Specify validation features to enable or
--- disable for a Vulkan instance
---
--- == Valid Usage
---
--- -   If the @pEnabledValidationFeatures@ array contains
---     'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT',
---     then it /must/ also contain
---     'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT'
---
--- -   If the @pEnabledValidationFeatures@ array contains
---     'VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT', then it /must/ not
---     contain 'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_VALIDATION_FEATURES_EXT'
---
--- -   If @enabledValidationFeatureCount@ is not @0@,
---     @pEnabledValidationFeatures@ /must/ be a valid pointer to an array
---     of @enabledValidationFeatureCount@ valid
---     'ValidationFeatureEnableEXT' values
---
--- -   If @disabledValidationFeatureCount@ is not @0@,
---     @pDisabledValidationFeatures@ /must/ be a valid pointer to an array
---     of @disabledValidationFeatureCount@ valid
---     'ValidationFeatureDisableEXT' values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'ValidationFeatureDisableEXT', 'ValidationFeatureEnableEXT'
-data ValidationFeaturesEXT = ValidationFeaturesEXT
-  { -- | @pEnabledValidationFeatures@ is a pointer to an array of
-    -- 'ValidationFeatureEnableEXT' values specifying the validation features
-    -- to be enabled.
-    enabledValidationFeatures :: Vector ValidationFeatureEnableEXT
-  , -- | @pDisabledValidationFeatures@ is a pointer to an array of
-    -- 'ValidationFeatureDisableEXT' values specifying the validation features
-    -- to be disabled.
-    disabledValidationFeatures :: Vector ValidationFeatureDisableEXT
-  }
-  deriving (Typeable)
-deriving instance Show ValidationFeaturesEXT
-
-instance ToCStruct ValidationFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ValidationFeaturesEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_FEATURES_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledValidationFeatures)) :: Word32))
-    pPEnabledValidationFeatures' <- ContT $ allocaBytesAligned @ValidationFeatureEnableEXT ((Data.Vector.length (enabledValidationFeatures)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPEnabledValidationFeatures' `plusPtr` (4 * (i)) :: Ptr ValidationFeatureEnableEXT) (e)) (enabledValidationFeatures)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ValidationFeatureEnableEXT))) (pPEnabledValidationFeatures')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (disabledValidationFeatures)) :: Word32))
-    pPDisabledValidationFeatures' <- ContT $ allocaBytesAligned @ValidationFeatureDisableEXT ((Data.Vector.length (disabledValidationFeatures)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDisabledValidationFeatures' `plusPtr` (4 * (i)) :: Ptr ValidationFeatureDisableEXT) (e)) (disabledValidationFeatures)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr ValidationFeatureDisableEXT))) (pPDisabledValidationFeatures')
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_FEATURES_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPEnabledValidationFeatures' <- ContT $ allocaBytesAligned @ValidationFeatureEnableEXT ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPEnabledValidationFeatures' `plusPtr` (4 * (i)) :: Ptr ValidationFeatureEnableEXT) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ValidationFeatureEnableEXT))) (pPEnabledValidationFeatures')
-    pPDisabledValidationFeatures' <- ContT $ allocaBytesAligned @ValidationFeatureDisableEXT ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDisabledValidationFeatures' `plusPtr` (4 * (i)) :: Ptr ValidationFeatureDisableEXT) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr ValidationFeatureDisableEXT))) (pPDisabledValidationFeatures')
-    lift $ f
-
-instance FromCStruct ValidationFeaturesEXT where
-  peekCStruct p = do
-    enabledValidationFeatureCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pEnabledValidationFeatures <- peek @(Ptr ValidationFeatureEnableEXT) ((p `plusPtr` 24 :: Ptr (Ptr ValidationFeatureEnableEXT)))
-    pEnabledValidationFeatures' <- generateM (fromIntegral enabledValidationFeatureCount) (\i -> peek @ValidationFeatureEnableEXT ((pEnabledValidationFeatures `advancePtrBytes` (4 * (i)) :: Ptr ValidationFeatureEnableEXT)))
-    disabledValidationFeatureCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pDisabledValidationFeatures <- peek @(Ptr ValidationFeatureDisableEXT) ((p `plusPtr` 40 :: Ptr (Ptr ValidationFeatureDisableEXT)))
-    pDisabledValidationFeatures' <- generateM (fromIntegral disabledValidationFeatureCount) (\i -> peek @ValidationFeatureDisableEXT ((pDisabledValidationFeatures `advancePtrBytes` (4 * (i)) :: Ptr ValidationFeatureDisableEXT)))
-    pure $ ValidationFeaturesEXT
-             pEnabledValidationFeatures' pDisabledValidationFeatures'
-
-instance Zero ValidationFeaturesEXT where
-  zero = ValidationFeaturesEXT
-           mempty
-           mempty
-
-
--- | VkValidationFeatureEnableEXT - Specify validation features to enable
---
--- = See Also
---
--- 'ValidationFeaturesEXT'
-newtype ValidationFeatureEnableEXT = ValidationFeatureEnableEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT' specifies that GPU-assisted
--- validation is enabled. Activating this feature instruments shader
--- programs to generate additional diagnostic data. This feature is
--- disabled by default.
-pattern VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = ValidationFeatureEnableEXT 0
--- | 'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT'
--- specifies that the validation layers reserve a descriptor set binding
--- slot for their own use. The layer reports a value for
--- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxBoundDescriptorSets@
--- that is one less than the value reported by the device. If the device
--- supports the binding of only one descriptor set, the validation layer
--- does not perform GPU-assisted validation. This feature is disabled by
--- default.
-pattern VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = ValidationFeatureEnableEXT 1
--- | 'VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT' specifies that Vulkan
--- best-practices validation is enabled. Activating this feature enables
--- the output of warnings related to common misuse of the API, but which
--- are not explicitly prohibited by the specification. This feature is
--- disabled by default.
-pattern VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = ValidationFeatureEnableEXT 2
--- | 'VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT' specifies that the layers
--- will process @debugPrintfEXT@ operations in shaders and send the
--- resulting output to the debug callback. This feature is disabled by
--- default.
-pattern VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = ValidationFeatureEnableEXT 3
-{-# complete VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT,
-             VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT,
-             VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT,
-             VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT :: ValidationFeatureEnableEXT #-}
-
-instance Show ValidationFeatureEnableEXT where
-  showsPrec p = \case
-    VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT -> showString "VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT"
-    VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT -> showString "VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT"
-    VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT -> showString "VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT"
-    VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT -> showString "VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT"
-    ValidationFeatureEnableEXT x -> showParen (p >= 11) (showString "ValidationFeatureEnableEXT " . showsPrec 11 x)
-
-instance Read ValidationFeatureEnableEXT where
-  readPrec = parens (choose [("VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT", pure VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT)
-                            , ("VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT", pure VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT)
-                            , ("VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT", pure VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT)
-                            , ("VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT", pure VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ValidationFeatureEnableEXT")
-                       v <- step readPrec
-                       pure (ValidationFeatureEnableEXT v)))
-
-
--- | VkValidationFeatureDisableEXT - Specify validation features to disable
---
--- = See Also
---
--- 'ValidationFeaturesEXT'
-newtype ValidationFeatureDisableEXT = ValidationFeatureDisableEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'VALIDATION_FEATURE_DISABLE_ALL_EXT' specifies that all validation
--- checks are disabled.
-pattern VALIDATION_FEATURE_DISABLE_ALL_EXT = ValidationFeatureDisableEXT 0
--- | 'VALIDATION_FEATURE_DISABLE_SHADERS_EXT' specifies that shader
--- validation is disabled. This feature is enabled by default.
-pattern VALIDATION_FEATURE_DISABLE_SHADERS_EXT = ValidationFeatureDisableEXT 1
--- | 'VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT' specifies that thread
--- safety validation is disabled. This feature is enabled by default.
-pattern VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = ValidationFeatureDisableEXT 2
--- | 'VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT' specifies that stateless
--- parameter validation is disabled. This feature is enabled by default.
-pattern VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = ValidationFeatureDisableEXT 3
--- | 'VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT' specifies that object
--- lifetime validation is disabled. This feature is enabled by default.
-pattern VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = ValidationFeatureDisableEXT 4
--- | 'VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT' specifies that core
--- validation checks are disabled. This feature is enabled by default. If
--- this feature is disabled, the shader validation and GPU-assisted
--- validation features are also disabled.
-pattern VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = ValidationFeatureDisableEXT 5
--- | 'VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT' specifies that
--- protection against duplicate non-dispatchable object handles is
--- disabled. This feature is enabled by default.
-pattern VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = ValidationFeatureDisableEXT 6
-{-# complete VALIDATION_FEATURE_DISABLE_ALL_EXT,
-             VALIDATION_FEATURE_DISABLE_SHADERS_EXT,
-             VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT,
-             VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT,
-             VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT,
-             VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT,
-             VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT :: ValidationFeatureDisableEXT #-}
-
-instance Show ValidationFeatureDisableEXT where
-  showsPrec p = \case
-    VALIDATION_FEATURE_DISABLE_ALL_EXT -> showString "VALIDATION_FEATURE_DISABLE_ALL_EXT"
-    VALIDATION_FEATURE_DISABLE_SHADERS_EXT -> showString "VALIDATION_FEATURE_DISABLE_SHADERS_EXT"
-    VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT -> showString "VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT"
-    VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT -> showString "VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT"
-    VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT -> showString "VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT"
-    VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT -> showString "VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT"
-    VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT -> showString "VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT"
-    ValidationFeatureDisableEXT x -> showParen (p >= 11) (showString "ValidationFeatureDisableEXT " . showsPrec 11 x)
-
-instance Read ValidationFeatureDisableEXT where
-  readPrec = parens (choose [("VALIDATION_FEATURE_DISABLE_ALL_EXT", pure VALIDATION_FEATURE_DISABLE_ALL_EXT)
-                            , ("VALIDATION_FEATURE_DISABLE_SHADERS_EXT", pure VALIDATION_FEATURE_DISABLE_SHADERS_EXT)
-                            , ("VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", pure VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT)
-                            , ("VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", pure VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT)
-                            , ("VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", pure VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT)
-                            , ("VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT", pure VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT)
-                            , ("VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", pure VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ValidationFeatureDisableEXT")
-                       v <- step readPrec
-                       pure (ValidationFeatureDisableEXT v)))
-
-
-type EXT_VALIDATION_FEATURES_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_EXT_VALIDATION_FEATURES_SPEC_VERSION"
-pattern EXT_VALIDATION_FEATURES_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_VALIDATION_FEATURES_SPEC_VERSION = 3
-
-
-type EXT_VALIDATION_FEATURES_EXTENSION_NAME = "VK_EXT_validation_features"
-
--- No documentation found for TopLevel "VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME"
-pattern EXT_VALIDATION_FEATURES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_VALIDATION_FEATURES_EXTENSION_NAME = "VK_EXT_validation_features"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_features.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_features.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_features.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_validation_features  (ValidationFeaturesEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ValidationFeaturesEXT
-
-instance ToCStruct ValidationFeaturesEXT
-instance Show ValidationFeaturesEXT
-
-instance FromCStruct ValidationFeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_validation_flags  ( ValidationFlagsEXT(..)
-                                                           , ValidationCheckEXT( VALIDATION_CHECK_ALL_EXT
-                                                                               , VALIDATION_CHECK_SHADERS_EXT
-                                                                               , ..
-                                                                               )
-                                                           , EXT_VALIDATION_FLAGS_SPEC_VERSION
-                                                           , pattern EXT_VALIDATION_FLAGS_SPEC_VERSION
-                                                           , EXT_VALIDATION_FLAGS_EXTENSION_NAME
-                                                           , pattern EXT_VALIDATION_FLAGS_EXTENSION_NAME
-                                                           ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_VALIDATION_FLAGS_EXT))
--- | VkValidationFlagsEXT - Specify validation checks to disable for a Vulkan
--- instance
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'ValidationCheckEXT'
-data ValidationFlagsEXT = ValidationFlagsEXT
-  { -- | @pDisabledValidationChecks@ /must/ be a valid pointer to an array of
-    -- @disabledValidationCheckCount@ valid 'ValidationCheckEXT' values
-    disabledValidationChecks :: Vector ValidationCheckEXT }
-  deriving (Typeable)
-deriving instance Show ValidationFlagsEXT
-
-instance ToCStruct ValidationFlagsEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ValidationFlagsEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_FLAGS_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (disabledValidationChecks)) :: Word32))
-    pPDisabledValidationChecks' <- ContT $ allocaBytesAligned @ValidationCheckEXT ((Data.Vector.length (disabledValidationChecks)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDisabledValidationChecks' `plusPtr` (4 * (i)) :: Ptr ValidationCheckEXT) (e)) (disabledValidationChecks)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ValidationCheckEXT))) (pPDisabledValidationChecks')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_FLAGS_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPDisabledValidationChecks' <- ContT $ allocaBytesAligned @ValidationCheckEXT ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDisabledValidationChecks' `plusPtr` (4 * (i)) :: Ptr ValidationCheckEXT) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ValidationCheckEXT))) (pPDisabledValidationChecks')
-    lift $ f
-
-instance FromCStruct ValidationFlagsEXT where
-  peekCStruct p = do
-    disabledValidationCheckCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pDisabledValidationChecks <- peek @(Ptr ValidationCheckEXT) ((p `plusPtr` 24 :: Ptr (Ptr ValidationCheckEXT)))
-    pDisabledValidationChecks' <- generateM (fromIntegral disabledValidationCheckCount) (\i -> peek @ValidationCheckEXT ((pDisabledValidationChecks `advancePtrBytes` (4 * (i)) :: Ptr ValidationCheckEXT)))
-    pure $ ValidationFlagsEXT
-             pDisabledValidationChecks'
-
-instance Zero ValidationFlagsEXT where
-  zero = ValidationFlagsEXT
-           mempty
-
-
--- | VkValidationCheckEXT - Specify validation checks to disable
---
--- = See Also
---
--- 'ValidationFlagsEXT'
-newtype ValidationCheckEXT = ValidationCheckEXT Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'VALIDATION_CHECK_ALL_EXT' specifies that all validation checks are
--- disabled.
-pattern VALIDATION_CHECK_ALL_EXT = ValidationCheckEXT 0
--- | 'VALIDATION_CHECK_SHADERS_EXT' specifies that shader validation is
--- disabled.
-pattern VALIDATION_CHECK_SHADERS_EXT = ValidationCheckEXT 1
-{-# complete VALIDATION_CHECK_ALL_EXT,
-             VALIDATION_CHECK_SHADERS_EXT :: ValidationCheckEXT #-}
-
-instance Show ValidationCheckEXT where
-  showsPrec p = \case
-    VALIDATION_CHECK_ALL_EXT -> showString "VALIDATION_CHECK_ALL_EXT"
-    VALIDATION_CHECK_SHADERS_EXT -> showString "VALIDATION_CHECK_SHADERS_EXT"
-    ValidationCheckEXT x -> showParen (p >= 11) (showString "ValidationCheckEXT " . showsPrec 11 x)
-
-instance Read ValidationCheckEXT where
-  readPrec = parens (choose [("VALIDATION_CHECK_ALL_EXT", pure VALIDATION_CHECK_ALL_EXT)
-                            , ("VALIDATION_CHECK_SHADERS_EXT", pure VALIDATION_CHECK_SHADERS_EXT)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ValidationCheckEXT")
-                       v <- step readPrec
-                       pure (ValidationCheckEXT v)))
-
-
-type EXT_VALIDATION_FLAGS_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_EXT_VALIDATION_FLAGS_SPEC_VERSION"
-pattern EXT_VALIDATION_FLAGS_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_VALIDATION_FLAGS_SPEC_VERSION = 2
-
-
-type EXT_VALIDATION_FLAGS_EXTENSION_NAME = "VK_EXT_validation_flags"
-
--- No documentation found for TopLevel "VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME"
-pattern EXT_VALIDATION_FLAGS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_VALIDATION_FLAGS_EXTENSION_NAME = "VK_EXT_validation_flags"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_validation_flags  (ValidationFlagsEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ValidationFlagsEXT
-
-instance ToCStruct ValidationFlagsEXT
-instance Show ValidationFlagsEXT
-
-instance FromCStruct ValidationFlagsEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs
+++ /dev/null
@@ -1,315 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor  ( VertexInputBindingDivisorDescriptionEXT(..)
-                                                                   , PipelineVertexInputDivisorStateCreateInfoEXT(..)
-                                                                   , PhysicalDeviceVertexAttributeDivisorPropertiesEXT(..)
-                                                                   , PhysicalDeviceVertexAttributeDivisorFeaturesEXT(..)
-                                                                   , EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION
-                                                                   , pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION
-                                                                   , EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME
-                                                                   , pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME
-                                                                   ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT))
--- | VkVertexInputBindingDivisorDescriptionEXT - Structure specifying a
--- divisor used in instanced rendering
---
--- = 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
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
---
--- -   If the @vertexAttributeInstanceRateZeroDivisor@ feature is not
---     enabled, @divisor@ /must/ not be @0@
---
--- -   If the @vertexAttributeInstanceRateDivisor@ feature is not enabled,
---     @divisor@ /must/ be @1@
---
--- -   @divisor@ /must/ be a value between @0@ and
---     'PhysicalDeviceVertexAttributeDivisorPropertiesEXT'::@maxVertexAttribDivisor@,
---     inclusive
---
--- -   'Graphics.Vulkan.Core10.Pipeline.VertexInputBindingDescription'::@inputRate@
---     /must/ be of type
---     'Graphics.Vulkan.Core10.Enums.VertexInputRate.VERTEX_INPUT_RATE_INSTANCE'
---     for this @binding@
---
--- = See Also
---
--- 'PipelineVertexInputDivisorStateCreateInfoEXT'
-data VertexInputBindingDivisorDescriptionEXT = VertexInputBindingDivisorDescriptionEXT
-  { -- | @binding@ is the binding number for which the divisor is specified.
-    binding :: Word32
-  , -- | @divisor@ is the number of successive instances that will use the same
-    -- value of the vertex attribute when instanced rendering is enabled. For
-    -- example, if the divisor is N, the same vertex attribute will be applied
-    -- to N successive instances before moving on to the next vertex attribute.
-    -- The maximum value of divisor is implementation dependent and can be
-    -- queried using
-    -- 'PhysicalDeviceVertexAttributeDivisorPropertiesEXT'::@maxVertexAttribDivisor@.
-    -- A value of @0@ /can/ be used for the divisor if the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-vertexAttributeInstanceRateZeroDivisor vertexAttributeInstanceRateZeroDivisor>
-    -- feature is enabled. In this case, the same vertex attribute will be
-    -- applied to all instances.
-    divisor :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show VertexInputBindingDivisorDescriptionEXT
-
-instance ToCStruct VertexInputBindingDivisorDescriptionEXT where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p VertexInputBindingDivisorDescriptionEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (binding)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (divisor)
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct VertexInputBindingDivisorDescriptionEXT where
-  peekCStruct p = do
-    binding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    divisor <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    pure $ VertexInputBindingDivisorDescriptionEXT
-             binding divisor
-
-instance Storable VertexInputBindingDivisorDescriptionEXT where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero VertexInputBindingDivisorDescriptionEXT where
-  zero = VertexInputBindingDivisorDescriptionEXT
-           zero
-           zero
-
-
--- | VkPipelineVertexInputDivisorStateCreateInfoEXT - Structure specifying
--- vertex attributes assignment during instanced rendering
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'VertexInputBindingDivisorDescriptionEXT'
-data PipelineVertexInputDivisorStateCreateInfoEXT = PipelineVertexInputDivisorStateCreateInfoEXT
-  { -- | @pVertexBindingDivisors@ /must/ be a valid pointer to an array of
-    -- @vertexBindingDivisorCount@ 'VertexInputBindingDivisorDescriptionEXT'
-    -- structures
-    vertexBindingDivisors :: Vector VertexInputBindingDivisorDescriptionEXT }
-  deriving (Typeable)
-deriving instance Show PipelineVertexInputDivisorStateCreateInfoEXT
-
-instance ToCStruct PipelineVertexInputDivisorStateCreateInfoEXT where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineVertexInputDivisorStateCreateInfoEXT{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexBindingDivisors)) :: Word32))
-    pPVertexBindingDivisors' <- ContT $ allocaBytesAligned @VertexInputBindingDivisorDescriptionEXT ((Data.Vector.length (vertexBindingDivisors)) * 8) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDivisors' `plusPtr` (8 * (i)) :: Ptr VertexInputBindingDivisorDescriptionEXT) (e) . ($ ())) (vertexBindingDivisors)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDivisorDescriptionEXT))) (pPVertexBindingDivisors')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPVertexBindingDivisors' <- ContT $ allocaBytesAligned @VertexInputBindingDivisorDescriptionEXT ((Data.Vector.length (mempty)) * 8) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDivisors' `plusPtr` (8 * (i)) :: Ptr VertexInputBindingDivisorDescriptionEXT) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDivisorDescriptionEXT))) (pPVertexBindingDivisors')
-    lift $ f
-
-instance FromCStruct PipelineVertexInputDivisorStateCreateInfoEXT where
-  peekCStruct p = do
-    vertexBindingDivisorCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pVertexBindingDivisors <- peek @(Ptr VertexInputBindingDivisorDescriptionEXT) ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDivisorDescriptionEXT)))
-    pVertexBindingDivisors' <- generateM (fromIntegral vertexBindingDivisorCount) (\i -> peekCStruct @VertexInputBindingDivisorDescriptionEXT ((pVertexBindingDivisors `advancePtrBytes` (8 * (i)) :: Ptr VertexInputBindingDivisorDescriptionEXT)))
-    pure $ PipelineVertexInputDivisorStateCreateInfoEXT
-             pVertexBindingDivisors'
-
-instance Zero PipelineVertexInputDivisorStateCreateInfoEXT where
-  zero = PipelineVertexInputDivisorStateCreateInfoEXT
-           mempty
-
-
--- | VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT - Structure
--- describing max value of vertex attribute divisor that can be supported
--- by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceVertexAttributeDivisorPropertiesEXT'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceVertexAttributeDivisorPropertiesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceVertexAttributeDivisorPropertiesEXT = PhysicalDeviceVertexAttributeDivisorPropertiesEXT
-  { -- | @maxVertexAttribDivisor@ is the maximum value of the number of instances
-    -- that will repeat the value of vertex attribute data when instanced
-    -- rendering is enabled.
-    maxVertexAttribDivisor :: Word32 }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceVertexAttributeDivisorPropertiesEXT
-
-instance ToCStruct PhysicalDeviceVertexAttributeDivisorPropertiesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceVertexAttributeDivisorPropertiesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxVertexAttribDivisor)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceVertexAttributeDivisorPropertiesEXT where
-  peekCStruct p = do
-    maxVertexAttribDivisor <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ PhysicalDeviceVertexAttributeDivisorPropertiesEXT
-             maxVertexAttribDivisor
-
-instance Storable PhysicalDeviceVertexAttributeDivisorPropertiesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceVertexAttributeDivisorPropertiesEXT where
-  zero = PhysicalDeviceVertexAttributeDivisorPropertiesEXT
-           zero
-
-
--- | VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT - Structure describing
--- if fetching of vertex attribute may be repeated for instanced rendering
---
--- = Description
---
--- If the 'PhysicalDeviceVertexAttributeDivisorFeaturesEXT' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating the implementation-dependent
--- behavior. 'PhysicalDeviceVertexAttributeDivisorFeaturesEXT' /can/ also
--- be included in @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceVertexAttributeDivisorFeaturesEXT = PhysicalDeviceVertexAttributeDivisorFeaturesEXT
-  { -- | @vertexAttributeInstanceRateDivisor@ specifies whether vertex attribute
-    -- fetching may be repeated in case of instanced rendering.
-    vertexAttributeInstanceRateDivisor :: Bool
-  , -- | @vertexAttributeInstanceRateZeroDivisor@ specifies whether a zero value
-    -- for 'VertexInputBindingDivisorDescriptionEXT'::@divisor@ is supported.
-    vertexAttributeInstanceRateZeroDivisor :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceVertexAttributeDivisorFeaturesEXT
-
-instance ToCStruct PhysicalDeviceVertexAttributeDivisorFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceVertexAttributeDivisorFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (vertexAttributeInstanceRateDivisor))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (vertexAttributeInstanceRateZeroDivisor))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceVertexAttributeDivisorFeaturesEXT where
-  peekCStruct p = do
-    vertexAttributeInstanceRateDivisor <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    vertexAttributeInstanceRateZeroDivisor <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceVertexAttributeDivisorFeaturesEXT
-             (bool32ToBool vertexAttributeInstanceRateDivisor) (bool32ToBool vertexAttributeInstanceRateZeroDivisor)
-
-instance Storable PhysicalDeviceVertexAttributeDivisorFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceVertexAttributeDivisorFeaturesEXT where
-  zero = PhysicalDeviceVertexAttributeDivisorFeaturesEXT
-           zero
-           zero
-
-
-type EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION"
-pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION = 3
-
-
-type EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME = "VK_EXT_vertex_attribute_divisor"
-
--- No documentation found for TopLevel "VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME"
-pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME = "VK_EXT_vertex_attribute_divisor"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs-boot
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor  ( PhysicalDeviceVertexAttributeDivisorFeaturesEXT
-                                                                   , PhysicalDeviceVertexAttributeDivisorPropertiesEXT
-                                                                   , PipelineVertexInputDivisorStateCreateInfoEXT
-                                                                   , VertexInputBindingDivisorDescriptionEXT
-                                                                   ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceVertexAttributeDivisorFeaturesEXT
-
-instance ToCStruct PhysicalDeviceVertexAttributeDivisorFeaturesEXT
-instance Show PhysicalDeviceVertexAttributeDivisorFeaturesEXT
-
-instance FromCStruct PhysicalDeviceVertexAttributeDivisorFeaturesEXT
-
-
-data PhysicalDeviceVertexAttributeDivisorPropertiesEXT
-
-instance ToCStruct PhysicalDeviceVertexAttributeDivisorPropertiesEXT
-instance Show PhysicalDeviceVertexAttributeDivisorPropertiesEXT
-
-instance FromCStruct PhysicalDeviceVertexAttributeDivisorPropertiesEXT
-
-
-data PipelineVertexInputDivisorStateCreateInfoEXT
-
-instance ToCStruct PipelineVertexInputDivisorStateCreateInfoEXT
-instance Show PipelineVertexInputDivisorStateCreateInfoEXT
-
-instance FromCStruct PipelineVertexInputDivisorStateCreateInfoEXT
-
-
-data VertexInputBindingDivisorDescriptionEXT
-
-instance ToCStruct VertexInputBindingDivisorDescriptionEXT
-instance Show VertexInputBindingDivisorDescriptionEXT
-
-instance FromCStruct VertexInputBindingDivisorDescriptionEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs
+++ /dev/null
@@ -1,108 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays  ( PhysicalDeviceYcbcrImageArraysFeaturesEXT(..)
-                                                             , EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION
-                                                             , pattern EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION
-                                                             , EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME
-                                                             , pattern EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME
-                                                             ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT))
--- | VkPhysicalDeviceYcbcrImageArraysFeaturesEXT - Structure describing
--- extended Y’CbCr image creation features that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceYcbcrImageArraysFeaturesEXT' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceYcbcrImageArraysFeaturesEXT' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceYcbcrImageArraysFeaturesEXT' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceYcbcrImageArraysFeaturesEXT = PhysicalDeviceYcbcrImageArraysFeaturesEXT
-  { -- | @ycbcrImageArrays@ indicates that the implementation supports creating
-    -- images with a format that requires
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion Y′CBCR conversion>
-    -- and has multiple array layers.
-    ycbcrImageArrays :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceYcbcrImageArraysFeaturesEXT
-
-instance ToCStruct PhysicalDeviceYcbcrImageArraysFeaturesEXT where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceYcbcrImageArraysFeaturesEXT{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (ycbcrImageArrays))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceYcbcrImageArraysFeaturesEXT where
-  peekCStruct p = do
-    ycbcrImageArrays <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceYcbcrImageArraysFeaturesEXT
-             (bool32ToBool ycbcrImageArrays)
-
-instance Storable PhysicalDeviceYcbcrImageArraysFeaturesEXT where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceYcbcrImageArraysFeaturesEXT where
-  zero = PhysicalDeviceYcbcrImageArraysFeaturesEXT
-           zero
-
-
-type EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION"
-pattern EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION :: forall a . Integral a => a
-pattern EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION = 1
-
-
-type EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME = "VK_EXT_ycbcr_image_arrays"
-
--- No documentation found for TopLevel "VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME"
-pattern EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME = "VK_EXT_ycbcr_image_arrays"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs-boot b/src/Graphics/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays  (PhysicalDeviceYcbcrImageArraysFeaturesEXT) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceYcbcrImageArraysFeaturesEXT
-
-instance ToCStruct PhysicalDeviceYcbcrImageArraysFeaturesEXT
-instance Show PhysicalDeviceYcbcrImageArraysFeaturesEXT
-
-instance FromCStruct PhysicalDeviceYcbcrImageArraysFeaturesEXT
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs b/src/Graphics/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs
+++ /dev/null
@@ -1,232 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface  ( createImagePipeSurfaceFUCHSIA
-                                                                , ImagePipeSurfaceCreateInfoFUCHSIA(..)
-                                                                , ImagePipeSurfaceCreateFlagsFUCHSIA(..)
-                                                                , FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION
-                                                                , pattern FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION
-                                                                , FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME
-                                                                , pattern FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME
-                                                                , SurfaceKHR(..)
-                                                                , Zx_handle_t
-                                                                ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateImagePipeSurfaceFUCHSIA))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Extensions.WSITypes (Zx_handle_t)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.WSITypes (Zx_handle_t)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateImagePipeSurfaceFUCHSIA
-  :: FunPtr (Ptr Instance_T -> Ptr ImagePipeSurfaceCreateInfoFUCHSIA -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr ImagePipeSurfaceCreateInfoFUCHSIA -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateImagePipeSurfaceFUCHSIA - Create a
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' object for a Fuchsia
--- ImagePipe
---
--- = Parameters
---
--- -   @instance@ is the instance to associate with the surface.
---
--- -   @pCreateInfo@ is a pointer to a 'ImagePipeSurfaceCreateInfoFUCHSIA'
---     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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'ImagePipeSurfaceCreateInfoFUCHSIA' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'ImagePipeSurfaceCreateInfoFUCHSIA',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-createImagePipeSurfaceFUCHSIA :: forall io . MonadIO io => Instance -> ImagePipeSurfaceCreateInfoFUCHSIA -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createImagePipeSurfaceFUCHSIA instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateImagePipeSurfaceFUCHSIA' = mkVkCreateImagePipeSurfaceFUCHSIA (pVkCreateImagePipeSurfaceFUCHSIA (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateImagePipeSurfaceFUCHSIA' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
--- | VkImagePipeSurfaceCreateInfoFUCHSIA - Structure specifying parameters of
--- a newly created ImagePipe surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'ImagePipeSurfaceCreateFlagsFUCHSIA',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createImagePipeSurfaceFUCHSIA'
-data ImagePipeSurfaceCreateInfoFUCHSIA = ImagePipeSurfaceCreateInfoFUCHSIA
-  { -- | @flags@ /must/ be @0@
-    flags :: ImagePipeSurfaceCreateFlagsFUCHSIA
-  , -- | @imagePipeHandle@ /must/ be a valid @zx_handle_t@
-    imagePipeHandle :: Zx_handle_t
-  }
-  deriving (Typeable)
-deriving instance Show ImagePipeSurfaceCreateInfoFUCHSIA
-
-instance ToCStruct ImagePipeSurfaceCreateInfoFUCHSIA where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImagePipeSurfaceCreateInfoFUCHSIA{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImagePipeSurfaceCreateFlagsFUCHSIA)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr Zx_handle_t)) (imagePipeHandle)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr Zx_handle_t)) (zero)
-    f
-
-instance FromCStruct ImagePipeSurfaceCreateInfoFUCHSIA where
-  peekCStruct p = do
-    flags <- peek @ImagePipeSurfaceCreateFlagsFUCHSIA ((p `plusPtr` 16 :: Ptr ImagePipeSurfaceCreateFlagsFUCHSIA))
-    imagePipeHandle <- peek @Zx_handle_t ((p `plusPtr` 20 :: Ptr Zx_handle_t))
-    pure $ ImagePipeSurfaceCreateInfoFUCHSIA
-             flags imagePipeHandle
-
-instance Storable ImagePipeSurfaceCreateInfoFUCHSIA where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImagePipeSurfaceCreateInfoFUCHSIA where
-  zero = ImagePipeSurfaceCreateInfoFUCHSIA
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkImagePipeSurfaceCreateFlagsFUCHSIA"
-newtype ImagePipeSurfaceCreateFlagsFUCHSIA = ImagePipeSurfaceCreateFlagsFUCHSIA Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show ImagePipeSurfaceCreateFlagsFUCHSIA where
-  showsPrec p = \case
-    ImagePipeSurfaceCreateFlagsFUCHSIA x -> showParen (p >= 11) (showString "ImagePipeSurfaceCreateFlagsFUCHSIA 0x" . showHex x)
-
-instance Read ImagePipeSurfaceCreateFlagsFUCHSIA where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ImagePipeSurfaceCreateFlagsFUCHSIA")
-                       v <- step readPrec
-                       pure (ImagePipeSurfaceCreateFlagsFUCHSIA v)))
-
-
-type FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION"
-pattern FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION = 1
-
-
-type FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME = "VK_FUCHSIA_imagepipe_surface"
-
--- No documentation found for TopLevel "VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME"
-pattern FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME = "VK_FUCHSIA_imagepipe_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface  (ImagePipeSurfaceCreateInfoFUCHSIA) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ImagePipeSurfaceCreateInfoFUCHSIA
-
-instance ToCStruct ImagePipeSurfaceCreateInfoFUCHSIA
-instance Show ImagePipeSurfaceCreateInfoFUCHSIA
-
-instance FromCStruct ImagePipeSurfaceCreateInfoFUCHSIA
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_GGP_frame_token.hs b/src/Graphics/Vulkan/Extensions/VK_GGP_frame_token.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_GGP_frame_token.hs
+++ /dev/null
@@ -1,88 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_GGP_frame_token  ( PresentFrameTokenGGP(..)
-                                                      , GGP_FRAME_TOKEN_SPEC_VERSION
-                                                      , pattern GGP_FRAME_TOKEN_SPEC_VERSION
-                                                      , GGP_FRAME_TOKEN_EXTENSION_NAME
-                                                      , pattern GGP_FRAME_TOKEN_EXTENSION_NAME
-                                                      , GgpFrameToken
-                                                      ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Extensions.WSITypes (GgpFrameToken)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP))
-import Graphics.Vulkan.Extensions.WSITypes (GgpFrameToken)
--- | VkPresentFrameTokenGGP - The Google Games Platform frame token
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PresentFrameTokenGGP = PresentFrameTokenGGP
-  { -- | @frameToken@ /must/ be a valid
-    -- 'Graphics.Vulkan.Extensions.WSITypes.GgpFrameToken'
-    frameToken :: GgpFrameToken }
-  deriving (Typeable)
-deriving instance Show PresentFrameTokenGGP
-
-instance ToCStruct PresentFrameTokenGGP where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PresentFrameTokenGGP{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr GgpFrameToken)) (frameToken)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr GgpFrameToken)) (zero)
-    f
-
-instance FromCStruct PresentFrameTokenGGP where
-  peekCStruct p = do
-    frameToken <- peek @GgpFrameToken ((p `plusPtr` 16 :: Ptr GgpFrameToken))
-    pure $ PresentFrameTokenGGP
-             frameToken
-
-instance Storable PresentFrameTokenGGP where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PresentFrameTokenGGP where
-  zero = PresentFrameTokenGGP
-           zero
-
-
-type GGP_FRAME_TOKEN_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_GGP_FRAME_TOKEN_SPEC_VERSION"
-pattern GGP_FRAME_TOKEN_SPEC_VERSION :: forall a . Integral a => a
-pattern GGP_FRAME_TOKEN_SPEC_VERSION = 1
-
-
-type GGP_FRAME_TOKEN_EXTENSION_NAME = "VK_GGP_frame_token"
-
--- No documentation found for TopLevel "VK_GGP_FRAME_TOKEN_EXTENSION_NAME"
-pattern GGP_FRAME_TOKEN_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern GGP_FRAME_TOKEN_EXTENSION_NAME = "VK_GGP_frame_token"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_GGP_frame_token.hs-boot b/src/Graphics/Vulkan/Extensions/VK_GGP_frame_token.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_GGP_frame_token.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_GGP_frame_token  (PresentFrameTokenGGP) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PresentFrameTokenGGP
-
-instance ToCStruct PresentFrameTokenGGP
-instance Show PresentFrameTokenGGP
-
-instance FromCStruct PresentFrameTokenGGP
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs b/src/Graphics/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs
+++ /dev/null
@@ -1,235 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface  ( createStreamDescriptorSurfaceGGP
-                                                                    , StreamDescriptorSurfaceCreateInfoGGP(..)
-                                                                    , StreamDescriptorSurfaceCreateFlagsGGP(..)
-                                                                    , GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION
-                                                                    , pattern GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION
-                                                                    , GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME
-                                                                    , pattern GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME
-                                                                    , SurfaceKHR(..)
-                                                                    , GgpStreamDescriptor
-                                                                    ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Extensions.WSITypes (GgpStreamDescriptor)
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateStreamDescriptorSurfaceGGP))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (GgpStreamDescriptor)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateStreamDescriptorSurfaceGGP
-  :: FunPtr (Ptr Instance_T -> Ptr StreamDescriptorSurfaceCreateInfoGGP -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr StreamDescriptorSurfaceCreateInfoGGP -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateStreamDescriptorSurfaceGGP - Create a
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' object for a Google
--- Games Platform stream
---
--- = Parameters
---
--- -   @instance@ is the instance to associate with the surface.
---
--- -   @pCreateInfo@ is a pointer to a
---     'StreamDescriptorSurfaceCreateInfoGGP' structure containing
---     parameters that affect 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'StreamDescriptorSurfaceCreateInfoGGP' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'StreamDescriptorSurfaceCreateInfoGGP',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-createStreamDescriptorSurfaceGGP :: forall io . MonadIO io => Instance -> StreamDescriptorSurfaceCreateInfoGGP -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createStreamDescriptorSurfaceGGP instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateStreamDescriptorSurfaceGGP' = mkVkCreateStreamDescriptorSurfaceGGP (pVkCreateStreamDescriptorSurfaceGGP (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateStreamDescriptorSurfaceGGP' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
--- | VkStreamDescriptorSurfaceCreateInfoGGP - Structure specifying parameters
--- of a newly created Google Games Platform stream surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'StreamDescriptorSurfaceCreateFlagsGGP',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createStreamDescriptorSurfaceGGP'
-data StreamDescriptorSurfaceCreateInfoGGP = StreamDescriptorSurfaceCreateInfoGGP
-  { -- | @flags@ /must/ be @0@
-    flags :: StreamDescriptorSurfaceCreateFlagsGGP
-  , -- | @streamDescriptor@ /must/ be a valid
-    -- 'Graphics.Vulkan.Extensions.WSITypes.GgpStreamDescriptor'
-    streamDescriptor :: GgpStreamDescriptor
-  }
-  deriving (Typeable)
-deriving instance Show StreamDescriptorSurfaceCreateInfoGGP
-
-instance ToCStruct StreamDescriptorSurfaceCreateInfoGGP where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p StreamDescriptorSurfaceCreateInfoGGP{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr StreamDescriptorSurfaceCreateFlagsGGP)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr GgpStreamDescriptor)) (streamDescriptor)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr GgpStreamDescriptor)) (zero)
-    f
-
-instance FromCStruct StreamDescriptorSurfaceCreateInfoGGP where
-  peekCStruct p = do
-    flags <- peek @StreamDescriptorSurfaceCreateFlagsGGP ((p `plusPtr` 16 :: Ptr StreamDescriptorSurfaceCreateFlagsGGP))
-    streamDescriptor <- peek @GgpStreamDescriptor ((p `plusPtr` 20 :: Ptr GgpStreamDescriptor))
-    pure $ StreamDescriptorSurfaceCreateInfoGGP
-             flags streamDescriptor
-
-instance Storable StreamDescriptorSurfaceCreateInfoGGP where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero StreamDescriptorSurfaceCreateInfoGGP where
-  zero = StreamDescriptorSurfaceCreateInfoGGP
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkStreamDescriptorSurfaceCreateFlagsGGP"
-newtype StreamDescriptorSurfaceCreateFlagsGGP = StreamDescriptorSurfaceCreateFlagsGGP Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show StreamDescriptorSurfaceCreateFlagsGGP where
-  showsPrec p = \case
-    StreamDescriptorSurfaceCreateFlagsGGP x -> showParen (p >= 11) (showString "StreamDescriptorSurfaceCreateFlagsGGP 0x" . showHex x)
-
-instance Read StreamDescriptorSurfaceCreateFlagsGGP where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "StreamDescriptorSurfaceCreateFlagsGGP")
-                       v <- step readPrec
-                       pure (StreamDescriptorSurfaceCreateFlagsGGP v)))
-
-
-type GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION"
-pattern GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION = 1
-
-
-type GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME = "VK_GGP_stream_descriptor_surface"
-
--- No documentation found for TopLevel "VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME"
-pattern GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME = "VK_GGP_stream_descriptor_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface  (StreamDescriptorSurfaceCreateInfoGGP) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data StreamDescriptorSurfaceCreateInfoGGP
-
-instance ToCStruct StreamDescriptorSurfaceCreateInfoGGP
-instance Show StreamDescriptorSurfaceCreateInfoGGP
-
-instance FromCStruct StreamDescriptorSurfaceCreateInfoGGP
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_decorate_string.hs b/src/Graphics/Vulkan/Extensions/VK_GOOGLE_decorate_string.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_decorate_string.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_GOOGLE_decorate_string  ( GOOGLE_DECORATE_STRING_SPEC_VERSION
-                                                             , pattern GOOGLE_DECORATE_STRING_SPEC_VERSION
-                                                             , GOOGLE_DECORATE_STRING_EXTENSION_NAME
-                                                             , pattern GOOGLE_DECORATE_STRING_EXTENSION_NAME
-                                                             ) where
-
-import Data.String (IsString)
-
-type GOOGLE_DECORATE_STRING_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_GOOGLE_DECORATE_STRING_SPEC_VERSION"
-pattern GOOGLE_DECORATE_STRING_SPEC_VERSION :: forall a . Integral a => a
-pattern GOOGLE_DECORATE_STRING_SPEC_VERSION = 1
-
-
-type GOOGLE_DECORATE_STRING_EXTENSION_NAME = "VK_GOOGLE_decorate_string"
-
--- No documentation found for TopLevel "VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME"
-pattern GOOGLE_DECORATE_STRING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern GOOGLE_DECORATE_STRING_EXTENSION_NAME = "VK_GOOGLE_decorate_string"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs b/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
+++ /dev/null
@@ -1,515 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing  ( getRefreshCycleDurationGOOGLE
-                                                            , getPastPresentationTimingGOOGLE
-                                                            , RefreshCycleDurationGOOGLE(..)
-                                                            , PastPresentationTimingGOOGLE(..)
-                                                            , PresentTimesInfoGOOGLE(..)
-                                                            , PresentTimeGOOGLE(..)
-                                                            , GOOGLE_DISPLAY_TIMING_SPEC_VERSION
-                                                            , pattern GOOGLE_DISPLAY_TIMING_SPEC_VERSION
-                                                            , GOOGLE_DISPLAY_TIMING_EXTENSION_NAME
-                                                            , pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME
-                                                            , SwapchainKHR(..)
-                                                            ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Either (Either)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetPastPresentationTimingGOOGLE))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetRefreshCycleDurationGOOGLE))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetRefreshCycleDurationGOOGLE
-  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Ptr RefreshCycleDurationGOOGLE -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Ptr RefreshCycleDurationGOOGLE -> IO Result
-
--- | vkGetRefreshCycleDurationGOOGLE - Obtain the RC duration of the PE’s
--- display
---
--- = Parameters
---
--- -   @device@ is the device associated with @swapchain@.
---
--- -   @swapchain@ is the swapchain to obtain the refresh duration for.
---
--- -   @pDisplayTimingProperties@ is a pointer to a
---     'RefreshCycleDurationGOOGLE' structure.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @swapchain@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handle
---
--- -   @pDisplayTimingProperties@ /must/ be a valid pointer to a
---     'RefreshCycleDurationGOOGLE' structure
---
--- -   Both of @device@, and @swapchain@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Host Synchronization
---
--- -   Host access to @swapchain@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'RefreshCycleDurationGOOGLE',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-getRefreshCycleDurationGOOGLE :: forall io . MonadIO io => Device -> SwapchainKHR -> io (("displayTimingProperties" ::: RefreshCycleDurationGOOGLE))
-getRefreshCycleDurationGOOGLE device swapchain = liftIO . evalContT $ do
-  let vkGetRefreshCycleDurationGOOGLE' = mkVkGetRefreshCycleDurationGOOGLE (pVkGetRefreshCycleDurationGOOGLE (deviceCmds (device :: Device)))
-  pPDisplayTimingProperties <- ContT (withZeroCStruct @RefreshCycleDurationGOOGLE)
-  r <- lift $ vkGetRefreshCycleDurationGOOGLE' (deviceHandle (device)) (swapchain) (pPDisplayTimingProperties)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pDisplayTimingProperties <- lift $ peekCStruct @RefreshCycleDurationGOOGLE pPDisplayTimingProperties
-  pure $ (pDisplayTimingProperties)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPastPresentationTimingGOOGLE
-  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Ptr Word32 -> Ptr PastPresentationTimingGOOGLE -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Ptr Word32 -> Ptr PastPresentationTimingGOOGLE -> IO Result
-
--- | vkGetPastPresentationTimingGOOGLE - Obtain timing of a
--- previously-presented image
---
--- = 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 'PastPresentationTimingGOOGLE' structures to query, as
---     described below.
---
--- -   @pPresentationTimings@ is either @NULL@ or a pointer to an array of
---     'PastPresentationTimingGOOGLE' structures.
---
--- = 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@,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' to indicate
--- that not all the available values were returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @swapchain@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' 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@
---     'PastPresentationTimingGOOGLE' structures
---
--- -   Both of @device@, and @swapchain@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Host Synchronization
---
--- -   Host access to @swapchain@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'PastPresentationTimingGOOGLE',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-getPastPresentationTimingGOOGLE :: forall io . MonadIO io => Device -> SwapchainKHR -> io (Result, ("presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
-getPastPresentationTimingGOOGLE device swapchain = liftIO . evalContT $ do
-  let vkGetPastPresentationTimingGOOGLE' = mkVkGetPastPresentationTimingGOOGLE (pVkGetPastPresentationTimingGOOGLE (deviceCmds (device :: Device)))
-  let device' = deviceHandle (device)
-  pPPresentationTimingCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPastPresentationTimingGOOGLE' device' (swapchain) (pPPresentationTimingCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPresentationTimingCount <- lift $ peek @Word32 pPPresentationTimingCount
-  pPPresentationTimings <- ContT $ bracket (callocBytes @PastPresentationTimingGOOGLE ((fromIntegral (pPresentationTimingCount)) * 40)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPPresentationTimings `advancePtrBytes` (i * 40) :: Ptr PastPresentationTimingGOOGLE) . ($ ())) [0..(fromIntegral (pPresentationTimingCount)) - 1]
-  r' <- lift $ vkGetPastPresentationTimingGOOGLE' device' (swapchain) (pPPresentationTimingCount) ((pPPresentationTimings))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPresentationTimingCount' <- lift $ peek @Word32 pPPresentationTimingCount
-  pPresentationTimings' <- lift $ generateM (fromIntegral (pPresentationTimingCount')) (\i -> peekCStruct @PastPresentationTimingGOOGLE (((pPPresentationTimings) `advancePtrBytes` (40 * (i)) :: Ptr PastPresentationTimingGOOGLE)))
-  pure $ ((r'), pPresentationTimings')
-
-
--- | VkRefreshCycleDurationGOOGLE - Structure containing the RC duration of a
--- display
---
--- = See Also
---
--- 'getRefreshCycleDurationGOOGLE'
-data RefreshCycleDurationGOOGLE = RefreshCycleDurationGOOGLE
-  { -- | @refreshDuration@ is the number of nanoseconds from the start of one
-    -- refresh cycle to the next.
-    refreshDuration :: Word64 }
-  deriving (Typeable)
-deriving instance Show RefreshCycleDurationGOOGLE
-
-instance ToCStruct RefreshCycleDurationGOOGLE where
-  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RefreshCycleDurationGOOGLE{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word64)) (refreshDuration)
-    f
-  cStructSize = 8
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct RefreshCycleDurationGOOGLE where
-  peekCStruct p = do
-    refreshDuration <- peek @Word64 ((p `plusPtr` 0 :: Ptr Word64))
-    pure $ RefreshCycleDurationGOOGLE
-             refreshDuration
-
-instance Storable RefreshCycleDurationGOOGLE where
-  sizeOf ~_ = 8
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero RefreshCycleDurationGOOGLE where
-  zero = RefreshCycleDurationGOOGLE
-           zero
-
-
--- | VkPastPresentationTimingGOOGLE - Structure containing timing information
--- about a previously-presented image
---
--- = Description
---
--- The results for a given @swapchain@ and @presentID@ are only returned
--- once from 'getPastPresentationTimingGOOGLE'.
---
--- The application /can/ use the 'PastPresentationTimingGOOGLE' 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
---
--- 'getPastPresentationTimingGOOGLE'
-data PastPresentationTimingGOOGLE = PastPresentationTimingGOOGLE
-  { -- | @presentID@ is an application-provided value that was given to a
-    -- previous 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR'
-    -- command via 'PresentTimeGOOGLE'::@presentID@ (see below). It /can/ be
-    -- used to uniquely identify a previous present with the
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR' command.
-    presentID :: Word32
-  , -- | @desiredPresentTime@ is an application-provided value that was given to
-    -- a previous 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR'
-    -- command via 'PresentTimeGOOGLE'::@desiredPresentTime@. If non-zero, it
-    -- was used by the application to indicate that an image not be presented
-    -- any sooner than @desiredPresentTime@.
-    desiredPresentTime :: Word64
-  , -- | @actualPresentTime@ is the time when the image of the @swapchain@ was
-    -- actually displayed.
-    actualPresentTime :: Word64
-  , -- | @earliestPresentTime@ is the time when the image of the @swapchain@
-    -- could have been displayed. This /may/ differ from @actualPresentTime@ if
-    -- the application requested that the image be presented no sooner than
-    -- 'PresentTimeGOOGLE'::@desiredPresentTime@.
-    earliestPresentTime :: Word64
-  , -- | @presentMargin@ is an indication of how early the
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR' command
-    -- was processed compared to how soon it needed to be processed, and still
-    -- be presented at @earliestPresentTime@.
-    presentMargin :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show PastPresentationTimingGOOGLE
-
-instance ToCStruct PastPresentationTimingGOOGLE where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PastPresentationTimingGOOGLE{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (presentID)
-    poke ((p `plusPtr` 8 :: Ptr Word64)) (desiredPresentTime)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (actualPresentTime)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (earliestPresentTime)
-    poke ((p `plusPtr` 32 :: Ptr Word64)) (presentMargin)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct PastPresentationTimingGOOGLE where
-  peekCStruct p = do
-    presentID <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    desiredPresentTime <- peek @Word64 ((p `plusPtr` 8 :: Ptr Word64))
-    actualPresentTime <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
-    earliestPresentTime <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    presentMargin <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))
-    pure $ PastPresentationTimingGOOGLE
-             presentID desiredPresentTime actualPresentTime earliestPresentTime presentMargin
-
-instance Storable PastPresentationTimingGOOGLE where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PastPresentationTimingGOOGLE where
-  zero = PastPresentationTimingGOOGLE
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPresentTimesInfoGOOGLE - The earliest time each image should be
--- presented
---
--- == Valid Usage
---
--- -   @swapchainCount@ /must/ be the same value as
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@swapchainCount@,
---     where 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'
---     is included in the @pNext@ chain of this 'PresentTimesInfoGOOGLE'
---     structure
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE'
---
--- -   If @pTimes@ is not @NULL@, @pTimes@ /must/ be a valid pointer to an
---     array of @swapchainCount@ 'PresentTimeGOOGLE' structures
---
--- -   @swapchainCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'PresentTimeGOOGLE',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PresentTimesInfoGOOGLE = PresentTimesInfoGOOGLE
-  { -- | @pTimes@ is @NULL@ or a pointer to an array of 'PresentTimeGOOGLE'
-    -- elements with @swapchainCount@ entries. If not @NULL@, each element of
-    -- @pTimes@ contains the earliest time to present the image corresponding
-    -- to the entry in the
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@pImageIndices@
-    -- array.
-    times :: Either Word32 (Vector PresentTimeGOOGLE) }
-  deriving (Typeable)
-deriving instance Show PresentTimesInfoGOOGLE
-
-instance ToCStruct PresentTimesInfoGOOGLE where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PresentTimesInfoGOOGLE{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (times)) :: Word32))
-    pTimes'' <- case (times) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPTimes' <- ContT $ allocaBytesAligned @PresentTimeGOOGLE ((Data.Vector.length (v)) * 16) 8
-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPTimes' `plusPtr` (16 * (i)) :: Ptr PresentTimeGOOGLE) (e) . ($ ())) (v)
-        pure $ pPTimes'
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr PresentTimeGOOGLE))) pTimes''
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct PresentTimesInfoGOOGLE where
-  peekCStruct p = do
-    swapchainCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pTimes <- peek @(Ptr PresentTimeGOOGLE) ((p `plusPtr` 24 :: Ptr (Ptr PresentTimeGOOGLE)))
-    pTimes' <- maybePeek (\j -> generateM (fromIntegral swapchainCount) (\i -> peekCStruct @PresentTimeGOOGLE (((j) `advancePtrBytes` (16 * (i)) :: Ptr PresentTimeGOOGLE)))) pTimes
-    let pTimes'' = maybe (Left swapchainCount) Right pTimes'
-    pure $ PresentTimesInfoGOOGLE
-             pTimes''
-
-instance Zero PresentTimesInfoGOOGLE where
-  zero = PresentTimesInfoGOOGLE
-           (Left 0)
-
-
--- | VkPresentTimeGOOGLE - The earliest time image should be presented
---
--- = See Also
---
--- 'PresentTimesInfoGOOGLE'
-data PresentTimeGOOGLE = PresentTimeGOOGLE
-  { -- | @presentID@ is an application-provided identification value, that /can/
-    -- be used with the results of 'getPastPresentationTimingGOOGLE', in order
-    -- to uniquely identify this present. In order to be useful to the
-    -- application, it /should/ be unique within some period of time that is
-    -- meaningful to the application.
-    presentID :: Word32
-  , -- | @desiredPresentTime@ specifies that the image given /should/ not be
-    -- displayed to the user any earlier than this time. @desiredPresentTime@
-    -- is a time in nanoseconds, relative to a monotonically-increasing clock
-    -- (e.g. @CLOCK_MONOTONIC@ (see clock_gettime(2)) on Android and Linux). A
-    -- value of zero specifies that the presentation engine /may/ display the
-    -- image at any time. This is useful when the application desires to
-    -- provide @presentID@, but does not need a specific @desiredPresentTime@.
-    desiredPresentTime :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show PresentTimeGOOGLE
-
-instance ToCStruct PresentTimeGOOGLE where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PresentTimeGOOGLE{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (presentID)
-    poke ((p `plusPtr` 8 :: Ptr Word64)) (desiredPresentTime)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct PresentTimeGOOGLE where
-  peekCStruct p = do
-    presentID <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    desiredPresentTime <- peek @Word64 ((p `plusPtr` 8 :: Ptr Word64))
-    pure $ PresentTimeGOOGLE
-             presentID desiredPresentTime
-
-instance Storable PresentTimeGOOGLE where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PresentTimeGOOGLE where
-  zero = PresentTimeGOOGLE
-           zero
-           zero
-
-
-type GOOGLE_DISPLAY_TIMING_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION"
-pattern GOOGLE_DISPLAY_TIMING_SPEC_VERSION :: forall a . Integral a => a
-pattern GOOGLE_DISPLAY_TIMING_SPEC_VERSION = 1
-
-
-type GOOGLE_DISPLAY_TIMING_EXTENSION_NAME = "VK_GOOGLE_display_timing"
-
--- No documentation found for TopLevel "VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME"
-pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME = "VK_GOOGLE_display_timing"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs-boot b/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs-boot
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing  ( PastPresentationTimingGOOGLE
-                                                            , PresentTimeGOOGLE
-                                                            , PresentTimesInfoGOOGLE
-                                                            , RefreshCycleDurationGOOGLE
-                                                            ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PastPresentationTimingGOOGLE
-
-instance ToCStruct PastPresentationTimingGOOGLE
-instance Show PastPresentationTimingGOOGLE
-
-instance FromCStruct PastPresentationTimingGOOGLE
-
-
-data PresentTimeGOOGLE
-
-instance ToCStruct PresentTimeGOOGLE
-instance Show PresentTimeGOOGLE
-
-instance FromCStruct PresentTimeGOOGLE
-
-
-data PresentTimesInfoGOOGLE
-
-instance ToCStruct PresentTimesInfoGOOGLE
-instance Show PresentTimesInfoGOOGLE
-
-instance FromCStruct PresentTimesInfoGOOGLE
-
-
-data RefreshCycleDurationGOOGLE
-
-instance ToCStruct RefreshCycleDurationGOOGLE
-instance Show RefreshCycleDurationGOOGLE
-
-instance FromCStruct RefreshCycleDurationGOOGLE
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_hlsl_functionality1.hs b/src/Graphics/Vulkan/Extensions/VK_GOOGLE_hlsl_functionality1.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_hlsl_functionality1.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1  ( GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION
-                                                                 , pattern GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION
-                                                                 , GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME
-                                                                 , pattern GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME
-                                                                 ) where
-
-import Data.String (IsString)
-
-type GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION"
-pattern GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION :: forall a . Integral a => a
-pattern GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION = 1
-
-
-type GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME = "VK_GOOGLE_hlsl_functionality1"
-
--- No documentation found for TopLevel "VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME"
-pattern GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME = "VK_GOOGLE_hlsl_functionality1"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_user_type.hs b/src/Graphics/Vulkan/Extensions/VK_GOOGLE_user_type.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_user_type.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_GOOGLE_user_type  ( GOOGLE_USER_TYPE_SPEC_VERSION
-                                                       , pattern GOOGLE_USER_TYPE_SPEC_VERSION
-                                                       , GOOGLE_USER_TYPE_EXTENSION_NAME
-                                                       , pattern GOOGLE_USER_TYPE_EXTENSION_NAME
-                                                       ) where
-
-import Data.String (IsString)
-
-type GOOGLE_USER_TYPE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_GOOGLE_USER_TYPE_SPEC_VERSION"
-pattern GOOGLE_USER_TYPE_SPEC_VERSION :: forall a . Integral a => a
-pattern GOOGLE_USER_TYPE_SPEC_VERSION = 1
-
-
-type GOOGLE_USER_TYPE_EXTENSION_NAME = "VK_GOOGLE_user_type"
-
--- No documentation found for TopLevel "VK_GOOGLE_USER_TYPE_EXTENSION_NAME"
-pattern GOOGLE_USER_TYPE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern GOOGLE_USER_TYPE_EXTENSION_NAME = "VK_GOOGLE_user_type"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_IMG_filter_cubic.hs b/src/Graphics/Vulkan/Extensions/VK_IMG_filter_cubic.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_IMG_filter_cubic.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_IMG_filter_cubic  ( IMG_FILTER_CUBIC_SPEC_VERSION
-                                                       , pattern IMG_FILTER_CUBIC_SPEC_VERSION
-                                                       , IMG_FILTER_CUBIC_EXTENSION_NAME
-                                                       , pattern IMG_FILTER_CUBIC_EXTENSION_NAME
-                                                       ) where
-
-import Data.String (IsString)
-
-type IMG_FILTER_CUBIC_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_IMG_FILTER_CUBIC_SPEC_VERSION"
-pattern IMG_FILTER_CUBIC_SPEC_VERSION :: forall a . Integral a => a
-pattern IMG_FILTER_CUBIC_SPEC_VERSION = 1
-
-
-type IMG_FILTER_CUBIC_EXTENSION_NAME = "VK_IMG_filter_cubic"
-
--- No documentation found for TopLevel "VK_IMG_FILTER_CUBIC_EXTENSION_NAME"
-pattern IMG_FILTER_CUBIC_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_IMG_format_pvrtc.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_IMG_format_pvrtc  ( IMG_FORMAT_PVRTC_SPEC_VERSION
-                                                       , pattern IMG_FORMAT_PVRTC_SPEC_VERSION
-                                                       , IMG_FORMAT_PVRTC_EXTENSION_NAME
-                                                       , pattern IMG_FORMAT_PVRTC_EXTENSION_NAME
-                                                       ) where
-
-import Data.String (IsString)
-
-type IMG_FORMAT_PVRTC_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_IMG_FORMAT_PVRTC_SPEC_VERSION"
-pattern IMG_FORMAT_PVRTC_SPEC_VERSION :: forall a . Integral a => a
-pattern IMG_FORMAT_PVRTC_SPEC_VERSION = 1
-
-
-type IMG_FORMAT_PVRTC_EXTENSION_NAME = "VK_IMG_format_pvrtc"
-
--- No documentation found for TopLevel "VK_IMG_FORMAT_PVRTC_EXTENSION_NAME"
-pattern IMG_FORMAT_PVRTC_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern IMG_FORMAT_PVRTC_EXTENSION_NAME = "VK_IMG_format_pvrtc"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_INTEL_performance_query.hs b/src/Graphics/Vulkan/Extensions/VK_INTEL_performance_query.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_INTEL_performance_query.hs
+++ /dev/null
@@ -1,1209 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_INTEL_performance_query  ( initializePerformanceApiINTEL
-                                                              , uninitializePerformanceApiINTEL
-                                                              , cmdSetPerformanceMarkerINTEL
-                                                              , cmdSetPerformanceStreamMarkerINTEL
-                                                              , cmdSetPerformanceOverrideINTEL
-                                                              , acquirePerformanceConfigurationINTEL
-                                                              , releasePerformanceConfigurationINTEL
-                                                              , queueSetPerformanceConfigurationINTEL
-                                                              , getPerformanceParameterINTEL
-                                                              , pattern STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL
-                                                              , PerformanceValueINTEL(..)
-                                                              , InitializePerformanceApiInfoINTEL(..)
-                                                              , QueryPoolPerformanceQueryCreateInfoINTEL(..)
-                                                              , PerformanceMarkerInfoINTEL(..)
-                                                              , PerformanceStreamMarkerInfoINTEL(..)
-                                                              , PerformanceOverrideInfoINTEL(..)
-                                                              , PerformanceConfigurationAcquireInfoINTEL(..)
-                                                              , PerformanceValueDataINTEL(..)
-                                                              , peekPerformanceValueDataINTEL
-                                                              , PerformanceConfigurationTypeINTEL( PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL
-                                                                                                 , ..
-                                                                                                 )
-                                                              , QueryPoolSamplingModeINTEL( QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL
-                                                                                          , ..
-                                                                                          )
-                                                              , PerformanceOverrideTypeINTEL( PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL
-                                                                                            , PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL
-                                                                                            , ..
-                                                                                            )
-                                                              , PerformanceParameterTypeINTEL( PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL
-                                                                                             , PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL
-                                                                                             , ..
-                                                                                             )
-                                                              , PerformanceValueTypeINTEL( PERFORMANCE_VALUE_TYPE_UINT32_INTEL
-                                                                                         , PERFORMANCE_VALUE_TYPE_UINT64_INTEL
-                                                                                         , PERFORMANCE_VALUE_TYPE_FLOAT_INTEL
-                                                                                         , PERFORMANCE_VALUE_TYPE_BOOL_INTEL
-                                                                                         , PERFORMANCE_VALUE_TYPE_STRING_INTEL
-                                                                                         , ..
-                                                                                         )
-                                                              , QueryPoolCreateInfoINTEL
-                                                              , INTEL_PERFORMANCE_QUERY_SPEC_VERSION
-                                                              , pattern INTEL_PERFORMANCE_QUERY_SPEC_VERSION
-                                                              , INTEL_PERFORMANCE_QUERY_EXTENSION_NAME
-                                                              , pattern INTEL_PERFORMANCE_QUERY_EXTENSION_NAME
-                                                              , PerformanceConfigurationINTEL(..)
-                                                              ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.ByteString (packCString)
-import Data.ByteString (useAsCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.Trans.Cont (runContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkAcquirePerformanceConfigurationINTEL))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetPerformanceMarkerINTEL))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetPerformanceOverrideINTEL))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetPerformanceStreamMarkerINTEL))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetPerformanceParameterINTEL))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkInitializePerformanceApiINTEL))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkQueueSetPerformanceConfigurationINTEL))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkReleasePerformanceConfigurationINTEL))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkUninitializePerformanceApiINTEL))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Extensions.Handles (PerformanceConfigurationINTEL)
-import Graphics.Vulkan.Extensions.Handles (PerformanceConfigurationINTEL(..))
-import Graphics.Vulkan.Core10.Handles (Queue)
-import Graphics.Vulkan.Core10.Handles (Queue(..))
-import Graphics.Vulkan.Core10.Handles (Queue_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (PerformanceConfigurationINTEL(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkInitializePerformanceApiINTEL
-  :: FunPtr (Ptr Device_T -> Ptr InitializePerformanceApiInfoINTEL -> IO Result) -> Ptr Device_T -> Ptr InitializePerformanceApiInfoINTEL -> IO Result
-
--- | vkInitializePerformanceApiINTEL - Initialize a device for performance
--- queries
---
--- = Parameters
---
--- -   @device@ is the logical device used for the queries.
---
--- -   @pInitializeInfo@ is a pointer to a
---     'InitializePerformanceApiInfoINTEL' structure specifying
---     initialization parameters.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'InitializePerformanceApiInfoINTEL'
-initializePerformanceApiINTEL :: forall io . MonadIO io => Device -> ("initializeInfo" ::: InitializePerformanceApiInfoINTEL) -> io ()
-initializePerformanceApiINTEL device initializeInfo = liftIO . evalContT $ do
-  let vkInitializePerformanceApiINTEL' = mkVkInitializePerformanceApiINTEL (pVkInitializePerformanceApiINTEL (deviceCmds (device :: Device)))
-  pInitializeInfo <- ContT $ withCStruct (initializeInfo)
-  r <- lift $ vkInitializePerformanceApiINTEL' (deviceHandle (device)) pInitializeInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkUninitializePerformanceApiINTEL
-  :: FunPtr (Ptr Device_T -> IO ()) -> Ptr Device_T -> IO ()
-
--- | vkUninitializePerformanceApiINTEL - Uninitialize a device for
--- performance queries
---
--- = Parameters
---
--- -   @device@ is the logical device used for the queries.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device'
-uninitializePerformanceApiINTEL :: forall io . MonadIO io => Device -> io ()
-uninitializePerformanceApiINTEL device = liftIO $ do
-  let vkUninitializePerformanceApiINTEL' = mkVkUninitializePerformanceApiINTEL (pVkUninitializePerformanceApiINTEL (deviceCmds (device :: Device)))
-  vkUninitializePerformanceApiINTEL' (deviceHandle (device))
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetPerformanceMarkerINTEL
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr PerformanceMarkerInfoINTEL -> IO Result) -> Ptr CommandBuffer_T -> Ptr PerformanceMarkerInfoINTEL -> IO Result
-
--- | vkCmdSetPerformanceMarkerINTEL - Markers
---
--- = Parameters
---
--- The last marker set onto a command buffer before the end of a query will
--- be part of the query result.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
---     'PerformanceMarkerInfoINTEL' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, compute,
---     or transfer operations
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Transfer                                                                                                              |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'PerformanceMarkerInfoINTEL'
-cmdSetPerformanceMarkerINTEL :: forall io . MonadIO io => CommandBuffer -> PerformanceMarkerInfoINTEL -> io ()
-cmdSetPerformanceMarkerINTEL commandBuffer markerInfo = liftIO . evalContT $ do
-  let vkCmdSetPerformanceMarkerINTEL' = mkVkCmdSetPerformanceMarkerINTEL (pVkCmdSetPerformanceMarkerINTEL (deviceCmds (commandBuffer :: CommandBuffer)))
-  pMarkerInfo <- ContT $ withCStruct (markerInfo)
-  r <- lift $ vkCmdSetPerformanceMarkerINTEL' (commandBufferHandle (commandBuffer)) pMarkerInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetPerformanceStreamMarkerINTEL
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr PerformanceStreamMarkerInfoINTEL -> IO Result) -> Ptr CommandBuffer_T -> Ptr PerformanceStreamMarkerInfoINTEL -> IO Result
-
--- | vkCmdSetPerformanceStreamMarkerINTEL - Markers
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
---     'PerformanceStreamMarkerInfoINTEL' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, compute,
---     or transfer operations
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Transfer                                                                                                              |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'PerformanceStreamMarkerInfoINTEL'
-cmdSetPerformanceStreamMarkerINTEL :: forall io . MonadIO io => CommandBuffer -> PerformanceStreamMarkerInfoINTEL -> io ()
-cmdSetPerformanceStreamMarkerINTEL commandBuffer markerInfo = liftIO . evalContT $ do
-  let vkCmdSetPerformanceStreamMarkerINTEL' = mkVkCmdSetPerformanceStreamMarkerINTEL (pVkCmdSetPerformanceStreamMarkerINTEL (deviceCmds (commandBuffer :: CommandBuffer)))
-  pMarkerInfo <- ContT $ withCStruct (markerInfo)
-  r <- lift $ vkCmdSetPerformanceStreamMarkerINTEL' (commandBufferHandle (commandBuffer)) pMarkerInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetPerformanceOverrideINTEL
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr PerformanceOverrideInfoINTEL -> IO Result) -> Ptr CommandBuffer_T -> Ptr PerformanceOverrideInfoINTEL -> IO Result
-
--- | vkCmdSetPerformanceOverrideINTEL - Performance override settings
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer where the override takes
---     place.
---
--- -   @pOverrideInfo@ is a pointer to a 'PerformanceOverrideInfoINTEL'
---     structure selecting the parameter to override.
---
--- == Valid Usage
---
--- -   @pOverrideInfo@ /must/ not be used with a
---     'PerformanceOverrideTypeINTEL' that is not reported available by
---     'getPerformanceParameterINTEL'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pOverrideInfo@ /must/ be a valid pointer to a valid
---     'PerformanceOverrideInfoINTEL' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, compute,
---     or transfer operations
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Transfer                                                                                                              |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'PerformanceOverrideInfoINTEL'
-cmdSetPerformanceOverrideINTEL :: forall io . MonadIO io => CommandBuffer -> PerformanceOverrideInfoINTEL -> io ()
-cmdSetPerformanceOverrideINTEL commandBuffer overrideInfo = liftIO . evalContT $ do
-  let vkCmdSetPerformanceOverrideINTEL' = mkVkCmdSetPerformanceOverrideINTEL (pVkCmdSetPerformanceOverrideINTEL (deviceCmds (commandBuffer :: CommandBuffer)))
-  pOverrideInfo <- ContT $ withCStruct (overrideInfo)
-  r <- lift $ vkCmdSetPerformanceOverrideINTEL' (commandBufferHandle (commandBuffer)) pOverrideInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkAcquirePerformanceConfigurationINTEL
-  :: FunPtr (Ptr Device_T -> Ptr PerformanceConfigurationAcquireInfoINTEL -> Ptr PerformanceConfigurationINTEL -> IO Result) -> Ptr Device_T -> Ptr PerformanceConfigurationAcquireInfoINTEL -> Ptr PerformanceConfigurationINTEL -> IO Result
-
--- | vkAcquirePerformanceConfigurationINTEL - Acquire the performance query
--- capability
---
--- = Parameters
---
--- -   @device@ is the logical device that the performance query commands
---     will be submitted to.
---
--- -   @pAcquireInfo@ is a pointer to a
---     'PerformanceConfigurationAcquireInfoINTEL' structure, specifying the
---     performance configuration to acquire.
---
--- -   @pConfiguration@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.PerformanceConfigurationINTEL'
---     handle in which the resulting configuration object is returned.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'PerformanceConfigurationAcquireInfoINTEL',
--- 'Graphics.Vulkan.Extensions.Handles.PerformanceConfigurationINTEL'
-acquirePerformanceConfigurationINTEL :: forall io . MonadIO io => Device -> PerformanceConfigurationAcquireInfoINTEL -> io (PerformanceConfigurationINTEL)
-acquirePerformanceConfigurationINTEL device acquireInfo = liftIO . evalContT $ do
-  let vkAcquirePerformanceConfigurationINTEL' = mkVkAcquirePerformanceConfigurationINTEL (pVkAcquirePerformanceConfigurationINTEL (deviceCmds (device :: Device)))
-  pAcquireInfo <- ContT $ withCStruct (acquireInfo)
-  pPConfiguration <- ContT $ bracket (callocBytes @PerformanceConfigurationINTEL 8) free
-  r <- lift $ vkAcquirePerformanceConfigurationINTEL' (deviceHandle (device)) pAcquireInfo (pPConfiguration)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pConfiguration <- lift $ peek @PerformanceConfigurationINTEL pPConfiguration
-  pure $ (pConfiguration)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkReleasePerformanceConfigurationINTEL
-  :: FunPtr (Ptr Device_T -> PerformanceConfigurationINTEL -> IO Result) -> Ptr Device_T -> PerformanceConfigurationINTEL -> IO Result
-
--- | vkReleasePerformanceConfigurationINTEL - Release a configuration to
--- capture performance data
---
--- = Parameters
---
--- -   @device@ is the device associated to the configuration object to
---     release.
---
--- -   @configuration@ is the configuration object to release.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.PerformanceConfigurationINTEL'
-releasePerformanceConfigurationINTEL :: forall io . MonadIO io => Device -> PerformanceConfigurationINTEL -> io ()
-releasePerformanceConfigurationINTEL device configuration = liftIO $ do
-  let vkReleasePerformanceConfigurationINTEL' = mkVkReleasePerformanceConfigurationINTEL (pVkReleasePerformanceConfigurationINTEL (deviceCmds (device :: Device)))
-  r <- vkReleasePerformanceConfigurationINTEL' (deviceHandle (device)) (configuration)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkQueueSetPerformanceConfigurationINTEL
-  :: FunPtr (Ptr Queue_T -> PerformanceConfigurationINTEL -> IO Result) -> Ptr Queue_T -> PerformanceConfigurationINTEL -> IO Result
-
--- | vkQueueSetPerformanceConfigurationINTEL - Set a performance query
---
--- = Parameters
---
--- -   @queue@ is the queue on which the configuration will be used.
---
--- -   @configuration@ is the configuration to use.
---
--- == Valid Usage (Implicit)
---
--- -   @queue@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Queue'
---     handle
---
--- -   @configuration@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.PerformanceConfigurationINTEL'
---     handle
---
--- -   Both of @configuration@, and @queue@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.PerformanceConfigurationINTEL',
--- 'Graphics.Vulkan.Core10.Handles.Queue'
-queueSetPerformanceConfigurationINTEL :: forall io . MonadIO io => Queue -> PerformanceConfigurationINTEL -> io ()
-queueSetPerformanceConfigurationINTEL queue configuration = liftIO $ do
-  let vkQueueSetPerformanceConfigurationINTEL' = mkVkQueueSetPerformanceConfigurationINTEL (pVkQueueSetPerformanceConfigurationINTEL (deviceCmds (queue :: Queue)))
-  r <- vkQueueSetPerformanceConfigurationINTEL' (queueHandle (queue)) (configuration)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPerformanceParameterINTEL
-  :: FunPtr (Ptr Device_T -> PerformanceParameterTypeINTEL -> Ptr PerformanceValueINTEL -> IO Result) -> Ptr Device_T -> PerformanceParameterTypeINTEL -> Ptr PerformanceValueINTEL -> IO Result
-
--- | vkGetPerformanceParameterINTEL - Query performance capabilities of the
--- device
---
--- = Parameters
---
--- -   @device@ is the logical device to query.
---
--- -   @parameter@ is the parameter to query.
---
--- -   @pValue@ is a pointer to a 'PerformanceValueINTEL' structure in
---     which the type and value of the parameter are returned.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'PerformanceParameterTypeINTEL', 'PerformanceValueINTEL'
-getPerformanceParameterINTEL :: forall io . MonadIO io => Device -> PerformanceParameterTypeINTEL -> io (PerformanceValueINTEL)
-getPerformanceParameterINTEL device parameter = liftIO . evalContT $ do
-  let vkGetPerformanceParameterINTEL' = mkVkGetPerformanceParameterINTEL (pVkGetPerformanceParameterINTEL (deviceCmds (device :: Device)))
-  pPValue <- ContT (withZeroCStruct @PerformanceValueINTEL)
-  r <- lift $ vkGetPerformanceParameterINTEL' (deviceHandle (device)) (parameter) (pPValue)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pValue <- lift $ peekCStruct @PerformanceValueINTEL pPValue
-  pure $ (pValue)
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL"
-pattern STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL
-
-
--- | VkPerformanceValueINTEL - Container for value and types of parameters
--- that can be queried
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PerformanceValueDataINTEL', 'PerformanceValueTypeINTEL',
--- 'getPerformanceParameterINTEL'
-data PerformanceValueINTEL = PerformanceValueINTEL
-  { -- | @type@ /must/ be a valid 'PerformanceValueTypeINTEL' value
-    type' :: PerformanceValueTypeINTEL
-  , -- | @data@ /must/ be a valid 'PerformanceValueDataINTEL' union
-    data' :: PerformanceValueDataINTEL
-  }
-  deriving (Typeable)
-deriving instance Show PerformanceValueINTEL
-
-instance ToCStruct PerformanceValueINTEL where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PerformanceValueINTEL{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr PerformanceValueTypeINTEL)) (type')
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr PerformanceValueDataINTEL)) (data') . ($ ())
-    lift $ f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr PerformanceValueTypeINTEL)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr PerformanceValueDataINTEL)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct PerformanceValueINTEL where
-  peekCStruct p = do
-    type' <- peek @PerformanceValueTypeINTEL ((p `plusPtr` 0 :: Ptr PerformanceValueTypeINTEL))
-    data' <- peekPerformanceValueDataINTEL type' ((p `plusPtr` 8 :: Ptr PerformanceValueDataINTEL))
-    pure $ PerformanceValueINTEL
-             type' data'
-
-instance Zero PerformanceValueINTEL where
-  zero = PerformanceValueINTEL
-           zero
-           zero
-
-
--- | VkInitializePerformanceApiInfoINTEL - Structure specifying parameters of
--- initialize of the device
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'initializePerformanceApiINTEL'
-data InitializePerformanceApiInfoINTEL = InitializePerformanceApiInfoINTEL
-  { -- | @pUserData@ is a pointer for application data.
-    userData :: Ptr () }
-  deriving (Typeable)
-deriving instance Show InitializePerformanceApiInfoINTEL
-
-instance ToCStruct InitializePerformanceApiInfoINTEL where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p InitializePerformanceApiInfoINTEL{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr (Ptr ()))) (userData)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct InitializePerformanceApiInfoINTEL where
-  peekCStruct p = do
-    pUserData <- peek @(Ptr ()) ((p `plusPtr` 16 :: Ptr (Ptr ())))
-    pure $ InitializePerformanceApiInfoINTEL
-             pUserData
-
-instance Storable InitializePerformanceApiInfoINTEL where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero InitializePerformanceApiInfoINTEL where
-  zero = InitializePerformanceApiInfoINTEL
-           zero
-
-
--- | VkQueryPoolPerformanceQueryCreateInfoINTEL - Structure specifying
--- parameters to create a pool of performance queries
---
--- = Members
---
--- To create a pool for Intel performance queries, set
--- 'Graphics.Vulkan.Core10.Query.QueryPoolCreateInfo'::@queryType@ to
--- 'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_INTEL'
--- and add a 'QueryPoolPerformanceQueryCreateInfoINTEL' structure to the
--- @pNext@ chain of the 'Graphics.Vulkan.Core10.Query.QueryPoolCreateInfo'
--- structure.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'QueryPoolSamplingModeINTEL',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data QueryPoolPerformanceQueryCreateInfoINTEL = QueryPoolPerformanceQueryCreateInfoINTEL
-  { -- | @performanceCountersSampling@ /must/ be a valid
-    -- 'QueryPoolSamplingModeINTEL' value
-    performanceCountersSampling :: QueryPoolSamplingModeINTEL }
-  deriving (Typeable)
-deriving instance Show QueryPoolPerformanceQueryCreateInfoINTEL
-
-instance ToCStruct QueryPoolPerformanceQueryCreateInfoINTEL where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p QueryPoolPerformanceQueryCreateInfoINTEL{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr QueryPoolSamplingModeINTEL)) (performanceCountersSampling)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr QueryPoolSamplingModeINTEL)) (zero)
-    f
-
-instance FromCStruct QueryPoolPerformanceQueryCreateInfoINTEL where
-  peekCStruct p = do
-    performanceCountersSampling <- peek @QueryPoolSamplingModeINTEL ((p `plusPtr` 16 :: Ptr QueryPoolSamplingModeINTEL))
-    pure $ QueryPoolPerformanceQueryCreateInfoINTEL
-             performanceCountersSampling
-
-instance Storable QueryPoolPerformanceQueryCreateInfoINTEL where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero QueryPoolPerformanceQueryCreateInfoINTEL where
-  zero = QueryPoolPerformanceQueryCreateInfoINTEL
-           zero
-
-
--- | VkPerformanceMarkerInfoINTEL - Structure specifying performance markers
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdSetPerformanceMarkerINTEL'
-data PerformanceMarkerInfoINTEL = PerformanceMarkerInfoINTEL
-  { -- | @marker@ is the marker value that will be recorded into the opaque query
-    -- results.
-    marker :: Word64 }
-  deriving (Typeable)
-deriving instance Show PerformanceMarkerInfoINTEL
-
-instance ToCStruct PerformanceMarkerInfoINTEL where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PerformanceMarkerInfoINTEL{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (marker)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct PerformanceMarkerInfoINTEL where
-  peekCStruct p = do
-    marker <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
-    pure $ PerformanceMarkerInfoINTEL
-             marker
-
-instance Storable PerformanceMarkerInfoINTEL where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PerformanceMarkerInfoINTEL where
-  zero = PerformanceMarkerInfoINTEL
-           zero
-
-
--- | VkPerformanceStreamMarkerInfoINTEL - Structure specifying stream
--- performance markers
---
--- == Valid Usage
---
--- -   The value written by the application into @marker@ /must/ only used
---     the valid bits as reported by 'getPerformanceParameterINTEL' with
---     the 'PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL'
---
--- -   @pNext@ /must/ be @NULL@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdSetPerformanceStreamMarkerINTEL'
-data PerformanceStreamMarkerInfoINTEL = PerformanceStreamMarkerInfoINTEL
-  { -- | @marker@ is the marker value that will be recorded into the reports
-    -- consumed by an external application.
-    marker :: Word32 }
-  deriving (Typeable)
-deriving instance Show PerformanceStreamMarkerInfoINTEL
-
-instance ToCStruct PerformanceStreamMarkerInfoINTEL where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PerformanceStreamMarkerInfoINTEL{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (marker)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PerformanceStreamMarkerInfoINTEL where
-  peekCStruct p = do
-    marker <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ PerformanceStreamMarkerInfoINTEL
-             marker
-
-instance Storable PerformanceStreamMarkerInfoINTEL where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PerformanceStreamMarkerInfoINTEL where
-  zero = PerformanceStreamMarkerInfoINTEL
-           zero
-
-
--- | VkPerformanceOverrideInfoINTEL - Performance override info
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'PerformanceOverrideTypeINTEL',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdSetPerformanceOverrideINTEL'
-data PerformanceOverrideInfoINTEL = PerformanceOverrideInfoINTEL
-  { -- | @type@ /must/ be a valid 'PerformanceOverrideTypeINTEL' value
-    type' :: PerformanceOverrideTypeINTEL
-  , -- | @enable@ defines whether the override is enabled.
-    enable :: Bool
-  , -- | @parameter@ is a potential required parameter for the override.
-    parameter :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show PerformanceOverrideInfoINTEL
-
-instance ToCStruct PerformanceOverrideInfoINTEL where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PerformanceOverrideInfoINTEL{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PerformanceOverrideTypeINTEL)) (type')
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (enable))
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (parameter)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PerformanceOverrideTypeINTEL)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct PerformanceOverrideInfoINTEL where
-  peekCStruct p = do
-    type' <- peek @PerformanceOverrideTypeINTEL ((p `plusPtr` 16 :: Ptr PerformanceOverrideTypeINTEL))
-    enable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    parameter <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    pure $ PerformanceOverrideInfoINTEL
-             type' (bool32ToBool enable) parameter
-
-instance Storable PerformanceOverrideInfoINTEL where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PerformanceOverrideInfoINTEL where
-  zero = PerformanceOverrideInfoINTEL
-           zero
-           zero
-           zero
-
-
--- | VkPerformanceConfigurationAcquireInfoINTEL - Acquire a configuration to
--- capture performance data
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PerformanceConfigurationTypeINTEL',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'acquirePerformanceConfigurationINTEL'
-data PerformanceConfigurationAcquireInfoINTEL = PerformanceConfigurationAcquireInfoINTEL
-  { -- | @type@ /must/ be a valid 'PerformanceConfigurationTypeINTEL' value
-    type' :: PerformanceConfigurationTypeINTEL }
-  deriving (Typeable)
-deriving instance Show PerformanceConfigurationAcquireInfoINTEL
-
-instance ToCStruct PerformanceConfigurationAcquireInfoINTEL where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PerformanceConfigurationAcquireInfoINTEL{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PerformanceConfigurationTypeINTEL)) (type')
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PerformanceConfigurationTypeINTEL)) (zero)
-    f
-
-instance FromCStruct PerformanceConfigurationAcquireInfoINTEL where
-  peekCStruct p = do
-    type' <- peek @PerformanceConfigurationTypeINTEL ((p `plusPtr` 16 :: Ptr PerformanceConfigurationTypeINTEL))
-    pure $ PerformanceConfigurationAcquireInfoINTEL
-             type'
-
-instance Storable PerformanceConfigurationAcquireInfoINTEL where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PerformanceConfigurationAcquireInfoINTEL where
-  zero = PerformanceConfigurationAcquireInfoINTEL
-           zero
-
-
-data PerformanceValueDataINTEL
-  = Value32 Word32
-  | Value64 Word64
-  | ValueFloat Float
-  | ValueBool Bool
-  | ValueString ByteString
-  deriving (Show)
-
-instance ToCStruct PerformanceValueDataINTEL where
-  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct :: Ptr PerformanceValueDataINTEL -> PerformanceValueDataINTEL -> IO a -> IO a
-  pokeCStruct p = (. const) . runContT .  \case
-    Value32 v -> lift $ poke (castPtr @_ @Word32 p) (v)
-    Value64 v -> lift $ poke (castPtr @_ @Word64 p) (v)
-    ValueFloat v -> lift $ poke (castPtr @_ @CFloat p) (CFloat (v))
-    ValueBool v -> lift $ poke (castPtr @_ @Bool32 p) (boolToBool32 (v))
-    ValueString v -> do
-      valueString <- ContT $ useAsCString (v)
-      lift $ poke (castPtr @_ @(Ptr CChar) p) valueString
-  pokeZeroCStruct :: Ptr PerformanceValueDataINTEL -> IO b -> IO b
-  pokeZeroCStruct _ f = f
-  cStructSize = 8
-  cStructAlignment = 8
-
-instance Zero PerformanceValueDataINTEL where
-  zero = Value64 zero
-
-peekPerformanceValueDataINTEL :: PerformanceValueTypeINTEL -> Ptr PerformanceValueDataINTEL -> IO PerformanceValueDataINTEL
-peekPerformanceValueDataINTEL tag p = case tag of
-  PERFORMANCE_VALUE_TYPE_UINT32_INTEL -> Value32 <$> (peek @Word32 (castPtr @_ @Word32 p))
-  PERFORMANCE_VALUE_TYPE_UINT64_INTEL -> Value64 <$> (peek @Word64 (castPtr @_ @Word64 p))
-  PERFORMANCE_VALUE_TYPE_FLOAT_INTEL -> ValueFloat <$> (do
-    valueFloat <- peek @CFloat (castPtr @_ @CFloat p)
-    pure $ (\(CFloat a) -> a) valueFloat)
-  PERFORMANCE_VALUE_TYPE_BOOL_INTEL -> ValueBool <$> (do
-    valueBool <- peek @Bool32 (castPtr @_ @Bool32 p)
-    pure $ bool32ToBool valueBool)
-  PERFORMANCE_VALUE_TYPE_STRING_INTEL -> ValueString <$> (packCString =<< peek (castPtr @_ @(Ptr CChar) p))
-
-
--- | VkPerformanceConfigurationTypeINTEL - Type of performance configuration
---
--- = See Also
---
--- 'PerformanceConfigurationAcquireInfoINTEL'
-newtype PerformanceConfigurationTypeINTEL = PerformanceConfigurationTypeINTEL Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkPerformanceConfigurationTypeINTEL" "VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL"
-pattern PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = PerformanceConfigurationTypeINTEL 0
-{-# complete PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL :: PerformanceConfigurationTypeINTEL #-}
-
-instance Show PerformanceConfigurationTypeINTEL where
-  showsPrec p = \case
-    PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL -> showString "PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL"
-    PerformanceConfigurationTypeINTEL x -> showParen (p >= 11) (showString "PerformanceConfigurationTypeINTEL " . showsPrec 11 x)
-
-instance Read PerformanceConfigurationTypeINTEL where
-  readPrec = parens (choose [("PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL", pure PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PerformanceConfigurationTypeINTEL")
-                       v <- step readPrec
-                       pure (PerformanceConfigurationTypeINTEL v)))
-
-
--- | VkQueryPoolSamplingModeINTEL - Enum specifying how performance queries
--- should be captured
---
--- = See Also
---
--- 'QueryPoolPerformanceQueryCreateInfoINTEL'
-newtype QueryPoolSamplingModeINTEL = QueryPoolSamplingModeINTEL Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL' is the default mode in which the
--- application calls
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery' and
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdEndQuery' to record
--- performance data.
-pattern QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = QueryPoolSamplingModeINTEL 0
-{-# complete QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL :: QueryPoolSamplingModeINTEL #-}
-
-instance Show QueryPoolSamplingModeINTEL where
-  showsPrec p = \case
-    QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL -> showString "QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL"
-    QueryPoolSamplingModeINTEL x -> showParen (p >= 11) (showString "QueryPoolSamplingModeINTEL " . showsPrec 11 x)
-
-instance Read QueryPoolSamplingModeINTEL where
-  readPrec = parens (choose [("QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL", pure QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "QueryPoolSamplingModeINTEL")
-                       v <- step readPrec
-                       pure (QueryPoolSamplingModeINTEL v)))
-
-
--- | VkPerformanceOverrideTypeINTEL - Performance override type
---
--- = See Also
---
--- 'PerformanceOverrideInfoINTEL'
-newtype PerformanceOverrideTypeINTEL = PerformanceOverrideTypeINTEL Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL' turns all rendering
--- operations into noop.
-pattern PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = PerformanceOverrideTypeINTEL 0
--- | 'PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL' stalls the stream of
--- commands until all previously emitted commands have completed and all
--- caches been flushed and invalidated.
-pattern PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = PerformanceOverrideTypeINTEL 1
-{-# complete PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL,
-             PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL :: PerformanceOverrideTypeINTEL #-}
-
-instance Show PerformanceOverrideTypeINTEL where
-  showsPrec p = \case
-    PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL -> showString "PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL"
-    PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL -> showString "PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL"
-    PerformanceOverrideTypeINTEL x -> showParen (p >= 11) (showString "PerformanceOverrideTypeINTEL " . showsPrec 11 x)
-
-instance Read PerformanceOverrideTypeINTEL where
-  readPrec = parens (choose [("PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL", pure PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL)
-                            , ("PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL", pure PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PerformanceOverrideTypeINTEL")
-                       v <- step readPrec
-                       pure (PerformanceOverrideTypeINTEL v)))
-
-
--- | VkPerformanceParameterTypeINTEL - Parameters that can be queried
---
--- = See Also
---
--- 'getPerformanceParameterINTEL'
-newtype PerformanceParameterTypeINTEL = PerformanceParameterTypeINTEL Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL' has a boolean
--- result which tells whether hardware counters can be captured.
-pattern PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL = PerformanceParameterTypeINTEL 0
--- | 'PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL' has a 32
--- bits integer result which tells how many bits can be written into the
--- 'PerformanceValueINTEL' value.
-pattern PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL = PerformanceParameterTypeINTEL 1
-{-# complete PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL,
-             PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL :: PerformanceParameterTypeINTEL #-}
-
-instance Show PerformanceParameterTypeINTEL where
-  showsPrec p = \case
-    PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL -> showString "PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL"
-    PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL -> showString "PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL"
-    PerformanceParameterTypeINTEL x -> showParen (p >= 11) (showString "PerformanceParameterTypeINTEL " . showsPrec 11 x)
-
-instance Read PerformanceParameterTypeINTEL where
-  readPrec = parens (choose [("PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL", pure PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL)
-                            , ("PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL", pure PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PerformanceParameterTypeINTEL")
-                       v <- step readPrec
-                       pure (PerformanceParameterTypeINTEL v)))
-
-
--- | VkPerformanceValueTypeINTEL - Type of the parameters that can be queried
---
--- = See Also
---
--- 'PerformanceValueINTEL'
-newtype PerformanceValueTypeINTEL = PerformanceValueTypeINTEL Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkPerformanceValueTypeINTEL" "VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL"
-pattern PERFORMANCE_VALUE_TYPE_UINT32_INTEL = PerformanceValueTypeINTEL 0
--- No documentation found for Nested "VkPerformanceValueTypeINTEL" "VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL"
-pattern PERFORMANCE_VALUE_TYPE_UINT64_INTEL = PerformanceValueTypeINTEL 1
--- No documentation found for Nested "VkPerformanceValueTypeINTEL" "VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL"
-pattern PERFORMANCE_VALUE_TYPE_FLOAT_INTEL = PerformanceValueTypeINTEL 2
--- No documentation found for Nested "VkPerformanceValueTypeINTEL" "VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL"
-pattern PERFORMANCE_VALUE_TYPE_BOOL_INTEL = PerformanceValueTypeINTEL 3
--- No documentation found for Nested "VkPerformanceValueTypeINTEL" "VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL"
-pattern PERFORMANCE_VALUE_TYPE_STRING_INTEL = PerformanceValueTypeINTEL 4
-{-# complete PERFORMANCE_VALUE_TYPE_UINT32_INTEL,
-             PERFORMANCE_VALUE_TYPE_UINT64_INTEL,
-             PERFORMANCE_VALUE_TYPE_FLOAT_INTEL,
-             PERFORMANCE_VALUE_TYPE_BOOL_INTEL,
-             PERFORMANCE_VALUE_TYPE_STRING_INTEL :: PerformanceValueTypeINTEL #-}
-
-instance Show PerformanceValueTypeINTEL where
-  showsPrec p = \case
-    PERFORMANCE_VALUE_TYPE_UINT32_INTEL -> showString "PERFORMANCE_VALUE_TYPE_UINT32_INTEL"
-    PERFORMANCE_VALUE_TYPE_UINT64_INTEL -> showString "PERFORMANCE_VALUE_TYPE_UINT64_INTEL"
-    PERFORMANCE_VALUE_TYPE_FLOAT_INTEL -> showString "PERFORMANCE_VALUE_TYPE_FLOAT_INTEL"
-    PERFORMANCE_VALUE_TYPE_BOOL_INTEL -> showString "PERFORMANCE_VALUE_TYPE_BOOL_INTEL"
-    PERFORMANCE_VALUE_TYPE_STRING_INTEL -> showString "PERFORMANCE_VALUE_TYPE_STRING_INTEL"
-    PerformanceValueTypeINTEL x -> showParen (p >= 11) (showString "PerformanceValueTypeINTEL " . showsPrec 11 x)
-
-instance Read PerformanceValueTypeINTEL where
-  readPrec = parens (choose [("PERFORMANCE_VALUE_TYPE_UINT32_INTEL", pure PERFORMANCE_VALUE_TYPE_UINT32_INTEL)
-                            , ("PERFORMANCE_VALUE_TYPE_UINT64_INTEL", pure PERFORMANCE_VALUE_TYPE_UINT64_INTEL)
-                            , ("PERFORMANCE_VALUE_TYPE_FLOAT_INTEL", pure PERFORMANCE_VALUE_TYPE_FLOAT_INTEL)
-                            , ("PERFORMANCE_VALUE_TYPE_BOOL_INTEL", pure PERFORMANCE_VALUE_TYPE_BOOL_INTEL)
-                            , ("PERFORMANCE_VALUE_TYPE_STRING_INTEL", pure PERFORMANCE_VALUE_TYPE_STRING_INTEL)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PerformanceValueTypeINTEL")
-                       v <- step readPrec
-                       pure (PerformanceValueTypeINTEL v)))
-
-
--- No documentation found for TopLevel "VkQueryPoolCreateInfoINTEL"
-type QueryPoolCreateInfoINTEL = QueryPoolPerformanceQueryCreateInfoINTEL
-
-
-type INTEL_PERFORMANCE_QUERY_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION"
-pattern INTEL_PERFORMANCE_QUERY_SPEC_VERSION :: forall a . Integral a => a
-pattern INTEL_PERFORMANCE_QUERY_SPEC_VERSION = 2
-
-
-type INTEL_PERFORMANCE_QUERY_EXTENSION_NAME = "VK_INTEL_performance_query"
-
--- No documentation found for TopLevel "VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME"
-pattern INTEL_PERFORMANCE_QUERY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern INTEL_PERFORMANCE_QUERY_EXTENSION_NAME = "VK_INTEL_performance_query"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_INTEL_performance_query.hs-boot b/src/Graphics/Vulkan/Extensions/VK_INTEL_performance_query.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_INTEL_performance_query.hs-boot
+++ /dev/null
@@ -1,72 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_INTEL_performance_query  ( InitializePerformanceApiInfoINTEL
-                                                              , PerformanceConfigurationAcquireInfoINTEL
-                                                              , PerformanceMarkerInfoINTEL
-                                                              , PerformanceOverrideInfoINTEL
-                                                              , PerformanceStreamMarkerInfoINTEL
-                                                              , PerformanceValueINTEL
-                                                              , QueryPoolPerformanceQueryCreateInfoINTEL
-                                                              , PerformanceParameterTypeINTEL
-                                                              ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data InitializePerformanceApiInfoINTEL
-
-instance ToCStruct InitializePerformanceApiInfoINTEL
-instance Show InitializePerformanceApiInfoINTEL
-
-instance FromCStruct InitializePerformanceApiInfoINTEL
-
-
-data PerformanceConfigurationAcquireInfoINTEL
-
-instance ToCStruct PerformanceConfigurationAcquireInfoINTEL
-instance Show PerformanceConfigurationAcquireInfoINTEL
-
-instance FromCStruct PerformanceConfigurationAcquireInfoINTEL
-
-
-data PerformanceMarkerInfoINTEL
-
-instance ToCStruct PerformanceMarkerInfoINTEL
-instance Show PerformanceMarkerInfoINTEL
-
-instance FromCStruct PerformanceMarkerInfoINTEL
-
-
-data PerformanceOverrideInfoINTEL
-
-instance ToCStruct PerformanceOverrideInfoINTEL
-instance Show PerformanceOverrideInfoINTEL
-
-instance FromCStruct PerformanceOverrideInfoINTEL
-
-
-data PerformanceStreamMarkerInfoINTEL
-
-instance ToCStruct PerformanceStreamMarkerInfoINTEL
-instance Show PerformanceStreamMarkerInfoINTEL
-
-instance FromCStruct PerformanceStreamMarkerInfoINTEL
-
-
-data PerformanceValueINTEL
-
-instance ToCStruct PerformanceValueINTEL
-instance Show PerformanceValueINTEL
-
-instance FromCStruct PerformanceValueINTEL
-
-
-data QueryPoolPerformanceQueryCreateInfoINTEL
-
-instance ToCStruct QueryPoolPerformanceQueryCreateInfoINTEL
-instance Show QueryPoolPerformanceQueryCreateInfoINTEL
-
-instance FromCStruct QueryPoolPerformanceQueryCreateInfoINTEL
-
-
-data PerformanceParameterTypeINTEL
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs b/src/Graphics/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs
+++ /dev/null
@@ -1,106 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2  ( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(..)
-                                                                      , INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION
-                                                                      , pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION
-                                                                      , INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME
-                                                                      , pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME
-                                                                      ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL))
--- | VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL - Structure
--- describing shader integer functions that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
-  { -- | @shaderIntegerFunctions2@ indicates that the implementation supports the
-    -- @ShaderIntegerFunctions2INTEL@ SPIR-V capability.
-    shaderIntegerFunctions2 :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
-
-instance ToCStruct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderIntegerFunctions2))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL where
-  peekCStruct p = do
-    shaderIntegerFunctions2 <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
-             (bool32ToBool shaderIntegerFunctions2)
-
-instance Storable PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL where
-  zero = PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
-           zero
-
-
-type INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION"
-pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION :: forall a . Integral a => a
-pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION = 1
-
-
-type INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME = "VK_INTEL_shader_integer_functions2"
-
--- No documentation found for TopLevel "VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME"
-pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME = "VK_INTEL_shader_integer_functions2"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs-boot b/src/Graphics/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2  (PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
-
-instance ToCStruct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
-instance Show PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
-
-instance FromCStruct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_16bit_storage.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_16bit_storage.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_16bit_storage.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_16bit_storage  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR
-                                                        , PhysicalDevice16BitStorageFeaturesKHR
-                                                        , KHR_16BIT_STORAGE_SPEC_VERSION
-                                                        , pattern KHR_16BIT_STORAGE_SPEC_VERSION
-                                                        , KHR_16BIT_STORAGE_EXTENSION_NAME
-                                                        , pattern KHR_16BIT_STORAGE_EXTENSION_NAME
-                                                        ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage (PhysicalDevice16BitStorageFeatures)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES
-
-
--- No documentation found for TopLevel "VkPhysicalDevice16BitStorageFeaturesKHR"
-type PhysicalDevice16BitStorageFeaturesKHR = PhysicalDevice16BitStorageFeatures
-
-
-type KHR_16BIT_STORAGE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_16BIT_STORAGE_SPEC_VERSION"
-pattern KHR_16BIT_STORAGE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_16BIT_STORAGE_SPEC_VERSION = 1
-
-
-type KHR_16BIT_STORAGE_EXTENSION_NAME = "VK_KHR_16bit_storage"
-
--- No documentation found for TopLevel "VK_KHR_16BIT_STORAGE_EXTENSION_NAME"
-pattern KHR_16BIT_STORAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_16BIT_STORAGE_EXTENSION_NAME = "VK_KHR_16bit_storage"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_8bit_storage.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_8bit_storage.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_8bit_storage.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_8bit_storage  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR
-                                                       , PhysicalDevice8BitStorageFeaturesKHR
-                                                       , KHR_8BIT_STORAGE_SPEC_VERSION
-                                                       , pattern KHR_8BIT_STORAGE_SPEC_VERSION
-                                                       , KHR_8BIT_STORAGE_EXTENSION_NAME
-                                                       , pattern KHR_8BIT_STORAGE_EXTENSION_NAME
-                                                       ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage (PhysicalDevice8BitStorageFeatures)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES
-
-
--- No documentation found for TopLevel "VkPhysicalDevice8BitStorageFeaturesKHR"
-type PhysicalDevice8BitStorageFeaturesKHR = PhysicalDevice8BitStorageFeatures
-
-
-type KHR_8BIT_STORAGE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_8BIT_STORAGE_SPEC_VERSION"
-pattern KHR_8BIT_STORAGE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_8BIT_STORAGE_SPEC_VERSION = 1
-
-
-type KHR_8BIT_STORAGE_EXTENSION_NAME = "VK_KHR_8bit_storage"
-
--- No documentation found for TopLevel "VK_KHR_8BIT_STORAGE_EXTENSION_NAME"
-pattern KHR_8BIT_STORAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_8BIT_STORAGE_EXTENSION_NAME = "VK_KHR_8bit_storage"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs
+++ /dev/null
@@ -1,264 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_android_surface  ( createAndroidSurfaceKHR
-                                                          , AndroidSurfaceCreateInfoKHR(..)
-                                                          , AndroidSurfaceCreateFlagsKHR(..)
-                                                          , KHR_ANDROID_SURFACE_SPEC_VERSION
-                                                          , pattern KHR_ANDROID_SURFACE_SPEC_VERSION
-                                                          , KHR_ANDROID_SURFACE_EXTENSION_NAME
-                                                          , pattern KHR_ANDROID_SURFACE_EXTENSION_NAME
-                                                          , SurfaceKHR(..)
-                                                          , ANativeWindow
-                                                          ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Extensions.WSITypes (ANativeWindow)
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateAndroidSurfaceKHR))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (ANativeWindow)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateAndroidSurfaceKHR
-  :: FunPtr (Ptr Instance_T -> Ptr AndroidSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr AndroidSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateAndroidSurfaceKHR - Create a
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' object for an Android
--- native window
---
--- = Parameters
---
--- -   @instance@ is the instance to associate the surface with.
---
--- -   @pCreateInfo@ is a pointer to a 'AndroidSurfaceCreateInfoKHR'
---     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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- = Description
---
--- During the lifetime of a surface created using a particular
--- 'Graphics.Vulkan.Extensions.WSITypes.ANativeWindow' handle any attempts
--- to create another surface for the same
--- 'Graphics.Vulkan.Extensions.WSITypes.ANativeWindow' and any attempts to
--- connect to the same 'Graphics.Vulkan.Extensions.WSITypes.ANativeWindow'
--- through other platform mechanisms will fail.
---
--- Note
---
--- In particular, only one 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
--- /can/ exist at a time for a given window. Similarly, a native window
--- /cannot/ be used by both a
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' and @EGLSurface@
--- simultaneously.
---
--- If successful, 'createAndroidSurfaceKHR' increments the
--- 'Graphics.Vulkan.Extensions.WSITypes.ANativeWindow'’s reference count,
--- and 'Graphics.Vulkan.Extensions.VK_KHR_surface.destroySurfaceKHR' 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
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'AndroidSurfaceCreateInfoKHR' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'AndroidSurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-createAndroidSurfaceKHR :: forall io . MonadIO io => Instance -> AndroidSurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createAndroidSurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateAndroidSurfaceKHR' = mkVkCreateAndroidSurfaceKHR (pVkCreateAndroidSurfaceKHR (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateAndroidSurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
--- | VkAndroidSurfaceCreateInfoKHR - Structure specifying parameters of a
--- newly created Android surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'AndroidSurfaceCreateFlagsKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createAndroidSurfaceKHR'
-data AndroidSurfaceCreateInfoKHR = AndroidSurfaceCreateInfoKHR
-  { -- | @flags@ /must/ be @0@
-    flags :: AndroidSurfaceCreateFlagsKHR
-  , -- | @window@ /must/ point to a valid Android
-    -- 'Graphics.Vulkan.Extensions.WSITypes.ANativeWindow'
-    window :: Ptr ANativeWindow
-  }
-  deriving (Typeable)
-deriving instance Show AndroidSurfaceCreateInfoKHR
-
-instance ToCStruct AndroidSurfaceCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AndroidSurfaceCreateInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AndroidSurfaceCreateFlagsKHR)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ANativeWindow))) (window)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ANativeWindow))) (zero)
-    f
-
-instance FromCStruct AndroidSurfaceCreateInfoKHR where
-  peekCStruct p = do
-    flags <- peek @AndroidSurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr AndroidSurfaceCreateFlagsKHR))
-    window <- peek @(Ptr ANativeWindow) ((p `plusPtr` 24 :: Ptr (Ptr ANativeWindow)))
-    pure $ AndroidSurfaceCreateInfoKHR
-             flags window
-
-instance Storable AndroidSurfaceCreateInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AndroidSurfaceCreateInfoKHR where
-  zero = AndroidSurfaceCreateInfoKHR
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkAndroidSurfaceCreateFlagsKHR"
-newtype AndroidSurfaceCreateFlagsKHR = AndroidSurfaceCreateFlagsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show AndroidSurfaceCreateFlagsKHR where
-  showsPrec p = \case
-    AndroidSurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "AndroidSurfaceCreateFlagsKHR 0x" . showHex x)
-
-instance Read AndroidSurfaceCreateFlagsKHR where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "AndroidSurfaceCreateFlagsKHR")
-                       v <- step readPrec
-                       pure (AndroidSurfaceCreateFlagsKHR v)))
-
-
-type KHR_ANDROID_SURFACE_SPEC_VERSION = 6
-
--- No documentation found for TopLevel "VK_KHR_ANDROID_SURFACE_SPEC_VERSION"
-pattern KHR_ANDROID_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_ANDROID_SURFACE_SPEC_VERSION = 6
-
-
-type KHR_ANDROID_SURFACE_EXTENSION_NAME = "VK_KHR_android_surface"
-
--- No documentation found for TopLevel "VK_KHR_ANDROID_SURFACE_EXTENSION_NAME"
-pattern KHR_ANDROID_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_ANDROID_SURFACE_EXTENSION_NAME = "VK_KHR_android_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_android_surface  (AndroidSurfaceCreateInfoKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data AndroidSurfaceCreateInfoKHR
-
-instance ToCStruct AndroidSurfaceCreateInfoKHR
-instance Show AndroidSurfaceCreateInfoKHR
-
-instance FromCStruct AndroidSurfaceCreateInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_bind_memory2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_bind_memory2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_bind_memory2.hs
+++ /dev/null
@@ -1,64 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_bind_memory2  ( pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR
-                                                       , pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR
-                                                       , pattern IMAGE_CREATE_ALIAS_BIT_KHR
-                                                       , bindBufferMemory2KHR
-                                                       , bindImageMemory2KHR
-                                                       , BindBufferMemoryInfoKHR
-                                                       , BindImageMemoryInfoKHR
-                                                       , KHR_BIND_MEMORY_2_SPEC_VERSION
-                                                       , pattern KHR_BIND_MEMORY_2_SPEC_VERSION
-                                                       , KHR_BIND_MEMORY_2_EXTENSION_NAME
-                                                       , pattern KHR_BIND_MEMORY_2_EXTENSION_NAME
-                                                       ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (bindBufferMemory2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (bindImageMemory2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindBufferMemoryInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindImageMemoryInfo)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_ALIAS_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR"
-pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR"
-pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO
-
-
--- No documentation found for TopLevel "VK_IMAGE_CREATE_ALIAS_BIT_KHR"
-pattern IMAGE_CREATE_ALIAS_BIT_KHR = IMAGE_CREATE_ALIAS_BIT
-
-
--- No documentation found for TopLevel "vkBindBufferMemory2KHR"
-bindBufferMemory2KHR = bindBufferMemory2
-
-
--- No documentation found for TopLevel "vkBindImageMemory2KHR"
-bindImageMemory2KHR = bindImageMemory2
-
-
--- No documentation found for TopLevel "VkBindBufferMemoryInfoKHR"
-type BindBufferMemoryInfoKHR = BindBufferMemoryInfo
-
-
--- No documentation found for TopLevel "VkBindImageMemoryInfoKHR"
-type BindImageMemoryInfoKHR = BindImageMemoryInfo
-
-
-type KHR_BIND_MEMORY_2_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_BIND_MEMORY_2_SPEC_VERSION"
-pattern KHR_BIND_MEMORY_2_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_BIND_MEMORY_2_SPEC_VERSION = 1
-
-
-type KHR_BIND_MEMORY_2_EXTENSION_NAME = "VK_KHR_bind_memory2"
-
--- No documentation found for TopLevel "VK_KHR_BIND_MEMORY_2_EXTENSION_NAME"
-pattern KHR_BIND_MEMORY_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_BIND_MEMORY_2_EXTENSION_NAME = "VK_KHR_bind_memory2"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_buffer_device_address.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_buffer_device_address.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_buffer_device_address.hs
+++ /dev/null
@@ -1,133 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR
-                                                                , pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR
-                                                                , pattern STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR
-                                                                , pattern STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR
-                                                                , pattern STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR
-                                                                , pattern BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR
-                                                                , pattern BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
-                                                                , pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR
-                                                                , pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
-                                                                , pattern ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR
-                                                                , getBufferOpaqueCaptureAddressKHR
-                                                                , getBufferDeviceAddressKHR
-                                                                , getDeviceMemoryOpaqueCaptureAddressKHR
-                                                                , PhysicalDeviceBufferDeviceAddressFeaturesKHR
-                                                                , BufferDeviceAddressInfoKHR
-                                                                , BufferOpaqueCaptureAddressCreateInfoKHR
-                                                                , MemoryOpaqueCaptureAddressAllocateInfoKHR
-                                                                , DeviceMemoryOpaqueCaptureAddressInfoKHR
-                                                                , KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION
-                                                                , pattern KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION
-                                                                , KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
-                                                                , pattern KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
-                                                                ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (getBufferDeviceAddress)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (getBufferOpaqueCaptureAddress)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (getDeviceMemoryOpaqueCaptureAddress)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferDeviceAddressInfo)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferOpaqueCaptureAddressCreateInfo)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (DeviceMemoryOpaqueCaptureAddressInfo)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (MemoryOpaqueCaptureAddressAllocateInfo)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeatures)
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
-import Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlagBits(BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT))
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlagBits(BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT))
-import Graphics.Vulkan.Core10.Enums.Result (Result(ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS))
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT))
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR"
-pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR = STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR = STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR"
-pattern STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR"
-pattern STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO
-
-
--- No documentation found for TopLevel "VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR"
-pattern BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
-
-
--- No documentation found for TopLevel "VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR"
-pattern BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
-
-
--- No documentation found for TopLevel "VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR"
-pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR = MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT
-
-
--- No documentation found for TopLevel "VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR"
-pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
-
-
--- No documentation found for TopLevel "VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR"
-pattern ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
-
-
--- No documentation found for TopLevel "vkGetBufferOpaqueCaptureAddressKHR"
-getBufferOpaqueCaptureAddressKHR = getBufferOpaqueCaptureAddress
-
-
--- No documentation found for TopLevel "vkGetBufferDeviceAddressKHR"
-getBufferDeviceAddressKHR = getBufferDeviceAddress
-
-
--- No documentation found for TopLevel "vkGetDeviceMemoryOpaqueCaptureAddressKHR"
-getDeviceMemoryOpaqueCaptureAddressKHR = getDeviceMemoryOpaqueCaptureAddress
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceBufferDeviceAddressFeaturesKHR"
-type PhysicalDeviceBufferDeviceAddressFeaturesKHR = PhysicalDeviceBufferDeviceAddressFeatures
-
-
--- No documentation found for TopLevel "VkBufferDeviceAddressInfoKHR"
-type BufferDeviceAddressInfoKHR = BufferDeviceAddressInfo
-
-
--- No documentation found for TopLevel "VkBufferOpaqueCaptureAddressCreateInfoKHR"
-type BufferOpaqueCaptureAddressCreateInfoKHR = BufferOpaqueCaptureAddressCreateInfo
-
-
--- No documentation found for TopLevel "VkMemoryOpaqueCaptureAddressAllocateInfoKHR"
-type MemoryOpaqueCaptureAddressAllocateInfoKHR = MemoryOpaqueCaptureAddressAllocateInfo
-
-
--- No documentation found for TopLevel "VkDeviceMemoryOpaqueCaptureAddressInfoKHR"
-type DeviceMemoryOpaqueCaptureAddressInfoKHR = DeviceMemoryOpaqueCaptureAddressInfo
-
-
-type KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION"
-pattern KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION = 1
-
-
-type KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME = "VK_KHR_buffer_device_address"
-
--- No documentation found for TopLevel "VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME"
-pattern KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME = "VK_KHR_buffer_device_address"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_create_renderpass2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_create_renderpass2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_create_renderpass2.hs
+++ /dev/null
@@ -1,129 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2  ( pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR
-                                                             , pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR
-                                                             , pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR
-                                                             , pattern STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR
-                                                             , pattern STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR
-                                                             , pattern STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR
-                                                             , pattern STRUCTURE_TYPE_SUBPASS_END_INFO_KHR
-                                                             , createRenderPass2KHR
-                                                             , cmdBeginRenderPass2KHR
-                                                             , cmdNextSubpass2KHR
-                                                             , cmdEndRenderPass2KHR
-                                                             , AttachmentDescription2KHR
-                                                             , AttachmentReference2KHR
-                                                             , SubpassDescription2KHR
-                                                             , SubpassDependency2KHR
-                                                             , RenderPassCreateInfo2KHR
-                                                             , SubpassBeginInfoKHR
-                                                             , SubpassEndInfoKHR
-                                                             , KHR_CREATE_RENDERPASS_2_SPEC_VERSION
-                                                             , pattern KHR_CREATE_RENDERPASS_2_SPEC_VERSION
-                                                             , KHR_CREATE_RENDERPASS_2_EXTENSION_NAME
-                                                             , pattern KHR_CREATE_RENDERPASS_2_EXTENSION_NAME
-                                                             ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (cmdBeginRenderPass2)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (cmdEndRenderPass2)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (cmdNextSubpass2)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (createRenderPass2)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentDescription2)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentReference2)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (RenderPassCreateInfo2)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassBeginInfo)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassDependency2)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassDescription2)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassEndInfo)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_BEGIN_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_END_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR"
-pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR = STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR"
-pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR = STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR"
-pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR = STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR"
-pattern STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR = STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR"
-pattern STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR = STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR"
-pattern STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR = STRUCTURE_TYPE_SUBPASS_BEGIN_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR"
-pattern STRUCTURE_TYPE_SUBPASS_END_INFO_KHR = STRUCTURE_TYPE_SUBPASS_END_INFO
-
-
--- No documentation found for TopLevel "vkCreateRenderPass2KHR"
-createRenderPass2KHR = createRenderPass2
-
-
--- No documentation found for TopLevel "vkCmdBeginRenderPass2KHR"
-cmdBeginRenderPass2KHR = cmdBeginRenderPass2
-
-
--- No documentation found for TopLevel "vkCmdNextSubpass2KHR"
-cmdNextSubpass2KHR = cmdNextSubpass2
-
-
--- No documentation found for TopLevel "vkCmdEndRenderPass2KHR"
-cmdEndRenderPass2KHR = cmdEndRenderPass2
-
-
--- No documentation found for TopLevel "VkAttachmentDescription2KHR"
-type AttachmentDescription2KHR = AttachmentDescription2
-
-
--- No documentation found for TopLevel "VkAttachmentReference2KHR"
-type AttachmentReference2KHR = AttachmentReference2
-
-
--- No documentation found for TopLevel "VkSubpassDescription2KHR"
-type SubpassDescription2KHR = SubpassDescription2
-
-
--- No documentation found for TopLevel "VkSubpassDependency2KHR"
-type SubpassDependency2KHR = SubpassDependency2
-
-
--- No documentation found for TopLevel "VkRenderPassCreateInfo2KHR"
-type RenderPassCreateInfo2KHR = RenderPassCreateInfo2
-
-
--- No documentation found for TopLevel "VkSubpassBeginInfoKHR"
-type SubpassBeginInfoKHR = SubpassBeginInfo
-
-
--- No documentation found for TopLevel "VkSubpassEndInfoKHR"
-type SubpassEndInfoKHR = SubpassEndInfo
-
-
-type KHR_CREATE_RENDERPASS_2_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION"
-pattern KHR_CREATE_RENDERPASS_2_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_CREATE_RENDERPASS_2_SPEC_VERSION = 1
-
-
-type KHR_CREATE_RENDERPASS_2_EXTENSION_NAME = "VK_KHR_create_renderpass2"
-
--- No documentation found for TopLevel "VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME"
-pattern KHR_CREATE_RENDERPASS_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_CREATE_RENDERPASS_2_EXTENSION_NAME = "VK_KHR_create_renderpass2"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_dedicated_allocation.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_dedicated_allocation.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_dedicated_allocation.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_dedicated_allocation  ( pattern STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR
-                                                               , pattern STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR
-                                                               , MemoryDedicatedRequirementsKHR
-                                                               , MemoryDedicatedAllocateInfoKHR
-                                                               , KHR_DEDICATED_ALLOCATION_SPEC_VERSION
-                                                               , pattern KHR_DEDICATED_ALLOCATION_SPEC_VERSION
-                                                               , KHR_DEDICATED_ALLOCATION_EXTENSION_NAME
-                                                               , pattern KHR_DEDICATED_ALLOCATION_EXTENSION_NAME
-                                                               ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedAllocateInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedRequirements)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR"
-pattern STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR"
-pattern STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO
-
-
--- No documentation found for TopLevel "VkMemoryDedicatedRequirementsKHR"
-type MemoryDedicatedRequirementsKHR = MemoryDedicatedRequirements
-
-
--- No documentation found for TopLevel "VkMemoryDedicatedAllocateInfoKHR"
-type MemoryDedicatedAllocateInfoKHR = MemoryDedicatedAllocateInfo
-
-
-type KHR_DEDICATED_ALLOCATION_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION"
-pattern KHR_DEDICATED_ALLOCATION_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_DEDICATED_ALLOCATION_SPEC_VERSION = 3
-
-
-type KHR_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_KHR_dedicated_allocation"
-
--- No documentation found for TopLevel "VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME"
-pattern KHR_DEDICATED_ALLOCATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_KHR_dedicated_allocation"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs
+++ /dev/null
@@ -1,525 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations  ( createDeferredOperationKHR
-                                                                   , withDeferredOperationKHR
-                                                                   , destroyDeferredOperationKHR
-                                                                   , getDeferredOperationMaxConcurrencyKHR
-                                                                   , getDeferredOperationResultKHR
-                                                                   , deferredOperationJoinKHR
-                                                                   , DeferredOperationInfoKHR(..)
-                                                                   , KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION
-                                                                   , pattern KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION
-                                                                   , KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME
-                                                                   , pattern KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME
-                                                                   , DeferredOperationKHR(..)
-                                                                   ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Extensions.Handles (DeferredOperationKHR)
-import Graphics.Vulkan.Extensions.Handles (DeferredOperationKHR(..))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateDeferredOperationKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDeferredOperationJoinKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyDeferredOperationKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeferredOperationMaxConcurrencyKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeferredOperationResultKHR))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (DeferredOperationKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateDeferredOperationKHR
-  :: FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> Ptr DeferredOperationKHR -> IO Result) -> Ptr Device_T -> Ptr AllocationCallbacks -> Ptr DeferredOperationKHR -> IO Result
-
--- | vkCreateDeferredOperationKHR - Create a deferred operation handle
---
--- = Parameters
---
--- -   @device@ is the device which owns @operation@.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pDeferredOperation@ is a pointer to a handle in which the created
---     'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR' is
---     returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pDeferredOperation@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-createDeferredOperationKHR :: forall io . MonadIO io => Device -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DeferredOperationKHR)
-createDeferredOperationKHR device allocator = liftIO . evalContT $ do
-  let vkCreateDeferredOperationKHR' = mkVkCreateDeferredOperationKHR (pVkCreateDeferredOperationKHR (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPDeferredOperation <- ContT $ bracket (callocBytes @DeferredOperationKHR 8) free
-  r <- lift $ vkCreateDeferredOperationKHR' (deviceHandle (device)) pAllocator (pPDeferredOperation)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pDeferredOperation <- lift $ peek @DeferredOperationKHR pPDeferredOperation
-  pure $ (pDeferredOperation)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createDeferredOperationKHR' and 'destroyDeferredOperationKHR'
---
--- To ensure that 'destroyDeferredOperationKHR' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withDeferredOperationKHR :: forall io r . MonadIO io => (io (DeferredOperationKHR) -> ((DeferredOperationKHR) -> io ()) -> r) -> Device -> Maybe AllocationCallbacks -> r
-withDeferredOperationKHR b device pAllocator =
-  b (createDeferredOperationKHR device pAllocator)
-    (\(o0) -> destroyDeferredOperationKHR device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyDeferredOperationKHR
-  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DeferredOperationKHR -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyDeferredOperationKHR - Destroy a deferred operation handle
---
--- = Parameters
---
--- -   @device@ is the device which owns @operation@.
---
--- -   @operation@ is the completed operation to be destroyed.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @operation@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @operation@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- -   @operation@ /must/ be completed
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @operation@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @operation@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-destroyDeferredOperationKHR :: forall io . MonadIO io => Device -> DeferredOperationKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyDeferredOperationKHR device operation allocator = liftIO . evalContT $ do
-  let vkDestroyDeferredOperationKHR' = mkVkDestroyDeferredOperationKHR (pVkDestroyDeferredOperationKHR (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyDeferredOperationKHR' (deviceHandle (device)) (operation) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeferredOperationMaxConcurrencyKHR
-  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Word32) -> Ptr Device_T -> DeferredOperationKHR -> IO Word32
-
--- | vkGetDeferredOperationMaxConcurrencyKHR - Query the maximum concurrency
--- on a deferred operation
---
--- = Parameters
---
--- -   @device@ is the device which owns @operation@.
---
--- -   @operation@ is the deferred operation to be queried.
---
--- = Description
---
--- The returned value is the maximum number of threads that can usefully
--- execute a deferred operation concurrently, reported for the state of the
--- deferred operation at the point this command is called. This value is
--- intended to be used to better schedule work onto available threads.
--- Applications /can/ join any number of threads to the deferred operation
--- and expect it to eventually complete, though excessive joins /may/
--- return 'Graphics.Vulkan.Core10.Enums.Result.THREAD_IDLE_KHR'
--- immediately, performing no useful work.
---
--- If the deferred operation is currently joined to any threads, the value
--- returned by this command /may/ immediately be out of date.
---
--- Implementations /must/ not return zero.
---
--- Implementations /may/ return 232-1 to indicate that the maximum
--- concurrency is unknown and cannot be easily derived. Implementations
--- /may/ return values larger than the maximum concurrency available on the
--- host CPU. In these situations, an application /should/ clamp the return
--- value rather than oversubscribing the machine.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-getDeferredOperationMaxConcurrencyKHR :: forall io . MonadIO io => Device -> DeferredOperationKHR -> io (Word32)
-getDeferredOperationMaxConcurrencyKHR device operation = liftIO $ do
-  let vkGetDeferredOperationMaxConcurrencyKHR' = mkVkGetDeferredOperationMaxConcurrencyKHR (pVkGetDeferredOperationMaxConcurrencyKHR (deviceCmds (device :: Device)))
-  r <- vkGetDeferredOperationMaxConcurrencyKHR' (deviceHandle (device)) (operation)
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeferredOperationResultKHR
-  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> IO Result
-
--- | vkGetDeferredOperationResultKHR - Query the result of a deferred
--- operation
---
--- = Parameters
---
--- -   @device@ is the device which owns @operation@.
---
--- -   @operation@ is the operation whose deferred result is being queried.
---
--- = Description
---
--- If the deferred operation is pending, 'getDeferredOperationResultKHR'
--- returns 'Graphics.Vulkan.Core10.Enums.Result.NOT_READY'. Otherwise, it
--- returns the result of the deferred operation. This value /must/ be one
--- of the 'Graphics.Vulkan.Core10.Enums.Result.Result' values which could
--- have been returned by the original command if the operation had not been
--- deferred.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.NOT_READY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-getDeferredOperationResultKHR :: forall io . MonadIO io => Device -> DeferredOperationKHR -> io (Result)
-getDeferredOperationResultKHR device operation = liftIO $ do
-  let vkGetDeferredOperationResultKHR' = mkVkGetDeferredOperationResultKHR (pVkGetDeferredOperationResultKHR (deviceCmds (device :: Device)))
-  r <- vkGetDeferredOperationResultKHR' (deviceHandle (device)) (operation)
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDeferredOperationJoinKHR
-  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> IO Result
-
--- | vkDeferredOperationJoinKHR - Assign a thread to a deferred operation
---
--- = Parameters
---
--- -   @device@ is the device which owns @operation@.
---
--- -   @operation@ is the deferred operation that the calling thread should
---     work on.
---
--- = Description
---
--- The 'deferredOperationJoinKHR' command will execute a portion of the
--- deferred operation on the calling thread.
---
--- The return value will be one of the following:
---
--- -   A return value of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---     indicates that @operation@ is complete. The application /should/ use
---     'getDeferredOperationResultKHR' to retrieve the result of
---     @operation@.
---
--- -   A return value of
---     'Graphics.Vulkan.Core10.Enums.Result.THREAD_DONE_KHR' indicates that
---     the deferred operation is not complete, but there is no work
---     remaining to assign to threads. Future calls to
---     'deferredOperationJoinKHR' are not necessary and will simply harm
---     performance. This situation /may/ occur when other threads executing
---     'deferredOperationJoinKHR' are about to complete @operation@, and
---     the implementation is unable to partition the workload any further.
---
--- -   A return value of
---     'Graphics.Vulkan.Core10.Enums.Result.THREAD_IDLE_KHR' indicates that
---     the deferred operation is not complete, and there is no work for the
---     thread to do at the time of the call. This situation /may/ occur if
---     the operation encounters a temporary reduction in parallelism. By
---     returning 'Graphics.Vulkan.Core10.Enums.Result.THREAD_IDLE_KHR', the
---     implementation is signaling that it expects that more opportunities
---     for parallelism will emerge as execution progresses, and that future
---     calls to 'deferredOperationJoinKHR' /can/ be beneficial. In the
---     meantime, the application /can/ perform other work on the calling
---     thread.
---
--- Implementations /must/ guarantee forward progress by enforcing the
--- following invariants:
---
--- 1.  If only one thread has invoked 'deferredOperationJoinKHR' on a given
---     operation, that thread /must/ execute the operation to completion
---     and return 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'.
---
--- 2.  If multiple threads have concurrently invoked
---     'deferredOperationJoinKHR' on the same operation, then at least one
---     of them /must/ complete the operation and return
---     'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @operation@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR' handle
---
--- -   @operation@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.THREAD_DONE_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.THREAD_IDLE_KHR'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-deferredOperationJoinKHR :: forall io . MonadIO io => Device -> DeferredOperationKHR -> io (Result)
-deferredOperationJoinKHR device operation = liftIO $ do
-  let vkDeferredOperationJoinKHR' = mkVkDeferredOperationJoinKHR (pVkDeferredOperationJoinKHR (deviceCmds (device :: Device)))
-  r <- vkDeferredOperationJoinKHR' (deviceHandle (device)) (operation)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
--- | VkDeferredOperationInfoKHR - Deferred operation request
---
--- = Description
---
--- The application /can/ request deferral of an operation by adding this
--- structure to the argument list of a command or by providing this in the
--- @pNext@ chain of a relevant structure for an operation when the
--- corresponding command is invoked. If this structure is not present, no
--- deferral is requested. If @operationHandle@ is
--- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', no deferral is
--- requested and the command proceeds as if no 'DeferredOperationInfoKHR'
--- structure was provided.
---
--- When an application requests an operation deferral, the implementation
--- /may/ defer the operation. When deferral is requested and the
--- implementation defers any operation, the implementation /must/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR' as the
--- success code if no errors occurred. When deferral is requested, the
--- implementation /should/ defer the operation when the workload is
--- significant, however if the implementation chooses not to defer any of
--- the requested operations and instead executes all of them immediately,
--- the implementation /must/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR' as the
--- success code if no errors occurred.
---
--- A deferred operation is created /complete/ with an initial result value
--- of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'. The deferred operation
--- becomes /pending/ when an operation has been successfully deferred with
--- that @operationHandle@.
---
--- A deferred operation is considered pending until the deferred operation
--- completes. A pending deferred operation becomes /complete/ when it has
--- been fully executed by one or more threads. Pending deferred operations
--- will never complete until they are /joined/ by an application thread,
--- using 'deferredOperationJoinKHR'. Applications /can/ join multiple
--- threads to the same deferred operation, enabling concurrent execution of
--- subtasks within that operation.
---
--- The application /can/ query the status of a
--- 'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR' using the
--- 'getDeferredOperationMaxConcurrencyKHR' or
--- 'getDeferredOperationResultKHR' commands.
---
--- From the perspective of other commands - parameters to the original
--- command that are externally synchronized /must/ not be accessed before
--- the deferred operation completes, and the result of the deferred
--- operation (e.g. object creation) are not considered complete until the
--- deferred operation completes.
---
--- If the deferred operation is one which creates an object (for example, a
--- pipeline object), the implementation /must/ allocate that object as it
--- normally would, and return a valid handle to the application. This
--- object is a /pending/ object, and /must/ not be used by the application
--- until the deferred operation is completed (unless otherwise specified by
--- the deferral extension). When the deferred operation is complete, the
--- application /should/ call 'getDeferredOperationResultKHR' to obtain the
--- result of the operation. If 'getDeferredOperationResultKHR' indicates
--- failure, the application /must/ destroy the pending object using an
--- appropriate command, so that the implementation has an opportunity to
--- recover the handle. The application /must/ not perform this destruction
--- until the deferred operation is complete. Construction of the pending
--- object uses the same allocator which would have been used if the
--- operation had not been deferred.
---
--- == Valid Usage
---
--- -   Any previous deferred operation that was associated with
---     @operationHandle@ /must/ be complete
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DeferredOperationKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeferredOperationInfoKHR = DeferredOperationInfoKHR
-  { -- | @operationHandle@ is a handle to a tracking object to associate with the
-    -- deferred operation.
-    operationHandle :: DeferredOperationKHR }
-  deriving (Typeable)
-deriving instance Show DeferredOperationInfoKHR
-
-instance ToCStruct DeferredOperationInfoKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeferredOperationInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeferredOperationKHR)) (operationHandle)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeferredOperationKHR)) (zero)
-    f
-
-instance FromCStruct DeferredOperationInfoKHR where
-  peekCStruct p = do
-    operationHandle <- peek @DeferredOperationKHR ((p `plusPtr` 16 :: Ptr DeferredOperationKHR))
-    pure $ DeferredOperationInfoKHR
-             operationHandle
-
-instance Storable DeferredOperationInfoKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeferredOperationInfoKHR where
-  zero = DeferredOperationInfoKHR
-           zero
-
-
-type KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION"
-pattern KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION = 2
-
-
-type KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME = "VK_KHR_deferred_host_operations"
-
--- No documentation found for TopLevel "VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME"
-pattern KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME = "VK_KHR_deferred_host_operations"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations  (DeferredOperationInfoKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DeferredOperationInfoKHR
-
-instance ToCStruct DeferredOperationInfoKHR
-instance Show DeferredOperationInfoKHR
-
-instance FromCStruct DeferredOperationInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_depth_stencil_resolve.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_depth_stencil_resolve.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_depth_stencil_resolve.hs
+++ /dev/null
@@ -1,92 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_depth_stencil_resolve  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR
-                                                                , pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR
-                                                                , pattern RESOLVE_MODE_NONE_KHR
-                                                                , pattern RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR
-                                                                , pattern RESOLVE_MODE_AVERAGE_BIT_KHR
-                                                                , pattern RESOLVE_MODE_MIN_BIT_KHR
-                                                                , pattern RESOLVE_MODE_MAX_BIT_KHR
-                                                                , ResolveModeFlagsKHR
-                                                                , ResolveModeFlagBitsKHR
-                                                                , PhysicalDeviceDepthStencilResolvePropertiesKHR
-                                                                , SubpassDescriptionDepthStencilResolveKHR
-                                                                , KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION
-                                                                , pattern KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION
-                                                                , KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME
-                                                                , pattern KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME
-                                                                ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (PhysicalDeviceDepthStencilResolveProperties)
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits)
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (SubpassDescriptionDepthStencilResolve)
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(RESOLVE_MODE_AVERAGE_BIT))
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(RESOLVE_MODE_MAX_BIT))
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(RESOLVE_MODE_MIN_BIT))
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(RESOLVE_MODE_NONE))
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
-import Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(RESOLVE_MODE_SAMPLE_ZERO_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR"
-pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR = STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE
-
-
--- No documentation found for TopLevel "VK_RESOLVE_MODE_NONE_KHR"
-pattern RESOLVE_MODE_NONE_KHR = RESOLVE_MODE_NONE
-
-
--- No documentation found for TopLevel "VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR"
-pattern RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR = RESOLVE_MODE_SAMPLE_ZERO_BIT
-
-
--- No documentation found for TopLevel "VK_RESOLVE_MODE_AVERAGE_BIT_KHR"
-pattern RESOLVE_MODE_AVERAGE_BIT_KHR = RESOLVE_MODE_AVERAGE_BIT
-
-
--- No documentation found for TopLevel "VK_RESOLVE_MODE_MIN_BIT_KHR"
-pattern RESOLVE_MODE_MIN_BIT_KHR = RESOLVE_MODE_MIN_BIT
-
-
--- No documentation found for TopLevel "VK_RESOLVE_MODE_MAX_BIT_KHR"
-pattern RESOLVE_MODE_MAX_BIT_KHR = RESOLVE_MODE_MAX_BIT
-
-
--- No documentation found for TopLevel "VkResolveModeFlagsKHR"
-type ResolveModeFlagsKHR = ResolveModeFlags
-
-
--- No documentation found for TopLevel "VkResolveModeFlagBitsKHR"
-type ResolveModeFlagBitsKHR = ResolveModeFlagBits
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceDepthStencilResolvePropertiesKHR"
-type PhysicalDeviceDepthStencilResolvePropertiesKHR = PhysicalDeviceDepthStencilResolveProperties
-
-
--- No documentation found for TopLevel "VkSubpassDescriptionDepthStencilResolveKHR"
-type SubpassDescriptionDepthStencilResolveKHR = SubpassDescriptionDepthStencilResolve
-
-
-type KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION"
-pattern KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION = 1
-
-
-type KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME = "VK_KHR_depth_stencil_resolve"
-
--- No documentation found for TopLevel "VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME"
-pattern KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME = "VK_KHR_depth_stencil_resolve"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_descriptor_update_template.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_descriptor_update_template.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_descriptor_update_template.hs
+++ /dev/null
@@ -1,97 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template  ( pattern STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR
-                                                                     , pattern OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR
-                                                                     , pattern DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR
-                                                                     , pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT
-                                                                     , createDescriptorUpdateTemplateKHR
-                                                                     , destroyDescriptorUpdateTemplateKHR
-                                                                     , updateDescriptorSetWithTemplateKHR
-                                                                     , DescriptorUpdateTemplateCreateFlagsKHR
-                                                                     , DescriptorUpdateTemplateKHR
-                                                                     , DescriptorUpdateTemplateTypeKHR
-                                                                     , DescriptorUpdateTemplateEntryKHR
-                                                                     , DescriptorUpdateTemplateCreateInfoKHR
-                                                                     , KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION
-                                                                     , pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION
-                                                                     , KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME
-                                                                     , pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME
-                                                                     , cmdPushDescriptorSetWithTemplateKHR
-                                                                     , DebugReportObjectTypeEXT(..)
-                                                                     ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (createDescriptorUpdateTemplate)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (destroyDescriptorUpdateTemplate)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (updateDescriptorSetWithTemplate)
-import Graphics.Vulkan.Core11.Handles (DescriptorUpdateTemplate)
-import Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags (DescriptorUpdateTemplateCreateFlags)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateCreateInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateEntry)
-import Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType (DescriptorUpdateTemplateType)
-import Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT))
-import Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType (DescriptorUpdateTemplateType(DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET))
-import Graphics.Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO))
-import Graphics.Vulkan.Extensions.VK_KHR_push_descriptor (cmdPushDescriptorSetWithTemplateKHR)
-import Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR"
-pattern OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE
-
-
--- No documentation found for TopLevel "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR"
-pattern DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET
-
-
--- No documentation found for TopLevel "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT
-
-
--- No documentation found for TopLevel "vkCreateDescriptorUpdateTemplateKHR"
-createDescriptorUpdateTemplateKHR = createDescriptorUpdateTemplate
-
-
--- No documentation found for TopLevel "vkDestroyDescriptorUpdateTemplateKHR"
-destroyDescriptorUpdateTemplateKHR = destroyDescriptorUpdateTemplate
-
-
--- No documentation found for TopLevel "vkUpdateDescriptorSetWithTemplateKHR"
-updateDescriptorSetWithTemplateKHR = updateDescriptorSetWithTemplate
-
-
--- No documentation found for TopLevel "VkDescriptorUpdateTemplateCreateFlagsKHR"
-type DescriptorUpdateTemplateCreateFlagsKHR = DescriptorUpdateTemplateCreateFlags
-
-
--- No documentation found for TopLevel "VkDescriptorUpdateTemplateKHR"
-type DescriptorUpdateTemplateKHR = DescriptorUpdateTemplate
-
-
--- No documentation found for TopLevel "VkDescriptorUpdateTemplateTypeKHR"
-type DescriptorUpdateTemplateTypeKHR = DescriptorUpdateTemplateType
-
-
--- No documentation found for TopLevel "VkDescriptorUpdateTemplateEntryKHR"
-type DescriptorUpdateTemplateEntryKHR = DescriptorUpdateTemplateEntry
-
-
--- No documentation found for TopLevel "VkDescriptorUpdateTemplateCreateInfoKHR"
-type DescriptorUpdateTemplateCreateInfoKHR = DescriptorUpdateTemplateCreateInfo
-
-
-type KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION"
-pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION = 1
-
-
-type KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME = "VK_KHR_descriptor_update_template"
-
--- No documentation found for TopLevel "VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME"
-pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME = "VK_KHR_descriptor_update_template"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_device_group.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_device_group.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_device_group.hs
+++ /dev/null
@@ -1,241 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_device_group  ( pattern STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR
-                                                       , pattern STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR
-                                                       , pattern STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR
-                                                       , pattern STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR
-                                                       , pattern STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR
-                                                       , pattern PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR
-                                                       , pattern PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR
-                                                       , pattern PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR
-                                                       , pattern PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR
-                                                       , pattern MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR
-                                                       , pattern PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR
-                                                       , pattern PIPELINE_CREATE_DISPATCH_BASE_KHR
-                                                       , pattern DEPENDENCY_DEVICE_GROUP_BIT_KHR
-                                                       , pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR
-                                                       , pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR
-                                                       , pattern IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
-                                                       , getDeviceGroupPeerMemoryFeaturesKHR
-                                                       , cmdSetDeviceMaskKHR
-                                                       , cmdDispatchBaseKHR
-                                                       , PeerMemoryFeatureFlagsKHR
-                                                       , MemoryAllocateFlagsKHR
-                                                       , PeerMemoryFeatureFlagBitsKHR
-                                                       , MemoryAllocateFlagBitsKHR
-                                                       , MemoryAllocateFlagsInfoKHR
-                                                       , BindBufferMemoryDeviceGroupInfoKHR
-                                                       , BindImageMemoryDeviceGroupInfoKHR
-                                                       , DeviceGroupRenderPassBeginInfoKHR
-                                                       , DeviceGroupCommandBufferBeginInfoKHR
-                                                       , DeviceGroupSubmitInfoKHR
-                                                       , DeviceGroupBindSparseInfoKHR
-                                                       , KHR_DEVICE_GROUP_SPEC_VERSION
-                                                       , pattern KHR_DEVICE_GROUP_SPEC_VERSION
-                                                       , KHR_DEVICE_GROUP_EXTENSION_NAME
-                                                       , pattern KHR_DEVICE_GROUP_EXTENSION_NAME
-                                                       , SurfaceKHR(..)
-                                                       , SwapchainKHR(..)
-                                                       , DeviceGroupPresentCapabilitiesKHR(..)
-                                                       , ImageSwapchainCreateInfoKHR(..)
-                                                       , BindImageMemorySwapchainInfoKHR(..)
-                                                       , AcquireNextImageInfoKHR(..)
-                                                       , DeviceGroupPresentInfoKHR(..)
-                                                       , DeviceGroupSwapchainCreateInfoKHR(..)
-                                                       , getDeviceGroupPresentCapabilitiesKHR
-                                                       , getDeviceGroupSurfacePresentModesKHR
-                                                       , acquireNextImage2KHR
-                                                       , getPhysicalDevicePresentRectanglesKHR
-                                                       , DeviceGroupPresentModeFlagBitsKHR(..)
-                                                       , DeviceGroupPresentModeFlagsKHR
-                                                       , SwapchainCreateFlagBitsKHR(..)
-                                                       , SwapchainCreateFlagsKHR
-                                                       ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (cmdDispatchBase)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (cmdSetDeviceMask)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (getDeviceGroupPeerMemoryFeatures)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindBufferMemoryDeviceGroupInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindImageMemoryDeviceGroupInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupBindSparseInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupCommandBufferBeginInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupRenderPassBeginInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupSubmitInfo)
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits)
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (MemoryAllocateFlagsInfo)
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits)
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(DEPENDENCY_DEVICE_GROUP_BIT))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT))
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
-import Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(MEMORY_ALLOCATE_DEVICE_MASK_BIT))
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(PEER_MEMORY_FEATURE_COPY_DST_BIT))
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(PEER_MEMORY_FEATURE_COPY_SRC_BIT))
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(PEER_MEMORY_FEATURE_GENERIC_DST_BIT))
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(PEER_MEMORY_FEATURE_GENERIC_SRC_BIT))
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group (pattern PIPELINE_CREATE_DISPATCH_BASE)
-import Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
-import Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (acquireNextImage2KHR)
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (getDeviceGroupPresentCapabilitiesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (getDeviceGroupSurfacePresentModesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (getPhysicalDevicePresentRectanglesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (AcquireNextImageInfoKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (BindImageMemorySwapchainInfoKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentCapabilitiesKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentInfoKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupSwapchainCreateInfoKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (ImageSwapchainCreateInfoKHR(..))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagsKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR"
-pattern STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO
-
-
--- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR"
-pattern PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR = PEER_MEMORY_FEATURE_COPY_SRC_BIT
-
-
--- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR"
-pattern PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR = PEER_MEMORY_FEATURE_COPY_DST_BIT
-
-
--- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR"
-pattern PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR = PEER_MEMORY_FEATURE_GENERIC_SRC_BIT
-
-
--- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR"
-pattern PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR = PEER_MEMORY_FEATURE_GENERIC_DST_BIT
-
-
--- No documentation found for TopLevel "VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR"
-pattern MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = MEMORY_ALLOCATE_DEVICE_MASK_BIT
-
-
--- No documentation found for TopLevel "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR"
-pattern PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT
-
-
--- No documentation found for TopLevel "VK_PIPELINE_CREATE_DISPATCH_BASE_KHR"
-pattern PIPELINE_CREATE_DISPATCH_BASE_KHR = PIPELINE_CREATE_DISPATCH_BASE
-
-
--- No documentation found for TopLevel "VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR"
-pattern DEPENDENCY_DEVICE_GROUP_BIT_KHR = DEPENDENCY_DEVICE_GROUP_BIT
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR"
-pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR"
-pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO
-
-
--- No documentation found for TopLevel "VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"
-pattern IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT
-
-
--- No documentation found for TopLevel "vkGetDeviceGroupPeerMemoryFeaturesKHR"
-getDeviceGroupPeerMemoryFeaturesKHR = getDeviceGroupPeerMemoryFeatures
-
-
--- No documentation found for TopLevel "vkCmdSetDeviceMaskKHR"
-cmdSetDeviceMaskKHR = cmdSetDeviceMask
-
-
--- No documentation found for TopLevel "vkCmdDispatchBaseKHR"
-cmdDispatchBaseKHR = cmdDispatchBase
-
-
--- No documentation found for TopLevel "VkPeerMemoryFeatureFlagsKHR"
-type PeerMemoryFeatureFlagsKHR = PeerMemoryFeatureFlags
-
-
--- No documentation found for TopLevel "VkMemoryAllocateFlagsKHR"
-type MemoryAllocateFlagsKHR = MemoryAllocateFlags
-
-
--- No documentation found for TopLevel "VkPeerMemoryFeatureFlagBitsKHR"
-type PeerMemoryFeatureFlagBitsKHR = PeerMemoryFeatureFlagBits
-
-
--- No documentation found for TopLevel "VkMemoryAllocateFlagBitsKHR"
-type MemoryAllocateFlagBitsKHR = MemoryAllocateFlagBits
-
-
--- No documentation found for TopLevel "VkMemoryAllocateFlagsInfoKHR"
-type MemoryAllocateFlagsInfoKHR = MemoryAllocateFlagsInfo
-
-
--- No documentation found for TopLevel "VkBindBufferMemoryDeviceGroupInfoKHR"
-type BindBufferMemoryDeviceGroupInfoKHR = BindBufferMemoryDeviceGroupInfo
-
-
--- No documentation found for TopLevel "VkBindImageMemoryDeviceGroupInfoKHR"
-type BindImageMemoryDeviceGroupInfoKHR = BindImageMemoryDeviceGroupInfo
-
-
--- No documentation found for TopLevel "VkDeviceGroupRenderPassBeginInfoKHR"
-type DeviceGroupRenderPassBeginInfoKHR = DeviceGroupRenderPassBeginInfo
-
-
--- No documentation found for TopLevel "VkDeviceGroupCommandBufferBeginInfoKHR"
-type DeviceGroupCommandBufferBeginInfoKHR = DeviceGroupCommandBufferBeginInfo
-
-
--- No documentation found for TopLevel "VkDeviceGroupSubmitInfoKHR"
-type DeviceGroupSubmitInfoKHR = DeviceGroupSubmitInfo
-
-
--- No documentation found for TopLevel "VkDeviceGroupBindSparseInfoKHR"
-type DeviceGroupBindSparseInfoKHR = DeviceGroupBindSparseInfo
-
-
-type KHR_DEVICE_GROUP_SPEC_VERSION = 4
-
--- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_SPEC_VERSION"
-pattern KHR_DEVICE_GROUP_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_DEVICE_GROUP_SPEC_VERSION = 4
-
-
-type KHR_DEVICE_GROUP_EXTENSION_NAME = "VK_KHR_device_group"
-
--- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_EXTENSION_NAME"
-pattern KHR_DEVICE_GROUP_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_DEVICE_GROUP_EXTENSION_NAME = "VK_KHR_device_group"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_device_group_creation.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_device_group_creation.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_device_group_creation.hs
+++ /dev/null
@@ -1,64 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_device_group_creation  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR
-                                                                , pattern STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR
-                                                                , pattern MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR
-                                                                , enumeratePhysicalDeviceGroupsKHR
-                                                                , pattern MAX_DEVICE_GROUP_SIZE_KHR
-                                                                , PhysicalDeviceGroupPropertiesKHR
-                                                                , DeviceGroupDeviceCreateInfoKHR
-                                                                , KHR_DEVICE_GROUP_CREATION_SPEC_VERSION
-                                                                , pattern KHR_DEVICE_GROUP_CREATION_SPEC_VERSION
-                                                                , KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME
-                                                                , pattern KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME
-                                                                ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (enumeratePhysicalDeviceGroups)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (DeviceGroupDeviceCreateInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (PhysicalDeviceGroupProperties)
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_DEVICE_GROUP_SIZE)
-import Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlags)
-import Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlagBits(MEMORY_HEAP_MULTI_INSTANCE_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR"
-pattern MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = MEMORY_HEAP_MULTI_INSTANCE_BIT
-
-
--- No documentation found for TopLevel "vkEnumeratePhysicalDeviceGroupsKHR"
-enumeratePhysicalDeviceGroupsKHR = enumeratePhysicalDeviceGroups
-
-
--- No documentation found for TopLevel "VK_MAX_DEVICE_GROUP_SIZE_KHR"
-pattern MAX_DEVICE_GROUP_SIZE_KHR = MAX_DEVICE_GROUP_SIZE
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceGroupPropertiesKHR"
-type PhysicalDeviceGroupPropertiesKHR = PhysicalDeviceGroupProperties
-
-
--- No documentation found for TopLevel "VkDeviceGroupDeviceCreateInfoKHR"
-type DeviceGroupDeviceCreateInfoKHR = DeviceGroupDeviceCreateInfo
-
-
-type KHR_DEVICE_GROUP_CREATION_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION"
-pattern KHR_DEVICE_GROUP_CREATION_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_DEVICE_GROUP_CREATION_SPEC_VERSION = 1
-
-
-type KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME = "VK_KHR_device_group_creation"
-
--- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME"
-pattern KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME = "VK_KHR_device_group_creation"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs
+++ /dev/null
@@ -1,1480 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_display  ( getPhysicalDeviceDisplayPropertiesKHR
-                                                  , getPhysicalDeviceDisplayPlanePropertiesKHR
-                                                  , getDisplayPlaneSupportedDisplaysKHR
-                                                  , getDisplayModePropertiesKHR
-                                                  , createDisplayModeKHR
-                                                  , getDisplayPlaneCapabilitiesKHR
-                                                  , createDisplayPlaneSurfaceKHR
-                                                  , DisplayPropertiesKHR(..)
-                                                  , DisplayPlanePropertiesKHR(..)
-                                                  , DisplayModeParametersKHR(..)
-                                                  , DisplayModePropertiesKHR(..)
-                                                  , DisplayModeCreateInfoKHR(..)
-                                                  , DisplayPlaneCapabilitiesKHR(..)
-                                                  , DisplaySurfaceCreateInfoKHR(..)
-                                                  , DisplayModeCreateFlagsKHR(..)
-                                                  , DisplaySurfaceCreateFlagsKHR(..)
-                                                  , DisplayPlaneAlphaFlagBitsKHR( DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR
-                                                                                , DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR
-                                                                                , DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR
-                                                                                , DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR
-                                                                                , ..
-                                                                                )
-                                                  , DisplayPlaneAlphaFlagsKHR
-                                                  , SurfaceTransformFlagBitsKHR( SURFACE_TRANSFORM_IDENTITY_BIT_KHR
-                                                                               , SURFACE_TRANSFORM_ROTATE_90_BIT_KHR
-                                                                               , SURFACE_TRANSFORM_ROTATE_180_BIT_KHR
-                                                                               , SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
-                                                                               , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR
-                                                                               , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR
-                                                                               , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR
-                                                                               , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR
-                                                                               , SURFACE_TRANSFORM_INHERIT_BIT_KHR
-                                                                               , ..
-                                                                               )
-                                                  , SurfaceTransformFlagsKHR
-                                                  , KHR_DISPLAY_SPEC_VERSION
-                                                  , pattern KHR_DISPLAY_SPEC_VERSION
-                                                  , KHR_DISPLAY_EXTENSION_NAME
-                                                  , pattern KHR_DISPLAY_EXTENSION_NAME
-                                                  , DisplayKHR(..)
-                                                  , DisplayModeKHR(..)
-                                                  , SurfaceKHR(..)
-                                                  ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.ByteString (packCString)
-import Data.ByteString (useAsCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR)
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR(..))
-import Graphics.Vulkan.Extensions.Handles (DisplayModeKHR)
-import Graphics.Vulkan.Extensions.Handles (DisplayModeKHR(..))
-import Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateDisplayModeKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateDisplayPlaneSurfaceKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetDisplayModePropertiesKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetDisplayPlaneCapabilitiesKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetDisplayPlaneSupportedDisplaysKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceDisplayPlanePropertiesKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceDisplayPropertiesKHR))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.SharedTypes (Offset2D)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR(..))
-import Graphics.Vulkan.Extensions.Handles (DisplayModeKHR(..))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceDisplayPropertiesKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPropertiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPropertiesKHR -> IO Result
-
--- | vkGetPhysicalDeviceDisplayPropertiesKHR - Query information about the
--- available displays
---
--- = 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
---     'DisplayPropertiesKHR' structures.
---
--- = 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@,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' to indicate
--- that not all the available values were returned.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' 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@ 'DisplayPropertiesKHR' structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'DisplayPropertiesKHR', 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceDisplayPropertiesKHR :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector DisplayPropertiesKHR))
-getPhysicalDeviceDisplayPropertiesKHR physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceDisplayPropertiesKHR' = mkVkGetPhysicalDeviceDisplayPropertiesKHR (pVkGetPhysicalDeviceDisplayPropertiesKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceDisplayPropertiesKHR' physicalDevice' (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @DisplayPropertiesKHR ((fromIntegral (pPropertyCount)) * 48)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 48) :: Ptr DisplayPropertiesKHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkGetPhysicalDeviceDisplayPropertiesKHR' physicalDevice' (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayPropertiesKHR (((pPProperties) `advancePtrBytes` (48 * (i)) :: Ptr DisplayPropertiesKHR)))
-  pure $ ((r'), pProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceDisplayPlanePropertiesKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPlanePropertiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPlanePropertiesKHR -> IO Result
-
--- | vkGetPhysicalDeviceDisplayPlanePropertiesKHR - Query the plane
--- properties
---
--- = 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
---     'DisplayPlanePropertiesKHR' structures.
---
--- = 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
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' 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@ 'DisplayPlanePropertiesKHR'
---     structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'DisplayPlanePropertiesKHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceDisplayPlanePropertiesKHR :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector DisplayPlanePropertiesKHR))
-getPhysicalDeviceDisplayPlanePropertiesKHR physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceDisplayPlanePropertiesKHR' = mkVkGetPhysicalDeviceDisplayPlanePropertiesKHR (pVkGetPhysicalDeviceDisplayPlanePropertiesKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceDisplayPlanePropertiesKHR' physicalDevice' (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @DisplayPlanePropertiesKHR ((fromIntegral (pPropertyCount)) * 16)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 16) :: Ptr DisplayPlanePropertiesKHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkGetPhysicalDeviceDisplayPlanePropertiesKHR' physicalDevice' (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayPlanePropertiesKHR (((pPProperties) `advancePtrBytes` (16 * (i)) :: Ptr DisplayPlanePropertiesKHR)))
-  pure $ ((r'), pProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDisplayPlaneSupportedDisplaysKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Word32 -> Ptr DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Word32 -> Ptr DisplayKHR -> IO Result
-
--- | vkGetDisplayPlaneSupportedDisplaysKHR - Query the list of displays a
--- plane supports
---
--- = 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
---     'Graphics.Vulkan.Extensions.Handles.DisplayKHR' handles.
---
--- = 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@, 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will
--- be returned instead of 'Graphics.Vulkan.Core10.Enums.Result.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
---     'getPhysicalDeviceDisplayPlanePropertiesKHR'
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' 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@
---     'Graphics.Vulkan.Extensions.Handles.DisplayKHR' handles
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getDisplayPlaneSupportedDisplaysKHR :: forall io . MonadIO io => PhysicalDevice -> ("planeIndex" ::: Word32) -> io (Result, ("displays" ::: Vector DisplayKHR))
-getDisplayPlaneSupportedDisplaysKHR physicalDevice planeIndex = liftIO . evalContT $ do
-  let vkGetDisplayPlaneSupportedDisplaysKHR' = mkVkGetDisplayPlaneSupportedDisplaysKHR (pVkGetDisplayPlaneSupportedDisplaysKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPDisplayCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetDisplayPlaneSupportedDisplaysKHR' physicalDevice' (planeIndex) (pPDisplayCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pDisplayCount <- lift $ peek @Word32 pPDisplayCount
-  pPDisplays <- ContT $ bracket (callocBytes @DisplayKHR ((fromIntegral (pDisplayCount)) * 8)) free
-  r' <- lift $ vkGetDisplayPlaneSupportedDisplaysKHR' physicalDevice' (planeIndex) (pPDisplayCount) (pPDisplays)
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pDisplayCount' <- lift $ peek @Word32 pPDisplayCount
-  pDisplays' <- lift $ generateM (fromIntegral (pDisplayCount')) (\i -> peek @DisplayKHR ((pPDisplays `advancePtrBytes` (8 * (i)) :: Ptr DisplayKHR)))
-  pure $ ((r'), pDisplays')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDisplayModePropertiesKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> Ptr Word32 -> Ptr DisplayModePropertiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> DisplayKHR -> Ptr Word32 -> Ptr DisplayModePropertiesKHR -> IO Result
-
--- | vkGetDisplayModePropertiesKHR - Query the set of mode properties
--- supported by the display
---
--- = 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
---     'DisplayModePropertiesKHR' structures.
---
--- = 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@,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' to indicate
--- that not all the available values were returned.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @display@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DisplayKHR' 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@ 'DisplayModePropertiesKHR'
---     structures
---
--- -   @display@ /must/ have been created, allocated, or retrieved from
---     @physicalDevice@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR',
--- 'DisplayModePropertiesKHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getDisplayModePropertiesKHR :: forall io . MonadIO io => PhysicalDevice -> DisplayKHR -> io (Result, ("properties" ::: Vector DisplayModePropertiesKHR))
-getDisplayModePropertiesKHR physicalDevice display = liftIO . evalContT $ do
-  let vkGetDisplayModePropertiesKHR' = mkVkGetDisplayModePropertiesKHR (pVkGetDisplayModePropertiesKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetDisplayModePropertiesKHR' physicalDevice' (display) (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @DisplayModePropertiesKHR ((fromIntegral (pPropertyCount)) * 24)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 24) :: Ptr DisplayModePropertiesKHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkGetDisplayModePropertiesKHR' physicalDevice' (display) (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayModePropertiesKHR (((pPProperties) `advancePtrBytes` (24 * (i)) :: Ptr DisplayModePropertiesKHR)))
-  pure $ ((r'), pProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateDisplayModeKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> Ptr DisplayModeCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr DisplayModeKHR -> IO Result) -> Ptr PhysicalDevice_T -> DisplayKHR -> Ptr DisplayModeCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr DisplayModeKHR -> IO Result
-
--- | vkCreateDisplayModeKHR - Create a display mode
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device associated with @display@.
---
--- -   @display@ is the display to create an additional mode for.
---
--- -   @pCreateInfo@ is a 'DisplayModeCreateInfoKHR' 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pMode@ returns the handle of the mode created.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @display@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DisplayKHR' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'DisplayModeCreateInfoKHR' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pMode@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR' handle
---
--- -   @display@ /must/ have been created, allocated, or retrieved from
---     @physicalDevice@
---
--- == Host Synchronization
---
--- -   Host access to @display@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR',
--- 'DisplayModeCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-createDisplayModeKHR :: forall io . MonadIO io => PhysicalDevice -> DisplayKHR -> DisplayModeCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DisplayModeKHR)
-createDisplayModeKHR physicalDevice display createInfo allocator = liftIO . evalContT $ do
-  let vkCreateDisplayModeKHR' = mkVkCreateDisplayModeKHR (pVkCreateDisplayModeKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPMode <- ContT $ bracket (callocBytes @DisplayModeKHR 8) free
-  r <- lift $ vkCreateDisplayModeKHR' (physicalDeviceHandle (physicalDevice)) (display) pCreateInfo pAllocator (pPMode)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pMode <- lift $ peek @DisplayModeKHR pPMode
-  pure $ (pMode)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDisplayPlaneCapabilitiesKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> DisplayModeKHR -> Word32 -> Ptr DisplayPlaneCapabilitiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> DisplayModeKHR -> Word32 -> Ptr DisplayPlaneCapabilitiesKHR -> IO Result
-
--- | vkGetDisplayPlaneCapabilitiesKHR - Query capabilities of a mode and
--- plane combination
---
--- = 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 'DisplayPlaneCapabilitiesKHR'
---     structure in which the capabilities are returned.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @mode@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR' handle
---
--- -   @pCapabilities@ /must/ be a valid pointer to a
---     'DisplayPlaneCapabilitiesKHR' structure
---
--- == Host Synchronization
---
--- -   Host access to @mode@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR',
--- 'DisplayPlaneCapabilitiesKHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getDisplayPlaneCapabilitiesKHR :: forall io . MonadIO io => PhysicalDevice -> DisplayModeKHR -> ("planeIndex" ::: Word32) -> io (DisplayPlaneCapabilitiesKHR)
-getDisplayPlaneCapabilitiesKHR physicalDevice mode planeIndex = liftIO . evalContT $ do
-  let vkGetDisplayPlaneCapabilitiesKHR' = mkVkGetDisplayPlaneCapabilitiesKHR (pVkGetDisplayPlaneCapabilitiesKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPCapabilities <- ContT (withZeroCStruct @DisplayPlaneCapabilitiesKHR)
-  r <- lift $ vkGetDisplayPlaneCapabilitiesKHR' (physicalDeviceHandle (physicalDevice)) (mode) (planeIndex) (pPCapabilities)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pCapabilities <- lift $ peekCStruct @DisplayPlaneCapabilitiesKHR pPCapabilities
-  pure $ (pCapabilities)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateDisplayPlaneSurfaceKHR
-  :: FunPtr (Ptr Instance_T -> Ptr DisplaySurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr DisplaySurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateDisplayPlaneSurfaceKHR - Create a
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' structure representing a
--- display plane and mode
---
--- = Parameters
---
--- -   @instance@ is the instance corresponding to the physical device the
---     targeted display is on.
---
--- -   @pCreateInfo@ is a pointer to a 'DisplaySurfaceCreateInfoKHR'
---     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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'DisplaySurfaceCreateInfoKHR' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'DisplaySurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-createDisplayPlaneSurfaceKHR :: forall io . MonadIO io => Instance -> DisplaySurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createDisplayPlaneSurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateDisplayPlaneSurfaceKHR' = mkVkCreateDisplayPlaneSurfaceKHR (pVkCreateDisplayPlaneSurfaceKHR (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateDisplayPlaneSurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
--- | VkDisplayPropertiesKHR - Structure describing an available display
--- device
---
--- = Description
---
--- Note
---
--- For devices which have no natural value to return here, implementations
--- /should/ return the maximum resolution supported.
---
--- 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
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayProperties2KHR',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'SurfaceTransformFlagsKHR', 'getPhysicalDeviceDisplayPropertiesKHR'
-data DisplayPropertiesKHR = DisplayPropertiesKHR
-  { -- | @display@ is a handle that is used to refer to the display described
-    -- here. This handle will be valid for the lifetime of the Vulkan instance.
-    display :: DisplayKHR
-  , -- | @displayName@ is a pointer to a null-terminated UTF-8 string containing
-    -- the name of the display. Generally, this will be the name provided by
-    -- the display’s EDID. It /can/ be @NULL@ if no suitable name is available.
-    -- If not @NULL@, the memory it points to /must/ remain accessible as long
-    -- as @display@ is valid.
-    displayName :: ByteString
-  , -- | @physicalDimensions@ describes the physical width and height of the
-    -- visible portion of the display, in millimeters.
-    physicalDimensions :: Extent2D
-  , -- | @physicalResolution@ describes the physical, native, or preferred
-    -- resolution of the display.
-    physicalResolution :: Extent2D
-  , -- | @supportedTransforms@ is a bitmask of 'SurfaceTransformFlagBitsKHR'
-    -- describing which transforms are supported by this display.
-    supportedTransforms :: SurfaceTransformFlagsKHR
-  , -- | @planeReorderPossible@ tells whether the planes on this display /can/
-    -- have their z order changed. If this is
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE', the application /can/ re-arrange
-    -- the planes on this display in any order relative to each other.
-    planeReorderPossible :: Bool
-  , -- | @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.
-    persistentContent :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show DisplayPropertiesKHR
-
-instance ToCStruct DisplayPropertiesKHR where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayPropertiesKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr DisplayKHR)) (display)
-    displayName'' <- ContT $ useAsCString (displayName)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr CChar))) displayName''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (physicalDimensions) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (physicalResolution) . ($ ())
-    lift $ poke ((p `plusPtr` 32 :: Ptr SurfaceTransformFlagsKHR)) (supportedTransforms)
-    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (planeReorderPossible))
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (persistentContent))
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr DisplayKHR)) (zero)
-    displayName'' <- ContT $ useAsCString (mempty)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr CChar))) displayName''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance FromCStruct DisplayPropertiesKHR where
-  peekCStruct p = do
-    display <- peek @DisplayKHR ((p `plusPtr` 0 :: Ptr DisplayKHR))
-    displayName <- packCString =<< peek ((p `plusPtr` 8 :: Ptr (Ptr CChar)))
-    physicalDimensions <- peekCStruct @Extent2D ((p `plusPtr` 16 :: Ptr Extent2D))
-    physicalResolution <- peekCStruct @Extent2D ((p `plusPtr` 24 :: Ptr Extent2D))
-    supportedTransforms <- peek @SurfaceTransformFlagsKHR ((p `plusPtr` 32 :: Ptr SurfaceTransformFlagsKHR))
-    planeReorderPossible <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    persistentContent <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    pure $ DisplayPropertiesKHR
-             display displayName physicalDimensions physicalResolution supportedTransforms (bool32ToBool planeReorderPossible) (bool32ToBool persistentContent)
-
-instance Zero DisplayPropertiesKHR where
-  zero = DisplayPropertiesKHR
-           zero
-           mempty
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDisplayPlanePropertiesKHR - Structure describing display plane
--- properties
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneProperties2KHR',
--- 'getPhysicalDeviceDisplayPlanePropertiesKHR'
-data DisplayPlanePropertiesKHR = DisplayPlanePropertiesKHR
-  { -- | @currentDisplay@ is the handle of the display the plane is currently
-    -- associated with. If the plane is not currently attached to any displays,
-    -- this will be 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'.
-    currentDisplay :: DisplayKHR
-  , -- | @currentStackIndex@ is the current z-order of the plane. This will be
-    -- between 0 and the value returned by
-    -- 'getPhysicalDeviceDisplayPlanePropertiesKHR' in @pPropertyCount@.
-    currentStackIndex :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DisplayPlanePropertiesKHR
-
-instance ToCStruct DisplayPlanePropertiesKHR where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayPlanePropertiesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr DisplayKHR)) (currentDisplay)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (currentStackIndex)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr DisplayKHR)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DisplayPlanePropertiesKHR where
-  peekCStruct p = do
-    currentDisplay <- peek @DisplayKHR ((p `plusPtr` 0 :: Ptr DisplayKHR))
-    currentStackIndex <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pure $ DisplayPlanePropertiesKHR
-             currentDisplay currentStackIndex
-
-instance Storable DisplayPlanePropertiesKHR where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DisplayPlanePropertiesKHR where
-  zero = DisplayPlanePropertiesKHR
-           zero
-           zero
-
-
--- | VkDisplayModeParametersKHR - Structure describing display parameters
--- associated with a display mode
---
--- = Description
---
--- Note
---
--- For example, a 60Hz display mode would report a @refreshRate@ of 60,000.
---
--- == Valid Usage
---
--- -   The @width@ member of @visibleRegion@ /must/ be greater than @0@
---
--- -   The @height@ member of @visibleRegion@ /must/ be greater than @0@
---
--- -   @refreshRate@ /must/ be greater than @0@
---
--- = See Also
---
--- 'DisplayModeCreateInfoKHR', 'DisplayModePropertiesKHR',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D'
-data DisplayModeParametersKHR = DisplayModeParametersKHR
-  { -- | @visibleRegion@ is the 2D extents of the visible region.
-    visibleRegion :: Extent2D
-  , -- | @refreshRate@ is a @uint32_t@ that is the number of times the display is
-    -- refreshed each second multiplied by 1000.
-    refreshRate :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DisplayModeParametersKHR
-
-instance ToCStruct DisplayModeParametersKHR where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayModeParametersKHR{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent2D)) (visibleRegion) . ($ ())
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (refreshRate)
-    lift $ f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance FromCStruct DisplayModeParametersKHR where
-  peekCStruct p = do
-    visibleRegion <- peekCStruct @Extent2D ((p `plusPtr` 0 :: Ptr Extent2D))
-    refreshRate <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pure $ DisplayModeParametersKHR
-             visibleRegion refreshRate
-
-instance Zero DisplayModeParametersKHR where
-  zero = DisplayModeParametersKHR
-           zero
-           zero
-
-
--- | VkDisplayModePropertiesKHR - Structure describing display mode
--- properties
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR',
--- 'DisplayModeParametersKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayModeProperties2KHR',
--- 'getDisplayModePropertiesKHR'
-data DisplayModePropertiesKHR = DisplayModePropertiesKHR
-  { -- | @displayMode@ is a handle to the display mode described in this
-    -- structure. This handle will be valid for the lifetime of the Vulkan
-    -- instance.
-    displayMode :: DisplayModeKHR
-  , -- | @parameters@ is a 'DisplayModeParametersKHR' structure describing the
-    -- display parameters associated with @displayMode@.
-    parameters :: DisplayModeParametersKHR
-  }
-  deriving (Typeable)
-deriving instance Show DisplayModePropertiesKHR
-
-instance ToCStruct DisplayModePropertiesKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayModePropertiesKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr DisplayModeKHR)) (displayMode)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr DisplayModeParametersKHR)) (parameters) . ($ ())
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr DisplayModeKHR)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr DisplayModeParametersKHR)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct DisplayModePropertiesKHR where
-  peekCStruct p = do
-    displayMode <- peek @DisplayModeKHR ((p `plusPtr` 0 :: Ptr DisplayModeKHR))
-    parameters <- peekCStruct @DisplayModeParametersKHR ((p `plusPtr` 8 :: Ptr DisplayModeParametersKHR))
-    pure $ DisplayModePropertiesKHR
-             displayMode parameters
-
-instance Zero DisplayModePropertiesKHR where
-  zero = DisplayModePropertiesKHR
-           zero
-           zero
-
-
--- | VkDisplayModeCreateInfoKHR - Structure specifying parameters of a newly
--- created display mode object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'DisplayModeCreateFlagsKHR', 'DisplayModeParametersKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createDisplayModeKHR'
-data DisplayModeCreateInfoKHR = DisplayModeCreateInfoKHR
-  { -- | @flags@ /must/ be @0@
-    flags :: DisplayModeCreateFlagsKHR
-  , -- | @parameters@ /must/ be a valid 'DisplayModeParametersKHR' structure
-    parameters :: DisplayModeParametersKHR
-  }
-  deriving (Typeable)
-deriving instance Show DisplayModeCreateInfoKHR
-
-instance ToCStruct DisplayModeCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayModeCreateInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DisplayModeCreateFlagsKHR)) (flags)
-    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr DisplayModeParametersKHR)) (parameters) . ($ ())
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr DisplayModeParametersKHR)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct DisplayModeCreateInfoKHR where
-  peekCStruct p = do
-    flags <- peek @DisplayModeCreateFlagsKHR ((p `plusPtr` 16 :: Ptr DisplayModeCreateFlagsKHR))
-    parameters <- peekCStruct @DisplayModeParametersKHR ((p `plusPtr` 20 :: Ptr DisplayModeParametersKHR))
-    pure $ DisplayModeCreateInfoKHR
-             flags parameters
-
-instance Zero DisplayModeCreateInfoKHR where
-  zero = DisplayModeCreateInfoKHR
-           zero
-           zero
-
-
--- | VkDisplayPlaneCapabilitiesKHR - Structure describing capabilities of a
--- mode and plane combination
---
--- = 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 'DisplayPlaneCapabilitiesKHR' are guaranteed to be
--- supported. Presentation requests specifying unsupported combinations
--- /may/ fail.
---
--- = See Also
---
--- 'DisplayPlaneAlphaFlagsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneCapabilities2KHR',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.SharedTypes.Offset2D',
--- 'getDisplayPlaneCapabilitiesKHR'
-data DisplayPlaneCapabilitiesKHR = DisplayPlaneCapabilitiesKHR
-  { -- | @supportedAlpha@ is a bitmask of 'DisplayPlaneAlphaFlagBitsKHR'
-    -- describing the supported alpha blending modes.
-    supportedAlpha :: DisplayPlaneAlphaFlagsKHR
-  , -- | @minSrcPosition@ is the minimum source rectangle offset supported by
-    -- this plane using the specified mode.
-    minSrcPosition :: Offset2D
-  , -- | @maxSrcPosition@ is the maximum source rectangle offset supported by
-    -- this plane using the specified mode. The @x@ and @y@ components of
-    -- @maxSrcPosition@ /must/ each be greater than or equal to the @x@ and @y@
-    -- components of @minSrcPosition@, respectively.
-    maxSrcPosition :: Offset2D
-  , -- | @minSrcExtent@ is the minimum source rectangle size supported by this
-    -- plane using the specified mode.
-    minSrcExtent :: Extent2D
-  , -- | @maxSrcExtent@ is the maximum source rectangle size supported by this
-    -- plane using the specified mode.
-    maxSrcExtent :: Extent2D
-  , -- | @minDstPosition@, @maxDstPosition@, @minDstExtent@, @maxDstExtent@ all
-    -- have similar semantics to their corresponding @*Src*@ equivalents, but
-    -- apply to the output region within the mode rather than the input region
-    -- within the source image. Unlike the @*Src*@ offsets, @minDstPosition@
-    -- and @maxDstPosition@ /may/ contain negative values.
-    minDstPosition :: Offset2D
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "maxDstPosition"
-    maxDstPosition :: Offset2D
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "minDstExtent"
-    minDstExtent :: Extent2D
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "maxDstExtent"
-    maxDstExtent :: Extent2D
-  }
-  deriving (Typeable)
-deriving instance Show DisplayPlaneCapabilitiesKHR
-
-instance ToCStruct DisplayPlaneCapabilitiesKHR where
-  withCStruct x f = allocaBytesAligned 68 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayPlaneCapabilitiesKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr DisplayPlaneAlphaFlagsKHR)) (supportedAlpha)
-    ContT $ pokeCStruct ((p `plusPtr` 4 :: Ptr Offset2D)) (minSrcPosition) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Offset2D)) (maxSrcPosition) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (minSrcExtent) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr Extent2D)) (maxSrcExtent) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 36 :: Ptr Offset2D)) (minDstPosition) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset2D)) (maxDstPosition) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 52 :: Ptr Extent2D)) (minDstExtent) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Extent2D)) (maxDstExtent) . ($ ())
-    lift $ f
-  cStructSize = 68
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 4 :: Ptr Offset2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Offset2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr Extent2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 36 :: Ptr Offset2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 52 :: Ptr Extent2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct DisplayPlaneCapabilitiesKHR where
-  peekCStruct p = do
-    supportedAlpha <- peek @DisplayPlaneAlphaFlagsKHR ((p `plusPtr` 0 :: Ptr DisplayPlaneAlphaFlagsKHR))
-    minSrcPosition <- peekCStruct @Offset2D ((p `plusPtr` 4 :: Ptr Offset2D))
-    maxSrcPosition <- peekCStruct @Offset2D ((p `plusPtr` 12 :: Ptr Offset2D))
-    minSrcExtent <- peekCStruct @Extent2D ((p `plusPtr` 20 :: Ptr Extent2D))
-    maxSrcExtent <- peekCStruct @Extent2D ((p `plusPtr` 28 :: Ptr Extent2D))
-    minDstPosition <- peekCStruct @Offset2D ((p `plusPtr` 36 :: Ptr Offset2D))
-    maxDstPosition <- peekCStruct @Offset2D ((p `plusPtr` 44 :: Ptr Offset2D))
-    minDstExtent <- peekCStruct @Extent2D ((p `plusPtr` 52 :: Ptr Extent2D))
-    maxDstExtent <- peekCStruct @Extent2D ((p `plusPtr` 60 :: Ptr Extent2D))
-    pure $ DisplayPlaneCapabilitiesKHR
-             supportedAlpha minSrcPosition maxSrcPosition minSrcExtent maxSrcExtent minDstPosition maxDstPosition minDstExtent maxDstExtent
-
-instance Zero DisplayPlaneCapabilitiesKHR where
-  zero = DisplayPlaneCapabilitiesKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDisplaySurfaceCreateInfoKHR - Structure specifying parameters of a
--- newly created display plane surface object
---
--- = 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
---     'getPhysicalDeviceDisplayPlanePropertiesKHR'
---
--- -   If the @planeReorderPossible@ member of the 'DisplayPropertiesKHR'
---     structure returned by 'getPhysicalDeviceDisplayPropertiesKHR' for
---     the display corresponding to @displayMode@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE' then @planeStackIndex@ /must/
---     be less than the number of display planes supported by the device as
---     determined by calling 'getPhysicalDeviceDisplayPlanePropertiesKHR';
---     otherwise @planeStackIndex@ /must/ equal the @currentStackIndex@
---     member of 'DisplayPlanePropertiesKHR' returned by
---     'getPhysicalDeviceDisplayPlanePropertiesKHR' for the display plane
---     corresponding to @displayMode@
---
--- -   If @alphaMode@ is 'DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR' then
---     @globalAlpha@ /must/ be between @0@ and @1@, inclusive
---
--- -   @alphaMode@ /must/ be @0@ or one of the bits present in the
---     @supportedAlpha@ member of 'DisplayPlaneCapabilitiesKHR' returned by
---     'getDisplayPlaneCapabilitiesKHR' for the display plane corresponding
---     to @displayMode@
---
--- -   The @width@ and @height@ members of @imageExtent@ /must/ be less
---     than the @maxImageDimensions2D@ member of
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be @0@
---
--- -   @displayMode@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR' handle
---
--- -   @transform@ /must/ be a valid 'SurfaceTransformFlagBitsKHR' value
---
--- -   @alphaMode@ /must/ be a valid 'DisplayPlaneAlphaFlagBitsKHR' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR',
--- 'DisplayPlaneAlphaFlagBitsKHR', 'DisplaySurfaceCreateFlagsKHR',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'SurfaceTransformFlagBitsKHR', 'createDisplayPlaneSurfaceKHR'
-data DisplaySurfaceCreateInfoKHR = DisplaySurfaceCreateInfoKHR
-  { -- | @flags@ is reserved for future use, and /must/ be zero.
-    flags :: DisplaySurfaceCreateFlagsKHR
-  , -- | @displayMode@ is a 'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR'
-    -- handle specifying the mode to use when displaying this surface.
-    displayMode :: DisplayModeKHR
-  , -- | @planeIndex@ is the plane on which this surface appears.
-    planeIndex :: Word32
-  , -- | @planeStackIndex@ is the z-order of the plane.
-    planeStackIndex :: Word32
-  , -- | @transform@ is a 'SurfaceTransformFlagBitsKHR' value specifying the
-    -- transformation to apply to images as part of the scanout operation.
-    transform :: SurfaceTransformFlagBitsKHR
-  , -- | @globalAlpha@ is the global alpha value. This value is ignored if
-    -- @alphaMode@ is not 'DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR'.
-    globalAlpha :: Float
-  , -- | @alphaMode@ is a 'DisplayPlaneAlphaFlagBitsKHR' value specifying the
-    -- type of alpha blending to use.
-    alphaMode :: DisplayPlaneAlphaFlagBitsKHR
-  , -- | @imageExtent@ The size of the presentable images to use with the
-    -- surface.
-    imageExtent :: Extent2D
-  }
-  deriving (Typeable)
-deriving instance Show DisplaySurfaceCreateInfoKHR
-
-instance ToCStruct DisplaySurfaceCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplaySurfaceCreateInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DisplaySurfaceCreateFlagsKHR)) (flags)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DisplayModeKHR)) (displayMode)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (planeIndex)
-    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (planeStackIndex)
-    lift $ poke ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR)) (transform)
-    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (globalAlpha))
-    lift $ poke ((p `plusPtr` 48 :: Ptr DisplayPlaneAlphaFlagBitsKHR)) (alphaMode)
-    ContT $ pokeCStruct ((p `plusPtr` 52 :: Ptr Extent2D)) (imageExtent) . ($ ())
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DisplayModeKHR)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
-    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))
-    lift $ poke ((p `plusPtr` 48 :: Ptr DisplayPlaneAlphaFlagBitsKHR)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 52 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct DisplaySurfaceCreateInfoKHR where
-  peekCStruct p = do
-    flags <- peek @DisplaySurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr DisplaySurfaceCreateFlagsKHR))
-    displayMode <- peek @DisplayModeKHR ((p `plusPtr` 24 :: Ptr DisplayModeKHR))
-    planeIndex <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    planeStackIndex <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
-    transform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR))
-    globalAlpha <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))
-    alphaMode <- peek @DisplayPlaneAlphaFlagBitsKHR ((p `plusPtr` 48 :: Ptr DisplayPlaneAlphaFlagBitsKHR))
-    imageExtent <- peekCStruct @Extent2D ((p `plusPtr` 52 :: Ptr Extent2D))
-    pure $ DisplaySurfaceCreateInfoKHR
-             flags displayMode planeIndex planeStackIndex transform ((\(CFloat a) -> a) globalAlpha) alphaMode imageExtent
-
-instance Zero DisplaySurfaceCreateInfoKHR where
-  zero = DisplaySurfaceCreateInfoKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDisplayModeCreateFlagsKHR - Reserved for future use
---
--- = Description
---
--- 'DisplayModeCreateFlagsKHR' is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
---
--- 'DisplayModeCreateInfoKHR'
-newtype DisplayModeCreateFlagsKHR = DisplayModeCreateFlagsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show DisplayModeCreateFlagsKHR where
-  showsPrec p = \case
-    DisplayModeCreateFlagsKHR x -> showParen (p >= 11) (showString "DisplayModeCreateFlagsKHR 0x" . showHex x)
-
-instance Read DisplayModeCreateFlagsKHR where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DisplayModeCreateFlagsKHR")
-                       v <- step readPrec
-                       pure (DisplayModeCreateFlagsKHR v)))
-
-
--- | VkDisplaySurfaceCreateFlagsKHR - Reserved for future use
---
--- = Description
---
--- 'DisplaySurfaceCreateFlagsKHR' is a bitmask type for setting a mask, but
--- is currently reserved for future use.
---
--- = See Also
---
--- 'DisplaySurfaceCreateInfoKHR'
-newtype DisplaySurfaceCreateFlagsKHR = DisplaySurfaceCreateFlagsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show DisplaySurfaceCreateFlagsKHR where
-  showsPrec p = \case
-    DisplaySurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "DisplaySurfaceCreateFlagsKHR 0x" . showHex x)
-
-instance Read DisplaySurfaceCreateFlagsKHR where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DisplaySurfaceCreateFlagsKHR")
-                       v <- step readPrec
-                       pure (DisplaySurfaceCreateFlagsKHR v)))
-
-
--- | VkDisplayPlaneAlphaFlagBitsKHR - Alpha blending type
---
--- = See Also
---
--- 'DisplayPlaneAlphaFlagsKHR', 'DisplaySurfaceCreateInfoKHR'
-newtype DisplayPlaneAlphaFlagBitsKHR = DisplayPlaneAlphaFlagBitsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR' specifies that the source image
--- will be treated as opaque.
-pattern DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = DisplayPlaneAlphaFlagBitsKHR 0x00000001
--- | '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 DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = DisplayPlaneAlphaFlagBitsKHR 0x00000002
--- | '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 DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = DisplayPlaneAlphaFlagBitsKHR 0x00000004
--- | 'DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR' is equivalent to
--- '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 DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = DisplayPlaneAlphaFlagBitsKHR 0x00000008
-
-type DisplayPlaneAlphaFlagsKHR = DisplayPlaneAlphaFlagBitsKHR
-
-instance Show DisplayPlaneAlphaFlagBitsKHR where
-  showsPrec p = \case
-    DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR -> showString "DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR"
-    DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR -> showString "DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR"
-    DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR -> showString "DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR"
-    DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR -> showString "DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR"
-    DisplayPlaneAlphaFlagBitsKHR x -> showParen (p >= 11) (showString "DisplayPlaneAlphaFlagBitsKHR 0x" . showHex x)
-
-instance Read DisplayPlaneAlphaFlagBitsKHR where
-  readPrec = parens (choose [("DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR", pure DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR)
-                            , ("DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR", pure DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR)
-                            , ("DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR", pure DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR)
-                            , ("DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR", pure DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DisplayPlaneAlphaFlagBitsKHR")
-                       v <- step readPrec
-                       pure (DisplayPlaneAlphaFlagBitsKHR v)))
-
-
--- | VkSurfaceTransformFlagBitsKHR - presentation transforms supported on a
--- device
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM',
--- 'DisplaySurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR',
--- 'SurfaceTransformFlagsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
-newtype SurfaceTransformFlagBitsKHR = SurfaceTransformFlagBitsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SURFACE_TRANSFORM_IDENTITY_BIT_KHR' specifies that image content is
--- presented without being transformed.
-pattern SURFACE_TRANSFORM_IDENTITY_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000001
--- | 'SURFACE_TRANSFORM_ROTATE_90_BIT_KHR' specifies that image content is
--- rotated 90 degrees clockwise.
-pattern SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000002
--- | 'SURFACE_TRANSFORM_ROTATE_180_BIT_KHR' specifies that image content is
--- rotated 180 degrees clockwise.
-pattern SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000004
--- | 'SURFACE_TRANSFORM_ROTATE_270_BIT_KHR' specifies that image content is
--- rotated 270 degrees clockwise.
-pattern SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000008
--- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR' specifies that image
--- content is mirrored horizontally.
-pattern SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000010
--- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR' specifies that
--- image content is mirrored horizontally, then rotated 90 degrees
--- clockwise.
-pattern SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000020
--- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR' specifies that
--- image content is mirrored horizontally, then rotated 180 degrees
--- clockwise.
-pattern SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000040
--- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR' specifies that
--- image content is mirrored horizontally, then rotated 270 degrees
--- clockwise.
-pattern SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000080
--- | '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 SURFACE_TRANSFORM_INHERIT_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000100
-
-type SurfaceTransformFlagsKHR = SurfaceTransformFlagBitsKHR
-
-instance Show SurfaceTransformFlagBitsKHR where
-  showsPrec p = \case
-    SURFACE_TRANSFORM_IDENTITY_BIT_KHR -> showString "SURFACE_TRANSFORM_IDENTITY_BIT_KHR"
-    SURFACE_TRANSFORM_ROTATE_90_BIT_KHR -> showString "SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"
-    SURFACE_TRANSFORM_ROTATE_180_BIT_KHR -> showString "SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"
-    SURFACE_TRANSFORM_ROTATE_270_BIT_KHR -> showString "SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"
-    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR -> showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"
-    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR -> showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"
-    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR -> showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"
-    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR -> showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"
-    SURFACE_TRANSFORM_INHERIT_BIT_KHR -> showString "SURFACE_TRANSFORM_INHERIT_BIT_KHR"
-    SurfaceTransformFlagBitsKHR x -> showParen (p >= 11) (showString "SurfaceTransformFlagBitsKHR 0x" . showHex x)
-
-instance Read SurfaceTransformFlagBitsKHR where
-  readPrec = parens (choose [("SURFACE_TRANSFORM_IDENTITY_BIT_KHR", pure SURFACE_TRANSFORM_IDENTITY_BIT_KHR)
-                            , ("SURFACE_TRANSFORM_ROTATE_90_BIT_KHR", pure SURFACE_TRANSFORM_ROTATE_90_BIT_KHR)
-                            , ("SURFACE_TRANSFORM_ROTATE_180_BIT_KHR", pure SURFACE_TRANSFORM_ROTATE_180_BIT_KHR)
-                            , ("SURFACE_TRANSFORM_ROTATE_270_BIT_KHR", pure SURFACE_TRANSFORM_ROTATE_270_BIT_KHR)
-                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR", pure SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR)
-                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR", pure SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR)
-                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR", pure SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR)
-                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR", pure SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR)
-                            , ("SURFACE_TRANSFORM_INHERIT_BIT_KHR", pure SURFACE_TRANSFORM_INHERIT_BIT_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SurfaceTransformFlagBitsKHR")
-                       v <- step readPrec
-                       pure (SurfaceTransformFlagBitsKHR v)))
-
-
-type KHR_DISPLAY_SPEC_VERSION = 23
-
--- No documentation found for TopLevel "VK_KHR_DISPLAY_SPEC_VERSION"
-pattern KHR_DISPLAY_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_DISPLAY_SPEC_VERSION = 23
-
-
-type KHR_DISPLAY_EXTENSION_NAME = "VK_KHR_display"
-
--- No documentation found for TopLevel "VK_KHR_DISPLAY_EXTENSION_NAME"
-pattern KHR_DISPLAY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_DISPLAY_EXTENSION_NAME = "VK_KHR_display"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs-boot
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_display  ( DisplayModeCreateInfoKHR
-                                                  , DisplayModeParametersKHR
-                                                  , DisplayModePropertiesKHR
-                                                  , DisplayPlaneCapabilitiesKHR
-                                                  , DisplayPlanePropertiesKHR
-                                                  , DisplayPropertiesKHR
-                                                  , DisplaySurfaceCreateInfoKHR
-                                                  ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DisplayModeCreateInfoKHR
-
-instance ToCStruct DisplayModeCreateInfoKHR
-instance Show DisplayModeCreateInfoKHR
-
-instance FromCStruct DisplayModeCreateInfoKHR
-
-
-data DisplayModeParametersKHR
-
-instance ToCStruct DisplayModeParametersKHR
-instance Show DisplayModeParametersKHR
-
-instance FromCStruct DisplayModeParametersKHR
-
-
-data DisplayModePropertiesKHR
-
-instance ToCStruct DisplayModePropertiesKHR
-instance Show DisplayModePropertiesKHR
-
-instance FromCStruct DisplayModePropertiesKHR
-
-
-data DisplayPlaneCapabilitiesKHR
-
-instance ToCStruct DisplayPlaneCapabilitiesKHR
-instance Show DisplayPlaneCapabilitiesKHR
-
-instance FromCStruct DisplayPlaneCapabilitiesKHR
-
-
-data DisplayPlanePropertiesKHR
-
-instance ToCStruct DisplayPlanePropertiesKHR
-instance Show DisplayPlanePropertiesKHR
-
-instance FromCStruct DisplayPlanePropertiesKHR
-
-
-data DisplayPropertiesKHR
-
-instance ToCStruct DisplayPropertiesKHR
-instance Show DisplayPropertiesKHR
-
-instance FromCStruct DisplayPropertiesKHR
-
-
-data DisplaySurfaceCreateInfoKHR
-
-instance ToCStruct DisplaySurfaceCreateInfoKHR
-instance Show DisplaySurfaceCreateInfoKHR
-
-instance FromCStruct DisplaySurfaceCreateInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs
+++ /dev/null
@@ -1,310 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_display_swapchain  ( createSharedSwapchainsKHR
-                                                            , DisplayPresentInfoKHR(..)
-                                                            , KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION
-                                                            , pattern KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION
-                                                            , KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME
-                                                            , pattern KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME
-                                                            , SurfaceKHR(..)
-                                                            , SwapchainKHR(..)
-                                                            , SwapchainCreateInfoKHR(..)
-                                                            , PresentModeKHR(..)
-                                                            , ColorSpaceKHR(..)
-                                                            , CompositeAlphaFlagBitsKHR(..)
-                                                            , CompositeAlphaFlagsKHR
-                                                            , SurfaceTransformFlagBitsKHR(..)
-                                                            , SurfaceTransformFlagsKHR
-                                                            , SwapchainCreateFlagBitsKHR(..)
-                                                            , SwapchainCreateFlagsKHR
-                                                            ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateSharedSwapchainsKHR))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.Core10.CommandBufferBuilding (Rect2D)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateInfoKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace (ColorSpaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (CompositeAlphaFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (CompositeAlphaFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (PresentModeKHR(..))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateInfoKHR(..))
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateSharedSwapchainsKHR
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (SwapchainCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr SwapchainKHR -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (SwapchainCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr SwapchainKHR -> IO Result
-
--- | vkCreateSharedSwapchainsKHR - Create multiple swapchains that share
--- presentable images
---
--- = 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.SwapchainCreateInfoKHR'
---     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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSwapchains@ is a pointer to an array of
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handles in which
---     the created swapchain objects will be returned.
---
--- = Description
---
--- 'createSharedSwapchainsKHR' is similar to
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR', except
--- that it takes an array of
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
--- 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
--- 'Graphics.Vulkan.Core10.Enums.Result.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
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfos@ /must/ be a valid pointer to an array of
---     @swapchainCount@ valid
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
---     structures
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSwapchains@ /must/ be a valid pointer to an array of
---     @swapchainCount@ 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
---     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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DISPLAY_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-createSharedSwapchainsKHR :: forall a io . (PokeChain a, MonadIO io) => Device -> ("createInfos" ::: Vector (SwapchainCreateInfoKHR a)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (("swapchains" ::: Vector SwapchainKHR))
-createSharedSwapchainsKHR device createInfos allocator = liftIO . evalContT $ do
-  let vkCreateSharedSwapchainsKHR' = mkVkCreateSharedSwapchainsKHR (pVkCreateSharedSwapchainsKHR (deviceCmds (device :: Device)))
-  pPCreateInfos <- ContT $ allocaBytesAligned @(SwapchainCreateInfoKHR _) ((Data.Vector.length (createInfos)) * 104) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCreateInfos `plusPtr` (104 * (i)) :: Ptr (SwapchainCreateInfoKHR _)) (e) . ($ ())) (createInfos)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSwapchains <- ContT $ bracket (callocBytes @SwapchainKHR ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
-  r <- lift $ vkCreateSharedSwapchainsKHR' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (pPCreateInfos) pAllocator (pPSwapchains)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSwapchains <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @SwapchainKHR ((pPSwapchains `advancePtrBytes` (8 * (i)) :: Ptr SwapchainKHR)))
-  pure $ (pSwapchains)
-
-
--- | VkDisplayPresentInfoKHR - Structure describing parameters of a queue
--- presentation to a swapchain
---
--- = 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
---     'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR'
---     structure returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPropertiesKHR'
---     for the display the present operation targets then @persistent@
---     /must/ be 'Graphics.Vulkan.Core10.BaseType.FALSE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DisplayPresentInfoKHR = DisplayPresentInfoKHR
-  { -- | @srcRect@ is a rectangular region of pixels to present. It /must/ be a
-    -- subset of the image being presented. If 'DisplayPresentInfoKHR' is not
-    -- specified, this region will be assumed to be the entire presentable
-    -- image.
-    srcRect :: Rect2D
-  , -- | @dstRect@ is a rectangular region within the visible region of the
-    -- swapchain’s display mode. If 'DisplayPresentInfoKHR' is not specified,
-    -- this region will be assumed to be the entire visible region of the
-    -- visible region of the swapchain’s mode. If the specified rectangle is a
-    -- subset of the display mode’s visible region, content from display planes
-    -- below the swapchain’s plane will be visible outside the rectangle. If
-    -- there are no planes below the swapchain’s, the area outside the
-    -- specified rectangle will be black. If portions of the specified
-    -- rectangle are outside of the display’s visible region, pixels mapping
-    -- only to those portions of the rectangle will be discarded.
-    dstRect :: Rect2D
-  , -- | @persistent@: If this is 'Graphics.Vulkan.Core10.BaseType.TRUE', the
-    -- display engine will enable buffered mode on displays that support it.
-    -- This allows the display engine to stop sending content to the display
-    -- until a new image is presented. The display will instead maintain a copy
-    -- of the last presented image. This allows less power to be used, but
-    -- /may/ increase presentation latency. If 'DisplayPresentInfoKHR' is not
-    -- specified, persistent mode will not be used.
-    persistent :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show DisplayPresentInfoKHR
-
-instance ToCStruct DisplayPresentInfoKHR where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayPresentInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Rect2D)) (srcRect) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (dstRect) . ($ ())
-    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (persistent))
-    lift $ f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Rect2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance FromCStruct DisplayPresentInfoKHR where
-  peekCStruct p = do
-    srcRect <- peekCStruct @Rect2D ((p `plusPtr` 16 :: Ptr Rect2D))
-    dstRect <- peekCStruct @Rect2D ((p `plusPtr` 32 :: Ptr Rect2D))
-    persistent <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
-    pure $ DisplayPresentInfoKHR
-             srcRect dstRect (bool32ToBool persistent)
-
-instance Zero DisplayPresentInfoKHR where
-  zero = DisplayPresentInfoKHR
-           zero
-           zero
-           zero
-
-
-type KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION = 10
-
--- No documentation found for TopLevel "VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION"
-pattern KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION = 10
-
-
-type KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME = "VK_KHR_display_swapchain"
-
--- No documentation found for TopLevel "VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME"
-pattern KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME = "VK_KHR_display_swapchain"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_display_swapchain  (DisplayPresentInfoKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DisplayPresentInfoKHR
-
-instance ToCStruct DisplayPresentInfoKHR
-instance Show DisplayPresentInfoKHR
-
-instance FromCStruct DisplayPresentInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_draw_indirect_count.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_draw_indirect_count.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_draw_indirect_count.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count  ( cmdDrawIndirectCountKHR
-                                                              , cmdDrawIndexedIndirectCountKHR
-                                                              , KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION
-                                                              , pattern KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION
-                                                              , KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME
-                                                              , pattern KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME
-                                                              ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count (cmdDrawIndexedIndirectCount)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count (cmdDrawIndirectCount)
--- No documentation found for TopLevel "vkCmdDrawIndirectCountKHR"
-cmdDrawIndirectCountKHR = cmdDrawIndirectCount
-
-
--- No documentation found for TopLevel "vkCmdDrawIndexedIndirectCountKHR"
-cmdDrawIndexedIndirectCountKHR = cmdDrawIndexedIndirectCount
-
-
-type KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION"
-pattern KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION = 1
-
-
-type KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME = "VK_KHR_draw_indirect_count"
-
--- No documentation found for TopLevel "VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME"
-pattern KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME = "VK_KHR_draw_indirect_count"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_driver_properties.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_driver_properties.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_driver_properties.hs
+++ /dev/null
@@ -1,129 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_driver_properties  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR
-                                                            , pattern DRIVER_ID_AMD_PROPRIETARY_KHR
-                                                            , pattern DRIVER_ID_AMD_OPEN_SOURCE_KHR
-                                                            , pattern DRIVER_ID_MESA_RADV_KHR
-                                                            , pattern DRIVER_ID_NVIDIA_PROPRIETARY_KHR
-                                                            , pattern DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR
-                                                            , pattern DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR
-                                                            , pattern DRIVER_ID_IMAGINATION_PROPRIETARY_KHR
-                                                            , pattern DRIVER_ID_QUALCOMM_PROPRIETARY_KHR
-                                                            , pattern DRIVER_ID_ARM_PROPRIETARY_KHR
-                                                            , pattern DRIVER_ID_GOOGLE_SWIFTSHADER_KHR
-                                                            , pattern DRIVER_ID_GGP_PROPRIETARY_KHR
-                                                            , pattern DRIVER_ID_BROADCOM_PROPRIETARY_KHR
-                                                            , pattern MAX_DRIVER_NAME_SIZE_KHR
-                                                            , pattern MAX_DRIVER_INFO_SIZE_KHR
-                                                            , DriverIdKHR
-                                                            , ConformanceVersionKHR
-                                                            , PhysicalDeviceDriverPropertiesKHR
-                                                            , KHR_DRIVER_PROPERTIES_SPEC_VERSION
-                                                            , pattern KHR_DRIVER_PROPERTIES_SPEC_VERSION
-                                                            , KHR_DRIVER_PROPERTIES_EXTENSION_NAME
-                                                            , pattern KHR_DRIVER_PROPERTIES_EXTENSION_NAME
-                                                            ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (ConformanceVersion)
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties)
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_AMD_OPEN_SOURCE))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_AMD_PROPRIETARY))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_ARM_PROPRIETARY))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_BROADCOM_PROPRIETARY))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_GGP_PROPRIETARY))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_GOOGLE_SWIFTSHADER))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_IMAGINATION_PROPRIETARY))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_INTEL_OPEN_SOURCE_MESA))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_INTEL_PROPRIETARY_WINDOWS))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_MESA_RADV))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_NVIDIA_PROPRIETARY))
-import Graphics.Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_QUALCOMM_PROPRIETARY))
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_DRIVER_INFO_SIZE)
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_DRIVER_NAME_SIZE)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_AMD_PROPRIETARY_KHR"
-pattern DRIVER_ID_AMD_PROPRIETARY_KHR = DRIVER_ID_AMD_PROPRIETARY
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR"
-pattern DRIVER_ID_AMD_OPEN_SOURCE_KHR = DRIVER_ID_AMD_OPEN_SOURCE
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_MESA_RADV_KHR"
-pattern DRIVER_ID_MESA_RADV_KHR = DRIVER_ID_MESA_RADV
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR"
-pattern DRIVER_ID_NVIDIA_PROPRIETARY_KHR = DRIVER_ID_NVIDIA_PROPRIETARY
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR"
-pattern DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR = DRIVER_ID_INTEL_PROPRIETARY_WINDOWS
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR"
-pattern DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR"
-pattern DRIVER_ID_IMAGINATION_PROPRIETARY_KHR = DRIVER_ID_IMAGINATION_PROPRIETARY
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR"
-pattern DRIVER_ID_QUALCOMM_PROPRIETARY_KHR = DRIVER_ID_QUALCOMM_PROPRIETARY
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_ARM_PROPRIETARY_KHR"
-pattern DRIVER_ID_ARM_PROPRIETARY_KHR = DRIVER_ID_ARM_PROPRIETARY
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR"
-pattern DRIVER_ID_GOOGLE_SWIFTSHADER_KHR = DRIVER_ID_GOOGLE_SWIFTSHADER
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_GGP_PROPRIETARY_KHR"
-pattern DRIVER_ID_GGP_PROPRIETARY_KHR = DRIVER_ID_GGP_PROPRIETARY
-
-
--- No documentation found for TopLevel "VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR"
-pattern DRIVER_ID_BROADCOM_PROPRIETARY_KHR = DRIVER_ID_BROADCOM_PROPRIETARY
-
-
--- No documentation found for TopLevel "VK_MAX_DRIVER_NAME_SIZE_KHR"
-pattern MAX_DRIVER_NAME_SIZE_KHR = MAX_DRIVER_NAME_SIZE
-
-
--- No documentation found for TopLevel "VK_MAX_DRIVER_INFO_SIZE_KHR"
-pattern MAX_DRIVER_INFO_SIZE_KHR = MAX_DRIVER_INFO_SIZE
-
-
--- No documentation found for TopLevel "VkDriverIdKHR"
-type DriverIdKHR = DriverId
-
-
--- No documentation found for TopLevel "VkConformanceVersionKHR"
-type ConformanceVersionKHR = ConformanceVersion
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceDriverPropertiesKHR"
-type PhysicalDeviceDriverPropertiesKHR = PhysicalDeviceDriverProperties
-
-
-type KHR_DRIVER_PROPERTIES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION"
-pattern KHR_DRIVER_PROPERTIES_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_DRIVER_PROPERTIES_SPEC_VERSION = 1
-
-
-type KHR_DRIVER_PROPERTIES_EXTENSION_NAME = "VK_KHR_driver_properties"
-
--- No documentation found for TopLevel "VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME"
-pattern KHR_DRIVER_PROPERTIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_DRIVER_PROPERTIES_EXTENSION_NAME = "VK_KHR_driver_properties"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_fence  ( pattern STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR
-                                                         , pattern FENCE_IMPORT_TEMPORARY_BIT_KHR
-                                                         , FenceImportFlagsKHR
-                                                         , FenceImportFlagBitsKHR
-                                                         , ExportFenceCreateInfoKHR
-                                                         , KHR_EXTERNAL_FENCE_SPEC_VERSION
-                                                         , pattern KHR_EXTERNAL_FENCE_SPEC_VERSION
-                                                         , KHR_EXTERNAL_FENCE_EXTENSION_NAME
-                                                         , pattern KHR_EXTERNAL_FENCE_EXTENSION_NAME
-                                                         ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence (ExportFenceCreateInfo)
-import Graphics.Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlagBits)
-import Graphics.Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
-import Graphics.Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
-import Graphics.Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlagBits(FENCE_IMPORT_TEMPORARY_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_FENCE_IMPORT_TEMPORARY_BIT_KHR"
-pattern FENCE_IMPORT_TEMPORARY_BIT_KHR = FENCE_IMPORT_TEMPORARY_BIT
-
-
--- No documentation found for TopLevel "VkFenceImportFlagsKHR"
-type FenceImportFlagsKHR = FenceImportFlags
-
-
--- No documentation found for TopLevel "VkFenceImportFlagBitsKHR"
-type FenceImportFlagBitsKHR = FenceImportFlagBits
-
-
--- No documentation found for TopLevel "VkExportFenceCreateInfoKHR"
-type ExportFenceCreateInfoKHR = ExportFenceCreateInfo
-
-
-type KHR_EXTERNAL_FENCE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_SPEC_VERSION"
-pattern KHR_EXTERNAL_FENCE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_FENCE_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_FENCE_EXTENSION_NAME = "VK_KHR_external_fence"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME"
-pattern KHR_EXTERNAL_FENCE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_FENCE_EXTENSION_NAME = "VK_KHR_external_fence"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_capabilities.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_capabilities.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_capabilities.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR
-                                                                      , pattern STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR
-                                                                      , pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR
-                                                                      , pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR
-                                                                      , pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR
-                                                                      , pattern EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR
-                                                                      , pattern EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR
-                                                                      , pattern EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR
-                                                                      , getPhysicalDeviceExternalFencePropertiesKHR
-                                                                      , ExternalFenceHandleTypeFlagsKHR
-                                                                      , ExternalFenceFeatureFlagsKHR
-                                                                      , ExternalFenceHandleTypeFlagBitsKHR
-                                                                      , ExternalFenceFeatureFlagBitsKHR
-                                                                      , PhysicalDeviceExternalFenceInfoKHR
-                                                                      , ExternalFencePropertiesKHR
-                                                                      , KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION
-                                                                      , pattern KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION
-                                                                      , KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME
-                                                                      , pattern KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME
-                                                                      , PhysicalDeviceIDPropertiesKHR
-                                                                      , pattern LUID_SIZE_KHR
-                                                                      ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (getPhysicalDeviceExternalFenceProperties)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (ExternalFenceProperties)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (PhysicalDeviceExternalFenceInfo)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlagBits(EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlagBits(EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits(EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits(EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits(EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits(EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO))
-import Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities (PhysicalDeviceIDPropertiesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities (pattern LUID_SIZE_KHR)
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"
-pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"
-pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"
-pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR"
-pattern EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR"
-pattern EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR"
-pattern EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT
-
-
--- No documentation found for TopLevel "vkGetPhysicalDeviceExternalFencePropertiesKHR"
-getPhysicalDeviceExternalFencePropertiesKHR = getPhysicalDeviceExternalFenceProperties
-
-
--- No documentation found for TopLevel "VkExternalFenceHandleTypeFlagsKHR"
-type ExternalFenceHandleTypeFlagsKHR = ExternalFenceHandleTypeFlags
-
-
--- No documentation found for TopLevel "VkExternalFenceFeatureFlagsKHR"
-type ExternalFenceFeatureFlagsKHR = ExternalFenceFeatureFlags
-
-
--- No documentation found for TopLevel "VkExternalFenceHandleTypeFlagBitsKHR"
-type ExternalFenceHandleTypeFlagBitsKHR = ExternalFenceHandleTypeFlagBits
-
-
--- No documentation found for TopLevel "VkExternalFenceFeatureFlagBitsKHR"
-type ExternalFenceFeatureFlagBitsKHR = ExternalFenceFeatureFlagBits
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceExternalFenceInfoKHR"
-type PhysicalDeviceExternalFenceInfoKHR = PhysicalDeviceExternalFenceInfo
-
-
--- No documentation found for TopLevel "VkExternalFencePropertiesKHR"
-type ExternalFencePropertiesKHR = ExternalFenceProperties
-
-
-type KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION"
-pattern KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_fence_capabilities"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME"
-pattern KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_fence_capabilities"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs
+++ /dev/null
@@ -1,422 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd  ( getFenceFdKHR
-                                                            , importFenceFdKHR
-                                                            , ImportFenceFdInfoKHR(..)
-                                                            , FenceGetFdInfoKHR(..)
-                                                            , KHR_EXTERNAL_FENCE_FD_SPEC_VERSION
-                                                            , pattern KHR_EXTERNAL_FENCE_FD_SPEC_VERSION
-                                                            , KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME
-                                                            , pattern KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME
-                                                            ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Foreign.C.Types (CInt(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CInt)
-import Foreign.C.Types (CInt(CInt))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetFenceFdKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkImportFenceFdKHR))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits)
-import Graphics.Vulkan.Core10.Handles (Fence)
-import Graphics.Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetFenceFdKHR
-  :: FunPtr (Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result) -> Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result
-
--- | vkGetFenceFdKHR - Get a POSIX file descriptor handle for a fence
---
--- = Parameters
---
--- -   @device@ is the logical device that created the fence being
---     exported.
---
--- -   @pGetFdInfo@ is a pointer to a 'FenceGetFdInfoKHR' structure
---     containing parameters of the export operation.
---
--- -   @pFd@ will return the file descriptor representing the fence
---     payload.
---
--- = Description
---
--- Each call to 'getFenceFdKHR' /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
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT'
--- and the fence is signaled at the time 'getFenceFdKHR' 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence State>.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'FenceGetFdInfoKHR'
-getFenceFdKHR :: forall io . MonadIO io => Device -> FenceGetFdInfoKHR -> io (("fd" ::: Int32))
-getFenceFdKHR device getFdInfo = liftIO . evalContT $ do
-  let vkGetFenceFdKHR' = mkVkGetFenceFdKHR (pVkGetFenceFdKHR (deviceCmds (device :: Device)))
-  pGetFdInfo <- ContT $ withCStruct (getFdInfo)
-  pPFd <- ContT $ bracket (callocBytes @CInt 4) free
-  r <- lift $ vkGetFenceFdKHR' (deviceHandle (device)) pGetFdInfo (pPFd)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pFd <- lift $ peek @CInt pPFd
-  pure $ (((\(CInt a) -> a) pFd))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkImportFenceFdKHR
-  :: FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result) -> Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result
-
--- | vkImportFenceFdKHR - Import a fence from a POSIX file descriptor
---
--- = Parameters
---
--- -   @device@ is the logical device that created the fence.
---
--- -   @pImportFenceFdInfo@ is a pointer to a 'ImportFenceFdInfoKHR'
---     structure specifying the fence and import parameters.
---
--- = 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.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'ImportFenceFdInfoKHR'
-importFenceFdKHR :: forall io . MonadIO io => Device -> ImportFenceFdInfoKHR -> io ()
-importFenceFdKHR device importFenceFdInfo = liftIO . evalContT $ do
-  let vkImportFenceFdKHR' = mkVkImportFenceFdKHR (pVkImportFenceFdKHR (deviceCmds (device :: Device)))
-  pImportFenceFdInfo <- ContT $ withCStruct (importFenceFdInfo)
-  r <- lift $ vkImportFenceFdKHR' (deviceHandle (device)) pImportFenceFdInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkImportFenceFdInfoKHR - (None)
---
--- = Description
---
--- The handle types supported by @handleType@ are:
---
--- +---------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
--- | Handle Type                                                                                             | Transference         | Permanence Supported  |
--- +=========================================================================================================+======================+=======================+
--- | 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT' | Reference            | Temporary,Permanent   |
--- +---------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
--- | 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT'   | Copy                 | Temporary             |
--- +---------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
---
--- Handle Types Supported by 'ImportFenceFdInfoKHR'
---
--- == Valid Usage
---
--- -   @handleType@ /must/ be a value included in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fence-handletypes-fd Handle Types Supported by >
---     table
---
--- -   @fd@ /must/ obey any requirements listed for @handleType@ in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility external fence handle types compatibility>
---
--- If @handleType@ is
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.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 'Graphics.Vulkan.Core10.Handles.Fence'
--- 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 does not need to be waited for. It is consistent
--- with the option for implementations to return a @-1@ file descriptor
--- when exporting a
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT'
--- from a 'Graphics.Vulkan.Core10.Handles.Fence' which is signaled.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @fence@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Fence'
---     handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits'
---     values
---
--- -   @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
---     value
---
--- == Host Synchronization
---
--- -   Host access to @fence@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Handles.Fence',
--- 'Graphics.Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'importFenceFdKHR'
-data ImportFenceFdInfoKHR = ImportFenceFdInfoKHR
-  { -- | @fence@ is the fence into which the payload will be imported.
-    fence :: Fence
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits'
-    -- specifying additional parameters for the fence payload import operation.
-    flags :: FenceImportFlags
-  , -- | @handleType@ specifies the type of @fd@.
-    handleType :: ExternalFenceHandleTypeFlagBits
-  , -- | @fd@ is the external handle to import.
-    fd :: Int32
-  }
-  deriving (Typeable)
-deriving instance Show ImportFenceFdInfoKHR
-
-instance ToCStruct ImportFenceFdInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImportFenceFdInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Fence)) (fence)
-    poke ((p `plusPtr` 24 :: Ptr FenceImportFlags)) (flags)
-    poke ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits)) (handleType)
-    poke ((p `plusPtr` 32 :: Ptr CInt)) (CInt (fd))
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Fence)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr CInt)) (CInt (zero))
-    f
-
-instance FromCStruct ImportFenceFdInfoKHR where
-  peekCStruct p = do
-    fence <- peek @Fence ((p `plusPtr` 16 :: Ptr Fence))
-    flags <- peek @FenceImportFlags ((p `plusPtr` 24 :: Ptr FenceImportFlags))
-    handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits))
-    fd <- peek @CInt ((p `plusPtr` 32 :: Ptr CInt))
-    pure $ ImportFenceFdInfoKHR
-             fence flags handleType ((\(CInt a) -> a) fd)
-
-instance Storable ImportFenceFdInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImportFenceFdInfoKHR where
-  zero = ImportFenceFdInfoKHR
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkFenceGetFdInfoKHR - Structure describing a POSIX FD fence export
--- operation
---
--- = Description
---
--- The properties of the file descriptor returned depend on the value of
--- @handleType@. See
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
--- 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.ExportFenceCreateInfo'::@handleTypes@
---     when @fence@’s current payload was created
---
--- -   If @handleType@ refers to a handle type with copy payload
---     transference semantics, @fence@ /must/ be signaled, or have an
---     associated
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation>
---     pending execution
---
--- -   @fence@ /must/ not currently have its payload replaced by an
---     imported payload as described below in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence Payloads>
---     unless that imported payload’s handle type was included in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties'::@exportFromImportedHandleTypes@
---     for @handleType@
---
--- -   @handleType@ /must/ be defined as a POSIX file descriptor handle
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @fence@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Fence'
---     handle
---
--- -   @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Handles.Fence',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getFenceFdKHR'
-data FenceGetFdInfoKHR = FenceGetFdInfoKHR
-  { -- | @fence@ is the fence from which state will be exported.
-    fence :: Fence
-  , -- | @handleType@ is the type of handle requested.
-    handleType :: ExternalFenceHandleTypeFlagBits
-  }
-  deriving (Typeable)
-deriving instance Show FenceGetFdInfoKHR
-
-instance ToCStruct FenceGetFdInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p FenceGetFdInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Fence)) (fence)
-    poke ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits)) (handleType)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Fence)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits)) (zero)
-    f
-
-instance FromCStruct FenceGetFdInfoKHR where
-  peekCStruct p = do
-    fence <- peek @Fence ((p `plusPtr` 16 :: Ptr Fence))
-    handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits))
-    pure $ FenceGetFdInfoKHR
-             fence handleType
-
-instance Storable FenceGetFdInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero FenceGetFdInfoKHR where
-  zero = FenceGetFdInfoKHR
-           zero
-           zero
-
-
-type KHR_EXTERNAL_FENCE_FD_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION"
-pattern KHR_EXTERNAL_FENCE_FD_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_FENCE_FD_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME = "VK_KHR_external_fence_fd"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME"
-pattern KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME = "VK_KHR_external_fence_fd"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd  ( FenceGetFdInfoKHR
-                                                            , ImportFenceFdInfoKHR
-                                                            ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data FenceGetFdInfoKHR
-
-instance ToCStruct FenceGetFdInfoKHR
-instance Show FenceGetFdInfoKHR
-
-instance FromCStruct FenceGetFdInfoKHR
-
-
-data ImportFenceFdInfoKHR
-
-instance ToCStruct ImportFenceFdInfoKHR
-instance Show ImportFenceFdInfoKHR
-
-instance FromCStruct ImportFenceFdInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
+++ /dev/null
@@ -1,532 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32  ( getFenceWin32HandleKHR
-                                                               , importFenceWin32HandleKHR
-                                                               , ImportFenceWin32HandleInfoKHR(..)
-                                                               , ExportFenceWin32HandleInfoKHR(..)
-                                                               , FenceGetWin32HandleInfoKHR(..)
-                                                               , KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION
-                                                               , pattern KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION
-                                                               , KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME
-                                                               , pattern KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME
-                                                               , HANDLE
-                                                               , DWORD
-                                                               , LPCWSTR
-                                                               , SECURITY_ATTRIBUTES
-                                                               ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Extensions.WSITypes (DWORD)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetFenceWin32HandleKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkImportFenceWin32HandleKHR))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits)
-import Graphics.Vulkan.Core10.Handles (Fence)
-import Graphics.Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Extensions.WSITypes (HANDLE)
-import Graphics.Vulkan.Extensions.WSITypes (LPCWSTR)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (DWORD)
-import Graphics.Vulkan.Extensions.WSITypes (HANDLE)
-import Graphics.Vulkan.Extensions.WSITypes (LPCWSTR)
-import Graphics.Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetFenceWin32HandleKHR
-  :: FunPtr (Ptr Device_T -> Ptr FenceGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result) -> Ptr Device_T -> Ptr FenceGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result
-
--- | vkGetFenceWin32HandleKHR - Get a Windows HANDLE for a fence
---
--- = Parameters
---
--- -   @device@ is the logical device that created the fence being
---     exported.
---
--- -   @pGetWin32HandleInfo@ is a pointer to a 'FenceGetWin32HandleInfoKHR'
---     structure containing parameters of the export operation.
---
--- -   @pHandle@ will return the Windows handle representing the fence
---     state.
---
--- = Description
---
--- For handle types defined as NT handles, the handles returned by
--- 'getFenceWin32HandleKHR' 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence Payloads>.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'FenceGetWin32HandleInfoKHR'
-getFenceWin32HandleKHR :: forall io . MonadIO io => Device -> FenceGetWin32HandleInfoKHR -> io (HANDLE)
-getFenceWin32HandleKHR device getWin32HandleInfo = liftIO . evalContT $ do
-  let vkGetFenceWin32HandleKHR' = mkVkGetFenceWin32HandleKHR (pVkGetFenceWin32HandleKHR (deviceCmds (device :: Device)))
-  pGetWin32HandleInfo <- ContT $ withCStruct (getWin32HandleInfo)
-  pPHandle <- ContT $ bracket (callocBytes @HANDLE 8) free
-  r <- lift $ vkGetFenceWin32HandleKHR' (deviceHandle (device)) pGetWin32HandleInfo (pPHandle)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pHandle <- lift $ peek @HANDLE pPHandle
-  pure $ (pHandle)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkImportFenceWin32HandleKHR
-  :: FunPtr (Ptr Device_T -> Ptr ImportFenceWin32HandleInfoKHR -> IO Result) -> Ptr Device_T -> Ptr ImportFenceWin32HandleInfoKHR -> IO Result
-
--- | vkImportFenceWin32HandleKHR - Import a fence from a Windows HANDLE
---
--- = Parameters
---
--- -   @device@ is the logical device that created the fence.
---
--- -   @pImportFenceWin32HandleInfo@ is a pointer to a
---     'ImportFenceWin32HandleInfoKHR' structure specifying the fence and
---     import parameters.
---
--- = 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.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'ImportFenceWin32HandleInfoKHR'
-importFenceWin32HandleKHR :: forall io . MonadIO io => Device -> ImportFenceWin32HandleInfoKHR -> io ()
-importFenceWin32HandleKHR device importFenceWin32HandleInfo = liftIO . evalContT $ do
-  let vkImportFenceWin32HandleKHR' = mkVkImportFenceWin32HandleKHR (pVkImportFenceWin32HandleKHR (deviceCmds (device :: Device)))
-  pImportFenceWin32HandleInfo <- ContT $ withCStruct (importFenceWin32HandleInfo)
-  r <- lift $ vkImportFenceWin32HandleKHR' (deviceHandle (device)) pImportFenceWin32HandleInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkImportFenceWin32HandleInfoKHR - (None)
---
--- = Description
---
--- The handle types supported by @handleType@ are:
---
--- +----------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
--- | Handle Type                                                                                                    | Transference         | Permanence Supported  |
--- +================================================================================================================+======================+=======================+
--- | 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT'     | Reference            | Temporary,Permanent   |
--- +----------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
--- | 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' | Reference            | Temporary,Permanent   |
--- +----------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
---
--- Handle Types Supported by 'ImportFenceWin32HandleInfoKHR'
---
--- == Valid Usage
---
--- -   @handleType@ /must/ be a value included in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fence-handletypes-win32 Handle Types Supported by >
---     table
---
--- -   If @handleType@ is not
---     'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT',
---     @name@ /must/ be @NULL@
---
--- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/
---     name a valid synchronization primitive of the type specified by
---     @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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility external fence handle types compatibility>
---
--- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for
---     @handleType@ in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility external fence handle types compatibility>
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @fence@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Fence'
---     handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits'
---     values
---
--- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
---     value
---
--- == Host Synchronization
---
--- -   Host access to @fence@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Handles.Fence',
--- 'Graphics.Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'importFenceWin32HandleKHR'
-data ImportFenceWin32HandleInfoKHR = ImportFenceWin32HandleInfoKHR
-  { -- | @fence@ is the fence into which the state will be imported.
-    fence :: Fence
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits'
-    -- specifying additional parameters for the fence payload import operation.
-    flags :: FenceImportFlags
-  , -- | @handleType@ specifies the type of @handle@.
-    handleType :: ExternalFenceHandleTypeFlagBits
-  , -- | @handle@ is the external handle to import, or @NULL@.
-    handle :: HANDLE
-  , -- | @name@ is a null-terminated UTF-16 string naming the underlying
-    -- synchronization primitive to import, or @NULL@.
-    name :: LPCWSTR
-  }
-  deriving (Typeable)
-deriving instance Show ImportFenceWin32HandleInfoKHR
-
-instance ToCStruct ImportFenceWin32HandleInfoKHR where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImportFenceWin32HandleInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Fence)) (fence)
-    poke ((p `plusPtr` 24 :: Ptr FenceImportFlags)) (flags)
-    poke ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits)) (handleType)
-    poke ((p `plusPtr` 32 :: Ptr HANDLE)) (handle)
-    poke ((p `plusPtr` 40 :: Ptr LPCWSTR)) (name)
-    f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Fence)) (zero)
-    f
-
-instance FromCStruct ImportFenceWin32HandleInfoKHR where
-  peekCStruct p = do
-    fence <- peek @Fence ((p `plusPtr` 16 :: Ptr Fence))
-    flags <- peek @FenceImportFlags ((p `plusPtr` 24 :: Ptr FenceImportFlags))
-    handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits))
-    handle <- peek @HANDLE ((p `plusPtr` 32 :: Ptr HANDLE))
-    name <- peek @LPCWSTR ((p `plusPtr` 40 :: Ptr LPCWSTR))
-    pure $ ImportFenceWin32HandleInfoKHR
-             fence flags handleType handle name
-
-instance Storable ImportFenceWin32HandleInfoKHR where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImportFenceWin32HandleInfoKHR where
-  zero = ImportFenceWin32HandleInfoKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkExportFenceWin32HandleInfoKHR - Structure specifying additional
--- attributes of Windows handles exported from a fence
---
--- = Description
---
--- If
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'
--- is not present in the same @pNext@ chain, this structure is ignored.
---
--- If
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'
--- is present in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Fence.FenceCreateInfo' with a Windows
--- @handleType@, but either 'ExportFenceWin32HandleInfoKHR' is not present
--- in the @pNext@ chain, or if it is but @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:
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
---
--- [1]
---     <https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights>
---
--- == Valid Usage
---
--- -   If
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'::@handleTypes@
---     does not include
---     'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT',
---     a 'ExportFenceWin32HandleInfoKHR' structure /must/ not be included
---     in the @pNext@ chain of
---     'Graphics.Vulkan.Core10.Fence.FenceCreateInfo'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR'
---
--- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExportFenceWin32HandleInfoKHR = ExportFenceWin32HandleInfoKHR
-  { -- | @pAttributes@ is a pointer to a Windows
-    -- 'Graphics.Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' structure
-    -- specifying security attributes of the handle.
-    attributes :: Ptr SECURITY_ATTRIBUTES
-  , -- | @dwAccess@ is a 'Graphics.Vulkan.Extensions.WSITypes.DWORD' specifying
-    -- access rights of the handle.
-    dwAccess :: DWORD
-  , -- | @name@ is a null-terminated UTF-16 string to associate with the
-    -- underlying synchronization primitive referenced by NT handles exported
-    -- from the created fence.
-    name :: LPCWSTR
-  }
-  deriving (Typeable)
-deriving instance Show ExportFenceWin32HandleInfoKHR
-
-instance ToCStruct ExportFenceWin32HandleInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExportFenceWin32HandleInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES))) (attributes)
-    poke ((p `plusPtr` 24 :: Ptr DWORD)) (dwAccess)
-    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (name)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr DWORD)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (zero)
-    f
-
-instance FromCStruct ExportFenceWin32HandleInfoKHR where
-  peekCStruct p = do
-    pAttributes <- peek @(Ptr SECURITY_ATTRIBUTES) ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES)))
-    dwAccess <- peek @DWORD ((p `plusPtr` 24 :: Ptr DWORD))
-    name <- peek @LPCWSTR ((p `plusPtr` 32 :: Ptr LPCWSTR))
-    pure $ ExportFenceWin32HandleInfoKHR
-             pAttributes dwAccess name
-
-instance Storable ExportFenceWin32HandleInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExportFenceWin32HandleInfoKHR where
-  zero = ExportFenceWin32HandleInfoKHR
-           zero
-           zero
-           zero
-
-
--- | VkFenceGetWin32HandleInfoKHR - Structure describing a Win32 handle fence
--- export operation
---
--- = Description
---
--- The properties of the handle returned depend on the value of
--- @handleType@. See
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
--- 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.ExportFenceCreateInfo'::@handleTypes@
---     when the @fence@’s current payload was created
---
--- -   If @handleType@ is defined as an NT handle, 'getFenceWin32HandleKHR'
---     /must/ be called no more than once for each valid unique combination
---     of @fence@ and @handleType@
---
--- -   @fence@ /must/ not currently have its payload replaced by an
---     imported payload as described below in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence Payloads>
---     unless that imported payload’s handle type was included in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties'::@exportFromImportedHandleTypes@
---     for @handleType@
---
--- -   If @handleType@ refers to a handle type with copy payload
---     transference semantics, @fence@ /must/ be signaled, or have an
---     associated
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation>
---     pending execution
---
--- -   @handleType@ /must/ be defined as an NT handle or a global share
---     handle
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @fence@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Fence'
---     handle
---
--- -   @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Handles.Fence',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getFenceWin32HandleKHR'
-data FenceGetWin32HandleInfoKHR = FenceGetWin32HandleInfoKHR
-  { -- | @fence@ is the fence from which state will be exported.
-    fence :: Fence
-  , -- | @handleType@ is the type of handle requested.
-    handleType :: ExternalFenceHandleTypeFlagBits
-  }
-  deriving (Typeable)
-deriving instance Show FenceGetWin32HandleInfoKHR
-
-instance ToCStruct FenceGetWin32HandleInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p FenceGetWin32HandleInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Fence)) (fence)
-    poke ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits)) (handleType)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Fence)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits)) (zero)
-    f
-
-instance FromCStruct FenceGetWin32HandleInfoKHR where
-  peekCStruct p = do
-    fence <- peek @Fence ((p `plusPtr` 16 :: Ptr Fence))
-    handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits))
-    pure $ FenceGetWin32HandleInfoKHR
-             fence handleType
-
-instance Storable FenceGetWin32HandleInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero FenceGetWin32HandleInfoKHR where
-  zero = FenceGetWin32HandleInfoKHR
-           zero
-           zero
-
-
-type KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION"
-pattern KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME = "VK_KHR_external_fence_win32"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME"
-pattern KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME = "VK_KHR_external_fence_win32"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32  ( ExportFenceWin32HandleInfoKHR
-                                                               , FenceGetWin32HandleInfoKHR
-                                                               , ImportFenceWin32HandleInfoKHR
-                                                               ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExportFenceWin32HandleInfoKHR
-
-instance ToCStruct ExportFenceWin32HandleInfoKHR
-instance Show ExportFenceWin32HandleInfoKHR
-
-instance FromCStruct ExportFenceWin32HandleInfoKHR
-
-
-data FenceGetWin32HandleInfoKHR
-
-instance ToCStruct FenceGetWin32HandleInfoKHR
-instance Show FenceGetWin32HandleInfoKHR
-
-instance FromCStruct FenceGetWin32HandleInfoKHR
-
-
-data ImportFenceWin32HandleInfoKHR
-
-instance ToCStruct ImportFenceWin32HandleInfoKHR
-instance Show ImportFenceWin32HandleInfoKHR
-
-instance FromCStruct ImportFenceWin32HandleInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory.hs
+++ /dev/null
@@ -1,69 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_memory  ( pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR
-                                                          , pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR
-                                                          , pattern STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR
-                                                          , pattern ERROR_INVALID_EXTERNAL_HANDLE_KHR
-                                                          , pattern QUEUE_FAMILY_EXTERNAL_KHR
-                                                          , ExternalMemoryImageCreateInfoKHR
-                                                          , ExternalMemoryBufferCreateInfoKHR
-                                                          , ExportMemoryAllocateInfoKHR
-                                                          , KHR_EXTERNAL_MEMORY_SPEC_VERSION
-                                                          , pattern KHR_EXTERNAL_MEMORY_SPEC_VERSION
-                                                          , KHR_EXTERNAL_MEMORY_EXTENSION_NAME
-                                                          , pattern KHR_EXTERNAL_MEMORY_EXTENSION_NAME
-                                                          ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExportMemoryAllocateInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryBufferCreateInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryImageCreateInfo)
-import Graphics.Vulkan.Core10.Enums.Result (Result(ERROR_INVALID_EXTERNAL_HANDLE))
-import Graphics.Vulkan.Core10.APIConstants (pattern QUEUE_FAMILY_EXTERNAL)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR"
-pattern STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO
-
-
--- No documentation found for TopLevel "VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR"
-pattern ERROR_INVALID_EXTERNAL_HANDLE_KHR = ERROR_INVALID_EXTERNAL_HANDLE
-
-
--- No documentation found for TopLevel "VK_QUEUE_FAMILY_EXTERNAL_KHR"
-pattern QUEUE_FAMILY_EXTERNAL_KHR = QUEUE_FAMILY_EXTERNAL
-
-
--- No documentation found for TopLevel "VkExternalMemoryImageCreateInfoKHR"
-type ExternalMemoryImageCreateInfoKHR = ExternalMemoryImageCreateInfo
-
-
--- No documentation found for TopLevel "VkExternalMemoryBufferCreateInfoKHR"
-type ExternalMemoryBufferCreateInfoKHR = ExternalMemoryBufferCreateInfo
-
-
--- No documentation found for TopLevel "VkExportMemoryAllocateInfoKHR"
-type ExportMemoryAllocateInfoKHR = ExportMemoryAllocateInfo
-
-
-type KHR_EXTERNAL_MEMORY_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION"
-pattern KHR_EXTERNAL_MEMORY_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_MEMORY_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_MEMORY_EXTENSION_NAME = "VK_KHR_external_memory"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME"
-pattern KHR_EXTERNAL_MEMORY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_MEMORY_EXTENSION_NAME = "VK_KHR_external_memory"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs
+++ /dev/null
@@ -1,193 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR
-                                                                       , pattern STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR
-                                                                       , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR
-                                                                       , pattern STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR
-                                                                       , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR
-                                                                       , pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR
-                                                                       , pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR
-                                                                       , pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR
-                                                                       , pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR
-                                                                       , pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR
-                                                                       , pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR
-                                                                       , pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR
-                                                                       , pattern EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR
-                                                                       , pattern EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR
-                                                                       , pattern EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR
-                                                                       , getPhysicalDeviceExternalBufferPropertiesKHR
-                                                                       , pattern LUID_SIZE_KHR
-                                                                       , ExternalMemoryHandleTypeFlagsKHR
-                                                                       , ExternalMemoryFeatureFlagsKHR
-                                                                       , ExternalMemoryHandleTypeFlagBitsKHR
-                                                                       , ExternalMemoryFeatureFlagBitsKHR
-                                                                       , ExternalMemoryPropertiesKHR
-                                                                       , PhysicalDeviceExternalImageFormatInfoKHR
-                                                                       , ExternalImageFormatPropertiesKHR
-                                                                       , PhysicalDeviceExternalBufferInfoKHR
-                                                                       , ExternalBufferPropertiesKHR
-                                                                       , PhysicalDeviceIDPropertiesKHR
-                                                                       , KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION
-                                                                       , pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION
-                                                                       , KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
-                                                                       , pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
-                                                                       ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (getPhysicalDeviceExternalBufferProperties)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalBufferProperties)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalImageFormatProperties)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalMemoryProperties)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalBufferInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalImageFormatInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceIDProperties)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlagBits(EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlagBits(EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlagBits(EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT))
-import Graphics.Vulkan.Core10.APIConstants (pattern LUID_SIZE)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR"
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR"
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR"
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR"
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR"
-pattern EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR"
-pattern EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR"
-pattern EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT
-
-
--- No documentation found for TopLevel "vkGetPhysicalDeviceExternalBufferPropertiesKHR"
-getPhysicalDeviceExternalBufferPropertiesKHR = getPhysicalDeviceExternalBufferProperties
-
-
--- No documentation found for TopLevel "VK_LUID_SIZE_KHR"
-pattern LUID_SIZE_KHR = LUID_SIZE
-
-
--- No documentation found for TopLevel "VkExternalMemoryHandleTypeFlagsKHR"
-type ExternalMemoryHandleTypeFlagsKHR = ExternalMemoryHandleTypeFlags
-
-
--- No documentation found for TopLevel "VkExternalMemoryFeatureFlagsKHR"
-type ExternalMemoryFeatureFlagsKHR = ExternalMemoryFeatureFlags
-
-
--- No documentation found for TopLevel "VkExternalMemoryHandleTypeFlagBitsKHR"
-type ExternalMemoryHandleTypeFlagBitsKHR = ExternalMemoryHandleTypeFlagBits
-
-
--- No documentation found for TopLevel "VkExternalMemoryFeatureFlagBitsKHR"
-type ExternalMemoryFeatureFlagBitsKHR = ExternalMemoryFeatureFlagBits
-
-
--- No documentation found for TopLevel "VkExternalMemoryPropertiesKHR"
-type ExternalMemoryPropertiesKHR = ExternalMemoryProperties
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceExternalImageFormatInfoKHR"
-type PhysicalDeviceExternalImageFormatInfoKHR = PhysicalDeviceExternalImageFormatInfo
-
-
--- No documentation found for TopLevel "VkExternalImageFormatPropertiesKHR"
-type ExternalImageFormatPropertiesKHR = ExternalImageFormatProperties
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceExternalBufferInfoKHR"
-type PhysicalDeviceExternalBufferInfoKHR = PhysicalDeviceExternalBufferInfo
-
-
--- No documentation found for TopLevel "VkExternalBufferPropertiesKHR"
-type ExternalBufferPropertiesKHR = ExternalBufferProperties
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceIDPropertiesKHR"
-type PhysicalDeviceIDPropertiesKHR = PhysicalDeviceIDProperties
-
-
-type KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION"
-pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_memory_capabilities"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME"
-pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_memory_capabilities"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
+++ /dev/null
@@ -1,397 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd  ( getMemoryFdKHR
-                                                             , getMemoryFdPropertiesKHR
-                                                             , ImportMemoryFdInfoKHR(..)
-                                                             , MemoryFdPropertiesKHR(..)
-                                                             , MemoryGetFdInfoKHR(..)
-                                                             , KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION
-                                                             , pattern KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION
-                                                             , KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME
-                                                             , pattern KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME
-                                                             ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Foreign.C.Types (CInt(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CInt)
-import Foreign.C.Types (CInt(CInt))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetMemoryFdKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetMemoryFdPropertiesKHR))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetMemoryFdKHR
-  :: FunPtr (Ptr Device_T -> Ptr MemoryGetFdInfoKHR -> Ptr CInt -> IO Result) -> Ptr Device_T -> Ptr MemoryGetFdInfoKHR -> Ptr CInt -> IO Result
-
--- | vkGetMemoryFdKHR - Get a POSIX file descriptor for a memory object
---
--- = Parameters
---
--- -   @device@ is the logical device that created the device memory being
---     exported.
---
--- -   @pGetFdInfo@ is a pointer to a 'MemoryGetFdInfoKHR' structure
---     containing parameters of the export operation.
---
--- -   @pFd@ will return a file descriptor representing the underlying
---     resources of the device memory object.
---
--- = Description
---
--- Each call to 'getMemoryFdKHR' /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.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'MemoryGetFdInfoKHR'
-getMemoryFdKHR :: forall io . MonadIO io => Device -> MemoryGetFdInfoKHR -> io (("fd" ::: Int32))
-getMemoryFdKHR device getFdInfo = liftIO . evalContT $ do
-  let vkGetMemoryFdKHR' = mkVkGetMemoryFdKHR (pVkGetMemoryFdKHR (deviceCmds (device :: Device)))
-  pGetFdInfo <- ContT $ withCStruct (getFdInfo)
-  pPFd <- ContT $ bracket (callocBytes @CInt 4) free
-  r <- lift $ vkGetMemoryFdKHR' (deviceHandle (device)) pGetFdInfo (pPFd)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pFd <- lift $ peek @CInt pPFd
-  pure $ (((\(CInt a) -> a) pFd))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetMemoryFdPropertiesKHR
-  :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> CInt -> Ptr MemoryFdPropertiesKHR -> IO Result) -> Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> CInt -> Ptr MemoryFdPropertiesKHR -> IO Result
-
--- | vkGetMemoryFdPropertiesKHR - Get Properties of External Memory File
--- Descriptors
---
--- = 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@ is a pointer to a 'MemoryFdPropertiesKHR'
---     structure in which the properties of the handle @fd@ are returned.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
--- 'MemoryFdPropertiesKHR'
-getMemoryFdPropertiesKHR :: forall io . MonadIO io => Device -> ExternalMemoryHandleTypeFlagBits -> ("fd" ::: Int32) -> io (MemoryFdPropertiesKHR)
-getMemoryFdPropertiesKHR device handleType fd = liftIO . evalContT $ do
-  let vkGetMemoryFdPropertiesKHR' = mkVkGetMemoryFdPropertiesKHR (pVkGetMemoryFdPropertiesKHR (deviceCmds (device :: Device)))
-  pPMemoryFdProperties <- ContT (withZeroCStruct @MemoryFdPropertiesKHR)
-  r <- lift $ vkGetMemoryFdPropertiesKHR' (deviceHandle (device)) (handleType) (CInt (fd)) (pPMemoryFdProperties)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pMemoryFdProperties <- lift $ peekCStruct @MemoryFdPropertiesKHR pPMemoryFdProperties
-  pure $ (pMemoryFdProperties)
-
-
--- | VkImportMemoryFdInfoKHR - import memory created on the same physical
--- device from a file descriptor
---
--- = 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
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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.ExternalImageFormatProperties'
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'
---
--- -   The memory from which @fd@ was exported /must/ have been created on
---     the same underlying physical device as @device@
---
--- -   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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility>
---
--- -   @fd@ /must/ obey any requirements listed for @handleType@ in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility external memory handle types compatibility>
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR'
---
--- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImportMemoryFdInfoKHR = ImportMemoryFdInfoKHR
-  { -- | @handleType@ specifies the handle type of @fd@.
-    handleType :: ExternalMemoryHandleTypeFlagBits
-  , -- | @fd@ is the external handle to import.
-    fd :: Int32
-  }
-  deriving (Typeable)
-deriving instance Show ImportMemoryFdInfoKHR
-
-instance ToCStruct ImportMemoryFdInfoKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImportMemoryFdInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
-    poke ((p `plusPtr` 20 :: Ptr CInt)) (CInt (fd))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr CInt)) (CInt (zero))
-    f
-
-instance FromCStruct ImportMemoryFdInfoKHR where
-  peekCStruct p = do
-    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits))
-    fd <- peek @CInt ((p `plusPtr` 20 :: Ptr CInt))
-    pure $ ImportMemoryFdInfoKHR
-             handleType ((\(CInt a) -> a) fd)
-
-instance Storable ImportMemoryFdInfoKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImportMemoryFdInfoKHR where
-  zero = ImportMemoryFdInfoKHR
-           zero
-           zero
-
-
--- | VkMemoryFdPropertiesKHR - Properties of External Memory File Descriptors
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getMemoryFdPropertiesKHR'
-data MemoryFdPropertiesKHR = MemoryFdPropertiesKHR
-  { -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
-    -- type which the specified file descriptor /can/ be imported as.
-    memoryTypeBits :: Word32 }
-  deriving (Typeable)
-deriving instance Show MemoryFdPropertiesKHR
-
-instance ToCStruct MemoryFdPropertiesKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryFdPropertiesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (memoryTypeBits)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct MemoryFdPropertiesKHR where
-  peekCStruct p = do
-    memoryTypeBits <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ MemoryFdPropertiesKHR
-             memoryTypeBits
-
-instance Storable MemoryFdPropertiesKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryFdPropertiesKHR where
-  zero = MemoryFdPropertiesKHR
-           zero
-
-
--- | VkMemoryGetFdInfoKHR - Structure describing a POSIX FD semaphore export
--- operation
---
--- = Description
---
--- The properties of the file descriptor exported depend on the value of
--- @handleType@. See
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
--- for a description of the properties of the defined external memory
--- handle types.
---
--- Note
---
--- The size of the exported file /may/ be larger than the size requested by
--- 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo'::allocationSize. If
--- @handleType@ is
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT',
--- then the application /can/ query the file’s actual size with
--- <man:lseek(2) lseek(2)>.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getMemoryFdKHR'
-data MemoryGetFdInfoKHR = MemoryGetFdInfoKHR
-  { -- | @memory@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.DeviceMemory'
-    -- handle
-    memory :: DeviceMemory
-  , -- | @handleType@ /must/ be a valid
-    -- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
-    -- value
-    handleType :: ExternalMemoryHandleTypeFlagBits
-  }
-  deriving (Typeable)
-deriving instance Show MemoryGetFdInfoKHR
-
-instance ToCStruct MemoryGetFdInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryGetFdInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
-    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (zero)
-    f
-
-instance FromCStruct MemoryGetFdInfoKHR where
-  peekCStruct p = do
-    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
-    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits))
-    pure $ MemoryGetFdInfoKHR
-             memory handleType
-
-instance Storable MemoryGetFdInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryGetFdInfoKHR where
-  zero = MemoryGetFdInfoKHR
-           zero
-           zero
-
-
-type KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION"
-pattern KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME = "VK_KHR_external_memory_fd"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME"
-pattern KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME = "VK_KHR_external_memory_fd"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd  ( ImportMemoryFdInfoKHR
-                                                             , MemoryFdPropertiesKHR
-                                                             , MemoryGetFdInfoKHR
-                                                             ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ImportMemoryFdInfoKHR
-
-instance ToCStruct ImportMemoryFdInfoKHR
-instance Show ImportMemoryFdInfoKHR
-
-instance FromCStruct ImportMemoryFdInfoKHR
-
-
-data MemoryFdPropertiesKHR
-
-instance ToCStruct MemoryFdPropertiesKHR
-instance Show MemoryFdPropertiesKHR
-
-instance FromCStruct MemoryFdPropertiesKHR
-
-
-data MemoryGetFdInfoKHR
-
-instance ToCStruct MemoryGetFdInfoKHR
-instance Show MemoryGetFdInfoKHR
-
-instance FromCStruct MemoryGetFdInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
+++ /dev/null
@@ -1,558 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32  ( getMemoryWin32HandleKHR
-                                                                , getMemoryWin32HandlePropertiesKHR
-                                                                , ImportMemoryWin32HandleInfoKHR(..)
-                                                                , ExportMemoryWin32HandleInfoKHR(..)
-                                                                , MemoryWin32HandlePropertiesKHR(..)
-                                                                , MemoryGetWin32HandleInfoKHR(..)
-                                                                , KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION
-                                                                , pattern KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION
-                                                                , KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME
-                                                                , pattern KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME
-                                                                , HANDLE
-                                                                , DWORD
-                                                                , LPCWSTR
-                                                                , SECURITY_ATTRIBUTES
-                                                                ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Extensions.WSITypes (DWORD)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetMemoryWin32HandleKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetMemoryWin32HandlePropertiesKHR))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Extensions.WSITypes (HANDLE)
-import Graphics.Vulkan.Extensions.WSITypes (LPCWSTR)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (DWORD)
-import Graphics.Vulkan.Extensions.WSITypes (HANDLE)
-import Graphics.Vulkan.Extensions.WSITypes (LPCWSTR)
-import Graphics.Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetMemoryWin32HandleKHR
-  :: FunPtr (Ptr Device_T -> Ptr MemoryGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result) -> Ptr Device_T -> Ptr MemoryGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result
-
--- | vkGetMemoryWin32HandleKHR - Get a Windows HANDLE for a memory object
---
--- = Parameters
---
--- -   @device@ is the logical device that created the device memory being
---     exported.
---
--- -   @pGetWin32HandleInfo@ is a pointer to a
---     'MemoryGetWin32HandleInfoKHR' structure containing parameters of the
---     export operation.
---
--- -   @pHandle@ will return the Windows handle representing the underlying
---     resources of the device memory object.
---
--- = Description
---
--- For handle types defined as NT handles, the handles returned by
--- 'getMemoryWin32HandleKHR' 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.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'MemoryGetWin32HandleInfoKHR'
-getMemoryWin32HandleKHR :: forall io . MonadIO io => Device -> MemoryGetWin32HandleInfoKHR -> io (HANDLE)
-getMemoryWin32HandleKHR device getWin32HandleInfo = liftIO . evalContT $ do
-  let vkGetMemoryWin32HandleKHR' = mkVkGetMemoryWin32HandleKHR (pVkGetMemoryWin32HandleKHR (deviceCmds (device :: Device)))
-  pGetWin32HandleInfo <- ContT $ withCStruct (getWin32HandleInfo)
-  pPHandle <- ContT $ bracket (callocBytes @HANDLE 8) free
-  r <- lift $ vkGetMemoryWin32HandleKHR' (deviceHandle (device)) pGetWin32HandleInfo (pPHandle)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pHandle <- lift $ peek @HANDLE pPHandle
-  pure $ (pHandle)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetMemoryWin32HandlePropertiesKHR
-  :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> HANDLE -> Ptr MemoryWin32HandlePropertiesKHR -> IO Result) -> Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> HANDLE -> Ptr MemoryWin32HandlePropertiesKHR -> IO Result
-
--- | vkGetMemoryWin32HandlePropertiesKHR - Get Properties of External Memory
--- Win32 Handles
---
--- = 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@.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
--- 'MemoryWin32HandlePropertiesKHR'
-getMemoryWin32HandlePropertiesKHR :: forall io . MonadIO io => Device -> ExternalMemoryHandleTypeFlagBits -> HANDLE -> io (MemoryWin32HandlePropertiesKHR)
-getMemoryWin32HandlePropertiesKHR device handleType handle = liftIO . evalContT $ do
-  let vkGetMemoryWin32HandlePropertiesKHR' = mkVkGetMemoryWin32HandlePropertiesKHR (pVkGetMemoryWin32HandlePropertiesKHR (deviceCmds (device :: Device)))
-  pPMemoryWin32HandleProperties <- ContT (withZeroCStruct @MemoryWin32HandlePropertiesKHR)
-  r <- lift $ vkGetMemoryWin32HandlePropertiesKHR' (deviceHandle (device)) (handleType) (handle) (pPMemoryWin32HandleProperties)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pMemoryWin32HandleProperties <- lift $ peekCStruct @MemoryWin32HandlePropertiesKHR pPMemoryWin32HandleProperties
-  pure $ (pMemoryWin32HandleProperties)
-
-
--- | VkImportMemoryWin32HandleInfoKHR - import Win32 memory created on the
--- same physical device
---
--- = 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
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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.ExternalImageFormatProperties'
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'
---
--- -   The memory from which @handle@ was exported, or the memory named by
---     @name@ /must/ have been created on the same underlying physical
---     device as @device@
---
--- -   If @handleType@ is not @0@, it /must/ be defined as an NT handle or
---     a global share handle
---
--- -   If @handleType@ is not
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT',
---     @name@ /must/ be @NULL@
---
--- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/
---     name a valid memory resource of the type specified by @handleType@
---
--- -   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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility external memory handle types compatibility>
---
--- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for
---     @handleType@ in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility external memory handle types compatibility>
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR'
---
--- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImportMemoryWin32HandleInfoKHR = ImportMemoryWin32HandleInfoKHR
-  { -- | @handleType@ specifies the type of @handle@ or @name@.
-    handleType :: ExternalMemoryHandleTypeFlagBits
-  , -- | @handle@ is the external handle to import, or @NULL@.
-    handle :: HANDLE
-  , -- | @name@ is a null-terminated UTF-16 string naming the underlying memory
-    -- resource to import, or @NULL@.
-    name :: LPCWSTR
-  }
-  deriving (Typeable)
-deriving instance Show ImportMemoryWin32HandleInfoKHR
-
-instance ToCStruct ImportMemoryWin32HandleInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImportMemoryWin32HandleInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
-    poke ((p `plusPtr` 24 :: Ptr HANDLE)) (handle)
-    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (name)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct ImportMemoryWin32HandleInfoKHR where
-  peekCStruct p = do
-    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits))
-    handle <- peek @HANDLE ((p `plusPtr` 24 :: Ptr HANDLE))
-    name <- peek @LPCWSTR ((p `plusPtr` 32 :: Ptr LPCWSTR))
-    pure $ ImportMemoryWin32HandleInfoKHR
-             handleType handle name
-
-instance Storable ImportMemoryWin32HandleInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImportMemoryWin32HandleInfoKHR where
-  zero = ImportMemoryWin32HandleInfoKHR
-           zero
-           zero
-           zero
-
-
--- | VkExportMemoryWin32HandleInfoKHR - Structure specifying additional
--- attributes of Windows handles exported from a memory
---
--- = Description
---
--- If
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
--- is not present in the same @pNext@ chain, this structure is ignored.
---
--- If
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
--- is present in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' with a Windows
--- @handleType@, but either 'ExportMemoryWin32HandleInfoKHR' is not present
--- in the @pNext@ chain, or if it is but @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
--- used depend on the handle type.
---
--- For handles of the following types:
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT'
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT'
---
--- The implementation /must/ ensure the access rights allow read and write
--- access to the memory.
---
--- For handles of the following types:
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT'
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT'
---
--- The access rights /must/ be:
---
--- @GENERIC_ALL@
---
--- [1]
---     <https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights>
---
--- == Valid Usage
---
--- -   If
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
---     does not include
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT',
---     a 'ExportMemoryWin32HandleInfoKHR' structure /must/ not be included
---     in the @pNext@ chain of
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR'
---
--- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExportMemoryWin32HandleInfoKHR = ExportMemoryWin32HandleInfoKHR
-  { -- | @pAttributes@ is a pointer to a Windows
-    -- 'Graphics.Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' structure
-    -- specifying security attributes of the handle.
-    attributes :: Ptr SECURITY_ATTRIBUTES
-  , -- | @dwAccess@ is a 'Graphics.Vulkan.Extensions.WSITypes.DWORD' specifying
-    -- access rights of the handle.
-    dwAccess :: DWORD
-  , -- | @name@ is a null-terminated UTF-16 string to associate with the
-    -- underlying resource referenced by NT handles exported from the created
-    -- memory.
-    name :: LPCWSTR
-  }
-  deriving (Typeable)
-deriving instance Show ExportMemoryWin32HandleInfoKHR
-
-instance ToCStruct ExportMemoryWin32HandleInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExportMemoryWin32HandleInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES))) (attributes)
-    poke ((p `plusPtr` 24 :: Ptr DWORD)) (dwAccess)
-    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (name)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr DWORD)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (zero)
-    f
-
-instance FromCStruct ExportMemoryWin32HandleInfoKHR where
-  peekCStruct p = do
-    pAttributes <- peek @(Ptr SECURITY_ATTRIBUTES) ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES)))
-    dwAccess <- peek @DWORD ((p `plusPtr` 24 :: Ptr DWORD))
-    name <- peek @LPCWSTR ((p `plusPtr` 32 :: Ptr LPCWSTR))
-    pure $ ExportMemoryWin32HandleInfoKHR
-             pAttributes dwAccess name
-
-instance Storable ExportMemoryWin32HandleInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExportMemoryWin32HandleInfoKHR where
-  zero = ExportMemoryWin32HandleInfoKHR
-           zero
-           zero
-           zero
-
-
--- | VkMemoryWin32HandlePropertiesKHR - Properties of External Memory Windows
--- Handles
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getMemoryWin32HandlePropertiesKHR'
-data MemoryWin32HandlePropertiesKHR = MemoryWin32HandlePropertiesKHR
-  { -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
-    -- type which the specified windows handle /can/ be imported as.
-    memoryTypeBits :: Word32 }
-  deriving (Typeable)
-deriving instance Show MemoryWin32HandlePropertiesKHR
-
-instance ToCStruct MemoryWin32HandlePropertiesKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryWin32HandlePropertiesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (memoryTypeBits)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct MemoryWin32HandlePropertiesKHR where
-  peekCStruct p = do
-    memoryTypeBits <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ MemoryWin32HandlePropertiesKHR
-             memoryTypeBits
-
-instance Storable MemoryWin32HandlePropertiesKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryWin32HandlePropertiesKHR where
-  zero = MemoryWin32HandlePropertiesKHR
-           zero
-
-
--- | VkMemoryGetWin32HandleInfoKHR - Structure describing a Win32 handle
--- semaphore export operation
---
--- = Description
---
--- The properties of the handle returned depend on the value of
--- @handleType@. See
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
--- 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.ExportMemoryAllocateInfo'::@handleTypes@
---     when @memory@ was created
---
--- -   If @handleType@ is defined as an NT handle,
---     'getMemoryWin32HandleKHR' /must/ be called no more than once for
---     each valid unique combination of @memory@ and @handleType@
---
--- -   @handleType@ /must/ be defined as an NT handle or a global share
---     handle
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @memory@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- -   @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getMemoryWin32HandleKHR'
-data MemoryGetWin32HandleInfoKHR = MemoryGetWin32HandleInfoKHR
-  { -- | @memory@ is the memory object from which the handle will be exported.
-    memory :: DeviceMemory
-  , -- | @handleType@ is the type of handle requested.
-    handleType :: ExternalMemoryHandleTypeFlagBits
-  }
-  deriving (Typeable)
-deriving instance Show MemoryGetWin32HandleInfoKHR
-
-instance ToCStruct MemoryGetWin32HandleInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MemoryGetWin32HandleInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
-    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (zero)
-    f
-
-instance FromCStruct MemoryGetWin32HandleInfoKHR where
-  peekCStruct p = do
-    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
-    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits))
-    pure $ MemoryGetWin32HandleInfoKHR
-             memory handleType
-
-instance Storable MemoryGetWin32HandleInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MemoryGetWin32HandleInfoKHR where
-  zero = MemoryGetWin32HandleInfoKHR
-           zero
-           zero
-
-
-type KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION"
-pattern KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_KHR_external_memory_win32"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME"
-pattern KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_KHR_external_memory_win32"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs-boot
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32  ( ExportMemoryWin32HandleInfoKHR
-                                                                , ImportMemoryWin32HandleInfoKHR
-                                                                , MemoryGetWin32HandleInfoKHR
-                                                                , MemoryWin32HandlePropertiesKHR
-                                                                ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExportMemoryWin32HandleInfoKHR
-
-instance ToCStruct ExportMemoryWin32HandleInfoKHR
-instance Show ExportMemoryWin32HandleInfoKHR
-
-instance FromCStruct ExportMemoryWin32HandleInfoKHR
-
-
-data ImportMemoryWin32HandleInfoKHR
-
-instance ToCStruct ImportMemoryWin32HandleInfoKHR
-instance Show ImportMemoryWin32HandleInfoKHR
-
-instance FromCStruct ImportMemoryWin32HandleInfoKHR
-
-
-data MemoryGetWin32HandleInfoKHR
-
-instance ToCStruct MemoryGetWin32HandleInfoKHR
-instance Show MemoryGetWin32HandleInfoKHR
-
-instance FromCStruct MemoryGetWin32HandleInfoKHR
-
-
-data MemoryWin32HandlePropertiesKHR
-
-instance ToCStruct MemoryWin32HandlePropertiesKHR
-instance Show MemoryWin32HandlePropertiesKHR
-
-instance FromCStruct MemoryWin32HandlePropertiesKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore  ( pattern STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR
-                                                             , pattern SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR
-                                                             , SemaphoreImportFlagsKHR
-                                                             , SemaphoreImportFlagBitsKHR
-                                                             , ExportSemaphoreCreateInfoKHR
-                                                             , KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION
-                                                             , pattern KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION
-                                                             , KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME
-                                                             , pattern KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME
-                                                             ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore (ExportSemaphoreCreateInfo)
-import Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlagBits)
-import Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlags)
-import Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlags)
-import Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlagBits(SEMAPHORE_IMPORT_TEMPORARY_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR"
-pattern SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = SEMAPHORE_IMPORT_TEMPORARY_BIT
-
-
--- No documentation found for TopLevel "VkSemaphoreImportFlagsKHR"
-type SemaphoreImportFlagsKHR = SemaphoreImportFlags
-
-
--- No documentation found for TopLevel "VkSemaphoreImportFlagBitsKHR"
-type SemaphoreImportFlagBitsKHR = SemaphoreImportFlagBits
-
-
--- No documentation found for TopLevel "VkExportSemaphoreCreateInfoKHR"
-type ExportSemaphoreCreateInfoKHR = ExportSemaphoreCreateInfo
-
-
-type KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION"
-pattern KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME = "VK_KHR_external_semaphore"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME"
-pattern KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME = "VK_KHR_external_semaphore"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_capabilities.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_capabilities.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_capabilities.hs
+++ /dev/null
@@ -1,128 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR
-                                                                          , pattern STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR
-                                                                          , pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR
-                                                                          , pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR
-                                                                          , pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR
-                                                                          , pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR
-                                                                          , pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR
-                                                                          , pattern EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR
-                                                                          , pattern EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR
-                                                                          , getPhysicalDeviceExternalSemaphorePropertiesKHR
-                                                                          , ExternalSemaphoreHandleTypeFlagsKHR
-                                                                          , ExternalSemaphoreFeatureFlagsKHR
-                                                                          , ExternalSemaphoreHandleTypeFlagBitsKHR
-                                                                          , ExternalSemaphoreFeatureFlagBitsKHR
-                                                                          , PhysicalDeviceExternalSemaphoreInfoKHR
-                                                                          , ExternalSemaphorePropertiesKHR
-                                                                          , KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION
-                                                                          , pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION
-                                                                          , KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME
-                                                                          , pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME
-                                                                          , PhysicalDeviceIDPropertiesKHR
-                                                                          , pattern LUID_SIZE_KHR
-                                                                          ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (getPhysicalDeviceExternalSemaphoreProperties)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (ExternalSemaphoreProperties)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (PhysicalDeviceExternalSemaphoreInfo)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlagBits(EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlagBits(EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT))
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO))
-import Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities (PhysicalDeviceIDPropertiesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities (pattern LUID_SIZE_KHR)
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"
-pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"
-pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"
-pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR"
-pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR"
-pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR"
-pattern EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT
-
-
--- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR"
-pattern EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT
-
-
--- No documentation found for TopLevel "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"
-getPhysicalDeviceExternalSemaphorePropertiesKHR = getPhysicalDeviceExternalSemaphoreProperties
-
-
--- No documentation found for TopLevel "VkExternalSemaphoreHandleTypeFlagsKHR"
-type ExternalSemaphoreHandleTypeFlagsKHR = ExternalSemaphoreHandleTypeFlags
-
-
--- No documentation found for TopLevel "VkExternalSemaphoreFeatureFlagsKHR"
-type ExternalSemaphoreFeatureFlagsKHR = ExternalSemaphoreFeatureFlags
-
-
--- No documentation found for TopLevel "VkExternalSemaphoreHandleTypeFlagBitsKHR"
-type ExternalSemaphoreHandleTypeFlagBitsKHR = ExternalSemaphoreHandleTypeFlagBits
-
-
--- No documentation found for TopLevel "VkExternalSemaphoreFeatureFlagBitsKHR"
-type ExternalSemaphoreFeatureFlagBitsKHR = ExternalSemaphoreFeatureFlagBits
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceExternalSemaphoreInfoKHR"
-type PhysicalDeviceExternalSemaphoreInfoKHR = PhysicalDeviceExternalSemaphoreInfo
-
-
--- No documentation found for TopLevel "VkExternalSemaphorePropertiesKHR"
-type ExternalSemaphorePropertiesKHR = ExternalSemaphoreProperties
-
-
-type KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION"
-pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_semaphore_capabilities"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME"
-pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_semaphore_capabilities"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs
+++ /dev/null
@@ -1,438 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd  ( getSemaphoreFdKHR
-                                                                , importSemaphoreFdKHR
-                                                                , ImportSemaphoreFdInfoKHR(..)
-                                                                , SemaphoreGetFdInfoKHR(..)
-                                                                , KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION
-                                                                , pattern KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION
-                                                                , KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME
-                                                                , pattern KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME
-                                                                ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Foreign.C.Types (CInt(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CInt)
-import Foreign.C.Types (CInt(CInt))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetSemaphoreFdKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkImportSemaphoreFdKHR))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Handles (Semaphore)
-import Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetSemaphoreFdKHR
-  :: FunPtr (Ptr Device_T -> Ptr SemaphoreGetFdInfoKHR -> Ptr CInt -> IO Result) -> Ptr Device_T -> Ptr SemaphoreGetFdInfoKHR -> Ptr CInt -> IO Result
-
--- | vkGetSemaphoreFdKHR - Get a POSIX file descriptor handle for a semaphore
---
--- = Parameters
---
--- -   @device@ is the logical device that created the semaphore being
---     exported.
---
--- -   @pGetFdInfo@ is a pointer to a 'SemaphoreGetFdInfoKHR' structure
---     containing parameters of the export operation.
---
--- -   @pFd@ will return the file descriptor representing the semaphore
---     payload.
---
--- = Description
---
--- Each call to 'getSemaphoreFdKHR' /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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore State>.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'SemaphoreGetFdInfoKHR'
-getSemaphoreFdKHR :: forall io . MonadIO io => Device -> SemaphoreGetFdInfoKHR -> io (("fd" ::: Int32))
-getSemaphoreFdKHR device getFdInfo = liftIO . evalContT $ do
-  let vkGetSemaphoreFdKHR' = mkVkGetSemaphoreFdKHR (pVkGetSemaphoreFdKHR (deviceCmds (device :: Device)))
-  pGetFdInfo <- ContT $ withCStruct (getFdInfo)
-  pPFd <- ContT $ bracket (callocBytes @CInt 4) free
-  r <- lift $ vkGetSemaphoreFdKHR' (deviceHandle (device)) pGetFdInfo (pPFd)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pFd <- lift $ peek @CInt pPFd
-  pure $ (((\(CInt a) -> a) pFd))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkImportSemaphoreFdKHR
-  :: FunPtr (Ptr Device_T -> Ptr ImportSemaphoreFdInfoKHR -> IO Result) -> Ptr Device_T -> Ptr ImportSemaphoreFdInfoKHR -> IO Result
-
--- | vkImportSemaphoreFdKHR - Import a semaphore from a POSIX file descriptor
---
--- = Parameters
---
--- -   @device@ is the logical device that created the semaphore.
---
--- -   @pImportSemaphoreFdInfo@ is a pointer to a
---     'ImportSemaphoreFdInfoKHR' structure specifying the semaphore and
---     import parameters.
---
--- = 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.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'ImportSemaphoreFdInfoKHR'
-importSemaphoreFdKHR :: forall io . MonadIO io => Device -> ImportSemaphoreFdInfoKHR -> io ()
-importSemaphoreFdKHR device importSemaphoreFdInfo = liftIO . evalContT $ do
-  let vkImportSemaphoreFdKHR' = mkVkImportSemaphoreFdKHR (pVkImportSemaphoreFdKHR (deviceCmds (device :: Device)))
-  pImportSemaphoreFdInfo <- ContT $ withCStruct (importSemaphoreFdInfo)
-  r <- lift $ vkImportSemaphoreFdKHR' (deviceHandle (device)) pImportSemaphoreFdInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkImportSemaphoreFdInfoKHR - Structure specifying POSIX file descriptor
--- to import to a semaphore
---
--- = Description
---
--- The handle types supported by @handleType@ are:
---
--- +-----------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
--- | Handle Type                                                                                                     | Transference         | Permanence Supported  |
--- +=================================================================================================================+======================+=======================+
--- | 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT' | Reference            | Temporary,Permanent   |
--- +-----------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
--- | 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT'   | Copy                 | Temporary             |
--- +-----------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
---
--- Handle Types Supported by 'ImportSemaphoreFdInfoKHR'
---
--- == Valid Usage
---
--- -   @handleType@ /must/ be a value included in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphore-handletypes-fd Handle Types Supported by >
---     table
---
--- -   @fd@ /must/ obey any requirements listed for @handleType@ in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility external semaphore handle types compatibility>
---
--- -   If @handleType@ is
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT',
---     the
---     'Graphics.Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo'::@flags@
---     field /must/ match that of the semaphore from which @fd@ was
---     exported
---
--- -   If @handleType@ is
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT',
---     the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@
---     field /must/ match that of the semaphore from which @fd@ was
---     exported
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits.SEMAPHORE_IMPORT_TEMPORARY_BIT',
---     the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@
---     field of the semaphore from which @fd@ was exported /must/ not be
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @semaphore@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Semaphore' handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits'
---     values
---
--- -   @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
---     value
---
--- == Host Synchronization
---
--- -   Host access to @semaphore@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'importSemaphoreFdKHR'
-data ImportSemaphoreFdInfoKHR = ImportSemaphoreFdInfoKHR
-  { -- | @semaphore@ is the semaphore into which the payload will be imported.
-    semaphore :: Semaphore
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits'
-    -- specifying additional parameters for the semaphore payload import
-    -- operation.
-    flags :: SemaphoreImportFlags
-  , -- | @handleType@ specifies the type of @fd@.
-    handleType :: ExternalSemaphoreHandleTypeFlagBits
-  , -- | @fd@ is the external handle to import.
-    fd :: Int32
-  }
-  deriving (Typeable)
-deriving instance Show ImportSemaphoreFdInfoKHR
-
-instance ToCStruct ImportSemaphoreFdInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImportSemaphoreFdInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (semaphore)
-    poke ((p `plusPtr` 24 :: Ptr SemaphoreImportFlags)) (flags)
-    poke ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (handleType)
-    poke ((p `plusPtr` 32 :: Ptr CInt)) (CInt (fd))
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr CInt)) (CInt (zero))
-    f
-
-instance FromCStruct ImportSemaphoreFdInfoKHR where
-  peekCStruct p = do
-    semaphore <- peek @Semaphore ((p `plusPtr` 16 :: Ptr Semaphore))
-    flags <- peek @SemaphoreImportFlags ((p `plusPtr` 24 :: Ptr SemaphoreImportFlags))
-    handleType <- peek @ExternalSemaphoreHandleTypeFlagBits ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits))
-    fd <- peek @CInt ((p `plusPtr` 32 :: Ptr CInt))
-    pure $ ImportSemaphoreFdInfoKHR
-             semaphore flags handleType ((\(CInt a) -> a) fd)
-
-instance Storable ImportSemaphoreFdInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImportSemaphoreFdInfoKHR where
-  zero = ImportSemaphoreFdInfoKHR
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkSemaphoreGetFdInfoKHR - Structure describing a POSIX FD semaphore
--- export operation
---
--- = Description
---
--- The properties of the file descriptor returned depend on the value of
--- @handleType@. See
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
--- 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.ExportSemaphoreCreateInfo'::@handleTypes@
---     when @semaphore@’s current payload was created
---
--- -   @semaphore@ /must/ not currently have its payload replaced by an
---     imported payload as described below in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>
---     unless that imported payload’s handle type was included in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties'::@exportFromImportedHandleTypes@
---     for @handleType@
---
--- -   If @handleType@ refers to a handle type with copy payload
---     transference semantics, as defined below in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>,
---     there /must/ be no queue waiting on @semaphore@
---
--- -   If @handleType@ refers to a handle type with copy payload
---     transference semantics, @semaphore@ /must/ be signaled, or have an
---     associated
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
---     pending execution
---
--- -   @handleType@ /must/ be defined as a POSIX file descriptor handle
---
--- -   If @handleType@ refers to a handle type with copy payload
---     transference semantics, @semaphore@ /must/ have been created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
---
--- -   If @handleType@ refers to a handle type with copy payload
---     transference semantics, @semaphore@ /must/ have an associated
---     semaphore signal operation that has been submitted for execution and
---     any semaphore signal operations on which it depends (if any) /must/
---     have also been submitted for execution
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @semaphore@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Semaphore' handle
---
--- -   @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getSemaphoreFdKHR'
-data SemaphoreGetFdInfoKHR = SemaphoreGetFdInfoKHR
-  { -- | @semaphore@ is the semaphore from which state will be exported.
-    semaphore :: Semaphore
-  , -- | @handleType@ is the type of handle requested.
-    handleType :: ExternalSemaphoreHandleTypeFlagBits
-  }
-  deriving (Typeable)
-deriving instance Show SemaphoreGetFdInfoKHR
-
-instance ToCStruct SemaphoreGetFdInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SemaphoreGetFdInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (semaphore)
-    poke ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (handleType)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (zero)
-    f
-
-instance FromCStruct SemaphoreGetFdInfoKHR where
-  peekCStruct p = do
-    semaphore <- peek @Semaphore ((p `plusPtr` 16 :: Ptr Semaphore))
-    handleType <- peek @ExternalSemaphoreHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits))
-    pure $ SemaphoreGetFdInfoKHR
-             semaphore handleType
-
-instance Storable SemaphoreGetFdInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SemaphoreGetFdInfoKHR where
-  zero = SemaphoreGetFdInfoKHR
-           zero
-           zero
-
-
-type KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION"
-pattern KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME = "VK_KHR_external_semaphore_fd"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME"
-pattern KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME = "VK_KHR_external_semaphore_fd"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd  ( ImportSemaphoreFdInfoKHR
-                                                                , SemaphoreGetFdInfoKHR
-                                                                ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ImportSemaphoreFdInfoKHR
-
-instance ToCStruct ImportSemaphoreFdInfoKHR
-instance Show ImportSemaphoreFdInfoKHR
-
-instance FromCStruct ImportSemaphoreFdInfoKHR
-
-
-data SemaphoreGetFdInfoKHR
-
-instance ToCStruct SemaphoreGetFdInfoKHR
-instance Show SemaphoreGetFdInfoKHR
-
-instance FromCStruct SemaphoreGetFdInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
+++ /dev/null
@@ -1,719 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32  ( getSemaphoreWin32HandleKHR
-                                                                   , importSemaphoreWin32HandleKHR
-                                                                   , ImportSemaphoreWin32HandleInfoKHR(..)
-                                                                   , ExportSemaphoreWin32HandleInfoKHR(..)
-                                                                   , D3D12FenceSubmitInfoKHR(..)
-                                                                   , SemaphoreGetWin32HandleInfoKHR(..)
-                                                                   , KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION
-                                                                   , pattern KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION
-                                                                   , KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME
-                                                                   , pattern KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME
-                                                                   , HANDLE
-                                                                   , DWORD
-                                                                   , LPCWSTR
-                                                                   , SECURITY_ATTRIBUTES
-                                                                   ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Either (Either)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Extensions.WSITypes (DWORD)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetSemaphoreWin32HandleKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkImportSemaphoreWin32HandleKHR))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Extensions.WSITypes (HANDLE)
-import Graphics.Vulkan.Extensions.WSITypes (LPCWSTR)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
-import Graphics.Vulkan.Core10.Handles (Semaphore)
-import Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (DWORD)
-import Graphics.Vulkan.Extensions.WSITypes (HANDLE)
-import Graphics.Vulkan.Extensions.WSITypes (LPCWSTR)
-import Graphics.Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetSemaphoreWin32HandleKHR
-  :: FunPtr (Ptr Device_T -> Ptr SemaphoreGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result) -> Ptr Device_T -> Ptr SemaphoreGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result
-
--- | vkGetSemaphoreWin32HandleKHR - Get a Windows HANDLE for a semaphore
---
--- = Parameters
---
--- -   @device@ is the logical device that created the semaphore being
---     exported.
---
--- -   @pGetWin32HandleInfo@ is a pointer to a
---     'SemaphoreGetWin32HandleInfoKHR' structure containing parameters of
---     the export operation.
---
--- -   @pHandle@ will return the Windows handle representing the semaphore
---     state.
---
--- = Description
---
--- For handle types defined as NT handles, the handles returned by
--- 'getSemaphoreWin32HandleKHR' 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'SemaphoreGetWin32HandleInfoKHR'
-getSemaphoreWin32HandleKHR :: forall io . MonadIO io => Device -> SemaphoreGetWin32HandleInfoKHR -> io (HANDLE)
-getSemaphoreWin32HandleKHR device getWin32HandleInfo = liftIO . evalContT $ do
-  let vkGetSemaphoreWin32HandleKHR' = mkVkGetSemaphoreWin32HandleKHR (pVkGetSemaphoreWin32HandleKHR (deviceCmds (device :: Device)))
-  pGetWin32HandleInfo <- ContT $ withCStruct (getWin32HandleInfo)
-  pPHandle <- ContT $ bracket (callocBytes @HANDLE 8) free
-  r <- lift $ vkGetSemaphoreWin32HandleKHR' (deviceHandle (device)) pGetWin32HandleInfo (pPHandle)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pHandle <- lift $ peek @HANDLE pPHandle
-  pure $ (pHandle)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkImportSemaphoreWin32HandleKHR
-  :: FunPtr (Ptr Device_T -> Ptr ImportSemaphoreWin32HandleInfoKHR -> IO Result) -> Ptr Device_T -> Ptr ImportSemaphoreWin32HandleInfoKHR -> IO Result
-
--- | vkImportSemaphoreWin32HandleKHR - Import a semaphore from a Windows
--- HANDLE
---
--- = Parameters
---
--- -   @device@ is the logical device that created the semaphore.
---
--- -   @pImportSemaphoreWin32HandleInfo@ is a pointer to a
---     'ImportSemaphoreWin32HandleInfoKHR' structure specifying the
---     semaphore and import parameters.
---
--- = 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.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'ImportSemaphoreWin32HandleInfoKHR'
-importSemaphoreWin32HandleKHR :: forall io . MonadIO io => Device -> ImportSemaphoreWin32HandleInfoKHR -> io ()
-importSemaphoreWin32HandleKHR device importSemaphoreWin32HandleInfo = liftIO . evalContT $ do
-  let vkImportSemaphoreWin32HandleKHR' = mkVkImportSemaphoreWin32HandleKHR (pVkImportSemaphoreWin32HandleKHR (deviceCmds (device :: Device)))
-  pImportSemaphoreWin32HandleInfo <- ContT $ withCStruct (importSemaphoreWin32HandleInfo)
-  r <- lift $ vkImportSemaphoreWin32HandleKHR' (deviceHandle (device)) pImportSemaphoreWin32HandleInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
--- | VkImportSemaphoreWin32HandleInfoKHR - Structure specifying Windows
--- handle to import to a semaphore
---
--- = Description
---
--- The handle types supported by @handleType@ are:
---
--- +------------------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
--- | Handle Type                                                                                                            | Transference         | Permanence Supported  |
--- +========================================================================================================================+======================+=======================+
--- | 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'     | Reference            | Temporary,Permanent   |
--- +------------------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
--- | 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' | Reference            | Temporary,Permanent   |
--- +------------------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
--- | 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT'      | Reference            | Temporary,Permanent   |
--- +------------------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
---
--- Handle Types Supported by 'ImportSemaphoreWin32HandleInfoKHR'
---
--- == Valid Usage
---
--- -   @handleType@ /must/ be a value included in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphore-handletypes-win32 Handle Types Supported by >
---     table
---
--- -   If @handleType@ is not
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT',
---     @name@ /must/ be @NULL@
---
--- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/
---     name a valid synchronization primitive of the type specified by
---     @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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility external semaphore handle types compatibility>
---
--- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for
---     @handleType@ in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility external semaphore handle types compatibility>
---
--- -   If @handleType@ is
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT',
---     the
---     'Graphics.Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo'::@flags@
---     field /must/ match that of the semaphore from which @handle@ or
---     @name@ was exported
---
--- -   If @handleType@ is
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT',
---     the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@
---     field /must/ match that of the semaphore from which @handle@ or
---     @name@ was exported
---
--- -   If @flags@ contains
---     'Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits.SEMAPHORE_IMPORT_TEMPORARY_BIT',
---     the
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@
---     field of the semaphore from which @handle@ or @name@ was exported
---     /must/ not be
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @semaphore@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Semaphore' handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits'
---     values
---
--- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
---     value
---
--- == Host Synchronization
---
--- -   Host access to @semaphore@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'importSemaphoreWin32HandleKHR'
-data ImportSemaphoreWin32HandleInfoKHR = ImportSemaphoreWin32HandleInfoKHR
-  { -- | @semaphore@ is the semaphore into which the payload will be imported.
-    semaphore :: Semaphore
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits'
-    -- specifying additional parameters for the semaphore payload import
-    -- operation.
-    flags :: SemaphoreImportFlags
-  , -- | @handleType@ specifies the type of @handle@.
-    handleType :: ExternalSemaphoreHandleTypeFlagBits
-  , -- | @handle@ is the external handle to import, or @NULL@.
-    handle :: HANDLE
-  , -- | @name@ is a null-terminated UTF-16 string naming the underlying
-    -- synchronization primitive to import, or @NULL@.
-    name :: LPCWSTR
-  }
-  deriving (Typeable)
-deriving instance Show ImportSemaphoreWin32HandleInfoKHR
-
-instance ToCStruct ImportSemaphoreWin32HandleInfoKHR where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImportSemaphoreWin32HandleInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (semaphore)
-    poke ((p `plusPtr` 24 :: Ptr SemaphoreImportFlags)) (flags)
-    poke ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (handleType)
-    poke ((p `plusPtr` 32 :: Ptr HANDLE)) (handle)
-    poke ((p `plusPtr` 40 :: Ptr LPCWSTR)) (name)
-    f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
-    f
-
-instance FromCStruct ImportSemaphoreWin32HandleInfoKHR where
-  peekCStruct p = do
-    semaphore <- peek @Semaphore ((p `plusPtr` 16 :: Ptr Semaphore))
-    flags <- peek @SemaphoreImportFlags ((p `plusPtr` 24 :: Ptr SemaphoreImportFlags))
-    handleType <- peek @ExternalSemaphoreHandleTypeFlagBits ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits))
-    handle <- peek @HANDLE ((p `plusPtr` 32 :: Ptr HANDLE))
-    name <- peek @LPCWSTR ((p `plusPtr` 40 :: Ptr LPCWSTR))
-    pure $ ImportSemaphoreWin32HandleInfoKHR
-             semaphore flags handleType handle name
-
-instance Storable ImportSemaphoreWin32HandleInfoKHR where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImportSemaphoreWin32HandleInfoKHR where
-  zero = ImportSemaphoreWin32HandleInfoKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkExportSemaphoreWin32HandleInfoKHR - Structure specifying additional
--- attributes of Windows handles exported from a semaphore
---
--- = Description
---
--- If
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'
--- is not present in the same @pNext@ chain, this structure is ignored.
---
--- If
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'
--- is present in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo' with a
--- Windows @handleType@, but either 'ExportSemaphoreWin32HandleInfoKHR' is
--- not present in the @pNext@ chain, or if it is but @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 used depend on the handle type.
---
--- For handles of the following types:
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
---
--- The implementation /must/ ensure the access rights allow both signal and
--- wait operations on the semaphore.
---
--- For handles of the following types:
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT'
---
--- The access rights /must/ be:
---
--- @GENERIC_ALL@
---
--- [1]
---     <https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights>
---
--- == Valid Usage
---
--- -   If
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'::@handleTypes@
---     does not include
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT',
---     'ExportSemaphoreWin32HandleInfoKHR' /must/ not be included in the
---     @pNext@ chain of
---     'Graphics.Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR'
---
--- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExportSemaphoreWin32HandleInfoKHR = ExportSemaphoreWin32HandleInfoKHR
-  { -- | @pAttributes@ is a pointer to a Windows
-    -- 'Graphics.Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' structure
-    -- specifying security attributes of the handle.
-    attributes :: Ptr SECURITY_ATTRIBUTES
-  , -- | @dwAccess@ is a 'Graphics.Vulkan.Extensions.WSITypes.DWORD' specifying
-    -- access rights of the handle.
-    dwAccess :: DWORD
-  , -- | @name@ is a null-terminated UTF-16 string to associate with the
-    -- underlying synchronization primitive referenced by NT handles exported
-    -- from the created semaphore.
-    name :: LPCWSTR
-  }
-  deriving (Typeable)
-deriving instance Show ExportSemaphoreWin32HandleInfoKHR
-
-instance ToCStruct ExportSemaphoreWin32HandleInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExportSemaphoreWin32HandleInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES))) (attributes)
-    poke ((p `plusPtr` 24 :: Ptr DWORD)) (dwAccess)
-    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (name)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr DWORD)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (zero)
-    f
-
-instance FromCStruct ExportSemaphoreWin32HandleInfoKHR where
-  peekCStruct p = do
-    pAttributes <- peek @(Ptr SECURITY_ATTRIBUTES) ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES)))
-    dwAccess <- peek @DWORD ((p `plusPtr` 24 :: Ptr DWORD))
-    name <- peek @LPCWSTR ((p `plusPtr` 32 :: Ptr LPCWSTR))
-    pure $ ExportSemaphoreWin32HandleInfoKHR
-             pAttributes dwAccess name
-
-instance Storable ExportSemaphoreWin32HandleInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExportSemaphoreWin32HandleInfoKHR where
-  zero = ExportSemaphoreWin32HandleInfoKHR
-           zero
-           zero
-           zero
-
-
--- | VkD3D12FenceSubmitInfoKHR - Structure specifying values for Direct3D 12
--- fence-backed semaphores
---
--- = Description
---
--- If the semaphore in
--- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pWaitSemaphores@ or
--- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pSignalSemaphores@
--- corresponding to an entry in @pWaitSemaphoreValues@ or
--- @pSignalSemaphoreValues@ respectively does not currently have a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-payloads payload>
--- referring to a Direct3D 12 fence, the implementation /must/ ignore the
--- value in the @pWaitSemaphoreValues@ or @pSignalSemaphoreValues@ entry.
---
--- Note
---
--- As the introduction of the external semaphore handle type
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT'
--- predates that of timeline semaphores, support for importing semaphore
--- payloads from external handles of that type into semaphores created
--- (implicitly or explicitly) with a
--- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
--- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY' is
--- preserved for backwards compatibility. However, applications /should/
--- prefer importing such handle types into semaphores created with a
--- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
--- 'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE',
--- and use the
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
--- structure instead of the 'D3D12FenceSubmitInfoKHR' structure to specify
--- the values to use when waiting for and signaling such semaphores.
---
--- == Valid Usage
---
--- -   @waitSemaphoreValuesCount@ /must/ be the same value as
---     'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@waitSemaphoreCount@,
---     where 'Graphics.Vulkan.Core10.Queue.SubmitInfo' is in the @pNext@
---     chain of this 'D3D12FenceSubmitInfoKHR' structure
---
--- -   @signalSemaphoreValuesCount@ /must/ be the same value as
---     'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@signalSemaphoreCount@,
---     where 'Graphics.Vulkan.Core10.Queue.SubmitInfo' is in the @pNext@
---     chain of this 'D3D12FenceSubmitInfoKHR' structure
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR'
---
--- -   If @waitSemaphoreValuesCount@ is not @0@, and @pWaitSemaphoreValues@
---     is not @NULL@, @pWaitSemaphoreValues@ /must/ be a valid pointer to
---     an array of @waitSemaphoreValuesCount@ @uint64_t@ values
---
--- -   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
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data D3D12FenceSubmitInfoKHR = D3D12FenceSubmitInfoKHR
-  { -- | @pWaitSemaphoreValues@ is a pointer to an array of
-    -- @waitSemaphoreValuesCount@ values for the corresponding semaphores in
-    -- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pWaitSemaphores@ to wait
-    -- for.
-    waitSemaphoreValues :: Either Word32 (Vector Word64)
-  , -- | @pSignalSemaphoreValues@ is a pointer to an array of
-    -- @signalSemaphoreValuesCount@ values for the corresponding semaphores in
-    -- 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pSignalSemaphores@ to set
-    -- when signaled.
-    signalSemaphoreValues :: Either Word32 (Vector Word64)
-  }
-  deriving (Typeable)
-deriving instance Show D3D12FenceSubmitInfoKHR
-
-instance ToCStruct D3D12FenceSubmitInfoKHR where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p D3D12FenceSubmitInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (waitSemaphoreValues)) :: Word32))
-    pWaitSemaphoreValues'' <- case (waitSemaphoreValues) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPWaitSemaphoreValues' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (v)) * 8) 8
-        lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphoreValues' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (v)
-        pure $ pPWaitSemaphoreValues'
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word64))) pWaitSemaphoreValues''
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (signalSemaphoreValues)) :: Word32))
-    pSignalSemaphoreValues'' <- case (signalSemaphoreValues) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPSignalSemaphoreValues' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (v)) * 8) 8
-        lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphoreValues' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (v)
-        pure $ pPSignalSemaphoreValues'
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word64))) pSignalSemaphoreValues''
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct D3D12FenceSubmitInfoKHR where
-  peekCStruct p = do
-    waitSemaphoreValuesCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pWaitSemaphoreValues <- peek @(Ptr Word64) ((p `plusPtr` 24 :: Ptr (Ptr Word64)))
-    pWaitSemaphoreValues' <- maybePeek (\j -> generateM (fromIntegral waitSemaphoreValuesCount) (\i -> peek @Word64 (((j) `advancePtrBytes` (8 * (i)) :: Ptr Word64)))) pWaitSemaphoreValues
-    let pWaitSemaphoreValues'' = maybe (Left waitSemaphoreValuesCount) Right pWaitSemaphoreValues'
-    signalSemaphoreValuesCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pSignalSemaphoreValues <- peek @(Ptr Word64) ((p `plusPtr` 40 :: Ptr (Ptr Word64)))
-    pSignalSemaphoreValues' <- maybePeek (\j -> generateM (fromIntegral signalSemaphoreValuesCount) (\i -> peek @Word64 (((j) `advancePtrBytes` (8 * (i)) :: Ptr Word64)))) pSignalSemaphoreValues
-    let pSignalSemaphoreValues'' = maybe (Left signalSemaphoreValuesCount) Right pSignalSemaphoreValues'
-    pure $ D3D12FenceSubmitInfoKHR
-             pWaitSemaphoreValues'' pSignalSemaphoreValues''
-
-instance Zero D3D12FenceSubmitInfoKHR where
-  zero = D3D12FenceSubmitInfoKHR
-           (Left 0)
-           (Left 0)
-
-
--- | VkSemaphoreGetWin32HandleInfoKHR - Structure describing a Win32 handle
--- semaphore export operation
---
--- = Description
---
--- The properties of the handle returned depend on the value of
--- @handleType@. See
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
--- 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.ExportSemaphoreCreateInfo'::@handleTypes@
---     when the @semaphore@’s current payload was created
---
--- -   If @handleType@ is defined as an NT handle,
---     'getSemaphoreWin32HandleKHR' /must/ be called no more than once for
---     each valid unique combination of @semaphore@ and @handleType@
---
--- -   @semaphore@ /must/ not currently have its payload replaced by an
---     imported payload as described below in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>
---     unless that imported payload’s handle type was included in
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties'::@exportFromImportedHandleTypes@
---     for @handleType@
---
--- -   If @handleType@ refers to a handle type with copy payload
---     transference semantics, as defined below in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>,
---     there /must/ be no queue waiting on @semaphore@
---
--- -   If @handleType@ refers to a handle type with copy payload
---     transference semantics, @semaphore@ /must/ be signaled, or have an
---     associated
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
---     pending execution
---
--- -   @handleType@ /must/ be defined as an NT handle or a global share
---     handle
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @semaphore@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Semaphore' handle
---
--- -   @handleType@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
---     value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getSemaphoreWin32HandleKHR'
-data SemaphoreGetWin32HandleInfoKHR = SemaphoreGetWin32HandleInfoKHR
-  { -- | @semaphore@ is the semaphore from which state will be exported.
-    semaphore :: Semaphore
-  , -- | @handleType@ is the type of handle requested.
-    handleType :: ExternalSemaphoreHandleTypeFlagBits
-  }
-  deriving (Typeable)
-deriving instance Show SemaphoreGetWin32HandleInfoKHR
-
-instance ToCStruct SemaphoreGetWin32HandleInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SemaphoreGetWin32HandleInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (semaphore)
-    poke ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (handleType)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (zero)
-    f
-
-instance FromCStruct SemaphoreGetWin32HandleInfoKHR where
-  peekCStruct p = do
-    semaphore <- peek @Semaphore ((p `plusPtr` 16 :: Ptr Semaphore))
-    handleType <- peek @ExternalSemaphoreHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits))
-    pure $ SemaphoreGetWin32HandleInfoKHR
-             semaphore handleType
-
-instance Storable SemaphoreGetWin32HandleInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SemaphoreGetWin32HandleInfoKHR where
-  zero = SemaphoreGetWin32HandleInfoKHR
-           zero
-           zero
-
-
-type KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION"
-pattern KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION = 1
-
-
-type KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME = "VK_KHR_external_semaphore_win32"
-
--- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME"
-pattern KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME = "VK_KHR_external_semaphore_win32"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs-boot
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32  ( D3D12FenceSubmitInfoKHR
-                                                                   , ExportSemaphoreWin32HandleInfoKHR
-                                                                   , ImportSemaphoreWin32HandleInfoKHR
-                                                                   , SemaphoreGetWin32HandleInfoKHR
-                                                                   ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data D3D12FenceSubmitInfoKHR
-
-instance ToCStruct D3D12FenceSubmitInfoKHR
-instance Show D3D12FenceSubmitInfoKHR
-
-instance FromCStruct D3D12FenceSubmitInfoKHR
-
-
-data ExportSemaphoreWin32HandleInfoKHR
-
-instance ToCStruct ExportSemaphoreWin32HandleInfoKHR
-instance Show ExportSemaphoreWin32HandleInfoKHR
-
-instance FromCStruct ExportSemaphoreWin32HandleInfoKHR
-
-
-data ImportSemaphoreWin32HandleInfoKHR
-
-instance ToCStruct ImportSemaphoreWin32HandleInfoKHR
-instance Show ImportSemaphoreWin32HandleInfoKHR
-
-instance FromCStruct ImportSemaphoreWin32HandleInfoKHR
-
-
-data SemaphoreGetWin32HandleInfoKHR
-
-instance ToCStruct SemaphoreGetWin32HandleInfoKHR
-instance Show SemaphoreGetWin32HandleInfoKHR
-
-instance FromCStruct SemaphoreGetWin32HandleInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_get_display_properties2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_get_display_properties2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_get_display_properties2.hs
+++ /dev/null
@@ -1,649 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2  ( getPhysicalDeviceDisplayProperties2KHR
-                                                                  , getPhysicalDeviceDisplayPlaneProperties2KHR
-                                                                  , getDisplayModeProperties2KHR
-                                                                  , getDisplayPlaneCapabilities2KHR
-                                                                  , DisplayProperties2KHR(..)
-                                                                  , DisplayPlaneProperties2KHR(..)
-                                                                  , DisplayModeProperties2KHR(..)
-                                                                  , DisplayPlaneInfo2KHR(..)
-                                                                  , DisplayPlaneCapabilities2KHR(..)
-                                                                  , KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION
-                                                                  , pattern KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION
-                                                                  , KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME
-                                                                  , pattern KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME
-                                                                  , DisplayKHR(..)
-                                                                  , DisplayModeKHR(..)
-                                                                  , DisplayPropertiesKHR(..)
-                                                                  , DisplayPlanePropertiesKHR(..)
-                                                                  , DisplayModeParametersKHR(..)
-                                                                  , DisplayModePropertiesKHR(..)
-                                                                  , DisplayPlaneCapabilitiesKHR(..)
-                                                                  , DisplayPlaneAlphaFlagBitsKHR(..)
-                                                                  , DisplayPlaneAlphaFlagsKHR
-                                                                  , SurfaceTransformFlagBitsKHR(..)
-                                                                  , SurfaceTransformFlagsKHR
-                                                                  ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR)
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR(..))
-import Graphics.Vulkan.Extensions.Handles (DisplayModeKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayModePropertiesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPlaneCapabilitiesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPlanePropertiesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPropertiesKHR)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetDisplayModeProperties2KHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetDisplayPlaneCapabilities2KHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceDisplayPlaneProperties2KHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceDisplayProperties2KHR))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (DisplayKHR(..))
-import Graphics.Vulkan.Extensions.Handles (DisplayModeKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayModeParametersKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayModePropertiesKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPlaneAlphaFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPlaneAlphaFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPlaneCapabilitiesKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPlanePropertiesKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (DisplayPropertiesKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagsKHR)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceDisplayProperties2KHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayProperties2KHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayProperties2KHR -> IO Result
-
--- | vkGetPhysicalDeviceDisplayProperties2KHR - Query information about the
--- available displays
---
--- = 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
---     'DisplayProperties2KHR' structures.
---
--- = Description
---
--- 'getPhysicalDeviceDisplayProperties2KHR' behaves similarly to
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPropertiesKHR',
--- with the ability to return extended information via chained output
--- structures.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' 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@ 'DisplayProperties2KHR' structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'DisplayProperties2KHR', 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceDisplayProperties2KHR :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector DisplayProperties2KHR))
-getPhysicalDeviceDisplayProperties2KHR physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceDisplayProperties2KHR' = mkVkGetPhysicalDeviceDisplayProperties2KHR (pVkGetPhysicalDeviceDisplayProperties2KHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceDisplayProperties2KHR' physicalDevice' (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @DisplayProperties2KHR ((fromIntegral (pPropertyCount)) * 64)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 64) :: Ptr DisplayProperties2KHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkGetPhysicalDeviceDisplayProperties2KHR' physicalDevice' (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayProperties2KHR (((pPProperties) `advancePtrBytes` (64 * (i)) :: Ptr DisplayProperties2KHR)))
-  pure $ ((r'), pProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceDisplayPlaneProperties2KHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPlaneProperties2KHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPlaneProperties2KHR -> IO Result
-
--- | vkGetPhysicalDeviceDisplayPlaneProperties2KHR - Query information about
--- the available display planes.
---
--- = 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
---     'DisplayPlaneProperties2KHR' structures.
---
--- = Description
---
--- 'getPhysicalDeviceDisplayPlaneProperties2KHR' behaves similarly to
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPlanePropertiesKHR',
--- with the ability to return extended information via chained output
--- structures.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' 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@ 'DisplayPlaneProperties2KHR'
---     structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'DisplayPlaneProperties2KHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceDisplayPlaneProperties2KHR :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector DisplayPlaneProperties2KHR))
-getPhysicalDeviceDisplayPlaneProperties2KHR physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceDisplayPlaneProperties2KHR' = mkVkGetPhysicalDeviceDisplayPlaneProperties2KHR (pVkGetPhysicalDeviceDisplayPlaneProperties2KHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceDisplayPlaneProperties2KHR' physicalDevice' (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @DisplayPlaneProperties2KHR ((fromIntegral (pPropertyCount)) * 32)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 32) :: Ptr DisplayPlaneProperties2KHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkGetPhysicalDeviceDisplayPlaneProperties2KHR' physicalDevice' (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayPlaneProperties2KHR (((pPProperties) `advancePtrBytes` (32 * (i)) :: Ptr DisplayPlaneProperties2KHR)))
-  pure $ ((r'), pProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDisplayModeProperties2KHR
-  :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> Ptr Word32 -> Ptr DisplayModeProperties2KHR -> IO Result) -> Ptr PhysicalDevice_T -> DisplayKHR -> Ptr Word32 -> Ptr DisplayModeProperties2KHR -> IO Result
-
--- | vkGetDisplayModeProperties2KHR - Query information about the available
--- display modes.
---
--- = 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
---     'DisplayModeProperties2KHR' structures.
---
--- = Description
---
--- 'getDisplayModeProperties2KHR' behaves similarly to
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getDisplayModePropertiesKHR',
--- with the ability to return extended information via chained output
--- structures.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @display@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DisplayKHR' 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@ 'DisplayModeProperties2KHR'
---     structures
---
--- -   @display@ /must/ have been created, allocated, or retrieved from
---     @physicalDevice@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayKHR',
--- 'DisplayModeProperties2KHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getDisplayModeProperties2KHR :: forall io . MonadIO io => PhysicalDevice -> DisplayKHR -> io (Result, ("properties" ::: Vector DisplayModeProperties2KHR))
-getDisplayModeProperties2KHR physicalDevice display = liftIO . evalContT $ do
-  let vkGetDisplayModeProperties2KHR' = mkVkGetDisplayModeProperties2KHR (pVkGetDisplayModeProperties2KHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetDisplayModeProperties2KHR' physicalDevice' (display) (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @DisplayModeProperties2KHR ((fromIntegral (pPropertyCount)) * 40)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 40) :: Ptr DisplayModeProperties2KHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkGetDisplayModeProperties2KHR' physicalDevice' (display) (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayModeProperties2KHR (((pPProperties) `advancePtrBytes` (40 * (i)) :: Ptr DisplayModeProperties2KHR)))
-  pure $ ((r'), pProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDisplayPlaneCapabilities2KHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr DisplayPlaneInfo2KHR -> Ptr DisplayPlaneCapabilities2KHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr DisplayPlaneInfo2KHR -> Ptr DisplayPlaneCapabilities2KHR -> IO Result
-
--- | vkGetDisplayPlaneCapabilities2KHR - Query capabilities of a mode and
--- plane combination
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device associated with
---     @pDisplayPlaneInfo@.
---
--- -   @pDisplayPlaneInfo@ is a pointer to a 'DisplayPlaneInfo2KHR'
---     structure describing the plane and mode.
---
--- -   @pCapabilities@ is a pointer to a 'DisplayPlaneCapabilities2KHR'
---     structure in which the capabilities are returned.
---
--- = Description
---
--- 'getDisplayPlaneCapabilities2KHR' behaves similarly to
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getDisplayPlaneCapabilitiesKHR',
--- with the ability to specify extended inputs via chained input
--- structures, and to return extended information via chained output
--- structures.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'DisplayPlaneCapabilities2KHR', 'DisplayPlaneInfo2KHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getDisplayPlaneCapabilities2KHR :: forall io . MonadIO io => PhysicalDevice -> DisplayPlaneInfo2KHR -> io (DisplayPlaneCapabilities2KHR)
-getDisplayPlaneCapabilities2KHR physicalDevice displayPlaneInfo = liftIO . evalContT $ do
-  let vkGetDisplayPlaneCapabilities2KHR' = mkVkGetDisplayPlaneCapabilities2KHR (pVkGetDisplayPlaneCapabilities2KHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pDisplayPlaneInfo <- ContT $ withCStruct (displayPlaneInfo)
-  pPCapabilities <- ContT (withZeroCStruct @DisplayPlaneCapabilities2KHR)
-  r <- lift $ vkGetDisplayPlaneCapabilities2KHR' (physicalDeviceHandle (physicalDevice)) pDisplayPlaneInfo (pPCapabilities)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pCapabilities <- lift $ peekCStruct @DisplayPlaneCapabilities2KHR pPCapabilities
-  pure $ (pCapabilities)
-
-
--- | VkDisplayProperties2KHR - Structure describing an available display
--- device
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceDisplayProperties2KHR'
-data DisplayProperties2KHR = DisplayProperties2KHR
-  { -- | @displayProperties@ is a
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR'
-    -- structure.
-    displayProperties :: DisplayPropertiesKHR }
-  deriving (Typeable)
-deriving instance Show DisplayProperties2KHR
-
-instance ToCStruct DisplayProperties2KHR where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayProperties2KHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPropertiesKHR)) (displayProperties) . ($ ())
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPropertiesKHR)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct DisplayProperties2KHR where
-  peekCStruct p = do
-    displayProperties <- peekCStruct @DisplayPropertiesKHR ((p `plusPtr` 16 :: Ptr DisplayPropertiesKHR))
-    pure $ DisplayProperties2KHR
-             displayProperties
-
-instance Zero DisplayProperties2KHR where
-  zero = DisplayProperties2KHR
-           zero
-
-
--- | VkDisplayPlaneProperties2KHR - Structure describing an available display
--- plane
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPlanePropertiesKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceDisplayPlaneProperties2KHR'
-data DisplayPlaneProperties2KHR = DisplayPlaneProperties2KHR
-  { -- | @displayPlaneProperties@ is a
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPlanePropertiesKHR'
-    -- structure.
-    displayPlaneProperties :: DisplayPlanePropertiesKHR }
-  deriving (Typeable)
-deriving instance Show DisplayPlaneProperties2KHR
-
-instance ToCStruct DisplayPlaneProperties2KHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayPlaneProperties2KHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPlanePropertiesKHR)) (displayPlaneProperties) . ($ ())
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPlanePropertiesKHR)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct DisplayPlaneProperties2KHR where
-  peekCStruct p = do
-    displayPlaneProperties <- peekCStruct @DisplayPlanePropertiesKHR ((p `plusPtr` 16 :: Ptr DisplayPlanePropertiesKHR))
-    pure $ DisplayPlaneProperties2KHR
-             displayPlaneProperties
-
-instance Zero DisplayPlaneProperties2KHR where
-  zero = DisplayPlaneProperties2KHR
-           zero
-
-
--- | VkDisplayModeProperties2KHR - Structure describing an available display
--- mode
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayModePropertiesKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getDisplayModeProperties2KHR'
-data DisplayModeProperties2KHR = DisplayModeProperties2KHR
-  { -- | @displayModeProperties@ is a
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayModePropertiesKHR'
-    -- structure.
-    displayModeProperties :: DisplayModePropertiesKHR }
-  deriving (Typeable)
-deriving instance Show DisplayModeProperties2KHR
-
-instance ToCStruct DisplayModeProperties2KHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayModeProperties2KHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayModePropertiesKHR)) (displayModeProperties) . ($ ())
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayModePropertiesKHR)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct DisplayModeProperties2KHR where
-  peekCStruct p = do
-    displayModeProperties <- peekCStruct @DisplayModePropertiesKHR ((p `plusPtr` 16 :: Ptr DisplayModePropertiesKHR))
-    pure $ DisplayModeProperties2KHR
-             displayModeProperties
-
-instance Zero DisplayModeProperties2KHR where
-  zero = DisplayModeProperties2KHR
-           zero
-
-
--- | VkDisplayPlaneInfo2KHR - Structure defining the intended configuration
--- of a display plane
---
--- = Description
---
--- Note
---
--- This parameter also implicitly specifies a display.
---
--- -   @planeIndex@ is the plane which the application intends to use with
---     the display.
---
--- The members of 'DisplayPlaneInfo2KHR' correspond to the arguments to
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.getDisplayPlaneCapabilitiesKHR',
--- with @sType@ and @pNext@ added for extensibility.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @mode@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR' handle
---
--- == Host Synchronization
---
--- -   Host access to @mode@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.DisplayModeKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getDisplayPlaneCapabilities2KHR'
-data DisplayPlaneInfo2KHR = DisplayPlaneInfo2KHR
-  { -- | @mode@ is the display mode the application intends to program when using
-    -- the specified plane.
-    mode :: DisplayModeKHR
-  , -- No documentation found for Nested "VkDisplayPlaneInfo2KHR" "planeIndex"
-    planeIndex :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DisplayPlaneInfo2KHR
-
-instance ToCStruct DisplayPlaneInfo2KHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayPlaneInfo2KHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DisplayModeKHR)) (mode)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (planeIndex)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DisplayModeKHR)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DisplayPlaneInfo2KHR where
-  peekCStruct p = do
-    mode <- peek @DisplayModeKHR ((p `plusPtr` 16 :: Ptr DisplayModeKHR))
-    planeIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pure $ DisplayPlaneInfo2KHR
-             mode planeIndex
-
-instance Storable DisplayPlaneInfo2KHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DisplayPlaneInfo2KHR where
-  zero = DisplayPlaneInfo2KHR
-           zero
-           zero
-
-
--- | VkDisplayPlaneCapabilities2KHR - Structure describing the capabilities
--- of a mode and plane combination
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPlaneCapabilitiesKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getDisplayPlaneCapabilities2KHR'
-data DisplayPlaneCapabilities2KHR = DisplayPlaneCapabilities2KHR
-  { -- | @capabilities@ is a
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.DisplayPlaneCapabilitiesKHR'
-    -- structure.
-    capabilities :: DisplayPlaneCapabilitiesKHR }
-  deriving (Typeable)
-deriving instance Show DisplayPlaneCapabilities2KHR
-
-instance ToCStruct DisplayPlaneCapabilities2KHR where
-  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DisplayPlaneCapabilities2KHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPlaneCapabilitiesKHR)) (capabilities) . ($ ())
-    lift $ f
-  cStructSize = 88
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPlaneCapabilitiesKHR)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct DisplayPlaneCapabilities2KHR where
-  peekCStruct p = do
-    capabilities <- peekCStruct @DisplayPlaneCapabilitiesKHR ((p `plusPtr` 16 :: Ptr DisplayPlaneCapabilitiesKHR))
-    pure $ DisplayPlaneCapabilities2KHR
-             capabilities
-
-instance Zero DisplayPlaneCapabilities2KHR where
-  zero = DisplayPlaneCapabilities2KHR
-           zero
-
-
-type KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION"
-pattern KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION = 1
-
-
-type KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME = "VK_KHR_get_display_properties2"
-
--- No documentation found for TopLevel "VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME"
-pattern KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME = "VK_KHR_get_display_properties2"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_get_display_properties2.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_get_display_properties2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_get_display_properties2.hs-boot
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2  ( DisplayModeProperties2KHR
-                                                                  , DisplayPlaneCapabilities2KHR
-                                                                  , DisplayPlaneInfo2KHR
-                                                                  , DisplayPlaneProperties2KHR
-                                                                  , DisplayProperties2KHR
-                                                                  ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DisplayModeProperties2KHR
-
-instance ToCStruct DisplayModeProperties2KHR
-instance Show DisplayModeProperties2KHR
-
-instance FromCStruct DisplayModeProperties2KHR
-
-
-data DisplayPlaneCapabilities2KHR
-
-instance ToCStruct DisplayPlaneCapabilities2KHR
-instance Show DisplayPlaneCapabilities2KHR
-
-instance FromCStruct DisplayPlaneCapabilities2KHR
-
-
-data DisplayPlaneInfo2KHR
-
-instance ToCStruct DisplayPlaneInfo2KHR
-instance Show DisplayPlaneInfo2KHR
-
-instance FromCStruct DisplayPlaneInfo2KHR
-
-
-data DisplayPlaneProperties2KHR
-
-instance ToCStruct DisplayPlaneProperties2KHR
-instance Show DisplayPlaneProperties2KHR
-
-instance FromCStruct DisplayPlaneProperties2KHR
-
-
-data DisplayProperties2KHR
-
-instance ToCStruct DisplayProperties2KHR
-instance Show DisplayProperties2KHR
-
-instance FromCStruct DisplayProperties2KHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_get_memory_requirements2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_get_memory_requirements2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_get_memory_requirements2.hs
+++ /dev/null
@@ -1,93 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2  ( pattern STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR
-                                                                   , pattern STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR
-                                                                   , pattern STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR
-                                                                   , pattern STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR
-                                                                   , pattern STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR
-                                                                   , getBufferMemoryRequirements2KHR
-                                                                   , getImageMemoryRequirements2KHR
-                                                                   , getImageSparseMemoryRequirements2KHR
-                                                                   , BufferMemoryRequirementsInfo2KHR
-                                                                   , ImageMemoryRequirementsInfo2KHR
-                                                                   , ImageSparseMemoryRequirementsInfo2KHR
-                                                                   , SparseImageMemoryRequirements2KHR
-                                                                   , KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION
-                                                                   , pattern KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION
-                                                                   , KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME
-                                                                   , pattern KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME
-                                                                   ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (getBufferMemoryRequirements2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (getImageMemoryRequirements2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (getImageSparseMemoryRequirements2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (BufferMemoryRequirementsInfo2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageMemoryRequirementsInfo2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageSparseMemoryRequirementsInfo2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (SparseImageMemoryRequirements2)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR"
-pattern STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR"
-pattern STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR"
-pattern STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR"
-pattern STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR"
-pattern STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2
-
-
--- No documentation found for TopLevel "vkGetBufferMemoryRequirements2KHR"
-getBufferMemoryRequirements2KHR = getBufferMemoryRequirements2
-
-
--- No documentation found for TopLevel "vkGetImageMemoryRequirements2KHR"
-getImageMemoryRequirements2KHR = getImageMemoryRequirements2
-
-
--- No documentation found for TopLevel "vkGetImageSparseMemoryRequirements2KHR"
-getImageSparseMemoryRequirements2KHR = getImageSparseMemoryRequirements2
-
-
--- No documentation found for TopLevel "VkBufferMemoryRequirementsInfo2KHR"
-type BufferMemoryRequirementsInfo2KHR = BufferMemoryRequirementsInfo2
-
-
--- No documentation found for TopLevel "VkImageMemoryRequirementsInfo2KHR"
-type ImageMemoryRequirementsInfo2KHR = ImageMemoryRequirementsInfo2
-
-
--- No documentation found for TopLevel "VkImageSparseMemoryRequirementsInfo2KHR"
-type ImageSparseMemoryRequirementsInfo2KHR = ImageSparseMemoryRequirementsInfo2
-
-
--- No documentation found for TopLevel "VkSparseImageMemoryRequirements2KHR"
-type SparseImageMemoryRequirements2KHR = SparseImageMemoryRequirements2
-
-
-type KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION"
-pattern KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION = 1
-
-
-type KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME = "VK_KHR_get_memory_requirements2"
-
--- No documentation found for TopLevel "VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME"
-pattern KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME = "VK_KHR_get_memory_requirements2"
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_get_physical_device_properties2.hs
+++ /dev/null
@@ -1,171 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR
-                                                                          , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR
-                                                                          , pattern STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR
-                                                                          , pattern STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR
-                                                                          , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR
-                                                                          , pattern STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR
-                                                                          , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR
-                                                                          , pattern STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR
-                                                                          , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR
-                                                                          , getPhysicalDeviceFeatures2KHR
-                                                                          , getPhysicalDeviceProperties2KHR
-                                                                          , getPhysicalDeviceFormatProperties2KHR
-                                                                          , getPhysicalDeviceImageFormatProperties2KHR
-                                                                          , getPhysicalDeviceQueueFamilyProperties2KHR
-                                                                          , getPhysicalDeviceMemoryProperties2KHR
-                                                                          , getPhysicalDeviceSparseImageFormatProperties2KHR
-                                                                          , PhysicalDeviceFeatures2KHR
-                                                                          , PhysicalDeviceProperties2KHR
-                                                                          , FormatProperties2KHR
-                                                                          , ImageFormatProperties2KHR
-                                                                          , PhysicalDeviceImageFormatInfo2KHR
-                                                                          , QueueFamilyProperties2KHR
-                                                                          , PhysicalDeviceMemoryProperties2KHR
-                                                                          , SparseImageFormatProperties2KHR
-                                                                          , PhysicalDeviceSparseImageFormatInfo2KHR
-                                                                          , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION
-                                                                          , pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION
-                                                                          , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
-                                                                          , pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
-                                                                          ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceFeatures2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceFormatProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceImageFormatProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceMemoryProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceQueueFamilyProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceSparseImageFormatProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (FormatProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (ImageFormatProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceImageFormatInfo2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceMemoryProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceSparseImageFormatInfo2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (QueueFamilyProperties2)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (SparseImageFormatProperties2)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FORMAT_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR"
-pattern STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = STRUCTURE_TYPE_FORMAT_PROPERTIES_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR"
-pattern STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR"
-pattern STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR"
-pattern STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2
-
-
--- No documentation found for TopLevel "vkGetPhysicalDeviceFeatures2KHR"
-getPhysicalDeviceFeatures2KHR = getPhysicalDeviceFeatures2
-
-
--- No documentation found for TopLevel "vkGetPhysicalDeviceProperties2KHR"
-getPhysicalDeviceProperties2KHR = getPhysicalDeviceProperties2
-
-
--- No documentation found for TopLevel "vkGetPhysicalDeviceFormatProperties2KHR"
-getPhysicalDeviceFormatProperties2KHR = getPhysicalDeviceFormatProperties2
-
-
--- No documentation found for TopLevel "vkGetPhysicalDeviceImageFormatProperties2KHR"
-getPhysicalDeviceImageFormatProperties2KHR = getPhysicalDeviceImageFormatProperties2
-
-
--- No documentation found for TopLevel "vkGetPhysicalDeviceQueueFamilyProperties2KHR"
-getPhysicalDeviceQueueFamilyProperties2KHR = getPhysicalDeviceQueueFamilyProperties2
-
-
--- No documentation found for TopLevel "vkGetPhysicalDeviceMemoryProperties2KHR"
-getPhysicalDeviceMemoryProperties2KHR = getPhysicalDeviceMemoryProperties2
-
-
--- No documentation found for TopLevel "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"
-getPhysicalDeviceSparseImageFormatProperties2KHR = getPhysicalDeviceSparseImageFormatProperties2
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceFeatures2KHR"
-type PhysicalDeviceFeatures2KHR = PhysicalDeviceFeatures2
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceProperties2KHR"
-type PhysicalDeviceProperties2KHR = PhysicalDeviceProperties2
-
-
--- No documentation found for TopLevel "VkFormatProperties2KHR"
-type FormatProperties2KHR = FormatProperties2
-
-
--- No documentation found for TopLevel "VkImageFormatProperties2KHR"
-type ImageFormatProperties2KHR = ImageFormatProperties2
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceImageFormatInfo2KHR"
-type PhysicalDeviceImageFormatInfo2KHR = PhysicalDeviceImageFormatInfo2
-
-
--- No documentation found for TopLevel "VkQueueFamilyProperties2KHR"
-type QueueFamilyProperties2KHR = QueueFamilyProperties2
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceMemoryProperties2KHR"
-type PhysicalDeviceMemoryProperties2KHR = PhysicalDeviceMemoryProperties2
-
-
--- No documentation found for TopLevel "VkSparseImageFormatProperties2KHR"
-type SparseImageFormatProperties2KHR = SparseImageFormatProperties2
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceSparseImageFormatInfo2KHR"
-type PhysicalDeviceSparseImageFormatInfo2KHR = PhysicalDeviceSparseImageFormatInfo2
-
-
-type KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION"
-pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION = 2
-
-
-type KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME = "VK_KHR_get_physical_device_properties2"
-
--- No documentation found for TopLevel "VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME"
-pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME = "VK_KHR_get_physical_device_properties2"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
+++ /dev/null
@@ -1,528 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2  ( getPhysicalDeviceSurfaceCapabilities2KHR
-                                                                    , getPhysicalDeviceSurfaceFormats2KHR
-                                                                    , PhysicalDeviceSurfaceInfo2KHR(..)
-                                                                    , SurfaceCapabilities2KHR(..)
-                                                                    , SurfaceFormat2KHR(..)
-                                                                    , KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION
-                                                                    , pattern KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION
-                                                                    , KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME
-                                                                    , pattern KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME
-                                                                    , SurfaceKHR(..)
-                                                                    , SurfaceCapabilitiesKHR(..)
-                                                                    , SurfaceFormatKHR(..)
-                                                                    , ColorSpaceKHR(..)
-                                                                    , CompositeAlphaFlagBitsKHR(..)
-                                                                    , CompositeAlphaFlagsKHR
-                                                                    , SurfaceTransformFlagBitsKHR(..)
-                                                                    , SurfaceTransformFlagsKHR
-                                                                    ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr (DisplayNativeHdrSurfaceCapabilitiesAMD)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceCapabilities2KHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceFormats2KHR))
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (SharedPresentSurfaceCapabilitiesKHR)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceCapabilitiesFullScreenExclusiveEXT)
-import Graphics.Vulkan.Extensions.VK_KHR_surface (SurfaceCapabilitiesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_surface (SurfaceFormatKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveWin32InfoEXT)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities (SurfaceProtectedCapabilitiesKHR)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace (ColorSpaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (CompositeAlphaFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (CompositeAlphaFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_surface (SurfaceCapabilitiesKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_surface (SurfaceFormatKHR(..))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagsKHR)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSurfaceCapabilities2KHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr (SurfaceCapabilities2KHR b) -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr (SurfaceCapabilities2KHR b) -> IO Result
-
--- | vkGetPhysicalDeviceSurfaceCapabilities2KHR - Reports capabilities of a
--- surface on a physical device
---
--- = 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.createSwapchainKHR'.
---
--- -   @pSurfaceInfo@ is a pointer to a 'PhysicalDeviceSurfaceInfo2KHR'
---     structure describing the surface and other fixed parameters that
---     would be consumed by
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
---
--- -   @pSurfaceCapabilities@ is a pointer to a 'SurfaceCapabilities2KHR'
---     structure in which the capabilities are returned.
---
--- = Description
---
--- 'getPhysicalDeviceSurfaceCapabilities2KHR' behaves similarly to
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
--- with the ability to specify extended inputs via chained input
--- structures, and to return extended information via chained output
--- structures.
---
--- == Valid Usage
---
--- -   If a
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT'
---     structure is included in the @pNext@ chain of
---     @pSurfaceCapabilities@, a
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
---     structure /must/ be included in the @pNext@ chain of @pSurfaceInfo@
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid
---     'PhysicalDeviceSurfaceInfo2KHR' structure
---
--- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a
---     'SurfaceCapabilities2KHR' structure
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceSurfaceInfo2KHR', 'SurfaceCapabilities2KHR'
-getPhysicalDeviceSurfaceCapabilities2KHR :: forall a b io . (PokeChain a, PokeChain b, PeekChain b, MonadIO io) => PhysicalDevice -> PhysicalDeviceSurfaceInfo2KHR a -> io (SurfaceCapabilities2KHR b)
-getPhysicalDeviceSurfaceCapabilities2KHR physicalDevice surfaceInfo = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSurfaceCapabilities2KHR' = mkVkGetPhysicalDeviceSurfaceCapabilities2KHR (pVkGetPhysicalDeviceSurfaceCapabilities2KHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pSurfaceInfo <- ContT $ withCStruct (surfaceInfo)
-  pPSurfaceCapabilities <- ContT (withZeroCStruct @(SurfaceCapabilities2KHR _))
-  r <- lift $ vkGetPhysicalDeviceSurfaceCapabilities2KHR' (physicalDeviceHandle (physicalDevice)) pSurfaceInfo (pPSurfaceCapabilities)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurfaceCapabilities <- lift $ peekCStruct @(SurfaceCapabilities2KHR _) pPSurfaceCapabilities
-  pure $ (pSurfaceCapabilities)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSurfaceFormats2KHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr Word32 -> Ptr SurfaceFormat2KHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr Word32 -> Ptr SurfaceFormat2KHR -> IO Result
-
--- | vkGetPhysicalDeviceSurfaceFormats2KHR - Query color formats supported by
--- surface
---
--- = 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.createSwapchainKHR'.
---
--- -   @pSurfaceInfo@ is a pointer to a 'PhysicalDeviceSurfaceInfo2KHR'
---     structure describing the surface and other fixed parameters that
---     would be consumed by
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
---
--- -   @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
---     'SurfaceFormat2KHR' structures.
---
--- = Description
---
--- 'getPhysicalDeviceSurfaceFormats2KHR' behaves similarly to
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceFormatsKHR',
--- with the ability to be extended via @pNext@ chains.
---
--- If @pSurfaceFormats@ is @NULL@, then the number of format tuples
--- supported for the given @surface@ is returned in @pSurfaceFormatCount@.
--- 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@,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' to indicate
--- that not all the available values were returned.
---
--- == Valid Usage
---
--- -   @pSurfaceInfo->surface@ /must/ be supported by @physicalDevice@, as
---     reported by
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR'
---     or an equivalent platform-specific mechanism
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid
---     'PhysicalDeviceSurfaceInfo2KHR' 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@ 'SurfaceFormat2KHR'
---     structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'PhysicalDeviceSurfaceInfo2KHR', 'SurfaceFormat2KHR'
-getPhysicalDeviceSurfaceFormats2KHR :: forall a io . (PokeChain a, MonadIO io) => PhysicalDevice -> PhysicalDeviceSurfaceInfo2KHR a -> io (Result, ("surfaceFormats" ::: Vector SurfaceFormat2KHR))
-getPhysicalDeviceSurfaceFormats2KHR physicalDevice surfaceInfo = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSurfaceFormats2KHR' = mkVkGetPhysicalDeviceSurfaceFormats2KHR (pVkGetPhysicalDeviceSurfaceFormats2KHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pSurfaceInfo <- ContT $ withCStruct (surfaceInfo)
-  pPSurfaceFormatCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceSurfaceFormats2KHR' physicalDevice' pSurfaceInfo (pPSurfaceFormatCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurfaceFormatCount <- lift $ peek @Word32 pPSurfaceFormatCount
-  pPSurfaceFormats <- ContT $ bracket (callocBytes @SurfaceFormat2KHR ((fromIntegral (pSurfaceFormatCount)) * 24)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPSurfaceFormats `advancePtrBytes` (i * 24) :: Ptr SurfaceFormat2KHR) . ($ ())) [0..(fromIntegral (pSurfaceFormatCount)) - 1]
-  r' <- lift $ vkGetPhysicalDeviceSurfaceFormats2KHR' physicalDevice' pSurfaceInfo (pPSurfaceFormatCount) ((pPSurfaceFormats))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pSurfaceFormatCount' <- lift $ peek @Word32 pPSurfaceFormatCount
-  pSurfaceFormats' <- lift $ generateM (fromIntegral (pSurfaceFormatCount')) (\i -> peekCStruct @SurfaceFormat2KHR (((pPSurfaceFormats) `advancePtrBytes` (24 * (i)) :: Ptr SurfaceFormat2KHR)))
-  pure $ ((r'), pSurfaceFormats')
-
-
--- | VkPhysicalDeviceSurfaceInfo2KHR - Structure specifying a surface and
--- related swapchain creation parameters
---
--- = Description
---
--- The members of 'PhysicalDeviceSurfaceInfo2KHR' correspond to the
--- arguments to
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
--- with @sType@ and @pNext@ added for extensibility.
---
--- Additional capabilities of a surface /may/ be available to swapchains
--- created with different full-screen exclusive settings - particularly if
--- exclusive full-screen access is application controlled. These additional
--- capabilities /can/ be queried by adding a
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT'
--- structure to the @pNext@ chain of this structure when used to query
--- surface properties. Additionally, for Win32 surfaces with application
--- controlled exclusive full-screen access, chaining a
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
--- structure /may/ also report additional surface capabilities. These
--- additional capabilities only apply to swapchains created with the same
--- parameters included in the @pNext@ chain of
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'.
---
--- == Valid Usage
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT'
---     structure with its @fullScreenExclusive@ member set to
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT',
---     and @surface@ was created using
---     'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.createWin32SurfaceKHR',
---     a
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
---     structure /must/ be included in the @pNext@ chain
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT'
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @surface@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.getDeviceGroupSurfacePresentModes2EXT',
--- 'getPhysicalDeviceSurfaceCapabilities2KHR',
--- 'getPhysicalDeviceSurfaceFormats2KHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.getPhysicalDeviceSurfacePresentModes2EXT'
-data PhysicalDeviceSurfaceInfo2KHR (es :: [Type]) = PhysicalDeviceSurfaceInfo2KHR
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @surface@ is the surface that will be associated with the swapchain.
-    surface :: SurfaceKHR
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PhysicalDeviceSurfaceInfo2KHR es)
-
-instance Extensible PhysicalDeviceSurfaceInfo2KHR where
-  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR
-  setNext x next = x{next = next}
-  getNext PhysicalDeviceSurfaceInfo2KHR{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceSurfaceInfo2KHR e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @SurfaceFullScreenExclusiveWin32InfoEXT = Just f
-    | Just Refl <- eqT @e @SurfaceFullScreenExclusiveInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PhysicalDeviceSurfaceInfo2KHR es) where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceSurfaceInfo2KHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr SurfaceKHR)) (surface)
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr SurfaceKHR)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (PhysicalDeviceSurfaceInfo2KHR es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    surface <- peek @SurfaceKHR ((p `plusPtr` 16 :: Ptr SurfaceKHR))
-    pure $ PhysicalDeviceSurfaceInfo2KHR
-             next surface
-
-instance es ~ '[] => Zero (PhysicalDeviceSurfaceInfo2KHR es) where
-  zero = PhysicalDeviceSurfaceInfo2KHR
-           ()
-           zero
-
-
--- | VkSurfaceCapabilities2KHR - Structure describing capabilities of a
--- surface
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr.DisplayNativeHdrSurfaceCapabilitiesAMD',
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR',
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT',
---     or
---     'Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR',
--- 'getPhysicalDeviceSurfaceCapabilities2KHR'
-data SurfaceCapabilities2KHR (es :: [Type]) = SurfaceCapabilities2KHR
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @surfaceCapabilities@ is a
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'
-    -- structure describing the capabilities of the specified surface.
-    surfaceCapabilities :: SurfaceCapabilitiesKHR
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (SurfaceCapabilities2KHR es)
-
-instance Extensible SurfaceCapabilities2KHR where
-  extensibleType = STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR
-  setNext x next = x{next = next}
-  getNext SurfaceCapabilities2KHR{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SurfaceCapabilities2KHR e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @SurfaceCapabilitiesFullScreenExclusiveEXT = Just f
-    | Just Refl <- eqT @e @SurfaceProtectedCapabilitiesKHR = Just f
-    | Just Refl <- eqT @e @SharedPresentSurfaceCapabilitiesKHR = Just f
-    | Just Refl <- eqT @e @DisplayNativeHdrSurfaceCapabilitiesAMD = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (SurfaceCapabilities2KHR es) where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SurfaceCapabilities2KHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SurfaceCapabilitiesKHR)) (surfaceCapabilities) . ($ ())
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SurfaceCapabilitiesKHR)) (zero) . ($ ())
-    lift $ f
-
-instance PeekChain es => FromCStruct (SurfaceCapabilities2KHR es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    surfaceCapabilities <- peekCStruct @SurfaceCapabilitiesKHR ((p `plusPtr` 16 :: Ptr SurfaceCapabilitiesKHR))
-    pure $ SurfaceCapabilities2KHR
-             next surfaceCapabilities
-
-instance es ~ '[] => Zero (SurfaceCapabilities2KHR es) where
-  zero = SurfaceCapabilities2KHR
-           ()
-           zero
-
-
--- | VkSurfaceFormat2KHR - Structure describing a supported swapchain format
--- tuple
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR',
--- 'getPhysicalDeviceSurfaceFormats2KHR'
-data SurfaceFormat2KHR = SurfaceFormat2KHR
-  { -- | @surfaceFormat@ is a
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR' structure
-    -- describing a format-color space pair that is compatible with the
-    -- specified surface.
-    surfaceFormat :: SurfaceFormatKHR }
-  deriving (Typeable)
-deriving instance Show SurfaceFormat2KHR
-
-instance ToCStruct SurfaceFormat2KHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SurfaceFormat2KHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SurfaceFormatKHR)) (surfaceFormat) . ($ ())
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SurfaceFormatKHR)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct SurfaceFormat2KHR where
-  peekCStruct p = do
-    surfaceFormat <- peekCStruct @SurfaceFormatKHR ((p `plusPtr` 16 :: Ptr SurfaceFormatKHR))
-    pure $ SurfaceFormat2KHR
-             surfaceFormat
-
-instance Zero SurfaceFormat2KHR where
-  zero = SurfaceFormat2KHR
-           zero
-
-
-type KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION"
-pattern KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION = 1
-
-
-type KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME = "VK_KHR_get_surface_capabilities2"
-
--- No documentation found for TopLevel "VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME"
-pattern KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME = "VK_KHR_get_surface_capabilities2"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs-boot
+++ /dev/null
@@ -1,37 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2  ( PhysicalDeviceSurfaceInfo2KHR
-                                                                    , SurfaceCapabilities2KHR
-                                                                    , SurfaceFormat2KHR
-                                                                    ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-type role PhysicalDeviceSurfaceInfo2KHR nominal
-data PhysicalDeviceSurfaceInfo2KHR (es :: [Type])
-
-instance PokeChain es => ToCStruct (PhysicalDeviceSurfaceInfo2KHR es)
-instance Show (Chain es) => Show (PhysicalDeviceSurfaceInfo2KHR es)
-
-instance PeekChain es => FromCStruct (PhysicalDeviceSurfaceInfo2KHR es)
-
-
-type role SurfaceCapabilities2KHR nominal
-data SurfaceCapabilities2KHR (es :: [Type])
-
-instance PokeChain es => ToCStruct (SurfaceCapabilities2KHR es)
-instance Show (Chain es) => Show (SurfaceCapabilities2KHR es)
-
-instance PeekChain es => FromCStruct (SurfaceCapabilities2KHR es)
-
-
-data SurfaceFormat2KHR
-
-instance ToCStruct SurfaceFormat2KHR
-instance Show SurfaceFormat2KHR
-
-instance FromCStruct SurfaceFormat2KHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_image_format_list.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_image_format_list.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_image_format_list.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_image_format_list  ( pattern STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR
-                                                            , ImageFormatListCreateInfoKHR
-                                                            , KHR_IMAGE_FORMAT_LIST_SPEC_VERSION
-                                                            , pattern KHR_IMAGE_FORMAT_LIST_SPEC_VERSION
-                                                            , KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME
-                                                            , pattern KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME
-                                                            ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list (ImageFormatListCreateInfo)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO
-
-
--- No documentation found for TopLevel "VkImageFormatListCreateInfoKHR"
-type ImageFormatListCreateInfoKHR = ImageFormatListCreateInfo
-
-
-type KHR_IMAGE_FORMAT_LIST_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION"
-pattern KHR_IMAGE_FORMAT_LIST_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_IMAGE_FORMAT_LIST_SPEC_VERSION = 1
-
-
-type KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME = "VK_KHR_image_format_list"
-
--- No documentation found for TopLevel "VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME"
-pattern KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME = "VK_KHR_image_format_list"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_imageless_framebuffer.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_imageless_framebuffer.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_imageless_framebuffer.hs
+++ /dev/null
@@ -1,76 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_imageless_framebuffer  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR
-                                                                , pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR
-                                                                , pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR
-                                                                , pattern STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR
-                                                                , pattern FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR
-                                                                , PhysicalDeviceImagelessFramebufferFeaturesKHR
-                                                                , FramebufferAttachmentsCreateInfoKHR
-                                                                , FramebufferAttachmentImageInfoKHR
-                                                                , RenderPassAttachmentBeginInfoKHR
-                                                                , KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION
-                                                                , pattern KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION
-                                                                , KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME
-                                                                , pattern KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME
-                                                                ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (FramebufferAttachmentImageInfo)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (FramebufferAttachmentsCreateInfo)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (PhysicalDeviceImagelessFramebufferFeatures)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (RenderPassAttachmentBeginInfo)
-import Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits (FramebufferCreateFlags)
-import Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits (FramebufferCreateFlagBits(FRAMEBUFFER_CREATE_IMAGELESS_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR = STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR"
-pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR = STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR"
-pattern STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR = STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO
-
-
--- No documentation found for TopLevel "VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR"
-pattern FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR = FRAMEBUFFER_CREATE_IMAGELESS_BIT
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceImagelessFramebufferFeaturesKHR"
-type PhysicalDeviceImagelessFramebufferFeaturesKHR = PhysicalDeviceImagelessFramebufferFeatures
-
-
--- No documentation found for TopLevel "VkFramebufferAttachmentsCreateInfoKHR"
-type FramebufferAttachmentsCreateInfoKHR = FramebufferAttachmentsCreateInfo
-
-
--- No documentation found for TopLevel "VkFramebufferAttachmentImageInfoKHR"
-type FramebufferAttachmentImageInfoKHR = FramebufferAttachmentImageInfo
-
-
--- No documentation found for TopLevel "VkRenderPassAttachmentBeginInfoKHR"
-type RenderPassAttachmentBeginInfoKHR = RenderPassAttachmentBeginInfo
-
-
-type KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION"
-pattern KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION = 1
-
-
-type KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME = "VK_KHR_imageless_framebuffer"
-
--- No documentation found for TopLevel "VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME"
-pattern KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME = "VK_KHR_imageless_framebuffer"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs
+++ /dev/null
@@ -1,243 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_incremental_present  ( PresentRegionsKHR(..)
-                                                              , PresentRegionKHR(..)
-                                                              , RectLayerKHR(..)
-                                                              , KHR_INCREMENTAL_PRESENT_SPEC_VERSION
-                                                              , pattern KHR_INCREMENTAL_PRESENT_SPEC_VERSION
-                                                              , KHR_INCREMENTAL_PRESENT_EXTENSION_NAME
-                                                              , pattern KHR_INCREMENTAL_PRESENT_EXTENSION_NAME
-                                                              ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Utils (maybePeek)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.Either (Either)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.SharedTypes (Offset2D)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRESENT_REGIONS_KHR))
--- | VkPresentRegionsKHR - Structure hint of rectangular regions changed by
--- vkQueuePresentKHR
---
--- == Valid Usage
---
--- -   @swapchainCount@ /must/ be the same value as
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@swapchainCount@,
---     where 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'
---     is included in the @pNext@ chain of this 'PresentRegionsKHR'
---     structure
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_REGIONS_KHR'
---
--- -   If @pRegions@ is not @NULL@, @pRegions@ /must/ be a valid pointer to
---     an array of @swapchainCount@ valid 'PresentRegionKHR' structures
---
--- -   @swapchainCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'PresentRegionKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PresentRegionsKHR = PresentRegionsKHR
-  { -- | @pRegions@ is @NULL@ or a pointer to an array of 'PresentRegionKHR'
-    -- elements with @swapchainCount@ entries. If not @NULL@, each element of
-    -- @pRegions@ contains the region that has changed since the last present
-    -- to the swapchain in the corresponding entry in the
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@pSwapchains@
-    -- array.
-    regions :: Either Word32 (Vector PresentRegionKHR) }
-  deriving (Typeable)
-deriving instance Show PresentRegionsKHR
-
-instance ToCStruct PresentRegionsKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PresentRegionsKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_REGIONS_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (regions)) :: Word32))
-    pRegions'' <- case (regions) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPRegions' <- ContT $ allocaBytesAligned @PresentRegionKHR ((Data.Vector.length (v)) * 16) 8
-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (16 * (i)) :: Ptr PresentRegionKHR) (e) . ($ ())) (v)
-        pure $ pPRegions'
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr PresentRegionKHR))) pRegions''
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_REGIONS_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct PresentRegionsKHR where
-  peekCStruct p = do
-    swapchainCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pRegions <- peek @(Ptr PresentRegionKHR) ((p `plusPtr` 24 :: Ptr (Ptr PresentRegionKHR)))
-    pRegions' <- maybePeek (\j -> generateM (fromIntegral swapchainCount) (\i -> peekCStruct @PresentRegionKHR (((j) `advancePtrBytes` (16 * (i)) :: Ptr PresentRegionKHR)))) pRegions
-    let pRegions'' = maybe (Left swapchainCount) Right pRegions'
-    pure $ PresentRegionsKHR
-             pRegions''
-
-instance Zero PresentRegionsKHR where
-  zero = PresentRegionsKHR
-           (Left 0)
-
-
--- | VkPresentRegionKHR - Structure containing rectangular region changed by
--- vkQueuePresentKHR for a given VkImage
---
--- == Valid Usage (Implicit)
---
--- -   If @rectangleCount@ is not @0@, and @pRectangles@ is not @NULL@,
---     @pRectangles@ /must/ be a valid pointer to an array of
---     @rectangleCount@ valid 'RectLayerKHR' structures
---
--- = See Also
---
--- 'PresentRegionsKHR', 'RectLayerKHR'
-data PresentRegionKHR = PresentRegionKHR
-  { -- | @pRectangles@ is either @NULL@ or a pointer to an array of
-    -- 'RectLayerKHR' structures. The 'RectLayerKHR' structure is the
-    -- framebuffer coordinates, plus layer, of a portion of a presentable image
-    -- that has changed and /must/ be presented. If non-@NULL@, each entry in
-    -- @pRectangles@ is a rectangle of the given image that has changed since
-    -- the last image was presented to the given swapchain.
-    rectangles :: Either Word32 (Vector RectLayerKHR) }
-  deriving (Typeable)
-deriving instance Show PresentRegionKHR
-
-instance ToCStruct PresentRegionKHR where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PresentRegionKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (rectangles)) :: Word32))
-    pRectangles'' <- case (rectangles) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPRectangles' <- ContT $ allocaBytesAligned @RectLayerKHR ((Data.Vector.length (v)) * 20) 4
-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRectangles' `plusPtr` (20 * (i)) :: Ptr RectLayerKHR) (e) . ($ ())) (v)
-        pure $ pPRectangles'
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr RectLayerKHR))) pRectangles''
-    lift $ f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct _ f = f
-
-instance FromCStruct PresentRegionKHR where
-  peekCStruct p = do
-    rectangleCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    pRectangles <- peek @(Ptr RectLayerKHR) ((p `plusPtr` 8 :: Ptr (Ptr RectLayerKHR)))
-    pRectangles' <- maybePeek (\j -> generateM (fromIntegral rectangleCount) (\i -> peekCStruct @RectLayerKHR (((j) `advancePtrBytes` (20 * (i)) :: Ptr RectLayerKHR)))) pRectangles
-    let pRectangles'' = maybe (Left rectangleCount) Right pRectangles'
-    pure $ PresentRegionKHR
-             pRectangles''
-
-instance Zero PresentRegionKHR where
-  zero = PresentRegionKHR
-           (Left 0)
-
-
--- | VkRectLayerKHR - Structure containing a rectangle, including layer,
--- changed by vkQueuePresentKHR for a given VkImage
---
--- == Valid Usage
---
--- -   The sum of @offset@ and @extent@ /must/ be no greater than the
---     @imageExtent@ member of the
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
---     structure passed to
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'
---
--- -   @layer@ /must/ be less than the @imageArrayLayers@ member of the
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
---     structure passed to
---     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'
---
--- Some platforms allow the size of a surface to change, and then scale the
--- pixels of the image to fit the surface. 'RectLayerKHR' specifies pixels
--- of the swapchain’s image(s), which will be constant for the life of the
--- swapchain.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.SharedTypes.Offset2D', 'PresentRegionKHR'
-data RectLayerKHR = RectLayerKHR
-  { -- | @offset@ is the origin of the rectangle, in pixels.
-    offset :: Offset2D
-  , -- | @extent@ is the size of the rectangle, in pixels.
-    extent :: Extent2D
-  , -- | @layer@ is the layer of the image. For images with only one layer, the
-    -- value of @layer@ /must/ be 0.
-    layer :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show RectLayerKHR
-
-instance ToCStruct RectLayerKHR where
-  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RectLayerKHR{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Offset2D)) (offset) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (extent) . ($ ())
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (layer)
-    lift $ f
-  cStructSize = 20
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Offset2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance FromCStruct RectLayerKHR where
-  peekCStruct p = do
-    offset <- peekCStruct @Offset2D ((p `plusPtr` 0 :: Ptr Offset2D))
-    extent <- peekCStruct @Extent2D ((p `plusPtr` 8 :: Ptr Extent2D))
-    layer <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ RectLayerKHR
-             offset extent layer
-
-instance Zero RectLayerKHR where
-  zero = RectLayerKHR
-           zero
-           zero
-           zero
-
-
-type KHR_INCREMENTAL_PRESENT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION"
-pattern KHR_INCREMENTAL_PRESENT_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_INCREMENTAL_PRESENT_SPEC_VERSION = 1
-
-
-type KHR_INCREMENTAL_PRESENT_EXTENSION_NAME = "VK_KHR_incremental_present"
-
--- No documentation found for TopLevel "VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME"
-pattern KHR_INCREMENTAL_PRESENT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_INCREMENTAL_PRESENT_EXTENSION_NAME = "VK_KHR_incremental_present"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_incremental_present  ( PresentRegionKHR
-                                                              , PresentRegionsKHR
-                                                              , RectLayerKHR
-                                                              ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PresentRegionKHR
-
-instance ToCStruct PresentRegionKHR
-instance Show PresentRegionKHR
-
-instance FromCStruct PresentRegionKHR
-
-
-data PresentRegionsKHR
-
-instance ToCStruct PresentRegionsKHR
-instance Show PresentRegionsKHR
-
-instance FromCStruct PresentRegionsKHR
-
-
-data RectLayerKHR
-
-instance ToCStruct RectLayerKHR
-instance Show RectLayerKHR
-
-instance FromCStruct RectLayerKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance1.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance1.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance1.hs
+++ /dev/null
@@ -1,60 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_maintenance1  ( pattern ERROR_OUT_OF_POOL_MEMORY_KHR
-                                                       , pattern FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
-                                                       , pattern FORMAT_FEATURE_TRANSFER_DST_BIT_KHR
-                                                       , pattern IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR
-                                                       , trimCommandPoolKHR
-                                                       , CommandPoolTrimFlagsKHR
-                                                       , KHR_MAINTENANCE1_SPEC_VERSION
-                                                       , pattern KHR_MAINTENANCE1_SPEC_VERSION
-                                                       , KHR_MAINTENANCE1_EXTENSION_NAME
-                                                       , pattern KHR_MAINTENANCE1_EXTENSION_NAME
-                                                       ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance1 (trimCommandPool)
-import Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags (CommandPoolTrimFlags)
-import Graphics.Vulkan.Core10.Enums.Result (Result(ERROR_OUT_OF_POOL_MEMORY))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_TRANSFER_DST_BIT))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_TRANSFER_SRC_BIT))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT))
--- No documentation found for TopLevel "VK_ERROR_OUT_OF_POOL_MEMORY_KHR"
-pattern ERROR_OUT_OF_POOL_MEMORY_KHR = ERROR_OUT_OF_POOL_MEMORY
-
-
--- No documentation found for TopLevel "VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR"
-pattern FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = FORMAT_FEATURE_TRANSFER_SRC_BIT
-
-
--- No documentation found for TopLevel "VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR"
-pattern FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = FORMAT_FEATURE_TRANSFER_DST_BIT
-
-
--- No documentation found for TopLevel "VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR"
-pattern IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT
-
-
--- No documentation found for TopLevel "vkTrimCommandPoolKHR"
-trimCommandPoolKHR = trimCommandPool
-
-
--- No documentation found for TopLevel "VkCommandPoolTrimFlagsKHR"
-type CommandPoolTrimFlagsKHR = CommandPoolTrimFlags
-
-
-type KHR_MAINTENANCE1_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_KHR_MAINTENANCE1_SPEC_VERSION"
-pattern KHR_MAINTENANCE1_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_MAINTENANCE1_SPEC_VERSION = 2
-
-
-type KHR_MAINTENANCE1_EXTENSION_NAME = "VK_KHR_maintenance1"
-
--- No documentation found for TopLevel "VK_KHR_MAINTENANCE1_EXTENSION_NAME"
-pattern KHR_MAINTENANCE1_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_MAINTENANCE1_EXTENSION_NAME = "VK_KHR_maintenance1"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance2.hs
+++ /dev/null
@@ -1,137 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_maintenance2  ( pattern IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR
-                                                       , pattern IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR
-                                                       , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR
-                                                       , pattern STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR
-                                                       , pattern STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR
-                                                       , pattern STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR
-                                                       , pattern IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR
-                                                       , pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR
-                                                       , pattern POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR
-                                                       , pattern POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR
-                                                       , pattern TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR
-                                                       , pattern TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR
-                                                       , PointClippingBehaviorKHR
-                                                       , TessellationDomainOriginKHR
-                                                       , InputAttachmentAspectReferenceKHR
-                                                       , RenderPassInputAttachmentAspectCreateInfoKHR
-                                                       , PhysicalDevicePointClippingPropertiesKHR
-                                                       , ImageViewUsageCreateInfoKHR
-                                                       , PipelineTessellationDomainOriginStateCreateInfoKHR
-                                                       , KHR_MAINTENANCE2_SPEC_VERSION
-                                                       , pattern KHR_MAINTENANCE2_SPEC_VERSION
-                                                       , KHR_MAINTENANCE2_EXTENSION_NAME
-                                                       , pattern KHR_MAINTENANCE2_EXTENSION_NAME
-                                                       ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (ImageViewUsageCreateInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (InputAttachmentAspectReference)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PhysicalDevicePointClippingProperties)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PipelineTessellationDomainOriginStateCreateInfo)
-import Graphics.Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (RenderPassInputAttachmentAspectCreateInfo)
-import Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin (TessellationDomainOrigin)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_EXTENDED_USAGE_BIT))
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL))
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL))
-import Graphics.Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior(POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES))
-import Graphics.Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior(POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO))
-import Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin (TessellationDomainOrigin(TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT))
-import Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin (TessellationDomainOrigin(TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT))
--- No documentation found for TopLevel "VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR"
-pattern IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT
-
-
--- No documentation found for TopLevel "VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR"
-pattern IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = IMAGE_CREATE_EXTENDED_USAGE_BIT
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = 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 IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
-
-
--- No documentation found for TopLevel "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR"
-pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
-
-
--- No documentation found for TopLevel "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR"
-pattern POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
-
-
--- No documentation found for TopLevel "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR"
-pattern POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
-
-
--- No documentation found for TopLevel "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR"
-pattern TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT
-
-
--- No documentation found for TopLevel "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR"
-pattern TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT
-
-
--- No documentation found for TopLevel "VkPointClippingBehaviorKHR"
-type PointClippingBehaviorKHR = PointClippingBehavior
-
-
--- No documentation found for TopLevel "VkTessellationDomainOriginKHR"
-type TessellationDomainOriginKHR = TessellationDomainOrigin
-
-
--- No documentation found for TopLevel "VkInputAttachmentAspectReferenceKHR"
-type InputAttachmentAspectReferenceKHR = InputAttachmentAspectReference
-
-
--- No documentation found for TopLevel "VkRenderPassInputAttachmentAspectCreateInfoKHR"
-type RenderPassInputAttachmentAspectCreateInfoKHR = RenderPassInputAttachmentAspectCreateInfo
-
-
--- No documentation found for TopLevel "VkPhysicalDevicePointClippingPropertiesKHR"
-type PhysicalDevicePointClippingPropertiesKHR = PhysicalDevicePointClippingProperties
-
-
--- No documentation found for TopLevel "VkImageViewUsageCreateInfoKHR"
-type ImageViewUsageCreateInfoKHR = ImageViewUsageCreateInfo
-
-
--- No documentation found for TopLevel "VkPipelineTessellationDomainOriginStateCreateInfoKHR"
-type PipelineTessellationDomainOriginStateCreateInfoKHR = PipelineTessellationDomainOriginStateCreateInfo
-
-
-type KHR_MAINTENANCE2_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_MAINTENANCE2_SPEC_VERSION"
-pattern KHR_MAINTENANCE2_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_MAINTENANCE2_SPEC_VERSION = 1
-
-
-type KHR_MAINTENANCE2_EXTENSION_NAME = "VK_KHR_maintenance2"
-
--- No documentation found for TopLevel "VK_KHR_MAINTENANCE2_EXTENSION_NAME"
-pattern KHR_MAINTENANCE2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_MAINTENANCE2_EXTENSION_NAME = "VK_KHR_maintenance2"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance3.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance3.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance3.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_maintenance3  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR
-                                                       , pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR
-                                                       , getDescriptorSetLayoutSupportKHR
-                                                       , PhysicalDeviceMaintenance3PropertiesKHR
-                                                       , DescriptorSetLayoutSupportKHR
-                                                       , KHR_MAINTENANCE3_SPEC_VERSION
-                                                       , pattern KHR_MAINTENANCE3_SPEC_VERSION
-                                                       , KHR_MAINTENANCE3_EXTENSION_NAME
-                                                       , pattern KHR_MAINTENANCE3_EXTENSION_NAME
-                                                       ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (getDescriptorSetLayoutSupport)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (DescriptorSetLayoutSupport)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (PhysicalDeviceMaintenance3Properties)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR"
-pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT
-
-
--- No documentation found for TopLevel "vkGetDescriptorSetLayoutSupportKHR"
-getDescriptorSetLayoutSupportKHR = getDescriptorSetLayoutSupport
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceMaintenance3PropertiesKHR"
-type PhysicalDeviceMaintenance3PropertiesKHR = PhysicalDeviceMaintenance3Properties
-
-
--- No documentation found for TopLevel "VkDescriptorSetLayoutSupportKHR"
-type DescriptorSetLayoutSupportKHR = DescriptorSetLayoutSupport
-
-
-type KHR_MAINTENANCE3_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_MAINTENANCE3_SPEC_VERSION"
-pattern KHR_MAINTENANCE3_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_MAINTENANCE3_SPEC_VERSION = 1
-
-
-type KHR_MAINTENANCE3_EXTENSION_NAME = "VK_KHR_maintenance3"
-
--- No documentation found for TopLevel "VK_KHR_MAINTENANCE3_EXTENSION_NAME"
-pattern KHR_MAINTENANCE3_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_MAINTENANCE3_EXTENSION_NAME = "VK_KHR_maintenance3"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_multiview.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_multiview.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_multiview.hs
+++ /dev/null
@@ -1,64 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_multiview  ( pattern STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR
-                                                    , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR
-                                                    , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR
-                                                    , pattern DEPENDENCY_VIEW_LOCAL_BIT_KHR
-                                                    , PhysicalDeviceMultiviewFeaturesKHR
-                                                    , PhysicalDeviceMultiviewPropertiesKHR
-                                                    , RenderPassMultiviewCreateInfoKHR
-                                                    , KHR_MULTIVIEW_SPEC_VERSION
-                                                    , pattern KHR_MULTIVIEW_SPEC_VERSION
-                                                    , KHR_MULTIVIEW_EXTENSION_NAME
-                                                    , pattern KHR_MULTIVIEW_EXTENSION_NAME
-                                                    ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewProperties)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview (RenderPassMultiviewCreateInfo)
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
-import Graphics.Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(DEPENDENCY_VIEW_LOCAL_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR"
-pattern DEPENDENCY_VIEW_LOCAL_BIT_KHR = DEPENDENCY_VIEW_LOCAL_BIT
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceMultiviewFeaturesKHR"
-type PhysicalDeviceMultiviewFeaturesKHR = PhysicalDeviceMultiviewFeatures
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceMultiviewPropertiesKHR"
-type PhysicalDeviceMultiviewPropertiesKHR = PhysicalDeviceMultiviewProperties
-
-
--- No documentation found for TopLevel "VkRenderPassMultiviewCreateInfoKHR"
-type RenderPassMultiviewCreateInfoKHR = RenderPassMultiviewCreateInfo
-
-
-type KHR_MULTIVIEW_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_MULTIVIEW_SPEC_VERSION"
-pattern KHR_MULTIVIEW_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_MULTIVIEW_SPEC_VERSION = 1
-
-
-type KHR_MULTIVIEW_EXTENSION_NAME = "VK_KHR_multiview"
-
--- No documentation found for TopLevel "VK_KHR_MULTIVIEW_EXTENSION_NAME"
-pattern KHR_MULTIVIEW_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_MULTIVIEW_EXTENSION_NAME = "VK_KHR_multiview"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_performance_query.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_performance_query.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_performance_query.hs
+++ /dev/null
@@ -1,1125 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_performance_query  ( enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR
-                                                            , getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
-                                                            , acquireProfilingLockKHR
-                                                            , releaseProfilingLockKHR
-                                                            , PhysicalDevicePerformanceQueryFeaturesKHR(..)
-                                                            , PhysicalDevicePerformanceQueryPropertiesKHR(..)
-                                                            , PerformanceCounterKHR(..)
-                                                            , PerformanceCounterDescriptionKHR(..)
-                                                            , QueryPoolPerformanceCreateInfoKHR(..)
-                                                            , AcquireProfilingLockInfoKHR(..)
-                                                            , PerformanceQuerySubmitInfoKHR(..)
-                                                            , PerformanceCounterResultKHR(..)
-                                                            , PerformanceCounterScopeKHR( PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR
-                                                                                        , PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR
-                                                                                        , PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR
-                                                                                        , ..
-                                                                                        )
-                                                            , PerformanceCounterUnitKHR( PERFORMANCE_COUNTER_UNIT_GENERIC_KHR
-                                                                                       , PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR
-                                                                                       , PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR
-                                                                                       , PERFORMANCE_COUNTER_UNIT_BYTES_KHR
-                                                                                       , PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR
-                                                                                       , PERFORMANCE_COUNTER_UNIT_KELVIN_KHR
-                                                                                       , PERFORMANCE_COUNTER_UNIT_WATTS_KHR
-                                                                                       , PERFORMANCE_COUNTER_UNIT_VOLTS_KHR
-                                                                                       , PERFORMANCE_COUNTER_UNIT_AMPS_KHR
-                                                                                       , PERFORMANCE_COUNTER_UNIT_HERTZ_KHR
-                                                                                       , PERFORMANCE_COUNTER_UNIT_CYCLES_KHR
-                                                                                       , ..
-                                                                                       )
-                                                            , PerformanceCounterStorageKHR( PERFORMANCE_COUNTER_STORAGE_INT32_KHR
-                                                                                          , PERFORMANCE_COUNTER_STORAGE_INT64_KHR
-                                                                                          , PERFORMANCE_COUNTER_STORAGE_UINT32_KHR
-                                                                                          , PERFORMANCE_COUNTER_STORAGE_UINT64_KHR
-                                                                                          , PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR
-                                                                                          , PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR
-                                                                                          , ..
-                                                                                          )
-                                                            , PerformanceCounterDescriptionFlagBitsKHR( PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR
-                                                                                                      , PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR
-                                                                                                      , ..
-                                                                                                      )
-                                                            , PerformanceCounterDescriptionFlagsKHR
-                                                            , AcquireProfilingLockFlagBitsKHR(..)
-                                                            , AcquireProfilingLockFlagsKHR
-                                                            , KHR_PERFORMANCE_QUERY_SPEC_VERSION
-                                                            , pattern KHR_PERFORMANCE_QUERY_SPEC_VERSION
-                                                            , KHR_PERFORMANCE_QUERY_EXTENSION_NAME
-                                                            , pattern KHR_PERFORMANCE_QUERY_EXTENSION_NAME
-                                                            ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.ByteString (packCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.Trans.Cont (runContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CDouble)
-import Foreign.C.Types (CDouble(CDouble))
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Data.Int (Int64)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Word (Word8)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct.Utils (peekByteStringFromSizedVectorPtr)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthByteString)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkAcquireProfilingLockKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkReleaseProfilingLockKHR))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR))
-import Graphics.Vulkan.Core10.APIConstants (MAX_DESCRIPTION_SIZE)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Core10.APIConstants (UUID_SIZE)
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Word32 -> Ptr PerformanceCounterKHR -> Ptr PerformanceCounterDescriptionKHR -> IO Result) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Word32 -> Ptr PerformanceCounterKHR -> Ptr PerformanceCounterDescriptionKHR -> IO Result
-
--- | vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR -
--- Reports properties of the performance query counters available on a
--- queue family of a device
---
--- = Parameters
---
--- -   @physicalDevice@ is the handle to the physical device whose queue
---     family performance query counter properties will be queried.
---
--- -   @queueFamilyIndex@ is the index into the queue family of the
---     physical device we want to get properties for.
---
--- -   @pCounterCount@ is a pointer to an integer related to the number of
---     counters available or queried, as described below.
---
--- -   @pCounters@ is either @NULL@ or a pointer to an array of
---     'PerformanceCounterKHR' structures.
---
--- -   @pCounterDescriptions@ is either @NULL@ or a pointer to an array of
---     'PerformanceCounterDescriptionKHR' structures.
---
--- = Description
---
--- If @pCounters@ is @NULL@ and @pCounterDescriptions@ is @NULL@, then the
--- number of counters available is returned in @pCounterCount@. Otherwise,
--- @pCounterCount@ /must/ point to a variable set by the user to the number
--- of elements in the @pCounters@, @pCounterDescriptions@, or both arrays
--- and on return the variable is overwritten with the number of structures
--- actually written out. If @pCounterCount@ is less than the number of
--- counters available, at most @pCounterCount@ structures will be written
--- and 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pCounterCount@ /must/ be a valid pointer to a @uint32_t@ value
---
--- -   If the value referenced by @pCounterCount@ is not @0@, and
---     @pCounters@ is not @NULL@, @pCounters@ /must/ be a valid pointer to
---     an array of @pCounterCount@ 'PerformanceCounterKHR' structures
---
--- -   If the value referenced by @pCounterCount@ is not @0@, and
---     @pCounterDescriptions@ is not @NULL@, @pCounterDescriptions@ /must/
---     be a valid pointer to an array of @pCounterCount@
---     'PerformanceCounterDescriptionKHR' structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
---
--- = See Also
---
--- 'PerformanceCounterDescriptionKHR', 'PerformanceCounterKHR',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> io (Result, ("counters" ::: Vector PerformanceCounterKHR), ("counterDescriptions" ::: Vector PerformanceCounterDescriptionKHR))
-enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR physicalDevice queueFamilyIndex = liftIO . evalContT $ do
-  let vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR' = mkVkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR (pVkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPCounterCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR' physicalDevice' (queueFamilyIndex) (pPCounterCount) (nullPtr) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pCounterCount <- lift $ peek @Word32 pPCounterCount
-  pPCounters <- ContT $ bracket (callocBytes @PerformanceCounterKHR ((fromIntegral (pCounterCount)) * 48)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPCounters `advancePtrBytes` (i * 48) :: Ptr PerformanceCounterKHR) . ($ ())) [0..(fromIntegral (pCounterCount)) - 1]
-  pPCounterDescriptions <- ContT $ bracket (callocBytes @PerformanceCounterDescriptionKHR ((fromIntegral (pCounterCount)) * 792)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPCounterDescriptions `advancePtrBytes` (i * 792) :: Ptr PerformanceCounterDescriptionKHR) . ($ ())) [0..(fromIntegral (pCounterCount)) - 1]
-  r' <- lift $ vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR' physicalDevice' (queueFamilyIndex) (pPCounterCount) ((pPCounters)) ((pPCounterDescriptions))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pCounterCount' <- lift $ peek @Word32 pPCounterCount
-  let x32 = pCounterCount'
-  pCounters' <- lift $ generateM (fromIntegral x32) (\i -> peekCStruct @PerformanceCounterKHR (((pPCounters) `advancePtrBytes` (48 * (i)) :: Ptr PerformanceCounterKHR)))
-  pCounterDescriptions' <- lift $ generateM (fromIntegral x32) (\i -> peekCStruct @PerformanceCounterDescriptionKHR (((pPCounterDescriptions) `advancePtrBytes` (792 * (i)) :: Ptr PerformanceCounterDescriptionKHR)))
-  pure $ ((r'), pCounters', pCounterDescriptions')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr QueryPoolPerformanceCreateInfoKHR -> Ptr Word32 -> IO ()) -> Ptr PhysicalDevice_T -> Ptr QueryPoolPerformanceCreateInfoKHR -> Ptr Word32 -> IO ()
-
--- | vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR - Reports the
--- number of passes require for a performance query pool type
---
--- = Parameters
---
--- -   @physicalDevice@ is the handle to the physical device whose queue
---     family performance query counter properties will be queried.
---
--- -   @pPerformanceQueryCreateInfo@ is a pointer to a
---     'QueryPoolPerformanceCreateInfoKHR' of the performance query that is
---     to be created.
---
--- -   @pNumPasses@ is a pointer to an integer related to the number of
---     passes required to query the performance query pool, as described
---     below.
---
--- = Description
---
--- The @pPerformanceQueryCreateInfo@ member
--- 'QueryPoolPerformanceCreateInfoKHR'::@queueFamilyIndex@ /must/ be a
--- queue family of @physicalDevice@. The number of passes required to
--- capture the counters specified in the @pPerformanceQueryCreateInfo@
--- member 'QueryPoolPerformanceCreateInfoKHR'::@pCounters@ is returned in
--- @pNumPasses@.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'QueryPoolPerformanceCreateInfoKHR'
-getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR :: forall io . MonadIO io => PhysicalDevice -> ("performanceQueryCreateInfo" ::: QueryPoolPerformanceCreateInfoKHR) -> io (("numPasses" ::: Word32))
-getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR physicalDevice performanceQueryCreateInfo = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR' = mkVkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR (pVkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPerformanceQueryCreateInfo <- ContT $ withCStruct (performanceQueryCreateInfo)
-  pPNumPasses <- ContT $ bracket (callocBytes @Word32 4) free
-  lift $ vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR' (physicalDeviceHandle (physicalDevice)) pPerformanceQueryCreateInfo (pPNumPasses)
-  pNumPasses <- lift $ peek @Word32 pPNumPasses
-  pure $ (pNumPasses)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkAcquireProfilingLockKHR
-  :: FunPtr (Ptr Device_T -> Ptr AcquireProfilingLockInfoKHR -> IO Result) -> Ptr Device_T -> Ptr AcquireProfilingLockInfoKHR -> IO Result
-
--- | vkAcquireProfilingLockKHR - Acquires the profiling lock
---
--- = Parameters
---
--- -   @device@ is the logical device to profile.
---
--- -   @pInfo@ is a pointer to a 'AcquireProfilingLockInfoKHR' structure
---     which contains information about how the profiling is to be
---     acquired.
---
--- = Description
---
--- Implementations /may/ allow multiple actors to hold the profiling lock
--- concurrently.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.TIMEOUT'
---
--- = See Also
---
--- 'AcquireProfilingLockInfoKHR', 'Graphics.Vulkan.Core10.Handles.Device'
-acquireProfilingLockKHR :: forall io . MonadIO io => Device -> AcquireProfilingLockInfoKHR -> io ()
-acquireProfilingLockKHR device info = liftIO . evalContT $ do
-  let vkAcquireProfilingLockKHR' = mkVkAcquireProfilingLockKHR (pVkAcquireProfilingLockKHR (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  r <- lift $ vkAcquireProfilingLockKHR' (deviceHandle (device)) pInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkReleaseProfilingLockKHR
-  :: FunPtr (Ptr Device_T -> IO ()) -> Ptr Device_T -> IO ()
-
--- | vkReleaseProfilingLockKHR - Releases the profiling lock
---
--- = Parameters
---
--- -   @device@ is the logical device to cease profiling on.
---
--- == Valid Usage
---
--- -   The profiling lock of @device@ /must/ have been held via a previous
---     successful call to 'acquireProfilingLockKHR'
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device'
-releaseProfilingLockKHR :: forall io . MonadIO io => Device -> io ()
-releaseProfilingLockKHR device = liftIO $ do
-  let vkReleaseProfilingLockKHR' = mkVkReleaseProfilingLockKHR (pVkReleaseProfilingLockKHR (deviceCmds (device :: Device)))
-  vkReleaseProfilingLockKHR' (deviceHandle (device))
-  pure $ ()
-
-
--- | VkPhysicalDevicePerformanceQueryFeaturesKHR - Structure describing
--- performance query support for an implementation
---
--- = Members
---
--- The members of the 'PhysicalDevicePerformanceQueryFeaturesKHR' structure
--- describe the following implementation-dependent features:
---
--- == Valid Usage (Implicit)
---
--- To query supported performance counter query pool features, call
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2'
--- with a 'PhysicalDevicePerformanceQueryFeaturesKHR' structure included in
--- the @pNext@ chain of its @pFeatures@ parameter. The
--- 'PhysicalDevicePerformanceQueryFeaturesKHR' structure /can/ also be
--- included in the @pNext@ chain of a
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' structure, in which
--- case it controls which additional features are enabled in the device.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDevicePerformanceQueryFeaturesKHR = PhysicalDevicePerformanceQueryFeaturesKHR
-  { -- | @performanceCounterQueryPools@ is 'Graphics.Vulkan.Core10.BaseType.TRUE'
-    -- if the physical device supports performance counter query pools.
-    performanceCounterQueryPools :: Bool
-  , -- | @performanceCounterMultipleQueryPools@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE'\` if the physical device supports
-    -- using multiple performance query pools in a primary command buffer and
-    -- secondary command buffers executed within it.
-    performanceCounterMultipleQueryPools :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDevicePerformanceQueryFeaturesKHR
-
-instance ToCStruct PhysicalDevicePerformanceQueryFeaturesKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDevicePerformanceQueryFeaturesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (performanceCounterQueryPools))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (performanceCounterMultipleQueryPools))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDevicePerformanceQueryFeaturesKHR where
-  peekCStruct p = do
-    performanceCounterQueryPools <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    performanceCounterMultipleQueryPools <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDevicePerformanceQueryFeaturesKHR
-             (bool32ToBool performanceCounterQueryPools) (bool32ToBool performanceCounterMultipleQueryPools)
-
-instance Storable PhysicalDevicePerformanceQueryFeaturesKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDevicePerformanceQueryFeaturesKHR where
-  zero = PhysicalDevicePerformanceQueryFeaturesKHR
-           zero
-           zero
-
-
--- | VkPhysicalDevicePerformanceQueryPropertiesKHR - Structure describing
--- performance query properties for an implementation
---
--- = Members
---
--- The members of the 'PhysicalDevicePerformanceQueryPropertiesKHR'
--- structure describe the following implementation-dependent properties:
---
--- == Valid Usage (Implicit)
---
--- If the 'PhysicalDevicePerformanceQueryPropertiesKHR' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent properties.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDevicePerformanceQueryPropertiesKHR = PhysicalDevicePerformanceQueryPropertiesKHR
-  { -- | @allowCommandBufferQueryCopies@ is
-    -- 'Graphics.Vulkan.Core10.BaseType.TRUE' if the performance query pools
-    -- are allowed to be used with
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults'.
-    allowCommandBufferQueryCopies :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDevicePerformanceQueryPropertiesKHR
-
-instance ToCStruct PhysicalDevicePerformanceQueryPropertiesKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDevicePerformanceQueryPropertiesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (allowCommandBufferQueryCopies))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDevicePerformanceQueryPropertiesKHR where
-  peekCStruct p = do
-    allowCommandBufferQueryCopies <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDevicePerformanceQueryPropertiesKHR
-             (bool32ToBool allowCommandBufferQueryCopies)
-
-instance Storable PhysicalDevicePerformanceQueryPropertiesKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDevicePerformanceQueryPropertiesKHR where
-  zero = PhysicalDevicePerformanceQueryPropertiesKHR
-           zero
-
-
--- | VkPerformanceCounterKHR - Structure providing information about a
--- counter
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PerformanceCounterScopeKHR', 'PerformanceCounterStorageKHR',
--- 'PerformanceCounterUnitKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR'
-data PerformanceCounterKHR = PerformanceCounterKHR
-  { -- | @unit@ is a 'PerformanceCounterUnitKHR' specifying the unit that the
-    -- counter data will record.
-    unit :: PerformanceCounterUnitKHR
-  , -- | @scope@ is a 'PerformanceCounterScopeKHR' specifying the scope that the
-    -- counter belongs to.
-    scope :: PerformanceCounterScopeKHR
-  , -- | @storage@ is a 'PerformanceCounterStorageKHR' specifying the storage
-    -- type that the counter’s data uses.
-    storage :: PerformanceCounterStorageKHR
-  , -- | @uuid@ is an array of size
-    -- 'Graphics.Vulkan.Core10.APIConstants.UUID_SIZE', containing 8-bit values
-    -- that represent a universally unique identifier for the counter of the
-    -- physical device.
-    uuid :: ByteString
-  }
-  deriving (Typeable)
-deriving instance Show PerformanceCounterKHR
-
-instance ToCStruct PerformanceCounterKHR where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PerformanceCounterKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PerformanceCounterUnitKHR)) (unit)
-    poke ((p `plusPtr` 20 :: Ptr PerformanceCounterScopeKHR)) (scope)
-    poke ((p `plusPtr` 24 :: Ptr PerformanceCounterStorageKHR)) (storage)
-    pokeFixedLengthByteString ((p `plusPtr` 28 :: Ptr (FixedArray UUID_SIZE Word8))) (uuid)
-    f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PerformanceCounterUnitKHR)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr PerformanceCounterScopeKHR)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr PerformanceCounterStorageKHR)) (zero)
-    pokeFixedLengthByteString ((p `plusPtr` 28 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
-    f
-
-instance FromCStruct PerformanceCounterKHR where
-  peekCStruct p = do
-    unit <- peek @PerformanceCounterUnitKHR ((p `plusPtr` 16 :: Ptr PerformanceCounterUnitKHR))
-    scope <- peek @PerformanceCounterScopeKHR ((p `plusPtr` 20 :: Ptr PerformanceCounterScopeKHR))
-    storage <- peek @PerformanceCounterStorageKHR ((p `plusPtr` 24 :: Ptr PerformanceCounterStorageKHR))
-    uuid <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 28 :: Ptr (FixedArray UUID_SIZE Word8)))
-    pure $ PerformanceCounterKHR
-             unit scope storage uuid
-
-instance Storable PerformanceCounterKHR where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PerformanceCounterKHR where
-  zero = PerformanceCounterKHR
-           zero
-           zero
-           zero
-           mempty
-
-
--- | VkPerformanceCounterDescriptionKHR - Structure providing more detailed
--- information about a counter
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PerformanceCounterDescriptionFlagsKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR'
-data PerformanceCounterDescriptionKHR = PerformanceCounterDescriptionKHR
-  { -- | @flags@ is a bitmask of 'PerformanceCounterDescriptionFlagBitsKHR'
-    -- indicating the usage behavior for the counter.
-    flags :: PerformanceCounterDescriptionFlagsKHR
-  , -- | @name@ is an array of size
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE', containing a
-    -- null-terminated UTF-8 string specifying the name of the counter.
-    name :: ByteString
-  , -- | @category@ is an array of size
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE', containing a
-    -- null-terminated UTF-8 string specifying the category of the counter.
-    category :: ByteString
-  , -- | @description@ is an array of size
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE', containing a
-    -- null-terminated UTF-8 string specifying the description of the counter.
-    description :: ByteString
-  }
-  deriving (Typeable)
-deriving instance Show PerformanceCounterDescriptionKHR
-
-instance ToCStruct PerformanceCounterDescriptionKHR where
-  withCStruct x f = allocaBytesAligned 792 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PerformanceCounterDescriptionKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PerformanceCounterDescriptionFlagsKHR)) (flags)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (name)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (category)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
-    f
-  cStructSize = 792
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    f
-
-instance FromCStruct PerformanceCounterDescriptionKHR where
-  peekCStruct p = do
-    flags <- peek @PerformanceCounterDescriptionFlagsKHR ((p `plusPtr` 16 :: Ptr PerformanceCounterDescriptionFlagsKHR))
-    name <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    category <- packCString (lowerArrayPtr ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    description <- packCString (lowerArrayPtr ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    pure $ PerformanceCounterDescriptionKHR
-             flags name category description
-
-instance Storable PerformanceCounterDescriptionKHR where
-  sizeOf ~_ = 792
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PerformanceCounterDescriptionKHR where
-  zero = PerformanceCounterDescriptionKHR
-           zero
-           mempty
-           mempty
-           mempty
-
-
--- | VkQueryPoolPerformanceCreateInfoKHR - Structure specifying parameters of
--- a newly created performance query pool
---
--- == Valid Usage
---
--- -   @queueFamilyIndex@ /must/ be a valid queue family index of the
---     device
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-features-performanceCounterQueryPools performanceCounterQueryPools>
---     feature /must/ be enabled
---
--- -   Each element of @pCounterIndices@ /must/ be in the range of counters
---     reported by
---     'enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR' for
---     the queue family specified in @queueFamilyIndex@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR'
---
--- -   @pCounterIndices@ /must/ be a valid pointer to an array of
---     @counterIndexCount@ @uint32_t@ values
---
--- -   @counterIndexCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'
-data QueryPoolPerformanceCreateInfoKHR = QueryPoolPerformanceCreateInfoKHR
-  { -- | @queueFamilyIndex@ is the queue family index to create this performance
-    -- query pool for.
-    queueFamilyIndex :: Word32
-  , -- | @pCounterIndices@ is the array of indices into the
-    -- 'enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR'::@pCounters@
-    -- to enable in this performance query pool.
-    counterIndices :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show QueryPoolPerformanceCreateInfoKHR
-
-instance ToCStruct QueryPoolPerformanceCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p QueryPoolPerformanceCreateInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (queueFamilyIndex)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (counterIndices)) :: Word32))
-    pPCounterIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (counterIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (counterIndices)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPCounterIndices')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    pPCounterIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPCounterIndices')
-    lift $ f
-
-instance FromCStruct QueryPoolPerformanceCreateInfoKHR where
-  peekCStruct p = do
-    queueFamilyIndex <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    counterIndexCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pCounterIndices <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
-    pCounterIndices' <- generateM (fromIntegral counterIndexCount) (\i -> peek @Word32 ((pCounterIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ QueryPoolPerformanceCreateInfoKHR
-             queueFamilyIndex pCounterIndices'
-
-instance Zero QueryPoolPerformanceCreateInfoKHR where
-  zero = QueryPoolPerformanceCreateInfoKHR
-           zero
-           mempty
-
-
--- | VkAcquireProfilingLockInfoKHR - Structure specifying parameters to
--- acquire the profiling lock
---
--- == Valid Usage (Implicit)
---
--- If @timeout@ is 0, 'acquireProfilingLockKHR' will not block while
--- attempting to acquire the profling lock. If @timeout@ is @UINT64_MAX@,
--- the function will not return until the profiling lock was acquired.
---
--- = See Also
---
--- 'AcquireProfilingLockFlagsKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'acquireProfilingLockKHR'
-data AcquireProfilingLockInfoKHR = AcquireProfilingLockInfoKHR
-  { -- | @flags@ /must/ be @0@
-    flags :: AcquireProfilingLockFlagsKHR
-  , -- | @timeout@ indicates how long the function waits, in nanoseconds, if the
-    -- profiling lock is not available.
-    timeout :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show AcquireProfilingLockInfoKHR
-
-instance ToCStruct AcquireProfilingLockInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AcquireProfilingLockInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AcquireProfilingLockFlagsKHR)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (timeout)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    f
-
-instance FromCStruct AcquireProfilingLockInfoKHR where
-  peekCStruct p = do
-    flags <- peek @AcquireProfilingLockFlagsKHR ((p `plusPtr` 16 :: Ptr AcquireProfilingLockFlagsKHR))
-    timeout <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    pure $ AcquireProfilingLockInfoKHR
-             flags timeout
-
-instance Storable AcquireProfilingLockInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AcquireProfilingLockInfoKHR where
-  zero = AcquireProfilingLockInfoKHR
-           zero
-           zero
-
-
--- | VkPerformanceQuerySubmitInfoKHR - Structure indicating which counter
--- pass index is active for performance queries
---
--- = Description
---
--- If the 'Graphics.Vulkan.Core10.Queue.SubmitInfo'::@pNext@ chain does not
--- include this structure, the batch defaults to use counter pass index 0.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PerformanceQuerySubmitInfoKHR = PerformanceQuerySubmitInfoKHR
-  { -- | @counterPassIndex@ /must/ be less than the number of counter passes
-    -- required by any queries within the batch. The required number of counter
-    -- passes for a performance query is obtained by calling
-    -- 'getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'
-    counterPassIndex :: Word32 }
-  deriving (Typeable)
-deriving instance Show PerformanceQuerySubmitInfoKHR
-
-instance ToCStruct PerformanceQuerySubmitInfoKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PerformanceQuerySubmitInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (counterPassIndex)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PerformanceQuerySubmitInfoKHR where
-  peekCStruct p = do
-    counterPassIndex <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ PerformanceQuerySubmitInfoKHR
-             counterPassIndex
-
-instance Storable PerformanceQuerySubmitInfoKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PerformanceQuerySubmitInfoKHR where
-  zero = PerformanceQuerySubmitInfoKHR
-           zero
-
-
-data PerformanceCounterResultKHR
-  = Int32Counter Int32
-  | Int64Counter Int64
-  | Uint32Counter Word32
-  | Uint64Counter Word64
-  | Float32Counter Float
-  | Float64Counter Double
-  deriving (Show)
-
-instance ToCStruct PerformanceCounterResultKHR where
-  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct :: Ptr PerformanceCounterResultKHR -> PerformanceCounterResultKHR -> IO a -> IO a
-  pokeCStruct p = (. const) . runContT .  \case
-    Int32Counter v -> lift $ poke (castPtr @_ @Int32 p) (v)
-    Int64Counter v -> lift $ poke (castPtr @_ @Int64 p) (v)
-    Uint32Counter v -> lift $ poke (castPtr @_ @Word32 p) (v)
-    Uint64Counter v -> lift $ poke (castPtr @_ @Word64 p) (v)
-    Float32Counter v -> lift $ poke (castPtr @_ @CFloat p) (CFloat (v))
-    Float64Counter v -> lift $ poke (castPtr @_ @CDouble p) (CDouble (v))
-  pokeZeroCStruct :: Ptr PerformanceCounterResultKHR -> IO b -> IO b
-  pokeZeroCStruct _ f = f
-  cStructSize = 8
-  cStructAlignment = 8
-
-instance Zero PerformanceCounterResultKHR where
-  zero = Int64Counter zero
-
-
--- | VkPerformanceCounterScopeKHR - Supported counter scope types
---
--- = See Also
---
--- 'PerformanceCounterKHR'
-newtype PerformanceCounterScopeKHR = PerformanceCounterScopeKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR' - the performance counter
--- scope is a single complete command buffer.
-pattern PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR = PerformanceCounterScopeKHR 0
--- | 'PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR' - the performance counter
--- scope is zero or more complete render passes. The performance query
--- containing the performance counter /must/ begin and end outside a render
--- pass instance.
-pattern PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR = PerformanceCounterScopeKHR 1
--- | 'PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR' - the performance counter scope
--- is zero or more commands.
-pattern PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR = PerformanceCounterScopeKHR 2
-{-# complete PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR,
-             PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR,
-             PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR :: PerformanceCounterScopeKHR #-}
-
-instance Show PerformanceCounterScopeKHR where
-  showsPrec p = \case
-    PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR -> showString "PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR"
-    PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR -> showString "PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR"
-    PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR -> showString "PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR"
-    PerformanceCounterScopeKHR x -> showParen (p >= 11) (showString "PerformanceCounterScopeKHR " . showsPrec 11 x)
-
-instance Read PerformanceCounterScopeKHR where
-  readPrec = parens (choose [("PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR", pure PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR)
-                            , ("PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR", pure PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR)
-                            , ("PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR", pure PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PerformanceCounterScopeKHR")
-                       v <- step readPrec
-                       pure (PerformanceCounterScopeKHR v)))
-
-
--- | VkPerformanceCounterUnitKHR - Supported counter unit types
---
--- = See Also
---
--- 'PerformanceCounterKHR'
-newtype PerformanceCounterUnitKHR = PerformanceCounterUnitKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'PERFORMANCE_COUNTER_UNIT_GENERIC_KHR' - the performance counter unit is
--- a generic data point.
-pattern PERFORMANCE_COUNTER_UNIT_GENERIC_KHR = PerformanceCounterUnitKHR 0
--- | 'PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR' - the performance counter unit
--- is a percentage (%).
-pattern PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR = PerformanceCounterUnitKHR 1
--- | 'PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR' - the performance counter
--- unit is a value of nanoseconds (ns).
-pattern PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR = PerformanceCounterUnitKHR 2
--- | 'PERFORMANCE_COUNTER_UNIT_BYTES_KHR' - the performance counter unit is a
--- value of bytes.
-pattern PERFORMANCE_COUNTER_UNIT_BYTES_KHR = PerformanceCounterUnitKHR 3
--- | 'PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR' - the performance
--- counter unit is a value of bytes\/s.
-pattern PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR = PerformanceCounterUnitKHR 4
--- | 'PERFORMANCE_COUNTER_UNIT_KELVIN_KHR' - the performance counter unit is
--- a temperature reported in Kelvin.
-pattern PERFORMANCE_COUNTER_UNIT_KELVIN_KHR = PerformanceCounterUnitKHR 5
--- | 'PERFORMANCE_COUNTER_UNIT_WATTS_KHR' - the performance counter unit is a
--- value of watts (W).
-pattern PERFORMANCE_COUNTER_UNIT_WATTS_KHR = PerformanceCounterUnitKHR 6
--- | 'PERFORMANCE_COUNTER_UNIT_VOLTS_KHR' - the performance counter unit is a
--- value of volts (V).
-pattern PERFORMANCE_COUNTER_UNIT_VOLTS_KHR = PerformanceCounterUnitKHR 7
--- | 'PERFORMANCE_COUNTER_UNIT_AMPS_KHR' - the performance counter unit is a
--- value of amps (A).
-pattern PERFORMANCE_COUNTER_UNIT_AMPS_KHR = PerformanceCounterUnitKHR 8
--- | 'PERFORMANCE_COUNTER_UNIT_HERTZ_KHR' - the performance counter unit is a
--- value of hertz (Hz).
-pattern PERFORMANCE_COUNTER_UNIT_HERTZ_KHR = PerformanceCounterUnitKHR 9
--- | 'PERFORMANCE_COUNTER_UNIT_CYCLES_KHR' - the performance counter unit is
--- a value of cycles.
-pattern PERFORMANCE_COUNTER_UNIT_CYCLES_KHR = PerformanceCounterUnitKHR 10
-{-# complete PERFORMANCE_COUNTER_UNIT_GENERIC_KHR,
-             PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR,
-             PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR,
-             PERFORMANCE_COUNTER_UNIT_BYTES_KHR,
-             PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR,
-             PERFORMANCE_COUNTER_UNIT_KELVIN_KHR,
-             PERFORMANCE_COUNTER_UNIT_WATTS_KHR,
-             PERFORMANCE_COUNTER_UNIT_VOLTS_KHR,
-             PERFORMANCE_COUNTER_UNIT_AMPS_KHR,
-             PERFORMANCE_COUNTER_UNIT_HERTZ_KHR,
-             PERFORMANCE_COUNTER_UNIT_CYCLES_KHR :: PerformanceCounterUnitKHR #-}
-
-instance Show PerformanceCounterUnitKHR where
-  showsPrec p = \case
-    PERFORMANCE_COUNTER_UNIT_GENERIC_KHR -> showString "PERFORMANCE_COUNTER_UNIT_GENERIC_KHR"
-    PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR -> showString "PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR"
-    PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR -> showString "PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR"
-    PERFORMANCE_COUNTER_UNIT_BYTES_KHR -> showString "PERFORMANCE_COUNTER_UNIT_BYTES_KHR"
-    PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR -> showString "PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR"
-    PERFORMANCE_COUNTER_UNIT_KELVIN_KHR -> showString "PERFORMANCE_COUNTER_UNIT_KELVIN_KHR"
-    PERFORMANCE_COUNTER_UNIT_WATTS_KHR -> showString "PERFORMANCE_COUNTER_UNIT_WATTS_KHR"
-    PERFORMANCE_COUNTER_UNIT_VOLTS_KHR -> showString "PERFORMANCE_COUNTER_UNIT_VOLTS_KHR"
-    PERFORMANCE_COUNTER_UNIT_AMPS_KHR -> showString "PERFORMANCE_COUNTER_UNIT_AMPS_KHR"
-    PERFORMANCE_COUNTER_UNIT_HERTZ_KHR -> showString "PERFORMANCE_COUNTER_UNIT_HERTZ_KHR"
-    PERFORMANCE_COUNTER_UNIT_CYCLES_KHR -> showString "PERFORMANCE_COUNTER_UNIT_CYCLES_KHR"
-    PerformanceCounterUnitKHR x -> showParen (p >= 11) (showString "PerformanceCounterUnitKHR " . showsPrec 11 x)
-
-instance Read PerformanceCounterUnitKHR where
-  readPrec = parens (choose [("PERFORMANCE_COUNTER_UNIT_GENERIC_KHR", pure PERFORMANCE_COUNTER_UNIT_GENERIC_KHR)
-                            , ("PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR", pure PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR)
-                            , ("PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR", pure PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR)
-                            , ("PERFORMANCE_COUNTER_UNIT_BYTES_KHR", pure PERFORMANCE_COUNTER_UNIT_BYTES_KHR)
-                            , ("PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR", pure PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR)
-                            , ("PERFORMANCE_COUNTER_UNIT_KELVIN_KHR", pure PERFORMANCE_COUNTER_UNIT_KELVIN_KHR)
-                            , ("PERFORMANCE_COUNTER_UNIT_WATTS_KHR", pure PERFORMANCE_COUNTER_UNIT_WATTS_KHR)
-                            , ("PERFORMANCE_COUNTER_UNIT_VOLTS_KHR", pure PERFORMANCE_COUNTER_UNIT_VOLTS_KHR)
-                            , ("PERFORMANCE_COUNTER_UNIT_AMPS_KHR", pure PERFORMANCE_COUNTER_UNIT_AMPS_KHR)
-                            , ("PERFORMANCE_COUNTER_UNIT_HERTZ_KHR", pure PERFORMANCE_COUNTER_UNIT_HERTZ_KHR)
-                            , ("PERFORMANCE_COUNTER_UNIT_CYCLES_KHR", pure PERFORMANCE_COUNTER_UNIT_CYCLES_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PerformanceCounterUnitKHR")
-                       v <- step readPrec
-                       pure (PerformanceCounterUnitKHR v)))
-
-
--- | VkPerformanceCounterStorageKHR - Supported counter storage types
---
--- = See Also
---
--- 'PerformanceCounterKHR'
-newtype PerformanceCounterStorageKHR = PerformanceCounterStorageKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'PERFORMANCE_COUNTER_STORAGE_INT32_KHR' - the performance counter
--- storage is a 32-bit signed integer.
-pattern PERFORMANCE_COUNTER_STORAGE_INT32_KHR = PerformanceCounterStorageKHR 0
--- | 'PERFORMANCE_COUNTER_STORAGE_INT64_KHR' - the performance counter
--- storage is a 64-bit signed integer.
-pattern PERFORMANCE_COUNTER_STORAGE_INT64_KHR = PerformanceCounterStorageKHR 1
--- | 'PERFORMANCE_COUNTER_STORAGE_UINT32_KHR' - the performance counter
--- storage is a 32-bit unsigned integer.
-pattern PERFORMANCE_COUNTER_STORAGE_UINT32_KHR = PerformanceCounterStorageKHR 2
--- | 'PERFORMANCE_COUNTER_STORAGE_UINT64_KHR' - the performance counter
--- storage is a 64-bit unsigned integer.
-pattern PERFORMANCE_COUNTER_STORAGE_UINT64_KHR = PerformanceCounterStorageKHR 3
--- | 'PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR' - the performance counter
--- storage is a 32-bit floating-point.
-pattern PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR = PerformanceCounterStorageKHR 4
--- | 'PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR' - the performance counter
--- storage is a 64-bit floating-point.
-pattern PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR = PerformanceCounterStorageKHR 5
-{-# complete PERFORMANCE_COUNTER_STORAGE_INT32_KHR,
-             PERFORMANCE_COUNTER_STORAGE_INT64_KHR,
-             PERFORMANCE_COUNTER_STORAGE_UINT32_KHR,
-             PERFORMANCE_COUNTER_STORAGE_UINT64_KHR,
-             PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR,
-             PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR :: PerformanceCounterStorageKHR #-}
-
-instance Show PerformanceCounterStorageKHR where
-  showsPrec p = \case
-    PERFORMANCE_COUNTER_STORAGE_INT32_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_INT32_KHR"
-    PERFORMANCE_COUNTER_STORAGE_INT64_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_INT64_KHR"
-    PERFORMANCE_COUNTER_STORAGE_UINT32_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_UINT32_KHR"
-    PERFORMANCE_COUNTER_STORAGE_UINT64_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_UINT64_KHR"
-    PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR"
-    PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR"
-    PerformanceCounterStorageKHR x -> showParen (p >= 11) (showString "PerformanceCounterStorageKHR " . showsPrec 11 x)
-
-instance Read PerformanceCounterStorageKHR where
-  readPrec = parens (choose [("PERFORMANCE_COUNTER_STORAGE_INT32_KHR", pure PERFORMANCE_COUNTER_STORAGE_INT32_KHR)
-                            , ("PERFORMANCE_COUNTER_STORAGE_INT64_KHR", pure PERFORMANCE_COUNTER_STORAGE_INT64_KHR)
-                            , ("PERFORMANCE_COUNTER_STORAGE_UINT32_KHR", pure PERFORMANCE_COUNTER_STORAGE_UINT32_KHR)
-                            , ("PERFORMANCE_COUNTER_STORAGE_UINT64_KHR", pure PERFORMANCE_COUNTER_STORAGE_UINT64_KHR)
-                            , ("PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR", pure PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR)
-                            , ("PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR", pure PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PerformanceCounterStorageKHR")
-                       v <- step readPrec
-                       pure (PerformanceCounterStorageKHR v)))
-
-
--- | VkPerformanceCounterDescriptionFlagBitsKHR - Bitmask specifying usage
--- behavior for a counter
---
--- = See Also
---
--- 'PerformanceCounterDescriptionFlagsKHR'
-newtype PerformanceCounterDescriptionFlagBitsKHR = PerformanceCounterDescriptionFlagBitsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR' specifies
--- that recording the counter /may/ have a noticeable performance impact.
-pattern PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR = PerformanceCounterDescriptionFlagBitsKHR 0x00000001
--- | 'PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR' specifies
--- that concurrently recording the counter while other submitted command
--- buffers are running /may/ impact the accuracy of the recording.
-pattern PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR = PerformanceCounterDescriptionFlagBitsKHR 0x00000002
-
-type PerformanceCounterDescriptionFlagsKHR = PerformanceCounterDescriptionFlagBitsKHR
-
-instance Show PerformanceCounterDescriptionFlagBitsKHR where
-  showsPrec p = \case
-    PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR -> showString "PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR"
-    PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR -> showString "PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR"
-    PerformanceCounterDescriptionFlagBitsKHR x -> showParen (p >= 11) (showString "PerformanceCounterDescriptionFlagBitsKHR 0x" . showHex x)
-
-instance Read PerformanceCounterDescriptionFlagBitsKHR where
-  readPrec = parens (choose [("PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR", pure PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR)
-                            , ("PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR", pure PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PerformanceCounterDescriptionFlagBitsKHR")
-                       v <- step readPrec
-                       pure (PerformanceCounterDescriptionFlagBitsKHR v)))
-
-
--- | VkAcquireProfilingLockFlagBitsKHR - Reserved for future use
---
--- = See Also
---
--- 'AcquireProfilingLockFlagsKHR'
-newtype AcquireProfilingLockFlagBitsKHR = AcquireProfilingLockFlagBitsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-type AcquireProfilingLockFlagsKHR = AcquireProfilingLockFlagBitsKHR
-
-instance Show AcquireProfilingLockFlagBitsKHR where
-  showsPrec p = \case
-    AcquireProfilingLockFlagBitsKHR x -> showParen (p >= 11) (showString "AcquireProfilingLockFlagBitsKHR 0x" . showHex x)
-
-instance Read AcquireProfilingLockFlagBitsKHR where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "AcquireProfilingLockFlagBitsKHR")
-                       v <- step readPrec
-                       pure (AcquireProfilingLockFlagBitsKHR v)))
-
-
-type KHR_PERFORMANCE_QUERY_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION"
-pattern KHR_PERFORMANCE_QUERY_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_PERFORMANCE_QUERY_SPEC_VERSION = 1
-
-
-type KHR_PERFORMANCE_QUERY_EXTENSION_NAME = "VK_KHR_performance_query"
-
--- No documentation found for TopLevel "VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME"
-pattern KHR_PERFORMANCE_QUERY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_PERFORMANCE_QUERY_EXTENSION_NAME = "VK_KHR_performance_query"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_performance_query.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_performance_query.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_performance_query.hs-boot
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_performance_query  ( AcquireProfilingLockInfoKHR
-                                                            , PerformanceCounterDescriptionKHR
-                                                            , PerformanceCounterKHR
-                                                            , PerformanceQuerySubmitInfoKHR
-                                                            , PhysicalDevicePerformanceQueryFeaturesKHR
-                                                            , PhysicalDevicePerformanceQueryPropertiesKHR
-                                                            , QueryPoolPerformanceCreateInfoKHR
-                                                            ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data AcquireProfilingLockInfoKHR
-
-instance ToCStruct AcquireProfilingLockInfoKHR
-instance Show AcquireProfilingLockInfoKHR
-
-instance FromCStruct AcquireProfilingLockInfoKHR
-
-
-data PerformanceCounterDescriptionKHR
-
-instance ToCStruct PerformanceCounterDescriptionKHR
-instance Show PerformanceCounterDescriptionKHR
-
-instance FromCStruct PerformanceCounterDescriptionKHR
-
-
-data PerformanceCounterKHR
-
-instance ToCStruct PerformanceCounterKHR
-instance Show PerformanceCounterKHR
-
-instance FromCStruct PerformanceCounterKHR
-
-
-data PerformanceQuerySubmitInfoKHR
-
-instance ToCStruct PerformanceQuerySubmitInfoKHR
-instance Show PerformanceQuerySubmitInfoKHR
-
-instance FromCStruct PerformanceQuerySubmitInfoKHR
-
-
-data PhysicalDevicePerformanceQueryFeaturesKHR
-
-instance ToCStruct PhysicalDevicePerformanceQueryFeaturesKHR
-instance Show PhysicalDevicePerformanceQueryFeaturesKHR
-
-instance FromCStruct PhysicalDevicePerformanceQueryFeaturesKHR
-
-
-data PhysicalDevicePerformanceQueryPropertiesKHR
-
-instance ToCStruct PhysicalDevicePerformanceQueryPropertiesKHR
-instance Show PhysicalDevicePerformanceQueryPropertiesKHR
-
-instance FromCStruct PhysicalDevicePerformanceQueryPropertiesKHR
-
-
-data QueryPoolPerformanceCreateInfoKHR
-
-instance ToCStruct QueryPoolPerformanceCreateInfoKHR
-instance Show QueryPoolPerformanceCreateInfoKHR
-
-instance FromCStruct QueryPoolPerformanceCreateInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs
+++ /dev/null
@@ -1,939 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties  ( getPipelineExecutablePropertiesKHR
-                                                                         , getPipelineExecutableStatisticsKHR
-                                                                         , getPipelineExecutableInternalRepresentationsKHR
-                                                                         , PhysicalDevicePipelineExecutablePropertiesFeaturesKHR(..)
-                                                                         , PipelineInfoKHR(..)
-                                                                         , PipelineExecutablePropertiesKHR(..)
-                                                                         , PipelineExecutableInfoKHR(..)
-                                                                         , PipelineExecutableStatisticKHR(..)
-                                                                         , PipelineExecutableInternalRepresentationKHR(..)
-                                                                         , PipelineExecutableStatisticValueKHR(..)
-                                                                         , peekPipelineExecutableStatisticValueKHR
-                                                                         , PipelineExecutableStatisticFormatKHR( PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR
-                                                                                                               , PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR
-                                                                                                               , PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR
-                                                                                                               , PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR
-                                                                                                               , ..
-                                                                                                               )
-                                                                         , KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION
-                                                                         , pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION
-                                                                         , KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME
-                                                                         , pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME
-                                                                         ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.ByteString (packCString)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.Trans.Cont (runContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CDouble)
-import Foreign.C.Types (CDouble(CDouble))
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Data.Int (Int64)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetPipelineExecutableInternalRepresentationsKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetPipelineExecutablePropertiesKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetPipelineExecutableStatisticsKHR))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.APIConstants (MAX_DESCRIPTION_SIZE)
-import Graphics.Vulkan.Core10.Handles (Pipeline)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPipelineExecutablePropertiesKHR
-  :: FunPtr (Ptr Device_T -> Ptr PipelineInfoKHR -> Ptr Word32 -> Ptr PipelineExecutablePropertiesKHR -> IO Result) -> Ptr Device_T -> Ptr PipelineInfoKHR -> Ptr Word32 -> Ptr PipelineExecutablePropertiesKHR -> IO Result
-
--- | vkGetPipelineExecutablePropertiesKHR - Get the executables associated
--- with a pipeline
---
--- = Parameters
---
--- -   @device@ is the device that created the pipeline.
---
--- -   @pPipelineInfo@ describes the pipeline being queried.
---
--- -   @pExecutableCount@ is a pointer to an integer related to the number
---     of pipeline executables available or queried, as described below.
---
--- -   @pProperties@ is either @NULL@ or a pointer to an array of
---     'PipelineExecutablePropertiesKHR' structures.
---
--- = Description
---
--- If @pProperties@ is @NULL@, then the number of executables associated
--- with the pipeline is returned in @pExecutableCount@. Otherwise,
--- @pExecutableCount@ /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 @pExecutableCount@ is less than the number of
--- executables associated with the pipeline, at most @pExecutableCount@
--- structures will be written and 'getPipelineExecutablePropertiesKHR' will
--- return 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'.
---
--- == Valid Usage
---
--- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo>
---     /must/ be enabled
---
--- -   @pipeline@ member of @pPipelineInfo@ /must/ have been created with
---     @device@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pPipelineInfo@ /must/ be a valid pointer to a valid
---     'PipelineInfoKHR' structure
---
--- -   @pExecutableCount@ /must/ be a valid pointer to a @uint32_t@ value
---
--- -   If the value referenced by @pExecutableCount@ is not @0@, and
---     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer
---     to an array of @pExecutableCount@ 'PipelineExecutablePropertiesKHR'
---     structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'PipelineExecutablePropertiesKHR', 'PipelineInfoKHR'
-getPipelineExecutablePropertiesKHR :: forall io . MonadIO io => Device -> PipelineInfoKHR -> io (Result, ("properties" ::: Vector PipelineExecutablePropertiesKHR))
-getPipelineExecutablePropertiesKHR device pipelineInfo = liftIO . evalContT $ do
-  let vkGetPipelineExecutablePropertiesKHR' = mkVkGetPipelineExecutablePropertiesKHR (pVkGetPipelineExecutablePropertiesKHR (deviceCmds (device :: Device)))
-  let device' = deviceHandle (device)
-  pPipelineInfo <- ContT $ withCStruct (pipelineInfo)
-  pPExecutableCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPipelineExecutablePropertiesKHR' device' pPipelineInfo (pPExecutableCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pExecutableCount <- lift $ peek @Word32 pPExecutableCount
-  pPProperties <- ContT $ bracket (callocBytes @PipelineExecutablePropertiesKHR ((fromIntegral (pExecutableCount)) * 536)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 536) :: Ptr PipelineExecutablePropertiesKHR) . ($ ())) [0..(fromIntegral (pExecutableCount)) - 1]
-  r' <- lift $ vkGetPipelineExecutablePropertiesKHR' device' pPipelineInfo (pPExecutableCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pExecutableCount' <- lift $ peek @Word32 pPExecutableCount
-  pProperties' <- lift $ generateM (fromIntegral (pExecutableCount')) (\i -> peekCStruct @PipelineExecutablePropertiesKHR (((pPProperties) `advancePtrBytes` (536 * (i)) :: Ptr PipelineExecutablePropertiesKHR)))
-  pure $ ((r'), pProperties')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPipelineExecutableStatisticsKHR
-  :: FunPtr (Ptr Device_T -> Ptr PipelineExecutableInfoKHR -> Ptr Word32 -> Ptr PipelineExecutableStatisticKHR -> IO Result) -> Ptr Device_T -> Ptr PipelineExecutableInfoKHR -> Ptr Word32 -> Ptr PipelineExecutableStatisticKHR -> IO Result
-
--- | vkGetPipelineExecutableStatisticsKHR - Get compile time statistics
--- associated with a pipeline executable
---
--- = Parameters
---
--- -   @device@ is the device that created the pipeline.
---
--- -   @pExecutableInfo@ describes the pipeline executable being queried.
---
--- -   @pStatisticCount@ is a pointer to an integer related to the number
---     of statistics available or queried, as described below.
---
--- -   @pStatistics@ is either @NULL@ or a pointer to an array of
---     'PipelineExecutableStatisticKHR' structures.
---
--- = Description
---
--- If @pStatistics@ is @NULL@, then the number of statistics associated
--- with the pipeline executable is returned in @pStatisticCount@.
--- Otherwise, @pStatisticCount@ /must/ point to a variable set by the user
--- to the number of elements in the @pStatistics@ array, and on return the
--- variable is overwritten with the number of structures actually written
--- to @pStatistics@. If @pStatisticCount@ is less than the number of
--- statistics associated with the pipeline executable, at most
--- @pStatisticCount@ structures will be written and
--- 'getPipelineExecutableStatisticsKHR' will return
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'.
---
--- == Valid Usage
---
--- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo>
---     /must/ be enabled
---
--- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with
---     @device@
---
--- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR'
---     set in the @flags@ field of
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' or
---     'Graphics.Vulkan.Core10.Pipeline.ComputePipelineCreateInfo'
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pExecutableInfo@ /must/ be a valid pointer to a valid
---     'PipelineExecutableInfoKHR' structure
---
--- -   @pStatisticCount@ /must/ be a valid pointer to a @uint32_t@ value
---
--- -   If the value referenced by @pStatisticCount@ is not @0@, and
---     @pStatistics@ is not @NULL@, @pStatistics@ /must/ be a valid pointer
---     to an array of @pStatisticCount@ 'PipelineExecutableStatisticKHR'
---     structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'PipelineExecutableInfoKHR',
--- 'PipelineExecutableStatisticKHR'
-getPipelineExecutableStatisticsKHR :: forall io . MonadIO io => Device -> PipelineExecutableInfoKHR -> io (Result, ("statistics" ::: Vector PipelineExecutableStatisticKHR))
-getPipelineExecutableStatisticsKHR device executableInfo = liftIO . evalContT $ do
-  let vkGetPipelineExecutableStatisticsKHR' = mkVkGetPipelineExecutableStatisticsKHR (pVkGetPipelineExecutableStatisticsKHR (deviceCmds (device :: Device)))
-  let device' = deviceHandle (device)
-  pExecutableInfo <- ContT $ withCStruct (executableInfo)
-  pPStatisticCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPipelineExecutableStatisticsKHR' device' pExecutableInfo (pPStatisticCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pStatisticCount <- lift $ peek @Word32 pPStatisticCount
-  pPStatistics <- ContT $ bracket (callocBytes @PipelineExecutableStatisticKHR ((fromIntegral (pStatisticCount)) * 544)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPStatistics `advancePtrBytes` (i * 544) :: Ptr PipelineExecutableStatisticKHR) . ($ ())) [0..(fromIntegral (pStatisticCount)) - 1]
-  r' <- lift $ vkGetPipelineExecutableStatisticsKHR' device' pExecutableInfo (pPStatisticCount) ((pPStatistics))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pStatisticCount' <- lift $ peek @Word32 pPStatisticCount
-  pStatistics' <- lift $ generateM (fromIntegral (pStatisticCount')) (\i -> peekCStruct @PipelineExecutableStatisticKHR (((pPStatistics) `advancePtrBytes` (544 * (i)) :: Ptr PipelineExecutableStatisticKHR)))
-  pure $ ((r'), pStatistics')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPipelineExecutableInternalRepresentationsKHR
-  :: FunPtr (Ptr Device_T -> Ptr PipelineExecutableInfoKHR -> Ptr Word32 -> Ptr PipelineExecutableInternalRepresentationKHR -> IO Result) -> Ptr Device_T -> Ptr PipelineExecutableInfoKHR -> Ptr Word32 -> Ptr PipelineExecutableInternalRepresentationKHR -> IO Result
-
--- | vkGetPipelineExecutableInternalRepresentationsKHR - Get internal
--- representations of the pipeline executable
---
--- = Parameters
---
--- -   @device@ is the device that created the pipeline.
---
--- -   @pExecutableInfo@ describes the pipeline executable being queried.
---
--- -   @pInternalRepresentationCount@ is a pointer to an integer related to
---     the number of internal representations available or queried, as
---     described below.
---
--- -   @pInternalRepresentations@ is either @NULL@ or a pointer to an array
---     of 'PipelineExecutableInternalRepresentationKHR' structures.
---
--- = Description
---
--- If @pInternalRepresentations@ is @NULL@, then the number of internal
--- representations associated with the pipeline executable is returned in
--- @pInternalRepresentationCount@. Otherwise,
--- @pInternalRepresentationCount@ /must/ point to a variable set by the
--- user to the number of elements in the @pInternalRepresentations@ array,
--- and on return the variable is overwritten with the number of structures
--- actually written to @pInternalRepresentations@. If
--- @pInternalRepresentationCount@ is less than the number of internal
--- representations associated with the pipeline executable, at most
--- @pInternalRepresentationCount@ structures will be written and
--- 'getPipelineExecutableInternalRepresentationsKHR' will return
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'.
---
--- While the details of the internal representations remain implementation
--- dependent, the implementation /should/ order the internal
--- representations in the order in which they occur in the compile pipeline
--- with the final shader assembly (if any) last.
---
--- == Valid Usage
---
--- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo>
---     /must/ be enabled
---
--- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with
---     @device@
---
--- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR'
---     set in the @flags@ field of
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' or
---     'Graphics.Vulkan.Core10.Pipeline.ComputePipelineCreateInfo'
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pExecutableInfo@ /must/ be a valid pointer to a valid
---     'PipelineExecutableInfoKHR' structure
---
--- -   @pInternalRepresentationCount@ /must/ be a valid pointer to a
---     @uint32_t@ value
---
--- -   If the value referenced by @pInternalRepresentationCount@ is not
---     @0@, and @pInternalRepresentations@ is not @NULL@,
---     @pInternalRepresentations@ /must/ be a valid pointer to an array of
---     @pInternalRepresentationCount@
---     'PipelineExecutableInternalRepresentationKHR' structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'PipelineExecutableInfoKHR',
--- 'PipelineExecutableInternalRepresentationKHR'
-getPipelineExecutableInternalRepresentationsKHR :: forall io . MonadIO io => Device -> PipelineExecutableInfoKHR -> io (Result, ("internalRepresentations" ::: Vector PipelineExecutableInternalRepresentationKHR))
-getPipelineExecutableInternalRepresentationsKHR device executableInfo = liftIO . evalContT $ do
-  let vkGetPipelineExecutableInternalRepresentationsKHR' = mkVkGetPipelineExecutableInternalRepresentationsKHR (pVkGetPipelineExecutableInternalRepresentationsKHR (deviceCmds (device :: Device)))
-  let device' = deviceHandle (device)
-  pExecutableInfo <- ContT $ withCStruct (executableInfo)
-  pPInternalRepresentationCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPipelineExecutableInternalRepresentationsKHR' device' pExecutableInfo (pPInternalRepresentationCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pInternalRepresentationCount <- lift $ peek @Word32 pPInternalRepresentationCount
-  pPInternalRepresentations <- ContT $ bracket (callocBytes @PipelineExecutableInternalRepresentationKHR ((fromIntegral (pInternalRepresentationCount)) * 552)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPInternalRepresentations `advancePtrBytes` (i * 552) :: Ptr PipelineExecutableInternalRepresentationKHR) . ($ ())) [0..(fromIntegral (pInternalRepresentationCount)) - 1]
-  r' <- lift $ vkGetPipelineExecutableInternalRepresentationsKHR' device' pExecutableInfo (pPInternalRepresentationCount) ((pPInternalRepresentations))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pInternalRepresentationCount' <- lift $ peek @Word32 pPInternalRepresentationCount
-  pInternalRepresentations' <- lift $ generateM (fromIntegral (pInternalRepresentationCount')) (\i -> peekCStruct @PipelineExecutableInternalRepresentationKHR (((pPInternalRepresentations) `advancePtrBytes` (552 * (i)) :: Ptr PipelineExecutableInternalRepresentationKHR)))
-  pure $ ((r'), pInternalRepresentations')
-
-
--- | VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR - Structure
--- describing whether pipeline executable properties are available
---
--- = Members
---
--- The members of the
--- 'PhysicalDevicePipelineExecutablePropertiesFeaturesKHR' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDevicePipelineExecutablePropertiesFeaturesKHR' structure
--- is included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDevicePipelineExecutablePropertiesFeaturesKHR' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-  { -- | @pipelineExecutableInfo@ indicates that the implementation supports
-    -- reporting properties and statistics about the executables associated
-    -- with a compiled pipeline.
-    pipelineExecutableInfo :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-
-instance ToCStruct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDevicePipelineExecutablePropertiesFeaturesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (pipelineExecutableInfo))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR where
-  peekCStruct p = do
-    pipelineExecutableInfo <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-             (bool32ToBool pipelineExecutableInfo)
-
-instance Storable PhysicalDevicePipelineExecutablePropertiesFeaturesKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDevicePipelineExecutablePropertiesFeaturesKHR where
-  zero = PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-           zero
-
-
--- | VkPipelineInfoKHR - Structure describing a pipeline
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPipelineExecutablePropertiesKHR'
-data PipelineInfoKHR = PipelineInfoKHR
-  { -- | @pipeline@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Pipeline'
-    -- handle
-    pipeline :: Pipeline }
-  deriving (Typeable)
-deriving instance Show PipelineInfoKHR
-
-instance ToCStruct PipelineInfoKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Pipeline)) (pipeline)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Pipeline)) (zero)
-    f
-
-instance FromCStruct PipelineInfoKHR where
-  peekCStruct p = do
-    pipeline <- peek @Pipeline ((p `plusPtr` 16 :: Ptr Pipeline))
-    pure $ PipelineInfoKHR
-             pipeline
-
-instance Storable PipelineInfoKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineInfoKHR where
-  zero = PipelineInfoKHR
-           zero
-
-
--- | VkPipelineExecutablePropertiesKHR - Structure describing a pipeline
--- executable
---
--- = Description
---
--- The @stages@ field /may/ be zero or it /may/ contain one or more bits
--- describing the stages principally used to compile this pipeline. Not all
--- implementations have a 1:1 mapping between shader stages and pipeline
--- executables and some implementations /may/ reduce a given shader stage
--- to fixed function hardware programming such that no executable is
--- available. No guarantees are provided about the mapping between shader
--- stages and pipeline executables and @stages@ /should/ be considered a
--- best effort hint. Because the application /cannot/ rely on the @stages@
--- field to provide an exact description, @name@ and @description@ provide
--- a human readable name and description which more accurately describes
--- the given pipeline executable.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPipelineExecutablePropertiesKHR'
-data PipelineExecutablePropertiesKHR = PipelineExecutablePropertiesKHR
-  { -- | @stages@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
-    -- indicating which shader stages (if any) were principally used as inputs
-    -- to compile this pipeline executable.
-    stages :: ShaderStageFlags
-  , -- | @name@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which is a short human
-    -- readable name for this executable.
-    name :: ByteString
-  , -- | @description@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which is a human readable
-    -- description for this executable.
-    description :: ByteString
-  , -- | @subgroupSize@ is the subgroup size with which this executable is
-    -- dispatched.
-    subgroupSize :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PipelineExecutablePropertiesKHR
-
-instance ToCStruct PipelineExecutablePropertiesKHR where
-  withCStruct x f = allocaBytesAligned 536 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineExecutablePropertiesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ShaderStageFlags)) (stages)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (name)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
-    poke ((p `plusPtr` 532 :: Ptr Word32)) (subgroupSize)
-    f
-  cStructSize = 536
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ShaderStageFlags)) (zero)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    poke ((p `plusPtr` 532 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PipelineExecutablePropertiesKHR where
-  peekCStruct p = do
-    stages <- peek @ShaderStageFlags ((p `plusPtr` 16 :: Ptr ShaderStageFlags))
-    name <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    description <- packCString (lowerArrayPtr ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    subgroupSize <- peek @Word32 ((p `plusPtr` 532 :: Ptr Word32))
-    pure $ PipelineExecutablePropertiesKHR
-             stages name description subgroupSize
-
-instance Storable PipelineExecutablePropertiesKHR where
-  sizeOf ~_ = 536
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineExecutablePropertiesKHR where
-  zero = PipelineExecutablePropertiesKHR
-           zero
-           mempty
-           mempty
-           zero
-
-
--- | VkPipelineExecutableInfoKHR - Structure describing a pipeline executable
--- to query for associated statistics or internal representations
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPipelineExecutableInternalRepresentationsKHR',
--- 'getPipelineExecutableStatisticsKHR'
-data PipelineExecutableInfoKHR = PipelineExecutableInfoKHR
-  { -- | @pipeline@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Pipeline'
-    -- handle
-    pipeline :: Pipeline
-  , -- | @executableIndex@ /must/ be less than the number of executables
-    -- associated with @pipeline@ as returned in the @pExecutableCount@
-    -- parameter of 'getPipelineExecutablePropertiesKHR'
-    executableIndex :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PipelineExecutableInfoKHR
-
-instance ToCStruct PipelineExecutableInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineExecutableInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Pipeline)) (pipeline)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (executableIndex)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Pipeline)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PipelineExecutableInfoKHR where
-  peekCStruct p = do
-    pipeline <- peek @Pipeline ((p `plusPtr` 16 :: Ptr Pipeline))
-    executableIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pure $ PipelineExecutableInfoKHR
-             pipeline executableIndex
-
-instance Storable PipelineExecutableInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineExecutableInfoKHR where
-  zero = PipelineExecutableInfoKHR
-           zero
-           zero
-
-
--- | VkPipelineExecutableStatisticKHR - Structure describing a compile-time
--- pipeline executable statistic
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PipelineExecutableStatisticFormatKHR',
--- 'PipelineExecutableStatisticValueKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPipelineExecutableStatisticsKHR'
-data PipelineExecutableStatisticKHR = PipelineExecutableStatisticKHR
-  { -- | @name@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which is a short human
-    -- readable name for this statistic.
-    name :: ByteString
-  , -- | @description@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which is a human readable
-    -- description for this statistic.
-    description :: ByteString
-  , -- | @format@ is a 'PipelineExecutableStatisticFormatKHR' value specifying
-    -- the format of the data found in @value@.
-    format :: PipelineExecutableStatisticFormatKHR
-  , -- | @value@ is the value of this statistic.
-    value :: PipelineExecutableStatisticValueKHR
-  }
-  deriving (Typeable)
-deriving instance Show PipelineExecutableStatisticKHR
-
-instance ToCStruct PipelineExecutableStatisticKHR where
-  withCStruct x f = allocaBytesAligned 544 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineExecutableStatisticKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (name)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
-    lift $ poke ((p `plusPtr` 528 :: Ptr PipelineExecutableStatisticFormatKHR)) (format)
-    ContT $ pokeCStruct ((p `plusPtr` 536 :: Ptr PipelineExecutableStatisticValueKHR)) (value) . ($ ())
-    lift $ f
-  cStructSize = 544
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    lift $ poke ((p `plusPtr` 528 :: Ptr PipelineExecutableStatisticFormatKHR)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 536 :: Ptr PipelineExecutableStatisticValueKHR)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct PipelineExecutableStatisticKHR where
-  peekCStruct p = do
-    name <- packCString (lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    description <- packCString (lowerArrayPtr ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    format <- peek @PipelineExecutableStatisticFormatKHR ((p `plusPtr` 528 :: Ptr PipelineExecutableStatisticFormatKHR))
-    value <- peekPipelineExecutableStatisticValueKHR format ((p `plusPtr` 536 :: Ptr PipelineExecutableStatisticValueKHR))
-    pure $ PipelineExecutableStatisticKHR
-             name description format value
-
-instance Zero PipelineExecutableStatisticKHR where
-  zero = PipelineExecutableStatisticKHR
-           mempty
-           mempty
-           zero
-           zero
-
-
--- | VkPipelineExecutableInternalRepresentationKHR - Structure describing the
--- textual form of a pipeline executable internal representation
---
--- = Description
---
--- If @pData@ is @NULL@, then the size, in bytes, of the internal
--- representation data is returned in @dataSize@. Otherwise, @dataSize@
--- must be the size of the buffer, in bytes, pointed to by @pData@ and on
--- return @dataSize@ is overwritten with the number of bytes of data
--- actually written to @pData@ including any trailing null character. If
--- @dataSize@ is less than the size, in bytes, of the internal
--- representation data, at most @dataSize@ bytes of data will be written to
--- @pData@ and 'getPipelineExecutableInternalRepresentationsKHR' will
--- return 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'. If @isText@ is
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' and @pData@ is not @NULL@ and
--- @dataSize@ is not zero, the last byte written to @pData@ will be a null
--- character.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPipelineExecutableInternalRepresentationsKHR'
-data PipelineExecutableInternalRepresentationKHR = PipelineExecutableInternalRepresentationKHR
-  { -- | @name@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which is a short human
-    -- readable name for this internal representation.
-    name :: ByteString
-  , -- | @description@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@
-    -- containing a null-terminated UTF-8 string which is a human readable
-    -- description for this internal representation.
-    description :: ByteString
-  , -- | @isText@ specifies whether the returned data is text or opaque data. If
-    -- @isText@ is 'Graphics.Vulkan.Core10.BaseType.TRUE' then the data
-    -- returned in @pData@ is text and is guaranteed to be a null-terminated
-    -- UTF-8 string.
-    isText :: Bool
-  , -- | @dataSize@ is an integer related to the size, in bytes, of the internal
-    -- representation data, as described below.
-    dataSize :: Word64
-  , -- | @pData@ is either @NULL@ or a pointer to an block of data into which the
-    -- implementation will write the textual form of the internal
-    -- representation.
-    data' :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show PipelineExecutableInternalRepresentationKHR
-
-instance ToCStruct PipelineExecutableInternalRepresentationKHR where
-  withCStruct x f = allocaBytesAligned 552 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineExecutableInternalRepresentationKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (name)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
-    poke ((p `plusPtr` 528 :: Ptr Bool32)) (boolToBool32 (isText))
-    poke ((p `plusPtr` 536 :: Ptr CSize)) (CSize (dataSize))
-    poke ((p `plusPtr` 544 :: Ptr (Ptr ()))) (data')
-    f
-  cStructSize = 552
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
-    poke ((p `plusPtr` 528 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PipelineExecutableInternalRepresentationKHR where
-  peekCStruct p = do
-    name <- packCString (lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    description <- packCString (lowerArrayPtr ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
-    isText <- peek @Bool32 ((p `plusPtr` 528 :: Ptr Bool32))
-    dataSize <- peek @CSize ((p `plusPtr` 536 :: Ptr CSize))
-    pData <- peek @(Ptr ()) ((p `plusPtr` 544 :: Ptr (Ptr ())))
-    pure $ PipelineExecutableInternalRepresentationKHR
-             name description (bool32ToBool isText) ((\(CSize a) -> a) dataSize) pData
-
-instance Storable PipelineExecutableInternalRepresentationKHR where
-  sizeOf ~_ = 552
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineExecutableInternalRepresentationKHR where
-  zero = PipelineExecutableInternalRepresentationKHR
-           mempty
-           mempty
-           zero
-           zero
-           zero
-
-
-data PipelineExecutableStatisticValueKHR
-  = B32 Bool
-  | I64 Int64
-  | U64 Word64
-  | F64 Double
-  deriving (Show)
-
-instance ToCStruct PipelineExecutableStatisticValueKHR where
-  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct :: Ptr PipelineExecutableStatisticValueKHR -> PipelineExecutableStatisticValueKHR -> IO a -> IO a
-  pokeCStruct p = (. const) . runContT .  \case
-    B32 v -> lift $ poke (castPtr @_ @Bool32 p) (boolToBool32 (v))
-    I64 v -> lift $ poke (castPtr @_ @Int64 p) (v)
-    U64 v -> lift $ poke (castPtr @_ @Word64 p) (v)
-    F64 v -> lift $ poke (castPtr @_ @CDouble p) (CDouble (v))
-  pokeZeroCStruct :: Ptr PipelineExecutableStatisticValueKHR -> IO b -> IO b
-  pokeZeroCStruct _ f = f
-  cStructSize = 8
-  cStructAlignment = 8
-
-instance Zero PipelineExecutableStatisticValueKHR where
-  zero = I64 zero
-
-peekPipelineExecutableStatisticValueKHR :: PipelineExecutableStatisticFormatKHR -> Ptr PipelineExecutableStatisticValueKHR -> IO PipelineExecutableStatisticValueKHR
-peekPipelineExecutableStatisticValueKHR tag p = case tag of
-  PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR -> B32 <$> (do
-    b32 <- peek @Bool32 (castPtr @_ @Bool32 p)
-    pure $ bool32ToBool b32)
-  PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR -> I64 <$> (peek @Int64 (castPtr @_ @Int64 p))
-  PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR -> U64 <$> (peek @Word64 (castPtr @_ @Word64 p))
-  PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR -> F64 <$> (do
-    f64 <- peek @CDouble (castPtr @_ @CDouble p)
-    pure $ (\(CDouble a) -> a) f64)
-
-
--- | VkPipelineExecutableStatisticFormatKHR - Enum describing a pipeline
--- executable statistic
---
--- = See Also
---
--- 'PipelineExecutableStatisticKHR'
-newtype PipelineExecutableStatisticFormatKHR = PipelineExecutableStatisticFormatKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR' specifies that the
--- statistic is returned as a 32-bit boolean value which /must/ be either
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' or
--- 'Graphics.Vulkan.Core10.BaseType.FALSE' and /should/ be read from the
--- @b32@ field of 'PipelineExecutableStatisticValueKHR'.
-pattern PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = PipelineExecutableStatisticFormatKHR 0
--- | 'PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR' specifies that the
--- statistic is returned as a signed 64-bit integer and /should/ be read
--- from the @i64@ field of 'PipelineExecutableStatisticValueKHR'.
-pattern PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = PipelineExecutableStatisticFormatKHR 1
--- | 'PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR' specifies that the
--- statistic is returned as an unsigned 64-bit integer and /should/ be read
--- from the @u64@ field of 'PipelineExecutableStatisticValueKHR'.
-pattern PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = PipelineExecutableStatisticFormatKHR 2
--- | 'PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR' specifies that the
--- statistic is returned as a 64-bit floating-point value and /should/ be
--- read from the @f64@ field of 'PipelineExecutableStatisticValueKHR'.
-pattern PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = PipelineExecutableStatisticFormatKHR 3
-{-# complete PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR,
-             PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR,
-             PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR,
-             PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR :: PipelineExecutableStatisticFormatKHR #-}
-
-instance Show PipelineExecutableStatisticFormatKHR where
-  showsPrec p = \case
-    PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR -> showString "PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR"
-    PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR -> showString "PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR"
-    PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR -> showString "PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR"
-    PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR -> showString "PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR"
-    PipelineExecutableStatisticFormatKHR x -> showParen (p >= 11) (showString "PipelineExecutableStatisticFormatKHR " . showsPrec 11 x)
-
-instance Read PipelineExecutableStatisticFormatKHR where
-  readPrec = parens (choose [("PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR", pure PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR)
-                            , ("PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR", pure PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR)
-                            , ("PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR", pure PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR)
-                            , ("PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR", pure PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineExecutableStatisticFormatKHR")
-                       v <- step readPrec
-                       pure (PipelineExecutableStatisticFormatKHR v)))
-
-
-type KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION"
-pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION = 1
-
-
-type KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME = "VK_KHR_pipeline_executable_properties"
-
--- No documentation found for TopLevel "VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME"
-pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME = "VK_KHR_pipeline_executable_properties"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs-boot
+++ /dev/null
@@ -1,59 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties  ( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-                                                                         , PipelineExecutableInfoKHR
-                                                                         , PipelineExecutableInternalRepresentationKHR
-                                                                         , PipelineExecutablePropertiesKHR
-                                                                         , PipelineExecutableStatisticKHR
-                                                                         , PipelineInfoKHR
-                                                                         ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-
-instance ToCStruct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-instance Show PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-
-instance FromCStruct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
-
-
-data PipelineExecutableInfoKHR
-
-instance ToCStruct PipelineExecutableInfoKHR
-instance Show PipelineExecutableInfoKHR
-
-instance FromCStruct PipelineExecutableInfoKHR
-
-
-data PipelineExecutableInternalRepresentationKHR
-
-instance ToCStruct PipelineExecutableInternalRepresentationKHR
-instance Show PipelineExecutableInternalRepresentationKHR
-
-instance FromCStruct PipelineExecutableInternalRepresentationKHR
-
-
-data PipelineExecutablePropertiesKHR
-
-instance ToCStruct PipelineExecutablePropertiesKHR
-instance Show PipelineExecutablePropertiesKHR
-
-instance FromCStruct PipelineExecutablePropertiesKHR
-
-
-data PipelineExecutableStatisticKHR
-
-instance ToCStruct PipelineExecutableStatisticKHR
-instance Show PipelineExecutableStatisticKHR
-
-instance FromCStruct PipelineExecutableStatisticKHR
-
-
-data PipelineInfoKHR
-
-instance ToCStruct PipelineInfoKHR
-instance Show PipelineInfoKHR
-
-instance FromCStruct PipelineInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_library.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_library.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_library.hs
+++ /dev/null
@@ -1,111 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_pipeline_library  ( PipelineLibraryCreateInfoKHR(..)
-                                                           , KHR_PIPELINE_LIBRARY_SPEC_VERSION
-                                                           , pattern KHR_PIPELINE_LIBRARY_SPEC_VERSION
-                                                           , KHR_PIPELINE_LIBRARY_EXTENSION_NAME
-                                                           , pattern KHR_PIPELINE_LIBRARY_EXTENSION_NAME
-                                                           ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Pipeline)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR))
--- | VkPipelineLibraryCreateInfoKHR - Structure specifying pipeline libraries
--- to use when creating a pipeline
---
--- == Valid Usage
---
--- -   Each element of @pLibraries@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   If @libraryCount@ is not @0@, @pLibraries@ /must/ be a valid pointer
---     to an array of @libraryCount@ valid
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handles
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineLibraryCreateInfoKHR = PipelineLibraryCreateInfoKHR
-  { -- | @pLibraries@ is an array of pipeline libraries to use when creating a
-    -- pipeline.
-    libraries :: Vector Pipeline }
-  deriving (Typeable)
-deriving instance Show PipelineLibraryCreateInfoKHR
-
-instance ToCStruct PipelineLibraryCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineLibraryCreateInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (libraries)) :: Word32))
-    pPLibraries' <- ContT $ allocaBytesAligned @Pipeline ((Data.Vector.length (libraries)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPLibraries' `plusPtr` (8 * (i)) :: Ptr Pipeline) (e)) (libraries)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Pipeline))) (pPLibraries')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPLibraries' <- ContT $ allocaBytesAligned @Pipeline ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPLibraries' `plusPtr` (8 * (i)) :: Ptr Pipeline) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Pipeline))) (pPLibraries')
-    lift $ f
-
-instance FromCStruct PipelineLibraryCreateInfoKHR where
-  peekCStruct p = do
-    libraryCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pLibraries <- peek @(Ptr Pipeline) ((p `plusPtr` 24 :: Ptr (Ptr Pipeline)))
-    pLibraries' <- generateM (fromIntegral libraryCount) (\i -> peek @Pipeline ((pLibraries `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
-    pure $ PipelineLibraryCreateInfoKHR
-             pLibraries'
-
-instance Zero PipelineLibraryCreateInfoKHR where
-  zero = PipelineLibraryCreateInfoKHR
-           mempty
-
-
-type KHR_PIPELINE_LIBRARY_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION"
-pattern KHR_PIPELINE_LIBRARY_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_PIPELINE_LIBRARY_SPEC_VERSION = 1
-
-
-type KHR_PIPELINE_LIBRARY_EXTENSION_NAME = "VK_KHR_pipeline_library"
-
--- No documentation found for TopLevel "VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME"
-pattern KHR_PIPELINE_LIBRARY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_PIPELINE_LIBRARY_EXTENSION_NAME = "VK_KHR_pipeline_library"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_library.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_library.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_pipeline_library.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_pipeline_library  (PipelineLibraryCreateInfoKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PipelineLibraryCreateInfoKHR
-
-instance ToCStruct PipelineLibraryCreateInfoKHR
-instance Show PipelineLibraryCreateInfoKHR
-
-instance FromCStruct PipelineLibraryCreateInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs
+++ /dev/null
@@ -1,429 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_push_descriptor  ( cmdPushDescriptorSetKHR
-                                                          , cmdPushDescriptorSetWithTemplateKHR
-                                                          , PhysicalDevicePushDescriptorPropertiesKHR(..)
-                                                          , KHR_PUSH_DESCRIPTOR_SPEC_VERSION
-                                                          , pattern KHR_PUSH_DESCRIPTOR_SPEC_VERSION
-                                                          , KHR_PUSH_DESCRIPTOR_EXTENSION_NAME
-                                                          , pattern KHR_PUSH_DESCRIPTOR_EXTENSION_NAME
-                                                          ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Core11.Handles (DescriptorUpdateTemplate)
-import Graphics.Vulkan.Core11.Handles (DescriptorUpdateTemplate(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdPushDescriptorSetKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdPushDescriptorSetWithTemplateKHR))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint(..))
-import Graphics.Vulkan.Core10.Handles (PipelineLayout)
-import Graphics.Vulkan.Core10.Handles (PipelineLayout(..))
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Core10.DescriptorSet (WriteDescriptorSet)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdPushDescriptorSetKHR
-  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr (WriteDescriptorSet a) -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr (WriteDescriptorSet a) -> IO ()
-
--- | vkCmdPushDescriptorSetKHR - Pushes descriptor updates into a command
--- buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer that the descriptors will be
---     recorded in.
---
--- -   @pipelineBindPoint@ is a
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     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 'Graphics.Vulkan.Core10.Handles.PipelineLayout' 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.WriteDescriptorSet' structures
---     describing the descriptors to be updated.
---
--- = 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 are
--- undefined. 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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>.
--- When the set is disturbed or push descriptors with a different
--- descriptor set layout are set, all push descriptors are undefined.
---
--- Push descriptors that are
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-staticuse statically used>
--- by a pipeline /must/ not be undefined 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 (the immutable samplers are pushed,
--- rather than the samplers in @pDescriptorWrites@). Push descriptors that
--- are not statically used /can/ remain undefined.
---
--- 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.DescriptorBufferInfo' /can/ be
--- changed each time the descriptor is written.
---
--- Each element of @pDescriptorWrites@ is interpreted as in
--- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet', except the
--- @dstSet@ member is ignored.
---
--- To push an immutable sampler, use a
--- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet' with
--- @dstBinding@ and @dstArrayElement@ selecting the immutable sampler’s
--- binding. If the descriptor type is
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.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 'Graphics.Vulkan.Core10.Handles.CommandPool'’s queue family
---
--- -   @set@ /must/ be less than
---     'Graphics.Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'::@setLayoutCount@
---     provided when @layout@ was created
---
--- -   @set@ /must/ be the unique set number in the pipeline layout that
---     uses a descriptor set layout that was created with
---     'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value
---
--- -   @layout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   @pDescriptorWrites@ /must/ be a valid pointer to an array of
---     @descriptorWriteCount@ valid
---     'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' 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
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout',
--- 'Graphics.Vulkan.Core10.DescriptorSet.WriteDescriptorSet'
-cmdPushDescriptorSetKHR :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> PipelineBindPoint -> PipelineLayout -> ("set" ::: Word32) -> ("descriptorWrites" ::: Vector (WriteDescriptorSet a)) -> io ()
-cmdPushDescriptorSetKHR commandBuffer pipelineBindPoint layout set descriptorWrites = liftIO . evalContT $ do
-  let vkCmdPushDescriptorSetKHR' = mkVkCmdPushDescriptorSetKHR (pVkCmdPushDescriptorSetKHR (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPDescriptorWrites <- ContT $ allocaBytesAligned @(WriteDescriptorSet _) ((Data.Vector.length (descriptorWrites)) * 64) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDescriptorWrites `plusPtr` (64 * (i)) :: Ptr (WriteDescriptorSet _)) (e) . ($ ())) (descriptorWrites)
-  lift $ vkCmdPushDescriptorSetKHR' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (layout) (set) ((fromIntegral (Data.Vector.length $ (descriptorWrites)) :: Word32)) (pPDescriptorWrites)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdPushDescriptorSetWithTemplateKHR
-  :: FunPtr (Ptr CommandBuffer_T -> DescriptorUpdateTemplate -> PipelineLayout -> Word32 -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> DescriptorUpdateTemplate -> PipelineLayout -> Word32 -> Ptr () -> IO ()
-
--- | vkCmdPushDescriptorSetWithTemplateKHR - Pushes descriptor updates into a
--- command buffer using a descriptor update template
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer that the descriptors will be
---     recorded in.
---
--- -   @descriptorUpdateTemplate@ is a descriptor update template defining
---     how to interpret the descriptor information in @pData@.
---
--- -   @layout@ is a 'Graphics.Vulkan.Core10.Handles.PipelineLayout' 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@ is a pointer to memory containing descriptors for the
---     templated update.
---
--- == Valid Usage
---
--- -   The @pipelineBindPoint@ specified during the creation of the
---     descriptor update template /must/ be supported by the
---     @commandBuffer@’s parent
---     'Graphics.Vulkan.Core10.Handles.CommandPool'’s queue family
---
--- -   @pData@ /must/ be a valid pointer to a memory containing one or more
---     valid instances of
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
---     'Graphics.Vulkan.Core10.DescriptorSet.DescriptorBufferInfo', or
---     'Graphics.Vulkan.Core10.Handles.BufferView' in a layout defined by
---     @descriptorUpdateTemplate@ when it was created with
---     'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @descriptorUpdateTemplate@ /must/ be a valid
---     'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle
---
--- -   @layout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   Each of @commandBuffer@, @descriptorUpdateTemplate@, and @layout@
---     /must/ have been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- __API example.__
---
--- > 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 a 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
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core11.Handles.DescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout'
-cmdPushDescriptorSetWithTemplateKHR :: forall io . MonadIO io => CommandBuffer -> DescriptorUpdateTemplate -> PipelineLayout -> ("set" ::: Word32) -> ("data" ::: Ptr ()) -> io ()
-cmdPushDescriptorSetWithTemplateKHR commandBuffer descriptorUpdateTemplate layout set data' = liftIO $ do
-  let vkCmdPushDescriptorSetWithTemplateKHR' = mkVkCmdPushDescriptorSetWithTemplateKHR (pVkCmdPushDescriptorSetWithTemplateKHR (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdPushDescriptorSetWithTemplateKHR' (commandBufferHandle (commandBuffer)) (descriptorUpdateTemplate) (layout) (set) (data')
-  pure $ ()
-
-
--- | VkPhysicalDevicePushDescriptorPropertiesKHR - Structure describing push
--- descriptor limits that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDevicePushDescriptorPropertiesKHR' structure
--- describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDevicePushDescriptorPropertiesKHR' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDevicePushDescriptorPropertiesKHR = PhysicalDevicePushDescriptorPropertiesKHR
-  { -- | @maxPushDescriptors@ is the maximum number of descriptors that /can/ be
-    -- used in a descriptor set created with
-    -- 'Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'
-    -- set.
-    maxPushDescriptors :: Word32 }
-  deriving (Typeable)
-deriving instance Show PhysicalDevicePushDescriptorPropertiesKHR
-
-instance ToCStruct PhysicalDevicePushDescriptorPropertiesKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDevicePushDescriptorPropertiesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxPushDescriptors)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDevicePushDescriptorPropertiesKHR where
-  peekCStruct p = do
-    maxPushDescriptors <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pure $ PhysicalDevicePushDescriptorPropertiesKHR
-             maxPushDescriptors
-
-instance Storable PhysicalDevicePushDescriptorPropertiesKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDevicePushDescriptorPropertiesKHR where
-  zero = PhysicalDevicePushDescriptorPropertiesKHR
-           zero
-
-
-type KHR_PUSH_DESCRIPTOR_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION"
-pattern KHR_PUSH_DESCRIPTOR_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_PUSH_DESCRIPTOR_SPEC_VERSION = 2
-
-
-type KHR_PUSH_DESCRIPTOR_EXTENSION_NAME = "VK_KHR_push_descriptor"
-
--- No documentation found for TopLevel "VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME"
-pattern KHR_PUSH_DESCRIPTOR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_PUSH_DESCRIPTOR_EXTENSION_NAME = "VK_KHR_push_descriptor"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_push_descriptor  (PhysicalDevicePushDescriptorPropertiesKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDevicePushDescriptorPropertiesKHR
-
-instance ToCStruct PhysicalDevicePushDescriptorPropertiesKHR
-instance Show PhysicalDevicePushDescriptorPropertiesKHR
-
-instance FromCStruct PhysicalDevicePushDescriptorPropertiesKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_ray_tracing.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_ray_tracing.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_ray_tracing.hs
+++ /dev/null
@@ -1,6144 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_ray_tracing  ( destroyAccelerationStructureKHR
-                                                      , getAccelerationStructureMemoryRequirementsKHR
-                                                      , bindAccelerationStructureMemoryKHR
-                                                      , cmdCopyAccelerationStructureKHR
-                                                      , copyAccelerationStructureKHR
-                                                      , cmdCopyAccelerationStructureToMemoryKHR
-                                                      , copyAccelerationStructureToMemoryKHR
-                                                      , cmdCopyMemoryToAccelerationStructureKHR
-                                                      , copyMemoryToAccelerationStructureKHR
-                                                      , cmdWriteAccelerationStructuresPropertiesKHR
-                                                      , writeAccelerationStructuresPropertiesKHR
-                                                      , cmdTraceRaysKHR
-                                                      , getRayTracingShaderGroupHandlesKHR
-                                                      , getRayTracingCaptureReplayShaderGroupHandlesKHR
-                                                      , createRayTracingPipelinesKHR
-                                                      , cmdTraceRaysIndirectKHR
-                                                      , getDeviceAccelerationStructureCompatibilityKHR
-                                                      , createAccelerationStructureKHR
-                                                      , withAccelerationStructureKHR
-                                                      , cmdBuildAccelerationStructureKHR
-                                                      , cmdBuildAccelerationStructureIndirectKHR
-                                                      , buildAccelerationStructureKHR
-                                                      , getAccelerationStructureDeviceAddressKHR
-                                                      , RayTracingShaderGroupCreateInfoKHR(..)
-                                                      , RayTracingPipelineCreateInfoKHR(..)
-                                                      , BindAccelerationStructureMemoryInfoKHR(..)
-                                                      , WriteDescriptorSetAccelerationStructureKHR(..)
-                                                      , AccelerationStructureMemoryRequirementsInfoKHR(..)
-                                                      , PhysicalDeviceRayTracingFeaturesKHR(..)
-                                                      , PhysicalDeviceRayTracingPropertiesKHR(..)
-                                                      , StridedBufferRegionKHR(..)
-                                                      , TraceRaysIndirectCommandKHR(..)
-                                                      , AccelerationStructureGeometryTrianglesDataKHR(..)
-                                                      , AccelerationStructureGeometryAabbsDataKHR(..)
-                                                      , AccelerationStructureGeometryInstancesDataKHR(..)
-                                                      , AccelerationStructureGeometryKHR(..)
-                                                      , AccelerationStructureBuildGeometryInfoKHR(..)
-                                                      , AccelerationStructureBuildOffsetInfoKHR(..)
-                                                      , AccelerationStructureCreateGeometryTypeInfoKHR(..)
-                                                      , AccelerationStructureCreateInfoKHR(..)
-                                                      , AabbPositionsKHR(..)
-                                                      , TransformMatrixKHR(..)
-                                                      , AccelerationStructureInstanceKHR(..)
-                                                      , AccelerationStructureDeviceAddressInfoKHR(..)
-                                                      , AccelerationStructureVersionKHR(..)
-                                                      , CopyAccelerationStructureInfoKHR(..)
-                                                      , CopyAccelerationStructureToMemoryInfoKHR(..)
-                                                      , CopyMemoryToAccelerationStructureInfoKHR(..)
-                                                      , RayTracingPipelineInterfaceCreateInfoKHR(..)
-                                                      , DeviceOrHostAddressKHR(..)
-                                                      , DeviceOrHostAddressConstKHR(..)
-                                                      , AccelerationStructureGeometryDataKHR(..)
-                                                      , GeometryInstanceFlagBitsKHR( GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR
-                                                                                   , GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR
-                                                                                   , GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR
-                                                                                   , GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR
-                                                                                   , ..
-                                                                                   )
-                                                      , GeometryInstanceFlagsKHR
-                                                      , GeometryFlagBitsKHR( GEOMETRY_OPAQUE_BIT_KHR
-                                                                           , GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR
-                                                                           , ..
-                                                                           )
-                                                      , GeometryFlagsKHR
-                                                      , BuildAccelerationStructureFlagBitsKHR( BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR
-                                                                                             , BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR
-                                                                                             , BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR
-                                                                                             , BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR
-                                                                                             , BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR
-                                                                                             , ..
-                                                                                             )
-                                                      , BuildAccelerationStructureFlagsKHR
-                                                      , CopyAccelerationStructureModeKHR( COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR
-                                                                                        , COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR
-                                                                                        , COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR
-                                                                                        , COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR
-                                                                                        , ..
-                                                                                        )
-                                                      , AccelerationStructureTypeKHR( ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
-                                                                                    , ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
-                                                                                    , ..
-                                                                                    )
-                                                      , GeometryTypeKHR( GEOMETRY_TYPE_TRIANGLES_KHR
-                                                                       , GEOMETRY_TYPE_AABBS_KHR
-                                                                       , GEOMETRY_TYPE_INSTANCES_KHR
-                                                                       , ..
-                                                                       )
-                                                      , AccelerationStructureMemoryRequirementsTypeKHR( ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR
-                                                                                                      , ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR
-                                                                                                      , ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR
-                                                                                                      , ..
-                                                                                                      )
-                                                      , AccelerationStructureBuildTypeKHR( ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR
-                                                                                         , ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR
-                                                                                         , ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
-                                                                                         , ..
-                                                                                         )
-                                                      , RayTracingShaderGroupTypeKHR( RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR
-                                                                                    , RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR
-                                                                                    , RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR
-                                                                                    , ..
-                                                                                    )
-                                                      , KHR_RAY_TRACING_SPEC_VERSION
-                                                      , pattern KHR_RAY_TRACING_SPEC_VERSION
-                                                      , KHR_RAY_TRACING_EXTENSION_NAME
-                                                      , pattern KHR_RAY_TRACING_EXTENSION_NAME
-                                                      , AccelerationStructureKHR(..)
-                                                      , PipelineLibraryCreateInfoKHR(..)
-                                                      , DebugReportObjectTypeEXT(..)
-                                                      , SHADER_UNUSED_KHR
-                                                      , pattern SHADER_UNUSED_KHR
-                                                      ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Bits ((.&.))
-import Data.Bits ((.|.))
-import Data.Bits (shiftL)
-import Data.Bits (shiftR)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import Foreign.Marshal.Utils (with)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import qualified Data.ByteString (length)
-import Data.ByteString (packCStringLen)
-import Data.ByteString.Unsafe (unsafeUseAsCString)
-import Data.Coerce (coerce)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.Trans.Cont (runContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Foreign.C.Types (CSize(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Word (Word8)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.ByteString (ByteString)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Extends (forgetExtensions)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.CStruct.Extends (peekSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (pokeSomeCStruct)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Extensions.Handles (AccelerationStructureKHR)
-import Graphics.Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations (DeferredOperationInfoKHR)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Core10.BaseType (DeviceAddress)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkBindAccelerationStructureMemoryKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkBuildAccelerationStructureKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBuildAccelerationStructureIndirectKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBuildAccelerationStructureKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdCopyAccelerationStructureKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdCopyAccelerationStructureToMemoryKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdCopyMemoryToAccelerationStructureKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdTraceRaysIndirectKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdTraceRaysKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdWriteAccelerationStructuresPropertiesKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCopyAccelerationStructureKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCopyAccelerationStructureToMemoryKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCopyMemoryToAccelerationStructureKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateAccelerationStructureKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateRayTracingPipelinesKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyAccelerationStructureKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetAccelerationStructureDeviceAddressKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetAccelerationStructureMemoryRequirementsKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeviceAccelerationStructureCompatibilityKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetRayTracingShaderGroupHandlesKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkWriteAccelerationStructuresPropertiesKHR))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.IndexType (IndexType)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Handles (Pipeline)
-import Graphics.Vulkan.Core10.Handles (Pipeline(..))
-import Graphics.Vulkan.Core10.Handles (PipelineCache)
-import Graphics.Vulkan.Core10.Handles (PipelineCache(..))
-import Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfoEXT)
-import Graphics.Vulkan.Core10.Handles (PipelineLayout)
-import Graphics.Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR)
-import Graphics.Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Core10.Handles (QueryPool)
-import Graphics.Vulkan.Core10.Handles (QueryPool(..))
-import Graphics.Vulkan.Core10.Enums.QueryType (QueryType)
-import Graphics.Vulkan.Core10.Enums.QueryType (QueryType(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.CStruct.Extends (SomeStruct)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.BaseType (Bool32(FALSE))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Core10.APIConstants (pattern UUID_SIZE)
-import Graphics.Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
-import Graphics.Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR(..))
-import Graphics.Vulkan.Core10.APIConstants (SHADER_UNUSED_KHR)
-import Graphics.Vulkan.Core10.APIConstants (pattern SHADER_UNUSED_KHR)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyAccelerationStructureKHR
-  :: FunPtr (Ptr Device_T -> AccelerationStructureKHR -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> AccelerationStructureKHR -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyAccelerationStructureKHR - Destroy an acceleration structure
--- object
---
--- = Parameters
---
--- -   @device@ is the logical device that destroys the buffer.
---
--- -   @accelerationStructure@ is the acceleration structure to destroy.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @accelerationStructure@ /must/
---     have completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @accelerationStructure@ was created, a compatible
---     set of callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @accelerationStructure@ was created, @pAllocator@
---     /must/ be @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @accelerationStructure@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @accelerationStructure@ /must/ have been created, allocated, or
---     retrieved from @device@
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-destroyAccelerationStructureKHR :: forall io . MonadIO io => Device -> AccelerationStructureKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyAccelerationStructureKHR device accelerationStructure allocator = liftIO . evalContT $ do
-  let vkDestroyAccelerationStructureKHR' = mkVkDestroyAccelerationStructureKHR (pVkDestroyAccelerationStructureKHR (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyAccelerationStructureKHR' (deviceHandle (device)) (accelerationStructure) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetAccelerationStructureMemoryRequirementsKHR
-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoKHR -> Ptr (MemoryRequirements2 a) -> IO ()) -> Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoKHR -> Ptr (MemoryRequirements2 a) -> IO ()
-
--- | vkGetAccelerationStructureMemoryRequirementsKHR - Get acceleration
--- structure memory requirements
---
--- = Parameters
---
--- -   @device@ is the logical device on which the acceleration structure
---     was created.
---
--- -   @pInfo@ specifies the acceleration structure to get memory
---     requirements for.
---
--- -   @pMemoryRequirements@ returns the requested acceleration structure
---     memory requirements.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'AccelerationStructureMemoryRequirementsInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
-getAccelerationStructureMemoryRequirementsKHR :: forall a io . (PokeChain a, PeekChain a, MonadIO io) => Device -> AccelerationStructureMemoryRequirementsInfoKHR -> io (MemoryRequirements2 a)
-getAccelerationStructureMemoryRequirementsKHR device info = liftIO . evalContT $ do
-  let vkGetAccelerationStructureMemoryRequirementsKHR' = mkVkGetAccelerationStructureMemoryRequirementsKHR (pVkGetAccelerationStructureMemoryRequirementsKHR (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))
-  lift $ vkGetAccelerationStructureMemoryRequirementsKHR' (deviceHandle (device)) pInfo (pPMemoryRequirements)
-  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements
-  pure $ (pMemoryRequirements)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkBindAccelerationStructureMemoryKHR
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr BindAccelerationStructureMemoryInfoKHR -> IO Result) -> Ptr Device_T -> Word32 -> Ptr BindAccelerationStructureMemoryInfoKHR -> IO Result
-
--- | vkBindAccelerationStructureMemoryKHR - Bind acceleration structure
--- memory
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the acceleration structures
---     and memory.
---
--- -   @bindInfoCount@ is the number of elements in @pBindInfos@.
---
--- -   @pBindInfos@ is a pointer to an array of
---     'BindAccelerationStructureMemoryInfoKHR' structures describing
---     acceleration structures and memory to bind.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'BindAccelerationStructureMemoryInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-bindAccelerationStructureMemoryKHR :: forall io . MonadIO io => Device -> ("bindInfos" ::: Vector BindAccelerationStructureMemoryInfoKHR) -> io ()
-bindAccelerationStructureMemoryKHR device bindInfos = liftIO . evalContT $ do
-  let vkBindAccelerationStructureMemoryKHR' = mkVkBindAccelerationStructureMemoryKHR (pVkBindAccelerationStructureMemoryKHR (deviceCmds (device :: Device)))
-  pPBindInfos <- ContT $ allocaBytesAligned @BindAccelerationStructureMemoryInfoKHR ((Data.Vector.length (bindInfos)) * 56) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindInfos `plusPtr` (56 * (i)) :: Ptr BindAccelerationStructureMemoryInfoKHR) (e) . ($ ())) (bindInfos)
-  r <- lift $ vkBindAccelerationStructureMemoryKHR' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (bindInfos)) :: Word32)) (pPBindInfos)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdCopyAccelerationStructureKHR
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (CopyAccelerationStructureInfoKHR a) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (CopyAccelerationStructureInfoKHR a) -> IO ()
-
--- | vkCmdCopyAccelerationStructureKHR - Copy an acceleration structure
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pInfo@ is a pointer to a 'CopyAccelerationStructureInfoKHR'
---     structure defining the copy operation.
---
--- == Valid Usage
---
--- -   All 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     objects referenced by this command /must/ be bound to device memory
---
--- -   The
---     'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
---     structure /must/ not be included in the @pNext@ chain of the
---     'CopyAccelerationStructureInfoKHR' structure
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'CopyAccelerationStructureInfoKHR' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'CopyAccelerationStructureInfoKHR'
-cmdCopyAccelerationStructureKHR :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> CopyAccelerationStructureInfoKHR a -> io ()
-cmdCopyAccelerationStructureKHR commandBuffer info = liftIO . evalContT $ do
-  let vkCmdCopyAccelerationStructureKHR' = mkVkCmdCopyAccelerationStructureKHR (pVkCmdCopyAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer)))
-  pInfo <- ContT $ withCStruct (info)
-  lift $ vkCmdCopyAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) pInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCopyAccelerationStructureKHR
-  :: FunPtr (Ptr Device_T -> Ptr (CopyAccelerationStructureInfoKHR a) -> IO Result) -> Ptr Device_T -> Ptr (CopyAccelerationStructureInfoKHR a) -> IO Result
-
--- | vkCopyAccelerationStructureKHR - Copy an acceleration structure on the
--- host
---
--- = Parameters
---
--- This command fulfills the same task as 'cmdCopyAccelerationStructureKHR'
--- but executed by the host.
---
--- = Description
---
--- -   @device@ is the device which owns the acceleration structures.
---
--- -   @pInfo@ is a pointer to a 'CopyAccelerationStructureInfoKHR'
---     structure defining the copy operation.
---
--- If the
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
--- structure is included in the @pNext@ chain of the
--- 'CopyAccelerationStructureInfoKHR' structure, the operation of this
--- command is /deferred/, as defined in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>
--- chapter.
---
--- == Valid Usage
---
--- -   All 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     objects referenced by this command /must/ be bound to host-visible
---     memory
---
--- -   the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'CopyAccelerationStructureInfoKHR' structure
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'CopyAccelerationStructureInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-copyAccelerationStructureKHR :: forall a io . (PokeChain a, MonadIO io) => Device -> CopyAccelerationStructureInfoKHR a -> io (Result)
-copyAccelerationStructureKHR device info = liftIO . evalContT $ do
-  let vkCopyAccelerationStructureKHR' = mkVkCopyAccelerationStructureKHR (pVkCopyAccelerationStructureKHR (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  r <- lift $ vkCopyAccelerationStructureKHR' (deviceHandle (device)) pInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdCopyAccelerationStructureToMemoryKHR
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (CopyAccelerationStructureToMemoryInfoKHR a) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (CopyAccelerationStructureToMemoryInfoKHR a) -> IO ()
-
--- | vkCmdCopyAccelerationStructureToMemoryKHR - Copy an acceleration
--- structure to device memory
---
--- = Parameters
---
--- This command produces the same results as
--- 'copyAccelerationStructureToMemoryKHR', but writes its result to a
--- device address, and is executed on the device rather than the host. The
--- output /may/ not necessarily be bit-for-bit identical, but it can be
--- equally used by either 'cmdCopyMemoryToAccelerationStructureKHR' or
--- 'copyMemoryToAccelerationStructureKHR'.
---
--- = Description
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pInfo@ is an a pointer to a
---     'CopyAccelerationStructureToMemoryInfoKHR' structure defining the
---     copy operation.
---
--- The defined header structure for the serialized data consists of:
---
--- -   'Graphics.Vulkan.Core10.APIConstants.UUID_SIZE' bytes of data
---     matching
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@
---
--- -   'Graphics.Vulkan.Core10.APIConstants.UUID_SIZE' bytes of data
---     identifying the compatibility for comparison using
---     'getDeviceAccelerationStructureCompatibilityKHR'
---
--- -   A 64-bit integer of the total size matching the value queried using
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
---
--- -   A 64-bit integer of the deserialized size to be passed in to
---     'AccelerationStructureCreateInfoKHR'::@compactedSize@
---
--- -   A 64-bit integer of the count of the number of acceleration
---     structure handles following. This will be zero for a bottom-level
---     acceleration structure.
---
--- The corresponding handles matching the values returned by
--- 'getAccelerationStructureDeviceAddressKHR' or
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'
--- are tightly packed in the buffer following the count. The application is
--- expected to store a mapping between those handles and the original
--- application-generated bottom-level acceleration structures to provide
--- when deserializing.
---
--- == Valid Usage
---
--- -   All 'DeviceOrHostAddressConstKHR' referenced by this command /must/
---     contain valid device addresses
---
--- -   All 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     objects referenced by this command /must/ be bound to device memory
---
--- -   The
---     'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
---     structure /must/ not be included in the @pNext@ chain of the
---     'CopyAccelerationStructureToMemoryInfoKHR' structure
---
--- -   [[VUID-{refpage}-mode-03412]] @mode@ /must/ be
---     'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'CopyAccelerationStructureToMemoryInfoKHR' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'CopyAccelerationStructureToMemoryInfoKHR'
-cmdCopyAccelerationStructureToMemoryKHR :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> CopyAccelerationStructureToMemoryInfoKHR a -> io ()
-cmdCopyAccelerationStructureToMemoryKHR commandBuffer info = liftIO . evalContT $ do
-  let vkCmdCopyAccelerationStructureToMemoryKHR' = mkVkCmdCopyAccelerationStructureToMemoryKHR (pVkCmdCopyAccelerationStructureToMemoryKHR (deviceCmds (commandBuffer :: CommandBuffer)))
-  pInfo <- ContT $ withCStruct (info)
-  lift $ vkCmdCopyAccelerationStructureToMemoryKHR' (commandBufferHandle (commandBuffer)) pInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCopyAccelerationStructureToMemoryKHR
-  :: FunPtr (Ptr Device_T -> Ptr (CopyAccelerationStructureToMemoryInfoKHR a) -> IO Result) -> Ptr Device_T -> Ptr (CopyAccelerationStructureToMemoryInfoKHR a) -> IO Result
-
--- | vkCopyAccelerationStructureToMemoryKHR - Serialize an acceleration
--- structure on the host
---
--- = Parameters
---
--- This command fulfills the same task as
--- 'cmdCopyAccelerationStructureToMemoryKHR' but executed by the host.
---
--- = Description
---
--- This command produces the same results as
--- 'cmdCopyAccelerationStructureToMemoryKHR', but writes its result
--- directly to a host pointer, and is executed on the host rather than the
--- device. The output /may/ not necessarily be bit-for-bit identical, but
--- it can be equally used by either
--- 'cmdCopyMemoryToAccelerationStructureKHR' or
--- 'copyMemoryToAccelerationStructureKHR'.
---
--- -   @device@ is the device which owns @pInfo->src@.
---
--- -   @pInfo@ is a pointer to a 'CopyAccelerationStructureToMemoryInfoKHR'
---     structure defining the copy operation.
---
--- If the
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
--- structure is included in the @pNext@ chain of the
--- 'CopyAccelerationStructureToMemoryInfoKHR' structure, the operation of
--- this command is /deferred/, as defined in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations>
--- chapter.
---
--- == Valid Usage
---
--- -   All 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     objects referenced by this command /must/ be bound to host-visible
---     memory
---
--- -   All 'DeviceOrHostAddressKHR' referenced by this command /must/
---     contain valid host pointers
---
--- -   the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'CopyAccelerationStructureToMemoryInfoKHR' structure
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'CopyAccelerationStructureToMemoryInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-copyAccelerationStructureToMemoryKHR :: forall a io . (PokeChain a, MonadIO io) => Device -> CopyAccelerationStructureToMemoryInfoKHR a -> io (Result)
-copyAccelerationStructureToMemoryKHR device info = liftIO . evalContT $ do
-  let vkCopyAccelerationStructureToMemoryKHR' = mkVkCopyAccelerationStructureToMemoryKHR (pVkCopyAccelerationStructureToMemoryKHR (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  r <- lift $ vkCopyAccelerationStructureToMemoryKHR' (deviceHandle (device)) pInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdCopyMemoryToAccelerationStructureKHR
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (CopyMemoryToAccelerationStructureInfoKHR a) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (CopyMemoryToAccelerationStructureInfoKHR a) -> IO ()
-
--- | vkCmdCopyMemoryToAccelerationStructureKHR - Copy device memory to an
--- acceleration structure
---
--- = Parameters
---
--- This command can accept acceleration structures produced by either
--- 'cmdCopyAccelerationStructureToMemoryKHR' or
--- 'copyAccelerationStructureToMemoryKHR'.
---
--- = Description
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pInfo@ is a pointer to a 'CopyMemoryToAccelerationStructureInfoKHR'
---     structure defining the copy operation.
---
--- The structure provided as input to deserialize is as described in
--- 'cmdCopyAccelerationStructureToMemoryKHR', with any acceleration
--- structure handles filled in with the newly-queried handles to bottom
--- level acceleration structures created before deserialization. These do
--- not need to be built at deserialize time, but /must/ be created.
---
--- == Valid Usage
---
--- -   All 'DeviceOrHostAddressKHR' referenced by this command /must/
---     contain valid device addresses
---
--- -   All 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     objects referenced by this command /must/ be bound to device memory
---
--- -   The
---     'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
---     structure /must/ not be included in the @pNext@ chain of the
---     'CopyMemoryToAccelerationStructureInfoKHR' structure
---
--- -   [[VUID-{refpage}-mode-03413]] @mode@ /must/ be
---     'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR'
---
--- -   [[VUID-{refpage}-pInfo-03414]] The data in @pInfo->src@ /must/ have
---     a format compatible with the destination physical device as returned
---     by 'getDeviceAccelerationStructureCompatibilityKHR'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'CopyMemoryToAccelerationStructureInfoKHR' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'CopyMemoryToAccelerationStructureInfoKHR'
-cmdCopyMemoryToAccelerationStructureKHR :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> CopyMemoryToAccelerationStructureInfoKHR a -> io ()
-cmdCopyMemoryToAccelerationStructureKHR commandBuffer info = liftIO . evalContT $ do
-  let vkCmdCopyMemoryToAccelerationStructureKHR' = mkVkCmdCopyMemoryToAccelerationStructureKHR (pVkCmdCopyMemoryToAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer)))
-  pInfo <- ContT $ withCStruct (info)
-  lift $ vkCmdCopyMemoryToAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) pInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCopyMemoryToAccelerationStructureKHR
-  :: FunPtr (Ptr Device_T -> Ptr (CopyMemoryToAccelerationStructureInfoKHR a) -> IO Result) -> Ptr Device_T -> Ptr (CopyMemoryToAccelerationStructureInfoKHR a) -> IO Result
-
--- | vkCopyMemoryToAccelerationStructureKHR - Deserialize an acceleration
--- structure on the host
---
--- = Parameters
---
--- This command fulfills the same task as
--- 'cmdCopyMemoryToAccelerationStructureKHR' but is executed by the host.
---
--- = Description
---
--- This command can accept acceleration structures produced by either
--- 'cmdCopyAccelerationStructureToMemoryKHR' or
--- 'copyAccelerationStructureToMemoryKHR'.
---
--- -   @device@ is the device which owns @pInfo->dst@.
---
--- -   @pInfo@ is a pointer to a 'CopyMemoryToAccelerationStructureInfoKHR'
---     structure defining the copy operation.
---
--- If the
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
--- structure is included in the @pNext@ chain of the
--- 'CopyMemoryToAccelerationStructureInfoKHR' structure, the operation of
--- this command is /deferred/, as defined in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>
--- chapter.
---
--- == Valid Usage
---
--- -   All 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     objects referenced by this command /must/ be bound to host-visible
---     memory
---
--- -   All 'DeviceOrHostAddressConstKHR' referenced by this command /must/
---     contain valid host pointers
---
--- -   the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'CopyMemoryToAccelerationStructureInfoKHR' structure
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'CopyMemoryToAccelerationStructureInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-copyMemoryToAccelerationStructureKHR :: forall a io . (PokeChain a, MonadIO io) => Device -> CopyMemoryToAccelerationStructureInfoKHR a -> io (Result)
-copyMemoryToAccelerationStructureKHR device info = liftIO . evalContT $ do
-  let vkCopyMemoryToAccelerationStructureKHR' = mkVkCopyMemoryToAccelerationStructureKHR (pVkCopyMemoryToAccelerationStructureKHR (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  r <- lift $ vkCopyMemoryToAccelerationStructureKHR' (deviceHandle (device)) pInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdWriteAccelerationStructuresPropertiesKHR
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> QueryPool -> Word32 -> IO ()
-
--- | vkCmdWriteAccelerationStructuresPropertiesKHR - Write acceleration
--- structure result parameters to query results.
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @accelerationStructureCount@ is the count of acceleration structures
---     for which to query the property.
---
--- -   @pAccelerationStructures@ is a pointer to an array of existing
---     previously built acceleration structures.
---
--- -   @queryType@ is a 'Graphics.Vulkan.Core10.Enums.QueryType.QueryType'
---     value specifying the type of queries managed by the pool.
---
--- -   @queryPool@ is the query pool that will manage the results of the
---     query.
---
--- -   @firstQuery@ is the first query index within the query pool that
---     will contain the @accelerationStructureCount@ number of results.
---
--- == Valid Usage
---
--- -   @queryPool@ /must/ have been created with a @queryType@ matching
---     @queryType@
---
--- -   The queries identified by @queryPool@ and @firstQuery@ /must/ be
---     /unavailable/
---
--- -   [[VUID-{refpage}-accelerationStructures-03431]] All acceleration
---     structures in @accelerationStructures@ /must/ have been built with
---     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if
---     @queryType@ is
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
---
--- -   [[VUID-{refpage}-queryType-03432]] @queryType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
---     or
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pAccelerationStructures@ /must/ be a valid pointer to an array of
---     @accelerationStructureCount@ valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     handles
---
--- -   @queryType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.QueryType.QueryType' value
---
--- -   @queryPool@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.QueryPool' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @accelerationStructureCount@ /must/ be greater than @0@
---
--- -   Each of @commandBuffer@, @queryPool@, and the elements of
---     @pAccelerationStructures@ /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.QueryPool',
--- 'Graphics.Vulkan.Core10.Enums.QueryType.QueryType'
-cmdWriteAccelerationStructuresPropertiesKHR :: forall io . MonadIO io => CommandBuffer -> ("accelerationStructures" ::: Vector AccelerationStructureKHR) -> QueryType -> QueryPool -> ("firstQuery" ::: Word32) -> io ()
-cmdWriteAccelerationStructuresPropertiesKHR commandBuffer accelerationStructures queryType queryPool firstQuery = liftIO . evalContT $ do
-  let vkCmdWriteAccelerationStructuresPropertiesKHR' = mkVkCmdWriteAccelerationStructuresPropertiesKHR (pVkCmdWriteAccelerationStructuresPropertiesKHR (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPAccelerationStructures <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)
-  lift $ vkCmdWriteAccelerationStructuresPropertiesKHR' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32)) (pPAccelerationStructures) (queryType) (queryPool) (firstQuery)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkWriteAccelerationStructuresPropertiesKHR
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> CSize -> Ptr () -> CSize -> IO Result) -> Ptr Device_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> CSize -> Ptr () -> CSize -> IO Result
-
--- | vkWriteAccelerationStructuresPropertiesKHR - Query acceleration
--- structure meta-data on the host
---
--- = Parameters
---
--- This command fulfills the same task as
--- 'cmdWriteAccelerationStructuresPropertiesKHR' but executed by the host.
---
--- = Description
---
--- -   @device@ is the device which owns the acceleration structures in
---     @pAccelerationStructures@.
---
--- -   @accelerationStructureCount@ is the count of acceleration structures
---     for which to query the property.
---
--- -   @pAccelerationStructures@ points to an array of existing previously
---     built acceleration structures.
---
--- -   @queryType@ is a 'Graphics.Vulkan.Core10.Enums.QueryType.QueryType'
---     value specifying the property to be queried.
---
--- -   @dataSize@ is the size in bytes of the buffer pointed to by @pData@.
---
--- -   @pData@ is a pointer to a user-allocated buffer where the results
---     will be written.
---
--- -   @stride@ is the stride in bytes between results for individual
---     queries within @pData@.
---
--- == Valid Usage
---
--- -   If @queryType@ is
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',
---     then @stride@ /must/ be a multiple of the size of
---     'Graphics.Vulkan.Core10.BaseType.DeviceSize'
---
--- -   If @queryType@ is
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',
---     then @data@ /must/ point to a
---     'Graphics.Vulkan.Core10.BaseType.DeviceSize'
---
--- -   If @queryType@ is
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',
---     then @stride@ /must/ be a multiple of the size of
---     'Graphics.Vulkan.Core10.BaseType.DeviceSize'
---
--- -   If @queryType@ is
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',
---     then @data@ /must/ point to a
---     'Graphics.Vulkan.Core10.BaseType.DeviceSize'
---
--- -   @dataSize@ /must/ be greater than or equal to
---     @accelerationStructureCount@*@stride@
---
--- -   The acceleration structures referenced by @pAccelerationStructures@
---     /must/ be bound to host-visible memory
---
--- -   [[VUID-{refpage}-accelerationStructures-03431]] All acceleration
---     structures in @accelerationStructures@ /must/ have been built with
---     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if
---     @queryType@ is
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
---
--- -   [[VUID-{refpage}-queryType-03432]] @queryType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
---     or
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
---
--- -   the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pAccelerationStructures@ /must/ be a valid pointer to an array of
---     @accelerationStructureCount@ valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     handles
---
--- -   @queryType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.QueryType.QueryType' value
---
--- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
---
--- -   @accelerationStructureCount@ /must/ be greater than @0@
---
--- -   @dataSize@ /must/ be greater than @0@
---
--- -   Each element of @pAccelerationStructures@ /must/ have been created,
---     allocated, or retrieved from @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Enums.QueryType.QueryType'
-writeAccelerationStructuresPropertiesKHR :: forall io . MonadIO io => Device -> ("accelerationStructures" ::: Vector AccelerationStructureKHR) -> QueryType -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> ("stride" ::: Word64) -> io ()
-writeAccelerationStructuresPropertiesKHR device accelerationStructures queryType dataSize data' stride = liftIO . evalContT $ do
-  let vkWriteAccelerationStructuresPropertiesKHR' = mkVkWriteAccelerationStructuresPropertiesKHR (pVkWriteAccelerationStructuresPropertiesKHR (deviceCmds (device :: Device)))
-  pPAccelerationStructures <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8
-  lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)
-  r <- lift $ vkWriteAccelerationStructuresPropertiesKHR' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32)) (pPAccelerationStructures) (queryType) (CSize (dataSize)) (data') (CSize (stride))
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdTraceRaysKHR
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Word32 -> Word32 -> Word32 -> IO ()
-
--- | vkCmdTraceRaysKHR - Initialize a ray tracing dispatch
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pRaygenShaderBindingTable@ is the strided buffer range that holds
---     the shader binding table data for the ray generation shader stage.
---
--- -   @pMissShaderBindingTable@ is the strided buffer range that holds the
---     shader binding table data for the miss shader stage.
---
--- -   @pHitShaderBindingTable@ is the strided buffer range that holds the
---     shader binding table data for the hit shader stage.
---
--- -   @pCallableShaderBindingTable@ is the strided buffer range that holds
---     the shader binding table data for the callable shader stage.
---
--- -   @width@ is the width of the ray trace query dimensions.
---
--- -   @height@ is height of the ray trace query dimensions.
---
--- -   @depth@ is depth of the ray trace query dimensions.
---
--- = Description
---
--- When the command is executed, a ray generation group of @width@ ×
--- @height@ × @depth@ rays is assembled.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   @raygenShaderBindingOffset@ /must/ be less than the size of
---     @raygenShaderBindingTableBuffer@
---
--- -   @raygenShaderBindingOffset@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @missShaderBindingOffset@ /must/ be less than the size of
---     @missShaderBindingTableBuffer@
---
--- -   @missShaderBindingOffset@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @hitShaderBindingOffset@ /must/ be less than the size of
---     @hitShaderBindingTableBuffer@
---
--- -   @hitShaderBindingOffset@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @callableShaderBindingOffset@ /must/ be less than the size of
---     @callableShaderBindingTableBuffer@
---
--- -   @callableShaderBindingOffset@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @missShaderBindingStride@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
---
--- -   @hitShaderBindingStride@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
---
--- -   @callableShaderBindingStride@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
---
--- -   @missShaderBindingStride@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
---
--- -   @hitShaderBindingStride@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
---
--- -   @callableShaderBindingStride@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
---
--- -   Any shader group handle referenced by this call /must/ have been
---     queried from the currently bound ray tracing shader pipeline
---
--- -   This command /must/ not cause a shader call instruction to be
---     executed from a shader invocation with a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth>
---     greater than the value of @maxRecursionDepth@ used to create the
---     bound ray tracing pipeline
---
--- -   If @commandBuffer@ is a protected command buffer, any resource
---     written to by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     an unprotected resource
---
--- -   If @commandBuffer@ is a protected command buffer, pipeline stages
---     other than the framebuffer-space and compute stages in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point /must/ not write to any resource
---
--- -   @width@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
---
--- -   @height@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
---
--- -   @depth@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
---
--- -   If the currently bound ray tracing pipeline was created with @flags@
---     that included
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',
---     the @buffer@ member of @hitShaderBindingTable@ /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If the currently bound ray tracing pipeline was created with @flags@
---     that included
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',
---     the @buffer@ member of @hitShaderBindingTable@ /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If the currently bound ray tracing pipeline was created with @flags@
---     that included
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',
---     the @buffer@ member of @hitShaderBindingTable@ /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If the currently bound ray tracing pipeline was created with @flags@
---     that included
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR',
---     the shader group handle identified by @missShaderBindingTable@
---     /must/ contain a valid miss shader
---
--- -   If the currently bound ray tracing pipeline was created with @flags@
---     that included
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',
---     entries in @hitShaderBindingTable@ accessed as a result of this
---     command in order to execute an any hit shader /must/ not be set to
---     zero
---
--- -   If the currently bound ray tracing pipeline was created with @flags@
---     that included
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',
---     entries in @hitShaderBindingTable@ accessed as a result of this
---     command in order to execute a closest hit shader /must/ not be set
---     to zero
---
--- -   If the currently bound ray tracing pipeline was created with @flags@
---     that included
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',
---     entries in @hitShaderBindingTable@ accessed as a result of this
---     command in order to execute an intersection shader /must/ not be set
---     to zero
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pRaygenShaderBindingTable@ /must/ be a valid pointer to a valid
---     'StridedBufferRegionKHR' structure
---
--- -   @pMissShaderBindingTable@ /must/ be a valid pointer to a valid
---     'StridedBufferRegionKHR' structure
---
--- -   @pHitShaderBindingTable@ /must/ be a valid pointer to a valid
---     'StridedBufferRegionKHR' structure
---
--- -   @pCallableShaderBindingTable@ /must/ be a valid pointer to a valid
---     'StridedBufferRegionKHR' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'StridedBufferRegionKHR'
-cmdTraceRaysKHR :: forall io . MonadIO io => CommandBuffer -> ("raygenShaderBindingTable" ::: StridedBufferRegionKHR) -> ("missShaderBindingTable" ::: StridedBufferRegionKHR) -> ("hitShaderBindingTable" ::: StridedBufferRegionKHR) -> ("callableShaderBindingTable" ::: StridedBufferRegionKHR) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> io ()
-cmdTraceRaysKHR commandBuffer raygenShaderBindingTable missShaderBindingTable hitShaderBindingTable callableShaderBindingTable width height depth = liftIO . evalContT $ do
-  let vkCmdTraceRaysKHR' = mkVkCmdTraceRaysKHR (pVkCmdTraceRaysKHR (deviceCmds (commandBuffer :: CommandBuffer)))
-  pRaygenShaderBindingTable <- ContT $ withCStruct (raygenShaderBindingTable)
-  pMissShaderBindingTable <- ContT $ withCStruct (missShaderBindingTable)
-  pHitShaderBindingTable <- ContT $ withCStruct (hitShaderBindingTable)
-  pCallableShaderBindingTable <- ContT $ withCStruct (callableShaderBindingTable)
-  lift $ vkCmdTraceRaysKHR' (commandBufferHandle (commandBuffer)) pRaygenShaderBindingTable pMissShaderBindingTable pHitShaderBindingTable pCallableShaderBindingTable (width) (height) (depth)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetRayTracingShaderGroupHandlesKHR
-  :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result
-
--- | vkGetRayTracingShaderGroupHandlesKHR - Query ray tracing pipeline shader
--- group handles
---
--- = Parameters
---
--- -   @device@ is the logical device containing the ray tracing pipeline.
---
--- -   @pipeline@ is the ray tracing pipeline object containing the
---     shaders.
---
--- -   @firstGroup@ is the index of the first group to retrieve a handle
---     for from the 'RayTracingPipelineCreateInfoKHR'::@pGroups@ or
---     'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@pGroups@
---     array.
---
--- -   @groupCount@ is the number of shader handles to retrieve.
---
--- -   @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.
---
--- == Valid Usage
---
--- -   The sum of @firstGroup@ and @groupCount@ /must/ be less than the
---     number of shader groups in @pipeline@
---
--- -   @dataSize@ /must/ be at least
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@ ×
---     @groupCount@
---
--- -   @pipeline@ /must/ have not been created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pipeline@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handle
---
--- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
---
--- -   @dataSize@ /must/ be greater than @0@
---
--- -   @pipeline@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline'
-getRayTracingShaderGroupHandlesKHR :: forall io . MonadIO io => Device -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> io ()
-getRayTracingShaderGroupHandlesKHR device pipeline firstGroup groupCount dataSize data' = liftIO $ do
-  let vkGetRayTracingShaderGroupHandlesKHR' = mkVkGetRayTracingShaderGroupHandlesKHR (pVkGetRayTracingShaderGroupHandlesKHR (deviceCmds (device :: Device)))
-  r <- vkGetRayTracingShaderGroupHandlesKHR' (deviceHandle (device)) (pipeline) (firstGroup) (groupCount) (CSize (dataSize)) (data')
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR
-  :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result
-
--- | vkGetRayTracingCaptureReplayShaderGroupHandlesKHR - Query ray tracing
--- capture replay pipeline shader group handles
---
--- = Parameters
---
--- -   @device@ is the logical device containing the ray tracing pipeline.
---
--- -   @pipeline@ is the ray tracing pipeline object containing the
---     shaders.
---
--- -   @firstGroup@ is the index of the first group to retrieve a handle
---     for from the 'RayTracingPipelineCreateInfoKHR'::@pGroups@ array.
---
--- -   @groupCount@ is the number of shader handles to retrieve.
---
--- -   @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.
---
--- == Valid Usage
---
--- -   The sum of @firstGroup@ and @groupCount@ /must/ be less than the
---     number of shader groups in @pipeline@
---
--- -   @dataSize@ /must/ be at least
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleCaptureReplaySize@
---     × @groupCount@
---
--- -   'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@
---     /must/ be enabled to call this function
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pipeline@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handle
---
--- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
---
--- -   @dataSize@ /must/ be greater than @0@
---
--- -   @pipeline@ /must/ have been created, allocated, or retrieved from
---     @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline'
-getRayTracingCaptureReplayShaderGroupHandlesKHR :: forall io . MonadIO io => Device -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> io ()
-getRayTracingCaptureReplayShaderGroupHandlesKHR device pipeline firstGroup groupCount dataSize data' = liftIO $ do
-  let vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' = mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR (pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR (deviceCmds (device :: Device)))
-  r <- vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' (deviceHandle (device)) (pipeline) (firstGroup) (groupCount) (CSize (dataSize)) (data')
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateRayTracingPipelinesKHR
-  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (RayTracingPipelineCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (RayTracingPipelineCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
-
--- | vkCreateRayTracingPipelinesKHR - Creates a new ray tracing pipeline
--- object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the ray tracing
---     pipelines.
---
--- -   @pipelineCache@ is either
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', indicating that
---     pipeline caching is disabled, or the handle of a valid
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>
---     object, in which case use of that cache is enabled for the duration
---     of the command.
---
--- -   @createInfoCount@ is the length of the @pCreateInfos@ and
---     @pPipelines@ arrays.
---
--- -   @pCreateInfos@ is a pointer to an array of
---     'RayTracingPipelineCreateInfoKHR' structures.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pPipelines@ is a pointer to an array in which the resulting ray
---     tracing pipeline objects are returned.
---
--- = Description
---
--- The
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'
--- error is returned if the implementation is unable to re-use the shader
--- group handles provided in
--- 'RayTracingShaderGroupCreateInfoKHR'::@pShaderGroupCaptureReplayHandle@
--- when
--- 'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@
--- is enabled.
---
--- == Valid Usage
---
--- -   If the @flags@ member of any element of @pCreateInfos@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and the @basePipelineIndex@ member of that same element is not
---     @-1@, @basePipelineIndex@ /must/ be less than the index into
---     @pCreateInfos@ that corresponds to that element
---
--- -   If the @flags@ member of any element of @pCreateInfos@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, the base pipeline /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
---     flag set
---
--- -   If @pipelineCache@ was created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
---     host access to @pipelineCache@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @pipelineCache@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @pipelineCache@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.PipelineCache'
---     handle
---
--- -   @pCreateInfos@ /must/ be a valid pointer to an array of
---     @createInfoCount@ valid 'RayTracingPipelineCreateInfoKHR' structures
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pPipelines@ /must/ be a valid pointer to an array of
---     @createInfoCount@ 'Graphics.Vulkan.Core10.Handles.Pipeline' handles
---
--- -   @createInfoCount@ /must/ be greater than @0@
---
--- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
---     allocated, or retrieved from @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Handles.PipelineCache',
--- 'RayTracingPipelineCreateInfoKHR'
-createRayTracingPipelinesKHR :: forall a io . (PokeChain a, MonadIO io) => Device -> PipelineCache -> ("createInfos" ::: Vector (RayTracingPipelineCreateInfoKHR a)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, ("pipelines" ::: Vector Pipeline))
-createRayTracingPipelinesKHR device pipelineCache createInfos allocator = liftIO . evalContT $ do
-  let vkCreateRayTracingPipelinesKHR' = mkVkCreateRayTracingPipelinesKHR (pVkCreateRayTracingPipelinesKHR (deviceCmds (device :: Device)))
-  pPCreateInfos <- ContT $ allocaBytesAligned @(RayTracingPipelineCreateInfoKHR _) ((Data.Vector.length (createInfos)) * 120) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCreateInfos `plusPtr` (120 * (i)) :: Ptr (RayTracingPipelineCreateInfoKHR _)) (e) . ($ ())) (createInfos)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
-  r <- lift $ vkCreateRayTracingPipelinesKHR' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (pPCreateInfos) pAllocator (pPPipelines)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
-  pure $ (r, pPipelines)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdTraceRaysIndirectKHR
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Buffer -> DeviceSize -> IO ()
-
--- | vkCmdTraceRaysIndirectKHR - Initialize an indirect ray tracing dispatch
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pRaygenShaderBindingTable@ is the strided buffer range that holds
---     the shader binding table data for the ray generation shader stage.
---
--- -   @pMissShaderBindingTable@ is the strided buffer range that holds the
---     shader binding table data for the miss shader stage.
---
--- -   @pHitShaderBindingTable@ is the strided buffer range that holds the
---     shader binding table data for the hit shader stage.
---
--- -   @pCallableShaderBindingTable@ is the strided buffer range that holds
---     the shader binding table data for the callable shader stage.
---
--- -   @buffer@ is the buffer containing the trace ray parameters.
---
--- -   @offset@ is the byte offset into @buffer@ where parameters begin.
---
--- = Description
---
--- 'cmdTraceRaysIndirectKHR' behaves similarly to 'cmdTraceRaysKHR' except
--- that the ray trace query dimensions are read by the device from a buffer
--- during execution. The parameters of trace ray are encoded in the
--- 'TraceRaysIndirectCommandKHR' structure.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   @raygenShaderBindingOffset@ /must/ be less than the size of
---     @raygenShaderBindingTableBuffer@
---
--- -   @raygenShaderBindingOffset@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @missShaderBindingOffset@ /must/ be less than the size of
---     @missShaderBindingTableBuffer@
---
--- -   @missShaderBindingOffset@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @hitShaderBindingOffset@ /must/ be less than the size of
---     @hitShaderBindingTableBuffer@
---
--- -   @hitShaderBindingOffset@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @callableShaderBindingOffset@ /must/ be less than the size of
---     @callableShaderBindingTableBuffer@
---
--- -   @callableShaderBindingOffset@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @missShaderBindingStride@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
---
--- -   @hitShaderBindingStride@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
---
--- -   @callableShaderBindingStride@ /must/ be a multiple of
---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
---
--- -   @missShaderBindingStride@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
---
--- -   @hitShaderBindingStride@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
---
--- -   @callableShaderBindingStride@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
---
--- -   Any shader group handle referenced by this call /must/ have been
---     queried from the currently bound ray tracing shader pipeline
---
--- -   This command /must/ not cause a shader call instruction to be
---     executed from a shader invocation with a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth>
---     greater than the value of @maxRecursionDepth@ used to create the
---     bound ray tracing pipeline
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @buffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   (@offset@ + @sizeof@('TraceRaysIndirectCommandKHR')) /must/ be less
---     than or equal to the size of @buffer@
---
--- -   the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-indirecttraceray ::rayTracingIndirectTraceRays>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pRaygenShaderBindingTable@ /must/ be a valid pointer to a valid
---     'StridedBufferRegionKHR' structure
---
--- -   @pMissShaderBindingTable@ /must/ be a valid pointer to a valid
---     'StridedBufferRegionKHR' structure
---
--- -   @pHitShaderBindingTable@ /must/ be a valid pointer to a valid
---     'StridedBufferRegionKHR' structure
---
--- -   @pCallableShaderBindingTable@ /must/ be a valid pointer to a valid
---     'StridedBufferRegionKHR' structure
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize', 'StridedBufferRegionKHR'
-cmdTraceRaysIndirectKHR :: forall io . MonadIO io => CommandBuffer -> ("raygenShaderBindingTable" ::: StridedBufferRegionKHR) -> ("missShaderBindingTable" ::: StridedBufferRegionKHR) -> ("hitShaderBindingTable" ::: StridedBufferRegionKHR) -> ("callableShaderBindingTable" ::: StridedBufferRegionKHR) -> Buffer -> ("offset" ::: DeviceSize) -> io ()
-cmdTraceRaysIndirectKHR commandBuffer raygenShaderBindingTable missShaderBindingTable hitShaderBindingTable callableShaderBindingTable buffer offset = liftIO . evalContT $ do
-  let vkCmdTraceRaysIndirectKHR' = mkVkCmdTraceRaysIndirectKHR (pVkCmdTraceRaysIndirectKHR (deviceCmds (commandBuffer :: CommandBuffer)))
-  pRaygenShaderBindingTable <- ContT $ withCStruct (raygenShaderBindingTable)
-  pMissShaderBindingTable <- ContT $ withCStruct (missShaderBindingTable)
-  pHitShaderBindingTable <- ContT $ withCStruct (hitShaderBindingTable)
-  pCallableShaderBindingTable <- ContT $ withCStruct (callableShaderBindingTable)
-  lift $ vkCmdTraceRaysIndirectKHR' (commandBufferHandle (commandBuffer)) pRaygenShaderBindingTable pMissShaderBindingTable pHitShaderBindingTable pCallableShaderBindingTable (buffer) (offset)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceAccelerationStructureCompatibilityKHR
-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result
-
--- | vkGetDeviceAccelerationStructureCompatibilityKHR - Check if a serialized
--- acceleration structure is compatible with the current device
---
--- = Parameters
---
--- -   @device@ is the device to check the version against.
---
--- -   @version@ points to the 'AccelerationStructureVersionKHR' version
---     information to check against the device.
---
--- = Description
---
--- This possible return values for
--- 'getDeviceAccelerationStructureCompatibilityKHR' are:
---
--- -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' is returned if an
---     acceleration structure serialized with @version@ as the version
---     information is compatible with @device@.
---
--- -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_VERSION_KHR'
---     is returned if an acceleration structure serialized with @version@
---     as the version information is not compatible with @device@.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @version@ /must/ be a valid pointer to a valid
---     'AccelerationStructureVersionKHR' structure
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_VERSION_KHR'
---
--- = See Also
---
--- 'AccelerationStructureVersionKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-getDeviceAccelerationStructureCompatibilityKHR :: forall io . MonadIO io => Device -> AccelerationStructureVersionKHR -> io ()
-getDeviceAccelerationStructureCompatibilityKHR device version = liftIO . evalContT $ do
-  let vkGetDeviceAccelerationStructureCompatibilityKHR' = mkVkGetDeviceAccelerationStructureCompatibilityKHR (pVkGetDeviceAccelerationStructureCompatibilityKHR (deviceCmds (device :: Device)))
-  version' <- ContT $ withCStruct (version)
-  r <- lift $ vkGetDeviceAccelerationStructureCompatibilityKHR' (deviceHandle (device)) version'
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateAccelerationStructureKHR
-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result
-
--- | vkCreateAccelerationStructureKHR - Create a new acceleration structure
--- object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the buffer object.
---
--- -   @pCreateInfo@ is a pointer to a 'AccelerationStructureCreateInfoKHR'
---     structure containing parameters affecting creation of the
---     acceleration structure.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pAccelerationStructure@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---     in which the resulting acceleration structure object is returned.
---
--- = Description
---
--- Similar to other objects in Vulkan, the acceleration structure creation
--- merely creates an object with a specific “shape”. The type and quantity
--- of geometry that can be built into an acceleration structure is
--- determined by the parameters of 'AccelerationStructureCreateInfoKHR'.
---
--- Populating the data in the object after allocating and binding memory is
--- done with commands such as 'cmdBuildAccelerationStructureKHR',
--- 'buildAccelerationStructureKHR', 'cmdCopyAccelerationStructureKHR', and
--- 'copyAccelerationStructureKHR'.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>
---     or
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
---     feature /must/ be enabled
---
--- -   If 'AccelerationStructureCreateInfoKHR'::@deviceAddress@ is not
---     zero, the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-ascapturereplay rayTracingAccelerationStructureCaptureReplay>
---     feature /must/ be enabled
---
--- -   If @device@ was created with multiple physical devices, then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'AccelerationStructureCreateInfoKHR' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pAccelerationStructure@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
---
--- = See Also
---
--- 'AccelerationStructureCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-createAccelerationStructureKHR :: forall io . MonadIO io => Device -> AccelerationStructureCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (AccelerationStructureKHR)
-createAccelerationStructureKHR device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateAccelerationStructureKHR' = mkVkCreateAccelerationStructureKHR (pVkCreateAccelerationStructureKHR (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPAccelerationStructure <- ContT $ bracket (callocBytes @AccelerationStructureKHR 8) free
-  r <- lift $ vkCreateAccelerationStructureKHR' (deviceHandle (device)) pCreateInfo pAllocator (pPAccelerationStructure)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pAccelerationStructure <- lift $ peek @AccelerationStructureKHR pPAccelerationStructure
-  pure $ (pAccelerationStructure)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createAccelerationStructureKHR' and 'destroyAccelerationStructureKHR'
---
--- To ensure that 'destroyAccelerationStructureKHR' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withAccelerationStructureKHR :: forall io r . MonadIO io => (io (AccelerationStructureKHR) -> ((AccelerationStructureKHR) -> io ()) -> r) -> Device -> AccelerationStructureCreateInfoKHR -> Maybe AllocationCallbacks -> r
-withAccelerationStructureKHR b device pCreateInfo pAllocator =
-  b (createAccelerationStructureKHR device pCreateInfo pAllocator)
-    (\(o0) -> destroyAccelerationStructureKHR device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBuildAccelerationStructureKHR
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO ()
-
--- | vkCmdBuildAccelerationStructureKHR - Build an acceleration structure
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @infoCount@ is the number of acceleration structures to build. It
---     specifies the number of the @pInfos@ structures and @ppOffsetInfos@
---     pointers that /must/ be provided.
---
--- -   @pInfos@ is an array of @infoCount@
---     'AccelerationStructureBuildGeometryInfoKHR' structures defining the
---     geometry used to build each acceleration structure.
---
--- -   @ppOffsetInfos@ is an array of @infoCount@ pointers to arrays of
---     'AccelerationStructureBuildOffsetInfoKHR' structures. Each
---     @ppOffsetInfos@[i] is an array of @pInfos@[i].@geometryCount@
---     'AccelerationStructureBuildOffsetInfoKHR' structures defining
---     dynamic offsets to the addresses where geometry data is stored, as
---     defined by @pInfos@[i].
---
--- = Description
---
--- The 'cmdBuildAccelerationStructureKHR' command provides the ability to
--- initiate multiple acceleration structures builds, however there is no
--- ordering or synchronization implied between any of the individual
--- acceleration structure builds.
---
--- Note
---
--- This means that an application /cannot/ build a top-level acceleration
--- structure in the same 'cmdBuildAccelerationStructureKHR' call as the
--- associated bottom-level or instance acceleration structures are being
--- built. There also /cannot/ be any memory aliasing between any
--- acceleration structure memories or scratch memories being used by any of
--- the builds.
---
--- == Valid Usage
---
--- -   [[VUID-{refpage}-pOffsetInfos-03402]] Each element of
---     @ppOffsetInfos@[i] /must/ be a valid pointer to an array of
---     @pInfos@[i].@geometryCount@
---     'AccelerationStructureBuildOffsetInfoKHR' structures
---
--- -   [[VUID-{refpage}-pInfos-03403]] Each
---     @pInfos@[i].@srcAccelerationStructure@ /must/ not refer to the same
---     acceleration structure as any @pInfos@[i].@dstAccelerationStructure@
---     that is provided to the same build command unless it is identical
---     for an update
---
--- -   [[VUID-{refpage}-pInfos-03404]] For each @pInfos@[i],
---     @dstAccelerationStructure@ /must/ have been created with compatible
---     'AccelerationStructureCreateInfoKHR' where
---     'AccelerationStructureCreateInfoKHR'::@type@ and
---     'AccelerationStructureCreateInfoKHR'::@flags@ are identical to
---     'AccelerationStructureBuildGeometryInfoKHR'::@type@ and
---     'AccelerationStructureBuildGeometryInfoKHR'::@flags@ respectively,
---     'AccelerationStructureBuildGeometryInfoKHR'::@geometryCount@ for
---     @dstAccelerationStructure@ are greater than or equal to the build
---     size, and each geometry in
---     'AccelerationStructureBuildGeometryInfoKHR'::@ppGeometries@ for
---     @dstAccelerationStructure@ has greater than or equal to the number
---     of vertices, indices, and AABBs,
---     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@ is
---     both 0 or both non-zero, and all other parameters are the same
---
--- -   [[VUID-{refpage}-pInfos-03405]] For each @pInfos@[i], if @update@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', then objects that were
---     previously active for that acceleration structure /must/ not be made
---     inactive as per
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>
---
--- -   [[VUID-{refpage}-pInfos-03406]] For each @pInfos@[i], if @update@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', then objects that were
---     previously inactive for that acceleration structure /must/ not be
---     made active as per
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>
---
--- -   [[VUID-{refpage}-None-03407]] Any acceleration structure instance in
---     any top level build in this command /must/ not reference any bottom
---     level acceleration structure built by this command
---
--- -   [[VUID-{refpage}-pInfos-03408]] There /must/ not be any
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
---     between the scratch memories that are provided in all the
---     @pInfos@[i].@scratchData@ memories for the acceleration structure
---     builds
---
--- -   [[VUID-{refpage}-None-03409]] There /must/ not be any
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
---     between memory bound to any top level, bottom level, or instance
---     acceleration structure accessed by this command
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.FALSE', all
---     addresses between @pInfos@[i].@scratchData@ and
---     @pInfos@[i].@scratchData@ + N - 1 /must/ be in the buffer device
---     address range of the same buffer, where N is given by the @size@
---     member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'getAccelerationStructureMemoryRequirementsKHR' with
---     'AccelerationStructureMemoryRequirementsInfoKHR'::@accelerationStructure@
---     set to @pInfos@[i].@dstAccelerationStructure@ and
---     'AccelerationStructureMemoryRequirementsInfoKHR'::@type@ set to
---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR'
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', all addresses
---     between @pInfos@[i].@scratchData@ and @pInfos@[i].@scratchData@ + N
---     - 1 /must/ be in the buffer device address range of the same buffer,
---     where N is given by the @size@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'getAccelerationStructureMemoryRequirementsKHR' with
---     'AccelerationStructureMemoryRequirementsInfoKHR'::@accelerationStructure@
---     set to @pInfos@[i].@dstAccelerationStructure@ and
---     'AccelerationStructureMemoryRequirementsInfoKHR'::@type@ set to
---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR'
---
--- -   The buffer from which the buffer device address
---     @pInfos@[i].@scratchData@ is queried /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_RAY_TRACING_BIT_KHR'
---     usage flag
---
--- -   All 'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR'
---     referenced by this command /must/ contain valid device addresses
---
--- -   All 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     objects referenced by this command /must/ be bound to device memory
---
--- -   The
---     'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
---     structure /must/ not be included in the @pNext@ chain of any of the
---     provided 'AccelerationStructureBuildGeometryInfoKHR' structures
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pInfos@ /must/ be a valid pointer to an array of @infoCount@ valid
---     'AccelerationStructureBuildGeometryInfoKHR' structures
---
--- -   @ppOffsetInfos@ /must/ be a valid pointer to an array of @infoCount@
---     'AccelerationStructureBuildOffsetInfoKHR' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   @infoCount@ /must/ be greater than @0@
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'AccelerationStructureBuildGeometryInfoKHR',
--- 'AccelerationStructureBuildOffsetInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdBuildAccelerationStructureKHR :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> ("infos" ::: Vector (AccelerationStructureBuildGeometryInfoKHR a)) -> ("offsetInfos" ::: Vector AccelerationStructureBuildOffsetInfoKHR) -> io ()
-cmdBuildAccelerationStructureKHR commandBuffer infos offsetInfos = liftIO . evalContT $ do
-  let vkCmdBuildAccelerationStructureKHR' = mkVkCmdBuildAccelerationStructureKHR (pVkCmdBuildAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer)))
-  let pInfosLength = Data.Vector.length $ (infos)
-  let ppOffsetInfosLength = Data.Vector.length $ (offsetInfos)
-  lift $ unless (ppOffsetInfosLength == pInfosLength) $
-    throwIO $ IOError Nothing InvalidArgument "" "ppOffsetInfos and pInfos must have the same length" Nothing Nothing
-  pPInfos <- ContT $ allocaBytesAligned @(AccelerationStructureBuildGeometryInfoKHR _) ((Data.Vector.length (infos)) * 72) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPInfos `plusPtr` (72 * (i)) :: Ptr (AccelerationStructureBuildGeometryInfoKHR _)) (e) . ($ ())) (infos)
-  pPpOffsetInfos <- ContT $ allocaBytesAligned @(Ptr AccelerationStructureBuildOffsetInfoKHR) ((Data.Vector.length (offsetInfos)) * 8) 8
-  Data.Vector.imapM_ (\i e -> do
-    ppOffsetInfos <- ContT $ withCStruct (e)
-    lift $ poke (pPpOffsetInfos `plusPtr` (8 * (i)) :: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) ppOffsetInfos) (offsetInfos)
-  lift $ vkCmdBuildAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) ((fromIntegral pInfosLength :: Word32)) (pPInfos) (pPpOffsetInfos)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBuildAccelerationStructureIndirectKHR
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Buffer -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Buffer -> DeviceSize -> Word32 -> IO ()
-
--- | vkCmdBuildAccelerationStructureIndirectKHR - Build an acceleration
--- structure with some parameters provided on the device
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pInfo@ is a pointer to a
---     'AccelerationStructureBuildGeometryInfoKHR' structure defining the
---     geometry used to build the acceleration structure.
---
--- -   @indirectBuffer@ is the 'Graphics.Vulkan.Core10.Handles.Buffer'
---     containing @pInfo->geometryCount@
---     'AccelerationStructureBuildOffsetInfoKHR' structures defining
---     dynamic offsets to the addresses where geometry data is stored, as
---     defined by @pInfo@.
---
--- -   @indirectOffset@ is the byte offset into @indirectBuffer@ where
---     offset parameters begin.
---
--- -   @stride@ is the byte stride between successive sets of offset
---     parameters.
---
--- == Valid Usage
---
--- -   All 'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR'
---     referenced by this command /must/ contain valid device addresses
---
--- -   All 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     objects referenced by this command /must/ be bound to device memory
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-indirectasbuild ::rayTracingIndirectAccelerationStructureBuild>
---     feature /must/ be enabled
---
--- -   The
---     'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
---     structure /must/ not be included in the @pNext@ chain of any of the
---     provided 'AccelerationStructureBuildGeometryInfoKHR' structures
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'AccelerationStructureBuildGeometryInfoKHR' structure
---
--- -   @indirectBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Both of @commandBuffer@, and @indirectBuffer@ /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'AccelerationStructureBuildGeometryInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdBuildAccelerationStructureIndirectKHR :: forall a io . (PokeChain a, MonadIO io) => CommandBuffer -> AccelerationStructureBuildGeometryInfoKHR a -> ("indirectBuffer" ::: Buffer) -> ("indirectOffset" ::: DeviceSize) -> ("indirectStride" ::: Word32) -> io ()
-cmdBuildAccelerationStructureIndirectKHR commandBuffer info indirectBuffer indirectOffset indirectStride = liftIO . evalContT $ do
-  let vkCmdBuildAccelerationStructureIndirectKHR' = mkVkCmdBuildAccelerationStructureIndirectKHR (pVkCmdBuildAccelerationStructureIndirectKHR (deviceCmds (commandBuffer :: CommandBuffer)))
-  pInfo <- ContT $ withCStruct (info)
-  lift $ vkCmdBuildAccelerationStructureIndirectKHR' (commandBufferHandle (commandBuffer)) pInfo (indirectBuffer) (indirectOffset) (indirectStride)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkBuildAccelerationStructureKHR
-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO Result
-
--- | vkBuildAccelerationStructureKHR - Build an acceleration structure on the
--- host
---
--- = Parameters
---
--- This command fulfills the same task as
--- 'cmdBuildAccelerationStructureKHR' but executed by the host.
---
--- = Description
---
--- -   @device@ is the 'Graphics.Vulkan.Core10.Handles.Device' for which
---     the acceleration structures are being built.
---
--- -   @infoCount@ is the number of acceleration structures to build. It
---     specifies the number of the @pInfos@ structures and @ppOffsetInfos@
---     pointers that /must/ be provided.
---
--- -   @pInfos@ is a pointer to an array of @infoCount@
---     'AccelerationStructureBuildGeometryInfoKHR' structures defining the
---     geometry used to build each acceleration structure.
---
--- -   @ppOffsetInfos@ is an array of @infoCount@ pointers to arrays of
---     'AccelerationStructureBuildOffsetInfoKHR' structures. Each
---     @ppOffsetInfos@[i] is an array of @pInfos@[i].@geometryCount@
---     'AccelerationStructureBuildOffsetInfoKHR' structures defining
---     dynamic offsets to the addresses where geometry data is stored, as
---     defined by @pInfos@[i].
---
--- The 'buildAccelerationStructureKHR' command provides the ability to
--- initiate multiple acceleration structures builds, however there is no
--- ordering or synchronization implied between any of the individual
--- acceleration structure builds.
---
--- Note
---
--- This means that an application /cannot/ build a top-level acceleration
--- structure in the same 'buildAccelerationStructureKHR' call as the
--- associated bottom-level or instance acceleration structures are being
--- built. There also /cannot/ be any memory aliasing between any
--- acceleration structure memories or scratch memories being used by any of
--- the builds.
---
--- If the
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
--- structure is included in the @pNext@ chain of any
--- 'AccelerationStructureBuildGeometryInfoKHR' structure, the operation of
--- this command is /deferred/, as defined in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>
--- chapter.
---
--- == Valid Usage
---
--- -   [[VUID-{refpage}-pOffsetInfos-03402]] Each element of
---     @ppOffsetInfos@[i] /must/ be a valid pointer to an array of
---     @pInfos@[i].@geometryCount@
---     'AccelerationStructureBuildOffsetInfoKHR' structures
---
--- -   [[VUID-{refpage}-pInfos-03403]] Each
---     @pInfos@[i].@srcAccelerationStructure@ /must/ not refer to the same
---     acceleration structure as any @pInfos@[i].@dstAccelerationStructure@
---     that is provided to the same build command unless it is identical
---     for an update
---
--- -   [[VUID-{refpage}-pInfos-03404]] For each @pInfos@[i],
---     @dstAccelerationStructure@ /must/ have been created with compatible
---     'AccelerationStructureCreateInfoKHR' where
---     'AccelerationStructureCreateInfoKHR'::@type@ and
---     'AccelerationStructureCreateInfoKHR'::@flags@ are identical to
---     'AccelerationStructureBuildGeometryInfoKHR'::@type@ and
---     'AccelerationStructureBuildGeometryInfoKHR'::@flags@ respectively,
---     'AccelerationStructureBuildGeometryInfoKHR'::@geometryCount@ for
---     @dstAccelerationStructure@ are greater than or equal to the build
---     size, and each geometry in
---     'AccelerationStructureBuildGeometryInfoKHR'::@ppGeometries@ for
---     @dstAccelerationStructure@ has greater than or equal to the number
---     of vertices, indices, and AABBs,
---     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@ is
---     both 0 or both non-zero, and all other parameters are the same
---
--- -   [[VUID-{refpage}-pInfos-03405]] For each @pInfos@[i], if @update@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', then objects that were
---     previously active for that acceleration structure /must/ not be made
---     inactive as per
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>
---
--- -   [[VUID-{refpage}-pInfos-03406]] For each @pInfos@[i], if @update@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', then objects that were
---     previously inactive for that acceleration structure /must/ not be
---     made active as per
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>
---
--- -   [[VUID-{refpage}-None-03407]] Any acceleration structure instance in
---     any top level build in this command /must/ not reference any bottom
---     level acceleration structure built by this command
---
--- -   [[VUID-{refpage}-pInfos-03408]] There /must/ not be any
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
---     between the scratch memories that are provided in all the
---     @pInfos@[i].@scratchData@ memories for the acceleration structure
---     builds
---
--- -   [[VUID-{refpage}-None-03409]] There /must/ not be any
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
---     between memory bound to any top level, bottom level, or instance
---     acceleration structure accessed by this command
---
--- -   All 'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR'
---     referenced by this command /must/ contain valid host addresses
---
--- -   All 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     objects referenced by this command /must/ be bound to host-visible
---     memory
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pInfos@ /must/ be a valid pointer to an array of @infoCount@ valid
---     'AccelerationStructureBuildGeometryInfoKHR' structures
---
--- -   @ppOffsetInfos@ /must/ be a valid pointer to an array of @infoCount@
---     'AccelerationStructureBuildOffsetInfoKHR' structures
---
--- -   @infoCount@ /must/ be greater than @0@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'AccelerationStructureBuildGeometryInfoKHR',
--- 'AccelerationStructureBuildOffsetInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-buildAccelerationStructureKHR :: forall a io . (PokeChain a, MonadIO io) => Device -> ("infos" ::: Vector (AccelerationStructureBuildGeometryInfoKHR a)) -> ("offsetInfos" ::: Vector AccelerationStructureBuildOffsetInfoKHR) -> io (Result)
-buildAccelerationStructureKHR device infos offsetInfos = liftIO . evalContT $ do
-  let vkBuildAccelerationStructureKHR' = mkVkBuildAccelerationStructureKHR (pVkBuildAccelerationStructureKHR (deviceCmds (device :: Device)))
-  let pInfosLength = Data.Vector.length $ (infos)
-  let ppOffsetInfosLength = Data.Vector.length $ (offsetInfos)
-  lift $ unless (ppOffsetInfosLength == pInfosLength) $
-    throwIO $ IOError Nothing InvalidArgument "" "ppOffsetInfos and pInfos must have the same length" Nothing Nothing
-  pPInfos <- ContT $ allocaBytesAligned @(AccelerationStructureBuildGeometryInfoKHR _) ((Data.Vector.length (infos)) * 72) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPInfos `plusPtr` (72 * (i)) :: Ptr (AccelerationStructureBuildGeometryInfoKHR _)) (e) . ($ ())) (infos)
-  pPpOffsetInfos <- ContT $ allocaBytesAligned @(Ptr AccelerationStructureBuildOffsetInfoKHR) ((Data.Vector.length (offsetInfos)) * 8) 8
-  Data.Vector.imapM_ (\i e -> do
-    ppOffsetInfos <- ContT $ withCStruct (e)
-    lift $ poke (pPpOffsetInfos `plusPtr` (8 * (i)) :: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) ppOffsetInfos) (offsetInfos)
-  r <- lift $ vkBuildAccelerationStructureKHR' (deviceHandle (device)) ((fromIntegral pInfosLength :: Word32)) (pPInfos) (pPpOffsetInfos)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetAccelerationStructureDeviceAddressKHR
-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureDeviceAddressInfoKHR -> IO DeviceAddress) -> Ptr Device_T -> Ptr AccelerationStructureDeviceAddressInfoKHR -> IO DeviceAddress
-
--- | vkGetAccelerationStructureDeviceAddressKHR - Query an address of a
--- acceleration structure
---
--- = Parameters
---
--- -   @device@ is the logical device that the accelerationStructure was
---     created on.
---
--- -   @pInfo@ is a pointer to a
---     'AccelerationStructureDeviceAddressInfoKHR' structure specifying the
---     acceleration structure to retrieve an address for.
---
--- = Description
---
--- The 64-bit return value is an address of the acceleration structure,
--- which can be used for device and shader operations that involve
--- acceleration structures, such as ray traversal and acceleration
--- structure building.
---
--- If the acceleration structure was created with a non-zero value of
--- 'AccelerationStructureCreateInfoKHR'::@deviceAddress@ the return value
--- will be the same address.
---
--- == Valid Usage
---
--- -   If @device@ was created with multiple physical devices, then the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'AccelerationStructureDeviceAddressInfoKHR' structure
---
--- = See Also
---
--- 'AccelerationStructureDeviceAddressInfoKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-getAccelerationStructureDeviceAddressKHR :: forall io . MonadIO io => Device -> AccelerationStructureDeviceAddressInfoKHR -> io (DeviceAddress)
-getAccelerationStructureDeviceAddressKHR device info = liftIO . evalContT $ do
-  let vkGetAccelerationStructureDeviceAddressKHR' = mkVkGetAccelerationStructureDeviceAddressKHR (pVkGetAccelerationStructureDeviceAddressKHR (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  r <- lift $ vkGetAccelerationStructureDeviceAddressKHR' (deviceHandle (device)) pInfo
-  pure $ (r)
-
-
--- | VkRayTracingShaderGroupCreateInfoKHR - Structure specifying shaders in a
--- shader group
---
--- == Valid Usage
---
--- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then
---     @generalShader@ /must/ be a valid index into
---     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader
---     of
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR',
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MISS_BIT_KHR',
---     or
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CALLABLE_BIT_KHR'
---
--- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then
---     @closestHitShader@, @anyHitShader@, and @intersectionShader@ /must/
---     be 'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'
---
--- -   If @type@ is
---     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' then
---     @intersectionShader@ /must/ be a valid index into
---     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader
---     of
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_INTERSECTION_BIT_KHR'
---
--- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR'
---     then @intersectionShader@ /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'
---
--- -   @closestHitShader@ /must/ be either
---     'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' or a valid
---     index into 'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to
---     a shader of
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CLOSEST_HIT_BIT_KHR'
---
--- -   @anyHitShader@ /must/ be either
---     'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' or a valid
---     index into 'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to
---     a shader of
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ANY_HIT_BIT_KHR'
---
--- -   If
---     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplayMixed@
---     is 'Graphics.Vulkan.Core10.BaseType.FALSE' then
---     @pShaderGroupCaptureReplayHandle@ /must/ not be provided if it has
---     not been provided on a previous call to ray tracing pipeline
---     creation
---
--- -   If
---     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplayMixed@
---     is 'Graphics.Vulkan.Core10.BaseType.FALSE' then the caller /must/
---     guarantee that no ray tracing pipeline creation commands with
---     @pShaderGroupCaptureReplayHandle@ provided execute simultaneously
---     with ray tracing pipeline creation commands without
---     @pShaderGroupCaptureReplayHandle@ provided
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @type@ /must/ be a valid 'RayTracingShaderGroupTypeKHR' value
---
--- = See Also
---
--- 'RayTracingPipelineCreateInfoKHR', 'RayTracingShaderGroupTypeKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data RayTracingShaderGroupCreateInfoKHR = RayTracingShaderGroupCreateInfoKHR
-  { -- | @type@ is the type of hit group specified in this structure.
-    type' :: RayTracingShaderGroupTypeKHR
-  , -- | @generalShader@ is the index of the ray generation, miss, or callable
-    -- shader from 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if
-    -- the shader group has @type@ of
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR', and
-    -- 'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.
-    generalShader :: Word32
-  , -- | @closestHitShader@ is the optional index of the closest hit shader from
-    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader
-    -- group has @type@ of
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and
-    -- 'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.
-    closestHitShader :: Word32
-  , -- | @anyHitShader@ is the optional index of the any-hit shader from
-    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader
-    -- group has @type@ of
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and
-    -- 'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.
-    anyHitShader :: Word32
-  , -- | @intersectionShader@ is the index of the intersection shader from
-    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader
-    -- group has @type@ of
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and
-    -- 'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.
-    intersectionShader :: Word32
-  , -- | @pShaderGroupCaptureReplayHandle@ is an optional pointer to replay
-    -- information for this shader group. Ignored if
-    -- 'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@
-    -- is 'Graphics.Vulkan.Core10.BaseType.FALSE'.
-    shaderGroupCaptureReplayHandle :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show RayTracingShaderGroupCreateInfoKHR
-
-instance ToCStruct RayTracingShaderGroupCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RayTracingShaderGroupCreateInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (type')
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (generalShader)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (closestHitShader)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (anyHitShader)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (intersectionShader)
-    poke ((p `plusPtr` 40 :: Ptr (Ptr ()))) (shaderGroupCaptureReplayHandle)
-    f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct RayTracingShaderGroupCreateInfoKHR where
-  peekCStruct p = do
-    type' <- peek @RayTracingShaderGroupTypeKHR ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR))
-    generalShader <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    closestHitShader <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    anyHitShader <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    intersectionShader <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pShaderGroupCaptureReplayHandle <- peek @(Ptr ()) ((p `plusPtr` 40 :: Ptr (Ptr ())))
-    pure $ RayTracingShaderGroupCreateInfoKHR
-             type' generalShader closestHitShader anyHitShader intersectionShader pShaderGroupCaptureReplayHandle
-
-instance Storable RayTracingShaderGroupCreateInfoKHR where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero RayTracingShaderGroupCreateInfoKHR where
-  zero = RayTracingShaderGroupCreateInfoKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkRayTracingPipelineCreateInfoKHR - Structure specifying parameters of a
--- newly created ray tracing pipeline
---
--- = Description
---
--- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
--- described in more detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
---
--- When
--- 'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
--- is specified, this pipeline defines a /pipeline library/ which /cannot/
--- be bound as a ray tracing pipeline directly. Instead, pipeline libraries
--- define common shaders and shader groups which /can/ be included in
--- future pipeline creation.
---
--- If pipeline libraries are included in @libraries@, shaders defined in
--- those libraries are treated as if they were defined as additional
--- entries in @pStages@, appended in the order they appear in the
--- @pLibraries@ array and in the @pStages@ array when those libraries were
--- defined.
---
--- When referencing shader groups in order to obtain a shader group handle,
--- groups defined in those libraries are treated as if they were defined as
--- additional entries in @pGroups@, appended in the order they appear in
--- the @pLibraries@ array and in the @pGroups@ array when those libraries
--- were defined. The shaders these groups reference are set when the
--- pipeline library is created, referencing those specified in the pipeline
--- library, not in the pipeline that includes it.
---
--- If the
--- 'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
--- structure is included in the @pNext@ chain of
--- 'RayTracingPipelineCreateInfoKHR', the operation of this pipeline
--- creation is /deferred/, as defined in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>
--- chapter.
---
--- == Valid Usage
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is @-1@, @basePipelineHandle@ /must/
---     be a valid handle to a ray tracing
---     'Graphics.Vulkan.Core10.Handles.Pipeline'
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @basePipelineIndex@ /must/ be a valid index into the calling
---     command’s @pCreateInfos@ parameter
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is not @-1@, @basePipelineHandle@
---     /must/ be 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @basePipelineIndex@ /must/ be @-1@
---
--- -   The @stage@ member of at least one element of @pStages@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR'
---
--- -   The shader code for the entry points identified by @pStages@, and
---     the rest of the state identified by this structure /must/ adhere to
---     the pipeline linking rules described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>
---     chapter
---
--- -   @layout@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
---     with all shaders specified in @pStages@
---
--- -   The number of resources in @layout@ accessible to each shader stage
---     that is used by the pipeline /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
---     feature is not enabled, @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
---
--- -   @maxRecursionDepth@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxRecursionDepth@
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR',
---     @pLibraryInterface@ /must/ not be @NULL@
---
--- -   If the @libraryCount@ member of @libraries@ is greater than @0@,
---     @pLibraryInterface@ /must/ not be @NULL@
---
--- -   Each element of the @pLibraries@ member of @libraries@ /must/ have
---     been created with the value of @maxRecursionDepth@ equal to that in
---     this pipeline
---
--- -   Each element of the @pLibraries@ member of @libraries@ /must/ have
---     been created with a @layout@ that is compatible with the @layout@ in
---     this pipeline
---
--- -   Each element of the @pLibraries@ member of @libraries@ /must/ have
---     been created with values of the @maxPayloadSize@,
---     @maxAttributeSize@, and @maxCallableSize@ members of
---     @pLibraryInterface@ equal to those in this pipeline
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',
---     for any element of @pGroups@ with a @type@ of
---     'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or
---     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', the
---     @anyHitShader@ of that element /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'
---
--- -   If @flags@ includes
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',
---     for any element of @pGroups@ with a @type@ of
---     'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or
---     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', the
---     @closestHitShader@ of that element /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPrimitiveCulling rayTracingPrimitiveCulling>
---     feature is not enabled, @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPrimitiveCulling rayTracingPrimitiveCulling>
---     feature is not enabled, @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
---
--- -   If @libraries.libraryCount@ is zero, then @stageCount@ /must/ not be
---     zero
---
--- -   If @libraries.libraryCount@ is zero, then @groupCount@ /must/ not be
---     zero
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
---     values
---
--- -   If @stageCount@ is not @0@, @pStages@ /must/ be a valid pointer to
---     an array of @stageCount@ valid
---     'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'
---     structures
---
--- -   If @groupCount@ is not @0@, @pGroups@ /must/ be a valid pointer to
---     an array of @groupCount@ valid 'RayTracingShaderGroupCreateInfoKHR'
---     structures
---
--- -   @libraries@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
---     structure
---
--- -   If @pLibraryInterface@ is not @NULL@, @pLibraryInterface@ /must/ be
---     a valid pointer to a valid
---     'RayTracingPipelineInterfaceCreateInfoKHR' structure
---
--- -   @layout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   Both of @basePipelineHandle@, and @layout@ that are valid handles of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout',
--- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
--- 'RayTracingPipelineInterfaceCreateInfoKHR',
--- 'RayTracingShaderGroupCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createRayTracingPipelinesKHR'
-data RayTracingPipelineCreateInfoKHR (es :: [Type]) = RayTracingPipelineCreateInfoKHR
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
-    -- specifying how the pipeline will be generated.
-    flags :: PipelineCreateFlags
-  , -- | @pStages@ is a pointer to an array of @stageCount@
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'
-    -- structures describing the set of the shader stages to be included in the
-    -- ray tracing pipeline.
-    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
-  , -- | @pGroups@ is a pointer to an array of @groupCount@
-    -- 'RayTracingShaderGroupCreateInfoKHR' structures describing the set of
-    -- the shader stages to be included in each shader group in the ray tracing
-    -- pipeline.
-    groups :: Vector RayTracingShaderGroupCreateInfoKHR
-  , -- | @maxRecursionDepth@ is the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth maximum recursion depth>
-    -- of shaders executed by this pipeline.
-    maxRecursionDepth :: Word32
-  , -- | @libraries@ is a
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
-    -- structure defining pipeline libraries to include.
-    libraries :: PipelineLibraryCreateInfoKHR
-  , -- | @pLibraryInterface@ is a pointer to a
-    -- 'RayTracingPipelineInterfaceCreateInfoKHR' structure defining additional
-    -- information when using pipeline libraries.
-    libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR
-  , -- | @layout@ is the description of binding locations used by both the
-    -- pipeline and descriptor sets used with the pipeline.
-    layout :: PipelineLayout
-  , -- | @basePipelineHandle@ is a pipeline to derive from.
-    basePipelineHandle :: Pipeline
-  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
-    -- as a pipeline to derive from.
-    basePipelineIndex :: Int32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (RayTracingPipelineCreateInfoKHR es)
-
-instance Extensible RayTracingPipelineCreateInfoKHR where
-  extensibleType = STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR
-  setNext x next = x{next = next}
-  getNext RayTracingPipelineCreateInfoKHR{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RayTracingPipelineCreateInfoKHR e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f
-    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (RayTracingPipelineCreateInfoKHR es) where
-  withCStruct x f = allocaBytesAligned 120 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RayTracingPipelineCreateInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))
-    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (groups)) :: Word32))
-    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoKHR ((Data.Vector.length (groups)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (e) . ($ ())) (groups)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (pPGroups')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (maxRecursionDepth)
-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR)) (libraries) . ($ ())
-    pLibraryInterface'' <- case (libraryInterface) of
-      Nothing -> pure nullPtr
-      Just j -> ContT $ withCStruct (j)
-    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR))) pLibraryInterface''
-    lift $ poke ((p `plusPtr` 96 :: Ptr PipelineLayout)) (layout)
-    lift $ poke ((p `plusPtr` 104 :: Ptr Pipeline)) (basePipelineHandle)
-    lift $ poke ((p `plusPtr` 112 :: Ptr Int32)) (basePipelineIndex)
-    lift $ f
-  cStructSize = 120
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (mempty)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
-    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoKHR ((Data.Vector.length (mempty)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (pPGroups')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 96 :: Ptr PipelineLayout)) (zero)
-    lift $ poke ((p `plusPtr` 112 :: Ptr Int32)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (RayTracingPipelineCreateInfoKHR es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
-    stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo a))))
-    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
-    groupCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pGroups <- peek @(Ptr RayTracingShaderGroupCreateInfoKHR) ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR)))
-    pGroups' <- generateM (fromIntegral groupCount) (\i -> peekCStruct @RayTracingShaderGroupCreateInfoKHR ((pGroups `advancePtrBytes` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR)))
-    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    libraries <- peekCStruct @PipelineLibraryCreateInfoKHR ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR))
-    pLibraryInterface <- peek @(Ptr RayTracingPipelineInterfaceCreateInfoKHR) ((p `plusPtr` 88 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR)))
-    pLibraryInterface' <- maybePeek (\j -> peekCStruct @RayTracingPipelineInterfaceCreateInfoKHR (j)) pLibraryInterface
-    layout <- peek @PipelineLayout ((p `plusPtr` 96 :: Ptr PipelineLayout))
-    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 104 :: Ptr Pipeline))
-    basePipelineIndex <- peek @Int32 ((p `plusPtr` 112 :: Ptr Int32))
-    pure $ RayTracingPipelineCreateInfoKHR
-             next flags pStages' pGroups' maxRecursionDepth libraries pLibraryInterface' layout basePipelineHandle basePipelineIndex
-
-instance es ~ '[] => Zero (RayTracingPipelineCreateInfoKHR es) where
-  zero = RayTracingPipelineCreateInfoKHR
-           ()
-           zero
-           mempty
-           mempty
-           zero
-           zero
-           Nothing
-           zero
-           zero
-           zero
-
-
--- | VkBindAccelerationStructureMemoryInfoKHR - Structure specifying
--- acceleration structure memory binding
---
--- == Valid Usage
---
--- -   @accelerationStructure@ /must/ not already be backed by a memory
---     object
---
--- -   @memoryOffset@ /must/ be less than the size of @memory@
---
--- -   @memory@ /must/ have been allocated using one of the memory types
---     allowed in the @memoryTypeBits@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'getAccelerationStructureMemoryRequirementsKHR' with
---     @accelerationStructure@ and @type@ of
---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR'
---
--- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@
---     member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'getAccelerationStructureMemoryRequirementsKHR' with
---     @accelerationStructure@ and @type@ of
---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR'
---
--- -   The @size@ member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'getAccelerationStructureMemoryRequirementsKHR' with
---     @accelerationStructure@ and @type@ of
---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR' /must/
---     be less than or equal to the size of @memory@ minus @memoryOffset@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @accelerationStructure@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   @memory@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' handle
---
--- -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid
---     pointer to an array of @deviceIndexCount@ @uint32_t@ values
---
--- -   Both of @accelerationStructure@, and @memory@ /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'bindAccelerationStructureMemoryKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.bindAccelerationStructureMemoryNV'
-data BindAccelerationStructureMemoryInfoKHR = BindAccelerationStructureMemoryInfoKHR
-  { -- | @accelerationStructure@ is the acceleration structure to be attached to
-    -- memory.
-    accelerationStructure :: AccelerationStructureKHR
-  , -- | @memory@ is a 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
-    -- describing the device memory to attach.
-    memory :: DeviceMemory
-  , -- | @memoryOffset@ is the start offset of the region of memory that is to be
-    -- bound to the acceleration structure. The number of bytes returned in the
-    -- 'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@
-    -- member in @memory@, starting from @memoryOffset@ bytes, will be bound to
-    -- the specified acceleration structure.
-    memoryOffset :: DeviceSize
-  , -- | @pDeviceIndices@ is a pointer to an array of device indices.
-    deviceIndices :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show BindAccelerationStructureMemoryInfoKHR
-
-instance ToCStruct BindAccelerationStructureMemoryInfoKHR where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindAccelerationStructureMemoryInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (accelerationStructure)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (memory)
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (memoryOffset)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceIndices)) :: Word32))
-    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (deviceIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (deviceIndices)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPDeviceIndices')
-    lift $ f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
-    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPDeviceIndices')
-    lift $ f
-
-instance FromCStruct BindAccelerationStructureMemoryInfoKHR where
-  peekCStruct p = do
-    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))
-    memory <- peek @DeviceMemory ((p `plusPtr` 24 :: Ptr DeviceMemory))
-    memoryOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
-    deviceIndexCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    pDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 48 :: Ptr (Ptr Word32)))
-    pDeviceIndices' <- generateM (fromIntegral deviceIndexCount) (\i -> peek @Word32 ((pDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ BindAccelerationStructureMemoryInfoKHR
-             accelerationStructure memory memoryOffset pDeviceIndices'
-
-instance Zero BindAccelerationStructureMemoryInfoKHR where
-  zero = BindAccelerationStructureMemoryInfoKHR
-           zero
-           zero
-           zero
-           mempty
-
-
--- | VkWriteDescriptorSetAccelerationStructureKHR - Structure specifying
--- acceleration structure descriptor info
---
--- == Valid Usage
---
--- -   @accelerationStructureCount@ /must/ be equal to @descriptorCount@ in
---     the extended structure
---
--- -   Each acceleration structure in @pAccelerationStructures@ /must/ have
---     been created with 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR'
---
--- -   @pAccelerationStructures@ /must/ be a valid pointer to an array of
---     @accelerationStructureCount@ valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
---     handles
---
--- -   @accelerationStructureCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data WriteDescriptorSetAccelerationStructureKHR = WriteDescriptorSetAccelerationStructureKHR
-  { -- | @pAccelerationStructures@ are the acceleration structures to update.
-    accelerationStructures :: Vector AccelerationStructureKHR }
-  deriving (Typeable)
-deriving instance Show WriteDescriptorSetAccelerationStructureKHR
-
-instance ToCStruct WriteDescriptorSetAccelerationStructureKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p WriteDescriptorSetAccelerationStructureKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32))
-    pPAccelerationStructures' <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures' `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR))) (pPAccelerationStructures')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPAccelerationStructures' <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures' `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR))) (pPAccelerationStructures')
-    lift $ f
-
-instance FromCStruct WriteDescriptorSetAccelerationStructureKHR where
-  peekCStruct p = do
-    accelerationStructureCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pAccelerationStructures <- peek @(Ptr AccelerationStructureKHR) ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR)))
-    pAccelerationStructures' <- generateM (fromIntegral accelerationStructureCount) (\i -> peek @AccelerationStructureKHR ((pAccelerationStructures `advancePtrBytes` (8 * (i)) :: Ptr AccelerationStructureKHR)))
-    pure $ WriteDescriptorSetAccelerationStructureKHR
-             pAccelerationStructures'
-
-instance Zero WriteDescriptorSetAccelerationStructureKHR where
-  zero = WriteDescriptorSetAccelerationStructureKHR
-           mempty
-
-
--- | VkAccelerationStructureMemoryRequirementsInfoKHR - Structure specifying
--- acceleration to query for memory requirements
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'AccelerationStructureBuildTypeKHR',
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'AccelerationStructureMemoryRequirementsTypeKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getAccelerationStructureMemoryRequirementsKHR'
-data AccelerationStructureMemoryRequirementsInfoKHR = AccelerationStructureMemoryRequirementsInfoKHR
-  { -- | @type@ /must/ be a valid
-    -- 'AccelerationStructureMemoryRequirementsTypeKHR' value
-    type' :: AccelerationStructureMemoryRequirementsTypeKHR
-  , -- | @buildType@ /must/ be a valid 'AccelerationStructureBuildTypeKHR' value
-    buildType :: AccelerationStructureBuildTypeKHR
-  , -- | @accelerationStructure@ /must/ be a valid
-    -- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
-    accelerationStructure :: AccelerationStructureKHR
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureMemoryRequirementsInfoKHR
-
-instance ToCStruct AccelerationStructureMemoryRequirementsInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureMemoryRequirementsInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR)) (type')
-    poke ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR)) (buildType)
-    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (accelerationStructure)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (zero)
-    f
-
-instance FromCStruct AccelerationStructureMemoryRequirementsInfoKHR where
-  peekCStruct p = do
-    type' <- peek @AccelerationStructureMemoryRequirementsTypeKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR))
-    buildType <- peek @AccelerationStructureBuildTypeKHR ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR))
-    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR))
-    pure $ AccelerationStructureMemoryRequirementsInfoKHR
-             type' buildType accelerationStructure
-
-instance Storable AccelerationStructureMemoryRequirementsInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AccelerationStructureMemoryRequirementsInfoKHR where
-  zero = AccelerationStructureMemoryRequirementsInfoKHR
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceRayTracingFeaturesKHR - Structure describing the ray
--- tracing features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceRayTracingFeaturesKHR' structure
--- describe the following features:
---
--- = Description
---
--- -   @rayTracing@ indicates whether the implementation supports ray
---     tracing functionality. See
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing Ray Tracing>.
---
--- -   @rayTracingShaderGroupHandleCaptureReplay@ indicates whether the
---     implementation supports saving and reusing shader group handles,
---     e.g. for trace capture and replay.
---
--- -   @rayTracingShaderGroupHandleCaptureReplayMixed@ indicates whether
---     the implementation supports reuse of shader group handles being
---     arbitrarily mixed with creation of non-reused shader group handles.
---     If this is 'Graphics.Vulkan.Core10.BaseType.FALSE', all reused
---     shader group handles /must/ be specified before any non-reused
---     handles /may/ be created.
---
--- -   @rayTracingAccelerationStructureCaptureReplay@ indicates whether the
---     implementation supports saving and reusing acceleration structure
---     device addresses, e.g. for trace capture and replay.
---
--- -   @rayTracingIndirectTraceRays@ indicates whether the implementation
---     supports indirect trace ray commands, e.g.
---     'cmdTraceRaysIndirectKHR'.
---
--- -   @rayTracingIndirectAccelerationStructureBuild@ indicates whether the
---     implementation supports indirect acceleration structure build
---     commands, e.g. 'cmdBuildAccelerationStructureIndirectKHR'.
---
--- -   @rayTracingHostAccelerationStructureCommands@ indicates whether the
---     implementation supports host side acceleration structure commands,
---     e.g. 'buildAccelerationStructureKHR',
---     'copyAccelerationStructureKHR',
---     'copyAccelerationStructureToMemoryKHR',
---     'copyMemoryToAccelerationStructureKHR',
---     'writeAccelerationStructuresPropertiesKHR'.
---
--- -   @rayQuery@ indicates whether the implementation supports ray query
---     (@OpRayQueryProceedKHR@) functionality.
---
--- -   @rayTracingPrimitiveCulling@ indicates whether the implementation
---     supports
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-traversal-culling-primitive primitive culling during ray traversal>.
---
--- If the 'PhysicalDeviceRayTracingFeaturesKHR' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceRayTracingFeaturesKHR' /can/ also be used in the @pNext@
--- chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the
--- features.
---
--- == Valid Usage
---
--- -   If @rayTracingShaderGroupHandleCaptureReplayMixed@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE',
---     @rayTracingShaderGroupHandleCaptureReplay@ /must/ also be
---     'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceRayTracingFeaturesKHR = PhysicalDeviceRayTracingFeaturesKHR
-  { -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracing"
-    rayTracing :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingShaderGroupHandleCaptureReplay"
-    rayTracingShaderGroupHandleCaptureReplay :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingShaderGroupHandleCaptureReplayMixed"
-    rayTracingShaderGroupHandleCaptureReplayMixed :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingAccelerationStructureCaptureReplay"
-    rayTracingAccelerationStructureCaptureReplay :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingIndirectTraceRays"
-    rayTracingIndirectTraceRays :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingIndirectAccelerationStructureBuild"
-    rayTracingIndirectAccelerationStructureBuild :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingHostAccelerationStructureCommands"
-    rayTracingHostAccelerationStructureCommands :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayQuery"
-    rayQuery :: Bool
-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingPrimitiveCulling"
-    rayTracingPrimitiveCulling :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceRayTracingFeaturesKHR
-
-instance ToCStruct PhysicalDeviceRayTracingFeaturesKHR where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceRayTracingFeaturesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (rayTracing))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (rayTracingShaderGroupHandleCaptureReplay))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (rayTracingShaderGroupHandleCaptureReplayMixed))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (rayTracingAccelerationStructureCaptureReplay))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (rayTracingIndirectTraceRays))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (rayTracingIndirectAccelerationStructureBuild))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (rayTracingHostAccelerationStructureCommands))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (rayQuery))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (rayTracingPrimitiveCulling))
-    f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceRayTracingFeaturesKHR where
-  peekCStruct p = do
-    rayTracing <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    rayTracingShaderGroupHandleCaptureReplay <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    rayTracingShaderGroupHandleCaptureReplayMixed <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    rayTracingAccelerationStructureCaptureReplay <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
-    rayTracingIndirectTraceRays <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    rayTracingIndirectAccelerationStructureBuild <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    rayTracingHostAccelerationStructureCommands <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
-    rayQuery <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
-    rayTracingPrimitiveCulling <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
-    pure $ PhysicalDeviceRayTracingFeaturesKHR
-             (bool32ToBool rayTracing) (bool32ToBool rayTracingShaderGroupHandleCaptureReplay) (bool32ToBool rayTracingShaderGroupHandleCaptureReplayMixed) (bool32ToBool rayTracingAccelerationStructureCaptureReplay) (bool32ToBool rayTracingIndirectTraceRays) (bool32ToBool rayTracingIndirectAccelerationStructureBuild) (bool32ToBool rayTracingHostAccelerationStructureCommands) (bool32ToBool rayQuery) (bool32ToBool rayTracingPrimitiveCulling)
-
-instance Storable PhysicalDeviceRayTracingFeaturesKHR where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceRayTracingFeaturesKHR where
-  zero = PhysicalDeviceRayTracingFeaturesKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPhysicalDeviceRayTracingPropertiesKHR - Properties of the physical
--- device for ray tracing
---
--- = Description
---
--- If the 'PhysicalDeviceRayTracingPropertiesKHR' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- Limits specified by this structure /must/ match those specified with the
--- same name in
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceRayTracingPropertiesKHR = PhysicalDeviceRayTracingPropertiesKHR
-  { -- | @shaderGroupHandleSize@ size in bytes of the shader header.
-    shaderGroupHandleSize :: Word32
-  , -- | @maxRecursionDepth@ is the maximum number of levels of recursion allowed
-    -- in a trace command.
-    maxRecursionDepth :: Word32
-  , -- | @maxShaderGroupStride@ is the maximum stride in bytes allowed between
-    -- shader groups in the SBT.
-    maxShaderGroupStride :: Word32
-  , -- | @shaderGroupBaseAlignment@ is the required alignment in bytes for the
-    -- base of the SBTs.
-    shaderGroupBaseAlignment :: Word32
-  , -- | @maxGeometryCount@ is the maximum number of geometries in the bottom
-    -- level acceleration structure.
-    maxGeometryCount :: Word64
-  , -- | @maxInstanceCount@ is the maximum number of instances in the top level
-    -- acceleration structure.
-    maxInstanceCount :: Word64
-  , -- | @maxPrimitiveCount@ is the maximum number of triangles or AABBs in all
-    -- geometries in the bottom level acceleration structure.
-    maxPrimitiveCount :: Word64
-  , -- | @maxDescriptorSetAccelerationStructures@ is the maximum number of
-    -- acceleration structure descriptors that are allowed in a descriptor set.
-    maxDescriptorSetAccelerationStructures :: Word32
-  , -- | @shaderGroupHandleCaptureReplaySize@ is the number of bytes for the
-    -- information required to do capture and replay for shader group handles.
-    shaderGroupHandleCaptureReplaySize :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceRayTracingPropertiesKHR
-
-instance ToCStruct PhysicalDeviceRayTracingPropertiesKHR where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceRayTracingPropertiesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (shaderGroupHandleSize)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxRecursionDepth)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxShaderGroupStride)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (shaderGroupBaseAlignment)
-    poke ((p `plusPtr` 32 :: Ptr Word64)) (maxGeometryCount)
-    poke ((p `plusPtr` 40 :: Ptr Word64)) (maxInstanceCount)
-    poke ((p `plusPtr` 48 :: Ptr Word64)) (maxPrimitiveCount)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (maxDescriptorSetAccelerationStructures)
-    poke ((p `plusPtr` 60 :: Ptr Word32)) (shaderGroupHandleCaptureReplaySize)
-    f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 60 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceRayTracingPropertiesKHR where
-  peekCStruct p = do
-    shaderGroupHandleSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    maxShaderGroupStride <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    shaderGroupBaseAlignment <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    maxGeometryCount <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))
-    maxInstanceCount <- peek @Word64 ((p `plusPtr` 40 :: Ptr Word64))
-    maxPrimitiveCount <- peek @Word64 ((p `plusPtr` 48 :: Ptr Word64))
-    maxDescriptorSetAccelerationStructures <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    shaderGroupHandleCaptureReplaySize <- peek @Word32 ((p `plusPtr` 60 :: Ptr Word32))
-    pure $ PhysicalDeviceRayTracingPropertiesKHR
-             shaderGroupHandleSize maxRecursionDepth maxShaderGroupStride shaderGroupBaseAlignment maxGeometryCount maxInstanceCount maxPrimitiveCount maxDescriptorSetAccelerationStructures shaderGroupHandleCaptureReplaySize
-
-instance Storable PhysicalDeviceRayTracingPropertiesKHR where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceRayTracingPropertiesKHR where
-  zero = PhysicalDeviceRayTracingPropertiesKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkStridedBufferRegionKHR - Structure specifying a region of a VkBuffer
--- with a stride
---
--- == Valid Usage
---
--- -   If @buffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @size@ plus
---     @offset@ /must/ be less than or equal to the size of @buffer@
---
--- -   If @buffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @stride@ /must/
---     be less than the size of @buffer@
---
--- == Valid Usage (Implicit)
---
--- -   If @buffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize', 'cmdTraceRaysIndirectKHR',
--- 'cmdTraceRaysKHR'
-data StridedBufferRegionKHR = StridedBufferRegionKHR
-  { -- | @buffer@ is the buffer containing this region.
-    buffer :: Buffer
-  , -- | @offset@ is the byte offset in @buffer@ at which the region starts.
-    offset :: DeviceSize
-  , -- | @stride@ is the byte stride between consecutive elements.
-    stride :: DeviceSize
-  , -- | @size@ is the size in bytes of the region starting at @offset@.
-    size :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show StridedBufferRegionKHR
-
-instance ToCStruct StridedBufferRegionKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p StridedBufferRegionKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Buffer)) (buffer)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (offset)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (stride)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (size)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct StridedBufferRegionKHR where
-  peekCStruct p = do
-    buffer <- peek @Buffer ((p `plusPtr` 0 :: Ptr Buffer))
-    offset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
-    stride <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    size <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    pure $ StridedBufferRegionKHR
-             buffer offset stride size
-
-instance Storable StridedBufferRegionKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero StridedBufferRegionKHR where
-  zero = StridedBufferRegionKHR
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkTraceRaysIndirectCommandKHR - Structure specifying the parameters of
--- an indirect trace ray command
---
--- = Description
---
--- The members of 'TraceRaysIndirectCommandKHR' have the same meaning as
--- the similarly named parameters of 'cmdTraceRaysKHR'.
---
--- == Valid Usage
---
--- = See Also
---
--- No cross-references are available
-data TraceRaysIndirectCommandKHR = TraceRaysIndirectCommandKHR
-  { -- | @width@ /must/ be less than or equal to
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
-    width :: Word32
-  , -- | @height@ /must/ be less than or equal to
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
-    height :: Word32
-  , -- | @depth@ /must/ be less than or equal to
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
-    depth :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show TraceRaysIndirectCommandKHR
-
-instance ToCStruct TraceRaysIndirectCommandKHR where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p TraceRaysIndirectCommandKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (width)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (height)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (depth)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct TraceRaysIndirectCommandKHR where
-  peekCStruct p = do
-    width <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    height <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    depth <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pure $ TraceRaysIndirectCommandKHR
-             width height depth
-
-instance Storable TraceRaysIndirectCommandKHR where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero TraceRaysIndirectCommandKHR where
-  zero = TraceRaysIndirectCommandKHR
-           zero
-           zero
-           zero
-
-
--- | VkAccelerationStructureGeometryTrianglesDataKHR - Structure specifying a
--- triangle geometry in a bottom-level acceleration structure
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @vertexFormat@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- -   @vertexData@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
---
--- -   @indexType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' value
---
--- -   If @indexData@ is not @0@, @indexData@ /must/ be a valid
---     'DeviceOrHostAddressConstKHR' union
---
--- -   If @transformData@ is not @0@, @transformData@ /must/ be a valid
---     'DeviceOrHostAddressConstKHR' union
---
--- = See Also
---
--- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data AccelerationStructureGeometryTrianglesDataKHR = AccelerationStructureGeometryTrianglesDataKHR
-  { -- | @vertexFormat@ is the 'Graphics.Vulkan.Core10.Enums.Format.Format' of
-    -- each vertex element.
-    vertexFormat :: Format
-  , -- | @vertexData@ is a device or host address to memory containing vertex
-    -- data for this geometry.
-    vertexData :: DeviceOrHostAddressConstKHR
-  , -- | @vertexStride@ is the stride in bytes between each vertex.
-    vertexStride :: DeviceSize
-  , -- | @indexType@ is the 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' of
-    -- each index element.
-    indexType :: IndexType
-  , -- | @indexData@ is the device or host address to memory containing index
-    -- data for this geometry.
-    indexData :: DeviceOrHostAddressConstKHR
-  , -- | @transformData@ is a device or host address to memory containing an
-    -- optional reference to a 'TransformMatrixKHR' structure defining a
-    -- transformation that should be applied to vertices in this geometry.
-    transformData :: DeviceOrHostAddressConstKHR
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureGeometryTrianglesDataKHR
-
-instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureGeometryTrianglesDataKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (vertexFormat)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (vertexData) . ($ ())
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (vertexStride)
-    lift $ poke ((p `plusPtr` 40 :: Ptr IndexType)) (indexType)
-    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr DeviceOrHostAddressConstKHR)) (indexData) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr DeviceOrHostAddressConstKHR)) (transformData) . ($ ())
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr IndexType)) (zero)
-    lift $ f
-
-instance Zero AccelerationStructureGeometryTrianglesDataKHR where
-  zero = AccelerationStructureGeometryTrianglesDataKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkAccelerationStructureGeometryAabbsDataKHR - Structure specifying
--- axis-aligned bounding box geometry in a bottom-level acceleration
--- structure
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data AccelerationStructureGeometryAabbsDataKHR = AccelerationStructureGeometryAabbsDataKHR
-  { -- | @data@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
-    data' :: DeviceOrHostAddressConstKHR
-  , -- | @stride@ /must/ be a multiple of @8@
-    stride :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureGeometryAabbsDataKHR
-
-instance ToCStruct AccelerationStructureGeometryAabbsDataKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureGeometryAabbsDataKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (data') . ($ ())
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (stride)
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    lift $ f
-
-instance Zero AccelerationStructureGeometryAabbsDataKHR where
-  zero = AccelerationStructureGeometryAabbsDataKHR
-           zero
-           zero
-
-
--- | VkAccelerationStructureGeometryInstancesDataKHR - Structure specifying a
--- geometry consisting of instances of other acceleration structures
---
--- == Valid Usage
---
--- -   @data@ /must/ be aligned to @16@ bytes
---
--- -   If @arrayOfPointers@ is true, each pointer /must/ be aligned to @16@
---     bytes
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @data@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
---
--- = See Also
---
--- 'AccelerationStructureGeometryDataKHR',
--- 'Graphics.Vulkan.Core10.BaseType.Bool32', 'DeviceOrHostAddressConstKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data AccelerationStructureGeometryInstancesDataKHR = AccelerationStructureGeometryInstancesDataKHR
-  { -- | @arrayOfPointers@ specifies whether @data@ is used as an array of
-    -- addresses or just an array.
-    arrayOfPointers :: Bool
-  , -- | @data@ is either the address of an array of device or host addresses
-    -- referencing individual 'AccelerationStructureInstanceKHR' structures if
-    -- @arrayOfPointers@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', or the
-    -- address of an array of 'AccelerationStructureInstanceKHR' structures.
-    data' :: DeviceOrHostAddressConstKHR
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureGeometryInstancesDataKHR
-
-instance ToCStruct AccelerationStructureGeometryInstancesDataKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureGeometryInstancesDataKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (arrayOfPointers))
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (data') . ($ ())
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
-    lift $ f
-
-instance Zero AccelerationStructureGeometryInstancesDataKHR where
-  zero = AccelerationStructureGeometryInstancesDataKHR
-           zero
-           zero
-
-
--- | VkAccelerationStructureGeometryKHR - Structure specifying geometries to
--- be built into an acceleration structure
---
--- == Valid Usage
---
--- -   If @geometryType@ is 'GEOMETRY_TYPE_AABBS_KHR', the @aabbs@ member
---     of @geometry@ /must/ be a valid
---     'AccelerationStructureGeometryAabbsDataKHR' structure
---
--- -   If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', the @triangles@
---     member of @geometry@ /must/ be a valid
---     'AccelerationStructureGeometryTrianglesDataKHR' structure
---
--- -   If @geometryType@ is 'GEOMETRY_TYPE_INSTANCES_KHR', the @instances@
---     member of @geometry@ /must/ be a valid
---     'AccelerationStructureGeometryInstancesDataKHR' structure
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @geometryType@ /must/ be a valid 'GeometryTypeKHR' value
---
--- -   @geometry@ /must/ be a valid 'AccelerationStructureGeometryDataKHR'
---     union
---
--- -   @flags@ /must/ be a valid combination of 'GeometryFlagBitsKHR'
---     values
---
--- = See Also
---
--- 'AccelerationStructureBuildGeometryInfoKHR',
--- 'AccelerationStructureGeometryDataKHR', 'GeometryFlagsKHR',
--- 'GeometryTypeKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data AccelerationStructureGeometryKHR = AccelerationStructureGeometryKHR
-  { -- | @geometryType@ describes which type of geometry this
-    -- 'AccelerationStructureGeometryKHR' refers to.
-    geometryType :: GeometryTypeKHR
-  , -- | @geometry@ is a 'AccelerationStructureGeometryDataKHR' union describing
-    -- the geometry data for the relevant geometry type.
-    geometry :: AccelerationStructureGeometryDataKHR
-  , -- | @flags@ is a bitmask of 'GeometryFlagBitsKHR' values describing
-    -- additional properties of how the geometry should be built.
-    flags :: GeometryFlagsKHR
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureGeometryKHR
-
-instance ToCStruct AccelerationStructureGeometryKHR where
-  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureGeometryKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (geometryType)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureGeometryDataKHR)) (geometry) . ($ ())
-    lift $ poke ((p `plusPtr` 88 :: Ptr GeometryFlagsKHR)) (flags)
-    lift $ f
-  cStructSize = 96
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureGeometryDataKHR)) (zero) . ($ ())
-    lift $ f
-
-instance Zero AccelerationStructureGeometryKHR where
-  zero = AccelerationStructureGeometryKHR
-           zero
-           zero
-           zero
-
-
--- | VkAccelerationStructureBuildGeometryInfoKHR - Structure specifying the
--- geometry data used to build an acceleration structure
---
--- = Description
---
--- Note
---
--- Elements of @ppGeometries@ are accessed as follows, based on
--- @geometryArrayOfPointers@:
---
--- > if (geometryArrayOfPointers) {
--- >     use *(ppGeometries[i]);
--- > } else {
--- >     use (*ppGeometries)[i];
--- > }
---
--- == Valid Usage
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE',
---     @srcAccelerationStructure@ /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE',
---     @srcAccelerationStructure@ /must/ have been built before with
---     'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' set in
---     'AccelerationStructureBuildGeometryInfoKHR'::@flags@
---
--- -   @scratchData@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_RAY_TRACING_BIT_KHR'
---     usage flag
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', the
---     @srcAccelerationStructure@ and @dstAccelerationStructure@ objects
---     /must/ either be the same object or not have any
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @type@ /must/ be a valid 'AccelerationStructureTypeKHR' value
---
--- -   @flags@ /must/ be a valid combination of
---     'BuildAccelerationStructureFlagBitsKHR' values
---
--- -   If @srcAccelerationStructure@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @srcAccelerationStructure@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   @dstAccelerationStructure@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   @scratchData@ /must/ be a valid 'DeviceOrHostAddressKHR' union
---
--- -   Both of @dstAccelerationStructure@, and @srcAccelerationStructure@
---     that are valid handles of non-ignored parameters /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'AccelerationStructureGeometryKHR',
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'AccelerationStructureTypeKHR',
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'BuildAccelerationStructureFlagsKHR', 'DeviceOrHostAddressKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'buildAccelerationStructureKHR',
--- 'cmdBuildAccelerationStructureIndirectKHR',
--- 'cmdBuildAccelerationStructureKHR'
-data AccelerationStructureBuildGeometryInfoKHR (es :: [Type]) = AccelerationStructureBuildGeometryInfoKHR
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @type@ is a 'AccelerationStructureTypeKHR' value specifying the type of
-    -- acceleration structure being built.
-    type' :: AccelerationStructureTypeKHR
-  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsKHR'
-    -- specifying additional parameters of the acceleration structure.
-    flags :: BuildAccelerationStructureFlagsKHR
-  , -- | @update@ specifies whether to update @dstAccelerationStructure@ with the
-    -- data in @srcAccelerationStructure@ or not.
-    update :: Bool
-  , -- | @srcAccelerationStructure@ points to an existing acceleration structure
-    -- that is to be used to update the @dst@ acceleration structure when
-    -- @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE'.
-    srcAccelerationStructure :: AccelerationStructureKHR
-  , -- | @dstAccelerationStructure@ points to the target acceleration structure
-    -- for the build.
-    dstAccelerationStructure :: AccelerationStructureKHR
-  , -- | @ppGeometries@ is either a pointer to an array of pointers to
-    -- 'AccelerationStructureGeometryKHR' structures if
-    -- @geometryArrayOfPointers@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', or
-    -- a pointer to a pointer to an array of 'AccelerationStructureGeometryKHR'
-    -- structures if it is 'Graphics.Vulkan.Core10.BaseType.FALSE'. Each
-    -- element of the array describes the data used to build each acceleration
-    -- structure geometry.
-    geometries :: Vector AccelerationStructureGeometryKHR
-  , -- | @scratchData@ is the device or host address to memory that will be used
-    -- as scratch memory for the build.
-    scratchData :: DeviceOrHostAddressKHR
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (AccelerationStructureBuildGeometryInfoKHR es)
-
-instance Extensible AccelerationStructureBuildGeometryInfoKHR where
-  extensibleType = STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR
-  setNext x next = x{next = next}
-  getNext AccelerationStructureBuildGeometryInfoKHR{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AccelerationStructureBuildGeometryInfoKHR e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (AccelerationStructureBuildGeometryInfoKHR es) where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureBuildGeometryInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeKHR)) (type')
-    lift $ poke ((p `plusPtr` 20 :: Ptr BuildAccelerationStructureFlagsKHR)) (flags)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (update))
-    lift $ poke ((p `plusPtr` 32 :: Ptr AccelerationStructureKHR)) (srcAccelerationStructure)
-    lift $ poke ((p `plusPtr` 40 :: Ptr AccelerationStructureKHR)) (dstAccelerationStructure)
-    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (FALSE)
-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (geometries)) :: Word32))
-    pPpGeometries' <- ContT $ allocaBytesAligned @AccelerationStructureGeometryKHR ((Data.Vector.length (geometries)) * 96) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPpGeometries' `plusPtr` (96 * (i)) :: Ptr AccelerationStructureGeometryKHR) (e) . ($ ())) (geometries)
-    ppGeometries'' <- ContT $ with (pPpGeometries')
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr AccelerationStructureGeometryKHR)))) ppGeometries''
-    ContT $ pokeCStruct ((p `plusPtr` 64 :: Ptr DeviceOrHostAddressKHR)) (scratchData) . ($ ())
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeKHR)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 40 :: Ptr AccelerationStructureKHR)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 64 :: Ptr DeviceOrHostAddressKHR)) (zero) . ($ ())
-    lift $ f
-
-instance es ~ '[] => Zero (AccelerationStructureBuildGeometryInfoKHR es) where
-  zero = AccelerationStructureBuildGeometryInfoKHR
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           mempty
-           zero
-
-
--- | VkAccelerationStructureBuildOffsetInfoKHR - Structure specifying build
--- offsets and counts for acceleration structure builds
---
--- = Description
---
--- The primitive count and primitive offset are interpreted differently
--- depending on the 'GeometryTypeKHR' used:
---
--- -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR',
---     @primitiveCount@ is the number of triangles to be built, where each
---     triangle is treated as 3 vertices.
---
---     -   If the geometry uses indices, @primitiveCount@ × 3 indices are
---         consumed from
---         'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@,
---         starting at an offset of @primitiveOffset@. The value of
---         @firstVertex@ is added to the index values before fetching
---         vertices.
---
---     -   If the geometry does not use indices, @primitiveCount@ × 3
---         vertices are consumed from
---         'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@,
---         starting at an offset of @primitiveOffset@ +
---         'AccelerationStructureGeometryTrianglesDataKHR'::@vertexStride@
---         × @firstVertex@.
---
---     -   A single 'TransformMatrixKHR' structure is consumed from
---         'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@,
---         at an offset of @transformOffset@. This transformation matrix is
---         used by all triangles.
---
--- -   For geometries of type 'GEOMETRY_TYPE_AABBS_KHR', @primitiveCount@
---     is the number of axis-aligned bounding boxes. @primitiveCount@
---     'AabbPositionsKHR' structures are consumed from
---     'AccelerationStructureGeometryAabbsDataKHR'::@data@, starting at an
---     offset of @primitiveOffset@.
---
--- -   For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR',
---     @primitiveCount@ is the number of acceleration structures.
---     @primitiveCount@ 'AccelerationStructureInstanceKHR' structures are
---     consumed from
---     'AccelerationStructureGeometryInstancesDataKHR'::@data@, starting at
---     an offset of @primitiveOffset@.
---
--- == Valid Usage
---
--- -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', if the
---     geometry uses indices, the offset @primitiveOffset@ from
---     'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@ /must/
---     be a multiple of the element size of
---     'AccelerationStructureGeometryTrianglesDataKHR'::@indexType@
---
--- -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', if the
---     geometry doesn’t use indices, the offset @primitiveOffset@ from
---     'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@ /must/
---     be a multiple of the component size of
---     'AccelerationStructureGeometryTrianglesDataKHR'::@vertexType@
---
--- -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', the offset
---     @transformOffset@ from
---     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@
---     /must/ be a multiple of 16
---
--- -   For geometries of type 'GEOMETRY_TYPE_AABBS_KHR', the offset
---     @primitiveOffset@ from
---     'AccelerationStructureGeometryAabbsDataKHR'::@data@ /must/ be a
---     multiple of 8
---
--- -   For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR', the offset
---     @primitiveOffset@ from
---     'AccelerationStructureGeometryInstancesDataKHR'::@data@ /must/ be a
---     multiple of 16 \/\/ TODO - Almost certainly should be more here
---
--- = See Also
---
--- 'buildAccelerationStructureKHR', 'cmdBuildAccelerationStructureKHR'
-data AccelerationStructureBuildOffsetInfoKHR = AccelerationStructureBuildOffsetInfoKHR
-  { -- | @primitiveCount@ defines the number of primitives for a corresponding
-    -- acceleration structure geometry.
-    primitiveCount :: Word32
-  , -- | @primitiveOffset@ defines an offset in bytes into the memory where
-    -- primitive data is defined.
-    primitiveOffset :: Word32
-  , -- | @firstVertex@ is the index of the first vertex to build from for
-    -- triangle geometry.
-    firstVertex :: Word32
-  , -- | @transformOffset@ defines an offset in bytes into the memory where a
-    -- transform matrix is defined.
-    transformOffset :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureBuildOffsetInfoKHR
-
-instance ToCStruct AccelerationStructureBuildOffsetInfoKHR where
-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureBuildOffsetInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (primitiveCount)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (primitiveOffset)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (firstVertex)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (transformOffset)
-    f
-  cStructSize = 16
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct AccelerationStructureBuildOffsetInfoKHR where
-  peekCStruct p = do
-    primitiveCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    primitiveOffset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    firstVertex <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    transformOffset <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    pure $ AccelerationStructureBuildOffsetInfoKHR
-             primitiveCount primitiveOffset firstVertex transformOffset
-
-instance Storable AccelerationStructureBuildOffsetInfoKHR where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AccelerationStructureBuildOffsetInfoKHR where
-  zero = AccelerationStructureBuildOffsetInfoKHR
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkAccelerationStructureCreateGeometryTypeInfoKHR - Structure specifying
--- the shape of geometries that will be built into an acceleration
--- structure
---
--- = Description
---
--- When @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR':
---
--- -   if @indexType@ is
---     'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then
---     this structure describes a set of triangles.
---
--- -   if @indexType@ is not
---     'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then
---     this structure describes a set of indexed triangles.
---
--- == Valid Usage
---
--- -   If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', @vertexFormat@
---     /must/ support the
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
---     in
---     'Graphics.Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
---     as returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'
---
--- -   If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', @indexType@
---     /must/ be
---     'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',
---     'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or
---     'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @geometryType@ /must/ be a valid 'GeometryTypeKHR' value
---
--- -   @indexType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' value
---
--- -   If @vertexFormat@ is not @0@, @vertexFormat@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- = See Also
---
--- 'AccelerationStructureCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format', 'GeometryTypeKHR',
--- 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data AccelerationStructureCreateGeometryTypeInfoKHR = AccelerationStructureCreateGeometryTypeInfoKHR
-  { -- | @geometryType@ is a 'GeometryTypeKHR' that describes the type of an
-    -- acceleration structure geometry.
-    geometryType :: GeometryTypeKHR
-  , -- | @maxPrimitiveCount@ describes the maximum number of primitives that
-    -- /can/ be built into an acceleration structure geometry.
-    maxPrimitiveCount :: Word32
-  , -- | @indexType@ is a 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' that
-    -- describes the index type used to build this geometry when @geometryType@
-    -- is 'GEOMETRY_TYPE_TRIANGLES_KHR'.
-    indexType :: IndexType
-  , -- | @maxVertexCount@ describes the maximum vertex count that /can/ be used
-    -- to build an acceleration structure geometry when @geometryType@ is
-    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.
-    maxVertexCount :: Word32
-  , -- | @vertexFormat@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format' that
-    -- describes the vertex format used to build this geometry when
-    -- @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR'.
-    vertexFormat :: Format
-  , -- | @allowsTransforms@ indicates whether transform data /can/ be used by
-    -- this acceleration structure or not, when @geometryType@ is
-    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.
-    allowsTransforms :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureCreateGeometryTypeInfoKHR
-
-instance ToCStruct AccelerationStructureCreateGeometryTypeInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureCreateGeometryTypeInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (geometryType)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxPrimitiveCount)
-    poke ((p `plusPtr` 24 :: Ptr IndexType)) (indexType)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (maxVertexCount)
-    poke ((p `plusPtr` 32 :: Ptr Format)) (vertexFormat)
-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (allowsTransforms))
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr IndexType)) (zero)
-    f
-
-instance FromCStruct AccelerationStructureCreateGeometryTypeInfoKHR where
-  peekCStruct p = do
-    geometryType <- peek @GeometryTypeKHR ((p `plusPtr` 16 :: Ptr GeometryTypeKHR))
-    maxPrimitiveCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    indexType <- peek @IndexType ((p `plusPtr` 24 :: Ptr IndexType))
-    maxVertexCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    vertexFormat <- peek @Format ((p `plusPtr` 32 :: Ptr Format))
-    allowsTransforms <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
-    pure $ AccelerationStructureCreateGeometryTypeInfoKHR
-             geometryType maxPrimitiveCount indexType maxVertexCount vertexFormat (bool32ToBool allowsTransforms)
-
-instance Storable AccelerationStructureCreateGeometryTypeInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AccelerationStructureCreateGeometryTypeInfoKHR where
-  zero = AccelerationStructureCreateGeometryTypeInfoKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkAccelerationStructureCreateInfoKHR - Structure specifying the
--- parameters of a newly created acceleration structure object
---
--- = Description
---
--- If @deviceAddress@ is zero, no specific address is requested.
---
--- If @deviceAddress@ is not zero, @deviceAddress@ /must/ be an address
--- retrieved from an identically created acceleration structure on the same
--- implementation. The acceleration structure /must/ also be bound to an
--- identically created 'Graphics.Vulkan.Core10.Handles.DeviceMemory'
--- object.
---
--- Apps /should/ avoid creating acceleration structures with app-provided
--- addresses and implementation-provided addresses in the same process, to
--- reduce the likelihood of
--- 'Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
--- errors.
---
--- == Valid Usage
---
--- -   If @compactedSize@ is not @0@ then @maxGeometryCount@ /must/ be @0@
---
--- -   If @compactedSize@ is @0@ then @maxGeometryCount@ /must/ not be @0@
---
--- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' then
---     @maxGeometryCount@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxGeometryCount@
---
--- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' then the
---     @maxPrimitiveCount@ member of each element of the @pGeometryInfos@
---     array /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxInstanceCount@
---
--- -   The total number of triangles in all geometries /must/ be less than
---     or equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxPrimitiveCount@
---
--- -   The total number of AABBs in all geometries /must/ be less than or
---     equal to
---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxPrimitiveCount@
---
--- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' and
---     @compactedSize@ is @0@, @maxGeometryCount@ /must/ be @1@
---
--- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' and
---     @compactedSize@ is @0@, the @geometryType@ member of elements of
---     @pGeometryInfos@ /must/ be 'GEOMETRY_TYPE_INSTANCES_KHR'
---
--- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' and
---     @compactedSize@ is @0@, the @geometryType@ member of elements of
---     @pGeometryInfos@ /must/ not be 'GEOMETRY_TYPE_INSTANCES_KHR'
---
--- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' then the
---     @geometryType@ member of each geometry in @pGeometryInfos@ /must/ be
---     the same
---
--- -   If @flags@ has the
---     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR' bit set,
---     then it /must/ not have the
---     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR' bit set
---
--- -   If @deviceAddress@ is not @0@,
---     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingAccelerationStructureCaptureReplay@
---     /must/ be 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @type@ /must/ be a valid 'AccelerationStructureTypeKHR' value
---
--- -   @flags@ /must/ be a valid combination of
---     'BuildAccelerationStructureFlagBitsKHR' values
---
--- -   If @maxGeometryCount@ is not @0@, @pGeometryInfos@ /must/ be a valid
---     pointer to an array of @maxGeometryCount@ valid
---     'AccelerationStructureCreateGeometryTypeInfoKHR' structures
---
--- = See Also
---
--- 'AccelerationStructureCreateGeometryTypeInfoKHR',
--- 'AccelerationStructureTypeKHR', 'BuildAccelerationStructureFlagsKHR',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceAddress',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createAccelerationStructureKHR'
-data AccelerationStructureCreateInfoKHR = AccelerationStructureCreateInfoKHR
-  { -- | @compactedSize@ is the size from the result of
-    -- 'cmdWriteAccelerationStructuresPropertiesKHR' if this acceleration
-    -- structure is going to be the target of a compacting copy.
-    compactedSize :: DeviceSize
-  , -- | @type@ is a 'AccelerationStructureTypeKHR' value specifying the type of
-    -- acceleration structure that will be created.
-    type' :: AccelerationStructureTypeKHR
-  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsKHR'
-    -- specifying additional parameters of the acceleration structure.
-    flags :: BuildAccelerationStructureFlagsKHR
-  , -- | @pGeometryInfos@ is an array of @maxGeometryCount@
-    -- 'AccelerationStructureCreateGeometryTypeInfoKHR' structures, which
-    -- describe the maximum size and format of the data that will be built into
-    -- the acceleration structure.
-    geometryInfos :: Vector AccelerationStructureCreateGeometryTypeInfoKHR
-  , -- | @deviceAddress@ is the device address requested for the acceleration
-    -- structure if the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-ascapturereplay rayTracingAccelerationStructureCaptureReplay>
-    -- feature is being used.
-    deviceAddress :: DeviceAddress
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureCreateInfoKHR
-
-instance ToCStruct AccelerationStructureCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureCreateInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (compactedSize)
-    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR)) (type')
-    lift $ poke ((p `plusPtr` 28 :: Ptr BuildAccelerationStructureFlagsKHR)) (flags)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (geometryInfos)) :: Word32))
-    pPGeometryInfos' <- ContT $ allocaBytesAligned @AccelerationStructureCreateGeometryTypeInfoKHR ((Data.Vector.length (geometryInfos)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometryInfos' `plusPtr` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR) (e) . ($ ())) (geometryInfos)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR))) (pPGeometryInfos')
-    lift $ poke ((p `plusPtr` 48 :: Ptr DeviceAddress)) (deviceAddress)
-    lift $ f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR)) (zero)
-    pPGeometryInfos' <- ContT $ allocaBytesAligned @AccelerationStructureCreateGeometryTypeInfoKHR ((Data.Vector.length (mempty)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometryInfos' `plusPtr` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR))) (pPGeometryInfos')
-    lift $ f
-
-instance FromCStruct AccelerationStructureCreateInfoKHR where
-  peekCStruct p = do
-    compactedSize <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    type' <- peek @AccelerationStructureTypeKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR))
-    flags <- peek @BuildAccelerationStructureFlagsKHR ((p `plusPtr` 28 :: Ptr BuildAccelerationStructureFlagsKHR))
-    maxGeometryCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pGeometryInfos <- peek @(Ptr AccelerationStructureCreateGeometryTypeInfoKHR) ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR)))
-    pGeometryInfos' <- generateM (fromIntegral maxGeometryCount) (\i -> peekCStruct @AccelerationStructureCreateGeometryTypeInfoKHR ((pGeometryInfos `advancePtrBytes` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR)))
-    deviceAddress <- peek @DeviceAddress ((p `plusPtr` 48 :: Ptr DeviceAddress))
-    pure $ AccelerationStructureCreateInfoKHR
-             compactedSize type' flags pGeometryInfos' deviceAddress
-
-instance Zero AccelerationStructureCreateInfoKHR where
-  zero = AccelerationStructureCreateInfoKHR
-           zero
-           zero
-           zero
-           mempty
-           zero
-
-
--- | VkAabbPositionsKHR - Structure specifying two opposing corners of an
--- axis-aligned bounding box
---
--- == Valid Usage
---
--- = See Also
---
--- No cross-references are available
-data AabbPositionsKHR = AabbPositionsKHR
-  { -- | @minX@ /must/ be less than or equal to @maxX@
-    minX :: Float
-  , -- | @minY@ /must/ be less than or equal to @maxY@
-    minY :: Float
-  , -- | @minZ@ /must/ be less than or equal to @maxZ@
-    minZ :: Float
-  , -- | @maxX@ is the x position of the other opposing corner of a bounding box.
-    maxX :: Float
-  , -- | @maxY@ is the y position of the other opposing corner of a bounding box.
-    maxY :: Float
-  , -- | @maxZ@ is the z position of the other opposing corner of a bounding box.
-    maxZ :: Float
-  }
-  deriving (Typeable)
-deriving instance Show AabbPositionsKHR
-
-instance ToCStruct AabbPositionsKHR where
-  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AabbPositionsKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (minX))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (minY))
-    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (minZ))
-    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (maxX))
-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (maxY))
-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxZ))
-    f
-  cStructSize = 24
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))
-    f
-
-instance FromCStruct AabbPositionsKHR where
-  peekCStruct p = do
-    minX <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
-    minY <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
-    minZ <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))
-    maxX <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))
-    maxY <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
-    maxZ <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))
-    pure $ AabbPositionsKHR
-             ((\(CFloat a) -> a) minX) ((\(CFloat a) -> a) minY) ((\(CFloat a) -> a) minZ) ((\(CFloat a) -> a) maxX) ((\(CFloat a) -> a) maxY) ((\(CFloat a) -> a) maxZ)
-
-instance Storable AabbPositionsKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AabbPositionsKHR where
-  zero = AabbPositionsKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkTransformMatrixKHR - Structure specifying a 3x4 affine transformation
--- matrix
---
--- = See Also
---
--- 'AccelerationStructureInstanceKHR'
-data TransformMatrixKHR = TransformMatrixKHR
-  { -- | @matrix@ is a 3x4 row-major affine transformation matrix.
-    matrix :: ((Float, Float, Float, Float), (Float, Float, Float, Float), (Float, Float, Float, Float)) }
-  deriving (Typeable)
-deriving instance Show TransformMatrixKHR
-
-instance ToCStruct TransformMatrixKHR where
-  withCStruct x f = allocaBytesAligned 48 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p TransformMatrixKHR{..} f = do
-    let pMatrix' = lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))
-    case (matrix) of
-      (e0, e1, e2) -> do
-        let pMatrix0 = lowerArrayPtr (pMatrix' :: Ptr (FixedArray 4 CFloat))
-        case (e0) of
-          (e0', e1', e2', e3) -> do
-            poke (pMatrix0 :: Ptr CFloat) (CFloat (e0'))
-            poke (pMatrix0 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
-            poke (pMatrix0 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
-            poke (pMatrix0 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-        let pMatrix1 = lowerArrayPtr (pMatrix' `plusPtr` 16 :: Ptr (FixedArray 4 CFloat))
-        case (e1) of
-          (e0', e1', e2', e3) -> do
-            poke (pMatrix1 :: Ptr CFloat) (CFloat (e0'))
-            poke (pMatrix1 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
-            poke (pMatrix1 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
-            poke (pMatrix1 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-        let pMatrix2 = lowerArrayPtr (pMatrix' `plusPtr` 32 :: Ptr (FixedArray 4 CFloat))
-        case (e2) of
-          (e0', e1', e2', e3) -> do
-            poke (pMatrix2 :: Ptr CFloat) (CFloat (e0'))
-            poke (pMatrix2 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
-            poke (pMatrix2 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
-            poke (pMatrix2 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-        pure $ ()
-    f
-  cStructSize = 48
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    let pMatrix' = lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))
-    case (((zero, zero, zero, zero), (zero, zero, zero, zero), (zero, zero, zero, zero))) of
-      (e0, e1, e2) -> do
-        let pMatrix0 = lowerArrayPtr (pMatrix' :: Ptr (FixedArray 4 CFloat))
-        case (e0) of
-          (e0', e1', e2', e3) -> do
-            poke (pMatrix0 :: Ptr CFloat) (CFloat (e0'))
-            poke (pMatrix0 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
-            poke (pMatrix0 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
-            poke (pMatrix0 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-        let pMatrix1 = lowerArrayPtr (pMatrix' `plusPtr` 16 :: Ptr (FixedArray 4 CFloat))
-        case (e1) of
-          (e0', e1', e2', e3) -> do
-            poke (pMatrix1 :: Ptr CFloat) (CFloat (e0'))
-            poke (pMatrix1 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
-            poke (pMatrix1 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
-            poke (pMatrix1 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-        let pMatrix2 = lowerArrayPtr (pMatrix' `plusPtr` 32 :: Ptr (FixedArray 4 CFloat))
-        case (e2) of
-          (e0', e1', e2', e3) -> do
-            poke (pMatrix2 :: Ptr CFloat) (CFloat (e0'))
-            poke (pMatrix2 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
-            poke (pMatrix2 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
-            poke (pMatrix2 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
-        pure $ ()
-    f
-
-instance FromCStruct TransformMatrixKHR where
-  peekCStruct p = do
-    let pmatrix = lowerArrayPtr @(FixedArray 4 CFloat) ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))
-    let pmatrix0 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 0 :: Ptr (FixedArray 4 CFloat)))
-    matrix00 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 0 :: Ptr CFloat))
-    matrix01 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 4 :: Ptr CFloat))
-    matrix02 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 8 :: Ptr CFloat))
-    matrix03 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 12 :: Ptr CFloat))
-    let pmatrix1 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 16 :: Ptr (FixedArray 4 CFloat)))
-    matrix10 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 0 :: Ptr CFloat))
-    matrix11 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 4 :: Ptr CFloat))
-    matrix12 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 8 :: Ptr CFloat))
-    matrix13 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 12 :: Ptr CFloat))
-    let pmatrix2 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 32 :: Ptr (FixedArray 4 CFloat)))
-    matrix20 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 0 :: Ptr CFloat))
-    matrix21 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 4 :: Ptr CFloat))
-    matrix22 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 8 :: Ptr CFloat))
-    matrix23 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 12 :: Ptr CFloat))
-    pure $ TransformMatrixKHR
-             ((((((\(CFloat a) -> a) matrix00), ((\(CFloat a) -> a) matrix01), ((\(CFloat a) -> a) matrix02), ((\(CFloat a) -> a) matrix03))), ((((\(CFloat a) -> a) matrix10), ((\(CFloat a) -> a) matrix11), ((\(CFloat a) -> a) matrix12), ((\(CFloat a) -> a) matrix13))), ((((\(CFloat a) -> a) matrix20), ((\(CFloat a) -> a) matrix21), ((\(CFloat a) -> a) matrix22), ((\(CFloat a) -> a) matrix23)))))
-
-instance Storable TransformMatrixKHR where
-  sizeOf ~_ = 48
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero TransformMatrixKHR where
-  zero = TransformMatrixKHR
-           ((zero, zero, zero, zero), (zero, zero, zero, zero), (zero, zero, zero, zero))
-
-
--- | VkAccelerationStructureInstanceKHR - Structure specifying a single
--- acceleration structure instance for building into an acceleration
--- structure geometry
---
--- = Description
---
--- The C language spec does not define the ordering of bit-fields, but in
--- practice, this struct produces the correct layout with existing
--- compilers. The intended bit pattern is for the following:
---
--- If a compiler produces code that diverges from that pattern,
--- applications /must/ employ another method to set values according to the
--- correct bit pattern.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'GeometryInstanceFlagsKHR', 'TransformMatrixKHR'
-data AccelerationStructureInstanceKHR = AccelerationStructureInstanceKHR
-  { -- | @transform@ is a 'TransformMatrixKHR' structure describing a
-    -- transformation to be applied to the acceleration structure.
-    transform :: TransformMatrixKHR
-  , -- | @instanceCustomIndex@ and @mask@ occupy the same memory as if a single
-    -- @int32_t@ was specified in their place
-    --
-    -- -   @instanceCustomIndex@ occupies the 24 least significant bits of that
-    --     memory
-    --
-    -- -   @mask@ occupies the 8 most significant bits of that memory
-    instanceCustomIndex :: Word32
-  , -- | @mask@ is an 8-bit visibility mask for the geometry. The instance /may/
-    -- only be hit if @rayMask & instance.mask != 0@
-    mask :: Word32
-  , -- | @instanceShaderBindingTableRecordOffset@ and @flags@ occupy the same
-    -- memory as if a single @int32_t@ was specified in their place
-    --
-    -- -   @instanceShaderBindingTableRecordOffset@ occupies the 24 least
-    --     significant bits of that memory
-    --
-    -- -   @flags@ occupies the 8 most significant bits of that memory
-    instanceShaderBindingTableRecordOffset :: Word32
-  , -- | @flags@ /must/ be a valid combination of 'GeometryInstanceFlagBitsKHR'
-    -- values
-    flags :: GeometryInstanceFlagsKHR
-  , -- | @accelerationStructureReference@ is either:
-    --
-    -- -   a device address containing the value obtained from
-    --     'getAccelerationStructureDeviceAddressKHR' or
-    --     'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'
-    --     (used by device operations which reference acceleration structures)
-    --     or,
-    --
-    -- -   a 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR'
-    --     object (used by host operations which reference acceleration
-    --     structures).
-    accelerationStructureReference :: Word64
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureInstanceKHR
-
-instance ToCStruct AccelerationStructureInstanceKHR where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureInstanceKHR{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (transform) . ($ ())
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (((coerce @_ @Word32 (mask)) `shiftL` 24) .|. (instanceCustomIndex))
-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (((coerce @_ @Word32 (flags)) `shiftL` 24) .|. (instanceShaderBindingTableRecordOffset))
-    lift $ poke ((p `plusPtr` 56 :: Ptr Word64)) (accelerationStructureReference)
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 56 :: Ptr Word64)) (zero)
-    lift $ f
-
-instance FromCStruct AccelerationStructureInstanceKHR where
-  peekCStruct p = do
-    transform <- peekCStruct @TransformMatrixKHR ((p `plusPtr` 0 :: Ptr TransformMatrixKHR))
-    instanceCustomIndex <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    let instanceCustomIndex' = ((instanceCustomIndex .&. coerce @Word32 0xffffff))
-    mask <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    let mask' = ((((mask `shiftR` 24)) .&. coerce @Word32 0xff))
-    instanceShaderBindingTableRecordOffset <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
-    let instanceShaderBindingTableRecordOffset' = ((instanceShaderBindingTableRecordOffset .&. coerce @Word32 0xffffff))
-    flags <- peek @GeometryInstanceFlagsKHR ((p `plusPtr` 52 :: Ptr GeometryInstanceFlagsKHR))
-    let flags' = ((((flags `shiftR` 24)) .&. coerce @Word32 0xff))
-    accelerationStructureReference <- peek @Word64 ((p `plusPtr` 56 :: Ptr Word64))
-    pure $ AccelerationStructureInstanceKHR
-             transform instanceCustomIndex' mask' instanceShaderBindingTableRecordOffset' flags' accelerationStructureReference
-
-instance Zero AccelerationStructureInstanceKHR where
-  zero = AccelerationStructureInstanceKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkAccelerationStructureDeviceAddressInfoKHR - Structure specifying the
--- acceleration structure to query an address for
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getAccelerationStructureDeviceAddressKHR'
-data AccelerationStructureDeviceAddressInfoKHR = AccelerationStructureDeviceAddressInfoKHR
-  { -- | @accelerationStructure@ /must/ be a valid
-    -- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
-    accelerationStructure :: AccelerationStructureKHR }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureDeviceAddressInfoKHR
-
-instance ToCStruct AccelerationStructureDeviceAddressInfoKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureDeviceAddressInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (accelerationStructure)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)
-    f
-
-instance FromCStruct AccelerationStructureDeviceAddressInfoKHR where
-  peekCStruct p = do
-    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))
-    pure $ AccelerationStructureDeviceAddressInfoKHR
-             accelerationStructure
-
-instance Storable AccelerationStructureDeviceAddressInfoKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AccelerationStructureDeviceAddressInfoKHR where
-  zero = AccelerationStructureDeviceAddressInfoKHR
-           zero
-
-
--- | VkAccelerationStructureVersionKHR - Acceleration structure version
--- information
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getDeviceAccelerationStructureCompatibilityKHR'
-data AccelerationStructureVersionKHR = AccelerationStructureVersionKHR
-  { -- | @versionData@ /must/ be a valid pointer to an array of @2@*VK_UUID_SIZE
-    -- @uint8_t@ values
-    versionData :: ByteString }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureVersionKHR
-
-instance ToCStruct AccelerationStructureVersionKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureVersionKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ unless (Data.ByteString.length (versionData) == 2 * UUID_SIZE) $
-      throwIO $ IOError Nothing InvalidArgument "" "AccelerationStructureVersionKHR::versionData must be 2*VK_UUID_SIZE bytes" Nothing Nothing
-    versionData'' <- fmap (castPtr @CChar @Word8) . ContT $ unsafeUseAsCString (versionData)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr Word8))) versionData''
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct AccelerationStructureVersionKHR where
-  peekCStruct p = do
-    versionData <- peek @(Ptr Word8) ((p `plusPtr` 16 :: Ptr (Ptr Word8)))
-    versionData' <- packCStringLen (castPtr @Word8 @CChar versionData, 2 * UUID_SIZE)
-    pure $ AccelerationStructureVersionKHR
-             versionData'
-
-instance Zero AccelerationStructureVersionKHR where
-  zero = AccelerationStructureVersionKHR
-           mempty
-
-
--- | VkCopyAccelerationStructureInfoKHR - Parameters for copying an
--- acceleration structure
---
--- == Valid Usage
---
--- -   [[VUID-{refpage}-mode-03410]] @mode@ /must/ be
---     'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' or
---     'COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR'
---
--- -   [[VUID-{refpage}-src-03411]] @src@ /must/ have been built with
---     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if @mode@ is
---     'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @src@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   @dst@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value
---
--- -   Both of @dst@, and @src@ /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'CopyAccelerationStructureModeKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdCopyAccelerationStructureKHR', 'copyAccelerationStructureKHR'
-data CopyAccelerationStructureInfoKHR (es :: [Type]) = CopyAccelerationStructureInfoKHR
-  { -- No documentation found for Nested "VkCopyAccelerationStructureInfoKHR" "pNext"
-    next :: Chain es
-  , -- | @src@ is the source acceleration structure for the copy.
-    src :: AccelerationStructureKHR
-  , -- | @dst@ is the target acceleration structure for the copy.
-    dst :: AccelerationStructureKHR
-  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value that specifies
-    -- additional operations to perform during the copy.
-    mode :: CopyAccelerationStructureModeKHR
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (CopyAccelerationStructureInfoKHR es)
-
-instance Extensible CopyAccelerationStructureInfoKHR where
-  extensibleType = STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR
-  setNext x next = x{next = next}
-  getNext CopyAccelerationStructureInfoKHR{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CopyAccelerationStructureInfoKHR e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (CopyAccelerationStructureInfoKHR es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CopyAccelerationStructureInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (src)
-    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (dst)
-    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (mode)
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (CopyAccelerationStructureInfoKHR es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    src <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))
-    dst <- peek @AccelerationStructureKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR))
-    mode <- peek @CopyAccelerationStructureModeKHR ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR))
-    pure $ CopyAccelerationStructureInfoKHR
-             next src dst mode
-
-instance es ~ '[] => Zero (CopyAccelerationStructureInfoKHR es) where
-  zero = CopyAccelerationStructureInfoKHR
-           ()
-           zero
-           zero
-           zero
-
-
--- | VkCopyAccelerationStructureToMemoryInfoKHR - Parameters for serializing
--- an acceleration structure
---
--- == Valid Usage
---
--- -   The memory pointed to by @dst@ /must/ be at least as large as the
---     serialization size of @src@, as reported by
---     'Graphics.Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
---
--- -   [[VUID-{refpage}-mode-03412]] @mode@ /must/ be
---     'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @src@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   @dst@ /must/ be a valid 'DeviceOrHostAddressKHR' union
---
--- -   @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'CopyAccelerationStructureModeKHR', 'DeviceOrHostAddressKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdCopyAccelerationStructureToMemoryKHR',
--- 'copyAccelerationStructureToMemoryKHR'
-data CopyAccelerationStructureToMemoryInfoKHR (es :: [Type]) = CopyAccelerationStructureToMemoryInfoKHR
-  { -- No documentation found for Nested "VkCopyAccelerationStructureToMemoryInfoKHR" "pNext"
-    next :: Chain es
-  , -- | @src@ is the source acceleration structure for the copy
-    src :: AccelerationStructureKHR
-  , -- | @dst@ is the device or host address to memory which is the target for
-    -- the copy
-    dst :: DeviceOrHostAddressKHR
-  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value that specifies
-    -- additional operations to perform during the copy.
-    mode :: CopyAccelerationStructureModeKHR
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (CopyAccelerationStructureToMemoryInfoKHR es)
-
-instance Extensible CopyAccelerationStructureToMemoryInfoKHR where
-  extensibleType = STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR
-  setNext x next = x{next = next}
-  getNext CopyAccelerationStructureToMemoryInfoKHR{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CopyAccelerationStructureToMemoryInfoKHR e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (CopyAccelerationStructureToMemoryInfoKHR es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CopyAccelerationStructureToMemoryInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (src)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressKHR)) (dst) . ($ ())
-    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (mode)
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressKHR)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (zero)
-    lift $ f
-
-instance es ~ '[] => Zero (CopyAccelerationStructureToMemoryInfoKHR es) where
-  zero = CopyAccelerationStructureToMemoryInfoKHR
-           ()
-           zero
-           zero
-           zero
-
-
--- | VkCopyMemoryToAccelerationStructureInfoKHR - Parameters for
--- deserializing an acceleration structure
---
--- == Valid Usage
---
--- -   [[VUID-{refpage}-mode-03413]] @mode@ /must/ be
---     'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR'
---
--- -   [[VUID-{refpage}-pInfo-03414]] The data in @pInfo->src@ /must/ have
---     a format compatible with the destination physical device as returned
---     by 'getDeviceAccelerationStructureCompatibilityKHR'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @src@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
---
--- -   @dst@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'CopyAccelerationStructureModeKHR', 'DeviceOrHostAddressConstKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdCopyMemoryToAccelerationStructureKHR',
--- 'copyMemoryToAccelerationStructureKHR'
-data CopyMemoryToAccelerationStructureInfoKHR (es :: [Type]) = CopyMemoryToAccelerationStructureInfoKHR
-  { -- No documentation found for Nested "VkCopyMemoryToAccelerationStructureInfoKHR" "pNext"
-    next :: Chain es
-  , -- | @src@ is the device or host address to memory containing the source data
-    -- for the copy.
-    src :: DeviceOrHostAddressConstKHR
-  , -- | @dst@ is the target acceleration structure for the copy.
-    dst :: AccelerationStructureKHR
-  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value that specifies
-    -- additional operations to perform during the copy.
-    mode :: CopyAccelerationStructureModeKHR
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (CopyMemoryToAccelerationStructureInfoKHR es)
-
-instance Extensible CopyMemoryToAccelerationStructureInfoKHR where
-  extensibleType = STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR
-  setNext x next = x{next = next}
-  getNext CopyMemoryToAccelerationStructureInfoKHR{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CopyMemoryToAccelerationStructureInfoKHR e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (CopyMemoryToAccelerationStructureInfoKHR es) where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CopyMemoryToAccelerationStructureInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (src) . ($ ())
-    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (dst)
-    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (mode)
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (zero)
-    lift $ f
-
-instance es ~ '[] => Zero (CopyMemoryToAccelerationStructureInfoKHR es) where
-  zero = CopyMemoryToAccelerationStructureInfoKHR
-           ()
-           zero
-           zero
-           zero
-
-
--- | VkRayTracingPipelineInterfaceCreateInfoKHR - Structure specifying
--- additional interface information when using libraries
---
--- = Description
---
--- @maxPayloadSize@ is calculated as the maximum number of bytes used by
--- any block declared in the @RayPayloadKHR@ or @IncomingRayPayloadKHR@
--- storage classes. @maxAttributeSize@ is calculated as the maximum number
--- of bytes used by any block declared in the @HitAttributeKHR@ storage
--- class. @maxCallableSize@ is calculated as the maximum number of bytes
--- used by any block declred in the @CallableDataKHR@ or
--- @IncomingCallableDataKHR@. As variables in these storage classes do not
--- have explicit offsets, the size should be calculated as if each variable
--- has a
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-alignment-requirements scalar alignment>
--- equal to the largest scalar alignment of any of the block’s members.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'RayTracingPipelineCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data RayTracingPipelineInterfaceCreateInfoKHR = RayTracingPipelineInterfaceCreateInfoKHR
-  { -- | @maxPayloadSize@ is the maximum payload size in bytes used by any shader
-    -- in the pipeline.
-    maxPayloadSize :: Word32
-  , -- | @maxAttributeSize@ is the maximum attribute structure size in bytes used
-    -- by any shader in the pipeline.
-    maxAttributeSize :: Word32
-  , -- | @maxCallableSize@ is the maximum callable data size in bytes used by any
-    -- shader in the pipeline.
-    maxCallableSize :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show RayTracingPipelineInterfaceCreateInfoKHR
-
-instance ToCStruct RayTracingPipelineInterfaceCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RayTracingPipelineInterfaceCreateInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxPayloadSize)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxAttributeSize)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxCallableSize)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct RayTracingPipelineInterfaceCreateInfoKHR where
-  peekCStruct p = do
-    maxPayloadSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxAttributeSize <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    maxCallableSize <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pure $ RayTracingPipelineInterfaceCreateInfoKHR
-             maxPayloadSize maxAttributeSize maxCallableSize
-
-instance Storable RayTracingPipelineInterfaceCreateInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero RayTracingPipelineInterfaceCreateInfoKHR where
-  zero = RayTracingPipelineInterfaceCreateInfoKHR
-           zero
-           zero
-           zero
-
-
-data DeviceOrHostAddressKHR
-  = DeviceAddress DeviceAddress
-  | HostAddress (Ptr ())
-  deriving (Show)
-
-instance ToCStruct DeviceOrHostAddressKHR where
-  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct :: Ptr DeviceOrHostAddressKHR -> DeviceOrHostAddressKHR -> IO a -> IO a
-  pokeCStruct p = (. const) . runContT .  \case
-    DeviceAddress v -> lift $ poke (castPtr @_ @DeviceAddress p) (v)
-    HostAddress v -> lift $ poke (castPtr @_ @(Ptr ()) p) (v)
-  pokeZeroCStruct :: Ptr DeviceOrHostAddressKHR -> IO b -> IO b
-  pokeZeroCStruct _ f = f
-  cStructSize = 8
-  cStructAlignment = 8
-
-instance Zero DeviceOrHostAddressKHR where
-  zero = DeviceAddress zero
-
-
-data DeviceOrHostAddressConstKHR
-  = DeviceAddressConst DeviceAddress
-  | HostAddressConst (Ptr ())
-  deriving (Show)
-
-instance ToCStruct DeviceOrHostAddressConstKHR where
-  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct :: Ptr DeviceOrHostAddressConstKHR -> DeviceOrHostAddressConstKHR -> IO a -> IO a
-  pokeCStruct p = (. const) . runContT .  \case
-    DeviceAddressConst v -> lift $ poke (castPtr @_ @DeviceAddress p) (v)
-    HostAddressConst v -> lift $ poke (castPtr @_ @(Ptr ()) p) (v)
-  pokeZeroCStruct :: Ptr DeviceOrHostAddressConstKHR -> IO b -> IO b
-  pokeZeroCStruct _ f = f
-  cStructSize = 8
-  cStructAlignment = 8
-
-instance Zero DeviceOrHostAddressConstKHR where
-  zero = DeviceAddressConst zero
-
-
-data AccelerationStructureGeometryDataKHR
-  = Triangles AccelerationStructureGeometryTrianglesDataKHR
-  | Aabbs AccelerationStructureGeometryAabbsDataKHR
-  | Instances AccelerationStructureGeometryInstancesDataKHR
-  deriving (Show)
-
-instance ToCStruct AccelerationStructureGeometryDataKHR where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct :: Ptr AccelerationStructureGeometryDataKHR -> AccelerationStructureGeometryDataKHR -> IO a -> IO a
-  pokeCStruct p = (. const) . runContT .  \case
-    Triangles v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryTrianglesDataKHR p) (v) . ($ ())
-    Aabbs v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryAabbsDataKHR p) (v) . ($ ())
-    Instances v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryInstancesDataKHR p) (v) . ($ ())
-  pokeZeroCStruct :: Ptr AccelerationStructureGeometryDataKHR -> IO b -> IO b
-  pokeZeroCStruct _ f = f
-  cStructSize = 64
-  cStructAlignment = 8
-
-instance Zero AccelerationStructureGeometryDataKHR where
-  zero = Triangles zero
-
-
--- | VkGeometryInstanceFlagBitsKHR - Instance flag bits
---
--- = Description
---
--- 'GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR' and
--- 'GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR' /must/ not be used in the same
--- flag.
---
--- = See Also
---
--- 'GeometryInstanceFlagsKHR'
-newtype GeometryInstanceFlagBitsKHR = GeometryInstanceFlagBitsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR' disables face
--- culling for this instance.
-pattern GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR = GeometryInstanceFlagBitsKHR 0x00000001
--- | 'GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR' indicates
--- that the front face of the triangle for culling purposes is the face
--- that is counter clockwise in object space relative to the ray origin.
--- Because the facing is determined in object space, an instance transform
--- matrix does not change the winding, but a geometry transform does.
-pattern GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = GeometryInstanceFlagBitsKHR 0x00000002
--- | 'GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR' causes this instance to act as
--- though 'GEOMETRY_OPAQUE_BIT_KHR' were specified on all geometries
--- referenced by this instance. This behavior /can/ be overridden by the
--- SPIR-V @NoOpaqueKHR@ ray flag.
-pattern GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR = GeometryInstanceFlagBitsKHR 0x00000004
--- | 'GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR' causes this instance to act
--- as though 'GEOMETRY_OPAQUE_BIT_KHR' were not specified on all geometries
--- referenced by this instance. This behavior /can/ be overridden by the
--- SPIR-V @OpaqueKHR@ ray flag.
-pattern GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR = GeometryInstanceFlagBitsKHR 0x00000008
-
-type GeometryInstanceFlagsKHR = GeometryInstanceFlagBitsKHR
-
-instance Show GeometryInstanceFlagBitsKHR where
-  showsPrec p = \case
-    GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR -> showString "GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR"
-    GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR -> showString "GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR"
-    GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR -> showString "GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR"
-    GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR -> showString "GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR"
-    GeometryInstanceFlagBitsKHR x -> showParen (p >= 11) (showString "GeometryInstanceFlagBitsKHR 0x" . showHex x)
-
-instance Read GeometryInstanceFlagBitsKHR where
-  readPrec = parens (choose [("GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR", pure GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR)
-                            , ("GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR", pure GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR)
-                            , ("GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR", pure GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR)
-                            , ("GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR", pure GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "GeometryInstanceFlagBitsKHR")
-                       v <- step readPrec
-                       pure (GeometryInstanceFlagBitsKHR v)))
-
-
--- | VkGeometryFlagBitsKHR - Bitmask specifying additional parameters for a
--- geometry
---
--- = See Also
---
--- 'GeometryFlagsKHR'
-newtype GeometryFlagBitsKHR = GeometryFlagBitsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'GEOMETRY_OPAQUE_BIT_KHR' indicates that this geometry does not invoke
--- the any-hit shaders even if present in a hit group.
-pattern GEOMETRY_OPAQUE_BIT_KHR = GeometryFlagBitsKHR 0x00000001
--- | 'GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR' indicates that the
--- implementation /must/ only call the any-hit shader a single time for
--- each primitive in this geometry. If this bit is absent an implementation
--- /may/ invoke the any-hit shader more than once for this geometry.
-pattern GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = GeometryFlagBitsKHR 0x00000002
-
-type GeometryFlagsKHR = GeometryFlagBitsKHR
-
-instance Show GeometryFlagBitsKHR where
-  showsPrec p = \case
-    GEOMETRY_OPAQUE_BIT_KHR -> showString "GEOMETRY_OPAQUE_BIT_KHR"
-    GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR -> showString "GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR"
-    GeometryFlagBitsKHR x -> showParen (p >= 11) (showString "GeometryFlagBitsKHR 0x" . showHex x)
-
-instance Read GeometryFlagBitsKHR where
-  readPrec = parens (choose [("GEOMETRY_OPAQUE_BIT_KHR", pure GEOMETRY_OPAQUE_BIT_KHR)
-                            , ("GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR", pure GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "GeometryFlagBitsKHR")
-                       v <- step readPrec
-                       pure (GeometryFlagBitsKHR v)))
-
-
--- | VkBuildAccelerationStructureFlagBitsKHR - Bitmask specifying additional
--- parameters for acceleration structure builds
---
--- = Description
---
--- Note
---
--- 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' and
--- 'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' /may/ take more
--- time and memory than a normal build, and so /should/ only be used when
--- those features are needed.
---
--- = See Also
---
--- 'BuildAccelerationStructureFlagsKHR'
-newtype BuildAccelerationStructureFlagBitsKHR = BuildAccelerationStructureFlagBitsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' indicates that the
--- specified acceleration structure /can/ be updated with @update@ of
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' in
--- 'cmdBuildAccelerationStructureKHR' or
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV'
--- .
-pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000001
--- | 'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' indicates that
--- the specified acceleration structure /can/ act as the source for a copy
--- acceleration structure command with @mode@ of
--- 'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' to produce a compacted
--- acceleration structure.
-pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000002
--- | 'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR' indicates that
--- the given acceleration structure build /should/ prioritize trace
--- performance over build time.
-pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000004
--- | 'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR' indicates that
--- the given acceleration structure build /should/ prioritize build time
--- over trace performance.
-pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000008
--- | 'BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR' indicates that this
--- acceleration structure /should/ minimize the size of the scratch memory
--- and the final result build, potentially at the expense of build time or
--- trace performance.
-pattern BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000010
-
-type BuildAccelerationStructureFlagsKHR = BuildAccelerationStructureFlagBitsKHR
-
-instance Show BuildAccelerationStructureFlagBitsKHR where
-  showsPrec p = \case
-    BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR -> showString "BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR"
-    BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR -> showString "BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR"
-    BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR -> showString "BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR"
-    BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR -> showString "BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR"
-    BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR -> showString "BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR"
-    BuildAccelerationStructureFlagBitsKHR x -> showParen (p >= 11) (showString "BuildAccelerationStructureFlagBitsKHR 0x" . showHex x)
-
-instance Read BuildAccelerationStructureFlagBitsKHR where
-  readPrec = parens (choose [("BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR", pure BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR)
-                            , ("BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR", pure BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR)
-                            , ("BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR", pure BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR)
-                            , ("BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR", pure BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR)
-                            , ("BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR", pure BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "BuildAccelerationStructureFlagBitsKHR")
-                       v <- step readPrec
-                       pure (BuildAccelerationStructureFlagBitsKHR v)))
-
-
--- | VkCopyAccelerationStructureModeKHR - Acceleration structure copy mode
---
--- = See Also
---
--- 'CopyAccelerationStructureInfoKHR',
--- 'CopyAccelerationStructureToMemoryInfoKHR',
--- 'CopyMemoryToAccelerationStructureInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.cmdCopyAccelerationStructureNV'
-newtype CopyAccelerationStructureModeKHR = CopyAccelerationStructureModeKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR' creates a direct copy of
--- the acceleration structure specified in @src@ into the one specified by
--- @dst@. The @dst@ acceleration structure /must/ have been created with
--- the same parameters as @src@.
-pattern COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR = CopyAccelerationStructureModeKHR 0
--- | 'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' creates a more compact
--- version of an acceleration structure @src@ into @dst@. The acceleration
--- structure @dst@ /must/ have been created with a @compactedSize@
--- corresponding to the one returned by
--- 'cmdWriteAccelerationStructuresPropertiesKHR' after the build of the
--- acceleration structure specified by @src@.
-pattern COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR = CopyAccelerationStructureModeKHR 1
--- | 'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR' serializes the
--- acceleration structure to a semi-opaque format which can be reloaded on
--- a compatible implementation.
-pattern COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR = CopyAccelerationStructureModeKHR 2
--- | 'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR' deserializes the
--- semi-opaque serialization format in the buffer to the acceleration
--- structure.
-pattern COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = CopyAccelerationStructureModeKHR 3
-{-# complete COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR,
-             COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR,
-             COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
-             COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR :: CopyAccelerationStructureModeKHR #-}
-
-instance Show CopyAccelerationStructureModeKHR where
-  showsPrec p = \case
-    COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR -> showString "COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR"
-    COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR -> showString "COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR"
-    COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR -> showString "COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR"
-    COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR -> showString "COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR"
-    CopyAccelerationStructureModeKHR x -> showParen (p >= 11) (showString "CopyAccelerationStructureModeKHR " . showsPrec 11 x)
-
-instance Read CopyAccelerationStructureModeKHR where
-  readPrec = parens (choose [("COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR", pure COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR)
-                            , ("COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR", pure COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR)
-                            , ("COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR", pure COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR)
-                            , ("COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR", pure COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CopyAccelerationStructureModeKHR")
-                       v <- step readPrec
-                       pure (CopyAccelerationStructureModeKHR v)))
-
-
--- | VkAccelerationStructureTypeKHR - Type of acceleration structure
---
--- = See Also
---
--- 'AccelerationStructureBuildGeometryInfoKHR',
--- 'AccelerationStructureCreateInfoKHR'
-newtype AccelerationStructureTypeKHR = AccelerationStructureTypeKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' is a top-level acceleration
--- structure containing instance data referring to bottom-level
--- acceleration structures.
-pattern ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = AccelerationStructureTypeKHR 0
--- | 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' is a bottom-level
--- acceleration structure containing the AABBs or geometry to be
--- intersected.
-pattern ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = AccelerationStructureTypeKHR 1
-{-# complete ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR,
-             ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR :: AccelerationStructureTypeKHR #-}
-
-instance Show AccelerationStructureTypeKHR where
-  showsPrec p = \case
-    ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR -> showString "ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR"
-    ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR -> showString "ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR"
-    AccelerationStructureTypeKHR x -> showParen (p >= 11) (showString "AccelerationStructureTypeKHR " . showsPrec 11 x)
-
-instance Read AccelerationStructureTypeKHR where
-  readPrec = parens (choose [("ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR", pure ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR)
-                            , ("ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR", pure ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "AccelerationStructureTypeKHR")
-                       v <- step readPrec
-                       pure (AccelerationStructureTypeKHR v)))
-
-
--- | VkGeometryTypeKHR - Enum specifying which type of geometry is provided
---
--- = See Also
---
--- 'AccelerationStructureCreateGeometryTypeInfoKHR',
--- 'AccelerationStructureGeometryKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.GeometryNV'
-newtype GeometryTypeKHR = GeometryTypeKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'GEOMETRY_TYPE_TRIANGLES_KHR' specifies a geometry type consisting of
--- triangles.
-pattern GEOMETRY_TYPE_TRIANGLES_KHR = GeometryTypeKHR 0
--- | 'GEOMETRY_TYPE_AABBS_KHR' specifies a geometry type consisting of
--- axis-aligned bounding boxes.
-pattern GEOMETRY_TYPE_AABBS_KHR = GeometryTypeKHR 1
--- | 'GEOMETRY_TYPE_INSTANCES_KHR' specifies a geometry type consisting of
--- acceleration structure instances.
-pattern GEOMETRY_TYPE_INSTANCES_KHR = GeometryTypeKHR 1000150000
-{-# complete GEOMETRY_TYPE_TRIANGLES_KHR,
-             GEOMETRY_TYPE_AABBS_KHR,
-             GEOMETRY_TYPE_INSTANCES_KHR :: GeometryTypeKHR #-}
-
-instance Show GeometryTypeKHR where
-  showsPrec p = \case
-    GEOMETRY_TYPE_TRIANGLES_KHR -> showString "GEOMETRY_TYPE_TRIANGLES_KHR"
-    GEOMETRY_TYPE_AABBS_KHR -> showString "GEOMETRY_TYPE_AABBS_KHR"
-    GEOMETRY_TYPE_INSTANCES_KHR -> showString "GEOMETRY_TYPE_INSTANCES_KHR"
-    GeometryTypeKHR x -> showParen (p >= 11) (showString "GeometryTypeKHR " . showsPrec 11 x)
-
-instance Read GeometryTypeKHR where
-  readPrec = parens (choose [("GEOMETRY_TYPE_TRIANGLES_KHR", pure GEOMETRY_TYPE_TRIANGLES_KHR)
-                            , ("GEOMETRY_TYPE_AABBS_KHR", pure GEOMETRY_TYPE_AABBS_KHR)
-                            , ("GEOMETRY_TYPE_INSTANCES_KHR", pure GEOMETRY_TYPE_INSTANCES_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "GeometryTypeKHR")
-                       v <- step readPrec
-                       pure (GeometryTypeKHR v)))
-
-
--- | VkAccelerationStructureMemoryRequirementsTypeKHR - Acceleration
--- structure memory requirement type
---
--- = See Also
---
--- 'AccelerationStructureMemoryRequirementsInfoKHR'
-newtype AccelerationStructureMemoryRequirementsTypeKHR = AccelerationStructureMemoryRequirementsTypeKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR' requests
--- the memory requirement for the
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' backing
--- store.
-pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR = AccelerationStructureMemoryRequirementsTypeKHR 0
--- | 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR'
--- requests the memory requirement for scratch space during the initial
--- build.
-pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR = AccelerationStructureMemoryRequirementsTypeKHR 1
--- | 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR'
--- requests the memory requirement for scratch space during an update.
-pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR = AccelerationStructureMemoryRequirementsTypeKHR 2
-{-# complete ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR,
-             ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR,
-             ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR :: AccelerationStructureMemoryRequirementsTypeKHR #-}
-
-instance Show AccelerationStructureMemoryRequirementsTypeKHR where
-  showsPrec p = \case
-    ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR -> showString "ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR"
-    ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR -> showString "ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR"
-    ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR -> showString "ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR"
-    AccelerationStructureMemoryRequirementsTypeKHR x -> showParen (p >= 11) (showString "AccelerationStructureMemoryRequirementsTypeKHR " . showsPrec 11 x)
-
-instance Read AccelerationStructureMemoryRequirementsTypeKHR where
-  readPrec = parens (choose [("ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR", pure ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR)
-                            , ("ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR", pure ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR)
-                            , ("ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR", pure ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "AccelerationStructureMemoryRequirementsTypeKHR")
-                       v <- step readPrec
-                       pure (AccelerationStructureMemoryRequirementsTypeKHR v)))
-
-
--- | VkAccelerationStructureBuildTypeKHR - Acceleration structure build type
---
--- = See Also
---
--- 'AccelerationStructureMemoryRequirementsInfoKHR'
-newtype AccelerationStructureBuildTypeKHR = AccelerationStructureBuildTypeKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR' requests the memory
--- requirement for operations performed by the host.
-pattern ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = AccelerationStructureBuildTypeKHR 0
--- | 'ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR' requests the memory
--- requirement for operations performed by the device.
-pattern ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = AccelerationStructureBuildTypeKHR 1
--- | 'ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR' requests the
--- memory requirement for operations performed by either the host, or the
--- device.
-pattern ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = AccelerationStructureBuildTypeKHR 2
-{-# complete ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR,
-             ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
-             ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR :: AccelerationStructureBuildTypeKHR #-}
-
-instance Show AccelerationStructureBuildTypeKHR where
-  showsPrec p = \case
-    ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR -> showString "ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR"
-    ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR -> showString "ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR"
-    ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR -> showString "ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR"
-    AccelerationStructureBuildTypeKHR x -> showParen (p >= 11) (showString "AccelerationStructureBuildTypeKHR " . showsPrec 11 x)
-
-instance Read AccelerationStructureBuildTypeKHR where
-  readPrec = parens (choose [("ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR", pure ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR)
-                            , ("ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR", pure ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
-                            , ("ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR", pure ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "AccelerationStructureBuildTypeKHR")
-                       v <- step readPrec
-                       pure (AccelerationStructureBuildTypeKHR v)))
-
-
--- | VkRayTracingShaderGroupTypeKHR - Shader group types
---
--- = Description
---
--- Note
---
--- For current group types, the hit group type could be inferred from the
--- presence or absence of the intersection shader, but we provide the type
--- explicitly for future hit groups that do not have that property.
---
--- = See Also
---
--- 'RayTracingShaderGroupCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_ray_tracing.RayTracingShaderGroupCreateInfoNV'
-newtype RayTracingShaderGroupTypeKHR = RayTracingShaderGroupTypeKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' indicates a shader group
--- with a single
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR',
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MISS_BIT_KHR',
--- or
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CALLABLE_BIT_KHR'
--- shader in it.
-pattern RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = RayTracingShaderGroupTypeKHR 0
--- | 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' specifies a
--- shader group that only hits triangles and /must/ not contain an
--- intersection shader, only closest hit and any-hit shaders.
-pattern RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = RayTracingShaderGroupTypeKHR 1
--- | 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' specifies a
--- shader group that only intersects with custom geometry and /must/
--- contain an intersection shader and /may/ contain closest hit and any-hit
--- shaders.
-pattern RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = RayTracingShaderGroupTypeKHR 2
-{-# complete RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR,
-             RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR,
-             RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR :: RayTracingShaderGroupTypeKHR #-}
-
-instance Show RayTracingShaderGroupTypeKHR where
-  showsPrec p = \case
-    RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR -> showString "RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR"
-    RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR -> showString "RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR"
-    RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR -> showString "RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR"
-    RayTracingShaderGroupTypeKHR x -> showParen (p >= 11) (showString "RayTracingShaderGroupTypeKHR " . showsPrec 11 x)
-
-instance Read RayTracingShaderGroupTypeKHR where
-  readPrec = parens (choose [("RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR", pure RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR)
-                            , ("RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR", pure RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR)
-                            , ("RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR", pure RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "RayTracingShaderGroupTypeKHR")
-                       v <- step readPrec
-                       pure (RayTracingShaderGroupTypeKHR v)))
-
-
-type KHR_RAY_TRACING_SPEC_VERSION = 8
-
--- No documentation found for TopLevel "VK_KHR_RAY_TRACING_SPEC_VERSION"
-pattern KHR_RAY_TRACING_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_RAY_TRACING_SPEC_VERSION = 8
-
-
-type KHR_RAY_TRACING_EXTENSION_NAME = "VK_KHR_ray_tracing"
-
--- No documentation found for TopLevel "VK_KHR_RAY_TRACING_EXTENSION_NAME"
-pattern KHR_RAY_TRACING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_RAY_TRACING_EXTENSION_NAME = "VK_KHR_ray_tracing"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_ray_tracing.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_ray_tracing.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_ray_tracing.hs-boot
+++ /dev/null
@@ -1,274 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_ray_tracing  ( AabbPositionsKHR
-                                                      , AccelerationStructureBuildGeometryInfoKHR
-                                                      , AccelerationStructureBuildOffsetInfoKHR
-                                                      , AccelerationStructureCreateGeometryTypeInfoKHR
-                                                      , AccelerationStructureCreateInfoKHR
-                                                      , AccelerationStructureDeviceAddressInfoKHR
-                                                      , AccelerationStructureGeometryAabbsDataKHR
-                                                      , AccelerationStructureGeometryInstancesDataKHR
-                                                      , AccelerationStructureGeometryKHR
-                                                      , AccelerationStructureGeometryTrianglesDataKHR
-                                                      , AccelerationStructureInstanceKHR
-                                                      , AccelerationStructureMemoryRequirementsInfoKHR
-                                                      , AccelerationStructureVersionKHR
-                                                      , BindAccelerationStructureMemoryInfoKHR
-                                                      , CopyAccelerationStructureInfoKHR
-                                                      , CopyAccelerationStructureToMemoryInfoKHR
-                                                      , CopyMemoryToAccelerationStructureInfoKHR
-                                                      , PhysicalDeviceRayTracingFeaturesKHR
-                                                      , PhysicalDeviceRayTracingPropertiesKHR
-                                                      , RayTracingPipelineCreateInfoKHR
-                                                      , RayTracingPipelineInterfaceCreateInfoKHR
-                                                      , RayTracingShaderGroupCreateInfoKHR
-                                                      , StridedBufferRegionKHR
-                                                      , TraceRaysIndirectCommandKHR
-                                                      , TransformMatrixKHR
-                                                      , WriteDescriptorSetAccelerationStructureKHR
-                                                      , CopyAccelerationStructureModeKHR
-                                                      , GeometryFlagBitsKHR
-                                                      , GeometryFlagsKHR
-                                                      , GeometryInstanceFlagBitsKHR
-                                                      , GeometryInstanceFlagsKHR
-                                                      , BuildAccelerationStructureFlagBitsKHR
-                                                      , BuildAccelerationStructureFlagsKHR
-                                                      , AccelerationStructureTypeKHR
-                                                      , GeometryTypeKHR
-                                                      , RayTracingShaderGroupTypeKHR
-                                                      , AccelerationStructureMemoryRequirementsTypeKHR
-                                                      ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data AabbPositionsKHR
-
-instance ToCStruct AabbPositionsKHR
-instance Show AabbPositionsKHR
-
-instance FromCStruct AabbPositionsKHR
-
-
-type role AccelerationStructureBuildGeometryInfoKHR nominal
-data AccelerationStructureBuildGeometryInfoKHR (es :: [Type])
-
-instance PokeChain es => ToCStruct (AccelerationStructureBuildGeometryInfoKHR es)
-instance Show (Chain es) => Show (AccelerationStructureBuildGeometryInfoKHR es)
-
-
-data AccelerationStructureBuildOffsetInfoKHR
-
-instance ToCStruct AccelerationStructureBuildOffsetInfoKHR
-instance Show AccelerationStructureBuildOffsetInfoKHR
-
-instance FromCStruct AccelerationStructureBuildOffsetInfoKHR
-
-
-data AccelerationStructureCreateGeometryTypeInfoKHR
-
-instance ToCStruct AccelerationStructureCreateGeometryTypeInfoKHR
-instance Show AccelerationStructureCreateGeometryTypeInfoKHR
-
-instance FromCStruct AccelerationStructureCreateGeometryTypeInfoKHR
-
-
-data AccelerationStructureCreateInfoKHR
-
-instance ToCStruct AccelerationStructureCreateInfoKHR
-instance Show AccelerationStructureCreateInfoKHR
-
-instance FromCStruct AccelerationStructureCreateInfoKHR
-
-
-data AccelerationStructureDeviceAddressInfoKHR
-
-instance ToCStruct AccelerationStructureDeviceAddressInfoKHR
-instance Show AccelerationStructureDeviceAddressInfoKHR
-
-instance FromCStruct AccelerationStructureDeviceAddressInfoKHR
-
-
-data AccelerationStructureGeometryAabbsDataKHR
-
-instance ToCStruct AccelerationStructureGeometryAabbsDataKHR
-instance Show AccelerationStructureGeometryAabbsDataKHR
-
-
-data AccelerationStructureGeometryInstancesDataKHR
-
-instance ToCStruct AccelerationStructureGeometryInstancesDataKHR
-instance Show AccelerationStructureGeometryInstancesDataKHR
-
-
-data AccelerationStructureGeometryKHR
-
-instance ToCStruct AccelerationStructureGeometryKHR
-instance Show AccelerationStructureGeometryKHR
-
-
-data AccelerationStructureGeometryTrianglesDataKHR
-
-instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR
-instance Show AccelerationStructureGeometryTrianglesDataKHR
-
-
-data AccelerationStructureInstanceKHR
-
-instance ToCStruct AccelerationStructureInstanceKHR
-instance Show AccelerationStructureInstanceKHR
-
-instance FromCStruct AccelerationStructureInstanceKHR
-
-
-data AccelerationStructureMemoryRequirementsInfoKHR
-
-instance ToCStruct AccelerationStructureMemoryRequirementsInfoKHR
-instance Show AccelerationStructureMemoryRequirementsInfoKHR
-
-instance FromCStruct AccelerationStructureMemoryRequirementsInfoKHR
-
-
-data AccelerationStructureVersionKHR
-
-instance ToCStruct AccelerationStructureVersionKHR
-instance Show AccelerationStructureVersionKHR
-
-instance FromCStruct AccelerationStructureVersionKHR
-
-
-data BindAccelerationStructureMemoryInfoKHR
-
-instance ToCStruct BindAccelerationStructureMemoryInfoKHR
-instance Show BindAccelerationStructureMemoryInfoKHR
-
-instance FromCStruct BindAccelerationStructureMemoryInfoKHR
-
-
-type role CopyAccelerationStructureInfoKHR nominal
-data CopyAccelerationStructureInfoKHR (es :: [Type])
-
-instance PokeChain es => ToCStruct (CopyAccelerationStructureInfoKHR es)
-instance Show (Chain es) => Show (CopyAccelerationStructureInfoKHR es)
-
-instance PeekChain es => FromCStruct (CopyAccelerationStructureInfoKHR es)
-
-
-type role CopyAccelerationStructureToMemoryInfoKHR nominal
-data CopyAccelerationStructureToMemoryInfoKHR (es :: [Type])
-
-instance PokeChain es => ToCStruct (CopyAccelerationStructureToMemoryInfoKHR es)
-instance Show (Chain es) => Show (CopyAccelerationStructureToMemoryInfoKHR es)
-
-
-type role CopyMemoryToAccelerationStructureInfoKHR nominal
-data CopyMemoryToAccelerationStructureInfoKHR (es :: [Type])
-
-instance PokeChain es => ToCStruct (CopyMemoryToAccelerationStructureInfoKHR es)
-instance Show (Chain es) => Show (CopyMemoryToAccelerationStructureInfoKHR es)
-
-
-data PhysicalDeviceRayTracingFeaturesKHR
-
-instance ToCStruct PhysicalDeviceRayTracingFeaturesKHR
-instance Show PhysicalDeviceRayTracingFeaturesKHR
-
-instance FromCStruct PhysicalDeviceRayTracingFeaturesKHR
-
-
-data PhysicalDeviceRayTracingPropertiesKHR
-
-instance ToCStruct PhysicalDeviceRayTracingPropertiesKHR
-instance Show PhysicalDeviceRayTracingPropertiesKHR
-
-instance FromCStruct PhysicalDeviceRayTracingPropertiesKHR
-
-
-type role RayTracingPipelineCreateInfoKHR nominal
-data RayTracingPipelineCreateInfoKHR (es :: [Type])
-
-instance PokeChain es => ToCStruct (RayTracingPipelineCreateInfoKHR es)
-instance Show (Chain es) => Show (RayTracingPipelineCreateInfoKHR es)
-
-instance PeekChain es => FromCStruct (RayTracingPipelineCreateInfoKHR es)
-
-
-data RayTracingPipelineInterfaceCreateInfoKHR
-
-instance ToCStruct RayTracingPipelineInterfaceCreateInfoKHR
-instance Show RayTracingPipelineInterfaceCreateInfoKHR
-
-instance FromCStruct RayTracingPipelineInterfaceCreateInfoKHR
-
-
-data RayTracingShaderGroupCreateInfoKHR
-
-instance ToCStruct RayTracingShaderGroupCreateInfoKHR
-instance Show RayTracingShaderGroupCreateInfoKHR
-
-instance FromCStruct RayTracingShaderGroupCreateInfoKHR
-
-
-data StridedBufferRegionKHR
-
-instance ToCStruct StridedBufferRegionKHR
-instance Show StridedBufferRegionKHR
-
-instance FromCStruct StridedBufferRegionKHR
-
-
-data TraceRaysIndirectCommandKHR
-
-instance ToCStruct TraceRaysIndirectCommandKHR
-instance Show TraceRaysIndirectCommandKHR
-
-instance FromCStruct TraceRaysIndirectCommandKHR
-
-
-data TransformMatrixKHR
-
-instance ToCStruct TransformMatrixKHR
-instance Show TransformMatrixKHR
-
-instance FromCStruct TransformMatrixKHR
-
-
-data WriteDescriptorSetAccelerationStructureKHR
-
-instance ToCStruct WriteDescriptorSetAccelerationStructureKHR
-instance Show WriteDescriptorSetAccelerationStructureKHR
-
-instance FromCStruct WriteDescriptorSetAccelerationStructureKHR
-
-
-data CopyAccelerationStructureModeKHR
-
-
-data GeometryFlagBitsKHR
-
-type GeometryFlagsKHR = GeometryFlagBitsKHR
-
-
-data GeometryInstanceFlagBitsKHR
-
-type GeometryInstanceFlagsKHR = GeometryInstanceFlagBitsKHR
-
-
-data BuildAccelerationStructureFlagBitsKHR
-
-type BuildAccelerationStructureFlagsKHR = BuildAccelerationStructureFlagBitsKHR
-
-
-data AccelerationStructureTypeKHR
-
-
-data GeometryTypeKHR
-
-
-data RayTracingShaderGroupTypeKHR
-
-
-data AccelerationStructureMemoryRequirementsTypeKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_relaxed_block_layout.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_relaxed_block_layout.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_relaxed_block_layout.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_relaxed_block_layout  ( KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION
-                                                               , pattern KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION
-                                                               , KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME
-                                                               , pattern KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME
-                                                               ) where
-
-import Data.String (IsString)
-
-type KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION"
-pattern KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION = 1
-
-
-type KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME = "VK_KHR_relaxed_block_layout"
-
--- No documentation found for TopLevel "VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME"
-pattern KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_sampler_mirror_clamp_to_edge.hs
+++ /dev/null
@@ -1,27 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge  ( pattern SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR
-                                                                       , KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION
-                                                                       , pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION
-                                                                       , KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME
-                                                                       , pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME
-                                                                       ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core10.Enums.SamplerAddressMode (SamplerAddressMode(SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE))
--- No documentation found for TopLevel "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR"
-pattern SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR = SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
-
-
-type KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION"
-pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION = 3
-
-
-type KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME = "VK_KHR_sampler_mirror_clamp_to_edge"
-
--- No documentation found for TopLevel "VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME"
-pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs
+++ /dev/null
@@ -1,478 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion  ( pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR
-                                                                   , pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR
-                                                                   , pattern STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR
-                                                                   , pattern STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR
-                                                                   , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR
-                                                                   , pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR
-                                                                   , pattern DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT
-                                                                   , pattern OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR
-                                                                   , pattern FORMAT_G8B8G8R8_422_UNORM_KHR
-                                                                   , pattern FORMAT_B8G8R8G8_422_UNORM_KHR
-                                                                   , pattern FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR
-                                                                   , pattern FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR
-                                                                   , pattern FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR
-                                                                   , pattern FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR
-                                                                   , pattern FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR
-                                                                   , pattern FORMAT_R10X6_UNORM_PACK16_KHR
-                                                                   , pattern FORMAT_R10X6G10X6_UNORM_2PACK16_KHR
-                                                                   , pattern FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR
-                                                                   , pattern FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR
-                                                                   , pattern FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR
-                                                                   , pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR
-                                                                   , pattern FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR
-                                                                   , pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR
-                                                                   , pattern FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR
-                                                                   , pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR
-                                                                   , pattern FORMAT_R12X4_UNORM_PACK16_KHR
-                                                                   , pattern FORMAT_R12X4G12X4_UNORM_2PACK16_KHR
-                                                                   , pattern FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR
-                                                                   , pattern FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR
-                                                                   , pattern FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR
-                                                                   , pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR
-                                                                   , pattern FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR
-                                                                   , pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR
-                                                                   , pattern FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR
-                                                                   , pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR
-                                                                   , pattern FORMAT_G16B16G16R16_422_UNORM_KHR
-                                                                   , pattern FORMAT_B16G16R16G16_422_UNORM_KHR
-                                                                   , pattern FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR
-                                                                   , pattern FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR
-                                                                   , pattern FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR
-                                                                   , pattern FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR
-                                                                   , pattern FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR
-                                                                   , pattern IMAGE_ASPECT_PLANE_0_BIT_KHR
-                                                                   , pattern IMAGE_ASPECT_PLANE_1_BIT_KHR
-                                                                   , pattern IMAGE_ASPECT_PLANE_2_BIT_KHR
-                                                                   , pattern IMAGE_CREATE_DISJOINT_BIT_KHR
-                                                                   , pattern FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR
-                                                                   , pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR
-                                                                   , pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR
-                                                                   , pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR
-                                                                   , pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR
-                                                                   , pattern FORMAT_FEATURE_DISJOINT_BIT_KHR
-                                                                   , pattern FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR
-                                                                   , pattern SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR
-                                                                   , pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR
-                                                                   , pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR
-                                                                   , pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR
-                                                                   , pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR
-                                                                   , pattern SAMPLER_YCBCR_RANGE_ITU_FULL_KHR
-                                                                   , pattern SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR
-                                                                   , pattern CHROMA_LOCATION_COSITED_EVEN_KHR
-                                                                   , pattern CHROMA_LOCATION_MIDPOINT_KHR
-                                                                   , createSamplerYcbcrConversionKHR
-                                                                   , destroySamplerYcbcrConversionKHR
-                                                                   , SamplerYcbcrConversionKHR
-                                                                   , SamplerYcbcrModelConversionKHR
-                                                                   , SamplerYcbcrRangeKHR
-                                                                   , ChromaLocationKHR
-                                                                   , SamplerYcbcrConversionInfoKHR
-                                                                   , SamplerYcbcrConversionCreateInfoKHR
-                                                                   , BindImagePlaneMemoryInfoKHR
-                                                                   , ImagePlaneMemoryRequirementsInfoKHR
-                                                                   , PhysicalDeviceSamplerYcbcrConversionFeaturesKHR
-                                                                   , SamplerYcbcrConversionImageFormatPropertiesKHR
-                                                                   , KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION
-                                                                   , pattern KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION
-                                                                   , KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME
-                                                                   , pattern KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME
-                                                                   , DebugReportObjectTypeEXT(..)
-                                                                   ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (createSamplerYcbcrConversion)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (destroySamplerYcbcrConversion)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (BindImagePlaneMemoryInfo)
-import Graphics.Vulkan.Core11.Enums.ChromaLocation (ChromaLocation)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (ImagePlaneMemoryRequirementsInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
-import Graphics.Vulkan.Core11.Handles (SamplerYcbcrConversion)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionCreateInfo)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionImageFormatProperties)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionInfo)
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion)
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange)
-import Graphics.Vulkan.Core11.Enums.ChromaLocation (ChromaLocation(CHROMA_LOCATION_COSITED_EVEN))
-import Graphics.Vulkan.Core11.Enums.ChromaLocation (ChromaLocation(CHROMA_LOCATION_MIDPOINT))
-import Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_B16G16R16G16_422_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_B8G8R8G8_422_UNORM))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_DISJOINT_BIT))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT))
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
-import Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G16B16G16R16_422_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G16_B16R16_2PLANE_420_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G16_B16R16_2PLANE_422_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G16_B16_R16_3PLANE_420_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G16_B16_R16_3PLANE_422_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G16_B16_R16_3PLANE_444_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G8B8G8R8_422_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G8_B8R8_2PLANE_420_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G8_B8R8_2PLANE_422_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G8_B8_R8_3PLANE_420_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G8_B8_R8_3PLANE_422_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_G8_B8_R8_3PLANE_444_UNORM))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_R10X6G10X6_UNORM_2PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_R10X6_UNORM_PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_R12X4G12X4_UNORM_2PACK16))
-import Graphics.Vulkan.Core10.Enums.Format (Format(FORMAT_R12X4_UNORM_PACK16))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits(IMAGE_ASPECT_PLANE_0_BIT))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits(IMAGE_ASPECT_PLANE_1_BIT))
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
-import Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits(IMAGE_ASPECT_PLANE_2_BIT))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_DISJOINT_BIT))
-import Graphics.Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange(SAMPLER_YCBCR_RANGE_ITU_FULL))
-import Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange(SAMPLER_YCBCR_RANGE_ITU_NARROW))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO))
-import Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR"
-pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR"
-pattern STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR"
-pattern STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT
-
-
--- No documentation found for TopLevel "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR"
-pattern OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION
-
-
--- No documentation found for TopLevel "VK_FORMAT_G8B8G8R8_422_UNORM_KHR"
-pattern FORMAT_G8B8G8R8_422_UNORM_KHR = FORMAT_G8B8G8R8_422_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_B8G8R8G8_422_UNORM_KHR"
-pattern FORMAT_B8G8R8G8_422_UNORM_KHR = FORMAT_B8G8R8G8_422_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR"
-pattern FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = FORMAT_G8_B8_R8_3PLANE_420_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR"
-pattern FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = FORMAT_G8_B8R8_2PLANE_420_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR"
-pattern FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = FORMAT_G8_B8_R8_3PLANE_422_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR"
-pattern FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = FORMAT_G8_B8R8_2PLANE_422_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR"
-pattern FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = FORMAT_G8_B8_R8_3PLANE_444_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_R10X6_UNORM_PACK16_KHR"
-pattern FORMAT_R10X6_UNORM_PACK16_KHR = FORMAT_R10X6_UNORM_PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR"
-pattern FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = FORMAT_R10X6G10X6_UNORM_2PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR"
-pattern FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR"
-pattern FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR"
-pattern FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR"
-pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR"
-pattern FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR"
-pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR"
-pattern FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR"
-pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_R12X4_UNORM_PACK16_KHR"
-pattern FORMAT_R12X4_UNORM_PACK16_KHR = FORMAT_R12X4_UNORM_PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR"
-pattern FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = FORMAT_R12X4G12X4_UNORM_2PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR"
-pattern FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR"
-pattern FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR"
-pattern FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR"
-pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR"
-pattern FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR"
-pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR"
-pattern FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR"
-pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
-
-
--- No documentation found for TopLevel "VK_FORMAT_G16B16G16R16_422_UNORM_KHR"
-pattern FORMAT_G16B16G16R16_422_UNORM_KHR = FORMAT_G16B16G16R16_422_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_B16G16R16G16_422_UNORM_KHR"
-pattern FORMAT_B16G16R16G16_422_UNORM_KHR = FORMAT_B16G16R16G16_422_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR"
-pattern FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = FORMAT_G16_B16_R16_3PLANE_420_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR"
-pattern FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = FORMAT_G16_B16R16_2PLANE_420_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR"
-pattern FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = FORMAT_G16_B16_R16_3PLANE_422_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR"
-pattern FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = FORMAT_G16_B16R16_2PLANE_422_UNORM
-
-
--- No documentation found for TopLevel "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR"
-pattern FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = FORMAT_G16_B16_R16_3PLANE_444_UNORM
-
-
--- No documentation found for TopLevel "VK_IMAGE_ASPECT_PLANE_0_BIT_KHR"
-pattern IMAGE_ASPECT_PLANE_0_BIT_KHR = IMAGE_ASPECT_PLANE_0_BIT
-
-
--- No documentation found for TopLevel "VK_IMAGE_ASPECT_PLANE_1_BIT_KHR"
-pattern IMAGE_ASPECT_PLANE_1_BIT_KHR = IMAGE_ASPECT_PLANE_1_BIT
-
-
--- No documentation found for TopLevel "VK_IMAGE_ASPECT_PLANE_2_BIT_KHR"
-pattern IMAGE_ASPECT_PLANE_2_BIT_KHR = IMAGE_ASPECT_PLANE_2_BIT
-
-
--- No documentation found for TopLevel "VK_IMAGE_CREATE_DISJOINT_BIT_KHR"
-pattern IMAGE_CREATE_DISJOINT_BIT_KHR = IMAGE_CREATE_DISJOINT_BIT
-
-
--- No documentation found for TopLevel "VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR"
-pattern FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
-
-
--- No documentation found for TopLevel "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR"
-pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 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 FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 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 FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 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 FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
-
-
--- No documentation found for TopLevel "VK_FORMAT_FEATURE_DISJOINT_BIT_KHR"
-pattern FORMAT_FEATURE_DISJOINT_BIT_KHR = FORMAT_FEATURE_DISJOINT_BIT
-
-
--- No documentation found for TopLevel "VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR"
-pattern FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
-
-
--- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR"
-pattern SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY
-
-
--- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR"
-pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY
-
-
--- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR"
-pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
-
-
--- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR"
-pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
-
-
--- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR"
-pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
-
-
--- No documentation found for TopLevel "VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR"
-pattern SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = SAMPLER_YCBCR_RANGE_ITU_FULL
-
-
--- No documentation found for TopLevel "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR"
-pattern SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = SAMPLER_YCBCR_RANGE_ITU_NARROW
-
-
--- No documentation found for TopLevel "VK_CHROMA_LOCATION_COSITED_EVEN_KHR"
-pattern CHROMA_LOCATION_COSITED_EVEN_KHR = CHROMA_LOCATION_COSITED_EVEN
-
-
--- No documentation found for TopLevel "VK_CHROMA_LOCATION_MIDPOINT_KHR"
-pattern CHROMA_LOCATION_MIDPOINT_KHR = CHROMA_LOCATION_MIDPOINT
-
-
--- No documentation found for TopLevel "vkCreateSamplerYcbcrConversionKHR"
-createSamplerYcbcrConversionKHR = createSamplerYcbcrConversion
-
-
--- No documentation found for TopLevel "vkDestroySamplerYcbcrConversionKHR"
-destroySamplerYcbcrConversionKHR = destroySamplerYcbcrConversion
-
-
--- No documentation found for TopLevel "VkSamplerYcbcrConversionKHR"
-type SamplerYcbcrConversionKHR = SamplerYcbcrConversion
-
-
--- No documentation found for TopLevel "VkSamplerYcbcrModelConversionKHR"
-type SamplerYcbcrModelConversionKHR = SamplerYcbcrModelConversion
-
-
--- No documentation found for TopLevel "VkSamplerYcbcrRangeKHR"
-type SamplerYcbcrRangeKHR = SamplerYcbcrRange
-
-
--- No documentation found for TopLevel "VkChromaLocationKHR"
-type ChromaLocationKHR = ChromaLocation
-
-
--- No documentation found for TopLevel "VkSamplerYcbcrConversionInfoKHR"
-type SamplerYcbcrConversionInfoKHR = SamplerYcbcrConversionInfo
-
-
--- No documentation found for TopLevel "VkSamplerYcbcrConversionCreateInfoKHR"
-type SamplerYcbcrConversionCreateInfoKHR = SamplerYcbcrConversionCreateInfo
-
-
--- No documentation found for TopLevel "VkBindImagePlaneMemoryInfoKHR"
-type BindImagePlaneMemoryInfoKHR = BindImagePlaneMemoryInfo
-
-
--- No documentation found for TopLevel "VkImagePlaneMemoryRequirementsInfoKHR"
-type ImagePlaneMemoryRequirementsInfoKHR = ImagePlaneMemoryRequirementsInfo
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR"
-type PhysicalDeviceSamplerYcbcrConversionFeaturesKHR = PhysicalDeviceSamplerYcbcrConversionFeatures
-
-
--- No documentation found for TopLevel "VkSamplerYcbcrConversionImageFormatPropertiesKHR"
-type SamplerYcbcrConversionImageFormatPropertiesKHR = SamplerYcbcrConversionImageFormatProperties
-
-
-type KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION = 14
-
--- No documentation found for TopLevel "VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION"
-pattern KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION = 14
-
-
-type KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME = "VK_KHR_sampler_ycbcr_conversion"
-
--- No documentation found for TopLevel "VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME"
-pattern KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME = "VK_KHR_sampler_ycbcr_conversion"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_separate_depth_stencil_layouts.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_separate_depth_stencil_layouts.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_separate_depth_stencil_layouts.hs
+++ /dev/null
@@ -1,81 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR
-                                                                         , pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR
-                                                                         , pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR
-                                                                         , pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR
-                                                                         , pattern IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR
-                                                                         , pattern IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR
-                                                                         , pattern IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR
-                                                                         , PhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR
-                                                                         , AttachmentReferenceStencilLayoutKHR
-                                                                         , AttachmentDescriptionStencilLayoutKHR
-                                                                         , KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION
-                                                                         , pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION
-                                                                         , KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME
-                                                                         , pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME
-                                                                         ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentDescriptionStencilLayout)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentReferenceStencilLayout)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL))
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL))
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL))
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR"
-pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR = STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR"
-pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT
-
-
--- No documentation found for TopLevel "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR"
-pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR = IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL
-
-
--- No documentation found for TopLevel "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR"
-pattern IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR = IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
-
-
--- No documentation found for TopLevel "VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR"
-pattern IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR = IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
-
-
--- No documentation found for TopLevel "VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR"
-pattern IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR = IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR"
-type PhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR = PhysicalDeviceSeparateDepthStencilLayoutsFeatures
-
-
--- No documentation found for TopLevel "VkAttachmentReferenceStencilLayoutKHR"
-type AttachmentReferenceStencilLayoutKHR = AttachmentReferenceStencilLayout
-
-
--- No documentation found for TopLevel "VkAttachmentDescriptionStencilLayoutKHR"
-type AttachmentDescriptionStencilLayoutKHR = AttachmentDescriptionStencilLayout
-
-
-type KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION"
-pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION = 1
-
-
-type KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME = "VK_KHR_separate_depth_stencil_layouts"
-
--- No documentation found for TopLevel "VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME"
-pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME = "VK_KHR_separate_depth_stencil_layouts"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_atomic_int64.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shader_atomic_int64.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_atomic_int64.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_shader_atomic_int64  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR
-                                                              , PhysicalDeviceShaderAtomicInt64FeaturesKHR
-                                                              , KHR_SHADER_ATOMIC_INT64_SPEC_VERSION
-                                                              , pattern KHR_SHADER_ATOMIC_INT64_SPEC_VERSION
-                                                              , KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME
-                                                              , pattern KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME
-                                                              ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceShaderAtomicInt64FeaturesKHR"
-type PhysicalDeviceShaderAtomicInt64FeaturesKHR = PhysicalDeviceShaderAtomicInt64Features
-
-
-type KHR_SHADER_ATOMIC_INT64_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION"
-pattern KHR_SHADER_ATOMIC_INT64_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SHADER_ATOMIC_INT64_SPEC_VERSION = 1
-
-
-type KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME = "VK_KHR_shader_atomic_int64"
-
--- No documentation found for TopLevel "VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME"
-pattern KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME = "VK_KHR_shader_atomic_int64"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_clock.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shader_clock.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_clock.hs
+++ /dev/null
@@ -1,108 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_shader_clock  ( PhysicalDeviceShaderClockFeaturesKHR(..)
-                                                       , KHR_SHADER_CLOCK_SPEC_VERSION
-                                                       , pattern KHR_SHADER_CLOCK_SPEC_VERSION
-                                                       , KHR_SHADER_CLOCK_EXTENSION_NAME
-                                                       , pattern KHR_SHADER_CLOCK_EXTENSION_NAME
-                                                       ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR))
--- | VkPhysicalDeviceShaderClockFeaturesKHR - Structure describing features
--- supported by VK_KHR_shader_clock
---
--- = Description
---
--- If the 'PhysicalDeviceShaderClockFeaturesKHR' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceShaderClockFeaturesKHR' can also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable the features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderClockFeaturesKHR = PhysicalDeviceShaderClockFeaturesKHR
-  { -- | @shaderSubgroupClock@ indicates whether shaders /can/ support @Subgroup@
-    -- scoped clock reads.
-    shaderSubgroupClock :: Bool
-  , -- | @shaderDeviceClock@ indicates whether shaders /can/ support
-    -- 'Graphics.Vulkan.Core10.Handles.Device' scoped clock reads.
-    shaderDeviceClock :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderClockFeaturesKHR
-
-instance ToCStruct PhysicalDeviceShaderClockFeaturesKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderClockFeaturesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderSubgroupClock))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderDeviceClock))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceShaderClockFeaturesKHR where
-  peekCStruct p = do
-    shaderSubgroupClock <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    shaderDeviceClock <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceShaderClockFeaturesKHR
-             (bool32ToBool shaderSubgroupClock) (bool32ToBool shaderDeviceClock)
-
-instance Storable PhysicalDeviceShaderClockFeaturesKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderClockFeaturesKHR where
-  zero = PhysicalDeviceShaderClockFeaturesKHR
-           zero
-           zero
-
-
-type KHR_SHADER_CLOCK_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SHADER_CLOCK_SPEC_VERSION"
-pattern KHR_SHADER_CLOCK_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SHADER_CLOCK_SPEC_VERSION = 1
-
-
-type KHR_SHADER_CLOCK_EXTENSION_NAME = "VK_KHR_shader_clock"
-
--- No documentation found for TopLevel "VK_KHR_SHADER_CLOCK_EXTENSION_NAME"
-pattern KHR_SHADER_CLOCK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SHADER_CLOCK_EXTENSION_NAME = "VK_KHR_shader_clock"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_clock.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_shader_clock.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_clock.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_shader_clock  (PhysicalDeviceShaderClockFeaturesKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderClockFeaturesKHR
-
-instance ToCStruct PhysicalDeviceShaderClockFeaturesKHR
-instance Show PhysicalDeviceShaderClockFeaturesKHR
-
-instance FromCStruct PhysicalDeviceShaderClockFeaturesKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_shader_draw_parameters  ( KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION
-                                                                 , pattern KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION
-                                                                 , KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME
-                                                                 , pattern KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME
-                                                                 ) where
-
-import Data.String (IsString)
-
-type KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION"
-pattern KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION = 1
-
-
-type KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME = "VK_KHR_shader_draw_parameters"
-
--- No documentation found for TopLevel "VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME"
-pattern KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME = "VK_KHR_shader_draw_parameters"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_float16_int8.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shader_float16_int8.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_float16_int8.hs
+++ /dev/null
@@ -1,43 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_shader_float16_int8  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR
-                                                              , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR
-                                                              , PhysicalDeviceShaderFloat16Int8FeaturesKHR
-                                                              , PhysicalDeviceFloat16Int8FeaturesKHR
-                                                              , KHR_SHADER_FLOAT16_INT8_SPEC_VERSION
-                                                              , pattern KHR_SHADER_FLOAT16_INT8_SPEC_VERSION
-                                                              , KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME
-                                                              , pattern KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME
-                                                              ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8 (PhysicalDeviceShaderFloat16Int8Features)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceShaderFloat16Int8FeaturesKHR"
-type PhysicalDeviceShaderFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceFloat16Int8FeaturesKHR"
-type PhysicalDeviceFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features
-
-
-type KHR_SHADER_FLOAT16_INT8_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION"
-pattern KHR_SHADER_FLOAT16_INT8_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SHADER_FLOAT16_INT8_SPEC_VERSION = 1
-
-
-type KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME = "VK_KHR_shader_float16_int8"
-
--- No documentation found for TopLevel "VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME"
-pattern KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME = "VK_KHR_shader_float16_int8"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_float_controls.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shader_float_controls.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_float_controls.hs
+++ /dev/null
@@ -1,57 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_shader_float_controls  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR
-                                                                , pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR
-                                                                , pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR
-                                                                , pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR
-                                                                , ShaderFloatControlsIndependenceKHR
-                                                                , PhysicalDeviceFloatControlsPropertiesKHR
-                                                                , KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION
-                                                                , pattern KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION
-                                                                , KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME
-                                                                , pattern KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME
-                                                                ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls (PhysicalDeviceFloatControlsProperties)
-import Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence)
-import Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence(SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY))
-import Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence(SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL))
-import Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence(SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR"
-pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR = SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY
-
-
--- No documentation found for TopLevel "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR"
-pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
-
-
--- No documentation found for TopLevel "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR"
-pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE
-
-
--- No documentation found for TopLevel "VkShaderFloatControlsIndependenceKHR"
-type ShaderFloatControlsIndependenceKHR = ShaderFloatControlsIndependence
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceFloatControlsPropertiesKHR"
-type PhysicalDeviceFloatControlsPropertiesKHR = PhysicalDeviceFloatControlsProperties
-
-
-type KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION = 4
-
--- No documentation found for TopLevel "VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION"
-pattern KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION = 4
-
-
-type KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME = "VK_KHR_shader_float_controls"
-
--- No documentation found for TopLevel "VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME"
-pattern KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME = "VK_KHR_shader_float_controls"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_non_semantic_info.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shader_non_semantic_info.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_non_semantic_info.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_shader_non_semantic_info  ( KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION
-                                                                   , pattern KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION
-                                                                   , KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME
-                                                                   , pattern KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME
-                                                                   ) where
-
-import Data.String (IsString)
-
-type KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION"
-pattern KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION = 1
-
-
-type KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME = "VK_KHR_shader_non_semantic_info"
-
--- No documentation found for TopLevel "VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME"
-pattern KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME = "VK_KHR_shader_non_semantic_info"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_subgroup_extended_types.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shader_subgroup_extended_types.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_subgroup_extended_types.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_shader_subgroup_extended_types  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR
-                                                                         , PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR
-                                                                         , KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION
-                                                                         , pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION
-                                                                         , KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME
-                                                                         , pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME
-                                                                         ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types (PhysicalDeviceShaderSubgroupExtendedTypesFeatures)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR"
-type PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR = PhysicalDeviceShaderSubgroupExtendedTypesFeatures
-
-
-type KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION"
-pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION = 1
-
-
-type KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME = "VK_KHR_shader_subgroup_extended_types"
-
--- No documentation found for TopLevel "VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME"
-pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME = "VK_KHR_shader_subgroup_extended_types"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs
+++ /dev/null
@@ -1,336 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image  ( getSwapchainStatusKHR
-                                                                   , SharedPresentSurfaceCapabilitiesKHR(..)
-                                                                   , PresentModeKHR( PRESENT_MODE_IMMEDIATE_KHR
-                                                                                   , PRESENT_MODE_MAILBOX_KHR
-                                                                                   , PRESENT_MODE_FIFO_KHR
-                                                                                   , PRESENT_MODE_FIFO_RELAXED_KHR
-                                                                                   , PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
-                                                                                   , PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR
-                                                                                   , ..
-                                                                                   )
-                                                                   , KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION
-                                                                   , pattern KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION
-                                                                   , KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME
-                                                                   , pattern KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME
-                                                                   , SwapchainKHR(..)
-                                                                   ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetSwapchainStatusKHR))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetSwapchainStatusKHR
-  :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result) -> Ptr Device_T -> SwapchainKHR -> IO Result
-
--- | vkGetSwapchainStatusKHR - Get a swapchain’s status
---
--- = Parameters
---
--- -   @device@ is the device associated with @swapchain@.
---
--- -   @swapchain@ is the swapchain to query.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @swapchain@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handle
---
--- -   Both of @device@, and @swapchain@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Host Synchronization
---
--- -   Host access to @swapchain@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUBOPTIMAL_KHR'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-getSwapchainStatusKHR :: forall io . MonadIO io => Device -> SwapchainKHR -> io (Result)
-getSwapchainStatusKHR device swapchain = liftIO $ do
-  let vkGetSwapchainStatusKHR' = mkVkGetSwapchainStatusKHR (pVkGetSwapchainStatusKHR (deviceCmds (device :: Device)))
-  r <- vkGetSwapchainStatusKHR' (deviceHandle (device)) (swapchain)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
--- | VkSharedPresentSurfaceCapabilitiesKHR - structure describing
--- capabilities of a surface for shared presentation
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SharedPresentSurfaceCapabilitiesKHR = SharedPresentSurfaceCapabilitiesKHR
-  { -- | @sharedPresentSupportedUsageFlags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
-    -- representing the ways the application /can/ use the shared presentable
-    -- image from a swapchain created with 'PresentModeKHR' set to
-    -- 'PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR' or
-    -- 'PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR' for the surface on the
-    -- specified device.
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
-    -- /must/ be included in the set but implementations /may/ support
-    -- additional usages.
-    sharedPresentSupportedUsageFlags :: ImageUsageFlags }
-  deriving (Typeable)
-deriving instance Show SharedPresentSurfaceCapabilitiesKHR
-
-instance ToCStruct SharedPresentSurfaceCapabilitiesKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SharedPresentSurfaceCapabilitiesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageUsageFlags)) (sharedPresentSupportedUsageFlags)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct SharedPresentSurfaceCapabilitiesKHR where
-  peekCStruct p = do
-    sharedPresentSupportedUsageFlags <- peek @ImageUsageFlags ((p `plusPtr` 16 :: Ptr ImageUsageFlags))
-    pure $ SharedPresentSurfaceCapabilitiesKHR
-             sharedPresentSupportedUsageFlags
-
-instance Storable SharedPresentSurfaceCapabilitiesKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SharedPresentSurfaceCapabilitiesKHR where
-  zero = SharedPresentSurfaceCapabilitiesKHR
-           zero
-
-
--- | VkPresentModeKHR - presentation mode supported for a surface
---
--- = Description
---
--- The supported
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' of
--- the presentable images of a swapchain created for a surface /may/ differ
--- depending on the presentation mode, and can be determined as per the
--- table below:
---
--- +----------------------------------------------+-------------------------------------------------------------------------------------------+
--- | Presentation mode                            | Image usage flags                                                                         |
--- +==============================================+===========================================================================================+
--- | 'PRESENT_MODE_IMMEDIATE_KHR'                 | 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@supportedUsageFlags@ |
--- +----------------------------------------------+-------------------------------------------------------------------------------------------+
--- | 'PRESENT_MODE_MAILBOX_KHR'                   | 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@supportedUsageFlags@ |
--- +----------------------------------------------+-------------------------------------------------------------------------------------------+
--- | 'PRESENT_MODE_FIFO_KHR'                      | 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@supportedUsageFlags@ |
--- +----------------------------------------------+-------------------------------------------------------------------------------------------+
--- | 'PRESENT_MODE_FIFO_RELAXED_KHR'              | 'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@supportedUsageFlags@ |
--- +----------------------------------------------+-------------------------------------------------------------------------------------------+
--- | 'PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'     | 'SharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@                 |
--- +----------------------------------------------+-------------------------------------------------------------------------------------------+
--- | 'PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR' | 'SharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@                 |
--- +----------------------------------------------+-------------------------------------------------------------------------------------------+
---
--- Presentable image usage queries
---
--- Note
---
--- For reference, the mode indicated by '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
--- '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
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.getPhysicalDeviceSurfacePresentModes2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR'
-newtype PresentModeKHR = PresentModeKHR Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | '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.
-pattern PRESENT_MODE_IMMEDIATE_KHR = PresentModeKHR 0
--- | '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.
-pattern PRESENT_MODE_MAILBOX_KHR = PresentModeKHR 1
--- | '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.
-pattern PRESENT_MODE_FIFO_KHR = PresentModeKHR 2
--- | '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.
-pattern PRESENT_MODE_FIFO_RELAXED_KHR = PresentModeKHR 3
--- | 'PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR' specifies that the
--- presentation engine and application have concurrent access to a single
--- image, which is referred to as a /shared presentable image/. The
--- presentation engine periodically updates the current image on its
--- regular refresh cycle. The application is only required to make one
--- initial presentation request, after which the presentation engine /must/
--- update the current image without any need for further presentation
--- requests. The application /can/ indicate the image contents have been
--- updated by making a presentation request, but this does not guarantee
--- the timing of when it will be updated. This mode /may/ result in visible
--- tearing if rendering to the image is not timed correctly.
-pattern PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = PresentModeKHR 1000111001
--- | 'PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR' specifies that the presentation
--- engine and application have concurrent access to a single image, which
--- is referred to as a /shared presentable image/. The presentation engine
--- is only required to update the current image after a new presentation
--- request is received. Therefore the application /must/ make a
--- presentation request whenever an update is required. However, the
--- presentation engine /may/ update the current image at any point, meaning
--- this mode /may/ result in visible tearing.
-pattern PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = PresentModeKHR 1000111000
-{-# complete PRESENT_MODE_IMMEDIATE_KHR,
-             PRESENT_MODE_MAILBOX_KHR,
-             PRESENT_MODE_FIFO_KHR,
-             PRESENT_MODE_FIFO_RELAXED_KHR,
-             PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR,
-             PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR :: PresentModeKHR #-}
-
-instance Show PresentModeKHR where
-  showsPrec p = \case
-    PRESENT_MODE_IMMEDIATE_KHR -> showString "PRESENT_MODE_IMMEDIATE_KHR"
-    PRESENT_MODE_MAILBOX_KHR -> showString "PRESENT_MODE_MAILBOX_KHR"
-    PRESENT_MODE_FIFO_KHR -> showString "PRESENT_MODE_FIFO_KHR"
-    PRESENT_MODE_FIFO_RELAXED_KHR -> showString "PRESENT_MODE_FIFO_RELAXED_KHR"
-    PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR -> showString "PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR"
-    PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR -> showString "PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR"
-    PresentModeKHR x -> showParen (p >= 11) (showString "PresentModeKHR " . showsPrec 11 x)
-
-instance Read PresentModeKHR where
-  readPrec = parens (choose [("PRESENT_MODE_IMMEDIATE_KHR", pure PRESENT_MODE_IMMEDIATE_KHR)
-                            , ("PRESENT_MODE_MAILBOX_KHR", pure PRESENT_MODE_MAILBOX_KHR)
-                            , ("PRESENT_MODE_FIFO_KHR", pure PRESENT_MODE_FIFO_KHR)
-                            , ("PRESENT_MODE_FIFO_RELAXED_KHR", pure PRESENT_MODE_FIFO_RELAXED_KHR)
-                            , ("PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR", pure PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR)
-                            , ("PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR", pure PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PresentModeKHR")
-                       v <- step readPrec
-                       pure (PresentModeKHR v)))
-
-
-type KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION"
-pattern KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION = 1
-
-
-type KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME = "VK_KHR_shared_presentable_image"
-
--- No documentation found for TopLevel "VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME"
-pattern KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME = "VK_KHR_shared_presentable_image"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs-boot
+++ /dev/null
@@ -1,18 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image  ( SharedPresentSurfaceCapabilitiesKHR
-                                                                   , PresentModeKHR
-                                                                   ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data SharedPresentSurfaceCapabilitiesKHR
-
-instance ToCStruct SharedPresentSurfaceCapabilitiesKHR
-instance Show SharedPresentSurfaceCapabilitiesKHR
-
-instance FromCStruct SharedPresentSurfaceCapabilitiesKHR
-
-
-data PresentModeKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_spirv_1_4.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_spirv_1_4.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_spirv_1_4.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_spirv_1_4  ( KHR_SPIRV_1_4_SPEC_VERSION
-                                                    , pattern KHR_SPIRV_1_4_SPEC_VERSION
-                                                    , KHR_SPIRV_1_4_EXTENSION_NAME
-                                                    , pattern KHR_SPIRV_1_4_EXTENSION_NAME
-                                                    ) where
-
-import Data.String (IsString)
-
-type KHR_SPIRV_1_4_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SPIRV_1_4_SPEC_VERSION"
-pattern KHR_SPIRV_1_4_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SPIRV_1_4_SPEC_VERSION = 1
-
-
-type KHR_SPIRV_1_4_EXTENSION_NAME = "VK_KHR_spirv_1_4"
-
--- No documentation found for TopLevel "VK_KHR_SPIRV_1_4_EXTENSION_NAME"
-pattern KHR_SPIRV_1_4_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SPIRV_1_4_EXTENSION_NAME = "VK_KHR_spirv_1_4"
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_storage_buffer_storage_class.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_storage_buffer_storage_class  ( KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION
-                                                                       , pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION
-                                                                       , KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME
-                                                                       , pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME
-                                                                       ) where
-
-import Data.String (IsString)
-
-type KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION"
-pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION = 1
-
-
-type KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME = "VK_KHR_storage_buffer_storage_class"
-
--- No documentation found for TopLevel "VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME"
-pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs
+++ /dev/null
@@ -1,740 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_surface  ( destroySurfaceKHR
-                                                  , getPhysicalDeviceSurfaceSupportKHR
-                                                  , getPhysicalDeviceSurfaceCapabilitiesKHR
-                                                  , getPhysicalDeviceSurfaceFormatsKHR
-                                                  , getPhysicalDeviceSurfacePresentModesKHR
-                                                  , SurfaceCapabilitiesKHR(..)
-                                                  , SurfaceFormatKHR(..)
-                                                  , KHR_SURFACE_SPEC_VERSION
-                                                  , pattern KHR_SURFACE_SPEC_VERSION
-                                                  , KHR_SURFACE_EXTENSION_NAME
-                                                  , pattern KHR_SURFACE_EXTENSION_NAME
-                                                  , SurfaceKHR(..)
-                                                  , PresentModeKHR(..)
-                                                  , ColorSpaceKHR(..)
-                                                  , CompositeAlphaFlagBitsKHR(..)
-                                                  , CompositeAlphaFlagsKHR
-                                                  , SurfaceTransformFlagBitsKHR(..)
-                                                  , SurfaceTransformFlagsKHR
-                                                  ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32(..))
-import Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace (ColorSpaceKHR)
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (CompositeAlphaFlagsKHR)
-import Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkDestroySurfaceKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceCapabilitiesKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceFormatsKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfacePresentModesKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceSupportKHR))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (PresentModeKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (PresentModeKHR(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagsKHR)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace (ColorSpaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (CompositeAlphaFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (CompositeAlphaFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (PresentModeKHR(..))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagsKHR)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroySurfaceKHR
-  :: FunPtr (Ptr Instance_T -> SurfaceKHR -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> SurfaceKHR -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroySurfaceKHR - Destroy a VkSurfaceKHR object
---
--- = 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- = Description
---
--- Destroying a 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' 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 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' objects
---     created for @surface@ /must/ have been destroyed prior to destroying
---     @surface@
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @surface@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @surface@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   If @surface@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @surface@ /must/
---     be a valid 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     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
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-destroySurfaceKHR :: forall io . MonadIO io => Instance -> SurfaceKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroySurfaceKHR instance' surface allocator = liftIO . evalContT $ do
-  let vkDestroySurfaceKHR' = mkVkDestroySurfaceKHR (pVkDestroySurfaceKHR (instanceCmds (instance' :: Instance)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroySurfaceKHR' (instanceHandle (instance')) (surface) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSurfaceSupportKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> SurfaceKHR -> Ptr Bool32 -> IO Result) -> Ptr PhysicalDevice_T -> Word32 -> SurfaceKHR -> Ptr Bool32 -> IO Result
-
--- | vkGetPhysicalDeviceSurfaceSupportKHR - Query if presentation is
--- supported
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device.
---
--- -   @queueFamilyIndex@ is the queue family.
---
--- -   @surface@ is the surface.
---
--- -   @pSupported@ is a pointer to a
---     'Graphics.Vulkan.Core10.BaseType.Bool32', which is set to
---     'Graphics.Vulkan.Core10.BaseType.TRUE' to indicate support, and
---     'Graphics.Vulkan.Core10.BaseType.FALSE' otherwise.
---
--- == Valid Usage
---
--- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
---     returned by
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
---     for the given @physicalDevice@
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @surface@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- -   @pSupported@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core10.BaseType.Bool32' value
---
--- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-getPhysicalDeviceSurfaceSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> SurfaceKHR -> io (("supported" ::: Bool))
-getPhysicalDeviceSurfaceSupportKHR physicalDevice queueFamilyIndex surface = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSurfaceSupportKHR' = mkVkGetPhysicalDeviceSurfaceSupportKHR (pVkGetPhysicalDeviceSurfaceSupportKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPSupported <- ContT $ bracket (callocBytes @Bool32 4) free
-  r <- lift $ vkGetPhysicalDeviceSurfaceSupportKHR' (physicalDeviceHandle (physicalDevice)) (queueFamilyIndex) (surface) (pPSupported)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSupported <- lift $ peek @Bool32 pPSupported
-  pure $ ((bool32ToBool pSupported))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSurfaceCapabilitiesKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr SurfaceCapabilitiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr SurfaceCapabilitiesKHR -> IO Result
-
--- | vkGetPhysicalDeviceSurfaceCapabilitiesKHR - Query surface capabilities
---
--- = 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.createSwapchainKHR'.
---
--- -   @surface@ is the surface that will be associated with the swapchain.
---
--- -   @pSurfaceCapabilities@ is a pointer to a 'SurfaceCapabilitiesKHR'
---     structure in which the capabilities are returned.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @surface@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a
---     'SurfaceCapabilitiesKHR' structure
---
--- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'SurfaceCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-getPhysicalDeviceSurfaceCapabilitiesKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (SurfaceCapabilitiesKHR)
-getPhysicalDeviceSurfaceCapabilitiesKHR physicalDevice surface = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSurfaceCapabilitiesKHR' = mkVkGetPhysicalDeviceSurfaceCapabilitiesKHR (pVkGetPhysicalDeviceSurfaceCapabilitiesKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPSurfaceCapabilities <- ContT (withZeroCStruct @SurfaceCapabilitiesKHR)
-  r <- lift $ vkGetPhysicalDeviceSurfaceCapabilitiesKHR' (physicalDeviceHandle (physicalDevice)) (surface) (pPSurfaceCapabilities)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurfaceCapabilities <- lift $ peekCStruct @SurfaceCapabilitiesKHR pPSurfaceCapabilities
-  pure $ (pSurfaceCapabilities)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSurfaceFormatsKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr SurfaceFormatKHR -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr SurfaceFormatKHR -> IO Result
-
--- | vkGetPhysicalDeviceSurfaceFormatsKHR - Query color formats supported by
--- surface
---
--- = 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.createSwapchainKHR'.
---
--- -   @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
---     'SurfaceFormatKHR' structures.
---
--- = Description
---
--- If @pSurfaceFormats@ is @NULL@, then the number of format pairs
--- supported for the given @surface@ is returned in @pSurfaceFormatCount@.
--- 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@,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' to indicate
--- that not all the available values were returned.
---
--- The number of format pairs supported /must/ be greater than or equal to
--- 1. @pSurfaceFormats@ /must/ not contain an entry whose value for
--- @format@ is 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'.
---
--- If @pSurfaceFormats@ includes an entry whose value for @colorSpace@ is
--- 'Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace.COLOR_SPACE_SRGB_NONLINEAR_KHR'
--- and whose value for @format@ is a UNORM (or SRGB) format and the
--- corresponding SRGB (or UNORM) format is a color renderable format for
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then
--- @pSurfaceFormats@ /must/ also contain an entry with the same value for
--- @colorSpace@ and @format@ equal to the corresponding SRGB (or UNORM)
--- format.
---
--- == Valid Usage
---
--- -   @surface@ /must/ be supported by @physicalDevice@, as reported by
---     'getPhysicalDeviceSurfaceSupportKHR' or an equivalent
---     platform-specific mechanism
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @surface@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' 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@ 'SurfaceFormatKHR'
---     structures
---
--- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice', 'SurfaceFormatKHR',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-getPhysicalDeviceSurfaceFormatsKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (Result, ("surfaceFormats" ::: Vector SurfaceFormatKHR))
-getPhysicalDeviceSurfaceFormatsKHR physicalDevice surface = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSurfaceFormatsKHR' = mkVkGetPhysicalDeviceSurfaceFormatsKHR (pVkGetPhysicalDeviceSurfaceFormatsKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPSurfaceFormatCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceSurfaceFormatsKHR' physicalDevice' (surface) (pPSurfaceFormatCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurfaceFormatCount <- lift $ peek @Word32 pPSurfaceFormatCount
-  pPSurfaceFormats <- ContT $ bracket (callocBytes @SurfaceFormatKHR ((fromIntegral (pSurfaceFormatCount)) * 8)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPSurfaceFormats `advancePtrBytes` (i * 8) :: Ptr SurfaceFormatKHR) . ($ ())) [0..(fromIntegral (pSurfaceFormatCount)) - 1]
-  r' <- lift $ vkGetPhysicalDeviceSurfaceFormatsKHR' physicalDevice' (surface) (pPSurfaceFormatCount) ((pPSurfaceFormats))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pSurfaceFormatCount' <- lift $ peek @Word32 pPSurfaceFormatCount
-  pSurfaceFormats' <- lift $ generateM (fromIntegral (pSurfaceFormatCount')) (\i -> peekCStruct @SurfaceFormatKHR (((pPSurfaceFormats) `advancePtrBytes` (8 * (i)) :: Ptr SurfaceFormatKHR)))
-  pure $ ((r'), pSurfaceFormats')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSurfacePresentModesKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr PresentModeKHR -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr PresentModeKHR -> IO Result
-
--- | vkGetPhysicalDeviceSurfacePresentModesKHR - Query supported presentation
--- modes
---
--- = 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.createSwapchainKHR'.
---
--- -   @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
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PresentModeKHR'
---     values, indicating the supported presentation modes.
---
--- = 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@, 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be
--- returned instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' to
--- indicate that not all the available values were returned.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @surface@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' 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@
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PresentModeKHR'
---     values
---
--- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PresentModeKHR',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-getPhysicalDeviceSurfacePresentModesKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (Result, ("presentModes" ::: Vector PresentModeKHR))
-getPhysicalDeviceSurfacePresentModesKHR physicalDevice surface = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSurfacePresentModesKHR' = mkVkGetPhysicalDeviceSurfacePresentModesKHR (pVkGetPhysicalDeviceSurfacePresentModesKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPPresentModeCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceSurfacePresentModesKHR' physicalDevice' (surface) (pPPresentModeCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPresentModeCount <- lift $ peek @Word32 pPPresentModeCount
-  pPPresentModes <- ContT $ bracket (callocBytes @PresentModeKHR ((fromIntegral (pPresentModeCount)) * 4)) free
-  r' <- lift $ vkGetPhysicalDeviceSurfacePresentModesKHR' physicalDevice' (surface) (pPPresentModeCount) (pPPresentModes)
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPresentModeCount' <- lift $ peek @Word32 pPPresentModeCount
-  pPresentModes' <- lift $ generateM (fromIntegral (pPresentModeCount')) (\i -> peek @PresentModeKHR ((pPPresentModes `advancePtrBytes` (4 * (i)) :: Ptr PresentModeKHR)))
-  pure $ ((r'), pPresentModes')
-
-
--- | VkSurfaceCapabilitiesKHR - Structure describing capabilities of a
--- surface
---
--- = Description
---
--- Note
---
--- Supported usage flags of a presentable image when using
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'
--- or
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR'
--- presentation mode are provided by
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@.
---
--- Note
---
--- Formulas such as min(N, @maxImageCount@) are not correct, since
--- @maxImageCount@ /may/ be zero.
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.CompositeAlphaFlagsKHR',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagBitsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagsKHR',
--- 'getPhysicalDeviceSurfaceCapabilitiesKHR'
-data SurfaceCapabilitiesKHR = SurfaceCapabilitiesKHR
-  { -- | @minImageCount@ is the minimum number of images the specified device
-    -- supports for a swapchain created for the surface, and will be at least
-    -- one.
-    minImageCount :: Word32
-  , -- | @maxImageCount@ is the maximum number of images the specified device
-    -- supports for a swapchain created for the surface, and will be either 0,
-    -- or greater than or equal to @minImageCount@. A value of 0 means that
-    -- there is no limit on the number of images, though there /may/ be limits
-    -- related to the total amount of memory used by presentable images.
-    maxImageCount :: Word32
-  , -- | @currentExtent@ is the current width and height of the surface, or the
-    -- special value (0xFFFFFFFF, 0xFFFFFFFF) indicating that the surface size
-    -- will be determined by the extent of a swapchain targeting the surface.
-    currentExtent :: Extent2D
-  , -- | @minImageExtent@ contains the smallest valid swapchain extent for the
-    -- surface on the specified device. The @width@ and @height@ of the extent
-    -- will each be less than or equal to the corresponding @width@ and
-    -- @height@ of @currentExtent@, unless @currentExtent@ has the special
-    -- value described above.
-    minImageExtent :: Extent2D
-  , -- | @maxImageExtent@ contains the largest valid swapchain extent for the
-    -- surface on the specified device. The @width@ and @height@ of the extent
-    -- will each be greater than or equal to the corresponding @width@ and
-    -- @height@ of @minImageExtent@. The @width@ and @height@ of the extent
-    -- will each be greater than or equal to the corresponding @width@ and
-    -- @height@ of @currentExtent@, unless @currentExtent@ has the special
-    -- value described above.
-    maxImageExtent :: Extent2D
-  , -- | @maxImageArrayLayers@ is the maximum number of layers presentable images
-    -- /can/ have for a swapchain created for this device and surface, and will
-    -- be at least one.
-    maxImageArrayLayers :: Word32
-  , -- | @supportedTransforms@ is a bitmask of
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagBitsKHR'
-    -- indicating the presentation transforms supported for the surface on the
-    -- specified device. At least one bit will be set.
-    supportedTransforms :: SurfaceTransformFlagsKHR
-  , -- | @currentTransform@ is
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagBitsKHR'
-    -- value indicating the surface’s current transform relative to the
-    -- presentation engine’s natural orientation.
-    currentTransform :: SurfaceTransformFlagBitsKHR
-  , -- | @supportedCompositeAlpha@ is a bitmask of
-    -- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.CompositeAlphaFlagBitsKHR',
-    -- representing the alpha compositing modes supported by the presentation
-    -- engine for the surface on the specified device, and at least one bit
-    -- will be set. Opaque composition /can/ be achieved in any alpha
-    -- compositing mode by either using an image format that has no alpha
-    -- component, or by ensuring that all pixels in the presentable images have
-    -- an alpha value of 1.0.
-    supportedCompositeAlpha :: CompositeAlphaFlagsKHR
-  , -- | @supportedUsageFlags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
-    -- representing the ways the application /can/ use the presentable images
-    -- of a swapchain created with
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PresentModeKHR'
-    -- set to
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_IMMEDIATE_KHR',
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_MAILBOX_KHR',
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_FIFO_KHR'
-    -- or
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_FIFO_RELAXED_KHR'
-    -- for the surface on the specified device.
-    -- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
-    -- /must/ be included in the set but implementations /may/ support
-    -- additional usages.
-    supportedUsageFlags :: ImageUsageFlags
-  }
-  deriving (Typeable)
-deriving instance Show SurfaceCapabilitiesKHR
-
-instance ToCStruct SurfaceCapabilitiesKHR where
-  withCStruct x f = allocaBytesAligned 52 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SurfaceCapabilitiesKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (minImageCount)
-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (maxImageCount)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (currentExtent) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (minImageExtent) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (maxImageExtent) . ($ ())
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (maxImageArrayLayers)
-    lift $ poke ((p `plusPtr` 36 :: Ptr SurfaceTransformFlagsKHR)) (supportedTransforms)
-    lift $ poke ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR)) (currentTransform)
-    lift $ poke ((p `plusPtr` 44 :: Ptr CompositeAlphaFlagsKHR)) (supportedCompositeAlpha)
-    lift $ poke ((p `plusPtr` 48 :: Ptr ImageUsageFlags)) (supportedUsageFlags)
-    lift $ f
-  cStructSize = 52
-  cStructAlignment = 4
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
-    lift $ f
-
-instance FromCStruct SurfaceCapabilitiesKHR where
-  peekCStruct p = do
-    minImageCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    maxImageCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    currentExtent <- peekCStruct @Extent2D ((p `plusPtr` 8 :: Ptr Extent2D))
-    minImageExtent <- peekCStruct @Extent2D ((p `plusPtr` 16 :: Ptr Extent2D))
-    maxImageExtent <- peekCStruct @Extent2D ((p `plusPtr` 24 :: Ptr Extent2D))
-    maxImageArrayLayers <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    supportedTransforms <- peek @SurfaceTransformFlagsKHR ((p `plusPtr` 36 :: Ptr SurfaceTransformFlagsKHR))
-    currentTransform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR))
-    supportedCompositeAlpha <- peek @CompositeAlphaFlagsKHR ((p `plusPtr` 44 :: Ptr CompositeAlphaFlagsKHR))
-    supportedUsageFlags <- peek @ImageUsageFlags ((p `plusPtr` 48 :: Ptr ImageUsageFlags))
-    pure $ SurfaceCapabilitiesKHR
-             minImageCount maxImageCount currentExtent minImageExtent maxImageExtent maxImageArrayLayers supportedTransforms currentTransform supportedCompositeAlpha supportedUsageFlags
-
-instance Zero SurfaceCapabilitiesKHR where
-  zero = SurfaceCapabilitiesKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkSurfaceFormatKHR - Structure describing a supported swapchain
--- format-color space pair
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace.ColorSpaceKHR',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceFormat2KHR',
--- 'getPhysicalDeviceSurfaceFormatsKHR'
-data SurfaceFormatKHR = SurfaceFormatKHR
-  { -- | @format@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format' that is
-    -- compatible with the specified surface.
-    format :: Format
-  , -- | @colorSpace@ is a presentation
-    -- 'Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace.ColorSpaceKHR'
-    -- that is compatible with the surface.
-    colorSpace :: ColorSpaceKHR
-  }
-  deriving (Typeable)
-deriving instance Show SurfaceFormatKHR
-
-instance ToCStruct SurfaceFormatKHR where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SurfaceFormatKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Format)) (format)
-    poke ((p `plusPtr` 4 :: Ptr ColorSpaceKHR)) (colorSpace)
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Format)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr ColorSpaceKHR)) (zero)
-    f
-
-instance FromCStruct SurfaceFormatKHR where
-  peekCStruct p = do
-    format <- peek @Format ((p `plusPtr` 0 :: Ptr Format))
-    colorSpace <- peek @ColorSpaceKHR ((p `plusPtr` 4 :: Ptr ColorSpaceKHR))
-    pure $ SurfaceFormatKHR
-             format colorSpace
-
-instance Storable SurfaceFormatKHR where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SurfaceFormatKHR where
-  zero = SurfaceFormatKHR
-           zero
-           zero
-
-
-type KHR_SURFACE_SPEC_VERSION = 25
-
--- No documentation found for TopLevel "VK_KHR_SURFACE_SPEC_VERSION"
-pattern KHR_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SURFACE_SPEC_VERSION = 25
-
-
-type KHR_SURFACE_EXTENSION_NAME = "VK_KHR_surface"
-
--- No documentation found for TopLevel "VK_KHR_SURFACE_EXTENSION_NAME"
-pattern KHR_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SURFACE_EXTENSION_NAME = "VK_KHR_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_surface  ( SurfaceCapabilitiesKHR
-                                                  , SurfaceFormatKHR
-                                                  ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data SurfaceCapabilitiesKHR
-
-instance ToCStruct SurfaceCapabilitiesKHR
-instance Show SurfaceCapabilitiesKHR
-
-instance FromCStruct SurfaceCapabilitiesKHR
-
-
-data SurfaceFormatKHR
-
-instance ToCStruct SurfaceFormatKHR
-instance Show SurfaceFormatKHR
-
-instance FromCStruct SurfaceFormatKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs
+++ /dev/null
@@ -1,95 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities  ( SurfaceProtectedCapabilitiesKHR(..)
-                                                                         , KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION
-                                                                         , pattern KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION
-                                                                         , KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME
-                                                                         , pattern KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME
-                                                                         ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR))
--- | VkSurfaceProtectedCapabilitiesKHR - Structure describing capability of a
--- surface to be protected
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data SurfaceProtectedCapabilitiesKHR = SurfaceProtectedCapabilitiesKHR
-  { -- | @supportsProtected@ specifies whether a protected swapchain created from
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'::@surface@
-    -- for a particular windowing system /can/ be displayed on screen or not.
-    -- If @supportsProtected@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', then
-    -- creation of swapchains with the
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.SWAPCHAIN_CREATE_PROTECTED_BIT_KHR'
-    -- flag set /must/ be supported for @surface@.
-    supportsProtected :: Bool }
-  deriving (Typeable)
-deriving instance Show SurfaceProtectedCapabilitiesKHR
-
-instance ToCStruct SurfaceProtectedCapabilitiesKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SurfaceProtectedCapabilitiesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (supportsProtected))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct SurfaceProtectedCapabilitiesKHR where
-  peekCStruct p = do
-    supportsProtected <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ SurfaceProtectedCapabilitiesKHR
-             (bool32ToBool supportsProtected)
-
-instance Storable SurfaceProtectedCapabilitiesKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SurfaceProtectedCapabilitiesKHR where
-  zero = SurfaceProtectedCapabilitiesKHR
-           zero
-
-
-type KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION"
-pattern KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION = 1
-
-
-type KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME = "VK_KHR_surface_protected_capabilities"
-
--- No documentation found for TopLevel "VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME"
-pattern KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME = "VK_KHR_surface_protected_capabilities"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities  (SurfaceProtectedCapabilitiesKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data SurfaceProtectedCapabilitiesKHR
-
-instance ToCStruct SurfaceProtectedCapabilitiesKHR
-instance Show SurfaceProtectedCapabilitiesKHR
-
-instance FromCStruct SurfaceProtectedCapabilitiesKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs
+++ /dev/null
@@ -1,2476 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_swapchain  ( createSwapchainKHR
-                                                    , withSwapchainKHR
-                                                    , destroySwapchainKHR
-                                                    , getSwapchainImagesKHR
-                                                    , acquireNextImageKHR
-                                                    , queuePresentKHR
-                                                    , getDeviceGroupPresentCapabilitiesKHR
-                                                    , getDeviceGroupSurfacePresentModesKHR
-                                                    , acquireNextImage2KHR
-                                                    , getPhysicalDevicePresentRectanglesKHR
-                                                    , SwapchainCreateInfoKHR(..)
-                                                    , PresentInfoKHR(..)
-                                                    , DeviceGroupPresentCapabilitiesKHR(..)
-                                                    , ImageSwapchainCreateInfoKHR(..)
-                                                    , BindImageMemorySwapchainInfoKHR(..)
-                                                    , AcquireNextImageInfoKHR(..)
-                                                    , DeviceGroupPresentInfoKHR(..)
-                                                    , DeviceGroupSwapchainCreateInfoKHR(..)
-                                                    , DeviceGroupPresentModeFlagBitsKHR( DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR
-                                                                                       , DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR
-                                                                                       , DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR
-                                                                                       , DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR
-                                                                                       , ..
-                                                                                       )
-                                                    , DeviceGroupPresentModeFlagsKHR
-                                                    , SwapchainCreateFlagBitsKHR( SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR
-                                                                                , SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
-                                                                                , SWAPCHAIN_CREATE_PROTECTED_BIT_KHR
-                                                                                , ..
-                                                                                )
-                                                    , SwapchainCreateFlagsKHR
-                                                    , KHR_SWAPCHAIN_SPEC_VERSION
-                                                    , pattern KHR_SWAPCHAIN_SPEC_VERSION
-                                                    , KHR_SWAPCHAIN_EXTENSION_NAME
-                                                    , pattern KHR_SWAPCHAIN_EXTENSION_NAME
-                                                    , SurfaceKHR(..)
-                                                    , SwapchainKHR(..)
-                                                    , PresentModeKHR(..)
-                                                    , ColorSpaceKHR(..)
-                                                    , CompositeAlphaFlagBitsKHR(..)
-                                                    , CompositeAlphaFlagsKHR
-                                                    , SurfaceTransformFlagBitsKHR(..)
-                                                    , SurfaceTransformFlagsKHR
-                                                    ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace (ColorSpaceKHR)
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (CompositeAlphaFlagBitsKHR)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkAcquireNextImage2KHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkAcquireNextImageKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateSwapchainKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroySwapchainKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeviceGroupPresentCapabilitiesKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetDeviceGroupSurfacePresentModesKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetSwapchainImagesKHR))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkQueuePresentKHR))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_display_swapchain (DisplayPresentInfoKHR)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import Graphics.Vulkan.Core10.Handles (Fence)
-import Graphics.Vulkan.Core10.Handles (Fence(..))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.Core10.Handles (Image(..))
-import {-# SOURCE #-} Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list (ImageFormatListCreateInfo)
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDevicePresentRectanglesKHR))
-import Graphics.Vulkan.Core10.APIConstants (MAX_DEVICE_GROUP_SIZE)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GGP_frame_token (PresentFrameTokenGGP)
-import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (PresentModeKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_KHR_incremental_present (PresentRegionsKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing (PresentTimesInfoGOOGLE)
-import Graphics.Vulkan.Core10.Handles (Queue)
-import Graphics.Vulkan.Core10.Handles (Queue(..))
-import Graphics.Vulkan.Core10.Handles (Queue_T)
-import Graphics.Vulkan.Core10.CommandBufferBuilding (Rect2D)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Handles (Semaphore)
-import Graphics.Vulkan.Core10.Handles (Semaphore(..))
-import Graphics.Vulkan.Core10.Enums.SharingMode (SharingMode)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveWin32InfoEXT)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_display_control (SwapchainCounterCreateInfoEXT)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr (SwapchainDisplayNativeHdrCreateInfoAMD)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.APIConstants (pattern MAX_DEVICE_GROUP_SIZE)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRESENT_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace (ColorSpaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (CompositeAlphaFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter (CompositeAlphaFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image (PresentModeKHR(..))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagsKHR)
-import Graphics.Vulkan.Extensions.Handles (SwapchainKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateSwapchainKHR
-  :: FunPtr (Ptr Device_T -> Ptr (SwapchainCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr SwapchainKHR -> IO Result) -> Ptr Device_T -> Ptr (SwapchainCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr SwapchainKHR -> IO Result
-
--- | vkCreateSwapchainKHR - Create a swapchain
---
--- = Parameters
---
--- -   @device@ is the device to create the swapchain for.
---
--- -   @pCreateInfo@ is a pointer to a 'SwapchainCreateInfoKHR' 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSwapchain@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handle in which
---     the created swapchain object will be returned.
---
--- = Description
---
--- If the @oldSwapchain@ parameter of @pCreateInfo@ is a valid swapchain,
--- which has exclusive full-screen access, that access is released from
--- @oldSwapchain@. If the command succeeds in this case, the newly created
--- swapchain will automatically acquire exclusive full-screen access from
--- @oldSwapchain@.
---
--- Note
---
--- This implicit transfer is intended to avoid exiting and entering
--- full-screen exclusive mode, which may otherwise cause unwanted visual
--- updates to the display.
---
--- In some cases, swapchain creation /may/ fail if exclusive full-screen
--- mode is requested for application control, but for some
--- implementation-specific reason exclusive full-screen access is
--- unavailable for the particular combination of parameters provided. If
--- this occurs,
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED' will
--- be returned.
---
--- Note
---
--- In particular, it will fail if the @imageExtent@ member of @pCreateInfo@
--- does not match the extents of the monitor. Other reasons for failure may
--- include the app not being set as high-dpi aware, or if the physical
--- device and monitor are not compatible in this mode.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'SwapchainCreateInfoKHR' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSwapchain@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handle
---
--- == Host Synchronization
---
--- -   Host access to @pCreateInfo->surface@ /must/ be externally
---     synchronized
---
--- -   Host access to @pCreateInfo->oldSwapchain@ /must/ be externally
---     synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device', 'SwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-createSwapchainKHR :: forall a io . (PokeChain a, MonadIO io) => Device -> SwapchainCreateInfoKHR a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SwapchainKHR)
-createSwapchainKHR device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateSwapchainKHR' = mkVkCreateSwapchainKHR (pVkCreateSwapchainKHR (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSwapchain <- ContT $ bracket (callocBytes @SwapchainKHR 8) free
-  r <- lift $ vkCreateSwapchainKHR' (deviceHandle (device)) pCreateInfo pAllocator (pPSwapchain)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSwapchain <- lift $ peek @SwapchainKHR pPSwapchain
-  pure $ (pSwapchain)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createSwapchainKHR' and 'destroySwapchainKHR'
---
--- To ensure that 'destroySwapchainKHR' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withSwapchainKHR :: forall a io r . (PokeChain a, MonadIO io) => (io (SwapchainKHR) -> ((SwapchainKHR) -> io ()) -> r) -> Device -> SwapchainCreateInfoKHR a -> Maybe AllocationCallbacks -> r
-withSwapchainKHR b device pCreateInfo pAllocator =
-  b (createSwapchainKHR device pCreateInfo pAllocator)
-    (\(o0) -> destroySwapchainKHR device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroySwapchainKHR
-  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> SwapchainKHR -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroySwapchainKHR - Destroy a swapchain object
---
--- = Parameters
---
--- -   @device@ is the 'Graphics.Vulkan.Core10.Handles.Device' 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- = 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
--- 'Graphics.Vulkan.Core10.Handles.Image' handles are destroyed, and /must/
--- not be acquired or used any more by the application. The memory of each
--- 'Graphics.Vulkan.Core10.Handles.Image' 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 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR',
--- and a new swapchain /can/ be created with it.
---
--- When a swapchain associated with a display surface is destroyed, if the
--- image most recently presented to the display surface is from the
--- swapchain being destroyed, then either any display resources modified by
--- presenting images from any swapchain associated with the display surface
--- /must/ be reverted by the implementation to their state prior to the
--- first present performed on one of these swapchains, or such resources
--- /must/ be left in their current state.
---
--- If @swapchain@ has exclusive full-screen access, it is released before
--- the swapchain is destroyed.
---
--- == Valid Usage
---
--- -   All uses of presentable images acquired from @swapchain@ /must/ have
---     completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @swapchain@ was created, a compatible set of
---     callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @swapchain@ was created, @pAllocator@ /must/ be
---     @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @swapchain@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @swapchain@
---     /must/ be a valid 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
---     handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   Both of @device@, and @swapchain@ that are valid handles of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Host Synchronization
---
--- -   Host access to @swapchain@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-destroySwapchainKHR :: forall io . MonadIO io => Device -> SwapchainKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroySwapchainKHR device swapchain allocator = liftIO . evalContT $ do
-  let vkDestroySwapchainKHR' = mkVkDestroySwapchainKHR (pVkDestroySwapchainKHR (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroySwapchainKHR' (deviceHandle (device)) (swapchain) pAllocator
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetSwapchainImagesKHR
-  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Ptr Word32 -> Ptr Image -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Ptr Word32 -> Ptr Image -> IO Result
-
--- | vkGetSwapchainImagesKHR - Obtain the array of presentable images
--- associated with a swapchain
---
--- = 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
---     'Graphics.Vulkan.Core10.Handles.Image' handles.
---
--- = 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@, 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will
--- be returned instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' to
--- indicate that not all the available values were returned.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @swapchain@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' 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@
---     'Graphics.Vulkan.Core10.Handles.Image' handles
---
--- -   Both of @device@, and @swapchain@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-getSwapchainImagesKHR :: forall io . MonadIO io => Device -> SwapchainKHR -> io (Result, ("swapchainImages" ::: Vector Image))
-getSwapchainImagesKHR device swapchain = liftIO . evalContT $ do
-  let vkGetSwapchainImagesKHR' = mkVkGetSwapchainImagesKHR (pVkGetSwapchainImagesKHR (deviceCmds (device :: Device)))
-  let device' = deviceHandle (device)
-  pPSwapchainImageCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetSwapchainImagesKHR' device' (swapchain) (pPSwapchainImageCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSwapchainImageCount <- lift $ peek @Word32 pPSwapchainImageCount
-  pPSwapchainImages <- ContT $ bracket (callocBytes @Image ((fromIntegral (pSwapchainImageCount)) * 8)) free
-  r' <- lift $ vkGetSwapchainImagesKHR' device' (swapchain) (pPSwapchainImageCount) (pPSwapchainImages)
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pSwapchainImageCount' <- lift $ peek @Word32 pPSwapchainImageCount
-  pSwapchainImages' <- lift $ generateM (fromIntegral (pSwapchainImageCount')) (\i -> peek @Image ((pPSwapchainImages `advancePtrBytes` (8 * (i)) :: Ptr Image)))
-  pure $ ((r'), pSwapchainImages')
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkAcquireNextImageKHR
-  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Word64 -> Semaphore -> Fence -> Ptr Word32 -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Word64 -> Semaphore -> Fence -> Ptr Word32 -> IO Result
-
--- | vkAcquireNextImageKHR - Retrieve the index of the next available
--- presentable image
---
--- = 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.APIConstants.NULL_HANDLE' or
---     a semaphore to signal.
---
--- -   @fence@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or a
---     fence to signal.
---
--- -   @pImageIndex@ is a pointer to a @uint32_t@ in which the index of the
---     next image to use (i.e. an index into the array of images returned
---     by 'getSwapchainImagesKHR') is returned.
---
--- == Valid Usage
---
--- -   @swapchain@ /must/ not be in the retired state
---
--- -   If @semaphore@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ be
---     unsignaled
---
--- -   If @semaphore@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ not have
---     any uncompleted signal or wait operations pending
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     it /must/ be unsignaled and /must/ not be associated with any other
---     queue command that has not yet completed execution on that queue
---
--- -   @semaphore@ and @fence@ /must/ not both be equal to
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If the number of currently acquired images is greater than the
---     difference between the number of images in @swapchain@ and the value
---     of
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@minImageCount@
---     as returned by a call to
---     'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
---     with the @surface@ used to create @swapchain@, @timeout@ /must/ not
---     be @UINT64_MAX@
---
--- -   @semaphore@ /must/ have a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @swapchain@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handle
---
--- -   If @semaphore@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @semaphore@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Semaphore' handle
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @fence@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Fence'
---     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 of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == 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
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.TIMEOUT'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.NOT_READY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUBOPTIMAL_KHR'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Fence',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-acquireNextImageKHR :: forall io . MonadIO io => Device -> SwapchainKHR -> ("timeout" ::: Word64) -> Semaphore -> Fence -> io (Result, ("imageIndex" ::: Word32))
-acquireNextImageKHR device swapchain timeout semaphore fence = liftIO . evalContT $ do
-  let vkAcquireNextImageKHR' = mkVkAcquireNextImageKHR (pVkAcquireNextImageKHR (deviceCmds (device :: Device)))
-  pPImageIndex <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkAcquireNextImageKHR' (deviceHandle (device)) (swapchain) (timeout) (semaphore) (fence) (pPImageIndex)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pImageIndex <- lift $ peek @Word32 pPImageIndex
-  pure $ (r, pImageIndex)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkQueuePresentKHR
-  :: FunPtr (Ptr Queue_T -> Ptr (PresentInfoKHR a) -> IO Result) -> Ptr Queue_T -> Ptr (PresentInfoKHR a) -> IO Result
-
--- | vkQueuePresentKHR - Queue an image for presentation
---
--- = 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 a 'PresentInfoKHR' structure
---     specifying parameters of the presentation.
---
--- = 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
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR'
---
--- -   If more than one member of @pSwapchains@ was created from a display
---     surface, all display surfaces referenced that refer to the same
---     display /must/ use the same display mode
---
--- -   When a semaphore wait operation referring to a binary semaphore
---     defined by the elements of the @pWaitSemaphores@ member of
---     @pPresentInfo@ executes on @queue@, there /must/ be no other queues
---     waiting on the same semaphore
---
--- -   All elements of the @pWaitSemaphores@ member of @pPresentInfo@
---     /must/ be semaphores that are signaled, or have
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operations>
---     previously submitted for execution
---
--- -   All elements of the @pWaitSemaphores@ member of @pPresentInfo@
---     /must/ be created with a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
---
--- -   All elements of the @pWaitSemaphores@ member of @pPresentInfo@
---     /must/ reference a semaphore signal operation that has been
---     submitted for execution and any semaphore signal operations on which
---     it depends (if any) /must/ have also been submitted for execution
---
--- Any writes to memory backing the images referenced by the
--- @pImageIndices@ and @pSwapchains@ members of @pPresentInfo@, that are
--- available before 'queuePresentKHR' 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.
---
--- Note
---
--- The origin of the native orientation of the surface coordinate system is
--- not specified in the Vulkan specification; it depends on the platform.
--- For most platforms the origin is by default upper-left, meaning the
--- pixel of the presented 'Graphics.Vulkan.Core10.Handles.Image' at
--- coordinates (0,0) would appear at the upper left pixel of the platform
--- surface (assuming
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.SURFACE_TRANSFORM_IDENTITY_BIT_KHR',
--- and the display standing the right way up).
---
--- If 'queuePresentKHR' fails to enqueue the corresponding set of queue
--- operations, it /may/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' or
--- 'Graphics.Vulkan.Core10.Enums.Result.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 'queuePresentKHR' fails in such a way that the implementation is
--- unable to make that guarantee, the implementation /must/ return
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'.
---
--- However, if the presentation request is rejected by the presentation
--- engine with an error
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR',
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT',
--- or 'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR', the set
--- of queue operations are still considered to be enqueued and thus any
--- semaphore wait operation specified in 'PresentInfoKHR' will execute when
--- the corresponding queue operation is complete.
---
--- If any @swapchain@ member of @pPresentInfo@ was created with
--- 'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT',
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
--- will be returned if that swapchain does not have exclusive full-screen
--- access, possibly for implementation-specific reasons outside of the
--- application’s control.
---
--- == Valid Usage (Implicit)
---
--- -   @queue@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Queue'
---     handle
---
--- -   @pPresentInfo@ /must/ be a valid pointer to a valid 'PresentInfoKHR'
---     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
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUBOPTIMAL_KHR'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
---
--- = See Also
---
--- 'PresentInfoKHR', 'Graphics.Vulkan.Core10.Handles.Queue'
-queuePresentKHR :: forall a io . (PokeChain a, MonadIO io) => Queue -> PresentInfoKHR a -> io (Result)
-queuePresentKHR queue presentInfo = liftIO . evalContT $ do
-  let vkQueuePresentKHR' = mkVkQueuePresentKHR (pVkQueuePresentKHR (deviceCmds (queue :: Queue)))
-  pPresentInfo <- ContT $ withCStruct (presentInfo)
-  r <- lift $ vkQueuePresentKHR' (queueHandle (queue)) pPresentInfo
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceGroupPresentCapabilitiesKHR
-  :: FunPtr (Ptr Device_T -> Ptr DeviceGroupPresentCapabilitiesKHR -> IO Result) -> Ptr Device_T -> Ptr DeviceGroupPresentCapabilitiesKHR -> IO Result
-
--- | vkGetDeviceGroupPresentCapabilitiesKHR - Query present capabilities from
--- other physical devices
---
--- = Parameters
---
--- -   @device@ is the logical device.
---
--- -   @pDeviceGroupPresentCapabilities@ is a pointer to a
---     'DeviceGroupPresentCapabilitiesKHR' structure in which the device’s
---     capabilities are returned.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'DeviceGroupPresentCapabilitiesKHR'
-getDeviceGroupPresentCapabilitiesKHR :: forall io . MonadIO io => Device -> io (DeviceGroupPresentCapabilitiesKHR)
-getDeviceGroupPresentCapabilitiesKHR device = liftIO . evalContT $ do
-  let vkGetDeviceGroupPresentCapabilitiesKHR' = mkVkGetDeviceGroupPresentCapabilitiesKHR (pVkGetDeviceGroupPresentCapabilitiesKHR (deviceCmds (device :: Device)))
-  pPDeviceGroupPresentCapabilities <- ContT (withZeroCStruct @DeviceGroupPresentCapabilitiesKHR)
-  r <- lift $ vkGetDeviceGroupPresentCapabilitiesKHR' (deviceHandle (device)) (pPDeviceGroupPresentCapabilities)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pDeviceGroupPresentCapabilities <- lift $ peekCStruct @DeviceGroupPresentCapabilitiesKHR pPDeviceGroupPresentCapabilities
-  pure $ (pDeviceGroupPresentCapabilities)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetDeviceGroupSurfacePresentModesKHR
-  :: FunPtr (Ptr Device_T -> SurfaceKHR -> Ptr DeviceGroupPresentModeFlagsKHR -> IO Result) -> Ptr Device_T -> SurfaceKHR -> Ptr DeviceGroupPresentModeFlagsKHR -> IO Result
-
--- | vkGetDeviceGroupSurfacePresentModesKHR - Query present capabilities for
--- a surface
---
--- = Parameters
---
--- -   @device@ is the logical device.
---
--- -   @surface@ is the surface.
---
--- -   @pModes@ is a pointer to a 'DeviceGroupPresentModeFlagsKHR' in which
---     the supported device group present modes for the surface are
---     returned.
---
--- = 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
--- 'getDeviceGroupPresentCapabilitiesKHR'.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @surface@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- -   @pModes@ /must/ be a valid pointer to a
---     'DeviceGroupPresentModeFlagsKHR' value
---
--- -   Both of @device@, and @surface@ /must/ have been created, allocated,
---     or retrieved from the same 'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Host Synchronization
---
--- -   Host access to @surface@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'DeviceGroupPresentModeFlagsKHR',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-getDeviceGroupSurfacePresentModesKHR :: forall io . MonadIO io => Device -> SurfaceKHR -> io (("modes" ::: DeviceGroupPresentModeFlagsKHR))
-getDeviceGroupSurfacePresentModesKHR device surface = liftIO . evalContT $ do
-  let vkGetDeviceGroupSurfacePresentModesKHR' = mkVkGetDeviceGroupSurfacePresentModesKHR (pVkGetDeviceGroupSurfacePresentModesKHR (deviceCmds (device :: Device)))
-  pPModes <- ContT $ bracket (callocBytes @DeviceGroupPresentModeFlagsKHR 4) free
-  r <- lift $ vkGetDeviceGroupSurfacePresentModesKHR' (deviceHandle (device)) (surface) (pPModes)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pModes <- lift $ peek @DeviceGroupPresentModeFlagsKHR pPModes
-  pure $ (pModes)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkAcquireNextImage2KHR
-  :: FunPtr (Ptr Device_T -> Ptr AcquireNextImageInfoKHR -> Ptr Word32 -> IO Result) -> Ptr Device_T -> Ptr AcquireNextImageInfoKHR -> Ptr Word32 -> IO Result
-
--- | vkAcquireNextImage2KHR - Retrieve the index of the next available
--- presentable image
---
--- = Parameters
---
--- -   @device@ is the device associated with @swapchain@.
---
--- -   @pAcquireInfo@ is a pointer to a 'AcquireNextImageInfoKHR' structure
---     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.
---
--- == 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.SurfaceCapabilitiesKHR'::@minImageCount@
---     as returned by a call to
---     'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
---     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 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pAcquireInfo@ /must/ be a valid pointer to a valid
---     'AcquireNextImageInfoKHR' structure
---
--- -   @pImageIndex@ /must/ be a valid pointer to a @uint32_t@ value
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.TIMEOUT'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.NOT_READY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUBOPTIMAL_KHR'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
---
--- = See Also
---
--- 'AcquireNextImageInfoKHR', 'Graphics.Vulkan.Core10.Handles.Device'
-acquireNextImage2KHR :: forall io . MonadIO io => Device -> ("acquireInfo" ::: AcquireNextImageInfoKHR) -> io (Result, ("imageIndex" ::: Word32))
-acquireNextImage2KHR device acquireInfo = liftIO . evalContT $ do
-  let vkAcquireNextImage2KHR' = mkVkAcquireNextImage2KHR (pVkAcquireNextImage2KHR (deviceCmds (device :: Device)))
-  pAcquireInfo <- ContT $ withCStruct (acquireInfo)
-  pPImageIndex <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkAcquireNextImage2KHR' (deviceHandle (device)) pAcquireInfo (pPImageIndex)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pImageIndex <- lift $ peek @Word32 pPImageIndex
-  pure $ (r, pImageIndex)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDevicePresentRectanglesKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr Rect2D -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr Rect2D -> IO Result
-
--- | vkGetPhysicalDevicePresentRectanglesKHR - Query present rectangles for a
--- surface on a physical device
---
--- = 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
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures.
---
--- = 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@,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.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
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @surface@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' 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@ 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D'
---     structures
---
--- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == Host Synchronization
---
--- -   Host access to @surface@ /must/ be externally synchronized
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-getPhysicalDevicePresentRectanglesKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (Result, ("rects" ::: Vector Rect2D))
-getPhysicalDevicePresentRectanglesKHR physicalDevice surface = liftIO . evalContT $ do
-  let vkGetPhysicalDevicePresentRectanglesKHR' = mkVkGetPhysicalDevicePresentRectanglesKHR (pVkGetPhysicalDevicePresentRectanglesKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPRectCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDevicePresentRectanglesKHR' physicalDevice' (surface) (pPRectCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pRectCount <- lift $ peek @Word32 pPRectCount
-  pPRects <- ContT $ bracket (callocBytes @Rect2D ((fromIntegral (pRectCount)) * 16)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPRects `advancePtrBytes` (i * 16) :: Ptr Rect2D) . ($ ())) [0..(fromIntegral (pRectCount)) - 1]
-  r' <- lift $ vkGetPhysicalDevicePresentRectanglesKHR' physicalDevice' (surface) (pPRectCount) ((pPRects))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pRectCount' <- lift $ peek @Word32 pPRectCount
-  pRects' <- lift $ generateM (fromIntegral (pRectCount')) (\i -> peekCStruct @Rect2D (((pPRects) `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
-  pure $ ((r'), pRects')
-
-
--- | VkSwapchainCreateInfoKHR - Structure specifying parameters of a newly
--- created swapchain object
---
--- = 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.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
---     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
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT'.
---
--- -   @pQueueFamilyIndices@ is a pointer to an array of queue family
---     indices having access to the images(s) of the swapchain when
---     @imageSharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT'.
---
--- -   @preTransform@ is a
---     'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagBitsKHR'
---     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
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
---     the presentation engine will transform the image content as part of
---     the presentation operation.
---
--- -   @compositeAlpha@ is a
---     'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.CompositeAlphaFlagBitsKHR'
---     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 'Graphics.Vulkan.Core10.BaseType.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. Fragment
---         shaders /may/ not execute for these pixels, and thus any side
---         effects they would have had will not occur.
---         'Graphics.Vulkan.Core10.BaseType.TRUE' value does not guarantee
---         any clipping will occur, but allows more optimal presentation
---         methods to be used on some platforms.
---
---     -   If set to 'Graphics.Vulkan.Core10.BaseType.FALSE', presentable
---         images associated with the swapchain will own all of the pixels
---         they contain.
---
--- Note
---
--- Applications /should/ set this value to
--- 'Graphics.Vulkan.Core10.BaseType.TRUE' if they do not expect to read
--- back the content of presentable images before presenting them or after
--- reacquiring them, and if their fragment shaders do not have any side
--- effects that require them to run for all pixels in the presentable
--- image.
---
--- -   @oldSwapchain@ is 'Graphics.Vulkan.Core10.APIConstants.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 'createSwapchainKHR' with an @oldSwapchain@ that is not
--- 'Graphics.Vulkan.Core10.APIConstants.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.APIConstants.NULL_HANDLE'.
---
--- Upon calling 'createSwapchainKHR' with an @oldSwapchain@ that is not
--- 'Graphics.Vulkan.Core10.APIConstants.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
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' through multiple uses of
--- @oldSwapchain@ that outnumber calls to 'destroySwapchainKHR'.
---
--- After @oldSwapchain@ is retired, the application /can/ pass to
--- 'queuePresentKHR' 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, 'queuePresentKHR' /may/ fail if @oldSwapchain@ has
--- entered a state that causes
--- 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR' to be
--- returned.
---
--- The application /can/ continue to use a shared presentable image
--- obtained from @oldSwapchain@ until a presentable image is acquired from
--- the new swapchain, as long as it has not entered a state that causes it
--- to return 'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'.
---
--- == Valid Usage
---
--- -   @surface@ /must/ be a surface that is supported by the device as
---     determined using
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR'
---
--- -   @minImageCount@ /must/ be less than or equal to the value returned
---     in the @maxImageCount@ member of the
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'
---     structure returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
---     for the surface if the returned @maxImageCount@ is not zero
---
--- -   If @presentMode@ is not
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'
---     nor
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR',
---     then @minImageCount@ /must/ be greater than or equal to the value
---     returned in the @minImageCount@ member of the
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'
---     structure returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
---     for the surface
---
--- -   @minImageCount@ /must/ be @1@ if @presentMode@ is either
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'
---     or
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR'
---
--- -   @imageFormat@ and @imageColorSpace@ /must/ match the @format@ and
---     @colorSpace@ members, respectively, of one of the
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR'
---     structures returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceFormatsKHR'
---     for the surface
---
--- -   @imageExtent@ /must/ be between @minImageExtent@ and
---     @maxImageExtent@, inclusive, where @minImageExtent@ and
---     @maxImageExtent@ are members of the
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'
---     structure returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
---     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
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'
---     structure returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
---     for the surface
---
--- -   If @presentMode@ is
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_IMMEDIATE_KHR',
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_MAILBOX_KHR',
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_FIFO_KHR'
---     or
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_FIFO_RELAXED_KHR',
---     @imageUsage@ /must/ be a subset of the supported usage flags present
---     in the @supportedUsageFlags@ member of the
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'
---     structure returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
---     for @surface@
---
--- -   If @presentMode@ is
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'
---     or
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR',
---     @imageUsage@ /must/ be a subset of the supported usage flags present
---     in the @sharedPresentSupportedUsageFlags@ member of the
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR'
---     structure returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
---     for @surface@
---
--- -   If @imageSharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
---     @queueFamilyIndexCount@ @uint32_t@ values
---
--- -   If @imageSharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     @queueFamilyIndexCount@ /must/ be greater than @1@
---
--- -   If @imageSharingMode@ is
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
---     each element of @pQueueFamilyIndices@ /must/ be unique and /must/ be
---     less than @pQueueFamilyPropertyCount@ returned by either
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
---     or
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'
---     for the @physicalDevice@ that was used to create @device@
---
--- -   @preTransform@ /must/ be one of the bits present in the
---     @supportedTransforms@ member of the
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'
---     structure returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
---     for the surface
---
--- -   @compositeAlpha@ /must/ be one of the bits present in the
---     @supportedCompositeAlpha@ member of the
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'
---     structure returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
---     for the surface
---
--- -   @presentMode@ /must/ be one of the
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PresentModeKHR'
---     values returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR'
---     for the surface
---
--- -   If the logical device was created with
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo'::@physicalDeviceCount@
---     equal to 1, @flags@ /must/ not contain
---     'SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR'
---
--- -   If @oldSwapchain@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @oldSwapchain@
---     /must/ be a non-retired swapchain associated with native window
---     referred to by @surface@
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#swapchain-wsi-image-create-info implied image creation parameters>
---     of the swapchain /must/ be supported as reported by
---     'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties'
---
--- -   If @flags@ contains 'SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR' then
---     the @pNext@ chain /must/ include a
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
---     structure with a @viewFormatCount@ greater than zero and
---     @pViewFormats@ /must/ have an element equal to @imageFormat@
---
--- -   If @flags@ contains 'SWAPCHAIN_CREATE_PROTECTED_BIT_KHR', then
---     'Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR'::@supportsProtected@
---     /must/ be 'Graphics.Vulkan.Core10.BaseType.TRUE' in the
---     'Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR'
---     structure returned by
---     'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
---     for @surface@
---
--- -   If the @pNext@ chain includes a
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT'
---     structure with its @fullScreenExclusive@ member set to
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT',
---     and @surface@ was created using
---     'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.createWin32SurfaceKHR',
---     a
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
---     structure /must/ be included in the @pNext@ chain
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of 'DeviceGroupSwapchainCreateInfoKHR',
---     'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo',
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_display_control.SwapchainCounterCreateInfoEXT',
---     or
---     'Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr.SwapchainDisplayNativeHdrCreateInfoAMD'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'SwapchainCreateFlagBitsKHR' values
---
--- -   @surface@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- -   @imageFormat@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- -   @imageColorSpace@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace.ColorSpaceKHR'
---     value
---
--- -   @imageUsage@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
---     values
---
--- -   @imageUsage@ /must/ not be @0@
---
--- -   @imageSharingMode@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.SharingMode.SharingMode' value
---
--- -   @preTransform@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagBitsKHR'
---     value
---
--- -   @compositeAlpha@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.CompositeAlphaFlagBitsKHR'
---     value
---
--- -   @presentMode@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PresentModeKHR'
---     value
---
--- -   If @oldSwapchain@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @oldSwapchain@
---     /must/ be a valid 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
---     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 of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Instance'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace.ColorSpaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.CompositeAlphaFlagBitsKHR',
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.PresentModeKHR',
--- 'Graphics.Vulkan.Core10.Enums.SharingMode.SharingMode',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagBitsKHR',
--- 'SwapchainCreateFlagsKHR',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.createSharedSwapchainsKHR',
--- 'createSwapchainKHR'
-data SwapchainCreateInfoKHR (es :: [Type]) = SwapchainCreateInfoKHR
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of 'SwapchainCreateFlagBitsKHR' indicating
-    -- parameters of the swapchain creation.
-    flags :: SwapchainCreateFlagsKHR
-  , -- | @surface@ is the surface onto which the swapchain will present images.
-    -- If the creation succeeds, the swapchain becomes associated with
-    -- @surface@.
-    surface :: SurfaceKHR
-  , -- | @minImageCount@ is the minimum number of presentable images that the
-    -- application needs. The implementation will either create the swapchain
-    -- with at least that many images, or it will fail to create the swapchain.
-    minImageCount :: Word32
-  , -- | @imageFormat@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format' value
-    -- specifying the format the swapchain image(s) will be created with.
-    imageFormat :: Format
-  , -- | @imageColorSpace@ is a
-    -- 'Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace.ColorSpaceKHR'
-    -- value specifying the way the swapchain interprets image data.
-    imageColorSpace :: ColorSpaceKHR
-  , -- | @imageExtent@ is the size (in pixels) of the swapchain image(s). The
-    -- behavior is platform-dependent if the image extent does not match the
-    -- surface’s @currentExtent@ as returned by
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'.
-    imageExtent :: Extent2D
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "imageArrayLayers"
-    imageArrayLayers :: Word32
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "imageUsage"
-    imageUsage :: ImageUsageFlags
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "imageSharingMode"
-    imageSharingMode :: SharingMode
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "pQueueFamilyIndices"
-    queueFamilyIndices :: Vector Word32
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "preTransform"
-    preTransform :: SurfaceTransformFlagBitsKHR
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "compositeAlpha"
-    compositeAlpha :: CompositeAlphaFlagBitsKHR
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "presentMode"
-    presentMode :: PresentModeKHR
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "clipped"
-    clipped :: Bool
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "oldSwapchain"
-    oldSwapchain :: SwapchainKHR
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (SwapchainCreateInfoKHR es)
-
-instance Extensible SwapchainCreateInfoKHR where
-  extensibleType = STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR
-  setNext x next = x{next = next}
-  getNext SwapchainCreateInfoKHR{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SwapchainCreateInfoKHR e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @SurfaceFullScreenExclusiveWin32InfoEXT = Just f
-    | Just Refl <- eqT @e @SurfaceFullScreenExclusiveInfoEXT = Just f
-    | Just Refl <- eqT @e @ImageFormatListCreateInfo = Just f
-    | Just Refl <- eqT @e @SwapchainDisplayNativeHdrCreateInfoAMD = Just f
-    | Just Refl <- eqT @e @DeviceGroupSwapchainCreateInfoKHR = Just f
-    | Just Refl <- eqT @e @SwapchainCounterCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (SwapchainCreateInfoKHR es) where
-  withCStruct x f = allocaBytesAligned 104 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SwapchainCreateInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr SwapchainCreateFlagsKHR)) (flags)
-    lift $ poke ((p `plusPtr` 24 :: Ptr SurfaceKHR)) (surface)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (minImageCount)
-    lift $ poke ((p `plusPtr` 36 :: Ptr Format)) (imageFormat)
-    lift $ poke ((p `plusPtr` 40 :: Ptr ColorSpaceKHR)) (imageColorSpace)
-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent2D)) (imageExtent) . ($ ())
-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (imageArrayLayers)
-    lift $ poke ((p `plusPtr` 56 :: Ptr ImageUsageFlags)) (imageUsage)
-    lift $ poke ((p `plusPtr` 60 :: Ptr SharingMode)) (imageSharingMode)
-    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueFamilyIndices)) :: Word32))
-    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (queueFamilyIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (queueFamilyIndices)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
-    lift $ poke ((p `plusPtr` 80 :: Ptr SurfaceTransformFlagBitsKHR)) (preTransform)
-    lift $ poke ((p `plusPtr` 84 :: Ptr CompositeAlphaFlagBitsKHR)) (compositeAlpha)
-    lift $ poke ((p `plusPtr` 88 :: Ptr PresentModeKHR)) (presentMode)
-    lift $ poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (clipped))
-    lift $ poke ((p `plusPtr` 96 :: Ptr SwapchainKHR)) (oldSwapchain)
-    lift $ f
-  cStructSize = 104
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    lift $ poke ((p `plusPtr` 24 :: Ptr SurfaceKHR)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 36 :: Ptr Format)) (zero)
-    lift $ poke ((p `plusPtr` 40 :: Ptr ColorSpaceKHR)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 56 :: Ptr ImageUsageFlags)) (zero)
-    lift $ poke ((p `plusPtr` 60 :: Ptr SharingMode)) (zero)
-    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
-    lift $ poke ((p `plusPtr` 80 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
-    lift $ poke ((p `plusPtr` 84 :: Ptr CompositeAlphaFlagBitsKHR)) (zero)
-    lift $ poke ((p `plusPtr` 88 :: Ptr PresentModeKHR)) (zero)
-    lift $ poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ f
-
-instance PeekChain es => FromCStruct (SwapchainCreateInfoKHR es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @SwapchainCreateFlagsKHR ((p `plusPtr` 16 :: Ptr SwapchainCreateFlagsKHR))
-    surface <- peek @SurfaceKHR ((p `plusPtr` 24 :: Ptr SurfaceKHR))
-    minImageCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    imageFormat <- peek @Format ((p `plusPtr` 36 :: Ptr Format))
-    imageColorSpace <- peek @ColorSpaceKHR ((p `plusPtr` 40 :: Ptr ColorSpaceKHR))
-    imageExtent <- peekCStruct @Extent2D ((p `plusPtr` 44 :: Ptr Extent2D))
-    imageArrayLayers <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
-    imageUsage <- peek @ImageUsageFlags ((p `plusPtr` 56 :: Ptr ImageUsageFlags))
-    imageSharingMode <- peek @SharingMode ((p `plusPtr` 60 :: Ptr SharingMode))
-    queueFamilyIndexCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    pQueueFamilyIndices <- peek @(Ptr Word32) ((p `plusPtr` 72 :: Ptr (Ptr Word32)))
-    pQueueFamilyIndices' <- generateM (fromIntegral queueFamilyIndexCount) (\i -> peek @Word32 ((pQueueFamilyIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    preTransform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 80 :: Ptr SurfaceTransformFlagBitsKHR))
-    compositeAlpha <- peek @CompositeAlphaFlagBitsKHR ((p `plusPtr` 84 :: Ptr CompositeAlphaFlagBitsKHR))
-    presentMode <- peek @PresentModeKHR ((p `plusPtr` 88 :: Ptr PresentModeKHR))
-    clipped <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))
-    oldSwapchain <- peek @SwapchainKHR ((p `plusPtr` 96 :: Ptr SwapchainKHR))
-    pure $ SwapchainCreateInfoKHR
-             next flags surface minImageCount imageFormat imageColorSpace imageExtent imageArrayLayers imageUsage imageSharingMode pQueueFamilyIndices' preTransform compositeAlpha presentMode (bool32ToBool clipped) oldSwapchain
-
-instance es ~ '[] => Zero (SwapchainCreateInfoKHR es) where
-  zero = SwapchainCreateInfoKHR
-           ()
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           mempty
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPresentInfoKHR - Structure describing parameters of a queue
--- presentation
---
--- = Description
---
--- Before an application /can/ present an image, the image’s layout /must/
--- be transitioned to the
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR'
--- layout, or for a shared presentable image the
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
--- layout.
---
--- Note
---
--- When transitioning the image to
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
--- or
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR',
--- there is no need to delay subsequent processing, or perform any
--- visibility operations (as 'queuePresentKHR' performs automatic
--- visibility operations). To achieve this, the @dstAccessMask@ member of
--- the 'Graphics.Vulkan.Core10.OtherTypes.ImageMemoryBarrier' /should/ be
--- set to @0@, and the @dstStageMask@ parameter /should/ be set to
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.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
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
---     layout at the time the operation is executed on a
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- -   All elements of the @pWaitSemaphores@ /must/ have a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_INFO_KHR'
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of 'DeviceGroupPresentInfoKHR',
---     'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.DisplayPresentInfoKHR',
---     'Graphics.Vulkan.Extensions.VK_GGP_frame_token.PresentFrameTokenGGP',
---     'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.PresentRegionsKHR',
---     or
---     'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.PresentTimesInfoGOOGLE'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a
---     valid pointer to an array of @waitSemaphoreCount@ valid
---     'Graphics.Vulkan.Core10.Handles.Semaphore' handles
---
--- -   @pSwapchains@ /must/ be a valid pointer to an array of
---     @swapchainCount@ valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' 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.Enums.Result.Result' values
---
--- -   @swapchainCount@ /must/ be greater than @0@
---
--- -   Both of the elements of @pSwapchains@, and the elements of
---     @pWaitSemaphores@ that are valid handles of non-ignored parameters
---     /must/ have been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Instance'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.Result.Result',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR', 'queuePresentKHR'
-data PresentInfoKHR (es :: [Type]) = PresentInfoKHR
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @pWaitSemaphores@ is @NULL@ or a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.Semaphore' objects with
-    -- @waitSemaphoreCount@ entries, and specifies the semaphores to wait for
-    -- before issuing the present request.
-    waitSemaphores :: Vector Semaphore
-  , -- | @pSwapchains@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' objects with
-    -- @swapchainCount@ entries. A given swapchain /must/ not appear in this
-    -- list more than once.
-    swapchains :: Vector SwapchainKHR
-  , -- | @pImageIndices@ is a pointer to an array of indices into the array of
-    -- each swapchain’s presentable images, with @swapchainCount@ entries. Each
-    -- entry in this array identifies the image to present on the corresponding
-    -- entry in the @pSwapchains@ array.
-    imageIndices :: Vector Word32
-  , -- | @pResults@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Enums.Result.Result' typed elements with
-    -- @swapchainCount@ entries. Applications that do not need per-swapchain
-    -- results /can/ use @NULL@ for @pResults@. If non-@NULL@, each entry in
-    -- @pResults@ will be set to the
-    -- 'Graphics.Vulkan.Core10.Enums.Result.Result' for presenting the
-    -- swapchain corresponding to the same index in @pSwapchains@.
-    results :: Ptr Result
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (PresentInfoKHR es)
-
-instance Extensible PresentInfoKHR where
-  extensibleType = STRUCTURE_TYPE_PRESENT_INFO_KHR
-  setNext x next = x{next = next}
-  getNext PresentInfoKHR{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PresentInfoKHR e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PresentFrameTokenGGP = Just f
-    | Just Refl <- eqT @e @PresentTimesInfoGOOGLE = Just f
-    | Just Refl <- eqT @e @DeviceGroupPresentInfoKHR = Just f
-    | Just Refl <- eqT @e @PresentRegionsKHR = Just f
-    | Just Refl <- eqT @e @DisplayPresentInfoKHR = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (PresentInfoKHR es) where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PresentInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_INFO_KHR)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (waitSemaphores)) :: Word32))
-    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (waitSemaphores)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (waitSemaphores)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
-    let pSwapchainsLength = Data.Vector.length $ (swapchains)
-    let pImageIndicesLength = Data.Vector.length $ (imageIndices)
-    lift $ unless (pImageIndicesLength == pSwapchainsLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pImageIndices and pSwapchains must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral pSwapchainsLength :: Word32))
-    pPSwapchains' <- ContT $ allocaBytesAligned @SwapchainKHR ((Data.Vector.length (swapchains)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSwapchains' `plusPtr` (8 * (i)) :: Ptr SwapchainKHR) (e)) (swapchains)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SwapchainKHR))) (pPSwapchains')
-    pPImageIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (imageIndices)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPImageIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (imageIndices)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPImageIndices')
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Result))) (results)
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_INFO_KHR)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
-    pPSwapchains' <- ContT $ allocaBytesAligned @SwapchainKHR ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPSwapchains' `plusPtr` (8 * (i)) :: Ptr SwapchainKHR) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SwapchainKHR))) (pPSwapchains')
-    pPImageIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPImageIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPImageIndices')
-    lift $ f
-
-instance PeekChain es => FromCStruct (PresentInfoKHR es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    waitSemaphoreCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pWaitSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 24 :: Ptr (Ptr Semaphore)))
-    pWaitSemaphores' <- generateM (fromIntegral waitSemaphoreCount) (\i -> peek @Semaphore ((pWaitSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
-    swapchainCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pSwapchains <- peek @(Ptr SwapchainKHR) ((p `plusPtr` 40 :: Ptr (Ptr SwapchainKHR)))
-    pSwapchains' <- generateM (fromIntegral swapchainCount) (\i -> peek @SwapchainKHR ((pSwapchains `advancePtrBytes` (8 * (i)) :: Ptr SwapchainKHR)))
-    pImageIndices <- peek @(Ptr Word32) ((p `plusPtr` 48 :: Ptr (Ptr Word32)))
-    pImageIndices' <- generateM (fromIntegral swapchainCount) (\i -> peek @Word32 ((pImageIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pResults <- peek @(Ptr Result) ((p `plusPtr` 56 :: Ptr (Ptr Result)))
-    pure $ PresentInfoKHR
-             next pWaitSemaphores' pSwapchains' pImageIndices' pResults
-
-instance es ~ '[] => Zero (PresentInfoKHR es) where
-  zero = PresentInfoKHR
-           ()
-           mempty
-           mempty
-           mempty
-           zero
-
-
--- | VkDeviceGroupPresentCapabilitiesKHR - Present capabilities from other
--- physical devices
---
--- = Description
---
--- @modes@ always has 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR' set.
---
--- The present mode flags are also used when presenting an image, in
--- 'DeviceGroupPresentInfoKHR'::@mode@.
---
--- If a device group only includes a single physical device, then @modes@
--- /must/ equal 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'DeviceGroupPresentModeFlagsKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getDeviceGroupPresentCapabilitiesKHR'
-data DeviceGroupPresentCapabilitiesKHR = DeviceGroupPresentCapabilitiesKHR
-  { -- | @presentMask@ is an array of
-    -- 'Graphics.Vulkan.Core10.APIConstants.MAX_DEVICE_GROUP_SIZE' @uint32_t@
-    -- masks, where the mask at element i is non-zero if physical device i has
-    -- a presentation engine, and where bit j is set in element i if physical
-    -- device i /can/ present swapchain images from physical device j. If
-    -- element i is non-zero, then bit i /must/ be set.
-    presentMask :: Vector Word32
-  , -- | @modes@ is a bitmask of 'DeviceGroupPresentModeFlagBitsKHR' indicating
-    -- which device group presentation modes are supported.
-    modes :: DeviceGroupPresentModeFlagsKHR
-  }
-  deriving (Typeable)
-deriving instance Show DeviceGroupPresentCapabilitiesKHR
-
-instance ToCStruct DeviceGroupPresentCapabilitiesKHR where
-  withCStruct x f = allocaBytesAligned 152 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceGroupPresentCapabilitiesKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    unless ((Data.Vector.length $ (presentMask)) <= MAX_DEVICE_GROUP_SIZE) $
-      throwIO $ IOError Nothing InvalidArgument "" "presentMask is too long, a maximum of MAX_DEVICE_GROUP_SIZE elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE Word32)))) `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (presentMask)
-    poke ((p `plusPtr` 144 :: Ptr DeviceGroupPresentModeFlagsKHR)) (modes)
-    f
-  cStructSize = 152
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    unless ((Data.Vector.length $ (mempty)) <= MAX_DEVICE_GROUP_SIZE) $
-      throwIO $ IOError Nothing InvalidArgument "" "presentMask is too long, a maximum of MAX_DEVICE_GROUP_SIZE elements are allowed" Nothing Nothing
-    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE Word32)))) `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    poke ((p `plusPtr` 144 :: Ptr DeviceGroupPresentModeFlagsKHR)) (zero)
-    f
-
-instance FromCStruct DeviceGroupPresentCapabilitiesKHR where
-  peekCStruct p = do
-    presentMask <- generateM (MAX_DEVICE_GROUP_SIZE) (\i -> peek @Word32 (((lowerArrayPtr @Word32 ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE Word32)))) `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    modes <- peek @DeviceGroupPresentModeFlagsKHR ((p `plusPtr` 144 :: Ptr DeviceGroupPresentModeFlagsKHR))
-    pure $ DeviceGroupPresentCapabilitiesKHR
-             presentMask modes
-
-instance Storable DeviceGroupPresentCapabilitiesKHR where
-  sizeOf ~_ = 152
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeviceGroupPresentCapabilitiesKHR where
-  zero = DeviceGroupPresentCapabilitiesKHR
-           mempty
-           zero
-
-
--- | VkImageSwapchainCreateInfoKHR - Specify that an image will be bound to
--- swapchain memory
---
--- == Valid Usage
---
--- -   If @swapchain@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', the fields of
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo' /must/ match the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#swapchain-wsi-image-create-info implied image creation parameters>
---     of the swapchain
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR'
---
--- -   If @swapchain@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @swapchain@
---     /must/ be a valid 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
---     handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-data ImageSwapchainCreateInfoKHR = ImageSwapchainCreateInfoKHR
-  { -- | @swapchain@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or a
-    -- handle of a swapchain that the image will be bound to.
-    swapchain :: SwapchainKHR }
-  deriving (Typeable)
-deriving instance Show ImageSwapchainCreateInfoKHR
-
-instance ToCStruct ImageSwapchainCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageSwapchainCreateInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (swapchain)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct ImageSwapchainCreateInfoKHR where
-  peekCStruct p = do
-    swapchain <- peek @SwapchainKHR ((p `plusPtr` 16 :: Ptr SwapchainKHR))
-    pure $ ImageSwapchainCreateInfoKHR
-             swapchain
-
-instance Storable ImageSwapchainCreateInfoKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageSwapchainCreateInfoKHR where
-  zero = ImageSwapchainCreateInfoKHR
-           zero
-
-
--- | VkBindImageMemorySwapchainInfoKHR - Structure specifying swapchain image
--- memory to bind to
---
--- = 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_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'.
---
--- == Valid Usage
---
--- -   @imageIndex@ /must/ be less than the number of images in @swapchain@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR'
---
--- -   @swapchain@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handle
---
--- == Host Synchronization
---
--- -   Host access to @swapchain@ /must/ be externally synchronized
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR'
-data BindImageMemorySwapchainInfoKHR = BindImageMemorySwapchainInfoKHR
-  { -- | @swapchain@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or a
-    -- swapchain handle.
-    swapchain :: SwapchainKHR
-  , -- | @imageIndex@ is an image index within @swapchain@.
-    imageIndex :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show BindImageMemorySwapchainInfoKHR
-
-instance ToCStruct BindImageMemorySwapchainInfoKHR where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindImageMemorySwapchainInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (swapchain)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (imageIndex)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct BindImageMemorySwapchainInfoKHR where
-  peekCStruct p = do
-    swapchain <- peek @SwapchainKHR ((p `plusPtr` 16 :: Ptr SwapchainKHR))
-    imageIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pure $ BindImageMemorySwapchainInfoKHR
-             swapchain imageIndex
-
-instance Storable BindImageMemorySwapchainInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BindImageMemorySwapchainInfoKHR where
-  zero = BindImageMemorySwapchainInfoKHR
-           zero
-           zero
-
-
--- | VkAcquireNextImageInfoKHR - Structure specifying parameters of the
--- acquire
---
--- = Description
---
--- If 'acquireNextImageKHR' is used, the device mask is considered to
--- include all physical devices in the logical device.
---
--- Note
---
--- 'acquireNextImage2KHR' 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.APIConstants.NULL_HANDLE' it /must/ be
---     unsignaled
---
--- -   If @semaphore@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ not have
---     any uncompleted signal or wait operations pending
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     it /must/ be unsignaled and /must/ not be associated with any other
---     queue command that has not yet completed execution on that queue
---
--- -   @semaphore@ and @fence@ /must/ not both be equal to
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   @deviceMask@ /must/ be a valid device mask
---
--- -   @deviceMask@ /must/ not be zero
---
--- -   @semaphore@ /must/ have a
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
---     'Graphics.Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @swapchain@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.SwapchainKHR' handle
---
--- -   If @semaphore@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @semaphore@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Semaphore' handle
---
--- -   If @fence@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @fence@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Fence'
---     handle
---
--- -   Each of @fence@, @semaphore@, and @swapchain@ that are valid handles
---     of non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Instance'
---
--- == 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
---
--- 'Graphics.Vulkan.Core10.Handles.Fence',
--- 'Graphics.Vulkan.Core10.Handles.Semaphore',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.Handles.SwapchainKHR',
--- 'acquireNextImage2KHR'
-data AcquireNextImageInfoKHR = AcquireNextImageInfoKHR
-  { -- | @swapchain@ is a non-retired swapchain from which an image is acquired.
-    swapchain :: SwapchainKHR
-  , -- | @timeout@ specifies how long the function waits, in nanoseconds, if no
-    -- image is available.
-    timeout :: Word64
-  , -- | @semaphore@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or a
-    -- semaphore to signal.
-    semaphore :: Semaphore
-  , -- | @fence@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or a fence
-    -- to signal.
-    fence :: Fence
-  , -- | @deviceMask@ is a mask of physical devices for which the swapchain image
-    -- will be ready to use when the semaphore or fence is signaled.
-    deviceMask :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show AcquireNextImageInfoKHR
-
-instance ToCStruct AcquireNextImageInfoKHR where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AcquireNextImageInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (swapchain)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (timeout)
-    poke ((p `plusPtr` 32 :: Ptr Semaphore)) (semaphore)
-    poke ((p `plusPtr` 40 :: Ptr Fence)) (fence)
-    poke ((p `plusPtr` 48 :: Ptr Word32)) (deviceMask)
-    f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct AcquireNextImageInfoKHR where
-  peekCStruct p = do
-    swapchain <- peek @SwapchainKHR ((p `plusPtr` 16 :: Ptr SwapchainKHR))
-    timeout <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
-    semaphore <- peek @Semaphore ((p `plusPtr` 32 :: Ptr Semaphore))
-    fence <- peek @Fence ((p `plusPtr` 40 :: Ptr Fence))
-    deviceMask <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pure $ AcquireNextImageInfoKHR
-             swapchain timeout semaphore fence deviceMask
-
-instance Storable AcquireNextImageInfoKHR where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AcquireNextImageInfoKHR where
-  zero = AcquireNextImageInfoKHR
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDeviceGroupPresentInfoKHR - Mode and mask controlling which physical
--- devices\' images are presented
---
--- = Description
---
--- If @mode@ is '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 'DeviceGroupPresentCapabilitiesKHR'.
---
--- If @mode@ is '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 'DeviceGroupPresentCapabilitiesKHR'::@presentMask@.
---
--- If @mode@ is '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
--- 'DeviceGroupPresentCapabilitiesKHR'::@presentMask@.
---
--- If @mode@ is '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 'DeviceGroupPresentCapabilitiesKHR'.
---
--- If 'DeviceGroupPresentInfoKHR' is not provided or @swapchainCount@ is
--- zero then the masks are considered to be @1@. If
--- 'DeviceGroupPresentInfoKHR' is not provided, @mode@ is considered to be
--- 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR'.
---
--- == Valid Usage
---
--- -   @swapchainCount@ /must/ equal @0@ or
---     'PresentInfoKHR'::@swapchainCount@
---
--- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR', then each
---     element of @pDeviceMasks@ /must/ have exactly one bit set, and the
---     corresponding element of
---     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@ /must/ be
---     non-zero
---
--- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR', then each
---     element of @pDeviceMasks@ /must/ have exactly one bit set, and some
---     physical device in the logical device /must/ include that bit in its
---     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@
---
--- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR', then each
---     element of @pDeviceMasks@ /must/ have a value for which all set bits
---     are set in one of the elements of
---     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@
---
--- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR',
---     then for each bit set in each element of @pDeviceMasks@, the
---     corresponding element of
---     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@ /must/ be
---     non-zero
---
--- -   The value of each element of @pDeviceMasks@ /must/ be equal to the
---     device mask passed in 'AcquireNextImageInfoKHR'::@deviceMask@ when
---     the image index was last acquired
---
--- -   @mode@ /must/ have exactly one bit set, and that bit /must/ have
---     been included in 'DeviceGroupSwapchainCreateInfoKHR'::@modes@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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 'DeviceGroupPresentModeFlagBitsKHR' value
---
--- = See Also
---
--- 'DeviceGroupPresentModeFlagBitsKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceGroupPresentInfoKHR = DeviceGroupPresentInfoKHR
-  { -- | @pDeviceMasks@ is a pointer to an array of device masks, one for each
-    -- element of 'PresentInfoKHR'::pSwapchains.
-    deviceMasks :: Vector Word32
-  , -- | @mode@ is the device group present mode that will be used for this
-    -- present.
-    mode :: DeviceGroupPresentModeFlagBitsKHR
-  }
-  deriving (Typeable)
-deriving instance Show DeviceGroupPresentInfoKHR
-
-instance ToCStruct DeviceGroupPresentInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceGroupPresentInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceMasks)) :: Word32))
-    pPDeviceMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (deviceMasks)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (deviceMasks)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceMasks')
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceGroupPresentModeFlagBitsKHR)) (mode)
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPDeviceMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceMasks')
-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceGroupPresentModeFlagBitsKHR)) (zero)
-    lift $ f
-
-instance FromCStruct DeviceGroupPresentInfoKHR where
-  peekCStruct p = do
-    swapchainCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pDeviceMasks <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
-    pDeviceMasks' <- generateM (fromIntegral swapchainCount) (\i -> peek @Word32 ((pDeviceMasks `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    mode <- peek @DeviceGroupPresentModeFlagBitsKHR ((p `plusPtr` 32 :: Ptr DeviceGroupPresentModeFlagBitsKHR))
-    pure $ DeviceGroupPresentInfoKHR
-             pDeviceMasks' mode
-
-instance Zero DeviceGroupPresentInfoKHR where
-  zero = DeviceGroupPresentInfoKHR
-           mempty
-           zero
-
-
--- | VkDeviceGroupSwapchainCreateInfoKHR - Structure specifying parameters of
--- a newly created swapchain object
---
--- = Description
---
--- If this structure is not present, @modes@ is considered to be
--- 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'DeviceGroupPresentModeFlagsKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceGroupSwapchainCreateInfoKHR = DeviceGroupSwapchainCreateInfoKHR
-  { -- | @modes@ /must/ not be @0@
-    modes :: DeviceGroupPresentModeFlagsKHR }
-  deriving (Typeable)
-deriving instance Show DeviceGroupSwapchainCreateInfoKHR
-
-instance ToCStruct DeviceGroupSwapchainCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceGroupSwapchainCreateInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceGroupPresentModeFlagsKHR)) (modes)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceGroupPresentModeFlagsKHR)) (zero)
-    f
-
-instance FromCStruct DeviceGroupSwapchainCreateInfoKHR where
-  peekCStruct p = do
-    modes <- peek @DeviceGroupPresentModeFlagsKHR ((p `plusPtr` 16 :: Ptr DeviceGroupPresentModeFlagsKHR))
-    pure $ DeviceGroupSwapchainCreateInfoKHR
-             modes
-
-instance Storable DeviceGroupSwapchainCreateInfoKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeviceGroupSwapchainCreateInfoKHR where
-  zero = DeviceGroupSwapchainCreateInfoKHR
-           zero
-
-
--- | VkDeviceGroupPresentModeFlagBitsKHR - Bitmask specifying supported
--- device group present modes
---
--- = See Also
---
--- 'DeviceGroupPresentInfoKHR', 'DeviceGroupPresentModeFlagsKHR'
-newtype DeviceGroupPresentModeFlagBitsKHR = DeviceGroupPresentModeFlagBitsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR' specifies that any physical
--- device with a presentation engine /can/ present its own swapchain
--- images.
-pattern DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = DeviceGroupPresentModeFlagBitsKHR 0x00000001
--- | '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 DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = DeviceGroupPresentModeFlagBitsKHR 0x00000002
--- | '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 DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = DeviceGroupPresentModeFlagBitsKHR 0x00000004
--- | '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 DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = DeviceGroupPresentModeFlagBitsKHR 0x00000008
-
-type DeviceGroupPresentModeFlagsKHR = DeviceGroupPresentModeFlagBitsKHR
-
-instance Show DeviceGroupPresentModeFlagBitsKHR where
-  showsPrec p = \case
-    DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR -> showString "DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR"
-    DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR -> showString "DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR"
-    DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR -> showString "DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR"
-    DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR -> showString "DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR"
-    DeviceGroupPresentModeFlagBitsKHR x -> showParen (p >= 11) (showString "DeviceGroupPresentModeFlagBitsKHR 0x" . showHex x)
-
-instance Read DeviceGroupPresentModeFlagBitsKHR where
-  readPrec = parens (choose [("DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR", pure DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR)
-                            , ("DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR", pure DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR)
-                            , ("DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR", pure DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR)
-                            , ("DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR", pure DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DeviceGroupPresentModeFlagBitsKHR")
-                       v <- step readPrec
-                       pure (DeviceGroupPresentModeFlagBitsKHR v)))
-
-
--- | VkSwapchainCreateFlagBitsKHR - Bitmask controlling swapchain creation
---
--- = See Also
---
--- 'SwapchainCreateFlagsKHR'
-newtype SwapchainCreateFlagBitsKHR = SwapchainCreateFlagBitsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR' specifies that the images of
--- the swapchain /can/ be used to create a
--- 'Graphics.Vulkan.Core10.Handles.ImageView' with a different format than
--- what the swapchain was created with. The list of allowed image view
--- formats are specified by adding a
--- 'Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
--- structure to the @pNext@ chain of 'SwapchainCreateInfoKHR'. In addition,
--- this flag also specifies that the swapchain /can/ be created with usage
--- flags that are not supported for the format the swapchain is created
--- with but are supported for at least one of the allowed image view
--- formats.
-pattern SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = SwapchainCreateFlagBitsKHR 0x00000004
--- | 'SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR' specifies that
--- images created from the swapchain (i.e. with the @swapchain@ member of
--- 'ImageSwapchainCreateInfoKHR' set to this swapchain’s handle) /must/ use
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT'.
-pattern SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = SwapchainCreateFlagBitsKHR 0x00000001
--- | 'SWAPCHAIN_CREATE_PROTECTED_BIT_KHR' specifies that images created from
--- the swapchain are protected images.
-pattern SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = SwapchainCreateFlagBitsKHR 0x00000002
-
-type SwapchainCreateFlagsKHR = SwapchainCreateFlagBitsKHR
-
-instance Show SwapchainCreateFlagBitsKHR where
-  showsPrec p = \case
-    SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR -> showString "SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR"
-    SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR -> showString "SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"
-    SWAPCHAIN_CREATE_PROTECTED_BIT_KHR -> showString "SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"
-    SwapchainCreateFlagBitsKHR x -> showParen (p >= 11) (showString "SwapchainCreateFlagBitsKHR 0x" . showHex x)
-
-instance Read SwapchainCreateFlagBitsKHR where
-  readPrec = parens (choose [("SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR", pure SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR)
-                            , ("SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR", pure SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR)
-                            , ("SWAPCHAIN_CREATE_PROTECTED_BIT_KHR", pure SWAPCHAIN_CREATE_PROTECTED_BIT_KHR)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "SwapchainCreateFlagBitsKHR")
-                       v <- step readPrec
-                       pure (SwapchainCreateFlagBitsKHR v)))
-
-
-type KHR_SWAPCHAIN_SPEC_VERSION = 70
-
--- No documentation found for TopLevel "VK_KHR_SWAPCHAIN_SPEC_VERSION"
-pattern KHR_SWAPCHAIN_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SWAPCHAIN_SPEC_VERSION = 70
-
-
-type KHR_SWAPCHAIN_EXTENSION_NAME = "VK_KHR_swapchain"
-
--- No documentation found for TopLevel "VK_KHR_SWAPCHAIN_EXTENSION_NAME"
-pattern KHR_SWAPCHAIN_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SWAPCHAIN_EXTENSION_NAME = "VK_KHR_swapchain"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs-boot
+++ /dev/null
@@ -1,89 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_swapchain  ( AcquireNextImageInfoKHR
-                                                    , BindImageMemorySwapchainInfoKHR
-                                                    , DeviceGroupPresentCapabilitiesKHR
-                                                    , DeviceGroupPresentInfoKHR
-                                                    , DeviceGroupSwapchainCreateInfoKHR
-                                                    , ImageSwapchainCreateInfoKHR
-                                                    , PresentInfoKHR
-                                                    , SwapchainCreateInfoKHR
-                                                    , DeviceGroupPresentModeFlagBitsKHR
-                                                    , DeviceGroupPresentModeFlagsKHR
-                                                    ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data AcquireNextImageInfoKHR
-
-instance ToCStruct AcquireNextImageInfoKHR
-instance Show AcquireNextImageInfoKHR
-
-instance FromCStruct AcquireNextImageInfoKHR
-
-
-data BindImageMemorySwapchainInfoKHR
-
-instance ToCStruct BindImageMemorySwapchainInfoKHR
-instance Show BindImageMemorySwapchainInfoKHR
-
-instance FromCStruct BindImageMemorySwapchainInfoKHR
-
-
-data DeviceGroupPresentCapabilitiesKHR
-
-instance ToCStruct DeviceGroupPresentCapabilitiesKHR
-instance Show DeviceGroupPresentCapabilitiesKHR
-
-instance FromCStruct DeviceGroupPresentCapabilitiesKHR
-
-
-data DeviceGroupPresentInfoKHR
-
-instance ToCStruct DeviceGroupPresentInfoKHR
-instance Show DeviceGroupPresentInfoKHR
-
-instance FromCStruct DeviceGroupPresentInfoKHR
-
-
-data DeviceGroupSwapchainCreateInfoKHR
-
-instance ToCStruct DeviceGroupSwapchainCreateInfoKHR
-instance Show DeviceGroupSwapchainCreateInfoKHR
-
-instance FromCStruct DeviceGroupSwapchainCreateInfoKHR
-
-
-data ImageSwapchainCreateInfoKHR
-
-instance ToCStruct ImageSwapchainCreateInfoKHR
-instance Show ImageSwapchainCreateInfoKHR
-
-instance FromCStruct ImageSwapchainCreateInfoKHR
-
-
-type role PresentInfoKHR nominal
-data PresentInfoKHR (es :: [Type])
-
-instance PokeChain es => ToCStruct (PresentInfoKHR es)
-instance Show (Chain es) => Show (PresentInfoKHR es)
-
-instance PeekChain es => FromCStruct (PresentInfoKHR es)
-
-
-type role SwapchainCreateInfoKHR nominal
-data SwapchainCreateInfoKHR (es :: [Type])
-
-instance PokeChain es => ToCStruct (SwapchainCreateInfoKHR es)
-instance Show (Chain es) => Show (SwapchainCreateInfoKHR es)
-
-instance PeekChain es => FromCStruct (SwapchainCreateInfoKHR es)
-
-
-data DeviceGroupPresentModeFlagBitsKHR
-
-type DeviceGroupPresentModeFlagsKHR = DeviceGroupPresentModeFlagBitsKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain_mutable_format.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain_mutable_format.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain_mutable_format.hs
+++ /dev/null
@@ -1,25 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_swapchain_mutable_format  ( KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION
-                                                                   , pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION
-                                                                   , KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME
-                                                                   , pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME
-                                                                   , SwapchainCreateFlagBitsKHR(..)
-                                                                   , SwapchainCreateFlagsKHR
-                                                                   ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagsKHR)
-type KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION"
-pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION = 1
-
-
-type KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME = "VK_KHR_swapchain_mutable_format"
-
--- No documentation found for TopLevel "VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME"
-pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME = "VK_KHR_swapchain_mutable_format"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_timeline_semaphore.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_timeline_semaphore.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_timeline_semaphore.hs
+++ /dev/null
@@ -1,148 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_timeline_semaphore  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR
-                                                             , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR
-                                                             , pattern STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR
-                                                             , pattern STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR
-                                                             , pattern STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR
-                                                             , pattern STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR
-                                                             , pattern SEMAPHORE_TYPE_BINARY_KHR
-                                                             , pattern SEMAPHORE_TYPE_TIMELINE_KHR
-                                                             , pattern SEMAPHORE_WAIT_ANY_BIT_KHR
-                                                             , getSemaphoreCounterValueKHR
-                                                             , waitSemaphoresKHR
-                                                             , signalSemaphoreKHR
-                                                             , SemaphoreWaitFlagsKHR
-                                                             , SemaphoreTypeKHR
-                                                             , SemaphoreWaitFlagBitsKHR
-                                                             , PhysicalDeviceTimelineSemaphoreFeaturesKHR
-                                                             , PhysicalDeviceTimelineSemaphorePropertiesKHR
-                                                             , SemaphoreTypeCreateInfoKHR
-                                                             , TimelineSemaphoreSubmitInfoKHR
-                                                             , SemaphoreWaitInfoKHR
-                                                             , SemaphoreSignalInfoKHR
-                                                             , KHR_TIMELINE_SEMAPHORE_SPEC_VERSION
-                                                             , pattern KHR_TIMELINE_SEMAPHORE_SPEC_VERSION
-                                                             , KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME
-                                                             , pattern KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME
-                                                             ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (getSemaphoreCounterValue)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (signalSemaphore)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (waitSemaphores)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreFeatures)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreProperties)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreSignalInfo)
-import Graphics.Vulkan.Core12.Enums.SemaphoreType (SemaphoreType)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreTypeCreateInfo)
-import Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlagBits)
-import Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlags)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreWaitInfo)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (TimelineSemaphoreSubmitInfo)
-import Graphics.Vulkan.Core12.Enums.SemaphoreType (SemaphoreType(SEMAPHORE_TYPE_BINARY))
-import Graphics.Vulkan.Core12.Enums.SemaphoreType (SemaphoreType(SEMAPHORE_TYPE_TIMELINE))
-import Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlags)
-import Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlagBits(SEMAPHORE_WAIT_ANY_BIT))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR"
-pattern STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR"
-pattern STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR"
-pattern STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR"
-pattern STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO
-
-
--- No documentation found for TopLevel "VK_SEMAPHORE_TYPE_BINARY_KHR"
-pattern SEMAPHORE_TYPE_BINARY_KHR = SEMAPHORE_TYPE_BINARY
-
-
--- No documentation found for TopLevel "VK_SEMAPHORE_TYPE_TIMELINE_KHR"
-pattern SEMAPHORE_TYPE_TIMELINE_KHR = SEMAPHORE_TYPE_TIMELINE
-
-
--- No documentation found for TopLevel "VK_SEMAPHORE_WAIT_ANY_BIT_KHR"
-pattern SEMAPHORE_WAIT_ANY_BIT_KHR = SEMAPHORE_WAIT_ANY_BIT
-
-
--- No documentation found for TopLevel "vkGetSemaphoreCounterValueKHR"
-getSemaphoreCounterValueKHR = getSemaphoreCounterValue
-
-
--- No documentation found for TopLevel "vkWaitSemaphoresKHR"
-waitSemaphoresKHR = waitSemaphores
-
-
--- No documentation found for TopLevel "vkSignalSemaphoreKHR"
-signalSemaphoreKHR = signalSemaphore
-
-
--- No documentation found for TopLevel "VkSemaphoreWaitFlagsKHR"
-type SemaphoreWaitFlagsKHR = SemaphoreWaitFlags
-
-
--- No documentation found for TopLevel "VkSemaphoreTypeKHR"
-type SemaphoreTypeKHR = SemaphoreType
-
-
--- No documentation found for TopLevel "VkSemaphoreWaitFlagBitsKHR"
-type SemaphoreWaitFlagBitsKHR = SemaphoreWaitFlagBits
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceTimelineSemaphoreFeaturesKHR"
-type PhysicalDeviceTimelineSemaphoreFeaturesKHR = PhysicalDeviceTimelineSemaphoreFeatures
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceTimelineSemaphorePropertiesKHR"
-type PhysicalDeviceTimelineSemaphorePropertiesKHR = PhysicalDeviceTimelineSemaphoreProperties
-
-
--- No documentation found for TopLevel "VkSemaphoreTypeCreateInfoKHR"
-type SemaphoreTypeCreateInfoKHR = SemaphoreTypeCreateInfo
-
-
--- No documentation found for TopLevel "VkTimelineSemaphoreSubmitInfoKHR"
-type TimelineSemaphoreSubmitInfoKHR = TimelineSemaphoreSubmitInfo
-
-
--- No documentation found for TopLevel "VkSemaphoreWaitInfoKHR"
-type SemaphoreWaitInfoKHR = SemaphoreWaitInfo
-
-
--- No documentation found for TopLevel "VkSemaphoreSignalInfoKHR"
-type SemaphoreSignalInfoKHR = SemaphoreSignalInfo
-
-
-type KHR_TIMELINE_SEMAPHORE_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION"
-pattern KHR_TIMELINE_SEMAPHORE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_TIMELINE_SEMAPHORE_SPEC_VERSION = 2
-
-
-type KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME = "VK_KHR_timeline_semaphore"
-
--- No documentation found for TopLevel "VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME"
-pattern KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME = "VK_KHR_timeline_semaphore"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_uniform_buffer_standard_layout.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_uniform_buffer_standard_layout.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_uniform_buffer_standard_layout.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_uniform_buffer_standard_layout  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR
-                                                                         , PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR
-                                                                         , KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION
-                                                                         , pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION
-                                                                         , KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME
-                                                                         , pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME
-                                                                         ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout (PhysicalDeviceUniformBufferStandardLayoutFeatures)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR"
-type PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR = PhysicalDeviceUniformBufferStandardLayoutFeatures
-
-
-type KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION"
-pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION = 1
-
-
-type KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME = "VK_KHR_uniform_buffer_standard_layout"
-
--- No documentation found for TopLevel "VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME"
-pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME = "VK_KHR_uniform_buffer_standard_layout"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_variable_pointers.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_variable_pointers.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_variable_pointers.hs
+++ /dev/null
@@ -1,43 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_variable_pointers  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR
-                                                            , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR
-                                                            , PhysicalDeviceVariablePointersFeaturesKHR
-                                                            , PhysicalDeviceVariablePointerFeaturesKHR
-                                                            , KHR_VARIABLE_POINTERS_SPEC_VERSION
-                                                            , pattern KHR_VARIABLE_POINTERS_SPEC_VERSION
-                                                            , KHR_VARIABLE_POINTERS_EXTENSION_NAME
-                                                            , pattern KHR_VARIABLE_POINTERS_EXTENSION_NAME
-                                                            ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers (PhysicalDeviceVariablePointersFeatures)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers (pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES)
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceVariablePointersFeaturesKHR"
-type PhysicalDeviceVariablePointersFeaturesKHR = PhysicalDeviceVariablePointersFeatures
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceVariablePointerFeaturesKHR"
-type PhysicalDeviceVariablePointerFeaturesKHR = PhysicalDeviceVariablePointersFeatures
-
-
-type KHR_VARIABLE_POINTERS_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_VARIABLE_POINTERS_SPEC_VERSION"
-pattern KHR_VARIABLE_POINTERS_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_VARIABLE_POINTERS_SPEC_VERSION = 1
-
-
-type KHR_VARIABLE_POINTERS_EXTENSION_NAME = "VK_KHR_variable_pointers"
-
--- No documentation found for TopLevel "VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME"
-pattern KHR_VARIABLE_POINTERS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_VARIABLE_POINTERS_EXTENSION_NAME = "VK_KHR_variable_pointers"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_vulkan_memory_model.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_vulkan_memory_model.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_vulkan_memory_model.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_vulkan_memory_model  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR
-                                                              , PhysicalDeviceVulkanMemoryModelFeaturesKHR
-                                                              , KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION
-                                                              , pattern KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION
-                                                              , KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME
-                                                              , pattern KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME
-                                                              ) where
-
-import Data.String (IsString)
-import Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES))
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR"
-pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES
-
-
--- No documentation found for TopLevel "VkPhysicalDeviceVulkanMemoryModelFeaturesKHR"
-type PhysicalDeviceVulkanMemoryModelFeaturesKHR = PhysicalDeviceVulkanMemoryModelFeatures
-
-
-type KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION"
-pattern KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION = 3
-
-
-type KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME = "VK_KHR_vulkan_memory_model"
-
--- No documentation found for TopLevel "VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME"
-pattern KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME = "VK_KHR_vulkan_memory_model"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs
+++ /dev/null
@@ -1,285 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_wayland_surface  ( createWaylandSurfaceKHR
-                                                          , getPhysicalDeviceWaylandPresentationSupportKHR
-                                                          , WaylandSurfaceCreateInfoKHR(..)
-                                                          , WaylandSurfaceCreateFlagsKHR(..)
-                                                          , KHR_WAYLAND_SURFACE_SPEC_VERSION
-                                                          , pattern KHR_WAYLAND_SURFACE_SPEC_VERSION
-                                                          , KHR_WAYLAND_SURFACE_EXTENSION_NAME
-                                                          , pattern KHR_WAYLAND_SURFACE_EXTENSION_NAME
-                                                          , SurfaceKHR(..)
-                                                          , Wl_display
-                                                          , Wl_surface
-                                                          ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32(..))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateWaylandSurfaceKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceWaylandPresentationSupportKHR))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Extensions.WSITypes (Wl_display)
-import Graphics.Vulkan.Extensions.WSITypes (Wl_surface)
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.WSITypes (Wl_display)
-import Graphics.Vulkan.Extensions.WSITypes (Wl_surface)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateWaylandSurfaceKHR
-  :: FunPtr (Ptr Instance_T -> Ptr WaylandSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr WaylandSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateWaylandSurfaceKHR - Create a
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' object for a Wayland
--- window
---
--- = Parameters
---
--- -   @instance@ is the instance to associate the surface with.
---
--- -   @pCreateInfo@ is a pointer to a 'WaylandSurfaceCreateInfoKHR'
---     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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'WaylandSurfaceCreateInfoKHR' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR',
--- 'WaylandSurfaceCreateInfoKHR'
-createWaylandSurfaceKHR :: forall io . MonadIO io => Instance -> WaylandSurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createWaylandSurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateWaylandSurfaceKHR' = mkVkCreateWaylandSurfaceKHR (pVkCreateWaylandSurfaceKHR (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateWaylandSurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceWaylandPresentationSupportKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Wl_display -> IO Bool32) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Wl_display -> IO Bool32
-
--- | vkGetPhysicalDeviceWaylandPresentationSupportKHR - Query physical device
--- for presentation to Wayland
---
--- = 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
---
--- This platform-specific function /can/ be called prior to creating a
--- surface.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceWaylandPresentationSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> Ptr Wl_display -> io (Bool)
-getPhysicalDeviceWaylandPresentationSupportKHR physicalDevice queueFamilyIndex display = liftIO $ do
-  let vkGetPhysicalDeviceWaylandPresentationSupportKHR' = mkVkGetPhysicalDeviceWaylandPresentationSupportKHR (pVkGetPhysicalDeviceWaylandPresentationSupportKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  r <- vkGetPhysicalDeviceWaylandPresentationSupportKHR' (physicalDeviceHandle (physicalDevice)) (queueFamilyIndex) (display)
-  pure $ ((bool32ToBool r))
-
-
--- | VkWaylandSurfaceCreateInfoKHR - Structure specifying parameters of a
--- newly created Wayland surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'WaylandSurfaceCreateFlagsKHR', 'createWaylandSurfaceKHR'
-data WaylandSurfaceCreateInfoKHR = WaylandSurfaceCreateInfoKHR
-  { -- | @flags@ /must/ be @0@
-    flags :: WaylandSurfaceCreateFlagsKHR
-  , -- | @display@ /must/ point to a valid Wayland @wl_display@
-    display :: Ptr Wl_display
-  , -- | @surface@ /must/ point to a valid Wayland @wl_surface@
-    surface :: Ptr Wl_surface
-  }
-  deriving (Typeable)
-deriving instance Show WaylandSurfaceCreateInfoKHR
-
-instance ToCStruct WaylandSurfaceCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p WaylandSurfaceCreateInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr WaylandSurfaceCreateFlagsKHR)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr Wl_display))) (display)
-    poke ((p `plusPtr` 32 :: Ptr (Ptr Wl_surface))) (surface)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr Wl_display))) (zero)
-    poke ((p `plusPtr` 32 :: Ptr (Ptr Wl_surface))) (zero)
-    f
-
-instance FromCStruct WaylandSurfaceCreateInfoKHR where
-  peekCStruct p = do
-    flags <- peek @WaylandSurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr WaylandSurfaceCreateFlagsKHR))
-    display <- peek @(Ptr Wl_display) ((p `plusPtr` 24 :: Ptr (Ptr Wl_display)))
-    surface <- peek @(Ptr Wl_surface) ((p `plusPtr` 32 :: Ptr (Ptr Wl_surface)))
-    pure $ WaylandSurfaceCreateInfoKHR
-             flags display surface
-
-instance Storable WaylandSurfaceCreateInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero WaylandSurfaceCreateInfoKHR where
-  zero = WaylandSurfaceCreateInfoKHR
-           zero
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkWaylandSurfaceCreateFlagsKHR"
-newtype WaylandSurfaceCreateFlagsKHR = WaylandSurfaceCreateFlagsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show WaylandSurfaceCreateFlagsKHR where
-  showsPrec p = \case
-    WaylandSurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "WaylandSurfaceCreateFlagsKHR 0x" . showHex x)
-
-instance Read WaylandSurfaceCreateFlagsKHR where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "WaylandSurfaceCreateFlagsKHR")
-                       v <- step readPrec
-                       pure (WaylandSurfaceCreateFlagsKHR v)))
-
-
-type KHR_WAYLAND_SURFACE_SPEC_VERSION = 6
-
--- No documentation found for TopLevel "VK_KHR_WAYLAND_SURFACE_SPEC_VERSION"
-pattern KHR_WAYLAND_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_WAYLAND_SURFACE_SPEC_VERSION = 6
-
-
-type KHR_WAYLAND_SURFACE_EXTENSION_NAME = "VK_KHR_wayland_surface"
-
--- No documentation found for TopLevel "VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME"
-pattern KHR_WAYLAND_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_WAYLAND_SURFACE_EXTENSION_NAME = "VK_KHR_wayland_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_wayland_surface  (WaylandSurfaceCreateInfoKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data WaylandSurfaceCreateInfoKHR
-
-instance ToCStruct WaylandSurfaceCreateInfoKHR
-instance Show WaylandSurfaceCreateInfoKHR
-
-instance FromCStruct WaylandSurfaceCreateInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs
+++ /dev/null
@@ -1,201 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex  ( Win32KeyedMutexAcquireReleaseInfoKHR(..)
-                                                            , KHR_WIN32_KEYED_MUTEX_SPEC_VERSION
-                                                            , pattern KHR_WIN32_KEYED_MUTEX_SPEC_VERSION
-                                                            , KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME
-                                                            , pattern KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME
-                                                            ) where
-
-import Control.Monad (unless)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR))
--- | VkWin32KeyedMutexAcquireReleaseInfoKHR - Use the Windows keyed mutex
--- mechanism to synchronize work
---
--- == 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.ImportMemoryWin32HandleInfoKHR'::@handleType@
---     to
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT'
---     or
---     'Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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 of non-ignored parameters
---     /must/ have been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data Win32KeyedMutexAcquireReleaseInfoKHR = Win32KeyedMutexAcquireReleaseInfoKHR
-  { -- | @pAcquireSyncs@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.DeviceMemory' objects which were
-    -- imported from Direct3D 11 resources.
-    acquireSyncs :: Vector DeviceMemory
-  , -- | @pAcquireKeys@ is a pointer to an array of mutex key values to wait for
-    -- prior to beginning the submitted work. Entries refer to the keyed mutex
-    -- associated with the corresponding entries in @pAcquireSyncs@.
-    acquireKeys :: Vector Word64
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "pAcquireTimeouts"
-    acquireTimeouts :: Vector Word32
-  , -- | @pReleaseSyncs@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.DeviceMemory' objects which were
-    -- imported from Direct3D 11 resources.
-    releaseSyncs :: Vector DeviceMemory
-  , -- | @pReleaseKeys@ is a pointer to an array of mutex key values to set when
-    -- the submitted work has completed. Entries refer to the keyed mutex
-    -- associated with the corresponding entries in @pReleaseSyncs@.
-    releaseKeys :: Vector Word64
-  }
-  deriving (Typeable)
-deriving instance Show Win32KeyedMutexAcquireReleaseInfoKHR
-
-instance ToCStruct Win32KeyedMutexAcquireReleaseInfoKHR where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p Win32KeyedMutexAcquireReleaseInfoKHR{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    let pAcquireSyncsLength = Data.Vector.length $ (acquireSyncs)
-    let pAcquireKeysLength = Data.Vector.length $ (acquireKeys)
-    lift $ unless (pAcquireKeysLength == pAcquireSyncsLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pAcquireKeys and pAcquireSyncs must have the same length" Nothing Nothing
-    let pAcquireTimeoutsLength = Data.Vector.length $ (acquireTimeouts)
-    lift $ unless (pAcquireTimeoutsLength == pAcquireSyncsLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pAcquireTimeouts and pAcquireSyncs must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral pAcquireSyncsLength :: Word32))
-    pPAcquireSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (acquireSyncs)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (acquireSyncs)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory))) (pPAcquireSyncs')
-    pPAcquireKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (acquireKeys)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (acquireKeys)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPAcquireKeys')
-    pPAcquireTimeouts' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (acquireTimeouts)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireTimeouts' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (acquireTimeouts)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPAcquireTimeouts')
-    let pReleaseSyncsLength = Data.Vector.length $ (releaseSyncs)
-    let pReleaseKeysLength = Data.Vector.length $ (releaseKeys)
-    lift $ unless (pReleaseKeysLength == pReleaseSyncsLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pReleaseKeys and pReleaseSyncs must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral pReleaseSyncsLength :: Word32))
-    pPReleaseSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (releaseSyncs)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (releaseSyncs)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory))) (pPReleaseSyncs')
-    pPReleaseKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (releaseKeys)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (releaseKeys)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word64))) (pPReleaseKeys')
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPAcquireSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory))) (pPAcquireSyncs')
-    pPAcquireKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPAcquireKeys')
-    pPAcquireTimeouts' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireTimeouts' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPAcquireTimeouts')
-    pPReleaseSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory))) (pPReleaseSyncs')
-    pPReleaseKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word64))) (pPReleaseKeys')
-    lift $ f
-
-instance FromCStruct Win32KeyedMutexAcquireReleaseInfoKHR where
-  peekCStruct p = do
-    acquireCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pAcquireSyncs <- peek @(Ptr DeviceMemory) ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory)))
-    pAcquireSyncs' <- generateM (fromIntegral acquireCount) (\i -> peek @DeviceMemory ((pAcquireSyncs `advancePtrBytes` (8 * (i)) :: Ptr DeviceMemory)))
-    pAcquireKeys <- peek @(Ptr Word64) ((p `plusPtr` 32 :: Ptr (Ptr Word64)))
-    pAcquireKeys' <- generateM (fromIntegral acquireCount) (\i -> peek @Word64 ((pAcquireKeys `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
-    pAcquireTimeouts <- peek @(Ptr Word32) ((p `plusPtr` 40 :: Ptr (Ptr Word32)))
-    pAcquireTimeouts' <- generateM (fromIntegral acquireCount) (\i -> peek @Word32 ((pAcquireTimeouts `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    releaseCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pReleaseSyncs <- peek @(Ptr DeviceMemory) ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory)))
-    pReleaseSyncs' <- generateM (fromIntegral releaseCount) (\i -> peek @DeviceMemory ((pReleaseSyncs `advancePtrBytes` (8 * (i)) :: Ptr DeviceMemory)))
-    pReleaseKeys <- peek @(Ptr Word64) ((p `plusPtr` 64 :: Ptr (Ptr Word64)))
-    pReleaseKeys' <- generateM (fromIntegral releaseCount) (\i -> peek @Word64 ((pReleaseKeys `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
-    pure $ Win32KeyedMutexAcquireReleaseInfoKHR
-             pAcquireSyncs' pAcquireKeys' pAcquireTimeouts' pReleaseSyncs' pReleaseKeys'
-
-instance Zero Win32KeyedMutexAcquireReleaseInfoKHR where
-  zero = Win32KeyedMutexAcquireReleaseInfoKHR
-           mempty
-           mempty
-           mempty
-           mempty
-           mempty
-
-
-type KHR_WIN32_KEYED_MUTEX_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION"
-pattern KHR_WIN32_KEYED_MUTEX_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_WIN32_KEYED_MUTEX_SPEC_VERSION = 1
-
-
-type KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_KHR_win32_keyed_mutex"
-
--- No documentation found for TopLevel "VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME"
-pattern KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_KHR_win32_keyed_mutex"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex  (Win32KeyedMutexAcquireReleaseInfoKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data Win32KeyedMutexAcquireReleaseInfoKHR
-
-instance ToCStruct Win32KeyedMutexAcquireReleaseInfoKHR
-instance Show Win32KeyedMutexAcquireReleaseInfoKHR
-
-instance FromCStruct Win32KeyedMutexAcquireReleaseInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs
+++ /dev/null
@@ -1,293 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_win32_surface  ( createWin32SurfaceKHR
-                                                        , getPhysicalDeviceWin32PresentationSupportKHR
-                                                        , Win32SurfaceCreateInfoKHR(..)
-                                                        , Win32SurfaceCreateFlagsKHR(..)
-                                                        , KHR_WIN32_SURFACE_SPEC_VERSION
-                                                        , pattern KHR_WIN32_SURFACE_SPEC_VERSION
-                                                        , KHR_WIN32_SURFACE_EXTENSION_NAME
-                                                        , pattern KHR_WIN32_SURFACE_EXTENSION_NAME
-                                                        , SurfaceKHR(..)
-                                                        , HINSTANCE
-                                                        , HWND
-                                                        ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32(..))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Extensions.WSITypes (HINSTANCE)
-import Graphics.Vulkan.Extensions.WSITypes (HWND)
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateWin32SurfaceKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceWin32PresentationSupportKHR))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (HINSTANCE)
-import Graphics.Vulkan.Extensions.WSITypes (HWND)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateWin32SurfaceKHR
-  :: FunPtr (Ptr Instance_T -> Ptr Win32SurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr Win32SurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateWin32SurfaceKHR - Create a
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' object for an Win32
--- native window
---
--- = Parameters
---
--- -   @instance@ is the instance to associate the surface with.
---
--- -   @pCreateInfo@ is a pointer to a 'Win32SurfaceCreateInfoKHR'
---     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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'Win32SurfaceCreateInfoKHR' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR',
--- 'Win32SurfaceCreateInfoKHR'
-createWin32SurfaceKHR :: forall io . MonadIO io => Instance -> Win32SurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createWin32SurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateWin32SurfaceKHR' = mkVkCreateWin32SurfaceKHR (pVkCreateWin32SurfaceKHR (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateWin32SurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceWin32PresentationSupportKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> IO Bool32) -> Ptr PhysicalDevice_T -> Word32 -> IO Bool32
-
--- | vkGetPhysicalDeviceWin32PresentationSupportKHR - query queue family
--- support for presentation on a Win32 display
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device.
---
--- -   @queueFamilyIndex@ is the queue family index.
---
--- = Description
---
--- This platform-specific function /can/ be called prior to creating a
--- surface.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceWin32PresentationSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> io (Bool)
-getPhysicalDeviceWin32PresentationSupportKHR physicalDevice queueFamilyIndex = liftIO $ do
-  let vkGetPhysicalDeviceWin32PresentationSupportKHR' = mkVkGetPhysicalDeviceWin32PresentationSupportKHR (pVkGetPhysicalDeviceWin32PresentationSupportKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  r <- vkGetPhysicalDeviceWin32PresentationSupportKHR' (physicalDeviceHandle (physicalDevice)) (queueFamilyIndex)
-  pure $ ((bool32ToBool r))
-
-
--- | VkWin32SurfaceCreateInfoKHR - Structure specifying parameters of a newly
--- created Win32 surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Win32SurfaceCreateFlagsKHR', 'createWin32SurfaceKHR'
-data Win32SurfaceCreateInfoKHR = Win32SurfaceCreateInfoKHR
-  { -- | @flags@ /must/ be @0@
-    flags :: Win32SurfaceCreateFlagsKHR
-  , -- | @hinstance@ /must/ be a valid Win32
-    -- 'Graphics.Vulkan.Extensions.WSITypes.HINSTANCE'
-    hinstance :: HINSTANCE
-  , -- | @hwnd@ /must/ be a valid Win32
-    -- 'Graphics.Vulkan.Extensions.WSITypes.HWND'
-    hwnd :: HWND
-  }
-  deriving (Typeable)
-deriving instance Show Win32SurfaceCreateInfoKHR
-
-instance ToCStruct Win32SurfaceCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p Win32SurfaceCreateInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Win32SurfaceCreateFlagsKHR)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr HINSTANCE)) (hinstance)
-    poke ((p `plusPtr` 32 :: Ptr HWND)) (hwnd)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr HINSTANCE)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr HWND)) (zero)
-    f
-
-instance FromCStruct Win32SurfaceCreateInfoKHR where
-  peekCStruct p = do
-    flags <- peek @Win32SurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr Win32SurfaceCreateFlagsKHR))
-    hinstance <- peek @HINSTANCE ((p `plusPtr` 24 :: Ptr HINSTANCE))
-    hwnd <- peek @HWND ((p `plusPtr` 32 :: Ptr HWND))
-    pure $ Win32SurfaceCreateInfoKHR
-             flags hinstance hwnd
-
-instance Storable Win32SurfaceCreateInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero Win32SurfaceCreateInfoKHR where
-  zero = Win32SurfaceCreateInfoKHR
-           zero
-           zero
-           zero
-
-
--- | VkWin32SurfaceCreateFlagsKHR - Reserved for future use
---
--- = Description
---
--- 'Win32SurfaceCreateFlagsKHR' is a bitmask type for setting a mask, but
--- is currently reserved for future use.
---
--- = See Also
---
--- 'Win32SurfaceCreateInfoKHR'
-newtype Win32SurfaceCreateFlagsKHR = Win32SurfaceCreateFlagsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show Win32SurfaceCreateFlagsKHR where
-  showsPrec p = \case
-    Win32SurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "Win32SurfaceCreateFlagsKHR 0x" . showHex x)
-
-instance Read Win32SurfaceCreateFlagsKHR where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "Win32SurfaceCreateFlagsKHR")
-                       v <- step readPrec
-                       pure (Win32SurfaceCreateFlagsKHR v)))
-
-
-type KHR_WIN32_SURFACE_SPEC_VERSION = 6
-
--- No documentation found for TopLevel "VK_KHR_WIN32_SURFACE_SPEC_VERSION"
-pattern KHR_WIN32_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_WIN32_SURFACE_SPEC_VERSION = 6
-
-
-type KHR_WIN32_SURFACE_EXTENSION_NAME = "VK_KHR_win32_surface"
-
--- No documentation found for TopLevel "VK_KHR_WIN32_SURFACE_EXTENSION_NAME"
-pattern KHR_WIN32_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_WIN32_SURFACE_EXTENSION_NAME = "VK_KHR_win32_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_win32_surface  (Win32SurfaceCreateInfoKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data Win32SurfaceCreateInfoKHR
-
-instance ToCStruct Win32SurfaceCreateInfoKHR
-instance Show Win32SurfaceCreateInfoKHR
-
-instance FromCStruct Win32SurfaceCreateInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs
+++ /dev/null
@@ -1,288 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_xcb_surface  ( createXcbSurfaceKHR
-                                                      , getPhysicalDeviceXcbPresentationSupportKHR
-                                                      , XcbSurfaceCreateInfoKHR(..)
-                                                      , XcbSurfaceCreateFlagsKHR(..)
-                                                      , KHR_XCB_SURFACE_SPEC_VERSION
-                                                      , pattern KHR_XCB_SURFACE_SPEC_VERSION
-                                                      , KHR_XCB_SURFACE_EXTENSION_NAME
-                                                      , pattern KHR_XCB_SURFACE_EXTENSION_NAME
-                                                      , SurfaceKHR(..)
-                                                      , Xcb_visualid_t
-                                                      , Xcb_window_t
-                                                      , Xcb_connection_t
-                                                      ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32(..))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateXcbSurfaceKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceXcbPresentationSupportKHR))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Extensions.WSITypes (Xcb_connection_t)
-import Graphics.Vulkan.Extensions.WSITypes (Xcb_visualid_t)
-import Graphics.Vulkan.Extensions.WSITypes (Xcb_window_t)
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.WSITypes (Xcb_connection_t)
-import Graphics.Vulkan.Extensions.WSITypes (Xcb_visualid_t)
-import Graphics.Vulkan.Extensions.WSITypes (Xcb_window_t)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateXcbSurfaceKHR
-  :: FunPtr (Ptr Instance_T -> Ptr XcbSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr XcbSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateXcbSurfaceKHR - Create a
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' object for a X11 window,
--- using the XCB client-side library
---
--- = Parameters
---
--- -   @instance@ is the instance to associate the surface with.
---
--- -   @pCreateInfo@ is a pointer to a 'XcbSurfaceCreateInfoKHR' 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'XcbSurfaceCreateInfoKHR' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR',
--- 'XcbSurfaceCreateInfoKHR'
-createXcbSurfaceKHR :: forall io . MonadIO io => Instance -> XcbSurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createXcbSurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateXcbSurfaceKHR' = mkVkCreateXcbSurfaceKHR (pVkCreateXcbSurfaceKHR (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateXcbSurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceXcbPresentationSupportKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Xcb_connection_t -> Xcb_visualid_t -> IO Bool32) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Xcb_connection_t -> Xcb_visualid_t -> IO Bool32
-
--- | vkGetPhysicalDeviceXcbPresentationSupportKHR - Query physical device for
--- presentation to X11 server using XCB
---
--- = 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
---
--- This platform-specific function /can/ be called prior to creating a
--- surface.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceXcbPresentationSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> Ptr Xcb_connection_t -> ("visual_id" ::: Xcb_visualid_t) -> io (Bool)
-getPhysicalDeviceXcbPresentationSupportKHR physicalDevice queueFamilyIndex connection visual_id = liftIO $ do
-  let vkGetPhysicalDeviceXcbPresentationSupportKHR' = mkVkGetPhysicalDeviceXcbPresentationSupportKHR (pVkGetPhysicalDeviceXcbPresentationSupportKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  r <- vkGetPhysicalDeviceXcbPresentationSupportKHR' (physicalDeviceHandle (physicalDevice)) (queueFamilyIndex) (connection) (visual_id)
-  pure $ ((bool32ToBool r))
-
-
--- | VkXcbSurfaceCreateInfoKHR - Structure specifying parameters of a newly
--- created Xcb surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'XcbSurfaceCreateFlagsKHR', 'createXcbSurfaceKHR'
-data XcbSurfaceCreateInfoKHR = XcbSurfaceCreateInfoKHR
-  { -- | @flags@ /must/ be @0@
-    flags :: XcbSurfaceCreateFlagsKHR
-  , -- | @connection@ /must/ point to a valid X11 @xcb_connection_t@
-    connection :: Ptr Xcb_connection_t
-  , -- | @window@ /must/ be a valid X11 @xcb_window_t@
-    window :: Xcb_window_t
-  }
-  deriving (Typeable)
-deriving instance Show XcbSurfaceCreateInfoKHR
-
-instance ToCStruct XcbSurfaceCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p XcbSurfaceCreateInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr XcbSurfaceCreateFlagsKHR)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr Xcb_connection_t))) (connection)
-    poke ((p `plusPtr` 32 :: Ptr Xcb_window_t)) (window)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr Xcb_connection_t))) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Xcb_window_t)) (zero)
-    f
-
-instance FromCStruct XcbSurfaceCreateInfoKHR where
-  peekCStruct p = do
-    flags <- peek @XcbSurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr XcbSurfaceCreateFlagsKHR))
-    connection <- peek @(Ptr Xcb_connection_t) ((p `plusPtr` 24 :: Ptr (Ptr Xcb_connection_t)))
-    window <- peek @Xcb_window_t ((p `plusPtr` 32 :: Ptr Xcb_window_t))
-    pure $ XcbSurfaceCreateInfoKHR
-             flags connection window
-
-instance Storable XcbSurfaceCreateInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero XcbSurfaceCreateInfoKHR where
-  zero = XcbSurfaceCreateInfoKHR
-           zero
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkXcbSurfaceCreateFlagsKHR"
-newtype XcbSurfaceCreateFlagsKHR = XcbSurfaceCreateFlagsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show XcbSurfaceCreateFlagsKHR where
-  showsPrec p = \case
-    XcbSurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "XcbSurfaceCreateFlagsKHR 0x" . showHex x)
-
-instance Read XcbSurfaceCreateFlagsKHR where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "XcbSurfaceCreateFlagsKHR")
-                       v <- step readPrec
-                       pure (XcbSurfaceCreateFlagsKHR v)))
-
-
-type KHR_XCB_SURFACE_SPEC_VERSION = 6
-
--- No documentation found for TopLevel "VK_KHR_XCB_SURFACE_SPEC_VERSION"
-pattern KHR_XCB_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_XCB_SURFACE_SPEC_VERSION = 6
-
-
-type KHR_XCB_SURFACE_EXTENSION_NAME = "VK_KHR_xcb_surface"
-
--- No documentation found for TopLevel "VK_KHR_XCB_SURFACE_EXTENSION_NAME"
-pattern KHR_XCB_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_XCB_SURFACE_EXTENSION_NAME = "VK_KHR_xcb_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_xcb_surface  (XcbSurfaceCreateInfoKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data XcbSurfaceCreateInfoKHR
-
-instance ToCStruct XcbSurfaceCreateInfoKHR
-instance Show XcbSurfaceCreateInfoKHR
-
-instance FromCStruct XcbSurfaceCreateInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs
+++ /dev/null
@@ -1,294 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_xlib_surface  ( createXlibSurfaceKHR
-                                                       , getPhysicalDeviceXlibPresentationSupportKHR
-                                                       , XlibSurfaceCreateInfoKHR(..)
-                                                       , XlibSurfaceCreateFlagsKHR(..)
-                                                       , KHR_XLIB_SURFACE_SPEC_VERSION
-                                                       , pattern KHR_XLIB_SURFACE_SPEC_VERSION
-                                                       , KHR_XLIB_SURFACE_EXTENSION_NAME
-                                                       , pattern KHR_XLIB_SURFACE_EXTENSION_NAME
-                                                       , SurfaceKHR(..)
-                                                       , Display
-                                                       , VisualID
-                                                       , Window
-                                                       ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32(..))
-import Graphics.Vulkan.Extensions.WSITypes (Display)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateXlibSurfaceKHR))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceXlibPresentationSupportKHR))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Extensions.WSITypes (VisualID)
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Extensions.WSITypes (Window)
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (Display)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.Extensions.WSITypes (VisualID)
-import Graphics.Vulkan.Extensions.WSITypes (Window)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateXlibSurfaceKHR
-  :: FunPtr (Ptr Instance_T -> Ptr XlibSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr XlibSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateXlibSurfaceKHR - Create a
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' object for an X11
--- window, using the Xlib client-side library
---
--- = Parameters
---
--- -   @instance@ is the instance to associate the surface with.
---
--- -   @pCreateInfo@ is a pointer to a 'XlibSurfaceCreateInfoKHR' 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'XlibSurfaceCreateInfoKHR' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR',
--- 'XlibSurfaceCreateInfoKHR'
-createXlibSurfaceKHR :: forall io . MonadIO io => Instance -> XlibSurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createXlibSurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateXlibSurfaceKHR' = mkVkCreateXlibSurfaceKHR (pVkCreateXlibSurfaceKHR (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateXlibSurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceXlibPresentationSupportKHR
-  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Display -> VisualID -> IO Bool32) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Display -> VisualID -> IO Bool32
-
--- | vkGetPhysicalDeviceXlibPresentationSupportKHR - Query physical device
--- for presentation to X11 server using Xlib
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device.
---
--- -   @queueFamilyIndex@ is the queue family index.
---
--- -   @dpy@ is a pointer to an Xlib
---     'Graphics.Vulkan.Extensions.WSITypes.Display' connection to the
---     server.
---
--- -   @visualId@ is an X11 visual
---     ('Graphics.Vulkan.Extensions.WSITypes.VisualID').
---
--- = Description
---
--- This platform-specific function /can/ be called prior to creating a
--- surface.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceXlibPresentationSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> ("dpy" ::: Ptr Display) -> VisualID -> io (Bool)
-getPhysicalDeviceXlibPresentationSupportKHR physicalDevice queueFamilyIndex dpy visualID = liftIO $ do
-  let vkGetPhysicalDeviceXlibPresentationSupportKHR' = mkVkGetPhysicalDeviceXlibPresentationSupportKHR (pVkGetPhysicalDeviceXlibPresentationSupportKHR (instanceCmds (physicalDevice :: PhysicalDevice)))
-  r <- vkGetPhysicalDeviceXlibPresentationSupportKHR' (physicalDeviceHandle (physicalDevice)) (queueFamilyIndex) (dpy) (visualID)
-  pure $ ((bool32ToBool r))
-
-
--- | VkXlibSurfaceCreateInfoKHR - Structure specifying parameters of a newly
--- created Xlib surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'XlibSurfaceCreateFlagsKHR', 'createXlibSurfaceKHR'
-data XlibSurfaceCreateInfoKHR = XlibSurfaceCreateInfoKHR
-  { -- | @flags@ /must/ be @0@
-    flags :: XlibSurfaceCreateFlagsKHR
-  , -- | @dpy@ /must/ point to a valid Xlib
-    -- 'Graphics.Vulkan.Extensions.WSITypes.Display'
-    dpy :: Ptr Display
-  , -- | @window@ /must/ be a valid Xlib
-    -- 'Graphics.Vulkan.Extensions.WSITypes.Window'
-    window :: Window
-  }
-  deriving (Typeable)
-deriving instance Show XlibSurfaceCreateInfoKHR
-
-instance ToCStruct XlibSurfaceCreateInfoKHR where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p XlibSurfaceCreateInfoKHR{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr XlibSurfaceCreateFlagsKHR)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr Display))) (dpy)
-    poke ((p `plusPtr` 32 :: Ptr Window)) (window)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr Display))) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Window)) (zero)
-    f
-
-instance FromCStruct XlibSurfaceCreateInfoKHR where
-  peekCStruct p = do
-    flags <- peek @XlibSurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr XlibSurfaceCreateFlagsKHR))
-    dpy <- peek @(Ptr Display) ((p `plusPtr` 24 :: Ptr (Ptr Display)))
-    window <- peek @Window ((p `plusPtr` 32 :: Ptr Window))
-    pure $ XlibSurfaceCreateInfoKHR
-             flags dpy window
-
-instance Storable XlibSurfaceCreateInfoKHR where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero XlibSurfaceCreateInfoKHR where
-  zero = XlibSurfaceCreateInfoKHR
-           zero
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkXlibSurfaceCreateFlagsKHR"
-newtype XlibSurfaceCreateFlagsKHR = XlibSurfaceCreateFlagsKHR Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show XlibSurfaceCreateFlagsKHR where
-  showsPrec p = \case
-    XlibSurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "XlibSurfaceCreateFlagsKHR 0x" . showHex x)
-
-instance Read XlibSurfaceCreateFlagsKHR where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "XlibSurfaceCreateFlagsKHR")
-                       v <- step readPrec
-                       pure (XlibSurfaceCreateFlagsKHR v)))
-
-
-type KHR_XLIB_SURFACE_SPEC_VERSION = 6
-
--- No documentation found for TopLevel "VK_KHR_XLIB_SURFACE_SPEC_VERSION"
-pattern KHR_XLIB_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern KHR_XLIB_SURFACE_SPEC_VERSION = 6
-
-
-type KHR_XLIB_SURFACE_EXTENSION_NAME = "VK_KHR_xlib_surface"
-
--- No documentation found for TopLevel "VK_KHR_XLIB_SURFACE_EXTENSION_NAME"
-pattern KHR_XLIB_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern KHR_XLIB_SURFACE_EXTENSION_NAME = "VK_KHR_xlib_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_KHR_xlib_surface  (XlibSurfaceCreateInfoKHR) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data XlibSurfaceCreateInfoKHR
-
-instance ToCStruct XlibSurfaceCreateInfoKHR
-instance Show XlibSurfaceCreateInfoKHR
-
-instance FromCStruct XlibSurfaceCreateInfoKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs b/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs
+++ /dev/null
@@ -1,228 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_MVK_ios_surface  ( createIOSSurfaceMVK
-                                                      , IOSSurfaceCreateInfoMVK(..)
-                                                      , IOSSurfaceCreateFlagsMVK(..)
-                                                      , MVK_IOS_SURFACE_SPEC_VERSION
-                                                      , pattern MVK_IOS_SURFACE_SPEC_VERSION
-                                                      , MVK_IOS_SURFACE_EXTENSION_NAME
-                                                      , pattern MVK_IOS_SURFACE_EXTENSION_NAME
-                                                      , SurfaceKHR(..)
-                                                      ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateIOSSurfaceMVK))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateIOSSurfaceMVK
-  :: FunPtr (Ptr Instance_T -> Ptr IOSSurfaceCreateInfoMVK -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr IOSSurfaceCreateInfoMVK -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateIOSSurfaceMVK - Create a VkSurfaceKHR object for an iOS UIView
---
--- = Parameters
---
--- -   @instance@ is the instance with which to associate the surface.
---
--- -   @pCreateInfo@ is a pointer to a 'IOSSurfaceCreateInfoMVK' 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'IOSSurfaceCreateInfoMVK' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'IOSSurfaceCreateInfoMVK', 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-createIOSSurfaceMVK :: forall io . MonadIO io => Instance -> IOSSurfaceCreateInfoMVK -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createIOSSurfaceMVK instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateIOSSurfaceMVK' = mkVkCreateIOSSurfaceMVK (pVkCreateIOSSurfaceMVK (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateIOSSurfaceMVK' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
--- | VkIOSSurfaceCreateInfoMVK - Structure specifying parameters of a newly
--- created iOS surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'IOSSurfaceCreateFlagsMVK',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createIOSSurfaceMVK'
-data IOSSurfaceCreateInfoMVK = IOSSurfaceCreateInfoMVK
-  { -- | @flags@ /must/ be @0@
-    flags :: IOSSurfaceCreateFlagsMVK
-  , -- | @pView@ /must/ be a valid @UIView@ and /must/ be backed by a @CALayer@
-    -- instance of type 'Graphics.Vulkan.Extensions.WSITypes.CAMetalLayer'
-    view :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show IOSSurfaceCreateInfoMVK
-
-instance ToCStruct IOSSurfaceCreateInfoMVK where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p IOSSurfaceCreateInfoMVK{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr IOSSurfaceCreateFlagsMVK)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (view)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct IOSSurfaceCreateInfoMVK where
-  peekCStruct p = do
-    flags <- peek @IOSSurfaceCreateFlagsMVK ((p `plusPtr` 16 :: Ptr IOSSurfaceCreateFlagsMVK))
-    pView <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
-    pure $ IOSSurfaceCreateInfoMVK
-             flags pView
-
-instance Storable IOSSurfaceCreateInfoMVK where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero IOSSurfaceCreateInfoMVK where
-  zero = IOSSurfaceCreateInfoMVK
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkIOSSurfaceCreateFlagsMVK"
-newtype IOSSurfaceCreateFlagsMVK = IOSSurfaceCreateFlagsMVK Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show IOSSurfaceCreateFlagsMVK where
-  showsPrec p = \case
-    IOSSurfaceCreateFlagsMVK x -> showParen (p >= 11) (showString "IOSSurfaceCreateFlagsMVK 0x" . showHex x)
-
-instance Read IOSSurfaceCreateFlagsMVK where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "IOSSurfaceCreateFlagsMVK")
-                       v <- step readPrec
-                       pure (IOSSurfaceCreateFlagsMVK v)))
-
-
-type MVK_IOS_SURFACE_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_MVK_IOS_SURFACE_SPEC_VERSION"
-pattern MVK_IOS_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern MVK_IOS_SURFACE_SPEC_VERSION = 2
-
-
-type MVK_IOS_SURFACE_EXTENSION_NAME = "VK_MVK_ios_surface"
-
--- No documentation found for TopLevel "VK_MVK_IOS_SURFACE_EXTENSION_NAME"
-pattern MVK_IOS_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern MVK_IOS_SURFACE_EXTENSION_NAME = "VK_MVK_ios_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_MVK_ios_surface  (IOSSurfaceCreateInfoMVK) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data IOSSurfaceCreateInfoMVK
-
-instance ToCStruct IOSSurfaceCreateInfoMVK
-instance Show IOSSurfaceCreateInfoMVK
-
-instance FromCStruct IOSSurfaceCreateInfoMVK
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs b/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs
+++ /dev/null
@@ -1,230 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_MVK_macos_surface  ( createMacOSSurfaceMVK
-                                                        , MacOSSurfaceCreateInfoMVK(..)
-                                                        , MacOSSurfaceCreateFlagsMVK(..)
-                                                        , MVK_MACOS_SURFACE_SPEC_VERSION
-                                                        , pattern MVK_MACOS_SURFACE_SPEC_VERSION
-                                                        , MVK_MACOS_SURFACE_EXTENSION_NAME
-                                                        , pattern MVK_MACOS_SURFACE_EXTENSION_NAME
-                                                        , SurfaceKHR(..)
-                                                        ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateMacOSSurfaceMVK))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateMacOSSurfaceMVK
-  :: FunPtr (Ptr Instance_T -> Ptr MacOSSurfaceCreateInfoMVK -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr MacOSSurfaceCreateInfoMVK -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateMacOSSurfaceMVK - Create a VkSurfaceKHR object for a macOS
--- NSView
---
--- = Parameters
---
--- -   @instance@ is the instance with which to associate the surface.
---
--- -   @pCreateInfo@ is a pointer to a 'MacOSSurfaceCreateInfoMVK'
---     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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'MacOSSurfaceCreateInfoMVK' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance', 'MacOSSurfaceCreateInfoMVK',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR'
-createMacOSSurfaceMVK :: forall io . MonadIO io => Instance -> MacOSSurfaceCreateInfoMVK -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createMacOSSurfaceMVK instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateMacOSSurfaceMVK' = mkVkCreateMacOSSurfaceMVK (pVkCreateMacOSSurfaceMVK (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateMacOSSurfaceMVK' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
--- | VkMacOSSurfaceCreateInfoMVK - Structure specifying parameters of a newly
--- created macOS surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'MacOSSurfaceCreateFlagsMVK',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createMacOSSurfaceMVK'
-data MacOSSurfaceCreateInfoMVK = MacOSSurfaceCreateInfoMVK
-  { -- | @flags@ /must/ be @0@
-    flags :: MacOSSurfaceCreateFlagsMVK
-  , -- | @pView@ /must/ be a valid @NSView@ and /must/ be backed by a @CALayer@
-    -- instance of type 'Graphics.Vulkan.Extensions.WSITypes.CAMetalLayer'
-    view :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show MacOSSurfaceCreateInfoMVK
-
-instance ToCStruct MacOSSurfaceCreateInfoMVK where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p MacOSSurfaceCreateInfoMVK{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr MacOSSurfaceCreateFlagsMVK)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (view)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct MacOSSurfaceCreateInfoMVK where
-  peekCStruct p = do
-    flags <- peek @MacOSSurfaceCreateFlagsMVK ((p `plusPtr` 16 :: Ptr MacOSSurfaceCreateFlagsMVK))
-    pView <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
-    pure $ MacOSSurfaceCreateInfoMVK
-             flags pView
-
-instance Storable MacOSSurfaceCreateInfoMVK where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero MacOSSurfaceCreateInfoMVK where
-  zero = MacOSSurfaceCreateInfoMVK
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkMacOSSurfaceCreateFlagsMVK"
-newtype MacOSSurfaceCreateFlagsMVK = MacOSSurfaceCreateFlagsMVK Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show MacOSSurfaceCreateFlagsMVK where
-  showsPrec p = \case
-    MacOSSurfaceCreateFlagsMVK x -> showParen (p >= 11) (showString "MacOSSurfaceCreateFlagsMVK 0x" . showHex x)
-
-instance Read MacOSSurfaceCreateFlagsMVK where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "MacOSSurfaceCreateFlagsMVK")
-                       v <- step readPrec
-                       pure (MacOSSurfaceCreateFlagsMVK v)))
-
-
-type MVK_MACOS_SURFACE_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_MVK_MACOS_SURFACE_SPEC_VERSION"
-pattern MVK_MACOS_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern MVK_MACOS_SURFACE_SPEC_VERSION = 2
-
-
-type MVK_MACOS_SURFACE_EXTENSION_NAME = "VK_MVK_macos_surface"
-
--- No documentation found for TopLevel "VK_MVK_MACOS_SURFACE_EXTENSION_NAME"
-pattern MVK_MACOS_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern MVK_MACOS_SURFACE_EXTENSION_NAME = "VK_MVK_macos_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_MVK_macos_surface  (MacOSSurfaceCreateInfoMVK) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data MacOSSurfaceCreateInfoMVK
-
-instance ToCStruct MacOSSurfaceCreateInfoMVK
-instance Show MacOSSurfaceCreateInfoMVK
-
-instance FromCStruct MacOSSurfaceCreateInfoMVK
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs b/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs
+++ /dev/null
@@ -1,243 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NN_vi_surface  ( createViSurfaceNN
-                                                    , ViSurfaceCreateInfoNN(..)
-                                                    , ViSurfaceCreateFlagsNN(..)
-                                                    , NN_VI_SURFACE_SPEC_VERSION
-                                                    , pattern NN_VI_SURFACE_SPEC_VERSION
-                                                    , NN_VI_SURFACE_EXTENSION_NAME
-                                                    , pattern NN_VI_SURFACE_EXTENSION_NAME
-                                                    , SurfaceKHR(..)
-                                                    ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Instance)
-import Graphics.Vulkan.Core10.Handles (Instance(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkCreateViSurfaceNN))
-import Graphics.Vulkan.Core10.Handles (Instance_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR)
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (SurfaceKHR(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateViSurfaceNN
-  :: FunPtr (Ptr Instance_T -> Ptr ViSurfaceCreateInfoNN -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr ViSurfaceCreateInfoNN -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
-
--- | vkCreateViSurfaceNN - Create a
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' object for a VI layer
---
--- = Parameters
---
--- -   @instance@ is the instance with which to associate the surface.
---
--- -   @pCreateInfo@ is a pointer to a 'ViSurfaceCreateInfoNN' 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
---
--- -   @pSurface@ is a pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle in which the
---     created surface object is returned.
---
--- = Description
---
--- During the lifetime of a surface created using a particular
--- @nn@::@vi@::@NativeWindowHandle@, applications /must/ not attempt to
--- create another surface for the same @nn@::@vi@::@Layer@ or attempt to
--- connect to the same @nn@::@vi@::@Layer@ through other platform
--- mechanisms.
---
--- If the native window is created with a specified size, @currentExtent@
--- will reflect that size. In this case, applications should use the same
--- size for the swapchain’s @imageExtent@. Otherwise, the @currentExtent@
--- will have the special value (0xFFFFFFFF, 0xFFFFFFFF), indicating that
--- applications are expected to choose an appropriate size for the
--- swapchain’s @imageExtent@ (e.g., by matching the result of a call to
--- @nn@::@vi@::@GetDisplayResolution@).
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Instance' handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'ViSurfaceCreateInfoNN' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pSurface@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.SurfaceKHR' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Instance',
--- 'Graphics.Vulkan.Extensions.Handles.SurfaceKHR', 'ViSurfaceCreateInfoNN'
-createViSurfaceNN :: forall io . MonadIO io => Instance -> ViSurfaceCreateInfoNN -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
-createViSurfaceNN instance' createInfo allocator = liftIO . evalContT $ do
-  let vkCreateViSurfaceNN' = mkVkCreateViSurfaceNN (pVkCreateViSurfaceNN (instanceCmds (instance' :: Instance)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
-  r <- lift $ vkCreateViSurfaceNN' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pSurface <- lift $ peek @SurfaceKHR pPSurface
-  pure $ (pSurface)
-
-
--- | VkViSurfaceCreateInfoNN - Structure specifying parameters of a newly
--- created VI surface object
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'ViSurfaceCreateFlagsNN', 'createViSurfaceNN'
-data ViSurfaceCreateInfoNN = ViSurfaceCreateInfoNN
-  { -- | @flags@ /must/ be @0@
-    flags :: ViSurfaceCreateFlagsNN
-  , -- | @window@ /must/ be a valid @nn@::@vi@::@NativeWindowHandle@
-    window :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show ViSurfaceCreateInfoNN
-
-instance ToCStruct ViSurfaceCreateInfoNN where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ViSurfaceCreateInfoNN{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ViSurfaceCreateFlagsNN)) (flags)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (window)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct ViSurfaceCreateInfoNN where
-  peekCStruct p = do
-    flags <- peek @ViSurfaceCreateFlagsNN ((p `plusPtr` 16 :: Ptr ViSurfaceCreateFlagsNN))
-    window <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
-    pure $ ViSurfaceCreateInfoNN
-             flags window
-
-instance Storable ViSurfaceCreateInfoNN where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ViSurfaceCreateInfoNN where
-  zero = ViSurfaceCreateInfoNN
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkViSurfaceCreateFlagsNN"
-newtype ViSurfaceCreateFlagsNN = ViSurfaceCreateFlagsNN Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show ViSurfaceCreateFlagsNN where
-  showsPrec p = \case
-    ViSurfaceCreateFlagsNN x -> showParen (p >= 11) (showString "ViSurfaceCreateFlagsNN 0x" . showHex x)
-
-instance Read ViSurfaceCreateFlagsNN where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ViSurfaceCreateFlagsNN")
-                       v <- step readPrec
-                       pure (ViSurfaceCreateFlagsNN v)))
-
-
-type NN_VI_SURFACE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NN_VI_SURFACE_SPEC_VERSION"
-pattern NN_VI_SURFACE_SPEC_VERSION :: forall a . Integral a => a
-pattern NN_VI_SURFACE_SPEC_VERSION = 1
-
-
-type NN_VI_SURFACE_EXTENSION_NAME = "VK_NN_vi_surface"
-
--- No documentation found for TopLevel "VK_NN_VI_SURFACE_EXTENSION_NAME"
-pattern NN_VI_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NN_VI_SURFACE_EXTENSION_NAME = "VK_NN_vi_surface"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NN_vi_surface  (ViSurfaceCreateInfoNN) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ViSurfaceCreateInfoNN
-
-instance ToCStruct ViSurfaceCreateInfoNN
-instance Show ViSurfaceCreateInfoNN
-
-instance FromCStruct ViSurfaceCreateInfoNN
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NVX_image_view_handle.hs b/src/Graphics/Vulkan/Extensions/VK_NVX_image_view_handle.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NVX_image_view_handle.hs
+++ /dev/null
@@ -1,305 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NVX_image_view_handle  ( getImageViewHandleNVX
-                                                            , getImageViewAddressNVX
-                                                            , ImageViewHandleInfoNVX(..)
-                                                            , ImageViewAddressPropertiesNVX(..)
-                                                            , NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION
-                                                            , pattern NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION
-                                                            , NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME
-                                                            , pattern NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME
-                                                            ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Core10.Enums.DescriptorType (DescriptorType)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Core10.BaseType (DeviceAddress)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetImageViewAddressNVX))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetImageViewHandleNVX))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (ImageView)
-import Graphics.Vulkan.Core10.Handles (ImageView(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Handles (Sampler)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetImageViewHandleNVX
-  :: FunPtr (Ptr Device_T -> Ptr ImageViewHandleInfoNVX -> IO Word32) -> Ptr Device_T -> Ptr ImageViewHandleInfoNVX -> IO Word32
-
--- | vkGetImageViewHandleNVX - Get the handle for an image view for a
--- specific descriptor type
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the image view.
---
--- -   @pInfo@ describes the image view to query and type of handle.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device', 'ImageViewHandleInfoNVX'
-getImageViewHandleNVX :: forall io . MonadIO io => Device -> ImageViewHandleInfoNVX -> io (Word32)
-getImageViewHandleNVX device info = liftIO . evalContT $ do
-  let vkGetImageViewHandleNVX' = mkVkGetImageViewHandleNVX (pVkGetImageViewHandleNVX (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  r <- lift $ vkGetImageViewHandleNVX' (deviceHandle (device)) pInfo
-  pure $ (r)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetImageViewAddressNVX
-  :: FunPtr (Ptr Device_T -> ImageView -> Ptr ImageViewAddressPropertiesNVX -> IO Result) -> Ptr Device_T -> ImageView -> Ptr ImageViewAddressPropertiesNVX -> IO Result
-
--- | vkGetImageViewAddressNVX - Get the device address of an image view
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the image view.
---
--- -   @imageView@ is a handle to the image view.
---
--- -   @pProperties@ contains the device address and size when the call
---     returns.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.ImageView',
--- 'ImageViewAddressPropertiesNVX'
-getImageViewAddressNVX :: forall io . MonadIO io => Device -> ImageView -> io (ImageViewAddressPropertiesNVX)
-getImageViewAddressNVX device imageView = liftIO . evalContT $ do
-  let vkGetImageViewAddressNVX' = mkVkGetImageViewAddressNVX (pVkGetImageViewAddressNVX (deviceCmds (device :: Device)))
-  pPProperties <- ContT (withZeroCStruct @ImageViewAddressPropertiesNVX)
-  r <- lift $ vkGetImageViewAddressNVX' (deviceHandle (device)) (imageView) (pPProperties)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pProperties <- lift $ peekCStruct @ImageViewAddressPropertiesNVX pPProperties
-  pure $ (pProperties)
-
-
--- | VkImageViewHandleInfoNVX - Structure specifying the image view for
--- handle queries
---
--- == Valid Usage
---
--- -   @descriptorType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
---
--- -   @sampler@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Sampler'
---     if @descriptorType@ is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
---
--- -   If descriptorType is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
---     or
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
---     the image that @imageView@ was created from /must/ have been created
---     with the
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT'
---     usage bit set
---
--- -   If descriptorType is
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
---     the image that @imageView@ was created from /must/ have been created
---     with the
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT'
---     usage bit set
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @imageView@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.ImageView' handle
---
--- -   @descriptorType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
---
--- -   If @sampler@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @sampler@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.Sampler' handle
---
--- -   Both of @imageView@, and @sampler@ that are valid handles of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.DescriptorType.DescriptorType',
--- 'Graphics.Vulkan.Core10.Handles.ImageView',
--- 'Graphics.Vulkan.Core10.Handles.Sampler',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getImageViewHandleNVX'
-data ImageViewHandleInfoNVX = ImageViewHandleInfoNVX
-  { -- | @imageView@ is the image view to query.
-    imageView :: ImageView
-  , -- | @descriptorType@ is the type of descriptor for which to query a handle.
-    descriptorType :: DescriptorType
-  , -- | @sampler@ is the sampler to combine with the image view when generating
-    -- the handle.
-    sampler :: Sampler
-  }
-  deriving (Typeable)
-deriving instance Show ImageViewHandleInfoNVX
-
-instance ToCStruct ImageViewHandleInfoNVX where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageViewHandleInfoNVX{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageView)) (imageView)
-    poke ((p `plusPtr` 24 :: Ptr DescriptorType)) (descriptorType)
-    poke ((p `plusPtr` 32 :: Ptr Sampler)) (sampler)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ImageView)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DescriptorType)) (zero)
-    f
-
-instance FromCStruct ImageViewHandleInfoNVX where
-  peekCStruct p = do
-    imageView <- peek @ImageView ((p `plusPtr` 16 :: Ptr ImageView))
-    descriptorType <- peek @DescriptorType ((p `plusPtr` 24 :: Ptr DescriptorType))
-    sampler <- peek @Sampler ((p `plusPtr` 32 :: Ptr Sampler))
-    pure $ ImageViewHandleInfoNVX
-             imageView descriptorType sampler
-
-instance Storable ImageViewHandleInfoNVX where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageViewHandleInfoNVX where
-  zero = ImageViewHandleInfoNVX
-           zero
-           zero
-           zero
-
-
--- | VkImageViewAddressPropertiesNVX - Structure specifying the image view
--- for handle queries
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceAddress',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getImageViewAddressNVX'
-data ImageViewAddressPropertiesNVX = ImageViewAddressPropertiesNVX
-  { -- | @deviceAddress@ is the device address of the image view.
-    deviceAddress :: DeviceAddress
-  , -- | @size@ is the size in bytes of the image view device memory.
-    size :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show ImageViewAddressPropertiesNVX
-
-instance ToCStruct ImageViewAddressPropertiesNVX where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImageViewAddressPropertiesNVX{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceAddress)) (deviceAddress)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (size)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceAddress)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct ImageViewAddressPropertiesNVX where
-  peekCStruct p = do
-    deviceAddress <- peek @DeviceAddress ((p `plusPtr` 16 :: Ptr DeviceAddress))
-    size <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    pure $ ImageViewAddressPropertiesNVX
-             deviceAddress size
-
-instance Storable ImageViewAddressPropertiesNVX where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImageViewAddressPropertiesNVX where
-  zero = ImageViewAddressPropertiesNVX
-           zero
-           zero
-
-
-type NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION"
-pattern NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION :: forall a . Integral a => a
-pattern NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION = 2
-
-
-type NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME = "VK_NVX_image_view_handle"
-
--- No documentation found for TopLevel "VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME"
-pattern NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME = "VK_NVX_image_view_handle"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NVX_image_view_handle.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NVX_image_view_handle.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NVX_image_view_handle.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NVX_image_view_handle  ( ImageViewAddressPropertiesNVX
-                                                            , ImageViewHandleInfoNVX
-                                                            ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ImageViewAddressPropertiesNVX
-
-instance ToCStruct ImageViewAddressPropertiesNVX
-instance Show ImageViewAddressPropertiesNVX
-
-instance FromCStruct ImageViewAddressPropertiesNVX
-
-
-data ImageViewHandleInfoNVX
-
-instance ToCStruct ImageViewHandleInfoNVX
-instance Show ImageViewHandleInfoNVX
-
-instance FromCStruct ImageViewHandleInfoNVX
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs
+++ /dev/null
@@ -1,104 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes  ( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(..)
-                                                                        , NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION
-                                                                        , pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION
-                                                                        , NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME
-                                                                        , pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME
-                                                                        ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX))
--- | VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX - Structure
--- describing multiview limits that can be supported by an implementation
---
--- = Members
---
--- The members of the
--- 'PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX' structure
--- describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX' structure
--- is included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-  { -- | @perViewPositionAllComponents@ is 'Graphics.Vulkan.Core10.BaseType.TRUE'
-    -- if the implementation supports per-view position values that differ in
-    -- components other than the X component.
-    perViewPositionAllComponents :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-
-instance ToCStruct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (perViewPositionAllComponents))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX where
-  peekCStruct p = do
-    perViewPositionAllComponents <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-             (bool32ToBool perViewPositionAllComponents)
-
-instance Storable PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX where
-  zero = PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-           zero
-
-
-type NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION"
-pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION :: forall a . Integral a => a
-pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION = 1
-
-
-type NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME = "VK_NVX_multiview_per_view_attributes"
-
--- No documentation found for TopLevel "VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME"
-pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME = "VK_NVX_multiview_per_view_attributes"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes  (PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-
-instance ToCStruct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-instance Show PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-
-instance FromCStruct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs
+++ /dev/null
@@ -1,261 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling  ( cmdSetViewportWScalingNV
-                                                              , ViewportWScalingNV(..)
-                                                              , PipelineViewportWScalingStateCreateInfoNV(..)
-                                                              , NV_CLIP_SPACE_W_SCALING_SPEC_VERSION
-                                                              , pattern NV_CLIP_SPACE_W_SCALING_SPEC_VERSION
-                                                              , NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME
-                                                              , pattern NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME
-                                                              ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Utils (maybePeek)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Either (Either)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetViewportWScalingNV))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetViewportWScalingNV
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr ViewportWScalingNV -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr ViewportWScalingNV -> IO ()
-
--- | vkCmdSetViewportWScalingNV - Set the viewport W scaling on a command
--- buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @firstViewport@ is the index of the first viewport whose parameters
---     are updated by the command.
---
--- -   @viewportCount@ is the number of viewports whose parameters are
---     updated by the command.
---
--- -   @pViewportWScalings@ is a pointer to an array of
---     'ViewportWScalingNV' structures specifying viewport parameters.
---
--- = 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
---
--- -   @firstViewport@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
---
--- -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@
---     and
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
---     inclusive
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pViewportWScalings@ /must/ be a valid pointer to an array of
---     @viewportCount@ 'ViewportWScalingNV' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   @viewportCount@ /must/ be greater than @0@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'ViewportWScalingNV'
-cmdSetViewportWScalingNV :: forall io . MonadIO io => CommandBuffer -> ("firstViewport" ::: Word32) -> ("viewportWScalings" ::: Vector ViewportWScalingNV) -> io ()
-cmdSetViewportWScalingNV commandBuffer firstViewport viewportWScalings = liftIO . evalContT $ do
-  let vkCmdSetViewportWScalingNV' = mkVkCmdSetViewportWScalingNV (pVkCmdSetViewportWScalingNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPViewportWScalings <- ContT $ allocaBytesAligned @ViewportWScalingNV ((Data.Vector.length (viewportWScalings)) * 8) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewportWScalings `plusPtr` (8 * (i)) :: Ptr ViewportWScalingNV) (e) . ($ ())) (viewportWScalings)
-  lift $ vkCmdSetViewportWScalingNV' (commandBufferHandle (commandBuffer)) (firstViewport) ((fromIntegral (Data.Vector.length $ (viewportWScalings)) :: Word32)) (pPViewportWScalings)
-  pure $ ()
-
-
--- | VkViewportWScalingNV - Structure specifying a viewport
---
--- = See Also
---
--- 'PipelineViewportWScalingStateCreateInfoNV', 'cmdSetViewportWScalingNV'
-data ViewportWScalingNV = ViewportWScalingNV
-  { -- | @xcoeff@ and @ycoeff@ are the viewport’s W scaling factor for x and y
-    -- respectively.
-    xcoeff :: Float
-  , -- No documentation found for Nested "VkViewportWScalingNV" "ycoeff"
-    ycoeff :: Float
-  }
-  deriving (Typeable)
-deriving instance Show ViewportWScalingNV
-
-instance ToCStruct ViewportWScalingNV where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ViewportWScalingNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (xcoeff))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (ycoeff))
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
-    f
-
-instance FromCStruct ViewportWScalingNV where
-  peekCStruct p = do
-    xcoeff <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
-    ycoeff <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
-    pure $ ViewportWScalingNV
-             ((\(CFloat a) -> a) xcoeff) ((\(CFloat a) -> a) ycoeff)
-
-instance Storable ViewportWScalingNV where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ViewportWScalingNV where
-  zero = ViewportWScalingNV
-           zero
-           zero
-
-
--- | VkPipelineViewportWScalingStateCreateInfoNV - Structure specifying
--- parameters of a newly created pipeline viewport W scaling state
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'ViewportWScalingNV'
-data PipelineViewportWScalingStateCreateInfoNV = PipelineViewportWScalingStateCreateInfoNV
-  { -- | @viewportWScalingEnable@ controls whether viewport __W__ scaling is
-    -- enabled.
-    viewportWScalingEnable :: Bool
-  , -- | @pViewportWScalings@ is a pointer to an array of 'ViewportWScalingNV'
-    -- structures defining the __W__ scaling parameters for the corresponding
-    -- viewports. If the viewport __W__ scaling state is dynamic, this member
-    -- is ignored.
-    viewportWScalings :: Either Word32 (Vector ViewportWScalingNV)
-  }
-  deriving (Typeable)
-deriving instance Show PipelineViewportWScalingStateCreateInfoNV
-
-instance ToCStruct PipelineViewportWScalingStateCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineViewportWScalingStateCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (viewportWScalingEnable))
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (viewportWScalings)) :: Word32))
-    pViewportWScalings'' <- case (viewportWScalings) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPViewportWScalings' <- ContT $ allocaBytesAligned @ViewportWScalingNV ((Data.Vector.length (v)) * 8) 4
-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewportWScalings' `plusPtr` (8 * (i)) :: Ptr ViewportWScalingNV) (e) . ($ ())) (v)
-        pure $ pPViewportWScalings'
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ViewportWScalingNV))) pViewportWScalings''
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PipelineViewportWScalingStateCreateInfoNV where
-  peekCStruct p = do
-    viewportWScalingEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pViewportWScalings <- peek @(Ptr ViewportWScalingNV) ((p `plusPtr` 24 :: Ptr (Ptr ViewportWScalingNV)))
-    pViewportWScalings' <- maybePeek (\j -> generateM (fromIntegral viewportCount) (\i -> peekCStruct @ViewportWScalingNV (((j) `advancePtrBytes` (8 * (i)) :: Ptr ViewportWScalingNV)))) pViewportWScalings
-    let pViewportWScalings'' = maybe (Left viewportCount) Right pViewportWScalings'
-    pure $ PipelineViewportWScalingStateCreateInfoNV
-             (bool32ToBool viewportWScalingEnable) pViewportWScalings''
-
-instance Zero PipelineViewportWScalingStateCreateInfoNV where
-  zero = PipelineViewportWScalingStateCreateInfoNV
-           zero
-           (Left 0)
-
-
-type NV_CLIP_SPACE_W_SCALING_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION"
-pattern NV_CLIP_SPACE_W_SCALING_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_CLIP_SPACE_W_SCALING_SPEC_VERSION = 1
-
-
-type NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME = "VK_NV_clip_space_w_scaling"
-
--- No documentation found for TopLevel "VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME"
-pattern NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME = "VK_NV_clip_space_w_scaling"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling  ( PipelineViewportWScalingStateCreateInfoNV
-                                                              , ViewportWScalingNV
-                                                              ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PipelineViewportWScalingStateCreateInfoNV
-
-instance ToCStruct PipelineViewportWScalingStateCreateInfoNV
-instance Show PipelineViewportWScalingStateCreateInfoNV
-
-instance FromCStruct PipelineViewportWScalingStateCreateInfoNV
-
-
-data ViewportWScalingNV
-
-instance ToCStruct ViewportWScalingNV
-instance Show ViewportWScalingNV
-
-instance FromCStruct ViewportWScalingNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs b/src/Graphics/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs
+++ /dev/null
@@ -1,118 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives  ( PhysicalDeviceComputeShaderDerivativesFeaturesNV(..)
-                                                                    , NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION
-                                                                    , pattern NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION
-                                                                    , NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME
-                                                                    , pattern NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME
-                                                                    ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV))
--- | VkPhysicalDeviceComputeShaderDerivativesFeaturesNV - Structure
--- describing compute shader derivative features that can be supported by
--- an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceComputeShaderDerivativesFeaturesNV'
--- structure describe the following features:
---
--- = Description
---
--- See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#texture-derivatives-compute Compute Shader Derivatives>
--- for more information.
---
--- If the 'PhysicalDeviceComputeShaderDerivativesFeaturesNV' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceComputeShaderDerivativesFeaturesNV' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceComputeShaderDerivativesFeaturesNV = PhysicalDeviceComputeShaderDerivativesFeaturesNV
-  { -- | @computeDerivativeGroupQuads@ indicates that the implementation supports
-    -- the @ComputeDerivativeGroupQuadsNV@ SPIR-V capability.
-    computeDerivativeGroupQuads :: Bool
-  , -- | @computeDerivativeGroupLinear@ indicates that the implementation
-    -- supports the @ComputeDerivativeGroupLinearNV@ SPIR-V capability.
-    computeDerivativeGroupLinear :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceComputeShaderDerivativesFeaturesNV
-
-instance ToCStruct PhysicalDeviceComputeShaderDerivativesFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceComputeShaderDerivativesFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (computeDerivativeGroupQuads))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (computeDerivativeGroupLinear))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceComputeShaderDerivativesFeaturesNV where
-  peekCStruct p = do
-    computeDerivativeGroupQuads <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    computeDerivativeGroupLinear <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceComputeShaderDerivativesFeaturesNV
-             (bool32ToBool computeDerivativeGroupQuads) (bool32ToBool computeDerivativeGroupLinear)
-
-instance Storable PhysicalDeviceComputeShaderDerivativesFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceComputeShaderDerivativesFeaturesNV where
-  zero = PhysicalDeviceComputeShaderDerivativesFeaturesNV
-           zero
-           zero
-
-
-type NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION"
-pattern NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION = 1
-
-
-type NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME = "VK_NV_compute_shader_derivatives"
-
--- No documentation found for TopLevel "VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME"
-pattern NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME = "VK_NV_compute_shader_derivatives"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives  (PhysicalDeviceComputeShaderDerivativesFeaturesNV) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceComputeShaderDerivativesFeaturesNV
-
-instance ToCStruct PhysicalDeviceComputeShaderDerivativesFeaturesNV
-instance Show PhysicalDeviceComputeShaderDerivativesFeaturesNV
-
-instance FromCStruct PhysicalDeviceComputeShaderDerivativesFeaturesNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_cooperative_matrix.hs b/src/Graphics/Vulkan/Extensions/VK_NV_cooperative_matrix.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_cooperative_matrix.hs
+++ /dev/null
@@ -1,546 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix  ( getPhysicalDeviceCooperativeMatrixPropertiesNV
-                                                            , PhysicalDeviceCooperativeMatrixFeaturesNV(..)
-                                                            , PhysicalDeviceCooperativeMatrixPropertiesNV(..)
-                                                            , CooperativeMatrixPropertiesNV(..)
-                                                            , ScopeNV( SCOPE_DEVICE_NV
-                                                                     , SCOPE_WORKGROUP_NV
-                                                                     , SCOPE_SUBGROUP_NV
-                                                                     , SCOPE_QUEUE_FAMILY_NV
-                                                                     , ..
-                                                                     )
-                                                            , ComponentTypeNV( COMPONENT_TYPE_FLOAT16_NV
-                                                                             , COMPONENT_TYPE_FLOAT32_NV
-                                                                             , COMPONENT_TYPE_FLOAT64_NV
-                                                                             , COMPONENT_TYPE_SINT8_NV
-                                                                             , COMPONENT_TYPE_SINT16_NV
-                                                                             , COMPONENT_TYPE_SINT32_NV
-                                                                             , COMPONENT_TYPE_SINT64_NV
-                                                                             , COMPONENT_TYPE_UINT8_NV
-                                                                             , COMPONENT_TYPE_UINT16_NV
-                                                                             , COMPONENT_TYPE_UINT32_NV
-                                                                             , COMPONENT_TYPE_UINT64_NV
-                                                                             , ..
-                                                                             )
-                                                            , NV_COOPERATIVE_MATRIX_SPEC_VERSION
-                                                            , pattern NV_COOPERATIVE_MATRIX_SPEC_VERSION
-                                                            , NV_COOPERATIVE_MATRIX_EXTENSION_NAME
-                                                            , pattern NV_COOPERATIVE_MATRIX_EXTENSION_NAME
-                                                            ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceCooperativeMatrixPropertiesNV))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceCooperativeMatrixPropertiesNV
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr CooperativeMatrixPropertiesNV -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr CooperativeMatrixPropertiesNV -> IO Result
-
--- | vkGetPhysicalDeviceCooperativeMatrixPropertiesNV - Returns properties
--- describing what cooperative matrix types are supported
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device.
---
--- -   @pPropertyCount@ is a pointer to an integer related to the number of
---     cooperative matrix properties available or queried.
---
--- -   @pProperties@ is either @NULL@ or a pointer to an array of
---     'CooperativeMatrixPropertiesNV' structures.
---
--- = Description
---
--- If @pProperties@ is @NULL@, then the number of cooperative matrix
--- 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
--- cooperative matrix properties available, at most @pPropertyCount@
--- structures will be written. If @pPropertyCount@ is smaller than the
--- number of cooperative matrix properties available,
--- 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
--- instead of 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS', to indicate
--- that not all the available cooperative matrix properties were returned.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' 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@ 'CooperativeMatrixPropertiesNV'
---     structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'CooperativeMatrixPropertiesNV',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceCooperativeMatrixPropertiesNV :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector CooperativeMatrixPropertiesNV))
-getPhysicalDeviceCooperativeMatrixPropertiesNV physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceCooperativeMatrixPropertiesNV' = mkVkGetPhysicalDeviceCooperativeMatrixPropertiesNV (pVkGetPhysicalDeviceCooperativeMatrixPropertiesNV (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceCooperativeMatrixPropertiesNV' physicalDevice' (pPPropertyCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
-  pPProperties <- ContT $ bracket (callocBytes @CooperativeMatrixPropertiesNV ((fromIntegral (pPropertyCount)) * 48)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 48) :: Ptr CooperativeMatrixPropertiesNV) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
-  r' <- lift $ vkGetPhysicalDeviceCooperativeMatrixPropertiesNV' physicalDevice' (pPPropertyCount) ((pPProperties))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
-  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @CooperativeMatrixPropertiesNV (((pPProperties) `advancePtrBytes` (48 * (i)) :: Ptr CooperativeMatrixPropertiesNV)))
-  pure $ ((r'), pProperties')
-
-
--- | VkPhysicalDeviceCooperativeMatrixFeaturesNV - Structure describing
--- cooperative matrix features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceCooperativeMatrixFeaturesNV' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceCooperativeMatrixFeaturesNV' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceCooperativeMatrixFeaturesNV' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceCooperativeMatrixFeaturesNV = PhysicalDeviceCooperativeMatrixFeaturesNV
-  { -- | @cooperativeMatrix@ indicates that the implementation supports the
-    -- @CooperativeMatrixNV@ SPIR-V capability.
-    cooperativeMatrix :: Bool
-  , -- | @cooperativeMatrixRobustBufferAccess@ indicates that the implementation
-    -- supports robust buffer access for SPIR-V @OpCooperativeMatrixLoadNV@ and
-    -- @OpCooperativeMatrixStoreNV@ instructions.
-    cooperativeMatrixRobustBufferAccess :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceCooperativeMatrixFeaturesNV
-
-instance ToCStruct PhysicalDeviceCooperativeMatrixFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceCooperativeMatrixFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (cooperativeMatrix))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (cooperativeMatrixRobustBufferAccess))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceCooperativeMatrixFeaturesNV where
-  peekCStruct p = do
-    cooperativeMatrix <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    cooperativeMatrixRobustBufferAccess <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceCooperativeMatrixFeaturesNV
-             (bool32ToBool cooperativeMatrix) (bool32ToBool cooperativeMatrixRobustBufferAccess)
-
-instance Storable PhysicalDeviceCooperativeMatrixFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceCooperativeMatrixFeaturesNV where
-  zero = PhysicalDeviceCooperativeMatrixFeaturesNV
-           zero
-           zero
-
-
--- | VkPhysicalDeviceCooperativeMatrixPropertiesNV - Structure describing
--- cooperative matrix properties supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceCooperativeMatrixPropertiesNV'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceCooperativeMatrixPropertiesNV' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceCooperativeMatrixPropertiesNV = PhysicalDeviceCooperativeMatrixPropertiesNV
-  { -- | @cooperativeMatrixSupportedStages@ is a bitfield of
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
-    -- describing the shader stages that cooperative matrix instructions are
-    -- supported in. @cooperativeMatrixSupportedStages@ will have the
-    -- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
-    -- bit set if any of the physical device’s queues support
-    -- 'Graphics.Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
-    cooperativeMatrixSupportedStages :: ShaderStageFlags }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceCooperativeMatrixPropertiesNV
-
-instance ToCStruct PhysicalDeviceCooperativeMatrixPropertiesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceCooperativeMatrixPropertiesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ShaderStageFlags)) (cooperativeMatrixSupportedStages)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ShaderStageFlags)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceCooperativeMatrixPropertiesNV where
-  peekCStruct p = do
-    cooperativeMatrixSupportedStages <- peek @ShaderStageFlags ((p `plusPtr` 16 :: Ptr ShaderStageFlags))
-    pure $ PhysicalDeviceCooperativeMatrixPropertiesNV
-             cooperativeMatrixSupportedStages
-
-instance Storable PhysicalDeviceCooperativeMatrixPropertiesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceCooperativeMatrixPropertiesNV where
-  zero = PhysicalDeviceCooperativeMatrixPropertiesNV
-           zero
-
-
--- | VkCooperativeMatrixPropertiesNV - Structure specifying cooperative
--- matrix properties
---
--- = Description
---
--- If some types are preferred over other types (e.g. for performance),
--- they /should/ appear earlier in the list enumerated by
--- 'getPhysicalDeviceCooperativeMatrixPropertiesNV'.
---
--- At least one entry in the list /must/ have power of two values for all
--- of @MSize@, @KSize@, and @NSize@.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'ComponentTypeNV', 'ScopeNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceCooperativeMatrixPropertiesNV'
-data CooperativeMatrixPropertiesNV = CooperativeMatrixPropertiesNV
-  { -- | @MSize@ is the number of rows in matrices A, C, and D.
-    mSize :: Word32
-  , -- | @NSize@ is the number of columns in matrices B, C, D.
-    nSize :: Word32
-  , -- | @KSize@ is the number of columns in matrix A and rows in matrix B.
-    kSize :: Word32
-  , -- | @AType@ /must/ be a valid 'ComponentTypeNV' value
-    aType :: ComponentTypeNV
-  , -- | @BType@ /must/ be a valid 'ComponentTypeNV' value
-    bType :: ComponentTypeNV
-  , -- | @CType@ /must/ be a valid 'ComponentTypeNV' value
-    cType :: ComponentTypeNV
-  , -- | @DType@ /must/ be a valid 'ComponentTypeNV' value
-    dType :: ComponentTypeNV
-  , -- | @scope@ /must/ be a valid 'ScopeNV' value
-    scope :: ScopeNV
-  }
-  deriving (Typeable)
-deriving instance Show CooperativeMatrixPropertiesNV
-
-instance ToCStruct CooperativeMatrixPropertiesNV where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CooperativeMatrixPropertiesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (mSize)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (nSize)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (kSize)
-    poke ((p `plusPtr` 28 :: Ptr ComponentTypeNV)) (aType)
-    poke ((p `plusPtr` 32 :: Ptr ComponentTypeNV)) (bType)
-    poke ((p `plusPtr` 36 :: Ptr ComponentTypeNV)) (cType)
-    poke ((p `plusPtr` 40 :: Ptr ComponentTypeNV)) (dType)
-    poke ((p `plusPtr` 44 :: Ptr ScopeNV)) (scope)
-    f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr ComponentTypeNV)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr ComponentTypeNV)) (zero)
-    poke ((p `plusPtr` 36 :: Ptr ComponentTypeNV)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr ComponentTypeNV)) (zero)
-    poke ((p `plusPtr` 44 :: Ptr ScopeNV)) (zero)
-    f
-
-instance FromCStruct CooperativeMatrixPropertiesNV where
-  peekCStruct p = do
-    mSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    nSize <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    kSize <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    aType <- peek @ComponentTypeNV ((p `plusPtr` 28 :: Ptr ComponentTypeNV))
-    bType <- peek @ComponentTypeNV ((p `plusPtr` 32 :: Ptr ComponentTypeNV))
-    cType <- peek @ComponentTypeNV ((p `plusPtr` 36 :: Ptr ComponentTypeNV))
-    dType <- peek @ComponentTypeNV ((p `plusPtr` 40 :: Ptr ComponentTypeNV))
-    scope <- peek @ScopeNV ((p `plusPtr` 44 :: Ptr ScopeNV))
-    pure $ CooperativeMatrixPropertiesNV
-             mSize nSize kSize aType bType cType dType scope
-
-instance Storable CooperativeMatrixPropertiesNV where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero CooperativeMatrixPropertiesNV where
-  zero = CooperativeMatrixPropertiesNV
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkScopeNV - Specify SPIR-V scope
---
--- = Description
---
--- All enum values match the corresponding SPIR-V value.
---
--- = See Also
---
--- 'CooperativeMatrixPropertiesNV'
-newtype ScopeNV = ScopeNV Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
--- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
-
--- | 'SCOPE_DEVICE_NV' corresponds to SPIR-V
--- 'Graphics.Vulkan.Core10.Handles.Device' scope.
-pattern SCOPE_DEVICE_NV = ScopeNV 1
--- | 'SCOPE_WORKGROUP_NV' corresponds to SPIR-V @Workgroup@ scope.
-pattern SCOPE_WORKGROUP_NV = ScopeNV 2
--- | 'SCOPE_SUBGROUP_NV' corresponds to SPIR-V @Subgroup@ scope.
-pattern SCOPE_SUBGROUP_NV = ScopeNV 3
--- | 'SCOPE_QUEUE_FAMILY_NV' corresponds to SPIR-V @QueueFamily@ scope.
-pattern SCOPE_QUEUE_FAMILY_NV = ScopeNV 5
-{-# complete SCOPE_DEVICE_NV,
-             SCOPE_WORKGROUP_NV,
-             SCOPE_SUBGROUP_NV,
-             SCOPE_QUEUE_FAMILY_NV :: ScopeNV #-}
-
-instance Show ScopeNV where
-  showsPrec p = \case
-    SCOPE_DEVICE_NV -> showString "SCOPE_DEVICE_NV"
-    SCOPE_WORKGROUP_NV -> showString "SCOPE_WORKGROUP_NV"
-    SCOPE_SUBGROUP_NV -> showString "SCOPE_SUBGROUP_NV"
-    SCOPE_QUEUE_FAMILY_NV -> showString "SCOPE_QUEUE_FAMILY_NV"
-    ScopeNV x -> showParen (p >= 11) (showString "ScopeNV " . showsPrec 11 x)
-
-instance Read ScopeNV where
-  readPrec = parens (choose [("SCOPE_DEVICE_NV", pure SCOPE_DEVICE_NV)
-                            , ("SCOPE_WORKGROUP_NV", pure SCOPE_WORKGROUP_NV)
-                            , ("SCOPE_SUBGROUP_NV", pure SCOPE_SUBGROUP_NV)
-                            , ("SCOPE_QUEUE_FAMILY_NV", pure SCOPE_QUEUE_FAMILY_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ScopeNV")
-                       v <- step readPrec
-                       pure (ScopeNV v)))
-
-
--- | VkComponentTypeNV - Specify SPIR-V cooperative matrix component type
---
--- = See Also
---
--- 'CooperativeMatrixPropertiesNV'
-newtype ComponentTypeNV = ComponentTypeNV Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'COMPONENT_TYPE_FLOAT16_NV' corresponds to SPIR-V @OpTypeFloat@ 16.
-pattern COMPONENT_TYPE_FLOAT16_NV = ComponentTypeNV 0
--- | 'COMPONENT_TYPE_FLOAT32_NV' corresponds to SPIR-V @OpTypeFloat@ 32.
-pattern COMPONENT_TYPE_FLOAT32_NV = ComponentTypeNV 1
--- | 'COMPONENT_TYPE_FLOAT64_NV' corresponds to SPIR-V @OpTypeFloat@ 64.
-pattern COMPONENT_TYPE_FLOAT64_NV = ComponentTypeNV 2
--- | 'COMPONENT_TYPE_SINT8_NV' corresponds to SPIR-V @OpTypeInt@ 8 1.
-pattern COMPONENT_TYPE_SINT8_NV = ComponentTypeNV 3
--- | 'COMPONENT_TYPE_SINT16_NV' corresponds to SPIR-V @OpTypeInt@ 16 1.
-pattern COMPONENT_TYPE_SINT16_NV = ComponentTypeNV 4
--- | 'COMPONENT_TYPE_SINT32_NV' corresponds to SPIR-V @OpTypeInt@ 32 1.
-pattern COMPONENT_TYPE_SINT32_NV = ComponentTypeNV 5
--- | 'COMPONENT_TYPE_SINT64_NV' corresponds to SPIR-V @OpTypeInt@ 64 1.
-pattern COMPONENT_TYPE_SINT64_NV = ComponentTypeNV 6
--- | 'COMPONENT_TYPE_UINT8_NV' corresponds to SPIR-V @OpTypeInt@ 8 0.
-pattern COMPONENT_TYPE_UINT8_NV = ComponentTypeNV 7
--- | 'COMPONENT_TYPE_UINT16_NV' corresponds to SPIR-V @OpTypeInt@ 16 0.
-pattern COMPONENT_TYPE_UINT16_NV = ComponentTypeNV 8
--- | 'COMPONENT_TYPE_UINT32_NV' corresponds to SPIR-V @OpTypeInt@ 32 0.
-pattern COMPONENT_TYPE_UINT32_NV = ComponentTypeNV 9
--- | 'COMPONENT_TYPE_UINT64_NV' corresponds to SPIR-V @OpTypeInt@ 64 0.
-pattern COMPONENT_TYPE_UINT64_NV = ComponentTypeNV 10
-{-# complete COMPONENT_TYPE_FLOAT16_NV,
-             COMPONENT_TYPE_FLOAT32_NV,
-             COMPONENT_TYPE_FLOAT64_NV,
-             COMPONENT_TYPE_SINT8_NV,
-             COMPONENT_TYPE_SINT16_NV,
-             COMPONENT_TYPE_SINT32_NV,
-             COMPONENT_TYPE_SINT64_NV,
-             COMPONENT_TYPE_UINT8_NV,
-             COMPONENT_TYPE_UINT16_NV,
-             COMPONENT_TYPE_UINT32_NV,
-             COMPONENT_TYPE_UINT64_NV :: ComponentTypeNV #-}
-
-instance Show ComponentTypeNV where
-  showsPrec p = \case
-    COMPONENT_TYPE_FLOAT16_NV -> showString "COMPONENT_TYPE_FLOAT16_NV"
-    COMPONENT_TYPE_FLOAT32_NV -> showString "COMPONENT_TYPE_FLOAT32_NV"
-    COMPONENT_TYPE_FLOAT64_NV -> showString "COMPONENT_TYPE_FLOAT64_NV"
-    COMPONENT_TYPE_SINT8_NV -> showString "COMPONENT_TYPE_SINT8_NV"
-    COMPONENT_TYPE_SINT16_NV -> showString "COMPONENT_TYPE_SINT16_NV"
-    COMPONENT_TYPE_SINT32_NV -> showString "COMPONENT_TYPE_SINT32_NV"
-    COMPONENT_TYPE_SINT64_NV -> showString "COMPONENT_TYPE_SINT64_NV"
-    COMPONENT_TYPE_UINT8_NV -> showString "COMPONENT_TYPE_UINT8_NV"
-    COMPONENT_TYPE_UINT16_NV -> showString "COMPONENT_TYPE_UINT16_NV"
-    COMPONENT_TYPE_UINT32_NV -> showString "COMPONENT_TYPE_UINT32_NV"
-    COMPONENT_TYPE_UINT64_NV -> showString "COMPONENT_TYPE_UINT64_NV"
-    ComponentTypeNV x -> showParen (p >= 11) (showString "ComponentTypeNV " . showsPrec 11 x)
-
-instance Read ComponentTypeNV where
-  readPrec = parens (choose [("COMPONENT_TYPE_FLOAT16_NV", pure COMPONENT_TYPE_FLOAT16_NV)
-                            , ("COMPONENT_TYPE_FLOAT32_NV", pure COMPONENT_TYPE_FLOAT32_NV)
-                            , ("COMPONENT_TYPE_FLOAT64_NV", pure COMPONENT_TYPE_FLOAT64_NV)
-                            , ("COMPONENT_TYPE_SINT8_NV", pure COMPONENT_TYPE_SINT8_NV)
-                            , ("COMPONENT_TYPE_SINT16_NV", pure COMPONENT_TYPE_SINT16_NV)
-                            , ("COMPONENT_TYPE_SINT32_NV", pure COMPONENT_TYPE_SINT32_NV)
-                            , ("COMPONENT_TYPE_SINT64_NV", pure COMPONENT_TYPE_SINT64_NV)
-                            , ("COMPONENT_TYPE_UINT8_NV", pure COMPONENT_TYPE_UINT8_NV)
-                            , ("COMPONENT_TYPE_UINT16_NV", pure COMPONENT_TYPE_UINT16_NV)
-                            , ("COMPONENT_TYPE_UINT32_NV", pure COMPONENT_TYPE_UINT32_NV)
-                            , ("COMPONENT_TYPE_UINT64_NV", pure COMPONENT_TYPE_UINT64_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ComponentTypeNV")
-                       v <- step readPrec
-                       pure (ComponentTypeNV v)))
-
-
-type NV_COOPERATIVE_MATRIX_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION"
-pattern NV_COOPERATIVE_MATRIX_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_COOPERATIVE_MATRIX_SPEC_VERSION = 1
-
-
-type NV_COOPERATIVE_MATRIX_EXTENSION_NAME = "VK_NV_cooperative_matrix"
-
--- No documentation found for TopLevel "VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME"
-pattern NV_COOPERATIVE_MATRIX_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_COOPERATIVE_MATRIX_EXTENSION_NAME = "VK_NV_cooperative_matrix"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_cooperative_matrix.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_cooperative_matrix.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_cooperative_matrix.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix  ( CooperativeMatrixPropertiesNV
-                                                            , PhysicalDeviceCooperativeMatrixFeaturesNV
-                                                            , PhysicalDeviceCooperativeMatrixPropertiesNV
-                                                            ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data CooperativeMatrixPropertiesNV
-
-instance ToCStruct CooperativeMatrixPropertiesNV
-instance Show CooperativeMatrixPropertiesNV
-
-instance FromCStruct CooperativeMatrixPropertiesNV
-
-
-data PhysicalDeviceCooperativeMatrixFeaturesNV
-
-instance ToCStruct PhysicalDeviceCooperativeMatrixFeaturesNV
-instance Show PhysicalDeviceCooperativeMatrixFeaturesNV
-
-instance FromCStruct PhysicalDeviceCooperativeMatrixFeaturesNV
-
-
-data PhysicalDeviceCooperativeMatrixPropertiesNV
-
-instance ToCStruct PhysicalDeviceCooperativeMatrixPropertiesNV
-instance Show PhysicalDeviceCooperativeMatrixPropertiesNV
-
-instance FromCStruct PhysicalDeviceCooperativeMatrixPropertiesNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_corner_sampled_image.hs b/src/Graphics/Vulkan/Extensions/VK_NV_corner_sampled_image.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_corner_sampled_image.hs
+++ /dev/null
@@ -1,108 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image  ( PhysicalDeviceCornerSampledImageFeaturesNV(..)
-                                                              , NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION
-                                                              , pattern NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION
-                                                              , NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME
-                                                              , pattern NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME
-                                                              ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV))
--- | VkPhysicalDeviceCornerSampledImageFeaturesNV - Structure describing
--- corner sampled image features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceCornerSampledImageFeaturesNV'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceCornerSampledImageFeaturesNV' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceCornerSampledImageFeaturesNV' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceCornerSampledImageFeaturesNV = PhysicalDeviceCornerSampledImageFeaturesNV
-  { -- | @cornerSampledImage@ specifies whether images can be created with a
-    -- 'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
-    -- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'.
-    -- See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-images-corner-sampled Corner-Sampled Images>.
-    cornerSampledImage :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceCornerSampledImageFeaturesNV
-
-instance ToCStruct PhysicalDeviceCornerSampledImageFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceCornerSampledImageFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (cornerSampledImage))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceCornerSampledImageFeaturesNV where
-  peekCStruct p = do
-    cornerSampledImage <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceCornerSampledImageFeaturesNV
-             (bool32ToBool cornerSampledImage)
-
-instance Storable PhysicalDeviceCornerSampledImageFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceCornerSampledImageFeaturesNV where
-  zero = PhysicalDeviceCornerSampledImageFeaturesNV
-           zero
-
-
-type NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION"
-pattern NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION = 2
-
-
-type NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME = "VK_NV_corner_sampled_image"
-
--- No documentation found for TopLevel "VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME"
-pattern NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME = "VK_NV_corner_sampled_image"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_corner_sampled_image.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_corner_sampled_image.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_corner_sampled_image.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image  (PhysicalDeviceCornerSampledImageFeaturesNV) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceCornerSampledImageFeaturesNV
-
-instance ToCStruct PhysicalDeviceCornerSampledImageFeaturesNV
-instance Show PhysicalDeviceCornerSampledImageFeaturesNV
-
-instance FromCStruct PhysicalDeviceCornerSampledImageFeaturesNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs b/src/Graphics/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs
+++ /dev/null
@@ -1,465 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode  ( getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV
-                                                                 , PhysicalDeviceCoverageReductionModeFeaturesNV(..)
-                                                                 , PipelineCoverageReductionStateCreateInfoNV(..)
-                                                                 , FramebufferMixedSamplesCombinationNV(..)
-                                                                 , PipelineCoverageReductionStateCreateFlagsNV(..)
-                                                                 , CoverageReductionModeNV( COVERAGE_REDUCTION_MODE_MERGE_NV
-                                                                                          , COVERAGE_REDUCTION_MODE_TRUNCATE_NV
-                                                                                          , ..
-                                                                                          )
-                                                                 , NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION
-                                                                 , pattern NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION
-                                                                 , NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME
-                                                                 , pattern NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME
-                                                                 ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
-import Graphics.Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlags)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV
-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr FramebufferMixedSamplesCombinationNV -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr FramebufferMixedSamplesCombinationNV -> IO Result
-
--- | vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV -
--- Query supported sample count combinations
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the set
---     of combinations.
---
--- -   @pCombinationCount@ is a pointer to an integer related to the number
---     of combinations available or queried, as described below.
---
--- -   @pCombinations@ is either @NULL@ or a pointer to an array of
---     'FramebufferMixedSamplesCombinationNV' values, indicating the
---     supported combinations of coverage reduction mode, rasterization
---     samples, and color, depth, stencil attachment sample counts.
---
--- = Description
---
--- If @pCombinations@ is @NULL@, then the number of supported combinations
--- for the given @physicalDevice@ is returned in @pCombinationCount@.
--- Otherwise, @pCombinationCount@ /must/ point to a variable set by the
--- user to the number of elements in the @pCombinations@ array, and on
--- return the variable is overwritten with the number of values actually
--- written to @pCombinations@. If the value of @pCombinationCount@ is less
--- than the number of combinations supported for the given
--- @physicalDevice@, at most @pCombinationCount@ values will be written
--- @pCombinations@ and 'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
--- will be returned instead of
--- 'Graphics.Vulkan.Core10.Enums.Result.SUCCESS' to indicate that not all
--- the supported values were returned.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PhysicalDevice' handle
---
--- -   @pCombinationCount@ /must/ be a valid pointer to a @uint32_t@ value
---
--- -   If the value referenced by @pCombinationCount@ is not @0@, and
---     @pCombinations@ is not @NULL@, @pCombinations@ /must/ be a valid
---     pointer to an array of @pCombinationCount@
---     'FramebufferMixedSamplesCombinationNV' structures
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.INCOMPLETE'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'FramebufferMixedSamplesCombinationNV',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("combinations" ::: Vector FramebufferMixedSamplesCombinationNV))
-getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV physicalDevice = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV' = mkVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV (pVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV (instanceCmds (physicalDevice :: PhysicalDevice)))
-  let physicalDevice' = physicalDeviceHandle (physicalDevice)
-  pPCombinationCount <- ContT $ bracket (callocBytes @Word32 4) free
-  r <- lift $ vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV' physicalDevice' (pPCombinationCount) (nullPtr)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pCombinationCount <- lift $ peek @Word32 pPCombinationCount
-  pPCombinations <- ContT $ bracket (callocBytes @FramebufferMixedSamplesCombinationNV ((fromIntegral (pCombinationCount)) * 32)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPCombinations `advancePtrBytes` (i * 32) :: Ptr FramebufferMixedSamplesCombinationNV) . ($ ())) [0..(fromIntegral (pCombinationCount)) - 1]
-  r' <- lift $ vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV' physicalDevice' (pPCombinationCount) ((pPCombinations))
-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
-  pCombinationCount' <- lift $ peek @Word32 pPCombinationCount
-  pCombinations' <- lift $ generateM (fromIntegral (pCombinationCount')) (\i -> peekCStruct @FramebufferMixedSamplesCombinationNV (((pPCombinations) `advancePtrBytes` (32 * (i)) :: Ptr FramebufferMixedSamplesCombinationNV)))
-  pure $ ((r'), pCombinations')
-
-
--- | VkPhysicalDeviceCoverageReductionModeFeaturesNV - Structure describing
--- the coverage reduction mode features that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceCoverageReductionModeFeaturesNV'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceCoverageReductionModeFeaturesNV' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceCoverageReductionModeFeaturesNV' /can/ also be included
--- in the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo'
--- to enable the feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceCoverageReductionModeFeaturesNV = PhysicalDeviceCoverageReductionModeFeaturesNV
-  { -- | @coverageReductionMode@ indicates whether the implementation supports
-    -- coverage reduction modes. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-coverage-reduction Coverage Reduction>.
-    coverageReductionMode :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceCoverageReductionModeFeaturesNV
-
-instance ToCStruct PhysicalDeviceCoverageReductionModeFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceCoverageReductionModeFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (coverageReductionMode))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceCoverageReductionModeFeaturesNV where
-  peekCStruct p = do
-    coverageReductionMode <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceCoverageReductionModeFeaturesNV
-             (bool32ToBool coverageReductionMode)
-
-instance Storable PhysicalDeviceCoverageReductionModeFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceCoverageReductionModeFeaturesNV where
-  zero = PhysicalDeviceCoverageReductionModeFeaturesNV
-           zero
-
-
--- | VkPipelineCoverageReductionStateCreateInfoNV - Structure specifying
--- parameters controlling coverage reduction
---
--- = Description
---
--- If this structure is not present, the default coverage reduction mode is
--- inferred as follows:
---
--- -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, then
---     it is as if the @coverageReductionMode@ is
---     'COVERAGE_REDUCTION_MODE_MERGE_NV'.
---
--- -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, then
---     it is as if the @coverageReductionMode@ is
---     'COVERAGE_REDUCTION_MODE_TRUNCATE_NV'.
---
--- -   If both @VK_NV_framebuffer_mixed_samples@ and
---     @VK_AMD_mixed_attachment_samples@ are enabled, then the default
---     coverage reduction mode is implementation-dependent.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV'
---
--- -   @flags@ /must/ be @0@
---
--- -   @coverageReductionMode@ /must/ be a valid 'CoverageReductionModeNV'
---     value
---
--- = See Also
---
--- 'CoverageReductionModeNV',
--- 'PipelineCoverageReductionStateCreateFlagsNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineCoverageReductionStateCreateInfoNV = PipelineCoverageReductionStateCreateInfoNV
-  { -- | @flags@ is reserved for future use.
-    flags :: PipelineCoverageReductionStateCreateFlagsNV
-  , -- | @coverageReductionMode@ is a 'CoverageReductionModeNV' value controlling
-    -- how the /color sample mask/ is generated from the coverage mask.
-    coverageReductionMode :: CoverageReductionModeNV
-  }
-  deriving (Typeable)
-deriving instance Show PipelineCoverageReductionStateCreateInfoNV
-
-instance ToCStruct PipelineCoverageReductionStateCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineCoverageReductionStateCreateInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineCoverageReductionStateCreateFlagsNV)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr CoverageReductionModeNV)) (coverageReductionMode)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr CoverageReductionModeNV)) (zero)
-    f
-
-instance FromCStruct PipelineCoverageReductionStateCreateInfoNV where
-  peekCStruct p = do
-    flags <- peek @PipelineCoverageReductionStateCreateFlagsNV ((p `plusPtr` 16 :: Ptr PipelineCoverageReductionStateCreateFlagsNV))
-    coverageReductionMode <- peek @CoverageReductionModeNV ((p `plusPtr` 20 :: Ptr CoverageReductionModeNV))
-    pure $ PipelineCoverageReductionStateCreateInfoNV
-             flags coverageReductionMode
-
-instance Storable PipelineCoverageReductionStateCreateInfoNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineCoverageReductionStateCreateInfoNV where
-  zero = PipelineCoverageReductionStateCreateInfoNV
-           zero
-           zero
-
-
--- | VkFramebufferMixedSamplesCombinationNV - Structure specifying a
--- supported sample count combination
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'CoverageReductionModeNV',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV'
-data FramebufferMixedSamplesCombinationNV = FramebufferMixedSamplesCombinationNV
-  { -- | @coverageReductionMode@ is a 'CoverageReductionModeNV' value specifying
-    -- the coverage reduction mode.
-    coverageReductionMode :: CoverageReductionModeNV
-  , -- | @rasterizationSamples@ specifies the number of rasterization samples in
-    -- the supported combination.
-    rasterizationSamples :: SampleCountFlagBits
-  , -- | @depthStencilSamples@ specifies the number of samples in the depth
-    -- stencil attachment in the supported combination. A value of 0 indicates
-    -- the combination does not have a depth stencil attachment.
-    depthStencilSamples :: SampleCountFlags
-  , -- | @colorSamples@ specifies the number of color samples in a color
-    -- attachment in the supported combination. A value of 0 indicates the
-    -- combination does not have a color attachment.
-    colorSamples :: SampleCountFlags
-  }
-  deriving (Typeable)
-deriving instance Show FramebufferMixedSamplesCombinationNV
-
-instance ToCStruct FramebufferMixedSamplesCombinationNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p FramebufferMixedSamplesCombinationNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr CoverageReductionModeNV)) (coverageReductionMode)
-    poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (rasterizationSamples)
-    poke ((p `plusPtr` 24 :: Ptr SampleCountFlags)) (depthStencilSamples)
-    poke ((p `plusPtr` 28 :: Ptr SampleCountFlags)) (colorSamples)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr CoverageReductionModeNV)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr SampleCountFlags)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr SampleCountFlags)) (zero)
-    f
-
-instance FromCStruct FramebufferMixedSamplesCombinationNV where
-  peekCStruct p = do
-    coverageReductionMode <- peek @CoverageReductionModeNV ((p `plusPtr` 16 :: Ptr CoverageReductionModeNV))
-    rasterizationSamples <- peek @SampleCountFlagBits ((p `plusPtr` 20 :: Ptr SampleCountFlagBits))
-    depthStencilSamples <- peek @SampleCountFlags ((p `plusPtr` 24 :: Ptr SampleCountFlags))
-    colorSamples <- peek @SampleCountFlags ((p `plusPtr` 28 :: Ptr SampleCountFlags))
-    pure $ FramebufferMixedSamplesCombinationNV
-             coverageReductionMode rasterizationSamples depthStencilSamples colorSamples
-
-instance Storable FramebufferMixedSamplesCombinationNV where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero FramebufferMixedSamplesCombinationNV where
-  zero = FramebufferMixedSamplesCombinationNV
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineCoverageReductionStateCreateFlagsNV - Reserved for future use
---
--- = Description
---
--- 'PipelineCoverageReductionStateCreateFlagsNV' is a bitmask type for
--- setting a mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'PipelineCoverageReductionStateCreateInfoNV'
-newtype PipelineCoverageReductionStateCreateFlagsNV = PipelineCoverageReductionStateCreateFlagsNV Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineCoverageReductionStateCreateFlagsNV where
-  showsPrec p = \case
-    PipelineCoverageReductionStateCreateFlagsNV x -> showParen (p >= 11) (showString "PipelineCoverageReductionStateCreateFlagsNV 0x" . showHex x)
-
-instance Read PipelineCoverageReductionStateCreateFlagsNV where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineCoverageReductionStateCreateFlagsNV")
-                       v <- step readPrec
-                       pure (PipelineCoverageReductionStateCreateFlagsNV v)))
-
-
--- | VkCoverageReductionModeNV - Specify the coverage reduction mode
---
--- = See Also
---
--- 'FramebufferMixedSamplesCombinationNV',
--- 'PipelineCoverageReductionStateCreateInfoNV'
-newtype CoverageReductionModeNV = CoverageReductionModeNV Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'COVERAGE_REDUCTION_MODE_MERGE_NV': In this mode, there is an
--- implementation-dependent association of each raster sample to a color
--- sample. The reduced color sample mask is computed such that the bit for
--- each color sample is 1 if any of the associated bits in the fragment’s
--- coverage is on, and 0 otherwise.
-pattern COVERAGE_REDUCTION_MODE_MERGE_NV = CoverageReductionModeNV 0
--- | 'COVERAGE_REDUCTION_MODE_TRUNCATE_NV': In this mode, only the first M
--- raster samples are associated with the color samples such that raster
--- sample i maps to color sample i, where M is the number of color samples.
-pattern COVERAGE_REDUCTION_MODE_TRUNCATE_NV = CoverageReductionModeNV 1
-{-# complete COVERAGE_REDUCTION_MODE_MERGE_NV,
-             COVERAGE_REDUCTION_MODE_TRUNCATE_NV :: CoverageReductionModeNV #-}
-
-instance Show CoverageReductionModeNV where
-  showsPrec p = \case
-    COVERAGE_REDUCTION_MODE_MERGE_NV -> showString "COVERAGE_REDUCTION_MODE_MERGE_NV"
-    COVERAGE_REDUCTION_MODE_TRUNCATE_NV -> showString "COVERAGE_REDUCTION_MODE_TRUNCATE_NV"
-    CoverageReductionModeNV x -> showParen (p >= 11) (showString "CoverageReductionModeNV " . showsPrec 11 x)
-
-instance Read CoverageReductionModeNV where
-  readPrec = parens (choose [("COVERAGE_REDUCTION_MODE_MERGE_NV", pure COVERAGE_REDUCTION_MODE_MERGE_NV)
-                            , ("COVERAGE_REDUCTION_MODE_TRUNCATE_NV", pure COVERAGE_REDUCTION_MODE_TRUNCATE_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CoverageReductionModeNV")
-                       v <- step readPrec
-                       pure (CoverageReductionModeNV v)))
-
-
-type NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION"
-pattern NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION = 1
-
-
-type NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME = "VK_NV_coverage_reduction_mode"
-
--- No documentation found for TopLevel "VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME"
-pattern NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME = "VK_NV_coverage_reduction_mode"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode  ( FramebufferMixedSamplesCombinationNV
-                                                                 , PhysicalDeviceCoverageReductionModeFeaturesNV
-                                                                 , PipelineCoverageReductionStateCreateInfoNV
-                                                                 ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data FramebufferMixedSamplesCombinationNV
-
-instance ToCStruct FramebufferMixedSamplesCombinationNV
-instance Show FramebufferMixedSamplesCombinationNV
-
-instance FromCStruct FramebufferMixedSamplesCombinationNV
-
-
-data PhysicalDeviceCoverageReductionModeFeaturesNV
-
-instance ToCStruct PhysicalDeviceCoverageReductionModeFeaturesNV
-instance Show PhysicalDeviceCoverageReductionModeFeaturesNV
-
-instance FromCStruct PhysicalDeviceCoverageReductionModeFeaturesNV
-
-
-data PipelineCoverageReductionStateCreateInfoNV
-
-instance ToCStruct PipelineCoverageReductionStateCreateInfoNV
-instance Show PipelineCoverageReductionStateCreateInfoNV
-
-instance FromCStruct PipelineCoverageReductionStateCreateInfoNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs b/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs
+++ /dev/null
@@ -1,275 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation  ( DedicatedAllocationImageCreateInfoNV(..)
-                                                              , DedicatedAllocationBufferCreateInfoNV(..)
-                                                              , DedicatedAllocationMemoryAllocateInfoNV(..)
-                                                              , NV_DEDICATED_ALLOCATION_SPEC_VERSION
-                                                              , pattern NV_DEDICATED_ALLOCATION_SPEC_VERSION
-                                                              , NV_DEDICATED_ALLOCATION_EXTENSION_NAME
-                                                              , pattern NV_DEDICATED_ALLOCATION_EXTENSION_NAME
-                                                              ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Handles (Image)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV))
--- | VkDedicatedAllocationImageCreateInfoNV - Specify that an image is bound
--- to a dedicated memory resource
---
--- = 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 'Graphics.Vulkan.Core10.BaseType.TRUE',
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ /must/ not
---     include
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DedicatedAllocationImageCreateInfoNV = DedicatedAllocationImageCreateInfoNV
-  { -- | @dedicatedAllocation@ specifies whether the image will have a dedicated
-    -- allocation bound to it.
-    dedicatedAllocation :: Bool }
-  deriving (Typeable)
-deriving instance Show DedicatedAllocationImageCreateInfoNV
-
-instance ToCStruct DedicatedAllocationImageCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DedicatedAllocationImageCreateInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (dedicatedAllocation))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct DedicatedAllocationImageCreateInfoNV where
-  peekCStruct p = do
-    dedicatedAllocation <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ DedicatedAllocationImageCreateInfoNV
-             (bool32ToBool dedicatedAllocation)
-
-instance Storable DedicatedAllocationImageCreateInfoNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DedicatedAllocationImageCreateInfoNV where
-  zero = DedicatedAllocationImageCreateInfoNV
-           zero
-
-
--- | VkDedicatedAllocationBufferCreateInfoNV - Specify that a buffer is bound
--- to a dedicated memory resource
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DedicatedAllocationBufferCreateInfoNV = DedicatedAllocationBufferCreateInfoNV
-  { -- | @dedicatedAllocation@ specifies whether the buffer will have a dedicated
-    -- allocation bound to it.
-    dedicatedAllocation :: Bool }
-  deriving (Typeable)
-deriving instance Show DedicatedAllocationBufferCreateInfoNV
-
-instance ToCStruct DedicatedAllocationBufferCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DedicatedAllocationBufferCreateInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (dedicatedAllocation))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct DedicatedAllocationBufferCreateInfoNV where
-  peekCStruct p = do
-    dedicatedAllocation <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ DedicatedAllocationBufferCreateInfoNV
-             (bool32ToBool dedicatedAllocation)
-
-instance Storable DedicatedAllocationBufferCreateInfoNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DedicatedAllocationBufferCreateInfoNV where
-  zero = DedicatedAllocationBufferCreateInfoNV
-           zero
-
-
--- | VkDedicatedAllocationMemoryAllocateInfoNV - Specify a dedicated memory
--- allocation resource
---
--- == Valid Usage
---
--- -   At least one of @image@ and @buffer@ /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     the image /must/ have been created with
---     'DedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@ equal
---     to 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If @buffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', the buffer /must/
---     have been created with
---     'DedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@ equal
---     to 'Graphics.Vulkan.Core10.BaseType.TRUE'
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@
---     /must/ equal the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@
---     of the image
---
--- -   If @buffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@
---     /must/ equal the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@
---     of the buffer
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     and 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' defines a
---     memory import operation, the memory being imported /must/ also be a
---     dedicated image allocation and @image@ /must/ be identical to the
---     image associated with the imported memory
---
--- -   If @buffer@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---     and 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' defines a
---     memory import operation, the memory being imported /must/ also be a
---     dedicated buffer allocation and @buffer@ /must/ be identical to the
---     buffer associated with the imported memory
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV'
---
--- -   If @image@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @image@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Image'
---     handle
---
--- -   If @buffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   Both of @buffer@, and @image@ that are valid handles of non-ignored
---     parameters /must/ have been created, allocated, or retrieved from
---     the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.Image',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DedicatedAllocationMemoryAllocateInfoNV = DedicatedAllocationMemoryAllocateInfoNV
-  { -- | @image@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or a handle
-    -- of an image which this memory will be bound to.
-    image :: Image
-  , -- | @buffer@ is 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' or a
-    -- handle of a buffer which this memory will be bound to.
-    buffer :: Buffer
-  }
-  deriving (Typeable)
-deriving instance Show DedicatedAllocationMemoryAllocateInfoNV
-
-instance ToCStruct DedicatedAllocationMemoryAllocateInfoNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DedicatedAllocationMemoryAllocateInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Image)) (image)
-    poke ((p `plusPtr` 24 :: Ptr Buffer)) (buffer)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct DedicatedAllocationMemoryAllocateInfoNV where
-  peekCStruct p = do
-    image <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
-    buffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer))
-    pure $ DedicatedAllocationMemoryAllocateInfoNV
-             image buffer
-
-instance Storable DedicatedAllocationMemoryAllocateInfoNV where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DedicatedAllocationMemoryAllocateInfoNV where
-  zero = DedicatedAllocationMemoryAllocateInfoNV
-           zero
-           zero
-
-
-type NV_DEDICATED_ALLOCATION_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION"
-pattern NV_DEDICATED_ALLOCATION_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_DEDICATED_ALLOCATION_SPEC_VERSION = 1
-
-
-type NV_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_NV_dedicated_allocation"
-
--- No documentation found for TopLevel "VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME"
-pattern NV_DEDICATED_ALLOCATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_NV_dedicated_allocation"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation  ( DedicatedAllocationBufferCreateInfoNV
-                                                              , DedicatedAllocationImageCreateInfoNV
-                                                              , DedicatedAllocationMemoryAllocateInfoNV
-                                                              ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DedicatedAllocationBufferCreateInfoNV
-
-instance ToCStruct DedicatedAllocationBufferCreateInfoNV
-instance Show DedicatedAllocationBufferCreateInfoNV
-
-instance FromCStruct DedicatedAllocationBufferCreateInfoNV
-
-
-data DedicatedAllocationImageCreateInfoNV
-
-instance ToCStruct DedicatedAllocationImageCreateInfoNV
-instance Show DedicatedAllocationImageCreateInfoNV
-
-instance FromCStruct DedicatedAllocationImageCreateInfoNV
-
-
-data DedicatedAllocationMemoryAllocateInfoNV
-
-instance ToCStruct DedicatedAllocationMemoryAllocateInfoNV
-instance Show DedicatedAllocationMemoryAllocateInfoNV
-
-instance FromCStruct DedicatedAllocationMemoryAllocateInfoNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs b/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs
+++ /dev/null
@@ -1,107 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing  ( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(..)
-                                                                             , NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION
-                                                                             , pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION
-                                                                             , NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME
-                                                                             , pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME
-                                                                             ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV))
--- | VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV - Structure
--- describing dedicated allocation image aliasing features that can be
--- supported by an implementation
---
--- = Members
---
--- The members of the
--- 'PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV'
--- structure is included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-  { -- | @dedicatedAllocationImageAliasing@ indicates that the implementation
-    -- supports aliasing of compatible image objects on a dedicated allocation.
-    dedicatedAllocationImageAliasing :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-
-instance ToCStruct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (dedicatedAllocationImageAliasing))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV where
-  peekCStruct p = do
-    dedicatedAllocationImageAliasing <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-             (bool32ToBool dedicatedAllocationImageAliasing)
-
-instance Storable PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV where
-  zero = PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-           zero
-
-
-type NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION"
-pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION = 1
-
-
-type NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME = "VK_NV_dedicated_allocation_image_aliasing"
-
--- No documentation found for TopLevel "VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME"
-pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME = "VK_NV_dedicated_allocation_image_aliasing"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing  (PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-
-instance ToCStruct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-instance Show PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-
-instance FromCStruct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs b/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs
+++ /dev/null
@@ -1,299 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints  ( cmdSetCheckpointNV
-                                                                       , getQueueCheckpointDataNV
-                                                                       , QueueFamilyCheckpointPropertiesNV(..)
-                                                                       , CheckpointDataNV(..)
-                                                                       , NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION
-                                                                       , pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION
-                                                                       , NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME
-                                                                       , pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME
-                                                                       ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetCheckpointNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetQueueCheckpointDataNV))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits)
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
-import Graphics.Vulkan.Core10.Handles (Queue)
-import Graphics.Vulkan.Core10.Handles (Queue(..))
-import Graphics.Vulkan.Core10.Handles (Queue_T)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_CHECKPOINT_DATA_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetCheckpointNV
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> Ptr () -> IO ()
-
--- | vkCmdSetCheckpointNV - insert diagnostic checkpoint in command stream
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer that will receive the marker
---
--- -   @pCheckpointMarker@ is an opaque application-provided value that
---     will be associated with the checkpoint.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, compute,
---     or transfer operations
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- |                                                                                                                            |                                                                                                                        | Transfer                                                                                                              |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdSetCheckpointNV :: forall io . MonadIO io => CommandBuffer -> ("checkpointMarker" ::: Ptr ()) -> io ()
-cmdSetCheckpointNV commandBuffer checkpointMarker = liftIO $ do
-  let vkCmdSetCheckpointNV' = mkVkCmdSetCheckpointNV (pVkCmdSetCheckpointNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdSetCheckpointNV' (commandBufferHandle (commandBuffer)) (checkpointMarker)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetQueueCheckpointDataNV
-  :: FunPtr (Ptr Queue_T -> Ptr Word32 -> Ptr CheckpointDataNV -> IO ()) -> Ptr Queue_T -> Ptr Word32 -> Ptr CheckpointDataNV -> IO ()
-
--- | vkGetQueueCheckpointDataNV - retrieve diagnostic checkpoint data
---
--- = Parameters
---
--- -   @queue@ is the 'Graphics.Vulkan.Core10.Handles.Queue' object the
---     caller would like to retrieve checkpoint data for
---
--- -   @pCheckpointDataCount@ is a pointer to an integer related to the
---     number of checkpoint markers available or queried, as described
---     below.
---
--- -   @pCheckpointData@ is either @NULL@ or a pointer to an array of
---     'CheckpointDataNV' structures.
---
--- = Description
---
--- If @pCheckpointData@ is @NULL@, then the number of checkpoint markers
--- available is returned in @pCheckpointDataCount@.
---
--- Otherwise, @pCheckpointDataCount@ /must/ point to a variable set by the
--- user to the number of elements in the @pCheckpointData@ array, and on
--- return the variable is overwritten with the number of structures
--- actually written to @pCheckpointData@.
---
--- If @pCheckpointDataCount@ is less than the number of checkpoint markers
--- available, at most @pCheckpointDataCount@ structures will be written.
---
--- == Valid Usage
---
--- -   The device that @queue@ belongs to /must/ be in the lost state
---
--- == Valid Usage (Implicit)
---
--- -   @queue@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Queue'
---     handle
---
--- -   @pCheckpointDataCount@ /must/ be a valid pointer to a @uint32_t@
---     value
---
--- -   If the value referenced by @pCheckpointDataCount@ is not @0@, and
---     @pCheckpointData@ is not @NULL@, @pCheckpointData@ /must/ be a valid
---     pointer to an array of @pCheckpointDataCount@ 'CheckpointDataNV'
---     structures
---
--- = See Also
---
--- 'CheckpointDataNV', 'Graphics.Vulkan.Core10.Handles.Queue'
-getQueueCheckpointDataNV :: forall io . MonadIO io => Queue -> io (("checkpointData" ::: Vector CheckpointDataNV))
-getQueueCheckpointDataNV queue = liftIO . evalContT $ do
-  let vkGetQueueCheckpointDataNV' = mkVkGetQueueCheckpointDataNV (pVkGetQueueCheckpointDataNV (deviceCmds (queue :: Queue)))
-  let queue' = queueHandle (queue)
-  pPCheckpointDataCount <- ContT $ bracket (callocBytes @Word32 4) free
-  lift $ vkGetQueueCheckpointDataNV' queue' (pPCheckpointDataCount) (nullPtr)
-  pCheckpointDataCount <- lift $ peek @Word32 pPCheckpointDataCount
-  pPCheckpointData <- ContT $ bracket (callocBytes @CheckpointDataNV ((fromIntegral (pCheckpointDataCount)) * 32)) free
-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPCheckpointData `advancePtrBytes` (i * 32) :: Ptr CheckpointDataNV) . ($ ())) [0..(fromIntegral (pCheckpointDataCount)) - 1]
-  lift $ vkGetQueueCheckpointDataNV' queue' (pPCheckpointDataCount) ((pPCheckpointData))
-  pCheckpointDataCount' <- lift $ peek @Word32 pPCheckpointDataCount
-  pCheckpointData' <- lift $ generateM (fromIntegral (pCheckpointDataCount')) (\i -> peekCStruct @CheckpointDataNV (((pPCheckpointData) `advancePtrBytes` (32 * (i)) :: Ptr CheckpointDataNV)))
-  pure $ (pCheckpointData')
-
-
--- | VkQueueFamilyCheckpointPropertiesNV - return structure for queue family
--- checkpoint info query
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data QueueFamilyCheckpointPropertiesNV = QueueFamilyCheckpointPropertiesNV
-  { -- | @checkpointExecutionStageMask@ is a mask indicating which pipeline
-    -- stages the implementation can execute checkpoint markers in.
-    checkpointExecutionStageMask :: PipelineStageFlags }
-  deriving (Typeable)
-deriving instance Show QueueFamilyCheckpointPropertiesNV
-
-instance ToCStruct QueueFamilyCheckpointPropertiesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p QueueFamilyCheckpointPropertiesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineStageFlags)) (checkpointExecutionStageMask)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineStageFlags)) (zero)
-    f
-
-instance FromCStruct QueueFamilyCheckpointPropertiesNV where
-  peekCStruct p = do
-    checkpointExecutionStageMask <- peek @PipelineStageFlags ((p `plusPtr` 16 :: Ptr PipelineStageFlags))
-    pure $ QueueFamilyCheckpointPropertiesNV
-             checkpointExecutionStageMask
-
-instance Storable QueueFamilyCheckpointPropertiesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero QueueFamilyCheckpointPropertiesNV where
-  zero = QueueFamilyCheckpointPropertiesNV
-           zero
-
-
--- | VkCheckpointDataNV - return structure for command buffer checkpoint data
---
--- == Valid Usage (Implicit)
---
--- Note that the stages at which a checkpoint marker /can/ be executed are
--- implementation-defined and /can/ be queried by calling
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'.
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getQueueCheckpointDataNV'
-data CheckpointDataNV = CheckpointDataNV
-  { -- | @stage@ indicates which pipeline stage the checkpoint marker data refers
-    -- to.
-    stage :: PipelineStageFlagBits
-  , -- | @pCheckpointMarker@ contains the value of the last checkpoint marker
-    -- executed in the stage that @stage@ refers to.
-    checkpointMarker :: Ptr ()
-  }
-  deriving (Typeable)
-deriving instance Show CheckpointDataNV
-
-instance ToCStruct CheckpointDataNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CheckpointDataNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CHECKPOINT_DATA_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineStageFlagBits)) (stage)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (checkpointMarker)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CHECKPOINT_DATA_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineStageFlagBits)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
-    f
-
-instance FromCStruct CheckpointDataNV where
-  peekCStruct p = do
-    stage <- peek @PipelineStageFlagBits ((p `plusPtr` 16 :: Ptr PipelineStageFlagBits))
-    pCheckpointMarker <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
-    pure $ CheckpointDataNV
-             stage pCheckpointMarker
-
-instance Storable CheckpointDataNV where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero CheckpointDataNV where
-  zero = CheckpointDataNV
-           zero
-           zero
-
-
-type NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION"
-pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION = 2
-
-
-type NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME = "VK_NV_device_diagnostic_checkpoints"
-
--- No documentation found for TopLevel "VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME"
-pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME = "VK_NV_device_diagnostic_checkpoints"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints  ( CheckpointDataNV
-                                                                       , QueueFamilyCheckpointPropertiesNV
-                                                                       ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data CheckpointDataNV
-
-instance ToCStruct CheckpointDataNV
-instance Show CheckpointDataNV
-
-instance FromCStruct CheckpointDataNV
-
-
-data QueueFamilyCheckpointPropertiesNV
-
-instance ToCStruct QueueFamilyCheckpointPropertiesNV
-instance Show QueueFamilyCheckpointPropertiesNV
-
-instance FromCStruct QueueFamilyCheckpointPropertiesNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs b/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs
+++ /dev/null
@@ -1,219 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config  ( PhysicalDeviceDiagnosticsConfigFeaturesNV(..)
-                                                                   , DeviceDiagnosticsConfigCreateInfoNV(..)
-                                                                   , DeviceDiagnosticsConfigFlagBitsNV( DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV
-                                                                                                      , DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV
-                                                                                                      , DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV
-                                                                                                      , ..
-                                                                                                      )
-                                                                   , DeviceDiagnosticsConfigFlagsNV
-                                                                   , NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION
-                                                                   , pattern NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION
-                                                                   , NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME
-                                                                   , pattern NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME
-                                                                   ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV))
--- | VkPhysicalDeviceDiagnosticsConfigFeaturesNV - Structure describing the
--- device-generated diagnostic configuration features that can be supported
--- by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceDiagnosticsConfigFeaturesNV' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceDiagnosticsConfigFeaturesNV' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceDiagnosticsConfigFeaturesNV' /can/ also be used in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable the feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceDiagnosticsConfigFeaturesNV = PhysicalDeviceDiagnosticsConfigFeaturesNV
-  { -- | @diagnosticsConfig@ indicates whether the implementation supports the
-    -- ability to configure diagnostic tools.
-    diagnosticsConfig :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceDiagnosticsConfigFeaturesNV
-
-instance ToCStruct PhysicalDeviceDiagnosticsConfigFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceDiagnosticsConfigFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (diagnosticsConfig))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceDiagnosticsConfigFeaturesNV where
-  peekCStruct p = do
-    diagnosticsConfig <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceDiagnosticsConfigFeaturesNV
-             (bool32ToBool diagnosticsConfig)
-
-instance Storable PhysicalDeviceDiagnosticsConfigFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceDiagnosticsConfigFeaturesNV where
-  zero = PhysicalDeviceDiagnosticsConfigFeaturesNV
-           zero
-
-
--- | VkDeviceDiagnosticsConfigCreateInfoNV - Specify diagnostics config for a
--- Vulkan device
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'DeviceDiagnosticsConfigFlagsNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data DeviceDiagnosticsConfigCreateInfoNV = DeviceDiagnosticsConfigCreateInfoNV
-  { -- | @flags@ /must/ be a valid combination of
-    -- 'DeviceDiagnosticsConfigFlagBitsNV' values
-    flags :: DeviceDiagnosticsConfigFlagsNV }
-  deriving (Typeable)
-deriving instance Show DeviceDiagnosticsConfigCreateInfoNV
-
-instance ToCStruct DeviceDiagnosticsConfigCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DeviceDiagnosticsConfigCreateInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr DeviceDiagnosticsConfigFlagsNV)) (flags)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct DeviceDiagnosticsConfigCreateInfoNV where
-  peekCStruct p = do
-    flags <- peek @DeviceDiagnosticsConfigFlagsNV ((p `plusPtr` 16 :: Ptr DeviceDiagnosticsConfigFlagsNV))
-    pure $ DeviceDiagnosticsConfigCreateInfoNV
-             flags
-
-instance Storable DeviceDiagnosticsConfigCreateInfoNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DeviceDiagnosticsConfigCreateInfoNV where
-  zero = DeviceDiagnosticsConfigCreateInfoNV
-           zero
-
-
--- | VkDeviceDiagnosticsConfigFlagBitsNV - Bitmask specifying diagnostics
--- flags
---
--- = See Also
---
--- 'DeviceDiagnosticsConfigFlagsNV'
-newtype DeviceDiagnosticsConfigFlagBitsNV = DeviceDiagnosticsConfigFlagBitsNV Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV' enables the
--- generation of debug information for shaders.
-pattern DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV = DeviceDiagnosticsConfigFlagBitsNV 0x00000001
--- | 'DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV' enables
--- driver side tracking of resources (images, buffers, etc.) used to
--- augment the device fault information.
-pattern DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV = DeviceDiagnosticsConfigFlagBitsNV 0x00000002
--- | 'DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV' enables
--- automatic insertion of
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#device-diagnostic-checkpoints diagnostic checkpoints>
--- for draw calls, dispatches, trace rays, and copies. The CPU call stack
--- at the time of the command will be associated as the marker data for the
--- automatically inserted checkpoints.
-pattern DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV = DeviceDiagnosticsConfigFlagBitsNV 0x00000004
-
-type DeviceDiagnosticsConfigFlagsNV = DeviceDiagnosticsConfigFlagBitsNV
-
-instance Show DeviceDiagnosticsConfigFlagBitsNV where
-  showsPrec p = \case
-    DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV -> showString "DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV"
-    DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV -> showString "DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV"
-    DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV -> showString "DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV"
-    DeviceDiagnosticsConfigFlagBitsNV x -> showParen (p >= 11) (showString "DeviceDiagnosticsConfigFlagBitsNV 0x" . showHex x)
-
-instance Read DeviceDiagnosticsConfigFlagBitsNV where
-  readPrec = parens (choose [("DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV", pure DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV)
-                            , ("DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV", pure DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV)
-                            , ("DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV", pure DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "DeviceDiagnosticsConfigFlagBitsNV")
-                       v <- step readPrec
-                       pure (DeviceDiagnosticsConfigFlagBitsNV v)))
-
-
-type NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION"
-pattern NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION = 1
-
-
-type NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME = "VK_NV_device_diagnostics_config"
-
--- No documentation found for TopLevel "VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME"
-pattern NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME = "VK_NV_device_diagnostics_config"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config  ( DeviceDiagnosticsConfigCreateInfoNV
-                                                                   , PhysicalDeviceDiagnosticsConfigFeaturesNV
-                                                                   ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DeviceDiagnosticsConfigCreateInfoNV
-
-instance ToCStruct DeviceDiagnosticsConfigCreateInfoNV
-instance Show DeviceDiagnosticsConfigCreateInfoNV
-
-instance FromCStruct DeviceDiagnosticsConfigCreateInfoNV
-
-
-data PhysicalDeviceDiagnosticsConfigFeaturesNV
-
-instance ToCStruct PhysicalDeviceDiagnosticsConfigFeaturesNV
-instance Show PhysicalDeviceDiagnosticsConfigFeaturesNV
-
-instance FromCStruct PhysicalDeviceDiagnosticsConfigFeaturesNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_device_generated_commands.hs b/src/Graphics/Vulkan/Extensions/VK_NV_device_generated_commands.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_device_generated_commands.hs
+++ /dev/null
@@ -1,2470 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_device_generated_commands  ( cmdExecuteGeneratedCommandsNV
-                                                                   , cmdPreprocessGeneratedCommandsNV
-                                                                   , cmdBindPipelineShaderGroupNV
-                                                                   , getGeneratedCommandsMemoryRequirementsNV
-                                                                   , createIndirectCommandsLayoutNV
-                                                                   , withIndirectCommandsLayoutNV
-                                                                   , destroyIndirectCommandsLayoutNV
-                                                                   , PhysicalDeviceDeviceGeneratedCommandsFeaturesNV(..)
-                                                                   , PhysicalDeviceDeviceGeneratedCommandsPropertiesNV(..)
-                                                                   , GraphicsShaderGroupCreateInfoNV(..)
-                                                                   , GraphicsPipelineShaderGroupsCreateInfoNV(..)
-                                                                   , BindShaderGroupIndirectCommandNV(..)
-                                                                   , BindIndexBufferIndirectCommandNV(..)
-                                                                   , BindVertexBufferIndirectCommandNV(..)
-                                                                   , SetStateFlagsIndirectCommandNV(..)
-                                                                   , IndirectCommandsStreamNV(..)
-                                                                   , IndirectCommandsLayoutTokenNV(..)
-                                                                   , IndirectCommandsLayoutCreateInfoNV(..)
-                                                                   , GeneratedCommandsInfoNV(..)
-                                                                   , GeneratedCommandsMemoryRequirementsInfoNV(..)
-                                                                   , IndirectCommandsLayoutUsageFlagBitsNV( INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV
-                                                                                                          , INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV
-                                                                                                          , INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV
-                                                                                                          , ..
-                                                                                                          )
-                                                                   , IndirectCommandsLayoutUsageFlagsNV
-                                                                   , IndirectStateFlagBitsNV( INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV
-                                                                                            , ..
-                                                                                            )
-                                                                   , IndirectStateFlagsNV
-                                                                   , IndirectCommandsTokenTypeNV( INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV
-                                                                                                , INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV
-                                                                                                , INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV
-                                                                                                , INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV
-                                                                                                , INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
-                                                                                                , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV
-                                                                                                , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV
-                                                                                                , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV
-                                                                                                , ..
-                                                                                                )
-                                                                   , NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
-                                                                   , pattern NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
-                                                                   , NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
-                                                                   , pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
-                                                                   , IndirectCommandsLayoutNV(..)
-                                                                   ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad (unless)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import Foreign.Marshal.Utils (maybePeek)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Extends (forgetExtensions)
-import Graphics.Vulkan.CStruct.Extends (peekSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (pokeSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (withSomeCStruct)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32(..))
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Core10.BaseType (DeviceAddress)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBindPipelineShaderGroupNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdExecuteGeneratedCommandsNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdPreprocessGeneratedCommandsNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateIndirectCommandsLayoutNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkDestroyIndirectCommandsLayoutNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetGeneratedCommandsMemoryRequirementsNV))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.IndexType (IndexType)
-import Graphics.Vulkan.Extensions.Handles (IndirectCommandsLayoutNV)
-import Graphics.Vulkan.Extensions.Handles (IndirectCommandsLayoutNV(..))
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.Core10.Handles (Pipeline)
-import Graphics.Vulkan.Core10.Handles (Pipeline(..))
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint(..))
-import Graphics.Vulkan.Core10.Handles (PipelineLayout)
-import Graphics.Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)
-import Graphics.Vulkan.Core10.Pipeline (PipelineTessellationStateCreateInfo)
-import Graphics.Vulkan.Core10.Pipeline (PipelineVertexInputStateCreateInfo)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.CStruct.Extends (SomeStruct)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.Handles (IndirectCommandsLayoutNV(..))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdExecuteGeneratedCommandsNV
-  :: FunPtr (Ptr CommandBuffer_T -> Bool32 -> Ptr GeneratedCommandsInfoNV -> IO ()) -> Ptr CommandBuffer_T -> Bool32 -> Ptr GeneratedCommandsInfoNV -> IO ()
-
--- | vkCmdExecuteGeneratedCommandsNV - Performs the generation and execution
--- of commands on the device
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @isPreprocessed@ represents whether the input data has already been
---     preprocessed on the device. If it is
---     'Graphics.Vulkan.Core10.BaseType.FALSE' this command will implicitly
---     trigger the preprocessing step, otherwise not.
---
--- -   @pGeneratedCommandsInfo@ is a pointer to an instance of the
---     'GeneratedCommandsInfoNV' structure containing parameters affecting
---     the generation of commands.
---
--- == Valid Usage
---
--- -   [[VUID-{refpage}-None-02690]] If a
---     'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   [[VUID-{refpage}-None-02691]] If a
---     'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using atomic
---     operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   [[VUID-{refpage}-None-02692]] If a
---     'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   [[VUID-{refpage}-filterCubic-02694]] Any
---     'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   [[VUID-{refpage}-filterCubicMinmax-02695]] Any
---     'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   [[VUID-{refpage}-flags-02696]] Any
---     'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   [[VUID-{refpage}-None-02697]] For each set /n/ that is statically
---     used by the 'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the
---     pipeline bind point used by this command, a descriptor set /must/
---     have been bound to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   [[VUID-{refpage}-None-02698]] For each push constant that is
---     statically used by the 'Graphics.Vulkan.Core10.Handles.Pipeline'
---     bound to the pipeline bind point used by this command, a push
---     constant value /must/ have been set for the same pipeline bind
---     point, with a 'Graphics.Vulkan.Core10.Handles.PipelineLayout' that
---     is compatible for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   [[VUID-{refpage}-None-02699]] Descriptors in each bound descriptor
---     set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   [[VUID-{refpage}-None-02700]] A valid pipeline /must/ be bound to
---     the pipeline bind point used by this command
---
--- -   [[VUID-{refpage}-commandBuffer-02701]] If the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   [[VUID-{refpage}-None-02859]] There /must/ not have been any calls
---     to dynamic state setting commands for any state not specified as
---     dynamic in the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command, since that
---     pipeline was bound
---
--- -   [[VUID-{refpage}-None-02702]] If the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   [[VUID-{refpage}-None-02703]] If the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   [[VUID-{refpage}-None-02704]] If the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   [[VUID-{refpage}-None-02705]] If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   [[VUID-{refpage}-None-02706]] If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   [[VUID-{refpage}-commandBuffer-02707]] If @commandBuffer@ is an
---     unprotected command buffer, any resource accessed by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command /must/ not be a protected
---     resource
---
--- -   [[VUID-{refpage}-renderPass-02684]] The current render pass /must/
---     be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   [[VUID-{refpage}-subpass-02685]] The subpass index of the current
---     render pass /must/ be equal to the @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   [[VUID-{refpage}-None-02686]] Every input attachment used by the
---     current subpass /must/ be bound to the pipeline via a descriptor set
---
--- -   [[VUID-{refpage}-None-02687]] Image subresources used as attachments
---     in the current render pass /must/ not be accessed in any way other
---     than as an attachment by this command
---
--- -   [[VUID-{refpage}-maxMultiviewInstanceIndex-02688]] If the draw is
---     recorded in a render pass instance with multiview enabled, the
---     maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   [[VUID-{refpage}-sampleLocationsEnable-02689]] If the bound graphics
---     pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   [[VUID-{refpage}-None-04007]] All vertex input bindings accessed via
---     vertex input variables declared in the vertex shader entry point’s
---     interface /must/ have either valid or
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound
---
--- -   [[VUID-{refpage}-None-04008]] If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
---     feature is not enabled, all vertex input bindings accessed via
---     vertex input variables declared in the vertex shader entry point’s
---     interface /must/ not be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   [[VUID-{refpage}-None-02721]] For a given vertex buffer binding, any
---     attribute data fetched /must/ be entirely contained within the
---     corresponding vertex buffer binding, as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If @isPreprocessed@ is 'Graphics.Vulkan.Core10.BaseType.TRUE' then
---     'cmdPreprocessGeneratedCommandsNV' /must/ have already been executed
---     on the device, using the same @pGeneratedCommandsInfo@ content as
---     well as the content of the input buffers it references (all except
---     'GeneratedCommandsInfoNV'::@preprocessBuffer@). Furthermore
---     @pGeneratedCommandsInfo@\`s @indirectCommandsLayout@ /must/ have
---     been created with the
---     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' bit set
---
--- -   'GeneratedCommandsInfoNV'::@pipeline@ /must/ match the current bound
---     pipeline at 'GeneratedCommandsInfoNV'::@pipelineBindPoint@
---
--- -   Transform feedback /must/ not be active
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid
---     'GeneratedCommandsInfoNV' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'GeneratedCommandsInfoNV'
-cmdExecuteGeneratedCommandsNV :: forall io . MonadIO io => CommandBuffer -> ("isPreprocessed" ::: Bool) -> GeneratedCommandsInfoNV -> io ()
-cmdExecuteGeneratedCommandsNV commandBuffer isPreprocessed generatedCommandsInfo = liftIO . evalContT $ do
-  let vkCmdExecuteGeneratedCommandsNV' = mkVkCmdExecuteGeneratedCommandsNV (pVkCmdExecuteGeneratedCommandsNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  pGeneratedCommandsInfo <- ContT $ withCStruct (generatedCommandsInfo)
-  lift $ vkCmdExecuteGeneratedCommandsNV' (commandBufferHandle (commandBuffer)) (boolToBool32 (isPreprocessed)) pGeneratedCommandsInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdPreprocessGeneratedCommandsNV
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr GeneratedCommandsInfoNV -> IO ()) -> Ptr CommandBuffer_T -> Ptr GeneratedCommandsInfoNV -> IO ()
-
--- | vkCmdPreprocessGeneratedCommandsNV - Performs preprocessing for
--- generated commands
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer which does the preprocessing.
---
--- -   @pGeneratedCommandsInfo@ is a pointer to an instance of the
---     'GeneratedCommandsInfoNV' structure containing parameters affecting
---     the preprocessing step.
---
--- == Valid Usage
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   @pGeneratedCommandsInfo@\`s @indirectCommandsLayout@ /must/ have
---     been created with the
---     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' bit set
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid
---     'GeneratedCommandsInfoNV' structure
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'GeneratedCommandsInfoNV'
-cmdPreprocessGeneratedCommandsNV :: forall io . MonadIO io => CommandBuffer -> GeneratedCommandsInfoNV -> io ()
-cmdPreprocessGeneratedCommandsNV commandBuffer generatedCommandsInfo = liftIO . evalContT $ do
-  let vkCmdPreprocessGeneratedCommandsNV' = mkVkCmdPreprocessGeneratedCommandsNV (pVkCmdPreprocessGeneratedCommandsNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  pGeneratedCommandsInfo <- ContT $ withCStruct (generatedCommandsInfo)
-  lift $ vkCmdPreprocessGeneratedCommandsNV' (commandBufferHandle (commandBuffer)) pGeneratedCommandsInfo
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBindPipelineShaderGroupNV
-  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> Word32 -> IO ()
-
--- | vkCmdBindPipelineShaderGroupNV - Bind a pipeline object
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer that the pipeline will be
---     bound to.
---
--- -   @pipelineBindPoint@ is a
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value specifying to which bind point the pipeline is bound.
---
--- -   @pipeline@ is the pipeline to be bound.
---
--- -   @groupIndex@ is the shader group to be bound.
---
--- == Valid Usage
---
--- -   @groupIndex@ /must/ be @0@ or less than the effective
---     'GraphicsPipelineShaderGroupsCreateInfoNV'::@groupCount@ including
---     the referenced pipelines
---
--- -   The @pipelineBindPoint@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The same restrictions as
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline' apply
---     as if the bound pipeline was created only with the Shader Group from
---     the @groupIndex@ information
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value
---
--- -   @pipeline@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics, or
---     compute operations
---
--- -   Both of @commandBuffer@, and @pipeline@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
-cmdBindPipelineShaderGroupNV :: forall io . MonadIO io => CommandBuffer -> PipelineBindPoint -> Pipeline -> ("groupIndex" ::: Word32) -> io ()
-cmdBindPipelineShaderGroupNV commandBuffer pipelineBindPoint pipeline groupIndex = liftIO $ do
-  let vkCmdBindPipelineShaderGroupNV' = mkVkCmdBindPipelineShaderGroupNV (pVkCmdBindPipelineShaderGroupNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdBindPipelineShaderGroupNV' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (pipeline) (groupIndex)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetGeneratedCommandsMemoryRequirementsNV
-  :: FunPtr (Ptr Device_T -> Ptr GeneratedCommandsMemoryRequirementsInfoNV -> Ptr (MemoryRequirements2 a) -> IO ()) -> Ptr Device_T -> Ptr GeneratedCommandsMemoryRequirementsInfoNV -> Ptr (MemoryRequirements2 a) -> IO ()
-
--- | vkGetGeneratedCommandsMemoryRequirementsNV - Retrieve the buffer
--- allocation requirements for generated commands
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the buffer.
---
--- -   @pInfo@ is a pointer to an instance of the
---     'GeneratedCommandsMemoryRequirementsInfoNV' structure containing
---     parameters required for the memory requirements query.
---
--- -   @pMemoryRequirements@ points to an instance of the
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
---     structure in which the memory requirements of the buffer object are
---     returned.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'GeneratedCommandsMemoryRequirementsInfoNV' structure
---
--- -   @pMemoryRequirements@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
---     structure
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'GeneratedCommandsMemoryRequirementsInfoNV',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
-getGeneratedCommandsMemoryRequirementsNV :: forall a io . (PokeChain a, PeekChain a, MonadIO io) => Device -> GeneratedCommandsMemoryRequirementsInfoNV -> io (MemoryRequirements2 a)
-getGeneratedCommandsMemoryRequirementsNV device info = liftIO . evalContT $ do
-  let vkGetGeneratedCommandsMemoryRequirementsNV' = mkVkGetGeneratedCommandsMemoryRequirementsNV (pVkGetGeneratedCommandsMemoryRequirementsNV (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))
-  lift $ vkGetGeneratedCommandsMemoryRequirementsNV' (deviceHandle (device)) pInfo (pPMemoryRequirements)
-  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements
-  pure $ (pMemoryRequirements)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateIndirectCommandsLayoutNV
-  :: FunPtr (Ptr Device_T -> Ptr IndirectCommandsLayoutCreateInfoNV -> Ptr AllocationCallbacks -> Ptr IndirectCommandsLayoutNV -> IO Result) -> Ptr Device_T -> Ptr IndirectCommandsLayoutCreateInfoNV -> Ptr AllocationCallbacks -> Ptr IndirectCommandsLayoutNV -> IO Result
-
--- | vkCreateIndirectCommandsLayoutNV - Create an indirect command layout
--- object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the indirect command
---     layout.
---
--- -   @pCreateInfo@ is a pointer to an instance of the
---     'IndirectCommandsLayoutCreateInfoNV' structure containing parameters
---     affecting creation of the indirect command layout.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pIndirectCommandsLayout@ points to a
---     'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
---     in which the resulting indirect command layout is returned.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'IndirectCommandsLayoutCreateInfoNV' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pIndirectCommandsLayout@ /must/ be a valid pointer to a
---     'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'IndirectCommandsLayoutCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV'
-createIndirectCommandsLayoutNV :: forall io . MonadIO io => Device -> IndirectCommandsLayoutCreateInfoNV -> ("allocator" ::: Maybe AllocationCallbacks) -> io (IndirectCommandsLayoutNV)
-createIndirectCommandsLayoutNV device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateIndirectCommandsLayoutNV' = mkVkCreateIndirectCommandsLayoutNV (pVkCreateIndirectCommandsLayoutNV (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPIndirectCommandsLayout <- ContT $ bracket (callocBytes @IndirectCommandsLayoutNV 8) free
-  r <- lift $ vkCreateIndirectCommandsLayoutNV' (deviceHandle (device)) pCreateInfo pAllocator (pPIndirectCommandsLayout)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pIndirectCommandsLayout <- lift $ peek @IndirectCommandsLayoutNV pPIndirectCommandsLayout
-  pure $ (pIndirectCommandsLayout)
-
--- | A convenience wrapper to make a compatible pair of calls to
--- 'createIndirectCommandsLayoutNV' and 'destroyIndirectCommandsLayoutNV'
---
--- To ensure that 'destroyIndirectCommandsLayoutNV' is always called: pass
--- 'Control.Exception.bracket' (or the allocate function from your
--- favourite resource management library) as the first argument.
--- To just extract the pair pass '(,)' as the first argument.
---
-withIndirectCommandsLayoutNV :: forall io r . MonadIO io => (io (IndirectCommandsLayoutNV) -> ((IndirectCommandsLayoutNV) -> io ()) -> r) -> Device -> IndirectCommandsLayoutCreateInfoNV -> Maybe AllocationCallbacks -> r
-withIndirectCommandsLayoutNV b device pCreateInfo pAllocator =
-  b (createIndirectCommandsLayoutNV device pCreateInfo pAllocator)
-    (\(o0) -> destroyIndirectCommandsLayoutNV device o0 pAllocator)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkDestroyIndirectCommandsLayoutNV
-  :: FunPtr (Ptr Device_T -> IndirectCommandsLayoutNV -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> IndirectCommandsLayoutNV -> Ptr AllocationCallbacks -> IO ()
-
--- | vkDestroyIndirectCommandsLayoutNV - Destroy an indirect commands layout
---
--- = Parameters
---
--- -   @device@ is the logical device that destroys the layout.
---
--- -   @indirectCommandsLayout@ is the layout to destroy.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @indirectCommandsLayout@ /must/
---     have completed execution
---
--- -   If 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @indirectCommandsLayout@ was created, a
---     compatible set of callbacks /must/ be provided here
---
--- -   If no
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     were provided when @indirectCommandsLayout@ was created,
---     @pAllocator@ /must/ be @NULL@
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @indirectCommandsLayout@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @indirectCommandsLayout@ /must/ have been created, allocated, or
---     retrieved from @device@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV'
-destroyIndirectCommandsLayoutNV :: forall io . MonadIO io => Device -> IndirectCommandsLayoutNV -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
-destroyIndirectCommandsLayoutNV device indirectCommandsLayout allocator = liftIO . evalContT $ do
-  let vkDestroyIndirectCommandsLayoutNV' = mkVkDestroyIndirectCommandsLayoutNV (pVkDestroyIndirectCommandsLayoutNV (deviceCmds (device :: Device)))
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  lift $ vkDestroyIndirectCommandsLayoutNV' (deviceHandle (device)) (indirectCommandsLayout) pAllocator
-  pure $ ()
-
-
--- | VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV - Structure describing
--- the device-generated commands features that can be supported by an
--- implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceDeviceGeneratedCommandsFeaturesNV'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceDeviceGeneratedCommandsFeaturesNV' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceDeviceGeneratedCommandsFeaturesNV' /can/ also be used in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable the features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-  { -- | @deviceGeneratedCommands@ indicates whether the implementation supports
-    -- functionality to generate commands on the device. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#device-generated-commands Device-Generated Commands>.
-    deviceGeneratedCommands :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-
-instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceDeviceGeneratedCommandsFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (deviceGeneratedCommands))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV where
-  peekCStruct p = do
-    deviceGeneratedCommands <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-             (bool32ToBool deviceGeneratedCommands)
-
-instance Storable PhysicalDeviceDeviceGeneratedCommandsFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceDeviceGeneratedCommandsFeaturesNV where
-  zero = PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-           zero
-
-
--- | VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV - Structure
--- describing push descriptor limits that can be supported by an
--- implementation
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-  { -- | @maxGraphicsShaderGroupCount@ is the maximum number of shader groups in
-    -- 'GraphicsPipelineShaderGroupsCreateInfoNV'.
-    maxGraphicsShaderGroupCount :: Word32
-  , -- | @maxIndirectSequenceCount@ is the maximum number of sequences in
-    -- 'GeneratedCommandsInfoNV' and in
-    -- 'GeneratedCommandsMemoryRequirementsInfoNV'.
-    maxIndirectSequenceCount :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV" "maxIndirectCommandsTokenCount"
-    maxIndirectCommandsTokenCount :: Word32
-  , -- | @maxIndirectCommandsStreamCount@ is the maximum number of streams in
-    -- 'IndirectCommandsLayoutCreateInfoNV'.
-    maxIndirectCommandsStreamCount :: Word32
-  , -- | @maxIndirectCommandsTokenOffset@ is the maximum offset in
-    -- 'IndirectCommandsLayoutTokenNV'.
-    maxIndirectCommandsTokenOffset :: Word32
-  , -- | @maxIndirectCommandsStreamStride@ is the maximum stream stride in
-    -- 'IndirectCommandsLayoutCreateInfoNV'.
-    maxIndirectCommandsStreamStride :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV" "minSequencesCountBufferOffsetAlignment"
-    minSequencesCountBufferOffsetAlignment :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV" "minSequencesIndexBufferOffsetAlignment"
-    minSequencesIndexBufferOffsetAlignment :: Word32
-  , -- | @minIndirectCommandsBufferOffsetAlignment@ is the minimum alignment for
-    -- memory addresses used in 'IndirectCommandsStreamNV' and as preprocess
-    -- buffer in 'GeneratedCommandsInfoNV'.
-    minIndirectCommandsBufferOffsetAlignment :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-
-instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceDeviceGeneratedCommandsPropertiesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxGraphicsShaderGroupCount)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxIndirectSequenceCount)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxIndirectCommandsTokenCount)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (maxIndirectCommandsStreamCount)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (maxIndirectCommandsTokenOffset)
-    poke ((p `plusPtr` 36 :: Ptr Word32)) (maxIndirectCommandsStreamStride)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (minSequencesCountBufferOffsetAlignment)
-    poke ((p `plusPtr` 44 :: Ptr Word32)) (minSequencesIndexBufferOffsetAlignment)
-    poke ((p `plusPtr` 48 :: Ptr Word32)) (minIndirectCommandsBufferOffsetAlignment)
-    f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
-  peekCStruct p = do
-    maxGraphicsShaderGroupCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxIndirectSequenceCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    maxIndirectCommandsTokenCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    maxIndirectCommandsStreamCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    maxIndirectCommandsTokenOffset <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    maxIndirectCommandsStreamStride <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
-    minSequencesCountBufferOffsetAlignment <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    minSequencesIndexBufferOffsetAlignment <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
-    minIndirectCommandsBufferOffsetAlignment <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pure $ PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-             maxGraphicsShaderGroupCount maxIndirectSequenceCount maxIndirectCommandsTokenCount maxIndirectCommandsStreamCount maxIndirectCommandsTokenOffset maxIndirectCommandsStreamStride minSequencesCountBufferOffsetAlignment minSequencesIndexBufferOffsetAlignment minIndirectCommandsBufferOffsetAlignment
-
-instance Storable PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
-  zero = PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkGraphicsShaderGroupCreateInfoNV - Structure specifying override
--- parameters for each shader group
---
--- == Valid Usage
---
--- -   For @stageCount@, the same restrictions as in
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@stageCount@
---     apply
---
--- -   For @pStages@, the same restrictions as in
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pStages@
---     apply
---
--- -   For @pVertexInputState@, the same restrictions as in
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pVertexInputState@
---     apply
---
--- -   For @pTessellationState@, the same restrictions as in
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pTessellationState@
---     apply
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@
---     valid
---     'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'
---     structures
---
--- -   @stageCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'GraphicsPipelineShaderGroupsCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data GraphicsShaderGroupCreateInfoNV = GraphicsShaderGroupCreateInfoNV
-  { -- | @pStages@ is an array of size @stageCount@ structures of type
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'
-    -- describing the set of the shader stages to be included in this shader
-    -- group.
-    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
-  , -- | @pVertexInputState@ is a pointer to an instance of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo'
-    -- structure.
-    vertexInputState :: Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
-  , -- | @pTessellationState@ is a pointer to an instance of the
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo'
-    -- structure, and is ignored if the shader group does not include a
-    -- tessellation control shader stage and tessellation evaluation shader
-    -- stage.
-    tessellationState :: Maybe (SomeStruct PipelineTessellationStateCreateInfo)
-  }
-  deriving (Typeable)
-deriving instance Show GraphicsShaderGroupCreateInfoNV
-
-instance ToCStruct GraphicsShaderGroupCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p GraphicsShaderGroupCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))
-    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
-    pVertexInputState'' <- case (vertexInputState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineVertexInputStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineVertexInputStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo _)))) pVertexInputState''
-    pTessellationState'' <- case (tessellationState) of
-      Nothing -> pure nullPtr
-      Just j -> ContT @_ @_ @(Ptr (PipelineTessellationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineTessellationStateCreateInfo (j) (cont . castPtr)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (PipelineTessellationStateCreateInfo _)))) pTessellationState''
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (mempty)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
-    lift $ f
-
-instance FromCStruct GraphicsShaderGroupCreateInfoNV where
-  peekCStruct p = do
-    stageCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo a))))
-    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
-    pVertexInputState <- peek @(Ptr (PipelineVertexInputStateCreateInfo _)) ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo a))))
-    pVertexInputState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pVertexInputState
-    pTessellationState <- peek @(Ptr (PipelineTessellationStateCreateInfo _)) ((p `plusPtr` 40 :: Ptr (Ptr (PipelineTessellationStateCreateInfo a))))
-    pTessellationState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pTessellationState
-    pure $ GraphicsShaderGroupCreateInfoNV
-             pStages' pVertexInputState' pTessellationState'
-
-instance Zero GraphicsShaderGroupCreateInfoNV where
-  zero = GraphicsShaderGroupCreateInfoNV
-           mempty
-           Nothing
-           Nothing
-
-
--- | VkGraphicsPipelineShaderGroupsCreateInfoNV - Structure specifying
--- parameters of a newly created multi shader group pipeline
---
--- = Description
---
--- When referencing shader groups by index, groups defined in the
--- referenced pipelines are treated as if they were defined as additional
--- entries in @pGroups@. They are appended in the order they appear in the
--- @pPipelines@ array and in the @pGroups@ array when those pipelines were
--- defined.
---
--- The application /must/ maintain the lifetime of all such referenced
--- pipelines based on the pipelines that make use of them.
---
--- == Valid Usage
---
--- -   @groupCount@ /must/ be at least @1@ and as maximum
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxGraphicsShaderGroupCount@
---
--- -   The sum of @groupCount@ including those groups added from referenced
---     @pPipelines@ /must/ also be as maximum
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxGraphicsShaderGroupCount@
---
--- -   The state of the first element of @pGroups@ /must/ match its
---     equivalent within the parent’s
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---
--- -   Each element of @pGroups@ /must/ in combination with the rest of the
---     pipeline state yield a valid state configuration
---
--- -   All elements of @pGroups@ /must/ use the same shader stage
---     combinations unless any mesh shader stage is used, then either
---     combination of task and mesh or just mesh shader is valid
---
--- -   Mesh and regular primitive shading stages cannot be mixed across
---     @pGroups@
---
--- -   Each element of the @pPipelines@ member of @libraries@ /must/ have
---     been created with identical state to the pipeline currently created
---     except the state that can be overriden by
---     'GraphicsShaderGroupCreateInfoNV'
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
---     feature /must/ be enabled
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV'
---
--- -   @pGroups@ /must/ be a valid pointer to an array of @groupCount@
---     valid 'GraphicsShaderGroupCreateInfoNV' structures
---
--- -   If @pipelineCount@ is not @0@, @pPipelines@ /must/ be a valid
---     pointer to an array of @pipelineCount@ valid
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handles
---
--- -   @groupCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'GraphicsShaderGroupCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data GraphicsPipelineShaderGroupsCreateInfoNV = GraphicsPipelineShaderGroupsCreateInfoNV
-  { -- | @pGroups@ is an array of 'GraphicsShaderGroupCreateInfoNV' values
-    -- specifying which state of the original
-    -- 'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' each shader
-    -- group overrides.
-    groups :: Vector GraphicsShaderGroupCreateInfoNV
-  , -- | @pPipelines@ is an array of graphics
-    -- 'Graphics.Vulkan.Core10.Handles.Pipeline', which are referenced within
-    -- the created pipeline, including all their shader groups.
-    pipelines :: Vector Pipeline
-  }
-  deriving (Typeable)
-deriving instance Show GraphicsPipelineShaderGroupsCreateInfoNV
-
-instance ToCStruct GraphicsPipelineShaderGroupsCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p GraphicsPipelineShaderGroupsCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (groups)) :: Word32))
-    pPGroups' <- ContT $ allocaBytesAligned @GraphicsShaderGroupCreateInfoNV ((Data.Vector.length (groups)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr GraphicsShaderGroupCreateInfoNV) (e) . ($ ())) (groups)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr GraphicsShaderGroupCreateInfoNV))) (pPGroups')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (pipelines)) :: Word32))
-    pPPipelines' <- ContT $ allocaBytesAligned @Pipeline ((Data.Vector.length (pipelines)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPPipelines' `plusPtr` (8 * (i)) :: Ptr Pipeline) (e)) (pipelines)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Pipeline))) (pPPipelines')
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPGroups' <- ContT $ allocaBytesAligned @GraphicsShaderGroupCreateInfoNV ((Data.Vector.length (mempty)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr GraphicsShaderGroupCreateInfoNV) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr GraphicsShaderGroupCreateInfoNV))) (pPGroups')
-    pPPipelines' <- ContT $ allocaBytesAligned @Pipeline ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPPipelines' `plusPtr` (8 * (i)) :: Ptr Pipeline) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Pipeline))) (pPPipelines')
-    lift $ f
-
-instance FromCStruct GraphicsPipelineShaderGroupsCreateInfoNV where
-  peekCStruct p = do
-    groupCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pGroups <- peek @(Ptr GraphicsShaderGroupCreateInfoNV) ((p `plusPtr` 24 :: Ptr (Ptr GraphicsShaderGroupCreateInfoNV)))
-    pGroups' <- generateM (fromIntegral groupCount) (\i -> peekCStruct @GraphicsShaderGroupCreateInfoNV ((pGroups `advancePtrBytes` (48 * (i)) :: Ptr GraphicsShaderGroupCreateInfoNV)))
-    pipelineCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pPipelines <- peek @(Ptr Pipeline) ((p `plusPtr` 40 :: Ptr (Ptr Pipeline)))
-    pPipelines' <- generateM (fromIntegral pipelineCount) (\i -> peek @Pipeline ((pPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
-    pure $ GraphicsPipelineShaderGroupsCreateInfoNV
-             pGroups' pPipelines'
-
-instance Zero GraphicsPipelineShaderGroupsCreateInfoNV where
-  zero = GraphicsPipelineShaderGroupsCreateInfoNV
-           mempty
-           mempty
-
-
--- | VkBindShaderGroupIndirectCommandNV - Structure specifying input data for
--- a single shader group command token
---
--- == Valid Usage
---
--- -   The current bound graphics pipeline, as well as the pipelines it may
---     reference, /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
---
--- -   The @index@ /must/ be within range of the accessible shader groups
---     of the current bound graphics pipeline. See
---     'cmdBindPipelineShaderGroupNV' for further details
---
--- = See Also
---
--- No cross-references are available
-data BindShaderGroupIndirectCommandNV = BindShaderGroupIndirectCommandNV
-  { -- No documentation found for Nested "VkBindShaderGroupIndirectCommandNV" "groupIndex"
-    groupIndex :: Word32 }
-  deriving (Typeable)
-deriving instance Show BindShaderGroupIndirectCommandNV
-
-instance ToCStruct BindShaderGroupIndirectCommandNV where
-  withCStruct x f = allocaBytesAligned 4 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindShaderGroupIndirectCommandNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (groupIndex)
-    f
-  cStructSize = 4
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct BindShaderGroupIndirectCommandNV where
-  peekCStruct p = do
-    groupIndex <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    pure $ BindShaderGroupIndirectCommandNV
-             groupIndex
-
-instance Storable BindShaderGroupIndirectCommandNV where
-  sizeOf ~_ = 4
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BindShaderGroupIndirectCommandNV where
-  zero = BindShaderGroupIndirectCommandNV
-           zero
-
-
--- | VkBindIndexBufferIndirectCommandNV - Structure specifying input data for
--- a single index buffer command token
---
--- == Valid Usage
---
--- -   The buffer’s usage flag from which the address was acquired /must/
---     have the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT'
---     bit set
---
--- -   The @bufferAddress@ /must/ be aligned to the @indexType@ used
---
--- -   Each element of the buffer from which the address was acquired and
---     that is non-sparse /must/ be bound completely and contiguously to a
---     single 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- == Valid Usage (Implicit)
---
--- -   @indexType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceAddress',
--- 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType'
-data BindIndexBufferIndirectCommandNV = BindIndexBufferIndirectCommandNV
-  { -- | @bufferAddress@ specifies a physical address of the
-    -- 'Graphics.Vulkan.Core10.Handles.Buffer' used as index buffer.
-    bufferAddress :: DeviceAddress
-  , -- | @size@ is the byte size range which is available for this operation from
-    -- the provided address.
-    size :: Word32
-  , -- | @indexType@ is a 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType'
-    -- value specifying how indices are treated. Instead of the Vulkan enum
-    -- values, a custom @uint32_t@ value /can/ be mapped to an
-    -- 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' by specifying the
-    -- 'IndirectCommandsLayoutTokenNV'::@pIndexTypes@ and
-    -- 'IndirectCommandsLayoutTokenNV'::@pIndexTypeValues@ arrays.
-    indexType :: IndexType
-  }
-  deriving (Typeable)
-deriving instance Show BindIndexBufferIndirectCommandNV
-
-instance ToCStruct BindIndexBufferIndirectCommandNV where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindIndexBufferIndirectCommandNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceAddress)) (bufferAddress)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (size)
-    poke ((p `plusPtr` 12 :: Ptr IndexType)) (indexType)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceAddress)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr IndexType)) (zero)
-    f
-
-instance FromCStruct BindIndexBufferIndirectCommandNV where
-  peekCStruct p = do
-    bufferAddress <- peek @DeviceAddress ((p `plusPtr` 0 :: Ptr DeviceAddress))
-    size <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    indexType <- peek @IndexType ((p `plusPtr` 12 :: Ptr IndexType))
-    pure $ BindIndexBufferIndirectCommandNV
-             bufferAddress size indexType
-
-instance Storable BindIndexBufferIndirectCommandNV where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BindIndexBufferIndirectCommandNV where
-  zero = BindIndexBufferIndirectCommandNV
-           zero
-           zero
-           zero
-
-
--- | VkBindVertexBufferIndirectCommandNV - Structure specifying input data
--- for a single vertex buffer command token
---
--- == Valid Usage
---
--- -   The buffer’s usage flag from which the address was acquired /must/
---     have the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT'
---     bit set
---
--- -   Each element of the buffer from which the address was acquired and
---     that is non-sparse /must/ be bound completely and contiguously to a
---     single 'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.DeviceAddress'
-data BindVertexBufferIndirectCommandNV = BindVertexBufferIndirectCommandNV
-  { -- | @bufferAddress@ specifies a physical address of the
-    -- 'Graphics.Vulkan.Core10.Handles.Buffer' used as vertex input binding.
-    bufferAddress :: DeviceAddress
-  , -- | @size@ is the byte size range which is available for this operation from
-    -- the provided address.
-    size :: Word32
-  , -- | @stride@ is the byte size stride for this vertex input binding as in
-    -- 'Graphics.Vulkan.Core10.Pipeline.VertexInputBindingDescription'::@stride@.
-    -- It is only used if
-    -- 'IndirectCommandsLayoutTokenNV'::@vertexDynamicStride@ was set,
-    -- otherwise the stride is inherited from the current bound graphics
-    -- pipeline.
-    stride :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show BindVertexBufferIndirectCommandNV
-
-instance ToCStruct BindVertexBufferIndirectCommandNV where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p BindVertexBufferIndirectCommandNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceAddress)) (bufferAddress)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (size)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (stride)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr DeviceAddress)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct BindVertexBufferIndirectCommandNV where
-  peekCStruct p = do
-    bufferAddress <- peek @DeviceAddress ((p `plusPtr` 0 :: Ptr DeviceAddress))
-    size <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    stride <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
-    pure $ BindVertexBufferIndirectCommandNV
-             bufferAddress size stride
-
-instance Storable BindVertexBufferIndirectCommandNV where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero BindVertexBufferIndirectCommandNV where
-  zero = BindVertexBufferIndirectCommandNV
-           zero
-           zero
-           zero
-
-
--- | VkSetStateFlagsIndirectCommandNV - Structure specifying input data for a
--- single state flag command token
---
--- = See Also
---
--- No cross-references are available
-data SetStateFlagsIndirectCommandNV = SetStateFlagsIndirectCommandNV
-  { -- | @data@ encodes packed state that this command alters.
-    --
-    -- -   Bit @0@: If set represents
-    --     'Graphics.Vulkan.Core10.Enums.FrontFace.FRONT_FACE_CLOCKWISE',
-    --     otherwise
-    --     'Graphics.Vulkan.Core10.Enums.FrontFace.FRONT_FACE_COUNTER_CLOCKWISE'
-    data' :: Word32 }
-  deriving (Typeable)
-deriving instance Show SetStateFlagsIndirectCommandNV
-
-instance ToCStruct SetStateFlagsIndirectCommandNV where
-  withCStruct x f = allocaBytesAligned 4 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p SetStateFlagsIndirectCommandNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (data')
-    f
-  cStructSize = 4
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct SetStateFlagsIndirectCommandNV where
-  peekCStruct p = do
-    data' <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    pure $ SetStateFlagsIndirectCommandNV
-             data'
-
-instance Storable SetStateFlagsIndirectCommandNV where
-  sizeOf ~_ = 4
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero SetStateFlagsIndirectCommandNV where
-  zero = SetStateFlagsIndirectCommandNV
-           zero
-
-
--- | VkIndirectCommandsStreamNV - Structure specifying input streams for
--- generated command tokens
---
--- == Valid Usage
---
--- -   The @buffer@’s usage flag /must/ have the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   The @offset@ /must/ be aligned to
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minIndirectCommandsBufferOffsetAlignment@
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- == Valid Usage (Implicit)
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize', 'GeneratedCommandsInfoNV'
-data IndirectCommandsStreamNV = IndirectCommandsStreamNV
-  { -- | @buffer@ specifies the 'Graphics.Vulkan.Core10.Handles.Buffer' storing
-    -- the functional arguments for each sequence. These arguments /can/ be
-    -- written by the device.
-    buffer :: Buffer
-  , -- | @offset@ specified an offset into @buffer@ where the arguments start.
-    offset :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show IndirectCommandsStreamNV
-
-instance ToCStruct IndirectCommandsStreamNV where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p IndirectCommandsStreamNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Buffer)) (buffer)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (offset)
-    f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Buffer)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct IndirectCommandsStreamNV where
-  peekCStruct p = do
-    buffer <- peek @Buffer ((p `plusPtr` 0 :: Ptr Buffer))
-    offset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
-    pure $ IndirectCommandsStreamNV
-             buffer offset
-
-instance Storable IndirectCommandsStreamNV where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero IndirectCommandsStreamNV where
-  zero = IndirectCommandsStreamNV
-           zero
-           zero
-
-
--- | VkIndirectCommandsLayoutTokenNV - Struct specifying the details of an
--- indirect command layout token
---
--- == Valid Usage
---
--- -   @stream@ /must/ be smaller than
---     'IndirectCommandsLayoutCreateInfoNV'::@streamCount@
---
--- -   @offset@ /must/ be less than or equal to
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsTokenOffset@
---
--- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV',
---     @vertexBindingUnit@ /must/ stay within device supported limits for
---     the appropriate commands
---
--- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
---     @pushconstantPipelineLayout@ /must/ be valid
---
--- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
---     @pushconstantOffset@ /must/ be a multiple of @4@
---
--- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
---     @pushconstantSize@ /must/ be a multiple of @4@
---
--- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
---     @pushconstantOffset@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
---
--- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
---     @pushconstantSize@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
---     minus @pushconstantOffset@
---
--- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
---     for each byte in the range specified by @pushconstantOffset@ and
---     @pushconstantSize@ and for each shader stage in
---     @pushconstantShaderStageFlags@, there /must/ be a push constant
---     range in @pushconstantPipelineLayout@ that includes that byte and
---     that stage
---
--- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
---     for each byte in the range specified by @pushconstantOffset@ and
---     @pushconstantSize@ and for each push constant range that overlaps
---     that byte, @pushconstantShaderStageFlags@ /must/ include all stages
---     in that push constant range’s
---     'Graphics.Vulkan.Core10.PipelineLayout.PushConstantRange'::@pushconstantShaderStageFlags@
---
--- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV',
---     @indirectStateFlags@ /must/ not be ´0´
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @tokenType@ /must/ be a valid 'IndirectCommandsTokenTypeNV' value
---
--- -   If @pushconstantPipelineLayout@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @pushconstantPipelineLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   @pushconstantShaderStageFlags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
---     values
---
--- -   @indirectStateFlags@ /must/ be a valid combination of
---     'IndirectStateFlagBitsNV' values
---
--- -   If @indexTypeCount@ is not @0@, @pIndexTypes@ /must/ be a valid
---     pointer to an array of @indexTypeCount@ valid
---     'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' values
---
--- -   If @indexTypeCount@ is not @0@, @pIndexTypeValues@ /must/ be a valid
---     pointer to an array of @indexTypeCount@ @uint32_t@ values
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType',
--- 'IndirectCommandsLayoutCreateInfoNV', 'IndirectCommandsTokenTypeNV',
--- 'IndirectStateFlagsNV', 'Graphics.Vulkan.Core10.Handles.PipelineLayout',
--- 'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data IndirectCommandsLayoutTokenNV = IndirectCommandsLayoutTokenNV
-  { -- | @tokenType@ specifies the token command type.
-    tokenType :: IndirectCommandsTokenTypeNV
-  , -- | @stream@ is the index of the input stream that contains the token
-    -- argument data.
-    stream :: Word32
-  , -- | @offset@ is a relative starting offset within the input stream memory
-    -- for the token argument data.
-    offset :: Word32
-  , -- | @vertexBindingUnit@ is used for the vertex buffer binding command.
-    vertexBindingUnit :: Word32
-  , -- | @vertexDynamicStride@ sets if the vertex buffer stride is provided by
-    -- the binding command rather than the current bound graphics pipeline
-    -- state.
-    vertexDynamicStride :: Bool
-  , -- | @pushconstantPipelineLayout@ is the
-    -- 'Graphics.Vulkan.Core10.Handles.PipelineLayout' used for the push
-    -- constant command.
-    pushconstantPipelineLayout :: PipelineLayout
-  , -- | @pushconstantShaderStageFlags@ are the shader stage flags used for the
-    -- push constant command.
-    pushconstantShaderStageFlags :: ShaderStageFlags
-  , -- | @pushconstantOffset@ is the offset used for the push constant command.
-    pushconstantOffset :: Word32
-  , -- | @pushconstantSize@ is the size used for the push constant command.
-    pushconstantSize :: Word32
-  , -- | @indirectStateFlags@ are the active states for the state flag command.
-    indirectStateFlags :: IndirectStateFlagsNV
-  , -- | @pIndexTypes@ is the used
-    -- 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' for the corresponding
-    -- @uint32_t@ value entry in @pIndexTypeValues@.
-    indexTypes :: Vector IndexType
-  , -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNV" "pIndexTypeValues"
-    indexTypeValues :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show IndirectCommandsLayoutTokenNV
-
-instance ToCStruct IndirectCommandsLayoutTokenNV where
-  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p IndirectCommandsLayoutTokenNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr IndirectCommandsTokenTypeNV)) (tokenType)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (stream)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (offset)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (vertexBindingUnit)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (vertexDynamicStride))
-    lift $ poke ((p `plusPtr` 40 :: Ptr PipelineLayout)) (pushconstantPipelineLayout)
-    lift $ poke ((p `plusPtr` 48 :: Ptr ShaderStageFlags)) (pushconstantShaderStageFlags)
-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (pushconstantOffset)
-    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (pushconstantSize)
-    lift $ poke ((p `plusPtr` 60 :: Ptr IndirectStateFlagsNV)) (indirectStateFlags)
-    let pIndexTypesLength = Data.Vector.length $ (indexTypes)
-    let pIndexTypeValuesLength = Data.Vector.length $ (indexTypeValues)
-    lift $ unless (pIndexTypeValuesLength == pIndexTypesLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pIndexTypeValues and pIndexTypes must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral pIndexTypesLength :: Word32))
-    pPIndexTypes' <- ContT $ allocaBytesAligned @IndexType ((Data.Vector.length (indexTypes)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPIndexTypes' `plusPtr` (4 * (i)) :: Ptr IndexType) (e)) (indexTypes)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr IndexType))) (pPIndexTypes')
-    pPIndexTypeValues' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (indexTypeValues)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPIndexTypeValues' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (indexTypeValues)
-    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr Word32))) (pPIndexTypeValues')
-    lift $ f
-  cStructSize = 88
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr IndirectCommandsTokenTypeNV)) (zero)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
-    pPIndexTypes' <- ContT $ allocaBytesAligned @IndexType ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPIndexTypes' `plusPtr` (4 * (i)) :: Ptr IndexType) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr IndexType))) (pPIndexTypes')
-    pPIndexTypeValues' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPIndexTypeValues' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr Word32))) (pPIndexTypeValues')
-    lift $ f
-
-instance FromCStruct IndirectCommandsLayoutTokenNV where
-  peekCStruct p = do
-    tokenType <- peek @IndirectCommandsTokenTypeNV ((p `plusPtr` 16 :: Ptr IndirectCommandsTokenTypeNV))
-    stream <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    offset <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    vertexBindingUnit <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    vertexDynamicStride <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
-    pushconstantPipelineLayout <- peek @PipelineLayout ((p `plusPtr` 40 :: Ptr PipelineLayout))
-    pushconstantShaderStageFlags <- peek @ShaderStageFlags ((p `plusPtr` 48 :: Ptr ShaderStageFlags))
-    pushconstantOffset <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
-    pushconstantSize <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    indirectStateFlags <- peek @IndirectStateFlagsNV ((p `plusPtr` 60 :: Ptr IndirectStateFlagsNV))
-    indexTypeCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    pIndexTypes <- peek @(Ptr IndexType) ((p `plusPtr` 72 :: Ptr (Ptr IndexType)))
-    pIndexTypes' <- generateM (fromIntegral indexTypeCount) (\i -> peek @IndexType ((pIndexTypes `advancePtrBytes` (4 * (i)) :: Ptr IndexType)))
-    pIndexTypeValues <- peek @(Ptr Word32) ((p `plusPtr` 80 :: Ptr (Ptr Word32)))
-    pIndexTypeValues' <- generateM (fromIntegral indexTypeCount) (\i -> peek @Word32 ((pIndexTypeValues `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ IndirectCommandsLayoutTokenNV
-             tokenType stream offset vertexBindingUnit (bool32ToBool vertexDynamicStride) pushconstantPipelineLayout pushconstantShaderStageFlags pushconstantOffset pushconstantSize indirectStateFlags pIndexTypes' pIndexTypeValues'
-
-instance Zero IndirectCommandsLayoutTokenNV where
-  zero = IndirectCommandsLayoutTokenNV
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           mempty
-           mempty
-
-
--- | VkIndirectCommandsLayoutCreateInfoNV - Structure specifying the
--- parameters of a newly created indirect commands layout object
---
--- = Description
---
--- The following code illustrates some of the flags:
---
--- > void cmdProcessAllSequences(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sequencesCount, indexbuffer, indexbufferOffset)
--- > {
--- >   for (s = 0; s < sequencesCount; s++)
--- >   {
--- >     sUsed = s;
--- >
--- >     if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV) {
--- >       sUsed = indexbuffer.load_uint32( sUsed * sizeof(uint32_t) + indexbufferOffset);
--- >     }
--- >
--- >     if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV) {
--- >       sUsed = incoherent_implementation_dependent_permutation[ sUsed ];
--- >     }
--- >
--- >     cmdProcessSequence( cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sUsed );
--- >   }
--- > }
---
--- == Valid Usage
---
--- -   The @pipelineBindPoint@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   @tokenCount@ /must/ be greater than @0@ and less than or equal to
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsTokenCount@
---
--- -   If @pTokens@ contains an entry of
---     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV' it /must/ be the
---     first element of the array and there /must/ be only a single element
---     of such token type
---
--- -   If @pTokens@ contains an entry of
---     'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV' there /must/ be only a
---     single element of such token type
---
--- -   All state tokens in @pTokens@ /must/ occur prior work provoking
---     tokens ('INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV',
---     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV',
---     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV')
---
--- -   The content of @pTokens@ /must/ include one single work provoking
---     token that is compatible with the @pipelineBindPoint@
---
--- -   @streamCount@ /must/ be greater than @0@ and less or equal to
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsStreamCount@
---
--- -   each element of @pStreamStrides@ /must/ be greater than \`0\`and
---     less than or equal to
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsStreamStride@.
---     Furthermore the alignment of each token input /must/ be ensured
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be a valid combination of
---     'IndirectCommandsLayoutUsageFlagBitsNV' values
---
--- -   @flags@ /must/ not be @0@
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value
---
--- -   @pTokens@ /must/ be a valid pointer to an array of @tokenCount@
---     valid 'IndirectCommandsLayoutTokenNV' structures
---
--- -   @pStreamStrides@ /must/ be a valid pointer to an array of
---     @streamCount@ @uint32_t@ values
---
--- -   @tokenCount@ /must/ be greater than @0@
---
--- -   @streamCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'IndirectCommandsLayoutTokenNV', 'IndirectCommandsLayoutUsageFlagsNV',
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createIndirectCommandsLayoutNV'
-data IndirectCommandsLayoutCreateInfoNV = IndirectCommandsLayoutCreateInfoNV
-  { -- | @flags@ is a bitmask of 'IndirectCommandsLayoutUsageFlagBitsNV'
-    -- specifying usage hints of this layout.
-    flags :: IndirectCommandsLayoutUsageFlagsNV
-  , -- | @pipelineBindPoint@ is the
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' that
-    -- this layout targets.
-    pipelineBindPoint :: PipelineBindPoint
-  , -- | @pTokens@ is an array describing each command token in detail. See
-    -- 'IndirectCommandsTokenTypeNV' and 'IndirectCommandsLayoutTokenNV' below
-    -- for details.
-    tokens :: Vector IndirectCommandsLayoutTokenNV
-  , -- | @pStreamStrides@ is an array defining the byte stride for each input
-    -- stream.
-    streamStrides :: Vector Word32
-  }
-  deriving (Typeable)
-deriving instance Show IndirectCommandsLayoutCreateInfoNV
-
-instance ToCStruct IndirectCommandsLayoutCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p IndirectCommandsLayoutCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr IndirectCommandsLayoutUsageFlagsNV)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (tokens)) :: Word32))
-    pPTokens' <- ContT $ allocaBytesAligned @IndirectCommandsLayoutTokenNV ((Data.Vector.length (tokens)) * 88) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPTokens' `plusPtr` (88 * (i)) :: Ptr IndirectCommandsLayoutTokenNV) (e) . ($ ())) (tokens)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr IndirectCommandsLayoutTokenNV))) (pPTokens')
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (streamStrides)) :: Word32))
-    pPStreamStrides' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (streamStrides)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPStreamStrides' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (streamStrides)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPStreamStrides')
-    lift $ f
-  cStructSize = 56
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr IndirectCommandsLayoutUsageFlagsNV)) (zero)
-    lift $ poke ((p `plusPtr` 20 :: Ptr PipelineBindPoint)) (zero)
-    pPTokens' <- ContT $ allocaBytesAligned @IndirectCommandsLayoutTokenNV ((Data.Vector.length (mempty)) * 88) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPTokens' `plusPtr` (88 * (i)) :: Ptr IndirectCommandsLayoutTokenNV) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr IndirectCommandsLayoutTokenNV))) (pPTokens')
-    pPStreamStrides' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPStreamStrides' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPStreamStrides')
-    lift $ f
-
-instance FromCStruct IndirectCommandsLayoutCreateInfoNV where
-  peekCStruct p = do
-    flags <- peek @IndirectCommandsLayoutUsageFlagsNV ((p `plusPtr` 16 :: Ptr IndirectCommandsLayoutUsageFlagsNV))
-    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 20 :: Ptr PipelineBindPoint))
-    tokenCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pTokens <- peek @(Ptr IndirectCommandsLayoutTokenNV) ((p `plusPtr` 32 :: Ptr (Ptr IndirectCommandsLayoutTokenNV)))
-    pTokens' <- generateM (fromIntegral tokenCount) (\i -> peekCStruct @IndirectCommandsLayoutTokenNV ((pTokens `advancePtrBytes` (88 * (i)) :: Ptr IndirectCommandsLayoutTokenNV)))
-    streamCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    pStreamStrides <- peek @(Ptr Word32) ((p `plusPtr` 48 :: Ptr (Ptr Word32)))
-    pStreamStrides' <- generateM (fromIntegral streamCount) (\i -> peek @Word32 ((pStreamStrides `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    pure $ IndirectCommandsLayoutCreateInfoNV
-             flags pipelineBindPoint pTokens' pStreamStrides'
-
-instance Zero IndirectCommandsLayoutCreateInfoNV where
-  zero = IndirectCommandsLayoutCreateInfoNV
-           zero
-           zero
-           mempty
-           mempty
-
-
--- | VkGeneratedCommandsInfoNV - Structure specifying parameters for the
--- generation of commands
---
--- == Valid Usage
---
--- -   The provided @pipeline@ /must/ match the pipeline bound at execution
---     time
---
--- -   If the @indirectCommandsLayout@ uses a token of
---     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV', then the @pipeline@
---     /must/ have been created with multiple shader groups
---
--- -   If the @indirectCommandsLayout@ uses a token of
---     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV', then the @pipeline@
---     /must/ have been created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
---     set in
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@flags@
---
--- -   If the @indirectCommandsLayout@ uses a token of
---     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', then the
---     @pipeline@\`s 'Graphics.Vulkan.Core10.Handles.PipelineLayout' /must/
---     match the
---     'IndirectCommandsLayoutTokenNV'::@pushconstantPipelineLayout@
---
--- -   @streamCount@ /must/ match the @indirectCommandsLayout@’s
---     @streamCount@
---
--- -   @sequencesCount@ /must/ be less or equal to
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectSequenceCount@
---     and 'GeneratedCommandsMemoryRequirementsInfoNV'::@maxSequencesCount@
---     that was used to determine the @preprocessSize@
---
--- -   @preprocessBuffer@ /must/ have the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set in its usage flag
---
--- -   @preprocessOffset@ /must/ be aligned to
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minIndirectCommandsBufferOffsetAlignment@
---
--- -   If @preprocessBuffer@ is non-sparse then it /must/ be bound
---     completely and contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @preprocessSize@ /must/ be at least equal to the memory
---     requirement\`s size returned by
---     'getGeneratedCommandsMemoryRequirementsNV' using the matching inputs
---     (@indirectCommandsLayout@, …​) as within this structure
---
--- -   @sequencesCountBuffer@ /can/ be set if the actual used count of
---     sequences is sourced from the provided buffer. In that case the
---     @sequencesCount@ serves as upper bound
---
--- -   If @sequencesCountBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', its usage flag
---     /must/ have the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   If @sequencesCountBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @sequencesCountOffset@ /must/ be aligned to
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minSequencesCountBufferOffsetAlignment@
---
--- -   If @sequencesCountBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' and is non-sparse
---     then it /must/ be bound completely and contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   If @indirectCommandsLayout@’s
---     'INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV' is set,
---     @sequencesIndexBuffer@ /must/ be set otherwise it /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @sequencesIndexBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', its usage flag
---     /must/ have the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   If @sequencesIndexBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @sequencesIndexOffset@ /must/ be aligned to
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minSequencesIndexBufferOffsetAlignment@
---
--- -   If @sequencesIndexBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' and is non-sparse
---     then it /must/ be bound completely and contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value
---
--- -   @pipeline@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handle
---
--- -   @indirectCommandsLayout@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
---
--- -   @pStreams@ /must/ be a valid pointer to an array of @streamCount@
---     valid 'IndirectCommandsStreamNV' structures
---
--- -   @preprocessBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   If @sequencesCountBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @sequencesCountBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   If @sequencesIndexBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @sequencesIndexBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @streamCount@ /must/ be greater than @0@
---
--- -   Each of @indirectCommandsLayout@, @pipeline@, @preprocessBuffer@,
---     @sequencesCountBuffer@, and @sequencesIndexBuffer@ that are valid
---     handles of non-ignored parameters /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV',
--- 'IndirectCommandsStreamNV', 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdExecuteGeneratedCommandsNV', 'cmdPreprocessGeneratedCommandsNV'
-data GeneratedCommandsInfoNV = GeneratedCommandsInfoNV
-  { -- | @pipelineBindPoint@ is the
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' used
-    -- for the @pipeline@.
-    pipelineBindPoint :: PipelineBindPoint
-  , -- | @pipeline@ is the 'Graphics.Vulkan.Core10.Handles.Pipeline' used in the
-    -- generation and execution process.
-    pipeline :: Pipeline
-  , -- | @indirectCommandsLayout@ is the
-    -- 'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' that
-    -- provides the command sequence to generate.
-    indirectCommandsLayout :: IndirectCommandsLayoutNV
-  , -- | @pStreams@ provides an array of 'IndirectCommandsStreamNV' that provide
-    -- the input data for the tokens used in @indirectCommandsLayout@.
-    streams :: Vector IndirectCommandsStreamNV
-  , -- | @sequencesCount@ is the maximum number of sequences to reserve. If
-    -- @sequencesCountBuffer@ is
-    -- 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', this is also the
-    -- actual number of sequences generated.
-    sequencesCount :: Word32
-  , -- | @preprocessBuffer@ is the 'Graphics.Vulkan.Core10.Handles.Buffer' that
-    -- is used for preprocessing the input data for execution. If this
-    -- structure is used with 'cmdExecuteGeneratedCommandsNV' with its
-    -- @isPreprocessed@ set to 'Graphics.Vulkan.Core10.BaseType.TRUE', then the
-    -- preprocessing step is skipped and data is only read from this buffer.
-    preprocessBuffer :: Buffer
-  , -- | @preprocessOffset@ is the byte offset into @preprocessBuffer@ where the
-    -- preprocessed data is stored.
-    preprocessOffset :: DeviceSize
-  , -- | @preprocessSize@ is the maximum byte size within the @preprocessBuffer@
-    -- after the @preprocessOffset@ that is available for preprocessing.
-    preprocessSize :: DeviceSize
-  , -- | @sequencesCountBuffer@ is a 'Graphics.Vulkan.Core10.Handles.Buffer' in
-    -- which the actual number of sequences is provided as single @uint32_t@
-    -- value.
-    sequencesCountBuffer :: Buffer
-  , -- | @sequencesCountOffset@ is the byte offset into @sequencesCountBuffer@
-    -- where the count value is stored.
-    sequencesCountOffset :: DeviceSize
-  , -- | @sequencesIndexBuffer@ is a 'Graphics.Vulkan.Core10.Handles.Buffer' that
-    -- encodes the used sequence indices as @uint32_t@ array.
-    sequencesIndexBuffer :: Buffer
-  , -- | @sequencesIndexOffset@ is the byte offset into @sequencesIndexBuffer@
-    -- where the index values start.
-    sequencesIndexOffset :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show GeneratedCommandsInfoNV
-
-instance ToCStruct GeneratedCommandsInfoNV where
-  withCStruct x f = allocaBytesAligned 120 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p GeneratedCommandsInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Pipeline)) (pipeline)
-    lift $ poke ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV)) (indirectCommandsLayout)
-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (streams)) :: Word32))
-    pPStreams' <- ContT $ allocaBytesAligned @IndirectCommandsStreamNV ((Data.Vector.length (streams)) * 16) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPStreams' `plusPtr` (16 * (i)) :: Ptr IndirectCommandsStreamNV) (e) . ($ ())) (streams)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr IndirectCommandsStreamNV))) (pPStreams')
-    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (sequencesCount)
-    lift $ poke ((p `plusPtr` 64 :: Ptr Buffer)) (preprocessBuffer)
-    lift $ poke ((p `plusPtr` 72 :: Ptr DeviceSize)) (preprocessOffset)
-    lift $ poke ((p `plusPtr` 80 :: Ptr DeviceSize)) (preprocessSize)
-    lift $ poke ((p `plusPtr` 88 :: Ptr Buffer)) (sequencesCountBuffer)
-    lift $ poke ((p `plusPtr` 96 :: Ptr DeviceSize)) (sequencesCountOffset)
-    lift $ poke ((p `plusPtr` 104 :: Ptr Buffer)) (sequencesIndexBuffer)
-    lift $ poke ((p `plusPtr` 112 :: Ptr DeviceSize)) (sequencesIndexOffset)
-    lift $ f
-  cStructSize = 120
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineBindPoint)) (zero)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Pipeline)) (zero)
-    lift $ poke ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV)) (zero)
-    pPStreams' <- ContT $ allocaBytesAligned @IndirectCommandsStreamNV ((Data.Vector.length (mempty)) * 16) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPStreams' `plusPtr` (16 * (i)) :: Ptr IndirectCommandsStreamNV) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr IndirectCommandsStreamNV))) (pPStreams')
-    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 64 :: Ptr Buffer)) (zero)
-    lift $ poke ((p `plusPtr` 72 :: Ptr DeviceSize)) (zero)
-    lift $ poke ((p `plusPtr` 80 :: Ptr DeviceSize)) (zero)
-    lift $ f
-
-instance FromCStruct GeneratedCommandsInfoNV where
-  peekCStruct p = do
-    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 16 :: Ptr PipelineBindPoint))
-    pipeline <- peek @Pipeline ((p `plusPtr` 24 :: Ptr Pipeline))
-    indirectCommandsLayout <- peek @IndirectCommandsLayoutNV ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV))
-    streamCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    pStreams <- peek @(Ptr IndirectCommandsStreamNV) ((p `plusPtr` 48 :: Ptr (Ptr IndirectCommandsStreamNV)))
-    pStreams' <- generateM (fromIntegral streamCount) (\i -> peekCStruct @IndirectCommandsStreamNV ((pStreams `advancePtrBytes` (16 * (i)) :: Ptr IndirectCommandsStreamNV)))
-    sequencesCount <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    preprocessBuffer <- peek @Buffer ((p `plusPtr` 64 :: Ptr Buffer))
-    preprocessOffset <- peek @DeviceSize ((p `plusPtr` 72 :: Ptr DeviceSize))
-    preprocessSize <- peek @DeviceSize ((p `plusPtr` 80 :: Ptr DeviceSize))
-    sequencesCountBuffer <- peek @Buffer ((p `plusPtr` 88 :: Ptr Buffer))
-    sequencesCountOffset <- peek @DeviceSize ((p `plusPtr` 96 :: Ptr DeviceSize))
-    sequencesIndexBuffer <- peek @Buffer ((p `plusPtr` 104 :: Ptr Buffer))
-    sequencesIndexOffset <- peek @DeviceSize ((p `plusPtr` 112 :: Ptr DeviceSize))
-    pure $ GeneratedCommandsInfoNV
-             pipelineBindPoint pipeline indirectCommandsLayout pStreams' sequencesCount preprocessBuffer preprocessOffset preprocessSize sequencesCountBuffer sequencesCountOffset sequencesIndexBuffer sequencesIndexOffset
-
-instance Zero GeneratedCommandsInfoNV where
-  zero = GeneratedCommandsInfoNV
-           zero
-           zero
-           zero
-           mempty
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkGeneratedCommandsMemoryRequirementsInfoNV - Structure specifying
--- parameters for the reservation of preprocess buffer space
---
--- == Valid Usage
---
--- -   @maxSequencesCount@ /must/ be less or equal to
---     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectSequenceCount@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
---     value
---
--- -   @pipeline@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Pipeline' handle
---
--- -   @indirectCommandsLayout@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
---
--- -   Both of @indirectCommandsLayout@, and @pipeline@ /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getGeneratedCommandsMemoryRequirementsNV'
-data GeneratedCommandsMemoryRequirementsInfoNV = GeneratedCommandsMemoryRequirementsInfoNV
-  { -- | @pipelineBindPoint@ is the
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' of
-    -- the @pipeline@ that this buffer memory is intended to be used with
-    -- during the execution.
-    pipelineBindPoint :: PipelineBindPoint
-  , -- | @pipeline@ is the 'Graphics.Vulkan.Core10.Handles.Pipeline' that this
-    -- buffer memory is intended to be used with during the execution.
-    pipeline :: Pipeline
-  , -- | @indirectCommandsLayout@ is the
-    -- 'Graphics.Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' that this
-    -- buffer memory is intended to be used with.
-    indirectCommandsLayout :: IndirectCommandsLayoutNV
-  , -- | @maxSequencesCount@ is the maximum number of sequences that this buffer
-    -- memory in combination with the other state provided /can/ be used with.
-    maxSequencesCount :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show GeneratedCommandsMemoryRequirementsInfoNV
-
-instance ToCStruct GeneratedCommandsMemoryRequirementsInfoNV where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p GeneratedCommandsMemoryRequirementsInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
-    poke ((p `plusPtr` 24 :: Ptr Pipeline)) (pipeline)
-    poke ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV)) (indirectCommandsLayout)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (maxSequencesCount)
-    f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineBindPoint)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Pipeline)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct GeneratedCommandsMemoryRequirementsInfoNV where
-  peekCStruct p = do
-    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 16 :: Ptr PipelineBindPoint))
-    pipeline <- peek @Pipeline ((p `plusPtr` 24 :: Ptr Pipeline))
-    indirectCommandsLayout <- peek @IndirectCommandsLayoutNV ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV))
-    maxSequencesCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    pure $ GeneratedCommandsMemoryRequirementsInfoNV
-             pipelineBindPoint pipeline indirectCommandsLayout maxSequencesCount
-
-instance Storable GeneratedCommandsMemoryRequirementsInfoNV where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero GeneratedCommandsMemoryRequirementsInfoNV where
-  zero = GeneratedCommandsMemoryRequirementsInfoNV
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkIndirectCommandsLayoutUsageFlagBitsNV - Bitmask specifying allowed
--- usage of an indirect commands layout
---
--- = See Also
---
--- 'IndirectCommandsLayoutUsageFlagsNV'
-newtype IndirectCommandsLayoutUsageFlagBitsNV = IndirectCommandsLayoutUsageFlagBitsNV Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' specifies
--- that the layout is always used with the manual preprocessing step
--- through calling 'cmdPreprocessGeneratedCommandsNV' and executed by
--- 'cmdExecuteGeneratedCommandsNV' with @isPreprocessed@ set to
--- 'Graphics.Vulkan.Core10.BaseType.TRUE'.
-pattern INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV = IndirectCommandsLayoutUsageFlagBitsNV 0x00000001
--- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV' specifies that
--- the input data for the sequences is not implicitly indexed from
--- 0..sequencesUsed but a user provided
--- 'Graphics.Vulkan.Core10.Handles.Buffer' encoding the index is provided.
-pattern INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV = IndirectCommandsLayoutUsageFlagBitsNV 0x00000002
--- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV' specifies
--- that the processing of sequences /can/ happen at an
--- implementation-dependent order, which is not: guaranteed to be coherent
--- using the same input data.
-pattern INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = IndirectCommandsLayoutUsageFlagBitsNV 0x00000004
-
-type IndirectCommandsLayoutUsageFlagsNV = IndirectCommandsLayoutUsageFlagBitsNV
-
-instance Show IndirectCommandsLayoutUsageFlagBitsNV where
-  showsPrec p = \case
-    INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV -> showString "INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV"
-    INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV -> showString "INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV"
-    INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV -> showString "INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV"
-    IndirectCommandsLayoutUsageFlagBitsNV x -> showParen (p >= 11) (showString "IndirectCommandsLayoutUsageFlagBitsNV 0x" . showHex x)
-
-instance Read IndirectCommandsLayoutUsageFlagBitsNV where
-  readPrec = parens (choose [("INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV", pure INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV)
-                            , ("INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV", pure INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV)
-                            , ("INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV", pure INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "IndirectCommandsLayoutUsageFlagBitsNV")
-                       v <- step readPrec
-                       pure (IndirectCommandsLayoutUsageFlagBitsNV v)))
-
-
--- | VkIndirectStateFlagBitsNV - Bitmask specifiying state that can be
--- altered on the device
---
--- = See Also
---
--- 'IndirectStateFlagsNV'
-newtype IndirectStateFlagBitsNV = IndirectStateFlagBitsNV Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV' allows to toggle the
--- 'Graphics.Vulkan.Core10.Enums.FrontFace.FrontFace' rasterization state
--- for subsequent draw operations.
-pattern INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = IndirectStateFlagBitsNV 0x00000001
-
-type IndirectStateFlagsNV = IndirectStateFlagBitsNV
-
-instance Show IndirectStateFlagBitsNV where
-  showsPrec p = \case
-    INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV -> showString "INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV"
-    IndirectStateFlagBitsNV x -> showParen (p >= 11) (showString "IndirectStateFlagBitsNV 0x" . showHex x)
-
-instance Read IndirectStateFlagBitsNV where
-  readPrec = parens (choose [("INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV", pure INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "IndirectStateFlagBitsNV")
-                       v <- step readPrec
-                       pure (IndirectStateFlagBitsNV v)))
-
-
--- | VkIndirectCommandsTokenTypeNV - Enum specifying token commands
---
--- = Description
---
--- \'
---
--- +-------------------------------------------------+---------------------------------------------------------------------------+
--- | Token type                                      | Equivalent command                                                        |
--- +=================================================+===========================================================================+
--- | 'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV'  | 'cmdBindPipelineShaderGroupNV'                                            |
--- +-------------------------------------------------+---------------------------------------------------------------------------+
--- | 'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV'   | -                                                                         |
--- +-------------------------------------------------+---------------------------------------------------------------------------+
--- | 'INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV'  | 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'         |
--- +-------------------------------------------------+---------------------------------------------------------------------------+
--- | 'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV' | 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers'       |
--- +-------------------------------------------------+---------------------------------------------------------------------------+
--- | 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV' | 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdPushConstants'           |
--- +-------------------------------------------------+---------------------------------------------------------------------------+
--- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV'  | 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'     |
--- +-------------------------------------------------+---------------------------------------------------------------------------+
--- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV'          | 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect'            |
--- +-------------------------------------------------+---------------------------------------------------------------------------+
--- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV'    | 'Graphics.Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV' |
--- +-------------------------------------------------+---------------------------------------------------------------------------+
---
--- Supported indirect command tokens
---
--- = See Also
---
--- 'IndirectCommandsLayoutTokenNV'
-newtype IndirectCommandsTokenTypeNV = IndirectCommandsTokenTypeNV Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV"
-pattern INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV = IndirectCommandsTokenTypeNV 0
--- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV"
-pattern INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV = IndirectCommandsTokenTypeNV 1
--- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV"
-pattern INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV = IndirectCommandsTokenTypeNV 2
--- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV"
-pattern INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV = IndirectCommandsTokenTypeNV 3
--- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV"
-pattern INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV = IndirectCommandsTokenTypeNV 4
--- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV"
-pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV = IndirectCommandsTokenTypeNV 5
--- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV"
-pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = IndirectCommandsTokenTypeNV 6
--- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV"
-pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = IndirectCommandsTokenTypeNV 7
-{-# complete INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV,
-             INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV,
-             INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV,
-             INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV,
-             INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
-             INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV,
-             INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV,
-             INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV :: IndirectCommandsTokenTypeNV #-}
-
-instance Show IndirectCommandsTokenTypeNV where
-  showsPrec p = \case
-    INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV"
-    INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV"
-    INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV"
-    INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV"
-    INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV"
-    INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV"
-    INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV"
-    INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV"
-    IndirectCommandsTokenTypeNV x -> showParen (p >= 11) (showString "IndirectCommandsTokenTypeNV " . showsPrec 11 x)
-
-instance Read IndirectCommandsTokenTypeNV where
-  readPrec = parens (choose [("INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV)
-                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV)
-                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV)
-                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV)
-                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV)
-                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV)
-                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV)
-                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "IndirectCommandsTokenTypeNV")
-                       v <- step readPrec
-                       pure (IndirectCommandsTokenTypeNV v)))
-
-
-type NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION"
-pattern NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 3
-
-
-type NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_NV_device_generated_commands"
-
--- No documentation found for TopLevel "VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME"
-pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_NV_device_generated_commands"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_device_generated_commands.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_device_generated_commands.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_device_generated_commands.hs-boot
+++ /dev/null
@@ -1,122 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_device_generated_commands  ( BindIndexBufferIndirectCommandNV
-                                                                   , BindShaderGroupIndirectCommandNV
-                                                                   , BindVertexBufferIndirectCommandNV
-                                                                   , GeneratedCommandsInfoNV
-                                                                   , GeneratedCommandsMemoryRequirementsInfoNV
-                                                                   , GraphicsPipelineShaderGroupsCreateInfoNV
-                                                                   , GraphicsShaderGroupCreateInfoNV
-                                                                   , IndirectCommandsLayoutCreateInfoNV
-                                                                   , IndirectCommandsLayoutTokenNV
-                                                                   , IndirectCommandsStreamNV
-                                                                   , PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-                                                                   , PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-                                                                   , SetStateFlagsIndirectCommandNV
-                                                                   ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data BindIndexBufferIndirectCommandNV
-
-instance ToCStruct BindIndexBufferIndirectCommandNV
-instance Show BindIndexBufferIndirectCommandNV
-
-instance FromCStruct BindIndexBufferIndirectCommandNV
-
-
-data BindShaderGroupIndirectCommandNV
-
-instance ToCStruct BindShaderGroupIndirectCommandNV
-instance Show BindShaderGroupIndirectCommandNV
-
-instance FromCStruct BindShaderGroupIndirectCommandNV
-
-
-data BindVertexBufferIndirectCommandNV
-
-instance ToCStruct BindVertexBufferIndirectCommandNV
-instance Show BindVertexBufferIndirectCommandNV
-
-instance FromCStruct BindVertexBufferIndirectCommandNV
-
-
-data GeneratedCommandsInfoNV
-
-instance ToCStruct GeneratedCommandsInfoNV
-instance Show GeneratedCommandsInfoNV
-
-instance FromCStruct GeneratedCommandsInfoNV
-
-
-data GeneratedCommandsMemoryRequirementsInfoNV
-
-instance ToCStruct GeneratedCommandsMemoryRequirementsInfoNV
-instance Show GeneratedCommandsMemoryRequirementsInfoNV
-
-instance FromCStruct GeneratedCommandsMemoryRequirementsInfoNV
-
-
-data GraphicsPipelineShaderGroupsCreateInfoNV
-
-instance ToCStruct GraphicsPipelineShaderGroupsCreateInfoNV
-instance Show GraphicsPipelineShaderGroupsCreateInfoNV
-
-instance FromCStruct GraphicsPipelineShaderGroupsCreateInfoNV
-
-
-data GraphicsShaderGroupCreateInfoNV
-
-instance ToCStruct GraphicsShaderGroupCreateInfoNV
-instance Show GraphicsShaderGroupCreateInfoNV
-
-instance FromCStruct GraphicsShaderGroupCreateInfoNV
-
-
-data IndirectCommandsLayoutCreateInfoNV
-
-instance ToCStruct IndirectCommandsLayoutCreateInfoNV
-instance Show IndirectCommandsLayoutCreateInfoNV
-
-instance FromCStruct IndirectCommandsLayoutCreateInfoNV
-
-
-data IndirectCommandsLayoutTokenNV
-
-instance ToCStruct IndirectCommandsLayoutTokenNV
-instance Show IndirectCommandsLayoutTokenNV
-
-instance FromCStruct IndirectCommandsLayoutTokenNV
-
-
-data IndirectCommandsStreamNV
-
-instance ToCStruct IndirectCommandsStreamNV
-instance Show IndirectCommandsStreamNV
-
-instance FromCStruct IndirectCommandsStreamNV
-
-
-data PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-
-instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-instance Show PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-
-instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-
-
-data PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-
-instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-instance Show PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-
-instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-
-
-data SetStateFlagsIndirectCommandNV
-
-instance ToCStruct SetStateFlagsIndirectCommandNV
-instance Show SetStateFlagsIndirectCommandNV
-
-instance FromCStruct SetStateFlagsIndirectCommandNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs
+++ /dev/null
@@ -1,142 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_external_memory  ( ExternalMemoryImageCreateInfoNV(..)
-                                                         , ExportMemoryAllocateInfoNV(..)
-                                                         , NV_EXTERNAL_MEMORY_SPEC_VERSION
-                                                         , pattern NV_EXTERNAL_MEMORY_SPEC_VERSION
-                                                         , NV_EXTERNAL_MEMORY_EXTENSION_NAME
-                                                         , pattern NV_EXTERNAL_MEMORY_EXTENSION_NAME
-                                                         , ExternalMemoryHandleTypeFlagBitsNV(..)
-                                                         , ExternalMemoryHandleTypeFlagsNV
-                                                         ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagsNV)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV))
-import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagBitsNV(..))
-import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagsNV)
--- | VkExternalMemoryImageCreateInfoNV - Specify that an image may be backed
--- by external memory
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagsNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExternalMemoryImageCreateInfoNV = ExternalMemoryImageCreateInfoNV
-  { -- | @handleTypes@ /must/ be a valid combination of
-    -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'
-    -- values
-    handleTypes :: ExternalMemoryHandleTypeFlagsNV }
-  deriving (Typeable)
-deriving instance Show ExternalMemoryImageCreateInfoNV
-
-instance ToCStruct ExternalMemoryImageCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExternalMemoryImageCreateInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV)) (handleTypes)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct ExternalMemoryImageCreateInfoNV where
-  peekCStruct p = do
-    handleTypes <- peek @ExternalMemoryHandleTypeFlagsNV ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV))
-    pure $ ExternalMemoryImageCreateInfoNV
-             handleTypes
-
-instance Storable ExternalMemoryImageCreateInfoNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExternalMemoryImageCreateInfoNV where
-  zero = ExternalMemoryImageCreateInfoNV
-           zero
-
-
--- | VkExportMemoryAllocateInfoNV - Specify memory handle types that may be
--- exported
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagsNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExportMemoryAllocateInfoNV = ExportMemoryAllocateInfoNV
-  { -- | @handleTypes@ /must/ be a valid combination of
-    -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'
-    -- values
-    handleTypes :: ExternalMemoryHandleTypeFlagsNV }
-  deriving (Typeable)
-deriving instance Show ExportMemoryAllocateInfoNV
-
-instance ToCStruct ExportMemoryAllocateInfoNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExportMemoryAllocateInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV)) (handleTypes)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct ExportMemoryAllocateInfoNV where
-  peekCStruct p = do
-    handleTypes <- peek @ExternalMemoryHandleTypeFlagsNV ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV))
-    pure $ ExportMemoryAllocateInfoNV
-             handleTypes
-
-instance Storable ExportMemoryAllocateInfoNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExportMemoryAllocateInfoNV where
-  zero = ExportMemoryAllocateInfoNV
-           zero
-
-
-type NV_EXTERNAL_MEMORY_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_SPEC_VERSION"
-pattern NV_EXTERNAL_MEMORY_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_EXTERNAL_MEMORY_SPEC_VERSION = 1
-
-
-type NV_EXTERNAL_MEMORY_EXTENSION_NAME = "VK_NV_external_memory"
-
--- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME"
-pattern NV_EXTERNAL_MEMORY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_EXTERNAL_MEMORY_EXTENSION_NAME = "VK_NV_external_memory"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_external_memory  ( ExportMemoryAllocateInfoNV
-                                                         , ExternalMemoryImageCreateInfoNV
-                                                         ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExportMemoryAllocateInfoNV
-
-instance ToCStruct ExportMemoryAllocateInfoNV
-instance Show ExportMemoryAllocateInfoNV
-
-instance FromCStruct ExportMemoryAllocateInfoNV
-
-
-data ExternalMemoryImageCreateInfoNV
-
-instance ToCStruct ExternalMemoryImageCreateInfoNV
-instance Show ExternalMemoryImageCreateInfoNV
-
-instance FromCStruct ExternalMemoryImageCreateInfoNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs
+++ /dev/null
@@ -1,333 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities  ( getPhysicalDeviceExternalImageFormatPropertiesNV
-                                                                      , ExternalImageFormatPropertiesNV(..)
-                                                                      , ExternalMemoryHandleTypeFlagBitsNV( EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV
-                                                                                                          , EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV
-                                                                                                          , EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV
-                                                                                                          , EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV
-                                                                                                          , ..
-                                                                                                          )
-                                                                      , ExternalMemoryHandleTypeFlagsNV
-                                                                      , ExternalMemoryFeatureFlagBitsNV( EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV
-                                                                                                       , EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV
-                                                                                                       , EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV
-                                                                                                       , ..
-                                                                                                       )
-                                                                      , ExternalMemoryFeatureFlagsNV
-                                                                      , NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION
-                                                                      , pattern NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION
-                                                                      , NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
-                                                                      , pattern NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
-                                                                      ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.Core10.Enums.Format (Format(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
-import Graphics.Vulkan.Core10.DeviceInitialization (ImageFormatProperties)
-import Graphics.Vulkan.Core10.Enums.ImageTiling (ImageTiling)
-import Graphics.Vulkan.Core10.Enums.ImageTiling (ImageTiling(..))
-import Graphics.Vulkan.Core10.Enums.ImageType (ImageType)
-import Graphics.Vulkan.Core10.Enums.ImageType (ImageType(..))
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlagBits(..))
-import Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
-import Graphics.Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceExternalImageFormatPropertiesNV))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice)
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice(..))
-import Graphics.Vulkan.Core10.Handles (PhysicalDevice_T)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetPhysicalDeviceExternalImageFormatPropertiesNV
-  :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ExternalMemoryHandleTypeFlagsNV -> Ptr ExternalImageFormatPropertiesNV -> IO Result) -> Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ExternalMemoryHandleTypeFlagsNV -> Ptr ExternalImageFormatPropertiesNV -> IO Result
-
--- | vkGetPhysicalDeviceExternalImageFormatPropertiesNV - determine image
--- capabilities compatible with external memory handle types
---
--- = Parameters
---
--- -   @physicalDevice@ is the physical device from which to query the
---     image capabilities
---
--- -   @format@ is the image format, corresponding to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@format@.
---
--- -   @type@ is the image type, corresponding to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@imageType@.
---
--- -   @tiling@ is the image tiling, corresponding to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@tiling@.
---
--- -   @usage@ is the intended usage of the image, corresponding to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@usage@.
---
--- -   @flags@ is a bitmask describing additional parameters of the image,
---     corresponding to
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@.
---
--- -   @externalHandleType@ is either one of the bits from
---     'ExternalMemoryHandleTypeFlagBitsNV', or 0.
---
--- -   @pExternalImageFormatProperties@ is a pointer to a
---     'ExternalImageFormatPropertiesNV' structure in which capabilities
---     are returned.
---
--- = Description
---
--- If @externalHandleType@ is 0,
--- @pExternalImageFormatProperties->imageFormatProperties@ will return the
--- same values as a call to
--- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
--- and the other members of @pExternalImageFormatProperties@ will all be 0.
--- Otherwise, they are filled in as described for
--- 'ExternalImageFormatPropertiesNV'.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'
---
--- = See Also
---
--- 'ExternalImageFormatPropertiesNV', 'ExternalMemoryHandleTypeFlagsNV',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format',
--- 'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',
--- 'Graphics.Vulkan.Core10.Enums.ImageTiling.ImageTiling',
--- 'Graphics.Vulkan.Core10.Enums.ImageType.ImageType',
--- 'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
--- 'Graphics.Vulkan.Core10.Handles.PhysicalDevice'
-getPhysicalDeviceExternalImageFormatPropertiesNV :: forall io . MonadIO io => PhysicalDevice -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ("externalHandleType" ::: ExternalMemoryHandleTypeFlagsNV) -> io (ExternalImageFormatPropertiesNV)
-getPhysicalDeviceExternalImageFormatPropertiesNV physicalDevice format type' tiling usage flags externalHandleType = liftIO . evalContT $ do
-  let vkGetPhysicalDeviceExternalImageFormatPropertiesNV' = mkVkGetPhysicalDeviceExternalImageFormatPropertiesNV (pVkGetPhysicalDeviceExternalImageFormatPropertiesNV (instanceCmds (physicalDevice :: PhysicalDevice)))
-  pPExternalImageFormatProperties <- ContT (withZeroCStruct @ExternalImageFormatPropertiesNV)
-  r <- lift $ vkGetPhysicalDeviceExternalImageFormatPropertiesNV' (physicalDeviceHandle (physicalDevice)) (format) (type') (tiling) (usage) (flags) (externalHandleType) (pPExternalImageFormatProperties)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pExternalImageFormatProperties <- lift $ peekCStruct @ExternalImageFormatPropertiesNV pPExternalImageFormatProperties
-  pure $ (pExternalImageFormatProperties)
-
-
--- | VkExternalImageFormatPropertiesNV - Structure specifying external image
--- format properties
---
--- = See Also
---
--- 'ExternalMemoryFeatureFlagsNV', 'ExternalMemoryHandleTypeFlagsNV',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
--- 'getPhysicalDeviceExternalImageFormatPropertiesNV'
-data ExternalImageFormatPropertiesNV = ExternalImageFormatPropertiesNV
-  { -- | @imageFormatProperties@ will be filled in as when calling
-    -- 'Graphics.Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
-    -- but the values returned /may/ vary depending on the external handle type
-    -- requested.
-    imageFormatProperties :: ImageFormatProperties
-  , -- | @externalMemoryFeatures@ is a bitmask of
-    -- 'ExternalMemoryFeatureFlagBitsNV', indicating properties of the external
-    -- memory handle type
-    -- ('getPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@)
-    -- being queried, or 0 if the external memory handle type is 0.
-    externalMemoryFeatures :: ExternalMemoryFeatureFlagsNV
-  , -- | @exportFromImportedHandleTypes@ is a bitmask of
-    -- 'ExternalMemoryHandleTypeFlagBitsNV' containing a bit set for every
-    -- external handle type that /may/ be used to create memory from which the
-    -- handles of the type specified in
-    -- 'getPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@
-    -- /can/ be exported, or 0 if the external memory handle type is 0.
-    exportFromImportedHandleTypes :: ExternalMemoryHandleTypeFlagsNV
-  , -- | @compatibleHandleTypes@ is a bitmask of
-    -- 'ExternalMemoryHandleTypeFlagBitsNV' containing a bit set for every
-    -- external handle type that /may/ be specified simultaneously with the
-    -- handle type specified by
-    -- 'getPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@
-    -- when calling 'Graphics.Vulkan.Core10.Memory.allocateMemory', or 0 if the
-    -- external memory handle type is 0. @compatibleHandleTypes@ will always
-    -- contain
-    -- 'getPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@
-    compatibleHandleTypes :: ExternalMemoryHandleTypeFlagsNV
-  }
-  deriving (Typeable)
-deriving instance Show ExternalImageFormatPropertiesNV
-
-instance ToCStruct ExternalImageFormatPropertiesNV where
-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExternalImageFormatPropertiesNV{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageFormatProperties)) (imageFormatProperties) . ($ ())
-    lift $ poke ((p `plusPtr` 32 :: Ptr ExternalMemoryFeatureFlagsNV)) (externalMemoryFeatures)
-    lift $ poke ((p `plusPtr` 36 :: Ptr ExternalMemoryHandleTypeFlagsNV)) (exportFromImportedHandleTypes)
-    lift $ poke ((p `plusPtr` 40 :: Ptr ExternalMemoryHandleTypeFlagsNV)) (compatibleHandleTypes)
-    lift $ f
-  cStructSize = 48
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageFormatProperties)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct ExternalImageFormatPropertiesNV where
-  peekCStruct p = do
-    imageFormatProperties <- peekCStruct @ImageFormatProperties ((p `plusPtr` 0 :: Ptr ImageFormatProperties))
-    externalMemoryFeatures <- peek @ExternalMemoryFeatureFlagsNV ((p `plusPtr` 32 :: Ptr ExternalMemoryFeatureFlagsNV))
-    exportFromImportedHandleTypes <- peek @ExternalMemoryHandleTypeFlagsNV ((p `plusPtr` 36 :: Ptr ExternalMemoryHandleTypeFlagsNV))
-    compatibleHandleTypes <- peek @ExternalMemoryHandleTypeFlagsNV ((p `plusPtr` 40 :: Ptr ExternalMemoryHandleTypeFlagsNV))
-    pure $ ExternalImageFormatPropertiesNV
-             imageFormatProperties externalMemoryFeatures exportFromImportedHandleTypes compatibleHandleTypes
-
-instance Zero ExternalImageFormatPropertiesNV where
-  zero = ExternalImageFormatPropertiesNV
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkExternalMemoryHandleTypeFlagBitsNV - Bitmask specifying external
--- memory handle types
---
--- = See Also
---
--- 'ExternalMemoryHandleTypeFlagsNV'
-newtype ExternalMemoryHandleTypeFlagBitsNV = ExternalMemoryHandleTypeFlagBitsNV Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV' specifies a handle to
--- memory returned by
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.getMemoryWin32HandleNV',
--- or one duplicated from such a handle using @DuplicateHandle()@.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = ExternalMemoryHandleTypeFlagBitsNV 0x00000001
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV' specifies a handle
--- to memory returned by
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.getMemoryWin32HandleNV'.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = ExternalMemoryHandleTypeFlagBitsNV 0x00000002
--- | '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 EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = ExternalMemoryHandleTypeFlagBitsNV 0x00000004
--- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV' specifies a handle
--- to memory returned by @IDXGIResource::GetSharedHandle()@.
-pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = ExternalMemoryHandleTypeFlagBitsNV 0x00000008
-
-type ExternalMemoryHandleTypeFlagsNV = ExternalMemoryHandleTypeFlagBitsNV
-
-instance Show ExternalMemoryHandleTypeFlagBitsNV where
-  showsPrec p = \case
-    EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV"
-    EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV"
-    EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV"
-    EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV"
-    ExternalMemoryHandleTypeFlagBitsNV x -> showParen (p >= 11) (showString "ExternalMemoryHandleTypeFlagBitsNV 0x" . showHex x)
-
-instance Read ExternalMemoryHandleTypeFlagBitsNV where
-  readPrec = parens (choose [("EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV", pure EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV", pure EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV)
-                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ExternalMemoryHandleTypeFlagBitsNV")
-                       v <- step readPrec
-                       pure (ExternalMemoryHandleTypeFlagBitsNV v)))
-
-
--- | VkExternalMemoryFeatureFlagBitsNV - Bitmask specifying external memory
--- features
---
--- = See Also
---
--- 'ExternalImageFormatPropertiesNV', 'ExternalMemoryFeatureFlagsNV',
--- 'getPhysicalDeviceExternalImageFormatPropertiesNV'
-newtype ExternalMemoryFeatureFlagBitsNV = ExternalMemoryFeatureFlagBitsNV Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
--- | '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 EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = ExternalMemoryFeatureFlagBitsNV 0x00000001
--- | 'EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV' specifies that the
--- implementation supports exporting handles of the specified type.
-pattern EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = ExternalMemoryFeatureFlagBitsNV 0x00000002
--- | 'EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV' specifies that the
--- implementation supports importing handles of the specified type.
-pattern EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = ExternalMemoryFeatureFlagBitsNV 0x00000004
-
-type ExternalMemoryFeatureFlagsNV = ExternalMemoryFeatureFlagBitsNV
-
-instance Show ExternalMemoryFeatureFlagBitsNV where
-  showsPrec p = \case
-    EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV -> showString "EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV"
-    EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV -> showString "EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV"
-    EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV -> showString "EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV"
-    ExternalMemoryFeatureFlagBitsNV x -> showParen (p >= 11) (showString "ExternalMemoryFeatureFlagBitsNV 0x" . showHex x)
-
-instance Read ExternalMemoryFeatureFlagBitsNV where
-  readPrec = parens (choose [("EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV", pure EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV)
-                            , ("EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV", pure EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV)
-                            , ("EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV", pure EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ExternalMemoryFeatureFlagBitsNV")
-                       v <- step readPrec
-                       pure (ExternalMemoryFeatureFlagBitsNV v)))
-
-
-type NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION"
-pattern NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION = 1
-
-
-type NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME = "VK_NV_external_memory_capabilities"
-
--- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME"
-pattern NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME = "VK_NV_external_memory_capabilities"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs-boot
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities  ( ExternalImageFormatPropertiesNV
-                                                                      , ExternalMemoryHandleTypeFlagBitsNV
-                                                                      , ExternalMemoryHandleTypeFlagsNV
-                                                                      ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExternalImageFormatPropertiesNV
-
-instance ToCStruct ExternalImageFormatPropertiesNV
-instance Show ExternalImageFormatPropertiesNV
-
-instance FromCStruct ExternalImageFormatPropertiesNV
-
-
-data ExternalMemoryHandleTypeFlagBitsNV
-
-type ExternalMemoryHandleTypeFlagsNV = ExternalMemoryHandleTypeFlagBitsNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs
+++ /dev/null
@@ -1,266 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_external_memory_win32  ( getMemoryWin32HandleNV
-                                                               , ImportMemoryWin32HandleInfoNV(..)
-                                                               , ExportMemoryWin32HandleInfoNV(..)
-                                                               , NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION
-                                                               , pattern NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION
-                                                               , NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME
-                                                               , pattern NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME
-                                                               , ExternalMemoryHandleTypeFlagBitsNV(..)
-                                                               , ExternalMemoryHandleTypeFlagsNV
-                                                               , HANDLE
-                                                               , DWORD
-                                                               , SECURITY_ATTRIBUTES
-                                                               ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.Extensions.WSITypes (DWORD)
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetMemoryWin32HandleNV))
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.Core10.Handles (DeviceMemory(..))
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagBitsNV(..))
-import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagsNV)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Extensions.WSITypes (HANDLE)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.WSITypes (DWORD)
-import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagBitsNV(..))
-import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagsNV)
-import Graphics.Vulkan.Extensions.WSITypes (HANDLE)
-import Graphics.Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetMemoryWin32HandleNV
-  :: FunPtr (Ptr Device_T -> DeviceMemory -> ExternalMemoryHandleTypeFlagsNV -> Ptr HANDLE -> IO Result) -> Ptr Device_T -> DeviceMemory -> ExternalMemoryHandleTypeFlagsNV -> Ptr HANDLE -> IO Result
-
--- | vkGetMemoryWin32HandleNV - retrieve Win32 handle to a device memory
--- object
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the memory.
---
--- -   @memory@ is the 'Graphics.Vulkan.Core10.Handles.DeviceMemory'
---     object.
---
--- -   @handleType@ is a bitmask of
---     'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'
---     containing a single bit specifying the type of handle requested.
---
--- -   @handle@ is a pointer to a Windows
---     'Graphics.Vulkan.Extensions.WSITypes.HANDLE' in which the handle is
---     returned.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagsNV'
-getMemoryWin32HandleNV :: forall io . MonadIO io => Device -> DeviceMemory -> ExternalMemoryHandleTypeFlagsNV -> io (HANDLE)
-getMemoryWin32HandleNV device memory handleType = liftIO . evalContT $ do
-  let vkGetMemoryWin32HandleNV' = mkVkGetMemoryWin32HandleNV (pVkGetMemoryWin32HandleNV (deviceCmds (device :: Device)))
-  pPHandle <- ContT $ bracket (callocBytes @HANDLE 8) free
-  r <- lift $ vkGetMemoryWin32HandleNV' (deviceHandle (device)) (memory) (handleType) (pPHandle)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pHandle <- lift $ peek @HANDLE pPHandle
-  pure $ (pHandle)
-
-
--- | VkImportMemoryWin32HandleInfoNV - import Win32 memory created on the
--- same physical device
---
--- = Description
---
--- If @handleType@ is @0@, this structure is ignored by consumers of the
--- 'Graphics.Vulkan.Core10.Memory.MemoryAllocateInfo' structure it is
--- chained from.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagsNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ImportMemoryWin32HandleInfoNV = ImportMemoryWin32HandleInfoNV
-  { -- | @handleType@ /must/ be a valid combination of
-    -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'
-    -- values
-    handleType :: ExternalMemoryHandleTypeFlagsNV
-  , -- | @handle@ /must/ be a valid handle to memory, obtained as specified by
-    -- @handleType@
-    handle :: HANDLE
-  }
-  deriving (Typeable)
-deriving instance Show ImportMemoryWin32HandleInfoNV
-
-instance ToCStruct ImportMemoryWin32HandleInfoNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ImportMemoryWin32HandleInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV)) (handleType)
-    poke ((p `plusPtr` 24 :: Ptr HANDLE)) (handle)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct ImportMemoryWin32HandleInfoNV where
-  peekCStruct p = do
-    handleType <- peek @ExternalMemoryHandleTypeFlagsNV ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV))
-    handle <- peek @HANDLE ((p `plusPtr` 24 :: Ptr HANDLE))
-    pure $ ImportMemoryWin32HandleInfoNV
-             handleType handle
-
-instance Storable ImportMemoryWin32HandleInfoNV where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ImportMemoryWin32HandleInfoNV where
-  zero = ImportMemoryWin32HandleInfoNV
-           zero
-           zero
-
-
--- | VkExportMemoryWin32HandleInfoNV - specify security attributes and access
--- rights for Win32 memory handles
---
--- = 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://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights>
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV'
---
--- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data ExportMemoryWin32HandleInfoNV = ExportMemoryWin32HandleInfoNV
-  { -- | @pAttributes@ is a pointer to a Windows
-    -- 'Graphics.Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' structure
-    -- specifying security attributes of the handle.
-    attributes :: Ptr SECURITY_ATTRIBUTES
-  , -- | @dwAccess@ is a 'Graphics.Vulkan.Extensions.WSITypes.DWORD' specifying
-    -- access rights of the handle.
-    dwAccess :: DWORD
-  }
-  deriving (Typeable)
-deriving instance Show ExportMemoryWin32HandleInfoNV
-
-instance ToCStruct ExportMemoryWin32HandleInfoNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ExportMemoryWin32HandleInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES))) (attributes)
-    poke ((p `plusPtr` 24 :: Ptr DWORD)) (dwAccess)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct ExportMemoryWin32HandleInfoNV where
-  peekCStruct p = do
-    pAttributes <- peek @(Ptr SECURITY_ATTRIBUTES) ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES)))
-    dwAccess <- peek @DWORD ((p `plusPtr` 24 :: Ptr DWORD))
-    pure $ ExportMemoryWin32HandleInfoNV
-             pAttributes dwAccess
-
-instance Storable ExportMemoryWin32HandleInfoNV where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ExportMemoryWin32HandleInfoNV where
-  zero = ExportMemoryWin32HandleInfoNV
-           zero
-           zero
-
-
-type NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION"
-pattern NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1
-
-
-type NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_NV_external_memory_win32"
-
--- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME"
-pattern NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_NV_external_memory_win32"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_external_memory_win32  ( ExportMemoryWin32HandleInfoNV
-                                                               , ImportMemoryWin32HandleInfoNV
-                                                               ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data ExportMemoryWin32HandleInfoNV
-
-instance ToCStruct ExportMemoryWin32HandleInfoNV
-instance Show ExportMemoryWin32HandleInfoNV
-
-instance FromCStruct ExportMemoryWin32HandleInfoNV
-
-
-data ImportMemoryWin32HandleInfoNV
-
-instance ToCStruct ImportMemoryWin32HandleInfoNV
-instance Show ImportMemoryWin32HandleInfoNV
-
-instance FromCStruct ImportMemoryWin32HandleInfoNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_fill_rectangle.hs b/src/Graphics/Vulkan/Extensions/VK_NV_fill_rectangle.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_fill_rectangle.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_fill_rectangle  ( NV_FILL_RECTANGLE_SPEC_VERSION
-                                                        , pattern NV_FILL_RECTANGLE_SPEC_VERSION
-                                                        , NV_FILL_RECTANGLE_EXTENSION_NAME
-                                                        , pattern NV_FILL_RECTANGLE_EXTENSION_NAME
-                                                        ) where
-
-import Data.String (IsString)
-
-type NV_FILL_RECTANGLE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_FILL_RECTANGLE_SPEC_VERSION"
-pattern NV_FILL_RECTANGLE_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_FILL_RECTANGLE_SPEC_VERSION = 1
-
-
-type NV_FILL_RECTANGLE_EXTENSION_NAME = "VK_NV_fill_rectangle"
-
--- No documentation found for TopLevel "VK_NV_FILL_RECTANGLE_EXTENSION_NAME"
-pattern NV_FILL_RECTANGLE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs
+++ /dev/null
@@ -1,198 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color  ( PipelineCoverageToColorStateCreateInfoNV(..)
-                                                                    , PipelineCoverageToColorStateCreateFlagsNV(..)
-                                                                    , NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION
-                                                                    , pattern NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION
-                                                                    , NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME
-                                                                    , pattern NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME
-                                                                    ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV))
--- | VkPipelineCoverageToColorStateCreateInfoNV - Structure specifying
--- whether fragment coverage replaces a color
---
--- = Description
---
--- If @coverageToColorEnable@ is 'Graphics.Vulkan.Core10.BaseType.TRUE',
--- the fragment coverage information is treated as a bitmask with one bit
--- for each sample (as in the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 'Graphics.Vulkan.Core10.BaseType.FALSE',
--- these operations are skipped. If this structure is not present, it is as
--- if @coverageToColorEnable@ is 'Graphics.Vulkan.Core10.BaseType.FALSE'.
---
--- == Valid Usage
---
--- -   If @coverageToColorEnable@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', then the render pass subpass
---     indicated by
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
---     and
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@subpass@
---     /must/ have a color attachment at the location selected by
---     @coverageToColorLocation@, with a
---     'Graphics.Vulkan.Core10.Enums.Format.Format' of
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8_UINT',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8_SINT',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16_UINT',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16_SINT',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R32_UINT', or
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R32_SINT'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV'
---
--- -   @flags@ /must/ be @0@
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'PipelineCoverageToColorStateCreateFlagsNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineCoverageToColorStateCreateInfoNV = PipelineCoverageToColorStateCreateInfoNV
-  { -- | @flags@ is reserved for future use.
-    flags :: PipelineCoverageToColorStateCreateFlagsNV
-  , -- | @coverageToColorEnable@ controls whether the fragment coverage value
-    -- replaces a fragment color output.
-    coverageToColorEnable :: Bool
-  , -- | @coverageToColorLocation@ controls which fragment shader color output
-    -- value is replaced.
-    coverageToColorLocation :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PipelineCoverageToColorStateCreateInfoNV
-
-instance ToCStruct PipelineCoverageToColorStateCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineCoverageToColorStateCreateInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr PipelineCoverageToColorStateCreateFlagsNV)) (flags)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (coverageToColorEnable))
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (coverageToColorLocation)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PipelineCoverageToColorStateCreateInfoNV where
-  peekCStruct p = do
-    flags <- peek @PipelineCoverageToColorStateCreateFlagsNV ((p `plusPtr` 16 :: Ptr PipelineCoverageToColorStateCreateFlagsNV))
-    coverageToColorEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    coverageToColorLocation <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    pure $ PipelineCoverageToColorStateCreateInfoNV
-             flags (bool32ToBool coverageToColorEnable) coverageToColorLocation
-
-instance Storable PipelineCoverageToColorStateCreateInfoNV where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineCoverageToColorStateCreateInfoNV where
-  zero = PipelineCoverageToColorStateCreateInfoNV
-           zero
-           zero
-           zero
-
-
--- | VkPipelineCoverageToColorStateCreateFlagsNV - Reserved for future use
---
--- = Description
---
--- 'PipelineCoverageToColorStateCreateFlagsNV' is a bitmask type for
--- setting a mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'PipelineCoverageToColorStateCreateInfoNV'
-newtype PipelineCoverageToColorStateCreateFlagsNV = PipelineCoverageToColorStateCreateFlagsNV Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineCoverageToColorStateCreateFlagsNV where
-  showsPrec p = \case
-    PipelineCoverageToColorStateCreateFlagsNV x -> showParen (p >= 11) (showString "PipelineCoverageToColorStateCreateFlagsNV 0x" . showHex x)
-
-instance Read PipelineCoverageToColorStateCreateFlagsNV where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineCoverageToColorStateCreateFlagsNV")
-                       v <- step readPrec
-                       pure (PipelineCoverageToColorStateCreateFlagsNV v)))
-
-
-type NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION"
-pattern NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION = 1
-
-
-type NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME = "VK_NV_fragment_coverage_to_color"
-
--- No documentation found for TopLevel "VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME"
-pattern NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME = "VK_NV_fragment_coverage_to_color"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color  (PipelineCoverageToColorStateCreateInfoNV) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PipelineCoverageToColorStateCreateInfoNV
-
-instance ToCStruct PipelineCoverageToColorStateCreateInfoNV
-instance Show PipelineCoverageToColorStateCreateInfoNV
-
-instance FromCStruct PipelineCoverageToColorStateCreateInfoNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs b/src/Graphics/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs
+++ /dev/null
@@ -1,112 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric  ( PhysicalDeviceFragmentShaderBarycentricFeaturesNV(..)
-                                                                     , NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION
-                                                                     , pattern NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION
-                                                                     , NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME
-                                                                     , pattern NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME
-                                                                     ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV))
--- | VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV - Structure
--- describing barycentric support in fragment shaders that can be supported
--- by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceFragmentShaderBarycentricFeaturesNV'
--- structure describe the following features:
---
--- = Description
---
--- See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-barycentric Barycentric Interpolation>
--- for more information.
---
--- If the 'PhysicalDeviceFragmentShaderBarycentricFeaturesNV' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceFragmentShaderBarycentricFeaturesNV' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceFragmentShaderBarycentricFeaturesNV = PhysicalDeviceFragmentShaderBarycentricFeaturesNV
-  { -- | @fragmentShaderBarycentric@ indicates that the implementation supports
-    -- the @BaryCoordNV@ and @BaryCoordNoPerspNV@ SPIR-V fragment shader
-    -- built-ins and supports the @PerVertexNV@ SPIR-V decoration on fragment
-    -- shader input variables.
-    fragmentShaderBarycentric :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceFragmentShaderBarycentricFeaturesNV
-
-instance ToCStruct PhysicalDeviceFragmentShaderBarycentricFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceFragmentShaderBarycentricFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (fragmentShaderBarycentric))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceFragmentShaderBarycentricFeaturesNV where
-  peekCStruct p = do
-    fragmentShaderBarycentric <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceFragmentShaderBarycentricFeaturesNV
-             (bool32ToBool fragmentShaderBarycentric)
-
-instance Storable PhysicalDeviceFragmentShaderBarycentricFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceFragmentShaderBarycentricFeaturesNV where
-  zero = PhysicalDeviceFragmentShaderBarycentricFeaturesNV
-           zero
-
-
-type NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION"
-pattern NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION = 1
-
-
-type NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME = "VK_NV_fragment_shader_barycentric"
-
--- No documentation found for TopLevel "VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME"
-pattern NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME = "VK_NV_fragment_shader_barycentric"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric  (PhysicalDeviceFragmentShaderBarycentricFeaturesNV) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceFragmentShaderBarycentricFeaturesNV
-
-instance ToCStruct PhysicalDeviceFragmentShaderBarycentricFeaturesNV
-instance Show PhysicalDeviceFragmentShaderBarycentricFeaturesNV
-
-instance FromCStruct PhysicalDeviceFragmentShaderBarycentricFeaturesNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs b/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
+++ /dev/null
@@ -1,288 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples  ( PipelineCoverageModulationStateCreateInfoNV(..)
-                                                                   , PipelineCoverageModulationStateCreateFlagsNV(..)
-                                                                   , CoverageModulationModeNV( COVERAGE_MODULATION_MODE_NONE_NV
-                                                                                             , COVERAGE_MODULATION_MODE_RGB_NV
-                                                                                             , COVERAGE_MODULATION_MODE_ALPHA_NV
-                                                                                             , COVERAGE_MODULATION_MODE_RGBA_NV
-                                                                                             , ..
-                                                                                             )
-                                                                   , NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION
-                                                                   , pattern NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION
-                                                                   , NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME
-                                                                   , pattern NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME
-                                                                   ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Utils (maybePeek)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.Bits (Bits)
-import Data.Either (Either)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CFloat(CFloat))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV))
--- | VkPipelineCoverageModulationStateCreateInfoNV - Structure specifying
--- parameters controlling coverage modulation
---
--- = Description
---
--- If @coverageModulationTableEnable@ is
--- 'Graphics.Vulkan.Core10.BaseType.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.AttachmentDescription'::@samples@ for
---     any color attachments
---
--- -   R = popcount(associated coverage bits) \/ (N \/ M)
---
--- If @coverageModulationTableEnable@ is
--- 'Graphics.Vulkan.Core10.BaseType.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 'COVERAGE_MODULATION_MODE_NONE_NV'.
---
--- If the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-coverage-reduction coverage reduction mode>
--- is
--- 'Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode.COVERAGE_REDUCTION_MODE_TRUNCATE_NV',
--- each color sample is associated with only a single coverage sample. In
--- this case, it is as if @coverageModulationMode@ is
--- 'COVERAGE_MODULATION_MODE_NONE_NV'.
---
--- == Valid Usage
---
--- -   If @coverageModulationTableEnable@ is
---     'Graphics.Vulkan.Core10.BaseType.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
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV'
---
--- -   @flags@ /must/ be @0@
---
--- -   @coverageModulationMode@ /must/ be a valid
---     'CoverageModulationModeNV' value
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32', 'CoverageModulationModeNV',
--- 'PipelineCoverageModulationStateCreateFlagsNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineCoverageModulationStateCreateInfoNV = PipelineCoverageModulationStateCreateInfoNV
-  { -- | @flags@ is reserved for future use.
-    flags :: PipelineCoverageModulationStateCreateFlagsNV
-  , -- | @coverageModulationMode@ is a 'CoverageModulationModeNV' value
-    -- controlling which color components are modulated.
-    coverageModulationMode :: CoverageModulationModeNV
-  , -- | @coverageModulationTableEnable@ controls whether the modulation factor
-    -- is looked up from a table in @pCoverageModulationTable@.
-    coverageModulationTableEnable :: Bool
-  , -- | @pCoverageModulationTable@ is a table of modulation factors containing a
-    -- value for each number of covered samples.
-    coverageModulationTable :: Either Word32 (Vector Float)
-  }
-  deriving (Typeable)
-deriving instance Show PipelineCoverageModulationStateCreateInfoNV
-
-instance ToCStruct PipelineCoverageModulationStateCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineCoverageModulationStateCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCoverageModulationStateCreateFlagsNV)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr CoverageModulationModeNV)) (coverageModulationMode)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (coverageModulationTableEnable))
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (coverageModulationTable)) :: Word32))
-    pCoverageModulationTable'' <- case (coverageModulationTable) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPCoverageModulationTable' <- ContT $ allocaBytesAligned @CFloat ((Data.Vector.length (v)) * 4) 4
-        lift $ Data.Vector.imapM_ (\i e -> poke (pPCoverageModulationTable' `plusPtr` (4 * (i)) :: Ptr CFloat) (CFloat (e))) (v)
-        pure $ pPCoverageModulationTable'
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CFloat))) pCoverageModulationTable''
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 20 :: Ptr CoverageModulationModeNV)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PipelineCoverageModulationStateCreateInfoNV where
-  peekCStruct p = do
-    flags <- peek @PipelineCoverageModulationStateCreateFlagsNV ((p `plusPtr` 16 :: Ptr PipelineCoverageModulationStateCreateFlagsNV))
-    coverageModulationMode <- peek @CoverageModulationModeNV ((p `plusPtr` 20 :: Ptr CoverageModulationModeNV))
-    coverageModulationTableEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
-    coverageModulationTableCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    pCoverageModulationTable <- peek @(Ptr CFloat) ((p `plusPtr` 32 :: Ptr (Ptr CFloat)))
-    pCoverageModulationTable' <- maybePeek (\j -> generateM (fromIntegral coverageModulationTableCount) (\i -> do
-      pCoverageModulationTableElem <- peek @CFloat (((j) `advancePtrBytes` (4 * (i)) :: Ptr CFloat))
-      pure $ (\(CFloat a) -> a) pCoverageModulationTableElem)) pCoverageModulationTable
-    let pCoverageModulationTable'' = maybe (Left coverageModulationTableCount) Right pCoverageModulationTable'
-    pure $ PipelineCoverageModulationStateCreateInfoNV
-             flags coverageModulationMode (bool32ToBool coverageModulationTableEnable) pCoverageModulationTable''
-
-instance Zero PipelineCoverageModulationStateCreateInfoNV where
-  zero = PipelineCoverageModulationStateCreateInfoNV
-           zero
-           zero
-           zero
-           (Left 0)
-
-
--- | VkPipelineCoverageModulationStateCreateFlagsNV - Reserved for future use
---
--- = Description
---
--- 'PipelineCoverageModulationStateCreateFlagsNV' is a bitmask type for
--- setting a mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'PipelineCoverageModulationStateCreateInfoNV'
-newtype PipelineCoverageModulationStateCreateFlagsNV = PipelineCoverageModulationStateCreateFlagsNV Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineCoverageModulationStateCreateFlagsNV where
-  showsPrec p = \case
-    PipelineCoverageModulationStateCreateFlagsNV x -> showParen (p >= 11) (showString "PipelineCoverageModulationStateCreateFlagsNV 0x" . showHex x)
-
-instance Read PipelineCoverageModulationStateCreateFlagsNV where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineCoverageModulationStateCreateFlagsNV")
-                       v <- step readPrec
-                       pure (PipelineCoverageModulationStateCreateFlagsNV v)))
-
-
--- | VkCoverageModulationModeNV - Specify the coverage modulation mode
---
--- = See Also
---
--- 'PipelineCoverageModulationStateCreateInfoNV'
-newtype CoverageModulationModeNV = CoverageModulationModeNV Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'COVERAGE_MODULATION_MODE_NONE_NV' specifies that no components are
--- multiplied by the modulation factor.
-pattern COVERAGE_MODULATION_MODE_NONE_NV = CoverageModulationModeNV 0
--- | 'COVERAGE_MODULATION_MODE_RGB_NV' specifies that the red, green, and
--- blue components are multiplied by the modulation factor.
-pattern COVERAGE_MODULATION_MODE_RGB_NV = CoverageModulationModeNV 1
--- | 'COVERAGE_MODULATION_MODE_ALPHA_NV' specifies that the alpha component
--- is multiplied by the modulation factor.
-pattern COVERAGE_MODULATION_MODE_ALPHA_NV = CoverageModulationModeNV 2
--- | 'COVERAGE_MODULATION_MODE_RGBA_NV' specifies that all components are
--- multiplied by the modulation factor.
-pattern COVERAGE_MODULATION_MODE_RGBA_NV = CoverageModulationModeNV 3
-{-# complete COVERAGE_MODULATION_MODE_NONE_NV,
-             COVERAGE_MODULATION_MODE_RGB_NV,
-             COVERAGE_MODULATION_MODE_ALPHA_NV,
-             COVERAGE_MODULATION_MODE_RGBA_NV :: CoverageModulationModeNV #-}
-
-instance Show CoverageModulationModeNV where
-  showsPrec p = \case
-    COVERAGE_MODULATION_MODE_NONE_NV -> showString "COVERAGE_MODULATION_MODE_NONE_NV"
-    COVERAGE_MODULATION_MODE_RGB_NV -> showString "COVERAGE_MODULATION_MODE_RGB_NV"
-    COVERAGE_MODULATION_MODE_ALPHA_NV -> showString "COVERAGE_MODULATION_MODE_ALPHA_NV"
-    COVERAGE_MODULATION_MODE_RGBA_NV -> showString "COVERAGE_MODULATION_MODE_RGBA_NV"
-    CoverageModulationModeNV x -> showParen (p >= 11) (showString "CoverageModulationModeNV " . showsPrec 11 x)
-
-instance Read CoverageModulationModeNV where
-  readPrec = parens (choose [("COVERAGE_MODULATION_MODE_NONE_NV", pure COVERAGE_MODULATION_MODE_NONE_NV)
-                            , ("COVERAGE_MODULATION_MODE_RGB_NV", pure COVERAGE_MODULATION_MODE_RGB_NV)
-                            , ("COVERAGE_MODULATION_MODE_ALPHA_NV", pure COVERAGE_MODULATION_MODE_ALPHA_NV)
-                            , ("COVERAGE_MODULATION_MODE_RGBA_NV", pure COVERAGE_MODULATION_MODE_RGBA_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CoverageModulationModeNV")
-                       v <- step readPrec
-                       pure (CoverageModulationModeNV v)))
-
-
-type NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION"
-pattern NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION = 1
-
-
-type NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME = "VK_NV_framebuffer_mixed_samples"
-
--- No documentation found for TopLevel "VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME"
-pattern NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME = "VK_NV_framebuffer_mixed_samples"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples  (PipelineCoverageModulationStateCreateInfoNV) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PipelineCoverageModulationStateCreateInfoNV
-
-instance ToCStruct PipelineCoverageModulationStateCreateInfoNV
-instance Show PipelineCoverageModulationStateCreateInfoNV
-
-instance FromCStruct PipelineCoverageModulationStateCreateInfoNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs b/src/Graphics/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_geometry_shader_passthrough  ( NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION
-                                                                     , pattern NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION
-                                                                     , NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME
-                                                                     , pattern NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME
-                                                                     ) where
-
-import Data.String (IsString)
-
-type NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION"
-pattern NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION = 1
-
-
-type NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME = "VK_NV_geometry_shader_passthrough"
-
--- No documentation found for TopLevel "VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME"
-pattern NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_glsl_shader.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_glsl_shader  ( NV_GLSL_SHADER_SPEC_VERSION
-                                                     , pattern NV_GLSL_SHADER_SPEC_VERSION
-                                                     , NV_GLSL_SHADER_EXTENSION_NAME
-                                                     , pattern NV_GLSL_SHADER_EXTENSION_NAME
-                                                     ) where
-
-import Data.String (IsString)
-
-type NV_GLSL_SHADER_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_GLSL_SHADER_SPEC_VERSION"
-pattern NV_GLSL_SHADER_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_GLSL_SHADER_SPEC_VERSION = 1
-
-
-type NV_GLSL_SHADER_EXTENSION_NAME = "VK_NV_glsl_shader"
-
--- No documentation found for TopLevel "VK_NV_GLSL_SHADER_EXTENSION_NAME"
-pattern NV_GLSL_SHADER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_GLSL_SHADER_EXTENSION_NAME = "VK_NV_glsl_shader"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_mesh_shader.hs b/src/Graphics/Vulkan/Extensions/VK_NV_mesh_shader.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_mesh_shader.hs
+++ /dev/null
@@ -1,1236 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_mesh_shader  ( cmdDrawMeshTasksNV
-                                                     , cmdDrawMeshTasksIndirectNV
-                                                     , cmdDrawMeshTasksIndirectCountNV
-                                                     , PhysicalDeviceMeshShaderFeaturesNV(..)
-                                                     , PhysicalDeviceMeshShaderPropertiesNV(..)
-                                                     , DrawMeshTasksIndirectCommandNV(..)
-                                                     , NV_MESH_SHADER_SPEC_VERSION
-                                                     , pattern NV_MESH_SHADER_SPEC_VERSION
-                                                     , NV_MESH_SHADER_EXTENSION_NAME
-                                                     , pattern NV_MESH_SHADER_EXTENSION_NAME
-                                                     ) where
-
-import Graphics.Vulkan.CStruct.Utils (FixedArray)
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.CStruct.Utils (lowerArrayPtr)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDrawMeshTasksIndirectCountNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDrawMeshTasksIndirectNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdDrawMeshTasksNV))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDrawMeshTasksNV
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDrawMeshTasksNV - Draw mesh task work items
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @taskCount@ is the number of local workgroups to dispatch in the X
---     dimension. Y and Z dimension are implicitly set to one.
---
--- -   @firstTask@ is the X component of the first workgroup ID.
---
--- = Description
---
--- When the command is executed, a global workgroup consisting of
--- @taskCount@ local workgroups is assembled.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   The current render pass /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   Image subresources used as attachments in the current render pass
---     /must/ not be accessed in any way other than as an attachment by
---     this command
---
--- -   If the draw is recorded in a render pass instance with multiview
---     enabled, the maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   If the bound graphics pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   @taskCount@ /must/ be less than or equal to
---     'PhysicalDeviceMeshShaderPropertiesNV'::@maxDrawMeshTasksCount@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdDrawMeshTasksNV :: forall io . MonadIO io => CommandBuffer -> ("taskCount" ::: Word32) -> ("firstTask" ::: Word32) -> io ()
-cmdDrawMeshTasksNV commandBuffer taskCount firstTask = liftIO $ do
-  let vkCmdDrawMeshTasksNV' = mkVkCmdDrawMeshTasksNV (pVkCmdDrawMeshTasksNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDrawMeshTasksNV' (commandBufferHandle (commandBuffer)) (taskCount) (firstTask)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDrawMeshTasksIndirectNV
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDrawMeshTasksIndirectNV - Issue an indirect mesh tasks draw into a
--- command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @buffer@ is the buffer containing draw parameters.
---
--- -   @offset@ is the byte offset into @buffer@ where parameters begin.
---
--- -   @drawCount@ is the number of draws to execute, and /can/ be zero.
---
--- -   @stride@ is the byte stride between successive sets of draw
---     parameters.
---
--- = Description
---
--- 'cmdDrawMeshTasksIndirectNV' behaves similarly to 'cmdDrawMeshTasksNV'
--- 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 'DrawMeshTasksIndirectCommandNV' structures. If
--- @drawCount@ is less than or equal to one, @stride@ is ignored.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   The current render pass /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   Image subresources used as attachments in the current render pass
---     /must/ not be accessed in any way other than as an attachment by
---     this command
---
--- -   If the draw is recorded in a render pass instance with multiview
---     enabled, the maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   If the bound graphics pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @buffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>
---     feature is not enabled, @drawCount@ /must/ be @0@ or @1@
---
--- -   @drawCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
---
--- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
---     @4@ and /must/ be greater than or equal to
---     @sizeof@('DrawMeshTasksIndirectCommandNV')
---
--- -   If @drawCount@ is equal to @1@, (@offset@ +
---     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or
---     equal to the size of @buffer@
---
--- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
---     @offset@ + @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be
---     less than or equal to the size of @buffer@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdDrawMeshTasksIndirectNV :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
-cmdDrawMeshTasksIndirectNV commandBuffer buffer offset drawCount stride = liftIO $ do
-  let vkCmdDrawMeshTasksIndirectNV' = mkVkCmdDrawMeshTasksIndirectNV (pVkCmdDrawMeshTasksIndirectNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDrawMeshTasksIndirectNV' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdDrawMeshTasksIndirectCountNV
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
-
--- | vkCmdDrawMeshTasksIndirectCountNV - Perform an indirect mesh tasks draw
--- with the draw count sourced from a buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @buffer@ is the buffer containing draw parameters.
---
--- -   @offset@ is the byte offset into @buffer@ where parameters begin.
---
--- -   @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
---
--- 'cmdDrawMeshTasksIndirectCountNV' behaves similarly to
--- 'cmdDrawMeshTasksIndirectNV' 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 a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   The current render pass /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
---     with the @renderPass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the
---     'Graphics.Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
---     structure specified when creating the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to
---     'Graphics.Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   Image subresources used as attachments in the current render pass
---     /must/ not be accessed in any way other than as an attachment by
---     this command
---
--- -   If the draw is recorded in a render pass instance with multiview
---     enabled, the maximum instance index /must/ be less than or equal to
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
---
--- -   If the bound graphics pipeline was created with
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
---     set to 'Graphics.Vulkan.Core10.BaseType.TRUE' and the current
---     subpass has a depth\/stencil attachment, then that attachment /must/
---     have been created with the
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
---     bit set
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @buffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   @commandBuffer@ /must/ not be a protected command buffer
---
--- -   If @countBuffer@ is non-sparse then it /must/ be bound completely
---     and contiguously to a single
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' object
---
--- -   @countBuffer@ /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
---     bit set
---
--- -   @countBufferOffset@ /must/ be a multiple of @4@
---
--- -   The count stored in @countBuffer@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
---
--- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or
---     equal to @sizeof@('DrawMeshTasksIndirectCommandNV')
---
--- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×
---     (@maxDrawCount@ - 1) + @offset@ +
---     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or
---     equal to the size of @buffer@
---
--- -   If the count stored in @countBuffer@ is equal to @1@, (@offset@ +
---     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or
---     equal to the size of @buffer@
---
--- -   If the count stored in @countBuffer@ is greater than @1@, (@stride@
---     × (@drawCount@ - 1) + @offset@ +
---     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or
---     equal to the size of @buffer@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @buffer@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @countBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   This command /must/ only be called inside of a render pass instance
---
--- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /must/ have
---     been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdDrawMeshTasksIndirectCountNV :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
-cmdDrawMeshTasksIndirectCountNV commandBuffer buffer offset countBuffer countBufferOffset maxDrawCount stride = liftIO $ do
-  let vkCmdDrawMeshTasksIndirectCountNV' = mkVkCmdDrawMeshTasksIndirectCountNV (pVkCmdDrawMeshTasksIndirectCountNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdDrawMeshTasksIndirectCountNV' (commandBufferHandle (commandBuffer)) (buffer) (offset) (countBuffer) (countBufferOffset) (maxDrawCount) (stride)
-  pure $ ()
-
-
--- | VkPhysicalDeviceMeshShaderFeaturesNV - Structure describing mesh shading
--- features that can be supported by an implementation
---
--- = Description
---
--- If the 'PhysicalDeviceMeshShaderFeaturesNV' structure is included in the
--- @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with a value indicating whether the feature is supported.
--- 'PhysicalDeviceMeshShaderFeaturesNV' /can/ also be included in @pNext@
--- chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the
--- features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceMeshShaderFeaturesNV = PhysicalDeviceMeshShaderFeaturesNV
-  { -- | @taskShader@ indicates whether the task shader stage is supported.
-    taskShader :: Bool
-  , -- | @meshShader@ indicates whether the mesh shader stage is supported.
-    meshShader :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceMeshShaderFeaturesNV
-
-instance ToCStruct PhysicalDeviceMeshShaderFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceMeshShaderFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (taskShader))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (meshShader))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceMeshShaderFeaturesNV where
-  peekCStruct p = do
-    taskShader <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    meshShader <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceMeshShaderFeaturesNV
-             (bool32ToBool taskShader) (bool32ToBool meshShader)
-
-instance Storable PhysicalDeviceMeshShaderFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceMeshShaderFeaturesNV where
-  zero = PhysicalDeviceMeshShaderFeaturesNV
-           zero
-           zero
-
-
--- | VkPhysicalDeviceMeshShaderPropertiesNV - Structure describing mesh
--- shading properties
---
--- = Members
---
--- The members of the 'PhysicalDeviceMeshShaderPropertiesNV' structure
--- describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceMeshShaderPropertiesNV' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceMeshShaderPropertiesNV = PhysicalDeviceMeshShaderPropertiesNV
-  { -- | @maxDrawMeshTasksCount@ is the maximum number of local workgroups that
-    -- /can/ be launched by a single draw mesh tasks command. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-mesh-shading>.
-    maxDrawMeshTasksCount :: Word32
-  , -- | @maxTaskWorkGroupInvocations@ is the maximum total number of task shader
-    -- invocations in a single local workgroup. The product of the X, Y, and Z
-    -- sizes, as specified by the @LocalSize@ execution mode in shader modules
-    -- or by the object decorated by the @WorkgroupSize@ decoration, /must/ be
-    -- less than or equal to this limit.
-    maxTaskWorkGroupInvocations :: Word32
-  , -- | @maxTaskWorkGroupSize@[3] is the maximum size of a local task workgroup.
-    -- These three values represent the maximum local workgroup size in the X,
-    -- Y, and Z dimensions, respectively. The @x@, @y@, and @z@ sizes, as
-    -- specified by the @LocalSize@ execution mode or by the object decorated
-    -- by the @WorkgroupSize@ decoration in shader modules, /must/ be less than
-    -- or equal to the corresponding limit.
-    maxTaskWorkGroupSize :: (Word32, Word32, Word32)
-  , -- | @maxTaskTotalMemorySize@ is the maximum number of bytes that the task
-    -- shader can use in total for shared and output memory combined.
-    maxTaskTotalMemorySize :: Word32
-  , -- | @maxTaskOutputCount@ is the maximum number of output tasks a single task
-    -- shader workgroup can emit.
-    maxTaskOutputCount :: Word32
-  , -- | @maxMeshWorkGroupInvocations@ is the maximum total number of mesh shader
-    -- invocations in a single local workgroup. The product of the X, Y, and Z
-    -- sizes, as specified by the @LocalSize@ execution mode in shader modules
-    -- or by the object decorated by the @WorkgroupSize@ decoration, /must/ be
-    -- less than or equal to this limit.
-    maxMeshWorkGroupInvocations :: Word32
-  , -- | @maxMeshWorkGroupSize@[3] is the maximum size of a local mesh workgroup.
-    -- These three values represent the maximum local workgroup size in the X,
-    -- Y, and Z dimensions, respectively. The @x@, @y@, and @z@ sizes, as
-    -- specified by the @LocalSize@ execution mode or by the object decorated
-    -- by the @WorkgroupSize@ decoration in shader modules, /must/ be less than
-    -- or equal to the corresponding limit.
-    maxMeshWorkGroupSize :: (Word32, Word32, Word32)
-  , -- | @maxMeshTotalMemorySize@ is the maximum number of bytes that the mesh
-    -- shader can use in total for shared and output memory combined.
-    maxMeshTotalMemorySize :: Word32
-  , -- | @maxMeshOutputVertices@ is the maximum number of vertices a mesh shader
-    -- output can store.
-    maxMeshOutputVertices :: Word32
-  , -- | @maxMeshOutputPrimitives@ is the maximum number of primitives a mesh
-    -- shader output can store.
-    maxMeshOutputPrimitives :: Word32
-  , -- | @maxMeshMultiviewViewCount@ is the maximum number of multi-view views a
-    -- mesh shader can use.
-    maxMeshMultiviewViewCount :: Word32
-  , -- | @meshOutputPerVertexGranularity@ is the granularity with which mesh
-    -- vertex outputs are allocated. The value can be used to compute the
-    -- memory size used by the mesh shader, which must be less than or equal to
-    -- @maxMeshTotalMemorySize@.
-    meshOutputPerVertexGranularity :: Word32
-  , -- | @meshOutputPerPrimitiveGranularity@ is the granularity with which mesh
-    -- outputs qualified as per-primitive are allocated. The value can be used
-    -- to compute the memory size used by the mesh shader, which must be less
-    -- than or equal to @maxMeshTotalMemorySize@.
-    meshOutputPerPrimitiveGranularity :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceMeshShaderPropertiesNV
-
-instance ToCStruct PhysicalDeviceMeshShaderPropertiesNV where
-  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceMeshShaderPropertiesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxDrawMeshTasksCount)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxTaskWorkGroupInvocations)
-    let pMaxTaskWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 3 Word32)))
-    case (maxTaskWorkGroupSize) of
-      (e0, e1, e2) -> do
-        poke (pMaxTaskWorkGroupSize' :: Ptr Word32) (e0)
-        poke (pMaxTaskWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
-        poke (pMaxTaskWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
-    poke ((p `plusPtr` 36 :: Ptr Word32)) (maxTaskTotalMemorySize)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (maxTaskOutputCount)
-    poke ((p `plusPtr` 44 :: Ptr Word32)) (maxMeshWorkGroupInvocations)
-    let pMaxMeshWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 48 :: Ptr (FixedArray 3 Word32)))
-    case (maxMeshWorkGroupSize) of
-      (e0, e1, e2) -> do
-        poke (pMaxMeshWorkGroupSize' :: Ptr Word32) (e0)
-        poke (pMaxMeshWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
-        poke (pMaxMeshWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
-    poke ((p `plusPtr` 60 :: Ptr Word32)) (maxMeshTotalMemorySize)
-    poke ((p `plusPtr` 64 :: Ptr Word32)) (maxMeshOutputVertices)
-    poke ((p `plusPtr` 68 :: Ptr Word32)) (maxMeshOutputPrimitives)
-    poke ((p `plusPtr` 72 :: Ptr Word32)) (maxMeshMultiviewViewCount)
-    poke ((p `plusPtr` 76 :: Ptr Word32)) (meshOutputPerVertexGranularity)
-    poke ((p `plusPtr` 80 :: Ptr Word32)) (meshOutputPerPrimitiveGranularity)
-    f
-  cStructSize = 88
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    let pMaxTaskWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 3 Word32)))
-    case ((zero, zero, zero)) of
-      (e0, e1, e2) -> do
-        poke (pMaxTaskWorkGroupSize' :: Ptr Word32) (e0)
-        poke (pMaxTaskWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
-        poke (pMaxTaskWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
-    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
-    let pMaxMeshWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 48 :: Ptr (FixedArray 3 Word32)))
-    case ((zero, zero, zero)) of
-      (e0, e1, e2) -> do
-        poke (pMaxMeshWorkGroupSize' :: Ptr Word32) (e0)
-        poke (pMaxMeshWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
-        poke (pMaxMeshWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
-    poke ((p `plusPtr` 60 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 68 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 72 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 76 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 80 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceMeshShaderPropertiesNV where
-  peekCStruct p = do
-    maxDrawMeshTasksCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxTaskWorkGroupInvocations <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    let pmaxTaskWorkGroupSize = lowerArrayPtr @Word32 ((p `plusPtr` 24 :: Ptr (FixedArray 3 Word32)))
-    maxTaskWorkGroupSize0 <- peek @Word32 ((pmaxTaskWorkGroupSize `advancePtrBytes` 0 :: Ptr Word32))
-    maxTaskWorkGroupSize1 <- peek @Word32 ((pmaxTaskWorkGroupSize `advancePtrBytes` 4 :: Ptr Word32))
-    maxTaskWorkGroupSize2 <- peek @Word32 ((pmaxTaskWorkGroupSize `advancePtrBytes` 8 :: Ptr Word32))
-    maxTaskTotalMemorySize <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
-    maxTaskOutputCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
-    maxMeshWorkGroupInvocations <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
-    let pmaxMeshWorkGroupSize = lowerArrayPtr @Word32 ((p `plusPtr` 48 :: Ptr (FixedArray 3 Word32)))
-    maxMeshWorkGroupSize0 <- peek @Word32 ((pmaxMeshWorkGroupSize `advancePtrBytes` 0 :: Ptr Word32))
-    maxMeshWorkGroupSize1 <- peek @Word32 ((pmaxMeshWorkGroupSize `advancePtrBytes` 4 :: Ptr Word32))
-    maxMeshWorkGroupSize2 <- peek @Word32 ((pmaxMeshWorkGroupSize `advancePtrBytes` 8 :: Ptr Word32))
-    maxMeshTotalMemorySize <- peek @Word32 ((p `plusPtr` 60 :: Ptr Word32))
-    maxMeshOutputVertices <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
-    maxMeshOutputPrimitives <- peek @Word32 ((p `plusPtr` 68 :: Ptr Word32))
-    maxMeshMultiviewViewCount <- peek @Word32 ((p `plusPtr` 72 :: Ptr Word32))
-    meshOutputPerVertexGranularity <- peek @Word32 ((p `plusPtr` 76 :: Ptr Word32))
-    meshOutputPerPrimitiveGranularity <- peek @Word32 ((p `plusPtr` 80 :: Ptr Word32))
-    pure $ PhysicalDeviceMeshShaderPropertiesNV
-             maxDrawMeshTasksCount maxTaskWorkGroupInvocations ((maxTaskWorkGroupSize0, maxTaskWorkGroupSize1, maxTaskWorkGroupSize2)) maxTaskTotalMemorySize maxTaskOutputCount maxMeshWorkGroupInvocations ((maxMeshWorkGroupSize0, maxMeshWorkGroupSize1, maxMeshWorkGroupSize2)) maxMeshTotalMemorySize maxMeshOutputVertices maxMeshOutputPrimitives maxMeshMultiviewViewCount meshOutputPerVertexGranularity meshOutputPerPrimitiveGranularity
-
-instance Storable PhysicalDeviceMeshShaderPropertiesNV where
-  sizeOf ~_ = 88
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceMeshShaderPropertiesNV where
-  zero = PhysicalDeviceMeshShaderPropertiesNV
-           zero
-           zero
-           (zero, zero, zero)
-           zero
-           zero
-           zero
-           (zero, zero, zero)
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkDrawMeshTasksIndirectCommandNV - Structure specifying a mesh tasks
--- draw indirect command
---
--- = Description
---
--- The members of 'DrawMeshTasksIndirectCommandNV' have the same meaning as
--- the similarly named parameters of 'cmdDrawMeshTasksNV'.
---
--- == Valid Usage
---
--- = See Also
---
--- 'cmdDrawMeshTasksIndirectNV'
-data DrawMeshTasksIndirectCommandNV = DrawMeshTasksIndirectCommandNV
-  { -- | @taskCount@ /must/ be less than or equal to
-    -- 'PhysicalDeviceMeshShaderPropertiesNV'::@maxDrawMeshTasksCount@
-    taskCount :: Word32
-  , -- | @firstTask@ is the X component of the first workgroup ID.
-    firstTask :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show DrawMeshTasksIndirectCommandNV
-
-instance ToCStruct DrawMeshTasksIndirectCommandNV where
-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p DrawMeshTasksIndirectCommandNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (taskCount)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (firstTask)
-    f
-  cStructSize = 8
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct DrawMeshTasksIndirectCommandNV where
-  peekCStruct p = do
-    taskCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    firstTask <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    pure $ DrawMeshTasksIndirectCommandNV
-             taskCount firstTask
-
-instance Storable DrawMeshTasksIndirectCommandNV where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero DrawMeshTasksIndirectCommandNV where
-  zero = DrawMeshTasksIndirectCommandNV
-           zero
-           zero
-
-
-type NV_MESH_SHADER_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_MESH_SHADER_SPEC_VERSION"
-pattern NV_MESH_SHADER_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_MESH_SHADER_SPEC_VERSION = 1
-
-
-type NV_MESH_SHADER_EXTENSION_NAME = "VK_NV_mesh_shader"
-
--- No documentation found for TopLevel "VK_NV_MESH_SHADER_EXTENSION_NAME"
-pattern NV_MESH_SHADER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_MESH_SHADER_EXTENSION_NAME = "VK_NV_mesh_shader"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_mesh_shader.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_mesh_shader.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_mesh_shader.hs-boot
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_mesh_shader  ( DrawMeshTasksIndirectCommandNV
-                                                     , PhysicalDeviceMeshShaderFeaturesNV
-                                                     , PhysicalDeviceMeshShaderPropertiesNV
-                                                     ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data DrawMeshTasksIndirectCommandNV
-
-instance ToCStruct DrawMeshTasksIndirectCommandNV
-instance Show DrawMeshTasksIndirectCommandNV
-
-instance FromCStruct DrawMeshTasksIndirectCommandNV
-
-
-data PhysicalDeviceMeshShaderFeaturesNV
-
-instance ToCStruct PhysicalDeviceMeshShaderFeaturesNV
-instance Show PhysicalDeviceMeshShaderFeaturesNV
-
-instance FromCStruct PhysicalDeviceMeshShaderFeaturesNV
-
-
-data PhysicalDeviceMeshShaderPropertiesNV
-
-instance ToCStruct PhysicalDeviceMeshShaderPropertiesNV
-instance Show PhysicalDeviceMeshShaderPropertiesNV
-
-instance FromCStruct PhysicalDeviceMeshShaderPropertiesNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_ray_tracing.hs b/src/Graphics/Vulkan/Extensions/VK_NV_ray_tracing.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_ray_tracing.hs
+++ /dev/null
@@ -1,2636 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_ray_tracing  ( compileDeferredNV
-                                                     , createAccelerationStructureNV
-                                                     , getAccelerationStructureMemoryRequirementsNV
-                                                     , cmdCopyAccelerationStructureNV
-                                                     , cmdBuildAccelerationStructureNV
-                                                     , cmdTraceRaysNV
-                                                     , getAccelerationStructureHandleNV
-                                                     , createRayTracingPipelinesNV
-                                                     , pattern STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV
-                                                     , pattern STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV
-                                                     , pattern SHADER_STAGE_RAYGEN_BIT_NV
-                                                     , pattern SHADER_STAGE_ANY_HIT_BIT_NV
-                                                     , pattern SHADER_STAGE_CLOSEST_HIT_BIT_NV
-                                                     , pattern SHADER_STAGE_MISS_BIT_NV
-                                                     , pattern SHADER_STAGE_INTERSECTION_BIT_NV
-                                                     , pattern SHADER_STAGE_CALLABLE_BIT_NV
-                                                     , pattern PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV
-                                                     , pattern PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV
-                                                     , pattern BUFFER_USAGE_RAY_TRACING_BIT_NV
-                                                     , pattern PIPELINE_BIND_POINT_RAY_TRACING_NV
-                                                     , pattern DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV
-                                                     , pattern ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV
-                                                     , pattern ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV
-                                                     , pattern QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
-                                                     , pattern OBJECT_TYPE_ACCELERATION_STRUCTURE_NV
-                                                     , pattern DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT
-                                                     , pattern INDEX_TYPE_NONE_NV
-                                                     , pattern RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV
-                                                     , pattern RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV
-                                                     , pattern RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV
-                                                     , pattern GEOMETRY_TYPE_TRIANGLES_NV
-                                                     , pattern GEOMETRY_TYPE_AABBS_NV
-                                                     , pattern ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV
-                                                     , pattern ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV
-                                                     , pattern GEOMETRY_OPAQUE_BIT_NV
-                                                     , pattern GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV
-                                                     , pattern GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV
-                                                     , pattern GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV
-                                                     , pattern GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV
-                                                     , pattern GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV
-                                                     , pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV
-                                                     , pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV
-                                                     , pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV
-                                                     , pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV
-                                                     , pattern BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV
-                                                     , pattern COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV
-                                                     , pattern COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV
-                                                     , pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
-                                                     , pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV
-                                                     , pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV
-                                                     , destroyAccelerationStructureNV
-                                                     , bindAccelerationStructureMemoryNV
-                                                     , cmdWriteAccelerationStructuresPropertiesNV
-                                                     , getRayTracingShaderGroupHandlesNV
-                                                     , pattern SHADER_UNUSED_NV
-                                                     , RayTracingShaderGroupCreateInfoNV(..)
-                                                     , RayTracingPipelineCreateInfoNV(..)
-                                                     , GeometryTrianglesNV(..)
-                                                     , GeometryAABBNV(..)
-                                                     , GeometryDataNV(..)
-                                                     , GeometryNV(..)
-                                                     , AccelerationStructureInfoNV(..)
-                                                     , AccelerationStructureCreateInfoNV(..)
-                                                     , AccelerationStructureMemoryRequirementsInfoNV(..)
-                                                     , PhysicalDeviceRayTracingPropertiesNV(..)
-                                                     , GeometryFlagsNV
-                                                     , GeometryInstanceFlagsNV
-                                                     , BuildAccelerationStructureFlagsNV
-                                                     , AccelerationStructureNV
-                                                     , GeometryFlagBitsNV
-                                                     , GeometryInstanceFlagBitsNV
-                                                     , BuildAccelerationStructureFlagBitsNV
-                                                     , CopyAccelerationStructureModeNV
-                                                     , AccelerationStructureTypeNV
-                                                     , GeometryTypeNV
-                                                     , RayTracingShaderGroupTypeNV
-                                                     , AccelerationStructureMemoryRequirementsTypeNV
-                                                     , BindAccelerationStructureMemoryInfoNV
-                                                     , WriteDescriptorSetAccelerationStructureNV
-                                                     , AabbPositionsNV
-                                                     , TransformMatrixNV
-                                                     , AccelerationStructureInstanceNV
-                                                     , NV_RAY_TRACING_SPEC_VERSION
-                                                     , pattern NV_RAY_TRACING_SPEC_VERSION
-                                                     , NV_RAY_TRACING_EXTENSION_NAME
-                                                     , pattern NV_RAY_TRACING_EXTENSION_NAME
-                                                     , AccelerationStructureKHR(..)
-                                                     , BindAccelerationStructureMemoryInfoKHR(..)
-                                                     , WriteDescriptorSetAccelerationStructureKHR(..)
-                                                     , AabbPositionsKHR(..)
-                                                     , TransformMatrixKHR(..)
-                                                     , AccelerationStructureInstanceKHR(..)
-                                                     , destroyAccelerationStructureKHR
-                                                     , bindAccelerationStructureMemoryKHR
-                                                     , cmdWriteAccelerationStructuresPropertiesKHR
-                                                     , getRayTracingShaderGroupHandlesKHR
-                                                     , DebugReportObjectTypeEXT(..)
-                                                     , GeometryInstanceFlagBitsKHR(..)
-                                                     , GeometryInstanceFlagsKHR
-                                                     , GeometryFlagBitsKHR(..)
-                                                     , GeometryFlagsKHR
-                                                     , BuildAccelerationStructureFlagBitsKHR(..)
-                                                     , BuildAccelerationStructureFlagsKHR
-                                                     , CopyAccelerationStructureModeKHR(..)
-                                                     , AccelerationStructureTypeKHR(..)
-                                                     , GeometryTypeKHR(..)
-                                                     , AccelerationStructureMemoryRequirementsTypeKHR(..)
-                                                     , RayTracingShaderGroupTypeKHR(..)
-                                                     , SHADER_UNUSED_KHR
-                                                     , pattern SHADER_UNUSED_KHR
-                                                     ) where
-
-import Control.Exception.Base (bracket)
-import Control.Monad.IO.Class (liftIO)
-import Data.Typeable (eqT)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Alloc (callocBytes)
-import Foreign.Marshal.Alloc (free)
-import GHC.Base (when)
-import GHC.IO (throwIO)
-import GHC.Ptr (castPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Foreign.C.Types (CSize(..))
-import Control.Monad.IO.Class (MonadIO)
-import Data.String (IsString)
-import Data.Type.Equality ((:~:)(Refl))
-import Data.Typeable (Typeable)
-import Foreign.C.Types (CSize)
-import Foreign.C.Types (CSize(CSize))
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (bindAccelerationStructureMemoryKHR)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (cmdWriteAccelerationStructuresPropertiesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (destroyAccelerationStructureKHR)
-import Graphics.Vulkan.CStruct.Extends (forgetExtensions)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (getRayTracingShaderGroupHandlesKHR)
-import Graphics.Vulkan.CStruct.Extends (peekSomeCStruct)
-import Graphics.Vulkan.CStruct.Extends (pokeSomeCStruct)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AabbPositionsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureInstanceKHR)
-import Graphics.Vulkan.Extensions.Handles (AccelerationStructureKHR)
-import Graphics.Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsTypeKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureTypeKHR)
-import Graphics.Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BindAccelerationStructureMemoryInfoKHR)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32(..))
-import Graphics.Vulkan.Core10.Handles (Buffer)
-import Graphics.Vulkan.Core10.Handles (Buffer(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
-import Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR(..))
-import Graphics.Vulkan.Core10.Handles (Device)
-import Graphics.Vulkan.Core10.Handles (Device(..))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBuildAccelerationStructureNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdCopyAccelerationStructureNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdTraceRaysNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCompileDeferredNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateAccelerationStructureNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCreateRayTracingPipelinesNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetAccelerationStructureHandleNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkGetAccelerationStructureMemoryRequirementsNV))
-import Graphics.Vulkan.Core10.BaseType (DeviceSize)
-import Graphics.Vulkan.Core10.Handles (Device_T)
-import Graphics.Vulkan.CStruct.Extends (Extends)
-import Graphics.Vulkan.CStruct.Extends (Extensible(..))
-import Graphics.Vulkan.Core10.Enums.Format (Format)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagBitsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryTypeKHR)
-import Graphics.Vulkan.Core10.Enums.IndexType (IndexType)
-import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2KHR)
-import Graphics.Vulkan.CStruct.Extends (PeekChain)
-import Graphics.Vulkan.CStruct.Extends (PeekChain(..))
-import Graphics.Vulkan.Core10.Handles (Pipeline)
-import Graphics.Vulkan.Core10.Handles (Pipeline(..))
-import Graphics.Vulkan.Core10.Handles (PipelineCache)
-import Graphics.Vulkan.Core10.Handles (PipelineCache(..))
-import Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfoEXT)
-import Graphics.Vulkan.Core10.Handles (PipelineLayout)
-import Graphics.Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)
-import Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct.Extends (PokeChain(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupTypeKHR)
-import Graphics.Vulkan.Core10.Enums.Result (Result)
-import Graphics.Vulkan.Core10.Enums.Result (Result(..))
-import Graphics.Vulkan.CStruct.Extends (SomeStruct)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (TransformMatrixKHR)
-import Graphics.Vulkan.Exception (VulkanException(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (WriteDescriptorSetAccelerationStructureKHR)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsTypeKHR(ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsTypeKHR(ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsTypeKHR(ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureTypeKHR(ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureTypeKHR(ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR))
-import Graphics.Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
-import Graphics.Vulkan.Core10.Enums.AccessFlagBits (AccessFlagBits(ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR))
-import Graphics.Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
-import Graphics.Vulkan.Core10.Enums.AccessFlagBits (AccessFlagBits(ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR))
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
-import Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlagBits(BUFFER_USAGE_RAY_TRACING_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR(COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR(COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR))
-import Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT))
-import Graphics.Vulkan.Core10.Enums.DescriptorType (DescriptorType(DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR(GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR(GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR(GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR(GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagBitsKHR(GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagBitsKHR(GEOMETRY_OPAQUE_BIT_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryTypeKHR(GEOMETRY_TYPE_AABBS_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryTypeKHR(GEOMETRY_TYPE_TRIANGLES_KHR))
-import Graphics.Vulkan.Core10.Enums.IndexType (IndexType(INDEX_TYPE_NONE_KHR))
-import Graphics.Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR))
-import Graphics.Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint(PIPELINE_BIND_POINT_RAY_TRACING_KHR))
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits(PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR))
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
-import Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits(PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR))
-import Graphics.Vulkan.Core10.Enums.QueryType (QueryType(QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupTypeKHR(RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupTypeKHR(RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupTypeKHR(RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_ANY_HIT_BIT_KHR))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_CALLABLE_BIT_KHR))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_CLOSEST_HIT_BIT_KHR))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_INTERSECTION_BIT_KHR))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_MISS_BIT_KHR))
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
-import Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_RAYGEN_BIT_KHR))
-import Graphics.Vulkan.Core10.APIConstants (pattern SHADER_UNUSED_KHR)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GEOMETRY_AABB_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GEOMETRY_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR))
-import Graphics.Vulkan.Core10.Enums.Result (Result(SUCCESS))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (bindAccelerationStructureMemoryKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (cmdWriteAccelerationStructuresPropertiesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (destroyAccelerationStructureKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (getRayTracingShaderGroupHandlesKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AabbPositionsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureInstanceKHR(..))
-import Graphics.Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsTypeKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureTypeKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BindAccelerationStructureMemoryInfoKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR(..))
-import Graphics.Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (GeometryTypeKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupTypeKHR(..))
-import Graphics.Vulkan.Core10.APIConstants (SHADER_UNUSED_KHR)
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (TransformMatrixKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_ray_tracing (WriteDescriptorSetAccelerationStructureKHR(..))
-import Graphics.Vulkan.Core10.APIConstants (pattern SHADER_UNUSED_KHR)
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCompileDeferredNV
-  :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> IO Result
-
--- | vkCompileDeferredNV - Deferred compilation of shaders
---
--- = Parameters
---
--- -   @device@ is the logical device containing the ray tracing pipeline.
---
--- -   @pipeline@ is the ray tracing pipeline object containing the
---     shaders.
---
--- -   @shader@ is the index of the shader to compile.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline'
-compileDeferredNV :: forall io . MonadIO io => Device -> Pipeline -> ("shader" ::: Word32) -> io ()
-compileDeferredNV device pipeline shader = liftIO $ do
-  let vkCompileDeferredNV' = mkVkCompileDeferredNV (pVkCompileDeferredNV (deviceCmds (device :: Device)))
-  r <- vkCompileDeferredNV' (deviceHandle (device)) (pipeline) (shader)
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateAccelerationStructureNV
-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureCreateInfoNV -> Ptr AllocationCallbacks -> Ptr AccelerationStructureNV -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureCreateInfoNV -> Ptr AllocationCallbacks -> Ptr AccelerationStructureNV -> IO Result
-
--- | vkCreateAccelerationStructureNV - Create a new acceleration structure
--- object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the buffer object.
---
--- -   @pCreateInfo@ is a pointer to a 'AccelerationStructureCreateInfoNV'
---     structure containing parameters affecting creation of the
---     acceleration structure.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pAccelerationStructure@ is a pointer to a 'AccelerationStructureNV'
---     handle in which the resulting acceleration structure object is
---     returned.
---
--- = Description
---
--- Similar to other objects in Vulkan, the acceleration structure creation
--- merely creates an object with a specific “shape” as specified by the
--- information in 'AccelerationStructureInfoNV' and @compactedSize@ in
--- @pCreateInfo@. Populating the data in the object after allocating and
--- binding memory is done with 'cmdBuildAccelerationStructureNV' and
--- 'cmdCopyAccelerationStructureNV'.
---
--- Acceleration structure creation uses the count and type information from
--- the geometries, but does not use the data references in the structures.
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     'AccelerationStructureCreateInfoNV' structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pAccelerationStructure@ /must/ be a valid pointer to a
---     'AccelerationStructureNV' handle
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
--- = See Also
---
--- 'AccelerationStructureCreateInfoNV', 'AccelerationStructureNV',
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-createAccelerationStructureNV :: forall io . MonadIO io => Device -> AccelerationStructureCreateInfoNV -> ("allocator" ::: Maybe AllocationCallbacks) -> io (AccelerationStructureNV)
-createAccelerationStructureNV device createInfo allocator = liftIO . evalContT $ do
-  let vkCreateAccelerationStructureNV' = mkVkCreateAccelerationStructureNV (pVkCreateAccelerationStructureNV (deviceCmds (device :: Device)))
-  pCreateInfo <- ContT $ withCStruct (createInfo)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPAccelerationStructure <- ContT $ bracket (callocBytes @AccelerationStructureNV 8) free
-  r <- lift $ vkCreateAccelerationStructureNV' (deviceHandle (device)) pCreateInfo pAllocator (pPAccelerationStructure)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pAccelerationStructure <- lift $ peek @AccelerationStructureNV pPAccelerationStructure
-  pure $ (pAccelerationStructure)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetAccelerationStructureMemoryRequirementsNV
-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoNV -> Ptr (MemoryRequirements2KHR a) -> IO ()) -> Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoNV -> Ptr (MemoryRequirements2KHR a) -> IO ()
-
--- | vkGetAccelerationStructureMemoryRequirementsNV - Get acceleration
--- structure memory requirements
---
--- = Parameters
---
--- -   @device@ is the logical device on which the acceleration structure
---     was created.
---
--- -   @pInfo@ specifies the acceleration structure to get memory
---     requirements for.
---
--- -   @pMemoryRequirements@ returns the requested acceleration structure
---     memory requirements.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'AccelerationStructureMemoryRequirementsInfoNV',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2KHR'
-getAccelerationStructureMemoryRequirementsNV :: forall a io . (PokeChain a, PeekChain a, MonadIO io) => Device -> AccelerationStructureMemoryRequirementsInfoNV -> io (MemoryRequirements2KHR a)
-getAccelerationStructureMemoryRequirementsNV device info = liftIO . evalContT $ do
-  let vkGetAccelerationStructureMemoryRequirementsNV' = mkVkGetAccelerationStructureMemoryRequirementsNV (pVkGetAccelerationStructureMemoryRequirementsNV (deviceCmds (device :: Device)))
-  pInfo <- ContT $ withCStruct (info)
-  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2KHR _))
-  lift $ vkGetAccelerationStructureMemoryRequirementsNV' (deviceHandle (device)) pInfo (pPMemoryRequirements)
-  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2KHR _) pPMemoryRequirements
-  pure $ (pMemoryRequirements)
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdCopyAccelerationStructureNV
-  :: FunPtr (Ptr CommandBuffer_T -> AccelerationStructureKHR -> AccelerationStructureKHR -> CopyAccelerationStructureModeKHR -> IO ()) -> Ptr CommandBuffer_T -> AccelerationStructureKHR -> AccelerationStructureKHR -> CopyAccelerationStructureModeKHR -> IO ()
-
--- | vkCmdCopyAccelerationStructureNV - Copy an acceleration structure
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @dst@ is a pointer to the target acceleration structure for the
---     copy.
---
--- -   @src@ is a pointer to the source acceleration structure for the
---     copy.
---
--- -   @mode@ is a
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureModeKHR'
---     value specifying additional operations to perform during the copy.
---
--- == Valid Usage
---
--- -   [[VUID-{refpage}-mode-03410]] @mode@ /must/ be
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR'
---     or
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR'
---
--- -   [[VUID-{refpage}-src-03411]] @src@ /must/ have been built with
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR'
---     if @mode@ is
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @dst@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   @src@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   @mode@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureModeKHR'
---     value
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Each of @commandBuffer@, @dst@, and @src@ /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureModeKHR'
-cmdCopyAccelerationStructureNV :: forall io . MonadIO io => CommandBuffer -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> CopyAccelerationStructureModeKHR -> io ()
-cmdCopyAccelerationStructureNV commandBuffer dst src mode = liftIO $ do
-  let vkCmdCopyAccelerationStructureNV' = mkVkCmdCopyAccelerationStructureNV (pVkCmdCopyAccelerationStructureNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdCopyAccelerationStructureNV' (commandBufferHandle (commandBuffer)) (dst) (src) (mode)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBuildAccelerationStructureNV
-  :: FunPtr (Ptr CommandBuffer_T -> Ptr AccelerationStructureInfoNV -> Buffer -> DeviceSize -> Bool32 -> AccelerationStructureKHR -> AccelerationStructureKHR -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Ptr AccelerationStructureInfoNV -> Buffer -> DeviceSize -> Bool32 -> AccelerationStructureKHR -> AccelerationStructureKHR -> Buffer -> DeviceSize -> IO ()
-
--- | vkCmdBuildAccelerationStructureNV - Build an acceleration structure
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pInfo@ contains the shared information for the acceleration
---     structure’s structure.
---
--- -   @instanceData@ is the buffer containing an array of
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureInstanceKHR'
---     structures defining acceleration structures. This parameter /must/
---     be @NULL@ for bottom level acceleration structures.
---
--- -   @instanceOffset@ is the offset in bytes (relative to the start of
---     @instanceData@) at which the instance data is located.
---
--- -   @update@ specifies whether to update the @dst@ acceleration
---     structure with the data in @src@.
---
--- -   @dst@ is a pointer to the target acceleration structure for the
---     build.
---
--- -   @src@ is a pointer to an existing acceleration structure that is to
---     be used to update the @dst@ acceleration structure.
---
--- -   @scratch@ is the 'Graphics.Vulkan.Core10.Handles.Buffer' that will
---     be used as scratch memory for the build.
---
--- -   @scratchOffset@ is the offset in bytes relative to the start of
---     @scratch@ that will be used as a scratch memory.
---
--- == Valid Usage
---
--- -   @geometryCount@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesNV'::@maxGeometryCount@
---
--- -   @dst@ /must/ have been created with compatible
---     'AccelerationStructureInfoNV' where
---     'AccelerationStructureInfoNV'::@type@ and
---     'AccelerationStructureInfoNV'::@flags@ are identical,
---     'AccelerationStructureInfoNV'::@instanceCount@ and
---     'AccelerationStructureInfoNV'::@geometryCount@ for @dst@ are greater
---     than or equal to the build size and each geometry in
---     'AccelerationStructureInfoNV'::@pGeometries@ for @dst@ has greater
---     than or equal to the number of vertices, indices, and AABBs
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', @src@ /must/
---     not be 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', @src@ /must/
---     have been built before with
---     'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV' set in
---     'AccelerationStructureInfoNV'::@flags@
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.FALSE', the @size@
---     member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'getAccelerationStructureMemoryRequirementsNV' with
---     'AccelerationStructureMemoryRequirementsInfoNV'::@accelerationStructure@
---     set to @dst@ and
---     'AccelerationStructureMemoryRequirementsInfoNV'::@type@ set to
---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV'
---     /must/ be less than or equal to the size of @scratch@ minus
---     @scratchOffset@
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', the @size@
---     member of the
---     'Graphics.Vulkan.Core10.MemoryManagement.MemoryRequirements'
---     structure returned from a call to
---     'getAccelerationStructureMemoryRequirementsNV' with
---     'AccelerationStructureMemoryRequirementsInfoNV'::@accelerationStructure@
---     set to @dst@ and
---     'AccelerationStructureMemoryRequirementsInfoNV'::@type@ set to
---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV'
---     /must/ be less than or equal to the size of @scratch@ minus
---     @scratchOffset@
---
--- -   @scratch@ /must/ have been created with
---     'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag
---
--- -   If @instanceData@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @instanceData@
---     /must/ have been created with 'BUFFER_USAGE_RAY_TRACING_BIT_NV'
---     usage flag
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', then objects
---     that were previously active /must/ not be made inactive as per
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims>
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', then objects
---     that were previously inactive /must/ not be made active as per
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims>
---
--- -   If @update@ is 'Graphics.Vulkan.Core10.BaseType.TRUE', the @src@ and
---     @dst@ objects /must/ either be the same object or not have any
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pInfo@ /must/ be a valid pointer to a valid
---     'AccelerationStructureInfoNV' structure
---
--- -   If @instanceData@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @instanceData@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @dst@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   If @src@ is not 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @src@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
---
--- -   @scratch@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer'
---     handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Each of @commandBuffer@, @dst@, @instanceData@, @scratch@, and @src@
---     that are valid handles of non-ignored parameters /must/ have been
---     created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'AccelerationStructureInfoNV',
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdBuildAccelerationStructureNV :: forall io . MonadIO io => CommandBuffer -> AccelerationStructureInfoNV -> ("instanceData" ::: Buffer) -> ("instanceOffset" ::: DeviceSize) -> ("update" ::: Bool) -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> ("scratch" ::: Buffer) -> ("scratchOffset" ::: DeviceSize) -> io ()
-cmdBuildAccelerationStructureNV commandBuffer info instanceData instanceOffset update dst src scratch scratchOffset = liftIO . evalContT $ do
-  let vkCmdBuildAccelerationStructureNV' = mkVkCmdBuildAccelerationStructureNV (pVkCmdBuildAccelerationStructureNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  pInfo <- ContT $ withCStruct (info)
-  lift $ vkCmdBuildAccelerationStructureNV' (commandBufferHandle (commandBuffer)) pInfo (instanceData) (instanceOffset) (boolToBool32 (update)) (dst) (src) (scratch) (scratchOffset)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdTraceRaysNV
-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> Word32 -> Word32 -> IO ()
-
--- | vkCmdTraceRaysNV - Initialize a ray tracing dispatch
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @raygenShaderBindingTableBuffer@ is the buffer object that holds the
---     shader binding table data for the ray generation shader stage.
---
--- -   @raygenShaderBindingOffset@ is the offset in bytes (relative to
---     @raygenShaderBindingTableBuffer@) of the ray generation shader being
---     used for the trace.
---
--- -   @missShaderBindingTableBuffer@ is the buffer object that holds the
---     shader binding table data for the miss shader stage.
---
--- -   @missShaderBindingOffset@ is the offset in bytes (relative to
---     @missShaderBindingTableBuffer@) of the miss shader being used for
---     the trace.
---
--- -   @missShaderBindingStride@ is the size in bytes of each shader
---     binding table record in @missShaderBindingTableBuffer@.
---
--- -   @hitShaderBindingTableBuffer@ is the buffer object that holds the
---     shader binding table data for the hit shader stages.
---
--- -   @hitShaderBindingOffset@ is the offset in bytes (relative to
---     @hitShaderBindingTableBuffer@) of the hit shader group being used
---     for the trace.
---
--- -   @hitShaderBindingStride@ is the size in bytes of each shader binding
---     table record in @hitShaderBindingTableBuffer@.
---
--- -   @callableShaderBindingTableBuffer@ is the buffer object that holds
---     the shader binding table data for the callable shader stage.
---
--- -   @callableShaderBindingOffset@ is the offset in bytes (relative to
---     @callableShaderBindingTableBuffer@) of the callable shader being
---     used for the trace.
---
--- -   @callableShaderBindingStride@ is the size in bytes of each shader
---     binding table record in @callableShaderBindingTableBuffer@.
---
--- -   @width@ is the width of the ray trace query dimensions.
---
--- -   @height@ is height of the ray trace query dimensions.
---
--- -   @depth@ is depth of the ray trace query dimensions.
---
--- = Description
---
--- When the command is executed, a ray generation group of @width@ ×
--- @height@ × @depth@ rays is assembled.
---
--- == Valid Usage
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of
---     this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is accessed using
---     atomic operations as a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
---
--- -   If a 'Graphics.Vulkan.Core10.Handles.ImageView' is sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command, then the image view’s
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
---     /must/ contain
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as
---     a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering, as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.ImageView' being sampled with
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'
---     with a reduction mode of either
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
---     or
---     'Graphics.Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
---     as a result of this command /must/ have a
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.ImageViewType' and
---     format that supports cubic filtering together with minmax filtering,
---     as specified by
---     'Graphics.Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
---     returned by
---     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
---
--- -   Any 'Graphics.Vulkan.Core10.Handles.Image' created with a
---     'Graphics.Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
---     'Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
---     sampled as a result of this command /must/ only be sampled using a
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode'
---     of
---     'Graphics.Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
---
--- -   For each set /n/ that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a descriptor set /must/ have been bound
---     to /n/ at the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for set /n/, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   For each push constant that is statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command, a push constant value /must/ have been
---     set for the same pipeline bind point, with a
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' that is compatible
---     for push constants, with the
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' used to create the
---     current 'Graphics.Vulkan.Core10.Handles.Pipeline', as described in
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
---
--- -   Descriptors in each bound descriptor set, specified via
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
---     /must/ be valid if they are statically used by the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
---     point used by this command
---
--- -   A valid pipeline /must/ be bound to the pipeline bind point used by
---     this command
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command requires any dynamic state,
---     that state /must/ have been set for @commandBuffer@, and done so
---     after any previously bound pipeline with the corresponding state not
---     specified as dynamic
---
--- -   There /must/ not have been any calls to dynamic state setting
---     commands for any state not specified as dynamic in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command, since that pipeline was
---     bound
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used to sample
---     from any 'Graphics.Vulkan.Core10.Handles.Image' with a
---     'Graphics.Vulkan.Core10.Handles.ImageView' of the type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---     or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY',
---     in any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in
---     any shader stage
---
--- -   If the 'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a
---     'Graphics.Vulkan.Core10.Handles.Sampler' object that uses
---     unnormalized coordinates, that sampler /must/ not be used with any
---     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@
---     instructions that includes a LOD bias or any offset values, in any
---     shader stage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a uniform buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
---     feature is not enabled, and if the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point used by this command accesses a storage buffer,
---     it /must/ not access values outside of the range of the buffer as
---     specified in the descriptor set bound to the same pipeline bind
---     point
---
--- -   If @commandBuffer@ is an unprotected command buffer, any resource
---     accessed by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     a protected resource
---
--- -   @raygenShaderBindingOffset@ /must/ be less than the size of
---     @raygenShaderBindingTableBuffer@
---
--- -   @raygenShaderBindingOffset@ /must/ be a multiple of
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @missShaderBindingOffset@ /must/ be less than the size of
---     @missShaderBindingTableBuffer@
---
--- -   @missShaderBindingOffset@ /must/ be a multiple of
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @hitShaderBindingOffset@ /must/ be less than the size of
---     @hitShaderBindingTableBuffer@
---
--- -   @hitShaderBindingOffset@ /must/ be a multiple of
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @callableShaderBindingOffset@ /must/ be less than the size of
---     @callableShaderBindingTableBuffer@
---
--- -   @callableShaderBindingOffset@ /must/ be a multiple of
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
---
--- -   @missShaderBindingStride@ /must/ be a multiple of
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
---
--- -   @hitShaderBindingStride@ /must/ be a multiple of
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
---
--- -   @callableShaderBindingStride@ /must/ be a multiple of
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
---
--- -   @missShaderBindingStride@ /must/ be less than or equal to
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
---
--- -   @hitShaderBindingStride@ /must/ be less than or equal to
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
---
--- -   @callableShaderBindingStride@ /must/ be less than or equal to
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
---
--- -   Any shader group handle referenced by this call /must/ have been
---     queried from the currently bound ray tracing shader pipeline
---
--- -   This command /must/ not cause a shader call instruction to be
---     executed from a shader invocation with a
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth>
---     greater than the value of @maxRecursionDepth@ used to create the
---     bound ray tracing pipeline
---
--- -   If @commandBuffer@ is a protected command buffer, any resource
---     written to by the 'Graphics.Vulkan.Core10.Handles.Pipeline' object
---     bound to the pipeline bind point used by this command /must/ not be
---     an unprotected resource
---
--- -   If @commandBuffer@ is a protected command buffer, pipeline stages
---     other than the framebuffer-space and compute stages in the
---     'Graphics.Vulkan.Core10.Handles.Pipeline' object bound to the
---     pipeline bind point /must/ not write to any resource
---
--- -   @width@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
---
--- -   @height@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
---
--- -   @depth@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @raygenShaderBindingTableBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   If @missShaderBindingTableBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @missShaderBindingTableBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   If @hitShaderBindingTableBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @hitShaderBindingTableBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   If @callableShaderBindingTableBuffer@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @callableShaderBindingTableBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support compute operations
---
--- -   This command /must/ only be called outside of a render pass instance
---
--- -   Each of @callableShaderBindingTableBuffer@, @commandBuffer@,
---     @hitShaderBindingTableBuffer@, @missShaderBindingTableBuffer@, and
---     @raygenShaderBindingTableBuffer@ that are valid handles of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize'
-cmdTraceRaysNV :: forall io . MonadIO io => CommandBuffer -> ("raygenShaderBindingTableBuffer" ::: Buffer) -> ("raygenShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingTableBuffer" ::: Buffer) -> ("missShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingStride" ::: DeviceSize) -> ("hitShaderBindingTableBuffer" ::: Buffer) -> ("hitShaderBindingOffset" ::: DeviceSize) -> ("hitShaderBindingStride" ::: DeviceSize) -> ("callableShaderBindingTableBuffer" ::: Buffer) -> ("callableShaderBindingOffset" ::: DeviceSize) -> ("callableShaderBindingStride" ::: DeviceSize) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> io ()
-cmdTraceRaysNV commandBuffer raygenShaderBindingTableBuffer raygenShaderBindingOffset missShaderBindingTableBuffer missShaderBindingOffset missShaderBindingStride hitShaderBindingTableBuffer hitShaderBindingOffset hitShaderBindingStride callableShaderBindingTableBuffer callableShaderBindingOffset callableShaderBindingStride width height depth = liftIO $ do
-  let vkCmdTraceRaysNV' = mkVkCmdTraceRaysNV (pVkCmdTraceRaysNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdTraceRaysNV' (commandBufferHandle (commandBuffer)) (raygenShaderBindingTableBuffer) (raygenShaderBindingOffset) (missShaderBindingTableBuffer) (missShaderBindingOffset) (missShaderBindingStride) (hitShaderBindingTableBuffer) (hitShaderBindingOffset) (hitShaderBindingStride) (callableShaderBindingTableBuffer) (callableShaderBindingOffset) (callableShaderBindingStride) (width) (height) (depth)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkGetAccelerationStructureHandleNV
-  :: FunPtr (Ptr Device_T -> AccelerationStructureKHR -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> AccelerationStructureKHR -> CSize -> Ptr () -> IO Result
-
--- | vkGetAccelerationStructureHandleNV - Get opaque acceleration structure
--- handle
---
--- = Parameters
---
--- -   @device@ is the logical device that owns the acceleration
---     structures.
---
--- -   @accelerationStructure@ is the acceleration structure.
---
--- -   @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.
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
--- = See Also
---
--- 'Graphics.Vulkan.Extensions.Handles.AccelerationStructureKHR',
--- 'Graphics.Vulkan.Core10.Handles.Device'
-getAccelerationStructureHandleNV :: forall io . MonadIO io => Device -> AccelerationStructureKHR -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> io ()
-getAccelerationStructureHandleNV device accelerationStructure dataSize data' = liftIO $ do
-  let vkGetAccelerationStructureHandleNV' = mkVkGetAccelerationStructureHandleNV (pVkGetAccelerationStructureHandleNV (deviceCmds (device :: Device)))
-  r <- vkGetAccelerationStructureHandleNV' (deviceHandle (device)) (accelerationStructure) (CSize (dataSize)) (data')
-  when (r < SUCCESS) (throwIO (VulkanException r))
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCreateRayTracingPipelinesNV
-  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (RayTracingPipelineCreateInfoNV a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (RayTracingPipelineCreateInfoNV a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
-
--- | vkCreateRayTracingPipelinesNV - Creates a new ray tracing pipeline
--- object
---
--- = Parameters
---
--- -   @device@ is the logical device that creates the ray tracing
---     pipelines.
---
--- -   @pipelineCache@ is either
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', indicating that
---     pipeline caching is disabled, or the handle of a valid
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>
---     object, in which case use of that cache is enabled for the duration
---     of the command.
---
--- -   @createInfoCount@ is the length of the @pCreateInfos@ and
---     @pPipelines@ arrays.
---
--- -   @pCreateInfos@ is a pointer to an array of
---     'RayTracingPipelineCreateInfoNV' structures.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
---     chapter.
---
--- -   @pPipelines@ is a pointer to an array in which the resulting ray
---     tracing pipeline objects are returned.
---
--- == Valid Usage
---
--- -   If the @flags@ member of any element of @pCreateInfos@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and the @basePipelineIndex@ member of that same element is not
---     @-1@, @basePipelineIndex@ /must/ be less than the index into
---     @pCreateInfos@ that corresponds to that element
---
--- -   If the @flags@ member of any element of @pCreateInfos@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, the base pipeline /must/ have been created with the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
---     flag set
---
--- -   If @pipelineCache@ was created with
---     'Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
---     host access to @pipelineCache@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Device'
---     handle
---
--- -   If @pipelineCache@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @pipelineCache@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.PipelineCache'
---     handle
---
--- -   @pCreateInfos@ /must/ be a valid pointer to an array of
---     @createInfoCount@ valid 'RayTracingPipelineCreateInfoNV' structures
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid
---     'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
---     structure
---
--- -   @pPipelines@ /must/ be a valid pointer to an array of
---     @createInfoCount@ 'Graphics.Vulkan.Core10.Handles.Pipeline' handles
---
--- -   @createInfoCount@ /must/ be greater than @0@
---
--- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
---     allocated, or retrieved from @device@
---
--- == Return Codes
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.SUCCESS'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'
---
--- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
---
---     -   'Graphics.Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
--- 'Graphics.Vulkan.Core10.Handles.Device',
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Handles.PipelineCache',
--- 'RayTracingPipelineCreateInfoNV'
-createRayTracingPipelinesNV :: forall a io . (PokeChain a, MonadIO io) => Device -> PipelineCache -> ("createInfos" ::: Vector (RayTracingPipelineCreateInfoNV a)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, ("pipelines" ::: Vector Pipeline))
-createRayTracingPipelinesNV device pipelineCache createInfos allocator = liftIO . evalContT $ do
-  let vkCreateRayTracingPipelinesNV' = mkVkCreateRayTracingPipelinesNV (pVkCreateRayTracingPipelinesNV (deviceCmds (device :: Device)))
-  pPCreateInfos <- ContT $ allocaBytesAligned @(RayTracingPipelineCreateInfoNV _) ((Data.Vector.length (createInfos)) * 80) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCreateInfos `plusPtr` (80 * (i)) :: Ptr (RayTracingPipelineCreateInfoNV _)) (e) . ($ ())) (createInfos)
-  pAllocator <- case (allocator) of
-    Nothing -> pure nullPtr
-    Just j -> ContT $ withCStruct (j)
-  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
-  r <- lift $ vkCreateRayTracingPipelinesNV' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (pPCreateInfos) pAllocator (pPPipelines)
-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
-  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
-  pure $ (r, pPipelines)
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV"
-pattern STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV = STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR
-
-
--- No documentation found for TopLevel "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV"
-pattern STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV = STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR
-
-
--- No documentation found for TopLevel "VK_SHADER_STAGE_RAYGEN_BIT_NV"
-pattern SHADER_STAGE_RAYGEN_BIT_NV = SHADER_STAGE_RAYGEN_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_SHADER_STAGE_ANY_HIT_BIT_NV"
-pattern SHADER_STAGE_ANY_HIT_BIT_NV = SHADER_STAGE_ANY_HIT_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV"
-pattern SHADER_STAGE_CLOSEST_HIT_BIT_NV = SHADER_STAGE_CLOSEST_HIT_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_SHADER_STAGE_MISS_BIT_NV"
-pattern SHADER_STAGE_MISS_BIT_NV = SHADER_STAGE_MISS_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_SHADER_STAGE_INTERSECTION_BIT_NV"
-pattern SHADER_STAGE_INTERSECTION_BIT_NV = SHADER_STAGE_INTERSECTION_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_SHADER_STAGE_CALLABLE_BIT_NV"
-pattern SHADER_STAGE_CALLABLE_BIT_NV = SHADER_STAGE_CALLABLE_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV"
-pattern PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV"
-pattern PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_BUFFER_USAGE_RAY_TRACING_BIT_NV"
-pattern BUFFER_USAGE_RAY_TRACING_BIT_NV = BUFFER_USAGE_RAY_TRACING_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_PIPELINE_BIND_POINT_RAY_TRACING_NV"
-pattern PIPELINE_BIND_POINT_RAY_TRACING_NV = PIPELINE_BIND_POINT_RAY_TRACING_KHR
-
-
--- No documentation found for TopLevel "VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV"
-pattern DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR
-
-
--- No documentation found for TopLevel "VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV"
-pattern ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV"
-pattern ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV"
-pattern QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV = QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
-
-
--- No documentation found for TopLevel "VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV"
-pattern OBJECT_TYPE_ACCELERATION_STRUCTURE_NV = OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR
-
-
--- No documentation found for TopLevel "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT"
-pattern DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT = DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT
-
-
--- No documentation found for TopLevel "VK_INDEX_TYPE_NONE_NV"
-pattern INDEX_TYPE_NONE_NV = INDEX_TYPE_NONE_KHR
-
-
--- No documentation found for TopLevel "VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV"
-pattern RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV = RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR
-
-
--- No documentation found for TopLevel "VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV"
-pattern RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV = RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR
-
-
--- No documentation found for TopLevel "VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV"
-pattern RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV = RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR
-
-
--- No documentation found for TopLevel "VK_GEOMETRY_TYPE_TRIANGLES_NV"
-pattern GEOMETRY_TYPE_TRIANGLES_NV = GEOMETRY_TYPE_TRIANGLES_KHR
-
-
--- No documentation found for TopLevel "VK_GEOMETRY_TYPE_AABBS_NV"
-pattern GEOMETRY_TYPE_AABBS_NV = GEOMETRY_TYPE_AABBS_KHR
-
-
--- No documentation found for TopLevel "VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV"
-pattern ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV = ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
-
-
--- No documentation found for TopLevel "VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV"
-pattern ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV = ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
-
-
--- No documentation found for TopLevel "VK_GEOMETRY_OPAQUE_BIT_NV"
-pattern GEOMETRY_OPAQUE_BIT_NV = GEOMETRY_OPAQUE_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV"
-pattern GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV = GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV"
-pattern GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV = GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV"
-pattern GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV = GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV"
-pattern GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV = GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV"
-pattern GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV = GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV"
-pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV = BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV"
-pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV = BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV"
-pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV = BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV"
-pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV = BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV"
-pattern BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV = BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR
-
-
--- No documentation found for TopLevel "VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV"
-pattern COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV = COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR
-
-
--- No documentation found for TopLevel "VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV"
-pattern COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV = COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR
-
-
--- No documentation found for TopLevel "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV"
-pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV = ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR
-
-
--- No documentation found for TopLevel "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV"
-pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV = ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR
-
-
--- No documentation found for TopLevel "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV"
-pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV = ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR
-
-
--- No documentation found for TopLevel "vkDestroyAccelerationStructureNV"
-destroyAccelerationStructureNV = destroyAccelerationStructureKHR
-
-
--- No documentation found for TopLevel "vkBindAccelerationStructureMemoryNV"
-bindAccelerationStructureMemoryNV = bindAccelerationStructureMemoryKHR
-
-
--- No documentation found for TopLevel "vkCmdWriteAccelerationStructuresPropertiesNV"
-cmdWriteAccelerationStructuresPropertiesNV = cmdWriteAccelerationStructuresPropertiesKHR
-
-
--- No documentation found for TopLevel "vkGetRayTracingShaderGroupHandlesNV"
-getRayTracingShaderGroupHandlesNV = getRayTracingShaderGroupHandlesKHR
-
-
--- No documentation found for TopLevel "VK_SHADER_UNUSED_NV"
-pattern SHADER_UNUSED_NV = SHADER_UNUSED_KHR
-
-
--- | VkRayTracingShaderGroupCreateInfoNV - Structure specifying shaders in a
--- shader group
---
--- == Valid Usage
---
--- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV' then
---     @generalShader@ /must/ be a valid index into
---     'RayTracingPipelineCreateInfoNV'::@pStages@ referring to a shader of
---     'SHADER_STAGE_RAYGEN_BIT_NV', 'SHADER_STAGE_MISS_BIT_NV', or
---     'SHADER_STAGE_CALLABLE_BIT_NV'
---
--- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV' then
---     @closestHitShader@, @anyHitShader@, and @intersectionShader@ /must/
---     be 'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_NV'
---
--- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV'
---     then @intersectionShader@ /must/ be a valid index into
---     'RayTracingPipelineCreateInfoNV'::@pStages@ referring to a shader of
---     'SHADER_STAGE_INTERSECTION_BIT_NV'
---
--- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV'
---     then @intersectionShader@ /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_NV'
---
--- -   @closestHitShader@ /must/ be either
---     'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' or a valid
---     index into 'RayTracingPipelineCreateInfoNV'::@pStages@ referring to
---     a shader of 'SHADER_STAGE_CLOSEST_HIT_BIT_NV'
---
--- -   @anyHitShader@ /must/ be either
---     'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' or a valid
---     index into 'RayTracingPipelineCreateInfoNV'::@pStages@ referring to
---     a shader of 'SHADER_STAGE_ANY_HIT_BIT_NV'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @type@ /must/ be a valid
---     'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingShaderGroupTypeKHR'
---     value
---
--- = See Also
---
--- 'RayTracingPipelineCreateInfoNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingShaderGroupTypeKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data RayTracingShaderGroupCreateInfoNV = RayTracingShaderGroupCreateInfoNV
-  { -- | @type@ is the type of hit group specified in this structure.
-    type' :: RayTracingShaderGroupTypeKHR
-  , -- | @generalShader@ is the index of the ray generation, miss, or callable
-    -- shader from 'RayTracingPipelineCreateInfoNV'::@pStages@ in the group if
-    -- the shader group has @type@ of
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV', and
-    -- 'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' otherwise.
-    generalShader :: Word32
-  , -- | @closestHitShader@ is the optional index of the closest hit shader from
-    -- 'RayTracingPipelineCreateInfoNV'::@pStages@ in the group if the shader
-    -- group has @type@ of
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV' or
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV', and
-    -- 'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' otherwise.
-    closestHitShader :: Word32
-  , -- | @anyHitShader@ is the optional index of the any-hit shader from
-    -- 'RayTracingPipelineCreateInfoNV'::@pStages@ in the group if the shader
-    -- group has @type@ of
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV' or
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV', and
-    -- 'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' otherwise.
-    anyHitShader :: Word32
-  , -- | @intersectionShader@ is the index of the intersection shader from
-    -- 'RayTracingPipelineCreateInfoNV'::@pStages@ in the group if the shader
-    -- group has @type@ of
-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV', and
-    -- 'Graphics.Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' otherwise.
-    intersectionShader :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show RayTracingShaderGroupCreateInfoNV
-
-instance ToCStruct RayTracingShaderGroupCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RayTracingShaderGroupCreateInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (type')
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (generalShader)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (closestHitShader)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (anyHitShader)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (intersectionShader)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct RayTracingShaderGroupCreateInfoNV where
-  peekCStruct p = do
-    type' <- peek @RayTracingShaderGroupTypeKHR ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR))
-    generalShader <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    closestHitShader <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    anyHitShader <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    intersectionShader <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pure $ RayTracingShaderGroupCreateInfoNV
-             type' generalShader closestHitShader anyHitShader intersectionShader
-
-instance Storable RayTracingShaderGroupCreateInfoNV where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero RayTracingShaderGroupCreateInfoNV where
-  zero = RayTracingShaderGroupCreateInfoNV
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkRayTracingPipelineCreateInfoNV - Structure specifying parameters of a
--- newly created ray tracing pipeline
---
--- = Description
---
--- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
--- described in more detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
---
--- == Valid Usage
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is @-1@, @basePipelineHandle@ /must/
---     be a valid handle to a ray tracing
---     'Graphics.Vulkan.Core10.Handles.Pipeline'
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @basePipelineIndex@ /must/ be a valid index into the calling
---     command’s @pCreateInfos@ parameter
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineIndex@ is not @-1@, @basePipelineHandle@
---     /must/ be 'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE'
---
--- -   If @flags@ contains the
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
---     flag, and @basePipelineHandle@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE',
---     @basePipelineIndex@ /must/ be @-1@
---
--- -   The @stage@ member of at least one element of @pStages@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR'
---
--- -   The shader code for the entry points identified by @pStages@, and
---     the rest of the state identified by this structure /must/ adhere to
---     the pipeline linking rules described in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>
---     chapter
---
--- -   @layout@ /must/ be
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
---     with all shaders specified in @pStages@
---
--- -   The number of resources in @layout@ accessible to each shader stage
---     that is used by the pipeline /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
---     feature is not enabled, @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
---     or
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
---
--- -   @maxRecursionDepth@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesNV'::@maxRecursionDepth@
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
---
--- -   @flags@ /must/ not include
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
---
--- -   @flags@ /must/ not include both
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DEFER_COMPILE_BIT_NV'
---     and
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
---     at the same time
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV'
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'
---
--- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
---     unique
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
---     values
---
--- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@
---     valid
---     'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'
---     structures
---
--- -   @pGroups@ /must/ be a valid pointer to an array of @groupCount@
---     valid 'RayTracingShaderGroupCreateInfoNV' structures
---
--- -   @layout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.PipelineLayout' handle
---
--- -   @stageCount@ /must/ be greater than @0@
---
--- -   @groupCount@ /must/ be greater than @0@
---
--- -   Both of @basePipelineHandle@, and @layout@ that are valid handles of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Pipeline',
--- 'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
--- 'Graphics.Vulkan.Core10.Handles.PipelineLayout',
--- 'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
--- 'RayTracingShaderGroupCreateInfoNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createRayTracingPipelinesNV'
-data RayTracingPipelineCreateInfoNV (es :: [Type]) = RayTracingPipelineCreateInfoNV
-  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
-    next :: Chain es
-  , -- | @flags@ is a bitmask of
-    -- 'Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
-    -- specifying how the pipeline will be generated.
-    flags :: PipelineCreateFlags
-  , -- | @pStages@ is an array of size @stageCount@ structures of type
-    -- 'Graphics.Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'
-    -- describing the set of the shader stages to be included in the ray
-    -- tracing pipeline.
-    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
-  , -- | @pGroups@ is an array of size @groupCount@ structures of type
-    -- 'RayTracingShaderGroupCreateInfoNV' describing the set of the shader
-    -- stages to be included in each shader group in the ray tracing pipeline.
-    groups :: Vector RayTracingShaderGroupCreateInfoNV
-  , -- | @maxRecursionDepth@ is the
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth maximum recursion depth>
-    -- of shaders executed by this pipeline.
-    maxRecursionDepth :: Word32
-  , -- | @layout@ is the description of binding locations used by both the
-    -- pipeline and descriptor sets used with the pipeline.
-    layout :: PipelineLayout
-  , -- | @basePipelineHandle@ is a pipeline to derive from.
-    basePipelineHandle :: Pipeline
-  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
-    -- as a pipeline to derive from.
-    basePipelineIndex :: Int32
-  }
-  deriving (Typeable)
-deriving instance Show (Chain es) => Show (RayTracingPipelineCreateInfoNV es)
-
-instance Extensible RayTracingPipelineCreateInfoNV where
-  extensibleType = STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV
-  setNext x next = x{next = next}
-  getNext RayTracingPipelineCreateInfoNV{..} = next
-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RayTracingPipelineCreateInfoNV e => b) -> Maybe b
-  extends _ f
-    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f
-    | otherwise = Nothing
-
-instance PokeChain es => ToCStruct (RayTracingPipelineCreateInfoNV es) where
-  withCStruct x f = allocaBytesAligned 80 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RayTracingPipelineCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV)
-    pNext'' <- fmap castPtr . ContT $ withChain (next)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))
-    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (groups)) :: Word32))
-    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoNV ((Data.Vector.length (groups)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (40 * (i)) :: Ptr RayTracingShaderGroupCreateInfoNV) (e) . ($ ())) (groups)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoNV))) (pPGroups')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (maxRecursionDepth)
-    lift $ poke ((p `plusPtr` 56 :: Ptr PipelineLayout)) (layout)
-    lift $ poke ((p `plusPtr` 64 :: Ptr Pipeline)) (basePipelineHandle)
-    lift $ poke ((p `plusPtr` 72 :: Ptr Int32)) (basePipelineIndex)
-    lift $ f
-  cStructSize = 80
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV)
-    pNext' <- fmap castPtr . ContT $ withZeroChain @es
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
-    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (mempty)) * 48) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
-    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoNV ((Data.Vector.length (mempty)) * 40) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (40 * (i)) :: Ptr RayTracingShaderGroupCreateInfoNV) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoNV))) (pPGroups')
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 56 :: Ptr PipelineLayout)) (zero)
-    lift $ poke ((p `plusPtr` 72 :: Ptr Int32)) (zero)
-    lift $ f
-
-instance PeekChain es => FromCStruct (RayTracingPipelineCreateInfoNV es) where
-  peekCStruct p = do
-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
-    next <- peekChain (castPtr pNext)
-    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
-    stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo a))))
-    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
-    groupCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    pGroups <- peek @(Ptr RayTracingShaderGroupCreateInfoNV) ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoNV)))
-    pGroups' <- generateM (fromIntegral groupCount) (\i -> peekCStruct @RayTracingShaderGroupCreateInfoNV ((pGroups `advancePtrBytes` (40 * (i)) :: Ptr RayTracingShaderGroupCreateInfoNV)))
-    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    layout <- peek @PipelineLayout ((p `plusPtr` 56 :: Ptr PipelineLayout))
-    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 64 :: Ptr Pipeline))
-    basePipelineIndex <- peek @Int32 ((p `plusPtr` 72 :: Ptr Int32))
-    pure $ RayTracingPipelineCreateInfoNV
-             next flags pStages' pGroups' maxRecursionDepth layout basePipelineHandle basePipelineIndex
-
-instance es ~ '[] => Zero (RayTracingPipelineCreateInfoNV es) where
-  zero = RayTracingPipelineCreateInfoNV
-           ()
-           zero
-           mempty
-           mempty
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkGeometryTrianglesNV - Structure specifying a triangle geometry in a
--- bottom-level acceleration structure
---
--- = Description
---
--- If @indexType@ is 'INDEX_TYPE_NONE_NV', then this structure describes a
--- set of triangles determined by @vertexCount@. Otherwise, this structure
--- describes a set of indexed triangles determined by @indexCount@.
---
--- == Valid Usage
---
--- -   @vertexOffset@ /must/ be less than the size of @vertexData@
---
--- -   @vertexOffset@ /must/ be a multiple of the component size of
---     @vertexFormat@
---
--- -   @vertexFormat@ /must/ be one of
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R32G32B32_SFLOAT',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R32G32_SFLOAT',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16B16_SFLOAT',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16_SFLOAT',
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16_SNORM', or
---     'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R16G16B16_SNORM'
---
--- -   @indexOffset@ /must/ be less than the size of @indexData@
---
--- -   @indexOffset@ /must/ be a multiple of the element size of
---     @indexType@
---
--- -   @indexType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',
---     'Graphics.Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or
---     'INDEX_TYPE_NONE_NV'
---
--- -   @indexData@ /must/ be
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE' if @indexType@ is
---     'INDEX_TYPE_NONE_NV'
---
--- -   @indexData@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.Buffer' handle if @indexType@ is not
---     'INDEX_TYPE_NONE_NV'
---
--- -   @indexCount@ /must/ be @0@ if @indexType@ is 'INDEX_TYPE_NONE_NV'
---
--- -   @transformOffset@ /must/ be less than the size of @transformData@
---
--- -   @transformOffset@ /must/ be a multiple of @16@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   If @vertexData@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @vertexData@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @vertexFormat@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.Format.Format' value
---
--- -   If @indexData@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @indexData@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   @indexType@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.IndexType.IndexType' value
---
--- -   If @transformData@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @transformData@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- -   Each of @indexData@, @transformData@, and @vertexData@ that are
---     valid handles of non-ignored parameters /must/ have been created,
---     allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.Format.Format', 'GeometryDataNV',
--- 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data GeometryTrianglesNV = GeometryTrianglesNV
-  { -- | @vertexData@ is the buffer containing vertex data for this geometry.
-    vertexData :: Buffer
-  , -- | @vertexOffset@ is the offset in bytes within @vertexData@ containing
-    -- vertex data for this geometry.
-    vertexOffset :: DeviceSize
-  , -- | @vertexCount@ is the number of valid vertices.
-    vertexCount :: Word32
-  , -- | @vertexStride@ is the stride in bytes between each vertex.
-    vertexStride :: DeviceSize
-  , -- | @vertexFormat@ is a 'Graphics.Vulkan.Core10.Enums.Format.Format'
-    -- describing the format of each vertex element.
-    vertexFormat :: Format
-  , -- | @indexData@ is the buffer containing index data for this geometry.
-    indexData :: Buffer
-  , -- | @indexOffset@ is the offset in bytes within @indexData@ containing index
-    -- data for this geometry.
-    indexOffset :: DeviceSize
-  , -- | @indexCount@ is the number of indices to include in this geometry.
-    indexCount :: Word32
-  , -- | @indexType@ is a 'Graphics.Vulkan.Core10.Enums.IndexType.IndexType'
-    -- describing the format of each index.
-    indexType :: IndexType
-  , -- | @transformData@ is an optional buffer containing an 'TransformMatrixNV'
-    -- structure defining a transformation to be applied to this geometry.
-    transformData :: Buffer
-  , -- | @transformOffset@ is the offset in bytes in @transformData@ of the
-    -- transform information described above.
-    transformOffset :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show GeometryTrianglesNV
-
-instance ToCStruct GeometryTrianglesNV where
-  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p GeometryTrianglesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Buffer)) (vertexData)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (vertexOffset)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (vertexCount)
-    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (vertexStride)
-    poke ((p `plusPtr` 48 :: Ptr Format)) (vertexFormat)
-    poke ((p `plusPtr` 56 :: Ptr Buffer)) (indexData)
-    poke ((p `plusPtr` 64 :: Ptr DeviceSize)) (indexOffset)
-    poke ((p `plusPtr` 72 :: Ptr Word32)) (indexCount)
-    poke ((p `plusPtr` 76 :: Ptr IndexType)) (indexType)
-    poke ((p `plusPtr` 80 :: Ptr Buffer)) (transformData)
-    poke ((p `plusPtr` 88 :: Ptr DeviceSize)) (transformOffset)
-    f
-  cStructSize = 96
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr Format)) (zero)
-    poke ((p `plusPtr` 64 :: Ptr DeviceSize)) (zero)
-    poke ((p `plusPtr` 72 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 76 :: Ptr IndexType)) (zero)
-    poke ((p `plusPtr` 88 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct GeometryTrianglesNV where
-  peekCStruct p = do
-    vertexData <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
-    vertexOffset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
-    vertexCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
-    vertexStride <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
-    vertexFormat <- peek @Format ((p `plusPtr` 48 :: Ptr Format))
-    indexData <- peek @Buffer ((p `plusPtr` 56 :: Ptr Buffer))
-    indexOffset <- peek @DeviceSize ((p `plusPtr` 64 :: Ptr DeviceSize))
-    indexCount <- peek @Word32 ((p `plusPtr` 72 :: Ptr Word32))
-    indexType <- peek @IndexType ((p `plusPtr` 76 :: Ptr IndexType))
-    transformData <- peek @Buffer ((p `plusPtr` 80 :: Ptr Buffer))
-    transformOffset <- peek @DeviceSize ((p `plusPtr` 88 :: Ptr DeviceSize))
-    pure $ GeometryTrianglesNV
-             vertexData vertexOffset vertexCount vertexStride vertexFormat indexData indexOffset indexCount indexType transformData transformOffset
-
-instance Storable GeometryTrianglesNV where
-  sizeOf ~_ = 96
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero GeometryTrianglesNV where
-  zero = GeometryTrianglesNV
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkGeometryAABBNV - Structure specifying axis-aligned bounding box
--- geometry in a bottom-level acceleration structure
---
--- = Description
---
--- The AABB data in memory is six 32-bit floats consisting of the minimum
--- x, y, and z values followed by the maximum x, y, and z values.
---
--- == Valid Usage
---
--- -   @offset@ /must/ be less than the size of @aabbData@
---
--- -   @offset@ /must/ be a multiple of @8@
---
--- -   @stride@ /must/ be a multiple of @8@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GEOMETRY_AABB_NV'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   If @aabbData@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @aabbData@ /must/
---     be a valid 'Graphics.Vulkan.Core10.Handles.Buffer' handle
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.Buffer',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize', 'GeometryDataNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data GeometryAABBNV = GeometryAABBNV
-  { -- | @aabbData@ is the buffer containing axis-aligned bounding box data.
-    aabbData :: Buffer
-  , -- | @numAABBs@ is the number of AABBs in this geometry.
-    numAABBs :: Word32
-  , -- | @stride@ is the stride in bytes between AABBs in @aabbData@.
-    stride :: Word32
-  , -- | @offset@ is the offset in bytes of the first AABB in @aabbData@.
-    offset :: DeviceSize
-  }
-  deriving (Typeable)
-deriving instance Show GeometryAABBNV
-
-instance ToCStruct GeometryAABBNV where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p GeometryAABBNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_AABB_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Buffer)) (aabbData)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (numAABBs)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (stride)
-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (offset)
-    f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_AABB_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
-    f
-
-instance FromCStruct GeometryAABBNV where
-  peekCStruct p = do
-    aabbData <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
-    numAABBs <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    stride <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    offset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
-    pure $ GeometryAABBNV
-             aabbData numAABBs stride offset
-
-instance Storable GeometryAABBNV where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero GeometryAABBNV where
-  zero = GeometryAABBNV
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkGeometryDataNV - Structure specifying geometry in a bottom-level
--- acceleration structure
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'GeometryAABBNV', 'GeometryNV', 'GeometryTrianglesNV'
-data GeometryDataNV = GeometryDataNV
-  { -- | @triangles@ /must/ be a valid 'GeometryTrianglesNV' structure
-    triangles :: GeometryTrianglesNV
-  , -- | @aabbs@ /must/ be a valid 'GeometryAABBNV' structure
-    aabbs :: GeometryAABBNV
-  }
-  deriving (Typeable)
-deriving instance Show GeometryDataNV
-
-instance ToCStruct GeometryDataNV where
-  withCStruct x f = allocaBytesAligned 136 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p GeometryDataNV{..} f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr GeometryTrianglesNV)) (triangles) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 96 :: Ptr GeometryAABBNV)) (aabbs) . ($ ())
-    lift $ f
-  cStructSize = 136
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr GeometryTrianglesNV)) (zero) . ($ ())
-    ContT $ pokeCStruct ((p `plusPtr` 96 :: Ptr GeometryAABBNV)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct GeometryDataNV where
-  peekCStruct p = do
-    triangles <- peekCStruct @GeometryTrianglesNV ((p `plusPtr` 0 :: Ptr GeometryTrianglesNV))
-    aabbs <- peekCStruct @GeometryAABBNV ((p `plusPtr` 96 :: Ptr GeometryAABBNV))
-    pure $ GeometryDataNV
-             triangles aabbs
-
-instance Zero GeometryDataNV where
-  zero = GeometryDataNV
-           zero
-           zero
-
-
--- | VkGeometryNV - Structure specifying a geometry in a bottom-level
--- acceleration structure
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'AccelerationStructureInfoNV', 'GeometryDataNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.GeometryFlagsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.GeometryTypeKHR',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data GeometryNV = GeometryNV
-  { -- | @geometryType@ /must/ be a valid
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.GeometryTypeKHR' value
-    geometryType :: GeometryTypeKHR
-  , -- | @geometry@ /must/ be a valid 'GeometryDataNV' structure
-    geometry :: GeometryDataNV
-  , -- | @flags@ /must/ be a valid combination of
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.GeometryFlagBitsKHR'
-    -- values
-    flags :: GeometryFlagsKHR
-  }
-  deriving (Typeable)
-deriving instance Show GeometryNV
-
-instance ToCStruct GeometryNV where
-  withCStruct x f = allocaBytesAligned 168 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p GeometryNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (geometryType)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr GeometryDataNV)) (geometry) . ($ ())
-    lift $ poke ((p `plusPtr` 160 :: Ptr GeometryFlagsKHR)) (flags)
-    lift $ f
-  cStructSize = 168
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr GeometryDataNV)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct GeometryNV where
-  peekCStruct p = do
-    geometryType <- peek @GeometryTypeKHR ((p `plusPtr` 16 :: Ptr GeometryTypeKHR))
-    geometry <- peekCStruct @GeometryDataNV ((p `plusPtr` 24 :: Ptr GeometryDataNV))
-    flags <- peek @GeometryFlagsKHR ((p `plusPtr` 160 :: Ptr GeometryFlagsKHR))
-    pure $ GeometryNV
-             geometryType geometry flags
-
-instance Zero GeometryNV where
-  zero = GeometryNV
-           zero
-           zero
-           zero
-
-
--- | VkAccelerationStructureInfoNV - Structure specifying the parameters of
--- acceleration structure object
---
--- = Description
---
--- 'AccelerationStructureInfoNV' contains information that is used both for
--- acceleration structure creation with 'createAccelerationStructureNV' and
--- in combination with the actual geometric data to build the acceleration
--- structure with 'cmdBuildAccelerationStructureNV'.
---
--- == Valid Usage
---
--- -   @geometryCount@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesNV'::@maxGeometryCount@
---
--- -   @instanceCount@ /must/ be less than or equal to
---     'PhysicalDeviceRayTracingPropertiesNV'::@maxInstanceCount@
---
--- -   The total number of triangles in all geometries /must/ be less than
---     or equal to
---     'PhysicalDeviceRayTracingPropertiesNV'::@maxTriangleCount@
---
--- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV' then
---     @geometryCount@ /must/ be @0@
---
--- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV' then
---     @instanceCount@ /must/ be @0@
---
--- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV' then the
---     @geometryType@ member of each geometry in @pGeometries@ /must/ be
---     the same
---
--- -   @flags@ /must/ be a valid combination of
---     'BuildAccelerationStructureFlagBitsNV' values
---
--- -   If @flags@ has the
---     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV' bit set,
---     then it /must/ not have the
---     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV' bit set
---
--- -   @scratch@ /must/ have been created with
---     'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag
---
--- -   If @instanceData@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @instanceData@
---     /must/ have been created with 'BUFFER_USAGE_RAY_TRACING_BIT_NV'
---     usage flag
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @type@ /must/ be a valid 'AccelerationStructureTypeNV' value
---
--- -   @flags@ /must/ be @0@
---
--- -   If @geometryCount@ is not @0@, @pGeometries@ /must/ be a valid
---     pointer to an array of @geometryCount@ valid 'GeometryNV' structures
---
--- = See Also
---
--- 'AccelerationStructureCreateInfoNV', 'AccelerationStructureTypeNV',
--- 'BuildAccelerationStructureFlagsNV', 'GeometryNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'cmdBuildAccelerationStructureNV'
-data AccelerationStructureInfoNV = AccelerationStructureInfoNV
-  { -- | @type@ is a 'AccelerationStructureTypeNV' value specifying the type of
-    -- acceleration structure that will be created.
-    type' :: AccelerationStructureTypeNV
-  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsNV'
-    -- specifying additional parameters of the acceleration structure.
-    flags :: BuildAccelerationStructureFlagsNV
-  , -- | @instanceCount@ specifies the number of instances that will be in the
-    -- new acceleration structure.
-    instanceCount :: Word32
-  , -- | @pGeometries@ is a pointer to an array of @geometryCount@ 'GeometryNV'
-    -- structures containing the scene data being passed into the acceleration
-    -- structure.
-    geometries :: Vector GeometryNV
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureInfoNV
-
-instance ToCStruct AccelerationStructureInfoNV where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeNV)) (type')
-    lift $ poke ((p `plusPtr` 20 :: Ptr BuildAccelerationStructureFlagsNV)) (flags)
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (instanceCount)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (geometries)) :: Word32))
-    pPGeometries' <- ContT $ allocaBytesAligned @GeometryNV ((Data.Vector.length (geometries)) * 168) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometries' `plusPtr` (168 * (i)) :: Ptr GeometryNV) (e) . ($ ())) (geometries)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr GeometryNV))) (pPGeometries')
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeNV)) (zero)
-    pPGeometries' <- ContT $ allocaBytesAligned @GeometryNV ((Data.Vector.length (mempty)) * 168) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometries' `plusPtr` (168 * (i)) :: Ptr GeometryNV) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr GeometryNV))) (pPGeometries')
-    lift $ f
-
-instance FromCStruct AccelerationStructureInfoNV where
-  peekCStruct p = do
-    type' <- peek @AccelerationStructureTypeNV ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeNV))
-    flags <- peek @BuildAccelerationStructureFlagsNV ((p `plusPtr` 20 :: Ptr BuildAccelerationStructureFlagsNV))
-    instanceCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    geometryCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    pGeometries <- peek @(Ptr GeometryNV) ((p `plusPtr` 32 :: Ptr (Ptr GeometryNV)))
-    pGeometries' <- generateM (fromIntegral geometryCount) (\i -> peekCStruct @GeometryNV ((pGeometries `advancePtrBytes` (168 * (i)) :: Ptr GeometryNV)))
-    pure $ AccelerationStructureInfoNV
-             type' flags instanceCount pGeometries'
-
-instance Zero AccelerationStructureInfoNV where
-  zero = AccelerationStructureInfoNV
-           zero
-           zero
-           zero
-           mempty
-
-
--- | VkAccelerationStructureCreateInfoNV - Structure specifying the
--- parameters of a newly created acceleration structure object
---
--- == Valid Usage
---
--- -   If @compactedSize@ is not @0@ then both @info.geometryCount@ and
---     @info.instanceCount@ /must/ be @0@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV'
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @info@ /must/ be a valid 'AccelerationStructureInfoNV' structure
---
--- = See Also
---
--- 'AccelerationStructureInfoNV',
--- 'Graphics.Vulkan.Core10.BaseType.DeviceSize',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'createAccelerationStructureNV'
-data AccelerationStructureCreateInfoNV = AccelerationStructureCreateInfoNV
-  { -- | @compactedSize@ is the size from the result of
-    -- 'cmdWriteAccelerationStructuresPropertiesNV' if this acceleration
-    -- structure is going to be the target of a compacting copy.
-    compactedSize :: DeviceSize
-  , -- | @info@ is the 'AccelerationStructureInfoNV' structure specifying further
-    -- parameters of the created acceleration structure.
-    info :: AccelerationStructureInfoNV
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureCreateInfoNV
-
-instance ToCStruct AccelerationStructureCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (compactedSize)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureInfoNV)) (info) . ($ ())
-    lift $ f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureInfoNV)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct AccelerationStructureCreateInfoNV where
-  peekCStruct p = do
-    compactedSize <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
-    info <- peekCStruct @AccelerationStructureInfoNV ((p `plusPtr` 24 :: Ptr AccelerationStructureInfoNV))
-    pure $ AccelerationStructureCreateInfoNV
-             compactedSize info
-
-instance Zero AccelerationStructureCreateInfoNV where
-  zero = AccelerationStructureCreateInfoNV
-           zero
-           zero
-
-
--- | VkAccelerationStructureMemoryRequirementsInfoNV - Structure specifying
--- acceleration to query for memory requirements
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'AccelerationStructureMemoryRequirementsTypeNV',
--- 'AccelerationStructureNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'getAccelerationStructureMemoryRequirementsNV'
-data AccelerationStructureMemoryRequirementsInfoNV = AccelerationStructureMemoryRequirementsInfoNV
-  { -- | @type@ /must/ be a valid 'AccelerationStructureMemoryRequirementsTypeNV'
-    -- value
-    type' :: AccelerationStructureMemoryRequirementsTypeNV
-  , -- | @accelerationStructure@ /must/ be a valid 'AccelerationStructureNV'
-    -- handle
-    accelerationStructure :: AccelerationStructureNV
-  }
-  deriving (Typeable)
-deriving instance Show AccelerationStructureMemoryRequirementsInfoNV
-
-instance ToCStruct AccelerationStructureMemoryRequirementsInfoNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p AccelerationStructureMemoryRequirementsInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeNV)) (type')
-    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureNV)) (accelerationStructure)
-    f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeNV)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureNV)) (zero)
-    f
-
-instance FromCStruct AccelerationStructureMemoryRequirementsInfoNV where
-  peekCStruct p = do
-    type' <- peek @AccelerationStructureMemoryRequirementsTypeNV ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeNV))
-    accelerationStructure <- peek @AccelerationStructureNV ((p `plusPtr` 24 :: Ptr AccelerationStructureNV))
-    pure $ AccelerationStructureMemoryRequirementsInfoNV
-             type' accelerationStructure
-
-instance Storable AccelerationStructureMemoryRequirementsInfoNV where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero AccelerationStructureMemoryRequirementsInfoNV where
-  zero = AccelerationStructureMemoryRequirementsInfoNV
-           zero
-           zero
-
-
--- | VkPhysicalDeviceRayTracingPropertiesNV - Properties of the physical
--- device for ray tracing
---
--- = Description
---
--- If the 'PhysicalDeviceRayTracingPropertiesNV' structure is included in
--- the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- Limits specified by this structure /must/ match those specified with the
--- same name in
--- 'Graphics.Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceRayTracingPropertiesNV = PhysicalDeviceRayTracingPropertiesNV
-  { -- | @shaderGroupHandleSize@ size in bytes of the shader header.
-    shaderGroupHandleSize :: Word32
-  , -- | @maxRecursionDepth@ is the maximum number of levels of recursion allowed
-    -- in a trace command.
-    maxRecursionDepth :: Word32
-  , -- | @maxShaderGroupStride@ is the maximum stride in bytes allowed between
-    -- shader groups in the SBT.
-    maxShaderGroupStride :: Word32
-  , -- | @shaderGroupBaseAlignment@ is the required alignment in bytes for the
-    -- base of the SBTs.
-    shaderGroupBaseAlignment :: Word32
-  , -- | @maxGeometryCount@ is the maximum number of geometries in the bottom
-    -- level acceleration structure.
-    maxGeometryCount :: Word64
-  , -- | @maxInstanceCount@ is the maximum number of instances in the top level
-    -- acceleration structure.
-    maxInstanceCount :: Word64
-  , -- | @maxTriangleCount@ is the maximum number of triangles in all geometries
-    -- in the bottom level acceleration structure.
-    maxTriangleCount :: Word64
-  , -- | @maxDescriptorSetAccelerationStructures@ is the maximum number of
-    -- acceleration structure descriptors that are allowed in a descriptor set.
-    maxDescriptorSetAccelerationStructures :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceRayTracingPropertiesNV
-
-instance ToCStruct PhysicalDeviceRayTracingPropertiesNV where
-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceRayTracingPropertiesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (shaderGroupHandleSize)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxRecursionDepth)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxShaderGroupStride)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (shaderGroupBaseAlignment)
-    poke ((p `plusPtr` 32 :: Ptr Word64)) (maxGeometryCount)
-    poke ((p `plusPtr` 40 :: Ptr Word64)) (maxInstanceCount)
-    poke ((p `plusPtr` 48 :: Ptr Word64)) (maxTriangleCount)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (maxDescriptorSetAccelerationStructures)
-    f
-  cStructSize = 64
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 40 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 48 :: Ptr Word64)) (zero)
-    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceRayTracingPropertiesNV where
-  peekCStruct p = do
-    shaderGroupHandleSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    maxShaderGroupStride <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    shaderGroupBaseAlignment <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    maxGeometryCount <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))
-    maxInstanceCount <- peek @Word64 ((p `plusPtr` 40 :: Ptr Word64))
-    maxTriangleCount <- peek @Word64 ((p `plusPtr` 48 :: Ptr Word64))
-    maxDescriptorSetAccelerationStructures <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
-    pure $ PhysicalDeviceRayTracingPropertiesNV
-             shaderGroupHandleSize maxRecursionDepth maxShaderGroupStride shaderGroupBaseAlignment maxGeometryCount maxInstanceCount maxTriangleCount maxDescriptorSetAccelerationStructures
-
-instance Storable PhysicalDeviceRayTracingPropertiesNV where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceRayTracingPropertiesNV where
-  zero = PhysicalDeviceRayTracingPropertiesNV
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-           zero
-
-
--- No documentation found for TopLevel "VkGeometryFlagsNV"
-type GeometryFlagsNV = GeometryFlagsKHR
-
-
--- No documentation found for TopLevel "VkGeometryInstanceFlagsNV"
-type GeometryInstanceFlagsNV = GeometryInstanceFlagsKHR
-
-
--- No documentation found for TopLevel "VkBuildAccelerationStructureFlagsNV"
-type BuildAccelerationStructureFlagsNV = BuildAccelerationStructureFlagsKHR
-
-
--- No documentation found for TopLevel "VkAccelerationStructureNV"
-type AccelerationStructureNV = AccelerationStructureKHR
-
-
--- No documentation found for TopLevel "VkGeometryFlagBitsNV"
-type GeometryFlagBitsNV = GeometryFlagBitsKHR
-
-
--- No documentation found for TopLevel "VkGeometryInstanceFlagBitsNV"
-type GeometryInstanceFlagBitsNV = GeometryInstanceFlagBitsKHR
-
-
--- No documentation found for TopLevel "VkBuildAccelerationStructureFlagBitsNV"
-type BuildAccelerationStructureFlagBitsNV = BuildAccelerationStructureFlagBitsKHR
-
-
--- No documentation found for TopLevel "VkCopyAccelerationStructureModeNV"
-type CopyAccelerationStructureModeNV = CopyAccelerationStructureModeKHR
-
-
--- No documentation found for TopLevel "VkAccelerationStructureTypeNV"
-type AccelerationStructureTypeNV = AccelerationStructureTypeKHR
-
-
--- No documentation found for TopLevel "VkGeometryTypeNV"
-type GeometryTypeNV = GeometryTypeKHR
-
-
--- No documentation found for TopLevel "VkRayTracingShaderGroupTypeNV"
-type RayTracingShaderGroupTypeNV = RayTracingShaderGroupTypeKHR
-
-
--- No documentation found for TopLevel "VkAccelerationStructureMemoryRequirementsTypeNV"
-type AccelerationStructureMemoryRequirementsTypeNV = AccelerationStructureMemoryRequirementsTypeKHR
-
-
--- No documentation found for TopLevel "VkBindAccelerationStructureMemoryInfoNV"
-type BindAccelerationStructureMemoryInfoNV = BindAccelerationStructureMemoryInfoKHR
-
-
--- No documentation found for TopLevel "VkWriteDescriptorSetAccelerationStructureNV"
-type WriteDescriptorSetAccelerationStructureNV = WriteDescriptorSetAccelerationStructureKHR
-
-
--- No documentation found for TopLevel "VkAabbPositionsNV"
-type AabbPositionsNV = AabbPositionsKHR
-
-
--- No documentation found for TopLevel "VkTransformMatrixNV"
-type TransformMatrixNV = TransformMatrixKHR
-
-
--- No documentation found for TopLevel "VkAccelerationStructureInstanceNV"
-type AccelerationStructureInstanceNV = AccelerationStructureInstanceKHR
-
-
-type NV_RAY_TRACING_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_NV_RAY_TRACING_SPEC_VERSION"
-pattern NV_RAY_TRACING_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_RAY_TRACING_SPEC_VERSION = 3
-
-
-type NV_RAY_TRACING_EXTENSION_NAME = "VK_NV_ray_tracing"
-
--- No documentation found for TopLevel "VK_NV_RAY_TRACING_EXTENSION_NAME"
-pattern NV_RAY_TRACING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_RAY_TRACING_EXTENSION_NAME = "VK_NV_ray_tracing"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_ray_tracing.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_ray_tracing.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_ray_tracing.hs-boot
+++ /dev/null
@@ -1,105 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_ray_tracing  ( AccelerationStructureCreateInfoNV
-                                                     , AccelerationStructureInfoNV
-                                                     , AccelerationStructureMemoryRequirementsInfoNV
-                                                     , GeometryAABBNV
-                                                     , GeometryDataNV
-                                                     , GeometryNV
-                                                     , GeometryTrianglesNV
-                                                     , PhysicalDeviceRayTracingPropertiesNV
-                                                     , RayTracingPipelineCreateInfoNV
-                                                     , RayTracingShaderGroupCreateInfoNV
-                                                     , AccelerationStructureNV
-                                                     ) where
-
-import Data.Kind (Type)
-import {-# SOURCE #-} Graphics.Vulkan.Extensions.Handles (AccelerationStructureKHR)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (Chain)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PeekChain)
-import {-# SOURCE #-} Graphics.Vulkan.CStruct.Extends (PokeChain)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data AccelerationStructureCreateInfoNV
-
-instance ToCStruct AccelerationStructureCreateInfoNV
-instance Show AccelerationStructureCreateInfoNV
-
-instance FromCStruct AccelerationStructureCreateInfoNV
-
-
-data AccelerationStructureInfoNV
-
-instance ToCStruct AccelerationStructureInfoNV
-instance Show AccelerationStructureInfoNV
-
-instance FromCStruct AccelerationStructureInfoNV
-
-
-data AccelerationStructureMemoryRequirementsInfoNV
-
-instance ToCStruct AccelerationStructureMemoryRequirementsInfoNV
-instance Show AccelerationStructureMemoryRequirementsInfoNV
-
-instance FromCStruct AccelerationStructureMemoryRequirementsInfoNV
-
-
-data GeometryAABBNV
-
-instance ToCStruct GeometryAABBNV
-instance Show GeometryAABBNV
-
-instance FromCStruct GeometryAABBNV
-
-
-data GeometryDataNV
-
-instance ToCStruct GeometryDataNV
-instance Show GeometryDataNV
-
-instance FromCStruct GeometryDataNV
-
-
-data GeometryNV
-
-instance ToCStruct GeometryNV
-instance Show GeometryNV
-
-instance FromCStruct GeometryNV
-
-
-data GeometryTrianglesNV
-
-instance ToCStruct GeometryTrianglesNV
-instance Show GeometryTrianglesNV
-
-instance FromCStruct GeometryTrianglesNV
-
-
-data PhysicalDeviceRayTracingPropertiesNV
-
-instance ToCStruct PhysicalDeviceRayTracingPropertiesNV
-instance Show PhysicalDeviceRayTracingPropertiesNV
-
-instance FromCStruct PhysicalDeviceRayTracingPropertiesNV
-
-
-type role RayTracingPipelineCreateInfoNV nominal
-data RayTracingPipelineCreateInfoNV (es :: [Type])
-
-instance PokeChain es => ToCStruct (RayTracingPipelineCreateInfoNV es)
-instance Show (Chain es) => Show (RayTracingPipelineCreateInfoNV es)
-
-instance PeekChain es => FromCStruct (RayTracingPipelineCreateInfoNV es)
-
-
-data RayTracingShaderGroupCreateInfoNV
-
-instance ToCStruct RayTracingShaderGroupCreateInfoNV
-instance Show RayTracingShaderGroupCreateInfoNV
-
-instance FromCStruct RayTracingShaderGroupCreateInfoNV
-
-
--- No documentation found for TopLevel "VkAccelerationStructureNV"
-type AccelerationStructureNV = AccelerationStructureKHR
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_representative_fragment_test.hs b/src/Graphics/Vulkan/Extensions/VK_NV_representative_fragment_test.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_representative_fragment_test.hs
+++ /dev/null
@@ -1,168 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test  ( PhysicalDeviceRepresentativeFragmentTestFeaturesNV(..)
-                                                                      , PipelineRepresentativeFragmentTestStateCreateInfoNV(..)
-                                                                      , NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION
-                                                                      , pattern NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION
-                                                                      , NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME
-                                                                      , pattern NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME
-                                                                      ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV))
--- | VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV - Structure
--- describing the representative fragment test features that can be
--- supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceRepresentativeFragmentTestFeaturesNV'
--- structure describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceRepresentativeFragmentTestFeaturesNV' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceRepresentativeFragmentTestFeaturesNV' /can/ also be
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to enable the feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceRepresentativeFragmentTestFeaturesNV = PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-  { -- | @representativeFragmentTest@ indicates whether the implementation
-    -- supports the representative fragment test. See
-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-rep-frag-test Representative Fragment Test>.
-    representativeFragmentTest :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-
-instance ToCStruct PhysicalDeviceRepresentativeFragmentTestFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceRepresentativeFragmentTestFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (representativeFragmentTest))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceRepresentativeFragmentTestFeaturesNV where
-  peekCStruct p = do
-    representativeFragmentTest <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-             (bool32ToBool representativeFragmentTest)
-
-instance Storable PhysicalDeviceRepresentativeFragmentTestFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceRepresentativeFragmentTestFeaturesNV where
-  zero = PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-           zero
-
-
--- | VkPipelineRepresentativeFragmentTestStateCreateInfoNV - Structure
--- specifying representative fragment test
---
--- = Description
---
--- If this structure is not present, @representativeFragmentTestEnable@ is
--- considered to be 'Graphics.Vulkan.Core10.BaseType.FALSE', and the
--- representative fragment test is disabled.
---
--- If
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-early-mode early fragment tests>
--- are not enabled in the active fragment shader, the representative
--- fragment shader test has no effect, even if enabled.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineRepresentativeFragmentTestStateCreateInfoNV = PipelineRepresentativeFragmentTestStateCreateInfoNV
-  { -- | @representativeFragmentTestEnable@ controls whether the representative
-    -- fragment test is enabled.
-    representativeFragmentTestEnable :: Bool }
-  deriving (Typeable)
-deriving instance Show PipelineRepresentativeFragmentTestStateCreateInfoNV
-
-instance ToCStruct PipelineRepresentativeFragmentTestStateCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineRepresentativeFragmentTestStateCreateInfoNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (representativeFragmentTestEnable))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PipelineRepresentativeFragmentTestStateCreateInfoNV where
-  peekCStruct p = do
-    representativeFragmentTestEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PipelineRepresentativeFragmentTestStateCreateInfoNV
-             (bool32ToBool representativeFragmentTestEnable)
-
-instance Storable PipelineRepresentativeFragmentTestStateCreateInfoNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PipelineRepresentativeFragmentTestStateCreateInfoNV where
-  zero = PipelineRepresentativeFragmentTestStateCreateInfoNV
-           zero
-
-
-type NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION"
-pattern NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION = 2
-
-
-type NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME = "VK_NV_representative_fragment_test"
-
--- No documentation found for TopLevel "VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME"
-pattern NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME = "VK_NV_representative_fragment_test"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_representative_fragment_test.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_representative_fragment_test.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_representative_fragment_test.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test  ( PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-                                                                      , PipelineRepresentativeFragmentTestStateCreateInfoNV
-                                                                      ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-
-instance ToCStruct PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-instance Show PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-
-instance FromCStruct PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-
-
-data PipelineRepresentativeFragmentTestStateCreateInfoNV
-
-instance ToCStruct PipelineRepresentativeFragmentTestStateCreateInfoNV
-instance Show PipelineRepresentativeFragmentTestStateCreateInfoNV
-
-instance FromCStruct PipelineRepresentativeFragmentTestStateCreateInfoNV
-
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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_sample_mask_override_coverage.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_sample_mask_override_coverage  ( NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION
-                                                                       , pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION
-                                                                       , NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME
-                                                                       , pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME
-                                                                       ) where
-
-import Data.String (IsString)
-
-type NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION"
-pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION = 1
-
-
-type NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME = "VK_NV_sample_mask_override_coverage"
-
--- No documentation found for TopLevel "VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME"
-pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME = "VK_NV_sample_mask_override_coverage"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_scissor_exclusive.hs b/src/Graphics/Vulkan/Extensions/VK_NV_scissor_exclusive.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_scissor_exclusive.hs
+++ /dev/null
@@ -1,336 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive  ( cmdSetExclusiveScissorNV
-                                                           , PhysicalDeviceExclusiveScissorFeaturesNV(..)
-                                                           , PipelineViewportExclusiveScissorStateCreateInfoNV(..)
-                                                           , NV_SCISSOR_EXCLUSIVE_SPEC_VERSION
-                                                           , pattern NV_SCISSOR_EXCLUSIVE_SPEC_VERSION
-                                                           , NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME
-                                                           , pattern NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME
-                                                           ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Utils (maybePeek)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Either (Either)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetExclusiveScissorNV))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.CommandBufferBuilding (Rect2D)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetExclusiveScissorNV
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()
-
--- | vkCmdSetExclusiveScissorNV - Set the dynamic exclusive scissor
--- rectangles on a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @firstExclusiveScissor@ is the index of the first exclusive scissor
---     rectangle whose state is updated by the command.
---
--- -   @exclusiveScissorCount@ is the number of exclusive scissor
---     rectangles updated by the command.
---
--- -   @pExclusiveScissors@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
---     defining exclusive scissor rectangles.
---
--- = Description
---
--- The scissor rectangles taken from element i of @pExclusiveScissors@
--- replace the current state for the scissor index @firstExclusiveScissor@
--- + i, for i in [0, @exclusiveScissorCount@).
---
--- Each scissor rectangle is described by a
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' 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
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-exclusiveScissor exclusive scissor>
---     feature /must/ be enabled
---
--- -   @firstExclusiveScissor@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
---
--- -   The sum of @firstExclusiveScissor@ and @exclusiveScissorCount@
---     /must/ be between @1@ and
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
---     inclusive
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @firstExclusiveScissor@ /must/ be @0@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @exclusiveScissorCount@ /must/ be @1@
---
--- -   The @x@ and @y@ members of @offset@ in each member of
---     @pExclusiveScissors@ /must/ be greater than or equal to @0@
---
--- -   Evaluation of (@offset.x@ + @extent.width@) for each member of
---     @pExclusiveScissors@ /must/ not cause a signed integer addition
---     overflow
---
--- -   Evaluation of (@offset.y@ + @extent.height@) for each member of
---     @pExclusiveScissors@ /must/ not cause a signed integer addition
---     overflow
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pExclusiveScissors@ /must/ be a valid pointer to an array of
---     @exclusiveScissorCount@
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   @exclusiveScissorCount@ /must/ be greater than @0@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D'
-cmdSetExclusiveScissorNV :: forall io . MonadIO io => CommandBuffer -> ("firstExclusiveScissor" ::: Word32) -> ("exclusiveScissors" ::: Vector Rect2D) -> io ()
-cmdSetExclusiveScissorNV commandBuffer firstExclusiveScissor exclusiveScissors = liftIO . evalContT $ do
-  let vkCmdSetExclusiveScissorNV' = mkVkCmdSetExclusiveScissorNV (pVkCmdSetExclusiveScissorNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPExclusiveScissors <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (exclusiveScissors)) * 16) 4
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPExclusiveScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (exclusiveScissors)
-  lift $ vkCmdSetExclusiveScissorNV' (commandBufferHandle (commandBuffer)) (firstExclusiveScissor) ((fromIntegral (Data.Vector.length $ (exclusiveScissors)) :: Word32)) (pPExclusiveScissors)
-  pure $ ()
-
-
--- | VkPhysicalDeviceExclusiveScissorFeaturesNV - Structure describing
--- exclusive scissor features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceExclusiveScissorFeaturesNV' structure
--- describe the following features:
---
--- = Description
---
--- See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-exclusive-scissor Exclusive Scissor Test>
--- for more information.
---
--- If the 'PhysicalDeviceExclusiveScissorFeaturesNV' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceExclusiveScissorFeaturesNV' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable the feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceExclusiveScissorFeaturesNV = PhysicalDeviceExclusiveScissorFeaturesNV
-  { -- | @exclusiveScissor@ indicates that the implementation supports the
-    -- exclusive scissor test.
-    exclusiveScissor :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceExclusiveScissorFeaturesNV
-
-instance ToCStruct PhysicalDeviceExclusiveScissorFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceExclusiveScissorFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (exclusiveScissor))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceExclusiveScissorFeaturesNV where
-  peekCStruct p = do
-    exclusiveScissor <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceExclusiveScissorFeaturesNV
-             (bool32ToBool exclusiveScissor)
-
-instance Storable PhysicalDeviceExclusiveScissorFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceExclusiveScissorFeaturesNV where
-  zero = PhysicalDeviceExclusiveScissorFeaturesNV
-           zero
-
-
--- | VkPipelineViewportExclusiveScissorStateCreateInfoNV - Structure
--- specifying parameters controlling exclusive scissor testing
---
--- = Description
---
--- If this structure is not present, @exclusiveScissorCount@ is considered
--- to be @0@ and the exclusive scissor test is disabled.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @exclusiveScissorCount@ /must/ be @0@ or @1@
---
--- -   @exclusiveScissorCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
---
--- -   @exclusiveScissorCount@ /must/ be @0@ or identical to the
---     @viewportCount@ member of
---     'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'
---
--- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV'
---     and @exclusiveScissorCount@ is not @0@, @pExclusiveScissors@ /must/
---     be a valid pointer to an array of @exclusiveScissorCount@
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV'
---
--- -   If @exclusiveScissorCount@ is not @0@, and @pExclusiveScissors@ is
---     not @NULL@, @pExclusiveScissors@ /must/ be a valid pointer to an
---     array of @exclusiveScissorCount@
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineViewportExclusiveScissorStateCreateInfoNV = PipelineViewportExclusiveScissorStateCreateInfoNV
-  { -- | @pExclusiveScissors@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
-    -- defining exclusive scissor rectangles. If the exclusive scissor state is
-    -- dynamic, this member is ignored.
-    exclusiveScissors :: Either Word32 (Vector Rect2D) }
-  deriving (Typeable)
-deriving instance Show PipelineViewportExclusiveScissorStateCreateInfoNV
-
-instance ToCStruct PipelineViewportExclusiveScissorStateCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineViewportExclusiveScissorStateCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (exclusiveScissors)) :: Word32))
-    pExclusiveScissors'' <- case (exclusiveScissors) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPExclusiveScissors' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (v)) * 16) 4
-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPExclusiveScissors' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (v)
-        pure $ pPExclusiveScissors'
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Rect2D))) pExclusiveScissors''
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    f
-
-instance FromCStruct PipelineViewportExclusiveScissorStateCreateInfoNV where
-  peekCStruct p = do
-    exclusiveScissorCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pExclusiveScissors <- peek @(Ptr Rect2D) ((p `plusPtr` 24 :: Ptr (Ptr Rect2D)))
-    pExclusiveScissors' <- maybePeek (\j -> generateM (fromIntegral exclusiveScissorCount) (\i -> peekCStruct @Rect2D (((j) `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))) pExclusiveScissors
-    let pExclusiveScissors'' = maybe (Left exclusiveScissorCount) Right pExclusiveScissors'
-    pure $ PipelineViewportExclusiveScissorStateCreateInfoNV
-             pExclusiveScissors''
-
-instance Zero PipelineViewportExclusiveScissorStateCreateInfoNV where
-  zero = PipelineViewportExclusiveScissorStateCreateInfoNV
-           (Left 0)
-
-
-type NV_SCISSOR_EXCLUSIVE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION"
-pattern NV_SCISSOR_EXCLUSIVE_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_SCISSOR_EXCLUSIVE_SPEC_VERSION = 1
-
-
-type NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME = "VK_NV_scissor_exclusive"
-
--- No documentation found for TopLevel "VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME"
-pattern NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME = "VK_NV_scissor_exclusive"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_scissor_exclusive.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_scissor_exclusive.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_scissor_exclusive.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive  ( PhysicalDeviceExclusiveScissorFeaturesNV
-                                                           , PipelineViewportExclusiveScissorStateCreateInfoNV
-                                                           ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceExclusiveScissorFeaturesNV
-
-instance ToCStruct PhysicalDeviceExclusiveScissorFeaturesNV
-instance Show PhysicalDeviceExclusiveScissorFeaturesNV
-
-instance FromCStruct PhysicalDeviceExclusiveScissorFeaturesNV
-
-
-data PipelineViewportExclusiveScissorStateCreateInfoNV
-
-instance ToCStruct PipelineViewportExclusiveScissorStateCreateInfoNV
-instance Show PipelineViewportExclusiveScissorStateCreateInfoNV
-
-instance FromCStruct PipelineViewportExclusiveScissorStateCreateInfoNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_shader_image_footprint.hs b/src/Graphics/Vulkan/Extensions/VK_NV_shader_image_footprint.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_shader_image_footprint.hs
+++ /dev/null
@@ -1,105 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint  ( PhysicalDeviceShaderImageFootprintFeaturesNV(..)
-                                                                , NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION
-                                                                , pattern NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION
-                                                                , NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME
-                                                                , pattern NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME
-                                                                ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV))
--- | VkPhysicalDeviceShaderImageFootprintFeaturesNV - Structure describing
--- shader image footprint features that can be supported by an
--- implementation
---
--- = Description
---
--- See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-footprint Texel Footprint Evaluation>
--- for more information.
---
--- If the 'PhysicalDeviceShaderImageFootprintFeaturesNV' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether each feature is supported.
--- 'PhysicalDeviceShaderImageFootprintFeaturesNV' /can/ also be included in
--- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderImageFootprintFeaturesNV = PhysicalDeviceShaderImageFootprintFeaturesNV
-  { -- | @imageFootprint@ specifies whether the implementation supports the
-    -- @ImageFootprintNV@ SPIR-V capability.
-    imageFootprint :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderImageFootprintFeaturesNV
-
-instance ToCStruct PhysicalDeviceShaderImageFootprintFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderImageFootprintFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (imageFootprint))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceShaderImageFootprintFeaturesNV where
-  peekCStruct p = do
-    imageFootprint <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceShaderImageFootprintFeaturesNV
-             (bool32ToBool imageFootprint)
-
-instance Storable PhysicalDeviceShaderImageFootprintFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderImageFootprintFeaturesNV where
-  zero = PhysicalDeviceShaderImageFootprintFeaturesNV
-           zero
-
-
-type NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION"
-pattern NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION = 2
-
-
-type NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME = "VK_NV_shader_image_footprint"
-
--- No documentation found for TopLevel "VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME"
-pattern NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME = "VK_NV_shader_image_footprint"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_shader_image_footprint.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_shader_image_footprint.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_shader_image_footprint.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint  (PhysicalDeviceShaderImageFootprintFeaturesNV) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderImageFootprintFeaturesNV
-
-instance ToCStruct PhysicalDeviceShaderImageFootprintFeaturesNV
-instance Show PhysicalDeviceShaderImageFootprintFeaturesNV
-
-instance FromCStruct PhysicalDeviceShaderImageFootprintFeaturesNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs b/src/Graphics/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs
+++ /dev/null
@@ -1,174 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins  ( PhysicalDeviceShaderSMBuiltinsPropertiesNV(..)
-                                                            , PhysicalDeviceShaderSMBuiltinsFeaturesNV(..)
-                                                            , NV_SHADER_SM_BUILTINS_SPEC_VERSION
-                                                            , pattern NV_SHADER_SM_BUILTINS_SPEC_VERSION
-                                                            , NV_SHADER_SM_BUILTINS_EXTENSION_NAME
-                                                            , pattern NV_SHADER_SM_BUILTINS_EXTENSION_NAME
-                                                            ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Kind (Type)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV))
--- | VkPhysicalDeviceShaderSMBuiltinsPropertiesNV - Structure describing
--- shader SM Builtins properties supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceShaderSMBuiltinsPropertiesNV'
--- structure describe the following implementation-dependent limits:
---
--- = Description
---
--- If the 'PhysicalDeviceShaderSMBuiltinsPropertiesNV' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderSMBuiltinsPropertiesNV = PhysicalDeviceShaderSMBuiltinsPropertiesNV
-  { -- | @shaderSMCount@ is the number of SMs on the device.
-    shaderSMCount :: Word32
-  , -- | @shaderWarpsPerSM@ is the maximum number of simultaneously executing
-    -- warps on an SM.
-    shaderWarpsPerSM :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderSMBuiltinsPropertiesNV
-
-instance ToCStruct PhysicalDeviceShaderSMBuiltinsPropertiesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderSMBuiltinsPropertiesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (shaderSMCount)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (shaderWarpsPerSM)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct PhysicalDeviceShaderSMBuiltinsPropertiesNV where
-  peekCStruct p = do
-    shaderSMCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    shaderWarpsPerSM <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pure $ PhysicalDeviceShaderSMBuiltinsPropertiesNV
-             shaderSMCount shaderWarpsPerSM
-
-instance Storable PhysicalDeviceShaderSMBuiltinsPropertiesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderSMBuiltinsPropertiesNV where
-  zero = PhysicalDeviceShaderSMBuiltinsPropertiesNV
-           zero
-           zero
-
-
--- | VkPhysicalDeviceShaderSMBuiltinsFeaturesNV - Structure describing the
--- shader SM Builtins features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceShaderSMBuiltinsFeaturesNV' structure
--- describe the following features:
---
--- = Description
---
--- If the 'PhysicalDeviceShaderSMBuiltinsFeaturesNV' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceShaderSMBuiltinsFeaturesNV' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable the feature.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShaderSMBuiltinsFeaturesNV = PhysicalDeviceShaderSMBuiltinsFeaturesNV
-  { -- | @shaderSMBuiltins@ indicates whether the implementation supports the
-    -- SPIR-V @ShaderSMBuiltinsNV@ capability.
-    shaderSMBuiltins :: Bool }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShaderSMBuiltinsFeaturesNV
-
-instance ToCStruct PhysicalDeviceShaderSMBuiltinsFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShaderSMBuiltinsFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderSMBuiltins))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceShaderSMBuiltinsFeaturesNV where
-  peekCStruct p = do
-    shaderSMBuiltins <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    pure $ PhysicalDeviceShaderSMBuiltinsFeaturesNV
-             (bool32ToBool shaderSMBuiltins)
-
-instance Storable PhysicalDeviceShaderSMBuiltinsFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShaderSMBuiltinsFeaturesNV where
-  zero = PhysicalDeviceShaderSMBuiltinsFeaturesNV
-           zero
-
-
-type NV_SHADER_SM_BUILTINS_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION"
-pattern NV_SHADER_SM_BUILTINS_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_SHADER_SM_BUILTINS_SPEC_VERSION = 1
-
-
-type NV_SHADER_SM_BUILTINS_EXTENSION_NAME = "VK_NV_shader_sm_builtins"
-
--- No documentation found for TopLevel "VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME"
-pattern NV_SHADER_SM_BUILTINS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_SHADER_SM_BUILTINS_EXTENSION_NAME = "VK_NV_shader_sm_builtins"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins  ( PhysicalDeviceShaderSMBuiltinsFeaturesNV
-                                                            , PhysicalDeviceShaderSMBuiltinsPropertiesNV
-                                                            ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PhysicalDeviceShaderSMBuiltinsFeaturesNV
-
-instance ToCStruct PhysicalDeviceShaderSMBuiltinsFeaturesNV
-instance Show PhysicalDeviceShaderSMBuiltinsFeaturesNV
-
-instance FromCStruct PhysicalDeviceShaderSMBuiltinsFeaturesNV
-
-
-data PhysicalDeviceShaderSMBuiltinsPropertiesNV
-
-instance ToCStruct PhysicalDeviceShaderSMBuiltinsPropertiesNV
-instance Show PhysicalDeviceShaderSMBuiltinsPropertiesNV
-
-instance FromCStruct PhysicalDeviceShaderSMBuiltinsPropertiesNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs b/src/Graphics/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_shader_subgroup_partitioned  ( NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION
-                                                                     , pattern NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION
-                                                                     , NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME
-                                                                     , pattern NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME
-                                                                     ) where
-
-import Data.String (IsString)
-
-type NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION"
-pattern NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION = 1
-
-
-type NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME = "VK_NV_shader_subgroup_partitioned"
-
--- No documentation found for TopLevel "VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME"
-pattern NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME = "VK_NV_shader_subgroup_partitioned"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_shading_rate_image.hs b/src/Graphics/Vulkan/Extensions/VK_NV_shading_rate_image.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_shading_rate_image.hs
+++ /dev/null
@@ -1,1115 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_shading_rate_image  ( cmdBindShadingRateImageNV
-                                                            , cmdSetViewportShadingRatePaletteNV
-                                                            , cmdSetCoarseSampleOrderNV
-                                                            , ShadingRatePaletteNV(..)
-                                                            , PipelineViewportShadingRateImageStateCreateInfoNV(..)
-                                                            , PhysicalDeviceShadingRateImageFeaturesNV(..)
-                                                            , PhysicalDeviceShadingRateImagePropertiesNV(..)
-                                                            , CoarseSampleLocationNV(..)
-                                                            , CoarseSampleOrderCustomNV(..)
-                                                            , PipelineViewportCoarseSampleOrderStateCreateInfoNV(..)
-                                                            , ShadingRatePaletteEntryNV( SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV
-                                                                                       , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV
-                                                                                       , ..
-                                                                                       )
-                                                            , CoarseSampleOrderTypeNV( COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV
-                                                                                     , COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV
-                                                                                     , COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV
-                                                                                     , COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV
-                                                                                     , ..
-                                                                                     )
-                                                            , NV_SHADING_RATE_IMAGE_SPEC_VERSION
-                                                            , pattern NV_SHADING_RATE_IMAGE_SPEC_VERSION
-                                                            , NV_SHADING_RATE_IMAGE_EXTENSION_NAME
-                                                            , pattern NV_SHADING_RATE_IMAGE_EXTENSION_NAME
-                                                            ) where
-
-import Control.Monad.IO.Class (liftIO)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Marshal.Utils (maybePeek)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Control.Monad.IO.Class (MonadIO)
-import Data.Either (Either)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (bool32ToBool)
-import Graphics.Vulkan.Core10.BaseType (boolToBool32)
-import Graphics.Vulkan.NamedType ((:::))
-import Graphics.Vulkan.Core10.BaseType (Bool32)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer)
-import Graphics.Vulkan.Core10.Handles (CommandBuffer(..))
-import Graphics.Vulkan.Core10.Handles (CommandBuffer_T)
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdBindShadingRateImageNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetCoarseSampleOrderNV))
-import Graphics.Vulkan.Dynamic (DeviceCmds(pVkCmdSetViewportShadingRatePaletteNV))
-import Graphics.Vulkan.Core10.SharedTypes (Extent2D)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout)
-import Graphics.Vulkan.Core10.Enums.ImageLayout (ImageLayout(..))
-import Graphics.Vulkan.Core10.Handles (ImageView)
-import Graphics.Vulkan.Core10.Handles (ImageView(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV))
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdBindShadingRateImageNV
-  :: FunPtr (Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ()) -> Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ()
-
--- | vkCmdBindShadingRateImageNV - Bind a shading rate image on a command
--- buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @imageView@ is an image view handle specifying the shading rate
---     image. @imageView@ /may/ be set to
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', which is
---     equivalent to specifying a view of an image filled with zero values.
---
--- -   @imageLayout@ is the layout that the image subresources accessible
---     from @imageView@ will be in when the shading rate image is accessed.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
---     feature /must/ be enabled
---
--- -   If @imageView@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ be a
---     valid 'Graphics.Vulkan.Core10.Handles.ImageView' handle of type
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
---     'Graphics.Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
---
--- -   If @imageView@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ have a
---     format of 'Graphics.Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'
---
--- -   If @imageView@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ have
---     been created with a @usage@ value including
---     'Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV'
---
--- -   If @imageView@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @imageLayout@
---     /must/ match the actual
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' of each
---     subresource accessible from @imageView@ at the time the subresource
---     is accessed
---
--- -   If @imageView@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @imageLayout@
---     /must/ be
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV'
---     or 'Graphics.Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   If @imageView@ is not
---     'Graphics.Vulkan.Core10.APIConstants.NULL_HANDLE', @imageView@
---     /must/ be a valid 'Graphics.Vulkan.Core10.Handles.ImageView' handle
---
--- -   @imageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   Both of @commandBuffer@, and @imageView@ that are valid handles of
---     non-ignored parameters /must/ have been created, allocated, or
---     retrieved from the same 'Graphics.Vulkan.Core10.Handles.Device'
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer',
--- 'Graphics.Vulkan.Core10.Enums.ImageLayout.ImageLayout',
--- 'Graphics.Vulkan.Core10.Handles.ImageView'
-cmdBindShadingRateImageNV :: forall io . MonadIO io => CommandBuffer -> ImageView -> ImageLayout -> io ()
-cmdBindShadingRateImageNV commandBuffer imageView imageLayout = liftIO $ do
-  let vkCmdBindShadingRateImageNV' = mkVkCmdBindShadingRateImageNV (pVkCmdBindShadingRateImageNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  vkCmdBindShadingRateImageNV' (commandBufferHandle (commandBuffer)) (imageView) (imageLayout)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetViewportShadingRatePaletteNV
-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr ShadingRatePaletteNV -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr ShadingRatePaletteNV -> IO ()
-
--- | vkCmdSetViewportShadingRatePaletteNV - Set shading rate image palettes
--- on a command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @firstViewport@ is the index of the first viewport whose shading
---     rate palette is updated by the command.
---
--- -   @viewportCount@ is the number of viewports whose shading rate
---     palettes are updated by the command.
---
--- -   @pShadingRatePalettes@ is a pointer to an array of
---     'ShadingRatePaletteNV' structures defining the palette for each
---     viewport.
---
--- == Valid Usage
---
--- -   The
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
---     feature /must/ be enabled
---
--- -   @firstViewport@ /must/ be less than
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
---
--- -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@
---     and
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
---     inclusive
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @firstViewport@ /must/ be @0@
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @viewportCount@ /must/ be @1@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @pShadingRatePalettes@ /must/ be a valid pointer to an array of
---     @viewportCount@ valid 'ShadingRatePaletteNV' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- -   @viewportCount@ /must/ be greater than @0@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer', 'ShadingRatePaletteNV'
-cmdSetViewportShadingRatePaletteNV :: forall io . MonadIO io => CommandBuffer -> ("firstViewport" ::: Word32) -> ("shadingRatePalettes" ::: Vector ShadingRatePaletteNV) -> io ()
-cmdSetViewportShadingRatePaletteNV commandBuffer firstViewport shadingRatePalettes = liftIO . evalContT $ do
-  let vkCmdSetViewportShadingRatePaletteNV' = mkVkCmdSetViewportShadingRatePaletteNV (pVkCmdSetViewportShadingRatePaletteNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPShadingRatePalettes <- ContT $ allocaBytesAligned @ShadingRatePaletteNV ((Data.Vector.length (shadingRatePalettes)) * 16) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPShadingRatePalettes `plusPtr` (16 * (i)) :: Ptr ShadingRatePaletteNV) (e) . ($ ())) (shadingRatePalettes)
-  lift $ vkCmdSetViewportShadingRatePaletteNV' (commandBufferHandle (commandBuffer)) (firstViewport) ((fromIntegral (Data.Vector.length $ (shadingRatePalettes)) :: Word32)) (pPShadingRatePalettes)
-  pure $ ()
-
-
-foreign import ccall
-#if !defined(SAFE_FOREIGN_CALLS)
-  unsafe
-#endif
-  "dynamic" mkVkCmdSetCoarseSampleOrderNV
-  :: FunPtr (Ptr CommandBuffer_T -> CoarseSampleOrderTypeNV -> Word32 -> Ptr CoarseSampleOrderCustomNV -> IO ()) -> Ptr CommandBuffer_T -> CoarseSampleOrderTypeNV -> Word32 -> Ptr CoarseSampleOrderCustomNV -> IO ()
-
--- | vkCmdSetCoarseSampleOrderNV - Set sample order for coarse fragments on a
--- command buffer
---
--- = Parameters
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @sampleOrderType@ specifies the mechanism used to order coverage
---     samples in fragments larger than one pixel.
---
--- -   @customSampleOrderCount@ specifies the number of custom sample
---     orderings to use when ordering coverage samples.
---
--- -   @pCustomSampleOrders@ is a pointer to an array of
---     'CoarseSampleOrderCustomNV' structures, each of which specifies the
---     coverage sample order for a single combination of fragment area and
---     coverage sample count.
---
--- = Description
---
--- If @sampleOrderType@ is 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV', the
--- coverage sample order used for any combination of fragment area and
--- coverage sample count not enumerated in @pCustomSampleOrders@ will be
--- identical to that used for 'COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV'.
---
--- == Valid Usage
---
--- -   If @sampleOrderType@ is not 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV',
---     @customSamplerOrderCount@ /must/ be @0@
---
--- -   The array @pCustomSampleOrders@ /must/ not contain two structures
---     with matching values for both the @shadingRate@ and @sampleCount@
---     members
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Handles.CommandBuffer' handle
---
--- -   @sampleOrderType@ /must/ be a valid 'CoarseSampleOrderTypeNV' value
---
--- -   If @customSampleOrderCount@ is not @0@, @pCustomSampleOrders@ /must/
---     be a valid pointer to an array of @customSampleOrderCount@ valid
---     'CoarseSampleOrderCustomNV' structures
---
--- -   @commandBuffer@ /must/ be in the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
---
--- -   The 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ support graphics
---     operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the 'Graphics.Vulkan.Core10.Handles.CommandPool' that
---     @commandBuffer@ was allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- \'
---
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
---
--- = See Also
---
--- 'CoarseSampleOrderCustomNV', 'CoarseSampleOrderTypeNV',
--- 'Graphics.Vulkan.Core10.Handles.CommandBuffer'
-cmdSetCoarseSampleOrderNV :: forall io . MonadIO io => CommandBuffer -> CoarseSampleOrderTypeNV -> ("customSampleOrders" ::: Vector CoarseSampleOrderCustomNV) -> io ()
-cmdSetCoarseSampleOrderNV commandBuffer sampleOrderType customSampleOrders = liftIO . evalContT $ do
-  let vkCmdSetCoarseSampleOrderNV' = mkVkCmdSetCoarseSampleOrderNV (pVkCmdSetCoarseSampleOrderNV (deviceCmds (commandBuffer :: CommandBuffer)))
-  pPCustomSampleOrders <- ContT $ allocaBytesAligned @CoarseSampleOrderCustomNV ((Data.Vector.length (customSampleOrders)) * 24) 8
-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCustomSampleOrders `plusPtr` (24 * (i)) :: Ptr CoarseSampleOrderCustomNV) (e) . ($ ())) (customSampleOrders)
-  lift $ vkCmdSetCoarseSampleOrderNV' (commandBufferHandle (commandBuffer)) (sampleOrderType) ((fromIntegral (Data.Vector.length $ (customSampleOrders)) :: Word32)) (pPCustomSampleOrders)
-  pure $ ()
-
-
--- | VkShadingRatePaletteNV - Structure specifying a single shading rate
--- palette
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PipelineViewportShadingRateImageStateCreateInfoNV',
--- 'ShadingRatePaletteEntryNV', 'cmdSetViewportShadingRatePaletteNV'
-data ShadingRatePaletteNV = ShadingRatePaletteNV
-  { -- | @pShadingRatePaletteEntries@ /must/ be a valid pointer to an array of
-    -- @shadingRatePaletteEntryCount@ valid 'ShadingRatePaletteEntryNV' values
-    shadingRatePaletteEntries :: Vector ShadingRatePaletteEntryNV }
-  deriving (Typeable)
-deriving instance Show ShadingRatePaletteNV
-
-instance ToCStruct ShadingRatePaletteNV where
-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ShadingRatePaletteNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (shadingRatePaletteEntries)) :: Word32))
-    pPShadingRatePaletteEntries' <- ContT $ allocaBytesAligned @ShadingRatePaletteEntryNV ((Data.Vector.length (shadingRatePaletteEntries)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPShadingRatePaletteEntries' `plusPtr` (4 * (i)) :: Ptr ShadingRatePaletteEntryNV) (e)) (shadingRatePaletteEntries)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ShadingRatePaletteEntryNV))) (pPShadingRatePaletteEntries')
-    lift $ f
-  cStructSize = 16
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    pPShadingRatePaletteEntries' <- ContT $ allocaBytesAligned @ShadingRatePaletteEntryNV ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPShadingRatePaletteEntries' `plusPtr` (4 * (i)) :: Ptr ShadingRatePaletteEntryNV) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ShadingRatePaletteEntryNV))) (pPShadingRatePaletteEntries')
-    lift $ f
-
-instance FromCStruct ShadingRatePaletteNV where
-  peekCStruct p = do
-    shadingRatePaletteEntryCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    pShadingRatePaletteEntries <- peek @(Ptr ShadingRatePaletteEntryNV) ((p `plusPtr` 8 :: Ptr (Ptr ShadingRatePaletteEntryNV)))
-    pShadingRatePaletteEntries' <- generateM (fromIntegral shadingRatePaletteEntryCount) (\i -> peek @ShadingRatePaletteEntryNV ((pShadingRatePaletteEntries `advancePtrBytes` (4 * (i)) :: Ptr ShadingRatePaletteEntryNV)))
-    pure $ ShadingRatePaletteNV
-             pShadingRatePaletteEntries'
-
-instance Zero ShadingRatePaletteNV where
-  zero = ShadingRatePaletteNV
-           mempty
-
-
--- | VkPipelineViewportShadingRateImageStateCreateInfoNV - Structure
--- specifying parameters controlling shading rate image usage
---
--- = Description
---
--- If this structure is not present, @shadingRateImageEnable@ is considered
--- to be 'Graphics.Vulkan.Core10.BaseType.FALSE', and the shading rate
--- image and palettes are not used.
---
--- == Valid Usage
---
--- -   If the
---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
---     feature is not enabled, @viewportCount@ /must/ be @0@ or @1@
---
--- -   @viewportCount@ /must/ be less than or equal to
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
---
--- -   If @shadingRateImageEnable@ is
---     'Graphics.Vulkan.Core10.BaseType.TRUE', @viewportCount@ /must/ be
---     equal to the @viewportCount@ member of
---     'Graphics.Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'
---
--- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
---     'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV',
---     @pShadingRatePalettes@ /must/ be a valid pointer to an array of
---     @viewportCount@ 'ShadingRatePaletteNV' structures
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV'
---
--- -   If @viewportCount@ is not @0@, and @pShadingRatePalettes@ is not
---     @NULL@, @pShadingRatePalettes@ /must/ be a valid pointer to an array
---     of @viewportCount@ valid 'ShadingRatePaletteNV' structures
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32', 'ShadingRatePaletteNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineViewportShadingRateImageStateCreateInfoNV = PipelineViewportShadingRateImageStateCreateInfoNV
-  { -- | @shadingRateImageEnable@ specifies whether shading rate image and
-    -- palettes are used during rasterization.
-    shadingRateImageEnable :: Bool
-  , -- | @pShadingRatePalettes@ is a pointer to an array of
-    -- 'ShadingRatePaletteNV' structures defining the palette for each
-    -- viewport. If the shading rate palette state is dynamic, this member is
-    -- ignored.
-    shadingRatePalettes :: Either Word32 (Vector ShadingRatePaletteNV)
-  }
-  deriving (Typeable)
-deriving instance Show PipelineViewportShadingRateImageStateCreateInfoNV
-
-instance ToCStruct PipelineViewportShadingRateImageStateCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineViewportShadingRateImageStateCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shadingRateImageEnable))
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (either id (fromIntegral . Data.Vector.length) (shadingRatePalettes)) :: Word32))
-    pShadingRatePalettes'' <- case (shadingRatePalettes) of
-      Left _ -> pure nullPtr
-      Right v -> do
-        pPShadingRatePalettes' <- ContT $ allocaBytesAligned @ShadingRatePaletteNV ((Data.Vector.length (v)) * 16) 8
-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPShadingRatePalettes' `plusPtr` (16 * (i)) :: Ptr ShadingRatePaletteNV) (e) . ($ ())) (v)
-        pure $ pPShadingRatePalettes'
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ShadingRatePaletteNV))) pShadingRatePalettes''
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PipelineViewportShadingRateImageStateCreateInfoNV where
-  peekCStruct p = do
-    shadingRateImageEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pShadingRatePalettes <- peek @(Ptr ShadingRatePaletteNV) ((p `plusPtr` 24 :: Ptr (Ptr ShadingRatePaletteNV)))
-    pShadingRatePalettes' <- maybePeek (\j -> generateM (fromIntegral viewportCount) (\i -> peekCStruct @ShadingRatePaletteNV (((j) `advancePtrBytes` (16 * (i)) :: Ptr ShadingRatePaletteNV)))) pShadingRatePalettes
-    let pShadingRatePalettes'' = maybe (Left viewportCount) Right pShadingRatePalettes'
-    pure $ PipelineViewportShadingRateImageStateCreateInfoNV
-             (bool32ToBool shadingRateImageEnable) pShadingRatePalettes''
-
-instance Zero PipelineViewportShadingRateImageStateCreateInfoNV where
-  zero = PipelineViewportShadingRateImageStateCreateInfoNV
-           zero
-           (Left 0)
-
-
--- | VkPhysicalDeviceShadingRateImageFeaturesNV - Structure describing
--- shading rate image features that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceShadingRateImageFeaturesNV' structure
--- describe the following features:
---
--- = Description
---
--- See
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image Shading Rate Image>
--- for more information.
---
--- If the 'PhysicalDeviceShadingRateImageFeaturesNV' structure is included
--- in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--- it is filled with values indicating whether the feature is supported.
--- 'PhysicalDeviceShadingRateImageFeaturesNV' /can/ also be included in the
--- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.DeviceCreateInfo' to
--- enable features.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.BaseType.Bool32',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShadingRateImageFeaturesNV = PhysicalDeviceShadingRateImageFeaturesNV
-  { -- | @shadingRateImage@ indicates that the implementation supports the use of
-    -- a shading rate image to derive an effective shading rate for fragment
-    -- processing. It also indicates that the implementation supports the
-    -- @ShadingRateNV@ SPIR-V execution mode.
-    shadingRateImage :: Bool
-  , -- | @shadingRateCoarseSampleOrder@ indicates that the implementation
-    -- supports a user-configurable ordering of coverage samples in fragments
-    -- larger than one pixel.
-    shadingRateCoarseSampleOrder :: Bool
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShadingRateImageFeaturesNV
-
-instance ToCStruct PhysicalDeviceShadingRateImageFeaturesNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShadingRateImageFeaturesNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shadingRateImage))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shadingRateCoarseSampleOrder))
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
-    f
-
-instance FromCStruct PhysicalDeviceShadingRateImageFeaturesNV where
-  peekCStruct p = do
-    shadingRateImage <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
-    shadingRateCoarseSampleOrder <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
-    pure $ PhysicalDeviceShadingRateImageFeaturesNV
-             (bool32ToBool shadingRateImage) (bool32ToBool shadingRateCoarseSampleOrder)
-
-instance Storable PhysicalDeviceShadingRateImageFeaturesNV where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero PhysicalDeviceShadingRateImageFeaturesNV where
-  zero = PhysicalDeviceShadingRateImageFeaturesNV
-           zero
-           zero
-
-
--- | VkPhysicalDeviceShadingRateImagePropertiesNV - Structure describing
--- shading rate image limits that can be supported by an implementation
---
--- = Members
---
--- The members of the 'PhysicalDeviceShadingRateImagePropertiesNV'
--- structure describe the following implementation-dependent properties
--- related to the
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image shading rate image>
--- feature:
---
--- = Description
---
--- If the 'PhysicalDeviceShadingRateImagePropertiesNV' structure is
--- included in the @pNext@ chain of
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
--- it is filled with the implementation-dependent limits.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.SharedTypes.Extent2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PhysicalDeviceShadingRateImagePropertiesNV = PhysicalDeviceShadingRateImagePropertiesNV
-  { -- | @shadingRateTexelSize@ indicates the width and height of the portion of
-    -- the framebuffer corresponding to each texel in the shading rate image.
-    shadingRateTexelSize :: Extent2D
-  , -- | @shadingRatePaletteSize@ indicates the maximum number of palette entries
-    -- supported for the shading rate image.
-    shadingRatePaletteSize :: Word32
-  , -- | @shadingRateMaxCoarseSamples@ specifies the maximum number of coverage
-    -- samples supported in a single fragment. If the product of the fragment
-    -- size derived from the base shading rate and the number of coverage
-    -- samples per pixel exceeds this limit, the final shading rate will be
-    -- adjusted so that its product does not exceed the limit.
-    shadingRateMaxCoarseSamples :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show PhysicalDeviceShadingRateImagePropertiesNV
-
-instance ToCStruct PhysicalDeviceShadingRateImagePropertiesNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PhysicalDeviceShadingRateImagePropertiesNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (shadingRateTexelSize) . ($ ())
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (shadingRatePaletteSize)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (shadingRateMaxCoarseSamples)
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (zero) . ($ ())
-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
-    lift $ f
-
-instance FromCStruct PhysicalDeviceShadingRateImagePropertiesNV where
-  peekCStruct p = do
-    shadingRateTexelSize <- peekCStruct @Extent2D ((p `plusPtr` 16 :: Ptr Extent2D))
-    shadingRatePaletteSize <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
-    shadingRateMaxCoarseSamples <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
-    pure $ PhysicalDeviceShadingRateImagePropertiesNV
-             shadingRateTexelSize shadingRatePaletteSize shadingRateMaxCoarseSamples
-
-instance Zero PhysicalDeviceShadingRateImagePropertiesNV where
-  zero = PhysicalDeviceShadingRateImagePropertiesNV
-           zero
-           zero
-           zero
-
-
--- | VkCoarseSampleLocationNV - Structure specifying parameters controlling
--- shading rate image usage
---
--- == Valid Usage
---
--- = See Also
---
--- 'CoarseSampleOrderCustomNV'
-data CoarseSampleLocationNV = CoarseSampleLocationNV
-  { -- | @pixelX@ /must/ be less than the width (in pixels) of the fragment
-    pixelX :: Word32
-  , -- | @pixelY@ /must/ be less than the height (in pixels) of the fragment
-    pixelY :: Word32
-  , -- | @sample@ /must/ be less than the number of coverage samples in each
-    -- pixel belonging to the fragment
-    sample :: Word32
-  }
-  deriving (Typeable)
-deriving instance Show CoarseSampleLocationNV
-
-instance ToCStruct CoarseSampleLocationNV where
-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CoarseSampleLocationNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (pixelX)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (pixelY)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (sample)
-    f
-  cStructSize = 12
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
-    f
-
-instance FromCStruct CoarseSampleLocationNV where
-  peekCStruct p = do
-    pixelX <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
-    pixelY <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    sample <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pure $ CoarseSampleLocationNV
-             pixelX pixelY sample
-
-instance Storable CoarseSampleLocationNV where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero CoarseSampleLocationNV where
-  zero = CoarseSampleLocationNV
-           zero
-           zero
-           zero
-
-
--- | VkCoarseSampleOrderCustomNV - Structure specifying parameters
--- controlling shading rate image usage
---
--- = Description
---
--- When using a custom sample ordering, element /i/ in @pSampleLocations@
--- specifies a specific pixel and per-pixel coverage sample number that
--- corresponds to the coverage sample numbered /i/ in the multi-pixel
--- fragment.
---
--- == Valid Usage
---
--- -   @shadingRate@ /must/ be a shading rate that generates fragments with
---     more than one pixel
---
--- -   @sampleCount@ /must/ correspond to a sample count enumerated in
---     'Graphics.Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags'
---     whose corresponding bit is set in
---     'Graphics.Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@framebufferNoAttachmentsSampleCounts@
---
--- -   @sampleLocationCount@ /must/ be equal to the product of
---     @sampleCount@, the fragment width for @shadingRate@, and the
---     fragment height for @shadingRate@
---
--- -   @sampleLocationCount@ /must/ be less than or equal to the value of
---     'PhysicalDeviceShadingRateImagePropertiesNV'::@shadingRateMaxCoarseSamples@
---
--- -   The array @pSampleLocations@ /must/ contain exactly one entry for
---     every combination of valid values for @pixelX@, @pixelY@, and
---     @sample@ in the structure 'CoarseSampleOrderCustomNV'
---
--- == Valid Usage (Implicit)
---
--- -   @shadingRate@ /must/ be a valid 'ShadingRatePaletteEntryNV' value
---
--- -   @pSampleLocations@ /must/ be a valid pointer to an array of
---     @sampleLocationCount@ 'CoarseSampleLocationNV' structures
---
--- -   @sampleLocationCount@ /must/ be greater than @0@
---
--- = See Also
---
--- 'CoarseSampleLocationNV',
--- 'PipelineViewportCoarseSampleOrderStateCreateInfoNV',
--- 'ShadingRatePaletteEntryNV', 'cmdSetCoarseSampleOrderNV'
-data CoarseSampleOrderCustomNV = CoarseSampleOrderCustomNV
-  { -- | @shadingRate@ is a shading rate palette entry that identifies the
-    -- fragment width and height for the combination of fragment area and
-    -- per-pixel coverage sample count to control.
-    shadingRate :: ShadingRatePaletteEntryNV
-  , -- | @sampleCount@ identifies the per-pixel coverage sample count for the
-    -- combination of fragment area and coverage sample count to control.
-    sampleCount :: Word32
-  , -- | @pSampleLocations@ is a pointer to an array of
-    -- 'CoarseSampleOrderCustomNV' structures specifying the location of each
-    -- sample in the custom ordering.
-    sampleLocations :: Vector CoarseSampleLocationNV
-  }
-  deriving (Typeable)
-deriving instance Show CoarseSampleOrderCustomNV
-
-instance ToCStruct CoarseSampleOrderCustomNV where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CoarseSampleOrderCustomNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr ShadingRatePaletteEntryNV)) (shadingRate)
-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (sampleCount)
-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (sampleLocations)) :: Word32))
-    pPSampleLocations' <- ContT $ allocaBytesAligned @CoarseSampleLocationNV ((Data.Vector.length (sampleLocations)) * 12) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSampleLocations' `plusPtr` (12 * (i)) :: Ptr CoarseSampleLocationNV) (e) . ($ ())) (sampleLocations)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CoarseSampleLocationNV))) (pPSampleLocations')
-    lift $ f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr ShadingRatePaletteEntryNV)) (zero)
-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
-    pPSampleLocations' <- ContT $ allocaBytesAligned @CoarseSampleLocationNV ((Data.Vector.length (mempty)) * 12) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSampleLocations' `plusPtr` (12 * (i)) :: Ptr CoarseSampleLocationNV) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CoarseSampleLocationNV))) (pPSampleLocations')
-    lift $ f
-
-instance FromCStruct CoarseSampleOrderCustomNV where
-  peekCStruct p = do
-    shadingRate <- peek @ShadingRatePaletteEntryNV ((p `plusPtr` 0 :: Ptr ShadingRatePaletteEntryNV))
-    sampleCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
-    sampleLocationCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
-    pSampleLocations <- peek @(Ptr CoarseSampleLocationNV) ((p `plusPtr` 16 :: Ptr (Ptr CoarseSampleLocationNV)))
-    pSampleLocations' <- generateM (fromIntegral sampleLocationCount) (\i -> peekCStruct @CoarseSampleLocationNV ((pSampleLocations `advancePtrBytes` (12 * (i)) :: Ptr CoarseSampleLocationNV)))
-    pure $ CoarseSampleOrderCustomNV
-             shadingRate sampleCount pSampleLocations'
-
-instance Zero CoarseSampleOrderCustomNV where
-  zero = CoarseSampleOrderCustomNV
-           zero
-           zero
-           mempty
-
-
--- | VkPipelineViewportCoarseSampleOrderStateCreateInfoNV - Structure
--- specifying parameters controlling sample order in coarse fragments
---
--- = Description
---
--- If this structure is not present, @sampleOrderType@ is considered to be
--- 'COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV'.
---
--- If @sampleOrderType@ is 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV', the
--- coverage sample order used for any combination of fragment area and
--- coverage sample count not enumerated in @pCustomSampleOrders@ will be
--- identical to that used for 'COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV'.
---
--- If the pipeline was created with
--- 'Graphics.Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV',
--- the contents of this structure (if present) are ignored, and the
--- coverage sample order is instead specified by
--- 'cmdSetCoarseSampleOrderNV'.
---
--- == Valid Usage
---
--- -   If @sampleOrderType@ is not 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV',
---     @customSamplerOrderCount@ /must/ be @0@
---
--- -   The array @pCustomSampleOrders@ /must/ not contain two structures
---     with matching values for both the @shadingRate@ and @sampleCount@
---     members
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV'
---
--- -   @sampleOrderType@ /must/ be a valid 'CoarseSampleOrderTypeNV' value
---
--- -   If @customSampleOrderCount@ is not @0@, @pCustomSampleOrders@ /must/
---     be a valid pointer to an array of @customSampleOrderCount@ valid
---     'CoarseSampleOrderCustomNV' structures
---
--- = See Also
---
--- 'CoarseSampleOrderCustomNV', 'CoarseSampleOrderTypeNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data PipelineViewportCoarseSampleOrderStateCreateInfoNV = PipelineViewportCoarseSampleOrderStateCreateInfoNV
-  { -- | @sampleOrderType@ specifies the mechanism used to order coverage samples
-    -- in fragments larger than one pixel.
-    sampleOrderType :: CoarseSampleOrderTypeNV
-  , -- | @pCustomSampleOrders@ is a pointer to an array of
-    -- @customSampleOrderCount@ 'CoarseSampleOrderCustomNV' structures, each of
-    -- which specifies the coverage sample order for a single combination of
-    -- fragment area and coverage sample count.
-    customSampleOrders :: Vector CoarseSampleOrderCustomNV
-  }
-  deriving (Typeable)
-deriving instance Show PipelineViewportCoarseSampleOrderStateCreateInfoNV
-
-instance ToCStruct PipelineViewportCoarseSampleOrderStateCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineViewportCoarseSampleOrderStateCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr CoarseSampleOrderTypeNV)) (sampleOrderType)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (customSampleOrders)) :: Word32))
-    pPCustomSampleOrders' <- ContT $ allocaBytesAligned @CoarseSampleOrderCustomNV ((Data.Vector.length (customSampleOrders)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCustomSampleOrders' `plusPtr` (24 * (i)) :: Ptr CoarseSampleOrderCustomNV) (e) . ($ ())) (customSampleOrders)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr CoarseSampleOrderCustomNV))) (pPCustomSampleOrders')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr CoarseSampleOrderTypeNV)) (zero)
-    pPCustomSampleOrders' <- ContT $ allocaBytesAligned @CoarseSampleOrderCustomNV ((Data.Vector.length (mempty)) * 24) 8
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCustomSampleOrders' `plusPtr` (24 * (i)) :: Ptr CoarseSampleOrderCustomNV) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr CoarseSampleOrderCustomNV))) (pPCustomSampleOrders')
-    lift $ f
-
-instance FromCStruct PipelineViewportCoarseSampleOrderStateCreateInfoNV where
-  peekCStruct p = do
-    sampleOrderType <- peek @CoarseSampleOrderTypeNV ((p `plusPtr` 16 :: Ptr CoarseSampleOrderTypeNV))
-    customSampleOrderCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pCustomSampleOrders <- peek @(Ptr CoarseSampleOrderCustomNV) ((p `plusPtr` 24 :: Ptr (Ptr CoarseSampleOrderCustomNV)))
-    pCustomSampleOrders' <- generateM (fromIntegral customSampleOrderCount) (\i -> peekCStruct @CoarseSampleOrderCustomNV ((pCustomSampleOrders `advancePtrBytes` (24 * (i)) :: Ptr CoarseSampleOrderCustomNV)))
-    pure $ PipelineViewportCoarseSampleOrderStateCreateInfoNV
-             sampleOrderType pCustomSampleOrders'
-
-instance Zero PipelineViewportCoarseSampleOrderStateCreateInfoNV where
-  zero = PipelineViewportCoarseSampleOrderStateCreateInfoNV
-           zero
-           mempty
-
-
--- | VkShadingRatePaletteEntryNV - Shading rate image palette entry types
---
--- = Description
---
--- The following table indicates the width and height (in pixels) of each
--- fragment generated using the indicated shading rate, as well as the
--- maximum number of fragment shader invocations launched for each
--- fragment. When processing regions of a primitive that have a shading
--- rate of 'SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV', no fragments
--- will be generated in that region.
---
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | Shading Rate                                                | Width           | Height          | Invocations     |
--- +=============================================================+=================+=================+=================+
--- | 'SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV'              | 0               | 0               | 0               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV'    | 1               | 1               | 16              |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV'     | 1               | 1               | 8               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV'     | 1               | 1               | 4               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV'     | 1               | 1               | 2               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV'      | 1               | 1               | 1               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV' | 2               | 1               | 1               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV' | 1               | 2               | 1               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV' | 2               | 2               | 1               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV' | 4               | 2               | 1               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV' | 2               | 4               | 1               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
--- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV' | 4               | 4               | 1               |
--- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
---
--- = See Also
---
--- 'CoarseSampleOrderCustomNV', 'ShadingRatePaletteNV'
-newtype ShadingRatePaletteEntryNV = ShadingRatePaletteEntryNV Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV = ShadingRatePaletteEntryNV 0
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV = ShadingRatePaletteEntryNV 1
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV = ShadingRatePaletteEntryNV 2
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV = ShadingRatePaletteEntryNV 3
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV = ShadingRatePaletteEntryNV 4
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV = ShadingRatePaletteEntryNV 5
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV = ShadingRatePaletteEntryNV 6
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV = ShadingRatePaletteEntryNV 7
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV = ShadingRatePaletteEntryNV 8
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV = ShadingRatePaletteEntryNV 9
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV = ShadingRatePaletteEntryNV 10
--- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV"
-pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV = ShadingRatePaletteEntryNV 11
-{-# complete SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV,
-             SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV,
-             SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV,
-             SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV,
-             SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV,
-             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV,
-             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV,
-             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV,
-             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV,
-             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV,
-             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV,
-             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV :: ShadingRatePaletteEntryNV #-}
-
-instance Show ShadingRatePaletteEntryNV where
-  showsPrec p = \case
-    SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV"
-    SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV -> showString "SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV"
-    SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV -> showString "SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV"
-    SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV -> showString "SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV"
-    SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV -> showString "SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV"
-    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV"
-    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV"
-    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV"
-    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV"
-    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV"
-    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV"
-    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV"
-    ShadingRatePaletteEntryNV x -> showParen (p >= 11) (showString "ShadingRatePaletteEntryNV " . showsPrec 11 x)
-
-instance Read ShadingRatePaletteEntryNV where
-  readPrec = parens (choose [("SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV", pure SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV", pure SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV", pure SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV", pure SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV", pure SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV)
-                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ShadingRatePaletteEntryNV")
-                       v <- step readPrec
-                       pure (ShadingRatePaletteEntryNV v)))
-
-
--- | VkCoarseSampleOrderTypeNV - Shading rate image sample ordering types
---
--- = See Also
---
--- 'PipelineViewportCoarseSampleOrderStateCreateInfoNV',
--- 'cmdSetCoarseSampleOrderNV'
-newtype CoarseSampleOrderTypeNV = CoarseSampleOrderTypeNV Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- | 'COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV' specifies that coverage samples
--- will be ordered in an implementation-dependent manner.
-pattern COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV = CoarseSampleOrderTypeNV 0
--- | 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV' specifies that coverage samples
--- will be ordered according to the array of custom orderings provided in
--- either the @pCustomSampleOrders@ member of
--- 'PipelineViewportCoarseSampleOrderStateCreateInfoNV' or the
--- @pCustomSampleOrders@ member of 'cmdSetCoarseSampleOrderNV'.
-pattern COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV = CoarseSampleOrderTypeNV 1
--- | 'COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV' specifies that coverage
--- samples will be ordered sequentially, sorted first by pixel coordinate
--- (in row-major order) and then by coverage sample number.
-pattern COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV = CoarseSampleOrderTypeNV 2
--- | 'COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV' specifies that coverage
--- samples will be ordered sequentially, sorted first by coverage sample
--- number and then by pixel coordinate (in row-major order).
-pattern COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV = CoarseSampleOrderTypeNV 3
-{-# complete COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV,
-             COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV,
-             COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV,
-             COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV :: CoarseSampleOrderTypeNV #-}
-
-instance Show CoarseSampleOrderTypeNV where
-  showsPrec p = \case
-    COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV -> showString "COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV"
-    COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV -> showString "COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV"
-    COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV -> showString "COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV"
-    COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV -> showString "COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV"
-    CoarseSampleOrderTypeNV x -> showParen (p >= 11) (showString "CoarseSampleOrderTypeNV " . showsPrec 11 x)
-
-instance Read CoarseSampleOrderTypeNV where
-  readPrec = parens (choose [("COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV", pure COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV)
-                            , ("COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV", pure COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV)
-                            , ("COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV", pure COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV)
-                            , ("COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV", pure COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "CoarseSampleOrderTypeNV")
-                       v <- step readPrec
-                       pure (CoarseSampleOrderTypeNV v)))
-
-
-type NV_SHADING_RATE_IMAGE_SPEC_VERSION = 3
-
--- No documentation found for TopLevel "VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION"
-pattern NV_SHADING_RATE_IMAGE_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_SHADING_RATE_IMAGE_SPEC_VERSION = 3
-
-
-type NV_SHADING_RATE_IMAGE_EXTENSION_NAME = "VK_NV_shading_rate_image"
-
--- No documentation found for TopLevel "VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME"
-pattern NV_SHADING_RATE_IMAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_SHADING_RATE_IMAGE_EXTENSION_NAME = "VK_NV_shading_rate_image"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_shading_rate_image.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_shading_rate_image.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_shading_rate_image.hs-boot
+++ /dev/null
@@ -1,72 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_shading_rate_image  ( CoarseSampleLocationNV
-                                                            , CoarseSampleOrderCustomNV
-                                                            , PhysicalDeviceShadingRateImageFeaturesNV
-                                                            , PhysicalDeviceShadingRateImagePropertiesNV
-                                                            , PipelineViewportCoarseSampleOrderStateCreateInfoNV
-                                                            , PipelineViewportShadingRateImageStateCreateInfoNV
-                                                            , ShadingRatePaletteNV
-                                                            , CoarseSampleOrderTypeNV
-                                                            ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data CoarseSampleLocationNV
-
-instance ToCStruct CoarseSampleLocationNV
-instance Show CoarseSampleLocationNV
-
-instance FromCStruct CoarseSampleLocationNV
-
-
-data CoarseSampleOrderCustomNV
-
-instance ToCStruct CoarseSampleOrderCustomNV
-instance Show CoarseSampleOrderCustomNV
-
-instance FromCStruct CoarseSampleOrderCustomNV
-
-
-data PhysicalDeviceShadingRateImageFeaturesNV
-
-instance ToCStruct PhysicalDeviceShadingRateImageFeaturesNV
-instance Show PhysicalDeviceShadingRateImageFeaturesNV
-
-instance FromCStruct PhysicalDeviceShadingRateImageFeaturesNV
-
-
-data PhysicalDeviceShadingRateImagePropertiesNV
-
-instance ToCStruct PhysicalDeviceShadingRateImagePropertiesNV
-instance Show PhysicalDeviceShadingRateImagePropertiesNV
-
-instance FromCStruct PhysicalDeviceShadingRateImagePropertiesNV
-
-
-data PipelineViewportCoarseSampleOrderStateCreateInfoNV
-
-instance ToCStruct PipelineViewportCoarseSampleOrderStateCreateInfoNV
-instance Show PipelineViewportCoarseSampleOrderStateCreateInfoNV
-
-instance FromCStruct PipelineViewportCoarseSampleOrderStateCreateInfoNV
-
-
-data PipelineViewportShadingRateImageStateCreateInfoNV
-
-instance ToCStruct PipelineViewportShadingRateImageStateCreateInfoNV
-instance Show PipelineViewportShadingRateImageStateCreateInfoNV
-
-instance FromCStruct PipelineViewportShadingRateImageStateCreateInfoNV
-
-
-data ShadingRatePaletteNV
-
-instance ToCStruct ShadingRatePaletteNV
-instance Show ShadingRatePaletteNV
-
-instance FromCStruct ShadingRatePaletteNV
-
-
-data CoarseSampleOrderTypeNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_viewport_array2.hs b/src/Graphics/Vulkan/Extensions/VK_NV_viewport_array2.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_viewport_array2.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_viewport_array2  ( NV_VIEWPORT_ARRAY2_SPEC_VERSION
-                                                         , pattern NV_VIEWPORT_ARRAY2_SPEC_VERSION
-                                                         , NV_VIEWPORT_ARRAY2_EXTENSION_NAME
-                                                         , pattern NV_VIEWPORT_ARRAY2_EXTENSION_NAME
-                                                         ) where
-
-import Data.String (IsString)
-
-type NV_VIEWPORT_ARRAY2_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION"
-pattern NV_VIEWPORT_ARRAY2_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_VIEWPORT_ARRAY2_SPEC_VERSION = 1
-
-
-type NV_VIEWPORT_ARRAY2_EXTENSION_NAME = "VK_NV_viewport_array2"
-
--- No documentation found for TopLevel "VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME"
-pattern NV_VIEWPORT_ARRAY2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern 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
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
+++ /dev/null
@@ -1,288 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle  ( ViewportSwizzleNV(..)
-                                                          , PipelineViewportSwizzleStateCreateInfoNV(..)
-                                                          , PipelineViewportSwizzleStateCreateFlagsNV(..)
-                                                          , ViewportCoordinateSwizzleNV( VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV
-                                                                                       , VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV
-                                                                                       , VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV
-                                                                                       , VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV
-                                                                                       , VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV
-                                                                                       , VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV
-                                                                                       , VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV
-                                                                                       , VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV
-                                                                                       , ..
-                                                                                       )
-                                                          , NV_VIEWPORT_SWIZZLE_SPEC_VERSION
-                                                          , pattern NV_VIEWPORT_SWIZZLE_SPEC_VERSION
-                                                          , NV_VIEWPORT_SWIZZLE_EXTENSION_NAME
-                                                          , pattern NV_VIEWPORT_SWIZZLE_EXTENSION_NAME
-                                                          ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import GHC.Read (choose)
-import GHC.Read (expectP)
-import GHC.Read (parens)
-import GHC.Show (showParen)
-import GHC.Show (showString)
-import GHC.Show (showsPrec)
-import Numeric (showHex)
-import Text.ParserCombinators.ReadPrec ((+++))
-import Text.ParserCombinators.ReadPrec (prec)
-import Text.ParserCombinators.ReadPrec (step)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.Bits (Bits)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Data.Int (Int32)
-import Foreign.Ptr (Ptr)
-import GHC.Read (Read(readPrec))
-import Data.Word (Word32)
-import Text.Read.Lex (Lexeme(Ident))
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.BaseType (Flags)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero)
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV))
--- | VkViewportSwizzleNV - Structure specifying a viewport swizzle
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PipelineViewportSwizzleStateCreateInfoNV',
--- 'ViewportCoordinateSwizzleNV'
-data ViewportSwizzleNV = ViewportSwizzleNV
-  { -- | @x@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value
-    x :: ViewportCoordinateSwizzleNV
-  , -- | @y@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value
-    y :: ViewportCoordinateSwizzleNV
-  , -- | @z@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value
-    z :: ViewportCoordinateSwizzleNV
-  , -- | @w@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value
-    w :: ViewportCoordinateSwizzleNV
-  }
-  deriving (Typeable)
-deriving instance Show ViewportSwizzleNV
-
-instance ToCStruct ViewportSwizzleNV where
-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p ViewportSwizzleNV{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr ViewportCoordinateSwizzleNV)) (x)
-    poke ((p `plusPtr` 4 :: Ptr ViewportCoordinateSwizzleNV)) (y)
-    poke ((p `plusPtr` 8 :: Ptr ViewportCoordinateSwizzleNV)) (z)
-    poke ((p `plusPtr` 12 :: Ptr ViewportCoordinateSwizzleNV)) (w)
-    f
-  cStructSize = 16
-  cStructAlignment = 4
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr ViewportCoordinateSwizzleNV)) (zero)
-    poke ((p `plusPtr` 4 :: Ptr ViewportCoordinateSwizzleNV)) (zero)
-    poke ((p `plusPtr` 8 :: Ptr ViewportCoordinateSwizzleNV)) (zero)
-    poke ((p `plusPtr` 12 :: Ptr ViewportCoordinateSwizzleNV)) (zero)
-    f
-
-instance FromCStruct ViewportSwizzleNV where
-  peekCStruct p = do
-    x <- peek @ViewportCoordinateSwizzleNV ((p `plusPtr` 0 :: Ptr ViewportCoordinateSwizzleNV))
-    y <- peek @ViewportCoordinateSwizzleNV ((p `plusPtr` 4 :: Ptr ViewportCoordinateSwizzleNV))
-    z <- peek @ViewportCoordinateSwizzleNV ((p `plusPtr` 8 :: Ptr ViewportCoordinateSwizzleNV))
-    w <- peek @ViewportCoordinateSwizzleNV ((p `plusPtr` 12 :: Ptr ViewportCoordinateSwizzleNV))
-    pure $ ViewportSwizzleNV
-             x y z w
-
-instance Storable ViewportSwizzleNV where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero ViewportSwizzleNV where
-  zero = ViewportSwizzleNV
-           zero
-           zero
-           zero
-           zero
-
-
--- | VkPipelineViewportSwizzleStateCreateInfoNV - Structure specifying
--- swizzle applied to primitive clip coordinates
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'PipelineViewportSwizzleStateCreateFlagsNV',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'ViewportSwizzleNV'
-data PipelineViewportSwizzleStateCreateInfoNV = PipelineViewportSwizzleStateCreateInfoNV
-  { -- | @flags@ /must/ be @0@
-    flags :: PipelineViewportSwizzleStateCreateFlagsNV
-  , -- | @pViewportSwizzles@ /must/ be a valid pointer to an array of
-    -- @viewportCount@ valid 'ViewportSwizzleNV' structures
-    viewportSwizzles :: Vector ViewportSwizzleNV
-  }
-  deriving (Typeable)
-deriving instance Show PipelineViewportSwizzleStateCreateInfoNV
-
-instance ToCStruct PipelineViewportSwizzleStateCreateInfoNV where
-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p PipelineViewportSwizzleStateCreateInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineViewportSwizzleStateCreateFlagsNV)) (flags)
-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (viewportSwizzles)) :: Word32))
-    pPViewportSwizzles' <- ContT $ allocaBytesAligned @ViewportSwizzleNV ((Data.Vector.length (viewportSwizzles)) * 16) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewportSwizzles' `plusPtr` (16 * (i)) :: Ptr ViewportSwizzleNV) (e) . ($ ())) (viewportSwizzles)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ViewportSwizzleNV))) (pPViewportSwizzles')
-    lift $ f
-  cStructSize = 32
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPViewportSwizzles' <- ContT $ allocaBytesAligned @ViewportSwizzleNV ((Data.Vector.length (mempty)) * 16) 4
-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewportSwizzles' `plusPtr` (16 * (i)) :: Ptr ViewportSwizzleNV) (e) . ($ ())) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ViewportSwizzleNV))) (pPViewportSwizzles')
-    lift $ f
-
-instance FromCStruct PipelineViewportSwizzleStateCreateInfoNV where
-  peekCStruct p = do
-    flags <- peek @PipelineViewportSwizzleStateCreateFlagsNV ((p `plusPtr` 16 :: Ptr PipelineViewportSwizzleStateCreateFlagsNV))
-    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
-    pViewportSwizzles <- peek @(Ptr ViewportSwizzleNV) ((p `plusPtr` 24 :: Ptr (Ptr ViewportSwizzleNV)))
-    pViewportSwizzles' <- generateM (fromIntegral viewportCount) (\i -> peekCStruct @ViewportSwizzleNV ((pViewportSwizzles `advancePtrBytes` (16 * (i)) :: Ptr ViewportSwizzleNV)))
-    pure $ PipelineViewportSwizzleStateCreateInfoNV
-             flags pViewportSwizzles'
-
-instance Zero PipelineViewportSwizzleStateCreateInfoNV where
-  zero = PipelineViewportSwizzleStateCreateInfoNV
-           zero
-           mempty
-
-
--- | VkPipelineViewportSwizzleStateCreateFlagsNV - Reserved for future use
---
--- = Description
---
--- 'PipelineViewportSwizzleStateCreateFlagsNV' is a bitmask type for
--- setting a mask, but is currently reserved for future use.
---
--- = See Also
---
--- 'PipelineViewportSwizzleStateCreateInfoNV'
-newtype PipelineViewportSwizzleStateCreateFlagsNV = PipelineViewportSwizzleStateCreateFlagsNV Flags
-  deriving newtype (Eq, Ord, Storable, Zero, Bits)
-
-
-
-instance Show PipelineViewportSwizzleStateCreateFlagsNV where
-  showsPrec p = \case
-    PipelineViewportSwizzleStateCreateFlagsNV x -> showParen (p >= 11) (showString "PipelineViewportSwizzleStateCreateFlagsNV 0x" . showHex x)
-
-instance Read PipelineViewportSwizzleStateCreateFlagsNV where
-  readPrec = parens (choose []
-                     +++
-                     prec 10 (do
-                       expectP (Ident "PipelineViewportSwizzleStateCreateFlagsNV")
-                       v <- step readPrec
-                       pure (PipelineViewportSwizzleStateCreateFlagsNV v)))
-
-
--- | VkViewportCoordinateSwizzleNV - Specify how a viewport coordinate is
--- swizzled
---
--- = Description
---
--- These values are described in detail in
--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-viewport-swizzle Viewport Swizzle>.
---
--- = See Also
---
--- 'ViewportSwizzleNV'
-newtype ViewportCoordinateSwizzleNV = ViewportCoordinateSwizzleNV Int32
-  deriving newtype (Eq, Ord, Storable, Zero)
-
--- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV"
-pattern VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = ViewportCoordinateSwizzleNV 0
--- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV"
-pattern VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = ViewportCoordinateSwizzleNV 1
--- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV"
-pattern VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = ViewportCoordinateSwizzleNV 2
--- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV"
-pattern VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = ViewportCoordinateSwizzleNV 3
--- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV"
-pattern VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = ViewportCoordinateSwizzleNV 4
--- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV"
-pattern VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = ViewportCoordinateSwizzleNV 5
--- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV"
-pattern VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = ViewportCoordinateSwizzleNV 6
--- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV"
-pattern VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = ViewportCoordinateSwizzleNV 7
-{-# complete VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV,
-             VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV,
-             VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV,
-             VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV,
-             VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV,
-             VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV,
-             VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV,
-             VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV :: ViewportCoordinateSwizzleNV #-}
-
-instance Show ViewportCoordinateSwizzleNV where
-  showsPrec p = \case
-    VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV"
-    VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV"
-    VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV"
-    VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV"
-    VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV"
-    VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV"
-    VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV"
-    VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV"
-    ViewportCoordinateSwizzleNV x -> showParen (p >= 11) (showString "ViewportCoordinateSwizzleNV " . showsPrec 11 x)
-
-instance Read ViewportCoordinateSwizzleNV where
-  readPrec = parens (choose [("VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV", pure VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV)
-                            , ("VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV", pure VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV)
-                            , ("VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV", pure VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV)
-                            , ("VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV", pure VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV)
-                            , ("VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV", pure VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV)
-                            , ("VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV", pure VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV)
-                            , ("VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV", pure VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV)
-                            , ("VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV", pure VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV)]
-                     +++
-                     prec 10 (do
-                       expectP (Ident "ViewportCoordinateSwizzleNV")
-                       v <- step readPrec
-                       pure (ViewportCoordinateSwizzleNV v)))
-
-
-type NV_VIEWPORT_SWIZZLE_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION"
-pattern NV_VIEWPORT_SWIZZLE_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_VIEWPORT_SWIZZLE_SPEC_VERSION = 1
-
-
-type NV_VIEWPORT_SWIZZLE_EXTENSION_NAME = "VK_NV_viewport_swizzle"
-
--- No documentation found for TopLevel "VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME"
-pattern NV_VIEWPORT_SWIZZLE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_VIEWPORT_SWIZZLE_EXTENSION_NAME = "VK_NV_viewport_swizzle"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle  ( PipelineViewportSwizzleStateCreateInfoNV
-                                                          , ViewportSwizzleNV
-                                                          ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data PipelineViewportSwizzleStateCreateInfoNV
-
-instance ToCStruct PipelineViewportSwizzleStateCreateInfoNV
-instance Show PipelineViewportSwizzleStateCreateInfoNV
-
-instance FromCStruct PipelineViewportSwizzleStateCreateInfoNV
-
-
-data ViewportSwizzleNV
-
-instance ToCStruct ViewportSwizzleNV
-instance Show ViewportSwizzleNV
-
-instance FromCStruct ViewportSwizzleNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs b/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs
+++ /dev/null
@@ -1,193 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex  ( Win32KeyedMutexAcquireReleaseInfoNV(..)
-                                                           , NV_WIN32_KEYED_MUTEX_SPEC_VERSION
-                                                           , pattern NV_WIN32_KEYED_MUTEX_SPEC_VERSION
-                                                           , NV_WIN32_KEYED_MUTEX_EXTENSION_NAME
-                                                           , pattern NV_WIN32_KEYED_MUTEX_EXTENSION_NAME
-                                                           ) where
-
-import Control.Monad (unless)
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import GHC.IO (throwIO)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.Vector (generateM)
-import qualified Data.Vector (imapM_)
-import qualified Data.Vector (length)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import GHC.IO.Exception (IOErrorType(..))
-import GHC.IO.Exception (IOException(..))
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.Vector (Vector)
-import Graphics.Vulkan.CStruct.Utils (advancePtrBytes)
-import Graphics.Vulkan.Core10.Handles (DeviceMemory)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV))
--- | VkWin32KeyedMutexAcquireReleaseInfoNV - use Windows keyex mutex
--- mechanism to synchronize work
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.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
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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
---     'Graphics.Vulkan.Core10.Handles.DeviceMemory' 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 of non-ignored parameters
---     /must/ have been created, allocated, or retrieved from the same
---     'Graphics.Vulkan.Core10.Handles.Device'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Handles.DeviceMemory',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType'
-data Win32KeyedMutexAcquireReleaseInfoNV = Win32KeyedMutexAcquireReleaseInfoNV
-  { -- | @pAcquireSyncs@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.DeviceMemory' objects which were
-    -- imported from Direct3D 11 resources.
-    acquireSyncs :: Vector DeviceMemory
-  , -- | @pAcquireKeys@ is a pointer to an array of mutex key values to wait for
-    -- prior to beginning the submitted work. Entries refer to the keyed mutex
-    -- associated with the corresponding entries in @pAcquireSyncs@.
-    acquireKeys :: Vector Word64
-  , -- | @pAcquireTimeoutMilliseconds@ is a pointer to an array of timeout
-    -- values, in millisecond units, for each acquire specified in
-    -- @pAcquireKeys@.
-    acquireTimeoutMilliseconds :: Vector Word32
-  , -- | @pReleaseSyncs@ is a pointer to an array of
-    -- 'Graphics.Vulkan.Core10.Handles.DeviceMemory' objects which were
-    -- imported from Direct3D 11 resources.
-    releaseSyncs :: Vector DeviceMemory
-  , -- | @pReleaseKeys@ is a pointer to an array of mutex key values to set when
-    -- the submitted work has completed. Entries refer to the keyed mutex
-    -- associated with the corresponding entries in @pReleaseSyncs@.
-    releaseKeys :: Vector Word64
-  }
-  deriving (Typeable)
-deriving instance Show Win32KeyedMutexAcquireReleaseInfoNV
-
-instance ToCStruct Win32KeyedMutexAcquireReleaseInfoNV where
-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p Win32KeyedMutexAcquireReleaseInfoNV{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    let pAcquireSyncsLength = Data.Vector.length $ (acquireSyncs)
-    let pAcquireKeysLength = Data.Vector.length $ (acquireKeys)
-    lift $ unless (pAcquireKeysLength == pAcquireSyncsLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pAcquireKeys and pAcquireSyncs must have the same length" Nothing Nothing
-    let pAcquireTimeoutMillisecondsLength = Data.Vector.length $ (acquireTimeoutMilliseconds)
-    lift $ unless (pAcquireTimeoutMillisecondsLength == pAcquireSyncsLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pAcquireTimeoutMilliseconds and pAcquireSyncs must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral pAcquireSyncsLength :: Word32))
-    pPAcquireSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (acquireSyncs)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (acquireSyncs)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory))) (pPAcquireSyncs')
-    pPAcquireKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (acquireKeys)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (acquireKeys)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPAcquireKeys')
-    pPAcquireTimeoutMilliseconds' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (acquireTimeoutMilliseconds)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireTimeoutMilliseconds' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (acquireTimeoutMilliseconds)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPAcquireTimeoutMilliseconds')
-    let pReleaseSyncsLength = Data.Vector.length $ (releaseSyncs)
-    let pReleaseKeysLength = Data.Vector.length $ (releaseKeys)
-    lift $ unless (pReleaseKeysLength == pReleaseSyncsLength) $
-      throwIO $ IOError Nothing InvalidArgument "" "pReleaseKeys and pReleaseSyncs must have the same length" Nothing Nothing
-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral pReleaseSyncsLength :: Word32))
-    pPReleaseSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (releaseSyncs)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (releaseSyncs)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory))) (pPReleaseSyncs')
-    pPReleaseKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (releaseKeys)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (releaseKeys)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word64))) (pPReleaseKeys')
-    lift $ f
-  cStructSize = 72
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    pPAcquireSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory))) (pPAcquireSyncs')
-    pPAcquireKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPAcquireKeys')
-    pPAcquireTimeoutMilliseconds' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireTimeoutMilliseconds' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPAcquireTimeoutMilliseconds')
-    pPReleaseSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory))) (pPReleaseSyncs')
-    pPReleaseKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
-    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
-    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word64))) (pPReleaseKeys')
-    lift $ f
-
-instance FromCStruct Win32KeyedMutexAcquireReleaseInfoNV where
-  peekCStruct p = do
-    acquireCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
-    pAcquireSyncs <- peek @(Ptr DeviceMemory) ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory)))
-    pAcquireSyncs' <- generateM (fromIntegral acquireCount) (\i -> peek @DeviceMemory ((pAcquireSyncs `advancePtrBytes` (8 * (i)) :: Ptr DeviceMemory)))
-    pAcquireKeys <- peek @(Ptr Word64) ((p `plusPtr` 32 :: Ptr (Ptr Word64)))
-    pAcquireKeys' <- generateM (fromIntegral acquireCount) (\i -> peek @Word64 ((pAcquireKeys `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
-    pAcquireTimeoutMilliseconds <- peek @(Ptr Word32) ((p `plusPtr` 40 :: Ptr (Ptr Word32)))
-    pAcquireTimeoutMilliseconds' <- generateM (fromIntegral acquireCount) (\i -> peek @Word32 ((pAcquireTimeoutMilliseconds `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
-    releaseCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
-    pReleaseSyncs <- peek @(Ptr DeviceMemory) ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory)))
-    pReleaseSyncs' <- generateM (fromIntegral releaseCount) (\i -> peek @DeviceMemory ((pReleaseSyncs `advancePtrBytes` (8 * (i)) :: Ptr DeviceMemory)))
-    pReleaseKeys <- peek @(Ptr Word64) ((p `plusPtr` 64 :: Ptr (Ptr Word64)))
-    pReleaseKeys' <- generateM (fromIntegral releaseCount) (\i -> peek @Word64 ((pReleaseKeys `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
-    pure $ Win32KeyedMutexAcquireReleaseInfoNV
-             pAcquireSyncs' pAcquireKeys' pAcquireTimeoutMilliseconds' pReleaseSyncs' pReleaseKeys'
-
-instance Zero Win32KeyedMutexAcquireReleaseInfoNV where
-  zero = Win32KeyedMutexAcquireReleaseInfoNV
-           mempty
-           mempty
-           mempty
-           mempty
-           mempty
-
-
-type NV_WIN32_KEYED_MUTEX_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION"
-pattern NV_WIN32_KEYED_MUTEX_SPEC_VERSION :: forall a . Integral a => a
-pattern NV_WIN32_KEYED_MUTEX_SPEC_VERSION = 2
-
-
-type NV_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_NV_win32_keyed_mutex"
-
--- No documentation found for TopLevel "VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME"
-pattern NV_WIN32_KEYED_MUTEX_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern NV_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_NV_win32_keyed_mutex"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs-boot b/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex  (Win32KeyedMutexAcquireReleaseInfoNV) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data Win32KeyedMutexAcquireReleaseInfoNV
-
-instance ToCStruct Win32KeyedMutexAcquireReleaseInfoNV
-instance Show Win32KeyedMutexAcquireReleaseInfoNV
-
-instance FromCStruct Win32KeyedMutexAcquireReleaseInfoNV
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_shader_resolve.hs b/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_shader_resolve.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_shader_resolve.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_QCOM_render_pass_shader_resolve  ( QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION
-                                                                      , pattern QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION
-                                                                      , QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME
-                                                                      , pattern QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME
-                                                                      ) where
-
-import Data.String (IsString)
-
-type QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION = 4
-
--- No documentation found for TopLevel "VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION"
-pattern QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION :: forall a . Integral a => a
-pattern QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION = 4
-
-
-type QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME = "VK_QCOM_render_pass_shader_resolve"
-
--- No documentation found for TopLevel "VK_QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME"
-pattern QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME = "VK_QCOM_render_pass_shader_resolve"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_store_ops.hs b/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_store_ops.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_store_ops.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_QCOM_render_pass_store_ops  ( QCOM_render_pass_store_ops_SPEC_VERSION
-                                                                 , pattern QCOM_render_pass_store_ops_SPEC_VERSION
-                                                                 , QCOM_render_pass_store_ops_EXTENSION_NAME
-                                                                 , pattern QCOM_render_pass_store_ops_EXTENSION_NAME
-                                                                 ) where
-
-import Data.String (IsString)
-
-type QCOM_render_pass_store_ops_SPEC_VERSION = 2
-
--- No documentation found for TopLevel "VK_QCOM_render_pass_store_ops_SPEC_VERSION"
-pattern QCOM_render_pass_store_ops_SPEC_VERSION :: forall a . Integral a => a
-pattern QCOM_render_pass_store_ops_SPEC_VERSION = 2
-
-
-type QCOM_render_pass_store_ops_EXTENSION_NAME = "VK_QCOM_render_pass_store_ops"
-
--- No documentation found for TopLevel "VK_QCOM_render_pass_store_ops_EXTENSION_NAME"
-pattern QCOM_render_pass_store_ops_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern QCOM_render_pass_store_ops_EXTENSION_NAME = "VK_QCOM_render_pass_store_ops"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs b/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs
+++ /dev/null
@@ -1,180 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform  ( RenderPassTransformBeginInfoQCOM(..)
-                                                                 , CommandBufferInheritanceRenderPassTransformInfoQCOM(..)
-                                                                 , QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION
-                                                                 , pattern QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION
-                                                                 , QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME
-                                                                 , pattern QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME
-                                                                 , SurfaceTransformFlagBitsKHR(..)
-                                                                 , SurfaceTransformFlagsKHR
-                                                                 ) where
-
-import Foreign.Marshal.Alloc (allocaBytesAligned)
-import Foreign.Ptr (nullPtr)
-import Foreign.Ptr (plusPtr)
-import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (evalContT)
-import Data.String (IsString)
-import Data.Typeable (Typeable)
-import Foreign.Storable (Storable)
-import Foreign.Storable (Storable(peek))
-import Foreign.Storable (Storable(poke))
-import qualified Foreign.Storable (Storable(..))
-import Foreign.Ptr (Ptr)
-import Data.Kind (Type)
-import Control.Monad.Trans.Cont (ContT(..))
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (FromCStruct(..))
-import Graphics.Vulkan.Core10.CommandBufferBuilding (Rect2D)
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType)
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR)
-import Graphics.Vulkan.CStruct (ToCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct(..))
-import Graphics.Vulkan.Zero (Zero(..))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM))
-import Graphics.Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagBitsKHR(..))
-import Graphics.Vulkan.Extensions.VK_KHR_display (SurfaceTransformFlagsKHR)
--- | VkRenderPassTransformBeginInfoQCOM - Structure describing transform
--- parameters of a render pass instance
---
--- == Valid Usage
---
--- -   @transform@ /must/ be
---     'Graphics.Vulkan.Extensions.VK_KHR_display.SURFACE_TRANSFORM_IDENTITY_BIT_KHR',
---     'Graphics.Vulkan.Extensions.VK_KHR_display.SURFACE_TRANSFORM_ROTATE_90_BIT_KHR',
---     'Graphics.Vulkan.Extensions.VK_KHR_display.SURFACE_TRANSFORM_ROTATE_180_BIT_KHR',
---     or
---     'Graphics.Vulkan.Extensions.VK_KHR_display.SURFACE_TRANSFORM_ROTATE_270_BIT_KHR'
---
--- -   The @renderpass@ /must/ have been created with
---     'Graphics.Vulkan.Core10.Pass.RenderPassCreateInfo'::@flags@
---     containing
---     'Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits.RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM'
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     'Graphics.Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM'
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagBitsKHR'
-data RenderPassTransformBeginInfoQCOM = RenderPassTransformBeginInfoQCOM
-  { -- | @transform@ is a
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagBitsKHR'
-    -- value describing the transform to be applied to rasterization.
-    transform :: SurfaceTransformFlagBitsKHR }
-  deriving (Typeable)
-deriving instance Show RenderPassTransformBeginInfoQCOM
-
-instance ToCStruct RenderPassTransformBeginInfoQCOM where
-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p RenderPassTransformBeginInfoQCOM{..} f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR)) (transform)
-    f
-  cStructSize = 24
-  cStructAlignment = 8
-  pokeZeroCStruct p f = do
-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM)
-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    poke ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
-    f
-
-instance FromCStruct RenderPassTransformBeginInfoQCOM where
-  peekCStruct p = do
-    transform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR))
-    pure $ RenderPassTransformBeginInfoQCOM
-             transform
-
-instance Storable RenderPassTransformBeginInfoQCOM where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek = peekCStruct
-  poke ptr poked = pokeCStruct ptr poked (pure ())
-
-instance Zero RenderPassTransformBeginInfoQCOM where
-  zero = RenderPassTransformBeginInfoQCOM
-           zero
-
-
--- | VkCommandBufferInheritanceRenderPassTransformInfoQCOM - Structure
--- describing transformed render pass parameters command buffer
---
--- = Description
---
--- When the secondary is recorded to execute within a render pass instance
--- using 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdExecuteCommands',
--- the render pass transform parameters of the secondary command buffer
--- /must/ be consistent with the render pass transform parameters specified
--- for the render pass instance. In particular, the @transform@ and
--- @renderArea@ for command buffer /must/ be identical to the @transform@
--- and @renderArea@ of the render pass instance.
---
--- == Valid Usage (Implicit)
---
--- = See Also
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.Rect2D',
--- 'Graphics.Vulkan.Core10.Enums.StructureType.StructureType',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.SurfaceTransformFlagBitsKHR'
-data CommandBufferInheritanceRenderPassTransformInfoQCOM = CommandBufferInheritanceRenderPassTransformInfoQCOM
-  { -- | @transform@ /must/ be
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.SURFACE_TRANSFORM_IDENTITY_BIT_KHR',
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.SURFACE_TRANSFORM_ROTATE_90_BIT_KHR',
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.SURFACE_TRANSFORM_ROTATE_180_BIT_KHR',
-    -- or
-    -- 'Graphics.Vulkan.Extensions.VK_KHR_display.SURFACE_TRANSFORM_ROTATE_270_BIT_KHR'
-    transform :: SurfaceTransformFlagBitsKHR
-  , -- | @renderArea@ is the render area that is affected by the command buffer.
-    renderArea :: Rect2D
-  }
-  deriving (Typeable)
-deriving instance Show CommandBufferInheritanceRenderPassTransformInfoQCOM
-
-instance ToCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM where
-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
-  pokeCStruct p CommandBufferInheritanceRenderPassTransformInfoQCOM{..} f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR)) (transform)
-    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Rect2D)) (renderArea) . ($ ())
-    lift $ f
-  cStructSize = 40
-  cStructAlignment = 8
-  pokeZeroCStruct p f = evalContT $ do
-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM)
-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
-    lift $ poke ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
-    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Rect2D)) (zero) . ($ ())
-    lift $ f
-
-instance FromCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM where
-  peekCStruct p = do
-    transform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR))
-    renderArea <- peekCStruct @Rect2D ((p `plusPtr` 20 :: Ptr Rect2D))
-    pure $ CommandBufferInheritanceRenderPassTransformInfoQCOM
-             transform renderArea
-
-instance Zero CommandBufferInheritanceRenderPassTransformInfoQCOM where
-  zero = CommandBufferInheritanceRenderPassTransformInfoQCOM
-           zero
-           zero
-
-
-type QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION = 1
-
--- No documentation found for TopLevel "VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION"
-pattern QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION :: forall a . Integral a => a
-pattern QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION = 1
-
-
-type QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME = "VK_QCOM_render_pass_transform"
-
--- No documentation found for TopLevel "VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME"
-pattern QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
-pattern QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME = "VK_QCOM_render_pass_transform"
-
diff --git a/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs-boot b/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs-boot
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform  ( CommandBufferInheritanceRenderPassTransformInfoQCOM
-                                                                 , RenderPassTransformBeginInfoQCOM
-                                                                 ) where
-
-import Data.Kind (Type)
-import Graphics.Vulkan.CStruct (FromCStruct)
-import Graphics.Vulkan.CStruct (ToCStruct)
-data CommandBufferInheritanceRenderPassTransformInfoQCOM
-
-instance ToCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM
-instance Show CommandBufferInheritanceRenderPassTransformInfoQCOM
-
-instance FromCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM
-
-
-data RenderPassTransformBeginInfoQCOM
-
-instance ToCStruct RenderPassTransformBeginInfoQCOM
-instance Show RenderPassTransformBeginInfoQCOM
-
-instance FromCStruct RenderPassTransformBeginInfoQCOM
-
diff --git a/src/Graphics/Vulkan/Extensions/WSITypes.hs b/src/Graphics/Vulkan/Extensions/WSITypes.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/WSITypes.hs
+++ /dev/null
@@ -1,95 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.WSITypes  ( HINSTANCE
-                                            , HWND
-                                            , HMONITOR
-                                            , HANDLE
-                                            , DWORD
-                                            , LPCWSTR
-                                            , Display
-                                            , VisualID
-                                            , Window
-                                            , RROutput
-                                            , Xcb_visualid_t
-                                            , Xcb_window_t
-                                            , Zx_handle_t
-                                            , GgpStreamDescriptor
-                                            , GgpFrameToken
-                                            , SECURITY_ATTRIBUTES
-                                            , Xcb_connection_t
-                                            , Wl_display
-                                            , Wl_surface
-                                            , CAMetalLayer
-                                            , AHardwareBuffer
-                                            , ANativeWindow
-                                            ) where
-
-import Foreign.C.Types (CWchar)
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-
-type HINSTANCE = Ptr ()
-
-
-type HWND = Ptr ()
-
-
-type HMONITOR = Ptr ()
-
-
-type HANDLE = Ptr ()
-
-
-type DWORD = Word32
-
-
-type LPCWSTR = Ptr CWchar
-
-
-type Display = Ptr ()
-
-
-type VisualID = Word64
-
-
-type Window = Word64
-
-
-type RROutput = Word64
-
-
-type Xcb_visualid_t = Word32
-
-
-type Xcb_window_t = Word32
-
-
-type Zx_handle_t = Word32
-
-
-type GgpStreamDescriptor = Word32
-
-
-type GgpFrameToken = Word32
-
-
-data SECURITY_ATTRIBUTES
-
-
-data Xcb_connection_t
-
-
-data Wl_display
-
-
-data Wl_surface
-
-
-data CAMetalLayer
-
-
-data AHardwareBuffer
-
-
-data ANativeWindow
-
diff --git a/src/Graphics/Vulkan/Extensions/WSITypes.hs-boot b/src/Graphics/Vulkan/Extensions/WSITypes.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Extensions/WSITypes.hs-boot
+++ /dev/null
@@ -1,38 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Extensions.WSITypes  ( AHardwareBuffer
-                                            , Display
-                                            , HANDLE
-                                            , RROutput
-                                            , VisualID
-                                            , Wl_display
-                                            , Xcb_connection_t
-                                            , Xcb_visualid_t
-                                            ) where
-
-import Foreign.Ptr (Ptr)
-import Data.Word (Word32)
-import Data.Word (Word64)
-
-data AHardwareBuffer
-
-
-type Display = Ptr ()
-
-
-type HANDLE = Ptr ()
-
-
-type RROutput = Word64
-
-
-type VisualID = Word64
-
-
-data Wl_display
-
-
-data Xcb_connection_t
-
-
-type Xcb_visualid_t = Word32
-
diff --git a/src/Graphics/Vulkan/NamedType.hs b/src/Graphics/Vulkan/NamedType.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/NamedType.hs
+++ /dev/null
@@ -1,8 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.NamedType  ((:::)) where
-
-
-
--- | Annotate a type with a name
-type (name :: k) ::: a = a
-
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,37 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Version  ( pattern HEADER_VERSION
-                                , pattern HEADER_VERSION_COMPLETE
-                                , pattern MAKE_VERSION
-                                , _VERSION_MAJOR
-                                , _VERSION_MINOR
-                                , _VERSION_PATCH
-                                ) where
-
-import Data.Bits ((.&.))
-import Data.Bits ((.|.))
-import Data.Bits (shiftL)
-import Data.Bits (shiftR)
-import Data.Word (Word32)
-
-pattern HEADER_VERSION :: Word32
-pattern HEADER_VERSION = 139
-
-
-pattern HEADER_VERSION_COMPLETE :: Word32
-pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 139
-
-
-pattern MAKE_VERSION :: Word32 -> Word32 -> Word32 -> Word32
-pattern MAKE_VERSION major minor patch <-
-  (\v -> (_VERSION_MAJOR v, _VERSION_MINOR v, _VERSION_PATCH v) -> (major, minor, patch))
-  where MAKE_VERSION major minor patch = major `shiftL` 22 .|. minor `shiftL` 12 .|. patch
-
-_VERSION_MAJOR :: Word32 -> Word32
-_VERSION_MAJOR v = v `shiftR` 22
-
-_VERSION_MINOR :: Word32 -> Word32
-_VERSION_MINOR v = v `shiftR` 12 .&. 0x3ff
-
-_VERSION_PATCH :: Word32 -> Word32
-_VERSION_PATCH v = v .&. 0xfff
-
diff --git a/src/Graphics/Vulkan/Zero.hs b/src/Graphics/Vulkan/Zero.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Zero.hs
+++ /dev/null
@@ -1,82 +0,0 @@
-{-# language CPP #-}
-module Graphics.Vulkan.Zero  (Zero(..)) where
-
-import GHC.Ptr (nullFunPtr)
-import Foreign.Ptr (nullPtr)
-import Foreign.C.Types (CChar)
-import Foreign.C.Types (CFloat)
-import Foreign.C.Types (CInt)
-import Foreign.C.Types (CSize)
-import Foreign.Storable (Storable)
-import Data.Int (Int16)
-import Data.Int (Int32)
-import Data.Int (Int64)
-import Data.Int (Int8)
-import Foreign.Ptr (FunPtr)
-import Foreign.Ptr (Ptr)
-import GHC.TypeNats (KnownNat)
-import Data.Word (Word16)
-import Data.Word (Word32)
-import Data.Word (Word64)
-import Data.Word (Word8)
-
--- | A class for initializing things with all zero data
---
--- Any instance should satisfy the following law:
---
--- @ new zero = calloc @ or @ with zero = withZeroCStruct @
---
--- i.e. Marshaling @zero@ to memory yeilds only zero-valued bytes, except
--- for structs which require a "type" tag
---
-class Zero a where
-  zero :: a
-
-instance Zero Bool where
-  zero = False
-
-instance Zero (FunPtr a) where
-  zero = nullFunPtr
-
-instance Zero (Ptr a) where
-  zero = nullPtr
-
-instance Zero Int8 where
-  zero = 0
-
-instance Zero Int16 where
-  zero = 0
-
-instance Zero Int32 where
-  zero = 0
-
-instance Zero Int64 where
-  zero = 0
-
-instance Zero Word8 where
-  zero = 0
-
-instance Zero Word16 where
-  zero = 0
-
-instance Zero Word32 where
-  zero = 0
-
-instance Zero Word64 where
-  zero = 0
-
-instance Zero Float where
-  zero = 0
-
-instance Zero CFloat where
-  zero = 0
-
-instance Zero CChar where
-  zero = 0
-
-instance Zero CSize where
-  zero = 0
-
-instance Zero CInt where
-  zero = 0
-
diff --git a/src/Vulkan.hs b/src/Vulkan.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan.hs
@@ -0,0 +1,19 @@
+{-# language CPP #-}
+module Vulkan  ( module Vulkan.CStruct
+               , module Vulkan.Core10
+               , module Vulkan.Core11
+               , module Vulkan.Core12
+               , module Vulkan.Extensions
+               , module Vulkan.NamedType
+               , module Vulkan.Version
+               , module Vulkan.Zero
+               ) where
+import Vulkan.CStruct
+import Vulkan.Core10
+import Vulkan.Core11
+import Vulkan.Core12
+import Vulkan.Extensions
+import Vulkan.NamedType
+import Vulkan.Version
+import Vulkan.Zero
+
diff --git a/src/Vulkan/CStruct.hs b/src/Vulkan/CStruct.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/CStruct.hs
@@ -0,0 +1,52 @@
+{-# language CPP #-}
+module Vulkan.CStruct  ( ToCStruct(..)
+                       , FromCStruct(..)
+                       ) where
+
+import Control.Exception.Base (bracket)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Ptr (Ptr)
+
+-- | A class for types which can be marshalled into a C style
+-- structure.
+class ToCStruct a where
+  -- | Allocates a C type structure and all dependencies and passes
+  -- it to a continuation. The space is deallocated when this
+  -- continuation returns and the C type structure must not be
+  -- returned out of it.
+  withCStruct :: a -> (Ptr a -> IO b) -> IO b
+  withCStruct x f = allocaBytesAligned (cStructSize @a) (cStructAlignment @a)
+    $ \p -> pokeCStruct p x (f p)
+
+  -- | Write a C type struct into some existing memory and run a
+  -- continuation. The pointed to structure is not necessarily valid
+  -- outside the continuation as additional allocations may have been
+  -- made.
+  pokeCStruct :: Ptr a -> a -> IO b -> IO b
+
+  -- | Allocate space for an "empty" @a@ and populate any univalued
+  -- members with their value.
+  withZeroCStruct :: (Ptr a -> IO b) -> IO b
+  withZeroCStruct f =
+    bracket (callocBytes @a (cStructSize @a)) free $ \p -> pokeZeroCStruct p (f p)
+
+  -- | And populate any univalued members with their value, run a
+  -- function and then clean up any allocated resources.
+  pokeZeroCStruct :: Ptr a -> IO b -> IO b
+
+  -- | The size of this struct, note that this doesn't account for any
+  -- extra pointed-to data
+  cStructSize :: Int
+
+  -- | The required memory alignment for this type
+  cStructAlignment :: Int
+
+
+-- | A class for types which can be marshalled from a C style
+-- structure.
+class FromCStruct a where
+  -- | Read an @a@ and any other pointed to data from memory
+  peekCStruct :: Ptr a -> IO a
+
diff --git a/src/Vulkan/CStruct/Extends.hs b/src/Vulkan/CStruct/Extends.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/CStruct/Extends.hs
@@ -0,0 +1,1418 @@
+{-# language CPP #-}
+module Vulkan.CStruct.Extends  ( BaseOutStructure(..)
+                               , BaseInStructure(..)
+                               , Extends
+                               , PeekChain(..)
+                               , PokeChain(..)
+                               , Chain
+                               , Extendss
+                               , SomeStruct(..)
+                               , withSomeCStruct
+                               , peekSomeCStruct
+                               , pokeSomeCStruct
+                               , forgetExtensions
+                               , Extensible(..)
+                               , pattern (::&)
+                               , pattern (:&)
+                               ) where
+
+import Data.Maybe (fromMaybe)
+import Type.Reflection (typeRep)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Base (join)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Proxy (Proxy(Proxy))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (Ptr)
+import GHC.TypeLits (ErrorMessage(..))
+import GHC.TypeLits (TypeError)
+import Data.Kind (Constraint)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AabbPositionsKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureBuildGeometryInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureBuildOffsetInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureCreateGeometryTypeInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureDeviceAddressInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureGeometryAabbsDataKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureGeometryInstancesDataKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureGeometryKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureGeometryTrianglesDataKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureInstanceKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureMemoryRequirementsInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureVersionKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (AcquireNextImageInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (AcquireProfilingLockInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (AndroidHardwareBufferFormatPropertiesANDROID)
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (AndroidHardwareBufferPropertiesANDROID)
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (AndroidHardwareBufferUsageANDROID)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_android_surface (AndroidSurfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (ApplicationInfo)
+import {-# SOURCE #-} Vulkan.Core10.Pass (AttachmentDescription)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentDescription2)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentDescriptionStencilLayout)
+import {-# SOURCE #-} Vulkan.Core10.Pass (AttachmentReference)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentReference2)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentReferenceStencilLayout)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (AttachmentSampleLocationsEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (BindAccelerationStructureMemoryInfoKHR)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindBufferMemoryDeviceGroupInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindBufferMemoryInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindImageMemoryDeviceGroupInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindImageMemoryInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (BindImageMemorySwapchainInfoKHR)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (BindImagePlaneMemoryInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (BindIndexBufferIndirectCommandNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (BindShaderGroupIndirectCommandNV)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (BindSparseInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (BindVertexBufferIndirectCommandNV)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (BufferCopy)
+import {-# SOURCE #-} Vulkan.Core10.Buffer (BufferCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_buffer_device_address (BufferDeviceAddressCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferDeviceAddressInfo)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (BufferImageCopy)
+import {-# SOURCE #-} Vulkan.Core10.OtherTypes (BufferMemoryBarrier)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (BufferMemoryRequirementsInfo2)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferOpaqueCaptureAddressCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.BufferView (BufferViewCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_calibrated_timestamps (CalibratedTimestampInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints (CheckpointDataNV)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ClearAttachment)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (ClearDepthStencilValue)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ClearRect)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (CoarseSampleLocationNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (CoarseSampleOrderCustomNV)
+import {-# SOURCE #-} Vulkan.Core10.CommandBuffer (CommandBufferAllocateInfo)
+import {-# SOURCE #-} Vulkan.Core10.CommandBuffer (CommandBufferBeginInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conditional_rendering (CommandBufferInheritanceConditionalRenderingInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.CommandBuffer (CommandBufferInheritanceInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_render_pass_transform (CommandBufferInheritanceRenderPassTransformInfoQCOM)
+import {-# SOURCE #-} Vulkan.Core10.CommandPool (CommandPoolCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.ImageView (ComponentMapping)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (ComputePipelineCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conditional_rendering (ConditionalRenderingBeginInfoEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (ConformanceVersion)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_matrix (CooperativeMatrixPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureToMemoryInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (CopyDescriptorSet)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyMemoryToAccelerationStructureInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_win32 (D3D12FenceSubmitInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerMarkerInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerObjectNameInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerObjectTagInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_report (DebugReportCallbackCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsLabelEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessengerCallbackDataEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessengerCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsObjectNameInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsObjectTagInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationBufferCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationImageCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationMemoryAllocateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_deferred_host_operations (DeferredOperationInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorBufferInfo)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorImageInfo)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorPoolCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (DescriptorPoolInlineUniformBlockCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorPoolSize)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorSetAllocateInfo)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorSetLayoutBinding)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetLayoutBindingFlagsCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorSetLayoutCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (DescriptorSetLayoutSupport)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountAllocateInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountLayoutSupport)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateEntry)
+import {-# SOURCE #-} Vulkan.Core10.Device (DeviceCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (DeviceDiagnosticsConfigCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_control (DeviceEventInfoEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupBindSparseInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupCommandBufferBeginInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (DeviceGroupDeviceCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentCapabilitiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentInfoKHR)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupRenderPassBeginInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupSubmitInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupSwapchainCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (DeviceMemoryOpaqueCaptureAddressInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_memory_overallocation_behavior (DeviceMemoryOverallocationCreateInfoAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (DevicePrivateDataCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.Device (DeviceQueueCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_global_priority (DeviceQueueGlobalPriorityCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (DeviceQueueInfo2)
+import {-# SOURCE #-} Vulkan.Core10.OtherTypes (DispatchIndirectCommand)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_control (DisplayEventInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayModeCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayModeParametersKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayModeProperties2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayModePropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_display_native_hdr (DisplayNativeHdrSurfaceCapabilitiesAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneCapabilities2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayPlaneCapabilitiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneInfo2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneProperties2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayPlanePropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_control (DisplayPowerInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display_swapchain (DisplayPresentInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayProperties2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplaySurfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.OtherTypes (DrawIndexedIndirectCommand)
+import {-# SOURCE #-} Vulkan.Core10.OtherTypes (DrawIndirectCommand)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (DrawMeshTasksIndirectCommandNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (DrmFormatModifierPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (DrmFormatModifierPropertiesListEXT)
+import {-# SOURCE #-} Vulkan.Core10.Event (EventCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_fence (ExportFenceCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_fence_win32 (ExportFenceWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExportMemoryAllocateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory (ExportMemoryAllocateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (ExportMemoryWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_win32 (ExportMemoryWin32HandleInfoNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore (ExportSemaphoreCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_win32 (ExportSemaphoreWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.ExtensionDiscovery (ExtensionProperties)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (Extent2D)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (Extent3D)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalBufferProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (ExternalFenceProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (ExternalFormatANDROID)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalImageFormatProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalImageFormatPropertiesNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryBufferCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryImageCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory (ExternalMemoryImageCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalMemoryProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (ExternalSemaphoreProperties)
+import {-# SOURCE #-} Vulkan.Core10.Fence (FenceCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_fence_fd (FenceGetFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_fence_win32 (FenceGetWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_filter_cubic (FilterCubicImageViewImageFormatPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (FormatProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (FormatProperties2)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (FramebufferAttachmentImageInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (FramebufferAttachmentsCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.Pass (FramebufferCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (FramebufferMixedSamplesCombinationNV)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GeneratedCommandsInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GeneratedCommandsMemoryRequirementsInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (GeometryAABBNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (GeometryDataNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (GeometryNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (GeometryTrianglesNV)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (GraphicsPipelineCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsPipelineShaderGroupsCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsShaderGroupCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_hdr_metadata (HdrMetadataEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_headless_surface (HeadlessSurfaceCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_MVK_ios_surface (IOSSurfaceCreateInfoMVK)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ImageBlit)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ImageCopy)
+import {-# SOURCE #-} Vulkan.Core10.Image (ImageCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierExplicitCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierListCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_image_format_list (ImageFormatListCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (ImageFormatProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (ImageFormatProperties2)
+import {-# SOURCE #-} Vulkan.Core10.OtherTypes (ImageMemoryBarrier)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageMemoryRequirementsInfo2)
+import {-# SOURCE #-} Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface (ImagePipeSurfaceCreateInfoFUCHSIA)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (ImagePlaneMemoryRequirementsInfo)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ImageResolve)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageSparseMemoryRequirementsInfo2)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage (ImageStencilUsageCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.Image (ImageSubresource)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (ImageSubresourceLayers)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (ImageSubresourceRange)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (ImageSwapchainCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_astc_decode_mode (ImageViewASTCDecodeModeEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NVX_image_view_handle (ImageViewAddressPropertiesNVX)
+import {-# SOURCE #-} Vulkan.Core10.ImageView (ImageViewCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NVX_image_view_handle (ImageViewHandleInfoNVX)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (ImageViewUsageCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (ImportAndroidHardwareBufferInfoANDROID)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_fence_fd (ImportFenceFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_fence_win32 (ImportFenceWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_fd (ImportMemoryFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_external_memory_host (ImportMemoryHostPointerInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (ImportMemoryWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_win32 (ImportMemoryWin32HandleInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_fd (ImportSemaphoreFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_win32 (ImportSemaphoreWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (IndirectCommandsLayoutCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (IndirectCommandsLayoutTokenNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (IndirectCommandsStreamNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (InitializePerformanceApiInfoINTEL)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (InputAttachmentAspectReference)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (InstanceCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.LayerDiscovery (LayerProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_MVK_macos_surface (MacOSSurfaceCreateInfoMVK)
+import {-# SOURCE #-} Vulkan.Core10.Memory (MappedMemoryRange)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (MemoryAllocateFlagsInfo)
+import {-# SOURCE #-} Vulkan.Core10.Memory (MemoryAllocateInfo)
+import {-# SOURCE #-} Vulkan.Core10.OtherTypes (MemoryBarrier)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedAllocateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedRequirements)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryFdPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (MemoryGetAndroidHardwareBufferInfoANDROID)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryGetFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryGetWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (MemoryHeap)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_external_memory_host (MemoryHostPointerPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (MemoryOpaqueCaptureAddressAllocateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_priority (MemoryPriorityAllocateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.MemoryManagement (MemoryRequirements)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (MemoryType)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryWin32HandlePropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_metal_surface (MetalSurfaceCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (MultisamplePropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (Offset2D)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (Offset3D)
+import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (PastPresentationTimingGOOGLE)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceConfigurationAcquireInfoINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PerformanceCounterDescriptionKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PerformanceCounterKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceMarkerInfoINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceOverrideInfoINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PerformanceQuerySubmitInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceStreamMarkerInfoINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceValueINTEL)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage (PhysicalDevice16BitStorageFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage (PhysicalDevice8BitStorageFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_astc_decode_mode (PhysicalDeviceASTCDecodeFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_device_coherent_memory (PhysicalDeviceCoherentMemoryFeaturesAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_compute_shader_derivatives (PhysicalDeviceComputeShaderDerivativesFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conditional_rendering (PhysicalDeviceConditionalRenderingFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conservative_rasterization (PhysicalDeviceConservativeRasterizationPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_corner_sampled_image (PhysicalDeviceCornerSampledImageFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (PhysicalDeviceCoverageReductionModeFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_custom_border_color (PhysicalDeviceCustomBorderColorFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_custom_border_color (PhysicalDeviceCustomBorderColorPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing (PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PhysicalDeviceDepthClipEnableFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (PhysicalDeviceDepthStencilResolveProperties)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PhysicalDeviceDiscardRectanglePropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalBufferInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (PhysicalDeviceExternalFenceInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalImageFormatInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_external_memory_host (PhysicalDeviceExternalMemoryHostPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (PhysicalDeviceExternalSemaphoreInfo)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls (PhysicalDeviceFloatControlsProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shader_barycentric (PhysicalDeviceFragmentShaderBarycentricFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_shader_interlock (PhysicalDeviceFragmentShaderInterlockFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (PhysicalDeviceGroupProperties)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceIDProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (PhysicalDeviceImageDrmFormatModifierInfoEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceImageFormatInfo2)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_filter_cubic (PhysicalDeviceImageViewImageFormatInfoEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (PhysicalDeviceImagelessFramebufferFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_index_type_uint8 (PhysicalDeviceIndexTypeUint8FeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceLimits)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (PhysicalDeviceMaintenance3Properties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_budget (PhysicalDeviceMemoryBudgetPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMemoryPriorityFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceMemoryProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceMemoryProperties2)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderPropertiesNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NVX_multiview_per_view_attributes (PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pci_bus_info (PhysicalDevicePCIBusInfoPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PhysicalDevicePointClippingProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (PhysicalDevicePrivateDataFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceProperties2)
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_push_descriptor (PhysicalDevicePushDescriptorPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (PhysicalDeviceRayTracingPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PhysicalDeviceRepresentativeFragmentTestFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2FeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2PropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (PhysicalDeviceSampleLocationsPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (PhysicalDeviceSamplerFilterMinmaxProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_clock (PhysicalDeviceShaderClockFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_shader_core_properties2 (PhysicalDeviceShaderCoreProperties2AMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_shader_core_properties (PhysicalDeviceShaderCorePropertiesAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation (PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters (PhysicalDeviceShaderDrawParametersFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8 (PhysicalDeviceShaderFloat16Int8Features)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_image_footprint (PhysicalDeviceShaderImageFootprintFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_shader_integer_functions2 (PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsPropertiesNV)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types (PhysicalDeviceShaderSubgroupExtendedTypesFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImageFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImagePropertiesNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceSparseImageFormatInfo2)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceSparseProperties)
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup (PhysicalDeviceSubgroupProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (PhysicalDeviceSurfaceInfo2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr (PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_tooling_info (PhysicalDeviceToolPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout (PhysicalDeviceUniformBufferStandardLayoutFeatures)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers (PhysicalDeviceVariablePointersFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PhysicalDeviceVertexAttributeDivisorFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PhysicalDeviceVertexAttributeDivisorPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan11Features)
+import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan11Properties)
+import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Features)
+import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Properties)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core10.PipelineCache (PipelineCacheCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PipelineColorBlendAdvancedStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineColorBlendAttachmentState)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineColorBlendStateCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_pipeline_compiler_control (PipelineCompilerControlCreateInfoAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_framebuffer_mixed_samples (PipelineCoverageModulationStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (PipelineCoverageReductionStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_coverage_to_color (PipelineCoverageToColorStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackEXT)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineDepthStencilStateCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PipelineDiscardRectangleStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineDynamicStateCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableInternalRepresentationKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutablePropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableStatisticKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineInputAssemblyStateCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.PipelineLayout (PipelineLayoutCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineMultisampleStateCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conservative_rasterization (PipelineRasterizationConservativeStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PipelineRasterizationDepthClipStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PipelineRasterizationLineStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineRasterizationStateCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_rasterization_order (PipelineRasterizationStateRasterizationOrderAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PipelineRasterizationStateStreamCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PipelineRepresentativeFragmentTestStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (PipelineSampleLocationsStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subgroup_size_control (PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PipelineTessellationDomainOriginStateCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineTessellationStateCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PipelineVertexInputDivisorStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineVertexInputStateCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportCoarseSampleOrderStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PipelineViewportExclusiveScissorStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportShadingRateImageStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineViewportStateCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_viewport_swizzle (PipelineViewportSwizzleStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_clip_space_w_scaling (PipelineViewportWScalingStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_GGP_frame_token (PresentFrameTokenGGP)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (PresentInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_incremental_present (PresentRegionKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_incremental_present (PresentRegionsKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (PresentTimeGOOGLE)
+import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (PresentTimesInfoGOOGLE)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (PrivateDataSlotCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (ProtectedSubmitInfo)
+import {-# SOURCE #-} Vulkan.Core10.PipelineLayout (PushConstantRange)
+import {-# SOURCE #-} Vulkan.Core10.Query (QueryPoolCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (QueryPoolPerformanceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (QueryPoolPerformanceQueryCreateInfoINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints (QueueFamilyCheckpointPropertiesNV)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (QueueFamilyProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (QueueFamilyProperties2)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingPipelineCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (RayTracingPipelineCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingPipelineInterfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (RayTracingShaderGroupCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (Rect2D)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_incremental_present (RectLayerKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (RefreshCycleDurationGOOGLE)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (RenderPassAttachmentBeginInfo)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo)
+import {-# SOURCE #-} Vulkan.Core10.Pass (RenderPassCreateInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (RenderPassCreateInfo2)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (RenderPassFragmentDensityMapCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (RenderPassInputAttachmentAspectCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (RenderPassMultiviewCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (RenderPassSampleLocationsBeginInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_render_pass_transform (RenderPassTransformBeginInfoQCOM)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.Sampler (SamplerCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_custom_border_color (SamplerCustomBorderColorCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (SamplerReductionModeCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionImageFormatProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionInfo)
+import {-# SOURCE #-} Vulkan.Core10.QueueSemaphore (SemaphoreCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_fd (SemaphoreGetFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_win32 (SemaphoreGetWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreSignalInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreTypeCreateInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreWaitInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (SetStateFlagsIndirectCommandNV)
+import {-# SOURCE #-} Vulkan.Core10.Shader (ShaderModuleCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_validation_cache (ShaderModuleValidationCacheCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_shader_info (ShaderResourceUsageAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_shader_info (ShaderStatisticsInfoAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (ShadingRatePaletteNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shared_presentable_image (SharedPresentSurfaceCapabilitiesKHR)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (SparseBufferMemoryBindInfo)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (SparseImageFormatProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (SparseImageFormatProperties2)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (SparseImageMemoryBind)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (SparseImageMemoryBindInfo)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (SparseImageMemoryRequirements)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (SparseImageMemoryRequirements2)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (SparseImageOpaqueMemoryBindInfo)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (SparseMemoryBind)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (SpecializationInfo)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (SpecializationMapEntry)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (StencilOpState)
+import {-# SOURCE #-} Vulkan.Extensions.VK_GGP_stream_descriptor_surface (StreamDescriptorSurfaceCreateInfoGGP)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (StridedBufferRegionKHR)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+import {-# SOURCE #-} Vulkan.Core10.Queue (SubmitInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassBeginInfo)
+import {-# SOURCE #-} Vulkan.Core10.Pass (SubpassDependency)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassDependency2)
+import {-# SOURCE #-} Vulkan.Core10.Pass (SubpassDescription)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassDescription2)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (SubpassDescriptionDepthStencilResolve)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassEndInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SubpassSampleLocationsEXT)
+import {-# SOURCE #-} Vulkan.Core10.Image (SubresourceLayout)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCapabilities2EXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (SurfaceCapabilities2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceCapabilitiesFullScreenExclusiveEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_surface (SurfaceCapabilitiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (SurfaceFormat2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_surface (SurfaceFormatKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveWin32InfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_surface_protected_capabilities (SurfaceProtectedCapabilitiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_control (SwapchainCounterCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_display_native_hdr (SwapchainDisplayNativeHdrCreateInfoAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_texture_gather_bias_lod (TextureLODGatherFormatPropertiesAMD)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (TimelineSemaphoreSubmitInfo)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (TraceRaysIndirectCommandKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (TransformMatrixKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_validation_cache (ValidationCacheCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_validation_features (ValidationFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_validation_flags (ValidationFlagsEXT)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (VertexInputAttributeDescription)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (VertexInputBindingDescription)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (VertexInputBindingDivisorDescriptionEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NN_vi_surface (ViSurfaceCreateInfoNN)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (Viewport)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_viewport_swizzle (ViewportSwizzleNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_clip_space_w_scaling (ViewportWScalingNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_wayland_surface (WaylandSurfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_win32_keyed_mutex (Win32KeyedMutexAcquireReleaseInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_win32_keyed_mutex (Win32KeyedMutexAcquireReleaseInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_win32_surface (Win32SurfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (WriteDescriptorSet)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (WriteDescriptorSetAccelerationStructureKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (WriteDescriptorSetInlineUniformBlockEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_hdr_metadata (XYColorEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_xcb_surface (XcbSurfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_xlib_surface (XlibSurfaceCreateInfoKHR)
+import Vulkan.Zero (Zero(..))
+-- | VkBaseOutStructure - Base structure for a read-only pointer chain
+--
+-- = Description
+--
+-- 'BaseOutStructure' can be used to facilitate iterating through a
+-- structure pointer chain that returns data back to the application.
+--
+-- = See Also
+--
+-- 'BaseOutStructure', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data BaseOutStructure = BaseOutStructure
+  { -- | @sType@ is the structure type of the structure being iterated through.
+    sType :: StructureType
+  , -- | @pNext@ is @NULL@ or a pointer to the next structure in a structure
+    -- chain.
+    next :: Ptr BaseOutStructure
+  }
+  deriving (Typeable)
+deriving instance Show BaseOutStructure
+
+instance ToCStruct BaseOutStructure where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BaseOutStructure{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (sType)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr BaseOutStructure))) (next)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr BaseOutStructure))) (zero)
+    f
+
+instance FromCStruct BaseOutStructure where
+  peekCStruct p = do
+    sType <- peek @StructureType ((p `plusPtr` 0 :: Ptr StructureType))
+    pNext <- peek @(Ptr BaseOutStructure) ((p `plusPtr` 8 :: Ptr (Ptr BaseOutStructure)))
+    pure $ BaseOutStructure
+             sType pNext
+
+instance Storable BaseOutStructure where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BaseOutStructure where
+  zero = BaseOutStructure
+           zero
+           zero
+
+
+-- | VkBaseInStructure - Base structure for a read-only pointer chain
+--
+-- = Description
+--
+-- 'BaseInStructure' can be used to facilitate iterating through a
+-- read-only structure pointer chain.
+--
+-- = See Also
+--
+-- 'BaseInStructure', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data BaseInStructure = BaseInStructure
+  { -- | @sType@ is the structure type of the structure being iterated through.
+    sType :: StructureType
+  , -- | @pNext@ is @NULL@ or a pointer to the next structure in a structure
+    -- chain.
+    next :: Ptr BaseInStructure
+  }
+  deriving (Typeable)
+deriving instance Show BaseInStructure
+
+instance ToCStruct BaseInStructure where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BaseInStructure{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (sType)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr BaseInStructure))) (next)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr BaseInStructure))) (zero)
+    f
+
+instance FromCStruct BaseInStructure where
+  peekCStruct p = do
+    sType <- peek @StructureType ((p `plusPtr` 0 :: Ptr StructureType))
+    pNext <- peek @(Ptr BaseInStructure) ((p `plusPtr` 8 :: Ptr (Ptr BaseInStructure)))
+    pure $ BaseInStructure
+             sType pNext
+
+instance Storable BaseInStructure where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BaseInStructure where
+  zero = BaseInStructure
+           zero
+           zero
+
+
+type family Extends (a :: [Type] -> Type) (b :: Type) :: Constraint where
+  Extends AccelerationStructureBuildGeometryInfoKHR DeferredOperationInfoKHR = ()
+  Extends AndroidHardwareBufferPropertiesANDROID AndroidHardwareBufferFormatPropertiesANDROID = ()
+  Extends AttachmentDescription2 AttachmentDescriptionStencilLayout = ()
+  Extends AttachmentReference2 AttachmentReferenceStencilLayout = ()
+  Extends BindBufferMemoryInfo BindBufferMemoryDeviceGroupInfo = ()
+  Extends BindImageMemoryInfo BindImageMemoryDeviceGroupInfo = ()
+  Extends BindImageMemoryInfo BindImageMemorySwapchainInfoKHR = ()
+  Extends BindImageMemoryInfo BindImagePlaneMemoryInfo = ()
+  Extends BindSparseInfo DeviceGroupBindSparseInfo = ()
+  Extends BindSparseInfo TimelineSemaphoreSubmitInfo = ()
+  Extends BufferCreateInfo DedicatedAllocationBufferCreateInfoNV = ()
+  Extends BufferCreateInfo ExternalMemoryBufferCreateInfo = ()
+  Extends BufferCreateInfo BufferOpaqueCaptureAddressCreateInfo = ()
+  Extends BufferCreateInfo BufferDeviceAddressCreateInfoEXT = ()
+  Extends CommandBufferBeginInfo DeviceGroupCommandBufferBeginInfo = ()
+  Extends CommandBufferInheritanceInfo CommandBufferInheritanceConditionalRenderingInfoEXT = ()
+  Extends CommandBufferInheritanceInfo CommandBufferInheritanceRenderPassTransformInfoQCOM = ()
+  Extends ComputePipelineCreateInfo PipelineCreationFeedbackCreateInfoEXT = ()
+  Extends ComputePipelineCreateInfo PipelineCompilerControlCreateInfoAMD = ()
+  Extends CopyAccelerationStructureInfoKHR DeferredOperationInfoKHR = ()
+  Extends CopyAccelerationStructureToMemoryInfoKHR DeferredOperationInfoKHR = ()
+  Extends CopyMemoryToAccelerationStructureInfoKHR DeferredOperationInfoKHR = ()
+  Extends DescriptorPoolCreateInfo DescriptorPoolInlineUniformBlockCreateInfoEXT = ()
+  Extends DescriptorSetAllocateInfo DescriptorSetVariableDescriptorCountAllocateInfo = ()
+  Extends DescriptorSetLayoutCreateInfo DescriptorSetLayoutBindingFlagsCreateInfo = ()
+  Extends DescriptorSetLayoutSupport DescriptorSetVariableDescriptorCountLayoutSupport = ()
+  Extends DeviceCreateInfo PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = ()
+  Extends DeviceCreateInfo (PhysicalDeviceFeatures2 '[]) = ()
+  Extends DeviceCreateInfo PhysicalDeviceVariablePointersFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceMultiviewFeatures = ()
+  Extends DeviceCreateInfo DeviceGroupDeviceCreateInfo = ()
+  Extends DeviceCreateInfo PhysicalDevice16BitStorageFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceShaderSubgroupExtendedTypesFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceSamplerYcbcrConversionFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceProtectedMemoryFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceBlendOperationAdvancedFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceInlineUniformBlockFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceShaderDrawParametersFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceShaderFloat16Int8Features = ()
+  Extends DeviceCreateInfo PhysicalDeviceHostQueryResetFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceDescriptorIndexingFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceTimelineSemaphoreFeatures = ()
+  Extends DeviceCreateInfo PhysicalDevice8BitStorageFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceConditionalRenderingFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceVulkanMemoryModelFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceShaderAtomicInt64Features = ()
+  Extends DeviceCreateInfo PhysicalDeviceVertexAttributeDivisorFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceASTCDecodeFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceTransformFeedbackFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceRepresentativeFragmentTestFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceExclusiveScissorFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceCornerSampledImageFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceComputeShaderDerivativesFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceFragmentShaderBarycentricFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceShaderImageFootprintFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceShadingRateImageFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceMeshShaderFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceRayTracingFeaturesKHR = ()
+  Extends DeviceCreateInfo DeviceMemoryOverallocationCreateInfoAMD = ()
+  Extends DeviceCreateInfo PhysicalDeviceFragmentDensityMapFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceScalarBlockLayoutFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceUniformBufferStandardLayoutFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceDepthClipEnableFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceMemoryPriorityFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceBufferDeviceAddressFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceBufferDeviceAddressFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceImagelessFramebufferFeatures = ()
+  Extends DeviceCreateInfo PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceCooperativeMatrixFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceYcbcrImageArraysFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDevicePerformanceQueryFeaturesKHR = ()
+  Extends DeviceCreateInfo PhysicalDeviceCoverageReductionModeFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = ()
+  Extends DeviceCreateInfo PhysicalDeviceShaderClockFeaturesKHR = ()
+  Extends DeviceCreateInfo PhysicalDeviceIndexTypeUint8FeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceShaderSMBuiltinsFeaturesNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceFragmentShaderInterlockFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceSeparateDepthStencilLayoutsFeatures = ()
+  Extends DeviceCreateInfo PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = ()
+  Extends DeviceCreateInfo PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceTexelBufferAlignmentFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceSubgroupSizeControlFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceLineRasterizationFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDevicePipelineCreationCacheControlFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceVulkan11Features = ()
+  Extends DeviceCreateInfo PhysicalDeviceVulkan12Features = ()
+  Extends DeviceCreateInfo PhysicalDeviceCoherentMemoryFeaturesAMD = ()
+  Extends DeviceCreateInfo PhysicalDeviceCustomBorderColorFeaturesEXT = ()
+  Extends DeviceCreateInfo PhysicalDeviceDiagnosticsConfigFeaturesNV = ()
+  Extends DeviceCreateInfo DeviceDiagnosticsConfigCreateInfoNV = ()
+  Extends DeviceCreateInfo PhysicalDeviceRobustness2FeaturesEXT = ()
+  Extends DeviceQueueCreateInfo DeviceQueueGlobalPriorityCreateInfoEXT = ()
+  Extends FenceCreateInfo ExportFenceCreateInfo = ()
+  Extends FenceCreateInfo ExportFenceWin32HandleInfoKHR = ()
+  Extends FormatProperties2 DrmFormatModifierPropertiesListEXT = ()
+  Extends FramebufferCreateInfo FramebufferAttachmentsCreateInfo = ()
+  Extends GraphicsPipelineCreateInfo GraphicsPipelineShaderGroupsCreateInfoNV = ()
+  Extends GraphicsPipelineCreateInfo PipelineDiscardRectangleStateCreateInfoEXT = ()
+  Extends GraphicsPipelineCreateInfo PipelineRepresentativeFragmentTestStateCreateInfoNV = ()
+  Extends GraphicsPipelineCreateInfo PipelineCreationFeedbackCreateInfoEXT = ()
+  Extends GraphicsPipelineCreateInfo PipelineCompilerControlCreateInfoAMD = ()
+  Extends ImageCreateInfo DedicatedAllocationImageCreateInfoNV = ()
+  Extends ImageCreateInfo ExternalMemoryImageCreateInfoNV = ()
+  Extends ImageCreateInfo ExternalMemoryImageCreateInfo = ()
+  Extends ImageCreateInfo ImageSwapchainCreateInfoKHR = ()
+  Extends ImageCreateInfo ImageFormatListCreateInfo = ()
+  Extends ImageCreateInfo ExternalFormatANDROID = ()
+  Extends ImageCreateInfo ImageDrmFormatModifierListCreateInfoEXT = ()
+  Extends ImageCreateInfo ImageDrmFormatModifierExplicitCreateInfoEXT = ()
+  Extends ImageCreateInfo ImageStencilUsageCreateInfo = ()
+  Extends ImageFormatProperties2 ExternalImageFormatProperties = ()
+  Extends ImageFormatProperties2 SamplerYcbcrConversionImageFormatProperties = ()
+  Extends ImageFormatProperties2 TextureLODGatherFormatPropertiesAMD = ()
+  Extends ImageFormatProperties2 AndroidHardwareBufferUsageANDROID = ()
+  Extends ImageFormatProperties2 FilterCubicImageViewImageFormatPropertiesEXT = ()
+  Extends ImageMemoryBarrier SampleLocationsInfoEXT = ()
+  Extends ImageMemoryRequirementsInfo2 ImagePlaneMemoryRequirementsInfo = ()
+  Extends ImageViewCreateInfo ImageViewUsageCreateInfo = ()
+  Extends ImageViewCreateInfo SamplerYcbcrConversionInfo = ()
+  Extends ImageViewCreateInfo ImageViewASTCDecodeModeEXT = ()
+  Extends InstanceCreateInfo DebugReportCallbackCreateInfoEXT = ()
+  Extends InstanceCreateInfo ValidationFlagsEXT = ()
+  Extends InstanceCreateInfo ValidationFeaturesEXT = ()
+  Extends InstanceCreateInfo DebugUtilsMessengerCreateInfoEXT = ()
+  Extends MemoryAllocateInfo DedicatedAllocationMemoryAllocateInfoNV = ()
+  Extends MemoryAllocateInfo ExportMemoryAllocateInfoNV = ()
+  Extends MemoryAllocateInfo ImportMemoryWin32HandleInfoNV = ()
+  Extends MemoryAllocateInfo ExportMemoryWin32HandleInfoNV = ()
+  Extends MemoryAllocateInfo ExportMemoryAllocateInfo = ()
+  Extends MemoryAllocateInfo ImportMemoryWin32HandleInfoKHR = ()
+  Extends MemoryAllocateInfo ExportMemoryWin32HandleInfoKHR = ()
+  Extends MemoryAllocateInfo ImportMemoryFdInfoKHR = ()
+  Extends MemoryAllocateInfo MemoryAllocateFlagsInfo = ()
+  Extends MemoryAllocateInfo MemoryDedicatedAllocateInfo = ()
+  Extends MemoryAllocateInfo ImportMemoryHostPointerInfoEXT = ()
+  Extends MemoryAllocateInfo ImportAndroidHardwareBufferInfoANDROID = ()
+  Extends MemoryAllocateInfo MemoryPriorityAllocateInfoEXT = ()
+  Extends MemoryAllocateInfo MemoryOpaqueCaptureAddressAllocateInfo = ()
+  Extends MemoryRequirements2 MemoryDedicatedRequirements = ()
+  Extends PhysicalDeviceExternalSemaphoreInfo SemaphoreTypeCreateInfo = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceVariablePointersFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceMultiviewFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDevice16BitStorageFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderSubgroupExtendedTypesFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceSamplerYcbcrConversionFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceProtectedMemoryFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceBlendOperationAdvancedFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceInlineUniformBlockFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderDrawParametersFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderFloat16Int8Features = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceHostQueryResetFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceDescriptorIndexingFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceTimelineSemaphoreFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDevice8BitStorageFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceConditionalRenderingFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceVulkanMemoryModelFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderAtomicInt64Features = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceVertexAttributeDivisorFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceASTCDecodeFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceTransformFeedbackFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceRepresentativeFragmentTestFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceExclusiveScissorFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceCornerSampledImageFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceComputeShaderDerivativesFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceFragmentShaderBarycentricFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderImageFootprintFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShadingRateImageFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceMeshShaderFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceRayTracingFeaturesKHR = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceFragmentDensityMapFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceScalarBlockLayoutFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceUniformBufferStandardLayoutFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceDepthClipEnableFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceMemoryPriorityFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceBufferDeviceAddressFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceBufferDeviceAddressFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceImagelessFramebufferFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceCooperativeMatrixFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceYcbcrImageArraysFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDevicePerformanceQueryFeaturesKHR = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceCoverageReductionModeFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderClockFeaturesKHR = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceIndexTypeUint8FeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderSMBuiltinsFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceFragmentShaderInterlockFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceSeparateDepthStencilLayoutsFeatures = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceTexelBufferAlignmentFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceSubgroupSizeControlFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceLineRasterizationFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDevicePipelineCreationCacheControlFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceVulkan11Features = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceVulkan12Features = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceCoherentMemoryFeaturesAMD = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceCustomBorderColorFeaturesEXT = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceDiagnosticsConfigFeaturesNV = ()
+  Extends PhysicalDeviceFeatures2 PhysicalDeviceRobustness2FeaturesEXT = ()
+  Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceExternalImageFormatInfo = ()
+  Extends PhysicalDeviceImageFormatInfo2 ImageFormatListCreateInfo = ()
+  Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceImageDrmFormatModifierInfoEXT = ()
+  Extends PhysicalDeviceImageFormatInfo2 ImageStencilUsageCreateInfo = ()
+  Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceImageViewImageFormatInfoEXT = ()
+  Extends PhysicalDeviceMemoryProperties2 PhysicalDeviceMemoryBudgetPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = ()
+  Extends PhysicalDeviceProperties2 PhysicalDevicePushDescriptorPropertiesKHR = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceDriverProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceIDProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceMultiviewProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceDiscardRectanglePropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceSubgroupProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDevicePointClippingProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceProtectedMemoryProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceSamplerFilterMinmaxProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceSampleLocationsPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceBlendOperationAdvancedPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceInlineUniformBlockPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceMaintenance3Properties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceFloatControlsProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceExternalMemoryHostPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceConservativeRasterizationPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceShaderCorePropertiesAMD = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceShaderCoreProperties2AMD = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceDescriptorIndexingProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceTimelineSemaphoreProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceVertexAttributeDivisorPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDevicePCIBusInfoPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceDepthStencilResolveProperties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceTransformFeedbackPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceShadingRateImagePropertiesNV = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceMeshShaderPropertiesNV = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceRayTracingPropertiesKHR = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceRayTracingPropertiesNV = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceFragmentDensityMapPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceCooperativeMatrixPropertiesNV = ()
+  Extends PhysicalDeviceProperties2 PhysicalDevicePerformanceQueryPropertiesKHR = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceShaderSMBuiltinsPropertiesNV = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceTexelBufferAlignmentPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceSubgroupSizeControlPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceLineRasterizationPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceVulkan11Properties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceVulkan12Properties = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceCustomBorderColorPropertiesEXT = ()
+  Extends PhysicalDeviceProperties2 PhysicalDeviceRobustness2PropertiesEXT = ()
+  Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveInfoEXT = ()
+  Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveWin32InfoEXT = ()
+  Extends PipelineColorBlendStateCreateInfo PipelineColorBlendAdvancedStateCreateInfoEXT = ()
+  Extends PipelineMultisampleStateCreateInfo PipelineCoverageToColorStateCreateInfoNV = ()
+  Extends PipelineMultisampleStateCreateInfo PipelineSampleLocationsStateCreateInfoEXT = ()
+  Extends PipelineMultisampleStateCreateInfo PipelineCoverageModulationStateCreateInfoNV = ()
+  Extends PipelineMultisampleStateCreateInfo PipelineCoverageReductionStateCreateInfoNV = ()
+  Extends PipelineRasterizationStateCreateInfo PipelineRasterizationStateRasterizationOrderAMD = ()
+  Extends PipelineRasterizationStateCreateInfo PipelineRasterizationConservativeStateCreateInfoEXT = ()
+  Extends PipelineRasterizationStateCreateInfo PipelineRasterizationStateStreamCreateInfoEXT = ()
+  Extends PipelineRasterizationStateCreateInfo PipelineRasterizationDepthClipStateCreateInfoEXT = ()
+  Extends PipelineRasterizationStateCreateInfo PipelineRasterizationLineStateCreateInfoEXT = ()
+  Extends PipelineShaderStageCreateInfo PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = ()
+  Extends PipelineTessellationStateCreateInfo PipelineTessellationDomainOriginStateCreateInfo = ()
+  Extends PipelineVertexInputStateCreateInfo PipelineVertexInputDivisorStateCreateInfoEXT = ()
+  Extends PipelineViewportStateCreateInfo PipelineViewportWScalingStateCreateInfoNV = ()
+  Extends PipelineViewportStateCreateInfo PipelineViewportSwizzleStateCreateInfoNV = ()
+  Extends PipelineViewportStateCreateInfo PipelineViewportExclusiveScissorStateCreateInfoNV = ()
+  Extends PipelineViewportStateCreateInfo PipelineViewportShadingRateImageStateCreateInfoNV = ()
+  Extends PipelineViewportStateCreateInfo PipelineViewportCoarseSampleOrderStateCreateInfoNV = ()
+  Extends PresentInfoKHR DisplayPresentInfoKHR = ()
+  Extends PresentInfoKHR PresentRegionsKHR = ()
+  Extends PresentInfoKHR DeviceGroupPresentInfoKHR = ()
+  Extends PresentInfoKHR PresentTimesInfoGOOGLE = ()
+  Extends PresentInfoKHR PresentFrameTokenGGP = ()
+  Extends QueryPoolCreateInfo QueryPoolPerformanceCreateInfoKHR = ()
+  Extends QueryPoolCreateInfo QueryPoolPerformanceQueryCreateInfoINTEL = ()
+  Extends QueueFamilyProperties2 QueueFamilyCheckpointPropertiesNV = ()
+  Extends RayTracingPipelineCreateInfoKHR PipelineCreationFeedbackCreateInfoEXT = ()
+  Extends RayTracingPipelineCreateInfoKHR DeferredOperationInfoKHR = ()
+  Extends RayTracingPipelineCreateInfoNV PipelineCreationFeedbackCreateInfoEXT = ()
+  Extends RenderPassBeginInfo DeviceGroupRenderPassBeginInfo = ()
+  Extends RenderPassBeginInfo RenderPassSampleLocationsBeginInfoEXT = ()
+  Extends RenderPassBeginInfo RenderPassAttachmentBeginInfo = ()
+  Extends RenderPassBeginInfo RenderPassTransformBeginInfoQCOM = ()
+  Extends RenderPassCreateInfo RenderPassMultiviewCreateInfo = ()
+  Extends RenderPassCreateInfo RenderPassInputAttachmentAspectCreateInfo = ()
+  Extends RenderPassCreateInfo RenderPassFragmentDensityMapCreateInfoEXT = ()
+  Extends RenderPassCreateInfo2 RenderPassFragmentDensityMapCreateInfoEXT = ()
+  Extends SamplerCreateInfo SamplerYcbcrConversionInfo = ()
+  Extends SamplerCreateInfo SamplerReductionModeCreateInfo = ()
+  Extends SamplerCreateInfo SamplerCustomBorderColorCreateInfoEXT = ()
+  Extends SamplerYcbcrConversionCreateInfo ExternalFormatANDROID = ()
+  Extends SemaphoreCreateInfo ExportSemaphoreCreateInfo = ()
+  Extends SemaphoreCreateInfo ExportSemaphoreWin32HandleInfoKHR = ()
+  Extends SemaphoreCreateInfo SemaphoreTypeCreateInfo = ()
+  Extends ShaderModuleCreateInfo ShaderModuleValidationCacheCreateInfoEXT = ()
+  Extends SubmitInfo Win32KeyedMutexAcquireReleaseInfoNV = ()
+  Extends SubmitInfo Win32KeyedMutexAcquireReleaseInfoKHR = ()
+  Extends SubmitInfo D3D12FenceSubmitInfoKHR = ()
+  Extends SubmitInfo DeviceGroupSubmitInfo = ()
+  Extends SubmitInfo ProtectedSubmitInfo = ()
+  Extends SubmitInfo TimelineSemaphoreSubmitInfo = ()
+  Extends SubmitInfo PerformanceQuerySubmitInfoKHR = ()
+  Extends SubpassDescription2 SubpassDescriptionDepthStencilResolve = ()
+  Extends SurfaceCapabilities2KHR DisplayNativeHdrSurfaceCapabilitiesAMD = ()
+  Extends SurfaceCapabilities2KHR SharedPresentSurfaceCapabilitiesKHR = ()
+  Extends SurfaceCapabilities2KHR SurfaceProtectedCapabilitiesKHR = ()
+  Extends SurfaceCapabilities2KHR SurfaceCapabilitiesFullScreenExclusiveEXT = ()
+  Extends SwapchainCreateInfoKHR SwapchainCounterCreateInfoEXT = ()
+  Extends SwapchainCreateInfoKHR DeviceGroupSwapchainCreateInfoKHR = ()
+  Extends SwapchainCreateInfoKHR SwapchainDisplayNativeHdrCreateInfoAMD = ()
+  Extends SwapchainCreateInfoKHR ImageFormatListCreateInfo = ()
+  Extends SwapchainCreateInfoKHR SurfaceFullScreenExclusiveInfoEXT = ()
+  Extends SwapchainCreateInfoKHR SurfaceFullScreenExclusiveWin32InfoEXT = ()
+  Extends WriteDescriptorSet WriteDescriptorSetInlineUniformBlockEXT = ()
+  Extends WriteDescriptorSet WriteDescriptorSetAccelerationStructureKHR = ()
+  Extends a b = TypeError (ShowType a :<>: Text " is not extended by " :<>: ShowType b)
+
+data SomeStruct (a :: [Type] -> Type) where
+  SomeStruct
+    :: forall a es
+     . (Extendss a es, PokeChain es, Show (Chain es))
+    => a es
+    -> SomeStruct a
+
+deriving instance (forall es. Show (Chain es) => Show (a es)) => Show (SomeStruct a)
+
+instance Zero (a '[]) => Zero (SomeStruct a) where
+  zero = SomeStruct (zero :: a '[])
+
+forgetExtensions :: Ptr (a es) -> Ptr (SomeStruct a)
+forgetExtensions = castPtr
+
+withSomeCStruct
+  :: forall a b
+   . (forall es . (Extendss a es, PokeChain es) => ToCStruct (a es))
+  => SomeStruct a
+  -> (forall es . (Extendss a es, PokeChain es) => Ptr (a es) -> IO b)
+  -> IO b
+withSomeCStruct (SomeStruct s) f = withCStruct s f
+
+pokeSomeCStruct
+  :: (forall es . (Extendss a es, PokeChain es) => ToCStruct (a es))
+  => Ptr (SomeStruct a)
+  -> SomeStruct a
+  -> IO b
+  -> IO b
+pokeSomeCStruct p (SomeStruct s) = pokeCStruct (castPtr p) s
+
+peekSomeCStruct
+  :: forall a
+   . (Extensible a, forall es . (Extendss a es, PeekChain es) => FromCStruct (a es))
+  => Ptr (SomeStruct a)
+  -> IO (SomeStruct a)
+peekSomeCStruct p = do
+  head'  <- peekCStruct (castPtr @_ @(a '[]) p)
+  pNext <- peek @(Ptr BaseOutStructure) (p `plusPtr` 8)
+  peekSomeChain @a pNext $ \tail' -> SomeStruct (setNext head' tail')
+
+peekSomeChain
+  :: forall
+       a
+       b
+   . (Extensible a)
+  => Ptr BaseOutStructure
+  -> (  forall es
+      . (Extendss a es, PokeChain es, Show (Chain es))
+     => Chain es
+     -> b
+     )
+  -> IO b
+peekSomeChain p c = if p == nullPtr
+  then pure (c ())
+  else do
+    baseOut <- peek p
+    join
+      $ peekChainHead @a (sType (baseOut :: BaseOutStructure))
+                         (castPtr @BaseOutStructure @() p)
+      $ \head' -> peekSomeChain @a (next (baseOut :: BaseOutStructure))
+                                  (\tail' -> c (head', tail'))
+
+
+peekChainHead
+  :: forall a b
+   . Extensible a
+  => StructureType
+  -> Ptr ()
+  -> (forall e . (Extends a e, ToCStruct e, Show e) => e -> b)
+  -> IO b
+peekChainHead ty p c = case ty of
+  STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR -> go @DisplayPresentInfoKHR
+  STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT -> go @DebugReportCallbackCreateInfoEXT
+  STRUCTURE_TYPE_VALIDATION_FLAGS_EXT -> go @ValidationFlagsEXT
+  STRUCTURE_TYPE_VALIDATION_FEATURES_EXT -> go @ValidationFeaturesEXT
+  STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD -> go @PipelineRasterizationStateRasterizationOrderAMD
+  STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV -> go @DedicatedAllocationImageCreateInfoNV
+  STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV -> go @DedicatedAllocationBufferCreateInfoNV
+  STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV -> go @DedicatedAllocationMemoryAllocateInfoNV
+  STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV -> go @ExternalMemoryImageCreateInfoNV
+  STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV -> go @ExportMemoryAllocateInfoNV
+  STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV -> go @ImportMemoryWin32HandleInfoNV
+  STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV -> go @ExportMemoryWin32HandleInfoNV
+  STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV -> go @Win32KeyedMutexAcquireReleaseInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV -> go @PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV -> go @PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+  STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV -> go @GraphicsPipelineShaderGroupsCreateInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 -> go @(PhysicalDeviceFeatures2 '[])
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR -> go @PhysicalDevicePushDescriptorPropertiesKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES -> go @PhysicalDeviceDriverProperties
+  STRUCTURE_TYPE_PRESENT_REGIONS_KHR -> go @PresentRegionsKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES -> go @PhysicalDeviceVariablePointersFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO -> go @PhysicalDeviceExternalImageFormatInfo
+  STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES -> go @ExternalImageFormatProperties
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES -> go @PhysicalDeviceIDProperties
+  STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO -> go @ExternalMemoryImageCreateInfo
+  STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO -> go @ExternalMemoryBufferCreateInfo
+  STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO -> go @ExportMemoryAllocateInfo
+  STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR -> go @ImportMemoryWin32HandleInfoKHR
+  STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR -> go @ExportMemoryWin32HandleInfoKHR
+  STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR -> go @ImportMemoryFdInfoKHR
+  STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR -> go @Win32KeyedMutexAcquireReleaseInfoKHR
+  STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO -> go @ExportSemaphoreCreateInfo
+  STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR -> go @ExportSemaphoreWin32HandleInfoKHR
+  STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR -> go @D3D12FenceSubmitInfoKHR
+  STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO -> go @ExportFenceCreateInfo
+  STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR -> go @ExportFenceWin32HandleInfoKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES -> go @PhysicalDeviceMultiviewFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES -> go @PhysicalDeviceMultiviewProperties
+  STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO -> go @RenderPassMultiviewCreateInfo
+  STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT -> go @SwapchainCounterCreateInfoEXT
+  STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO -> go @MemoryAllocateFlagsInfo
+  STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO -> go @BindBufferMemoryDeviceGroupInfo
+  STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO -> go @BindImageMemoryDeviceGroupInfo
+  STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO -> go @DeviceGroupRenderPassBeginInfo
+  STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO -> go @DeviceGroupCommandBufferBeginInfo
+  STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO -> go @DeviceGroupSubmitInfo
+  STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO -> go @DeviceGroupBindSparseInfo
+  STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR -> go @ImageSwapchainCreateInfoKHR
+  STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR -> go @BindImageMemorySwapchainInfoKHR
+  STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR -> go @DeviceGroupPresentInfoKHR
+  STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO -> go @DeviceGroupDeviceCreateInfo
+  STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR -> go @DeviceGroupSwapchainCreateInfoKHR
+  STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD -> go @DisplayNativeHdrSurfaceCapabilitiesAMD
+  STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD -> go @SwapchainDisplayNativeHdrCreateInfoAMD
+  STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE -> go @PresentTimesInfoGOOGLE
+  STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV -> go @PipelineViewportWScalingStateCreateInfoNV
+  STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV -> go @PipelineViewportSwizzleStateCreateInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT -> go @PhysicalDeviceDiscardRectanglePropertiesEXT
+  STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT -> go @PipelineDiscardRectangleStateCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX -> go @PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+  STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO -> go @RenderPassInputAttachmentAspectCreateInfo
+  STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR -> go @SharedPresentSurfaceCapabilitiesKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES -> go @PhysicalDevice16BitStorageFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES -> go @PhysicalDeviceSubgroupProperties
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES -> go @PhysicalDeviceShaderSubgroupExtendedTypesFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES -> go @PhysicalDevicePointClippingProperties
+  STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS -> go @MemoryDedicatedRequirements
+  STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO -> go @MemoryDedicatedAllocateInfo
+  STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO -> go @ImageViewUsageCreateInfo
+  STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO -> go @PipelineTessellationDomainOriginStateCreateInfo
+  STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO -> go @SamplerYcbcrConversionInfo
+  STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO -> go @BindImagePlaneMemoryInfo
+  STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO -> go @ImagePlaneMemoryRequirementsInfo
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES -> go @PhysicalDeviceSamplerYcbcrConversionFeatures
+  STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES -> go @SamplerYcbcrConversionImageFormatProperties
+  STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD -> go @TextureLODGatherFormatPropertiesAMD
+  STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO -> go @ProtectedSubmitInfo
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES -> go @PhysicalDeviceProtectedMemoryFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES -> go @PhysicalDeviceProtectedMemoryProperties
+  STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV -> go @PipelineCoverageToColorStateCreateInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES -> go @PhysicalDeviceSamplerFilterMinmaxProperties
+  STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT -> go @SampleLocationsInfoEXT
+  STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT -> go @RenderPassSampleLocationsBeginInfoEXT
+  STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT -> go @PipelineSampleLocationsStateCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT -> go @PhysicalDeviceSampleLocationsPropertiesEXT
+  STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO -> go @SamplerReductionModeCreateInfo
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT -> go @PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT -> go @PhysicalDeviceBlendOperationAdvancedPropertiesEXT
+  STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT -> go @PipelineColorBlendAdvancedStateCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT -> go @PhysicalDeviceInlineUniformBlockFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT -> go @PhysicalDeviceInlineUniformBlockPropertiesEXT
+  STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT -> go @WriteDescriptorSetInlineUniformBlockEXT
+  STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT -> go @DescriptorPoolInlineUniformBlockCreateInfoEXT
+  STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV -> go @PipelineCoverageModulationStateCreateInfoNV
+  STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO -> go @ImageFormatListCreateInfo
+  STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT -> go @ShaderModuleValidationCacheCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES -> go @PhysicalDeviceMaintenance3Properties
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES -> go @PhysicalDeviceShaderDrawParametersFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES -> go @PhysicalDeviceShaderFloat16Int8Features
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES -> go @PhysicalDeviceFloatControlsProperties
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES -> go @PhysicalDeviceHostQueryResetFeatures
+  STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT -> go @DeviceQueueGlobalPriorityCreateInfoEXT
+  STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT -> go @DebugUtilsMessengerCreateInfoEXT
+  STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT -> go @ImportMemoryHostPointerInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT -> go @PhysicalDeviceExternalMemoryHostPropertiesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT -> go @PhysicalDeviceConservativeRasterizationPropertiesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD -> go @PhysicalDeviceShaderCorePropertiesAMD
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD -> go @PhysicalDeviceShaderCoreProperties2AMD
+  STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT -> go @PipelineRasterizationConservativeStateCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES -> go @PhysicalDeviceDescriptorIndexingFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES -> go @PhysicalDeviceDescriptorIndexingProperties
+  STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO -> go @DescriptorSetLayoutBindingFlagsCreateInfo
+  STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO -> go @DescriptorSetVariableDescriptorCountAllocateInfo
+  STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT -> go @DescriptorSetVariableDescriptorCountLayoutSupport
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES -> go @PhysicalDeviceTimelineSemaphoreFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES -> go @PhysicalDeviceTimelineSemaphoreProperties
+  STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO -> go @SemaphoreTypeCreateInfo
+  STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO -> go @TimelineSemaphoreSubmitInfo
+  STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT -> go @PipelineVertexInputDivisorStateCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT -> go @PhysicalDeviceVertexAttributeDivisorPropertiesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT -> go @PhysicalDevicePCIBusInfoPropertiesEXT
+  STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID -> go @ImportAndroidHardwareBufferInfoANDROID
+  STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID -> go @AndroidHardwareBufferUsageANDROID
+  STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID -> go @AndroidHardwareBufferFormatPropertiesANDROID
+  STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT -> go @CommandBufferInheritanceConditionalRenderingInfoEXT
+  STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID -> go @ExternalFormatANDROID
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES -> go @PhysicalDevice8BitStorageFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT -> go @PhysicalDeviceConditionalRenderingFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES -> go @PhysicalDeviceVulkanMemoryModelFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES -> go @PhysicalDeviceShaderAtomicInt64Features
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT -> go @PhysicalDeviceVertexAttributeDivisorFeaturesEXT
+  STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV -> go @QueueFamilyCheckpointPropertiesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES -> go @PhysicalDeviceDepthStencilResolveProperties
+  STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE -> go @SubpassDescriptionDepthStencilResolve
+  STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT -> go @ImageViewASTCDecodeModeEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT -> go @PhysicalDeviceASTCDecodeFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT -> go @PhysicalDeviceTransformFeedbackFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT -> go @PhysicalDeviceTransformFeedbackPropertiesEXT
+  STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT -> go @PipelineRasterizationStateStreamCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV -> go @PhysicalDeviceRepresentativeFragmentTestFeaturesNV
+  STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV -> go @PipelineRepresentativeFragmentTestStateCreateInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV -> go @PhysicalDeviceExclusiveScissorFeaturesNV
+  STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV -> go @PipelineViewportExclusiveScissorStateCreateInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV -> go @PhysicalDeviceCornerSampledImageFeaturesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV -> go @PhysicalDeviceComputeShaderDerivativesFeaturesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV -> go @PhysicalDeviceFragmentShaderBarycentricFeaturesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV -> go @PhysicalDeviceShaderImageFootprintFeaturesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV -> go @PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+  STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV -> go @PipelineViewportShadingRateImageStateCreateInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV -> go @PhysicalDeviceShadingRateImageFeaturesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV -> go @PhysicalDeviceShadingRateImagePropertiesNV
+  STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV -> go @PipelineViewportCoarseSampleOrderStateCreateInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV -> go @PhysicalDeviceMeshShaderFeaturesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV -> go @PhysicalDeviceMeshShaderPropertiesNV
+  STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR -> go @WriteDescriptorSetAccelerationStructureKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR -> go @PhysicalDeviceRayTracingFeaturesKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR -> go @PhysicalDeviceRayTracingPropertiesKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV -> go @PhysicalDeviceRayTracingPropertiesNV
+  STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT -> go @DrmFormatModifierPropertiesListEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT -> go @PhysicalDeviceImageDrmFormatModifierInfoEXT
+  STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT -> go @ImageDrmFormatModifierListCreateInfoEXT
+  STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT -> go @ImageDrmFormatModifierExplicitCreateInfoEXT
+  STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO -> go @ImageStencilUsageCreateInfo
+  STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD -> go @DeviceMemoryOverallocationCreateInfoAMD
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT -> go @PhysicalDeviceFragmentDensityMapFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT -> go @PhysicalDeviceFragmentDensityMapPropertiesEXT
+  STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT -> go @RenderPassFragmentDensityMapCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES -> go @PhysicalDeviceScalarBlockLayoutFeatures
+  STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR -> go @SurfaceProtectedCapabilitiesKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES -> go @PhysicalDeviceUniformBufferStandardLayoutFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT -> go @PhysicalDeviceDepthClipEnableFeaturesEXT
+  STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT -> go @PipelineRasterizationDepthClipStateCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT -> go @PhysicalDeviceMemoryBudgetPropertiesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT -> go @PhysicalDeviceMemoryPriorityFeaturesEXT
+  STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT -> go @MemoryPriorityAllocateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES -> go @PhysicalDeviceBufferDeviceAddressFeatures
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT -> go @PhysicalDeviceBufferDeviceAddressFeaturesEXT
+  STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO -> go @BufferOpaqueCaptureAddressCreateInfo
+  STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT -> go @BufferDeviceAddressCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT -> go @PhysicalDeviceImageViewImageFormatInfoEXT
+  STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT -> go @FilterCubicImageViewImageFormatPropertiesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES -> go @PhysicalDeviceImagelessFramebufferFeatures
+  STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO -> go @FramebufferAttachmentsCreateInfo
+  STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO -> go @RenderPassAttachmentBeginInfo
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT -> go @PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV -> go @PhysicalDeviceCooperativeMatrixFeaturesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV -> go @PhysicalDeviceCooperativeMatrixPropertiesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT -> go @PhysicalDeviceYcbcrImageArraysFeaturesEXT
+  STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP -> go @PresentFrameTokenGGP
+  STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT -> go @PipelineCreationFeedbackCreateInfoEXT
+  STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT -> go @SurfaceFullScreenExclusiveInfoEXT
+  STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT -> go @SurfaceFullScreenExclusiveWin32InfoEXT
+  STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT -> go @SurfaceCapabilitiesFullScreenExclusiveEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR -> go @PhysicalDevicePerformanceQueryFeaturesKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR -> go @PhysicalDevicePerformanceQueryPropertiesKHR
+  STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR -> go @QueryPoolPerformanceCreateInfoKHR
+  STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR -> go @PerformanceQuerySubmitInfoKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV -> go @PhysicalDeviceCoverageReductionModeFeaturesNV
+  STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV -> go @PipelineCoverageReductionStateCreateInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL -> go @PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+  STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL -> go @QueryPoolPerformanceQueryCreateInfoINTEL
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR -> go @PhysicalDeviceShaderClockFeaturesKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT -> go @PhysicalDeviceIndexTypeUint8FeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV -> go @PhysicalDeviceShaderSMBuiltinsPropertiesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV -> go @PhysicalDeviceShaderSMBuiltinsFeaturesNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT -> go @PhysicalDeviceFragmentShaderInterlockFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES -> go @PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+  STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT -> go @AttachmentReferenceStencilLayout
+  STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT -> go @AttachmentDescriptionStencilLayout
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR -> go @PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT -> go @PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT -> go @PhysicalDeviceTexelBufferAlignmentFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT -> go @PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT -> go @PhysicalDeviceSubgroupSizeControlFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT -> go @PhysicalDeviceSubgroupSizeControlPropertiesEXT
+  STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT -> go @PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+  STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO -> go @MemoryOpaqueCaptureAddressAllocateInfo
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT -> go @PhysicalDeviceLineRasterizationFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT -> go @PhysicalDeviceLineRasterizationPropertiesEXT
+  STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT -> go @PipelineRasterizationLineStateCreateInfoEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT -> go @PhysicalDevicePipelineCreationCacheControlFeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES -> go @PhysicalDeviceVulkan11Features
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES -> go @PhysicalDeviceVulkan11Properties
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES -> go @PhysicalDeviceVulkan12Features
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES -> go @PhysicalDeviceVulkan12Properties
+  STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD -> go @PipelineCompilerControlCreateInfoAMD
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD -> go @PhysicalDeviceCoherentMemoryFeaturesAMD
+  STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT -> throwIO $ IOError Nothing InvalidArgument "peekChainHead" ("struct type STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT contains an undiscriminated union (ClearColorValue) and can't be safely peeked") Nothing Nothing
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT -> go @PhysicalDeviceCustomBorderColorPropertiesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT -> go @PhysicalDeviceCustomBorderColorFeaturesEXT
+  STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR -> go @DeferredOperationInfoKHR
+  STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM -> go @RenderPassTransformBeginInfoQCOM
+  STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM -> go @CommandBufferInheritanceRenderPassTransformInfoQCOM
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV -> go @PhysicalDeviceDiagnosticsConfigFeaturesNV
+  STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV -> go @DeviceDiagnosticsConfigCreateInfoNV
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT -> go @PhysicalDeviceRobustness2FeaturesEXT
+  STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT -> go @PhysicalDeviceRobustness2PropertiesEXT
+  t -> throwIO $ IOError Nothing InvalidArgument "peekChainHead" ("Unrecognized struct type: " <> show t) Nothing Nothing
+ where
+  go :: forall e . (Typeable e, FromCStruct e, ToCStruct e, Show e) => IO b
+  go =
+    let r = extends @a @e Proxy $ do
+          head' <- peekCStruct @e (castPtr p)
+          pure $ c head'
+    in  fromMaybe
+          (throwIO $ IOError
+            Nothing
+            InvalidArgument
+            "peekChainHead"
+            (  "Illegal struct extension of "
+            <> show (extensibleType @a)
+            <> " with "
+            <> show ty
+            )
+            Nothing
+            Nothing
+          )
+          r
+
+class Extensible (a :: [Type] -> Type) where
+  extensibleType :: StructureType
+  getNext :: a es -> Chain es
+  setNext :: a ds -> Chain es -> a es
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends a e => b) -> Maybe b
+
+type family Chain (xs :: [a]) = (r :: a) | r -> xs where
+  Chain '[]    = ()
+  Chain (x:xs) = (x, Chain xs)
+
+-- | A pattern synonym to separate the head of a struct chain from the
+-- tail, use in conjunction with ':&' to extract several members.
+--
+-- @
+-- Head{..} ::& () <- returningNoTail a b c
+-- -- Equivalent to
+-- Head{..} <- returningNoTail @'[] a b c
+-- @
+--
+-- @
+-- Head{..} ::& Foo{..} :& Bar{..} :& () <- returningWithTail a b c
+-- @
+--
+-- @
+-- myFun (Head{..} :&& Foo{..} :& ())
+-- @
+pattern (::&) :: Extensible a => a es' -> Chain es -> a es
+pattern a ::& es <- (\a -> (a, getNext a) -> (a, es))
+  where a ::& es = setNext a es
+infix 6 ::&
+
+-- | View the head and tail of a 'Chain', see '::&'
+--
+-- Equivalent to @(,)@
+pattern (:&) :: e -> Chain es -> Chain (e:es)
+pattern e :& es = (e, es)
+infixr 7 :&
+
+type family Extendss (p :: [Type] -> Type) (xs :: [Type]) :: Constraint where
+  Extendss p '[]      = ()
+  Extendss p (x : xs) = (Extends p x, Extendss p xs)
+
+class PokeChain es where
+  withChain :: Chain es -> (Ptr (Chain es) -> IO a) -> IO a
+  withZeroChain :: (Ptr (Chain es) -> IO a) -> IO a
+
+instance PokeChain '[] where
+  withChain () f = f nullPtr
+  withZeroChain f = f nullPtr
+
+instance (ToCStruct e, PokeChain es) => PokeChain (e:es) where
+  withChain (e, es) f = evalContT $ do
+    t <- ContT $ withChain es
+    h <- ContT $ withCStruct e
+    lift $ linkChain h t
+    lift $ f (castPtr h)
+  withZeroChain f = evalContT $ do
+    t <- ContT $ withZeroChain @es
+    h <- ContT $ withZeroCStruct @e
+    lift $ linkChain h t
+    lift $ f (castPtr h)
+
+class PeekChain es where
+  peekChain :: Ptr (Chain es) -> IO (Chain es)
+
+instance PeekChain '[] where
+  peekChain _ = pure ()
+
+instance (FromCStruct e, PeekChain es) => PeekChain (e:es) where
+  peekChain p = do
+    h <- peekCStruct @e (castPtr p)
+    tPtr <- peek (p `plusPtr` 8)
+    t <- peekChain tPtr
+    pure (h, t)
+
+linkChain :: Ptr a -> Ptr b -> IO ()
+linkChain head' tail' = poke (head' `plusPtr` 8) tail'
+
diff --git a/src/Vulkan/CStruct/Extends.hs-boot b/src/Vulkan/CStruct/Extends.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/CStruct/Extends.hs-boot
@@ -0,0 +1,39 @@
+{-# language CPP #-}
+module Vulkan.CStruct.Extends  ( BaseInStructure
+                               , BaseOutStructure
+                               , Extendss
+                               , PeekChain
+                               , PokeChain
+                               , Chain
+                               ) where
+
+import Data.Kind (Constraint)
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data BaseInStructure
+
+instance ToCStruct BaseInStructure
+instance Show BaseInStructure
+
+instance FromCStruct BaseInStructure
+
+
+data BaseOutStructure
+
+instance ToCStruct BaseOutStructure
+instance Show BaseOutStructure
+
+instance FromCStruct BaseOutStructure
+
+
+class PeekChain (xs :: [Type])
+class PokeChain (xs :: [Type])
+type family Extends (p :: [Type] -> Type) (x :: Type) :: Constraint
+type family Extendss (p :: [Type] -> Type) (xs :: [Type]) :: Constraint where
+  Extendss p '[]      = ()
+  Extendss p (x : xs) = (Extends p x, Extendss p xs)
+type family Chain (xs :: [a]) = (r :: a) | r -> xs where
+  Chain '[]    = ()
+  Chain (x:xs) = (x, Chain xs)
+
diff --git a/src/Vulkan/CStruct/Utils.hs b/src/Vulkan/CStruct/Utils.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/CStruct/Utils.hs
@@ -0,0 +1,107 @@
+{-# language CPP #-}
+module Vulkan.CStruct.Utils  ( pokeFixedLengthByteString
+                             , pokeFixedLengthNullTerminatedByteString
+                             , peekByteStringFromSizedVectorPtr
+                             , lowerArrayPtr
+                             , advancePtrBytes
+                             , FixedArray
+                             ) where
+
+import Foreign.Marshal.Array (allocaArray)
+import Foreign.Marshal.Utils (copyBytes)
+import Foreign.Storable (peekElemOff)
+import Foreign.Storable (pokeElemOff)
+import GHC.Ptr (castPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.TypeNats (natVal)
+import qualified Data.ByteString (length)
+import Data.ByteString (packCString)
+import Data.ByteString (packCStringLen)
+import Data.ByteString (take)
+import Data.ByteString (unpack)
+import Data.ByteString.Unsafe (unsafeUseAsCString)
+import Data.Vector (ifoldr)
+import qualified Data.Vector (length)
+import qualified Data.Vector.Generic ((++))
+import qualified Data.Vector.Generic (empty)
+import qualified Data.Vector.Generic (fromList)
+import qualified Data.Vector.Generic (length)
+import qualified Data.Vector.Generic (replicate)
+import qualified Data.Vector.Generic (snoc)
+import qualified Data.Vector.Generic (take)
+import Data.Proxy (Proxy(..))
+import Foreign.C.Types (CChar(..))
+import Foreign.Storable (Storable)
+import Foreign.Ptr (Ptr)
+import GHC.TypeNats (type(<=))
+import GHC.TypeNats (KnownNat)
+import Data.Word (Word8)
+import Data.ByteString (ByteString)
+import GHC.TypeNats (Nat)
+import Data.Kind (Type)
+import Data.Vector (Vector)
+import qualified Data.Vector.Generic (Vector)
+
+-- | An unpopulated type intended to be used as in @'Ptr' (FixedArray n a)@ to
+-- indicate that the pointer points to an array of @n@ @a@s
+data FixedArray (n :: Nat) (a :: Type)
+
+-- | Store a 'ByteString' in a fixed amount of space inserting a null
+-- character at the end and truncating if necessary.
+--
+-- If the 'ByteString' is not long enough to fill the space the remaining
+-- bytes are unchanged
+--
+-- Note that if the 'ByteString' is exactly long enough the last byte will
+-- still be replaced with 0
+pokeFixedLengthNullTerminatedByteString
+  :: forall n
+   . KnownNat n
+  => Ptr (FixedArray n CChar)
+  -> ByteString
+  -> IO ()
+pokeFixedLengthNullTerminatedByteString to bs =
+  unsafeUseAsCString bs $ \from -> do
+    let maxLength = fromIntegral (natVal (Proxy @n))
+        len       = min maxLength (Data.ByteString.length bs)
+        end       = min (maxLength - 1) len
+    -- Copy the entire string into the buffer
+    copyBytes (lowerArrayPtr to) from len
+    -- Make the last byte (the one following the string, or the
+    -- one at the end of the buffer)
+    pokeElemOff (lowerArrayPtr to) end 0
+
+-- | Store a 'ByteString' in a fixed amount of space, truncating if necessary.
+--
+-- If the 'ByteString' is not long enough to fill the space the remaining
+-- bytes are unchanged
+pokeFixedLengthByteString
+  :: forall n
+   . KnownNat n
+  => Ptr (FixedArray n Word8)
+  -> ByteString
+  -> IO ()
+pokeFixedLengthByteString to bs = unsafeUseAsCString bs $ \from -> do
+  let maxLength = fromIntegral (natVal (Proxy @n))
+      len       = min maxLength (Data.ByteString.length bs)
+  copyBytes (lowerArrayPtr to) (castPtr @CChar @Word8 from) len
+
+-- | Peek a 'ByteString' from a fixed sized array of bytes
+peekByteStringFromSizedVectorPtr
+  :: forall n
+   . KnownNat n
+  => Ptr (FixedArray n Word8)
+  -> IO ByteString
+peekByteStringFromSizedVectorPtr p = packCStringLen (castPtr p, fromIntegral (natVal (Proxy @n)))
+
+-- | Get the pointer to the first element in the array
+lowerArrayPtr
+  :: forall a n
+   . Ptr (FixedArray n a)
+  -> Ptr a
+lowerArrayPtr = castPtr
+
+-- | A type restricted 'plusPtr'
+advancePtrBytes :: Ptr a -> Int -> Ptr a
+advancePtrBytes = plusPtr
+
diff --git a/src/Vulkan/Core10.hs b/src/Vulkan/Core10.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10.hs
@@ -0,0 +1,76 @@
+{-# language CPP #-}
+module Vulkan.Core10  ( pattern API_VERSION_1_0
+                      , module Vulkan.Core10.APIConstants
+                      , module Vulkan.Core10.AllocationCallbacks
+                      , module Vulkan.Core10.BaseType
+                      , module Vulkan.Core10.Buffer
+                      , module Vulkan.Core10.BufferView
+                      , module Vulkan.Core10.CommandBuffer
+                      , module Vulkan.Core10.CommandBufferBuilding
+                      , module Vulkan.Core10.CommandPool
+                      , module Vulkan.Core10.DescriptorSet
+                      , module Vulkan.Core10.Device
+                      , module Vulkan.Core10.DeviceInitialization
+                      , module Vulkan.Core10.Enums
+                      , module Vulkan.Core10.Event
+                      , module Vulkan.Core10.ExtensionDiscovery
+                      , module Vulkan.Core10.Fence
+                      , module Vulkan.Core10.FuncPointers
+                      , module Vulkan.Core10.Handles
+                      , module Vulkan.Core10.Image
+                      , module Vulkan.Core10.ImageView
+                      , module Vulkan.Core10.LayerDiscovery
+                      , module Vulkan.Core10.Memory
+                      , module Vulkan.Core10.MemoryManagement
+                      , module Vulkan.Core10.OtherTypes
+                      , module Vulkan.Core10.Pass
+                      , module Vulkan.Core10.Pipeline
+                      , module Vulkan.Core10.PipelineCache
+                      , module Vulkan.Core10.PipelineLayout
+                      , module Vulkan.Core10.Query
+                      , module Vulkan.Core10.Queue
+                      , module Vulkan.Core10.QueueSemaphore
+                      , module Vulkan.Core10.Sampler
+                      , module Vulkan.Core10.Shader
+                      , module Vulkan.Core10.SharedTypes
+                      , module Vulkan.Core10.SparseResourceMemoryManagement
+                      ) where
+import Vulkan.Core10.APIConstants
+import Vulkan.Core10.AllocationCallbacks
+import Vulkan.Core10.BaseType
+import Vulkan.Core10.Buffer
+import Vulkan.Core10.BufferView
+import Vulkan.Core10.CommandBuffer
+import Vulkan.Core10.CommandBufferBuilding
+import Vulkan.Core10.CommandPool
+import Vulkan.Core10.DescriptorSet
+import Vulkan.Core10.Device
+import Vulkan.Core10.DeviceInitialization
+import Vulkan.Core10.Enums
+import Vulkan.Core10.Event
+import Vulkan.Core10.ExtensionDiscovery
+import Vulkan.Core10.Fence
+import Vulkan.Core10.FuncPointers
+import Vulkan.Core10.Handles
+import Vulkan.Core10.Image
+import Vulkan.Core10.ImageView
+import Vulkan.Core10.LayerDiscovery
+import Vulkan.Core10.Memory
+import Vulkan.Core10.MemoryManagement
+import Vulkan.Core10.OtherTypes
+import Vulkan.Core10.Pass
+import Vulkan.Core10.Pipeline
+import Vulkan.Core10.PipelineCache
+import Vulkan.Core10.PipelineLayout
+import Vulkan.Core10.Query
+import Vulkan.Core10.Queue
+import Vulkan.Core10.QueueSemaphore
+import Vulkan.Core10.Sampler
+import Vulkan.Core10.Shader
+import Vulkan.Core10.SharedTypes
+import Vulkan.Core10.SparseResourceMemoryManagement
+import Data.Word (Word32)
+import Vulkan.Version (pattern MAKE_VERSION)
+pattern API_VERSION_1_0 :: Word32
+pattern API_VERSION_1_0 = MAKE_VERSION 1 0 0
+
diff --git a/src/Vulkan/Core10/APIConstants.hs b/src/Vulkan/Core10/APIConstants.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/APIConstants.hs
@@ -0,0 +1,237 @@
+{-# language CPP #-}
+module Vulkan.Core10.APIConstants  ( pattern LOD_CLAMP_NONE
+                                   , LUID_SIZE_KHR
+                                   , QUEUE_FAMILY_EXTERNAL_KHR
+                                   , MAX_DEVICE_GROUP_SIZE_KHR
+                                   , MAX_DRIVER_NAME_SIZE_KHR
+                                   , MAX_DRIVER_INFO_SIZE_KHR
+                                   , SHADER_UNUSED_NV
+                                   , MAX_PHYSICAL_DEVICE_NAME_SIZE
+                                   , pattern MAX_PHYSICAL_DEVICE_NAME_SIZE
+                                   , UUID_SIZE
+                                   , pattern UUID_SIZE
+                                   , LUID_SIZE
+                                   , pattern LUID_SIZE
+                                   , MAX_EXTENSION_NAME_SIZE
+                                   , pattern MAX_EXTENSION_NAME_SIZE
+                                   , MAX_DESCRIPTION_SIZE
+                                   , pattern MAX_DESCRIPTION_SIZE
+                                   , MAX_MEMORY_TYPES
+                                   , pattern MAX_MEMORY_TYPES
+                                   , MAX_MEMORY_HEAPS
+                                   , pattern MAX_MEMORY_HEAPS
+                                   , REMAINING_MIP_LEVELS
+                                   , pattern REMAINING_MIP_LEVELS
+                                   , REMAINING_ARRAY_LAYERS
+                                   , pattern REMAINING_ARRAY_LAYERS
+                                   , WHOLE_SIZE
+                                   , pattern WHOLE_SIZE
+                                   , ATTACHMENT_UNUSED
+                                   , pattern ATTACHMENT_UNUSED
+                                   , QUEUE_FAMILY_IGNORED
+                                   , pattern QUEUE_FAMILY_IGNORED
+                                   , QUEUE_FAMILY_EXTERNAL
+                                   , pattern QUEUE_FAMILY_EXTERNAL
+                                   , QUEUE_FAMILY_FOREIGN_EXT
+                                   , pattern QUEUE_FAMILY_FOREIGN_EXT
+                                   , SUBPASS_EXTERNAL
+                                   , pattern SUBPASS_EXTERNAL
+                                   , MAX_DEVICE_GROUP_SIZE
+                                   , pattern MAX_DEVICE_GROUP_SIZE
+                                   , MAX_DRIVER_NAME_SIZE
+                                   , pattern MAX_DRIVER_NAME_SIZE
+                                   , MAX_DRIVER_INFO_SIZE
+                                   , pattern MAX_DRIVER_INFO_SIZE
+                                   , SHADER_UNUSED_KHR
+                                   , pattern SHADER_UNUSED_KHR
+                                   , pattern NULL_HANDLE
+                                   , IsHandle
+                                   , HasObjectType(..)
+                                   , Bool32(..)
+                                   , PipelineCacheHeaderVersion(..)
+                                   ) where
+
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Vulkan.Core10.Enums.ObjectType (ObjectType)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.BaseType (Bool32(..))
+import Vulkan.Core10.Enums.PipelineCacheHeaderVersion (PipelineCacheHeaderVersion(..))
+-- No documentation found for TopLevel "VK_LOD_CLAMP_NONE"
+pattern LOD_CLAMP_NONE :: Float
+pattern LOD_CLAMP_NONE = 1000.0
+
+
+-- No documentation found for TopLevel "VK_LUID_SIZE_KHR"
+type LUID_SIZE_KHR = LUID_SIZE
+
+
+-- No documentation found for TopLevel "VK_QUEUE_FAMILY_EXTERNAL_KHR"
+type QUEUE_FAMILY_EXTERNAL_KHR = QUEUE_FAMILY_EXTERNAL
+
+
+-- No documentation found for TopLevel "VK_MAX_DEVICE_GROUP_SIZE_KHR"
+type MAX_DEVICE_GROUP_SIZE_KHR = MAX_DEVICE_GROUP_SIZE
+
+
+-- No documentation found for TopLevel "VK_MAX_DRIVER_NAME_SIZE_KHR"
+type MAX_DRIVER_NAME_SIZE_KHR = MAX_DRIVER_NAME_SIZE
+
+
+-- No documentation found for TopLevel "VK_MAX_DRIVER_INFO_SIZE_KHR"
+type MAX_DRIVER_INFO_SIZE_KHR = MAX_DRIVER_INFO_SIZE
+
+
+-- No documentation found for TopLevel "VK_SHADER_UNUSED_NV"
+type SHADER_UNUSED_NV = SHADER_UNUSED_KHR
+
+
+type MAX_PHYSICAL_DEVICE_NAME_SIZE = 256
+
+-- No documentation found for TopLevel "VK_MAX_PHYSICAL_DEVICE_NAME_SIZE"
+pattern MAX_PHYSICAL_DEVICE_NAME_SIZE :: forall a . Integral a => a
+pattern MAX_PHYSICAL_DEVICE_NAME_SIZE = 256
+
+
+type UUID_SIZE = 16
+
+-- No documentation found for TopLevel "VK_UUID_SIZE"
+pattern UUID_SIZE :: forall a . Integral a => a
+pattern UUID_SIZE = 16
+
+
+type LUID_SIZE = 8
+
+-- No documentation found for TopLevel "VK_LUID_SIZE"
+pattern LUID_SIZE :: forall a . Integral a => a
+pattern LUID_SIZE = 8
+
+
+type MAX_EXTENSION_NAME_SIZE = 256
+
+-- No documentation found for TopLevel "VK_MAX_EXTENSION_NAME_SIZE"
+pattern MAX_EXTENSION_NAME_SIZE :: forall a . Integral a => a
+pattern MAX_EXTENSION_NAME_SIZE = 256
+
+
+type MAX_DESCRIPTION_SIZE = 256
+
+-- No documentation found for TopLevel "VK_MAX_DESCRIPTION_SIZE"
+pattern MAX_DESCRIPTION_SIZE :: forall a . Integral a => a
+pattern MAX_DESCRIPTION_SIZE = 256
+
+
+type MAX_MEMORY_TYPES = 32
+
+-- No documentation found for TopLevel "VK_MAX_MEMORY_TYPES"
+pattern MAX_MEMORY_TYPES :: forall a . Integral a => a
+pattern MAX_MEMORY_TYPES = 32
+
+
+type MAX_MEMORY_HEAPS = 16
+
+-- No documentation found for TopLevel "VK_MAX_MEMORY_HEAPS"
+pattern MAX_MEMORY_HEAPS :: forall a . Integral a => a
+pattern MAX_MEMORY_HEAPS = 16
+
+
+type REMAINING_MIP_LEVELS = 0xffffffff
+
+-- No documentation found for TopLevel "VK_REMAINING_MIP_LEVELS"
+pattern REMAINING_MIP_LEVELS :: Word32
+pattern REMAINING_MIP_LEVELS = 0xffffffff
+
+
+type REMAINING_ARRAY_LAYERS = 0xffffffff
+
+-- No documentation found for TopLevel "VK_REMAINING_ARRAY_LAYERS"
+pattern REMAINING_ARRAY_LAYERS :: Word32
+pattern REMAINING_ARRAY_LAYERS = 0xffffffff
+
+
+type WHOLE_SIZE = 0xffffffffffffffff
+
+-- No documentation found for TopLevel "VK_WHOLE_SIZE"
+pattern WHOLE_SIZE :: Word64
+pattern WHOLE_SIZE = 0xffffffffffffffff
+
+
+type ATTACHMENT_UNUSED = 0xffffffff
+
+-- No documentation found for TopLevel "VK_ATTACHMENT_UNUSED"
+pattern ATTACHMENT_UNUSED :: Word32
+pattern ATTACHMENT_UNUSED = 0xffffffff
+
+
+type QUEUE_FAMILY_IGNORED = 0xffffffff
+
+-- No documentation found for TopLevel "VK_QUEUE_FAMILY_IGNORED"
+pattern QUEUE_FAMILY_IGNORED :: Word32
+pattern QUEUE_FAMILY_IGNORED = 0xffffffff
+
+
+type QUEUE_FAMILY_EXTERNAL = 0xfffffffe
+
+-- No documentation found for TopLevel "VK_QUEUE_FAMILY_EXTERNAL"
+pattern QUEUE_FAMILY_EXTERNAL :: Word32
+pattern QUEUE_FAMILY_EXTERNAL = 0xfffffffe
+
+
+type QUEUE_FAMILY_FOREIGN_EXT = 0xfffffffd
+
+-- No documentation found for TopLevel "VK_QUEUE_FAMILY_FOREIGN_EXT"
+pattern QUEUE_FAMILY_FOREIGN_EXT :: Word32
+pattern QUEUE_FAMILY_FOREIGN_EXT = 0xfffffffd
+
+
+type SUBPASS_EXTERNAL = 0xffffffff
+
+-- No documentation found for TopLevel "VK_SUBPASS_EXTERNAL"
+pattern SUBPASS_EXTERNAL :: Word32
+pattern SUBPASS_EXTERNAL = 0xffffffff
+
+
+type MAX_DEVICE_GROUP_SIZE = 32
+
+-- No documentation found for TopLevel "VK_MAX_DEVICE_GROUP_SIZE"
+pattern MAX_DEVICE_GROUP_SIZE :: forall a . Integral a => a
+pattern MAX_DEVICE_GROUP_SIZE = 32
+
+
+type MAX_DRIVER_NAME_SIZE = 256
+
+-- No documentation found for TopLevel "VK_MAX_DRIVER_NAME_SIZE"
+pattern MAX_DRIVER_NAME_SIZE :: forall a . Integral a => a
+pattern MAX_DRIVER_NAME_SIZE = 256
+
+
+type MAX_DRIVER_INFO_SIZE = 256
+
+-- No documentation found for TopLevel "VK_MAX_DRIVER_INFO_SIZE"
+pattern MAX_DRIVER_INFO_SIZE :: forall a . Integral a => a
+pattern MAX_DRIVER_INFO_SIZE = 256
+
+
+type SHADER_UNUSED_KHR = 0xffffffff
+
+-- No documentation found for TopLevel "VK_SHADER_UNUSED_KHR"
+pattern SHADER_UNUSED_KHR :: Word32
+pattern SHADER_UNUSED_KHR = 0xffffffff
+
+
+-- | VK_NULL_HANDLE - Reserved non-valid object handle
+--
+-- = See Also
+--
+-- No cross-references are available
+pattern NULL_HANDLE :: IsHandle a => a
+pattern NULL_HANDLE <- ((== zero) -> True)
+  where NULL_HANDLE = zero
+
+-- | A class for things which can be created with 'NULL_HANDLE'.
+class (Eq a, Zero a) => IsHandle a where
+
+
+class HasObjectType a where
+  objectTypeAndHandle :: a -> (ObjectType, Word64)
+
diff --git a/src/Vulkan/Core10/APIConstants.hs-boot b/src/Vulkan/Core10/APIConstants.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/APIConstants.hs-boot
@@ -0,0 +1,28 @@
+{-# language CPP #-}
+module Vulkan.Core10.APIConstants  ( LUID_SIZE
+                                   , QUEUE_FAMILY_EXTERNAL
+                                   , MAX_DEVICE_GROUP_SIZE
+                                   , MAX_DRIVER_NAME_SIZE
+                                   , MAX_DRIVER_INFO_SIZE
+                                   , SHADER_UNUSED_KHR
+                                   ) where
+
+
+
+type LUID_SIZE = 8
+
+
+type QUEUE_FAMILY_EXTERNAL = 0xfffffffe
+
+
+type MAX_DEVICE_GROUP_SIZE = 32
+
+
+type MAX_DRIVER_NAME_SIZE = 256
+
+
+type MAX_DRIVER_INFO_SIZE = 256
+
+
+type SHADER_UNUSED_KHR = 0xffffffff
+
diff --git a/src/Vulkan/Core10/AllocationCallbacks.hs b/src/Vulkan/Core10/AllocationCallbacks.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/AllocationCallbacks.hs
@@ -0,0 +1,212 @@
+{-# language CPP #-}
+module Vulkan.Core10.AllocationCallbacks  (AllocationCallbacks(..)) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.FuncPointers (PFN_vkAllocationFunction)
+import Vulkan.Core10.FuncPointers (PFN_vkFreeFunction)
+import Vulkan.Core10.FuncPointers (PFN_vkInternalAllocationNotification)
+import Vulkan.Core10.FuncPointers (PFN_vkInternalFreeNotification)
+import Vulkan.Core10.FuncPointers (PFN_vkReallocationFunction)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+-- | VkAllocationCallbacks - Structure containing callback function pointers
+-- for memory allocation
+--
+-- == Valid Usage
+--
+-- -   @pfnAllocation@ /must/ be a valid pointer to a valid user-defined
+--     'Vulkan.Core10.FuncPointers.PFN_vkAllocationFunction'
+--
+-- -   @pfnReallocation@ /must/ be a valid pointer to a valid user-defined
+--     'Vulkan.Core10.FuncPointers.PFN_vkReallocationFunction'
+--
+-- -   @pfnFree@ /must/ be a valid pointer to a valid user-defined
+--     'Vulkan.Core10.FuncPointers.PFN_vkFreeFunction'
+--
+-- -   If either of @pfnInternalAllocation@ or @pfnInternalFree@ is not
+--     @NULL@, both /must/ be valid callbacks
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FuncPointers.PFN_vkAllocationFunction',
+-- 'Vulkan.Core10.FuncPointers.PFN_vkFreeFunction',
+-- 'Vulkan.Core10.FuncPointers.PFN_vkInternalAllocationNotification',
+-- 'Vulkan.Core10.FuncPointers.PFN_vkInternalFreeNotification',
+-- 'Vulkan.Core10.FuncPointers.PFN_vkReallocationFunction',
+-- 'Vulkan.Core10.Memory.allocateMemory',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.createAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.createAccelerationStructureNV',
+-- 'Vulkan.Extensions.VK_KHR_android_surface.createAndroidSurfaceKHR',
+-- 'Vulkan.Core10.Buffer.createBuffer',
+-- 'Vulkan.Core10.BufferView.createBufferView',
+-- 'Vulkan.Core10.CommandPool.createCommandPool',
+-- 'Vulkan.Core10.Pipeline.createComputePipelines',
+-- 'Vulkan.Extensions.VK_EXT_debug_report.createDebugReportCallbackEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.createDebugUtilsMessengerEXT',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.createDeferredOperationKHR',
+-- 'Vulkan.Core10.DescriptorSet.createDescriptorPool',
+-- 'Vulkan.Core10.DescriptorSet.createDescriptorSetLayout',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.createDescriptorUpdateTemplate',
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR',
+-- 'Vulkan.Core10.Device.createDevice',
+-- 'Vulkan.Extensions.VK_KHR_display.createDisplayModeKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.createDisplayPlaneSurfaceKHR',
+-- 'Vulkan.Core10.Event.createEvent', 'Vulkan.Core10.Fence.createFence',
+-- 'Vulkan.Core10.Pass.createFramebuffer',
+-- 'Vulkan.Core10.Pipeline.createGraphicsPipelines',
+-- 'Vulkan.Extensions.VK_EXT_headless_surface.createHeadlessSurfaceEXT',
+-- 'Vulkan.Extensions.VK_MVK_ios_surface.createIOSSurfaceMVK',
+-- 'Vulkan.Core10.Image.createImage',
+-- 'Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface.createImagePipeSurfaceFUCHSIA',
+-- 'Vulkan.Core10.ImageView.createImageView',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.createIndirectCommandsLayoutNV',
+-- 'Vulkan.Core10.DeviceInitialization.createInstance',
+-- 'Vulkan.Extensions.VK_MVK_macos_surface.createMacOSSurfaceMVK',
+-- 'Vulkan.Extensions.VK_EXT_metal_surface.createMetalSurfaceEXT',
+-- 'Vulkan.Core10.PipelineCache.createPipelineCache',
+-- 'Vulkan.Core10.PipelineLayout.createPipelineLayout',
+-- 'Vulkan.Extensions.VK_EXT_private_data.createPrivateDataSlotEXT',
+-- 'Vulkan.Core10.Query.createQueryPool',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV',
+-- 'Vulkan.Core10.Pass.createRenderPass',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.createRenderPass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR',
+-- 'Vulkan.Core10.Sampler.createSampler',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversion',
+-- 'Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversionKHR',
+-- 'Vulkan.Core10.QueueSemaphore.createSemaphore',
+-- 'Vulkan.Core10.Shader.createShaderModule',
+-- 'Vulkan.Extensions.VK_KHR_display_swapchain.createSharedSwapchainsKHR',
+-- 'Vulkan.Extensions.VK_GGP_stream_descriptor_surface.createStreamDescriptorSurfaceGGP',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.createValidationCacheEXT',
+-- 'Vulkan.Extensions.VK_NN_vi_surface.createViSurfaceNN',
+-- 'Vulkan.Extensions.VK_KHR_wayland_surface.createWaylandSurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_win32_surface.createWin32SurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_xcb_surface.createXcbSurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_xlib_surface.createXlibSurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.destroyAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.destroyAccelerationStructureNV',
+-- 'Vulkan.Core10.Buffer.destroyBuffer',
+-- 'Vulkan.Core10.BufferView.destroyBufferView',
+-- 'Vulkan.Core10.CommandPool.destroyCommandPool',
+-- 'Vulkan.Extensions.VK_EXT_debug_report.destroyDebugReportCallbackEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.destroyDebugUtilsMessengerEXT',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.destroyDeferredOperationKHR',
+-- 'Vulkan.Core10.DescriptorSet.destroyDescriptorPool',
+-- 'Vulkan.Core10.DescriptorSet.destroyDescriptorSetLayout',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplate',
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplateKHR',
+-- 'Vulkan.Core10.Device.destroyDevice',
+-- 'Vulkan.Core10.Event.destroyEvent', 'Vulkan.Core10.Fence.destroyFence',
+-- 'Vulkan.Core10.Pass.destroyFramebuffer',
+-- 'Vulkan.Core10.Image.destroyImage',
+-- 'Vulkan.Core10.ImageView.destroyImageView',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.destroyIndirectCommandsLayoutNV',
+-- 'Vulkan.Core10.DeviceInitialization.destroyInstance',
+-- 'Vulkan.Core10.Pipeline.destroyPipeline',
+-- 'Vulkan.Core10.PipelineCache.destroyPipelineCache',
+-- 'Vulkan.Core10.PipelineLayout.destroyPipelineLayout',
+-- 'Vulkan.Extensions.VK_EXT_private_data.destroyPrivateDataSlotEXT',
+-- 'Vulkan.Core10.Query.destroyQueryPool',
+-- 'Vulkan.Core10.Pass.destroyRenderPass',
+-- 'Vulkan.Core10.Sampler.destroySampler',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversion',
+-- 'Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversionKHR',
+-- 'Vulkan.Core10.QueueSemaphore.destroySemaphore',
+-- 'Vulkan.Core10.Shader.destroyShaderModule',
+-- 'Vulkan.Extensions.VK_KHR_surface.destroySurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.destroySwapchainKHR',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.destroyValidationCacheEXT',
+-- 'Vulkan.Core10.Memory.freeMemory',
+-- 'Vulkan.Extensions.VK_EXT_display_control.registerDeviceEventEXT',
+-- 'Vulkan.Extensions.VK_EXT_display_control.registerDisplayEventEXT'
+data AllocationCallbacks = AllocationCallbacks
+  { -- | @pUserData@ is a value to be interpreted by the implementation of the
+    -- callbacks. When any of the callbacks in 'AllocationCallbacks' are
+    -- called, the Vulkan implementation will pass this value as the first
+    -- parameter to the callback. This value /can/ vary each time an allocator
+    -- is passed into a command, even when the same object takes an allocator
+    -- in multiple commands.
+    userData :: Ptr ()
+  , -- | @pfnAllocation@ is a
+    -- 'Vulkan.Core10.FuncPointers.PFN_vkAllocationFunction' pointer to an
+    -- application-defined memory allocation function.
+    pfnAllocation :: PFN_vkAllocationFunction
+  , -- | @pfnReallocation@ is a
+    -- 'Vulkan.Core10.FuncPointers.PFN_vkReallocationFunction' pointer to an
+    -- application-defined memory reallocation function.
+    pfnReallocation :: PFN_vkReallocationFunction
+  , -- | @pfnFree@ is a 'Vulkan.Core10.FuncPointers.PFN_vkFreeFunction' pointer
+    -- to an application-defined memory free function.
+    pfnFree :: PFN_vkFreeFunction
+  , -- | @pfnInternalAllocation@ is a
+    -- 'Vulkan.Core10.FuncPointers.PFN_vkInternalAllocationNotification'
+    -- pointer to an application-defined function that is called by the
+    -- implementation when the implementation makes internal allocations.
+    pfnInternalAllocation :: PFN_vkInternalAllocationNotification
+  , -- | @pfnInternalFree@ is a
+    -- 'Vulkan.Core10.FuncPointers.PFN_vkInternalFreeNotification' pointer to
+    -- an application-defined function that is called by the implementation
+    -- when the implementation frees internal allocations.
+    pfnInternalFree :: PFN_vkInternalFreeNotification
+  }
+  deriving (Typeable)
+deriving instance Show AllocationCallbacks
+
+instance ToCStruct AllocationCallbacks where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AllocationCallbacks{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr (Ptr ()))) (userData)
+    poke ((p `plusPtr` 8 :: Ptr PFN_vkAllocationFunction)) (pfnAllocation)
+    poke ((p `plusPtr` 16 :: Ptr PFN_vkReallocationFunction)) (pfnReallocation)
+    poke ((p `plusPtr` 24 :: Ptr PFN_vkFreeFunction)) (pfnFree)
+    poke ((p `plusPtr` 32 :: Ptr PFN_vkInternalAllocationNotification)) (pfnInternalAllocation)
+    poke ((p `plusPtr` 40 :: Ptr PFN_vkInternalFreeNotification)) (pfnInternalFree)
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 8 :: Ptr PFN_vkAllocationFunction)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr PFN_vkReallocationFunction)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr PFN_vkFreeFunction)) (zero)
+    f
+
+instance FromCStruct AllocationCallbacks where
+  peekCStruct p = do
+    pUserData <- peek @(Ptr ()) ((p `plusPtr` 0 :: Ptr (Ptr ())))
+    pfnAllocation <- peek @PFN_vkAllocationFunction ((p `plusPtr` 8 :: Ptr PFN_vkAllocationFunction))
+    pfnReallocation <- peek @PFN_vkReallocationFunction ((p `plusPtr` 16 :: Ptr PFN_vkReallocationFunction))
+    pfnFree <- peek @PFN_vkFreeFunction ((p `plusPtr` 24 :: Ptr PFN_vkFreeFunction))
+    pfnInternalAllocation <- peek @PFN_vkInternalAllocationNotification ((p `plusPtr` 32 :: Ptr PFN_vkInternalAllocationNotification))
+    pfnInternalFree <- peek @PFN_vkInternalFreeNotification ((p `plusPtr` 40 :: Ptr PFN_vkInternalFreeNotification))
+    pure $ AllocationCallbacks
+             pUserData pfnAllocation pfnReallocation pfnFree pfnInternalAllocation pfnInternalFree
+
+instance Storable AllocationCallbacks where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AllocationCallbacks where
+  zero = AllocationCallbacks
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/AllocationCallbacks.hs-boot b/src/Vulkan/Core10/AllocationCallbacks.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/AllocationCallbacks.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core10.AllocationCallbacks  (AllocationCallbacks) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data AllocationCallbacks
+
+instance ToCStruct AllocationCallbacks
+instance Show AllocationCallbacks
+
+instance FromCStruct AllocationCallbacks
+
diff --git a/src/Vulkan/Core10/BaseType.hs b/src/Vulkan/Core10/BaseType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/BaseType.hs
@@ -0,0 +1,351 @@
+{-# language CPP #-}
+module Vulkan.Core10.BaseType  ( boolToBool32
+                               , bool32ToBool
+                               , Bool32( FALSE
+                                       , TRUE
+                                       , ..
+                                       )
+                               , SampleMask
+                               , Flags
+                               , DeviceSize
+                               , DeviceAddress
+                               ) where
+
+import Data.Bool (bool)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+boolToBool32 :: Bool -> Bool32
+boolToBool32 = bool FALSE TRUE
+
+bool32ToBool :: Bool32 -> Bool
+bool32ToBool = \case
+  FALSE -> False
+  TRUE  -> True
+
+
+-- | VkBool32 - Vulkan boolean type
+--
+-- = Description
+--
+-- 'TRUE' represents a boolean __True__ (integer 1) value, and 'FALSE' a
+-- boolean __False__ (integer 0) value.
+--
+-- All values returned from a Vulkan implementation in a 'Bool32' will be
+-- either 'TRUE' or 'FALSE'.
+--
+-- Applications /must/ not pass any other values than 'TRUE' or 'FALSE'
+-- into a Vulkan implementation where a 'Bool32' is expected.
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureBuildGeometryInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateGeometryTypeInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryInstancesDataKHR',
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.CommandBufferInheritanceConditionalRenderingInfoEXT',
+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',
+-- 'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.DescriptorSetLayoutSupport',
+-- 'Vulkan.Extensions.VK_AMD_display_native_hdr.DisplayNativeHdrSurfaceCapabilitiesAMD',
+-- 'Vulkan.Extensions.VK_KHR_display_swapchain.DisplayPresentInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.PerformanceOverrideInfoINTEL',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.PerformanceValueDataINTEL',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures',
+-- 'Vulkan.Extensions.VK_EXT_astc_decode_mode.PhysicalDeviceASTCDecodeFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures',
+-- 'Vulkan.Extensions.VK_EXT_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeaturesEXT',
+-- 'Vulkan.Extensions.VK_AMD_device_coherent_memory.PhysicalDeviceCoherentMemoryFeaturesAMD',
+-- 'Vulkan.Extensions.VK_NV_compute_shader_derivatives.PhysicalDeviceComputeShaderDerivativesFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.PhysicalDeviceConditionalRenderingFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_conservative_rasterization.PhysicalDeviceConservativeRasterizationPropertiesEXT',
+-- 'Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixFeaturesNV',
+-- 'Vulkan.Extensions.VK_NV_corner_sampled_image.PhysicalDeviceCornerSampledImageFeaturesNV',
+-- 'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PhysicalDeviceCoverageReductionModeFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_custom_border_color.PhysicalDeviceCustomBorderColorFeaturesEXT',
+-- 'Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing.PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PhysicalDeviceDepthClipEnableFeaturesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
+-- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
+-- 'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT',
+-- 'Vulkan.Extensions.VK_NV_fragment_shader_barycentric.PhysicalDeviceFragmentShaderBarycentricFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_fragment_shader_interlock.PhysicalDeviceFragmentShaderInterlockFeaturesEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.PhysicalDeviceImagelessFramebufferFeatures',
+-- 'Vulkan.Extensions.VK_EXT_index_type_uint8.PhysicalDeviceIndexTypeUint8FeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT',
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits',
+-- 'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
+-- 'Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryFeaturesKHR',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
+-- 'Vulkan.Extensions.VK_EXT_private_data.PhysicalDevicePrivateDataFeaturesEXT',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingFeaturesKHR',
+-- 'Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2FeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.PhysicalDeviceSamplerFilterMinmaxProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
+-- 'Vulkan.Extensions.VK_KHR_shader_clock.PhysicalDeviceShaderClockFeaturesKHR',
+-- 'Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation.PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8.PhysicalDeviceShaderFloat16Int8Features',
+-- 'Vulkan.Extensions.VK_NV_shader_image_footprint.PhysicalDeviceShaderImageFootprintFeaturesNV',
+-- 'Vulkan.Extensions.VK_INTEL_shader_integer_functions2.PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL',
+-- 'Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsFeaturesNV',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types.PhysicalDeviceShaderSubgroupExtendedTypesFeatures',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImageFeaturesNV',
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceSparseProperties',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
+-- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreFeatures',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout.PhysicalDeviceUniformBufferStandardLayoutFeatures',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers.PhysicalDeviceVariablePointersFeatures',
+-- 'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PhysicalDeviceVertexAttributeDivisorFeaturesEXT',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan11Features',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan11Properties',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan12Features',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan12Properties',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures',
+-- 'Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT',
+-- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState',
+-- 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.PipelineCoverageModulationStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_fragment_coverage_to_color.PipelineCoverageToColorStateCreateInfoNV',
+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableInternalRepresentationKHR',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableStatisticValueKHR',
+-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo',
+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT',
+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.ProtectedSubmitInfo',
+-- 'Vulkan.Core10.Sampler.SamplerCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT',
+-- 'Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_AMD_display_native_hdr.SwapchainDisplayNativeHdrCreateInfoAMD',
+-- 'Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.TextureLODGatherFormatPropertiesAMD',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdExecuteGeneratedCommandsNV',
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR',
+-- 'Vulkan.Extensions.VK_AMD_display_native_hdr.setLocalDimmingAMD',
+-- 'Vulkan.Core10.Fence.waitForFences'
+newtype Bool32 = Bool32 Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkBool32" "VK_FALSE"
+pattern FALSE = Bool32 0
+-- No documentation found for Nested "VkBool32" "VK_TRUE"
+pattern TRUE = Bool32 1
+{-# complete FALSE,
+             TRUE :: Bool32 #-}
+
+instance Show Bool32 where
+  showsPrec p = \case
+    FALSE -> showString "FALSE"
+    TRUE -> showString "TRUE"
+    Bool32 x -> showParen (p >= 11) (showString "Bool32 " . showsPrec 11 x)
+
+instance Read Bool32 where
+  readPrec = parens (choose [("FALSE", pure FALSE)
+                            , ("TRUE", pure TRUE)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "Bool32")
+                       v <- step readPrec
+                       pure (Bool32 v)))
+
+
+-- | VkSampleMask - Mask of sample coverage information
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'
+type SampleMask = Word32
+
+
+-- | VkFlags - Vulkan bitmasks
+--
+-- = Description
+--
+-- Bitmasks are passed to many commands and structures to compactly
+-- represent options, but 'Flags' is not used directly in the API. Instead,
+-- a @Vk*Flags@ type which is an alias of 'Flags', and whose name matches
+-- the corresponding @Vk*FlagBits@ that are valid for that type, is used.
+--
+-- Any @Vk*Flags@ member or parameter used in the API as an input /must/ be
+-- a valid combination of bit flags. A valid combination is either zero or
+-- the bitwise OR of valid bit flags. A bit flag is valid if:
+--
+-- -   The bit flag is defined as part of the @Vk*FlagBits@ type, where the
+--     bits type is obtained by taking the flag type and replacing the
+--     trailing 'Flags' with @FlagBits@. For example, a flag value of type
+--     'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlags'
+--     /must/ contain only bit flags defined by
+--     'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'.
+--
+-- -   The flag is allowed in the context in which it is being used. For
+--     example, in some cases, certain bit flags or combinations of bit
+--     flags are mutually exclusive.
+--
+-- Any @Vk*Flags@ member or parameter returned from a query command or
+-- otherwise output from Vulkan to the application /may/ contain bit flags
+-- undefined in its corresponding @Vk*FlagBits@ type. An application
+-- /cannot/ rely on the state of these unspecified bits.
+--
+-- Only the low-order 31 bits (bit positions zero through 30) are available
+-- for use as flag bits.
+--
+-- Note
+--
+-- This restriction is due to poorly defined behavior by C compilers given
+-- a C enumerant value of @0x80000000@. In some cases adding this enumerant
+-- value may increase the size of the underlying @Vk*FlagBits@ type,
+-- breaking the ABI.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlags'
+type Flags = Word32
+
+
+-- | VkDeviceSize - Vulkan device memory size and offsets
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureCreateInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryAabbsDataKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryTrianglesDataKHR',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferPropertiesANDROID',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.BindAccelerationStructureMemoryInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.BufferCopy',
+-- 'Vulkan.Core10.Buffer.BufferCreateInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
+-- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
+-- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
+-- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
+-- 'Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewAddressPropertiesNVX',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsStreamNV',
+-- 'Vulkan.Core10.Memory.MappedMemoryRange',
+-- 'Vulkan.Core10.Memory.MemoryAllocateInfo',
+-- 'Vulkan.Core10.DeviceInitialization.MemoryHeap',
+-- 'Vulkan.Core10.MemoryManagement.MemoryRequirements',
+-- 'Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT',
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties',
+-- 'Vulkan.Extensions.VK_EXT_memory_budget.PhysicalDeviceMemoryBudgetPropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2PropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan11Properties',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryRequirements',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseMemoryBind',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.StridedBufferRegionKHR',
+-- 'Vulkan.Core10.Image.SubresourceLayout',
+-- 'Vulkan.Core10.MemoryManagement.bindBufferMemory',
+-- 'Vulkan.Core10.MemoryManagement.bindImageMemory',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureIndirectKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount',
+-- 'Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndexedIndirectCountAMD',
+-- 'Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCountKHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdDrawIndirectByteCountEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount',
+-- 'Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndirectCountAMD',
+-- 'Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndirectCountKHR',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdFillBuffer',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysIndirectKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdUpdateBuffer',
+-- 'Vulkan.Extensions.VK_AMD_buffer_marker.cmdWriteBufferMarkerAMD',
+-- 'Vulkan.Core10.Memory.getDeviceMemoryCommitment',
+-- 'Vulkan.Core10.Query.getQueryPoolResults',
+-- 'Vulkan.Core10.Memory.mapMemory'
+type DeviceSize = Word64
+
+
+-- | VkDeviceAddress - Vulkan device address type
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.BindIndexBufferIndirectCommandNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.BindVertexBufferIndirectCommandNV',
+-- 'Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.DeviceOrHostAddressConstKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.DeviceOrHostAddressKHR',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewAddressPropertiesNVX'
+type DeviceAddress = Word64
+
diff --git a/src/Vulkan/Core10/BaseType.hs-boot b/src/Vulkan/Core10/BaseType.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/BaseType.hs-boot
@@ -0,0 +1,99 @@
+{-# language CPP #-}
+module Vulkan.Core10.BaseType  ( Bool32
+                               , DeviceAddress
+                               , DeviceSize
+                               ) where
+
+import Data.Word (Word64)
+
+data Bool32
+
+
+-- | VkDeviceAddress - Vulkan device address type
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.BindIndexBufferIndirectCommandNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.BindVertexBufferIndirectCommandNV',
+-- 'Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.DeviceOrHostAddressConstKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.DeviceOrHostAddressKHR',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewAddressPropertiesNVX'
+type DeviceAddress = Word64
+
+
+-- | VkDeviceSize - Vulkan device memory size and offsets
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureCreateInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryAabbsDataKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryTrianglesDataKHR',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferPropertiesANDROID',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.BindAccelerationStructureMemoryInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.BufferCopy',
+-- 'Vulkan.Core10.Buffer.BufferCreateInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
+-- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
+-- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
+-- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
+-- 'Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewAddressPropertiesNVX',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsStreamNV',
+-- 'Vulkan.Core10.Memory.MappedMemoryRange',
+-- 'Vulkan.Core10.Memory.MemoryAllocateInfo',
+-- 'Vulkan.Core10.DeviceInitialization.MemoryHeap',
+-- 'Vulkan.Core10.MemoryManagement.MemoryRequirements',
+-- 'Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT',
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties',
+-- 'Vulkan.Extensions.VK_EXT_memory_budget.PhysicalDeviceMemoryBudgetPropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2PropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan11Properties',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryRequirements',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseMemoryBind',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.StridedBufferRegionKHR',
+-- 'Vulkan.Core10.Image.SubresourceLayout',
+-- 'Vulkan.Core10.MemoryManagement.bindBufferMemory',
+-- 'Vulkan.Core10.MemoryManagement.bindImageMemory',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureIndirectKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount',
+-- 'Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndexedIndirectCountAMD',
+-- 'Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCountKHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdDrawIndirectByteCountEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount',
+-- 'Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndirectCountAMD',
+-- 'Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndirectCountKHR',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdFillBuffer',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysIndirectKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdUpdateBuffer',
+-- 'Vulkan.Extensions.VK_AMD_buffer_marker.cmdWriteBufferMarkerAMD',
+-- 'Vulkan.Core10.Memory.getDeviceMemoryCommitment',
+-- 'Vulkan.Core10.Query.getQueryPoolResults',
+-- 'Vulkan.Core10.Memory.mapMemory'
+type DeviceSize = Word64
+
diff --git a/src/Vulkan/Core10/Buffer.hs b/src/Vulkan/Core10/Buffer.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Buffer.hs
@@ -0,0 +1,461 @@
+{-# language CPP #-}
+module Vulkan.Core10.Buffer  ( createBuffer
+                             , withBuffer
+                             , destroyBuffer
+                             , BufferCreateInfo(..)
+                             ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_buffer_device_address (BufferDeviceAddressCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferOpaqueCaptureAddressCreateInfo)
+import Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
+import Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationBufferCreateInfoNV)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateBuffer))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyBuffer))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryBufferCreateInfo)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SharingMode (SharingMode)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateBuffer
+  :: FunPtr (Ptr Device_T -> Ptr (BufferCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Buffer -> IO Result) -> Ptr Device_T -> Ptr (BufferCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Buffer -> IO Result
+
+-- | vkCreateBuffer - Create a new buffer object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the buffer object.
+--
+-- -   @pCreateInfo@ is a pointer to a 'BufferCreateInfo' structure
+--     containing parameters affecting creation of the buffer.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pBuffer@ is a pointer to a 'Vulkan.Core10.Handles.Buffer' handle in
+--     which the resulting buffer object is returned.
+--
+-- == Valid Usage
+--
+-- -   If the @flags@ member of @pCreateInfo@ includes
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT',
+--     creating this 'Vulkan.Core10.Handles.Buffer' /must/ not cause the
+--     total required sparse memory for all currently valid sparse
+--     resources on the device to exceed
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@sparseAddressSpaceSize@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'BufferCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pBuffer@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Buffer' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Buffer', 'BufferCreateInfo',
+-- 'Vulkan.Core10.Handles.Device'
+createBuffer :: forall a io . (Extendss BufferCreateInfo a, PokeChain a, MonadIO io) => Device -> BufferCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Buffer)
+createBuffer device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateBufferPtr = pVkCreateBuffer (deviceCmds (device :: Device))
+  lift $ unless (vkCreateBufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateBuffer is null" Nothing Nothing
+  let vkCreateBuffer' = mkVkCreateBuffer vkCreateBufferPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPBuffer <- ContT $ bracket (callocBytes @Buffer 8) free
+  r <- lift $ vkCreateBuffer' (deviceHandle (device)) pCreateInfo pAllocator (pPBuffer)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pBuffer <- lift $ peek @Buffer pPBuffer
+  pure $ (pBuffer)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createBuffer' and 'destroyBuffer'
+--
+-- To ensure that 'destroyBuffer' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withBuffer :: forall a io r . (Extendss BufferCreateInfo a, PokeChain a, MonadIO io) => Device -> BufferCreateInfo a -> Maybe AllocationCallbacks -> (io (Buffer) -> ((Buffer) -> io ()) -> r) -> r
+withBuffer device pCreateInfo pAllocator b =
+  b (createBuffer device pCreateInfo pAllocator)
+    (\(o0) -> destroyBuffer device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyBuffer
+  :: FunPtr (Ptr Device_T -> Buffer -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Buffer -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyBuffer - Destroy a buffer object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @buffer@, either directly or
+--     via a 'Vulkan.Core10.Handles.BufferView', /must/ have completed
+--     execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @buffer@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @buffer@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' 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
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.Device'
+destroyBuffer :: forall io . MonadIO io => Device -> Buffer -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyBuffer device buffer allocator = liftIO . evalContT $ do
+  let vkDestroyBufferPtr = pVkDestroyBuffer (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyBufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyBuffer is null" Nothing Nothing
+  let vkDestroyBuffer' = mkVkDestroyBuffer vkDestroyBufferPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyBuffer' (deviceHandle (device)) (buffer) pAllocator
+  pure $ ()
+
+
+-- | VkBufferCreateInfo - Structure specifying the parameters of a newly
+-- created buffer object
+--
+-- == Valid Usage
+--
+-- -   @size@ /must/ be greater than @0@
+--
+-- -   If @sharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
+--     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
+--     @queueFamilyIndexCount@ @uint32_t@ values
+--
+-- -   If @sharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
+--     @queueFamilyIndexCount@ /must/ be greater than @1@
+--
+-- -   If @sharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', each
+--     element of @pQueueFamilyIndices@ /must/ be unique and /must/ be less
+--     than @pQueueFamilyPropertyCount@ returned by either
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'
+--     for the @physicalDevice@ that was used to create @device@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseBinding sparse bindings>
+--     feature is not enabled, @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyBuffer sparse buffer residency>
+--     feature is not enabled, @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyAliased sparse aliased residency>
+--     feature is not enabled, @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'
+--     or
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT',
+--     it /must/ also contain
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'
+--     structure, its @handleTypes@ member /must/ only contain bits that
+--     are also in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'::@externalMemoryProperties.compatibleHandleTypes@,
+--     as returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferProperties'
+--     with @pExternalBufferInfo->handleType@ equal to any one of the
+--     handle types specified in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
+--
+-- -   If the protected memory feature is not enabled, @flags@ /must/ not
+--     contain
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT'
+--
+-- -   If any of the bits
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT',
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT',
+--     or
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT'
+--     are set,
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT'
+--     /must/ not also be set
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV'
+--     structure, and the @dedicatedAllocation@ member of the chained
+--     structure is 'Vulkan.Core10.BaseType.TRUE', then @flags@ /must/ not
+--     include
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT',
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT',
+--     or
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT'
+--
+-- -   If
+--     'Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT'::@deviceAddress@
+--     is not zero, @flags@ /must/ include
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
+--
+-- -   If
+--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo'::@opaqueCaptureAddress@
+--     is not zero, @flags@ /must/ include
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT',
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressCaptureReplay bufferDeviceAddressCaptureReplay>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressCaptureReplayEXT ::bufferDeviceAddressCaptureReplay>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo',
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV',
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlagBits'
+--     values
+--
+-- -   @usage@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlagBits' values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- -   @sharingMode@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SharingMode.SharingMode' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlags',
+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlags',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.SharingMode.SharingMode',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createBuffer'
+data BufferCreateInfo (es :: [Type]) = BufferCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlagBits'
+    -- specifying additional parameters of the buffer.
+    flags :: BufferCreateFlags
+  , -- | @size@ is the size in bytes of the buffer to be created.
+    size :: DeviceSize
+  , -- | @usage@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlagBits' specifying
+    -- allowed usages of the buffer.
+    usage :: BufferUsageFlags
+  , -- | @sharingMode@ is a 'Vulkan.Core10.Enums.SharingMode.SharingMode' value
+    -- specifying the sharing mode of the buffer when it will be accessed by
+    -- multiple queue families.
+    sharingMode :: SharingMode
+  , -- | @pQueueFamilyIndices@ is a list of queue families that will access this
+    -- buffer (ignored if @sharingMode@ is not
+    -- 'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT').
+    queueFamilyIndices :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (BufferCreateInfo es)
+
+instance Extensible BufferCreateInfo where
+  extensibleType = STRUCTURE_TYPE_BUFFER_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext BufferCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends BufferCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @BufferDeviceAddressCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @BufferOpaqueCaptureAddressCreateInfo = Just f
+    | Just Refl <- eqT @e @ExternalMemoryBufferCreateInfo = Just f
+    | Just Refl <- eqT @e @DedicatedAllocationBufferCreateInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss BufferCreateInfo es, PokeChain es) => ToCStruct (BufferCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr BufferCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (size)
+    lift $ poke ((p `plusPtr` 32 :: Ptr BufferUsageFlags)) (usage)
+    lift $ poke ((p `plusPtr` 36 :: Ptr SharingMode)) (sharingMode)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueFamilyIndices)) :: Word32))
+    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (queueFamilyIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (queueFamilyIndices)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr BufferUsageFlags)) (zero)
+    lift $ poke ((p `plusPtr` 36 :: Ptr SharingMode)) (zero)
+    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
+    lift $ f
+
+instance (Extendss BufferCreateInfo es, PeekChain es) => FromCStruct (BufferCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @BufferCreateFlags ((p `plusPtr` 16 :: Ptr BufferCreateFlags))
+    size <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    usage <- peek @BufferUsageFlags ((p `plusPtr` 32 :: Ptr BufferUsageFlags))
+    sharingMode <- peek @SharingMode ((p `plusPtr` 36 :: Ptr SharingMode))
+    queueFamilyIndexCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    pQueueFamilyIndices <- peek @(Ptr Word32) ((p `plusPtr` 48 :: Ptr (Ptr Word32)))
+    pQueueFamilyIndices' <- generateM (fromIntegral queueFamilyIndexCount) (\i -> peek @Word32 ((pQueueFamilyIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ BufferCreateInfo
+             next flags size usage sharingMode pQueueFamilyIndices'
+
+instance es ~ '[] => Zero (BufferCreateInfo es) where
+  zero = BufferCreateInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+           mempty
+
diff --git a/src/Vulkan/Core10/Buffer.hs-boot b/src/Vulkan/Core10/Buffer.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Buffer.hs-boot
@@ -0,0 +1,18 @@
+{-# language CPP #-}
+module Vulkan.Core10.Buffer  (BufferCreateInfo) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role BufferCreateInfo nominal
+data BufferCreateInfo (es :: [Type])
+
+instance (Extendss BufferCreateInfo es, PokeChain es) => ToCStruct (BufferCreateInfo es)
+instance Show (Chain es) => Show (BufferCreateInfo es)
+
+instance (Extendss BufferCreateInfo es, PeekChain es) => FromCStruct (BufferCreateInfo es)
+
diff --git a/src/Vulkan/Core10/BufferView.hs b/src/Vulkan/Core10/BufferView.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/BufferView.hs
@@ -0,0 +1,386 @@
+{-# language CPP #-}
+module Vulkan.Core10.BufferView  ( createBufferView
+                                 , withBufferView
+                                 , destroyBufferView
+                                 , BufferViewCreateInfo(..)
+                                 ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (BufferView)
+import Vulkan.Core10.Handles (BufferView(..))
+import Vulkan.Core10.Enums.BufferViewCreateFlags (BufferViewCreateFlags)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateBufferView))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyBufferView))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateBufferView
+  :: FunPtr (Ptr Device_T -> Ptr BufferViewCreateInfo -> Ptr AllocationCallbacks -> Ptr BufferView -> IO Result) -> Ptr Device_T -> Ptr BufferViewCreateInfo -> Ptr AllocationCallbacks -> Ptr BufferView -> IO Result
+
+-- | vkCreateBufferView - Create a new buffer view object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the buffer view.
+--
+-- -   @pCreateInfo@ is a pointer to a 'BufferViewCreateInfo' structure
+--     containing parameters to be used to create the buffer.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pView@ is a pointer to a 'Vulkan.Core10.Handles.BufferView' handle
+--     in which the resulting buffer view object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'BufferViewCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pView@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.BufferView' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.BufferView', 'BufferViewCreateInfo',
+-- 'Vulkan.Core10.Handles.Device'
+createBufferView :: forall io . MonadIO io => Device -> BufferViewCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (BufferView)
+createBufferView device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateBufferViewPtr = pVkCreateBufferView (deviceCmds (device :: Device))
+  lift $ unless (vkCreateBufferViewPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateBufferView is null" Nothing Nothing
+  let vkCreateBufferView' = mkVkCreateBufferView vkCreateBufferViewPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPView <- ContT $ bracket (callocBytes @BufferView 8) free
+  r <- lift $ vkCreateBufferView' (deviceHandle (device)) pCreateInfo pAllocator (pPView)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pView <- lift $ peek @BufferView pPView
+  pure $ (pView)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createBufferView' and 'destroyBufferView'
+--
+-- To ensure that 'destroyBufferView' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withBufferView :: forall io r . MonadIO io => Device -> BufferViewCreateInfo -> Maybe AllocationCallbacks -> (io (BufferView) -> ((BufferView) -> io ()) -> r) -> r
+withBufferView device pCreateInfo pAllocator b =
+  b (createBufferView device pCreateInfo pAllocator)
+    (\(o0) -> destroyBufferView device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyBufferView
+  :: FunPtr (Ptr Device_T -> BufferView -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> BufferView -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyBufferView - Destroy a buffer view object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @bufferView@ /must/ have
+--     completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @bufferView@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @bufferView@ was created, @pAllocator@ /must/ be
+--     @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @bufferView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @bufferView@ /must/ be a valid 'Vulkan.Core10.Handles.BufferView'
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @bufferView@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @bufferView@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.BufferView', 'Vulkan.Core10.Handles.Device'
+destroyBufferView :: forall io . MonadIO io => Device -> BufferView -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyBufferView device bufferView allocator = liftIO . evalContT $ do
+  let vkDestroyBufferViewPtr = pVkDestroyBufferView (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyBufferViewPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyBufferView is null" Nothing Nothing
+  let vkDestroyBufferView' = mkVkDestroyBufferView vkDestroyBufferViewPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyBufferView' (deviceHandle (device)) (bufferView) pAllocator
+  pure $ ()
+
+
+-- | VkBufferViewCreateInfo - Structure specifying parameters of a newly
+-- created buffer view
+--
+-- == Valid Usage
+--
+-- -   @offset@ /must/ be less than the size of @buffer@
+--
+-- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @range@ /must/ be greater than @0@
+--
+-- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @range@ /must/ be an integer multiple of the texel block size of
+--     @format@
+--
+-- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @range@ divided by the texel block size of @format@, multiplied by
+--     the number of texels per texel block for that format (as defined in
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility Compatible Formats>
+--     table), /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTexelBufferElements@
+--
+-- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     the sum of @offset@ and @range@ /must/ be less than or equal to the
+--     size of @buffer@
+--
+-- -   @buffer@ /must/ have been created with a @usage@ value containing at
+--     least one of
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT'
+--
+-- -   If @buffer@ was created with @usage@ containing
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT',
+--     @format@ /must/ be supported for uniform texel buffers, as specified
+--     by the
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT'
+--     flag in
+--     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
+--     returned by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
+--
+-- -   If @buffer@ was created with @usage@ containing
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT',
+--     @format@ /must/ be supported for storage texel buffers, as specified
+--     by the
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT'
+--     flag in
+--     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
+--     returned by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>
+--     feature is not enabled, @offset@ /must/ be a multiple of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minTexelBufferOffsetAlignment@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>
+--     feature is enabled and if @buffer@ was created with @usage@
+--     containing
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT',
+--     @offset@ /must/ be a multiple of the lesser of
+--     'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT'::@storageTexelBufferOffsetAlignmentBytes@
+--     or, if
+--     'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT'::@storageTexelBufferOffsetSingleTexelAlignment@
+--     is 'Vulkan.Core10.BaseType.TRUE', the size of a texel of the
+--     requested @format@. If the size of a texel is a multiple of three
+--     bytes, then the size of a single component of @format@ is used
+--     instead
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>
+--     feature is enabled and if @buffer@ was created with @usage@
+--     containing
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT',
+--     @offset@ /must/ be a multiple of the lesser of
+--     'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT'::@uniformTexelBufferOffsetAlignmentBytes@
+--     or, if
+--     'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT'::@uniformTexelBufferOffsetSingleTexelAlignment@
+--     is 'Vulkan.Core10.BaseType.TRUE', the size of a texel of the
+--     requested @format@. If the size of a texel is a multiple of three
+--     bytes, then the size of a single component of @format@ is used
+--     instead
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer',
+-- 'Vulkan.Core10.Enums.BufferViewCreateFlags.BufferViewCreateFlags',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createBufferView'
+data BufferViewCreateInfo = BufferViewCreateInfo
+  { -- | @flags@ is reserved for future use.
+    flags :: BufferViewCreateFlags
+  , -- | @buffer@ is a 'Vulkan.Core10.Handles.Buffer' on which the view will be
+    -- created.
+    buffer :: Buffer
+  , -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' describing the format
+    -- of the data elements in the buffer.
+    format :: Format
+  , -- | @offset@ is an offset in bytes from the base address of the buffer.
+    -- Accesses to the buffer view from shaders use addressing that is relative
+    -- to this starting offset.
+    offset :: DeviceSize
+  , -- | @range@ is a size in bytes of the buffer view. If @range@ is equal to
+    -- 'Vulkan.Core10.APIConstants.WHOLE_SIZE', the range from @offset@ to the
+    -- end of the buffer is used. If 'Vulkan.Core10.APIConstants.WHOLE_SIZE' is
+    -- used and the remaining size of the buffer is not a multiple of the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#texel-block-size texel block size>
+    -- of @format@, the nearest smaller multiple is used.
+    range :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show BufferViewCreateInfo
+
+instance ToCStruct BufferViewCreateInfo where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferViewCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr BufferViewCreateFlags)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr Buffer)) (buffer)
+    poke ((p `plusPtr` 32 :: Ptr Format)) (format)
+    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (offset)
+    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (range)
+    f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr Buffer)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Format)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct BufferViewCreateInfo where
+  peekCStruct p = do
+    flags <- peek @BufferViewCreateFlags ((p `plusPtr` 16 :: Ptr BufferViewCreateFlags))
+    buffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer))
+    format <- peek @Format ((p `plusPtr` 32 :: Ptr Format))
+    offset <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
+    range <- peek @DeviceSize ((p `plusPtr` 48 :: Ptr DeviceSize))
+    pure $ BufferViewCreateInfo
+             flags buffer format offset range
+
+instance Storable BufferViewCreateInfo where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BufferViewCreateInfo where
+  zero = BufferViewCreateInfo
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/BufferView.hs-boot b/src/Vulkan/Core10/BufferView.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/BufferView.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core10.BufferView  (BufferViewCreateInfo) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data BufferViewCreateInfo
+
+instance ToCStruct BufferViewCreateInfo
+instance Show BufferViewCreateInfo
+
+instance FromCStruct BufferViewCreateInfo
+
diff --git a/src/Vulkan/Core10/CommandBuffer.hs b/src/Vulkan/Core10/CommandBuffer.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/CommandBuffer.hs
@@ -0,0 +1,881 @@
+{-# language CPP #-}
+module Vulkan.Core10.CommandBuffer  ( allocateCommandBuffers
+                                    , withCommandBuffers
+                                    , freeCommandBuffers
+                                    , beginCommandBuffer
+                                    , useCommandBuffer
+                                    , endCommandBuffer
+                                    , resetCommandBuffer
+                                    , CommandBufferAllocateInfo(..)
+                                    , CommandBufferInheritanceInfo(..)
+                                    , CommandBufferBeginInfo(..)
+                                    ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (maybePeek)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Extends (peekSomeCStruct)
+import Vulkan.CStruct.Extends (withSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conditional_rendering (CommandBufferInheritanceConditionalRenderingInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_render_pass_transform (CommandBufferInheritanceRenderPassTransformInfoQCOM)
+import Vulkan.Core10.Enums.CommandBufferLevel (CommandBufferLevel)
+import Vulkan.Core10.Enums.CommandBufferResetFlagBits (CommandBufferResetFlagBits(..))
+import Vulkan.Core10.Enums.CommandBufferResetFlagBits (CommandBufferResetFlags)
+import Vulkan.Core10.Enums.CommandBufferUsageFlagBits (CommandBufferUsageFlags)
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Core10.Handles (CommandPool)
+import Vulkan.Core10.Handles (CommandPool(..))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkAllocateCommandBuffers))
+import Vulkan.Dynamic (DeviceCmds(pVkBeginCommandBuffer))
+import Vulkan.Dynamic (DeviceCmds(pVkEndCommandBuffer))
+import Vulkan.Dynamic (DeviceCmds(pVkFreeCommandBuffers))
+import Vulkan.Dynamic (DeviceCmds(pVkResetCommandBuffer))
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupCommandBufferBeginInfo)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.Handles (Framebuffer)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlags)
+import Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits (QueryPipelineStatisticFlags)
+import Vulkan.Core10.Handles (RenderPass)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkAllocateCommandBuffers
+  :: FunPtr (Ptr Device_T -> Ptr CommandBufferAllocateInfo -> Ptr (Ptr CommandBuffer_T) -> IO Result) -> Ptr Device_T -> Ptr CommandBufferAllocateInfo -> Ptr (Ptr CommandBuffer_T) -> IO Result
+
+-- | vkAllocateCommandBuffers - Allocate command buffers from an existing
+-- command pool
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the command pool.
+--
+-- -   @pAllocateInfo@ is a pointer to a 'CommandBufferAllocateInfo'
+--     structure describing parameters of the allocation.
+--
+-- -   @pCommandBuffers@ is a pointer to an array of
+--     'Vulkan.Core10.Handles.CommandBuffer' 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
+--
+-- 'allocateCommandBuffers' /can/ be used to create multiple command
+-- buffers. If the creation of any of those command buffers fails, the
+-- implementation /must/ destroy all successfully created command buffer
+-- objects from this command, set all entries of the @pCommandBuffers@
+-- array to @NULL@ and return the error.
+--
+-- When command buffers are first allocated, they are in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pAllocateInfo@ /must/ be a valid pointer to a valid
+--     'CommandBufferAllocateInfo' structure
+--
+-- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
+--     @pAllocateInfo->commandBufferCount@
+--     'Vulkan.Core10.Handles.CommandBuffer' handles
+--
+-- -   The value referenced by @pAllocateInfo->commandBufferCount@ /must/
+--     be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pAllocateInfo->commandPool@ /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'CommandBufferAllocateInfo',
+-- 'Vulkan.Core10.Handles.Device'
+allocateCommandBuffers :: forall io . MonadIO io => Device -> CommandBufferAllocateInfo -> io (("commandBuffers" ::: Vector CommandBuffer))
+allocateCommandBuffers device allocateInfo = liftIO . evalContT $ do
+  let cmds = deviceCmds (device :: Device)
+  let vkAllocateCommandBuffersPtr = pVkAllocateCommandBuffers cmds
+  lift $ unless (vkAllocateCommandBuffersPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAllocateCommandBuffers is null" Nothing Nothing
+  let vkAllocateCommandBuffers' = mkVkAllocateCommandBuffers vkAllocateCommandBuffersPtr
+  pAllocateInfo <- ContT $ withCStruct (allocateInfo)
+  pPCommandBuffers <- ContT $ bracket (callocBytes @(Ptr CommandBuffer_T) ((fromIntegral $ commandBufferCount ((allocateInfo) :: CommandBufferAllocateInfo)) * 8)) free
+  r <- lift $ vkAllocateCommandBuffers' (deviceHandle (device)) pAllocateInfo (pPCommandBuffers)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pCommandBuffers <- lift $ generateM (fromIntegral $ commandBufferCount ((allocateInfo) :: CommandBufferAllocateInfo)) (\i -> do
+    pCommandBuffersElem <- peek @(Ptr CommandBuffer_T) ((pPCommandBuffers `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)))
+    pure $ (\h -> CommandBuffer h cmds ) pCommandBuffersElem)
+  pure $ (pCommandBuffers)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'allocateCommandBuffers' and 'freeCommandBuffers'
+--
+-- To ensure that 'freeCommandBuffers' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withCommandBuffers :: forall io r . MonadIO io => Device -> CommandBufferAllocateInfo -> (io (Vector CommandBuffer) -> ((Vector CommandBuffer) -> io ()) -> r) -> r
+withCommandBuffers device pAllocateInfo b =
+  b (allocateCommandBuffers device pAllocateInfo)
+    (\(o0) -> freeCommandBuffers device (commandPool (pAllocateInfo :: CommandBufferAllocateInfo)) o0)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkFreeCommandBuffers
+  :: FunPtr (Ptr Device_T -> CommandPool -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()) -> Ptr Device_T -> CommandPool -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()
+
+-- | vkFreeCommandBuffers - Free command buffers
+--
+-- = 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 a pointer to an array of handles of command
+--     buffers to free.
+--
+-- = Description
+--
+-- Any primary command buffer that is in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or executable state>
+-- and has any element of @pCommandBuffers@ recorded into it, becomes
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
+--
+-- == Valid Usage
+--
+-- -   All elements of @pCommandBuffers@ /must/ not be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
+--
+-- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
+--     @commandBufferCount@ 'Vulkan.Core10.Handles.CommandBuffer' handles,
+--     each element of which /must/ either be a valid handle or @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @commandPool@ /must/ be a valid 'Vulkan.Core10.Handles.CommandPool'
+--     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
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Handles.CommandPool', 'Vulkan.Core10.Handles.Device'
+freeCommandBuffers :: forall io . MonadIO io => Device -> CommandPool -> ("commandBuffers" ::: Vector CommandBuffer) -> io ()
+freeCommandBuffers device commandPool commandBuffers = liftIO . evalContT $ do
+  let vkFreeCommandBuffersPtr = pVkFreeCommandBuffers (deviceCmds (device :: Device))
+  lift $ unless (vkFreeCommandBuffersPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkFreeCommandBuffers is null" Nothing Nothing
+  let vkFreeCommandBuffers' = mkVkFreeCommandBuffers vkFreeCommandBuffersPtr
+  pPCommandBuffers <- ContT $ allocaBytesAligned @(Ptr CommandBuffer_T) ((Data.Vector.length (commandBuffers)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBuffers `plusPtr` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)) (commandBufferHandle (e))) (commandBuffers)
+  lift $ vkFreeCommandBuffers' (deviceHandle (device)) (commandPool) ((fromIntegral (Data.Vector.length $ (commandBuffers)) :: Word32)) (pPCommandBuffers)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkBeginCommandBuffer
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (CommandBufferBeginInfo a) -> IO Result) -> Ptr CommandBuffer_T -> Ptr (CommandBufferBeginInfo a) -> IO Result
+
+-- | vkBeginCommandBuffer - Start recording a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the handle of the command buffer which is to be
+--     put in the recording state.
+--
+-- -   @pBeginInfo@ points to a 'CommandBufferBeginInfo' structure defining
+--     additional information about how the command buffer begins
+--     recording.
+--
+-- == Valid Usage
+--
+-- -   @commandBuffer@ /must/ not be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or pending state>
+--
+-- -   If @commandBuffer@ was allocated from a
+--     'Vulkan.Core10.Handles.CommandPool' which did not have the
+--     'Vulkan.Core10.Enums.CommandPoolCreateFlagBits.COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT'
+--     flag set, @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>
+--
+-- -   If @commandBuffer@ is a secondary command buffer, the
+--     @pInheritanceInfo@ member of @pBeginInfo@ /must/ be a valid
+--     'CommandBufferInheritanceInfo' structure
+--
+-- -   If @commandBuffer@ is a secondary command buffer and either the
+--     @occlusionQueryEnable@ member of the @pInheritanceInfo@ member of
+--     @pBeginInfo@ is 'Vulkan.Core10.BaseType.FALSE', or the precise
+--     occlusion queries feature is not enabled, the @queryFlags@ member of
+--     the @pInheritanceInfo@ member @pBeginInfo@ /must/ not contain
+--     'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'
+--
+-- -   If @commandBuffer@ is a primary command buffer, then
+--     @pBeginInfo->flags@ /must/ not set both the
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT'
+--     and the
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
+--     flags
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pBeginInfo@ /must/ be a valid pointer to a valid
+--     'CommandBufferBeginInfo' structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'CommandBufferBeginInfo'
+beginCommandBuffer :: forall a io . (Extendss CommandBufferBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> CommandBufferBeginInfo a -> io ()
+beginCommandBuffer commandBuffer beginInfo = liftIO . evalContT $ do
+  let vkBeginCommandBufferPtr = pVkBeginCommandBuffer (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkBeginCommandBufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBeginCommandBuffer is null" Nothing Nothing
+  let vkBeginCommandBuffer' = mkVkBeginCommandBuffer vkBeginCommandBufferPtr
+  pBeginInfo <- ContT $ withCStruct (beginInfo)
+  r <- lift $ vkBeginCommandBuffer' (commandBufferHandle (commandBuffer)) pBeginInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+-- | This function will call the supplied action between calls to
+-- 'beginCommandBuffer' and 'endCommandBuffer'
+--
+-- Note that 'endCommandBuffer' is *not* called if an exception is thrown
+-- by the inner action.
+useCommandBuffer :: forall a io r . (Extendss CommandBufferBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> CommandBufferBeginInfo a -> io r -> io r
+useCommandBuffer commandBuffer pBeginInfo a =
+  (beginCommandBuffer commandBuffer pBeginInfo) *> a <* (endCommandBuffer commandBuffer)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkEndCommandBuffer
+  :: FunPtr (Ptr CommandBuffer_T -> IO Result) -> Ptr CommandBuffer_T -> IO Result
+
+-- | vkEndCommandBuffer - Finish recording a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer to complete recording.
+--
+-- = Description
+--
+-- If there was an error during recording, the application will be notified
+-- by an unsuccessful return code returned by 'endCommandBuffer'. If the
+-- application wishes to further use the command buffer, the command buffer
+-- /must/ be reset. The command buffer /must/ have been in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>,
+-- and is moved to the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable state>.
+--
+-- == Valid Usage
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   If @commandBuffer@ is a primary command buffer, there /must/ not be
+--     an active render pass instance
+--
+-- -   All queries made
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
+--     during the recording of @commandBuffer@ /must/ have been made
+--     inactive
+--
+-- -   Conditional rendering /must/ not be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active>
+--
+-- -   If @commandBuffer@ is a secondary command buffer, there /must/ not
+--     be an outstanding
+--     'Vulkan.Extensions.VK_EXT_debug_utils.cmdBeginDebugUtilsLabelEXT'
+--     command recorded to @commandBuffer@ that has not previously been
+--     ended by a call to
+--     'Vulkan.Extensions.VK_EXT_debug_utils.cmdEndDebugUtilsLabelEXT'
+--
+-- -   If @commandBuffer@ is a secondary command buffer, there /must/ not
+--     be an outstanding
+--     'Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerBeginEXT'
+--     command recorded to @commandBuffer@ that has not previously been
+--     ended by a call to
+--     'Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerEndEXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+endCommandBuffer :: forall io . MonadIO io => CommandBuffer -> io ()
+endCommandBuffer commandBuffer = liftIO $ do
+  let vkEndCommandBufferPtr = pVkEndCommandBuffer (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkEndCommandBufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEndCommandBuffer is null" Nothing Nothing
+  let vkEndCommandBuffer' = mkVkEndCommandBuffer vkEndCommandBufferPtr
+  r <- vkEndCommandBuffer' (commandBufferHandle (commandBuffer))
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkResetCommandBuffer
+  :: FunPtr (Ptr CommandBuffer_T -> CommandBufferResetFlags -> IO Result) -> Ptr CommandBuffer_T -> CommandBufferResetFlags -> IO Result
+
+-- | vkResetCommandBuffer - Reset a command buffer to the initial state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer to reset. The command buffer
+--     /can/ be in any state other than
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending>,
+--     and is moved into the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>.
+--
+-- -   @flags@ is a bitmask of
+--     'Vulkan.Core10.Enums.CommandBufferResetFlagBits.CommandBufferResetFlagBits'
+--     controlling the reset operation.
+--
+-- = Description
+--
+-- Any primary command buffer that is in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or executable state>
+-- and has @commandBuffer@ recorded into it, becomes
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
+--
+-- == Valid Usage
+--
+-- -   @commandBuffer@ /must/ not be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
+--
+-- -   @commandBuffer@ /must/ have been allocated from a pool that was
+--     created with the
+--     'Vulkan.Core10.Enums.CommandPoolCreateFlagBits.COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.CommandBufferResetFlagBits.CommandBufferResetFlagBits'
+--     values
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.CommandBufferResetFlagBits.CommandBufferResetFlags'
+resetCommandBuffer :: forall io . MonadIO io => CommandBuffer -> CommandBufferResetFlags -> io ()
+resetCommandBuffer commandBuffer flags = liftIO $ do
+  let vkResetCommandBufferPtr = pVkResetCommandBuffer (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkResetCommandBufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkResetCommandBuffer is null" Nothing Nothing
+  let vkResetCommandBuffer' = mkVkResetCommandBuffer vkResetCommandBufferPtr
+  r <- vkResetCommandBuffer' (commandBufferHandle (commandBuffer)) (flags)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkCommandBufferAllocateInfo - Structure specifying the allocation
+-- parameters for command buffer object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.CommandBufferLevel.CommandBufferLevel',
+-- 'Vulkan.Core10.Handles.CommandPool',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'allocateCommandBuffers'
+data CommandBufferAllocateInfo = CommandBufferAllocateInfo
+  { -- | @commandPool@ /must/ be a valid 'Vulkan.Core10.Handles.CommandPool'
+    -- handle
+    commandPool :: CommandPool
+  , -- | @level@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.CommandBufferLevel.CommandBufferLevel' value
+    level :: CommandBufferLevel
+  , -- | @commandBufferCount@ /must/ be greater than @0@
+    commandBufferCount :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show CommandBufferAllocateInfo
+
+instance ToCStruct CommandBufferAllocateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CommandBufferAllocateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CommandPool)) (commandPool)
+    poke ((p `plusPtr` 24 :: Ptr CommandBufferLevel)) (level)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (commandBufferCount)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CommandPool)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr CommandBufferLevel)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct CommandBufferAllocateInfo where
+  peekCStruct p = do
+    commandPool <- peek @CommandPool ((p `plusPtr` 16 :: Ptr CommandPool))
+    level <- peek @CommandBufferLevel ((p `plusPtr` 24 :: Ptr CommandBufferLevel))
+    commandBufferCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    pure $ CommandBufferAllocateInfo
+             commandPool level commandBufferCount
+
+instance Storable CommandBufferAllocateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero CommandBufferAllocateInfo where
+  zero = CommandBufferAllocateInfo
+           zero
+           zero
+           zero
+
+
+-- | VkCommandBufferInheritanceInfo - Structure specifying command buffer
+-- inheritance info
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>
+--     feature is not enabled, @occlusionQueryEnable@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>
+--     feature is enabled, @queryFlags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'
+--     values
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>
+--     feature is not enabled, @queryFlags@ /must/ be @0@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineStatisticsQuery pipeline statistics queries>
+--     feature is enabled, @pipelineStatistics@ /must/ be a valid
+--     combination of
+--     'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'
+--     values
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineStatisticsQuery pipeline statistics queries>
+--     feature is not enabled, @pipelineStatistics@ /must/ be @0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_EXT_conditional_rendering.CommandBufferInheritanceConditionalRenderingInfoEXT'
+--     or
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   Both of @framebuffer@, and @renderPass@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'CommandBufferBeginInfo',
+-- 'Vulkan.Core10.Handles.Framebuffer',
+-- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlags',
+-- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlags',
+-- 'Vulkan.Core10.Handles.RenderPass',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data CommandBufferInheritanceInfo (es :: [Type]) = CommandBufferInheritanceInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @renderPass@ is a 'Vulkan.Core10.Handles.RenderPass' object defining
+    -- which render passes the 'Vulkan.Core10.Handles.CommandBuffer' will be
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+    -- with and /can/ be executed within. If the
+    -- 'Vulkan.Core10.Handles.CommandBuffer' will not be executed within a
+    -- render pass instance, @renderPass@ is ignored.
+    renderPass :: RenderPass
+  , -- | @subpass@ is the index of the subpass within the render pass instance
+    -- that the 'Vulkan.Core10.Handles.CommandBuffer' will be executed within.
+    -- If the 'Vulkan.Core10.Handles.CommandBuffer' will not be executed within
+    -- a render pass instance, @subpass@ is ignored.
+    subpass :: Word32
+  , -- | @framebuffer@ optionally refers to the
+    -- 'Vulkan.Core10.Handles.Framebuffer' object that the
+    -- 'Vulkan.Core10.Handles.CommandBuffer' will be rendering to if it is
+    -- executed within a render pass instance. It /can/ be
+    -- 'Vulkan.Core10.APIConstants.NULL_HANDLE' if the framebuffer is not
+    -- known, or if the 'Vulkan.Core10.Handles.CommandBuffer' 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.
+    framebuffer :: Framebuffer
+  , -- | @occlusionQueryEnable@ specifies whether the command buffer /can/ be
+    -- executed while an occlusion query is active in the primary command
+    -- buffer. If this is 'Vulkan.Core10.BaseType.TRUE', then this command
+    -- buffer /can/ be executed whether the primary command buffer has an
+    -- occlusion query active or not. If this is
+    -- 'Vulkan.Core10.BaseType.FALSE', then the primary command buffer /must/
+    -- not have an occlusion query active.
+    occlusionQueryEnable :: Bool
+  , -- | @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
+    -- 'Vulkan.Core10.Enums.QueryControlFlagBits.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
+    -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'
+    -- bit.
+    queryFlags :: QueryControlFlags
+  , -- | @pipelineStatistics@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'
+    -- 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.
+    pipelineStatistics :: QueryPipelineStatisticFlags
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (CommandBufferInheritanceInfo es)
+
+instance Extensible CommandBufferInheritanceInfo where
+  extensibleType = STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO
+  setNext x next = x{next = next}
+  getNext CommandBufferInheritanceInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CommandBufferInheritanceInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @CommandBufferInheritanceRenderPassTransformInfoQCOM = Just f
+    | Just Refl <- eqT @e @CommandBufferInheritanceConditionalRenderingInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss CommandBufferInheritanceInfo es, PokeChain es) => ToCStruct (CommandBufferInheritanceInfo es) where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CommandBufferInheritanceInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPass)) (renderPass)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (subpass)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Framebuffer)) (framebuffer)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (occlusionQueryEnable))
+    lift $ poke ((p `plusPtr` 44 :: Ptr QueryControlFlags)) (queryFlags)
+    lift $ poke ((p `plusPtr` 48 :: Ptr QueryPipelineStatisticFlags)) (pipelineStatistics)
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance (Extendss CommandBufferInheritanceInfo es, PeekChain es) => FromCStruct (CommandBufferInheritanceInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    renderPass <- peek @RenderPass ((p `plusPtr` 16 :: Ptr RenderPass))
+    subpass <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    framebuffer <- peek @Framebuffer ((p `plusPtr` 32 :: Ptr Framebuffer))
+    occlusionQueryEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    queryFlags <- peek @QueryControlFlags ((p `plusPtr` 44 :: Ptr QueryControlFlags))
+    pipelineStatistics <- peek @QueryPipelineStatisticFlags ((p `plusPtr` 48 :: Ptr QueryPipelineStatisticFlags))
+    pure $ CommandBufferInheritanceInfo
+             next renderPass subpass framebuffer (bool32ToBool occlusionQueryEnable) queryFlags pipelineStatistics
+
+instance es ~ '[] => Zero (CommandBufferInheritanceInfo es) where
+  zero = CommandBufferInheritanceInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkCommandBufferBeginInfo - Structure specifying a command buffer begin
+-- operation
+--
+-- == Valid Usage
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT',
+--     the @renderPass@ member of @pInheritanceInfo@ /must/ be a valid
+--     'Vulkan.Core10.Handles.RenderPass'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT',
+--     the @subpass@ member of @pInheritanceInfo@ /must/ be a valid subpass
+--     index within the @renderPass@ member of @pInheritanceInfo@
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT',
+--     the @framebuffer@ member of @pInheritanceInfo@ /must/ be either
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', or a valid
+--     'Vulkan.Core10.Handles.Framebuffer' that is compatible with the
+--     @renderPass@ member of @pInheritanceInfo@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupCommandBufferBeginInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.CommandBufferUsageFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'CommandBufferInheritanceInfo',
+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.CommandBufferUsageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'beginCommandBuffer'
+data CommandBufferBeginInfo (es :: [Type]) = CommandBufferBeginInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.CommandBufferUsageFlagBits'
+    -- specifying usage behavior for the command buffer.
+    flags :: CommandBufferUsageFlags
+  , -- | @pInheritanceInfo@ is a pointer to a 'CommandBufferInheritanceInfo'
+    -- structure, used if @commandBuffer@ is a secondary command buffer. If
+    -- this is a primary command buffer, then this value is ignored.
+    inheritanceInfo :: Maybe (SomeStruct CommandBufferInheritanceInfo)
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (CommandBufferBeginInfo es)
+
+instance Extensible CommandBufferBeginInfo where
+  extensibleType = STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
+  setNext x next = x{next = next}
+  getNext CommandBufferBeginInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CommandBufferBeginInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DeviceGroupCommandBufferBeginInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss CommandBufferBeginInfo es, PokeChain es) => ToCStruct (CommandBufferBeginInfo es) where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CommandBufferBeginInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr CommandBufferUsageFlags)) (flags)
+    pInheritanceInfo'' <- case (inheritanceInfo) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (CommandBufferInheritanceInfo '[])) $ \cont -> withSomeCStruct @CommandBufferInheritanceInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (CommandBufferInheritanceInfo _)))) pInheritanceInfo''
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ f
+
+instance (Extendss CommandBufferBeginInfo es, PeekChain es) => FromCStruct (CommandBufferBeginInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @CommandBufferUsageFlags ((p `plusPtr` 16 :: Ptr CommandBufferUsageFlags))
+    pInheritanceInfo <- peek @(Ptr (CommandBufferInheritanceInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (CommandBufferInheritanceInfo a))))
+    pInheritanceInfo' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pInheritanceInfo
+    pure $ CommandBufferBeginInfo
+             next flags pInheritanceInfo'
+
+instance es ~ '[] => Zero (CommandBufferBeginInfo es) where
+  zero = CommandBufferBeginInfo
+           ()
+           zero
+           Nothing
+
diff --git a/src/Vulkan/Core10/CommandBuffer.hs-boot b/src/Vulkan/Core10/CommandBuffer.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/CommandBuffer.hs-boot
@@ -0,0 +1,38 @@
+{-# language CPP #-}
+module Vulkan.Core10.CommandBuffer  ( CommandBufferAllocateInfo
+                                    , CommandBufferBeginInfo
+                                    , CommandBufferInheritanceInfo
+                                    ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data CommandBufferAllocateInfo
+
+instance ToCStruct CommandBufferAllocateInfo
+instance Show CommandBufferAllocateInfo
+
+instance FromCStruct CommandBufferAllocateInfo
+
+
+type role CommandBufferBeginInfo nominal
+data CommandBufferBeginInfo (es :: [Type])
+
+instance (Extendss CommandBufferBeginInfo es, PokeChain es) => ToCStruct (CommandBufferBeginInfo es)
+instance Show (Chain es) => Show (CommandBufferBeginInfo es)
+
+instance (Extendss CommandBufferBeginInfo es, PeekChain es) => FromCStruct (CommandBufferBeginInfo es)
+
+
+type role CommandBufferInheritanceInfo nominal
+data CommandBufferInheritanceInfo (es :: [Type])
+
+instance (Extendss CommandBufferInheritanceInfo es, PokeChain es) => ToCStruct (CommandBufferInheritanceInfo es)
+instance Show (Chain es) => Show (CommandBufferInheritanceInfo es)
+
+instance (Extendss CommandBufferInheritanceInfo es, PeekChain es) => FromCStruct (CommandBufferInheritanceInfo es)
+
diff --git a/src/Vulkan/Core10/CommandBufferBuilding.hs b/src/Vulkan/Core10/CommandBufferBuilding.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/CommandBufferBuilding.hs
@@ -0,0 +1,9438 @@
+{-# language CPP #-}
+module Vulkan.Core10.CommandBufferBuilding  ( cmdBindPipeline
+                                            , cmdSetViewport
+                                            , cmdSetScissor
+                                            , cmdSetLineWidth
+                                            , cmdSetDepthBias
+                                            , cmdSetBlendConstants
+                                            , cmdSetDepthBounds
+                                            , cmdSetStencilCompareMask
+                                            , cmdSetStencilWriteMask
+                                            , cmdSetStencilReference
+                                            , cmdBindDescriptorSets
+                                            , cmdBindIndexBuffer
+                                            , cmdBindVertexBuffers
+                                            , cmdDraw
+                                            , cmdDrawIndexed
+                                            , cmdDrawIndirect
+                                            , cmdDrawIndexedIndirect
+                                            , cmdDispatch
+                                            , cmdDispatchIndirect
+                                            , cmdCopyBuffer
+                                            , cmdCopyImage
+                                            , cmdBlitImage
+                                            , cmdCopyBufferToImage
+                                            , cmdCopyImageToBuffer
+                                            , cmdUpdateBuffer
+                                            , cmdFillBuffer
+                                            , cmdClearColorImage
+                                            , cmdClearDepthStencilImage
+                                            , cmdClearAttachments
+                                            , cmdResolveImage
+                                            , cmdSetEvent
+                                            , cmdResetEvent
+                                            , cmdWaitEvents
+                                            , cmdPipelineBarrier
+                                            , cmdBeginQuery
+                                            , cmdUseQuery
+                                            , cmdEndQuery
+                                            , cmdResetQueryPool
+                                            , cmdWriteTimestamp
+                                            , cmdCopyQueryPoolResults
+                                            , cmdPushConstants
+                                            , cmdBeginRenderPass
+                                            , cmdUseRenderPass
+                                            , cmdNextSubpass
+                                            , cmdEndRenderPass
+                                            , cmdExecuteCommands
+                                            , Viewport(..)
+                                            , Rect2D(..)
+                                            , ClearRect(..)
+                                            , BufferCopy(..)
+                                            , ImageCopy(..)
+                                            , ImageBlit(..)
+                                            , BufferImageCopy(..)
+                                            , ImageResolve(..)
+                                            , RenderPassBeginInfo(..)
+                                            , ClearAttachment(..)
+                                            ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Foreign.C.Types (CFloat(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.Core10.OtherTypes (BufferMemoryBarrier)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.SharedTypes (ClearColorValue)
+import Vulkan.Core10.SharedTypes (ClearDepthStencilValue)
+import Vulkan.Core10.SharedTypes (ClearValue)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(..))
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
+import Vulkan.Core10.Handles (DescriptorSet)
+import Vulkan.Core10.Handles (DescriptorSet(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBeginQuery))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBeginRenderPass))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBindDescriptorSets))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBindIndexBuffer))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBindPipeline))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBindVertexBuffers))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBlitImage))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdClearAttachments))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdClearColorImage))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdClearDepthStencilImage))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyBuffer))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyBufferToImage))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyImage))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyImageToBuffer))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyQueryPoolResults))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDispatch))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDispatchIndirect))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDraw))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndexed))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndexedIndirect))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndirect))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdEndQuery))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdEndRenderPass))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdExecuteCommands))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdFillBuffer))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdNextSubpass))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdPipelineBarrier))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdPushConstants))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdResetEvent))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdResetQueryPool))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdResolveImage))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetBlendConstants))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetDepthBias))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetDepthBounds))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetEvent))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetLineWidth))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetScissor))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetStencilCompareMask))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetStencilReference))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetStencilWriteMask))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetViewport))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdUpdateBuffer))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdWaitEvents))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdWriteTimestamp))
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupRenderPassBeginInfo)
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Event)
+import Vulkan.Core10.Handles (Event(..))
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.SharedTypes (Extent2D)
+import Vulkan.Core10.SharedTypes (Extent3D)
+import Vulkan.Core10.Enums.Filter (Filter)
+import Vulkan.Core10.Enums.Filter (Filter(..))
+import Vulkan.Core10.Handles (Framebuffer)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.Handles (Image(..))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(..))
+import Vulkan.Core10.OtherTypes (ImageMemoryBarrier)
+import Vulkan.Core10.SharedTypes (ImageSubresourceLayers)
+import Vulkan.Core10.SharedTypes (ImageSubresourceRange)
+import Vulkan.Core10.Enums.IndexType (IndexType)
+import Vulkan.Core10.Enums.IndexType (IndexType(..))
+import Vulkan.Core10.OtherTypes (MemoryBarrier)
+import Vulkan.Core10.SharedTypes (Offset2D)
+import Vulkan.Core10.SharedTypes (Offset3D)
+import Vulkan.Core10.Handles (Pipeline)
+import Vulkan.Core10.Handles (Pipeline(..))
+import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
+import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint(..))
+import Vulkan.Core10.Handles (PipelineLayout)
+import Vulkan.Core10.Handles (PipelineLayout(..))
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits)
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits(..))
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlagBits(..))
+import Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlags)
+import Vulkan.Core10.Handles (QueryPool)
+import Vulkan.Core10.Handles (QueryPool(..))
+import Vulkan.Core10.Enums.QueryResultFlagBits (QueryResultFlagBits(..))
+import Vulkan.Core10.Enums.QueryResultFlagBits (QueryResultFlags)
+import Vulkan.Core10.Handles (RenderPass)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (RenderPassAttachmentBeginInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (RenderPassSampleLocationsBeginInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_render_pass_transform (RenderPassTransformBeginInfoQCOM)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(..))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StencilFaceFlagBits (StencilFaceFlagBits(..))
+import Vulkan.Core10.Enums.StencilFaceFlagBits (StencilFaceFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.SubpassContents (SubpassContents)
+import Vulkan.Core10.Enums.SubpassContents (SubpassContents(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBindPipeline
+  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> IO ()
+
+-- | vkCmdBindPipeline - Bind a pipeline object to a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer that the pipeline will be
+--     bound to.
+--
+-- -   @pipelineBindPoint@ is a
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--     specifying whether to bind to the compute or graphics bind point.
+--     Binding one does not disturb the other.
+--
+-- -   @pipeline@ is the pipeline to be bound.
+--
+-- = Description
+--
+-- Once bound, a pipeline binding affects subsequent graphics or compute
+-- commands in the command buffer until a different pipeline is bound to
+-- the bind point. The pipeline bound to
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE'
+-- controls the behavior of 'cmdDispatch' and 'cmdDispatchIndirect'. The
+-- pipeline bound to
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+-- controls the behavior of all
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing drawing commands>.
+-- The pipeline bound to
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR'
+-- controls the behavior of
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysKHR'. No other
+-- commands are affected by the pipeline state.
+--
+-- == Valid Usage
+--
+-- -   If @pipelineBindPoint@ is
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE',
+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   If @pipelineBindPoint@ is
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS',
+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   If @pipelineBindPoint@ is
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE',
+--     @pipeline@ /must/ be a compute pipeline
+--
+-- -   If @pipelineBindPoint@ is
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS',
+--     @pipeline@ /must/ be a graphics pipeline
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-variableMultisampleRate variable multisample rate>
+--     feature is not supported, @pipeline@ is a graphics pipeline, the
+--     current subpass
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments uses no attachments>,
+--     and this is not the first call to this function with a graphics
+--     pipeline after transitioning to the current subpass, then the sample
+--     count specified by this pipeline /must/ match that set in the
+--     previous pipeline
+--
+-- -   If
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
+--     is 'Vulkan.Core10.BaseType.FALSE', and @pipeline@ is a graphics
+--     pipeline created with a
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--     structure having its @sampleLocationsEnable@ member set to
+--     'Vulkan.Core10.BaseType.TRUE' but without
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
+--     enabled then the current render pass instance /must/ have been begun
+--     by specifying a
+--     'Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT'
+--     structure whose @pPostSubpassSampleLocations@ member contains an
+--     element with a @subpassIndex@ matching the current subpass index and
+--     the @sampleLocationsInfo@ member of that element /must/ match the
+--     @sampleLocationsInfo@ specified in
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--     when the pipeline was created
+--
+-- -   This command /must/ not be recorded when transform feedback is
+--     active
+--
+-- -   If @pipelineBindPoint@ is
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR',
+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   If @pipelineBindPoint@ is
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR',
+--     the @pipeline@ /must/ be a ray tracing pipeline
+--
+-- -   The @pipeline@ /must/ not have been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+--     set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--
+-- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   Both of @commandBuffer@, and @pipeline@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
+cmdBindPipeline :: forall io . MonadIO io => CommandBuffer -> PipelineBindPoint -> Pipeline -> io ()
+cmdBindPipeline commandBuffer pipelineBindPoint pipeline = liftIO $ do
+  let vkCmdBindPipelinePtr = pVkCmdBindPipeline (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdBindPipelinePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindPipeline is null" Nothing Nothing
+  let vkCmdBindPipeline' = mkVkCmdBindPipeline vkCmdBindPipelinePtr
+  vkCmdBindPipeline' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (pipeline)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetViewport
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()
+
+-- | vkCmdSetViewport - Set the viewport on a command buffer
+--
+-- = 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 'Viewport' structures
+--     specifying viewport parameters.
+--
+-- = Description
+--
+-- The viewport parameters taken from element i of @pViewports@ replace the
+-- current state for the viewport index @firstViewport@ + i, for i in [0,
+-- @viewportCount@).
+--
+-- == Valid Usage
+--
+-- -   @firstViewport@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
+--
+-- -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@
+--     and
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
+--     inclusive
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @firstViewport@ /must/ be @0@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @viewportCount@ /must/ be @1@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pViewports@ /must/ be a valid pointer to an array of
+--     @viewportCount@ valid 'Viewport' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   @viewportCount@ /must/ be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Viewport'
+cmdSetViewport :: forall io . MonadIO io => CommandBuffer -> ("firstViewport" ::: Word32) -> ("viewports" ::: Vector Viewport) -> io ()
+cmdSetViewport commandBuffer firstViewport viewports = liftIO . evalContT $ do
+  let vkCmdSetViewportPtr = pVkCmdSetViewport (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetViewportPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetViewport is null" Nothing Nothing
+  let vkCmdSetViewport' = mkVkCmdSetViewport vkCmdSetViewportPtr
+  pPViewports <- ContT $ allocaBytesAligned @Viewport ((Data.Vector.length (viewports)) * 24) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e) . ($ ())) (viewports)
+  lift $ vkCmdSetViewport' (commandBufferHandle (commandBuffer)) (firstViewport) ((fromIntegral (Data.Vector.length $ (viewports)) :: Word32)) (pPViewports)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetScissor
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()
+
+-- | vkCmdSetScissor - Set the dynamic scissor rectangles on a command buffer
+--
+-- = 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 'Rect2D' structures defining
+--     scissor rectangles.
+--
+-- = Description
+--
+-- The scissor rectangles taken from element i of @pScissors@ replace the
+-- current state for the scissor index @firstScissor@ + i, for i in [0,
+-- @scissorCount@).
+--
+-- This command sets the state for a given draw when the graphics pipeline
+-- is created with 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR'
+-- set in
+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.
+--
+-- == Valid Usage
+--
+-- -   @firstScissor@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
+--
+-- -   The sum of @firstScissor@ and @scissorCount@ /must/ be between @1@
+--     and
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
+--     inclusive
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @firstScissor@ /must/ be @0@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @scissorCount@ /must/ be @1@
+--
+-- -   The @x@ and @y@ members of @offset@ member of any element of
+--     @pScissors@ /must/ be greater than or equal to @0@
+--
+-- -   Evaluation of (@offset.x@ + @extent.width@) /must/ not cause a
+--     signed integer addition overflow for any element of @pScissors@
+--
+-- -   Evaluation of (@offset.y@ + @extent.height@) /must/ not cause a
+--     signed integer addition overflow for any element of @pScissors@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pScissors@ /must/ be a valid pointer to an array of @scissorCount@
+--     'Rect2D' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   @scissorCount@ /must/ be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Rect2D'
+cmdSetScissor :: forall io . MonadIO io => CommandBuffer -> ("firstScissor" ::: Word32) -> ("scissors" ::: Vector Rect2D) -> io ()
+cmdSetScissor commandBuffer firstScissor scissors = liftIO . evalContT $ do
+  let vkCmdSetScissorPtr = pVkCmdSetScissor (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetScissorPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetScissor is null" Nothing Nothing
+  let vkCmdSetScissor' = mkVkCmdSetScissor vkCmdSetScissorPtr
+  pPScissors <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (scissors)) * 16) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (scissors)
+  lift $ vkCmdSetScissor' (commandBufferHandle (commandBuffer)) (firstScissor) ((fromIntegral (Data.Vector.length $ (scissors)) :: Word32)) (pPScissors)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetLineWidth
+  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> IO ()
+
+-- | vkCmdSetLineWidth - Set the dynamic line width state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @lineWidth@ is the width of rasterized line segments.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-wideLines wide lines>
+--     feature is not enabled, @lineWidth@ /must/ be @1.0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdSetLineWidth :: forall io . MonadIO io => CommandBuffer -> ("lineWidth" ::: Float) -> io ()
+cmdSetLineWidth commandBuffer lineWidth = liftIO $ do
+  let vkCmdSetLineWidthPtr = pVkCmdSetLineWidth (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdSetLineWidthPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetLineWidth is null" Nothing Nothing
+  let vkCmdSetLineWidth' = mkVkCmdSetLineWidth vkCmdSetLineWidthPtr
+  vkCmdSetLineWidth' (commandBufferHandle (commandBuffer)) (CFloat (lineWidth))
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetDepthBias
+  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()
+
+-- | vkCmdSetDepthBias - Set the depth bias dynamic state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @depthBiasConstantFactor@ is a scalar factor controlling the
+--     constant depth value added to each fragment.
+--
+-- -   @depthBiasClamp@ is the maximum (or minimum) depth bias of a
+--     fragment.
+--
+-- -   @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s
+--     slope in depth bias calculations.
+--
+-- = Description
+--
+-- If @depthBiasEnable@ is 'Vulkan.Core10.BaseType.FALSE', no depth bias is
+-- applied and the fragment’s depth values are unchanged.
+--
+-- @depthBiasSlopeFactor@ scales the maximum depth slope of the polygon,
+-- and @depthBiasConstantFactor@ scales an implementation-dependent
+-- constant that relates to the usable resolution of the depth buffer. The
+-- resulting values are summed to produce the depth bias value which is
+-- then clamped to a minimum or maximum value specified by
+-- @depthBiasClamp@. @depthBiasSlopeFactor@, @depthBiasConstantFactor@, and
+-- @depthBiasClamp@ /can/ each be positive, negative, or zero.
+--
+-- The maximum depth slope m of a triangle is
+--
+-- \[m = \sqrt{ \left({{\partial z_f} \over {\partial x_f}}\right)^2
+--         +  \left({{\partial z_f} \over {\partial y_f}}\right)^2}\]
+--
+-- where (xf, yf, zf) is a point on the triangle. m /may/ be approximated
+-- as
+--
+-- \[m = \max\left( \left| { {\partial z_f} \over {\partial x_f} } \right|,
+--                \left| { {\partial z_f} \over {\partial y_f} } \right|
+--        \right).\]
+--
+-- The minimum resolvable difference r is an implementation-dependent
+-- parameter that depends on the depth buffer representation. It is the
+-- smallest difference in framebuffer coordinate z values that is
+-- guaranteed to remain distinct throughout polygon rasterization and in
+-- the depth buffer. All pairs of fragments generated by the rasterization
+-- of two polygons with otherwise identical vertices, but @z@f values that
+-- differ by r, will have distinct depth values.
+--
+-- For fixed-point depth buffer representations, r is constant throughout
+-- the range of the entire depth buffer. For floating-point depth buffers,
+-- there is no single minimum resolvable difference. In this case, the
+-- minimum resolvable difference for a given polygon is dependent on the
+-- maximum exponent, e, in the range of z values spanned by the primitive.
+-- If n is the number of bits in the floating-point mantissa, the minimum
+-- resolvable difference, r, for the given primitive is defined as
+--
+-- -   r = 2e-n
+--
+-- If a triangle is rasterized using the
+-- 'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV' polygon
+-- mode, then this minimum resolvable difference /may/ not be resolvable
+-- for samples outside of the triangle, where the depth is extrapolated.
+--
+-- If no depth buffer is present, r is undefined.
+--
+-- The bias value o for a polygon is
+--
+-- \[\begin{aligned}
+-- o &= \mathrm{dbclamp}( m \times \mathtt{depthBiasSlopeFactor} + r \times \mathtt{depthBiasConstantFactor} ) \\
+-- \text{where} &\quad \mathrm{dbclamp}(x) =
+-- \begin{cases}
+--     x                                 & \mathtt{depthBiasClamp} = 0 \ \text{or}\ \texttt{NaN} \\
+--     \min(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} > 0 \\
+--     \max(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} < 0 \\
+-- \end{cases}
+-- \end{aligned}\]
+--
+-- m is computed as described above. If the depth buffer uses a fixed-point
+-- representation, m is a function of depth values in the range [0,1], and
+-- o is applied to depth values in the same range.
+--
+-- For fixed-point depth buffers, fragment depth values are always limited
+-- to the range [0,1] by clamping after depth bias addition is performed.
+-- Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled,
+-- fragment depth values are clamped even when the depth buffer uses a
+-- floating-point representation.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBiasClamp depth bias clamping>
+--     feature is not enabled, @depthBiasClamp@ /must/ be @0.0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdSetDepthBias :: forall io . MonadIO io => CommandBuffer -> ("depthBiasConstantFactor" ::: Float) -> ("depthBiasClamp" ::: Float) -> ("depthBiasSlopeFactor" ::: Float) -> io ()
+cmdSetDepthBias commandBuffer depthBiasConstantFactor depthBiasClamp depthBiasSlopeFactor = liftIO $ do
+  let vkCmdSetDepthBiasPtr = pVkCmdSetDepthBias (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdSetDepthBiasPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDepthBias is null" Nothing Nothing
+  let vkCmdSetDepthBias' = mkVkCmdSetDepthBias vkCmdSetDepthBiasPtr
+  vkCmdSetDepthBias' (commandBufferHandle (commandBuffer)) (CFloat (depthBiasConstantFactor)) (CFloat (depthBiasClamp)) (CFloat (depthBiasSlopeFactor))
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetBlendConstants
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()
+
+-- | vkCmdSetBlendConstants - Set the values of blend constants
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @blendConstants@ is a pointer to an array of four values specifying
+--     the R, G, B, and A components of the blend constant color used in
+--     blending, depending on the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdSetBlendConstants :: forall io . MonadIO io => CommandBuffer -> ("blendConstants" ::: (Float, Float, Float, Float)) -> io ()
+cmdSetBlendConstants commandBuffer blendConstants = liftIO . evalContT $ do
+  let vkCmdSetBlendConstantsPtr = pVkCmdSetBlendConstants (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetBlendConstantsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetBlendConstants is null" Nothing Nothing
+  let vkCmdSetBlendConstants' = mkVkCmdSetBlendConstants vkCmdSetBlendConstantsPtr
+  pBlendConstants <- ContT $ allocaBytesAligned @(FixedArray 4 CFloat) 16 4
+  let pBlendConstants' = lowerArrayPtr pBlendConstants
+  lift $ case (blendConstants) of
+    (e0, e1, e2, e3) -> do
+      poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))
+      poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+      poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
+      poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+  lift $ vkCmdSetBlendConstants' (commandBufferHandle (commandBuffer)) (pBlendConstants)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetDepthBounds
+  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()
+
+-- | vkCmdSetDepthBounds - Set the depth bounds test values for a command
+-- buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @minDepthBounds@ is the minimum depth bound.
+--
+-- -   @maxDepthBounds@ is the maximum depth bound.
+--
+-- = Description
+--
+-- This command sets the state for a given draw when the graphics pipeline
+-- is created with
+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS' set in
+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.
+--
+-- == Valid Usage
+--
+-- -   Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled
+--     @minDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive
+--
+-- -   Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled
+--     @maxDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdSetDepthBounds :: forall io . MonadIO io => CommandBuffer -> ("minDepthBounds" ::: Float) -> ("maxDepthBounds" ::: Float) -> io ()
+cmdSetDepthBounds commandBuffer minDepthBounds maxDepthBounds = liftIO $ do
+  let vkCmdSetDepthBoundsPtr = pVkCmdSetDepthBounds (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdSetDepthBoundsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDepthBounds is null" Nothing Nothing
+  let vkCmdSetDepthBounds' = mkVkCmdSetDepthBounds vkCmdSetDepthBoundsPtr
+  vkCmdSetDepthBounds' (commandBufferHandle (commandBuffer)) (CFloat (minDepthBounds)) (CFloat (maxDepthBounds))
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetStencilCompareMask
+  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()
+
+-- | vkCmdSetStencilCompareMask - Set the stencil compare mask dynamic state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @faceMask@ is a bitmask of
+--     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits'
+--     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
+--
+-- This command sets the state for a given draw when the graphics pipeline
+-- is created with
+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_COMPARE_MASK'
+-- set in
+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @faceMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values
+--
+-- -   @faceMask@ /must/ not be @0@
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'
+cmdSetStencilCompareMask :: forall io . MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("compareMask" ::: Word32) -> io ()
+cmdSetStencilCompareMask commandBuffer faceMask compareMask = liftIO $ do
+  let vkCmdSetStencilCompareMaskPtr = pVkCmdSetStencilCompareMask (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdSetStencilCompareMaskPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilCompareMask is null" Nothing Nothing
+  let vkCmdSetStencilCompareMask' = mkVkCmdSetStencilCompareMask vkCmdSetStencilCompareMaskPtr
+  vkCmdSetStencilCompareMask' (commandBufferHandle (commandBuffer)) (faceMask) (compareMask)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetStencilWriteMask
+  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()
+
+-- | vkCmdSetStencilWriteMask - Set the stencil write mask dynamic state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @faceMask@ is a bitmask of
+--     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits'
+--     specifying the set of stencil state for which to update the write
+--     mask, as described above for 'cmdSetStencilCompareMask'.
+--
+-- -   @writeMask@ is the new value to use as the stencil write mask.
+--
+-- = Description
+--
+-- This command sets the state for a given draw when the graphics pipeline
+-- is created with
+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_WRITE_MASK' set
+-- in
+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @faceMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values
+--
+-- -   @faceMask@ /must/ not be @0@
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'
+cmdSetStencilWriteMask :: forall io . MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("writeMask" ::: Word32) -> io ()
+cmdSetStencilWriteMask commandBuffer faceMask writeMask = liftIO $ do
+  let vkCmdSetStencilWriteMaskPtr = pVkCmdSetStencilWriteMask (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdSetStencilWriteMaskPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilWriteMask is null" Nothing Nothing
+  let vkCmdSetStencilWriteMask' = mkVkCmdSetStencilWriteMask vkCmdSetStencilWriteMaskPtr
+  vkCmdSetStencilWriteMask' (commandBufferHandle (commandBuffer)) (faceMask) (writeMask)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetStencilReference
+  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()
+
+-- | vkCmdSetStencilReference - Set the stencil reference dynamic state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @faceMask@ is a bitmask of
+--     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits'
+--     specifying the set of stencil state for which to update the
+--     reference value, as described above for 'cmdSetStencilCompareMask'.
+--
+-- -   @reference@ is the new value to use as the stencil reference value.
+--
+-- = Description
+--
+-- This command sets the state for a given draw when the graphics pipeline
+-- is created with
+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_REFERENCE' set
+-- in
+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @faceMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values
+--
+-- -   @faceMask@ /must/ not be @0@
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'
+cmdSetStencilReference :: forall io . MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("reference" ::: Word32) -> io ()
+cmdSetStencilReference commandBuffer faceMask reference = liftIO $ do
+  let vkCmdSetStencilReferencePtr = pVkCmdSetStencilReference (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdSetStencilReferencePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilReference is null" Nothing Nothing
+  let vkCmdSetStencilReference' = mkVkCmdSetStencilReference vkCmdSetStencilReferencePtr
+  vkCmdSetStencilReference' (commandBufferHandle (commandBuffer)) (faceMask) (reference)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBindDescriptorSets
+  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()
+
+-- | vkCmdBindDescriptorSets - Binds descriptor sets to a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer that the descriptor sets will
+--     be bound to.
+--
+-- -   @pipelineBindPoint@ is a
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' 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 'Vulkan.Core10.Handles.PipelineLayout' 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 a pointer to an array of handles to
+--     'Vulkan.Core10.Handles.DescriptorSet' 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
+--
+-- 'cmdBindDescriptorSets' 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>.
+--
+-- A compatible descriptor set /must/ be bound for all set numbers that any
+-- shaders in a pipeline access, at the time that a draw or dispatch
+-- command is recorded to execute using that pipeline. However, if none of
+-- the shaders in a pipeline statically use any bindings with a particular
+-- set number, then no descriptor set need be bound for that set number,
+-- even if the pipeline layout includes a non-trivial descriptor set layout
+-- for that set number.
+--
+-- If any of the sets being bound include dynamic uniform or storage
+-- buffers, then @pDynamicOffsets@ includes one element for each array
+-- element in each dynamic descriptor type binding in each set. Values are
+-- taken from @pDynamicOffsets@ in an order such that all entries for set N
+-- come before set N+1; within a set, entries are ordered by the binding
+-- numbers in the descriptor set layouts; and within a binding array,
+-- elements are in order. @dynamicOffsetCount@ /must/ equal the total
+-- number of dynamic descriptors in the sets being bound.
+--
+-- The effective offset used for dynamic uniform and storage buffer
+-- bindings is the sum of the relative offset taken from @pDynamicOffsets@,
+-- and the base address of the buffer plus base offset in the descriptor
+-- set. The range of the dynamic uniform and storage buffer bindings is the
+-- buffer range as specified in the descriptor set.
+--
+-- Each of the @pDescriptorSets@ /must/ be compatible with the pipeline
+-- layout specified by @layout@. The layout used to program the bindings
+-- /must/ also be compatible with the pipeline used in subsequent graphics
+-- or compute commands, as defined in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>
+-- section.
+--
+-- The descriptor set contents bound by a call to 'cmdBindDescriptorSets'
+-- /may/ be consumed at the following times:
+--
+-- -   For descriptor bindings created with the
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--     bit set, the contents /may/ be consumed when the command buffer is
+--     submitted to a queue, or during shader execution of the resulting
+--     draws and dispatches, or any time in between. Otherwise,
+--
+-- -   during host execution of the command, or during shader execution of
+--     the resulting draws and dispatches, or any time in between.
+--
+-- Thus, the contents of a descriptor set binding /must/ not be altered
+-- (overwritten by an update command, or freed) between the first point in
+-- time that it /may/ be consumed, and when the command completes executing
+-- on the queue.
+--
+-- The contents of @pDynamicOffsets@ are consumed immediately during
+-- execution of 'cmdBindDescriptorSets'. Once all pending uses have
+-- completed, it is legal to update and reuse a descriptor set.
+--
+-- == Valid Usage
+--
+-- -   Each element of @pDescriptorSets@ /must/ have been allocated with a
+--     'Vulkan.Core10.Handles.DescriptorSetLayout' that matches (is the
+--     same as, or identically defined as) the
+--     'Vulkan.Core10.Handles.DescriptorSetLayout' at set /n/ in @layout@,
+--     where /n/ is the sum of @firstSet@ and the index into
+--     @pDescriptorSets@
+--
+-- -   @dynamicOffsetCount@ /must/ be equal to the total number of dynamic
+--     descriptors in @pDescriptorSets@
+--
+-- -   The sum of @firstSet@ and @descriptorSetCount@ /must/ be less than
+--     or equal to
+--     'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'::@setLayoutCount@
+--     provided when @layout@ was created
+--
+-- -   @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s
+--     parent 'Vulkan.Core10.Handles.CommandPool'’s queue family
+--
+-- -   Each element of @pDynamicOffsets@ which corresponds to a descriptor
+--     binding with type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+--     /must/ be a multiple of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minUniformBufferOffsetAlignment@
+--
+-- -   Each element of @pDynamicOffsets@ which corresponds to a descriptor
+--     binding with type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+--     /must/ be a multiple of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minStorageBufferOffsetAlignment@
+--
+-- -   For each dynamic uniform or storage buffer binding in
+--     @pDescriptorSets@, the sum of the effective offset, as defined
+--     above, and the range of the binding /must/ be less than or equal to
+--     the size of the buffer
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--
+-- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'
+--     handle
+--
+-- -   @pDescriptorSets@ /must/ be a valid pointer to an array of
+--     @descriptorSetCount@ valid 'Vulkan.Core10.Handles.DescriptorSet'
+--     handles
+--
+-- -   If @dynamicOffsetCount@ is not @0@, @pDynamicOffsets@ /must/ be a
+--     valid pointer to an array of @dynamicOffsetCount@ @uint32_t@ values
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   @descriptorSetCount@ /must/ be greater than @0@
+--
+-- -   Each of @commandBuffer@, @layout@, and the elements of
+--     @pDescriptorSets@ /must/ have been created, allocated, or retrieved
+--     from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Handles.DescriptorSet',
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
+-- 'Vulkan.Core10.Handles.PipelineLayout'
+cmdBindDescriptorSets :: forall io . MonadIO io => CommandBuffer -> PipelineBindPoint -> PipelineLayout -> ("firstSet" ::: Word32) -> ("descriptorSets" ::: Vector DescriptorSet) -> ("dynamicOffsets" ::: Vector Word32) -> io ()
+cmdBindDescriptorSets commandBuffer pipelineBindPoint layout firstSet descriptorSets dynamicOffsets = liftIO . evalContT $ do
+  let vkCmdBindDescriptorSetsPtr = pVkCmdBindDescriptorSets (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBindDescriptorSetsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindDescriptorSets is null" Nothing Nothing
+  let vkCmdBindDescriptorSets' = mkVkCmdBindDescriptorSets vkCmdBindDescriptorSetsPtr
+  pPDescriptorSets <- ContT $ allocaBytesAligned @DescriptorSet ((Data.Vector.length (descriptorSets)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorSets `plusPtr` (8 * (i)) :: Ptr DescriptorSet) (e)) (descriptorSets)
+  pPDynamicOffsets <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (dynamicOffsets)) * 4) 4
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicOffsets `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (dynamicOffsets)
+  lift $ vkCmdBindDescriptorSets' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (layout) (firstSet) ((fromIntegral (Data.Vector.length $ (descriptorSets)) :: Word32)) (pPDescriptorSets) ((fromIntegral (Data.Vector.length $ (dynamicOffsets)) :: Word32)) (pPDynamicOffsets)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBindIndexBuffer
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()
+
+-- | vkCmdBindIndexBuffer - Bind an index buffer to a command buffer
+--
+-- = 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 'Vulkan.Core10.Enums.IndexType.IndexType' value
+--     specifying whether indices are treated as 16 bits or 32 bits.
+--
+-- == Valid Usage
+--
+-- -   @offset@ /must/ be less than the size of @buffer@
+--
+-- -   The sum of @offset@ and the address of the range of
+--     'Vulkan.Core10.Handles.DeviceMemory' object that is backing
+--     @buffer@, /must/ be a multiple of the type indicated by @indexType@
+--
+-- -   @buffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT'
+--     flag
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @indexType@ /must/ not be
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'
+--
+-- -   If @indexType@ is
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-indexTypeUint8 indexTypeUint8>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @indexType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.IndexType.IndexType' value
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.IndexType.IndexType'
+cmdBindIndexBuffer :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> IndexType -> io ()
+cmdBindIndexBuffer commandBuffer buffer offset indexType = liftIO $ do
+  let vkCmdBindIndexBufferPtr = pVkCmdBindIndexBuffer (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdBindIndexBufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindIndexBuffer is null" Nothing Nothing
+  let vkCmdBindIndexBuffer' = mkVkCmdBindIndexBuffer vkCmdBindIndexBufferPtr
+  vkCmdBindIndexBuffer' (commandBufferHandle (commandBuffer)) (buffer) (offset) (indexType)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBindVertexBuffers
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()
+
+-- | vkCmdBindVertexBuffers - Bind vertex buffers to a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @firstBinding@ is the index of the first vertex input binding whose
+--     state is updated by the command.
+--
+-- -   @bindingCount@ is the number of vertex input bindings whose state is
+--     updated by the command.
+--
+-- -   @pBuffers@ is a pointer to an array of buffer handles.
+--
+-- -   @pOffsets@ is a pointer to an array of buffer offsets.
+--
+-- = Description
+--
+-- The values taken from elements i of @pBuffers@ and @pOffsets@ replace
+-- the current state for the vertex input binding @firstBinding@ + i, for i
+-- in [0, @bindingCount@). The vertex input binding is updated to start at
+-- the offset indicated by @pOffsets@[i] from the start of the buffer
+-- @pBuffers@[i]. All vertex input attributes that use each of these
+-- bindings will use these updated addresses in their address calculations
+-- for subsequent draw commands. If the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+-- feature is enabled, elements of @pBuffers@ /can/ be
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and /can/ be used by the
+-- vertex shader. If a vertex input attribute is bound to a vertex input
+-- binding that is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the values
+-- taken from memory are considered to be zero, and missing G, B, or A
+-- components are
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction filled with (0,0,1)>.
+--
+-- == Valid Usage
+--
+-- -   @firstBinding@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+--
+-- -   The sum of @firstBinding@ and @bindingCount@ /must/ be less than or
+--     equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+--
+-- -   All elements of @pOffsets@ /must/ be less than the size of the
+--     corresponding element in @pBuffers@
+--
+-- -   All elements of @pBuffers@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT'
+--     flag
+--
+-- -   Each element of @pBuffers@ that is non-sparse /must/ be bound
+--     completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all elements of @pBuffers@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If an element of @pBuffers@ is
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', then the corresponding
+--     element of @pOffsets@ /must/ be zero
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@
+--     valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--     'Vulkan.Core10.Handles.Buffer' handles
+--
+-- -   @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@
+--     'Vulkan.Core10.BaseType.DeviceSize' values
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   @bindingCount@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and the elements of @pBuffers@ that are
+--     valid handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdBindVertexBuffers :: forall io . MonadIO io => CommandBuffer -> ("firstBinding" ::: Word32) -> ("buffers" ::: Vector Buffer) -> ("offsets" ::: Vector DeviceSize) -> io ()
+cmdBindVertexBuffers commandBuffer firstBinding buffers offsets = liftIO . evalContT $ do
+  let vkCmdBindVertexBuffersPtr = pVkCmdBindVertexBuffers (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBindVertexBuffersPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindVertexBuffers is null" Nothing Nothing
+  let vkCmdBindVertexBuffers' = mkVkCmdBindVertexBuffers vkCmdBindVertexBuffersPtr
+  let pBuffersLength = Data.Vector.length $ (buffers)
+  lift $ unless ((Data.Vector.length $ (offsets)) == pBuffersLength) $
+    throwIO $ IOError Nothing InvalidArgument "" "pOffsets and pBuffers must have the same length" Nothing Nothing
+  pPBuffers <- ContT $ allocaBytesAligned @Buffer ((Data.Vector.length (buffers)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (buffers)
+  pPOffsets <- ContT $ allocaBytesAligned @DeviceSize ((Data.Vector.length (offsets)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (offsets)
+  lift $ vkCmdBindVertexBuffers' (commandBufferHandle (commandBuffer)) (firstBinding) ((fromIntegral pBuffersLength :: Word32)) (pPBuffers) (pPOffsets)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDraw
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDraw - Draw primitives
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @vertexCount@ is the number of vertices to draw.
+--
+-- -   @instanceCount@ is the number of instances to draw.
+--
+-- -   @firstVertex@ is the index of the first vertex to draw.
+--
+-- -   @firstInstance@ is the instance ID of the first instance to draw.
+--
+-- = Description
+--
+-- When the command is executed, primitives are assembled using the current
+-- primitive topology and @vertexCount@ consecutive vertex indices with the
+-- first @vertexIndex@ value equal to @firstVertex@. The primitives are
+-- drawn @instanceCount@ times with @instanceIndex@ starting with
+-- @firstInstance@ and increasing sequentially for each instance. The
+-- assembled primitives execute the bound graphics pipeline.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'cmdBindDescriptorSets', /must/ be valid if they are statically used
+--     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
+--     point used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   The current render pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   Image subresources used as attachments in the current render pass
+--     /must/ not be accessed in any way other than as an attachment by
+--     this command
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   If the bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   If @commandBuffer@ is a protected command buffer, any resource
+--     written to by the 'Vulkan.Core10.Handles.Pipeline' object bound to
+--     the pipeline bind point used by this command /must/ not be an
+--     unprotected resource
+--
+-- -   If @commandBuffer@ is a protected command buffer, pipeline stages
+--     other than the framebuffer-space and compute stages in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point /must/ not write to any resource
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers
+--     bound
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   For a given vertex buffer binding, any attribute data fetched /must/
+--     be entirely contained within the corresponding vertex buffer
+--     binding, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdDraw :: forall io . MonadIO io => CommandBuffer -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> io ()
+cmdDraw commandBuffer vertexCount instanceCount firstVertex firstInstance = liftIO $ do
+  let vkCmdDrawPtr = pVkCmdDraw (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDrawPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDraw is null" Nothing Nothing
+  let vkCmdDraw' = mkVkCmdDraw vkCmdDrawPtr
+  vkCmdDraw' (commandBufferHandle (commandBuffer)) (vertexCount) (instanceCount) (firstVertex) (firstInstance)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawIndexed
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()
+
+-- | vkCmdDrawIndexed - Issue an indexed draw into a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @indexCount@ is the number of vertices to draw.
+--
+-- -   @instanceCount@ is the number of instances to draw.
+--
+-- -   @firstIndex@ is the base index within the index buffer.
+--
+-- -   @vertexOffset@ is the value added to the vertex index before
+--     indexing into the vertex buffer.
+--
+-- -   @firstInstance@ is the instance ID of the first instance to draw.
+--
+-- = Description
+--
+-- When the command is executed, primitives are assembled using the current
+-- primitive topology and @indexCount@ vertices whose indices are retrieved
+-- from the index buffer. The index buffer is treated as an array of
+-- tightly packed unsigned integers of size defined by the
+-- 'cmdBindIndexBuffer'::@indexType@ parameter with which the buffer was
+-- bound.
+--
+-- The first vertex index is at an offset of @firstIndex@ * @indexSize@ +
+-- @offset@ within the bound index buffer, where @offset@ is the offset
+-- specified by 'cmdBindIndexBuffer' and @indexSize@ is the byte size of
+-- the type specified by @indexType@. Subsequent index values are retrieved
+-- from consecutive locations in the index buffer. Indices are first
+-- compared to the primitive restart value, then zero extended to 32 bits
+-- (if the @indexType@ is
+-- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT' or
+-- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16') and have
+-- @vertexOffset@ added to them, before being supplied as the @vertexIndex@
+-- value.
+--
+-- The primitives are drawn @instanceCount@ times with @instanceIndex@
+-- starting with @firstInstance@ and increasing sequentially for each
+-- instance. The assembled primitives execute the bound graphics pipeline.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'cmdBindDescriptorSets', /must/ be valid if they are statically used
+--     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
+--     point used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   The current render pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   Image subresources used as attachments in the current render pass
+--     /must/ not be accessed in any way other than as an attachment by
+--     this command
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   If the bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   If @commandBuffer@ is a protected command buffer, any resource
+--     written to by the 'Vulkan.Core10.Handles.Pipeline' object bound to
+--     the pipeline bind point used by this command /must/ not be an
+--     unprotected resource
+--
+-- -   If @commandBuffer@ is a protected command buffer, pipeline stages
+--     other than the framebuffer-space and compute stages in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point /must/ not write to any resource
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers
+--     bound
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   For a given vertex buffer binding, any attribute data fetched /must/
+--     be entirely contained within the corresponding vertex buffer
+--     binding, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
+--
+-- -   (@indexSize@ * (@firstIndex@ + @indexCount@) + @offset@) /must/ be
+--     less than or equal to the size of the bound index buffer, with
+--     @indexSize@ being based on the type specified by @indexType@, where
+--     the index buffer, @indexType@, and @offset@ are specified via
+--     'cmdBindIndexBuffer'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdDrawIndexed :: forall io . MonadIO io => CommandBuffer -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> io ()
+cmdDrawIndexed commandBuffer indexCount instanceCount firstIndex vertexOffset firstInstance = liftIO $ do
+  let vkCmdDrawIndexedPtr = pVkCmdDrawIndexed (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDrawIndexedPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexed is null" Nothing Nothing
+  let vkCmdDrawIndexed' = mkVkCmdDrawIndexed vkCmdDrawIndexedPtr
+  vkCmdDrawIndexed' (commandBufferHandle (commandBuffer)) (indexCount) (instanceCount) (firstIndex) (vertexOffset) (firstInstance)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawIndirect
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDrawIndirect - Issue an indirect draw into a command buffer
+--
+-- = 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
+--
+-- 'cmdDrawIndirect' behaves similarly to 'cmdDraw' except that the
+-- parameters are read by the device from a buffer during execution.
+-- @drawCount@ draws are executed by the command, with parameters taken
+-- from @buffer@ starting at @offset@ and increasing by @stride@ bytes for
+-- each successive draw. The parameters of each draw are encoded in an
+-- array of 'Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures. If
+-- @drawCount@ is less than or equal to one, @stride@ is ignored.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'cmdBindDescriptorSets', /must/ be valid if they are statically used
+--     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
+--     point used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   The current render pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   Image subresources used as attachments in the current render pass
+--     /must/ not be accessed in any way other than as an attachment by
+--     this command
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   If the bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers
+--     bound
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   For a given vertex buffer binding, any attribute data fetched /must/
+--     be entirely contained within the corresponding vertex buffer
+--     binding, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @buffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>
+--     feature is not enabled, @drawCount@ /must/ be @0@ or @1@
+--
+-- -   @drawCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>
+--     feature is not enabled, all the @firstInstance@ members of the
+--     'Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures accessed
+--     by this command /must/ be @0@
+--
+-- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
+--     @4@ and /must/ be greater than or equal to
+--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')
+--
+-- -   If @drawCount@ is equal to @1@, (@offset@ +
+--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be
+--     less than or equal to the size of @buffer@
+--
+-- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
+--     @offset@ + @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand'))
+--     /must/ be less than or equal to the size of @buffer@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdDrawIndirect :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
+cmdDrawIndirect commandBuffer buffer offset drawCount stride = liftIO $ do
+  let vkCmdDrawIndirectPtr = pVkCmdDrawIndirect (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDrawIndirectPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndirect is null" Nothing Nothing
+  let vkCmdDrawIndirect' = mkVkCmdDrawIndirect vkCmdDrawIndirectPtr
+  vkCmdDrawIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawIndexedIndirect
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDrawIndexedIndirect - Perform an indexed indirect draw
+--
+-- = 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
+--
+-- 'cmdDrawIndexedIndirect' behaves similarly to 'cmdDrawIndexed' except
+-- that the parameters are read by the device from a buffer during
+-- execution. @drawCount@ draws are executed by the command, with
+-- parameters taken from @buffer@ starting at @offset@ and increasing by
+-- @stride@ bytes for each successive draw. The parameters of each draw are
+-- encoded in an array of
+-- 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures. If
+-- @drawCount@ is less than or equal to one, @stride@ is ignored.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'cmdBindDescriptorSets', /must/ be valid if they are statically used
+--     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
+--     point used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   The current render pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   Image subresources used as attachments in the current render pass
+--     /must/ not be accessed in any way other than as an attachment by
+--     this command
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   If the bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers
+--     bound
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   For a given vertex buffer binding, any attribute data fetched /must/
+--     be entirely contained within the corresponding vertex buffer
+--     binding, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @buffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>
+--     feature is not enabled, @drawCount@ /must/ be @0@ or @1@
+--
+-- -   @drawCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
+--
+-- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
+--     @4@ and /must/ be greater than or equal to
+--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>
+--     feature is not enabled, all the @firstInstance@ members of the
+--     'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures
+--     accessed by this command /must/ be @0@
+--
+-- -   If @drawCount@ is equal to @1@, (@offset@ +
+--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))
+--     /must/ be less than or equal to the size of @buffer@
+--
+-- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
+--     @offset@ +
+--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))
+--     /must/ be less than or equal to the size of @buffer@
+--
+-- -   If
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectCount drawIndirectCount>
+--     is not enabled this function /must/ not be used
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdDrawIndexedIndirect :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
+cmdDrawIndexedIndirect commandBuffer buffer offset drawCount stride = liftIO $ do
+  let vkCmdDrawIndexedIndirectPtr = pVkCmdDrawIndexedIndirect (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDrawIndexedIndirectPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexedIndirect is null" Nothing Nothing
+  let vkCmdDrawIndexedIndirect' = mkVkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirectPtr
+  vkCmdDrawIndexedIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDispatch
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDispatch - Dispatch compute work items
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @groupCountX@ is the number of local workgroups to dispatch in the X
+--     dimension.
+--
+-- -   @groupCountY@ is the number of local workgroups to dispatch in the Y
+--     dimension.
+--
+-- -   @groupCountZ@ is the number of local workgroups to dispatch in the Z
+--     dimension.
+--
+-- = Description
+--
+-- When the command is executed, a global workgroup consisting of
+-- @groupCountX@ × @groupCountY@ × @groupCountZ@ local workgroups is
+-- assembled.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'cmdBindDescriptorSets', /must/ be valid if they are statically used
+--     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
+--     point used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   If @commandBuffer@ is a protected command buffer, any resource
+--     written to by the 'Vulkan.Core10.Handles.Pipeline' object bound to
+--     the pipeline bind point used by this command /must/ not be an
+--     unprotected resource
+--
+-- -   If @commandBuffer@ is a protected command buffer, pipeline stages
+--     other than the framebuffer-space and compute stages in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point /must/ not write to any resource
+--
+-- -   @groupCountX@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
+--
+-- -   @groupCountY@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
+--
+-- -   @groupCountZ@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               | Compute                                                                                                                             |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdDispatch :: forall io . MonadIO io => CommandBuffer -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> io ()
+cmdDispatch commandBuffer groupCountX groupCountY groupCountZ = liftIO $ do
+  let vkCmdDispatchPtr = pVkCmdDispatch (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDispatchPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatch is null" Nothing Nothing
+  let vkCmdDispatch' = mkVkCmdDispatch vkCmdDispatchPtr
+  vkCmdDispatch' (commandBufferHandle (commandBuffer)) (groupCountX) (groupCountY) (groupCountZ)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDispatchIndirect
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()
+
+-- | vkCmdDispatchIndirect - Dispatch compute work items using indirect
+-- parameters
+--
+-- = 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
+--
+-- 'cmdDispatchIndirect' behaves similarly to 'cmdDispatch' except that the
+-- parameters are read by the device from a buffer during execution. The
+-- parameters of the dispatch are encoded in a
+-- 'Vulkan.Core10.OtherTypes.DispatchIndirectCommand' structure taken from
+-- @buffer@ starting at @offset@.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'cmdBindDescriptorSets', /must/ be valid if they are statically used
+--     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
+--     point used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @buffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   The sum of @offset@ and the size of
+--     'Vulkan.Core10.OtherTypes.DispatchIndirectCommand' /must/ be less
+--     than or equal to the size of @buffer@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               | Compute                                                                                                                             |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdDispatchIndirect :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> io ()
+cmdDispatchIndirect commandBuffer buffer offset = liftIO $ do
+  let vkCmdDispatchIndirectPtr = pVkCmdDispatchIndirect (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDispatchIndirectPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatchIndirect is null" Nothing Nothing
+  let vkCmdDispatchIndirect' = mkVkCmdDispatchIndirect vkCmdDispatchIndirectPtr
+  vkCmdDispatchIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyBuffer
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()
+
+-- | vkCmdCopyBuffer - Copy data between buffer regions
+--
+-- = 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 'BufferCopy' structures
+--     specifying the regions to copy.
+--
+-- = Description
+--
+-- Each region in @pRegions@ is copied from the source buffer to the same
+-- region of the destination buffer. @srcBuffer@ and @dstBuffer@ /can/ be
+-- the same buffer or alias the same memory, but the resulting values are
+-- undefined if the copy regions overlap in memory.
+--
+-- == Valid Usage
+--
+-- -   The @srcOffset@ member of each element of @pRegions@ /must/ be less
+--     than the size of @srcBuffer@
+--
+-- -   The @dstOffset@ member of each element of @pRegions@ /must/ be less
+--     than the size of @dstBuffer@
+--
+-- -   The @size@ member of each element of @pRegions@ /must/ be less than
+--     or equal to the size of @srcBuffer@ minus @srcOffset@
+--
+-- -   The @size@ member of each element of @pRegions@ /must/ be less than
+--     or equal to the size of @dstBuffer@ minus @dstOffset@
+--
+-- -   The union of the source regions, and the union of the destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory
+--
+-- -   @srcBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'
+--     usage flag
+--
+-- -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then
+--     @srcBuffer@ /must/ not be a protected buffer
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then
+--     @dstBuffer@ /must/ not be a protected buffer
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@
+--     /must/ not be an unprotected buffer
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @srcBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'BufferCopy' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Each of @commandBuffer@, @dstBuffer@, and @srcBuffer@ /must/ have
+--     been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'BufferCopy',
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdCopyBuffer :: forall io . MonadIO io => CommandBuffer -> ("srcBuffer" ::: Buffer) -> ("dstBuffer" ::: Buffer) -> ("regions" ::: Vector BufferCopy) -> io ()
+cmdCopyBuffer commandBuffer srcBuffer dstBuffer regions = liftIO . evalContT $ do
+  let vkCmdCopyBufferPtr = pVkCmdCopyBuffer (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyBufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBuffer is null" Nothing Nothing
+  let vkCmdCopyBuffer' = mkVkCmdCopyBuffer vkCmdCopyBufferPtr
+  pPRegions <- ContT $ allocaBytesAligned @BufferCopy ((Data.Vector.length (regions)) * 24) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (24 * (i)) :: Ptr BufferCopy) (e) . ($ ())) (regions)
+  lift $ vkCmdCopyBuffer' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyImage
+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()
+
+-- | vkCmdCopyImage - Copy data between images
+--
+-- = 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 'ImageCopy' structures
+--     specifying the regions to copy.
+--
+-- = Description
+--
+-- Each region in @pRegions@ is copied from the source image to the same
+-- region of the destination image. @srcImage@ and @dstImage@ /can/ be the
+-- same image or alias the same memory.
+--
+-- The formats of @srcImage@ and @dstImage@ /must/ be compatible. Formats
+-- are compatible if they share the same class, as shown in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility Compatible Formats>
+-- table. Depth\/stencil formats /must/ match exactly.
+--
+-- If the format of @srcImage@ or @dstImage@ is a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>,
+-- regions of each plane to be copied /must/ be specified separately using
+-- the @srcSubresource@ and @dstSubresource@ members of the 'ImageCopy'
+-- structure. In this case, the @aspectMask@ of the @srcSubresource@ or
+-- @dstSubresource@ that refers to the multi-planar image /must/ be
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For
+-- the purposes of 'cmdCopyImage', each plane of a multi-planar image is
+-- treated as having the format listed in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>
+-- for the plane identified by the @aspectMask@ of the corresponding
+-- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'
+-- and to coordinates used in the copy, which correspond to texels in the
+-- /plane/ rather than how these texels map to coordinates in the image as
+-- a whole.
+--
+-- Note
+--
+-- For example, the
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' plane
+-- of a 'Vulkan.Core10.Enums.Format.FORMAT_G8_B8R8_2PLANE_420_UNORM' image
+-- is compatible with an image of format
+-- 'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM' and (less usefully) with
+-- the 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+-- plane of an image of format
+-- 'Vulkan.Core10.Enums.Format.FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16',
+-- as each texel is 2 bytes in size.
+--
+-- 'cmdCopyImage' allows copying between /size-compatible/ compressed and
+-- uncompressed internal formats. Formats are size-compatible if the texel
+-- block size of the uncompressed format is equal to the texel block size
+-- of the compressed format. Such a copy does not perform on-the-fly
+-- compression or decompression. When copying from an uncompressed format
+-- to a compressed format, each texel of uncompressed data of the source
+-- image is copied as a raw value to the corresponding compressed texel
+-- block of the destination image. When copying from a compressed format to
+-- an uncompressed format, each compressed texel block of the source image
+-- is copied as a raw value to the corresponding texel of uncompressed data
+-- in the destination image. Thus, for example, it is legal to copy between
+-- a 128-bit uncompressed format and a compressed format which has a
+-- 128-bit sized compressed texel block representing 4×4 texels (using 8
+-- bits per texel), or between a 64-bit uncompressed format and a
+-- compressed format which has a 64-bit sized compressed texel block
+-- representing 4×4 texels (using 4 bits per texel).
+--
+-- When copying between compressed and uncompressed formats the @extent@
+-- members represent the texel dimensions of the source image and not the
+-- destination. When copying from a compressed image to an uncompressed
+-- image the image texel dimensions written to the uncompressed image will
+-- be source extent divided by the compressed texel block dimensions. When
+-- copying from an uncompressed image to a compressed image the image texel
+-- dimensions written to the compressed image will be the source extent
+-- multiplied by the compressed texel block dimensions. In both cases the
+-- number of bytes read and the number of bytes written will be identical.
+--
+-- Copying to or from block-compressed images is typically done in
+-- multiples of the compressed texel block size. For this reason the
+-- @extent@ /must/ be a multiple of the compressed texel block dimension.
+-- There is one exception to this rule which is /required/ to handle
+-- compressed images created with dimensions that are not a multiple of the
+-- compressed texel block dimensions: if the @srcImage@ is compressed,
+-- then:
+--
+-- -   If @extent.width@ is not a multiple of the compressed texel block
+--     width, then (@extent.width@ + @srcOffset.x@) /must/ equal the image
+--     subresource width.
+--
+-- -   If @extent.height@ is not a multiple of the compressed texel block
+--     height, then (@extent.height@ + @srcOffset.y@) /must/ equal the
+--     image subresource height.
+--
+-- -   If @extent.depth@ is not a multiple of the compressed texel block
+--     depth, then (@extent.depth@ + @srcOffset.z@) /must/ equal the image
+--     subresource depth.
+--
+-- Similarly, if the @dstImage@ is compressed, then:
+--
+-- -   If @extent.width@ is not a multiple of the compressed texel block
+--     width, then (@extent.width@ + @dstOffset.x@) /must/ equal the image
+--     subresource width.
+--
+-- -   If @extent.height@ is not a multiple of the compressed texel block
+--     height, then (@extent.height@ + @dstOffset.y@) /must/ equal the
+--     image subresource height.
+--
+-- -   If @extent.depth@ is not a multiple of the compressed texel block
+--     depth, then (@extent.depth@ + @dstOffset.z@) /must/ equal the image
+--     subresource depth.
+--
+-- This allows the last compressed texel block of the image in each
+-- non-multiple dimension to be included as a source or destination of the
+-- copy.
+--
+-- “@_422@” image formats that are not
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
+-- are treated as having a 2×1 compressed texel block for the purposes of
+-- these rules.
+--
+-- 'cmdCopyImage' /can/ be used to copy image data between multisample
+-- images, but both images /must/ have the same number of samples.
+--
+-- == Valid Usage
+--
+-- -   The union of all source regions, and the union of all destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @srcImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'
+--
+-- -   @srcImage@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     usage flag
+--
+-- -   If @srcImage@ is non-sparse then the image or /disjoint/ plane to be
+--     copied /must/ be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @srcImageLayout@ /must/ specify the layout of the image subresources
+--     of @srcImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @srcImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @dstImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
+--
+-- -   @dstImage@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstImage@ is non-sparse then the image or /disjoint/ plane that
+--     is the destination of the copy /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstImageLayout@ /must/ specify the layout of the image subresources
+--     of @dstImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @dstImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
+--
+-- -   If the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and
+--     @dstImage@ is not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and
+--     @dstImage@ /must/ be compatible, as defined
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-compatibility above>
+--
+-- -   In a copy to or from a plane of a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image>,
+--     the 'Vulkan.Core10.Enums.Format.Format' of the image and plane
+--     /must/ be compatible according to
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes the description of compatible planes>
+--     for the plane being copied
+--
+-- -   The sample count of @srcImage@ and @dstImage@ /must/ match
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
+--     /must/ not be an unprotected image
+--
+-- -   The @srcSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created
+--
+-- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created
+--
+-- -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @srcImage@ was created
+--
+-- -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @dstImage@ was created
+--
+-- -   The @srcOffset@ and @extent@ members of each element of @pRegions@
+--     /must/ respect the image transfer granularity requirements of
+--     @commandBuffer@’s command pool’s queue family, as described in
+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
+--
+-- -   The @dstOffset@ and @extent@ members of each element of @pRegions@
+--     /must/ respect the image transfer granularity requirements of
+--     @commandBuffer@’s command pool’s queue family, as described in
+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
+--
+-- -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@
+--     containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'ImageCopy' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',
+-- 'ImageCopy', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'
+cmdCopyImage :: forall io . MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageCopy) -> io ()
+cmdCopyImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do
+  let vkCmdCopyImagePtr = pVkCmdCopyImage (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyImagePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImage is null" Nothing Nothing
+  let vkCmdCopyImage' = mkVkCmdCopyImage vkCmdCopyImagePtr
+  pPRegions <- ContT $ allocaBytesAligned @ImageCopy ((Data.Vector.length (regions)) * 68) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageCopy) (e) . ($ ())) (regions)
+  lift $ vkCmdCopyImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBlitImage
+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()
+
+-- | vkCmdBlitImage - Copy regions of an image, potentially performing format
+-- conversion,
+--
+-- = 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 'ImageBlit' structures
+--     specifying the regions to blit.
+--
+-- -   @filter@ is a 'Vulkan.Core10.Enums.Filter.Filter' specifying the
+--     filter to apply if the blits require scaling.
+--
+-- = Description
+--
+-- 'cmdBlitImage' /must/ not be used for multisampled source or destination
+-- images. Use 'cmdResolveImage' for this purpose.
+--
+-- As the sizes of the source and destination extents /can/ differ in any
+-- dimension, texels in the source extent are scaled and filtered to the
+-- destination extent. Scaling occurs via the following operations:
+--
+-- -   For each destination texel, the integer coordinate of that texel is
+--     converted to an unnormalized texture coordinate, using the effective
+--     inverse of the equations described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-unnormalized-to-integer unnormalized to integer conversion>:
+--
+--     -   ubase = i + ½
+--
+--     -   vbase = j + ½
+--
+--     -   wbase = k + ½
+--
+-- -   These base coordinates are then offset by the first destination
+--     offset:
+--
+--     -   uoffset = ubase - xdst0
+--
+--     -   voffset = vbase - ydst0
+--
+--     -   woffset = wbase - zdst0
+--
+--     -   aoffset = a - @baseArrayCount@dst
+--
+-- -   The scale is determined from the source and destination regions, and
+--     applied to the offset coordinates:
+--
+--     -   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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations chapter>,
+-- with the filter mode equal to that of @filter@, a mipmap mode of
+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST' and
+-- an address mode of
+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'.
+-- Implementations /must/ clamp at the edge of the source image, and /may/
+-- additionally clamp to the edge of the source region.
+--
+-- Note
+--
+-- Due to allowable rounding errors in the generation of the source texture
+-- coordinates, it is not always possible to guarantee exactly which source
+-- texels will be sampled for a given blit. As rounding errors are
+-- implementation dependent, the exact results of a blitting operation are
+-- also implementation dependent.
+--
+-- Blits are done layer by layer starting with the @baseArrayLayer@ member
+-- of @srcSubresource@ for the source and @dstSubresource@ for the
+-- destination. @layerCount@ layers are blitted to the destination image.
+--
+-- 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
+-- 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' then the value sampled from
+-- the source image is taken by doing linear filtering using the
+-- interpolated __z__ coordinate. If @filter@ parameter is
+-- 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST' then the value sampled from
+-- the source image is taken from the single nearest slice, with an
+-- implementation-dependent arithmetic rounding mode.
+--
+-- The following filtering and conversion rules apply:
+--
+-- -   Integer formats /can/ only be converted to other integer formats
+--     with the same signedness.
+--
+-- -   No format conversion is supported between depth\/stencil images. The
+--     formats /must/ match.
+--
+-- -   Format conversions on unorm, snorm, unscaled and packed float
+--     formats of the copied aspect of the image are performed by first
+--     converting the pixels to float values.
+--
+-- -   For sRGB source formats, nonlinear RGB values are converted to
+--     linear representation prior to filtering.
+--
+-- -   After filtering, the float values are first clamped and then cast to
+--     the destination image format. In case of sRGB destination format,
+--     linear RGB values are converted to nonlinear representation before
+--     writing the pixel to the image.
+--
+-- Signed and unsigned integers are converted by first clamping to the
+-- representable range of the destination format, then casting the value.
+--
+-- == Valid Usage
+--
+-- -   The source region specified by each element of @pRegions@ /must/ be
+--     a region that is contained within @srcImage@
+--
+-- -   The destination region specified by each element of @pRegions@
+--     /must/ be a region that is contained within @dstImage@
+--
+-- -   The union of all destination regions, specified by the elements of
+--     @pRegions@, /must/ not overlap in memory with any texel that /may/
+--     be sampled during the blit operation
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @srcImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
+--
+-- -   @srcImage@ /must/ not use a format listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
+--
+-- -   @srcImage@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     usage flag
+--
+-- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @srcImageLayout@ /must/ specify the layout of the image subresources
+--     of @srcImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @srcImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @dstImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'
+--
+-- -   @dstImage@ /must/ not use a format listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
+--
+-- -   @dstImage@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstImageLayout@ /must/ specify the layout of the image subresources
+--     of @dstImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @dstImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   If either of @srcImage@ or @dstImage@ was created with a signed
+--     integer 'Vulkan.Core10.Enums.Format.Format', the other /must/ also
+--     have been created with a signed integer
+--     'Vulkan.Core10.Enums.Format.Format'
+--
+-- -   If either of @srcImage@ or @dstImage@ was created with an unsigned
+--     integer 'Vulkan.Core10.Enums.Format.Format', the other /must/ also
+--     have been created with an unsigned integer
+--     'Vulkan.Core10.Enums.Format.Format'
+--
+-- -   If either of @srcImage@ or @dstImage@ was created with a
+--     depth\/stencil format, the other /must/ have exactly the same format
+--
+-- -   If @srcImage@ was created with a depth\/stencil format, @filter@
+--     /must/ be 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST'
+--
+-- -   @srcImage@ /must/ have been created with a @samples@ value of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   @dstImage@ /must/ have been created with a @samples@ value of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If @filter@ is 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @srcImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If @filter@ is
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @srcImage@ /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   If @filter@ is
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', @srcImage@
+--     /must/ have a 'Vulkan.Core10.Enums.ImageType.ImageType' of
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
+--     /must/ not be an unprotected image
+--
+-- -   The @srcSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created
+--
+-- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created
+--
+-- -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @srcImage@ was created
+--
+-- -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @dstImage@ was created
+--
+-- -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@
+--     containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'ImageBlit' structures
+--
+-- -   @filter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter' value
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.Filter.Filter', 'Vulkan.Core10.Handles.Image',
+-- 'ImageBlit', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'
+cmdBlitImage :: forall io . MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageBlit) -> Filter -> io ()
+cmdBlitImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions filter' = liftIO . evalContT $ do
+  let vkCmdBlitImagePtr = pVkCmdBlitImage (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBlitImagePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBlitImage is null" Nothing Nothing
+  let vkCmdBlitImage' = mkVkCmdBlitImage vkCmdBlitImagePtr
+  pPRegions <- ContT $ allocaBytesAligned @ImageBlit ((Data.Vector.length (regions)) * 80) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (80 * (i)) :: Ptr ImageBlit) (e) . ($ ())) (regions)
+  lift $ vkCmdBlitImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions) (filter')
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyBufferToImage
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()
+
+-- | vkCmdCopyBufferToImage - Copy data from a buffer into an image
+--
+-- = 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 'BufferImageCopy' structures
+--     specifying the regions to copy.
+--
+-- = Description
+--
+-- Each region in @pRegions@ is copied from the specified region of the
+-- source buffer to the specified region of the destination image.
+--
+-- If the format of @dstImage@ is a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>),
+-- regions of each plane to be a target of a copy /must/ be specified
+-- separately using the @pRegions@ member of the 'BufferImageCopy'
+-- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/
+-- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For
+-- the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar
+-- image is treated as having the format listed in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>
+-- for the plane identified by the @aspectMask@ of the corresponding
+-- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'
+-- and to coordinates used in the copy, which correspond to texels in the
+-- /plane/ rather than how these texels map to coordinates in the image as
+-- a whole.
+--
+-- == Valid Usage
+--
+-- -   @srcBuffer@ /must/ be large enough to contain all buffer locations
+--     that are accessed according to
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,
+--     for each element of @pRegions@
+--
+-- -   The image region specified by each element of @pRegions@ /must/ be a
+--     region that is contained within @dstImage@ if the @dstImage@’s
+--     'Vulkan.Core10.Enums.Format.Format' is not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     and /must/ be a region that is contained within the plane being
+--     copied to if the @dstImage@’s 'Vulkan.Core10.Enums.Format.Format' is
+--     a multi-planar format
+--
+-- -   The union of all source regions, and the union of all destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory
+--
+-- -   @srcBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'
+--     usage flag
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @dstImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
+--
+-- -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstImage@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstImage@ /must/ have a sample count equal to
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   @dstImageLayout@ /must/ specify the layout of the image subresources
+--     of @dstImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @dstImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then
+--     @srcBuffer@ /must/ not be a protected buffer
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
+--     /must/ not be an unprotected image
+--
+-- -   The @imageSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created
+--
+-- -   The @imageSubresource.baseArrayLayer@ +
+--     @imageSubresource.layerCount@ of each element of @pRegions@ /must/
+--     be less than or equal to the @arrayLayers@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created
+--
+-- -   The @imageOffset@ and @imageExtent@ members of each element of
+--     @pRegions@ /must/ respect the image transfer granularity
+--     requirements of @commandBuffer@’s command pool’s queue family, as
+--     described in
+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
+--
+-- -   @dstImage@ /must/ not have been created with @flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @srcBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'BufferImageCopy' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Each of @commandBuffer@, @dstImage@, and @srcBuffer@ /must/ have
+--     been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'
+cmdCopyBufferToImage :: forall io . MonadIO io => CommandBuffer -> ("srcBuffer" ::: Buffer) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector BufferImageCopy) -> io ()
+cmdCopyBufferToImage commandBuffer srcBuffer dstImage dstImageLayout regions = liftIO . evalContT $ do
+  let vkCmdCopyBufferToImagePtr = pVkCmdCopyBufferToImage (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyBufferToImagePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBufferToImage is null" Nothing Nothing
+  let vkCmdCopyBufferToImage' = mkVkCmdCopyBufferToImage vkCmdCopyBufferToImagePtr
+  pPRegions <- ContT $ allocaBytesAligned @BufferImageCopy ((Data.Vector.length (regions)) * 56) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e) . ($ ())) (regions)
+  lift $ vkCmdCopyBufferToImage' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyImageToBuffer
+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()
+
+-- | vkCmdCopyImageToBuffer - Copy image data into a buffer
+--
+-- = 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 'BufferImageCopy' structures
+--     specifying the regions to copy.
+--
+-- = Description
+--
+-- Each region in @pRegions@ is copied from the specified region of the
+-- source image to the specified region of the destination buffer.
+--
+-- If the 'Vulkan.Core10.Enums.Format.Format' of @srcImage@ is a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>,
+-- regions of each plane to be a source of a copy /must/ be specified
+-- separately using the @pRegions@ member of the 'BufferImageCopy'
+-- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/
+-- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For
+-- the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar
+-- image is treated as having the format listed in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>
+-- for the plane identified by the @aspectMask@ of the corresponding
+-- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'
+-- and to coordinates used in the copy, which correspond to texels in the
+-- /plane/ rather than how these texels map to coordinates in the image as
+-- a whole.
+--
+-- == Valid Usage
+--
+-- -   The image region specified by each element of @pRegions@ /must/ be a
+--     region that is contained within @srcImage@ if the @srcImage@’s
+--     'Vulkan.Core10.Enums.Format.Format' is not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     and /must/ be a region that is contained within the plane being
+--     copied if the @srcImage@’s 'Vulkan.Core10.Enums.Format.Format' is a
+--     multi-planar format
+--
+-- -   @dstBuffer@ /must/ be large enough to contain all buffer locations
+--     that are accessed according to
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,
+--     for each element of @pRegions@
+--
+-- -   The union of all source regions, and the union of all destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @srcImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'
+--
+-- -   @srcImage@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     usage flag
+--
+-- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @srcImage@ /must/ have a sample count equal to
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   @srcImageLayout@ /must/ specify the layout of the image subresources
+--     of @srcImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @srcImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then
+--     @dstBuffer@ /must/ not be a protected buffer
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@
+--     /must/ not be an unprotected buffer
+--
+-- -   The @imageSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created
+--
+-- -   The @imageSubresource.baseArrayLayer@ +
+--     @imageSubresource.layerCount@ of each element of @pRegions@ /must/
+--     be less than or equal to the @arrayLayers@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created
+--
+-- -   The @imageOffset@ and @imageExtent@ members of each element of
+--     @pRegions@ /must/ respect the image transfer granularity
+--     requirements of @commandBuffer@’s command pool’s queue family, as
+--     described in
+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
+--
+-- -   @srcImage@ /must/ not have been created with @flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'BufferImageCopy' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Each of @commandBuffer@, @dstBuffer@, and @srcImage@ /must/ have
+--     been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'
+cmdCopyImageToBuffer :: forall io . MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstBuffer" ::: Buffer) -> ("regions" ::: Vector BufferImageCopy) -> io ()
+cmdCopyImageToBuffer commandBuffer srcImage srcImageLayout dstBuffer regions = liftIO . evalContT $ do
+  let vkCmdCopyImageToBufferPtr = pVkCmdCopyImageToBuffer (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyImageToBufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImageToBuffer is null" Nothing Nothing
+  let vkCmdCopyImageToBuffer' = mkVkCmdCopyImageToBuffer vkCmdCopyImageToBufferPtr
+  pPRegions <- ContT $ allocaBytesAligned @BufferImageCopy ((Data.Vector.length (regions)) * 56) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e) . ($ ())) (regions)
+  lift $ vkCmdCopyImageToBuffer' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdUpdateBuffer
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()
+
+-- | vkCmdUpdateBuffer - Update a buffer’s contents from host memory
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @dstBuffer@ is a handle to the buffer to be updated.
+--
+-- -   @dstOffset@ is the byte offset into the buffer to start updating,
+--     and /must/ be a multiple of 4.
+--
+-- -   @dataSize@ is the number of bytes to update, and /must/ be a
+--     multiple of 4.
+--
+-- -   @pData@ is a pointer to the source data for the buffer update, and
+--     /must/ be at least @dataSize@ bytes in size.
+--
+-- = Description
+--
+-- @dataSize@ /must/ be less than or equal to 65536 bytes. For larger
+-- updates, applications /can/ use buffer to buffer
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers copies>.
+--
+-- Note
+--
+-- Buffer updates performed with 'cmdUpdateBuffer' first copy the data into
+-- command buffer memory when the command is recorded (which requires
+-- additional storage and may incur an additional allocation), and then
+-- copy the data from the command buffer into @dstBuffer@ when the command
+-- is executed on a device.
+--
+-- The additional cost of this functionality compared to
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers buffer to buffer copies>
+-- means it is only recommended for very small amounts of data, and is why
+-- it is limited to only 65536 bytes.
+--
+-- Applications /can/ work around this by issuing multiple
+-- 'cmdUpdateBuffer' commands to different ranges of the same buffer, but
+-- it is strongly recommended that they /should/ not.
+--
+-- The source data is copied from the user pointer to the command buffer
+-- when the command is called.
+--
+-- 'cmdUpdateBuffer' is only allowed outside of a render pass. This command
+-- is treated as “transfer” operation, for the purposes of synchronization
+-- barriers. The
+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
+-- /must/ be specified in @usage@ of
+-- 'Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer to be
+-- compatible with 'cmdUpdateBuffer'.
+--
+-- == Valid Usage
+--
+-- -   @dstOffset@ /must/ be less than the size of @dstBuffer@
+--
+-- -   @dataSize@ /must/ be less than or equal to the size of @dstBuffer@
+--     minus @dstOffset@
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstOffset@ /must/ be a multiple of @4@
+--
+-- -   @dataSize@ /must/ be less than or equal to @65536@
+--
+-- -   @dataSize@ /must/ be a multiple of @4@
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then
+--     @dstBuffer@ /must/ not be a protected buffer
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@
+--     /must/ not be an unprotected buffer
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @dataSize@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdUpdateBuffer :: forall io . MonadIO io => CommandBuffer -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("dataSize" ::: DeviceSize) -> ("data" ::: Ptr ()) -> io ()
+cmdUpdateBuffer commandBuffer dstBuffer dstOffset dataSize data' = liftIO $ do
+  let vkCmdUpdateBufferPtr = pVkCmdUpdateBuffer (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdUpdateBufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdUpdateBuffer is null" Nothing Nothing
+  let vkCmdUpdateBuffer' = mkVkCmdUpdateBuffer vkCmdUpdateBufferPtr
+  vkCmdUpdateBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (dataSize) (data')
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdFillBuffer
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()
+
+-- | vkCmdFillBuffer - Fill a region of a buffer with a fixed value
+--
+-- = 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 'Vulkan.Core10.APIConstants.WHOLE_SIZE' to fill
+--     the range from @offset@ to the end of the buffer. If
+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE' is used and the remaining
+--     size of the buffer is not a multiple of 4, then the nearest smaller
+--     multiple is used.
+--
+-- -   @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
+--
+-- 'cmdFillBuffer' is treated as “transfer” operation for the purposes of
+-- synchronization barriers. The
+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
+-- /must/ be specified in @usage@ of
+-- 'Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer to be
+-- compatible with 'cmdFillBuffer'.
+--
+-- == Valid Usage
+--
+-- -   @dstOffset@ /must/ be less than the size of @dstBuffer@
+--
+-- -   @dstOffset@ /must/ be a multiple of @4@
+--
+-- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @size@ /must/ be greater than @0@
+--
+-- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @size@ /must/ be less than or equal to the size of @dstBuffer@ minus
+--     @dstOffset@
+--
+-- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @size@ /must/ be a multiple of @4@
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then
+--     @dstBuffer@ /must/ not be a protected buffer
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@
+--     /must/ not be an unprotected buffer
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics or compute
+--     operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdFillBuffer :: forall io . MonadIO io => CommandBuffer -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> DeviceSize -> ("data" ::: Word32) -> io ()
+cmdFillBuffer commandBuffer dstBuffer dstOffset size data' = liftIO $ do
+  let vkCmdFillBufferPtr = pVkCmdFillBuffer (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdFillBufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdFillBuffer is null" Nothing Nothing
+  let vkCmdFillBuffer' = mkVkCmdFillBuffer vkCmdFillBufferPtr
+  vkCmdFillBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (size) (data')
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdClearColorImage
+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()
+
+-- | vkCmdClearColorImage - Clear regions of a color image
+--
+-- = 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
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.
+--
+-- -   @pColor@ is a pointer to a
+--     'Vulkan.Core10.SharedTypes.ClearColorValue' structure containing the
+--     values that the image subresource ranges will be cleared to (see
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>
+--     below).
+--
+-- -   @rangeCount@ is the number of image subresource range structures in
+--     @pRanges@.
+--
+-- -   @pRanges@ is a pointer to an array of
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceRange' structures
+--     describing a range of mipmap levels, array layers, and aspects to be
+--     cleared, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.
+--
+-- = Description
+--
+-- Each specified range in @pRanges@ is cleared to the value specified by
+-- @pColor@.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @image@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
+--
+-- -   @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   @image@ /must/ not use a format listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
+--
+-- -   If @image@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @imageLayout@ /must/ specify the layout of the image subresource
+--     ranges of @image@ specified in @pRanges@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @imageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
+--
+-- -   The 'Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@aspectMask@
+--     members of the elements of the @pRanges@ array /must/ each only
+--     include
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
+--
+-- -   The
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@baseMipLevel@
+--     members of the elements of the @pRanges@ array /must/ each be less
+--     than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
+--
+-- -   For each 'Vulkan.Core10.SharedTypes.ImageSubresourceRange' element
+--     of @pRanges@, if the @levelCount@ member is not
+--     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then
+--     @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@
+--     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
+--     created
+--
+-- -   The
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@baseArrayLayer@
+--     members of the elements of the @pRanges@ array /must/ each be less
+--     than the @arrayLayers@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
+--
+-- -   For each 'Vulkan.Core10.SharedTypes.ImageSubresourceRange' element
+--     of @pRanges@, if the @layerCount@ member is not
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then
+--     @baseArrayLayer@ + @layerCount@ /must/ be less than the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @image@ was created
+--
+-- -   @image@ /must/ not have a compressed or depth\/stencil format
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @image@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @image@
+--     /must/ not be an unprotected image
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @imageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @pColor@ /must/ be a valid pointer to a valid
+--     'Vulkan.Core10.SharedTypes.ClearColorValue' union
+--
+-- -   @pRanges@ /must/ be a valid pointer to an array of @rangeCount@
+--     valid 'Vulkan.Core10.SharedTypes.ImageSubresourceRange' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @rangeCount@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and @image@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.ClearColorValue',
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.SharedTypes.ImageSubresourceRange'
+cmdClearColorImage :: forall io . MonadIO io => CommandBuffer -> Image -> ImageLayout -> ClearColorValue -> ("ranges" ::: Vector ImageSubresourceRange) -> io ()
+cmdClearColorImage commandBuffer image imageLayout color ranges = liftIO . evalContT $ do
+  let vkCmdClearColorImagePtr = pVkCmdClearColorImage (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdClearColorImagePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearColorImage is null" Nothing Nothing
+  let vkCmdClearColorImage' = mkVkCmdClearColorImage vkCmdClearColorImagePtr
+  pColor <- ContT $ withCStruct (color)
+  pPRanges <- ContT $ allocaBytesAligned @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e) . ($ ())) (ranges)
+  lift $ vkCmdClearColorImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pColor ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdClearDepthStencilImage
+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()
+
+-- | vkCmdClearDepthStencilImage - Fill regions of a combined depth\/stencil
+-- image
+--
+-- = 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
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.
+--
+-- -   @pDepthStencil@ is a pointer to a
+--     'Vulkan.Core10.SharedTypes.ClearDepthStencilValue' structure
+--     containing the values that the depth and stencil image subresource
+--     ranges will be cleared to (see
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>
+--     below).
+--
+-- -   @rangeCount@ is the number of image subresource range structures in
+--     @pRanges@.
+--
+-- -   @pRanges@ is a pointer to an array of
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceRange' structures
+--     describing a range of mipmap levels, array layers, and aspects to be
+--     cleared, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @image@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'
+--
+-- -   If the @aspect@ member of any element of @pRanges@ includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     and @image@ was created with
+--     <VkImageStencilUsageCreateInfo.html separate stencil usage>,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
+--     used to create @image@
+--
+-- -   If the @aspect@ member of any element of @pRanges@ includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     and @image@ was not created with
+--     <VkImageStencilUsageCreateInfo.html separate stencil usage>,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create
+--     @image@
+--
+-- -   If the @aspect@ member of any element of @pRanges@ includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     /must/ have been included in the
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create
+--     @image@
+--
+-- -   If @image@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @imageLayout@ /must/ specify the layout of the image subresource
+--     ranges of @image@ specified in @pRanges@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @imageLayout@ /must/ be either of
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   The 'Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@aspectMask@
+--     member of each element of the @pRanges@ array /must/ not include
+--     bits other than
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--
+-- -   If the @image@’s format does not have a stencil component, then the
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@aspectMask@
+--     member of each element of the @pRanges@ array /must/ not include the
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--     bit
+--
+-- -   If the @image@’s format does not have a depth component, then the
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@aspectMask@
+--     member of each element of the @pRanges@ array /must/ not include the
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' bit
+--
+-- -   The
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@baseMipLevel@
+--     members of the elements of the @pRanges@ array /must/ each be less
+--     than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
+--
+-- -   For each 'Vulkan.Core10.SharedTypes.ImageSubresourceRange' element
+--     of @pRanges@, if the @levelCount@ member is not
+--     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then
+--     @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@
+--     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
+--     created
+--
+-- -   The
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceRange'::@baseArrayLayer@
+--     members of the elements of the @pRanges@ array /must/ each be less
+--     than the @arrayLayers@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
+--
+-- -   For each 'Vulkan.Core10.SharedTypes.ImageSubresourceRange' element
+--     of @pRanges@, if the @layerCount@ member is not
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then
+--     @baseArrayLayer@ + @layerCount@ /must/ be less than the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @image@ was created
+--
+-- -   @image@ /must/ have a depth\/stencil format
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @image@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @image@
+--     /must/ not be an unprotected image
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @imageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @pDepthStencil@ /must/ be a valid pointer to a valid
+--     'Vulkan.Core10.SharedTypes.ClearDepthStencilValue' structure
+--
+-- -   @pRanges@ /must/ be a valid pointer to an array of @rangeCount@
+--     valid 'Vulkan.Core10.SharedTypes.ImageSubresourceRange' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @rangeCount@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and @image@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.ClearDepthStencilValue',
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.SharedTypes.ImageSubresourceRange'
+cmdClearDepthStencilImage :: forall io . MonadIO io => CommandBuffer -> Image -> ImageLayout -> ClearDepthStencilValue -> ("ranges" ::: Vector ImageSubresourceRange) -> io ()
+cmdClearDepthStencilImage commandBuffer image imageLayout depthStencil ranges = liftIO . evalContT $ do
+  let vkCmdClearDepthStencilImagePtr = pVkCmdClearDepthStencilImage (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdClearDepthStencilImagePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearDepthStencilImage is null" Nothing Nothing
+  let vkCmdClearDepthStencilImage' = mkVkCmdClearDepthStencilImage vkCmdClearDepthStencilImagePtr
+  pDepthStencil <- ContT $ withCStruct (depthStencil)
+  pPRanges <- ContT $ allocaBytesAligned @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e) . ($ ())) (ranges)
+  lift $ vkCmdClearDepthStencilImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pDepthStencil ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdClearAttachments
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()
+
+-- | vkCmdClearAttachments - Clear regions within bound framebuffer
+-- attachments
+--
+-- = 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 'ClearAttachment'
+--     structures defining the attachments to clear and the clear values to
+--     use. If any attachment to be cleared in the current subpass is
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the clear has
+--     no effect on that attachment.
+--
+-- -   @rectCount@ is the number of entries in the @pRects@ array.
+--
+-- -   @pRects@ is a pointer to an array of 'ClearRect' structures defining
+--     regions within each selected attachment to clear.
+--
+-- = Description
+--
+-- 'cmdClearAttachments' /can/ clear multiple regions of each attachment
+-- used in the current subpass of a render pass instance. This command
+-- /must/ be called only inside a render pass instance, and implicitly
+-- selects the images to clear based on the current framebuffer attachments
+-- and the command parameters.
+--
+-- If the render pass has a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>,
+-- clears follow the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops operations of fragment density maps>
+-- as if each clear region was a primitive which generates fragments. The
+-- clear color is applied to all pixels inside each fragment’s area
+-- regardless if the pixels lie outside of the clear region. Clears /may/
+-- have a different set of supported fragment areas than draws.
+--
+-- Unlike other
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>,
+-- 'cmdClearAttachments' executes as a drawing command, rather than a
+-- transfer command, with writes performed by it executing in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primrast-order rasterization order>.
+-- Clears to color attachments are executed as color attachment writes, by
+-- the
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'
+-- stage. Clears to depth\/stencil attachments are executed as
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth writes>
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil writes>
+-- by the
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT'
+-- and
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'
+-- stages.
+--
+-- == Valid Usage
+--
+-- -   If the @aspectMask@ member of any element of @pAttachments@ contains
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
+--     then the @colorAttachment@ member of that element /must/ either
+--     refer to a color attachment which is
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ be a valid
+--     color attachment
+--
+-- -   If the @aspectMask@ member of any element of @pAttachments@ contains
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',
+--     then the current subpass\' depth\/stencil attachment /must/ either
+--     be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ have a
+--     depth component
+--
+-- -   If the @aspectMask@ member of any element of @pAttachments@ contains
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     then the current subpass\' depth\/stencil attachment /must/ either
+--     be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ have a
+--     stencil component
+--
+-- -   The @rect@ member of each element of @pRects@ /must/ have an
+--     @extent.width@ greater than @0@
+--
+-- -   The @rect@ member of each element of @pRects@ /must/ have an
+--     @extent.height@ greater than @0@
+--
+-- -   The rectangular region specified by each element of @pRects@ /must/
+--     be contained within the render area of the current render pass
+--     instance
+--
+-- -   The layers specified by each element of @pRects@ /must/ be contained
+--     within every attachment that @pAttachments@ refers to
+--
+-- -   The @layerCount@ member of each element of @pRects@ /must/ not be
+--     @0@
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then each
+--     attachment to be cleared /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then each
+--     attachment to be cleared /must/ not be an unprotected image
+--
+-- -   If the render pass instance this is recorded in uses multiview, then
+--     @baseArrayLayer@ /must/ be zero and @layerCount@ /must/ be one
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pAttachments@ /must/ be a valid pointer to an array of
+--     @attachmentCount@ valid 'ClearAttachment' structures
+--
+-- -   @pRects@ /must/ be a valid pointer to an array of @rectCount@
+--     'ClearRect' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   @attachmentCount@ /must/ be greater than @0@
+--
+-- -   @rectCount@ /must/ be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'ClearAttachment', 'ClearRect', 'Vulkan.Core10.Handles.CommandBuffer'
+cmdClearAttachments :: forall io . MonadIO io => CommandBuffer -> ("attachments" ::: Vector ClearAttachment) -> ("rects" ::: Vector ClearRect) -> io ()
+cmdClearAttachments commandBuffer attachments rects = liftIO . evalContT $ do
+  let vkCmdClearAttachmentsPtr = pVkCmdClearAttachments (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdClearAttachmentsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearAttachments is null" Nothing Nothing
+  let vkCmdClearAttachments' = mkVkCmdClearAttachments vkCmdClearAttachmentsPtr
+  pPAttachments <- ContT $ allocaBytesAligned @ClearAttachment ((Data.Vector.length (attachments)) * 24) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments `plusPtr` (24 * (i)) :: Ptr ClearAttachment) (e) . ($ ())) (attachments)
+  pPRects <- ContT $ allocaBytesAligned @ClearRect ((Data.Vector.length (rects)) * 24) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRects `plusPtr` (24 * (i)) :: Ptr ClearRect) (e) . ($ ())) (rects)
+  lift $ vkCmdClearAttachments' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32)) (pPAttachments) ((fromIntegral (Data.Vector.length $ (rects)) :: Word32)) (pPRects)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdResolveImage
+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()
+
+-- | vkCmdResolveImage - Resolve regions of an image
+--
+-- = 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 'ImageResolve' structures
+--     specifying the regions to resolve.
+--
+-- = Description
+--
+-- During the resolve the samples corresponding to each pixel location in
+-- the source are converted to a single sample before being written to the
+-- destination. If the source formats are floating-point or normalized
+-- types, the sample values for each pixel are resolved in an
+-- implementation-dependent manner. If the source formats are integer
+-- types, a single sample’s value is selected for each pixel.
+--
+-- @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
+-- in texels of the sub-regions of the source and destination image data.
+-- @extent@ is the size in texels of the source image to resolve in
+-- @width@, @height@ and @depth@.
+--
+-- Resolves are done layer by layer starting with @baseArrayLayer@ member
+-- of @srcSubresource@ for the source and @dstSubresource@ for the
+-- destination. @layerCount@ layers are resolved to the destination image.
+--
+-- == Valid Usage
+--
+-- -   The source region specified by each element of @pRegions@ /must/ be
+--     a region that is contained within @srcImage@
+--
+-- -   The destination region specified by each element of @pRegions@
+--     /must/ be a region that is contained within @dstImage@
+--
+-- -   The union of all source regions, and the union of all destination
+--     regions, specified by the elements of @pRegions@, /must/ not overlap
+--     in memory
+--
+-- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @srcImage@ /must/ have a sample count equal to any valid sample
+--     count value other than
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstImage@ /must/ have a sample count equal to
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   @srcImageLayout@ /must/ specify the layout of the image subresources
+--     of @srcImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @srcImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   @dstImageLayout@ /must/ specify the layout of the image subresources
+--     of @dstImage@ specified in @pRegions@ at the time this command is
+--     executed on a 'Vulkan.Core10.Handles.Device'
+--
+-- -   @dstImageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     of @dstImage@ /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--
+-- -   @srcImage@ and @dstImage@ /must/ have been created with the same
+--     image format
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@
+--     /must/ not be a protected image
+--
+-- -   If @commandBuffer@ is a protected command buffer, then @dstImage@
+--     /must/ not be an unprotected image
+--
+-- -   The @srcSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created
+--
+-- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created
+--
+-- -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @srcImage@ was created
+--
+-- -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
+--     each element of @pRegions@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @dstImage@ was created
+--
+-- -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@
+--     containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid 'ImageResolve' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @regionCount@ /must/ be greater than @0@
+--
+-- -   Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout', 'ImageResolve'
+cmdResolveImage :: forall io . MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageResolve) -> io ()
+cmdResolveImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do
+  let vkCmdResolveImagePtr = pVkCmdResolveImage (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdResolveImagePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResolveImage is null" Nothing Nothing
+  let vkCmdResolveImage' = mkVkCmdResolveImage vkCmdResolveImagePtr
+  pPRegions <- ContT $ allocaBytesAligned @ImageResolve ((Data.Vector.length (regions)) * 68) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageResolve) (e) . ($ ())) (regions)
+  lift $ vkCmdResolveImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetEvent
+  :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()
+
+-- | vkCmdSetEvent - Set an event object to signaled state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @event@ is the event that will be signaled.
+--
+-- -   @stageMask@ specifies the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>
+--     used to determine when the @event@ is signaled.
+--
+-- = Description
+--
+-- When 'cmdSetEvent' is submitted to a queue, it defines an execution
+-- dependency on commands that were submitted before it, and defines an
+-- event signal operation which sets the event to the signaled state.
+--
+-- The first
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
+-- includes all commands that occur earlier in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
+-- The synchronization scope is limited to operations on the pipeline
+-- stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
+-- specified by @stageMask@.
+--
+-- The second
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
+-- includes only the event signal operation.
+--
+-- If @event@ is already in the signaled state when 'cmdSetEvent' is
+-- executed on the device, then 'cmdSetEvent' has no effect, no event
+-- signal operation occurs, and no execution dependency is generated.
+--
+-- == Valid Usage
+--
+-- -   @stageMask@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   @commandBuffer@’s current device mask /must/ include exactly one
+--     physical device
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @event@ /must/ be a valid 'Vulkan.Core10.Handles.Event' handle
+--
+-- -   @stageMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   @stageMask@ /must/ not be @0@
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Both of @commandBuffer@, and @event@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'
+cmdSetEvent :: forall io . MonadIO io => CommandBuffer -> Event -> ("stageMask" ::: PipelineStageFlags) -> io ()
+cmdSetEvent commandBuffer event stageMask = liftIO $ do
+  let vkCmdSetEventPtr = pVkCmdSetEvent (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdSetEventPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetEvent is null" Nothing Nothing
+  let vkCmdSetEvent' = mkVkCmdSetEvent vkCmdSetEventPtr
+  vkCmdSetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdResetEvent
+  :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()
+
+-- | vkCmdResetEvent - Reset an event object to non-signaled state
+--
+-- = 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
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     specifying the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>
+--     used to determine when the @event@ is unsignaled.
+--
+-- = Description
+--
+-- When 'cmdResetEvent' is submitted to a queue, it defines an execution
+-- dependency on commands that were submitted before it, and defines an
+-- event unsignal operation which resets the event to the unsignaled state.
+--
+-- The first
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
+-- includes all commands that occur earlier in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
+-- The synchronization scope is limited to operations on the pipeline
+-- stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
+-- specified by @stageMask@.
+--
+-- The second
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
+-- includes only the event unsignal operation.
+--
+-- If @event@ is already in the unsignaled state when 'cmdResetEvent' is
+-- executed on the device, then 'cmdResetEvent' has no effect, no event
+-- unsignal operation occurs, and no execution dependency is generated.
+--
+-- == Valid Usage
+--
+-- -   @stageMask@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   When this command executes, @event@ /must/ not be waited on by a
+--     'cmdWaitEvents' command that is currently executing
+--
+-- -   @commandBuffer@’s current device mask /must/ include exactly one
+--     physical device
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @event@ /must/ be a valid 'Vulkan.Core10.Handles.Event' handle
+--
+-- -   @stageMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   @stageMask@ /must/ not be @0@
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Both of @commandBuffer@, and @event@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'
+cmdResetEvent :: forall io . MonadIO io => CommandBuffer -> Event -> ("stageMask" ::: PipelineStageFlags) -> io ()
+cmdResetEvent commandBuffer event stageMask = liftIO $ do
+  let vkCmdResetEventPtr = pVkCmdResetEvent (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdResetEventPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResetEvent is null" Nothing Nothing
+  let vkCmdResetEvent' = mkVkCmdResetEvent vkCmdResetEventPtr
+  vkCmdResetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdWaitEvents
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (ImageMemoryBarrier a) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (ImageMemoryBarrier a) -> IO ()
+
+-- | vkCmdWaitEvents - Wait for one or more events and insert a set of memory
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @eventCount@ is the length of the @pEvents@ array.
+--
+-- -   @pEvents@ is a pointer to an array of event object handles to wait
+--     on.
+--
+-- -   @srcStageMask@ is a bitmask of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     specifying the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.
+--
+-- -   @dstStageMask@ is a bitmask of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     specifying the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.
+--
+-- -   @memoryBarrierCount@ is the length of the @pMemoryBarriers@ array.
+--
+-- -   @pMemoryBarriers@ is a pointer to an array of
+--     'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.
+--
+-- -   @bufferMemoryBarrierCount@ is the length of the
+--     @pBufferMemoryBarriers@ array.
+--
+-- -   @pBufferMemoryBarriers@ is a pointer to an array of
+--     'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.
+--
+-- -   @imageMemoryBarrierCount@ is the length of the
+--     @pImageMemoryBarriers@ array.
+--
+-- -   @pImageMemoryBarriers@ is a pointer to an array of
+--     'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.
+--
+-- = Description
+--
+-- When 'cmdWaitEvents' is submitted to a queue, it defines a memory
+-- dependency between prior event signal operations on the same queue or
+-- the host, and subsequent commands. 'cmdWaitEvents' /must/ not be used to
+-- wait on event signal operations occurring on other queues.
+--
+-- The first synchronization scope only includes event signal operations
+-- that operate on members of @pEvents@, and the operations that
+-- happened-before the event signal operations. Event signal operations
+-- performed by 'cmdSetEvent' that occur earlier in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
+-- are included in the first synchronization scope, if the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>
+-- pipeline stage in their @stageMask@ parameter is
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>
+-- than or equal to the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>
+-- pipeline stage in @srcStageMask@. Event signal operations performed by
+-- 'Vulkan.Core10.Event.setEvent' are only included in the first
+-- synchronization scope if
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT' is
+-- included in @srcStageMask@.
+--
+-- The second
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
+-- includes all commands that occur later in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
+-- The second synchronization scope is limited to operations on the
+-- pipeline stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
+-- specified by @dstStageMask@.
+--
+-- The first
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access in the pipeline stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
+-- specified by @srcStageMask@. Within that, the first access scope only
+-- includes the first access scopes defined by elements of the
+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
+-- arrays, which each define a set of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.
+-- If no memory barriers are specified, then the first access scope
+-- includes no accesses.
+--
+-- The second
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access in the pipeline stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
+-- specified by @dstStageMask@. Within that, the second access scope only
+-- includes the second access scopes defined by elements of the
+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
+-- arrays, which each define a set of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.
+-- If no memory barriers are specified, then the second access scope
+-- includes no accesses.
+--
+-- Note
+--
+-- 'cmdWaitEvents' is used with 'cmdSetEvent' to define a memory dependency
+-- between two sets of action commands, roughly in the same way as pipeline
+-- barriers, but split into two commands such that work between the two
+-- /may/ execute unhindered.
+--
+-- Unlike 'cmdPipelineBarrier', a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
+-- /cannot/ be performed using 'cmdWaitEvents'.
+--
+-- Note
+--
+-- Applications /should/ be careful to avoid race conditions when using
+-- events. There is no direct ordering guarantee between a 'cmdResetEvent'
+-- command and a 'cmdWaitEvents' command submitted after it, 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 'cmdSetEvent' with any of the members of
+--     @pEvents@ and
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'
+--     if any of the members of @pEvents@ was set using
+--     'Vulkan.Core10.Event.setEvent'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   If @pEvents@ includes one or more events that will be signaled by
+--     'Vulkan.Core10.Event.setEvent' after @commandBuffer@ has been
+--     submitted to a queue, then 'cmdWaitEvents' /must/ not be called
+--     inside a render pass instance
+--
+-- -   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
+--     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was
+--     used to create the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>
+--
+-- -   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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   The @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any
+--     element of @pBufferMemoryBarriers@ or @pImageMemoryBarriers@ /must/
+--     be equal
+--
+-- -   @commandBuffer@’s current device mask /must/ include exactly one
+--     physical device
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- -   The @srcAccessMask@ member of each element of @pMemoryBarriers@
+--     /must/ only include access flags that are supported by one or more
+--     of the pipeline stages in @srcStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   The @dstAccessMask@ member of each element of @pMemoryBarriers@
+--     /must/ only include access flags that are supported by one or more
+--     of the pipeline stages in @dstStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   The @srcAccessMask@ member of each element of
+--     @pBufferMemoryBarriers@ /must/ only include access flags that are
+--     supported by one or more of the pipeline stages in @srcStageMask@,
+--     as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   The @dstAccessMask@ member of each element of
+--     @pBufferMemoryBarriers@ /must/ only include access flags that are
+--     supported by one or more of the pipeline stages in @dstStageMask@,
+--     as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   The @srcAccessMask@ member of each element of @pImageMemoryBarriers@
+--     /must/ only include access flags that are supported by one or more
+--     of the pipeline stages in @srcStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   The @dstAccessMask@ member of any element of @pImageMemoryBarriers@
+--     /must/ only include access flags that are supported by one or more
+--     of the pipeline stages in @dstStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pEvents@ /must/ be a valid pointer to an array of @eventCount@
+--     valid 'Vulkan.Core10.Handles.Event' handles
+--
+-- -   @srcStageMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   @srcStageMask@ /must/ not be @0@
+--
+-- -   @dstStageMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   @dstStageMask@ /must/ not be @0@
+--
+-- -   If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a
+--     valid pointer to an array of @memoryBarrierCount@ valid
+--     'Vulkan.Core10.OtherTypes.MemoryBarrier' structures
+--
+-- -   If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
+--     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
+--     valid 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures
+--
+-- -   If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@
+--     /must/ be a valid pointer to an array of @imageMemoryBarrierCount@
+--     valid 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   @eventCount@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and the elements of @pEvents@ /must/ have
+--     been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',
+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier',
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'
+cmdWaitEvents :: forall io . MonadIO io => CommandBuffer -> ("events" ::: Vector Event) -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> ("memoryBarriers" ::: Vector MemoryBarrier) -> ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier) -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) -> io ()
+cmdWaitEvents commandBuffer events srcStageMask dstStageMask memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do
+  let vkCmdWaitEventsPtr = pVkCmdWaitEvents (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdWaitEventsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWaitEvents is null" Nothing Nothing
+  let vkCmdWaitEvents' = mkVkCmdWaitEvents vkCmdWaitEventsPtr
+  pPEvents <- ContT $ allocaBytesAligned @Event ((Data.Vector.length (events)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPEvents `plusPtr` (8 * (i)) :: Ptr Event) (e)) (events)
+  pPMemoryBarriers <- ContT $ allocaBytesAligned @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e) . ($ ())) (memoryBarriers)
+  pPBufferMemoryBarriers <- ContT $ allocaBytesAligned @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e) . ($ ())) (bufferMemoryBarriers)
+  pPImageMemoryBarriers <- ContT $ allocaBytesAligned @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _))) (e) . ($ ())) (imageMemoryBarriers)
+  lift $ vkCmdWaitEvents' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (events)) :: Word32)) (pPEvents) (srcStageMask) (dstStageMask) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (pPImageMemoryBarriers)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdPipelineBarrier
+  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (ImageMemoryBarrier a) -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (ImageMemoryBarrier a) -> IO ()
+
+-- | vkCmdPipelineBarrier - Insert a memory dependency
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @srcStageMask@ is a bitmask of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     specifying the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>.
+--
+-- -   @dstStageMask@ is a bitmask of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     specifying the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>.
+--
+-- -   @dependencyFlags@ is a bitmask of
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits'
+--     specifying how execution and memory dependencies are formed.
+--
+-- -   @memoryBarrierCount@ is the length of the @pMemoryBarriers@ array.
+--
+-- -   @pMemoryBarriers@ is a pointer to an array of
+--     'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.
+--
+-- -   @bufferMemoryBarrierCount@ is the length of the
+--     @pBufferMemoryBarriers@ array.
+--
+-- -   @pBufferMemoryBarriers@ is a pointer to an array of
+--     'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.
+--
+-- -   @imageMemoryBarrierCount@ is the length of the
+--     @pImageMemoryBarriers@ array.
+--
+-- -   @pImageMemoryBarriers@ is a pointer to an array of
+--     'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.
+--
+-- = Description
+--
+-- When 'cmdPipelineBarrier' is submitted to a queue, it defines a memory
+-- dependency between commands that were submitted before it, and those
+-- submitted after it.
+--
+-- If 'cmdPipelineBarrier' was recorded outside a render pass instance, the
+-- first
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
+-- includes all commands that occur earlier in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
+-- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the
+-- first synchronization scope includes only commands that occur earlier in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
+-- within the same subpass. In either case, the first synchronization scope
+-- is limited to operations on the pipeline stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
+-- specified by @srcStageMask@.
+--
+-- If 'cmdPipelineBarrier' was recorded outside a render pass instance, the
+-- second
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
+-- includes all commands that occur later in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
+-- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the
+-- second synchronization scope includes only commands that occur later in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
+-- within the same subpass. In either case, the second synchronization
+-- scope is limited to operations on the pipeline stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
+-- specified by @dstStageMask@.
+--
+-- The first
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access in the pipeline stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
+-- specified by @srcStageMask@. Within that, the first access scope only
+-- includes the first access scopes defined by elements of the
+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
+-- arrays, which each define a set of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.
+-- If no memory barriers are specified, then the first access scope
+-- includes no accesses.
+--
+-- The second
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access in the pipeline stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
+-- specified by @dstStageMask@. Within that, the second access scope only
+-- includes the second access scopes defined by elements of the
+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
+-- arrays, which each define a set of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.
+-- If no memory barriers are specified, then the second access scope
+-- includes no accesses.
+--
+-- If @dependencyFlags@ includes
+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT', then
+-- any dependency between
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space>
+-- pipeline stages is
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-local>
+-- - otherwise it is
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-global>.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   If 'cmdPipelineBarrier' is called within a render pass instance, the
+--     render pass /must/ have been created with at least one
+--     'Vulkan.Core10.Pass.SubpassDependency' instance in
+--     'Vulkan.Core10.Pass.RenderPassCreateInfo'::@pDependencies@ that
+--     expresses a dependency from the current subpass to itself, and for
+--     which @srcStageMask@ contains a subset of the bit values in
+--     'Vulkan.Core10.Pass.SubpassDependency'::@srcStageMask@,
+--     @dstStageMask@ contains a subset of the bit values in
+--     'Vulkan.Core10.Pass.SubpassDependency'::@dstStageMask@,
+--     @dependencyFlags@ is equal to
+--     'Vulkan.Core10.Pass.SubpassDependency'::@dependencyFlags@,
+--     @srcAccessMask@ member of each element of @pMemoryBarriers@ and
+--     @pImageMemoryBarriers@ contains a subset of the bit values in
+--     'Vulkan.Core10.Pass.SubpassDependency'::@srcAccessMask@, and
+--     @dstAccessMask@ member of each element of @pMemoryBarriers@ and
+--     @pImageMemoryBarriers@ contains a subset of the bit values in
+--     'Vulkan.Core10.Pass.SubpassDependency'::@dstAccessMask@
+--
+-- -   If 'cmdPipelineBarrier' is called within a render pass instance,
+--     @bufferMemoryBarrierCount@ /must/ be @0@
+--
+-- -   If 'cmdPipelineBarrier' 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
+--     'Vulkan.Core10.Pass.SubpassDescription' instance or by the
+--     @pDepthStencilResolveAttachment@ member of the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'
+--     structure that the current subpass was created with
+--
+-- -   If 'cmdPipelineBarrier' 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
+--     'Vulkan.Core10.Pass.SubpassDescription' instance or by the
+--     @pDepthStencilResolveAttachment@ member of the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'
+--     structure that the current subpass was created with, that refers to
+--     the same @image@
+--
+-- -   If 'cmdPipelineBarrier' is called within a render pass instance, the
+--     @oldLayout@ and @newLayout@ members of an element of
+--     @pImageMemoryBarriers@ /must/ be equal
+--
+-- -   If 'cmdPipelineBarrier' is called within a render pass instance, the
+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any
+--     element of @pImageMemoryBarriers@ /must/ be
+--     'Vulkan.Core10.APIConstants.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
+--     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was
+--     used to create the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>
+--
+-- -   If 'cmdPipelineBarrier' is called outside of a render pass instance,
+--     @dependencyFlags@ /must/ not include
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- -   The @srcAccessMask@ member of each element of @pMemoryBarriers@
+--     /must/ only include access flags that are supported by one or more
+--     of the pipeline stages in @srcStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   The @dstAccessMask@ member of each element of @pMemoryBarriers@
+--     /must/ only include access flags that are supported by one or more
+--     of the pipeline stages in @dstStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   For any element of @pBufferMemoryBarriers@, if its
+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,
+--     or if its @srcQueueFamilyIndex@ is the queue family index that was
+--     used to create the command pool that @commandBuffer@ was allocated
+--     from, then its @srcAccessMask@ member /must/ only contain access
+--     flags that are supported by one or more of the pipeline stages in
+--     @srcStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   For any element of @pBufferMemoryBarriers@, if its
+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,
+--     or if its @dstQueueFamilyIndex@ is the queue family index that was
+--     used to create the command pool that @commandBuffer@ was allocated
+--     from, then its @dstAccessMask@ member /must/ only contain access
+--     flags that are supported by one or more of the pipeline stages in
+--     @dstStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   For any element of @pImageMemoryBarriers@, if its
+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,
+--     or if its @srcQueueFamilyIndex@ is the queue family index that was
+--     used to create the command pool that @commandBuffer@ was allocated
+--     from, then its @srcAccessMask@ member /must/ only contain access
+--     flags that are supported by one or more of the pipeline stages in
+--     @srcStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   For any element of @pImageMemoryBarriers@, if its
+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,
+--     or if its @dstQueueFamilyIndex@ is the queue family index that was
+--     used to create the command pool that @commandBuffer@ was allocated
+--     from, then its @dstAccessMask@ member /must/ only contain access
+--     flags that are supported by one or more of the pipeline stages in
+--     @dstStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @srcStageMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   @srcStageMask@ /must/ not be @0@
+--
+-- -   @dstStageMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   @dstStageMask@ /must/ not be @0@
+--
+-- -   @dependencyFlags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' values
+--
+-- -   If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a
+--     valid pointer to an array of @memoryBarrierCount@ valid
+--     'Vulkan.Core10.OtherTypes.MemoryBarrier' structures
+--
+-- -   If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
+--     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
+--     valid 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures
+--
+-- -   If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@
+--     /must/ be a valid pointer to an array of @imageMemoryBarrierCount@
+--     valid 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',
+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier',
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'
+cmdPipelineBarrier :: forall io . MonadIO io => CommandBuffer -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> DependencyFlags -> ("memoryBarriers" ::: Vector MemoryBarrier) -> ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier) -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) -> io ()
+cmdPipelineBarrier commandBuffer srcStageMask dstStageMask dependencyFlags memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do
+  let vkCmdPipelineBarrierPtr = pVkCmdPipelineBarrier (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdPipelineBarrierPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPipelineBarrier is null" Nothing Nothing
+  let vkCmdPipelineBarrier' = mkVkCmdPipelineBarrier vkCmdPipelineBarrierPtr
+  pPMemoryBarriers <- ContT $ allocaBytesAligned @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e) . ($ ())) (memoryBarriers)
+  pPBufferMemoryBarriers <- ContT $ allocaBytesAligned @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e) . ($ ())) (bufferMemoryBarriers)
+  pPImageMemoryBarriers <- ContT $ allocaBytesAligned @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _))) (e) . ($ ())) (imageMemoryBarriers)
+  lift $ vkCmdPipelineBarrier' (commandBufferHandle (commandBuffer)) (srcStageMask) (dstStageMask) (dependencyFlags) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (pPImageMemoryBarriers)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBeginQuery
+  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()
+
+-- | vkCmdBeginQuery - Begin a query
+--
+-- = 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
+--     'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'
+--     specifying constraints on the types of queries that /can/ be
+--     performed.
+--
+-- = Description
+--
+-- If the @queryType@ of the pool is
+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' and @flags@
+-- contains
+-- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT', an
+-- implementation /must/ return a result that matches the actual number of
+-- samples passed. This is described in more detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-occlusion Occlusion Queries>.
+--
+-- Calling 'cmdBeginQuery' is equivalent to calling
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT'
+-- with the @index@ parameter set to zero.
+--
+-- After beginning a query, that query is considered /active/ within the
+-- command buffer it was called in until that same query is ended. Queries
+-- active in a primary command buffer when secondary command buffers are
+-- executed are considered active for those secondary command buffers.
+--
+-- == Valid Usage
+--
+-- -   @queryPool@ /must/ have been created with a @queryType@ that differs
+--     from that of any queries that are
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
+--     within @commandBuffer@
+--
+-- -   All queries used by the command /must/ be unavailable
+--
+-- -   The @queryType@ used to create @queryPool@ /must/ not be
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries>
+--     feature is not enabled, or the @queryType@ used to create
+--     @queryPool@ was not
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', @flags@ /must/
+--     not contain
+--     'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'
+--
+-- -   @query@ /must/ be less than the number of queries in @queryPool@
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', the
+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and
+--     any of the @pipelineStatistics@ indicate graphics operations, the
+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and
+--     any of the @pipelineStatistics@ indicate compute operations, the
+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If called within a render pass instance, the sum of @query@ and the
+--     number of bits set in the current subpass’s view mask /must/ be less
+--     than or equal to the number of queries in @queryPool@
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     then
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackQueries@
+--     /must/ be supported
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#profiling-lock profiling lock>
+--     /must/ have been held before
+--     'Vulkan.Core10.CommandBuffer.beginCommandBuffer' was called on
+--     @commandBuffer@
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and
+--     one of the counters used to create @queryPool@ was
+--     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',
+--     the query begin /must/ be the first recorded command in
+--     @commandBuffer@
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and
+--     one of the counters used to create @queryPool@ was
+--     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',
+--     the begin command /must/ not be recorded within a render pass
+--     instance
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and
+--     another query pool with a @queryType@
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' has
+--     been used within @commandBuffer@, its parent primary command buffer
+--     or secondary command buffer recorded within the same parent primary
+--     command buffer as @commandBuffer@, the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-features-performanceCounterMultipleQueryPools performanceCounterMultipleQueryPools>
+--     feature /must/ be enabled
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     this command /must/ not be recorded in a command buffer that, either
+--     directly or through secondary command buffers, also contains a
+--     'cmdResetQueryPool' command affecting the same query
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'
+--     values
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlags',
+-- 'Vulkan.Core10.Handles.QueryPool'
+cmdBeginQuery :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> io ()
+cmdBeginQuery commandBuffer queryPool query flags = liftIO $ do
+  let vkCmdBeginQueryPtr = pVkCmdBeginQuery (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdBeginQueryPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginQuery is null" Nothing Nothing
+  let vkCmdBeginQuery' = mkVkCmdBeginQuery vkCmdBeginQueryPtr
+  vkCmdBeginQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query) (flags)
+  pure $ ()
+
+-- | This function will call the supplied action between calls to
+-- 'cmdBeginQuery' and 'cmdEndQuery'
+--
+-- Note that 'cmdEndQuery' is *not* called if an exception is thrown by the
+-- inner action.
+cmdUseQuery :: forall io r . MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> io r -> io r
+cmdUseQuery commandBuffer queryPool query flags a =
+  (cmdBeginQuery commandBuffer queryPool query flags) *> a <* (cmdEndQuery commandBuffer queryPool query)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdEndQuery
+  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()
+
+-- | vkCmdEndQuery - Ends a query
+--
+-- = 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
+--
+-- Calling 'cmdEndQuery' is equivalent to calling
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndQueryIndexedEXT' with
+-- the @index@ parameter set to zero.
+--
+-- As queries operate asynchronously, ending a query does not immediately
+-- set the query’s status to available. A query is considered /finished/
+-- when the final results of the query are ready to be retrieved by
+-- 'Vulkan.Core10.Query.getQueryPoolResults' and 'cmdCopyQueryPoolResults',
+-- and this is when the query’s status is set to available.
+--
+-- Once a query is ended the query /must/ finish in finite time, unless the
+-- state of the query is changed using other commands, e.g. by issuing a
+-- reset of the query.
+--
+-- == Valid Usage
+--
+-- -   All queries used by the command /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
+--
+-- -   @query@ /must/ be less than the number of queries in @queryPool@
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If 'cmdEndQuery' is called within a render pass instance, the sum of
+--     @query@ and the number of bits set in the current subpass’s view
+--     mask /must/ be less than or equal to the number of queries in
+--     @queryPool@
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and
+--     one or more of the counters used to create @queryPool@ was
+--     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',
+--     the 'cmdEndQuery' /must/ be the last recorded command in
+--     @commandBuffer@
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and
+--     one or more of the counters used to create @queryPool@ was
+--     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',
+--     the 'cmdEndQuery' /must/ not be recorded within a render pass
+--     instance
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'
+cmdEndQuery :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> io ()
+cmdEndQuery commandBuffer queryPool query = liftIO $ do
+  let vkCmdEndQueryPtr = pVkCmdEndQuery (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdEndQueryPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndQuery is null" Nothing Nothing
+  let vkCmdEndQuery' = mkVkCmdEndQuery vkCmdEndQueryPtr
+  vkCmdEndQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdResetQueryPool
+  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdResetQueryPool - Reset queries in a query pool
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which this command will
+--     be recorded.
+--
+-- -   @queryPool@ is the handle of the query pool managing the queries
+--     being reset.
+--
+-- -   @firstQuery@ is the initial query index to reset.
+--
+-- -   @queryCount@ is the number of queries to reset.
+--
+-- = Description
+--
+-- When executed on a queue, this command sets the status of query indices
+-- [@firstQuery@, @firstQuery@ + @queryCount@ - 1] to unavailable.
+--
+-- If the @queryType@ used to create @queryPool@ was
+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', this
+-- command sets the status of query indices [@firstQuery@, @firstQuery@ +
+-- @queryCount@ - 1] to unavailable for each pass of @queryPool@, as
+-- indicated by a call to
+-- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.
+--
+-- Note
+--
+-- Because 'cmdResetQueryPool' resets all the passes of the indicated
+-- queries, applications must not record a 'cmdResetQueryPool' command for
+-- a @queryPool@ created with
+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' in a
+-- command buffer that needs to be submitted multiple times as indicated by
+-- a call to
+-- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.
+-- Otherwise applications will never be able to complete the recorded
+-- queries.
+--
+-- == Valid Usage
+--
+-- -   @firstQuery@ /must/ be less than the number of queries in
+--     @queryPool@
+--
+-- -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or
+--     equal to the number of queries in @queryPool@
+--
+-- -   All queries used by the command /must/ not be active
+--
+-- -   If @queryPool@ was created with
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     this command /must/ not be recorded in a command buffer that, either
+--     directly or through secondary command buffers, also contains begin
+--     commands for a query from the set of queries [@firstQuery@,
+--     @firstQuery@ + @queryCount@ - 1]
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'
+cmdResetQueryPool :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> io ()
+cmdResetQueryPool commandBuffer queryPool firstQuery queryCount = liftIO $ do
+  let vkCmdResetQueryPoolPtr = pVkCmdResetQueryPool (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdResetQueryPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResetQueryPool is null" Nothing Nothing
+  let vkCmdResetQueryPool' = mkVkCmdResetQueryPool vkCmdResetQueryPoolPtr
+  vkCmdResetQueryPool' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdWriteTimestamp
+  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()
+
+-- | vkCmdWriteTimestamp - Write a device timestamp into a query object
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pipelineStage@ is one of the
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',
+--     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
+--
+-- 'cmdWriteTimestamp' latches the value of the timer when all previous
+-- commands have completed executing as far as the specified pipeline
+-- stage, and writes the timestamp value to memory. When the timestamp
+-- value is written, the availability status of the query is set to
+-- available.
+--
+-- Note
+--
+-- If an implementation is unable to detect completion and latch the timer
+-- at any specific stage of the pipeline, it /may/ instead do so at any
+-- logically later stage.
+--
+-- 'cmdCopyQueryPoolResults' /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
+-- 'Vulkan.Core10.Query.getQueryPoolResults'. As with other queries, the
+-- query /must/ be reset using 'cmdResetQueryPool' or
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool'
+-- before requesting the timestamp value be written to it.
+--
+-- While 'cmdWriteTimestamp' /can/ be called inside or outside of a render
+-- pass instance, 'cmdCopyQueryPoolResults' /must/ only be called outside
+-- of a render pass instance.
+--
+-- Timestamps /may/ only be meaningfully compared if they are written by
+-- commands submitted to the same queue.
+--
+-- Note
+--
+-- An example of such a comparison is determining the execution time of a
+-- sequence of commands.
+--
+-- If 'cmdWriteTimestamp' is called while executing a render pass instance
+-- that has multiview enabled, the timestamp uses N consecutive query
+-- indices in the query pool (starting at @query@) where N is the number of
+-- bits set in the view mask of the subpass the command is executed in. The
+-- resulting query values are determined by an implementation-dependent
+-- choice of one of the following behaviors:
+--
+-- -   The first query is a timestamp value and (if more than one bit is
+--     set in the view mask) zero is written to the remaining queries. If
+--     two timestamps are written in the same subpass, the sum of the
+--     execution time of all views between those commands is the difference
+--     between the first query written by each command.
+--
+-- -   All N queries are timestamp values. If two timestamps are written in
+--     the same subpass, the sum of the execution time of all views between
+--     those commands is the sum of the difference between corresponding
+--     queries written by each command. The difference between
+--     corresponding queries /may/ be the execution time of a single view.
+--
+-- In either case, the application /can/ sum the differences between all N
+-- queries to determine the total execution time.
+--
+-- == Valid Usage
+--
+-- -   @queryPool@ /must/ have been created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'
+--
+-- -   The query identified by @queryPool@ and @query@ /must/ be
+--     /unavailable/
+--
+-- -   The command pool’s queue family /must/ support a non-zero
+--     @timestampValidBits@
+--
+-- -   All queries used by the command /must/ be unavailable
+--
+-- -   If 'cmdWriteTimestamp' is called within a render pass instance, the
+--     sum of @query@ and the number of bits set in the current subpass’s
+--     view mask /must/ be less than or equal to the number of queries in
+--     @queryPool@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pipelineStage@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     value
+--
+-- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',
+-- 'Vulkan.Core10.Handles.QueryPool'
+cmdWriteTimestamp :: forall io . MonadIO io => CommandBuffer -> PipelineStageFlagBits -> QueryPool -> ("query" ::: Word32) -> io ()
+cmdWriteTimestamp commandBuffer pipelineStage queryPool query = liftIO $ do
+  let vkCmdWriteTimestampPtr = pVkCmdWriteTimestamp (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdWriteTimestampPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWriteTimestamp is null" Nothing Nothing
+  let vkCmdWriteTimestamp' = mkVkCmdWriteTimestamp vkCmdWriteTimestampPtr
+  vkCmdWriteTimestamp' (commandBufferHandle (commandBuffer)) (pipelineStage) (queryPool) (query)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyQueryPoolResults
+  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()
+
+-- | vkCmdCopyQueryPoolResults - Copy the results of queries in a query pool
+-- to a buffer object
+--
+-- = 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 'Vulkan.Core10.Handles.Buffer' 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
+--     'Vulkan.Core10.Query.getQueryPoolResults'.
+--
+-- -   @flags@ is a bitmask of
+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits'
+--     specifying how and when results are returned.
+--
+-- = Description
+--
+-- 'cmdCopyQueryPoolResults' is guaranteed to see the effect of previous
+-- uses of 'cmdResetQueryPool' in the same queue, without any additional
+-- synchronization. Thus, the results will always reflect the most recent
+-- use of the query.
+--
+-- @flags@ has the same possible values described above for the @flags@
+-- parameter of 'Vulkan.Core10.Query.getQueryPoolResults', but the
+-- different style of execution causes some subtle behavioral differences.
+-- Because 'cmdCopyQueryPoolResults' executes in order with respect to
+-- other query commands, there is less ambiguity about which use of a query
+-- is being requested.
+--
+-- Results for all requested occlusion queries, pipeline statistics
+-- queries, transform feedback queries, and timestamp queries are written
+-- as 64-bit unsigned integer values if
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set or
+-- 32-bit unsigned integer values otherwise. Performance queries store
+-- results in a tightly packed array whose type is determined by the @unit@
+-- member of the corresponding
+-- 'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterKHR'.
+--
+-- If neither of
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' and
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'
+-- are set, results are only written out for queries in the available
+-- state.
+--
+-- If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is
+-- set, the implementation will wait for each query’s status to be in the
+-- available state before retrieving the numerical results for that query.
+-- This is guaranteed to reflect the most recent use of the query on the
+-- same queue, assuming that the query is not being simultaneously used by
+-- other queues. If the query does not become available in a finite amount
+-- of time (e.g. due to not issuing a query since the last reset), a
+-- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST' error /may/ occur.
+--
+-- Similarly, if
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'
+-- is set and
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is not
+-- set, the availability is guaranteed to reflect the most recent use of
+-- the query on the same queue, assuming that the query is not being
+-- simultaneously used by other queues. As with
+-- 'Vulkan.Core10.Query.getQueryPoolResults', implementations /must/
+-- guarantee that if they return a non-zero availability value, then the
+-- numerical results are valid.
+--
+-- If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT' is
+-- set, 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is
+-- not set, and the query’s status is unavailable, an intermediate result
+-- value between zero and the final result value is written for that query.
+--
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
+-- /must/ not be used if the pool’s @queryType@ is
+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'.
+--
+-- 'cmdCopyQueryPoolResults' is considered to be a transfer operation, and
+-- its writes to buffer memory /must/ be synchronized using
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'
+-- and 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_WRITE_BIT'
+-- before using the results.
+--
+-- == Valid Usage
+--
+-- -   @dstOffset@ /must/ be less than the size of @dstBuffer@
+--
+-- -   @firstQuery@ /must/ be less than the number of queries in
+--     @queryPool@
+--
+-- -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or
+--     equal to the number of queries in @queryPool@
+--
+-- -   If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is
+--     not set in @flags@ then @dstOffset@ and @stride@ /must/ be multiples
+--     of @4@
+--
+-- -   If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is
+--     set in @flags@ then @dstOffset@ and @stride@ /must/ be multiples of
+--     @8@
+--
+-- -   @dstBuffer@ /must/ have enough storage, from @dstOffset@, to contain
+--     the result of each query, as described
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-memorylayout here>
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP', @flags@ /must/
+--     not contain
+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR'::@allowCommandBufferQueryCopies@
+--     /must/ be 'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT',
+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
+--     or 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     the @queryPool@ /must/ have been submitted once for each pass as
+--     retrieved via a call to
+--     'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'
+--
+-- -   'cmdCopyQueryPoolResults' /must/ not be called if the @queryType@
+--     used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_INTEL'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' values
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Each of @commandBuffer@, @dstBuffer@, and @queryPool@ /must/ have
+--     been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize', 'Vulkan.Core10.Handles.QueryPool',
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlags'
+cmdCopyQueryPoolResults :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> io ()
+cmdCopyQueryPoolResults commandBuffer queryPool firstQuery queryCount dstBuffer dstOffset stride flags = liftIO $ do
+  let vkCmdCopyQueryPoolResultsPtr = pVkCmdCopyQueryPoolResults (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdCopyQueryPoolResultsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyQueryPoolResults is null" Nothing Nothing
+  let vkCmdCopyQueryPoolResults' = mkVkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResultsPtr
+  vkCmdCopyQueryPoolResults' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount) (dstBuffer) (dstOffset) (stride) (flags)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdPushConstants
+  :: FunPtr (Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()
+
+-- | vkCmdPushConstants - Update the values of push constants
+--
+-- = 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
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
+--     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 a pointer to an array of @size@ bytes containing the
+--     new push constant values.
+--
+-- = Description
+--
+-- Note
+--
+-- As @stageFlags@ needs to include all flags the relevant push constant
+-- ranges were created with, any flags that are not supported by the queue
+-- family that the 'Vulkan.Core10.Handles.CommandPool' used to allocate
+-- @commandBuffer@ was created on are ignored.
+--
+-- == Valid Usage
+--
+-- -   For each byte in the range specified by @offset@ and @size@ and for
+--     each shader stage in @stageFlags@, there /must/ be a push constant
+--     range in @layout@ that includes that byte and that stage
+--
+-- -   For each byte in the range specified by @offset@ and @size@ and for
+--     each push constant range that overlaps that byte, @stageFlags@
+--     /must/ include all stages in that push constant range’s
+--     'Vulkan.Core10.PipelineLayout.PushConstantRange'::@stageFlags@
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @size@ /must/ be a multiple of @4@
+--
+-- -   @offset@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
+--
+-- -   @size@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
+--     minus @offset@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'
+--     handle
+--
+-- -   @stageFlags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values
+--
+-- -   @stageFlags@ /must/ not be @0@
+--
+-- -   @pValues@ /must/ be a valid pointer to an array of @size@ bytes
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   @size@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and @layout@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Handles.PipelineLayout',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'
+cmdPushConstants :: forall io . MonadIO io => CommandBuffer -> PipelineLayout -> ShaderStageFlags -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("values" ::: Ptr ()) -> io ()
+cmdPushConstants commandBuffer layout stageFlags offset size values = liftIO $ do
+  let vkCmdPushConstantsPtr = pVkCmdPushConstants (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdPushConstantsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPushConstants is null" Nothing Nothing
+  let vkCmdPushConstants' = mkVkCmdPushConstants vkCmdPushConstantsPtr
+  vkCmdPushConstants' (commandBufferHandle (commandBuffer)) (layout) (stageFlags) (offset) (size) (values)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBeginRenderPass
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (RenderPassBeginInfo a) -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> Ptr (RenderPassBeginInfo a) -> SubpassContents -> IO ()
+
+-- | vkCmdBeginRenderPass - Begin a new render pass
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer in which to record the
+--     command.
+--
+-- -   @pRenderPassBegin@ is a pointer to a 'RenderPassBeginInfo' structure
+--     specifying the render pass to begin an instance of, and the
+--     framebuffer the instance uses.
+--
+-- -   @contents@ is a
+--     'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value
+--     specifying how the commands in the first subpass will be provided.
+--
+-- = Description
+--
+-- After beginning a render pass instance, the command buffer is ready to
+-- record the commands for the first subpass of that render pass.
+--
+-- == Valid Usage
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If any of the @stencilInitialLayout@ or @stencilFinalLayout@ member
+--     of the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
+--     structures or the @stencilLayout@ member of the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' or
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--
+-- -   If any of the @initialLayout@ members of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures specified when
+--     creating the render pass specified in the @renderPass@ member of
+--     @pRenderPassBegin@ is not
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', then each
+--     such @initialLayout@ /must/ be equal to the current layout of the
+--     corresponding attachment image subresource of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@
+--
+-- -   The @srcStageMask@ and @dstStageMask@ members of any element of the
+--     @pDependencies@ member of 'Vulkan.Core10.Pass.RenderPassCreateInfo'
+--     used to create @renderPass@ /must/ be supported by the capabilities
+--     of the queue family identified by the @queueFamilyIndex@ member of
+--     the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' used to create
+--     the command pool which @commandBuffer@ was allocated from
+--
+-- -   For any attachment in @framebuffer@ that is used by @renderPass@ and
+--     is bound to memory locations that are also bound to another
+--     attachment used by @renderPass@, and if at least one of those uses
+--     causes either attachment to be written to, both attachments /must/
+--     have had the
+--     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'
+--     set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pRenderPassBegin@ /must/ be a valid pointer to a valid
+--     'RenderPassBeginInfo' structure
+--
+-- -   @contents@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @commandBuffer@ /must/ be a primary
+--     'Vulkan.Core10.Handles.CommandBuffer'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'RenderPassBeginInfo',
+-- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'
+cmdBeginRenderPass :: forall a io . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io ()
+cmdBeginRenderPass commandBuffer renderPassBegin contents = liftIO . evalContT $ do
+  let vkCmdBeginRenderPassPtr = pVkCmdBeginRenderPass (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBeginRenderPassPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginRenderPass is null" Nothing Nothing
+  let vkCmdBeginRenderPass' = mkVkCmdBeginRenderPass vkCmdBeginRenderPassPtr
+  pRenderPassBegin <- ContT $ withCStruct (renderPassBegin)
+  lift $ vkCmdBeginRenderPass' (commandBufferHandle (commandBuffer)) pRenderPassBegin (contents)
+  pure $ ()
+
+-- | This function will call the supplied action between calls to
+-- 'cmdBeginRenderPass' and 'cmdEndRenderPass'
+--
+-- Note that 'cmdEndRenderPass' is *not* called if an exception is thrown
+-- by the inner action.
+cmdUseRenderPass :: forall a io r . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io r -> io r
+cmdUseRenderPass commandBuffer pRenderPassBegin contents a =
+  (cmdBeginRenderPass commandBuffer pRenderPassBegin contents) *> a <* (cmdEndRenderPass commandBuffer)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdNextSubpass
+  :: FunPtr (Ptr CommandBuffer_T -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> SubpassContents -> IO ()
+
+-- | vkCmdNextSubpass - Transition to the next subpass of a render pass
+--
+-- = 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
+--     'cmdBeginRenderPass'.
+--
+-- = Description
+--
+-- The subpass index for a render pass begins at zero when
+-- 'cmdBeginRenderPass' is recorded, and increments each time
+-- 'cmdNextSubpass' is recorded.
+--
+-- Moving to the next subpass automatically performs any multisample
+-- resolve operations in the subpass being ended. End-of-subpass
+-- multisample resolves are treated as color attachment writes for the
+-- purposes of synchronization. This applies to resolve operations for both
+-- color and depth\/stencil attachments. That is, they are considered to
+-- execute in the
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'
+-- pipeline stage and their writes are synchronized with
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.
+-- Synchronization between rendering within a subpass and any resolve
+-- operations at the end of the subpass occurs automatically, without need
+-- for explicit dependencies or pipeline barriers. However, if the resolve
+-- attachment is also used in a different subpass, an explicit dependency
+-- is needed.
+--
+-- After transitioning to the next subpass, the application /can/ record
+-- the commands for that subpass.
+--
+-- == Valid Usage
+--
+-- -   The current subpass index /must/ be less than the number of
+--     subpasses in the render pass minus one
+--
+-- -   This command /must/ not be recorded when transform feedback is
+--     active
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @contents@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   @commandBuffer@ /must/ be a primary
+--     'Vulkan.Core10.Handles.CommandBuffer'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'
+cmdNextSubpass :: forall io . MonadIO io => CommandBuffer -> SubpassContents -> io ()
+cmdNextSubpass commandBuffer contents = liftIO $ do
+  let vkCmdNextSubpassPtr = pVkCmdNextSubpass (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdNextSubpassPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdNextSubpass is null" Nothing Nothing
+  let vkCmdNextSubpass' = mkVkCmdNextSubpass vkCmdNextSubpassPtr
+  vkCmdNextSubpass' (commandBufferHandle (commandBuffer)) (contents)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdEndRenderPass
+  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()
+
+-- | vkCmdEndRenderPass - End the current render pass
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer in which to end the current
+--     render pass instance.
+--
+-- = Description
+--
+-- Ending a render pass instance performs any multisample resolve
+-- operations on the final subpass.
+--
+-- == Valid Usage
+--
+-- -   The current subpass index /must/ be equal to the number of subpasses
+--     in the render pass minus one
+--
+-- -   This command /must/ not be recorded when transform feedback is
+--     active
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   @commandBuffer@ /must/ be a primary
+--     'Vulkan.Core10.Handles.CommandBuffer'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdEndRenderPass :: forall io . MonadIO io => CommandBuffer -> io ()
+cmdEndRenderPass commandBuffer = liftIO $ do
+  let vkCmdEndRenderPassPtr = pVkCmdEndRenderPass (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdEndRenderPassPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndRenderPass is null" Nothing Nothing
+  let vkCmdEndRenderPass' = mkVkCmdEndRenderPass vkCmdEndRenderPassPtr
+  vkCmdEndRenderPass' (commandBufferHandle (commandBuffer))
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdExecuteCommands
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()
+
+-- | vkCmdExecuteCommands - Execute a secondary command buffer from a primary
+-- command buffer
+--
+-- = 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 a pointer to an array of @commandBufferCount@
+--     secondary command buffer handles, which are recorded to execute in
+--     the primary command buffer in the order they are listed in the
+--     array.
+--
+-- = Description
+--
+-- If any element of @pCommandBuffers@ was not recorded with the
+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
+-- flag, and it was recorded into any other primary command buffer which is
+-- currently in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable or recording state>,
+-- that primary command buffer becomes
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
+--
+-- == Valid Usage
+--
+-- -   Each element of @pCommandBuffers@ /must/ have been allocated with a
+--     @level@ of
+--     'Vulkan.Core10.Enums.CommandBufferLevel.COMMAND_BUFFER_LEVEL_SECONDARY'
+--
+-- -   Each element of @pCommandBuffers@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>
+--
+-- -   If any element of @pCommandBuffers@ was not recorded with the
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
+--     flag, it /must/ not be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
+--
+-- -   If any element of @pCommandBuffers@ was not recorded with the
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
+--     flag, it /must/ not have already been recorded to @commandBuffer@
+--
+-- -   If any element of @pCommandBuffers@ was not recorded with the
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
+--     flag, it /must/ not appear more than once in @pCommandBuffers@
+--
+-- -   Each element of @pCommandBuffers@ /must/ have been allocated from a
+--     'Vulkan.Core10.Handles.CommandPool' that was created for the same
+--     queue family as the 'Vulkan.Core10.Handles.CommandPool' from which
+--     @commandBuffer@ was allocated
+--
+-- -   If 'cmdExecuteCommands' is being called within a render pass
+--     instance, that render pass instance /must/ have been begun with the
+--     @contents@ parameter of 'cmdBeginRenderPass' set to
+--     'Vulkan.Core10.Enums.SubpassContents.SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS'
+--
+-- -   If 'cmdExecuteCommands' is being called within a render pass
+--     instance, each element of @pCommandBuffers@ /must/ have been
+--     recorded with the
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'
+--
+-- -   If 'cmdExecuteCommands' is being called within a render pass
+--     instance, each element of @pCommandBuffers@ /must/ have been
+--     recorded with
+--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@subpass@
+--     set to the index of the subpass which the given command buffer will
+--     be executed in
+--
+-- -   If 'cmdExecuteCommands' is being called within a render pass
+--     instance, the render passes specified in the
+--     @pBeginInfo->pInheritanceInfo->renderPass@ members of the
+--     'Vulkan.Core10.CommandBuffer.beginCommandBuffer' commands used to
+--     begin recording each element of @pCommandBuffers@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the current render pass
+--
+-- -   If 'cmdExecuteCommands' is being called within a render pass
+--     instance, and any element of @pCommandBuffers@ was recorded with
+--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@framebuffer@
+--     not equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE', that
+--     'Vulkan.Core10.Handles.Framebuffer' /must/ match the
+--     'Vulkan.Core10.Handles.Framebuffer' used in the current render pass
+--     instance
+--
+-- -   If 'cmdExecuteCommands' is being called within a render pass
+--     instance that included
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'
+--     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of
+--     @pCommandBuffers@ /must/ have been recorded with
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'
+--     in the @pNext@ chain of
+--     'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'
+--
+-- -   If 'cmdExecuteCommands' is being called within a render pass
+--     instance that included
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'
+--     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of
+--     @pCommandBuffers@ /must/ have been recorded with
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@transform@
+--     identical to
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@
+--
+-- -   If 'cmdExecuteCommands' is being called within a render pass
+--     instance that included
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'
+--     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of
+--     @pCommandBuffers@ /must/ have been recorded with
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@renderArea@
+--     identical to 'RenderPassBeginInfo'::@renderArea@
+--
+-- -   If 'cmdExecuteCommands' is not being called within a render pass
+--     instance, each element of @pCommandBuffers@ /must/ not have been
+--     recorded with the
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>
+--     feature is not enabled, @commandBuffer@ /must/ not have any queries
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
+--
+-- -   If @commandBuffer@ has a
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,
+--     then each element of @pCommandBuffers@ /must/ have been recorded
+--     with
+--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@occlusionQueryEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If @commandBuffer@ has a
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,
+--     then each element of @pCommandBuffers@ /must/ have been recorded
+--     with
+--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@queryFlags@
+--     having all bits set that are set for the query
+--
+-- -   If @commandBuffer@ has a
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' query
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,
+--     then each element of @pCommandBuffers@ /must/ have been recorded
+--     with
+--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@pipelineStatistics@
+--     having all bits set that are set in the
+--     'Vulkan.Core10.Handles.QueryPool' the query uses
+--
+-- -   Each element of @pCommandBuffers@ /must/ not begin any query types
+--     that are
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
+--     in @commandBuffer@
+--
+-- -   If @commandBuffer@ is a protected command buffer, then each element
+--     of @pCommandBuffers@ /must/ be a protected command buffer
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, then each
+--     element of @pCommandBuffers@ /must/ be an unprotected command buffer
+--
+-- -   This command /must/ not be recorded when transform feedback is
+--     active
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
+--     @commandBufferCount@ valid 'Vulkan.Core10.Handles.CommandBuffer'
+--     handles
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   @commandBuffer@ /must/ be a primary
+--     'Vulkan.Core10.Handles.CommandBuffer'
+--
+-- -   @commandBufferCount@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and the elements of @pCommandBuffers@
+--     /must/ have been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdExecuteCommands :: forall io . MonadIO io => CommandBuffer -> ("commandBuffers" ::: Vector CommandBuffer) -> io ()
+cmdExecuteCommands commandBuffer commandBuffers = liftIO . evalContT $ do
+  let vkCmdExecuteCommandsPtr = pVkCmdExecuteCommands (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdExecuteCommandsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdExecuteCommands is null" Nothing Nothing
+  let vkCmdExecuteCommands' = mkVkCmdExecuteCommands vkCmdExecuteCommandsPtr
+  pPCommandBuffers <- ContT $ allocaBytesAligned @(Ptr CommandBuffer_T) ((Data.Vector.length (commandBuffers)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBuffers `plusPtr` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)) (commandBufferHandle (e))) (commandBuffers)
+  lift $ vkCmdExecuteCommands' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (commandBuffers)) :: Word32)) (pPCommandBuffers)
+  pure $ ()
+
+
+-- | VkViewport - Structure specifying a viewport
+--
+-- = Description
+--
+-- The framebuffer depth coordinate @z@f /may/ be represented using either
+-- a fixed-point or floating-point representation. However, a
+-- floating-point representation /must/ be used if the depth\/stencil
+-- attachment has a floating-point depth component. If an m-bit fixed-point
+-- representation is used, we assume that it represents each value
+-- \(\frac{k}{2^m - 1}\), where k ∈ { 0, 1, …​, 2m-1 }, as k (e.g. 1.0 is
+-- represented in binary as a string of all ones).
+--
+-- The viewport parameters shown in the above equations are found from
+-- these values as
+--
+-- -   ox = @x@ + @width@ \/ 2
+--
+-- -   oy = @y@ + @height@ \/ 2
+--
+-- -   oz = @minDepth@
+--
+-- -   px = @width@
+--
+-- -   py = @height@
+--
+-- -   pz = @maxDepth@ - @minDepth@.
+--
+-- If a render pass transform is enabled, the values (px,py) and (ox, oy)
+-- defining the viewport are transformed as described in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>
+-- before participating in the viewport transform.
+--
+-- The application /can/ specify a negative term for @height@, which has
+-- the effect of negating the y coordinate in clip space before performing
+-- the transform. When using a negative @height@, the application /should/
+-- also adjust the @y@ value to point to the lower left corner of the
+-- viewport instead of the upper left corner. Using the negative @height@
+-- allows the application to avoid having to negate the y component of the
+-- @Position@ output from the last vertex processing stage in shaders that
+-- also target other graphics APIs.
+--
+-- The width and height of the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxViewportDimensions implementation-dependent maximum viewport dimensions>
+-- /must/ be greater than or equal to the width and height of the largest
+-- image which /can/ be created and attached to a framebuffer.
+--
+-- The floating-point viewport bounds are represented with an
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-viewportSubPixelBits implementation-dependent precision>.
+--
+-- == Valid Usage
+--
+-- -   @width@ /must/ be greater than @0.0@
+--
+-- -   @width@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[0]
+--
+-- -   The absolute value of @height@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[1]
+--
+-- -   @x@ /must/ be greater than or equal to @viewportBoundsRange@[0]
+--
+-- -   (@x@ + @width@) /must/ be less than or equal to
+--     @viewportBoundsRange@[1]
+--
+-- -   @y@ /must/ be greater than or equal to @viewportBoundsRange@[0]
+--
+-- -   @y@ /must/ be less than or equal to @viewportBoundsRange@[1]
+--
+-- -   (@y@ + @height@) /must/ be greater than or equal to
+--     @viewportBoundsRange@[0]
+--
+-- -   (@y@ + @height@) /must/ be less than or equal to
+--     @viewportBoundsRange@[1]
+--
+-- -   Unless @VK_EXT_depth_range_unrestricted@ extension is enabled
+--     @minDepth@ /must/ be between @0.0@ and @1.0@, inclusive
+--
+-- -   Unless @VK_EXT_depth_range_unrestricted@ extension is enabled
+--     @maxDepth@ /must/ be between @0.0@ and @1.0@, inclusive
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo',
+-- 'cmdSetViewport'
+data Viewport = Viewport
+  { -- | @x@ and @y@ are the viewport’s upper left corner (x,y).
+    x :: Float
+  , -- No documentation found for Nested "VkViewport" "y"
+    y :: Float
+  , -- | @width@ and @height@ are the viewport’s width and height, respectively.
+    width :: Float
+  , -- No documentation found for Nested "VkViewport" "height"
+    height :: Float
+  , -- | @minDepth@ and @maxDepth@ are the depth range for the viewport. It is
+    -- valid for @minDepth@ to be greater than or equal to @maxDepth@.
+    minDepth :: Float
+  , -- No documentation found for Nested "VkViewport" "maxDepth"
+    maxDepth :: Float
+  }
+  deriving (Typeable)
+deriving instance Show Viewport
+
+instance ToCStruct Viewport where
+  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p Viewport{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (x))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (y))
+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (width))
+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (height))
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (minDepth))
+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxDepth))
+    f
+  cStructSize = 24
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))
+    f
+
+instance FromCStruct Viewport where
+  peekCStruct p = do
+    x <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
+    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
+    width <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))
+    height <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))
+    minDepth <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
+    maxDepth <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))
+    pure $ Viewport
+             ((\(CFloat a) -> a) x) ((\(CFloat a) -> a) y) ((\(CFloat a) -> a) width) ((\(CFloat a) -> a) height) ((\(CFloat a) -> a) minDepth) ((\(CFloat a) -> a) maxDepth)
+
+instance Storable Viewport where
+  sizeOf ~_ = 24
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero Viewport where
+  zero = Viewport
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkRect2D - Structure specifying a two-dimensional subregion
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo',
+-- 'ClearRect',
+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
+-- 'Vulkan.Extensions.VK_KHR_display_swapchain.DisplayPresentInfoKHR',
+-- 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.SharedTypes.Offset2D',
+-- 'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV',
+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo',
+-- 'RenderPassBeginInfo',
+-- 'Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEXT',
+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV',
+-- 'cmdSetScissor',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getPhysicalDevicePresentRectanglesKHR'
+data Rect2D = Rect2D
+  { -- | @offset@ is a 'Vulkan.Core10.SharedTypes.Offset2D' specifying the
+    -- rectangle offset.
+    offset :: Offset2D
+  , -- | @extent@ is a 'Vulkan.Core10.SharedTypes.Extent2D' specifying the
+    -- rectangle extent.
+    extent :: Extent2D
+  }
+  deriving (Typeable)
+deriving instance Show Rect2D
+
+instance ToCStruct Rect2D where
+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p Rect2D{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Offset2D)) (offset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (extent) . ($ ())
+    lift $ f
+  cStructSize = 16
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Offset2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct Rect2D where
+  peekCStruct p = do
+    offset <- peekCStruct @Offset2D ((p `plusPtr` 0 :: Ptr Offset2D))
+    extent <- peekCStruct @Extent2D ((p `plusPtr` 8 :: Ptr Extent2D))
+    pure $ Rect2D
+             offset extent
+
+instance Zero Rect2D where
+  zero = Rect2D
+           zero
+           zero
+
+
+-- | VkClearRect - Structure specifying a clear rectangle
+--
+-- = Description
+--
+-- The layers [@baseArrayLayer@, @baseArrayLayer@ + @layerCount@) counting
+-- from the base layer of the attachment image view are cleared.
+--
+-- = See Also
+--
+-- 'Rect2D', 'cmdClearAttachments'
+data ClearRect = ClearRect
+  { -- | @rect@ is the two-dimensional region to be cleared.
+    rect :: Rect2D
+  , -- | @baseArrayLayer@ is the first layer to be cleared.
+    baseArrayLayer :: Word32
+  , -- | @layerCount@ is the number of layers to clear.
+    layerCount :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show ClearRect
+
+instance ToCStruct ClearRect where
+  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ClearRect{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Rect2D)) (rect) . ($ ())
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (baseArrayLayer)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (layerCount)
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Rect2D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance FromCStruct ClearRect where
+  peekCStruct p = do
+    rect <- peekCStruct @Rect2D ((p `plusPtr` 0 :: Ptr Rect2D))
+    baseArrayLayer <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    layerCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pure $ ClearRect
+             rect baseArrayLayer layerCount
+
+instance Zero ClearRect where
+  zero = ClearRect
+           zero
+           zero
+           zero
+
+
+-- | VkBufferCopy - Structure specifying a buffer copy operation
+--
+-- == Valid Usage
+--
+-- -   The @size@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize', 'cmdCopyBuffer'
+data BufferCopy = BufferCopy
+  { -- | @srcOffset@ is the starting offset in bytes from the start of
+    -- @srcBuffer@.
+    srcOffset :: DeviceSize
+  , -- | @dstOffset@ is the starting offset in bytes from the start of
+    -- @dstBuffer@.
+    dstOffset :: DeviceSize
+  , -- | @size@ is the number of bytes to copy.
+    size :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show BufferCopy
+
+instance ToCStruct BufferCopy where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferCopy{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (srcOffset)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (dstOffset)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (size)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct BufferCopy where
+  peekCStruct p = do
+    srcOffset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
+    dstOffset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
+    size <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    pure $ BufferCopy
+             srcOffset dstOffset size
+
+instance Storable BufferCopy where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BufferCopy where
+  zero = BufferCopy
+           zero
+           zero
+           zero
+
+
+-- | VkImageCopy - Structure specifying an image copy operation
+--
+-- = Description
+--
+-- For 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' images, copies are
+-- performed slice by slice starting with the @z@ member of the @srcOffset@
+-- or @dstOffset@, and copying @depth@ slices. For images with multiple
+-- layers, copies are performed layer by layer starting with the
+-- @baseArrayLayer@ member of the @srcSubresource@ or @dstSubresource@ and
+-- copying @layerCount@ layers. Image data /can/ be copied between images
+-- with different image types. If one image is
+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' and the other image is
+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' with multiple layers, then
+-- each slice is copied to or from a different layer.
+--
+-- Copies involving a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
+-- specify the region to be copied in terms of the /plane/ to be copied,
+-- not the coordinates of the multi-planar image. This means that copies
+-- accessing the R\/B planes of “@_422@” format images /must/ fit the
+-- copied region within half the @width@ of the parent image, and that
+-- copies accessing the R\/B planes of “@_420@” format images /must/ fit
+-- the copied region within half the @width@ and @height@ of the parent
+-- image.
+--
+-- == Valid Usage
+--
+-- -   If neither the calling command’s @srcImage@ nor the calling
+--     command’s @dstImage@ has a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
+--     then the @aspectMask@ member of @srcSubresource@ and
+--     @dstSubresource@ /must/ match
+--
+-- -   If the calling command’s @srcImage@ has a
+--     'Vulkan.Core10.Enums.Format.Format' with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>
+--     then the @srcSubresource@ @aspectMask@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
+--
+-- -   If the calling command’s @srcImage@ has a
+--     'Vulkan.Core10.Enums.Format.Format' with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>
+--     then the @srcSubresource@ @aspectMask@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--
+-- -   If the calling command’s @dstImage@ has a
+--     'Vulkan.Core10.Enums.Format.Format' with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>
+--     then the @dstSubresource@ @aspectMask@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
+--
+-- -   If the calling command’s @dstImage@ has a
+--     'Vulkan.Core10.Enums.Format.Format' with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>
+--     then the @dstSubresource@ @aspectMask@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--
+-- -   If the calling command’s @srcImage@ has a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
+--     and the @dstImage@ does not have a multi-planar image format, the
+--     @dstSubresource@ @aspectMask@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
+--
+-- -   If the calling command’s @dstImage@ has a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>
+--     and the @srcImage@ does not have a multi-planar image format, the
+--     @srcSubresource@ @aspectMask@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
+--
+-- -   The number of slices of the @extent@ (for 3D) or layers of the
+--     @srcSubresource@ (for non-3D) /must/ match the number of slices of
+--     the @extent@ (for 3D) or layers of the @dstSubresource@ (for non-3D)
+--
+-- -   If either of the calling command’s @srcImage@ or @dstImage@
+--     parameters are of 'Vulkan.Core10.Enums.ImageType.ImageType'
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', the @baseArrayLayer@
+--     and @layerCount@ members of the corresponding subresource /must/ be
+--     @0@ and @1@, respectively
+--
+-- -   The @aspectMask@ member of @srcSubresource@ /must/ specify aspects
+--     present in the calling command’s @srcImage@
+--
+-- -   The @aspectMask@ member of @dstSubresource@ /must/ specify aspects
+--     present in the calling command’s @dstImage@
+--
+-- -   @srcOffset.x@ and (@extent.width@ + @srcOffset.x@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the source
+--     image subresource width
+--
+-- -   @srcOffset.y@ and (@extent.height@ + @srcOffset.y@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the source
+--     image subresource height
+--
+-- -   If the calling command’s @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.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
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then @srcOffset.z@
+--     /must/ be @0@ and @extent.depth@ /must/ be @1@
+--
+-- -   If the calling command’s @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then @dstOffset.z@
+--     /must/ be @0@ and @extent.depth@ /must/ be @1@
+--
+-- -   If the calling command’s @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then @srcOffset.z@
+--     /must/ be @0@
+--
+-- -   If the calling command’s @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then @dstOffset.z@
+--     /must/ be @0@
+--
+-- -   If both @srcImage@ and @dstImage@ are of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' then @extent.depth@
+--     /must/ be @1@
+--
+-- -   If the calling command’s @srcImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and the @dstImage@ is
+--     of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then
+--     @extent.depth@ /must/ equal to the @layerCount@ member of
+--     @srcSubresource@
+--
+-- -   If the calling command’s @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and the @srcImage@ is
+--     of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then
+--     @extent.depth@ /must/ equal to the @layerCount@ member of
+--     @dstSubresource@
+--
+-- -   @dstOffset.x@ and (@extent.width@ + @dstOffset.x@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the
+--     destination image subresource width
+--
+-- -   @dstOffset.y@ and (@extent.height@ + @dstOffset.y@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the
+--     destination image subresource height
+--
+-- -   If the calling command’s @dstImage@ is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then @dstOffset.y@
+--     /must/ be @0@ and @extent.height@ /must/ be @1@
+--
+-- -   @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the
+--     destination image subresource depth
+--
+-- -   If the calling command’s @srcImage@ is a compressed image, or a
+--     /single-plane/, “@_422@” image format, all members of @srcOffset@
+--     /must/ be a multiple of the corresponding dimensions of the
+--     compressed texel block
+--
+-- -   If the calling command’s @srcImage@ is a compressed image, or a
+--     /single-plane/, “@_422@” image format, @extent.width@ /must/ be a
+--     multiple of the compressed texel block width or (@extent.width@ +
+--     @srcOffset.x@) /must/ equal the source image subresource width
+--
+-- -   If the calling command’s @srcImage@ is a compressed image, or a
+--     /single-plane/, “@_422@” image format, @extent.height@ /must/ be a
+--     multiple of the compressed texel block height or (@extent.height@ +
+--     @srcOffset.y@) /must/ equal the source image subresource height
+--
+-- -   If the calling command’s @srcImage@ is a compressed image, or a
+--     /single-plane/, “@_422@” image format, @extent.depth@ /must/ be a
+--     multiple of the compressed texel block depth or (@extent.depth@ +
+--     @srcOffset.z@) /must/ equal the source image subresource depth
+--
+-- -   If the calling command’s @dstImage@ is a compressed format image, or
+--     a /single-plane/, “@_422@” image format, all members of @dstOffset@
+--     /must/ be a multiple of the corresponding dimensions of the
+--     compressed texel block
+--
+-- -   If the calling command’s @dstImage@ is a compressed format image, or
+--     a /single-plane/, “@_422@” image format, @extent.width@ /must/ be a
+--     multiple of the compressed texel block width or (@extent.width@ +
+--     @dstOffset.x@) /must/ equal the destination image subresource width
+--
+-- -   If the calling command’s @dstImage@ is a compressed format image, or
+--     a /single-plane/, “@_422@” image format, @extent.height@ /must/ be a
+--     multiple of the compressed texel block height or (@extent.height@ +
+--     @dstOffset.y@) /must/ equal the destination image subresource height
+--
+-- -   If the calling command’s @dstImage@ is a compressed format image, or
+--     a /single-plane/, “@_422@” image format, @extent.depth@ /must/ be a
+--     multiple of the compressed texel block depth or (@extent.depth@ +
+--     @dstOffset.z@) /must/ equal the destination image subresource depth
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @srcSubresource@ /must/ be a valid
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structure
+--
+-- -   @dstSubresource@ /must/ be a valid
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.Extent3D',
+-- 'Vulkan.Core10.SharedTypes.ImageSubresourceLayers',
+-- 'Vulkan.Core10.SharedTypes.Offset3D', 'cmdCopyImage'
+data ImageCopy = ImageCopy
+  { -- | @srcSubresource@ and @dstSubresource@ are
+    -- 'Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structures specifying
+    -- the image subresources of the images used for the source and destination
+    -- image data, respectively.
+    srcSubresource :: ImageSubresourceLayers
+  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
+    -- in texels of the sub-regions of the source and destination image data.
+    srcOffset :: Offset3D
+  , -- No documentation found for Nested "VkImageCopy" "dstSubresource"
+    dstSubresource :: ImageSubresourceLayers
+  , -- No documentation found for Nested "VkImageCopy" "dstOffset"
+    dstOffset :: Offset3D
+  , -- | @extent@ is the size in texels of the image to copy in @width@, @height@
+    -- and @depth@.
+    extent :: Extent3D
+  }
+  deriving (Typeable)
+deriving instance Show ImageCopy
+
+instance ToCStruct ImageCopy where
+  withCStruct x f = allocaBytesAligned 68 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageCopy{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (srcOffset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (dstOffset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (extent) . ($ ())
+    lift $ f
+  cStructSize = 68
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct ImageCopy where
+  peekCStruct p = do
+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))
+    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 16 :: Ptr Offset3D))
+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers))
+    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 44 :: Ptr Offset3D))
+    extent <- peekCStruct @Extent3D ((p `plusPtr` 56 :: Ptr Extent3D))
+    pure $ ImageCopy
+             srcSubresource srcOffset dstSubresource dstOffset extent
+
+instance Zero ImageCopy where
+  zero = ImageCopy
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkImageBlit - Structure specifying an image blit operation
+--
+-- = Description
+--
+-- For each element of the @pRegions@ array, a blit operation is performed
+-- the specified source and destination regions.
+--
+-- == Valid Usage
+--
+-- -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
+--     /must/ match
+--
+-- -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@
+--     /must/ match
+--
+-- -   If either of the calling command’s @srcImage@ or @dstImage@
+--     parameters are of 'Vulkan.Core10.Enums.ImageType.ImageType'
+--     'Vulkan.Core10.Enums.ImageType.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
+--     'Vulkan.Core10.Enums.ImageType.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
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.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
+--     'Vulkan.Core10.Enums.ImageType.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
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.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
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structure
+--
+-- -   @dstSubresource@ /must/ be a valid
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.ImageSubresourceLayers',
+-- 'Vulkan.Core10.SharedTypes.Offset3D', 'cmdBlitImage'
+data ImageBlit = ImageBlit
+  { -- | @srcSubresource@ is the subresource to blit from.
+    srcSubresource :: ImageSubresourceLayers
+  , -- | @srcOffsets@ is a pointer to an array of two
+    -- 'Vulkan.Core10.SharedTypes.Offset3D' structures specifying the bounds of
+    -- the source region within @srcSubresource@.
+    srcOffsets :: (Offset3D, Offset3D)
+  , -- | @dstSubresource@ is the subresource to blit into.
+    dstSubresource :: ImageSubresourceLayers
+  , -- | @dstOffsets@ is a pointer to an array of two
+    -- 'Vulkan.Core10.SharedTypes.Offset3D' structures specifying the bounds of
+    -- the destination region within @dstSubresource@.
+    dstOffsets :: (Offset3D, Offset3D)
+  }
+  deriving (Typeable)
+deriving instance Show ImageBlit
+
+instance ToCStruct ImageBlit where
+  withCStruct x f = allocaBytesAligned 80 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageBlit{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())
+    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))
+    case (srcOffsets) of
+      (e0, e1) -> do
+        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())
+        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())
+    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))
+    case (dstOffsets) of
+      (e0, e1) -> do
+        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())
+        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
+    lift $ f
+  cStructSize = 80
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))
+    case ((zero, zero)) of
+      (e0, e1) -> do
+        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())
+        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))
+    case ((zero, zero)) of
+      (e0, e1) -> do
+        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())
+        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())
+    lift $ f
+
+instance FromCStruct ImageBlit where
+  peekCStruct p = do
+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))
+    let psrcOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))
+    srcOffsets0 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 0 :: Ptr Offset3D))
+    srcOffsets1 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 12 :: Ptr Offset3D))
+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers))
+    let pdstOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))
+    dstOffsets0 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 0 :: Ptr Offset3D))
+    dstOffsets1 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 12 :: Ptr Offset3D))
+    pure $ ImageBlit
+             srcSubresource ((srcOffsets0, srcOffsets1)) dstSubresource ((dstOffsets0, dstOffsets1))
+
+instance Zero ImageBlit where
+  zero = ImageBlit
+           zero
+           (zero, zero)
+           zero
+           (zero, zero)
+
+
+-- | VkBufferImageCopy - Structure specifying a buffer image copy operation
+--
+-- = Description
+--
+-- When copying to or from a depth or stencil aspect, the data in buffer
+-- memory uses a layout that is a (mostly) tightly packed representation of
+-- the depth or stencil data. Specifically:
+--
+-- -   data copied to or from the stencil aspect of any depth\/stencil
+--     format is tightly packed with one
+--     'Vulkan.Core10.Enums.Format.FORMAT_S8_UINT' value per texel.
+--
+-- -   data copied to or from the depth aspect of a
+--     'Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM' or
+--     'Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM_S8_UINT' format is
+--     tightly packed with one
+--     'Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM' value per texel.
+--
+-- -   data copied to or from the depth aspect of a
+--     'Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT' or
+--     'Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT_S8_UINT' format is
+--     tightly packed with one
+--     'Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT' value per texel.
+--
+-- -   data copied to or from the depth aspect of a
+--     'Vulkan.Core10.Enums.Format.FORMAT_X8_D24_UNORM_PACK32' or
+--     'Vulkan.Core10.Enums.Format.FORMAT_D24_UNORM_S8_UINT' format is
+--     packed with one 32-bit word per texel with the D24 value in the LSBs
+--     of the word, and undefined values in the eight MSBs.
+--
+-- Note
+--
+-- To copy both the depth and stencil aspects of a depth\/stencil format,
+-- two entries in @pRegions@ /can/ be used, where one specifies the depth
+-- aspect in @imageSubresource@, and the other specifies the stencil
+-- aspect.
+--
+-- Because depth or stencil aspect buffer to image copies /may/ require
+-- format conversions on some implementations, they are not supported on
+-- queues that do not support graphics.
+--
+-- When copying to a depth aspect, and the
+-- @VK_EXT_depth_range_unrestricted@ extension is not enabled, the data in
+-- buffer memory /must/ be in the range [0,1], or the resulting values are
+-- undefined.
+--
+-- Copies are done layer by layer starting with image layer
+-- @baseArrayLayer@ member of @imageSubresource@. @layerCount@ layers are
+-- copied from the source image or to the destination image.
+--
+-- == Valid Usage
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter’s
+--     format is not a depth\/stencil format or a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     then @bufferOffset@ /must/ be a multiple of the format’s texel block
+--     size
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter’s
+--     format is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     then @bufferOffset@ /must/ be a multiple of the element size of the
+--     compatible format for the format and the @aspectMask@ of the
+--     @imageSubresource@ as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>
+--
+-- -   @bufferOffset@ /must/ be a multiple of @4@
+--
+-- -   @bufferRowLength@ /must/ be @0@, or greater than or equal to the
+--     @width@ member of @imageExtent@
+--
+-- -   @bufferImageHeight@ /must/ be @0@, or greater than or equal to the
+--     @height@ member of @imageExtent@
+--
+-- -   @imageOffset.x@ and (@imageExtent.width@ + @imageOffset.x@) /must/
+--     both be greater than or equal to @0@ and less than or equal to the
+--     image subresource width where this refers to the width of the
+--     /plane/ of the image involved in the copy in the case of a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
+--
+-- -   @imageOffset.y@ and (imageExtent.height + @imageOffset.y@) /must/
+--     both be greater than or equal to @0@ and less than or equal to the
+--     image subresource height where this refers to the height of the
+--     /plane/ of the image involved in the copy in the case of a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
+--
+-- -   If the calling command’s @srcImage@ ('cmdCopyImageToBuffer') or
+--     @dstImage@ ('cmdCopyBufferToImage') is of type
+--     'Vulkan.Core10.Enums.ImageType.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@ ('cmdCopyImageToBuffer') or
+--     @dstImage@ ('cmdCopyBufferToImage') is of type
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then @imageOffset.z@
+--     /must/ be @0@ and @imageExtent.depth@ /must/ be @1@
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter is
+--     a compressed image, or a /single-plane/, “@_422@” image format,
+--     @bufferRowLength@ /must/ be a multiple of the compressed texel block
+--     width
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter is
+--     a compressed image, or a /single-plane/, “@_422@” image format,
+--     @bufferImageHeight@ /must/ be a multiple of the compressed texel
+--     block height
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter is
+--     a compressed image, or a /single-plane/, “@_422@” image format, all
+--     members of @imageOffset@ /must/ be a multiple of the corresponding
+--     dimensions of the compressed texel block
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter is
+--     a compressed image, or a /single-plane/, “@_422@” image format,
+--     @bufferOffset@ /must/ be a multiple of the compressed texel block
+--     size in bytes
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter is
+--     a compressed image, or a /single-plane/, “@_422@” image format,
+--     @imageExtent.width@ /must/ be a multiple of the compressed texel
+--     block width or (@imageExtent.width@ + @imageOffset.x@) /must/ equal
+--     the image subresource width
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter is
+--     a compressed image, or a /single-plane/, “@_422@” image format,
+--     @imageExtent.height@ /must/ be a multiple of the compressed texel
+--     block height or (@imageExtent.height@ + @imageOffset.y@) /must/
+--     equal the image subresource height
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter is
+--     a compressed image, or a /single-plane/, “@_422@” image format,
+--     @imageExtent.depth@ /must/ be a multiple of the compressed texel
+--     block depth or (@imageExtent.depth@ + @imageOffset.z@) /must/ equal
+--     the image subresource depth
+--
+-- -   The @aspectMask@ member of @imageSubresource@ /must/ specify aspects
+--     present in the calling command’s 'Vulkan.Core10.Handles.Image'
+--     parameter
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter’s
+--     format is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     then the @aspectMask@ member of @imageSubresource@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--     (with
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--     valid only for image formats with three planes)
+--
+-- -   The @aspectMask@ member of @imageSubresource@ /must/ only have a
+--     single bit set
+--
+-- -   If the calling command’s 'Vulkan.Core10.Handles.Image' parameter is
+--     of 'Vulkan.Core10.Enums.ImageType.ImageType'
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', the @baseArrayLayer@
+--     and @layerCount@ members of @imageSubresource@ /must/ be @0@ and
+--     @1@, respectively
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @imageSubresource@ /must/ be a valid
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.SharedTypes.Extent3D',
+-- 'Vulkan.Core10.SharedTypes.ImageSubresourceLayers',
+-- 'Vulkan.Core10.SharedTypes.Offset3D', 'cmdCopyBufferToImage',
+-- 'cmdCopyImageToBuffer'
+data BufferImageCopy = BufferImageCopy
+  { -- | @bufferOffset@ is the offset in bytes from the start of the buffer
+    -- object where the image data is copied from or to.
+    bufferOffset :: DeviceSize
+  , -- | @bufferRowLength@ and @bufferImageHeight@ specify in texels a subregion
+    -- of a larger two- or three-dimensional image in buffer memory, and
+    -- control the addressing calculations. If either of these values is zero,
+    -- that aspect of the buffer memory is considered to be tightly packed
+    -- according to the @imageExtent@.
+    bufferRowLength :: Word32
+  , -- No documentation found for Nested "VkBufferImageCopy" "bufferImageHeight"
+    bufferImageHeight :: Word32
+  , -- | @imageSubresource@ is a
+    -- 'Vulkan.Core10.SharedTypes.ImageSubresourceLayers' used to specify the
+    -- specific image subresources of the image used for the source or
+    -- destination image data.
+    imageSubresource :: ImageSubresourceLayers
+  , -- | @imageOffset@ selects the initial @x@, @y@, @z@ offsets in texels of the
+    -- sub-region of the source or destination image data.
+    imageOffset :: Offset3D
+  , -- | @imageExtent@ is the size in texels of the image to copy in @width@,
+    -- @height@ and @depth@.
+    imageExtent :: Extent3D
+  }
+  deriving (Typeable)
+deriving instance Show BufferImageCopy
+
+instance ToCStruct BufferImageCopy where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferImageCopy{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (bufferOffset)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (bufferRowLength)
+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (bufferImageHeight)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (imageSubresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (imageOffset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent3D)) (imageExtent) . ($ ())
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct BufferImageCopy where
+  peekCStruct p = do
+    bufferOffset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
+    bufferRowLength <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    bufferImageHeight <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    imageSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))
+    imageOffset <- peekCStruct @Offset3D ((p `plusPtr` 32 :: Ptr Offset3D))
+    imageExtent <- peekCStruct @Extent3D ((p `plusPtr` 44 :: Ptr Extent3D))
+    pure $ BufferImageCopy
+             bufferOffset bufferRowLength bufferImageHeight imageSubresource imageOffset imageExtent
+
+instance Zero BufferImageCopy where
+  zero = BufferImageCopy
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkImageResolve - Structure specifying an image resolve operation
+--
+-- == Valid Usage
+--
+-- -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
+--     /must/ only contain
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
+--
+-- -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@
+--     /must/ match
+--
+-- -   If either of the calling command’s @srcImage@ or @dstImage@
+--     parameters are of 'Vulkan.Core10.Enums.ImageType.ImageType'
+--     'Vulkan.Core10.Enums.ImageType.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
+--     'Vulkan.Core10.Enums.ImageType.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
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.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
+--     'Vulkan.Core10.Enums.ImageType.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
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then @dstOffset.z@
+--     /must/ be @0@ and @extent.depth@ /must/ be @1@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @srcSubresource@ /must/ be a valid
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structure
+--
+-- -   @dstSubresource@ /must/ be a valid
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.Extent3D',
+-- 'Vulkan.Core10.SharedTypes.ImageSubresourceLayers',
+-- 'Vulkan.Core10.SharedTypes.Offset3D', 'cmdResolveImage'
+data ImageResolve = ImageResolve
+  { -- | @srcSubresource@ and @dstSubresource@ are
+    -- 'Vulkan.Core10.SharedTypes.ImageSubresourceLayers' structures specifying
+    -- the image subresources of the images used for the source and destination
+    -- image data, respectively. Resolve of depth\/stencil images is not
+    -- supported.
+    srcSubresource :: ImageSubresourceLayers
+  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
+    -- in texels of the sub-regions of the source and destination image data.
+    srcOffset :: Offset3D
+  , -- No documentation found for Nested "VkImageResolve" "dstSubresource"
+    dstSubresource :: ImageSubresourceLayers
+  , -- No documentation found for Nested "VkImageResolve" "dstOffset"
+    dstOffset :: Offset3D
+  , -- | @extent@ is the size in texels of the source image to resolve in
+    -- @width@, @height@ and @depth@.
+    extent :: Extent3D
+  }
+  deriving (Typeable)
+deriving instance Show ImageResolve
+
+instance ToCStruct ImageResolve where
+  withCStruct x f = allocaBytesAligned 68 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageResolve{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (srcOffset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (dstOffset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (extent) . ($ ())
+    lift $ f
+  cStructSize = 68
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct ImageResolve where
+  peekCStruct p = do
+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))
+    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 16 :: Ptr Offset3D))
+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers))
+    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 44 :: Ptr Offset3D))
+    extent <- peekCStruct @Extent3D ((p `plusPtr` 56 :: Ptr Extent3D))
+    pure $ ImageResolve
+             srcSubresource srcOffset dstSubresource dstOffset extent
+
+instance Zero ImageResolve where
+  zero = ImageResolve
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkRenderPassBeginInfo - Structure specifying render pass begin info
+--
+-- = Description
+--
+-- @renderArea@ is the render area that is affected by the render pass
+-- instance. The effects of attachment load, store and multisample resolve
+-- operations are restricted to the pixels whose x and y coordinates fall
+-- within the render area on all attachments. The render area extends to
+-- all layers of @framebuffer@. The application /must/ ensure (using
+-- scissor if necessary) that all rendering is contained within the render
+-- area. The render area, after any transform specified by
+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@
+-- is applied, /must/ be contained within the framebuffer dimensions.
+--
+-- If
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>
+-- is enabled, then @renderArea@ /must/ equal the framebuffer
+-- pre-transformed dimensions. After @renderArea@ has been transformed by
+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@,
+-- the resulting render area /must/ be equal to the framebuffer dimensions.
+--
+-- When multiview is enabled, the resolve operation at the end of a subpass
+-- applies to all views in the view mask.
+--
+-- Note
+--
+-- There /may/ be a performance cost for using a render area smaller than
+-- the framebuffer, unless it matches the render area granularity for the
+-- render pass.
+--
+-- == Valid Usage
+--
+-- -   @clearValueCount@ /must/ be greater than the largest attachment
+--     index in @renderPass@ that specifies a @loadOp@ (or @stencilLoadOp@,
+--     if the attachment has a depth\/stencil format) of
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'
+--
+-- -   @renderPass@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo' structure specified when
+--     creating @framebuffer@
+--
+-- -   If the @pNext@ chain does not contain
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'
+--     or its @deviceRenderAreaCount@ member is equal to 0,
+--     @renderArea.offset.x@ /must/ be greater than or equal to 0
+--
+-- -   If the @pNext@ chain does not contain
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'
+--     or its @deviceRenderAreaCount@ member is equal to 0,
+--     @renderArea.offset.y@ /must/ be greater than or equal to 0
+--
+-- -   If the @pNext@ chain does not contain
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'
+--     or its @deviceRenderAreaCount@ member is equal to 0,
+--     @renderArea.offset.x@ + @renderArea.offset.width@ /must/ be less
+--     than or equal to 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@width@
+--     the @framebuffer@ was created with
+--
+-- -   If the @pNext@ chain does not contain
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'
+--     or its @deviceRenderAreaCount@ member is equal to 0,
+--     @renderArea.offset.y@ + @renderArea.offset.height@ /must/ be less
+--     than or equal to
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@height@ the
+--     @framebuffer@ was created with
+--
+-- -   If the @pNext@ chain contains
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
+--     the @offset.x@ member of each element of @pDeviceRenderAreas@ /must/
+--     be greater than or equal to 0
+--
+-- -   If the @pNext@ chain contains
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
+--     the @offset.y@ member of each element of @pDeviceRenderAreas@ /must/
+--     be greater than or equal to 0
+--
+-- -   If the @pNext@ chain contains
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
+--     @offset.x@ + @offset.width@ of each element of @pDeviceRenderAreas@
+--     /must/ be less than or equal to
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@width@ the
+--     @framebuffer@ was created with
+--
+-- -   If the @pNext@ chain contains
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
+--     @offset.y@ + @offset.height@ of each element of @pDeviceRenderAreas@
+--     /must/ be less than or equal to
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@height@ the
+--     @framebuffer@ was created with
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that did
+--     not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     and the @pNext@ chain includes a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure, its @attachmentCount@ /must/ be zero
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @attachmentCount@ of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ be equal to the value
+--     of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@attachmentImageInfoCount@
+--     used to create @framebuffer@
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR',
+--     each element of the @pAttachments@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ have been created on
+--     the same 'Vulkan.Core10.Handles.Device' as @framebuffer@ and
+--     @renderPass@
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of the @pAttachments@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ be a
+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value
+--     of 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ equal to the
+--     @flags@ member of the corresponding element of
+--     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfoKHR'::@pAttachments@
+--     used to create @framebuffer@
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of the @pAttachments@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ be a
+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value
+--     of 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ equal to the
+--     @usage@ member of the corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
+--     used to create @framebuffer@
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of the @pAttachments@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ be a
+--     'Vulkan.Core10.Handles.ImageView' with a width equal to the @width@
+--     member of the corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
+--     used to create @framebuffer@
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of the @pAttachments@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ be a
+--     'Vulkan.Core10.Handles.ImageView' with a height equal to the
+--     @height@ member of the corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
+--     used to create @framebuffer@
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of the @pAttachments@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ be a
+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value
+--     of
+--     'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@subresourceRange.layerCount@
+--     equal to the @layerCount@ member of the corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
+--     used to create @framebuffer@
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of the @pAttachments@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ be a
+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value
+--     of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@viewFormatCount@
+--     equal to the @viewFormatCount@ member of the corresponding element
+--     of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
+--     used to create @framebuffer@
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of the @pAttachments@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ be a
+--     'Vulkan.Core10.Handles.ImageView' of an image created with a set of
+--     elements in
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@pViewFormats@
+--     equal to the set of elements in the @pViewFormats@ member of the
+--     corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@
+--     used to create @framebuffer@
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of the @pAttachments@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ be a
+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value
+--     of 'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@format@ equal to
+--     the corresponding value of
+--     'Vulkan.Core10.Pass.AttachmentDescription'::@format@ in @renderPass@
+--
+-- -   If @framebuffer@ was created with a
+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that
+--     included
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of the @pAttachments@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'
+--     structure included in the @pNext@ chain /must/ be a
+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value
+--     of 'Vulkan.Core10.Image.ImageCreateInfo'::@samples@ equal to the
+--     corresponding value of
+--     'Vulkan.Core10.Pass.AttachmentDescription'::@samples@ in
+--     @renderPass@
+--
+-- -   If the @pNext@ chain includes
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',
+--     @renderArea@::@offset@ /must/ equal (0,0)
+--
+-- -   If the @pNext@ chain includes
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',
+--     @renderArea@::@extent@ transformed by
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@
+--     /must/ equal the @framebuffer@ dimensions
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',
+--     'Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT',
+--     or
+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'
+--     handle
+--
+-- -   @framebuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Framebuffer'
+--     handle
+--
+-- -   If @clearValueCount@ is not @0@, @pClearValues@ /must/ be a valid
+--     pointer to an array of @clearValueCount@
+--     'Vulkan.Core10.SharedTypes.ClearValue' unions
+--
+-- -   Both of @framebuffer@, and @renderPass@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.ClearValue',
+-- 'Vulkan.Core10.Handles.Framebuffer', 'Rect2D',
+-- 'Vulkan.Core10.Handles.RenderPass',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdBeginRenderPass',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdBeginRenderPass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdBeginRenderPass2KHR'
+data RenderPassBeginInfo (es :: [Type]) = RenderPassBeginInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @renderPass@ is the render pass to begin an instance of.
+    renderPass :: RenderPass
+  , -- | @framebuffer@ is the framebuffer containing the attachments that are
+    -- used with the render pass.
+    framebuffer :: Framebuffer
+  , -- | @renderArea@ is the render area that is affected by the render pass
+    -- instance, and is described in more detail below.
+    renderArea :: Rect2D
+  , -- | @pClearValues@ is a pointer to an array of @clearValueCount@
+    -- 'Vulkan.Core10.SharedTypes.ClearValue' structures that contains clear
+    -- values for each attachment, if the attachment uses a @loadOp@ value of
+    -- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' or if
+    -- the attachment has a depth\/stencil format and uses a @stencilLoadOp@
+    -- value of
+    -- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'. The
+    -- array is indexed by attachment number. Only elements corresponding to
+    -- cleared attachments are used. Other elements of @pClearValues@ are
+    -- ignored.
+    clearValues :: Vector ClearValue
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (RenderPassBeginInfo es)
+
+instance Extensible RenderPassBeginInfo where
+  extensibleType = STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
+  setNext x next = x{next = next}
+  getNext RenderPassBeginInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RenderPassBeginInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @RenderPassTransformBeginInfoQCOM = Just f
+    | Just Refl <- eqT @e @RenderPassAttachmentBeginInfo = Just f
+    | Just Refl <- eqT @e @RenderPassSampleLocationsBeginInfoEXT = Just f
+    | Just Refl <- eqT @e @DeviceGroupRenderPassBeginInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss RenderPassBeginInfo es, PokeChain es) => ToCStruct (RenderPassBeginInfo es) where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RenderPassBeginInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPass)) (renderPass)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Framebuffer)) (framebuffer)
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (renderArea) . ($ ())
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (clearValues)) :: Word32))
+    pPClearValues' <- ContT $ allocaBytesAligned @ClearValue ((Data.Vector.length (clearValues)) * 16) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPClearValues' `plusPtr` (16 * (i)) :: Ptr ClearValue) (e) . ($ ())) (clearValues)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr ClearValue))) (pPClearValues')
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPass)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Framebuffer)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (zero) . ($ ())
+    pPClearValues' <- ContT $ allocaBytesAligned @ClearValue ((Data.Vector.length (mempty)) * 16) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPClearValues' `plusPtr` (16 * (i)) :: Ptr ClearValue) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr ClearValue))) (pPClearValues')
+    lift $ f
+
+instance es ~ '[] => Zero (RenderPassBeginInfo es) where
+  zero = RenderPassBeginInfo
+           ()
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkClearAttachment - Structure specifying a clear attachment
+--
+-- = Description
+--
+-- No memory barriers are needed between 'cmdClearAttachments' and
+-- preceding or subsequent draw or attachment clear commands in the same
+-- subpass.
+--
+-- The 'cmdClearAttachments' command is not affected by the bound pipeline
+-- state.
+--
+-- Attachments /can/ also be cleared at the beginning of a render pass
+-- instance by setting @loadOp@ (or @stencilLoadOp@) of
+-- 'Vulkan.Core10.Pass.AttachmentDescription' to
+-- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', as
+-- described for 'Vulkan.Core10.Pass.createRenderPass'.
+--
+-- == Valid Usage
+--
+-- -   If @aspectMask@ includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT', it
+--     /must/ not include
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--
+-- -   @aspectMask@ /must/ not include
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'
+--
+-- -   @aspectMask@ /must/ not include
+--     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@
+--
+-- -   @clearValue@ /must/ be a valid
+--     'Vulkan.Core10.SharedTypes.ClearValue' union
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @aspectMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' values
+--
+-- -   @aspectMask@ /must/ not be @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.ClearValue',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
+-- 'cmdClearAttachments'
+data ClearAttachment = ClearAttachment
+  { -- | @aspectMask@ is a mask selecting the color, depth and\/or stencil
+    -- aspects of the attachment to be cleared.
+    aspectMask :: ImageAspectFlags
+  , -- | @colorAttachment@ is only meaningful if
+    -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT' is set
+    -- in @aspectMask@, in which case it is an index to the @pColorAttachments@
+    -- array in the 'Vulkan.Core10.Pass.SubpassDescription' structure of the
+    -- current subpass which selects the color attachment to clear.
+    colorAttachment :: Word32
+  , -- | @clearValue@ is the color or depth\/stencil value to clear the
+    -- attachment to, as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values Clear Values>
+    -- below.
+    clearValue :: ClearValue
+  }
+  deriving (Typeable)
+deriving instance Show ClearAttachment
+
+instance ToCStruct ClearAttachment where
+  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ClearAttachment{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)
+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (colorAttachment)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr ClearValue)) (clearValue) . ($ ())
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (zero)
+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr ClearValue)) (zero) . ($ ())
+    lift $ f
+
+instance Zero ClearAttachment where
+  zero = ClearAttachment
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/CommandBufferBuilding.hs-boot b/src/Vulkan/Core10/CommandBufferBuilding.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/CommandBufferBuilding.hs-boot
@@ -0,0 +1,95 @@
+{-# language CPP #-}
+module Vulkan.Core10.CommandBufferBuilding  ( BufferCopy
+                                            , BufferImageCopy
+                                            , ClearAttachment
+                                            , ClearRect
+                                            , ImageBlit
+                                            , ImageCopy
+                                            , ImageResolve
+                                            , Rect2D
+                                            , RenderPassBeginInfo
+                                            , Viewport
+                                            ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data BufferCopy
+
+instance ToCStruct BufferCopy
+instance Show BufferCopy
+
+instance FromCStruct BufferCopy
+
+
+data BufferImageCopy
+
+instance ToCStruct BufferImageCopy
+instance Show BufferImageCopy
+
+instance FromCStruct BufferImageCopy
+
+
+data ClearAttachment
+
+instance ToCStruct ClearAttachment
+instance Show ClearAttachment
+
+
+data ClearRect
+
+instance ToCStruct ClearRect
+instance Show ClearRect
+
+instance FromCStruct ClearRect
+
+
+data ImageBlit
+
+instance ToCStruct ImageBlit
+instance Show ImageBlit
+
+instance FromCStruct ImageBlit
+
+
+data ImageCopy
+
+instance ToCStruct ImageCopy
+instance Show ImageCopy
+
+instance FromCStruct ImageCopy
+
+
+data ImageResolve
+
+instance ToCStruct ImageResolve
+instance Show ImageResolve
+
+instance FromCStruct ImageResolve
+
+
+data Rect2D
+
+instance ToCStruct Rect2D
+instance Show Rect2D
+
+instance FromCStruct Rect2D
+
+
+type role RenderPassBeginInfo nominal
+data RenderPassBeginInfo (es :: [Type])
+
+instance (Extendss RenderPassBeginInfo es, PokeChain es) => ToCStruct (RenderPassBeginInfo es)
+instance Show (Chain es) => Show (RenderPassBeginInfo es)
+
+
+data Viewport
+
+instance ToCStruct Viewport
+instance Show Viewport
+
+instance FromCStruct Viewport
+
diff --git a/src/Vulkan/Core10/CommandPool.hs b/src/Vulkan/Core10/CommandPool.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/CommandPool.hs
@@ -0,0 +1,386 @@
+{-# language CPP #-}
+module Vulkan.Core10.CommandPool  ( createCommandPool
+                                  , withCommandPool
+                                  , destroyCommandPool
+                                  , resetCommandPool
+                                  , CommandPoolCreateInfo(..)
+                                  ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Handles (CommandPool)
+import Vulkan.Core10.Handles (CommandPool(..))
+import Vulkan.Core10.Enums.CommandPoolCreateFlagBits (CommandPoolCreateFlags)
+import Vulkan.Core10.Enums.CommandPoolResetFlagBits (CommandPoolResetFlagBits(..))
+import Vulkan.Core10.Enums.CommandPoolResetFlagBits (CommandPoolResetFlags)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateCommandPool))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyCommandPool))
+import Vulkan.Dynamic (DeviceCmds(pVkResetCommandPool))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateCommandPool
+  :: FunPtr (Ptr Device_T -> Ptr CommandPoolCreateInfo -> Ptr AllocationCallbacks -> Ptr CommandPool -> IO Result) -> Ptr Device_T -> Ptr CommandPoolCreateInfo -> Ptr AllocationCallbacks -> Ptr CommandPool -> IO Result
+
+-- | vkCreateCommandPool - Create a new command pool object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the command pool.
+--
+-- -   @pCreateInfo@ is a pointer to a 'CommandPoolCreateInfo' structure
+--     specifying the state of the command pool object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pCommandPool@ is a pointer to a 'Vulkan.Core10.Handles.CommandPool'
+--     handle in which the created pool is returned.
+--
+-- == Valid Usage
+--
+-- -   @pCreateInfo->queueFamilyIndex@ /must/ be the index of a queue
+--     family available in the logical device @device@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'CommandPoolCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pCommandPool@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.CommandPool' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.CommandPool', 'CommandPoolCreateInfo',
+-- 'Vulkan.Core10.Handles.Device'
+createCommandPool :: forall io . MonadIO io => Device -> CommandPoolCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (CommandPool)
+createCommandPool device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateCommandPoolPtr = pVkCreateCommandPool (deviceCmds (device :: Device))
+  lift $ unless (vkCreateCommandPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateCommandPool is null" Nothing Nothing
+  let vkCreateCommandPool' = mkVkCreateCommandPool vkCreateCommandPoolPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPCommandPool <- ContT $ bracket (callocBytes @CommandPool 8) free
+  r <- lift $ vkCreateCommandPool' (deviceHandle (device)) pCreateInfo pAllocator (pPCommandPool)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pCommandPool <- lift $ peek @CommandPool pPCommandPool
+  pure $ (pCommandPool)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createCommandPool' and 'destroyCommandPool'
+--
+-- To ensure that 'destroyCommandPool' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withCommandPool :: forall io r . MonadIO io => Device -> CommandPoolCreateInfo -> Maybe AllocationCallbacks -> (io (CommandPool) -> ((CommandPool) -> io ()) -> r) -> r
+withCommandPool device pCreateInfo pAllocator b =
+  b (createCommandPool device pCreateInfo pAllocator)
+    (\(o0) -> destroyCommandPool device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyCommandPool
+  :: FunPtr (Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> CommandPool -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyCommandPool - Destroy a command pool object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- = Description
+--
+-- When a pool is destroyed, all command buffers allocated from the pool
+-- are <vkFreeCommandBuffers.html freed>.
+--
+-- Any primary command buffer allocated from another
+-- 'Vulkan.Core10.Handles.CommandPool' that is in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or executable state>
+-- and has a secondary command buffer allocated from @commandPool@ recorded
+-- into it, becomes
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
+--
+-- == Valid Usage
+--
+-- -   All 'Vulkan.Core10.Handles.CommandBuffer' objects allocated from
+--     @commandPool@ /must/ not be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @commandPool@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @commandPool@ was created, @pAllocator@ /must/ be
+--     @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @commandPool@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @commandPool@ /must/ be a valid 'Vulkan.Core10.Handles.CommandPool'
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' 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
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.CommandPool', 'Vulkan.Core10.Handles.Device'
+destroyCommandPool :: forall io . MonadIO io => Device -> CommandPool -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyCommandPool device commandPool allocator = liftIO . evalContT $ do
+  let vkDestroyCommandPoolPtr = pVkDestroyCommandPool (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyCommandPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyCommandPool is null" Nothing Nothing
+  let vkDestroyCommandPool' = mkVkDestroyCommandPool vkDestroyCommandPoolPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyCommandPool' (deviceHandle (device)) (commandPool) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkResetCommandPool
+  :: FunPtr (Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result) -> Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result
+
+-- | vkResetCommandPool - Reset a command pool
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the command pool.
+--
+-- -   @commandPool@ is the command pool to reset.
+--
+-- -   @flags@ is a bitmask of
+--     'Vulkan.Core10.Enums.CommandPoolResetFlagBits.CommandPoolResetFlagBits'
+--     controlling the reset operation.
+--
+-- = 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>.
+--
+-- Any primary command buffer allocated from another
+-- 'Vulkan.Core10.Handles.CommandPool' that is in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or executable state>
+-- and has a secondary command buffer allocated from @commandPool@ recorded
+-- into it, becomes
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
+--
+-- == Valid Usage
+--
+-- -   All 'Vulkan.Core10.Handles.CommandBuffer' objects allocated from
+--     @commandPool@ /must/ not be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @commandPool@ /must/ be a valid 'Vulkan.Core10.Handles.CommandPool'
+--     handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.CommandPoolResetFlagBits.CommandPoolResetFlagBits'
+--     values
+--
+-- -   @commandPool@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandPool@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandPool',
+-- 'Vulkan.Core10.Enums.CommandPoolResetFlagBits.CommandPoolResetFlags',
+-- 'Vulkan.Core10.Handles.Device'
+resetCommandPool :: forall io . MonadIO io => Device -> CommandPool -> CommandPoolResetFlags -> io ()
+resetCommandPool device commandPool flags = liftIO $ do
+  let vkResetCommandPoolPtr = pVkResetCommandPool (deviceCmds (device :: Device))
+  unless (vkResetCommandPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkResetCommandPool is null" Nothing Nothing
+  let vkResetCommandPool' = mkVkResetCommandPool vkResetCommandPoolPtr
+  r <- vkResetCommandPool' (deviceHandle (device)) (commandPool) (flags)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkCommandPoolCreateInfo - Structure specifying parameters of a newly
+-- created command pool
+--
+-- == Valid Usage
+--
+-- -   If the protected memory feature is not enabled, the
+--     'Vulkan.Core10.Enums.CommandPoolCreateFlagBits.COMMAND_POOL_CREATE_PROTECTED_BIT'
+--     bit of @flags@ /must/ not be set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.CommandPoolCreateFlagBits.CommandPoolCreateFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.CommandPoolCreateFlagBits.CommandPoolCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createCommandPool'
+data CommandPoolCreateInfo = CommandPoolCreateInfo
+  { -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.CommandPoolCreateFlagBits.CommandPoolCreateFlagBits'
+    -- indicating usage behavior for the pool and command buffers allocated
+    -- from it.
+    flags :: CommandPoolCreateFlags
+  , -- | @queueFamilyIndex@ designates a queue family as described in section
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-queueprops Queue Family Properties>.
+    -- All command buffers allocated from this command pool /must/ be submitted
+    -- on queues from the same queue family.
+    queueFamilyIndex :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show CommandPoolCreateInfo
+
+instance ToCStruct CommandPoolCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CommandPoolCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CommandPoolCreateFlags)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (queueFamilyIndex)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct CommandPoolCreateInfo where
+  peekCStruct p = do
+    flags <- peek @CommandPoolCreateFlags ((p `plusPtr` 16 :: Ptr CommandPoolCreateFlags))
+    queueFamilyIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pure $ CommandPoolCreateInfo
+             flags queueFamilyIndex
+
+instance Storable CommandPoolCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero CommandPoolCreateInfo where
+  zero = CommandPoolCreateInfo
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/CommandPool.hs-boot b/src/Vulkan/Core10/CommandPool.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/CommandPool.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core10.CommandPool  (CommandPoolCreateInfo) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data CommandPoolCreateInfo
+
+instance ToCStruct CommandPoolCreateInfo
+instance Show CommandPoolCreateInfo
+
+instance FromCStruct CommandPoolCreateInfo
+
diff --git a/src/Vulkan/Core10/DescriptorSet.hs b/src/Vulkan/Core10/DescriptorSet.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/DescriptorSet.hs
@@ -0,0 +1,2392 @@
+{-# language CPP #-}
+module Vulkan.Core10.DescriptorSet  ( createDescriptorSetLayout
+                                    , withDescriptorSetLayout
+                                    , destroyDescriptorSetLayout
+                                    , createDescriptorPool
+                                    , withDescriptorPool
+                                    , destroyDescriptorPool
+                                    , resetDescriptorPool
+                                    , allocateDescriptorSets
+                                    , withDescriptorSets
+                                    , freeDescriptorSets
+                                    , updateDescriptorSets
+                                    , DescriptorBufferInfo(..)
+                                    , DescriptorImageInfo(..)
+                                    , WriteDescriptorSet(..)
+                                    , CopyDescriptorSet(..)
+                                    , DescriptorSetLayoutBinding(..)
+                                    , DescriptorSetLayoutCreateInfo(..)
+                                    , DescriptorPoolSize(..)
+                                    , DescriptorPoolCreateInfo(..)
+                                    , DescriptorSetAllocateInfo(..)
+                                    ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (BufferView)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (DescriptorPool)
+import Vulkan.Core10.Handles (DescriptorPool(..))
+import Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits (DescriptorPoolCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (DescriptorPoolInlineUniformBlockCreateInfoEXT)
+import Vulkan.Core10.Enums.DescriptorPoolResetFlags (DescriptorPoolResetFlags)
+import Vulkan.Core10.Enums.DescriptorPoolResetFlags (DescriptorPoolResetFlags(..))
+import Vulkan.Core10.Handles (DescriptorSet)
+import Vulkan.Core10.Handles (DescriptorSet(..))
+import Vulkan.Core10.Handles (DescriptorSetLayout)
+import Vulkan.Core10.Handles (DescriptorSetLayout(..))
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetLayoutBindingFlagsCreateInfo)
+import Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits (DescriptorSetLayoutCreateFlags)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountAllocateInfo)
+import Vulkan.Core10.Enums.DescriptorType (DescriptorType)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkAllocateDescriptorSets))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateDescriptorPool))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateDescriptorSetLayout))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyDescriptorPool))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyDescriptorSetLayout))
+import Vulkan.Dynamic (DeviceCmds(pVkFreeDescriptorSets))
+import Vulkan.Dynamic (DeviceCmds(pVkResetDescriptorPool))
+import Vulkan.Dynamic (DeviceCmds(pVkUpdateDescriptorSets))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import Vulkan.Core10.Handles (ImageView)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Handles (Sampler)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (WriteDescriptorSetAccelerationStructureKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (WriteDescriptorSetInlineUniformBlockEXT)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_DESCRIPTOR_SET))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateDescriptorSetLayout
+  :: FunPtr (Ptr Device_T -> Ptr (DescriptorSetLayoutCreateInfo a) -> Ptr AllocationCallbacks -> Ptr DescriptorSetLayout -> IO Result) -> Ptr Device_T -> Ptr (DescriptorSetLayoutCreateInfo a) -> Ptr AllocationCallbacks -> Ptr DescriptorSetLayout -> IO Result
+
+-- | vkCreateDescriptorSetLayout - Create a new descriptor set layout
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the descriptor set
+--     layout.
+--
+-- -   @pCreateInfo@ is a pointer to a 'DescriptorSetLayoutCreateInfo'
+--     structure specifying the state of the descriptor set layout object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pSetLayout@ is a pointer to a
+--     'Vulkan.Core10.Handles.DescriptorSetLayout' handle in which the
+--     resulting descriptor set layout object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'DescriptorSetLayoutCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSetLayout@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.DescriptorSetLayout' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.DescriptorSetLayout',
+-- 'DescriptorSetLayoutCreateInfo', 'Vulkan.Core10.Handles.Device'
+createDescriptorSetLayout :: forall a io . (Extendss DescriptorSetLayoutCreateInfo a, PokeChain a, MonadIO io) => Device -> DescriptorSetLayoutCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DescriptorSetLayout)
+createDescriptorSetLayout device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateDescriptorSetLayoutPtr = pVkCreateDescriptorSetLayout (deviceCmds (device :: Device))
+  lift $ unless (vkCreateDescriptorSetLayoutPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateDescriptorSetLayout is null" Nothing Nothing
+  let vkCreateDescriptorSetLayout' = mkVkCreateDescriptorSetLayout vkCreateDescriptorSetLayoutPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSetLayout <- ContT $ bracket (callocBytes @DescriptorSetLayout 8) free
+  r <- lift $ vkCreateDescriptorSetLayout' (deviceHandle (device)) pCreateInfo pAllocator (pPSetLayout)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSetLayout <- lift $ peek @DescriptorSetLayout pPSetLayout
+  pure $ (pSetLayout)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createDescriptorSetLayout' and 'destroyDescriptorSetLayout'
+--
+-- To ensure that 'destroyDescriptorSetLayout' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withDescriptorSetLayout :: forall a io r . (Extendss DescriptorSetLayoutCreateInfo a, PokeChain a, MonadIO io) => Device -> DescriptorSetLayoutCreateInfo a -> Maybe AllocationCallbacks -> (io (DescriptorSetLayout) -> ((DescriptorSetLayout) -> io ()) -> r) -> r
+withDescriptorSetLayout device pCreateInfo pAllocator b =
+  b (createDescriptorSetLayout device pCreateInfo pAllocator)
+    (\(o0) -> destroyDescriptorSetLayout device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyDescriptorSetLayout
+  :: FunPtr (Ptr Device_T -> DescriptorSetLayout -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DescriptorSetLayout -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyDescriptorSetLayout - Destroy a descriptor set layout object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @descriptorSetLayout@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @descriptorSetLayout@ was created, @pAllocator@ /must/
+--     be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @descriptorSetLayout@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @descriptorSetLayout@
+--     /must/ be a valid 'Vulkan.Core10.Handles.DescriptorSetLayout' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   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
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.DescriptorSetLayout',
+-- 'Vulkan.Core10.Handles.Device'
+destroyDescriptorSetLayout :: forall io . MonadIO io => Device -> DescriptorSetLayout -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyDescriptorSetLayout device descriptorSetLayout allocator = liftIO . evalContT $ do
+  let vkDestroyDescriptorSetLayoutPtr = pVkDestroyDescriptorSetLayout (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyDescriptorSetLayoutPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyDescriptorSetLayout is null" Nothing Nothing
+  let vkDestroyDescriptorSetLayout' = mkVkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayoutPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyDescriptorSetLayout' (deviceHandle (device)) (descriptorSetLayout) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateDescriptorPool
+  :: FunPtr (Ptr Device_T -> Ptr (DescriptorPoolCreateInfo a) -> Ptr AllocationCallbacks -> Ptr DescriptorPool -> IO Result) -> Ptr Device_T -> Ptr (DescriptorPoolCreateInfo a) -> Ptr AllocationCallbacks -> Ptr DescriptorPool -> IO Result
+
+-- | vkCreateDescriptorPool - Creates a descriptor pool object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the descriptor pool.
+--
+-- -   @pCreateInfo@ is a pointer to a 'DescriptorPoolCreateInfo' structure
+--     specifying the state of the descriptor pool object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pDescriptorPool@ is a pointer to a
+--     'Vulkan.Core10.Handles.DescriptorPool' handle in which the resulting
+--     descriptor pool object is returned.
+--
+-- = Description
+--
+-- @pAllocator@ controls host memory allocation as described in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+-- chapter.
+--
+-- The created descriptor pool is returned in @pDescriptorPool@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'DescriptorPoolCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pDescriptorPool@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.DescriptorPool' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Extensions.VK_EXT_descriptor_indexing.ERROR_FRAGMENTATION_EXT'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.DescriptorPool', 'DescriptorPoolCreateInfo',
+-- 'Vulkan.Core10.Handles.Device'
+createDescriptorPool :: forall a io . (Extendss DescriptorPoolCreateInfo a, PokeChain a, MonadIO io) => Device -> DescriptorPoolCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DescriptorPool)
+createDescriptorPool device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateDescriptorPoolPtr = pVkCreateDescriptorPool (deviceCmds (device :: Device))
+  lift $ unless (vkCreateDescriptorPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateDescriptorPool is null" Nothing Nothing
+  let vkCreateDescriptorPool' = mkVkCreateDescriptorPool vkCreateDescriptorPoolPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPDescriptorPool <- ContT $ bracket (callocBytes @DescriptorPool 8) free
+  r <- lift $ vkCreateDescriptorPool' (deviceHandle (device)) pCreateInfo pAllocator (pPDescriptorPool)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pDescriptorPool <- lift $ peek @DescriptorPool pPDescriptorPool
+  pure $ (pDescriptorPool)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createDescriptorPool' and 'destroyDescriptorPool'
+--
+-- To ensure that 'destroyDescriptorPool' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withDescriptorPool :: forall a io r . (Extendss DescriptorPoolCreateInfo a, PokeChain a, MonadIO io) => Device -> DescriptorPoolCreateInfo a -> Maybe AllocationCallbacks -> (io (DescriptorPool) -> ((DescriptorPool) -> io ()) -> r) -> r
+withDescriptorPool device pCreateInfo pAllocator b =
+  b (createDescriptorPool device pCreateInfo pAllocator)
+    (\(o0) -> destroyDescriptorPool device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyDescriptorPool
+  :: FunPtr (Ptr Device_T -> DescriptorPool -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DescriptorPool -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyDescriptorPool - Destroy a descriptor pool object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- = 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 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @descriptorPool@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @descriptorPool@ was created, @pAllocator@ /must/ be
+--     @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @descriptorPool@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @descriptorPool@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorPool' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' 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
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.DescriptorPool', 'Vulkan.Core10.Handles.Device'
+destroyDescriptorPool :: forall io . MonadIO io => Device -> DescriptorPool -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyDescriptorPool device descriptorPool allocator = liftIO . evalContT $ do
+  let vkDestroyDescriptorPoolPtr = pVkDestroyDescriptorPool (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyDescriptorPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyDescriptorPool is null" Nothing Nothing
+  let vkDestroyDescriptorPool' = mkVkDestroyDescriptorPool vkDestroyDescriptorPoolPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyDescriptorPool' (deviceHandle (device)) (descriptorPool) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkResetDescriptorPool
+  :: FunPtr (Ptr Device_T -> DescriptorPool -> DescriptorPoolResetFlags -> IO Result) -> Ptr Device_T -> DescriptorPool -> DescriptorPoolResetFlags -> IO Result
+
+-- | vkResetDescriptorPool - Resets a descriptor pool object
+--
+-- = 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
+--
+-- 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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @descriptorPool@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorPool' 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 'Vulkan.Core10.Handles.DescriptorSet' objects
+--     allocated from @descriptorPool@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DescriptorPool',
+-- 'Vulkan.Core10.Enums.DescriptorPoolResetFlags.DescriptorPoolResetFlags',
+-- 'Vulkan.Core10.Handles.Device'
+resetDescriptorPool :: forall io . MonadIO io => Device -> DescriptorPool -> DescriptorPoolResetFlags -> io ()
+resetDescriptorPool device descriptorPool flags = liftIO $ do
+  let vkResetDescriptorPoolPtr = pVkResetDescriptorPool (deviceCmds (device :: Device))
+  unless (vkResetDescriptorPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkResetDescriptorPool is null" Nothing Nothing
+  let vkResetDescriptorPool' = mkVkResetDescriptorPool vkResetDescriptorPoolPtr
+  _ <- vkResetDescriptorPool' (deviceHandle (device)) (descriptorPool) (flags)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkAllocateDescriptorSets
+  :: FunPtr (Ptr Device_T -> Ptr (DescriptorSetAllocateInfo a) -> Ptr DescriptorSet -> IO Result) -> Ptr Device_T -> Ptr (DescriptorSetAllocateInfo a) -> Ptr DescriptorSet -> IO Result
+
+-- | vkAllocateDescriptorSets - Allocate one or more descriptor sets
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the descriptor pool.
+--
+-- -   @pAllocateInfo@ is a pointer to a 'DescriptorSetAllocateInfo'
+--     structure describing parameters of the allocation.
+--
+-- -   @pDescriptorSets@ is a pointer to an array of
+--     'Vulkan.Core10.Handles.DescriptorSet' handles in which the resulting
+--     descriptor set objects are returned.
+--
+-- = 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. Descriptors also become
+-- undefined if the underlying resource is destroyed. Descriptor sets
+-- containing undefined descriptors /can/ still be bound and used, subject
+-- to the following conditions:
+--
+-- -   For descriptor set bindings created with the
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'
+--     bit set, all descriptors in that binding that are dynamically used
+--     /must/ have been populated before the descriptor set is
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-binding consumed>.
+--
+-- -   For descriptor set bindings created without the
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'
+--     bit set, all descriptors in that binding that are statically used
+--     /must/ have been populated before the descriptor set is
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-binding consumed>.
+--
+-- -   Descriptor bindings with descriptor type of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+--     /can/ be undefined when the descriptor set is
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-binding consumed>;
+--     though values in that block will be undefined.
+--
+-- -   Entries that are not used by a pipeline /can/ have undefined
+--     descriptors.
+--
+-- If a call to 'allocateDescriptorSets' would cause the total number of
+-- descriptor sets allocated from the pool to exceed the value of
+-- 'DescriptorPoolCreateInfo'::@maxSets@ used to create
+-- @pAllocateInfo->descriptorPool@, then the allocation /may/ fail due to
+-- lack of space in the descriptor pool. Similarly, the allocation /may/
+-- fail due to lack of space if the call to 'allocateDescriptorSets' would
+-- cause the number of any given descriptor type to exceed the sum of all
+-- the @descriptorCount@ members of each element of
+-- 'DescriptorPoolCreateInfo'::@pPoolSizes@ with a @member@ equal to that
+-- type.
+--
+-- Additionally, the allocation /may/ also fail if a call to
+-- 'allocateDescriptorSets' would cause the total number of inline uniform
+-- block bindings allocated from the pool to exceed the value of
+-- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.DescriptorPoolInlineUniformBlockCreateInfoEXT'::@maxInlineUniformBlockBindings@
+-- used to create the descriptor pool.
+--
+-- If the allocation fails due to no more space in the descriptor pool, and
+-- not because of system or device memory exhaustion, then
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_POOL_MEMORY' /must/ be
+-- returned.
+--
+-- 'allocateDescriptorSets' /can/ be used to create multiple descriptor
+-- sets. If the creation of any of those descriptor sets fails, then the
+-- implementation /must/ destroy all successfully created descriptor set
+-- objects from this command, set all entries of the @pDescriptorSets@
+-- array to 'Vulkan.Core10.APIConstants.NULL_HANDLE' and return the error.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pAllocateInfo@ /must/ be a valid pointer to a valid
+--     'DescriptorSetAllocateInfo' structure
+--
+-- -   @pDescriptorSets@ /must/ be a valid pointer to an array of
+--     @pAllocateInfo->descriptorSetCount@
+--     'Vulkan.Core10.Handles.DescriptorSet' handles
+--
+-- -   The value referenced by @pAllocateInfo->descriptorSetCount@ /must/
+--     be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pAllocateInfo->descriptorPool@ /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_FRAGMENTED_POOL'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_POOL_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DescriptorSet', 'DescriptorSetAllocateInfo',
+-- 'Vulkan.Core10.Handles.Device'
+allocateDescriptorSets :: forall a io . (Extendss DescriptorSetAllocateInfo a, PokeChain a, MonadIO io) => Device -> DescriptorSetAllocateInfo a -> io (("descriptorSets" ::: Vector DescriptorSet))
+allocateDescriptorSets device allocateInfo = liftIO . evalContT $ do
+  let vkAllocateDescriptorSetsPtr = pVkAllocateDescriptorSets (deviceCmds (device :: Device))
+  lift $ unless (vkAllocateDescriptorSetsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAllocateDescriptorSets is null" Nothing Nothing
+  let vkAllocateDescriptorSets' = mkVkAllocateDescriptorSets vkAllocateDescriptorSetsPtr
+  pAllocateInfo <- ContT $ withCStruct (allocateInfo)
+  pPDescriptorSets <- ContT $ bracket (callocBytes @DescriptorSet ((fromIntegral . Data.Vector.length . setLayouts $ (allocateInfo)) * 8)) free
+  r <- lift $ vkAllocateDescriptorSets' (deviceHandle (device)) pAllocateInfo (pPDescriptorSets)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pDescriptorSets <- lift $ generateM (fromIntegral . Data.Vector.length . setLayouts $ (allocateInfo)) (\i -> peek @DescriptorSet ((pPDescriptorSets `advancePtrBytes` (8 * (i)) :: Ptr DescriptorSet)))
+  pure $ (pDescriptorSets)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'allocateDescriptorSets' and 'freeDescriptorSets'
+--
+-- To ensure that 'freeDescriptorSets' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withDescriptorSets :: forall a io r . (Extendss DescriptorSetAllocateInfo a, PokeChain a, MonadIO io) => Device -> DescriptorSetAllocateInfo a -> (io (Vector DescriptorSet) -> ((Vector DescriptorSet) -> io ()) -> r) -> r
+withDescriptorSets device pAllocateInfo b =
+  b (allocateDescriptorSets device pAllocateInfo)
+    (\(o0) -> freeDescriptorSets device (descriptorPool (pAllocateInfo :: DescriptorSetAllocateInfo a)) o0)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkFreeDescriptorSets
+  :: FunPtr (Ptr Device_T -> DescriptorPool -> Word32 -> Ptr DescriptorSet -> IO Result) -> Ptr Device_T -> DescriptorPool -> Word32 -> Ptr DescriptorSet -> IO Result
+
+-- | vkFreeDescriptorSets - Free one or more descriptor sets
+--
+-- = 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 a pointer to an array of handles to
+--     'Vulkan.Core10.Handles.DescriptorSet' objects.
+--
+-- = Description
+--
+-- After calling 'freeDescriptorSets', 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@ 'Vulkan.Core10.Handles.DescriptorSet' handles,
+--     each element of which /must/ either be a valid handle or
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   Each valid handle in @pDescriptorSets@ /must/ have been allocated
+--     from @descriptorPool@
+--
+-- -   @descriptorPool@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT'
+--     flag
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @descriptorPool@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorPool' 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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DescriptorPool',
+-- 'Vulkan.Core10.Handles.DescriptorSet', 'Vulkan.Core10.Handles.Device'
+freeDescriptorSets :: forall io . MonadIO io => Device -> DescriptorPool -> ("descriptorSets" ::: Vector DescriptorSet) -> io ()
+freeDescriptorSets device descriptorPool descriptorSets = liftIO . evalContT $ do
+  let vkFreeDescriptorSetsPtr = pVkFreeDescriptorSets (deviceCmds (device :: Device))
+  lift $ unless (vkFreeDescriptorSetsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkFreeDescriptorSets is null" Nothing Nothing
+  let vkFreeDescriptorSets' = mkVkFreeDescriptorSets vkFreeDescriptorSetsPtr
+  pPDescriptorSets <- ContT $ allocaBytesAligned @DescriptorSet ((Data.Vector.length (descriptorSets)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorSets `plusPtr` (8 * (i)) :: Ptr DescriptorSet) (e)) (descriptorSets)
+  _ <- lift $ vkFreeDescriptorSets' (deviceHandle (device)) (descriptorPool) ((fromIntegral (Data.Vector.length $ (descriptorSets)) :: Word32)) (pPDescriptorSets)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkUpdateDescriptorSets
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (WriteDescriptorSet a) -> Word32 -> Ptr CopyDescriptorSet -> IO ()) -> Ptr Device_T -> Word32 -> Ptr (WriteDescriptorSet a) -> Word32 -> Ptr CopyDescriptorSet -> IO ()
+
+-- | vkUpdateDescriptorSets - Update the contents of a descriptor set object
+--
+-- = 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 'WriteDescriptorSet'
+--     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 'CopyDescriptorSet'
+--     structures describing the descriptor sets to copy between.
+--
+-- = 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 'CopyDescriptorSet'
+-- 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or executable state>,
+-- and any of the descriptor bindings that are updated were not created
+-- with the
+-- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+-- or
+-- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'
+-- bits set, that command buffer becomes
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.
+--
+-- == Valid Usage
+--
+-- -   Descriptor bindings updated by this command which were created
+--     without the
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--     or
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'
+--     bits set /must/ not be used by any command that was recorded to a
+--     command buffer which is in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @descriptorWriteCount@ is not @0@, @pDescriptorWrites@ /must/ be
+--     a valid pointer to an array of @descriptorWriteCount@ valid
+--     'WriteDescriptorSet' structures
+--
+-- -   If @descriptorCopyCount@ is not @0@, @pDescriptorCopies@ /must/ be a
+--     valid pointer to an array of @descriptorCopyCount@ valid
+--     'CopyDescriptorSet' structures
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pDescriptorWrites@[].dstSet /must/ be externally
+--     synchronized
+--
+-- -   Host access to @pDescriptorCopies@[].dstSet /must/ be externally
+--     synchronized
+--
+-- = See Also
+--
+-- 'CopyDescriptorSet', 'Vulkan.Core10.Handles.Device',
+-- 'WriteDescriptorSet'
+updateDescriptorSets :: forall io . MonadIO io => Device -> ("descriptorWrites" ::: Vector (SomeStruct WriteDescriptorSet)) -> ("descriptorCopies" ::: Vector CopyDescriptorSet) -> io ()
+updateDescriptorSets device descriptorWrites descriptorCopies = liftIO . evalContT $ do
+  let vkUpdateDescriptorSetsPtr = pVkUpdateDescriptorSets (deviceCmds (device :: Device))
+  lift $ unless (vkUpdateDescriptorSetsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkUpdateDescriptorSets is null" Nothing Nothing
+  let vkUpdateDescriptorSets' = mkVkUpdateDescriptorSets vkUpdateDescriptorSetsPtr
+  pPDescriptorWrites <- ContT $ allocaBytesAligned @(WriteDescriptorSet _) ((Data.Vector.length (descriptorWrites)) * 64) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPDescriptorWrites `plusPtr` (64 * (i)) :: Ptr (WriteDescriptorSet _))) (e) . ($ ())) (descriptorWrites)
+  pPDescriptorCopies <- ContT $ allocaBytesAligned @CopyDescriptorSet ((Data.Vector.length (descriptorCopies)) * 56) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDescriptorCopies `plusPtr` (56 * (i)) :: Ptr CopyDescriptorSet) (e) . ($ ())) (descriptorCopies)
+  lift $ vkUpdateDescriptorSets' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (descriptorWrites)) :: Word32)) (pPDescriptorWrites) ((fromIntegral (Data.Vector.length $ (descriptorCopies)) :: Word32)) (pPDescriptorCopies)
+  pure $ ()
+
+
+-- | VkDescriptorBufferInfo - Structure specifying descriptor buffer info
+--
+-- = Description
+--
+-- Note
+--
+-- When setting @range@ to 'Vulkan.Core10.APIConstants.WHOLE_SIZE', the
+-- effective range /must/ not be larger than the maximum range for the
+-- descriptor type
+-- (<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxUniformBufferRange maxUniformBufferRange>
+-- or
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxStorageBufferRange maxStorageBufferRange>).
+-- This means that 'Vulkan.Core10.APIConstants.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
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+-- and
+-- 'Vulkan.Core10.Enums.DescriptorType.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 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @range@ /must/ be greater than @0@
+--
+-- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @range@ /must/ be less than or equal to the size of @buffer@ minus
+--     @offset@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, @buffer@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @buffer@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', @offset@
+--     /must/ be zero and @range@ /must/ be
+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'WriteDescriptorSet'
+data DescriptorBufferInfo = DescriptorBufferInfo
+  { -- | @buffer@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or the buffer
+    -- resource.
+    buffer :: Buffer
+  , -- | @offset@ is the offset in bytes from the start of @buffer@. Access to
+    -- buffer memory via this descriptor uses addressing that is relative to
+    -- this starting offset.
+    offset :: DeviceSize
+  , -- | @range@ is the size in bytes that is used for this descriptor update, or
+    -- 'Vulkan.Core10.APIConstants.WHOLE_SIZE' to use the range from @offset@
+    -- to the end of the buffer.
+    range :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show DescriptorBufferInfo
+
+instance ToCStruct DescriptorBufferInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorBufferInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Buffer)) (buffer)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (offset)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (range)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct DescriptorBufferInfo where
+  peekCStruct p = do
+    buffer <- peek @Buffer ((p `plusPtr` 0 :: Ptr Buffer))
+    offset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
+    range <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    pure $ DescriptorBufferInfo
+             buffer offset range
+
+instance Storable DescriptorBufferInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DescriptorBufferInfo where
+  zero = DescriptorBufferInfo
+           zero
+           zero
+           zero
+
+
+-- | VkDescriptorImageInfo - Structure specifying descriptor image info
+--
+-- = Description
+--
+-- Members of 'DescriptorImageInfo' that are not used in an update (as
+-- described above) are ignored.
+--
+-- == Valid Usage
+--
+-- -   @imageView@ /must/ not be 2D or 2D array image view created from a
+--     3D image
+--
+-- -   If @imageView@ is created from a depth\/stencil image, the
+--     @aspectMask@ used to create the @imageView@ /must/ include either
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--     but not both
+--
+-- -   @imageLayout@ /must/ match the actual
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' of each subresource
+--     accessible from @imageView@ at the time this descriptor is accessed
+--     as defined by the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts-matching-rule image layout matching rules>
+--
+-- -   If @sampler@ is used and the 'Vulkan.Core10.Enums.Format.Format' of
+--     the image is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+--     the image /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
+--     and the @aspectMask@ of the @imageView@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
+--     or (for three-plane formats only)
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   Both of @imageView@, and @sampler@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Handles.ImageView', 'Vulkan.Core10.Handles.Sampler',
+-- 'WriteDescriptorSet'
+data DescriptorImageInfo = DescriptorImageInfo
+  { -- | @sampler@ is a sampler handle, and is used in descriptor updates for
+    -- types 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' and
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
+    -- if the binding being updated does not use immutable samplers.
+    sampler :: Sampler
+  , -- | @imageView@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or an image view
+    -- handle, and is used in descriptor updates for types
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+    -- and
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'.
+    imageView :: ImageView
+  , -- | @imageLayout@ is the layout that the image subresources accessible from
+    -- @imageView@ will be in at the time this descriptor is accessed.
+    -- @imageLayout@ is used in descriptor updates for types
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+    -- and
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'.
+    imageLayout :: ImageLayout
+  }
+  deriving (Typeable)
+deriving instance Show DescriptorImageInfo
+
+instance ToCStruct DescriptorImageInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorImageInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Sampler)) (sampler)
+    poke ((p `plusPtr` 8 :: Ptr ImageView)) (imageView)
+    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (imageLayout)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Sampler)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr ImageView)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (zero)
+    f
+
+instance FromCStruct DescriptorImageInfo where
+  peekCStruct p = do
+    sampler <- peek @Sampler ((p `plusPtr` 0 :: Ptr Sampler))
+    imageView <- peek @ImageView ((p `plusPtr` 8 :: Ptr ImageView))
+    imageLayout <- peek @ImageLayout ((p `plusPtr` 16 :: Ptr ImageLayout))
+    pure $ DescriptorImageInfo
+             sampler imageView imageLayout
+
+instance Storable DescriptorImageInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DescriptorImageInfo where
+  zero = DescriptorImageInfo
+           zero
+           zero
+           zero
+
+
+-- | VkWriteDescriptorSet - Structure specifying the parameters of a
+-- descriptor set write operation
+--
+-- = Description
+--
+-- Only one of @pImageInfo@, @pBufferInfo@, or @pTexelBufferView@ members
+-- is used according to the descriptor type specified in the
+-- @descriptorType@ member of the containing 'WriteDescriptorSet'
+-- structure, or none of them in case @descriptorType@ is
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
+-- in which case the source data for the descriptor writes is taken from
+-- the
+-- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT'
+-- structure included in the @pNext@ chain of 'WriteDescriptorSet', or if
+-- @descriptorType@ is
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR',
+-- in which case the source data for the descriptor writes is taken from
+-- the
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR'
+-- structure in the @pNext@ chain of 'WriteDescriptorSet', as specified
+-- below.
+--
+-- If the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+-- feature is enabled, the buffer, imageView, or bufferView /can/ be
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE'. Loads from a null descriptor
+-- return zero values and stores and atomics to a null descriptor are
+-- discarded.
+--
+-- 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.
+--
+-- Note
+--
+-- The same behavior applies to bindings with a descriptor type of
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+-- where @descriptorCount@ specifies the number of bytes to update while
+-- @dstArrayElement@ specifies the starting byte offset, thus in this case
+-- if the @dstBinding@ has a smaller byte size than the sum of
+-- @dstArrayElement@ and @descriptorCount@, then the remainder will be used
+-- to update the subsequent binding - @dstBinding@+1 starting at offset
+-- zero. This falls out as a special case of the above rule.
+--
+-- == Valid Usage
+--
+-- -   @dstBinding@ /must/ be less than or equal to the maximum value of
+--     @binding@ of all 'DescriptorSetLayoutBinding' structures specified
+--     when @dstSet@’s descriptor set layout was created
+--
+-- -   @dstBinding@ /must/ be a binding with a non-zero @descriptorCount@
+--
+-- -   All consecutive bindings updated via a single 'WriteDescriptorSet'
+--     structure, except those with a @descriptorCount@ of zero, /must/
+--     have identical @descriptorType@ and @stageFlags@
+--
+-- -   All consecutive bindings updated via a single 'WriteDescriptorSet'
+--     structure, except those with a @descriptorCount@ of zero, /must/ all
+--     either use immutable samplers or /must/ all not use immutable
+--     samplers
+--
+-- -   @descriptorType@ /must/ match the type of @dstBinding@ within
+--     @dstSet@
+--
+-- -   @dstSet@ /must/ be a valid 'Vulkan.Core10.Handles.DescriptorSet'
+--     handle
+--
+-- -   The sum of @dstArrayElement@ and @descriptorCount@ /must/ be less
+--     than or equal to the number of array elements in the descriptor set
+--     binding specified by @dstBinding@, and all applicable consecutive
+--     bindings, as described by
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive>
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
+--     @dstArrayElement@ /must/ be an integer multiple of @4@
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
+--     @descriptorCount@ /must/ be an integer multiple of @4@
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
+--     @pImageInfo@ /must/ be a valid pointer to an array of
+--     @descriptorCount@ valid 'DescriptorImageInfo' structures
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
+--     each element of @pTexelBufferView@ /must/ be either a valid
+--     'Vulkan.Core10.Handles.BufferView' handle or
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, each element of @pTexelBufferView@ /must/
+--     not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',
+--     @pBufferInfo@ /must/ be a valid pointer to an array of
+--     @descriptorCount@ valid 'DescriptorBufferInfo' structures
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     and @dstSet@ was not allocated with a layout that included immutable
+--     samplers for @dstBinding@ with @descriptorType@, the @sampler@
+--     member of each element of @pImageInfo@ /must/ be a valid
+--     'Vulkan.Core10.Handles.Sampler' object
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
+--     the @imageView@ member of each element of @pImageInfo@ /must/ be
+--     either a valid 'Vulkan.Core10.Handles.ImageView' handle or
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, the @imageView@ member of each element of
+--     @pImageInfo@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
+--     the @pNext@ chain /must/ include a
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT'
+--     structure whose @dataSize@ member equals @descriptorCount@
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR',
+--     the @pNext@ chain /must/ include a
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR'
+--     structure whose @accelerationStructureCount@ member equals
+--     @descriptorCount@
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+--     then the @imageView@ member of each @pImageInfo@ element /must/ have
+--     been created without a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--     structure in its @pNext@ chain
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     and if any element of @pImageInfo@ has a @imageView@ member that was
+--     created with a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--     structure in its @pNext@ chain, then @dstSet@ /must/ have been
+--     allocated with a layout that included immutable samplers for
+--     @dstBinding@, and the corresponding immutable sampler /must/ have
+--     been created with an /identically defined/
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--     object
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     and @dstSet@ was allocated with a layout that included immutable
+--     samplers for @dstBinding@, then the @imageView@ member of each
+--     element of @pImageInfo@ which corresponds to an immutable sampler
+--     that enables
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+--     /must/ have been created with a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--     structure in its @pNext@ chain with an /identically defined/
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--     to the corresponding immutable sampler
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
+--     the @offset@ member of each element of @pBufferInfo@ /must/ be a
+--     multiple of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minUniformBufferOffsetAlignment@
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',
+--     the @offset@ member of each element of @pBufferInfo@ /must/ be a
+--     multiple of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minStorageBufferOffsetAlignment@
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
+--     the @buffer@ member of each element of @pBufferInfo@ /must/ have
+--     been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT'
+--     set
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',
+--     the @buffer@ member of each element of @pBufferInfo@ /must/ have
+--     been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT'
+--     set
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
+--     the @range@ member of each element of @pBufferInfo@, or the
+--     effective range if @range@ is
+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', /must/ be less than or
+--     equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxUniformBufferRange@
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',
+--     the @range@ member of each element of @pBufferInfo@, or the
+--     effective range if @range@ is
+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', /must/ be less than or
+--     equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxStorageBufferRange@
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER',
+--     the 'Vulkan.Core10.Handles.Buffer' that each element of
+--     @pTexelBufferView@ was created from /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT'
+--     set
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
+--     the 'Vulkan.Core10.Handles.Buffer' that each element of
+--     @pTexelBufferView@ was created from /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT'
+--     set
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
+--     the @imageView@ member of each element of @pImageInfo@ /must/ have
+--     been created with the identity swizzle
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     the @imageView@ member of each element of @pImageInfo@ /must/ have
+--     been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' set
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     the @imageLayout@ member of each element of @pImageInfo@ /must/ be a
+--     member of the list given in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage Sampled Image>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler Combined Image Sampler>,
+--     corresponding to its type
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
+--     the @imageView@ member of each element of @pImageInfo@ /must/ have
+--     been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
+--     set
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+--     the @imageView@ member of each element of @pImageInfo@ /must/ have
+--     been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT' set
+--
+-- -   All consecutive bindings updated via a single 'WriteDescriptorSet'
+--     structure, except those with a @descriptorCount@ of zero, /must/
+--     have identical
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlagBits'
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER', then
+--     @dstSet@ /must/ not have been allocated with a layout that included
+--     immutable samplers for @dstBinding@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR'
+--     or
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @descriptorType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
+--
+-- -   @descriptorCount@ /must/ be greater than @0@
+--
+-- -   Both of @dstSet@, and the elements of @pTexelBufferView@ that are
+--     valid handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.BufferView', 'DescriptorBufferInfo',
+-- 'DescriptorImageInfo', 'Vulkan.Core10.Handles.DescriptorSet',
+-- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetKHR',
+-- 'updateDescriptorSets'
+data WriteDescriptorSet (es :: [Type]) = WriteDescriptorSet
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @dstSet@ is the destination descriptor set to update.
+    dstSet :: DescriptorSet
+  , -- | @dstBinding@ is the descriptor binding within that set.
+    dstBinding :: Word32
+  , -- | @dstArrayElement@ is the starting element in that array. If the
+    -- descriptor binding identified by @dstSet@ and @dstBinding@ has a
+    -- descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- then @dstArrayElement@ specifies the starting byte offset within the
+    -- binding.
+    dstArrayElement :: Word32
+  , -- | @descriptorCount@ is the number of descriptors to update (the number of
+    -- elements in @pImageInfo@, @pBufferInfo@, or @pTexelBufferView@ , or a
+    -- value matching the @dataSize@ member of a
+    -- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT'
+    -- structure in the @pNext@ chain , or a value matching the
+    -- @accelerationStructureCount@ of a
+    -- 'Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR'
+    -- structure in the @pNext@ chain ). If the descriptor binding identified
+    -- by @dstSet@ and @dstBinding@ has a descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- then @descriptorCount@ specifies the number of bytes to update.
+    descriptorCount :: Word32
+  , -- | @descriptorType@ is a
+    -- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType' specifying the type
+    -- of each descriptor in @pImageInfo@, @pBufferInfo@, or
+    -- @pTexelBufferView@, as described below. It /must/ be the same type as
+    -- that specified in 'DescriptorSetLayoutBinding' for @dstSet@ at
+    -- @dstBinding@. The type of the descriptor also controls which array the
+    -- descriptors are taken from.
+    descriptorType :: DescriptorType
+  , -- | @pImageInfo@ is a pointer to an array of 'DescriptorImageInfo'
+    -- structures or is ignored, as described below.
+    imageInfo :: Vector DescriptorImageInfo
+  , -- | @pBufferInfo@ is a pointer to an array of 'DescriptorBufferInfo'
+    -- structures or is ignored, as described below.
+    bufferInfo :: Vector DescriptorBufferInfo
+  , -- | @pTexelBufferView@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.BufferView' handles as described in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-buffer-views Buffer Views>
+    -- section or is ignored, as described below.
+    texelBufferView :: Vector BufferView
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (WriteDescriptorSet es)
+
+instance Extensible WriteDescriptorSet where
+  extensibleType = STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
+  setNext x next = x{next = next}
+  getNext WriteDescriptorSet{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends WriteDescriptorSet e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @WriteDescriptorSetAccelerationStructureKHR = Just f
+    | Just Refl <- eqT @e @WriteDescriptorSetInlineUniformBlockEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss WriteDescriptorSet es, PokeChain es) => ToCStruct (WriteDescriptorSet es) where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p WriteDescriptorSet{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorSet)) (dstSet)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (dstBinding)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (dstArrayElement)
+    let pImageInfoLength = Data.Vector.length $ (imageInfo)
+    lift $ unless (fromIntegral pImageInfoLength == (descriptorCount) || pImageInfoLength == 0) $
+      throwIO $ IOError Nothing InvalidArgument "" "pImageInfo must be empty or have 'descriptorCount' elements" Nothing Nothing
+    let pBufferInfoLength = Data.Vector.length $ (bufferInfo)
+    lift $ unless (fromIntegral pBufferInfoLength == (descriptorCount) || pBufferInfoLength == 0) $
+      throwIO $ IOError Nothing InvalidArgument "" "pBufferInfo must be empty or have 'descriptorCount' elements" Nothing Nothing
+    let pTexelBufferViewLength = Data.Vector.length $ (texelBufferView)
+    lift $ unless (fromIntegral pTexelBufferViewLength == (descriptorCount) || pTexelBufferViewLength == 0) $
+      throwIO $ IOError Nothing InvalidArgument "" "pTexelBufferView must be empty or have 'descriptorCount' elements" Nothing Nothing
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((descriptorCount))
+    lift $ poke ((p `plusPtr` 36 :: Ptr DescriptorType)) (descriptorType)
+    pImageInfo'' <- if Data.Vector.null (imageInfo)
+      then pure nullPtr
+      else do
+        pPImageInfo <- ContT $ allocaBytesAligned @DescriptorImageInfo (((Data.Vector.length (imageInfo))) * 24) 8
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageInfo `plusPtr` (24 * (i)) :: Ptr DescriptorImageInfo) (e) . ($ ())) ((imageInfo))
+        pure $ pPImageInfo
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr DescriptorImageInfo))) pImageInfo''
+    pBufferInfo'' <- if Data.Vector.null (bufferInfo)
+      then pure nullPtr
+      else do
+        pPBufferInfo <- ContT $ allocaBytesAligned @DescriptorBufferInfo (((Data.Vector.length (bufferInfo))) * 24) 8
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferInfo `plusPtr` (24 * (i)) :: Ptr DescriptorBufferInfo) (e) . ($ ())) ((bufferInfo))
+        pure $ pPBufferInfo
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr DescriptorBufferInfo))) pBufferInfo''
+    pTexelBufferView'' <- if Data.Vector.null (texelBufferView)
+      then pure nullPtr
+      else do
+        pPTexelBufferView <- ContT $ allocaBytesAligned @BufferView (((Data.Vector.length (texelBufferView))) * 8) 8
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPTexelBufferView `plusPtr` (8 * (i)) :: Ptr BufferView) (e)) ((texelBufferView))
+        pure $ pPTexelBufferView
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr BufferView))) pTexelBufferView''
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorSet)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 36 :: Ptr DescriptorType)) (zero)
+    lift $ f
+
+instance (Extendss WriteDescriptorSet es, PeekChain es) => FromCStruct (WriteDescriptorSet es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    dstSet <- peek @DescriptorSet ((p `plusPtr` 16 :: Ptr DescriptorSet))
+    dstBinding <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    dstArrayElement <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    descriptorCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    descriptorType <- peek @DescriptorType ((p `plusPtr` 36 :: Ptr DescriptorType))
+    pImageInfo <- peek @(Ptr DescriptorImageInfo) ((p `plusPtr` 40 :: Ptr (Ptr DescriptorImageInfo)))
+    let pImageInfoLength = if pImageInfo == nullPtr then 0 else (fromIntegral descriptorCount)
+    pImageInfo' <- generateM pImageInfoLength (\i -> peekCStruct @DescriptorImageInfo ((pImageInfo `advancePtrBytes` (24 * (i)) :: Ptr DescriptorImageInfo)))
+    pBufferInfo <- peek @(Ptr DescriptorBufferInfo) ((p `plusPtr` 48 :: Ptr (Ptr DescriptorBufferInfo)))
+    let pBufferInfoLength = if pBufferInfo == nullPtr then 0 else (fromIntegral descriptorCount)
+    pBufferInfo' <- generateM pBufferInfoLength (\i -> peekCStruct @DescriptorBufferInfo ((pBufferInfo `advancePtrBytes` (24 * (i)) :: Ptr DescriptorBufferInfo)))
+    pTexelBufferView <- peek @(Ptr BufferView) ((p `plusPtr` 56 :: Ptr (Ptr BufferView)))
+    let pTexelBufferViewLength = if pTexelBufferView == nullPtr then 0 else (fromIntegral descriptorCount)
+    pTexelBufferView' <- generateM pTexelBufferViewLength (\i -> peek @BufferView ((pTexelBufferView `advancePtrBytes` (8 * (i)) :: Ptr BufferView)))
+    pure $ WriteDescriptorSet
+             next dstSet dstBinding dstArrayElement descriptorCount descriptorType pImageInfo' pBufferInfo' pTexelBufferView'
+
+instance es ~ '[] => Zero (WriteDescriptorSet es) where
+  zero = WriteDescriptorSet
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           mempty
+           mempty
+           mempty
+
+
+-- | VkCopyDescriptorSet - Structure specifying a copy descriptor set
+-- operation
+--
+-- == 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive>
+--
+-- -   The type of @dstBinding@ within @dstSet@ /must/ be equal to the type
+--     of @srcBinding@ within @srcSet@
+--
+-- -   If @srcSet@ is equal to @dstSet@, then the source and destination
+--     ranges of descriptors /must/ not overlap, where the ranges /may/
+--     include array elements from consecutive bindings as described by
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive>
+--
+-- -   If the descriptor type of the descriptor set binding specified by
+--     @srcBinding@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
+--     @srcArrayElement@ /must/ be an integer multiple of @4@
+--
+-- -   If the descriptor type of the descriptor set binding specified by
+--     @dstBinding@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
+--     @dstArrayElement@ /must/ be an integer multiple of @4@
+--
+-- -   If the descriptor type of the descriptor set binding specified by
+--     either @srcBinding@ or @dstBinding@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
+--     @descriptorCount@ /must/ be an integer multiple of @4@
+--
+-- -   If @srcSet@’s layout was created with the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     flag set, then @dstSet@’s layout /must/ also have been created with
+--     the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     flag set
+--
+-- -   If @srcSet@’s layout was created without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     flag set, then @dstSet@’s layout /must/ also have been created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     flag set
+--
+-- -   If the descriptor pool from which @srcSet@ was allocated was created
+--     with the
+--     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
+--     flag set, then the descriptor pool from which @dstSet@ was allocated
+--     /must/ also have been created with the
+--     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
+--     flag set
+--
+-- -   If the descriptor pool from which @srcSet@ was allocated was created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
+--     flag set, then the descriptor pool from which @dstSet@ was allocated
+--     /must/ also have been created without the
+--     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
+--     flag set
+--
+-- -   If the descriptor type of the descriptor set binding specified by
+--     @dstBinding@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER', then
+--     @dstSet@ /must/ not have been allocated with a layout that included
+--     immutable samplers for @dstBinding@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_DESCRIPTOR_SET'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcSet@ /must/ be a valid 'Vulkan.Core10.Handles.DescriptorSet'
+--     handle
+--
+-- -   @dstSet@ /must/ be a valid 'Vulkan.Core10.Handles.DescriptorSet'
+--     handle
+--
+-- -   Both of @dstSet@, and @srcSet@ /must/ have been created, allocated,
+--     or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DescriptorSet',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'updateDescriptorSets'
+data CopyDescriptorSet = CopyDescriptorSet
+  { -- | @srcSet@, @srcBinding@, and @srcArrayElement@ are the source set,
+    -- binding, and array element, respectively. If the descriptor binding
+    -- identified by @srcSet@ and @srcBinding@ has a descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- then @srcArrayElement@ specifies the starting byte offset within the
+    -- binding to copy from.
+    srcSet :: DescriptorSet
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "srcBinding"
+    srcBinding :: Word32
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "srcArrayElement"
+    srcArrayElement :: Word32
+  , -- | @dstSet@, @dstBinding@, and @dstArrayElement@ are the destination set,
+    -- binding, and array element, respectively. If the descriptor binding
+    -- identified by @dstSet@ and @dstBinding@ has a descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- then @dstArrayElement@ specifies the starting byte offset within the
+    -- binding to copy to.
+    dstSet :: DescriptorSet
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "dstBinding"
+    dstBinding :: Word32
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "dstArrayElement"
+    dstArrayElement :: Word32
+  , -- | @descriptorCount@ is the number of descriptors to copy from the source
+    -- to destination. If @descriptorCount@ is greater than the number of
+    -- remaining array elements in the source or destination binding, those
+    -- affect consecutive bindings in a manner similar to 'WriteDescriptorSet'
+    -- above. If the descriptor binding identified by @srcSet@ and @srcBinding@
+    -- has a descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- then @descriptorCount@ specifies the number of bytes to copy and the
+    -- remaining array elements in the source or destination binding refer to
+    -- the remaining number of bytes in those.
+    descriptorCount :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show CopyDescriptorSet
+
+instance ToCStruct CopyDescriptorSet where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CopyDescriptorSet{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DescriptorSet)) (srcSet)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (srcBinding)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (srcArrayElement)
+    poke ((p `plusPtr` 32 :: Ptr DescriptorSet)) (dstSet)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (dstBinding)
+    poke ((p `plusPtr` 44 :: Ptr Word32)) (dstArrayElement)
+    poke ((p `plusPtr` 48 :: Ptr Word32)) (descriptorCount)
+    f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DescriptorSet)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr DescriptorSet)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct CopyDescriptorSet where
+  peekCStruct p = do
+    srcSet <- peek @DescriptorSet ((p `plusPtr` 16 :: Ptr DescriptorSet))
+    srcBinding <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    srcArrayElement <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    dstSet <- peek @DescriptorSet ((p `plusPtr` 32 :: Ptr DescriptorSet))
+    dstBinding <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    dstArrayElement <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
+    descriptorCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pure $ CopyDescriptorSet
+             srcSet srcBinding srcArrayElement dstSet dstBinding dstArrayElement descriptorCount
+
+instance Storable CopyDescriptorSet where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero CopyDescriptorSet where
+  zero = CopyDescriptorSet
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDescriptorSetLayoutBinding - Structure specifying a descriptor set
+-- layout binding
+--
+-- = Description
+--
+-- -   @pImmutableSamplers@ affects initialization of samplers. If
+--     @descriptorType@ specifies a
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or
+--     'Vulkan.Core10.Enums.DescriptorType.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 and /must/ not be changed;
+--     updating a
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
+--     descriptor with immutable samplers is not allowed and updates to a
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
+--     descriptor with immutable samplers does not modify the samplers (the
+--     image views are updated, but the sampler updates are ignored). If
+--     @pImmutableSamplers@ is not @NULL@, then it points to an array of
+--     sampler handles that will be copied into the set layout and used for
+--     the corresponding binding. Only the sampler handles are copied; the
+--     sampler objects /must/ not be destroyed before the final use of the
+--     set layout and any descriptor pools and sets created using it. 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 value of @descriptorType@ is undefined.
+-- However, all binding numbers between 0 and the maximum binding number in
+-- the 'DescriptorSetLayoutCreateInfo'::@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
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     and @descriptorCount@ is not @0@ and @pImmutableSamplers@ is not
+--     @NULL@, @pImmutableSamplers@ /must/ be a valid pointer to an array
+--     of @descriptorCount@ valid 'Vulkan.Core10.Handles.Sampler' handles
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+--     then @descriptorCount@ /must/ be a multiple of @4@
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+--     then @descriptorCount@ /must/ be less than or equal to
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxInlineUniformBlockSize@
+--
+-- -   If @descriptorCount@ is not @0@, @stageFlags@ /must/ be a valid
+--     combination of
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values
+--
+-- -   If @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
+--     and @descriptorCount@ is not @0@, then @stageFlags@ /must/ be @0@ or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
+--
+-- -   The sampler objects indicated by @pImmutableSamplers@ /must/ not
+--     have a @borderColor@ with one of the values
+--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or
+--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @descriptorType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
+--
+-- = See Also
+--
+-- 'DescriptorSetLayoutCreateInfo',
+-- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType',
+-- 'Vulkan.Core10.Handles.Sampler',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'
+data DescriptorSetLayoutBinding = DescriptorSetLayoutBinding
+  { -- | @binding@ is the binding number of this entry and corresponds to a
+    -- resource of the same binding number in the shader stages.
+    binding :: Word32
+  , -- | @descriptorType@ is a
+    -- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType' specifying which
+    -- type of resource descriptors are used for this binding.
+    descriptorType :: DescriptorType
+  , -- | @descriptorCount@ is the number of descriptors contained in the binding,
+    -- accessed in a shader as an array , except if @descriptorType@ is
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- in which case @descriptorCount@ is the size in bytes of the inline
+    -- uniform block . 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.
+    descriptorCount :: Word32
+  , -- | @stageFlags@ member is a bitmask of
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' specifying
+    -- which pipeline shader stages /can/ access a resource for this binding.
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.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.
+    stageFlags :: ShaderStageFlags
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "pImmutableSamplers"
+    immutableSamplers :: Vector Sampler
+  }
+  deriving (Typeable)
+deriving instance Show DescriptorSetLayoutBinding
+
+instance ToCStruct DescriptorSetLayoutBinding where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorSetLayoutBinding{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (binding)
+    lift $ poke ((p `plusPtr` 4 :: Ptr DescriptorType)) (descriptorType)
+    let pImmutableSamplersLength = Data.Vector.length $ (immutableSamplers)
+    descriptorCount'' <- lift $ if (descriptorCount) == 0
+      then pure $ fromIntegral pImmutableSamplersLength
+      else do
+        unless (fromIntegral pImmutableSamplersLength == (descriptorCount) || pImmutableSamplersLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pImmutableSamplers must be empty or have 'descriptorCount' elements" Nothing Nothing
+        pure (descriptorCount)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (descriptorCount'')
+    lift $ poke ((p `plusPtr` 12 :: Ptr ShaderStageFlags)) (stageFlags)
+    pImmutableSamplers'' <- if Data.Vector.null (immutableSamplers)
+      then pure nullPtr
+      else do
+        pPImmutableSamplers <- ContT $ allocaBytesAligned @Sampler (((Data.Vector.length (immutableSamplers))) * 8) 8
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPImmutableSamplers `plusPtr` (8 * (i)) :: Ptr Sampler) (e)) ((immutableSamplers))
+        pure $ pPImmutableSamplers
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr Sampler))) pImmutableSamplers''
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr DescriptorType)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr ShaderStageFlags)) (zero)
+    f
+
+instance FromCStruct DescriptorSetLayoutBinding where
+  peekCStruct p = do
+    binding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    descriptorType <- peek @DescriptorType ((p `plusPtr` 4 :: Ptr DescriptorType))
+    descriptorCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    stageFlags <- peek @ShaderStageFlags ((p `plusPtr` 12 :: Ptr ShaderStageFlags))
+    pImmutableSamplers <- peek @(Ptr Sampler) ((p `plusPtr` 16 :: Ptr (Ptr Sampler)))
+    let pImmutableSamplersLength = if pImmutableSamplers == nullPtr then 0 else (fromIntegral descriptorCount)
+    pImmutableSamplers' <- generateM pImmutableSamplersLength (\i -> peek @Sampler ((pImmutableSamplers `advancePtrBytes` (8 * (i)) :: Ptr Sampler)))
+    pure $ DescriptorSetLayoutBinding
+             binding descriptorType descriptorCount stageFlags pImmutableSamplers'
+
+instance Zero DescriptorSetLayoutBinding where
+  zero = DescriptorSetLayoutBinding
+           zero
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkDescriptorSetLayoutCreateInfo - Structure specifying parameters of a
+-- newly created descriptor set layout
+--
+-- == Valid Usage
+--
+-- -   The 'DescriptorSetLayoutBinding'::@binding@ members of the elements
+--     of the @pBindings@ array /must/ each have different values
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR',
+--     then all elements of @pBindings@ /must/ not have a @descriptorType@
+--     of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR',
+--     then all elements of @pBindings@ /must/ not have a @descriptorType@
+--     of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR',
+--     then the total number of elements of all bindings /must/ be less
+--     than or equal to
+--     'Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR'::@maxPushDescriptors@
+--
+-- -   If any binding has the
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--     bit set, @flags@ /must/ include
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--
+-- -   If any binding has the
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--     bit set, then all bindings /must/ not have @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetLayoutBindingFlagsCreateInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DescriptorSetLayoutCreateFlagBits'
+--     values
+--
+-- -   If @bindingCount@ is not @0@, @pBindings@ /must/ be a valid pointer
+--     to an array of @bindingCount@ valid 'DescriptorSetLayoutBinding'
+--     structures
+--
+-- = See Also
+--
+-- 'DescriptorSetLayoutBinding',
+-- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DescriptorSetLayoutCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createDescriptorSetLayout',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.getDescriptorSetLayoutSupport',
+-- 'Vulkan.Extensions.VK_KHR_maintenance3.getDescriptorSetLayoutSupportKHR'
+data DescriptorSetLayoutCreateInfo (es :: [Type]) = DescriptorSetLayoutCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DescriptorSetLayoutCreateFlagBits'
+    -- specifying options for descriptor set layout creation.
+    flags :: DescriptorSetLayoutCreateFlags
+  , -- | @pBindings@ is a pointer to an array of 'DescriptorSetLayoutBinding'
+    -- structures.
+    bindings :: Vector DescriptorSetLayoutBinding
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (DescriptorSetLayoutCreateInfo es)
+
+instance Extensible DescriptorSetLayoutCreateInfo where
+  extensibleType = STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext DescriptorSetLayoutCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DescriptorSetLayoutCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DescriptorSetLayoutBindingFlagsCreateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss DescriptorSetLayoutCreateInfo es, PokeChain es) => ToCStruct (DescriptorSetLayoutCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorSetLayoutCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorSetLayoutCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (bindings)) :: Word32))
+    pPBindings' <- ContT $ allocaBytesAligned @DescriptorSetLayoutBinding ((Data.Vector.length (bindings)) * 24) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindings' `plusPtr` (24 * (i)) :: Ptr DescriptorSetLayoutBinding) (e) . ($ ())) (bindings)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayoutBinding))) (pPBindings')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPBindings' <- ContT $ allocaBytesAligned @DescriptorSetLayoutBinding ((Data.Vector.length (mempty)) * 24) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindings' `plusPtr` (24 * (i)) :: Ptr DescriptorSetLayoutBinding) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayoutBinding))) (pPBindings')
+    lift $ f
+
+instance (Extendss DescriptorSetLayoutCreateInfo es, PeekChain es) => FromCStruct (DescriptorSetLayoutCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @DescriptorSetLayoutCreateFlags ((p `plusPtr` 16 :: Ptr DescriptorSetLayoutCreateFlags))
+    bindingCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pBindings <- peek @(Ptr DescriptorSetLayoutBinding) ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayoutBinding)))
+    pBindings' <- generateM (fromIntegral bindingCount) (\i -> peekCStruct @DescriptorSetLayoutBinding ((pBindings `advancePtrBytes` (24 * (i)) :: Ptr DescriptorSetLayoutBinding)))
+    pure $ DescriptorSetLayoutCreateInfo
+             next flags pBindings'
+
+instance es ~ '[] => Zero (DescriptorSetLayoutCreateInfo es) where
+  zero = DescriptorSetLayoutCreateInfo
+           ()
+           zero
+           mempty
+
+
+-- | VkDescriptorPoolSize - Structure specifying descriptor pool size
+--
+-- = Description
+--
+-- Note
+--
+-- When creating a descriptor pool that will contain descriptors for
+-- combined image samplers of multi-planar formats, an application needs to
+-- account for non-trivial descriptor consumption when choosing the
+-- @descriptorCount@ value, as indicated by
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionImageFormatProperties'::@combinedImageSamplerDescriptorCount@.
+--
+-- == Valid Usage
+--
+-- -   @descriptorCount@ /must/ be greater than @0@
+--
+-- -   If @type@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+--     then @descriptorCount@ /must/ be a multiple of @4@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @type@ /must/ be a valid
+--     'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
+--
+-- = See Also
+--
+-- 'DescriptorPoolCreateInfo',
+-- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType'
+data DescriptorPoolSize = DescriptorPoolSize
+  { -- | @type@ is the type of descriptor.
+    type' :: DescriptorType
+  , -- | @descriptorCount@ is the number of descriptors of that type to allocate.
+    -- If @type@ is
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- then @descriptorCount@ is the number of bytes to allocate for
+    -- descriptors of this type.
+    descriptorCount :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DescriptorPoolSize
+
+instance ToCStruct DescriptorPoolSize where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorPoolSize{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr DescriptorType)) (type')
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (descriptorCount)
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr DescriptorType)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DescriptorPoolSize where
+  peekCStruct p = do
+    type' <- peek @DescriptorType ((p `plusPtr` 0 :: Ptr DescriptorType))
+    descriptorCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    pure $ DescriptorPoolSize
+             type' descriptorCount
+
+instance Storable DescriptorPoolSize where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DescriptorPoolSize where
+  zero = DescriptorPoolSize
+           zero
+           zero
+
+
+-- | VkDescriptorPoolCreateInfo - Structure specifying parameters of a newly
+-- created descriptor pool
+--
+-- = Description
+--
+-- If multiple 'DescriptorPoolSize' 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
+-- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.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.
+--
+-- If @flags@ has the
+-- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
+-- bit set, descriptor pool creation /may/ fail with the error
+-- 'Vulkan.Core10.Enums.Result.ERROR_FRAGMENTATION' if the total number of
+-- descriptors across all pools (including this one) created with this bit
+-- set exceeds @maxUpdateAfterBindDescriptorsInAllPools@, or if
+-- fragmentation of the underlying hardware resources occurs.
+--
+-- == Valid Usage
+--
+-- -   @maxSets@ /must/ be greater than @0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.DescriptorPoolInlineUniformBlockCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DescriptorPoolCreateFlagBits'
+--     values
+--
+-- -   @pPoolSizes@ /must/ be a valid pointer to an array of
+--     @poolSizeCount@ valid 'DescriptorPoolSize' structures
+--
+-- -   @poolSizeCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DescriptorPoolCreateFlags',
+-- 'DescriptorPoolSize', 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createDescriptorPool'
+data DescriptorPoolCreateInfo (es :: [Type]) = DescriptorPoolCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DescriptorPoolCreateFlagBits'
+    -- specifying certain supported operations on the pool.
+    flags :: DescriptorPoolCreateFlags
+  , -- | @maxSets@ is the maximum number of descriptor sets that /can/ be
+    -- allocated from the pool.
+    maxSets :: Word32
+  , -- | @pPoolSizes@ is a pointer to an array of 'DescriptorPoolSize'
+    -- structures, each containing a descriptor type and number of descriptors
+    -- of that type to be allocated in the pool.
+    poolSizes :: Vector DescriptorPoolSize
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (DescriptorPoolCreateInfo es)
+
+instance Extensible DescriptorPoolCreateInfo where
+  extensibleType = STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext DescriptorPoolCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DescriptorPoolCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DescriptorPoolInlineUniformBlockCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss DescriptorPoolCreateInfo es, PokeChain es) => ToCStruct (DescriptorPoolCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorPoolCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorPoolCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (maxSets)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (poolSizes)) :: Word32))
+    pPPoolSizes' <- ContT $ allocaBytesAligned @DescriptorPoolSize ((Data.Vector.length (poolSizes)) * 8) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPoolSizes' `plusPtr` (8 * (i)) :: Ptr DescriptorPoolSize) (e) . ($ ())) (poolSizes)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr DescriptorPoolSize))) (pPPoolSizes')
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    pPPoolSizes' <- ContT $ allocaBytesAligned @DescriptorPoolSize ((Data.Vector.length (mempty)) * 8) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPoolSizes' `plusPtr` (8 * (i)) :: Ptr DescriptorPoolSize) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr DescriptorPoolSize))) (pPPoolSizes')
+    lift $ f
+
+instance (Extendss DescriptorPoolCreateInfo es, PeekChain es) => FromCStruct (DescriptorPoolCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @DescriptorPoolCreateFlags ((p `plusPtr` 16 :: Ptr DescriptorPoolCreateFlags))
+    maxSets <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    poolSizeCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pPoolSizes <- peek @(Ptr DescriptorPoolSize) ((p `plusPtr` 32 :: Ptr (Ptr DescriptorPoolSize)))
+    pPoolSizes' <- generateM (fromIntegral poolSizeCount) (\i -> peekCStruct @DescriptorPoolSize ((pPoolSizes `advancePtrBytes` (8 * (i)) :: Ptr DescriptorPoolSize)))
+    pure $ DescriptorPoolCreateInfo
+             next flags maxSets pPoolSizes'
+
+instance es ~ '[] => Zero (DescriptorPoolCreateInfo es) where
+  zero = DescriptorPoolCreateInfo
+           ()
+           zero
+           zero
+           mempty
+
+
+-- | VkDescriptorSetAllocateInfo - Structure specifying the allocation
+-- parameters for descriptor sets
+--
+-- == Valid Usage
+--
+-- -   Each element of @pSetLayouts@ /must/ not have been created with
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'
+--     set
+--
+-- -   If any element of @pSetLayouts@ was created with the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set, @descriptorPool@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
+--     flag set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountAllocateInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @descriptorPool@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorPool' handle
+--
+-- -   @pSetLayouts@ /must/ be a valid pointer to an array of
+--     @descriptorSetCount@ valid
+--     'Vulkan.Core10.Handles.DescriptorSetLayout' 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
+--     'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DescriptorPool',
+-- 'Vulkan.Core10.Handles.DescriptorSetLayout',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'allocateDescriptorSets'
+data DescriptorSetAllocateInfo (es :: [Type]) = DescriptorSetAllocateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @descriptorPool@ is the pool which the sets will be allocated from.
+    descriptorPool :: DescriptorPool
+  , -- | @pSetLayouts@ is a pointer to an array of descriptor set layouts, with
+    -- each member specifying how the corresponding descriptor set is
+    -- allocated.
+    setLayouts :: Vector DescriptorSetLayout
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (DescriptorSetAllocateInfo es)
+
+instance Extensible DescriptorSetAllocateInfo where
+  extensibleType = STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO
+  setNext x next = x{next = next}
+  getNext DescriptorSetAllocateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DescriptorSetAllocateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DescriptorSetVariableDescriptorCountAllocateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss DescriptorSetAllocateInfo es, PokeChain es) => ToCStruct (DescriptorSetAllocateInfo es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorSetAllocateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorPool)) (descriptorPool)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (setLayouts)) :: Word32))
+    pPSetLayouts' <- ContT $ allocaBytesAligned @DescriptorSetLayout ((Data.Vector.length (setLayouts)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSetLayouts' `plusPtr` (8 * (i)) :: Ptr DescriptorSetLayout) (e)) (setLayouts)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr DescriptorSetLayout))) (pPSetLayouts')
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorPool)) (zero)
+    pPSetLayouts' <- ContT $ allocaBytesAligned @DescriptorSetLayout ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSetLayouts' `plusPtr` (8 * (i)) :: Ptr DescriptorSetLayout) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr DescriptorSetLayout))) (pPSetLayouts')
+    lift $ f
+
+instance (Extendss DescriptorSetAllocateInfo es, PeekChain es) => FromCStruct (DescriptorSetAllocateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    descriptorPool <- peek @DescriptorPool ((p `plusPtr` 16 :: Ptr DescriptorPool))
+    descriptorSetCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pSetLayouts <- peek @(Ptr DescriptorSetLayout) ((p `plusPtr` 32 :: Ptr (Ptr DescriptorSetLayout)))
+    pSetLayouts' <- generateM (fromIntegral descriptorSetCount) (\i -> peek @DescriptorSetLayout ((pSetLayouts `advancePtrBytes` (8 * (i)) :: Ptr DescriptorSetLayout)))
+    pure $ DescriptorSetAllocateInfo
+             next descriptorPool pSetLayouts'
+
+instance es ~ '[] => Zero (DescriptorSetAllocateInfo es) where
+  zero = DescriptorSetAllocateInfo
+           ()
+           zero
+           mempty
+
diff --git a/src/Vulkan/Core10/DescriptorSet.hs-boot b/src/Vulkan/Core10/DescriptorSet.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/DescriptorSet.hs-boot
@@ -0,0 +1,94 @@
+{-# language CPP #-}
+module Vulkan.Core10.DescriptorSet  ( CopyDescriptorSet
+                                    , DescriptorBufferInfo
+                                    , DescriptorImageInfo
+                                    , DescriptorPoolCreateInfo
+                                    , DescriptorPoolSize
+                                    , DescriptorSetAllocateInfo
+                                    , DescriptorSetLayoutBinding
+                                    , DescriptorSetLayoutCreateInfo
+                                    , WriteDescriptorSet
+                                    ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data CopyDescriptorSet
+
+instance ToCStruct CopyDescriptorSet
+instance Show CopyDescriptorSet
+
+instance FromCStruct CopyDescriptorSet
+
+
+data DescriptorBufferInfo
+
+instance ToCStruct DescriptorBufferInfo
+instance Show DescriptorBufferInfo
+
+instance FromCStruct DescriptorBufferInfo
+
+
+data DescriptorImageInfo
+
+instance ToCStruct DescriptorImageInfo
+instance Show DescriptorImageInfo
+
+instance FromCStruct DescriptorImageInfo
+
+
+type role DescriptorPoolCreateInfo nominal
+data DescriptorPoolCreateInfo (es :: [Type])
+
+instance (Extendss DescriptorPoolCreateInfo es, PokeChain es) => ToCStruct (DescriptorPoolCreateInfo es)
+instance Show (Chain es) => Show (DescriptorPoolCreateInfo es)
+
+instance (Extendss DescriptorPoolCreateInfo es, PeekChain es) => FromCStruct (DescriptorPoolCreateInfo es)
+
+
+data DescriptorPoolSize
+
+instance ToCStruct DescriptorPoolSize
+instance Show DescriptorPoolSize
+
+instance FromCStruct DescriptorPoolSize
+
+
+type role DescriptorSetAllocateInfo nominal
+data DescriptorSetAllocateInfo (es :: [Type])
+
+instance (Extendss DescriptorSetAllocateInfo es, PokeChain es) => ToCStruct (DescriptorSetAllocateInfo es)
+instance Show (Chain es) => Show (DescriptorSetAllocateInfo es)
+
+instance (Extendss DescriptorSetAllocateInfo es, PeekChain es) => FromCStruct (DescriptorSetAllocateInfo es)
+
+
+data DescriptorSetLayoutBinding
+
+instance ToCStruct DescriptorSetLayoutBinding
+instance Show DescriptorSetLayoutBinding
+
+instance FromCStruct DescriptorSetLayoutBinding
+
+
+type role DescriptorSetLayoutCreateInfo nominal
+data DescriptorSetLayoutCreateInfo (es :: [Type])
+
+instance (Extendss DescriptorSetLayoutCreateInfo es, PokeChain es) => ToCStruct (DescriptorSetLayoutCreateInfo es)
+instance Show (Chain es) => Show (DescriptorSetLayoutCreateInfo es)
+
+instance (Extendss DescriptorSetLayoutCreateInfo es, PeekChain es) => FromCStruct (DescriptorSetLayoutCreateInfo es)
+
+
+type role WriteDescriptorSet nominal
+data WriteDescriptorSet (es :: [Type])
+
+instance (Extendss WriteDescriptorSet es, PokeChain es) => ToCStruct (WriteDescriptorSet es)
+instance Show (Chain es) => Show (WriteDescriptorSet es)
+
+instance (Extendss WriteDescriptorSet es, PeekChain es) => FromCStruct (WriteDescriptorSet es)
+
diff --git a/src/Vulkan/Core10/Device.hs b/src/Vulkan/Core10/Device.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Device.hs
@@ -0,0 +1,864 @@
+{-# language CPP #-}
+module Vulkan.Core10.Device  ( createDevice
+                             , withDevice
+                             , destroyDevice
+                             , DeviceQueueCreateInfo(..)
+                             , DeviceCreateInfo(..)
+                             ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (maybePeek)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.ByteString (packCString)
+import Data.ByteString (useAsCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.Dynamic (initDeviceCmds)
+import Vulkan.CStruct.Extends (peekSomeCStruct)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Core10.Handles (Device(Device))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyDevice))
+import Vulkan.Core10.Enums.DeviceCreateFlags (DeviceCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (DeviceDiagnosticsConfigCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (DeviceGroupDeviceCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_memory_overallocation_behavior (DeviceMemoryOverallocationCreateInfoAMD)
+import Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_global_priority (DeviceQueueGlobalPriorityCreateInfoEXT)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateDevice))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage (PhysicalDevice16BitStorageFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage (PhysicalDevice8BitStorageFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_astc_decode_mode (PhysicalDeviceASTCDecodeFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_device_coherent_memory (PhysicalDeviceCoherentMemoryFeaturesAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_compute_shader_derivatives (PhysicalDeviceComputeShaderDerivativesFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conditional_rendering (PhysicalDeviceConditionalRenderingFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_corner_sampled_image (PhysicalDeviceCornerSampledImageFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (PhysicalDeviceCoverageReductionModeFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_custom_border_color (PhysicalDeviceCustomBorderColorFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing (PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PhysicalDeviceDepthClipEnableFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
+import Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shader_barycentric (PhysicalDeviceFragmentShaderBarycentricFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_shader_interlock (PhysicalDeviceFragmentShaderInterlockFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (PhysicalDeviceImagelessFramebufferFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_index_type_uint8 (PhysicalDeviceIndexTypeUint8FeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMemoryPriorityFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PhysicalDeviceRepresentativeFragmentTestFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2FeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_clock (PhysicalDeviceShaderClockFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation (PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters (PhysicalDeviceShaderDrawParametersFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8 (PhysicalDeviceShaderFloat16Int8Features)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_image_footprint (PhysicalDeviceShaderImageFootprintFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_shader_integer_functions2 (PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsFeaturesNV)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types (PhysicalDeviceShaderSubgroupExtendedTypesFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImageFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr (PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout (PhysicalDeviceUniformBufferStandardLayoutFeatures)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers (PhysicalDeviceVariablePointersFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PhysicalDeviceVertexAttributeDivisorFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan11Features)
+import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Features)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateDevice
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (DeviceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr (Ptr Device_T) -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (DeviceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr (Ptr Device_T) -> IO Result
+
+-- | vkCreateDevice - Create a new device instance
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ /must/ be one of the device handles returned from a
+--     call to
+--     'Vulkan.Core10.DeviceInitialization.enumeratePhysicalDevices' (see
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-physical-device-enumeration Physical Device Enumeration>).
+--
+-- -   @pCreateInfo@ is a pointer to a 'DeviceCreateInfo' structure
+--     containing information about how to create the device.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pDevice@ is a pointer to a handle in which the created
+--     'Vulkan.Core10.Handles.Device' is returned.
+--
+-- = Description
+--
+-- 'createDevice' 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, 'createDevice' /must/ return
+-- 'Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'. If any
+-- requested feature is not supported, 'createDevice' /must/ return
+-- 'Vulkan.Core10.Enums.Result.ERROR_FEATURE_NOT_PRESENT'. Support for
+-- extensions /can/ be checked before creating a device by querying
+-- 'Vulkan.Core10.ExtensionDiscovery.enumerateDeviceExtensionProperties'.
+-- Support for features /can/ similarly be checked by querying
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFeatures'.
+--
+-- After verifying and enabling the extensions the
+-- 'Vulkan.Core10.Handles.Device' 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
+-- 'Vulkan.Core10.DeviceInitialization.createInstance' 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,
+-- 'createDevice' will return
+-- 'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'.
+--
+-- == Valid Usage
+--
+-- -   All
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions-extensiondependencies required extensions>
+--     for each extension in the
+--     'DeviceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be
+--     present in that list
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'DeviceCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pDevice@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Device' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_FEATURE_NOT_PRESENT'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'DeviceCreateInfo',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+createDevice :: forall a io . (Extendss DeviceCreateInfo a, PokeChain a, MonadIO io) => PhysicalDevice -> DeviceCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Device)
+createDevice physicalDevice createInfo allocator = liftIO . evalContT $ do
+  let cmds = instanceCmds (physicalDevice :: PhysicalDevice)
+  let vkCreateDevicePtr = pVkCreateDevice cmds
+  lift $ unless (vkCreateDevicePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateDevice is null" Nothing Nothing
+  let vkCreateDevice' = mkVkCreateDevice vkCreateDevicePtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPDevice <- ContT $ bracket (callocBytes @(Ptr Device_T) 8) free
+  r <- lift $ vkCreateDevice' (physicalDeviceHandle (physicalDevice)) pCreateInfo pAllocator (pPDevice)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pDevice <- lift $ peek @(Ptr Device_T) pPDevice
+  pDevice' <- lift $ (\h -> Device h <$> initDeviceCmds cmds h) pDevice
+  pure $ (pDevice')
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createDevice' and 'destroyDevice'
+--
+-- To ensure that 'destroyDevice' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withDevice :: forall a io r . (Extendss DeviceCreateInfo a, PokeChain a, MonadIO io) => PhysicalDevice -> DeviceCreateInfo a -> Maybe AllocationCallbacks -> (io (Device) -> ((Device) -> io ()) -> r) -> r
+withDevice physicalDevice pCreateInfo pAllocator b =
+  b (createDevice physicalDevice pCreateInfo pAllocator)
+    (\(o0) -> destroyDevice o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyDevice
+  :: FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyDevice - Destroy a logical device
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device to destroy.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- = Description
+--
+-- To ensure that no work is active on the device,
+-- 'Vulkan.Core10.Queue.deviceWaitIdle' /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
+-- 'Vulkan.Core10.Handles.Device' object. Therefore, to avoid resource
+-- leaks, it is critical that an application explicitly free all of these
+-- resources prior to calling 'destroyDevice'.
+--
+-- == Valid Usage
+--
+-- -   All child objects created on @device@ /must/ have been destroyed
+--     prior to destroying @device@
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @device@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @device@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @device@ is not @NULL@, @device@ /must/ be a valid
+--     'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @device@ /must/ be externally synchronized
+--
+-- -   Host access to all 'Vulkan.Core10.Handles.Queue' objects received
+--     from @device@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device'
+destroyDevice :: forall io . MonadIO io => Device -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyDevice device allocator = liftIO . evalContT $ do
+  let vkDestroyDevicePtr = pVkDestroyDevice (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyDevicePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyDevice is null" Nothing Nothing
+  let vkDestroyDevice' = mkVkDestroyDevice vkDestroyDevicePtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyDevice' (deviceHandle (device)) pAllocator
+  pure $ ()
+
+
+-- | VkDeviceQueueCreateInfo - Structure specifying parameters of a newly
+-- created device queue
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
+--     returned by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
+--
+-- -   @queueCount@ /must/ be less than or equal to the @queueCount@ member
+--     of the 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
+--     structure, as returned by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
+--     in the @pQueueFamilyProperties@[queueFamilyIndex]
+--
+-- -   Each element of @pQueuePriorities@ /must/ be between @0.0@ and @1.0@
+--     inclusive
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-protectedMemory protected memory>
+--     feature is not enabled, the
+--     'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DEVICE_QUEUE_CREATE_PROTECTED_BIT'
+--     bit of @flags@ /must/ not be set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_global_priority.DeviceQueueGlobalPriorityCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlagBits'
+--     values
+--
+-- -   @pQueuePriorities@ /must/ be a valid pointer to an array of
+--     @queueCount@ @float@ values
+--
+-- -   @queueCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'DeviceCreateInfo',
+-- 'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceQueueCreateInfo (es :: [Type]) = DeviceQueueCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask indicating behavior of the queue.
+    flags :: DeviceQueueCreateFlags
+  , -- | @queueFamilyIndex@ is an unsigned integer indicating the index of the
+    -- queue family to create on this device. This index corresponds to the
+    -- index of an element of the @pQueueFamilyProperties@ array that was
+    -- returned by
+    -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'.
+    queueFamilyIndex :: Word32
+  , -- | @pQueuePriorities@ is a pointer to an array of @queueCount@ normalized
+    -- floating point values, specifying priorities of work that will be
+    -- submitted to each created queue. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-priority Queue Priority>
+    -- for more information.
+    queuePriorities :: Vector Float
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (DeviceQueueCreateInfo es)
+
+instance Extensible DeviceQueueCreateInfo where
+  extensibleType = STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext DeviceQueueCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceQueueCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DeviceQueueGlobalPriorityCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss DeviceQueueCreateInfo es, PokeChain es) => ToCStruct (DeviceQueueCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceQueueCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceQueueCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (queueFamilyIndex)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queuePriorities)) :: Word32))
+    pPQueuePriorities' <- ContT $ allocaBytesAligned @CFloat ((Data.Vector.length (queuePriorities)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueuePriorities' `plusPtr` (4 * (i)) :: Ptr CFloat) (CFloat (e))) (queuePriorities)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CFloat))) (pPQueuePriorities')
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    pPQueuePriorities' <- ContT $ allocaBytesAligned @CFloat ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueuePriorities' `plusPtr` (4 * (i)) :: Ptr CFloat) (CFloat (e))) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CFloat))) (pPQueuePriorities')
+    lift $ f
+
+instance (Extendss DeviceQueueCreateInfo es, PeekChain es) => FromCStruct (DeviceQueueCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @DeviceQueueCreateFlags ((p `plusPtr` 16 :: Ptr DeviceQueueCreateFlags))
+    queueFamilyIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    queueCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pQueuePriorities <- peek @(Ptr CFloat) ((p `plusPtr` 32 :: Ptr (Ptr CFloat)))
+    pQueuePriorities' <- generateM (fromIntegral queueCount) (\i -> do
+      pQueuePrioritiesElem <- peek @CFloat ((pQueuePriorities `advancePtrBytes` (4 * (i)) :: Ptr CFloat))
+      pure $ (\(CFloat a) -> a) pQueuePrioritiesElem)
+    pure $ DeviceQueueCreateInfo
+             next flags queueFamilyIndex pQueuePriorities'
+
+instance es ~ '[] => Zero (DeviceQueueCreateInfo es) where
+  zero = DeviceQueueCreateInfo
+           ()
+           zero
+           zero
+           mempty
+
+
+-- | VkDeviceCreateInfo - Structure specifying parameters of a newly created
+-- device
+--
+-- == Valid Usage
+--
+-- -   The @queueFamilyIndex@ member of each element of @pQueueCreateInfos@
+--     /must/ be unique within @pQueueCreateInfos@, except that two members
+--     can share the same @queueFamilyIndex@ if one is a protected-capable
+--     queue and one is not a protected-capable queue
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
+--     structure, then @pEnabledFeatures@ /must/ be @NULL@
+--
+-- -   @ppEnabledExtensionNames@ /must/ not contain
+--     @VK_AMD_negative_viewport_height@
+--
+-- -   @ppEnabledExtensionNames@ /must/ not contain both
+--     @VK_KHR_buffer_device_address@ and @VK_EXT_buffer_device_address@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core12.PhysicalDeviceVulkan11Features' structure, then it
+--     /must/ not include a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers.PhysicalDeviceVariablePointersFeatures',
+--     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures'
+--     structure
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then it
+--     /must/ not include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8.PhysicalDeviceShaderFloat16Int8Features',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.PhysicalDeviceImagelessFramebufferFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout.PhysicalDeviceUniformBufferStandardLayoutFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types.PhysicalDeviceShaderSubgroupExtendedTypesFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures',
+--     or
+--     'Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures'
+--     structure
+--
+-- -   If @ppEnabledExtensions@ contains @\"VK_KHR_draw_indirect_count\"@
+--     and the @pNext@ chain includes a
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@drawIndirectCount@
+--     /must/ be 'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If @ppEnabledExtensions@ contains
+--     @\"VK_KHR_sampler_mirror_clamp_to_edge\"@ and the @pNext@ chain
+--     includes a 'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure,
+--     then
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@samplerMirrorClampToEdge@
+--     /must/ be 'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If @ppEnabledExtensions@ contains @\"VK_EXT_descriptor_indexing\"@
+--     and the @pNext@ chain includes a
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@descriptorIndexing@
+--     /must/ be 'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If @ppEnabledExtensions@ contains @\"VK_EXT_sampler_filter_minmax\"@
+--     and the @pNext@ chain includes a
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@samplerFilterMinmax@
+--     /must/ be 'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If @ppEnabledExtensions@ contains
+--     @\"VK_EXT_shader_viewport_index_layer\"@ and the @pNext@ chain
+--     includes a 'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure,
+--     then
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@shaderOutputViewportIndex@
+--     and
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@shaderOutputLayer@
+--     /must/ both be 'Vulkan.Core10.BaseType.TRUE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_NV_device_diagnostics_config.DeviceDiagnosticsConfigCreateInfoNV',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo',
+--     'Vulkan.Extensions.VK_AMD_memory_overallocation_behavior.DeviceMemoryOverallocationCreateInfoAMD',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures',
+--     'Vulkan.Extensions.VK_EXT_astc_decode_mode.PhysicalDeviceASTCDecodeFeaturesEXT',
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedFeaturesEXT',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures',
+--     'Vulkan.Extensions.VK_EXT_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeaturesEXT',
+--     'Vulkan.Extensions.VK_AMD_device_coherent_memory.PhysicalDeviceCoherentMemoryFeaturesAMD',
+--     'Vulkan.Extensions.VK_NV_compute_shader_derivatives.PhysicalDeviceComputeShaderDerivativesFeaturesNV',
+--     'Vulkan.Extensions.VK_EXT_conditional_rendering.PhysicalDeviceConditionalRenderingFeaturesEXT',
+--     'Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixFeaturesNV',
+--     'Vulkan.Extensions.VK_NV_corner_sampled_image.PhysicalDeviceCornerSampledImageFeaturesNV',
+--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PhysicalDeviceCoverageReductionModeFeaturesNV',
+--     'Vulkan.Extensions.VK_EXT_custom_border_color.PhysicalDeviceCustomBorderColorFeaturesEXT',
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing.PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV',
+--     'Vulkan.Extensions.VK_EXT_depth_clip_enable.PhysicalDeviceDepthClipEnableFeaturesEXT',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
+--     'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
+--     'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+--     'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapFeaturesEXT',
+--     'Vulkan.Extensions.VK_NV_fragment_shader_barycentric.PhysicalDeviceFragmentShaderBarycentricFeaturesNV',
+--     'Vulkan.Extensions.VK_EXT_fragment_shader_interlock.PhysicalDeviceFragmentShaderInterlockFeaturesEXT',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.PhysicalDeviceImagelessFramebufferFeatures',
+--     'Vulkan.Extensions.VK_EXT_index_type_uint8.PhysicalDeviceIndexTypeUint8FeaturesEXT',
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT',
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
+--     'Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
+--     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
+--     'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryFeaturesKHR',
+--     'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
+--     'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
+--     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingFeaturesKHR',
+--     'Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV',
+--     'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2FeaturesEXT',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
+--     'Vulkan.Extensions.VK_KHR_shader_clock.PhysicalDeviceShaderClockFeaturesKHR',
+--     'Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation.PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8.PhysicalDeviceShaderFloat16Int8Features',
+--     'Vulkan.Extensions.VK_NV_shader_image_footprint.PhysicalDeviceShaderImageFootprintFeaturesNV',
+--     'Vulkan.Extensions.VK_INTEL_shader_integer_functions2.PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL',
+--     'Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsFeaturesNV',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types.PhysicalDeviceShaderSubgroupExtendedTypesFeatures',
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImageFeaturesNV',
+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT',
+--     'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
+--     'Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreFeatures',
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout.PhysicalDeviceUniformBufferStandardLayoutFeatures',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers.PhysicalDeviceVariablePointersFeatures',
+--     'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PhysicalDeviceVertexAttributeDivisorFeaturesEXT',
+--     'Vulkan.Core12.PhysicalDeviceVulkan11Features',
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Features',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures',
+--     or
+--     'Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @pQueueCreateInfos@ /must/ be a valid pointer to an array of
+--     @queueCreateInfoCount@ valid 'DeviceQueueCreateInfo' 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
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures'
+--     structure
+--
+-- -   @queueCreateInfoCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.DeviceCreateFlags.DeviceCreateFlags',
+-- 'DeviceQueueCreateInfo',
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createDevice'
+data DeviceCreateInfo (es :: [Type]) = DeviceCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: DeviceCreateFlags
+  , -- | @pQueueCreateInfos@ is a pointer to an array of 'DeviceQueueCreateInfo'
+    -- structures describing the queues that are requested to be created along
+    -- with the logical device. Refer to the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-queue-creation Queue Creation>
+    -- section below for further details.
+    queueCreateInfos :: Vector (SomeStruct DeviceQueueCreateInfo)
+  , -- | @ppEnabledLayerNames@ is deprecated and ignored. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation>.
+    enabledLayerNames :: Vector ByteString
+  , -- | @ppEnabledExtensionNames@ is a pointer to an array of
+    -- @enabledExtensionCount@ null-terminated UTF-8 strings containing the
+    -- names of extensions to enable for the created device. See the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions>
+    -- section for further details.
+    enabledExtensionNames :: Vector ByteString
+  , -- | @pEnabledFeatures@ is @NULL@ or a pointer to a
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures' structure
+    -- containing boolean indicators of all the features to be enabled. Refer
+    -- to the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features Features>
+    -- section for further details.
+    enabledFeatures :: Maybe PhysicalDeviceFeatures
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (DeviceCreateInfo es)
+
+instance Extensible DeviceCreateInfo where
+  extensibleType = STRUCTURE_TYPE_DEVICE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext DeviceCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PhysicalDeviceRobustness2FeaturesEXT = Just f
+    | Just Refl <- eqT @e @DeviceDiagnosticsConfigCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDiagnosticsConfigFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCustomBorderColorFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCoherentMemoryFeaturesAMD = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVulkan12Features = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVulkan11Features = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePipelineCreationCacheControlFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceLineRasterizationFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSubgroupSizeControlFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTexelBufferAlignmentFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSeparateDepthStencilLayoutsFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceFragmentShaderInterlockFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderSMBuiltinsFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceIndexTypeUint8FeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderClockFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCoverageReductionModeFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePerformanceQueryFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceYcbcrImageArraysFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCooperativeMatrixFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceImagelessFramebufferFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceBufferDeviceAddressFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceBufferDeviceAddressFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMemoryPriorityFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDepthClipEnableFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceUniformBufferStandardLayoutFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceScalarBlockLayoutFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceFragmentDensityMapFeaturesEXT = Just f
+    | Just Refl <- eqT @e @DeviceMemoryOverallocationCreateInfoAMD = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceRayTracingFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMeshShaderFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShadingRateImageFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderImageFootprintFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceFragmentShaderBarycentricFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceComputeShaderDerivativesFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCornerSampledImageFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceExclusiveScissorFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceRepresentativeFragmentTestFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTransformFeedbackFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceASTCDecodeFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVertexAttributeDivisorFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderAtomicInt64Features = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVulkanMemoryModelFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceConditionalRenderingFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDevice8BitStorageFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTimelineSemaphoreFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDescriptorIndexingFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceHostQueryResetFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderFloat16Int8Features = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderDrawParametersFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceInlineUniformBlockFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceBlendOperationAdvancedFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceProtectedMemoryFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderSubgroupExtendedTypesFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDevice16BitStorageFeatures = Just f
+    | Just Refl <- eqT @e @DeviceGroupDeviceCreateInfo = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMultiviewFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVariablePointersFeatures = Just f
+    | Just Refl <- eqT @e @(PhysicalDeviceFeatures2 '[]) = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss DeviceCreateInfo es, PokeChain es) => ToCStruct (DeviceCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueCreateInfos)) :: Word32))
+    pPQueueCreateInfos' <- ContT $ allocaBytesAligned @(DeviceQueueCreateInfo _) ((Data.Vector.length (queueCreateInfos)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPQueueCreateInfos' `plusPtr` (40 * (i)) :: Ptr (DeviceQueueCreateInfo _))) (e) . ($ ())) (queueCreateInfos)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (DeviceQueueCreateInfo _)))) (pPQueueCreateInfos')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledLayerNames)) :: Word32))
+    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledLayerNames)) * 8) 8
+    Data.Vector.imapM_ (\i e -> do
+      ppEnabledLayerNames'' <- ContT $ useAsCString (e)
+      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (enabledLayerNames)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledExtensionNames)) :: Word32))
+    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledExtensionNames)) * 8) 8
+    Data.Vector.imapM_ (\i e -> do
+      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)
+      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (enabledExtensionNames)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')
+    pEnabledFeatures'' <- case (enabledFeatures) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr PhysicalDeviceFeatures))) pEnabledFeatures''
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPQueueCreateInfos' <- ContT $ allocaBytesAligned @(DeviceQueueCreateInfo _) ((Data.Vector.length (mempty)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPQueueCreateInfos' `plusPtr` (40 * (i)) :: Ptr (DeviceQueueCreateInfo _))) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (DeviceQueueCreateInfo _)))) (pPQueueCreateInfos')
+    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8
+    Data.Vector.imapM_ (\i e -> do
+      ppEnabledLayerNames'' <- ContT $ useAsCString (e)
+      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')
+    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8
+    Data.Vector.imapM_ (\i e -> do
+      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)
+      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')
+    lift $ f
+
+instance (Extendss DeviceCreateInfo es, PeekChain es) => FromCStruct (DeviceCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @DeviceCreateFlags ((p `plusPtr` 16 :: Ptr DeviceCreateFlags))
+    queueCreateInfoCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pQueueCreateInfos <- peek @(Ptr (DeviceQueueCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (DeviceQueueCreateInfo a))))
+    pQueueCreateInfos' <- generateM (fromIntegral queueCreateInfoCount) (\i -> peekSomeCStruct (forgetExtensions ((pQueueCreateInfos `advancePtrBytes` (40 * (i)) :: Ptr (DeviceQueueCreateInfo _)))))
+    enabledLayerCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    ppEnabledLayerNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar))))
+    ppEnabledLayerNames' <- generateM (fromIntegral enabledLayerCount) (\i -> packCString =<< peek ((ppEnabledLayerNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))
+    enabledExtensionCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    ppEnabledExtensionNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar))))
+    ppEnabledExtensionNames' <- generateM (fromIntegral enabledExtensionCount) (\i -> packCString =<< peek ((ppEnabledExtensionNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))
+    pEnabledFeatures <- peek @(Ptr PhysicalDeviceFeatures) ((p `plusPtr` 64 :: Ptr (Ptr PhysicalDeviceFeatures)))
+    pEnabledFeatures' <- maybePeek (\j -> peekCStruct @PhysicalDeviceFeatures (j)) pEnabledFeatures
+    pure $ DeviceCreateInfo
+             next flags pQueueCreateInfos' ppEnabledLayerNames' ppEnabledExtensionNames' pEnabledFeatures'
+
+instance es ~ '[] => Zero (DeviceCreateInfo es) where
+  zero = DeviceCreateInfo
+           ()
+           zero
+           mempty
+           mempty
+           mempty
+           Nothing
+
diff --git a/src/Vulkan/Core10/Device.hs-boot b/src/Vulkan/Core10/Device.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Device.hs-boot
@@ -0,0 +1,29 @@
+{-# language CPP #-}
+module Vulkan.Core10.Device  ( DeviceCreateInfo
+                             , DeviceQueueCreateInfo
+                             ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role DeviceCreateInfo nominal
+data DeviceCreateInfo (es :: [Type])
+
+instance (Extendss DeviceCreateInfo es, PokeChain es) => ToCStruct (DeviceCreateInfo es)
+instance Show (Chain es) => Show (DeviceCreateInfo es)
+
+instance (Extendss DeviceCreateInfo es, PeekChain es) => FromCStruct (DeviceCreateInfo es)
+
+
+type role DeviceQueueCreateInfo nominal
+data DeviceQueueCreateInfo (es :: [Type])
+
+instance (Extendss DeviceQueueCreateInfo es, PokeChain es) => ToCStruct (DeviceQueueCreateInfo es)
+instance Show (Chain es) => Show (DeviceQueueCreateInfo es)
+
+instance (Extendss DeviceQueueCreateInfo es, PeekChain es) => FromCStruct (DeviceQueueCreateInfo es)
+
diff --git a/src/Vulkan/Core10/DeviceInitialization.hs b/src/Vulkan/Core10/DeviceInitialization.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/DeviceInitialization.hs
@@ -0,0 +1,4669 @@
+{-# language CPP #-}
+module Vulkan.Core10.DeviceInitialization  ( createInstance
+                                           , withInstance
+                                           , destroyInstance
+                                           , enumeratePhysicalDevices
+                                           , getDeviceProcAddr
+                                           , getInstanceProcAddr
+                                           , getPhysicalDeviceProperties
+                                           , getPhysicalDeviceQueueFamilyProperties
+                                           , getPhysicalDeviceMemoryProperties
+                                           , getPhysicalDeviceFeatures
+                                           , getPhysicalDeviceFormatProperties
+                                           , getPhysicalDeviceImageFormatProperties
+                                           , PhysicalDeviceProperties(..)
+                                           , ApplicationInfo(..)
+                                           , InstanceCreateInfo(..)
+                                           , QueueFamilyProperties(..)
+                                           , PhysicalDeviceMemoryProperties(..)
+                                           , MemoryType(..)
+                                           , MemoryHeap(..)
+                                           , FormatProperties(..)
+                                           , ImageFormatProperties(..)
+                                           , PhysicalDeviceFeatures(..)
+                                           , PhysicalDeviceSparseProperties(..)
+                                           , PhysicalDeviceLimits(..)
+                                           ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (maybePeek)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import Foreign.Ptr (castFunPtr)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.ByteString (packCString)
+import Data.ByteString (useAsCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Foreign.C.Types (CChar(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Ptr (Ptr(Ptr))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Word (Word8)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Dynamic (getInstanceProcAddr')
+import Vulkan.Dynamic (initInstanceCmds)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Utils (peekByteStringFromSizedVectorPtr)
+import Vulkan.CStruct.Utils (pokeFixedLengthByteString)
+import Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_report (DebugReportCallbackCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessengerCreateInfoEXT)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceProcAddr))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.SharedTypes (Extent3D)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.Core10.Enums.Format (Format(..))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.ImageTiling (ImageTiling)
+import Vulkan.Core10.Enums.ImageTiling (ImageTiling(..))
+import Vulkan.Core10.Enums.ImageType (ImageType)
+import Vulkan.Core10.Enums.ImageType (ImageType(..))
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlagBits(..))
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Core10.Handles (Instance(Instance))
+import Vulkan.Dynamic (InstanceCmds(pVkDestroyInstance))
+import Vulkan.Dynamic (InstanceCmds(pVkEnumeratePhysicalDevices))
+import Vulkan.Dynamic (InstanceCmds(pVkGetInstanceProcAddr))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceFeatures))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceFormatProperties))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceImageFormatProperties))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceMemoryProperties))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceProperties))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceQueueFamilyProperties))
+import Vulkan.Core10.Enums.InstanceCreateFlags (InstanceCreateFlags)
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.APIConstants (MAX_MEMORY_HEAPS)
+import Vulkan.Core10.APIConstants (MAX_MEMORY_TYPES)
+import Vulkan.Core10.APIConstants (MAX_PHYSICAL_DEVICE_NAME_SIZE)
+import Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlags)
+import Vulkan.Core10.Enums.MemoryPropertyFlagBits (MemoryPropertyFlags)
+import Vulkan.Core10.FuncPointers (PFN_vkVoidFunction)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice(PhysicalDevice))
+import Vulkan.Core10.Enums.PhysicalDeviceType (PhysicalDeviceType)
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.QueueFlagBits (QueueFlags)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Core10.APIConstants (UUID_SIZE)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_validation_features (ValidationFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_validation_flags (ValidationFlagsEXT)
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.APIConstants (pattern MAX_MEMORY_HEAPS)
+import Vulkan.Core10.APIConstants (pattern MAX_MEMORY_TYPES)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_APPLICATION_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INSTANCE_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateInstance
+  :: FunPtr (Ptr (InstanceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr (Ptr Instance_T) -> IO Result) -> Ptr (InstanceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr (Ptr Instance_T) -> IO Result
+
+-- | vkCreateInstance - Create a new Vulkan instance
+--
+-- = Parameters
+--
+-- -   @pCreateInfo@ is a pointer to a 'InstanceCreateInfo' structure
+--     controlling creation of the instance.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pInstance@ points a 'Vulkan.Core10.Handles.Instance' handle in
+--     which the resulting instance is returned.
+--
+-- = Description
+--
+-- 'createInstance' verifies that the requested layers exist. If not,
+-- 'createInstance' will return
+-- 'Vulkan.Core10.Enums.Result.ERROR_LAYER_NOT_PRESENT'. Next
+-- 'createInstance' 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, 'createInstance' /must/ return
+-- 'Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'. After
+-- verifying and enabling the instance layers and extensions the
+-- 'Vulkan.Core10.Handles.Instance' 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 'createInstance'
+-- time for the creation to succeed.
+--
+-- == Valid Usage
+--
+-- -   All
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions-extensiondependencies required extensions>
+--     for each extension in the
+--     'InstanceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be
+--     present in that list
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'InstanceCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pInstance@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Instance' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_LAYER_NOT_PRESENT'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance', 'InstanceCreateInfo'
+createInstance :: forall a io . (Extendss InstanceCreateInfo a, PokeChain a, MonadIO io) => InstanceCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Instance)
+createInstance createInfo allocator = liftIO . evalContT $ do
+  vkCreateInstancePtr <- lift $ castFunPtr @_ @(("pCreateInfo" ::: Ptr (InstanceCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pInstance" ::: Ptr (Ptr Instance_T)) -> IO Result) <$> getInstanceProcAddr' nullPtr (Ptr "vkCreateInstance"#)
+  lift $ unless (vkCreateInstancePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateInstance is null" Nothing Nothing
+  let vkCreateInstance' = mkVkCreateInstance vkCreateInstancePtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPInstance <- ContT $ bracket (callocBytes @(Ptr Instance_T) 8) free
+  r <- lift $ vkCreateInstance' pCreateInfo pAllocator (pPInstance)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pInstance <- lift $ peek @(Ptr Instance_T) pPInstance
+  pInstance' <- lift $ (\h -> Instance h <$> initInstanceCmds h) pInstance
+  pure $ (pInstance')
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createInstance' and 'destroyInstance'
+--
+-- To ensure that 'destroyInstance' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withInstance :: forall a io r . (Extendss InstanceCreateInfo a, PokeChain a, MonadIO io) => InstanceCreateInfo a -> Maybe AllocationCallbacks -> (io (Instance) -> ((Instance) -> io ()) -> r) -> r
+withInstance pCreateInfo pAllocator b =
+  b (createInstance pCreateInfo pAllocator)
+    (\(o0) -> destroyInstance o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyInstance
+  :: FunPtr (Ptr Instance_T -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyInstance - Destroy an instance of Vulkan
+--
+-- = Parameters
+--
+-- -   @instance@ is the handle of the instance to destroy.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All child objects created using @instance@ /must/ have been
+--     destroyed prior to destroying @instance@
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @instance@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @instance@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @instance@ is not @NULL@, @instance@ /must/ be a valid
+--     'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @instance@ /must/ be externally synchronized
+--
+-- -   Host access to all 'Vulkan.Core10.Handles.PhysicalDevice' objects
+--     enumerated from @instance@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance'
+destroyInstance :: forall io . MonadIO io => Instance -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyInstance instance' allocator = liftIO . evalContT $ do
+  let vkDestroyInstancePtr = pVkDestroyInstance (instanceCmds (instance' :: Instance))
+  lift $ unless (vkDestroyInstancePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyInstance is null" Nothing Nothing
+  let vkDestroyInstance' = mkVkDestroyInstance vkDestroyInstancePtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyInstance' (instanceHandle (instance')) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkEnumeratePhysicalDevices
+  :: FunPtr (Ptr Instance_T -> Ptr Word32 -> Ptr (Ptr PhysicalDevice_T) -> IO Result) -> Ptr Instance_T -> Ptr Word32 -> Ptr (Ptr PhysicalDevice_T) -> IO Result
+
+-- | vkEnumeratePhysicalDevices - Enumerates the physical devices accessible
+-- to a Vulkan instance
+--
+-- = Parameters
+--
+-- -   @instance@ is a handle to a Vulkan instance previously created with
+--     'createInstance'.
+--
+-- -   @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
+--     'Vulkan.Core10.Handles.PhysicalDevice' handles.
+--
+-- = Description
+--
+-- If @pPhysicalDevices@ is @NULL@, then the number of physical devices
+-- available is returned in @pPhysicalDeviceCount@. Otherwise,
+-- @pPhysicalDeviceCount@ /must/ point to a variable set by the user to the
+-- number of elements in the @pPhysicalDevices@ array, and on return the
+-- variable is overwritten with the number of handles actually written to
+-- @pPhysicalDevices@. If @pPhysicalDeviceCount@ is less than the number of
+-- physical devices available, at most @pPhysicalDeviceCount@ structures
+-- will be written. If @pPhysicalDeviceCount@ is smaller than the number of
+-- physical devices available, 'Vulkan.Core10.Enums.Result.INCOMPLETE' will
+-- be returned instead of 'Vulkan.Core10.Enums.Result.SUCCESS', to indicate
+-- that not all the available physical devices were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pPhysicalDeviceCount@ /must/ be a valid pointer to a @uint32_t@
+--     value
+--
+-- -   If the value referenced by @pPhysicalDeviceCount@ is not @0@, and
+--     @pPhysicalDevices@ is not @NULL@, @pPhysicalDevices@ /must/ be a
+--     valid pointer to an array of @pPhysicalDeviceCount@
+--     'Vulkan.Core10.Handles.PhysicalDevice' handles
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Instance', 'Vulkan.Core10.Handles.PhysicalDevice'
+enumeratePhysicalDevices :: forall io . MonadIO io => Instance -> io (Result, ("physicalDevices" ::: Vector PhysicalDevice))
+enumeratePhysicalDevices instance' = liftIO . evalContT $ do
+  let cmds = instanceCmds (instance' :: Instance)
+  let vkEnumeratePhysicalDevicesPtr = pVkEnumeratePhysicalDevices cmds
+  lift $ unless (vkEnumeratePhysicalDevicesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEnumeratePhysicalDevices is null" Nothing Nothing
+  let vkEnumeratePhysicalDevices' = mkVkEnumeratePhysicalDevices vkEnumeratePhysicalDevicesPtr
+  let instance'' = instanceHandle (instance')
+  pPPhysicalDeviceCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkEnumeratePhysicalDevices' instance'' (pPPhysicalDeviceCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPhysicalDeviceCount <- lift $ peek @Word32 pPPhysicalDeviceCount
+  pPPhysicalDevices <- ContT $ bracket (callocBytes @(Ptr PhysicalDevice_T) ((fromIntegral (pPhysicalDeviceCount)) * 8)) free
+  r' <- lift $ vkEnumeratePhysicalDevices' instance'' (pPPhysicalDeviceCount) (pPPhysicalDevices)
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPhysicalDeviceCount' <- lift $ peek @Word32 pPPhysicalDeviceCount
+  pPhysicalDevices' <- lift $ generateM (fromIntegral (pPhysicalDeviceCount')) (\i -> do
+    pPhysicalDevicesElem <- peek @(Ptr PhysicalDevice_T) ((pPPhysicalDevices `advancePtrBytes` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)))
+    pure $ (\h -> PhysicalDevice h cmds ) pPhysicalDevicesElem)
+  pure $ ((r'), pPhysicalDevices')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceProcAddr
+  :: FunPtr (Ptr Device_T -> Ptr CChar -> IO PFN_vkVoidFunction) -> Ptr Device_T -> Ptr CChar -> IO PFN_vkVoidFunction
+
+-- | vkGetDeviceProcAddr - Return a function pointer for a command
+--
+-- = Parameters
+--
+-- The table below defines the various use cases for 'getDeviceProcAddr'
+-- and expected return value for each case.
+--
+-- = Description
+--
+-- The returned function pointer is of type
+-- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction', and /must/ be cast to
+-- the type of the command being queried before use. The function pointer
+-- /must/ only be called with a dispatchable object (the first parameter)
+-- that is @device@ or a child of @device@.
+--
+-- +----------------------+----------------------+-----------------------+
+-- | @device@             | @pName@              | return value          |
+-- +======================+======================+=======================+
+-- | @NULL@               | *1                   | undefined             |
+-- +----------------------+----------------------+-----------------------+
+-- | invalid device       | *1                   | undefined             |
+-- +----------------------+----------------------+-----------------------+
+-- | device               | @NULL@               | undefined             |
+-- +----------------------+----------------------+-----------------------+
+-- | device               | core device-level    | fp2                   |
+-- |                      | Vulkan command       |                       |
+-- +----------------------+----------------------+-----------------------+
+-- | device               | enabled extension    | fp2                   |
+-- |                      | device-level         |                       |
+-- |                      | commands             |                       |
+-- +----------------------+----------------------+-----------------------+
+-- | any other case, not  | @NULL@               |                       |
+-- | covered above        |                      |                       |
+-- +----------------------+----------------------+-----------------------+
+--
+-- 'getDeviceProcAddr' behavior
+--
+-- [1]
+--     \"*\" means any representable value for the parameter (including
+--     valid values, invalid values, and @NULL@).
+--
+-- [2]
+--     The returned function pointer /must/ only be called with a
+--     dispatchable object (the first parameter) that is @device@ or a
+--     child of @device@ e.g. 'Vulkan.Core10.Handles.Device',
+--     'Vulkan.Core10.Handles.Queue', or
+--     'Vulkan.Core10.Handles.CommandBuffer'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction',
+-- 'Vulkan.Core10.Handles.Device'
+getDeviceProcAddr :: forall io . MonadIO io => Device -> ("name" ::: ByteString) -> io (PFN_vkVoidFunction)
+getDeviceProcAddr device name = liftIO . evalContT $ do
+  let vkGetDeviceProcAddrPtr = pVkGetDeviceProcAddr (deviceCmds (device :: Device))
+  lift $ unless (vkGetDeviceProcAddrPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceProcAddr is null" Nothing Nothing
+  let vkGetDeviceProcAddr' = mkVkGetDeviceProcAddr vkGetDeviceProcAddrPtr
+  pName <- ContT $ useAsCString (name)
+  r <- lift $ vkGetDeviceProcAddr' (deviceHandle (device)) pName
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetInstanceProcAddr
+  :: FunPtr (Ptr Instance_T -> Ptr CChar -> IO PFN_vkVoidFunction) -> Ptr Instance_T -> Ptr CChar -> IO PFN_vkVoidFunction
+
+-- | vkGetInstanceProcAddr - Return a function pointer for a command
+--
+-- = 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
+--
+-- 'getInstanceProcAddr' itself is obtained in a platform- and loader-
+-- specific manner. Typically, the loader library will export this command
+-- as a function symbol, so applications /can/ link against the loader
+-- library, or load it dynamically and look up the symbol using
+-- platform-specific APIs.
+--
+-- The table below defines the various use cases for 'getInstanceProcAddr'
+-- and expected return value (“fp” is “function pointer”) for each case.
+--
+-- The returned function pointer is of type
+-- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction', and /must/ be cast to
+-- the type of the command being queried before use.
+--
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+-- | @instance@           | @pName@                                                                 | return value          |
+-- +======================+=========================================================================+=======================+
+-- | *1                   | @NULL@                                                                  | undefined             |
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+-- | invalid non-@NULL@   | *1                                                                      | undefined             |
+-- | instance             |                                                                         |                       |
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+-- | @NULL@               | 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion'           | fp                    |
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+-- | @NULL@               | 'Vulkan.Core10.ExtensionDiscovery.enumerateInstanceExtensionProperties' | fp                    |
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+-- | @NULL@               | 'Vulkan.Core10.LayerDiscovery.enumerateInstanceLayerProperties'         | fp                    |
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+-- | @NULL@               | 'createInstance'                                                        | fp                    |
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+-- | instance             | core Vulkan command                                                     | fp2                   |
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+-- | instance             | enabled instance extension commands for @instance@                      | fp2                   |
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+-- | instance             | available device extension3 commands for @instance@                     | fp2                   |
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+-- | any other case, not  | @NULL@                                                                  |                       |
+-- | covered above        |                                                                         |                       |
+-- +----------------------+-------------------------------------------------------------------------+-----------------------+
+--
+-- 'getInstanceProcAddr' behavior
+--
+-- [1]
+--     \"*\" means any representable value for the parameter (including
+--     valid values, invalid values, and @NULL@).
+--
+-- [2]
+--     The returned function pointer /must/ only be called with a
+--     dispatchable object (the first parameter) that is @instance@ or a
+--     child of @instance@, e.g. 'Vulkan.Core10.Handles.Instance',
+--     'Vulkan.Core10.Handles.PhysicalDevice',
+--     'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Queue', or
+--     'Vulkan.Core10.Handles.CommandBuffer'.
+--
+-- [3]
+--     An “available device extension” is a device extension supported by
+--     any physical device enumerated by @instance@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @instance@ is not @NULL@, @instance@ /must/ be a valid
+--     'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pName@ /must/ be a null-terminated UTF-8 string
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction',
+-- 'Vulkan.Core10.Handles.Instance'
+getInstanceProcAddr :: forall io . MonadIO io => Instance -> ("name" ::: ByteString) -> io (PFN_vkVoidFunction)
+getInstanceProcAddr instance' name = liftIO . evalContT $ do
+  let vkGetInstanceProcAddrPtr = pVkGetInstanceProcAddr (instanceCmds (instance' :: Instance))
+  lift $ unless (vkGetInstanceProcAddrPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetInstanceProcAddr is null" Nothing Nothing
+  let vkGetInstanceProcAddr' = mkVkGetInstanceProcAddr vkGetInstanceProcAddrPtr
+  pName <- ContT $ useAsCString (name)
+  r <- lift $ vkGetInstanceProcAddr' (instanceHandle (instance')) pName
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceProperties -> IO ()
+
+-- | vkGetPhysicalDeviceProperties - Returns properties of a physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the physical device whose
+--     properties will be queried.
+--
+-- -   @pProperties@ is a pointer to a 'PhysicalDeviceProperties' structure
+--     in which properties are returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceProperties'
+getPhysicalDeviceProperties :: forall io . MonadIO io => PhysicalDevice -> io (PhysicalDeviceProperties)
+getPhysicalDeviceProperties physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDevicePropertiesPtr = pVkGetPhysicalDeviceProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDevicePropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceProperties is null" Nothing Nothing
+  let vkGetPhysicalDeviceProperties' = mkVkGetPhysicalDeviceProperties vkGetPhysicalDevicePropertiesPtr
+  pPProperties <- ContT (withZeroCStruct @PhysicalDeviceProperties)
+  lift $ vkGetPhysicalDeviceProperties' (physicalDeviceHandle (physicalDevice)) (pPProperties)
+  pProperties <- lift $ peekCStruct @PhysicalDeviceProperties pPProperties
+  pure $ (pProperties)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceQueueFamilyProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr QueueFamilyProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr QueueFamilyProperties -> IO ()
+
+-- | vkGetPhysicalDeviceQueueFamilyProperties - Reports properties of the
+-- queues of the specified physical device
+--
+-- = 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 'QueueFamilyProperties' structures.
+--
+-- = Description
+--
+-- If @pQueueFamilyProperties@ is @NULL@, then the number of queue families
+-- available is returned in @pQueueFamilyPropertyCount@. Implementations
+-- /must/ support at least one queue family. Otherwise,
+-- @pQueueFamilyPropertyCount@ /must/ point to a variable set by the user
+-- to the number of elements in the @pQueueFamilyProperties@ array, and on
+-- return the variable is overwritten with the number of structures
+-- actually written to @pQueueFamilyProperties@. If
+-- @pQueueFamilyPropertyCount@ is less than the number of queue families
+-- available, at most @pQueueFamilyPropertyCount@ structures will be
+-- written.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a
+--     @uint32_t@ value
+--
+-- -   If the value referenced by @pQueueFamilyPropertyCount@ is not @0@,
+--     and @pQueueFamilyProperties@ is not @NULL@, @pQueueFamilyProperties@
+--     /must/ be a valid pointer to an array of @pQueueFamilyPropertyCount@
+--     'QueueFamilyProperties' structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'QueueFamilyProperties'
+getPhysicalDeviceQueueFamilyProperties :: forall io . MonadIO io => PhysicalDevice -> io (("queueFamilyProperties" ::: Vector QueueFamilyProperties))
+getPhysicalDeviceQueueFamilyProperties physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceQueueFamilyPropertiesPtr = pVkGetPhysicalDeviceQueueFamilyProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceQueueFamilyPropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceQueueFamilyProperties is null" Nothing Nothing
+  let vkGetPhysicalDeviceQueueFamilyProperties' = mkVkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyPropertiesPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPQueueFamilyPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  lift $ vkGetPhysicalDeviceQueueFamilyProperties' physicalDevice' (pPQueueFamilyPropertyCount) (nullPtr)
+  pQueueFamilyPropertyCount <- lift $ peek @Word32 pPQueueFamilyPropertyCount
+  pPQueueFamilyProperties <- ContT $ bracket (callocBytes @QueueFamilyProperties ((fromIntegral (pQueueFamilyPropertyCount)) * 24)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPQueueFamilyProperties `advancePtrBytes` (i * 24) :: Ptr QueueFamilyProperties) . ($ ())) [0..(fromIntegral (pQueueFamilyPropertyCount)) - 1]
+  lift $ vkGetPhysicalDeviceQueueFamilyProperties' physicalDevice' (pPQueueFamilyPropertyCount) ((pPQueueFamilyProperties))
+  pQueueFamilyPropertyCount' <- lift $ peek @Word32 pPQueueFamilyPropertyCount
+  pQueueFamilyProperties' <- lift $ generateM (fromIntegral (pQueueFamilyPropertyCount')) (\i -> peekCStruct @QueueFamilyProperties (((pPQueueFamilyProperties) `advancePtrBytes` (24 * (i)) :: Ptr QueueFamilyProperties)))
+  pure $ (pQueueFamilyProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceMemoryProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceMemoryProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceMemoryProperties -> IO ()
+
+-- | vkGetPhysicalDeviceMemoryProperties - Reports memory information for the
+-- specified physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the device to query.
+--
+-- -   @pMemoryProperties@ is a pointer to a
+--     'PhysicalDeviceMemoryProperties' structure in which the properties
+--     are returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceMemoryProperties'
+getPhysicalDeviceMemoryProperties :: forall io . MonadIO io => PhysicalDevice -> io (PhysicalDeviceMemoryProperties)
+getPhysicalDeviceMemoryProperties physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceMemoryPropertiesPtr = pVkGetPhysicalDeviceMemoryProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceMemoryPropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceMemoryProperties is null" Nothing Nothing
+  let vkGetPhysicalDeviceMemoryProperties' = mkVkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryPropertiesPtr
+  pPMemoryProperties <- ContT (withZeroCStruct @PhysicalDeviceMemoryProperties)
+  lift $ vkGetPhysicalDeviceMemoryProperties' (physicalDeviceHandle (physicalDevice)) (pPMemoryProperties)
+  pMemoryProperties <- lift $ peekCStruct @PhysicalDeviceMemoryProperties pPMemoryProperties
+  pure $ (pMemoryProperties)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceFeatures
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceFeatures -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceFeatures -> IO ()
+
+-- | vkGetPhysicalDeviceFeatures - Reports capabilities of a physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     supported features.
+--
+-- -   @pFeatures@ is a pointer to a 'PhysicalDeviceFeatures' structure in
+--     which the physical device features are returned. For each feature, a
+--     value of 'Vulkan.Core10.BaseType.TRUE' specifies that the feature is
+--     supported on this physical device, and
+--     'Vulkan.Core10.BaseType.FALSE' specifies that the feature is not
+--     supported.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceFeatures'
+getPhysicalDeviceFeatures :: forall io . MonadIO io => PhysicalDevice -> io (PhysicalDeviceFeatures)
+getPhysicalDeviceFeatures physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceFeaturesPtr = pVkGetPhysicalDeviceFeatures (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceFeaturesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceFeatures is null" Nothing Nothing
+  let vkGetPhysicalDeviceFeatures' = mkVkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeaturesPtr
+  pPFeatures <- ContT (withZeroCStruct @PhysicalDeviceFeatures)
+  lift $ vkGetPhysicalDeviceFeatures' (physicalDeviceHandle (physicalDevice)) (pPFeatures)
+  pFeatures <- lift $ peekCStruct @PhysicalDeviceFeatures pPFeatures
+  pure $ (pFeatures)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceFormatProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Format -> Ptr FormatProperties -> IO ()) -> Ptr PhysicalDevice_T -> Format -> Ptr FormatProperties -> IO ()
+
+-- | vkGetPhysicalDeviceFormatProperties - Lists physical device’s format
+-- capabilities
+--
+-- = 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 'FormatProperties' structure
+--     in which physical device properties for @format@ are returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Format.Format', 'FormatProperties',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceFormatProperties :: forall io . MonadIO io => PhysicalDevice -> Format -> io (FormatProperties)
+getPhysicalDeviceFormatProperties physicalDevice format = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceFormatPropertiesPtr = pVkGetPhysicalDeviceFormatProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceFormatPropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceFormatProperties is null" Nothing Nothing
+  let vkGetPhysicalDeviceFormatProperties' = mkVkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatPropertiesPtr
+  pPFormatProperties <- ContT (withZeroCStruct @FormatProperties)
+  lift $ vkGetPhysicalDeviceFormatProperties' (physicalDeviceHandle (physicalDevice)) (format) (pPFormatProperties)
+  pFormatProperties <- lift $ peekCStruct @FormatProperties pPFormatProperties
+  pure $ (pFormatProperties)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceImageFormatProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> Ptr ImageFormatProperties -> IO Result) -> Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> Ptr ImageFormatProperties -> IO Result
+
+-- | vkGetPhysicalDeviceImageFormatProperties - Lists physical device’s image
+-- format capabilities
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     image capabilities.
+--
+-- -   @format@ is a 'Vulkan.Core10.Enums.Format.Format' value specifying
+--     the image format, corresponding to
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@format@.
+--
+-- -   @type@ is a 'Vulkan.Core10.Enums.ImageType.ImageType' value
+--     specifying the image type, corresponding to
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@imageType@.
+--
+-- -   @tiling@ is a 'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value
+--     specifying the image tiling, corresponding to
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@tiling@.
+--
+-- -   @usage@ is a bitmask of
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
+--     specifying the intended usage of the image, corresponding to
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@.
+--
+-- -   @flags@ is a bitmask of
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits'
+--     specifying additional parameters of the image, corresponding to
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@.
+--
+-- -   @pImageFormatProperties@ is a pointer to a 'ImageFormatProperties'
+--     structure in which capabilities are returned.
+--
+-- = Description
+--
+-- The @format@, @type@, @tiling@, @usage@, and @flags@ parameters
+-- correspond to parameters that would be consumed by
+-- 'Vulkan.Core10.Image.createImage' (as members of
+-- 'Vulkan.Core10.Image.ImageCreateInfo').
+--
+-- If @format@ is not a supported image format, or if the combination of
+-- @format@, @type@, @tiling@, @usage@, and @flags@ is not supported for
+-- images, then 'getPhysicalDeviceImageFormatProperties' returns
+-- 'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'.
+--
+-- The limitations on an image format that are reported by
+-- 'getPhysicalDeviceImageFormatProperties' have the following property: if
+-- @usage1@ and @usage2@ of type
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags' are such that
+-- the bits set in @usage1@ are a subset of the bits set in @usage2@, and
+-- @flags1@ and @flags2@ of type
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags' are such that
+-- the bits set in @flags1@ are a subset of the bits set in @flags2@, then
+-- the limitations for @usage1@ and @flags1@ /must/ be no more strict than
+-- the limitations for @usage2@ and @flags2@, for all values of @format@,
+-- @type@, and @tiling@.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',
+-- 'ImageFormatProperties', 'Vulkan.Core10.Enums.ImageTiling.ImageTiling',
+-- 'Vulkan.Core10.Enums.ImageType.ImageType',
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceImageFormatProperties :: forall io . MonadIO io => PhysicalDevice -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> io (ImageFormatProperties)
+getPhysicalDeviceImageFormatProperties physicalDevice format type' tiling usage flags = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceImageFormatPropertiesPtr = pVkGetPhysicalDeviceImageFormatProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceImageFormatPropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceImageFormatProperties is null" Nothing Nothing
+  let vkGetPhysicalDeviceImageFormatProperties' = mkVkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatPropertiesPtr
+  pPImageFormatProperties <- ContT (withZeroCStruct @ImageFormatProperties)
+  r <- lift $ vkGetPhysicalDeviceImageFormatProperties' (physicalDeviceHandle (physicalDevice)) (format) (type') (tiling) (usage) (flags) (pPImageFormatProperties)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pImageFormatProperties <- lift $ peekCStruct @ImageFormatProperties pPImageFormatProperties
+  pure $ (pImageFormatProperties)
+
+
+-- | VkPhysicalDeviceProperties - Structure specifying physical device
+-- properties
+--
+-- = Description
+--
+-- Note
+--
+-- The value of @apiVersion@ /may/ be different than the version returned
+-- by 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion'; either
+-- higher or lower. In such cases, the application /must/ not use
+-- functionality that exceeds the version of Vulkan associated with a given
+-- object. The @pApiVersion@ parameter returned by
+-- 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion' is the
+-- version associated with a 'Vulkan.Core10.Handles.Instance' and its
+-- children, except for a 'Vulkan.Core10.Handles.PhysicalDevice' and its
+-- children. 'PhysicalDeviceProperties'::@apiVersion@ is the version
+-- associated with a 'Vulkan.Core10.Handles.PhysicalDevice' and its
+-- children.
+--
+-- The @vendorID@ and @deviceID@ fields are provided to allow applications
+-- to adapt to device characteristics that are not adequately exposed by
+-- other Vulkan queries.
+--
+-- Note
+--
+-- These /may/ include performance profiles, hardware errata, or other
+-- characteristics.
+--
+-- The /vendor/ identified by @vendorID@ is the entity responsible for the
+-- most salient characteristics of the underlying implementation of the
+-- 'Vulkan.Core10.Handles.PhysicalDevice' being queried.
+--
+-- Note
+--
+-- For example, in the case of a discrete GPU implementation, this /should/
+-- be the GPU chipset vendor. In the case of a hardware accelerator
+-- integrated into a system-on-chip (SoC), this /should/ be the supplier of
+-- the silicon IP used to create the accelerator.
+--
+-- If the vendor has a
+-- <https://pcisig.com/membership/member-companies PCI vendor ID>, the low
+-- 16 bits of @vendorID@ /must/ contain that PCI vendor ID, and the
+-- remaining bits /must/ be set to zero. Otherwise, the value returned
+-- /must/ be a valid Khronos vendor ID, obtained as described in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vulkan-styleguide Vulkan Documentation and Extensions: Procedures and Conventions>
+-- document in the section “Registering a Vendor ID with Khronos”. Khronos
+-- vendor IDs are allocated starting at 0x10000, to distinguish them from
+-- the PCI vendor ID namespace. Khronos vendor IDs are symbolically defined
+-- in the 'Vulkan.Core10.Enums.VendorId.VendorId' type.
+--
+-- The vendor is also responsible for the value returned in @deviceID@. If
+-- the implementation is driven primarily by a
+-- <https://pcisig.com/ PCI device> with a
+-- <https://pcisig.com/ PCI device ID>, the low 16 bits of @deviceID@
+-- /must/ contain that PCI device ID, and the remaining bits /must/ be set
+-- to zero. Otherwise, the choice of what values to return /may/ be
+-- dictated by operating system or platform policies - but /should/
+-- uniquely identify both the device version and any major configuration
+-- options (for example, core count in the case of multicore devices).
+--
+-- Note
+--
+-- The same device ID /should/ be used for all physical implementations of
+-- that device version and configuration. For example, all uses of a
+-- specific silicon IP GPU version and configuration /should/ use the same
+-- device ID, even if those uses occur in different SoCs.
+--
+-- = See Also
+--
+-- 'PhysicalDeviceLimits',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- 'PhysicalDeviceSparseProperties',
+-- 'Vulkan.Core10.Enums.PhysicalDeviceType.PhysicalDeviceType',
+-- 'getPhysicalDeviceProperties'
+data PhysicalDeviceProperties = PhysicalDeviceProperties
+  { -- | @apiVersion@ is the version of Vulkan supported by the device, encoded
+    -- as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.
+    apiVersion :: Word32
+  , -- | @driverVersion@ is the vendor-specified version of the driver.
+    driverVersion :: Word32
+  , -- | @vendorID@ is a unique identifier for the /vendor/ (see below) of the
+    -- physical device.
+    vendorID :: Word32
+  , -- | @deviceID@ is a unique identifier for the physical device among devices
+    -- available from the vendor.
+    deviceID :: Word32
+  , -- | @deviceType@ is a
+    -- 'Vulkan.Core10.Enums.PhysicalDeviceType.PhysicalDeviceType' specifying
+    -- the type of device.
+    deviceType :: PhysicalDeviceType
+  , -- | @deviceName@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_PHYSICAL_DEVICE_NAME_SIZE' @char@
+    -- containing a null-terminated UTF-8 string which is the name of the
+    -- device.
+    deviceName :: ByteString
+  , -- | @pipelineCacheUUID@ is an array of
+    -- 'Vulkan.Core10.APIConstants.UUID_SIZE' @uint8_t@ values representing a
+    -- universally unique identifier for the device.
+    pipelineCacheUUID :: ByteString
+  , -- | @limits@ is the 'PhysicalDeviceLimits' structure specifying
+    -- device-specific limits of the physical device. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits Limits>
+    -- for details.
+    limits :: PhysicalDeviceLimits
+  , -- | @sparseProperties@ is the 'PhysicalDeviceSparseProperties' structure
+    -- specifying various sparse related properties of the physical device. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-physicalprops Sparse Properties>
+    -- for details.
+    sparseProperties :: PhysicalDeviceSparseProperties
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceProperties
+
+instance ToCStruct PhysicalDeviceProperties where
+  withCStruct x f = allocaBytesAligned 824 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceProperties{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (apiVersion)
+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (driverVersion)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (vendorID)
+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (deviceID)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PhysicalDeviceType)) (deviceType)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))) (deviceName)
+    lift $ pokeFixedLengthByteString ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8))) (pipelineCacheUUID)
+    ContT $ pokeCStruct ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits)) (limits) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties)) (sparseProperties) . ($ ())
+    lift $ f
+  cStructSize = 824
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PhysicalDeviceType)) (zero)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))) (mempty)
+    lift $ pokeFixedLengthByteString ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
+    ContT $ pokeCStruct ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct PhysicalDeviceProperties where
+  peekCStruct p = do
+    apiVersion <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    driverVersion <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    vendorID <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    deviceID <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    deviceType <- peek @PhysicalDeviceType ((p `plusPtr` 16 :: Ptr PhysicalDeviceType))
+    deviceName <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))))
+    pipelineCacheUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8)))
+    limits <- peekCStruct @PhysicalDeviceLimits ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits))
+    sparseProperties <- peekCStruct @PhysicalDeviceSparseProperties ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties))
+    pure $ PhysicalDeviceProperties
+             apiVersion driverVersion vendorID deviceID deviceType deviceName pipelineCacheUUID limits sparseProperties
+
+instance Zero PhysicalDeviceProperties where
+  zero = PhysicalDeviceProperties
+           zero
+           zero
+           zero
+           zero
+           zero
+           mempty
+           mempty
+           zero
+           zero
+
+
+-- | VkApplicationInfo - Structure specifying application info
+--
+-- = Description
+--
+-- Vulkan 1.0 implementations were required to return
+-- 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER' if @apiVersion@
+-- was larger than 1.0. Implementations that support Vulkan 1.1 or later
+-- /must/ not return 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER'
+-- for any value of @apiVersion@.
+--
+-- Note
+--
+-- Because Vulkan 1.0 implementations /may/ fail with
+-- 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER', applications
+-- /should/ determine the version of Vulkan available before calling
+-- 'createInstance'. If the 'getInstanceProcAddr' returns @NULL@ for
+-- 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion', it is a
+-- Vulkan 1.0 implementation. Otherwise, the application /can/ call
+-- 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion' to
+-- determine the version of Vulkan.
+--
+-- As long as the instance supports at least Vulkan 1.1, an application
+-- /can/ use different versions of Vulkan with an instance than it does
+-- with a device or physical device.
+--
+-- Note
+--
+-- The Khronos validation layers will treat @apiVersion@ as the highest API
+-- version the application targets, and will validate API usage against the
+-- minimum of that version and the implementation version (instance or
+-- device, depending on context). If an application tries to use
+-- functionality from a greater version than this, a validation error will
+-- be triggered.
+--
+-- For example, if the instance supports Vulkan 1.1 and three physical
+-- devices support Vulkan 1.0, Vulkan 1.1, and Vulkan 1.2, respectively,
+-- and if the application sets @apiVersion@ to 1.2, the application /can/
+-- use the following versions of Vulkan:
+--
+-- -   Vulkan 1.0 /can/ be used with the instance and with all physical
+--     devices.
+--
+-- -   Vulkan 1.1 /can/ be used with the instance and with the physical
+--     devices that support Vulkan 1.1 and Vulkan 1.2.
+--
+-- -   Vulkan 1.2 /can/ be used with the physical device that supports
+--     Vulkan 1.2.
+--
+-- If we modify the above example so that the application sets @apiVersion@
+-- to 1.1, then the application /must/ not use Vulkan 1.2 functionality on
+-- the physical device that supports Vulkan 1.2.
+--
+-- Implicit layers /must/ be disabled if they do not support a version at
+-- least as high as @apiVersion@. See the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#LoaderAndLayerInterface Vulkan Loader Specification and Architecture Overview>
+-- document for additional information.
+--
+-- Note
+--
+-- Providing a @NULL@ 'InstanceCreateInfo'::@pApplicationInfo@ or providing
+-- an @apiVersion@ of 0 is equivalent to providing an @apiVersion@ of
+-- @VK_MAKE_VERSION(1,0,0)@.
+--
+-- == Valid Usage
+--
+-- -   If @apiVersion@ is not @0@, then it /must/ be greater or equal to
+--     'Vulkan.Core10.API_VERSION_1_0'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_APPLICATION_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   If @pApplicationName@ is not @NULL@, @pApplicationName@ /must/ be a
+--     null-terminated UTF-8 string
+--
+-- -   If @pEngineName@ is not @NULL@, @pEngineName@ /must/ be a
+--     null-terminated UTF-8 string
+--
+-- = See Also
+--
+-- 'InstanceCreateInfo', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ApplicationInfo = ApplicationInfo
+  { -- | @pApplicationName@ is @NULL@ or is a pointer to a null-terminated UTF-8
+    -- string containing the name of the application.
+    applicationName :: Maybe ByteString
+  , -- | @applicationVersion@ is an unsigned integer variable containing the
+    -- developer-supplied version number of the application.
+    applicationVersion :: Word32
+  , -- | @pEngineName@ is @NULL@ or is a pointer to a null-terminated UTF-8
+    -- string containing the name of the engine (if any) used to create the
+    -- application.
+    engineName :: Maybe ByteString
+  , -- | @engineVersion@ is an unsigned integer variable containing the
+    -- developer-supplied version number of the engine used to create the
+    -- application.
+    engineVersion :: Word32
+  , -- | @apiVersion@ /must/ be the highest version of Vulkan that the
+    -- application is designed to use, encoded as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.
+    -- The patch version number specified in @apiVersion@ is ignored when
+    -- creating an instance object. Only the major and minor versions of the
+    -- instance /must/ match those requested in @apiVersion@.
+    apiVersion :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show ApplicationInfo
+
+instance ToCStruct ApplicationInfo where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ApplicationInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_APPLICATION_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pApplicationName'' <- case (applicationName) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ useAsCString (j)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pApplicationName''
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (applicationVersion)
+    pEngineName'' <- case (engineName) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ useAsCString (j)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pEngineName''
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (engineVersion)
+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (apiVersion)
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_APPLICATION_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct ApplicationInfo where
+  peekCStruct p = do
+    pApplicationName <- peek @(Ptr CChar) ((p `plusPtr` 16 :: Ptr (Ptr CChar)))
+    pApplicationName' <- maybePeek (\j -> packCString  (j)) pApplicationName
+    applicationVersion <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pEngineName <- peek @(Ptr CChar) ((p `plusPtr` 32 :: Ptr (Ptr CChar)))
+    pEngineName' <- maybePeek (\j -> packCString  (j)) pEngineName
+    engineVersion <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    apiVersion <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
+    pure $ ApplicationInfo
+             pApplicationName' applicationVersion pEngineName' engineVersion apiVersion
+
+instance Zero ApplicationInfo where
+  zero = ApplicationInfo
+           Nothing
+           zero
+           Nothing
+           zero
+           zero
+
+
+-- | VkInstanceCreateInfo - Structure specifying parameters of a newly
+-- created instance
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INSTANCE_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_EXT_debug_report.DebugReportCallbackCreateInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCreateInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_validation_features.ValidationFeaturesEXT',
+--     or 'Vulkan.Extensions.VK_EXT_validation_flags.ValidationFlagsEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @pApplicationInfo@ is not @NULL@, @pApplicationInfo@ /must/ be a
+--     valid pointer to a valid 'ApplicationInfo' structure
+--
+-- -   If @enabledLayerCount@ is not @0@, @ppEnabledLayerNames@ /must/ be a
+--     valid pointer to an array of @enabledLayerCount@ null-terminated
+--     UTF-8 strings
+--
+-- -   If @enabledExtensionCount@ is not @0@, @ppEnabledExtensionNames@
+--     /must/ be a valid pointer to an array of @enabledExtensionCount@
+--     null-terminated UTF-8 strings
+--
+-- = See Also
+--
+-- 'ApplicationInfo',
+-- 'Vulkan.Core10.Enums.InstanceCreateFlags.InstanceCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createInstance'
+data InstanceCreateInfo (es :: [Type]) = InstanceCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: InstanceCreateFlags
+  , -- | @pApplicationInfo@ is @NULL@ or a pointer to a 'ApplicationInfo'
+    -- structure. If not @NULL@, this information helps implementations
+    -- recognize behavior inherent to classes of applications.
+    -- 'ApplicationInfo' is defined in detail below.
+    applicationInfo :: Maybe ApplicationInfo
+  , -- | @ppEnabledLayerNames@ is a pointer to an array of @enabledLayerCount@
+    -- null-terminated UTF-8 strings containing the names of layers to enable
+    -- for the created instance. The layers are loaded in the order they are
+    -- listed in this array, with the first array element being the closest to
+    -- the application, and the last array element being the closest to the
+    -- driver. See the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers>
+    -- section for further details.
+    enabledLayerNames :: Vector ByteString
+  , -- | @ppEnabledExtensionNames@ is a pointer to an array of
+    -- @enabledExtensionCount@ null-terminated UTF-8 strings containing the
+    -- names of extensions to enable.
+    enabledExtensionNames :: Vector ByteString
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (InstanceCreateInfo es)
+
+instance Extensible InstanceCreateInfo where
+  extensibleType = STRUCTURE_TYPE_INSTANCE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext InstanceCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends InstanceCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DebugUtilsMessengerCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @ValidationFeaturesEXT = Just f
+    | Just Refl <- eqT @e @ValidationFlagsEXT = Just f
+    | Just Refl <- eqT @e @DebugReportCallbackCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss InstanceCreateInfo es, PokeChain es) => ToCStruct (InstanceCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p InstanceCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr InstanceCreateFlags)) (flags)
+    pApplicationInfo'' <- case (applicationInfo) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ApplicationInfo))) pApplicationInfo''
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledLayerNames)) :: Word32))
+    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledLayerNames)) * 8) 8
+    Data.Vector.imapM_ (\i e -> do
+      ppEnabledLayerNames'' <- ContT $ useAsCString (e)
+      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (enabledLayerNames)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledExtensionNames)) :: Word32))
+    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledExtensionNames)) * 8) 8
+    Data.Vector.imapM_ (\i e -> do
+      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)
+      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (enabledExtensionNames)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8
+    Data.Vector.imapM_ (\i e -> do
+      ppEnabledLayerNames'' <- ContT $ useAsCString (e)
+      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')
+    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8
+    Data.Vector.imapM_ (\i e -> do
+      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)
+      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')
+    lift $ f
+
+instance (Extendss InstanceCreateInfo es, PeekChain es) => FromCStruct (InstanceCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @InstanceCreateFlags ((p `plusPtr` 16 :: Ptr InstanceCreateFlags))
+    pApplicationInfo <- peek @(Ptr ApplicationInfo) ((p `plusPtr` 24 :: Ptr (Ptr ApplicationInfo)))
+    pApplicationInfo' <- maybePeek (\j -> peekCStruct @ApplicationInfo (j)) pApplicationInfo
+    enabledLayerCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    ppEnabledLayerNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar))))
+    ppEnabledLayerNames' <- generateM (fromIntegral enabledLayerCount) (\i -> packCString =<< peek ((ppEnabledLayerNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))
+    enabledExtensionCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    ppEnabledExtensionNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar))))
+    ppEnabledExtensionNames' <- generateM (fromIntegral enabledExtensionCount) (\i -> packCString =<< peek ((ppEnabledExtensionNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))
+    pure $ InstanceCreateInfo
+             next flags pApplicationInfo' ppEnabledLayerNames' ppEnabledExtensionNames'
+
+instance es ~ '[] => Zero (InstanceCreateInfo es) where
+  zero = InstanceCreateInfo
+           ()
+           zero
+           Nothing
+           mempty
+           mempty
+
+
+-- | VkQueueFamilyProperties - Structure providing information about a queue
+-- family
+--
+-- = Description
+--
+-- The value returned in @minImageTransferGranularity@ has a unit of
+-- compressed texel blocks for images having a block-compressed format, and
+-- a unit of texels otherwise.
+--
+-- Possible values of @minImageTransferGranularity@ are:
+--
+-- -   (0,0,0) which indicates that only whole mip levels /must/ be
+--     transferred using the image transfer operations on the corresponding
+--     queues. In this case, the following restrictions apply to all offset
+--     and extent parameters of image transfer operations:
+--
+--     -   The @x@, @y@, and @z@ members of a
+--         'Vulkan.Core10.SharedTypes.Offset3D' parameter /must/ always be
+--         zero.
+--
+--     -   The @width@, @height@, and @depth@ members of a
+--         'Vulkan.Core10.SharedTypes.Extent3D' parameter /must/ always
+--         match the width, height, and depth of the image subresource
+--         corresponding to the parameter, respectively.
+--
+-- -   (Ax, Ay, Az) where Ax, Ay, and Az are all integer powers of two. In
+--     this case the following restrictions apply to all image transfer
+--     operations:
+--
+--     -   @x@, @y@, and @z@ of a 'Vulkan.Core10.SharedTypes.Offset3D'
+--         parameter /must/ be integer multiples of Ax, Ay, and Az,
+--         respectively.
+--
+--     -   @width@ of a 'Vulkan.Core10.SharedTypes.Extent3D' parameter
+--         /must/ be an integer multiple of Ax, or else @x@ + @width@
+--         /must/ equal the width of the image subresource corresponding to
+--         the parameter.
+--
+--     -   @height@ of a 'Vulkan.Core10.SharedTypes.Extent3D' parameter
+--         /must/ be an integer multiple of Ay, or else @y@ + @height@
+--         /must/ equal the height of the image subresource corresponding
+--         to the parameter.
+--
+--     -   @depth@ of a 'Vulkan.Core10.SharedTypes.Extent3D' parameter
+--         /must/ be an integer multiple of Az, or else @z@ + @depth@
+--         /must/ equal the depth of the image subresource corresponding to
+--         the parameter.
+--
+--     -   If the format of the image corresponding to the parameters is
+--         one of the block-compressed formats then for the purposes of the
+--         above calculations the granularity /must/ be scaled up by the
+--         compressed texel block dimensions.
+--
+-- Queues supporting graphics and\/or compute operations /must/ report
+-- (1,1,1) in @minImageTransferGranularity@, meaning that there are no
+-- additional restrictions on the granularity of image transfer operations
+-- for these queues. Other queues supporting image transfer operations are
+-- only /required/ to support whole mip level transfers, thus
+-- @minImageTransferGranularity@ for queues belonging to such queue
+-- families /may/ be (0,0,0).
+--
+-- The
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device Device Memory>
+-- section describes memory properties queried from the physical device.
+--
+-- For physical device feature queries see the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features Features>
+-- chapter.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.Extent3D',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.QueueFamilyProperties2',
+-- 'Vulkan.Core10.Enums.QueueFlagBits.QueueFlags',
+-- 'getPhysicalDeviceQueueFamilyProperties'
+data QueueFamilyProperties = QueueFamilyProperties
+  { -- | @queueFlags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QueueFlagBits' indicating
+    -- capabilities of the queues in this queue family.
+    queueFlags :: QueueFlags
+  , -- | @queueCount@ is the unsigned integer count of queues in this queue
+    -- family. Each queue family /must/ support at least one queue.
+    queueCount :: Word32
+  , -- | @timestampValidBits@ is the unsigned integer count of meaningful bits in
+    -- the timestamps written via
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp'. The valid range
+    -- for the count is 36..64 bits, or a value of 0, indicating no support for
+    -- timestamps. Bits outside the valid range are guaranteed to be zeros.
+    timestampValidBits :: Word32
+  , -- | @minImageTransferGranularity@ is the minimum granularity supported for
+    -- image transfer operations on the queues in this queue family.
+    minImageTransferGranularity :: Extent3D
+  }
+  deriving (Typeable)
+deriving instance Show QueueFamilyProperties
+
+instance ToCStruct QueueFamilyProperties where
+  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p QueueFamilyProperties{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr QueueFlags)) (queueFlags)
+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (queueCount)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (timestampValidBits)
+    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Extent3D)) (minImageTransferGranularity) . ($ ())
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct QueueFamilyProperties where
+  peekCStruct p = do
+    queueFlags <- peek @QueueFlags ((p `plusPtr` 0 :: Ptr QueueFlags))
+    queueCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    timestampValidBits <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    minImageTransferGranularity <- peekCStruct @Extent3D ((p `plusPtr` 12 :: Ptr Extent3D))
+    pure $ QueueFamilyProperties
+             queueFlags queueCount timestampValidBits minImageTransferGranularity
+
+instance Zero QueueFamilyProperties where
+  zero = QueueFamilyProperties
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceMemoryProperties - Structure specifying physical device
+-- memory properties
+--
+-- = Description
+--
+-- The 'PhysicalDeviceMemoryProperties' structure describes a number of
+-- /memory heaps/ as well as a number of /memory types/ that /can/ be used
+-- to access memory allocated in those heaps. Each heap describes a memory
+-- resource of a particular size, and each memory type describes a set of
+-- memory properties (e.g. host cached vs uncached) that /can/ be used with
+-- a given memory heap. Allocations using a particular memory type will
+-- consume resources from the heap indicated by that memory type’s heap
+-- index. More than one memory type /may/ share each heap, and the heaps
+-- and memory types provide a mechanism to advertise an accurate size of
+-- the physical memory resources while allowing the memory to be used with
+-- a variety of different properties.
+--
+-- The number of memory heaps is given by @memoryHeapCount@ and is less
+-- than or equal to 'Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS'. Each
+-- heap is described by an element of the @memoryHeaps@ array as a
+-- 'MemoryHeap' structure. The number of memory types available across all
+-- memory heaps is given by @memoryTypeCount@ and is less than or equal to
+-- 'Vulkan.Core10.APIConstants.MAX_MEMORY_TYPES'. Each memory type is
+-- described by an element of the @memoryTypes@ array as a 'MemoryType'
+-- structure.
+--
+-- At least one heap /must/ include
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_DEVICE_LOCAL_BIT' in
+-- 'MemoryHeap'::@flags@. If there are multiple heaps that all have similar
+-- performance characteristics, they /may/ all include
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_DEVICE_LOCAL_BIT'.
+-- In a unified memory architecture (UMA) system there is often only a
+-- single memory heap which is considered to be equally “local” to the host
+-- and to the device, and such an implementation /must/ advertise the heap
+-- as device-local.
+--
+-- Each memory type returned by 'getPhysicalDeviceMemoryProperties' /must/
+-- have its @propertyFlags@ set to one of the following values:
+--
+-- -   0
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
+--
+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--     |
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
+--
+-- There /must/ be at least one memory type with both the
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+-- and
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+-- bits set in its @propertyFlags@. There /must/ be at least one memory
+-- type with the
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+-- bit set in its @propertyFlags@. If the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceCoherentMemory deviceCoherentMemory>
+-- feature is enabled, there /must/ be at least one memory type with the
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+-- bit set in its @propertyFlags@.
+--
+-- For each pair of elements __X__ and __Y__ returned in @memoryTypes@,
+-- __X__ /must/ be placed at a lower index position than __Y__ if:
+--
+-- -   the set of bit flags returned in the @propertyFlags@ member of __X__
+--     is a strict subset of the set of bit flags returned in the
+--     @propertyFlags@ member of __Y__; or
+--
+-- -   the @propertyFlags@ members of __X__ and __Y__ are equal, and __X__
+--     belongs to a memory heap with greater performance (as determined in
+--     an implementation-specific manner) ; or
+--
+-- -   the @propertyFlags@ members of __Y__ includes
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--     or
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'
+--     and __X__ does not
+--
+-- Note
+--
+-- There is no ordering requirement between __X__ and __Y__ elements for
+-- the case their @propertyFlags@ members are not in a subset relation.
+-- That potentially allows more than one possible way to order the same set
+-- of memory types. Notice that the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-bitmask-list list of all allowed memory property flag combinations>
+-- is written in a valid order. But if instead
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'
+-- was before
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+-- |
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT',
+-- the list would still be in a valid order.
+--
+-- There may be a performance penalty for using device coherent or uncached
+-- device memory types, and using these accidentally is undesirable. In
+-- order to avoid this, memory types with these properties always appear at
+-- the end of the list; but are subject to the same rules otherwise.
+--
+-- This ordering requirement enables applications to use a simple search
+-- loop to select the desired memory type along the lines of:
+--
+-- > // Find a memory in `memoryTypeBitsRequirement` that includes all of `requiredProperties`
+-- > int32_t findProperties(const VkPhysicalDeviceMemoryProperties* pMemoryProperties,
+-- >                        uint32_t memoryTypeBitsRequirement,
+-- >                        VkMemoryPropertyFlags requiredProperties) {
+-- >     const uint32_t memoryCount = pMemoryProperties->memoryTypeCount;
+-- >     for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) {
+-- >         const uint32_t memoryTypeBits = (1 << memoryIndex);
+-- >         const bool isRequiredMemoryType = memoryTypeBitsRequirement & memoryTypeBits;
+-- >
+-- >         const VkMemoryPropertyFlags properties =
+-- >             pMemoryProperties->memoryTypes[memoryIndex].propertyFlags;
+-- >         const bool hasRequiredProperties =
+-- >             (properties & requiredProperties) == requiredProperties;
+-- >
+-- >         if (isRequiredMemoryType && hasRequiredProperties)
+-- >             return static_cast<int32_t>(memoryIndex);
+-- >     }
+-- >
+-- >     // failed to find memory type
+-- >     return -1;
+-- > }
+-- >
+-- > // Try to find an optimal memory type, or if it does not exist try fallback memory type
+-- > // `device` is the VkDevice
+-- > // `image` is the VkImage that requires memory to be bound
+-- > // `memoryProperties` properties as returned by vkGetPhysicalDeviceMemoryProperties
+-- > // `requiredProperties` are the property flags that must be present
+-- > // `optimalProperties` are the property flags that are preferred by the application
+-- > VkMemoryRequirements memoryRequirements;
+-- > vkGetImageMemoryRequirements(device, image, &memoryRequirements);
+-- > int32_t memoryType =
+-- >     findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, optimalProperties);
+-- > if (memoryType == -1) // not found; try fallback properties
+-- >     memoryType =
+-- >         findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, requiredProperties);
+--
+-- = See Also
+--
+-- 'MemoryHeap', 'MemoryType',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceMemoryProperties2',
+-- 'getPhysicalDeviceMemoryProperties'
+data PhysicalDeviceMemoryProperties = PhysicalDeviceMemoryProperties
+  { -- | @memoryTypeCount@ is the number of valid elements in the @memoryTypes@
+    -- array.
+    memoryTypeCount :: Word32
+  , -- | @memoryTypes@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_MEMORY_TYPES' 'MemoryType' structures
+    -- describing the /memory types/ that /can/ be used to access memory
+    -- allocated from the heaps specified by @memoryHeaps@.
+    memoryTypes :: Vector MemoryType
+  , -- | @memoryHeapCount@ is the number of valid elements in the @memoryHeaps@
+    -- array.
+    memoryHeapCount :: Word32
+  , -- | @memoryHeaps@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS' 'MemoryHeap' structures
+    -- describing the /memory heaps/ from which memory /can/ be allocated.
+    memoryHeaps :: Vector MemoryHeap
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceMemoryProperties
+
+instance ToCStruct PhysicalDeviceMemoryProperties where
+  withCStruct x f = allocaBytesAligned 520 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMemoryProperties{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (memoryTypeCount)
+    lift $ unless ((Data.Vector.length $ (memoryTypes)) <= MAX_MEMORY_TYPES) $
+      throwIO $ IOError Nothing InvalidArgument "" "memoryTypes is too long, a maximum of MAX_MEMORY_TYPES elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `plusPtr` (8 * (i)) :: Ptr MemoryType) (e) . ($ ())) (memoryTypes)
+    lift $ poke ((p `plusPtr` 260 :: Ptr Word32)) (memoryHeapCount)
+    lift $ unless ((Data.Vector.length $ (memoryHeaps)) <= MAX_MEMORY_HEAPS) $
+      throwIO $ IOError Nothing InvalidArgument "" "memoryHeaps is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `plusPtr` (16 * (i)) :: Ptr MemoryHeap) (e) . ($ ())) (memoryHeaps)
+    lift $ f
+  cStructSize = 520
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    lift $ unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_TYPES) $
+      throwIO $ IOError Nothing InvalidArgument "" "memoryTypes is too long, a maximum of MAX_MEMORY_TYPES elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `plusPtr` (8 * (i)) :: Ptr MemoryType) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 260 :: Ptr Word32)) (zero)
+    lift $ unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_HEAPS) $
+      throwIO $ IOError Nothing InvalidArgument "" "memoryHeaps is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `plusPtr` (16 * (i)) :: Ptr MemoryHeap) (e) . ($ ())) (mempty)
+    lift $ f
+
+instance FromCStruct PhysicalDeviceMemoryProperties where
+  peekCStruct p = do
+    memoryTypeCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    memoryTypes <- generateM (MAX_MEMORY_TYPES) (\i -> peekCStruct @MemoryType (((lowerArrayPtr @MemoryType ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `advancePtrBytes` (8 * (i)) :: Ptr MemoryType)))
+    memoryHeapCount <- peek @Word32 ((p `plusPtr` 260 :: Ptr Word32))
+    memoryHeaps <- generateM (MAX_MEMORY_HEAPS) (\i -> peekCStruct @MemoryHeap (((lowerArrayPtr @MemoryHeap ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `advancePtrBytes` (16 * (i)) :: Ptr MemoryHeap)))
+    pure $ PhysicalDeviceMemoryProperties
+             memoryTypeCount memoryTypes memoryHeapCount memoryHeaps
+
+instance Zero PhysicalDeviceMemoryProperties where
+  zero = PhysicalDeviceMemoryProperties
+           zero
+           mempty
+           zero
+           mempty
+
+
+-- | VkMemoryType - Structure specifying memory type
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MemoryPropertyFlags',
+-- 'PhysicalDeviceMemoryProperties'
+data MemoryType = MemoryType
+  { -- | @propertyFlags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MemoryPropertyFlagBits' of
+    -- properties for this memory type.
+    propertyFlags :: MemoryPropertyFlags
+  , -- | @heapIndex@ describes which memory heap this memory type corresponds to,
+    -- and /must/ be less than @memoryHeapCount@ from the
+    -- 'PhysicalDeviceMemoryProperties' structure.
+    heapIndex :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show MemoryType
+
+instance ToCStruct MemoryType where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryType{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr MemoryPropertyFlags)) (propertyFlags)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (heapIndex)
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct MemoryType where
+  peekCStruct p = do
+    propertyFlags <- peek @MemoryPropertyFlags ((p `plusPtr` 0 :: Ptr MemoryPropertyFlags))
+    heapIndex <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    pure $ MemoryType
+             propertyFlags heapIndex
+
+instance Storable MemoryType where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryType where
+  zero = MemoryType
+           zero
+           zero
+
+
+-- | VkMemoryHeap - Structure specifying a memory heap
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MemoryHeapFlags',
+-- 'PhysicalDeviceMemoryProperties'
+data MemoryHeap = MemoryHeap
+  { -- | @size@ is the total memory size in bytes in the heap.
+    size :: DeviceSize
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MemoryHeapFlagBits' specifying
+    -- attribute flags for the heap.
+    flags :: MemoryHeapFlags
+  }
+  deriving (Typeable)
+deriving instance Show MemoryHeap
+
+instance ToCStruct MemoryHeap where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryHeap{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (size)
+    poke ((p `plusPtr` 8 :: Ptr MemoryHeapFlags)) (flags)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct MemoryHeap where
+  peekCStruct p = do
+    size <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
+    flags <- peek @MemoryHeapFlags ((p `plusPtr` 8 :: Ptr MemoryHeapFlags))
+    pure $ MemoryHeap
+             size flags
+
+instance Storable MemoryHeap where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryHeap where
+  zero = MemoryHeap
+           zero
+           zero
+
+
+-- | VkFormatProperties - Structure specifying image format properties
+--
+-- = Description
+--
+-- Note
+--
+-- If no format feature flags are supported, the format itself is not
+-- supported, and images of that format cannot be created.
+--
+-- If @format@ is a block-compressed format, then @bufferFeatures@ /must/
+-- not support any features for the format.
+--
+-- If @format@ is not a multi-plane format then @linearTilingFeatures@ and
+-- @optimalTilingFeatures@ /must/ not contain
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DISJOINT_BIT'.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlags',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.FormatProperties2',
+-- 'getPhysicalDeviceFormatProperties'
+data FormatProperties = FormatProperties
+  { -- | @linearTilingFeatures@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'
+    -- specifying features supported by images created with a @tiling@
+    -- parameter of 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'.
+    linearTilingFeatures :: FormatFeatureFlags
+  , -- | @optimalTilingFeatures@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'
+    -- specifying features supported by images created with a @tiling@
+    -- parameter of 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'.
+    optimalTilingFeatures :: FormatFeatureFlags
+  , -- | @bufferFeatures@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'
+    -- specifying features supported by buffers.
+    bufferFeatures :: FormatFeatureFlags
+  }
+  deriving (Typeable)
+deriving instance Show FormatProperties
+
+instance ToCStruct FormatProperties where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p FormatProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr FormatFeatureFlags)) (linearTilingFeatures)
+    poke ((p `plusPtr` 4 :: Ptr FormatFeatureFlags)) (optimalTilingFeatures)
+    poke ((p `plusPtr` 8 :: Ptr FormatFeatureFlags)) (bufferFeatures)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct _ f = f
+
+instance FromCStruct FormatProperties where
+  peekCStruct p = do
+    linearTilingFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 0 :: Ptr FormatFeatureFlags))
+    optimalTilingFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 4 :: Ptr FormatFeatureFlags))
+    bufferFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 8 :: Ptr FormatFeatureFlags))
+    pure $ FormatProperties
+             linearTilingFeatures optimalTilingFeatures bufferFeatures
+
+instance Storable FormatProperties where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero FormatProperties where
+  zero = FormatProperties
+           zero
+           zero
+           zero
+
+
+-- | VkImageFormatProperties - Structure specifying an image format
+-- properties
+--
+-- = Members
+--
+-- -   @maxExtent@ are the maximum image dimensions. See the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extentperimagetype Allowed Extent Values>
+--     section below for how these values are constrained by @type@.
+--
+-- -   @maxMipLevels@ is the maximum number of mipmap levels.
+--     @maxMipLevels@ /must/ be equal to the number of levels in the
+--     complete mipmap chain based on the @maxExtent.width@,
+--     @maxExtent.height@, and @maxExtent.depth@, except when one of the
+--     following conditions is true, in which case it /may/ instead be @1@:
+--
+--     -   'getPhysicalDeviceImageFormatProperties'::@tiling@ was
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'
+--
+--     -   'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@tiling@
+--         was
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
+--
+--     -   the
+--         'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@
+--         chain included a
+--         'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'
+--         structure with a handle type included in the @handleTypes@
+--         member for which mipmap image support is not required
+--
+--     -   image @format@ is one of those listed in
+--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
+--
+--     -   @flags@ contains
+--         'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- -   @maxArrayLayers@ is the maximum number of array layers.
+--     @maxArrayLayers@ /must/ be no less than
+--     'PhysicalDeviceLimits'::@maxImageArrayLayers@, except when one of
+--     the following conditions is true, in which case it /may/ instead be
+--     @1@:
+--
+--     -   @tiling@ is
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'
+--
+--     -   @tiling@ is
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL' and
+--         @type@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
+--
+--     -   @format@ is one of those listed in
+--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
+--
+-- -   If @tiling@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--     then @maxArrayLayers@ /must/ not be 0.
+--
+-- -   @sampleCounts@ is a bitmask of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
+--     specifying all the supported sample counts for this image as
+--     described
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-supported-sample-counts below>.
+--
+-- -   @maxResourceSize@ is an upper bound on the total image size in
+--     bytes, inclusive of all image subresources. Implementations /may/
+--     have an address space limit on total size of a resource, which is
+--     advertised by this property. @maxResourceSize@ /must/ be at least
+--     231.
+--
+-- = Description
+--
+-- Note
+--
+-- There is no mechanism to query the size of an image before creating it,
+-- to compare that size against @maxResourceSize@. If an application
+-- attempts to create an image that exceeds this limit, the creation will
+-- fail and 'Vulkan.Core10.Image.createImage' will return
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'. While the
+-- advertised limit /must/ be at least 231, it /may/ not be possible to
+-- create an image that approaches that size, particularly for
+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'.
+--
+-- If the combination of parameters to
+-- 'getPhysicalDeviceImageFormatProperties' is not supported by the
+-- implementation for use in 'Vulkan.Core10.Image.createImage', then all
+-- members of 'ImageFormatProperties' will be filled with zero.
+--
+-- Note
+--
+-- Filling 'ImageFormatProperties' with zero for unsupported formats is an
+-- exception to the usual rule that output structures have undefined
+-- contents on error. This exception was unintentional, but is preserved
+-- for backwards compatibility.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.SharedTypes.Extent3D',
+-- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalImageFormatPropertiesNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags',
+-- 'getPhysicalDeviceImageFormatProperties'
+data ImageFormatProperties = ImageFormatProperties
+  { -- No documentation found for Nested "VkImageFormatProperties" "maxExtent"
+    maxExtent :: Extent3D
+  , -- No documentation found for Nested "VkImageFormatProperties" "maxMipLevels"
+    maxMipLevels :: Word32
+  , -- No documentation found for Nested "VkImageFormatProperties" "maxArrayLayers"
+    maxArrayLayers :: Word32
+  , -- No documentation found for Nested "VkImageFormatProperties" "sampleCounts"
+    sampleCounts :: SampleCountFlags
+  , -- No documentation found for Nested "VkImageFormatProperties" "maxResourceSize"
+    maxResourceSize :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show ImageFormatProperties
+
+instance ToCStruct ImageFormatProperties where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageFormatProperties{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent3D)) (maxExtent) . ($ ())
+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (maxMipLevels)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (maxArrayLayers)
+    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlags)) (sampleCounts)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (maxResourceSize)
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    lift $ f
+
+instance FromCStruct ImageFormatProperties where
+  peekCStruct p = do
+    maxExtent <- peekCStruct @Extent3D ((p `plusPtr` 0 :: Ptr Extent3D))
+    maxMipLevels <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    maxArrayLayers <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    sampleCounts <- peek @SampleCountFlags ((p `plusPtr` 20 :: Ptr SampleCountFlags))
+    maxResourceSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    pure $ ImageFormatProperties
+             maxExtent maxMipLevels maxArrayLayers sampleCounts maxResourceSize
+
+instance Zero ImageFormatProperties where
+  zero = ImageFormatProperties
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceFeatures - Structure describing the fine-grained
+-- features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceFeatures' structure describe the
+-- following features:
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Device.DeviceCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- 'getPhysicalDeviceFeatures'
+data PhysicalDeviceFeatures = PhysicalDeviceFeatures
+  { -- | @robustBufferAccess@ specifies that accesses to buffers are
+    -- bounds-checked against the range of the buffer descriptor (as determined
+    -- by 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo'::@range@,
+    -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo'::@range@, or the size of
+    -- the buffer). Out of bounds accesses /must/ not cause application
+    -- termination, and the effects of shader loads, stores, and atomics /must/
+    -- conform to an implementation-dependent behavior as described below.
+    --
+    -- -   A buffer access is considered to be out of bounds if any of the
+    --     following are true:
+    --
+    --     -   The pointer was formed by @OpImageTexelPointer@ and the
+    --         coordinate is less than zero or greater than or equal to the
+    --         number of whole elements in the bound range.
+    --
+    --     -   The pointer was not formed by @OpImageTexelPointer@ and the
+    --         object pointed to is not wholly contained within the bound
+    --         range. This includes accesses performed via /variable pointers/
+    --         where the buffer descriptor being accessed cannot be statically
+    --         determined. Uninitialized pointers and pointers equal to
+    --         @OpConstantNull@ are treated as pointing to a zero-sized object,
+    --         so all accesses through such pointers are considered to be out
+    --         of bounds. Buffer accesses through buffer device addresses are
+    --         not bounds-checked. If the
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-cooperativeMatrixRobustBufferAccess cooperativeMatrixRobustBufferAccess>
+    --         feature is not enabled, then accesses using
+    --         @OpCooperativeMatrixLoadNV@ and @OpCooperativeMatrixStoreNV@
+    --         /may/ not be bounds-checked.
+    --
+    --         Note
+    --
+    --         If a SPIR-V @OpLoad@ instruction loads a structure and the tail
+    --         end of the structure is out of bounds, then all members of the
+    --         structure are considered out of bounds even if the members at
+    --         the end are not statically used.
+    --
+    --     -   If
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    --         is not enabled and any buffer access is determined to be out of
+    --         bounds, then any other access of the same type (load, store, or
+    --         atomic) to the same buffer that accesses an address less than 16
+    --         bytes away from the out of bounds address /may/ also be
+    --         considered out of bounds.
+    --
+    --     -   If the access is a load that reads from the same memory
+    --         locations as a prior store in the same shader invocation, with
+    --         no other intervening accesses to the same memory locations in
+    --         that shader invocation, then the result of the load /may/ be the
+    --         value stored by the store instruction, even if the access is out
+    --         of bounds. If the load is @Volatile@, then an out of bounds load
+    --         /must/ return the appropriate out of bounds value.
+    --
+    -- -   Accesses to descriptors written with a
+    --     'Vulkan.Core10.APIConstants.NULL_HANDLE' resource or view are not
+    --     considered to be out of bounds. Instead, each type of descriptor
+    --     access defines a specific behavior for accesses to a null
+    --     descriptor.
+    --
+    -- -   Out-of-bounds buffer loads will return any of the following values:
+    --
+    --     -   If the access is to a uniform buffer and
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    --         is enabled, loads of offsets between the end of the descriptor
+    --         range and the end of the descriptor range rounded up to a
+    --         multiple of
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>
+    --         bytes /must/ return either zero values or the contents of the
+    --         memory at the offset being loaded. Loads of offsets past the
+    --         descriptor range rounded up to a multiple of
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>
+    --         bytes /must/ return zero values.
+    --
+    --     -   If the access is to a storage buffer and
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    --         is enabled, loads of offsets between the end of the descriptor
+    --         range and the end of the descriptor range rounded up to a
+    --         multiple of
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>
+    --         bytes /must/ return either zero values or the contents of the
+    --         memory at the offset being loaded. Loads of offsets past the
+    --         descriptor range rounded up to a multiple of
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>
+    --         bytes /must/ return zero values. Similarly, stores to addresses
+    --         between the end of the descriptor range and the end of the
+    --         descriptor range rounded up to a multiple of
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>
+    --         bytes /may/ be discarded.
+    --
+    --     -   Non-atomic accesses to storage buffers that are a multiple of 32
+    --         bits /may/ be decomposed into 32-bit accesses that are
+    --         individually bounds-checked.
+    --
+    --     -   If the access is to an index buffer and
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    --         is enabled, zero values /must/ be returned.
+    --
+    --     -   If the access is to a uniform texel buffer or storage texel
+    --         buffer and
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    --         is enabled, zero values /must/ be returned, and then
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-conversion-to-rgba Conversion to RGBA>
+    --         is applied based on the buffer view’s format.
+    --
+    --     -   Values from anywhere within the memory range(s) bound to the
+    --         buffer (possibly including bytes of memory past the end of the
+    --         buffer, up to the end of the bound range).
+    --
+    --     -   Zero values, or (0,0,0,x) vectors for vector reads where x is a
+    --         valid value represented in the type of the vector components and
+    --         /may/ be any of:
+    --
+    --         -   0, 1, or the maximum representable positive integer value,
+    --             for signed or unsigned integer components
+    --
+    --         -   0.0 or 1.0, for floating-point components
+    --
+    -- -   Out-of-bounds writes /may/ modify values within the memory range(s)
+    --     bound to the buffer, but /must/ not modify any other memory.
+    --
+    --     -   If
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    --         is enabled, out of bounds writes /must/ not modify any memory.
+    --
+    -- -   Out-of-bounds atomics /may/ modify values within the memory range(s)
+    --     bound to the buffer, but /must/ not modify any other memory, and
+    --     return an undefined value.
+    --
+    --     -   If
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    --         is enabled, out of bounds atomics /must/ not modify any memory,
+    --         and return an undefined value.
+    --
+    -- -   If
+    --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    --     is disabled, vertex input attributes are considered out of bounds if
+    --     the offset of the attribute in the bound vertex buffer range plus
+    --     the size of the attribute is greater than either:
+    --
+    --     -   @vertexBufferRangeSize@, if @bindingStride@ == 0; or
+    --
+    --     -   (@vertexBufferRangeSize@ - (@vertexBufferRangeSize@ %
+    --         @bindingStride@))
+    --
+    --     where @vertexBufferRangeSize@ is the byte size of the memory range
+    --     bound to the vertex buffer binding and @bindingStride@ is the byte
+    --     stride of the corresponding vertex input binding. Further, if any
+    --     vertex input attribute using a specific vertex input binding is out
+    --     of bounds, then all vertex input attributes using that vertex input
+    --     binding for that vertex shader invocation are considered out of
+    --     bounds.
+    --
+    --     -   If a vertex input attribute is out of bounds, it will be
+    --         assigned one of the following values:
+    --
+    --         -   Values from anywhere within the memory range(s) bound to the
+    --             buffer, converted according to the format of the attribute.
+    --
+    --         -   Zero values, format converted according to the format of the
+    --             attribute.
+    --
+    --         -   Zero values, or (0,0,0,x) vectors, as described above.
+    --
+    -- -   If
+    --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    --     is enabled, vertex input attributes are considered out of bounds if
+    --     the offset of the attribute in the bound vertex buffer range plus
+    --     the size of the attribute is greater than the byte size of the
+    --     memory range bound to the vertex buffer binding.
+    --
+    --     -   If a vertex input attribute is out of bounds, the
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction raw data>
+    --         extracted are zero values, and missing G, B, or A components are
+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction filled with (0,0,1)>.
+    --
+    -- -   If @robustBufferAccess@ is not enabled, applications /must/ not
+    --     perform out of bounds accesses.
+    robustBufferAccess :: Bool
+  , -- | @fullDrawIndexUint32@ specifies the full 32-bit range of indices is
+    -- supported for indexed draw calls when using a
+    -- 'Vulkan.Core10.Enums.IndexType.IndexType' of
+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32'.
+    -- @maxDrawIndexedIndexValue@ is the maximum index value that /may/ be used
+    -- (aside from the primitive restart index, which is always 232-1 when the
+    -- 'Vulkan.Core10.Enums.IndexType.IndexType' is
+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32'). If this feature is
+    -- supported, @maxDrawIndexedIndexValue@ /must/ be 232-1; otherwise it
+    -- /must/ be no smaller than 224-1. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxDrawIndexedIndexValue maxDrawIndexedIndexValue>.
+    fullDrawIndexUint32 :: Bool
+  , -- | @imageCubeArray@ specifies whether image views with a
+    -- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' of
+    -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' /can/ be
+    -- created, and that the corresponding @SampledCubeArray@ and
+    -- @ImageCubeArray@ SPIR-V capabilities /can/ be used in shader code.
+    imageCubeArray :: Bool
+  , -- | @independentBlend@ specifies whether the
+    -- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState' settings are
+    -- controlled independently per-attachment. If this feature is not enabled,
+    -- the 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState' settings
+    -- for all color attachments /must/ be identical. Otherwise, a different
+    -- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState' /can/ be
+    -- provided for each bound color attachment.
+    independentBlend :: Bool
+  , -- | @geometryShader@ specifies whether geometry shaders are supported. If
+    -- this feature is not enabled, the
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT' and
+    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+    -- enum values /must/ not be used. This also specifies whether shader
+    -- modules /can/ declare the @Geometry@ capability.
+    geometryShader :: Bool
+  , -- | @tessellationShader@ specifies whether tessellation control and
+    -- evaluation shaders are supported. If this feature is not enabled, the
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',
+    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',
+    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',
+    -- and
+    -- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO'
+    -- enum values /must/ not be used. This also specifies whether shader
+    -- modules /can/ declare the @Tessellation@ capability.
+    tessellationShader :: Bool
+  , -- | @sampleRateShading@ specifies whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-sampleshading Sample Shading>
+    -- and multisample interpolation are supported. If this feature is not
+    -- enabled, the @sampleShadingEnable@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo' structure
+    -- /must/ be set to 'Vulkan.Core10.BaseType.FALSE' and the
+    -- @minSampleShading@ member is ignored. This also specifies whether shader
+    -- modules /can/ declare the @SampleRateShading@ capability.
+    sampleRateShading :: Bool
+  , -- | @dualSrcBlend@ specifies whether blend operations which take two sources
+    -- are supported. If this feature is not enabled, the
+    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
+    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
+    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', and
+    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA' enum
+    -- values /must/ not be used as source or destination blending factors. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-dsb>.
+    dualSrcBlend :: Bool
+  , -- | @logicOp@ specifies whether logic operations are supported. If this
+    -- feature is not enabled, the @logicOpEnable@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo' structure
+    -- /must/ be set to 'Vulkan.Core10.BaseType.FALSE', and the @logicOp@
+    -- member is ignored.
+    logicOp :: Bool
+  , -- | @multiDrawIndirect@ specifies whether multiple draw indirect is
+    -- supported. If this feature is not enabled, the @drawCount@ parameter to
+    -- the 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' and
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect' commands
+    -- /must/ be 0 or 1. The @maxDrawIndirectCount@ member of the
+    -- 'PhysicalDeviceLimits' structure /must/ also be 1 if this feature is not
+    -- supported. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxDrawIndirectCount maxDrawIndirectCount>.
+    multiDrawIndirect :: Bool
+  , -- | @drawIndirectFirstInstance@ specifies whether indirect draw calls
+    -- support the @firstInstance@ parameter. If this feature is not enabled,
+    -- the @firstInstance@ member of all
+    -- 'Vulkan.Core10.OtherTypes.DrawIndirectCommand' and
+    -- 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures that
+    -- are provided to the
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' and
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect' commands
+    -- /must/ be 0.
+    drawIndirectFirstInstance :: Bool
+  , -- | @depthClamp@ specifies whether depth clamping is supported. If this
+    -- feature is not enabled, the @depthClampEnable@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' structure
+    -- /must/ be set to 'Vulkan.Core10.BaseType.FALSE'. Otherwise, setting
+    -- @depthClampEnable@ to 'Vulkan.Core10.BaseType.TRUE' will enable depth
+    -- clamping.
+    depthClamp :: Bool
+  , -- | @depthBiasClamp@ specifies whether depth bias clamping is supported. If
+    -- this feature is not enabled, the @depthBiasClamp@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' structure
+    -- /must/ be set to 0.0 unless the
+    -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS' dynamic
+    -- state is enabled, and the @depthBiasClamp@ parameter to
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBias' /must/ be set to
+    -- 0.0.
+    depthBiasClamp :: Bool
+  , -- | @fillModeNonSolid@ specifies whether point and wireframe fill modes are
+    -- supported. If this feature is not enabled, the
+    -- 'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_POINT' and
+    -- 'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_LINE' enum values /must/
+    -- not be used.
+    fillModeNonSolid :: Bool
+  , -- | @depthBounds@ specifies whether depth bounds tests are supported. If
+    -- this feature is not enabled, the @depthBoundsTestEnable@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' structure
+    -- /must/ be set to 'Vulkan.Core10.BaseType.FALSE'. When
+    -- @depthBoundsTestEnable@ is set to 'Vulkan.Core10.BaseType.FALSE', the
+    -- @minDepthBounds@ and @maxDepthBounds@ members of the
+    -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' structure
+    -- are ignored.
+    depthBounds :: Bool
+  , -- | @wideLines@ specifies whether lines with width other than 1.0 are
+    -- supported. If this feature is not enabled, the @lineWidth@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' structure
+    -- /must/ be set to 1.0 unless the
+    -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH' dynamic
+    -- state is enabled, and the @lineWidth@ parameter to
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' /must/ be set to
+    -- 1.0. When this feature is supported, the range and granularity of
+    -- supported line widths are indicated by the @lineWidthRange@ and
+    -- @lineWidthGranularity@ members of the 'PhysicalDeviceLimits' structure,
+    -- respectively.
+    wideLines :: Bool
+  , -- | @largePoints@ specifies whether points with size greater than 1.0 are
+    -- supported. If this feature is not enabled, only a point size of 1.0
+    -- written by a shader is supported. The range and granularity of supported
+    -- point sizes are indicated by the @pointSizeRange@ and
+    -- @pointSizeGranularity@ members of the 'PhysicalDeviceLimits' structure,
+    -- respectively.
+    largePoints :: Bool
+  , -- | @alphaToOne@ specifies whether the implementation is able to replace the
+    -- alpha value of the color fragment output from the fragment shader with
+    -- the maximum representable alpha value for fixed-point colors or 1.0 for
+    -- floating-point colors. If this feature is not enabled, then the
+    -- @alphaToOneEnable@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo' structure
+    -- /must/ be set to 'Vulkan.Core10.BaseType.FALSE'. Otherwise setting
+    -- @alphaToOneEnable@ to 'Vulkan.Core10.BaseType.TRUE' will enable
+    -- alpha-to-one behavior.
+    alphaToOne :: Bool
+  , -- | @multiViewport@ specifies whether more than one viewport is supported.
+    -- If this feature is not enabled:
+    --
+    -- -   The @viewportCount@ and @scissorCount@ members of the
+    --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' structure
+    --     /must/ be set to 1.
+    --
+    -- -   The @firstViewport@ and @viewportCount@ parameters to the
+    --     'Vulkan.Core10.CommandBufferBuilding.cmdSetViewport' command /must/
+    --     be set to 0 and 1, respectively.
+    --
+    -- -   The @firstScissor@ and @scissorCount@ parameters to the
+    --     'Vulkan.Core10.CommandBufferBuilding.cmdSetScissor' command /must/
+    --     be set to 0 and 1, respectively.
+    --
+    -- -   The @exclusiveScissorCount@ member of the
+    --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'
+    --     structure /must/ be set to 0 or 1.
+    --
+    -- -   The @firstExclusiveScissor@ and @exclusiveScissorCount@ parameters
+    --     to the
+    --     'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV'
+    --     command /must/ be set to 0 and 1, respectively.
+    multiViewport :: Bool
+  , -- | @samplerAnisotropy@ specifies whether anisotropic filtering is
+    -- supported. If this feature is not enabled, the @anisotropyEnable@ member
+    -- of the 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure /must/ be
+    -- 'Vulkan.Core10.BaseType.FALSE'.
+    samplerAnisotropy :: Bool
+  , -- | @textureCompressionETC2@ specifies whether all of the ETC2 and EAC
+    -- compressed texture formats are supported. If this feature is enabled,
+    -- then the
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
+    -- and
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+    -- features /must/ be supported in @optimalTilingFeatures@ for the
+    -- following formats:
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11_SNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11G11_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11G11_SNORM_BLOCK'
+    --
+    -- To query for additional properties, or if the feature is not enabled,
+    -- 'getPhysicalDeviceFormatProperties' and
+    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for
+    -- supported properties of individual formats as normal.
+    textureCompressionETC2 :: Bool
+  , -- | @textureCompressionASTC_LDR@ specifies whether all of the ASTC LDR
+    -- compressed texture formats are supported. If this feature is enabled,
+    -- then the
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
+    -- and
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+    -- features /must/ be supported in @optimalTilingFeatures@ for the
+    -- following formats:
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_SRGB_BLOCK'
+    --
+    -- To query for additional properties, or if the feature is not enabled,
+    -- 'getPhysicalDeviceFormatProperties' and
+    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for
+    -- supported properties of individual formats as normal.
+    textureCompressionASTC_LDR :: Bool
+  , -- | @textureCompressionBC@ specifies whether all of the BC compressed
+    -- texture formats are supported. If this feature is enabled, then the
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
+    -- and
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+    -- features /must/ be supported in @optimalTilingFeatures@ for the
+    -- following formats:
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGB_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGB_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGBA_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGBA_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC2_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC2_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC3_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC3_SRGB_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC4_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC4_SNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC5_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC5_SNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC6H_UFLOAT_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC6H_SFLOAT_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC7_UNORM_BLOCK'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC7_SRGB_BLOCK'
+    --
+    -- To query for additional properties, or if the feature is not enabled,
+    -- 'getPhysicalDeviceFormatProperties' and
+    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for
+    -- supported properties of individual formats as normal.
+    textureCompressionBC :: Bool
+  , -- | @occlusionQueryPrecise@ specifies whether occlusion queries returning
+    -- actual sample counts are supported. Occlusion queries are created in a
+    -- 'Vulkan.Core10.Handles.QueryPool' by specifying the @queryType@ of
+    -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' in the
+    -- 'Vulkan.Core10.Query.QueryPoolCreateInfo' structure which is passed to
+    -- 'Vulkan.Core10.Query.createQueryPool'. If this feature is enabled,
+    -- queries of this type /can/ enable
+    -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT' in
+    -- the @flags@ parameter to
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery'. If this feature is
+    -- not supported, the implementation supports only boolean occlusion
+    -- queries. When any samples are passed, boolean queries will return a
+    -- non-zero result value, otherwise a result value of zero is returned.
+    -- When this feature is enabled and
+    -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT' is
+    -- set, occlusion queries will report the actual number of samples passed.
+    occlusionQueryPrecise :: Bool
+  , -- | @pipelineStatisticsQuery@ specifies whether the pipeline statistics
+    -- queries are supported. If this feature is not enabled, queries of type
+    -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' /cannot/
+    -- be created, and none of the
+    -- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'
+    -- bits /can/ be set in the @pipelineStatistics@ member of the
+    -- 'Vulkan.Core10.Query.QueryPoolCreateInfo' structure.
+    pipelineStatisticsQuery :: Bool
+  , -- | @vertexPipelineStoresAndAtomics@ specifies whether storage buffers and
+    -- images support stores and atomic operations in the vertex, tessellation,
+    -- and geometry shader stages. If this feature is not enabled, all storage
+    -- image, storage texel buffers, and storage buffer variables used by these
+    -- stages in shader modules /must/ be decorated with the @NonWritable@
+    -- decoration (or the @readonly@ memory qualifier in GLSL).
+    vertexPipelineStoresAndAtomics :: Bool
+  , -- | @fragmentStoresAndAtomics@ specifies whether storage buffers and images
+    -- support stores and atomic operations in the fragment shader stage. If
+    -- this feature is not enabled, all storage image, storage texel buffers,
+    -- and storage buffer variables used by the fragment stage in shader
+    -- modules /must/ be decorated with the @NonWritable@ decoration (or the
+    -- @readonly@ memory qualifier in GLSL).
+    fragmentStoresAndAtomics :: Bool
+  , -- | @shaderTessellationAndGeometryPointSize@ specifies whether the
+    -- @PointSize@ built-in decoration is available in the tessellation
+    -- control, tessellation evaluation, and geometry shader stages. If this
+    -- feature is not enabled, members decorated with the @PointSize@ built-in
+    -- decoration /must/ not be read from or written to and all points written
+    -- from a tessellation or geometry shader will have a size of 1.0. This
+    -- also specifies whether shader modules /can/ declare the
+    -- @TessellationPointSize@ capability for tessellation control and
+    -- evaluation shaders, or if the shader modules /can/ declare the
+    -- @GeometryPointSize@ capability for geometry shaders. An implementation
+    -- supporting this feature /must/ also support one or both of the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellationShader>
+    -- or
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometryShader>
+    -- features.
+    shaderTessellationAndGeometryPointSize :: Bool
+  , -- | @shaderImageGatherExtended@ specifies whether the extended set of image
+    -- gather instructions are available in shader code. If this feature is not
+    -- enabled, the @OpImage@*@Gather@ instructions do not support the @Offset@
+    -- and @ConstOffsets@ operands. This also specifies whether shader modules
+    -- /can/ declare the @ImageGatherExtended@ capability.
+    shaderImageGatherExtended :: Bool
+  , -- | @shaderStorageImageExtendedFormats@ specifies whether all the “storage
+    -- image extended formats” below are supported; if this feature is
+    -- supported, then the
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_BIT'
+    -- /must/ be supported in @optimalTilingFeatures@ for the following
+    -- formats:
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SFLOAT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_B10G11R11_UFLOAT_PACK32'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_SFLOAT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_UNORM'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_A2B10G10R10_UNORM_PACK32'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_UNORM'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_UNORM'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_UNORM'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_SNORM'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SNORM'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_SNORM'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_SNORM'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_SNORM'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SINT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_SINT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_SINT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_SINT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_A2B10G10R10_UINT_PACK32'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_UINT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UINT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_UINT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'
+    --
+    -- Note
+    --
+    -- @shaderStorageImageExtendedFormats@ feature only adds a guarantee of
+    -- format support, which is specified for the whole physical device.
+    -- Therefore enabling or disabling the feature via
+    -- 'Vulkan.Core10.Device.createDevice' has no practical effect.
+    --
+    -- To query for additional properties, or if the feature is not supported,
+    -- 'getPhysicalDeviceFormatProperties' and
+    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for
+    -- supported properties of individual formats, as usual rules allow.
+    --
+    -- 'Vulkan.Core10.Enums.Format.FORMAT_R32G32_UINT',
+    -- 'Vulkan.Core10.Enums.Format.FORMAT_R32G32_SINT', and
+    -- 'Vulkan.Core10.Enums.Format.FORMAT_R32G32_SFLOAT' from
+    -- @StorageImageExtendedFormats@ SPIR-V capability, are already covered by
+    -- core Vulkan
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-mandatory-features-32bit mandatory format support>.
+    shaderStorageImageExtendedFormats :: Bool
+  , -- | @shaderStorageImageMultisample@ specifies whether multisampled storage
+    -- images are supported. If this feature is not enabled, images that are
+    -- created with a @usage@ that includes
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT' /must/
+    -- be created with @samples@ equal to
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'. This also
+    -- specifies whether shader modules /can/ declare the
+    -- @StorageImageMultisample@ capability.
+    shaderStorageImageMultisample :: Bool
+  , -- | @shaderStorageImageReadWithoutFormat@ specifies whether storage images
+    -- require a format qualifier to be specified when reading from storage
+    -- images. If this feature is not enabled, the @OpImageRead@ instruction
+    -- /must/ not have an @OpTypeImage@ of @Unknown@. This also specifies
+    -- whether shader modules /can/ declare the @StorageImageReadWithoutFormat@
+    -- capability.
+    shaderStorageImageReadWithoutFormat :: Bool
+  , -- | @shaderStorageImageWriteWithoutFormat@ specifies whether storage images
+    -- require a format qualifier to be specified when writing to storage
+    -- images. If this feature is not enabled, the @OpImageWrite@ instruction
+    -- /must/ not have an @OpTypeImage@ of @Unknown@. This also specifies
+    -- whether shader modules /can/ declare the
+    -- @StorageImageWriteWithoutFormat@ capability.
+    shaderStorageImageWriteWithoutFormat :: Bool
+  , -- | @shaderUniformBufferArrayDynamicIndexing@ specifies whether arrays of
+    -- uniform buffers /can/ be indexed by /dynamically uniform/ integer
+    -- expressions in shader code. If this feature is not enabled, resources
+    -- with a descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+    -- /must/ be indexed only by constant integral expressions when aggregated
+    -- into arrays in shader code. This also specifies whether shader modules
+    -- /can/ declare the @UniformBufferArrayDynamicIndexing@ capability.
+    shaderUniformBufferArrayDynamicIndexing :: Bool
+  , -- | @shaderSampledImageArrayDynamicIndexing@ specifies whether arrays of
+    -- samplers or sampled images /can/ be indexed by dynamically uniform
+    -- integer expressions in shader code. If this feature is not enabled,
+    -- resources with a descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+    -- or 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
+    -- /must/ be indexed only by constant integral expressions when aggregated
+    -- into arrays in shader code. This also specifies whether shader modules
+    -- /can/ declare the @SampledImageArrayDynamicIndexing@ capability.
+    shaderSampledImageArrayDynamicIndexing :: Bool
+  , -- | @shaderStorageBufferArrayDynamicIndexing@ specifies whether arrays of
+    -- storage buffers /can/ be indexed by dynamically uniform integer
+    -- expressions in shader code. If this feature is not enabled, resources
+    -- with a descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+    -- /must/ be indexed only by constant integral expressions when aggregated
+    -- into arrays in shader code. This also specifies whether shader modules
+    -- /can/ declare the @StorageBufferArrayDynamicIndexing@ capability.
+    shaderStorageBufferArrayDynamicIndexing :: Bool
+  , -- | @shaderStorageImageArrayDynamicIndexing@ specifies whether arrays of
+    -- storage images /can/ be indexed by dynamically uniform integer
+    -- expressions in shader code. If this feature is not enabled, resources
+    -- with a descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'
+    -- /must/ be indexed only by constant integral expressions when aggregated
+    -- into arrays in shader code. This also specifies whether shader modules
+    -- /can/ declare the @StorageImageArrayDynamicIndexing@ capability.
+    shaderStorageImageArrayDynamicIndexing :: Bool
+  , -- | @shaderClipDistance@ specifies whether clip distances are supported in
+    -- shader code. If this feature is not enabled, any members decorated with
+    -- the @ClipDistance@ built-in decoration /must/ not be read from or
+    -- written to in shader modules. This also specifies whether shader modules
+    -- /can/ declare the @ClipDistance@ capability.
+    shaderClipDistance :: Bool
+  , -- | @shaderCullDistance@ specifies whether cull distances are supported in
+    -- shader code. If this feature is not enabled, any members decorated with
+    -- the @CullDistance@ built-in decoration /must/ not be read from or
+    -- written to in shader modules. This also specifies whether shader modules
+    -- /can/ declare the @CullDistance@ capability.
+    shaderCullDistance :: Bool
+  , -- | @shaderFloat64@ specifies whether 64-bit floats (doubles) are supported
+    -- in shader code. If this feature is not enabled, 64-bit floating-point
+    -- types /must/ not be used in shader code. This also specifies whether
+    -- shader modules /can/ declare the @Float64@ capability. Declaring and
+    -- using 64-bit floats is enabled for all storage classes that SPIR-V
+    -- allows with the @Float64@ capability.
+    shaderFloat64 :: Bool
+  , -- | @shaderInt64@ specifies whether 64-bit integers (signed and unsigned)
+    -- are supported in shader code. If this feature is not enabled, 64-bit
+    -- integer types /must/ not be used in shader code. This also specifies
+    -- whether shader modules /can/ declare the @Int64@ capability. Declaring
+    -- and using 64-bit integers is enabled for all storage classes that SPIR-V
+    -- allows with the @Int64@ capability.
+    shaderInt64 :: Bool
+  , -- | @shaderInt16@ specifies whether 16-bit integers (signed and unsigned)
+    -- are supported in shader code. If this feature is not enabled, 16-bit
+    -- integer types /must/ not be used in shader code. This also specifies
+    -- whether shader modules /can/ declare the @Int16@ capability. However,
+    -- this only enables a subset of the storage classes that SPIR-V allows for
+    -- the @Int16@ SPIR-V capability: Declaring and using 16-bit integers in
+    -- the @Private@, @Workgroup@, and @Function@ storage classes is enabled,
+    -- while declaring them in the interface storage classes (e.g.,
+    -- @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@, and
+    -- @PushConstant@) is not enabled.
+    shaderInt16 :: Bool
+  , -- | @shaderResourceResidency@ specifies whether image operations that return
+    -- resource residency information are supported in shader code. If this
+    -- feature is not enabled, the @OpImageSparse@* instructions /must/ not be
+    -- used in shader code. This also specifies whether shader modules /can/
+    -- declare the @SparseResidency@ capability. The feature requires at least
+    -- one of the @sparseResidency*@ features to be supported.
+    shaderResourceResidency :: Bool
+  , -- | @shaderResourceMinLod@ specifies whether image operations specifying the
+    -- minimum resource LOD are supported in shader code. If this feature is
+    -- not enabled, the @MinLod@ image operand /must/ not be used in shader
+    -- code. This also specifies whether shader modules /can/ declare the
+    -- @MinLod@ capability.
+    shaderResourceMinLod :: Bool
+  , -- | @sparseBinding@ specifies whether resource memory /can/ be managed at
+    -- opaque sparse block level instead of at the object level. If this
+    -- feature is not enabled, resource memory /must/ be bound only on a
+    -- per-object basis using the
+    -- 'Vulkan.Core10.MemoryManagement.bindBufferMemory' and
+    -- 'Vulkan.Core10.MemoryManagement.bindImageMemory' commands. In this case,
+    -- buffers and images /must/ not be created with
+    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'
+    -- and
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'
+    -- set in the @flags@ member of the 'Vulkan.Core10.Buffer.BufferCreateInfo'
+    -- and 'Vulkan.Core10.Image.ImageCreateInfo' structures, respectively.
+    -- Otherwise resource memory /can/ be managed as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures Sparse Resource Features>.
+    sparseBinding :: Bool
+  , -- | @sparseResidencyBuffer@ specifies whether the device /can/ access
+    -- partially resident buffers. If this feature is not enabled, buffers
+    -- /must/ not be created with
+    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'
+    -- set in the @flags@ member of the 'Vulkan.Core10.Buffer.BufferCreateInfo'
+    -- structure.
+    sparseResidencyBuffer :: Bool
+  , -- | @sparseResidencyImage2D@ specifies whether the device /can/ access
+    -- partially resident 2D images with 1 sample per pixel. If this feature is
+    -- not enabled, images with an @imageType@ of
+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set to
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' /must/ not
+    -- be created with
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'
+    -- structure.
+    sparseResidencyImage2D :: Bool
+  , -- | @sparseResidencyImage3D@ specifies whether the device /can/ access
+    -- partially resident 3D images. If this feature is not enabled, images
+    -- with an @imageType@ of 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
+    -- /must/ not be created with
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'
+    -- structure.
+    sparseResidencyImage3D :: Bool
+  , -- | @sparseResidency2Samples@ specifies whether the physical device /can/
+    -- access partially resident 2D images with 2 samples per pixel. If this
+    -- feature is not enabled, images with an @imageType@ of
+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set to
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_2_BIT' /must/ not
+    -- be created with
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'
+    -- structure.
+    sparseResidency2Samples :: Bool
+  , -- | @sparseResidency4Samples@ specifies whether the physical device /can/
+    -- access partially resident 2D images with 4 samples per pixel. If this
+    -- feature is not enabled, images with an @imageType@ of
+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set to
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_4_BIT' /must/ not
+    -- be created with
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'
+    -- structure.
+    sparseResidency4Samples :: Bool
+  , -- | @sparseResidency8Samples@ specifies whether the physical device /can/
+    -- access partially resident 2D images with 8 samples per pixel. If this
+    -- feature is not enabled, images with an @imageType@ of
+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set to
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_8_BIT' /must/ not
+    -- be created with
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'
+    -- structure.
+    sparseResidency8Samples :: Bool
+  , -- | @sparseResidency16Samples@ specifies whether the physical device /can/
+    -- access partially resident 2D images with 16 samples per pixel. If this
+    -- feature is not enabled, images with an @imageType@ of
+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set to
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_16_BIT' /must/ not
+    -- be created with
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'
+    -- structure.
+    sparseResidency16Samples :: Bool
+  , -- | @sparseResidencyAliased@ specifies whether the physical device /can/
+    -- correctly access data aliased into multiple locations. If this feature
+    -- is not enabled, the
+    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT'
+    -- and
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
+    -- enum values /must/ not be used in @flags@ members of the
+    -- 'Vulkan.Core10.Buffer.BufferCreateInfo' and
+    -- 'Vulkan.Core10.Image.ImageCreateInfo' structures, respectively.
+    sparseResidencyAliased :: Bool
+  , -- | @variableMultisampleRate@ specifies whether all pipelines that will be
+    -- bound to a command buffer during a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments subpass which uses no attachments>
+    -- /must/ have the same value for
+    -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@.
+    -- If set to 'Vulkan.Core10.BaseType.TRUE', the implementation supports
+    -- variable multisample rates in a subpass which uses no attachments. If
+    -- set to 'Vulkan.Core10.BaseType.FALSE', then all pipelines bound in such
+    -- a subpass /must/ have the same multisample rate. This has no effect in
+    -- situations where a subpass uses any attachments.
+    variableMultisampleRate :: Bool
+  , -- | @inheritedQueries@ specifies whether a secondary command buffer /may/ be
+    -- executed while a query is active.
+    inheritedQueries :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceFeatures
+
+instance ToCStruct PhysicalDeviceFeatures where
+  withCStruct x f = allocaBytesAligned 220 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (robustBufferAccess))
+    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (fullDrawIndexUint32))
+    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (imageCubeArray))
+    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (independentBlend))
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (geometryShader))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (tessellationShader))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (sampleRateShading))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (dualSrcBlend))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (logicOp))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (multiDrawIndirect))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (drawIndirectFirstInstance))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (depthClamp))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (depthBiasClamp))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (fillModeNonSolid))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (depthBounds))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (wideLines))
+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (largePoints))
+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (alphaToOne))
+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (multiViewport))
+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (samplerAnisotropy))
+    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (textureCompressionETC2))
+    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (textureCompressionASTC_LDR))
+    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (textureCompressionBC))
+    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (occlusionQueryPrecise))
+    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (pipelineStatisticsQuery))
+    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (vertexPipelineStoresAndAtomics))
+    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (fragmentStoresAndAtomics))
+    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (shaderTessellationAndGeometryPointSize))
+    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (shaderImageGatherExtended))
+    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageExtendedFormats))
+    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageMultisample))
+    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageReadWithoutFormat))
+    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageWriteWithoutFormat))
+    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayDynamicIndexing))
+    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayDynamicIndexing))
+    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayDynamicIndexing))
+    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayDynamicIndexing))
+    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (shaderClipDistance))
+    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (shaderCullDistance))
+    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (shaderFloat64))
+    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (shaderInt64))
+    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (shaderInt16))
+    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (shaderResourceResidency))
+    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (shaderResourceMinLod))
+    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (sparseBinding))
+    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (sparseResidencyBuffer))
+    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (sparseResidencyImage2D))
+    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (sparseResidencyImage3D))
+    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (sparseResidency2Samples))
+    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (sparseResidency4Samples))
+    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (sparseResidency8Samples))
+    poke ((p `plusPtr` 204 :: Ptr Bool32)) (boolToBool32 (sparseResidency16Samples))
+    poke ((p `plusPtr` 208 :: Ptr Bool32)) (boolToBool32 (sparseResidencyAliased))
+    poke ((p `plusPtr` 212 :: Ptr Bool32)) (boolToBool32 (variableMultisampleRate))
+    poke ((p `plusPtr` 216 :: Ptr Bool32)) (boolToBool32 (inheritedQueries))
+    f
+  cStructSize = 220
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 204 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 208 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 212 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 216 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceFeatures where
+  peekCStruct p = do
+    robustBufferAccess <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))
+    fullDrawIndexUint32 <- peek @Bool32 ((p `plusPtr` 4 :: Ptr Bool32))
+    imageCubeArray <- peek @Bool32 ((p `plusPtr` 8 :: Ptr Bool32))
+    independentBlend <- peek @Bool32 ((p `plusPtr` 12 :: Ptr Bool32))
+    geometryShader <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    tessellationShader <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    sampleRateShading <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    dualSrcBlend <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    logicOp <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    multiDrawIndirect <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    drawIndirectFirstInstance <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    depthClamp <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    depthBiasClamp <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    fillModeNonSolid <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
+    depthBounds <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
+    wideLines <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
+    largePoints <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))
+    alphaToOne <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))
+    multiViewport <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))
+    samplerAnisotropy <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
+    textureCompressionETC2 <- peek @Bool32 ((p `plusPtr` 80 :: Ptr Bool32))
+    textureCompressionASTC_LDR <- peek @Bool32 ((p `plusPtr` 84 :: Ptr Bool32))
+    textureCompressionBC <- peek @Bool32 ((p `plusPtr` 88 :: Ptr Bool32))
+    occlusionQueryPrecise <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))
+    pipelineStatisticsQuery <- peek @Bool32 ((p `plusPtr` 96 :: Ptr Bool32))
+    vertexPipelineStoresAndAtomics <- peek @Bool32 ((p `plusPtr` 100 :: Ptr Bool32))
+    fragmentStoresAndAtomics <- peek @Bool32 ((p `plusPtr` 104 :: Ptr Bool32))
+    shaderTessellationAndGeometryPointSize <- peek @Bool32 ((p `plusPtr` 108 :: Ptr Bool32))
+    shaderImageGatherExtended <- peek @Bool32 ((p `plusPtr` 112 :: Ptr Bool32))
+    shaderStorageImageExtendedFormats <- peek @Bool32 ((p `plusPtr` 116 :: Ptr Bool32))
+    shaderStorageImageMultisample <- peek @Bool32 ((p `plusPtr` 120 :: Ptr Bool32))
+    shaderStorageImageReadWithoutFormat <- peek @Bool32 ((p `plusPtr` 124 :: Ptr Bool32))
+    shaderStorageImageWriteWithoutFormat <- peek @Bool32 ((p `plusPtr` 128 :: Ptr Bool32))
+    shaderUniformBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 132 :: Ptr Bool32))
+    shaderSampledImageArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 136 :: Ptr Bool32))
+    shaderStorageBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 140 :: Ptr Bool32))
+    shaderStorageImageArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 144 :: Ptr Bool32))
+    shaderClipDistance <- peek @Bool32 ((p `plusPtr` 148 :: Ptr Bool32))
+    shaderCullDistance <- peek @Bool32 ((p `plusPtr` 152 :: Ptr Bool32))
+    shaderFloat64 <- peek @Bool32 ((p `plusPtr` 156 :: Ptr Bool32))
+    shaderInt64 <- peek @Bool32 ((p `plusPtr` 160 :: Ptr Bool32))
+    shaderInt16 <- peek @Bool32 ((p `plusPtr` 164 :: Ptr Bool32))
+    shaderResourceResidency <- peek @Bool32 ((p `plusPtr` 168 :: Ptr Bool32))
+    shaderResourceMinLod <- peek @Bool32 ((p `plusPtr` 172 :: Ptr Bool32))
+    sparseBinding <- peek @Bool32 ((p `plusPtr` 176 :: Ptr Bool32))
+    sparseResidencyBuffer <- peek @Bool32 ((p `plusPtr` 180 :: Ptr Bool32))
+    sparseResidencyImage2D <- peek @Bool32 ((p `plusPtr` 184 :: Ptr Bool32))
+    sparseResidencyImage3D <- peek @Bool32 ((p `plusPtr` 188 :: Ptr Bool32))
+    sparseResidency2Samples <- peek @Bool32 ((p `plusPtr` 192 :: Ptr Bool32))
+    sparseResidency4Samples <- peek @Bool32 ((p `plusPtr` 196 :: Ptr Bool32))
+    sparseResidency8Samples <- peek @Bool32 ((p `plusPtr` 200 :: Ptr Bool32))
+    sparseResidency16Samples <- peek @Bool32 ((p `plusPtr` 204 :: Ptr Bool32))
+    sparseResidencyAliased <- peek @Bool32 ((p `plusPtr` 208 :: Ptr Bool32))
+    variableMultisampleRate <- peek @Bool32 ((p `plusPtr` 212 :: Ptr Bool32))
+    inheritedQueries <- peek @Bool32 ((p `plusPtr` 216 :: Ptr Bool32))
+    pure $ PhysicalDeviceFeatures
+             (bool32ToBool robustBufferAccess) (bool32ToBool fullDrawIndexUint32) (bool32ToBool imageCubeArray) (bool32ToBool independentBlend) (bool32ToBool geometryShader) (bool32ToBool tessellationShader) (bool32ToBool sampleRateShading) (bool32ToBool dualSrcBlend) (bool32ToBool logicOp) (bool32ToBool multiDrawIndirect) (bool32ToBool drawIndirectFirstInstance) (bool32ToBool depthClamp) (bool32ToBool depthBiasClamp) (bool32ToBool fillModeNonSolid) (bool32ToBool depthBounds) (bool32ToBool wideLines) (bool32ToBool largePoints) (bool32ToBool alphaToOne) (bool32ToBool multiViewport) (bool32ToBool samplerAnisotropy) (bool32ToBool textureCompressionETC2) (bool32ToBool textureCompressionASTC_LDR) (bool32ToBool textureCompressionBC) (bool32ToBool occlusionQueryPrecise) (bool32ToBool pipelineStatisticsQuery) (bool32ToBool vertexPipelineStoresAndAtomics) (bool32ToBool fragmentStoresAndAtomics) (bool32ToBool shaderTessellationAndGeometryPointSize) (bool32ToBool shaderImageGatherExtended) (bool32ToBool shaderStorageImageExtendedFormats) (bool32ToBool shaderStorageImageMultisample) (bool32ToBool shaderStorageImageReadWithoutFormat) (bool32ToBool shaderStorageImageWriteWithoutFormat) (bool32ToBool shaderUniformBufferArrayDynamicIndexing) (bool32ToBool shaderSampledImageArrayDynamicIndexing) (bool32ToBool shaderStorageBufferArrayDynamicIndexing) (bool32ToBool shaderStorageImageArrayDynamicIndexing) (bool32ToBool shaderClipDistance) (bool32ToBool shaderCullDistance) (bool32ToBool shaderFloat64) (bool32ToBool shaderInt64) (bool32ToBool shaderInt16) (bool32ToBool shaderResourceResidency) (bool32ToBool shaderResourceMinLod) (bool32ToBool sparseBinding) (bool32ToBool sparseResidencyBuffer) (bool32ToBool sparseResidencyImage2D) (bool32ToBool sparseResidencyImage3D) (bool32ToBool sparseResidency2Samples) (bool32ToBool sparseResidency4Samples) (bool32ToBool sparseResidency8Samples) (bool32ToBool sparseResidency16Samples) (bool32ToBool sparseResidencyAliased) (bool32ToBool variableMultisampleRate) (bool32ToBool inheritedQueries)
+
+instance Storable PhysicalDeviceFeatures where
+  sizeOf ~_ = 220
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceFeatures where
+  zero = PhysicalDeviceFeatures
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceSparseProperties - Structure specifying physical device
+-- sparse memory properties
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'PhysicalDeviceProperties'
+data PhysicalDeviceSparseProperties = PhysicalDeviceSparseProperties
+  { -- | @residencyStandard2DBlockShape@ is 'Vulkan.Core10.BaseType.TRUE' if the
+    -- physical device will access all single-sample 2D sparse resources using
+    -- the standard sparse image block shapes (based on image format), as
+    -- described in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle Standard Sparse Image Block Shapes (Single Sample)>
+    -- table. If this property is not supported the value returned in the
+    -- @imageGranularity@ member of the
+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'
+    -- structure for single-sample 2D images is not /required/ to match the
+    -- standard sparse image block dimensions listed in the table.
+    residencyStandard2DBlockShape :: Bool
+  , -- | @residencyStandard2DMultisampleBlockShape@ is
+    -- 'Vulkan.Core10.BaseType.TRUE' if the physical device will access all
+    -- multisample 2D sparse resources using the standard sparse image block
+    -- shapes (based on image format), as described in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapesmsaa Standard Sparse Image Block Shapes (MSAA)>
+    -- table. If this property is not supported, the value returned in the
+    -- @imageGranularity@ member of the
+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'
+    -- structure for multisample 2D images is not /required/ to match the
+    -- standard sparse image block dimensions listed in the table.
+    residencyStandard2DMultisampleBlockShape :: Bool
+  , -- | @residencyStandard3DBlockShape@ is 'Vulkan.Core10.BaseType.TRUE' if the
+    -- physical device will access all 3D sparse resources using the standard
+    -- sparse image block shapes (based on image format), as described in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle Standard Sparse Image Block Shapes (Single Sample)>
+    -- table. If this property is not supported, the value returned in the
+    -- @imageGranularity@ member of the
+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'
+    -- structure for 3D images is not /required/ to match the standard sparse
+    -- image block dimensions listed in the table.
+    residencyStandard3DBlockShape :: Bool
+  , -- | @residencyAlignedMipSize@ is 'Vulkan.Core10.BaseType.TRUE' if images
+    -- with mip level dimensions that are not integer multiples of the
+    -- corresponding dimensions of the sparse image block /may/ be placed in
+    -- the mip tail. If this property is not reported, only mip levels with
+    -- dimensions smaller than the @imageGranularity@ member of the
+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'
+    -- structure will be placed in the mip tail. If this property is reported
+    -- the implementation is allowed to return
+    -- 'Vulkan.Core10.Enums.SparseImageFormatFlagBits.SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT'
+    -- in the @flags@ member of
+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties',
+    -- indicating that mip level dimensions that are not integer multiples of
+    -- the corresponding dimensions of the sparse image block will be placed in
+    -- the mip tail.
+    residencyAlignedMipSize :: Bool
+  , -- | @residencyNonResidentStrict@ specifies whether the physical device /can/
+    -- consistently access non-resident regions of a resource. If this property
+    -- is 'Vulkan.Core10.BaseType.TRUE', access to non-resident regions of
+    -- resources will be guaranteed to return values as if the resource were
+    -- populated with 0; writes to non-resident regions will be discarded.
+    residencyNonResidentStrict :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceSparseProperties
+
+instance ToCStruct PhysicalDeviceSparseProperties where
+  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSparseProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (residencyStandard2DBlockShape))
+    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (residencyStandard2DMultisampleBlockShape))
+    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (residencyStandard3DBlockShape))
+    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (residencyAlignedMipSize))
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (residencyNonResidentStrict))
+    f
+  cStructSize = 20
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceSparseProperties where
+  peekCStruct p = do
+    residencyStandard2DBlockShape <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))
+    residencyStandard2DMultisampleBlockShape <- peek @Bool32 ((p `plusPtr` 4 :: Ptr Bool32))
+    residencyStandard3DBlockShape <- peek @Bool32 ((p `plusPtr` 8 :: Ptr Bool32))
+    residencyAlignedMipSize <- peek @Bool32 ((p `plusPtr` 12 :: Ptr Bool32))
+    residencyNonResidentStrict <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceSparseProperties
+             (bool32ToBool residencyStandard2DBlockShape) (bool32ToBool residencyStandard2DMultisampleBlockShape) (bool32ToBool residencyStandard3DBlockShape) (bool32ToBool residencyAlignedMipSize) (bool32ToBool residencyNonResidentStrict)
+
+instance Storable PhysicalDeviceSparseProperties where
+  sizeOf ~_ = 20
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceSparseProperties where
+  zero = PhysicalDeviceSparseProperties
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceLimits - Structure reporting implementation-dependent
+-- physical device limits
+--
+-- = Members
+--
+-- The 'PhysicalDeviceLimits' are properties of the physical device. These
+-- are available in the @limits@ member of the 'PhysicalDeviceProperties'
+-- structure which is returned from 'getPhysicalDeviceProperties'.
+--
+-- = Description
+--
+-- [1]
+--     For all bitmasks of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits', the
+--     sample count limits defined above represent the minimum supported
+--     sample counts for each image type. Individual images /may/ support
+--     additional sample counts, which are queried using
+--     'getPhysicalDeviceImageFormatProperties' as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-supported-sample-counts Supported Sample Counts>.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'PhysicalDeviceProperties',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags'
+data PhysicalDeviceLimits = PhysicalDeviceLimits
+  { -- | @maxImageDimension1D@ is the maximum dimension (@width@) supported for
+    -- all images created with an @imageType@ of
+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'.
+    maxImageDimension1D :: Word32
+  , -- | @maxImageDimension2D@ is the maximum dimension (@width@ or @height@)
+    -- supported for all images created with an @imageType@ of
+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and without
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
+    -- set in @flags@.
+    maxImageDimension2D :: Word32
+  , -- | @maxImageDimension3D@ is the maximum dimension (@width@, @height@, or
+    -- @depth@) supported for all images created with an @imageType@ of
+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'.
+    maxImageDimension3D :: Word32
+  , -- | @maxImageDimensionCube@ is the maximum dimension (@width@ or @height@)
+    -- supported for all images created with an @imageType@ of
+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and with
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
+    -- set in @flags@.
+    maxImageDimensionCube :: Word32
+  , -- | @maxImageArrayLayers@ is the maximum number of layers (@arrayLayers@)
+    -- for an image.
+    maxImageArrayLayers :: Word32
+  , -- | @maxTexelBufferElements@ is the maximum number of addressable texels for
+    -- a buffer view created on a buffer which was created with the
+    -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT'
+    -- or
+    -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT'
+    -- set in the @usage@ member of the 'Vulkan.Core10.Buffer.BufferCreateInfo'
+    -- structure.
+    maxTexelBufferElements :: Word32
+  , -- | @maxUniformBufferRange@ is the maximum value that /can/ be specified in
+    -- the @range@ member of any
+    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structures passed to
+    -- a call to 'Vulkan.Core10.DescriptorSet.updateDescriptorSets' for
+    -- descriptors of type
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'.
+    maxUniformBufferRange :: Word32
+  , -- | @maxStorageBufferRange@ is the maximum value that /can/ be specified in
+    -- the @range@ member of any
+    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structures passed to
+    -- a call to 'Vulkan.Core10.DescriptorSet.updateDescriptorSets' for
+    -- descriptors of type
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'.
+    maxStorageBufferRange :: Word32
+  , -- | @maxPushConstantsSize@ is the maximum size, in bytes, of the pool of
+    -- push constant memory. For each of the push constant ranges indicated by
+    -- the @pPushConstantRanges@ member of the
+    -- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo' structure,
+    -- (@offset@ + @size@) /must/ be less than or equal to this limit.
+    maxPushConstantsSize :: Word32
+  , -- | @maxMemoryAllocationCount@ is the maximum number of device memory
+    -- allocations, as created by 'Vulkan.Core10.Memory.allocateMemory', which
+    -- /can/ simultaneously exist.
+    maxMemoryAllocationCount :: Word32
+  , -- | @maxSamplerAllocationCount@ is the maximum number of sampler objects, as
+    -- created by 'Vulkan.Core10.Sampler.createSampler', which /can/
+    -- simultaneously exist on a device.
+    maxSamplerAllocationCount :: Word32
+  , -- | @bufferImageGranularity@ is the granularity, in bytes, at which buffer
+    -- or linear image resources, and optimal image resources /can/ be bound to
+    -- adjacent offsets in the same 'Vulkan.Core10.Handles.DeviceMemory' object
+    -- without aliasing. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-bufferimagegranularity Buffer-Image Granularity>
+    -- for more details.
+    bufferImageGranularity :: DeviceSize
+  , -- | @sparseAddressSpaceSize@ is the total amount of address space available,
+    -- in bytes, for sparse memory resources. This is an upper bound on the sum
+    -- of the size of all sparse resources, regardless of whether any memory is
+    -- bound to them.
+    sparseAddressSpaceSize :: DeviceSize
+  , -- | @maxBoundDescriptorSets@ is the maximum number of descriptor sets that
+    -- /can/ be simultaneously used by a pipeline. All
+    -- 'Vulkan.Core10.Handles.DescriptorSet' decorations in shader modules
+    -- /must/ have a value less than @maxBoundDescriptorSets@. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sets>.
+    maxBoundDescriptorSets :: Word32
+  , -- | @maxPerStageDescriptorSamplers@ is the maximum number of samplers that
+    -- /can/ be accessible to a single shader stage in a pipeline layout.
+    -- Descriptors with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. A descriptor is accessible to a shader
+    -- stage when the @stageFlags@ member of the
+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has
+    -- the bit for that shader stage set. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampler>
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>.
+    maxPerStageDescriptorSamplers :: Word32
+  , -- | @maxPerStageDescriptorUniformBuffers@ is the maximum number of uniform
+    -- buffers that /can/ be accessible to a single shader stage in a pipeline
+    -- layout. Descriptors with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. A descriptor is accessible to a shader
+    -- stage when the @stageFlags@ member of the
+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has
+    -- the bit for that shader stage set. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer>
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.
+    maxPerStageDescriptorUniformBuffers :: Word32
+  , -- | @maxPerStageDescriptorStorageBuffers@ is the maximum number of storage
+    -- buffers that /can/ be accessible to a single shader stage in a pipeline
+    -- layout. Descriptors with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. A descriptor is accessible to a
+    -- pipeline shader stage when the @stageFlags@ member of the
+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has
+    -- the bit for that shader stage set. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer>
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.
+    maxPerStageDescriptorStorageBuffers :: Word32
+  , -- | @maxPerStageDescriptorSampledImages@ is the maximum number of sampled
+    -- images that /can/ be accessible to a single shader stage in a pipeline
+    -- layout. Descriptors with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. A descriptor is accessible to a
+    -- pipeline shader stage when the @stageFlags@ member of the
+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has
+    -- the bit for that shader stage set. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>,
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage>,
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer>.
+    maxPerStageDescriptorSampledImages :: Word32
+  , -- | @maxPerStageDescriptorStorageImages@ is the maximum number of storage
+    -- images that /can/ be accessible to a single shader stage in a pipeline
+    -- layout. Descriptors with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. A descriptor is accessible to a
+    -- pipeline shader stage when the @stageFlags@ member of the
+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has
+    -- the bit for that shader stage set. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage>,
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer>.
+    maxPerStageDescriptorStorageImages :: Word32
+  , -- | @maxPerStageDescriptorInputAttachments@ is the maximum number of input
+    -- attachments that /can/ be accessible to a single shader stage in a
+    -- pipeline layout. Descriptors with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. A descriptor is accessible to a
+    -- pipeline shader stage when the @stageFlags@ member of the
+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has
+    -- the bit for that shader stage set. These are only supported for the
+    -- fragment stage. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment>.
+    maxPerStageDescriptorInputAttachments :: Word32
+  , -- | @maxPerStageResources@ is the maximum number of resources that /can/ be
+    -- accessible to a single shader stage in a pipeline layout. Descriptors
+    -- with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',
+    -- or 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. For the fragment shader stage the
+    -- framebuffer color attachments also count against this limit.
+    maxPerStageResources :: Word32
+  , -- | @maxDescriptorSetSamplers@ is the maximum number of samplers that /can/
+    -- be included in a pipeline layout. Descriptors with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampler>
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>.
+    maxDescriptorSetSamplers :: Word32
+  , -- | @maxDescriptorSetUniformBuffers@ is the maximum number of uniform
+    -- buffers that /can/ be included in a pipeline layout. Descriptors with a
+    -- type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer>
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.
+    maxDescriptorSetUniformBuffers :: Word32
+  , -- | @maxDescriptorSetUniformBuffersDynamic@ is the maximum number of dynamic
+    -- uniform buffers that /can/ be included in a pipeline layout. Descriptors
+    -- with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.
+    maxDescriptorSetUniformBuffersDynamic :: Word32
+  , -- | @maxDescriptorSetStorageBuffers@ is the maximum number of storage
+    -- buffers that /can/ be included in a pipeline layout. Descriptors with a
+    -- type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer>
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.
+    maxDescriptorSetStorageBuffers :: Word32
+  , -- | @maxDescriptorSetStorageBuffersDynamic@ is the maximum number of dynamic
+    -- storage buffers that /can/ be included in a pipeline layout. Descriptors
+    -- with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.
+    maxDescriptorSetStorageBuffersDynamic :: Word32
+  , -- | @maxDescriptorSetSampledImages@ is the maximum number of sampled images
+    -- that /can/ be included in a pipeline layout. Descriptors with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>,
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage>,
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer>.
+    maxDescriptorSetSampledImages :: Word32
+  , -- | @maxDescriptorSetStorageImages@ is the maximum number of storage images
+    -- that /can/ be included in a pipeline layout. Descriptors with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage>,
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer>.
+    maxDescriptorSetStorageImages :: Word32
+  , -- | @maxDescriptorSetInputAttachments@ is the maximum number of input
+    -- attachments that /can/ be included in a pipeline layout. Descriptors
+    -- with a type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
+    -- count against this limit. Only descriptors in descriptor set layouts
+    -- created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment>.
+    maxDescriptorSetInputAttachments :: Word32
+  , -- | @maxVertexInputAttributes@ is the maximum number of vertex input
+    -- attributes that /can/ be specified for a graphics pipeline. These are
+    -- described in the array of
+    -- 'Vulkan.Core10.Pipeline.VertexInputAttributeDescription' structures that
+    -- are provided at graphics pipeline creation time via the
+    -- @pVertexAttributeDescriptions@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo' structure.
+    -- See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-attrib>
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.
+    maxVertexInputAttributes :: Word32
+  , -- | @maxVertexInputBindings@ is the maximum number of vertex buffers that
+    -- /can/ be specified for providing vertex attributes to a graphics
+    -- pipeline. These are described in the array of
+    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription' structures that
+    -- are provided at graphics pipeline creation time via the
+    -- @pVertexBindingDescriptions@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo' structure.
+    -- The @binding@ member of
+    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription' /must/ be less
+    -- than this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.
+    maxVertexInputBindings :: Word32
+  , -- | @maxVertexInputAttributeOffset@ is the maximum vertex input attribute
+    -- offset that /can/ be added to the vertex input binding stride. The
+    -- @offset@ member of the
+    -- 'Vulkan.Core10.Pipeline.VertexInputAttributeDescription' structure
+    -- /must/ be less than or equal to this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.
+    maxVertexInputAttributeOffset :: Word32
+  , -- | @maxVertexInputBindingStride@ is the maximum vertex input binding stride
+    -- that /can/ be specified in a vertex input binding. The @stride@ member
+    -- of the 'Vulkan.Core10.Pipeline.VertexInputBindingDescription' structure
+    -- /must/ be less than or equal to this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.
+    maxVertexInputBindingStride :: Word32
+  , -- | @maxVertexOutputComponents@ is the maximum number of components of
+    -- output variables which /can/ be output by a vertex shader. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-vertex>.
+    maxVertexOutputComponents :: Word32
+  , -- | @maxTessellationGenerationLevel@ is the maximum tessellation generation
+    -- level supported by the fixed-function tessellation primitive generator.
+    -- See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>.
+    maxTessellationGenerationLevel :: Word32
+  , -- | @maxTessellationPatchSize@ is the maximum patch size, in vertices, of
+    -- patches that /can/ be processed by the tessellation control shader and
+    -- tessellation primitive generator. The @patchControlPoints@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo' structure
+    -- specified at pipeline creation time and the value provided in the
+    -- @OutputVertices@ execution mode of shader modules /must/ be less than or
+    -- equal to this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>.
+    maxTessellationPatchSize :: Word32
+  , -- | @maxTessellationControlPerVertexInputComponents@ is the maximum number
+    -- of components of input variables which /can/ be provided as per-vertex
+    -- inputs to the tessellation control shader stage.
+    maxTessellationControlPerVertexInputComponents :: Word32
+  , -- | @maxTessellationControlPerVertexOutputComponents@ is the maximum number
+    -- of components of per-vertex output variables which /can/ be output from
+    -- the tessellation control shader stage.
+    maxTessellationControlPerVertexOutputComponents :: Word32
+  , -- | @maxTessellationControlPerPatchOutputComponents@ is the maximum number
+    -- of components of per-patch output variables which /can/ be output from
+    -- the tessellation control shader stage.
+    maxTessellationControlPerPatchOutputComponents :: Word32
+  , -- | @maxTessellationControlTotalOutputComponents@ is the maximum total
+    -- number of components of per-vertex and per-patch output variables which
+    -- /can/ be output from the tessellation control shader stage.
+    maxTessellationControlTotalOutputComponents :: Word32
+  , -- | @maxTessellationEvaluationInputComponents@ is the maximum number of
+    -- components of input variables which /can/ be provided as per-vertex
+    -- inputs to the tessellation evaluation shader stage.
+    maxTessellationEvaluationInputComponents :: Word32
+  , -- | @maxTessellationEvaluationOutputComponents@ is the maximum number of
+    -- components of per-vertex output variables which /can/ be output from the
+    -- tessellation evaluation shader stage.
+    maxTessellationEvaluationOutputComponents :: Word32
+  , -- | @maxGeometryShaderInvocations@ is the maximum invocation count supported
+    -- for instanced geometry shaders. The value provided in the @Invocations@
+    -- execution mode of shader modules /must/ be less than or equal to this
+    -- limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry>.
+    maxGeometryShaderInvocations :: Word32
+  , -- | @maxGeometryInputComponents@ is the maximum number of components of
+    -- input variables which /can/ be provided as inputs to the geometry shader
+    -- stage.
+    maxGeometryInputComponents :: Word32
+  , -- | @maxGeometryOutputComponents@ is the maximum number of components of
+    -- output variables which /can/ be output from the geometry shader stage.
+    maxGeometryOutputComponents :: Word32
+  , -- | @maxGeometryOutputVertices@ is the maximum number of vertices which
+    -- /can/ be emitted by any geometry shader.
+    maxGeometryOutputVertices :: Word32
+  , -- | @maxGeometryTotalOutputComponents@ is the maximum total number of
+    -- components of output, across all emitted vertices, which /can/ be output
+    -- from the geometry shader stage.
+    maxGeometryTotalOutputComponents :: Word32
+  , -- | @maxFragmentInputComponents@ is the maximum number of components of
+    -- input variables which /can/ be provided as inputs to the fragment shader
+    -- stage.
+    maxFragmentInputComponents :: Word32
+  , -- | @maxFragmentOutputAttachments@ is the maximum number of output
+    -- attachments which /can/ be written to by the fragment shader stage.
+    maxFragmentOutputAttachments :: Word32
+  , -- | @maxFragmentDualSrcAttachments@ is the maximum number of output
+    -- attachments which /can/ be written to by the fragment shader stage when
+    -- blending is enabled and one of the dual source blend modes is in use.
+    -- See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-dsb>
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dualSrcBlend>.
+    maxFragmentDualSrcAttachments :: Word32
+  , -- | @maxFragmentCombinedOutputResources@ is the total number of storage
+    -- buffers, storage images, and output buffers which /can/ be used in the
+    -- fragment shader stage.
+    maxFragmentCombinedOutputResources :: Word32
+  , -- | @maxComputeSharedMemorySize@ is the maximum total storage size, in
+    -- bytes, available for variables declared with the @Workgroup@ storage
+    -- class in shader modules (or with the @shared@ storage qualifier in GLSL)
+    -- in the compute shader stage. The amount of storage consumed by the
+    -- variables declared with the @Workgroup@ storage class is
+    -- implementation-dependent. However, the amount of storage consumed may
+    -- not exceed the largest block size that would be obtained if all active
+    -- variables declared with @Workgroup@ storage class were assigned offsets
+    -- in an arbitrary order by successively taking the smallest valid offset
+    -- according to the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Storage Buffer Layout>
+    -- rules. (This is equivalent to using the GLSL std430 layout rules.)
+    maxComputeSharedMemorySize :: Word32
+  , -- | @maxComputeWorkGroupCount@[3] is the maximum number of local workgroups
+    -- that /can/ be dispatched by a single dispatch command. These three
+    -- values represent the maximum number of local workgroups for the X, Y,
+    -- and Z dimensions, respectively. The workgroup count parameters to the
+    -- dispatch commands /must/ be less than or equal to the corresponding
+    -- limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dispatch>.
+    maxComputeWorkGroupCount :: (Word32, Word32, Word32)
+  , -- | @maxComputeWorkGroupInvocations@ is the maximum total number of compute
+    -- shader invocations in a single local workgroup. The product of the X, Y,
+    -- and Z sizes, as specified by the @LocalSize@ execution mode in shader
+    -- modules or by the object decorated by the @WorkgroupSize@ decoration,
+    -- /must/ be less than or equal to this limit.
+    maxComputeWorkGroupInvocations :: Word32
+  , -- | @maxComputeWorkGroupSize@[3] is the maximum size of a local compute
+    -- workgroup, per dimension. These three values represent the maximum local
+    -- workgroup size in the X, Y, and Z dimensions, respectively. The @x@,
+    -- @y@, and @z@ sizes, as specified by the @LocalSize@ execution mode or by
+    -- the object decorated by the @WorkgroupSize@ decoration in shader
+    -- modules, /must/ be less than or equal to the corresponding limit.
+    maxComputeWorkGroupSize :: (Word32, Word32, Word32)
+  , -- | @subPixelPrecisionBits@ is the number of bits of subpixel precision in
+    -- framebuffer coordinates xf and yf. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast>.
+    subPixelPrecisionBits :: Word32
+  , -- | @subTexelPrecisionBits@ is the number of bits of precision in the
+    -- division along an axis of an image used for minification and
+    -- magnification filters. 2@subTexelPrecisionBits@ is the actual number of
+    -- divisions along each axis of the image represented. Sub-texel values
+    -- calculated during image sampling will snap to these locations when
+    -- generating the filtered results.
+    subTexelPrecisionBits :: Word32
+  , -- | @mipmapPrecisionBits@ is the number of bits of division that the LOD
+    -- calculation for mipmap fetching get snapped to when determining the
+    -- contribution from each mip level to the mip filtered results.
+    -- 2@mipmapPrecisionBits@ is the actual number of divisions.
+    mipmapPrecisionBits :: Word32
+  , -- | @maxDrawIndexedIndexValue@ is the maximum index value that /can/ be used
+    -- for indexed draw calls when using 32-bit indices. This excludes the
+    -- primitive restart index value of 0xFFFFFFFF. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fullDrawIndexUint32 fullDrawIndexUint32>.
+    maxDrawIndexedIndexValue :: Word32
+  , -- | @maxDrawIndirectCount@ is the maximum draw count that is supported for
+    -- indirect draw calls. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multiDrawIndirect>.
+    maxDrawIndirectCount :: Word32
+  , -- | @maxSamplerLodBias@ is the maximum absolute sampler LOD bias. The sum of
+    -- the @mipLodBias@ member of the 'Vulkan.Core10.Sampler.SamplerCreateInfo'
+    -- structure and the @Bias@ operand of image sampling operations in shader
+    -- modules (or 0 if no @Bias@ operand is provided to an image sampling
+    -- operation) are clamped to the range
+    -- [-@maxSamplerLodBias@,+@maxSamplerLodBias@]. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-mipLodBias>.
+    maxSamplerLodBias :: Float
+  , -- | @maxSamplerAnisotropy@ is the maximum degree of sampler anisotropy. The
+    -- maximum degree of anisotropic filtering used for an image sampling
+    -- operation is the minimum of the @maxAnisotropy@ member of the
+    -- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure and this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-maxAnisotropy>.
+    maxSamplerAnisotropy :: Float
+  , -- | @maxViewports@ is the maximum number of active viewports. The
+    -- @viewportCount@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' structure that
+    -- is provided at pipeline creation /must/ be less than or equal to this
+    -- limit.
+    maxViewports :: Word32
+  , -- | @maxViewportDimensions@[2] are the maximum viewport dimensions in the X
+    -- (width) and Y (height) dimensions, respectively. The maximum viewport
+    -- dimensions /must/ be greater than or equal to the largest image which
+    -- /can/ be created and used as a framebuffer attachment. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-viewport Controlling the Viewport>.
+    maxViewportDimensions :: (Word32, Word32)
+  , -- | @viewportBoundsRange@[2] is the [minimum, maximum] range that the
+    -- corners of a viewport /must/ be contained in. This range /must/ be at
+    -- least [-2 × @size@, 2 × @size@ - 1], where @size@ =
+    -- max(@maxViewportDimensions@[0], @maxViewportDimensions@[1]). See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-viewport Controlling the Viewport>.
+    --
+    -- Note
+    --
+    -- The intent of the @viewportBoundsRange@ limit is to allow a maximum
+    -- sized viewport to be arbitrarily shifted relative to the output target
+    -- as long as at least some portion intersects. This would give a bounds
+    -- limit of [-@size@ + 1, 2 × @size@ - 1] which would allow all possible
+    -- non-empty-set intersections of the output target and the viewport. Since
+    -- these numbers are typically powers of two, picking the signed number
+    -- range using the smallest possible number of bits ends up with the
+    -- specified range.
+    viewportBoundsRange :: (Float, Float)
+  , -- | @viewportSubPixelBits@ is the number of bits of subpixel precision for
+    -- viewport bounds. The subpixel precision that floating-point viewport
+    -- bounds are interpreted at is given by this limit.
+    viewportSubPixelBits :: Word32
+  , -- | @minMemoryMapAlignment@ is the minimum /required/ alignment, in bytes,
+    -- of host visible memory allocations within the host address space. When
+    -- mapping a memory allocation with 'Vulkan.Core10.Memory.mapMemory',
+    -- subtracting @offset@ bytes from the returned pointer will always produce
+    -- an integer multiple of this limit. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-hostaccess>.
+    minMemoryMapAlignment :: Word64
+  , -- | @minTexelBufferOffsetAlignment@ is the minimum /required/ alignment, in
+    -- bytes, for the @offset@ member of the
+    -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo' structure for texel
+    -- buffers. If
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>
+    -- is enabled, this limit is equivalent to the maximum of the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-uniformTexelBufferOffsetAlignmentBytes uniformTexelBufferOffsetAlignmentBytes>
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-storageTexelBufferOffsetAlignmentBytes storageTexelBufferOffsetAlignmentBytes>
+    -- members of
+    -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
+    -- but smaller alignment is optionally: allowed by
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-storageTexelBufferOffsetSingleTexelAlignment storageTexelBufferOffsetSingleTexelAlignment>
+    -- and
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-uniformTexelBufferOffsetSingleTexelAlignment uniformTexelBufferOffsetSingleTexelAlignment>.
+    -- If
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>
+    -- is not enabled,
+    -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo'::@offset@ /must/ be a
+    -- multiple of this value.
+    minTexelBufferOffsetAlignment :: DeviceSize
+  , -- | @minUniformBufferOffsetAlignment@ is the minimum /required/ alignment,
+    -- in bytes, for the @offset@ member of the
+    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structure for uniform
+    -- buffers. When a descriptor of type
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+    -- is updated, the @offset@ /must/ be an integer multiple of this limit.
+    -- Similarly, dynamic offsets for uniform buffers /must/ be multiples of
+    -- this limit.
+    minUniformBufferOffsetAlignment :: DeviceSize
+  , -- | @minStorageBufferOffsetAlignment@ is the minimum /required/ alignment,
+    -- in bytes, for the @offset@ member of the
+    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structure for storage
+    -- buffers. When a descriptor of type
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+    -- is updated, the @offset@ /must/ be an integer multiple of this limit.
+    -- Similarly, dynamic offsets for storage buffers /must/ be multiples of
+    -- this limit.
+    minStorageBufferOffsetAlignment :: DeviceSize
+  , -- | @minTexelOffset@ is the minimum offset value for the @ConstOffset@ image
+    -- operand of any of the @OpImageSample@* or @OpImageFetch@* image
+    -- instructions.
+    minTexelOffset :: Int32
+  , -- | @maxTexelOffset@ is the maximum offset value for the @ConstOffset@ image
+    -- operand of any of the @OpImageSample@* or @OpImageFetch@* image
+    -- instructions.
+    maxTexelOffset :: Word32
+  , -- | @minTexelGatherOffset@ is the minimum offset value for the @Offset@,
+    -- @ConstOffset@, or @ConstOffsets@ image operands of any of the
+    -- @OpImage@*@Gather@ image instructions.
+    minTexelGatherOffset :: Int32
+  , -- | @maxTexelGatherOffset@ is the maximum offset value for the @Offset@,
+    -- @ConstOffset@, or @ConstOffsets@ image operands of any of the
+    -- @OpImage@*@Gather@ image instructions.
+    maxTexelGatherOffset :: Word32
+  , -- | @minInterpolationOffset@ is the minimum negative offset value for the
+    -- @offset@ operand of the @InterpolateAtOffset@ extended instruction.
+    minInterpolationOffset :: Float
+  , -- | @maxInterpolationOffset@ is the maximum positive offset value for the
+    -- @offset@ operand of the @InterpolateAtOffset@ extended instruction.
+    maxInterpolationOffset :: Float
+  , -- | @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.
+    subPixelInterpolationOffsetBits :: Word32
+  , -- | @maxFramebufferWidth@ is the maximum width for a framebuffer. The
+    -- @width@ member of the 'Vulkan.Core10.Pass.FramebufferCreateInfo'
+    -- structure /must/ be less than or equal to this limit.
+    maxFramebufferWidth :: Word32
+  , -- | @maxFramebufferHeight@ is the maximum height for a framebuffer. The
+    -- @height@ member of the 'Vulkan.Core10.Pass.FramebufferCreateInfo'
+    -- structure /must/ be less than or equal to this limit.
+    maxFramebufferHeight :: Word32
+  , -- | @maxFramebufferLayers@ is the maximum layer count for a layered
+    -- framebuffer. The @layers@ member of the
+    -- 'Vulkan.Core10.Pass.FramebufferCreateInfo' structure /must/ be less than
+    -- or equal to this limit.
+    maxFramebufferLayers :: Word32
+  , -- | @framebufferColorSampleCounts@ is a bitmask1 of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the color sample counts that are supported for all framebuffer color
+    -- attachments with floating- or fixed-point formats. There is no limit
+    -- that specifies the color sample counts that are supported for all color
+    -- attachments with integer formats.
+    framebufferColorSampleCounts :: SampleCountFlags
+  , -- | @framebufferDepthSampleCounts@ is a bitmask1 of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the supported depth sample counts for all framebuffer depth\/stencil
+    -- attachments, when the format includes a depth component.
+    framebufferDepthSampleCounts :: SampleCountFlags
+  , -- | @framebufferStencilSampleCounts@ is a bitmask1 of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the supported stencil sample counts for all framebuffer depth\/stencil
+    -- attachments, when the format includes a stencil component.
+    framebufferStencilSampleCounts :: SampleCountFlags
+  , -- | @framebufferNoAttachmentsSampleCounts@ is a bitmask1 of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the supported sample counts for a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments subpass which uses no attachments>.
+    framebufferNoAttachmentsSampleCounts :: SampleCountFlags
+  , -- | @maxColorAttachments@ is the maximum number of color attachments that
+    -- /can/ be used by a subpass in a render pass. The @colorAttachmentCount@
+    -- member of the 'Vulkan.Core10.Pass.SubpassDescription' structure /must/
+    -- be less than or equal to this limit.
+    maxColorAttachments :: Word32
+  , -- | @sampledImageColorSampleCounts@ is a bitmask1 of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the sample counts supported for all 2D images created with
+    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@
+    -- containing
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and a
+    -- non-integer color format.
+    sampledImageColorSampleCounts :: SampleCountFlags
+  , -- | @sampledImageIntegerSampleCounts@ is a bitmask1 of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the sample counts supported for all 2D images created with
+    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@
+    -- containing
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and an
+    -- integer color format.
+    sampledImageIntegerSampleCounts :: SampleCountFlags
+  , -- | @sampledImageDepthSampleCounts@ is a bitmask1 of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the sample counts supported for all 2D images created with
+    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@
+    -- containing
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and a
+    -- depth format.
+    sampledImageDepthSampleCounts :: SampleCountFlags
+  , -- | @sampledImageStencilSampleCounts@ is a bitmask1 of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the sample supported for all 2D images created with
+    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@
+    -- containing
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and a
+    -- stencil format.
+    sampledImageStencilSampleCounts :: SampleCountFlags
+  , -- | @storageImageSampleCounts@ is a bitmask1 of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the sample counts supported for all 2D images created with
+    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', and @usage@
+    -- containing
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT'.
+    storageImageSampleCounts :: SampleCountFlags
+  , -- | @maxSampleMaskWords@ is the maximum number of array elements of a
+    -- variable decorated with the 'Vulkan.Core10.BaseType.SampleMask' built-in
+    -- decoration.
+    maxSampleMaskWords :: Word32
+  , -- | @timestampComputeAndGraphics@ specifies support for timestamps on all
+    -- graphics and compute queues. If this limit is set to
+    -- 'Vulkan.Core10.BaseType.TRUE', all queues that advertise the
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT' in the
+    -- 'QueueFamilyProperties'::@queueFlags@ support
+    -- 'QueueFamilyProperties'::@timestampValidBits@ of at least 36. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-timestamps Timestamp Queries>.
+    timestampComputeAndGraphics :: Bool
+  , -- | @timestampPeriod@ is the number of nanoseconds /required/ for a
+    -- timestamp query to be incremented by 1. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-timestamps Timestamp Queries>.
+    timestampPeriod :: Float
+  , -- | @maxClipDistances@ is the maximum number of clip distances that /can/ be
+    -- used in a single shader stage. The size of any array declared with the
+    -- @ClipDistance@ built-in decoration in a shader module /must/ be less
+    -- than or equal to this limit.
+    maxClipDistances :: Word32
+  , -- | @maxCullDistances@ is the maximum number of cull distances that /can/ be
+    -- used in a single shader stage. The size of any array declared with the
+    -- @CullDistance@ built-in decoration in a shader module /must/ be less
+    -- than or equal to this limit.
+    maxCullDistances :: Word32
+  , -- | @maxCombinedClipAndCullDistances@ is the maximum combined number of clip
+    -- and cull distances that /can/ be used in a single shader stage. The sum
+    -- of the sizes of any pair of arrays declared with the @ClipDistance@ and
+    -- @CullDistance@ built-in decoration used by a single shader stage in a
+    -- shader module /must/ be less than or equal to this limit.
+    maxCombinedClipAndCullDistances :: Word32
+  , -- | @discreteQueuePriorities@ is the number of discrete priorities that
+    -- /can/ be assigned to a queue based on the value of each member of
+    -- 'Vulkan.Core10.Device.DeviceQueueCreateInfo'::@pQueuePriorities@. This
+    -- /must/ be at least 2, and levels /must/ be spread evenly over the range,
+    -- with at least one level at 1.0, and another at 0.0. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-priority>.
+    discreteQueuePriorities :: Word32
+  , -- | @pointSizeRange@[2] is the range [@minimum@,@maximum@] of supported
+    -- sizes for points. Values written to variables decorated with the
+    -- @PointSize@ built-in decoration are clamped to this range.
+    pointSizeRange :: (Float, Float)
+  , -- | @lineWidthRange@[2] is the range [@minimum@,@maximum@] of supported
+    -- widths for lines. Values specified by the @lineWidth@ member of the
+    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' or the
+    -- @lineWidth@ parameter to
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' are clamped to
+    -- this range.
+    lineWidthRange :: (Float, Float)
+  , -- | @pointSizeGranularity@ is the granularity of supported point sizes. Not
+    -- all point sizes in the range defined by @pointSizeRange@ are supported.
+    -- This limit specifies the granularity (or increment) between successive
+    -- supported point sizes.
+    pointSizeGranularity :: Float
+  , -- | @lineWidthGranularity@ is the granularity of supported line widths. Not
+    -- all line widths in the range defined by @lineWidthRange@ are supported.
+    -- This limit specifies the granularity (or increment) between successive
+    -- supported line widths.
+    lineWidthGranularity :: Float
+  , -- | @strictLines@ specifies whether lines are rasterized according to the
+    -- preferred method of rasterization. If set to
+    -- 'Vulkan.Core10.BaseType.FALSE', lines /may/ be rasterized under a
+    -- relaxed set of rules. If set to 'Vulkan.Core10.BaseType.TRUE', lines are
+    -- rasterized as per the strict definition. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-basic Basic Line Segment Rasterization>.
+    strictLines :: Bool
+  , -- | @standardSampleLocations@ specifies whether rasterization uses the
+    -- standard sample locations as documented in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling Multisampling>.
+    -- If set to 'Vulkan.Core10.BaseType.TRUE', the implementation uses the
+    -- documented sample locations. If set to 'Vulkan.Core10.BaseType.FALSE',
+    -- the implementation /may/ use different sample locations.
+    standardSampleLocations :: Bool
+  , -- | @optimalBufferCopyOffsetAlignment@ is the optimal buffer offset
+    -- alignment in bytes for
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage' and
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'. The per
+    -- texel alignment requirements are enforced, but applications /should/ use
+    -- the optimal alignment for optimal performance and power use.
+    optimalBufferCopyOffsetAlignment :: DeviceSize
+  , -- | @optimalBufferCopyRowPitchAlignment@ is the optimal buffer row pitch
+    -- alignment in bytes for
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage' and
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'. Row pitch is
+    -- the number of bytes between texels with the same X coordinate in
+    -- adjacent rows (Y coordinates differ by one). The per texel alignment
+    -- requirements are enforced, but applications /should/ use the optimal
+    -- alignment for optimal performance and power use.
+    optimalBufferCopyRowPitchAlignment :: DeviceSize
+  , -- | @nonCoherentAtomSize@ is the size and alignment in bytes that bounds
+    -- concurrent access to
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-hostaccess host-mapped device memory>.
+    nonCoherentAtomSize :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceLimits
+
+instance ToCStruct PhysicalDeviceLimits where
+  withCStruct x f = allocaBytesAligned 504 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceLimits{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (maxImageDimension1D)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (maxImageDimension2D)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (maxImageDimension3D)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (maxImageDimensionCube)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxImageArrayLayers)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxTexelBufferElements)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxUniformBufferRange)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (maxStorageBufferRange)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (maxPushConstantsSize)
+    poke ((p `plusPtr` 36 :: Ptr Word32)) (maxMemoryAllocationCount)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (maxSamplerAllocationCount)
+    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (bufferImageGranularity)
+    poke ((p `plusPtr` 56 :: Ptr DeviceSize)) (sparseAddressSpaceSize)
+    poke ((p `plusPtr` 64 :: Ptr Word32)) (maxBoundDescriptorSets)
+    poke ((p `plusPtr` 68 :: Ptr Word32)) (maxPerStageDescriptorSamplers)
+    poke ((p `plusPtr` 72 :: Ptr Word32)) (maxPerStageDescriptorUniformBuffers)
+    poke ((p `plusPtr` 76 :: Ptr Word32)) (maxPerStageDescriptorStorageBuffers)
+    poke ((p `plusPtr` 80 :: Ptr Word32)) (maxPerStageDescriptorSampledImages)
+    poke ((p `plusPtr` 84 :: Ptr Word32)) (maxPerStageDescriptorStorageImages)
+    poke ((p `plusPtr` 88 :: Ptr Word32)) (maxPerStageDescriptorInputAttachments)
+    poke ((p `plusPtr` 92 :: Ptr Word32)) (maxPerStageResources)
+    poke ((p `plusPtr` 96 :: Ptr Word32)) (maxDescriptorSetSamplers)
+    poke ((p `plusPtr` 100 :: Ptr Word32)) (maxDescriptorSetUniformBuffers)
+    poke ((p `plusPtr` 104 :: Ptr Word32)) (maxDescriptorSetUniformBuffersDynamic)
+    poke ((p `plusPtr` 108 :: Ptr Word32)) (maxDescriptorSetStorageBuffers)
+    poke ((p `plusPtr` 112 :: Ptr Word32)) (maxDescriptorSetStorageBuffersDynamic)
+    poke ((p `plusPtr` 116 :: Ptr Word32)) (maxDescriptorSetSampledImages)
+    poke ((p `plusPtr` 120 :: Ptr Word32)) (maxDescriptorSetStorageImages)
+    poke ((p `plusPtr` 124 :: Ptr Word32)) (maxDescriptorSetInputAttachments)
+    poke ((p `plusPtr` 128 :: Ptr Word32)) (maxVertexInputAttributes)
+    poke ((p `plusPtr` 132 :: Ptr Word32)) (maxVertexInputBindings)
+    poke ((p `plusPtr` 136 :: Ptr Word32)) (maxVertexInputAttributeOffset)
+    poke ((p `plusPtr` 140 :: Ptr Word32)) (maxVertexInputBindingStride)
+    poke ((p `plusPtr` 144 :: Ptr Word32)) (maxVertexOutputComponents)
+    poke ((p `plusPtr` 148 :: Ptr Word32)) (maxTessellationGenerationLevel)
+    poke ((p `plusPtr` 152 :: Ptr Word32)) (maxTessellationPatchSize)
+    poke ((p `plusPtr` 156 :: Ptr Word32)) (maxTessellationControlPerVertexInputComponents)
+    poke ((p `plusPtr` 160 :: Ptr Word32)) (maxTessellationControlPerVertexOutputComponents)
+    poke ((p `plusPtr` 164 :: Ptr Word32)) (maxTessellationControlPerPatchOutputComponents)
+    poke ((p `plusPtr` 168 :: Ptr Word32)) (maxTessellationControlTotalOutputComponents)
+    poke ((p `plusPtr` 172 :: Ptr Word32)) (maxTessellationEvaluationInputComponents)
+    poke ((p `plusPtr` 176 :: Ptr Word32)) (maxTessellationEvaluationOutputComponents)
+    poke ((p `plusPtr` 180 :: Ptr Word32)) (maxGeometryShaderInvocations)
+    poke ((p `plusPtr` 184 :: Ptr Word32)) (maxGeometryInputComponents)
+    poke ((p `plusPtr` 188 :: Ptr Word32)) (maxGeometryOutputComponents)
+    poke ((p `plusPtr` 192 :: Ptr Word32)) (maxGeometryOutputVertices)
+    poke ((p `plusPtr` 196 :: Ptr Word32)) (maxGeometryTotalOutputComponents)
+    poke ((p `plusPtr` 200 :: Ptr Word32)) (maxFragmentInputComponents)
+    poke ((p `plusPtr` 204 :: Ptr Word32)) (maxFragmentOutputAttachments)
+    poke ((p `plusPtr` 208 :: Ptr Word32)) (maxFragmentDualSrcAttachments)
+    poke ((p `plusPtr` 212 :: Ptr Word32)) (maxFragmentCombinedOutputResources)
+    poke ((p `plusPtr` 216 :: Ptr Word32)) (maxComputeSharedMemorySize)
+    let pMaxComputeWorkGroupCount' = lowerArrayPtr ((p `plusPtr` 220 :: Ptr (FixedArray 3 Word32)))
+    case (maxComputeWorkGroupCount) of
+      (e0, e1, e2) -> do
+        poke (pMaxComputeWorkGroupCount' :: Ptr Word32) (e0)
+        poke (pMaxComputeWorkGroupCount' `plusPtr` 4 :: Ptr Word32) (e1)
+        poke (pMaxComputeWorkGroupCount' `plusPtr` 8 :: Ptr Word32) (e2)
+    poke ((p `plusPtr` 232 :: Ptr Word32)) (maxComputeWorkGroupInvocations)
+    let pMaxComputeWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 236 :: Ptr (FixedArray 3 Word32)))
+    case (maxComputeWorkGroupSize) of
+      (e0, e1, e2) -> do
+        poke (pMaxComputeWorkGroupSize' :: Ptr Word32) (e0)
+        poke (pMaxComputeWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
+        poke (pMaxComputeWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
+    poke ((p `plusPtr` 248 :: Ptr Word32)) (subPixelPrecisionBits)
+    poke ((p `plusPtr` 252 :: Ptr Word32)) (subTexelPrecisionBits)
+    poke ((p `plusPtr` 256 :: Ptr Word32)) (mipmapPrecisionBits)
+    poke ((p `plusPtr` 260 :: Ptr Word32)) (maxDrawIndexedIndexValue)
+    poke ((p `plusPtr` 264 :: Ptr Word32)) (maxDrawIndirectCount)
+    poke ((p `plusPtr` 268 :: Ptr CFloat)) (CFloat (maxSamplerLodBias))
+    poke ((p `plusPtr` 272 :: Ptr CFloat)) (CFloat (maxSamplerAnisotropy))
+    poke ((p `plusPtr` 276 :: Ptr Word32)) (maxViewports)
+    let pMaxViewportDimensions' = lowerArrayPtr ((p `plusPtr` 280 :: Ptr (FixedArray 2 Word32)))
+    case (maxViewportDimensions) of
+      (e0, e1) -> do
+        poke (pMaxViewportDimensions' :: Ptr Word32) (e0)
+        poke (pMaxViewportDimensions' `plusPtr` 4 :: Ptr Word32) (e1)
+    let pViewportBoundsRange' = lowerArrayPtr ((p `plusPtr` 288 :: Ptr (FixedArray 2 CFloat)))
+    case (viewportBoundsRange) of
+      (e0, e1) -> do
+        poke (pViewportBoundsRange' :: Ptr CFloat) (CFloat (e0))
+        poke (pViewportBoundsRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+    poke ((p `plusPtr` 296 :: Ptr Word32)) (viewportSubPixelBits)
+    poke ((p `plusPtr` 304 :: Ptr CSize)) (CSize (minMemoryMapAlignment))
+    poke ((p `plusPtr` 312 :: Ptr DeviceSize)) (minTexelBufferOffsetAlignment)
+    poke ((p `plusPtr` 320 :: Ptr DeviceSize)) (minUniformBufferOffsetAlignment)
+    poke ((p `plusPtr` 328 :: Ptr DeviceSize)) (minStorageBufferOffsetAlignment)
+    poke ((p `plusPtr` 336 :: Ptr Int32)) (minTexelOffset)
+    poke ((p `plusPtr` 340 :: Ptr Word32)) (maxTexelOffset)
+    poke ((p `plusPtr` 344 :: Ptr Int32)) (minTexelGatherOffset)
+    poke ((p `plusPtr` 348 :: Ptr Word32)) (maxTexelGatherOffset)
+    poke ((p `plusPtr` 352 :: Ptr CFloat)) (CFloat (minInterpolationOffset))
+    poke ((p `plusPtr` 356 :: Ptr CFloat)) (CFloat (maxInterpolationOffset))
+    poke ((p `plusPtr` 360 :: Ptr Word32)) (subPixelInterpolationOffsetBits)
+    poke ((p `plusPtr` 364 :: Ptr Word32)) (maxFramebufferWidth)
+    poke ((p `plusPtr` 368 :: Ptr Word32)) (maxFramebufferHeight)
+    poke ((p `plusPtr` 372 :: Ptr Word32)) (maxFramebufferLayers)
+    poke ((p `plusPtr` 376 :: Ptr SampleCountFlags)) (framebufferColorSampleCounts)
+    poke ((p `plusPtr` 380 :: Ptr SampleCountFlags)) (framebufferDepthSampleCounts)
+    poke ((p `plusPtr` 384 :: Ptr SampleCountFlags)) (framebufferStencilSampleCounts)
+    poke ((p `plusPtr` 388 :: Ptr SampleCountFlags)) (framebufferNoAttachmentsSampleCounts)
+    poke ((p `plusPtr` 392 :: Ptr Word32)) (maxColorAttachments)
+    poke ((p `plusPtr` 396 :: Ptr SampleCountFlags)) (sampledImageColorSampleCounts)
+    poke ((p `plusPtr` 400 :: Ptr SampleCountFlags)) (sampledImageIntegerSampleCounts)
+    poke ((p `plusPtr` 404 :: Ptr SampleCountFlags)) (sampledImageDepthSampleCounts)
+    poke ((p `plusPtr` 408 :: Ptr SampleCountFlags)) (sampledImageStencilSampleCounts)
+    poke ((p `plusPtr` 412 :: Ptr SampleCountFlags)) (storageImageSampleCounts)
+    poke ((p `plusPtr` 416 :: Ptr Word32)) (maxSampleMaskWords)
+    poke ((p `plusPtr` 420 :: Ptr Bool32)) (boolToBool32 (timestampComputeAndGraphics))
+    poke ((p `plusPtr` 424 :: Ptr CFloat)) (CFloat (timestampPeriod))
+    poke ((p `plusPtr` 428 :: Ptr Word32)) (maxClipDistances)
+    poke ((p `plusPtr` 432 :: Ptr Word32)) (maxCullDistances)
+    poke ((p `plusPtr` 436 :: Ptr Word32)) (maxCombinedClipAndCullDistances)
+    poke ((p `plusPtr` 440 :: Ptr Word32)) (discreteQueuePriorities)
+    let pPointSizeRange' = lowerArrayPtr ((p `plusPtr` 444 :: Ptr (FixedArray 2 CFloat)))
+    case (pointSizeRange) of
+      (e0, e1) -> do
+        poke (pPointSizeRange' :: Ptr CFloat) (CFloat (e0))
+        poke (pPointSizeRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+    let pLineWidthRange' = lowerArrayPtr ((p `plusPtr` 452 :: Ptr (FixedArray 2 CFloat)))
+    case (lineWidthRange) of
+      (e0, e1) -> do
+        poke (pLineWidthRange' :: Ptr CFloat) (CFloat (e0))
+        poke (pLineWidthRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+    poke ((p `plusPtr` 460 :: Ptr CFloat)) (CFloat (pointSizeGranularity))
+    poke ((p `plusPtr` 464 :: Ptr CFloat)) (CFloat (lineWidthGranularity))
+    poke ((p `plusPtr` 468 :: Ptr Bool32)) (boolToBool32 (strictLines))
+    poke ((p `plusPtr` 472 :: Ptr Bool32)) (boolToBool32 (standardSampleLocations))
+    poke ((p `plusPtr` 480 :: Ptr DeviceSize)) (optimalBufferCopyOffsetAlignment)
+    poke ((p `plusPtr` 488 :: Ptr DeviceSize)) (optimalBufferCopyRowPitchAlignment)
+    poke ((p `plusPtr` 496 :: Ptr DeviceSize)) (nonCoherentAtomSize)
+    f
+  cStructSize = 504
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 56 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 68 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 72 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 76 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 80 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 84 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 88 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 92 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 96 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 100 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 104 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 108 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 112 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 116 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 120 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 124 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 128 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 132 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 136 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 140 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 144 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 148 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 152 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 156 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 160 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 164 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 168 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 172 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 176 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 180 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 184 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 188 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 192 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 196 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 200 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 204 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 208 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 212 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 216 :: Ptr Word32)) (zero)
+    let pMaxComputeWorkGroupCount' = lowerArrayPtr ((p `plusPtr` 220 :: Ptr (FixedArray 3 Word32)))
+    case ((zero, zero, zero)) of
+      (e0, e1, e2) -> do
+        poke (pMaxComputeWorkGroupCount' :: Ptr Word32) (e0)
+        poke (pMaxComputeWorkGroupCount' `plusPtr` 4 :: Ptr Word32) (e1)
+        poke (pMaxComputeWorkGroupCount' `plusPtr` 8 :: Ptr Word32) (e2)
+    poke ((p `plusPtr` 232 :: Ptr Word32)) (zero)
+    let pMaxComputeWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 236 :: Ptr (FixedArray 3 Word32)))
+    case ((zero, zero, zero)) of
+      (e0, e1, e2) -> do
+        poke (pMaxComputeWorkGroupSize' :: Ptr Word32) (e0)
+        poke (pMaxComputeWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
+        poke (pMaxComputeWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
+    poke ((p `plusPtr` 248 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 252 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 256 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 260 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 264 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 268 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 272 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 276 :: Ptr Word32)) (zero)
+    let pMaxViewportDimensions' = lowerArrayPtr ((p `plusPtr` 280 :: Ptr (FixedArray 2 Word32)))
+    case ((zero, zero)) of
+      (e0, e1) -> do
+        poke (pMaxViewportDimensions' :: Ptr Word32) (e0)
+        poke (pMaxViewportDimensions' `plusPtr` 4 :: Ptr Word32) (e1)
+    let pViewportBoundsRange' = lowerArrayPtr ((p `plusPtr` 288 :: Ptr (FixedArray 2 CFloat)))
+    case ((zero, zero)) of
+      (e0, e1) -> do
+        poke (pViewportBoundsRange' :: Ptr CFloat) (CFloat (e0))
+        poke (pViewportBoundsRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+    poke ((p `plusPtr` 296 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 304 :: Ptr CSize)) (CSize (zero))
+    poke ((p `plusPtr` 312 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 320 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 328 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 336 :: Ptr Int32)) (zero)
+    poke ((p `plusPtr` 340 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 344 :: Ptr Int32)) (zero)
+    poke ((p `plusPtr` 348 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 352 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 356 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 360 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 364 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 368 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 372 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 392 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 416 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 420 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 424 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 428 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 432 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 436 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 440 :: Ptr Word32)) (zero)
+    let pPointSizeRange' = lowerArrayPtr ((p `plusPtr` 444 :: Ptr (FixedArray 2 CFloat)))
+    case ((zero, zero)) of
+      (e0, e1) -> do
+        poke (pPointSizeRange' :: Ptr CFloat) (CFloat (e0))
+        poke (pPointSizeRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+    let pLineWidthRange' = lowerArrayPtr ((p `plusPtr` 452 :: Ptr (FixedArray 2 CFloat)))
+    case ((zero, zero)) of
+      (e0, e1) -> do
+        poke (pLineWidthRange' :: Ptr CFloat) (CFloat (e0))
+        poke (pLineWidthRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+    poke ((p `plusPtr` 460 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 464 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 468 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 472 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 480 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 488 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 496 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceLimits where
+  peekCStruct p = do
+    maxImageDimension1D <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    maxImageDimension2D <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    maxImageDimension3D <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    maxImageDimensionCube <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    maxImageArrayLayers <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxTexelBufferElements <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    maxUniformBufferRange <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    maxStorageBufferRange <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    maxPushConstantsSize <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    maxMemoryAllocationCount <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
+    maxSamplerAllocationCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    bufferImageGranularity <- peek @DeviceSize ((p `plusPtr` 48 :: Ptr DeviceSize))
+    sparseAddressSpaceSize <- peek @DeviceSize ((p `plusPtr` 56 :: Ptr DeviceSize))
+    maxBoundDescriptorSets <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    maxPerStageDescriptorSamplers <- peek @Word32 ((p `plusPtr` 68 :: Ptr Word32))
+    maxPerStageDescriptorUniformBuffers <- peek @Word32 ((p `plusPtr` 72 :: Ptr Word32))
+    maxPerStageDescriptorStorageBuffers <- peek @Word32 ((p `plusPtr` 76 :: Ptr Word32))
+    maxPerStageDescriptorSampledImages <- peek @Word32 ((p `plusPtr` 80 :: Ptr Word32))
+    maxPerStageDescriptorStorageImages <- peek @Word32 ((p `plusPtr` 84 :: Ptr Word32))
+    maxPerStageDescriptorInputAttachments <- peek @Word32 ((p `plusPtr` 88 :: Ptr Word32))
+    maxPerStageResources <- peek @Word32 ((p `plusPtr` 92 :: Ptr Word32))
+    maxDescriptorSetSamplers <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32))
+    maxDescriptorSetUniformBuffers <- peek @Word32 ((p `plusPtr` 100 :: Ptr Word32))
+    maxDescriptorSetUniformBuffersDynamic <- peek @Word32 ((p `plusPtr` 104 :: Ptr Word32))
+    maxDescriptorSetStorageBuffers <- peek @Word32 ((p `plusPtr` 108 :: Ptr Word32))
+    maxDescriptorSetStorageBuffersDynamic <- peek @Word32 ((p `plusPtr` 112 :: Ptr Word32))
+    maxDescriptorSetSampledImages <- peek @Word32 ((p `plusPtr` 116 :: Ptr Word32))
+    maxDescriptorSetStorageImages <- peek @Word32 ((p `plusPtr` 120 :: Ptr Word32))
+    maxDescriptorSetInputAttachments <- peek @Word32 ((p `plusPtr` 124 :: Ptr Word32))
+    maxVertexInputAttributes <- peek @Word32 ((p `plusPtr` 128 :: Ptr Word32))
+    maxVertexInputBindings <- peek @Word32 ((p `plusPtr` 132 :: Ptr Word32))
+    maxVertexInputAttributeOffset <- peek @Word32 ((p `plusPtr` 136 :: Ptr Word32))
+    maxVertexInputBindingStride <- peek @Word32 ((p `plusPtr` 140 :: Ptr Word32))
+    maxVertexOutputComponents <- peek @Word32 ((p `plusPtr` 144 :: Ptr Word32))
+    maxTessellationGenerationLevel <- peek @Word32 ((p `plusPtr` 148 :: Ptr Word32))
+    maxTessellationPatchSize <- peek @Word32 ((p `plusPtr` 152 :: Ptr Word32))
+    maxTessellationControlPerVertexInputComponents <- peek @Word32 ((p `plusPtr` 156 :: Ptr Word32))
+    maxTessellationControlPerVertexOutputComponents <- peek @Word32 ((p `plusPtr` 160 :: Ptr Word32))
+    maxTessellationControlPerPatchOutputComponents <- peek @Word32 ((p `plusPtr` 164 :: Ptr Word32))
+    maxTessellationControlTotalOutputComponents <- peek @Word32 ((p `plusPtr` 168 :: Ptr Word32))
+    maxTessellationEvaluationInputComponents <- peek @Word32 ((p `plusPtr` 172 :: Ptr Word32))
+    maxTessellationEvaluationOutputComponents <- peek @Word32 ((p `plusPtr` 176 :: Ptr Word32))
+    maxGeometryShaderInvocations <- peek @Word32 ((p `plusPtr` 180 :: Ptr Word32))
+    maxGeometryInputComponents <- peek @Word32 ((p `plusPtr` 184 :: Ptr Word32))
+    maxGeometryOutputComponents <- peek @Word32 ((p `plusPtr` 188 :: Ptr Word32))
+    maxGeometryOutputVertices <- peek @Word32 ((p `plusPtr` 192 :: Ptr Word32))
+    maxGeometryTotalOutputComponents <- peek @Word32 ((p `plusPtr` 196 :: Ptr Word32))
+    maxFragmentInputComponents <- peek @Word32 ((p `plusPtr` 200 :: Ptr Word32))
+    maxFragmentOutputAttachments <- peek @Word32 ((p `plusPtr` 204 :: Ptr Word32))
+    maxFragmentDualSrcAttachments <- peek @Word32 ((p `plusPtr` 208 :: Ptr Word32))
+    maxFragmentCombinedOutputResources <- peek @Word32 ((p `plusPtr` 212 :: Ptr Word32))
+    maxComputeSharedMemorySize <- peek @Word32 ((p `plusPtr` 216 :: Ptr Word32))
+    let pmaxComputeWorkGroupCount = lowerArrayPtr @Word32 ((p `plusPtr` 220 :: Ptr (FixedArray 3 Word32)))
+    maxComputeWorkGroupCount0 <- peek @Word32 ((pmaxComputeWorkGroupCount `advancePtrBytes` 0 :: Ptr Word32))
+    maxComputeWorkGroupCount1 <- peek @Word32 ((pmaxComputeWorkGroupCount `advancePtrBytes` 4 :: Ptr Word32))
+    maxComputeWorkGroupCount2 <- peek @Word32 ((pmaxComputeWorkGroupCount `advancePtrBytes` 8 :: Ptr Word32))
+    maxComputeWorkGroupInvocations <- peek @Word32 ((p `plusPtr` 232 :: Ptr Word32))
+    let pmaxComputeWorkGroupSize = lowerArrayPtr @Word32 ((p `plusPtr` 236 :: Ptr (FixedArray 3 Word32)))
+    maxComputeWorkGroupSize0 <- peek @Word32 ((pmaxComputeWorkGroupSize `advancePtrBytes` 0 :: Ptr Word32))
+    maxComputeWorkGroupSize1 <- peek @Word32 ((pmaxComputeWorkGroupSize `advancePtrBytes` 4 :: Ptr Word32))
+    maxComputeWorkGroupSize2 <- peek @Word32 ((pmaxComputeWorkGroupSize `advancePtrBytes` 8 :: Ptr Word32))
+    subPixelPrecisionBits <- peek @Word32 ((p `plusPtr` 248 :: Ptr Word32))
+    subTexelPrecisionBits <- peek @Word32 ((p `plusPtr` 252 :: Ptr Word32))
+    mipmapPrecisionBits <- peek @Word32 ((p `plusPtr` 256 :: Ptr Word32))
+    maxDrawIndexedIndexValue <- peek @Word32 ((p `plusPtr` 260 :: Ptr Word32))
+    maxDrawIndirectCount <- peek @Word32 ((p `plusPtr` 264 :: Ptr Word32))
+    maxSamplerLodBias <- peek @CFloat ((p `plusPtr` 268 :: Ptr CFloat))
+    maxSamplerAnisotropy <- peek @CFloat ((p `plusPtr` 272 :: Ptr CFloat))
+    maxViewports <- peek @Word32 ((p `plusPtr` 276 :: Ptr Word32))
+    let pmaxViewportDimensions = lowerArrayPtr @Word32 ((p `plusPtr` 280 :: Ptr (FixedArray 2 Word32)))
+    maxViewportDimensions0 <- peek @Word32 ((pmaxViewportDimensions `advancePtrBytes` 0 :: Ptr Word32))
+    maxViewportDimensions1 <- peek @Word32 ((pmaxViewportDimensions `advancePtrBytes` 4 :: Ptr Word32))
+    let pviewportBoundsRange = lowerArrayPtr @CFloat ((p `plusPtr` 288 :: Ptr (FixedArray 2 CFloat)))
+    viewportBoundsRange0 <- peek @CFloat ((pviewportBoundsRange `advancePtrBytes` 0 :: Ptr CFloat))
+    viewportBoundsRange1 <- peek @CFloat ((pviewportBoundsRange `advancePtrBytes` 4 :: Ptr CFloat))
+    viewportSubPixelBits <- peek @Word32 ((p `plusPtr` 296 :: Ptr Word32))
+    minMemoryMapAlignment <- peek @CSize ((p `plusPtr` 304 :: Ptr CSize))
+    minTexelBufferOffsetAlignment <- peek @DeviceSize ((p `plusPtr` 312 :: Ptr DeviceSize))
+    minUniformBufferOffsetAlignment <- peek @DeviceSize ((p `plusPtr` 320 :: Ptr DeviceSize))
+    minStorageBufferOffsetAlignment <- peek @DeviceSize ((p `plusPtr` 328 :: Ptr DeviceSize))
+    minTexelOffset <- peek @Int32 ((p `plusPtr` 336 :: Ptr Int32))
+    maxTexelOffset <- peek @Word32 ((p `plusPtr` 340 :: Ptr Word32))
+    minTexelGatherOffset <- peek @Int32 ((p `plusPtr` 344 :: Ptr Int32))
+    maxTexelGatherOffset <- peek @Word32 ((p `plusPtr` 348 :: Ptr Word32))
+    minInterpolationOffset <- peek @CFloat ((p `plusPtr` 352 :: Ptr CFloat))
+    maxInterpolationOffset <- peek @CFloat ((p `plusPtr` 356 :: Ptr CFloat))
+    subPixelInterpolationOffsetBits <- peek @Word32 ((p `plusPtr` 360 :: Ptr Word32))
+    maxFramebufferWidth <- peek @Word32 ((p `plusPtr` 364 :: Ptr Word32))
+    maxFramebufferHeight <- peek @Word32 ((p `plusPtr` 368 :: Ptr Word32))
+    maxFramebufferLayers <- peek @Word32 ((p `plusPtr` 372 :: Ptr Word32))
+    framebufferColorSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 376 :: Ptr SampleCountFlags))
+    framebufferDepthSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 380 :: Ptr SampleCountFlags))
+    framebufferStencilSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 384 :: Ptr SampleCountFlags))
+    framebufferNoAttachmentsSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 388 :: Ptr SampleCountFlags))
+    maxColorAttachments <- peek @Word32 ((p `plusPtr` 392 :: Ptr Word32))
+    sampledImageColorSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 396 :: Ptr SampleCountFlags))
+    sampledImageIntegerSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 400 :: Ptr SampleCountFlags))
+    sampledImageDepthSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 404 :: Ptr SampleCountFlags))
+    sampledImageStencilSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 408 :: Ptr SampleCountFlags))
+    storageImageSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 412 :: Ptr SampleCountFlags))
+    maxSampleMaskWords <- peek @Word32 ((p `plusPtr` 416 :: Ptr Word32))
+    timestampComputeAndGraphics <- peek @Bool32 ((p `plusPtr` 420 :: Ptr Bool32))
+    timestampPeriod <- peek @CFloat ((p `plusPtr` 424 :: Ptr CFloat))
+    maxClipDistances <- peek @Word32 ((p `plusPtr` 428 :: Ptr Word32))
+    maxCullDistances <- peek @Word32 ((p `plusPtr` 432 :: Ptr Word32))
+    maxCombinedClipAndCullDistances <- peek @Word32 ((p `plusPtr` 436 :: Ptr Word32))
+    discreteQueuePriorities <- peek @Word32 ((p `plusPtr` 440 :: Ptr Word32))
+    let ppointSizeRange = lowerArrayPtr @CFloat ((p `plusPtr` 444 :: Ptr (FixedArray 2 CFloat)))
+    pointSizeRange0 <- peek @CFloat ((ppointSizeRange `advancePtrBytes` 0 :: Ptr CFloat))
+    pointSizeRange1 <- peek @CFloat ((ppointSizeRange `advancePtrBytes` 4 :: Ptr CFloat))
+    let plineWidthRange = lowerArrayPtr @CFloat ((p `plusPtr` 452 :: Ptr (FixedArray 2 CFloat)))
+    lineWidthRange0 <- peek @CFloat ((plineWidthRange `advancePtrBytes` 0 :: Ptr CFloat))
+    lineWidthRange1 <- peek @CFloat ((plineWidthRange `advancePtrBytes` 4 :: Ptr CFloat))
+    pointSizeGranularity <- peek @CFloat ((p `plusPtr` 460 :: Ptr CFloat))
+    lineWidthGranularity <- peek @CFloat ((p `plusPtr` 464 :: Ptr CFloat))
+    strictLines <- peek @Bool32 ((p `plusPtr` 468 :: Ptr Bool32))
+    standardSampleLocations <- peek @Bool32 ((p `plusPtr` 472 :: Ptr Bool32))
+    optimalBufferCopyOffsetAlignment <- peek @DeviceSize ((p `plusPtr` 480 :: Ptr DeviceSize))
+    optimalBufferCopyRowPitchAlignment <- peek @DeviceSize ((p `plusPtr` 488 :: Ptr DeviceSize))
+    nonCoherentAtomSize <- peek @DeviceSize ((p `plusPtr` 496 :: Ptr DeviceSize))
+    pure $ PhysicalDeviceLimits
+             maxImageDimension1D maxImageDimension2D maxImageDimension3D maxImageDimensionCube maxImageArrayLayers maxTexelBufferElements maxUniformBufferRange maxStorageBufferRange maxPushConstantsSize maxMemoryAllocationCount maxSamplerAllocationCount bufferImageGranularity sparseAddressSpaceSize maxBoundDescriptorSets maxPerStageDescriptorSamplers maxPerStageDescriptorUniformBuffers maxPerStageDescriptorStorageBuffers maxPerStageDescriptorSampledImages maxPerStageDescriptorStorageImages maxPerStageDescriptorInputAttachments maxPerStageResources maxDescriptorSetSamplers maxDescriptorSetUniformBuffers maxDescriptorSetUniformBuffersDynamic maxDescriptorSetStorageBuffers maxDescriptorSetStorageBuffersDynamic maxDescriptorSetSampledImages maxDescriptorSetStorageImages maxDescriptorSetInputAttachments maxVertexInputAttributes maxVertexInputBindings maxVertexInputAttributeOffset maxVertexInputBindingStride maxVertexOutputComponents maxTessellationGenerationLevel maxTessellationPatchSize maxTessellationControlPerVertexInputComponents maxTessellationControlPerVertexOutputComponents maxTessellationControlPerPatchOutputComponents maxTessellationControlTotalOutputComponents maxTessellationEvaluationInputComponents maxTessellationEvaluationOutputComponents maxGeometryShaderInvocations maxGeometryInputComponents maxGeometryOutputComponents maxGeometryOutputVertices maxGeometryTotalOutputComponents maxFragmentInputComponents maxFragmentOutputAttachments maxFragmentDualSrcAttachments maxFragmentCombinedOutputResources maxComputeSharedMemorySize ((maxComputeWorkGroupCount0, maxComputeWorkGroupCount1, maxComputeWorkGroupCount2)) maxComputeWorkGroupInvocations ((maxComputeWorkGroupSize0, maxComputeWorkGroupSize1, maxComputeWorkGroupSize2)) subPixelPrecisionBits subTexelPrecisionBits mipmapPrecisionBits maxDrawIndexedIndexValue maxDrawIndirectCount ((\(CFloat a) -> a) maxSamplerLodBias) ((\(CFloat a) -> a) maxSamplerAnisotropy) maxViewports ((maxViewportDimensions0, maxViewportDimensions1)) ((((\(CFloat a) -> a) viewportBoundsRange0), ((\(CFloat a) -> a) viewportBoundsRange1))) viewportSubPixelBits ((\(CSize a) -> a) minMemoryMapAlignment) minTexelBufferOffsetAlignment minUniformBufferOffsetAlignment minStorageBufferOffsetAlignment minTexelOffset maxTexelOffset minTexelGatherOffset maxTexelGatherOffset ((\(CFloat a) -> a) minInterpolationOffset) ((\(CFloat a) -> a) maxInterpolationOffset) subPixelInterpolationOffsetBits maxFramebufferWidth maxFramebufferHeight maxFramebufferLayers framebufferColorSampleCounts framebufferDepthSampleCounts framebufferStencilSampleCounts framebufferNoAttachmentsSampleCounts maxColorAttachments sampledImageColorSampleCounts sampledImageIntegerSampleCounts sampledImageDepthSampleCounts sampledImageStencilSampleCounts storageImageSampleCounts maxSampleMaskWords (bool32ToBool timestampComputeAndGraphics) ((\(CFloat a) -> a) timestampPeriod) maxClipDistances maxCullDistances maxCombinedClipAndCullDistances discreteQueuePriorities ((((\(CFloat a) -> a) pointSizeRange0), ((\(CFloat a) -> a) pointSizeRange1))) ((((\(CFloat a) -> a) lineWidthRange0), ((\(CFloat a) -> a) lineWidthRange1))) ((\(CFloat a) -> a) pointSizeGranularity) ((\(CFloat a) -> a) lineWidthGranularity) (bool32ToBool strictLines) (bool32ToBool standardSampleLocations) optimalBufferCopyOffsetAlignment optimalBufferCopyRowPitchAlignment nonCoherentAtomSize
+
+instance Storable PhysicalDeviceLimits where
+  sizeOf ~_ = 504
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceLimits where
+  zero = PhysicalDeviceLimits
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           (zero, zero, zero)
+           zero
+           (zero, zero, zero)
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           (zero, zero)
+           (zero, zero)
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           (zero, zero)
+           (zero, zero)
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/DeviceInitialization.hs-boot b/src/Vulkan/Core10/DeviceInitialization.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/DeviceInitialization.hs-boot
@@ -0,0 +1,118 @@
+{-# language CPP #-}
+module Vulkan.Core10.DeviceInitialization  ( ApplicationInfo
+                                           , FormatProperties
+                                           , ImageFormatProperties
+                                           , InstanceCreateInfo
+                                           , MemoryHeap
+                                           , MemoryType
+                                           , PhysicalDeviceFeatures
+                                           , PhysicalDeviceLimits
+                                           , PhysicalDeviceMemoryProperties
+                                           , PhysicalDeviceProperties
+                                           , PhysicalDeviceSparseProperties
+                                           , QueueFamilyProperties
+                                           ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data ApplicationInfo
+
+instance ToCStruct ApplicationInfo
+instance Show ApplicationInfo
+
+instance FromCStruct ApplicationInfo
+
+
+data FormatProperties
+
+instance ToCStruct FormatProperties
+instance Show FormatProperties
+
+instance FromCStruct FormatProperties
+
+
+data ImageFormatProperties
+
+instance ToCStruct ImageFormatProperties
+instance Show ImageFormatProperties
+
+instance FromCStruct ImageFormatProperties
+
+
+type role InstanceCreateInfo nominal
+data InstanceCreateInfo (es :: [Type])
+
+instance (Extendss InstanceCreateInfo es, PokeChain es) => ToCStruct (InstanceCreateInfo es)
+instance Show (Chain es) => Show (InstanceCreateInfo es)
+
+instance (Extendss InstanceCreateInfo es, PeekChain es) => FromCStruct (InstanceCreateInfo es)
+
+
+data MemoryHeap
+
+instance ToCStruct MemoryHeap
+instance Show MemoryHeap
+
+instance FromCStruct MemoryHeap
+
+
+data MemoryType
+
+instance ToCStruct MemoryType
+instance Show MemoryType
+
+instance FromCStruct MemoryType
+
+
+data PhysicalDeviceFeatures
+
+instance ToCStruct PhysicalDeviceFeatures
+instance Show PhysicalDeviceFeatures
+
+instance FromCStruct PhysicalDeviceFeatures
+
+
+data PhysicalDeviceLimits
+
+instance ToCStruct PhysicalDeviceLimits
+instance Show PhysicalDeviceLimits
+
+instance FromCStruct PhysicalDeviceLimits
+
+
+data PhysicalDeviceMemoryProperties
+
+instance ToCStruct PhysicalDeviceMemoryProperties
+instance Show PhysicalDeviceMemoryProperties
+
+instance FromCStruct PhysicalDeviceMemoryProperties
+
+
+data PhysicalDeviceProperties
+
+instance ToCStruct PhysicalDeviceProperties
+instance Show PhysicalDeviceProperties
+
+instance FromCStruct PhysicalDeviceProperties
+
+
+data PhysicalDeviceSparseProperties
+
+instance ToCStruct PhysicalDeviceSparseProperties
+instance Show PhysicalDeviceSparseProperties
+
+instance FromCStruct PhysicalDeviceSparseProperties
+
+
+data QueueFamilyProperties
+
+instance ToCStruct QueueFamilyProperties
+instance Show QueueFamilyProperties
+
+instance FromCStruct QueueFamilyProperties
+
diff --git a/src/Vulkan/Core10/Enums.hs b/src/Vulkan/Core10/Enums.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums.hs
@@ -0,0 +1,193 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums  ( module Vulkan.Core10.Enums.AccessFlagBits
+                            , module Vulkan.Core10.Enums.AttachmentDescriptionFlagBits
+                            , module Vulkan.Core10.Enums.AttachmentLoadOp
+                            , module Vulkan.Core10.Enums.AttachmentStoreOp
+                            , module Vulkan.Core10.Enums.BlendFactor
+                            , module Vulkan.Core10.Enums.BlendOp
+                            , module Vulkan.Core10.Enums.BorderColor
+                            , module Vulkan.Core10.Enums.BufferCreateFlagBits
+                            , module Vulkan.Core10.Enums.BufferUsageFlagBits
+                            , module Vulkan.Core10.Enums.BufferViewCreateFlags
+                            , module Vulkan.Core10.Enums.ColorComponentFlagBits
+                            , module Vulkan.Core10.Enums.CommandBufferLevel
+                            , module Vulkan.Core10.Enums.CommandBufferResetFlagBits
+                            , module Vulkan.Core10.Enums.CommandBufferUsageFlagBits
+                            , module Vulkan.Core10.Enums.CommandPoolCreateFlagBits
+                            , module Vulkan.Core10.Enums.CommandPoolResetFlagBits
+                            , module Vulkan.Core10.Enums.CompareOp
+                            , module Vulkan.Core10.Enums.ComponentSwizzle
+                            , module Vulkan.Core10.Enums.CullModeFlagBits
+                            , module Vulkan.Core10.Enums.DependencyFlagBits
+                            , module Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits
+                            , module Vulkan.Core10.Enums.DescriptorPoolResetFlags
+                            , module Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits
+                            , module Vulkan.Core10.Enums.DescriptorType
+                            , module Vulkan.Core10.Enums.DeviceCreateFlags
+                            , module Vulkan.Core10.Enums.DeviceQueueCreateFlagBits
+                            , module Vulkan.Core10.Enums.DynamicState
+                            , module Vulkan.Core10.Enums.EventCreateFlags
+                            , module Vulkan.Core10.Enums.FenceCreateFlagBits
+                            , module Vulkan.Core10.Enums.Filter
+                            , module Vulkan.Core10.Enums.Format
+                            , module Vulkan.Core10.Enums.FormatFeatureFlagBits
+                            , module Vulkan.Core10.Enums.FramebufferCreateFlagBits
+                            , module Vulkan.Core10.Enums.FrontFace
+                            , module Vulkan.Core10.Enums.ImageAspectFlagBits
+                            , module Vulkan.Core10.Enums.ImageCreateFlagBits
+                            , module Vulkan.Core10.Enums.ImageLayout
+                            , module Vulkan.Core10.Enums.ImageTiling
+                            , module Vulkan.Core10.Enums.ImageType
+                            , module Vulkan.Core10.Enums.ImageUsageFlagBits
+                            , module Vulkan.Core10.Enums.ImageViewCreateFlagBits
+                            , module Vulkan.Core10.Enums.ImageViewType
+                            , module Vulkan.Core10.Enums.IndexType
+                            , module Vulkan.Core10.Enums.InstanceCreateFlags
+                            , module Vulkan.Core10.Enums.InternalAllocationType
+                            , module Vulkan.Core10.Enums.LogicOp
+                            , module Vulkan.Core10.Enums.MemoryHeapFlagBits
+                            , module Vulkan.Core10.Enums.MemoryMapFlags
+                            , module Vulkan.Core10.Enums.MemoryPropertyFlagBits
+                            , module Vulkan.Core10.Enums.ObjectType
+                            , module Vulkan.Core10.Enums.PhysicalDeviceType
+                            , module Vulkan.Core10.Enums.PipelineBindPoint
+                            , module Vulkan.Core10.Enums.PipelineCacheCreateFlagBits
+                            , module Vulkan.Core10.Enums.PipelineCacheHeaderVersion
+                            , module Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags
+                            , module Vulkan.Core10.Enums.PipelineCreateFlagBits
+                            , module Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags
+                            , module Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags
+                            , module Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags
+                            , module Vulkan.Core10.Enums.PipelineLayoutCreateFlags
+                            , module Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags
+                            , module Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags
+                            , module Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits
+                            , module Vulkan.Core10.Enums.PipelineStageFlagBits
+                            , module Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags
+                            , module Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags
+                            , module Vulkan.Core10.Enums.PipelineViewportStateCreateFlags
+                            , module Vulkan.Core10.Enums.PolygonMode
+                            , module Vulkan.Core10.Enums.PrimitiveTopology
+                            , module Vulkan.Core10.Enums.QueryControlFlagBits
+                            , module Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits
+                            , module Vulkan.Core10.Enums.QueryPoolCreateFlags
+                            , module Vulkan.Core10.Enums.QueryResultFlagBits
+                            , module Vulkan.Core10.Enums.QueryType
+                            , module Vulkan.Core10.Enums.QueueFlagBits
+                            , module Vulkan.Core10.Enums.RenderPassCreateFlagBits
+                            , module Vulkan.Core10.Enums.Result
+                            , module Vulkan.Core10.Enums.SampleCountFlagBits
+                            , module Vulkan.Core10.Enums.SamplerAddressMode
+                            , module Vulkan.Core10.Enums.SamplerCreateFlagBits
+                            , module Vulkan.Core10.Enums.SamplerMipmapMode
+                            , module Vulkan.Core10.Enums.SemaphoreCreateFlags
+                            , module Vulkan.Core10.Enums.ShaderModuleCreateFlagBits
+                            , module Vulkan.Core10.Enums.ShaderStageFlagBits
+                            , module Vulkan.Core10.Enums.SharingMode
+                            , module Vulkan.Core10.Enums.SparseImageFormatFlagBits
+                            , module Vulkan.Core10.Enums.SparseMemoryBindFlagBits
+                            , module Vulkan.Core10.Enums.StencilFaceFlagBits
+                            , module Vulkan.Core10.Enums.StencilOp
+                            , module Vulkan.Core10.Enums.StructureType
+                            , module Vulkan.Core10.Enums.SubpassContents
+                            , module Vulkan.Core10.Enums.SubpassDescriptionFlagBits
+                            , module Vulkan.Core10.Enums.SystemAllocationScope
+                            , module Vulkan.Core10.Enums.VendorId
+                            , module Vulkan.Core10.Enums.VertexInputRate
+                            ) where
+import Vulkan.Core10.Enums.AccessFlagBits
+import Vulkan.Core10.Enums.AttachmentDescriptionFlagBits
+import Vulkan.Core10.Enums.AttachmentLoadOp
+import Vulkan.Core10.Enums.AttachmentStoreOp
+import Vulkan.Core10.Enums.BlendFactor
+import Vulkan.Core10.Enums.BlendOp
+import Vulkan.Core10.Enums.BorderColor
+import Vulkan.Core10.Enums.BufferCreateFlagBits
+import Vulkan.Core10.Enums.BufferUsageFlagBits
+import Vulkan.Core10.Enums.BufferViewCreateFlags
+import Vulkan.Core10.Enums.ColorComponentFlagBits
+import Vulkan.Core10.Enums.CommandBufferLevel
+import Vulkan.Core10.Enums.CommandBufferResetFlagBits
+import Vulkan.Core10.Enums.CommandBufferUsageFlagBits
+import Vulkan.Core10.Enums.CommandPoolCreateFlagBits
+import Vulkan.Core10.Enums.CommandPoolResetFlagBits
+import Vulkan.Core10.Enums.CompareOp
+import Vulkan.Core10.Enums.ComponentSwizzle
+import Vulkan.Core10.Enums.CullModeFlagBits
+import Vulkan.Core10.Enums.DependencyFlagBits
+import Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits
+import Vulkan.Core10.Enums.DescriptorPoolResetFlags
+import Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits
+import Vulkan.Core10.Enums.DescriptorType
+import Vulkan.Core10.Enums.DeviceCreateFlags
+import Vulkan.Core10.Enums.DeviceQueueCreateFlagBits
+import Vulkan.Core10.Enums.DynamicState
+import Vulkan.Core10.Enums.EventCreateFlags
+import Vulkan.Core10.Enums.FenceCreateFlagBits
+import Vulkan.Core10.Enums.Filter
+import Vulkan.Core10.Enums.Format
+import Vulkan.Core10.Enums.FormatFeatureFlagBits
+import Vulkan.Core10.Enums.FramebufferCreateFlagBits
+import Vulkan.Core10.Enums.FrontFace
+import Vulkan.Core10.Enums.ImageAspectFlagBits
+import Vulkan.Core10.Enums.ImageCreateFlagBits
+import Vulkan.Core10.Enums.ImageLayout
+import Vulkan.Core10.Enums.ImageTiling
+import Vulkan.Core10.Enums.ImageType
+import Vulkan.Core10.Enums.ImageUsageFlagBits
+import Vulkan.Core10.Enums.ImageViewCreateFlagBits
+import Vulkan.Core10.Enums.ImageViewType
+import Vulkan.Core10.Enums.IndexType
+import Vulkan.Core10.Enums.InstanceCreateFlags
+import Vulkan.Core10.Enums.InternalAllocationType
+import Vulkan.Core10.Enums.LogicOp
+import Vulkan.Core10.Enums.MemoryHeapFlagBits
+import Vulkan.Core10.Enums.MemoryMapFlags
+import Vulkan.Core10.Enums.MemoryPropertyFlagBits
+import Vulkan.Core10.Enums.ObjectType
+import Vulkan.Core10.Enums.PhysicalDeviceType
+import Vulkan.Core10.Enums.PipelineBindPoint
+import Vulkan.Core10.Enums.PipelineCacheCreateFlagBits
+import Vulkan.Core10.Enums.PipelineCacheHeaderVersion
+import Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags
+import Vulkan.Core10.Enums.PipelineCreateFlagBits
+import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags
+import Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags
+import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags
+import Vulkan.Core10.Enums.PipelineLayoutCreateFlags
+import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags
+import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags
+import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits
+import Vulkan.Core10.Enums.PipelineStageFlagBits
+import Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags
+import Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags
+import Vulkan.Core10.Enums.PipelineViewportStateCreateFlags
+import Vulkan.Core10.Enums.PolygonMode
+import Vulkan.Core10.Enums.PrimitiveTopology
+import Vulkan.Core10.Enums.QueryControlFlagBits
+import Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits
+import Vulkan.Core10.Enums.QueryPoolCreateFlags
+import Vulkan.Core10.Enums.QueryResultFlagBits
+import Vulkan.Core10.Enums.QueryType
+import Vulkan.Core10.Enums.QueueFlagBits
+import Vulkan.Core10.Enums.RenderPassCreateFlagBits
+import Vulkan.Core10.Enums.Result
+import Vulkan.Core10.Enums.SampleCountFlagBits
+import Vulkan.Core10.Enums.SamplerAddressMode
+import Vulkan.Core10.Enums.SamplerCreateFlagBits
+import Vulkan.Core10.Enums.SamplerMipmapMode
+import Vulkan.Core10.Enums.SemaphoreCreateFlags
+import Vulkan.Core10.Enums.ShaderModuleCreateFlagBits
+import Vulkan.Core10.Enums.ShaderStageFlagBits
+import Vulkan.Core10.Enums.SharingMode
+import Vulkan.Core10.Enums.SparseImageFormatFlagBits
+import Vulkan.Core10.Enums.SparseMemoryBindFlagBits
+import Vulkan.Core10.Enums.StencilFaceFlagBits
+import Vulkan.Core10.Enums.StencilOp
+import Vulkan.Core10.Enums.StructureType
+import Vulkan.Core10.Enums.SubpassContents
+import Vulkan.Core10.Enums.SubpassDescriptionFlagBits
+import Vulkan.Core10.Enums.SystemAllocationScope
+import Vulkan.Core10.Enums.VendorId
+import Vulkan.Core10.Enums.VertexInputRate
+
diff --git a/src/Vulkan/Core10/Enums/AccessFlagBits.hs b/src/Vulkan/Core10/Enums/AccessFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/AccessFlagBits.hs
@@ -0,0 +1,392 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.AccessFlagBits  ( AccessFlagBits( ACCESS_INDIRECT_COMMAND_READ_BIT
+                                                           , ACCESS_INDEX_READ_BIT
+                                                           , ACCESS_VERTEX_ATTRIBUTE_READ_BIT
+                                                           , ACCESS_UNIFORM_READ_BIT
+                                                           , ACCESS_INPUT_ATTACHMENT_READ_BIT
+                                                           , ACCESS_SHADER_READ_BIT
+                                                           , ACCESS_SHADER_WRITE_BIT
+                                                           , ACCESS_COLOR_ATTACHMENT_READ_BIT
+                                                           , ACCESS_COLOR_ATTACHMENT_WRITE_BIT
+                                                           , ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
+                                                           , ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
+                                                           , ACCESS_TRANSFER_READ_BIT
+                                                           , ACCESS_TRANSFER_WRITE_BIT
+                                                           , ACCESS_HOST_READ_BIT
+                                                           , ACCESS_HOST_WRITE_BIT
+                                                           , ACCESS_MEMORY_READ_BIT
+                                                           , ACCESS_MEMORY_WRITE_BIT
+                                                           , ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV
+                                                           , ACCESS_COMMAND_PREPROCESS_READ_BIT_NV
+                                                           , ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT
+                                                           , ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV
+                                                           , ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
+                                                           , ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
+                                                           , ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT
+                                                           , ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT
+                                                           , ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT
+                                                           , ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT
+                                                           , ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT
+                                                           , ..
+                                                           )
+                                           , AccessFlags
+                                           ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkAccessFlagBits - Bitmask specifying memory access types that will
+-- participate in a memory dependency
+--
+-- = Description
+--
+-- 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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                                                                       |
+-- +====================================================+=================================================================================================+
+-- | 'ACCESS_INDIRECT_COMMAND_READ_BIT'                 | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'                    |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_INDEX_READ_BIT'                            | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_INPUT_BIT'                     |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_VERTEX_ATTRIBUTE_READ_BIT'                 | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_INPUT_BIT'                     |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_UNIFORM_READ_BIT'                          | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                  |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                  |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',          |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                   |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',     |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',  |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                 |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or              |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                   |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_SHADER_READ_BIT'                           | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                  |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                  |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',          |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                   |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',     |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',  |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                 |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or              |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                   |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_SHADER_WRITE_BIT'                          | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV',                  |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV',                  |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR',          |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT',                   |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',     |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',  |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT',                 |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT', or              |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMPUTE_SHADER_BIT'                   |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_INPUT_ATTACHMENT_READ_BIT'                 | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_SHADER_BIT'                  |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_COLOR_ATTACHMENT_READ_BIT'                 | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'          |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_COLOR_ATTACHMENT_WRITE_BIT'                | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'          |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT'         | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT', or         |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'              |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT', or         |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'              |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_TRANSFER_READ_BIT'                         | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'                         |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_TRANSFER_WRITE_BIT'                        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'                         |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_HOST_READ_BIT'                             | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'                             |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_HOST_WRITE_BIT'                            | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'                             |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_MEMORY_READ_BIT'                           | Any                                                                                             |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_MEMORY_WRITE_BIT'                          | Any                                                                                             |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT' | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'          |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_COMMAND_PREPROCESS_READ_BIT_NV'            | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'            |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV'           | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'            |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT'        | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'        |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV'            | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'            |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT'          | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'           |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT'  | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'           |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT'   | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'                    |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'       | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR', or       |
+-- |                                                    | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'      | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+-- | 'ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT'         | 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'     |
+-- +----------------------------------------------------+-------------------------------------------------------------------------------------------------+
+--
+-- Supported access types
+--
+-- If a memory object does not have the
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+-- property, then 'Vulkan.Core10.Memory.flushMappedMemoryRanges' /must/ be
+-- called in order to guarantee that writes to the memory object from the
+-- host are made available to the host domain, where they /can/ be further
+-- made available to the device domain via a domain operation. Similarly,
+-- 'Vulkan.Core10.Memory.invalidateMappedMemoryRanges' /must/ be called to
+-- guarantee that writes which are available to the host domain are made
+-- visible to host operations.
+--
+-- If the memory object does have the
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'
+-- property flag, writes to the memory object from the host are
+-- automatically made available to the host domain. Similarly, writes made
+-- available to the host domain are automatically made visible to the host.
+--
+-- Note
+--
+-- The 'Vulkan.Core10.Queue.queueSubmit' command
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-host-writes automatically performs a domain operation from host to device>
+-- for all writes performed before the command executes, 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
+--
+-- 'AccessFlags'
+newtype AccessFlagBits = AccessFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'ACCESS_INDIRECT_COMMAND_READ_BIT' specifies read access to indirect
+-- command data read as part of an indirect drawing or dispatch command.
+pattern ACCESS_INDIRECT_COMMAND_READ_BIT = AccessFlagBits 0x00000001
+-- | 'ACCESS_INDEX_READ_BIT' specifies read access to an index buffer as part
+-- of an indexed drawing command, bound by
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'.
+pattern ACCESS_INDEX_READ_BIT = AccessFlagBits 0x00000002
+-- | 'ACCESS_VERTEX_ATTRIBUTE_READ_BIT' specifies read access to a vertex
+-- buffer as part of a drawing command, bound by
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers'.
+pattern ACCESS_VERTEX_ATTRIBUTE_READ_BIT = AccessFlagBits 0x00000004
+-- | 'ACCESS_UNIFORM_READ_BIT' specifies read access to a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer uniform buffer>.
+pattern ACCESS_UNIFORM_READ_BIT = AccessFlagBits 0x00000008
+-- | 'ACCESS_INPUT_ATTACHMENT_READ_BIT' specifies read access to an
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass input attachment>
+-- within a render pass during fragment shading.
+pattern ACCESS_INPUT_ATTACHMENT_READ_BIT = AccessFlagBits 0x00000010
+-- | 'ACCESS_SHADER_READ_BIT' specifies read access to a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer storage buffer>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-physical-storage-buffer physical storage buffer>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer uniform texel buffer>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer storage texel buffer>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled image>,
+-- or
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image>.
+pattern ACCESS_SHADER_READ_BIT = AccessFlagBits 0x00000020
+-- | 'ACCESS_SHADER_WRITE_BIT' specifies write access to a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer storage buffer>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-physical-storage-buffer physical storage buffer>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer storage texel buffer>,
+-- or
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image>.
+pattern ACCESS_SHADER_WRITE_BIT = AccessFlagBits 0x00000040
+-- | 'ACCESS_COLOR_ATTACHMENT_READ_BIT' specifies read access to a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass color attachment>,
+-- such as via
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blending blending>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-logicop logic operations>,
+-- or via certain
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load operations>.
+-- It does not include
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operations>.
+pattern ACCESS_COLOR_ATTACHMENT_READ_BIT = AccessFlagBits 0x00000080
+-- | 'ACCESS_COLOR_ATTACHMENT_WRITE_BIT' specifies write access to a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass color, resolve, or depth\/stencil resolve attachment>
+-- during a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass render pass>
+-- or via certain
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load and store operations>.
+pattern ACCESS_COLOR_ATTACHMENT_WRITE_BIT = AccessFlagBits 0x00000100
+-- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT' specifies read access to a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass depth\/stencil attachment>,
+-- via
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-ds-state depth or stencil operations>
+-- or via certain
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load operations>.
+pattern ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = AccessFlagBits 0x00000200
+-- | 'ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT' specifies write access to a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass depth\/stencil attachment>,
+-- via
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-ds-state depth or stencil operations>
+-- or via certain
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load and store operations>.
+pattern ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = AccessFlagBits 0x00000400
+-- | 'ACCESS_TRANSFER_READ_BIT' specifies read access to an image or buffer
+-- in a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy>
+-- operation.
+pattern ACCESS_TRANSFER_READ_BIT = AccessFlagBits 0x00000800
+-- | 'ACCESS_TRANSFER_WRITE_BIT' specifies write access to an image or buffer
+-- in a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear>
+-- or
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy>
+-- operation.
+pattern ACCESS_TRANSFER_WRITE_BIT = AccessFlagBits 0x00001000
+-- | '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.
+pattern ACCESS_HOST_READ_BIT = AccessFlagBits 0x00002000
+-- | '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.
+pattern ACCESS_HOST_WRITE_BIT = AccessFlagBits 0x00004000
+-- | 'ACCESS_MEMORY_READ_BIT' specifies all read accesses. It is always valid
+-- in any access mask, and is treated as equivalent to setting all @READ@
+-- access flags that are valid where it is used.
+pattern ACCESS_MEMORY_READ_BIT = AccessFlagBits 0x00008000
+-- | 'ACCESS_MEMORY_WRITE_BIT' specifies all write accesses. It is always
+-- valid in any access mask, and is treated as equivalent to setting all
+-- @WRITE@ access flags that are valid where it is used.
+pattern ACCESS_MEMORY_WRITE_BIT = AccessFlagBits 0x00010000
+-- | 'ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV' specifies writes to the
+-- 'Vulkan.Core10.Handles.Buffer' preprocess outputs in
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV'.
+pattern ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = AccessFlagBits 0x00040000
+-- | 'ACCESS_COMMAND_PREPROCESS_READ_BIT_NV' specifies reads from
+-- 'Vulkan.Core10.Handles.Buffer' inputs to
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV'.
+pattern ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = AccessFlagBits 0x00020000
+-- | 'ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT' specifies read access to a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>
+-- during dynamic
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops fragment density map operations>
+pattern ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = AccessFlagBits 0x01000000
+-- | 'ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV' specifies read access to a
+-- shading rate image as part of a drawing command, as bound by
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV'.
+pattern ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = AccessFlagBits 0x00800000
+-- | 'ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR' specifies write access to
+-- an acceleration structure as part of a build command.
+pattern ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = AccessFlagBits 0x00400000
+-- | 'ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR' specifies read access to an
+-- acceleration structure as part of a trace or build command.
+pattern ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR = AccessFlagBits 0x00200000
+-- | 'ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT' is similar to
+-- 'ACCESS_COLOR_ATTACHMENT_READ_BIT', but also includes
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operations>.
+pattern ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = AccessFlagBits 0x00080000
+-- | 'ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT' specifies read access to a
+-- predicate as part of conditional rendering.
+pattern ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT = AccessFlagBits 0x00100000
+-- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT' specifies write access
+-- to a transform feedback counter buffer which is written when
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT'
+-- executes.
+pattern ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = AccessFlagBits 0x08000000
+-- | 'ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT' specifies read access
+-- to a transform feedback counter buffer which is read when
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT'
+-- executes.
+pattern ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = AccessFlagBits 0x04000000
+-- | 'ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT' specifies write access to a
+-- transform feedback buffer made when transform feedback is active.
+pattern ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = AccessFlagBits 0x02000000
+
+type AccessFlags = AccessFlagBits
+
+instance Show AccessFlagBits where
+  showsPrec p = \case
+    ACCESS_INDIRECT_COMMAND_READ_BIT -> showString "ACCESS_INDIRECT_COMMAND_READ_BIT"
+    ACCESS_INDEX_READ_BIT -> showString "ACCESS_INDEX_READ_BIT"
+    ACCESS_VERTEX_ATTRIBUTE_READ_BIT -> showString "ACCESS_VERTEX_ATTRIBUTE_READ_BIT"
+    ACCESS_UNIFORM_READ_BIT -> showString "ACCESS_UNIFORM_READ_BIT"
+    ACCESS_INPUT_ATTACHMENT_READ_BIT -> showString "ACCESS_INPUT_ATTACHMENT_READ_BIT"
+    ACCESS_SHADER_READ_BIT -> showString "ACCESS_SHADER_READ_BIT"
+    ACCESS_SHADER_WRITE_BIT -> showString "ACCESS_SHADER_WRITE_BIT"
+    ACCESS_COLOR_ATTACHMENT_READ_BIT -> showString "ACCESS_COLOR_ATTACHMENT_READ_BIT"
+    ACCESS_COLOR_ATTACHMENT_WRITE_BIT -> showString "ACCESS_COLOR_ATTACHMENT_WRITE_BIT"
+    ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT -> showString "ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"
+    ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT -> showString "ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"
+    ACCESS_TRANSFER_READ_BIT -> showString "ACCESS_TRANSFER_READ_BIT"
+    ACCESS_TRANSFER_WRITE_BIT -> showString "ACCESS_TRANSFER_WRITE_BIT"
+    ACCESS_HOST_READ_BIT -> showString "ACCESS_HOST_READ_BIT"
+    ACCESS_HOST_WRITE_BIT -> showString "ACCESS_HOST_WRITE_BIT"
+    ACCESS_MEMORY_READ_BIT -> showString "ACCESS_MEMORY_READ_BIT"
+    ACCESS_MEMORY_WRITE_BIT -> showString "ACCESS_MEMORY_WRITE_BIT"
+    ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV -> showString "ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV"
+    ACCESS_COMMAND_PREPROCESS_READ_BIT_NV -> showString "ACCESS_COMMAND_PREPROCESS_READ_BIT_NV"
+    ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT -> showString "ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT"
+    ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV -> showString "ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV"
+    ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR -> showString "ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"
+    ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR -> showString "ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR"
+    ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT -> showString "ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"
+    ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT -> showString "ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT"
+    ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT -> showString "ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT"
+    ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT -> showString "ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT"
+    ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT -> showString "ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT"
+    AccessFlagBits x -> showParen (p >= 11) (showString "AccessFlagBits 0x" . showHex x)
+
+instance Read AccessFlagBits where
+  readPrec = parens (choose [("ACCESS_INDIRECT_COMMAND_READ_BIT", pure ACCESS_INDIRECT_COMMAND_READ_BIT)
+                            , ("ACCESS_INDEX_READ_BIT", pure ACCESS_INDEX_READ_BIT)
+                            , ("ACCESS_VERTEX_ATTRIBUTE_READ_BIT", pure ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
+                            , ("ACCESS_UNIFORM_READ_BIT", pure ACCESS_UNIFORM_READ_BIT)
+                            , ("ACCESS_INPUT_ATTACHMENT_READ_BIT", pure ACCESS_INPUT_ATTACHMENT_READ_BIT)
+                            , ("ACCESS_SHADER_READ_BIT", pure ACCESS_SHADER_READ_BIT)
+                            , ("ACCESS_SHADER_WRITE_BIT", pure ACCESS_SHADER_WRITE_BIT)
+                            , ("ACCESS_COLOR_ATTACHMENT_READ_BIT", pure ACCESS_COLOR_ATTACHMENT_READ_BIT)
+                            , ("ACCESS_COLOR_ATTACHMENT_WRITE_BIT", pure ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
+                            , ("ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT", pure ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
+                            , ("ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT", pure ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
+                            , ("ACCESS_TRANSFER_READ_BIT", pure ACCESS_TRANSFER_READ_BIT)
+                            , ("ACCESS_TRANSFER_WRITE_BIT", pure ACCESS_TRANSFER_WRITE_BIT)
+                            , ("ACCESS_HOST_READ_BIT", pure ACCESS_HOST_READ_BIT)
+                            , ("ACCESS_HOST_WRITE_BIT", pure ACCESS_HOST_WRITE_BIT)
+                            , ("ACCESS_MEMORY_READ_BIT", pure ACCESS_MEMORY_READ_BIT)
+                            , ("ACCESS_MEMORY_WRITE_BIT", pure ACCESS_MEMORY_WRITE_BIT)
+                            , ("ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV", pure ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV)
+                            , ("ACCESS_COMMAND_PREPROCESS_READ_BIT_NV", pure ACCESS_COMMAND_PREPROCESS_READ_BIT_NV)
+                            , ("ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT", pure ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT)
+                            , ("ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV", pure ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV)
+                            , ("ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR", pure ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR)
+                            , ("ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR", pure ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR)
+                            , ("ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT", pure ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT)
+                            , ("ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT", pure ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT)
+                            , ("ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT", pure ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT)
+                            , ("ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT", pure ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT)
+                            , ("ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT", pure ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "AccessFlagBits")
+                       v <- step readPrec
+                       pure (AccessFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/AttachmentDescriptionFlagBits.hs b/src/Vulkan/Core10/Enums/AttachmentDescriptionFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/AttachmentDescriptionFlagBits.hs
@@ -0,0 +1,50 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.AttachmentDescriptionFlagBits  ( AttachmentDescriptionFlagBits( ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
+                                                                                         , ..
+                                                                                         )
+                                                          , AttachmentDescriptionFlags
+                                                          ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkAttachmentDescriptionFlagBits - Bitmask specifying additional
+-- properties of an attachment
+--
+-- = See Also
+--
+-- 'AttachmentDescriptionFlags'
+newtype AttachmentDescriptionFlagBits = AttachmentDescriptionFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT' specifies that the attachment
+-- aliases the same device memory as other attachments.
+pattern ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = AttachmentDescriptionFlagBits 0x00000001
+
+type AttachmentDescriptionFlags = AttachmentDescriptionFlagBits
+
+instance Show AttachmentDescriptionFlagBits where
+  showsPrec p = \case
+    ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT -> showString "ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"
+    AttachmentDescriptionFlagBits x -> showParen (p >= 11) (showString "AttachmentDescriptionFlagBits 0x" . showHex x)
+
+instance Read AttachmentDescriptionFlagBits where
+  readPrec = parens (choose [("ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT", pure ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "AttachmentDescriptionFlagBits")
+                       v <- step readPrec
+                       pure (AttachmentDescriptionFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/AttachmentLoadOp.hs b/src/Vulkan/Core10/Enums/AttachmentLoadOp.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/AttachmentLoadOp.hs
@@ -0,0 +1,75 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.AttachmentLoadOp  (AttachmentLoadOp( ATTACHMENT_LOAD_OP_LOAD
+                                                              , ATTACHMENT_LOAD_OP_CLEAR
+                                                              , ATTACHMENT_LOAD_OP_DONT_CARE
+                                                              , ..
+                                                              )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkAttachmentLoadOp - Specify how contents of an attachment are treated
+-- at the beginning of a subpass
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pass.AttachmentDescription',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2'
+newtype AttachmentLoadOp = AttachmentLoadOp Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | '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
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT'.
+-- For attachments with a color format, this uses the access type
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_READ_BIT'.
+pattern ATTACHMENT_LOAD_OP_LOAD = AttachmentLoadOp 0
+-- | '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
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'.
+-- For attachments with a color format, this uses the access type
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.
+pattern ATTACHMENT_LOAD_OP_CLEAR = AttachmentLoadOp 1
+-- | '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
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'.
+-- For attachments with a color format, this uses the access type
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.
+pattern ATTACHMENT_LOAD_OP_DONT_CARE = AttachmentLoadOp 2
+{-# complete ATTACHMENT_LOAD_OP_LOAD,
+             ATTACHMENT_LOAD_OP_CLEAR,
+             ATTACHMENT_LOAD_OP_DONT_CARE :: AttachmentLoadOp #-}
+
+instance Show AttachmentLoadOp where
+  showsPrec p = \case
+    ATTACHMENT_LOAD_OP_LOAD -> showString "ATTACHMENT_LOAD_OP_LOAD"
+    ATTACHMENT_LOAD_OP_CLEAR -> showString "ATTACHMENT_LOAD_OP_CLEAR"
+    ATTACHMENT_LOAD_OP_DONT_CARE -> showString "ATTACHMENT_LOAD_OP_DONT_CARE"
+    AttachmentLoadOp x -> showParen (p >= 11) (showString "AttachmentLoadOp " . showsPrec 11 x)
+
+instance Read AttachmentLoadOp where
+  readPrec = parens (choose [("ATTACHMENT_LOAD_OP_LOAD", pure ATTACHMENT_LOAD_OP_LOAD)
+                            , ("ATTACHMENT_LOAD_OP_CLEAR", pure ATTACHMENT_LOAD_OP_CLEAR)
+                            , ("ATTACHMENT_LOAD_OP_DONT_CARE", pure ATTACHMENT_LOAD_OP_DONT_CARE)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "AttachmentLoadOp")
+                       v <- step readPrec
+                       pure (AttachmentLoadOp v)))
+
diff --git a/src/Vulkan/Core10/Enums/AttachmentStoreOp.hs b/src/Vulkan/Core10/Enums/AttachmentStoreOp.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/AttachmentStoreOp.hs
@@ -0,0 +1,80 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.AttachmentStoreOp  (AttachmentStoreOp( ATTACHMENT_STORE_OP_STORE
+                                                                , ATTACHMENT_STORE_OP_DONT_CARE
+                                                                , ATTACHMENT_STORE_OP_NONE_QCOM
+                                                                , ..
+                                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkAttachmentStoreOp - Specify how contents of an attachment are treated
+-- at the end of a subpass
+--
+-- = Description
+--
+-- Note
+--
+-- 'ATTACHMENT_STORE_OP_DONT_CARE' /can/ cause contents generated during
+-- previous render passes to be discarded before reaching memory, even if
+-- no write to the attachment occurs during the current render pass.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pass.AttachmentDescription',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2'
+newtype AttachmentStoreOp = AttachmentStoreOp Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | '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
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'.
+-- For attachments with a color format, this uses the access type
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.
+pattern ATTACHMENT_STORE_OP_STORE = AttachmentStoreOp 0
+-- | '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
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT'.
+-- For attachments with a color format, this uses the access type
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.
+pattern ATTACHMENT_STORE_OP_DONT_CARE = AttachmentStoreOp 1
+-- | 'ATTACHMENT_STORE_OP_NONE_QCOM' specifies that the contents within the
+-- render area were not written during rendering, and /may/ not be written
+-- to memory. If the attachment was written to during the renderpass, the
+-- contents of the attachment will be undefined inside the render area.
+pattern ATTACHMENT_STORE_OP_NONE_QCOM = AttachmentStoreOp 1000301000
+{-# complete ATTACHMENT_STORE_OP_STORE,
+             ATTACHMENT_STORE_OP_DONT_CARE,
+             ATTACHMENT_STORE_OP_NONE_QCOM :: AttachmentStoreOp #-}
+
+instance Show AttachmentStoreOp where
+  showsPrec p = \case
+    ATTACHMENT_STORE_OP_STORE -> showString "ATTACHMENT_STORE_OP_STORE"
+    ATTACHMENT_STORE_OP_DONT_CARE -> showString "ATTACHMENT_STORE_OP_DONT_CARE"
+    ATTACHMENT_STORE_OP_NONE_QCOM -> showString "ATTACHMENT_STORE_OP_NONE_QCOM"
+    AttachmentStoreOp x -> showParen (p >= 11) (showString "AttachmentStoreOp " . showsPrec 11 x)
+
+instance Read AttachmentStoreOp where
+  readPrec = parens (choose [("ATTACHMENT_STORE_OP_STORE", pure ATTACHMENT_STORE_OP_STORE)
+                            , ("ATTACHMENT_STORE_OP_DONT_CARE", pure ATTACHMENT_STORE_OP_DONT_CARE)
+                            , ("ATTACHMENT_STORE_OP_NONE_QCOM", pure ATTACHMENT_STORE_OP_NONE_QCOM)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "AttachmentStoreOp")
+                       v <- step readPrec
+                       pure (AttachmentStoreOp v)))
+
diff --git a/src/Vulkan/Core10/Enums/BlendFactor.hs b/src/Vulkan/Core10/Enums/BlendFactor.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/BlendFactor.hs
@@ -0,0 +1,223 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.BlendFactor  (BlendFactor( BLEND_FACTOR_ZERO
+                                                    , BLEND_FACTOR_ONE
+                                                    , BLEND_FACTOR_SRC_COLOR
+                                                    , BLEND_FACTOR_ONE_MINUS_SRC_COLOR
+                                                    , BLEND_FACTOR_DST_COLOR
+                                                    , BLEND_FACTOR_ONE_MINUS_DST_COLOR
+                                                    , BLEND_FACTOR_SRC_ALPHA
+                                                    , BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
+                                                    , BLEND_FACTOR_DST_ALPHA
+                                                    , BLEND_FACTOR_ONE_MINUS_DST_ALPHA
+                                                    , BLEND_FACTOR_CONSTANT_COLOR
+                                                    , BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
+                                                    , BLEND_FACTOR_CONSTANT_ALPHA
+                                                    , BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
+                                                    , BLEND_FACTOR_SRC_ALPHA_SATURATE
+                                                    , BLEND_FACTOR_SRC1_COLOR
+                                                    , BLEND_FACTOR_ONE_MINUS_SRC1_COLOR
+                                                    , BLEND_FACTOR_SRC1_ALPHA
+                                                    , BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
+                                                    , ..
+                                                    )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkBlendFactor - Framebuffer blending factors
+--
+-- = Description
+--
+-- The semantics of each enum value is described in the table below:
+--
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BlendFactor'                           | RGB Blend Factors   | Alpha  |
+-- |                                         | (Sr,Sg,Sb) or       | Blend  |
+-- |                                         | (Dr,Dg,Db)          | Factor |
+-- |                                         |                     | (Sa or |
+-- |                                         |                     | Da)    |
+-- +=========================================+=====================+========+
+-- | 'BLEND_FACTOR_ZERO'                     | (0,0,0)             | 0      |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_ONE'                      | (1,1,1)             | 1      |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_SRC_COLOR'                | (Rs0,Gs0,Bs0)       | As0    |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_ONE_MINUS_SRC_COLOR'      | (1-Rs0,1-Gs0,1-Bs0) | 1-As0  |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_DST_COLOR'                | (Rd,Gd,Bd)          | Ad     |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_ONE_MINUS_DST_COLOR'      | (1-Rd,1-Gd,1-Bd)    | 1-Ad   |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_SRC_ALPHA'                | (As0,As0,As0)       | As0    |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_ONE_MINUS_SRC_ALPHA'      | (1-As0,1-As0,1-As0) | 1-As0  |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_DST_ALPHA'                | (Ad,Ad,Ad)          | Ad     |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_ONE_MINUS_DST_ALPHA'      | (1-Ad,1-Ad,1-Ad)    | 1-Ad   |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_CONSTANT_COLOR'           | (Rc,Gc,Bc)          | Ac     |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR' | (1-Rc,1-Gc,1-Bc)    | 1-Ac   |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_CONSTANT_ALPHA'           | (Ac,Ac,Ac)          | Ac     |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA' | (1-Ac,1-Ac,1-Ac)    | 1-Ac   |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_SRC_ALPHA_SATURATE'       | (f,f,f); f =        | 1      |
+-- |                                         | min(As0,1-Ad)       |        |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_SRC1_COLOR'               | (Rs1,Gs1,Bs1)       | As1    |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_ONE_MINUS_SRC1_COLOR'     | (1-Rs1,1-Gs1,1-Bs1) | 1-As1  |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_SRC1_ALPHA'               | (As1,As1,As1)       | As1    |
+-- +-----------------------------------------+---------------------+--------+
+-- | 'BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'     | (1-As1,1-As1,1-As1) | 1-As1  |
+-- +-----------------------------------------+---------------------+--------+
+--
+-- Blend Factors
+--
+-- In this table, the following conventions are used:
+--
+-- -   Rs0,Gs0,Bs0 and As0 represent the first source color R, G, B, and A
+--     components, respectively, for the fragment output location
+--     corresponding to the color attachment being blended.
+--
+-- -   Rs1,Gs1,Bs1 and As1 represent the second source color R, G, B, and A
+--     components, respectively, used in dual source blending modes, for
+--     the fragment output location corresponding to the color attachment
+--     being blended.
+--
+-- -   Rd,Gd,Bd and Ad represent the R, G, B, and A components of the
+--     destination color. That is, the color currently in the corresponding
+--     color attachment for this fragment\/sample.
+--
+-- -   Rc,Gc,Bc and Ac represent the blend constant R, G, B, and A
+--     components, respectively.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'
+newtype BlendFactor = BlendFactor Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ZERO"
+pattern BLEND_FACTOR_ZERO = BlendFactor 0
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE"
+pattern BLEND_FACTOR_ONE = BlendFactor 1
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_COLOR"
+pattern BLEND_FACTOR_SRC_COLOR = BlendFactor 2
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR"
+pattern BLEND_FACTOR_ONE_MINUS_SRC_COLOR = BlendFactor 3
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_DST_COLOR"
+pattern BLEND_FACTOR_DST_COLOR = BlendFactor 4
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR"
+pattern BLEND_FACTOR_ONE_MINUS_DST_COLOR = BlendFactor 5
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_ALPHA"
+pattern BLEND_FACTOR_SRC_ALPHA = BlendFactor 6
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"
+pattern BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = BlendFactor 7
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_DST_ALPHA"
+pattern BLEND_FACTOR_DST_ALPHA = BlendFactor 8
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA"
+pattern BLEND_FACTOR_ONE_MINUS_DST_ALPHA = BlendFactor 9
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_CONSTANT_COLOR"
+pattern BLEND_FACTOR_CONSTANT_COLOR = BlendFactor 10
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"
+pattern BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = BlendFactor 11
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_CONSTANT_ALPHA"
+pattern BLEND_FACTOR_CONSTANT_ALPHA = BlendFactor 12
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"
+pattern BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = BlendFactor 13
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE"
+pattern BLEND_FACTOR_SRC_ALPHA_SATURATE = BlendFactor 14
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC1_COLOR"
+pattern BLEND_FACTOR_SRC1_COLOR = BlendFactor 15
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"
+pattern BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = BlendFactor 16
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC1_ALPHA"
+pattern BLEND_FACTOR_SRC1_ALPHA = BlendFactor 17
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"
+pattern BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = BlendFactor 18
+{-# complete BLEND_FACTOR_ZERO,
+             BLEND_FACTOR_ONE,
+             BLEND_FACTOR_SRC_COLOR,
+             BLEND_FACTOR_ONE_MINUS_SRC_COLOR,
+             BLEND_FACTOR_DST_COLOR,
+             BLEND_FACTOR_ONE_MINUS_DST_COLOR,
+             BLEND_FACTOR_SRC_ALPHA,
+             BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
+             BLEND_FACTOR_DST_ALPHA,
+             BLEND_FACTOR_ONE_MINUS_DST_ALPHA,
+             BLEND_FACTOR_CONSTANT_COLOR,
+             BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
+             BLEND_FACTOR_CONSTANT_ALPHA,
+             BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,
+             BLEND_FACTOR_SRC_ALPHA_SATURATE,
+             BLEND_FACTOR_SRC1_COLOR,
+             BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+             BLEND_FACTOR_SRC1_ALPHA,
+             BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA :: BlendFactor #-}
+
+instance Show BlendFactor where
+  showsPrec p = \case
+    BLEND_FACTOR_ZERO -> showString "BLEND_FACTOR_ZERO"
+    BLEND_FACTOR_ONE -> showString "BLEND_FACTOR_ONE"
+    BLEND_FACTOR_SRC_COLOR -> showString "BLEND_FACTOR_SRC_COLOR"
+    BLEND_FACTOR_ONE_MINUS_SRC_COLOR -> showString "BLEND_FACTOR_ONE_MINUS_SRC_COLOR"
+    BLEND_FACTOR_DST_COLOR -> showString "BLEND_FACTOR_DST_COLOR"
+    BLEND_FACTOR_ONE_MINUS_DST_COLOR -> showString "BLEND_FACTOR_ONE_MINUS_DST_COLOR"
+    BLEND_FACTOR_SRC_ALPHA -> showString "BLEND_FACTOR_SRC_ALPHA"
+    BLEND_FACTOR_ONE_MINUS_SRC_ALPHA -> showString "BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"
+    BLEND_FACTOR_DST_ALPHA -> showString "BLEND_FACTOR_DST_ALPHA"
+    BLEND_FACTOR_ONE_MINUS_DST_ALPHA -> showString "BLEND_FACTOR_ONE_MINUS_DST_ALPHA"
+    BLEND_FACTOR_CONSTANT_COLOR -> showString "BLEND_FACTOR_CONSTANT_COLOR"
+    BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR -> showString "BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"
+    BLEND_FACTOR_CONSTANT_ALPHA -> showString "BLEND_FACTOR_CONSTANT_ALPHA"
+    BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA -> showString "BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"
+    BLEND_FACTOR_SRC_ALPHA_SATURATE -> showString "BLEND_FACTOR_SRC_ALPHA_SATURATE"
+    BLEND_FACTOR_SRC1_COLOR -> showString "BLEND_FACTOR_SRC1_COLOR"
+    BLEND_FACTOR_ONE_MINUS_SRC1_COLOR -> showString "BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"
+    BLEND_FACTOR_SRC1_ALPHA -> showString "BLEND_FACTOR_SRC1_ALPHA"
+    BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA -> showString "BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"
+    BlendFactor x -> showParen (p >= 11) (showString "BlendFactor " . showsPrec 11 x)
+
+instance Read BlendFactor where
+  readPrec = parens (choose [("BLEND_FACTOR_ZERO", pure BLEND_FACTOR_ZERO)
+                            , ("BLEND_FACTOR_ONE", pure BLEND_FACTOR_ONE)
+                            , ("BLEND_FACTOR_SRC_COLOR", pure BLEND_FACTOR_SRC_COLOR)
+                            , ("BLEND_FACTOR_ONE_MINUS_SRC_COLOR", pure BLEND_FACTOR_ONE_MINUS_SRC_COLOR)
+                            , ("BLEND_FACTOR_DST_COLOR", pure BLEND_FACTOR_DST_COLOR)
+                            , ("BLEND_FACTOR_ONE_MINUS_DST_COLOR", pure BLEND_FACTOR_ONE_MINUS_DST_COLOR)
+                            , ("BLEND_FACTOR_SRC_ALPHA", pure BLEND_FACTOR_SRC_ALPHA)
+                            , ("BLEND_FACTOR_ONE_MINUS_SRC_ALPHA", pure BLEND_FACTOR_ONE_MINUS_SRC_ALPHA)
+                            , ("BLEND_FACTOR_DST_ALPHA", pure BLEND_FACTOR_DST_ALPHA)
+                            , ("BLEND_FACTOR_ONE_MINUS_DST_ALPHA", pure BLEND_FACTOR_ONE_MINUS_DST_ALPHA)
+                            , ("BLEND_FACTOR_CONSTANT_COLOR", pure BLEND_FACTOR_CONSTANT_COLOR)
+                            , ("BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR", pure BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR)
+                            , ("BLEND_FACTOR_CONSTANT_ALPHA", pure BLEND_FACTOR_CONSTANT_ALPHA)
+                            , ("BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA", pure BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA)
+                            , ("BLEND_FACTOR_SRC_ALPHA_SATURATE", pure BLEND_FACTOR_SRC_ALPHA_SATURATE)
+                            , ("BLEND_FACTOR_SRC1_COLOR", pure BLEND_FACTOR_SRC1_COLOR)
+                            , ("BLEND_FACTOR_ONE_MINUS_SRC1_COLOR", pure BLEND_FACTOR_ONE_MINUS_SRC1_COLOR)
+                            , ("BLEND_FACTOR_SRC1_ALPHA", pure BLEND_FACTOR_SRC1_ALPHA)
+                            , ("BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA", pure BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "BlendFactor")
+                       v <- step readPrec
+                       pure (BlendFactor v)))
+
diff --git a/src/Vulkan/Core10/Enums/BlendOp.hs b/src/Vulkan/Core10/Enums/BlendOp.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/BlendOp.hs
@@ -0,0 +1,410 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.BlendOp  (BlendOp( BLEND_OP_ADD
+                                            , BLEND_OP_SUBTRACT
+                                            , BLEND_OP_REVERSE_SUBTRACT
+                                            , BLEND_OP_MIN
+                                            , BLEND_OP_MAX
+                                            , BLEND_OP_BLUE_EXT
+                                            , BLEND_OP_GREEN_EXT
+                                            , BLEND_OP_RED_EXT
+                                            , BLEND_OP_INVERT_OVG_EXT
+                                            , BLEND_OP_CONTRAST_EXT
+                                            , BLEND_OP_MINUS_CLAMPED_EXT
+                                            , BLEND_OP_MINUS_EXT
+                                            , BLEND_OP_PLUS_DARKER_EXT
+                                            , BLEND_OP_PLUS_CLAMPED_ALPHA_EXT
+                                            , BLEND_OP_PLUS_CLAMPED_EXT
+                                            , BLEND_OP_PLUS_EXT
+                                            , BLEND_OP_HSL_LUMINOSITY_EXT
+                                            , BLEND_OP_HSL_COLOR_EXT
+                                            , BLEND_OP_HSL_SATURATION_EXT
+                                            , BLEND_OP_HSL_HUE_EXT
+                                            , BLEND_OP_HARDMIX_EXT
+                                            , BLEND_OP_PINLIGHT_EXT
+                                            , BLEND_OP_LINEARLIGHT_EXT
+                                            , BLEND_OP_VIVIDLIGHT_EXT
+                                            , BLEND_OP_LINEARBURN_EXT
+                                            , BLEND_OP_LINEARDODGE_EXT
+                                            , BLEND_OP_INVERT_RGB_EXT
+                                            , BLEND_OP_INVERT_EXT
+                                            , BLEND_OP_EXCLUSION_EXT
+                                            , BLEND_OP_DIFFERENCE_EXT
+                                            , BLEND_OP_SOFTLIGHT_EXT
+                                            , BLEND_OP_HARDLIGHT_EXT
+                                            , BLEND_OP_COLORBURN_EXT
+                                            , BLEND_OP_COLORDODGE_EXT
+                                            , BLEND_OP_LIGHTEN_EXT
+                                            , BLEND_OP_DARKEN_EXT
+                                            , BLEND_OP_OVERLAY_EXT
+                                            , BLEND_OP_SCREEN_EXT
+                                            , BLEND_OP_MULTIPLY_EXT
+                                            , BLEND_OP_XOR_EXT
+                                            , BLEND_OP_DST_ATOP_EXT
+                                            , BLEND_OP_SRC_ATOP_EXT
+                                            , BLEND_OP_DST_OUT_EXT
+                                            , BLEND_OP_SRC_OUT_EXT
+                                            , BLEND_OP_DST_IN_EXT
+                                            , BLEND_OP_SRC_IN_EXT
+                                            , BLEND_OP_DST_OVER_EXT
+                                            , BLEND_OP_SRC_OVER_EXT
+                                            , BLEND_OP_DST_EXT
+                                            , BLEND_OP_SRC_EXT
+                                            , BLEND_OP_ZERO_EXT
+                                            , ..
+                                            )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkBlendOp - Framebuffer blending operations
+--
+-- = Description
+--
+-- The semantics of each basic blend operations is described in the table
+-- below:
+--
+-- +-------------------------------+--------------------+-----------------+
+-- | 'BlendOp'                     | RGB Components     | Alpha Component |
+-- +===============================+====================+=================+
+-- | 'BLEND_OP_ADD'                | R = Rs0 × Sr + Rd  | A = As0 × Sa +  |
+-- |                               | × Dr               | Ad × Da         |
+-- |                               | G = Gs0 × Sg + Gd  |                 |
+-- |                               | × Dg               |                 |
+-- |                               | B = Bs0 × Sb + Bd  |                 |
+-- |                               | × Db               |                 |
+-- +-------------------------------+--------------------+-----------------+
+-- | 'BLEND_OP_SUBTRACT'           | R = Rs0 × Sr - Rd  | A = As0 × Sa -  |
+-- |                               | × Dr               | Ad × Da         |
+-- |                               | G = Gs0 × Sg - Gd  |                 |
+-- |                               | × Dg               |                 |
+-- |                               | B = Bs0 × Sb - Bd  |                 |
+-- |                               | × Db               |                 |
+-- +-------------------------------+--------------------+-----------------+
+-- | 'BLEND_OP_REVERSE_SUBTRACT'   | R = Rd × Dr - Rs0  | A = Ad × Da -   |
+-- |                               | × Sr               | As0 × Sa        |
+-- |                               | G = Gd × Dg - Gs0  |                 |
+-- |                               | × Sg               |                 |
+-- |                               | B = Bd × Db - Bs0  |                 |
+-- |                               | × Sb               |                 |
+-- +-------------------------------+--------------------+-----------------+
+-- | 'BLEND_OP_MIN'                | R = min(Rs0,Rd)    | A = min(As0,Ad) |
+-- |                               | G = min(Gs0,Gd)    |                 |
+-- |                               | B = min(Bs0,Bd)    |                 |
+-- +-------------------------------+--------------------+-----------------+
+-- | 'BLEND_OP_MAX'                | R = max(Rs0,Rd)    | A = max(As0,Ad) |
+-- |                               | G = max(Gs0,Gd)    |                 |
+-- |                               | 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
+--
+-- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'
+newtype BlendOp = BlendOp Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_ADD"
+pattern BLEND_OP_ADD = BlendOp 0
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SUBTRACT"
+pattern BLEND_OP_SUBTRACT = BlendOp 1
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_REVERSE_SUBTRACT"
+pattern BLEND_OP_REVERSE_SUBTRACT = BlendOp 2
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MIN"
+pattern BLEND_OP_MIN = BlendOp 3
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MAX"
+pattern BLEND_OP_MAX = BlendOp 4
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_BLUE_EXT"
+pattern BLEND_OP_BLUE_EXT = BlendOp 1000148045
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_GREEN_EXT"
+pattern BLEND_OP_GREEN_EXT = BlendOp 1000148044
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_RED_EXT"
+pattern BLEND_OP_RED_EXT = BlendOp 1000148043
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_INVERT_OVG_EXT"
+pattern BLEND_OP_INVERT_OVG_EXT = BlendOp 1000148042
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_CONTRAST_EXT"
+pattern BLEND_OP_CONTRAST_EXT = BlendOp 1000148041
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MINUS_CLAMPED_EXT"
+pattern BLEND_OP_MINUS_CLAMPED_EXT = BlendOp 1000148040
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MINUS_EXT"
+pattern BLEND_OP_MINUS_EXT = BlendOp 1000148039
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_DARKER_EXT"
+pattern BLEND_OP_PLUS_DARKER_EXT = BlendOp 1000148038
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT"
+pattern BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = BlendOp 1000148037
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_CLAMPED_EXT"
+pattern BLEND_OP_PLUS_CLAMPED_EXT = BlendOp 1000148036
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_EXT"
+pattern BLEND_OP_PLUS_EXT = BlendOp 1000148035
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_LUMINOSITY_EXT"
+pattern BLEND_OP_HSL_LUMINOSITY_EXT = BlendOp 1000148034
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_COLOR_EXT"
+pattern BLEND_OP_HSL_COLOR_EXT = BlendOp 1000148033
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_SATURATION_EXT"
+pattern BLEND_OP_HSL_SATURATION_EXT = BlendOp 1000148032
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_HUE_EXT"
+pattern BLEND_OP_HSL_HUE_EXT = BlendOp 1000148031
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HARDMIX_EXT"
+pattern BLEND_OP_HARDMIX_EXT = BlendOp 1000148030
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PINLIGHT_EXT"
+pattern BLEND_OP_PINLIGHT_EXT = BlendOp 1000148029
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LINEARLIGHT_EXT"
+pattern BLEND_OP_LINEARLIGHT_EXT = BlendOp 1000148028
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_VIVIDLIGHT_EXT"
+pattern BLEND_OP_VIVIDLIGHT_EXT = BlendOp 1000148027
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LINEARBURN_EXT"
+pattern BLEND_OP_LINEARBURN_EXT = BlendOp 1000148026
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LINEARDODGE_EXT"
+pattern BLEND_OP_LINEARDODGE_EXT = BlendOp 1000148025
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_INVERT_RGB_EXT"
+pattern BLEND_OP_INVERT_RGB_EXT = BlendOp 1000148024
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_INVERT_EXT"
+pattern BLEND_OP_INVERT_EXT = BlendOp 1000148023
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_EXCLUSION_EXT"
+pattern BLEND_OP_EXCLUSION_EXT = BlendOp 1000148022
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DIFFERENCE_EXT"
+pattern BLEND_OP_DIFFERENCE_EXT = BlendOp 1000148021
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SOFTLIGHT_EXT"
+pattern BLEND_OP_SOFTLIGHT_EXT = BlendOp 1000148020
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HARDLIGHT_EXT"
+pattern BLEND_OP_HARDLIGHT_EXT = BlendOp 1000148019
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_COLORBURN_EXT"
+pattern BLEND_OP_COLORBURN_EXT = BlendOp 1000148018
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_COLORDODGE_EXT"
+pattern BLEND_OP_COLORDODGE_EXT = BlendOp 1000148017
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LIGHTEN_EXT"
+pattern BLEND_OP_LIGHTEN_EXT = BlendOp 1000148016
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DARKEN_EXT"
+pattern BLEND_OP_DARKEN_EXT = BlendOp 1000148015
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_OVERLAY_EXT"
+pattern BLEND_OP_OVERLAY_EXT = BlendOp 1000148014
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SCREEN_EXT"
+pattern BLEND_OP_SCREEN_EXT = BlendOp 1000148013
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MULTIPLY_EXT"
+pattern BLEND_OP_MULTIPLY_EXT = BlendOp 1000148012
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_XOR_EXT"
+pattern BLEND_OP_XOR_EXT = BlendOp 1000148011
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_ATOP_EXT"
+pattern BLEND_OP_DST_ATOP_EXT = BlendOp 1000148010
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_ATOP_EXT"
+pattern BLEND_OP_SRC_ATOP_EXT = BlendOp 1000148009
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_OUT_EXT"
+pattern BLEND_OP_DST_OUT_EXT = BlendOp 1000148008
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_OUT_EXT"
+pattern BLEND_OP_SRC_OUT_EXT = BlendOp 1000148007
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_IN_EXT"
+pattern BLEND_OP_DST_IN_EXT = BlendOp 1000148006
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_IN_EXT"
+pattern BLEND_OP_SRC_IN_EXT = BlendOp 1000148005
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_OVER_EXT"
+pattern BLEND_OP_DST_OVER_EXT = BlendOp 1000148004
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_OVER_EXT"
+pattern BLEND_OP_SRC_OVER_EXT = BlendOp 1000148003
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_EXT"
+pattern BLEND_OP_DST_EXT = BlendOp 1000148002
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_EXT"
+pattern BLEND_OP_SRC_EXT = BlendOp 1000148001
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_ZERO_EXT"
+pattern BLEND_OP_ZERO_EXT = BlendOp 1000148000
+{-# complete BLEND_OP_ADD,
+             BLEND_OP_SUBTRACT,
+             BLEND_OP_REVERSE_SUBTRACT,
+             BLEND_OP_MIN,
+             BLEND_OP_MAX,
+             BLEND_OP_BLUE_EXT,
+             BLEND_OP_GREEN_EXT,
+             BLEND_OP_RED_EXT,
+             BLEND_OP_INVERT_OVG_EXT,
+             BLEND_OP_CONTRAST_EXT,
+             BLEND_OP_MINUS_CLAMPED_EXT,
+             BLEND_OP_MINUS_EXT,
+             BLEND_OP_PLUS_DARKER_EXT,
+             BLEND_OP_PLUS_CLAMPED_ALPHA_EXT,
+             BLEND_OP_PLUS_CLAMPED_EXT,
+             BLEND_OP_PLUS_EXT,
+             BLEND_OP_HSL_LUMINOSITY_EXT,
+             BLEND_OP_HSL_COLOR_EXT,
+             BLEND_OP_HSL_SATURATION_EXT,
+             BLEND_OP_HSL_HUE_EXT,
+             BLEND_OP_HARDMIX_EXT,
+             BLEND_OP_PINLIGHT_EXT,
+             BLEND_OP_LINEARLIGHT_EXT,
+             BLEND_OP_VIVIDLIGHT_EXT,
+             BLEND_OP_LINEARBURN_EXT,
+             BLEND_OP_LINEARDODGE_EXT,
+             BLEND_OP_INVERT_RGB_EXT,
+             BLEND_OP_INVERT_EXT,
+             BLEND_OP_EXCLUSION_EXT,
+             BLEND_OP_DIFFERENCE_EXT,
+             BLEND_OP_SOFTLIGHT_EXT,
+             BLEND_OP_HARDLIGHT_EXT,
+             BLEND_OP_COLORBURN_EXT,
+             BLEND_OP_COLORDODGE_EXT,
+             BLEND_OP_LIGHTEN_EXT,
+             BLEND_OP_DARKEN_EXT,
+             BLEND_OP_OVERLAY_EXT,
+             BLEND_OP_SCREEN_EXT,
+             BLEND_OP_MULTIPLY_EXT,
+             BLEND_OP_XOR_EXT,
+             BLEND_OP_DST_ATOP_EXT,
+             BLEND_OP_SRC_ATOP_EXT,
+             BLEND_OP_DST_OUT_EXT,
+             BLEND_OP_SRC_OUT_EXT,
+             BLEND_OP_DST_IN_EXT,
+             BLEND_OP_SRC_IN_EXT,
+             BLEND_OP_DST_OVER_EXT,
+             BLEND_OP_SRC_OVER_EXT,
+             BLEND_OP_DST_EXT,
+             BLEND_OP_SRC_EXT,
+             BLEND_OP_ZERO_EXT :: BlendOp #-}
+
+instance Show BlendOp where
+  showsPrec p = \case
+    BLEND_OP_ADD -> showString "BLEND_OP_ADD"
+    BLEND_OP_SUBTRACT -> showString "BLEND_OP_SUBTRACT"
+    BLEND_OP_REVERSE_SUBTRACT -> showString "BLEND_OP_REVERSE_SUBTRACT"
+    BLEND_OP_MIN -> showString "BLEND_OP_MIN"
+    BLEND_OP_MAX -> showString "BLEND_OP_MAX"
+    BLEND_OP_BLUE_EXT -> showString "BLEND_OP_BLUE_EXT"
+    BLEND_OP_GREEN_EXT -> showString "BLEND_OP_GREEN_EXT"
+    BLEND_OP_RED_EXT -> showString "BLEND_OP_RED_EXT"
+    BLEND_OP_INVERT_OVG_EXT -> showString "BLEND_OP_INVERT_OVG_EXT"
+    BLEND_OP_CONTRAST_EXT -> showString "BLEND_OP_CONTRAST_EXT"
+    BLEND_OP_MINUS_CLAMPED_EXT -> showString "BLEND_OP_MINUS_CLAMPED_EXT"
+    BLEND_OP_MINUS_EXT -> showString "BLEND_OP_MINUS_EXT"
+    BLEND_OP_PLUS_DARKER_EXT -> showString "BLEND_OP_PLUS_DARKER_EXT"
+    BLEND_OP_PLUS_CLAMPED_ALPHA_EXT -> showString "BLEND_OP_PLUS_CLAMPED_ALPHA_EXT"
+    BLEND_OP_PLUS_CLAMPED_EXT -> showString "BLEND_OP_PLUS_CLAMPED_EXT"
+    BLEND_OP_PLUS_EXT -> showString "BLEND_OP_PLUS_EXT"
+    BLEND_OP_HSL_LUMINOSITY_EXT -> showString "BLEND_OP_HSL_LUMINOSITY_EXT"
+    BLEND_OP_HSL_COLOR_EXT -> showString "BLEND_OP_HSL_COLOR_EXT"
+    BLEND_OP_HSL_SATURATION_EXT -> showString "BLEND_OP_HSL_SATURATION_EXT"
+    BLEND_OP_HSL_HUE_EXT -> showString "BLEND_OP_HSL_HUE_EXT"
+    BLEND_OP_HARDMIX_EXT -> showString "BLEND_OP_HARDMIX_EXT"
+    BLEND_OP_PINLIGHT_EXT -> showString "BLEND_OP_PINLIGHT_EXT"
+    BLEND_OP_LINEARLIGHT_EXT -> showString "BLEND_OP_LINEARLIGHT_EXT"
+    BLEND_OP_VIVIDLIGHT_EXT -> showString "BLEND_OP_VIVIDLIGHT_EXT"
+    BLEND_OP_LINEARBURN_EXT -> showString "BLEND_OP_LINEARBURN_EXT"
+    BLEND_OP_LINEARDODGE_EXT -> showString "BLEND_OP_LINEARDODGE_EXT"
+    BLEND_OP_INVERT_RGB_EXT -> showString "BLEND_OP_INVERT_RGB_EXT"
+    BLEND_OP_INVERT_EXT -> showString "BLEND_OP_INVERT_EXT"
+    BLEND_OP_EXCLUSION_EXT -> showString "BLEND_OP_EXCLUSION_EXT"
+    BLEND_OP_DIFFERENCE_EXT -> showString "BLEND_OP_DIFFERENCE_EXT"
+    BLEND_OP_SOFTLIGHT_EXT -> showString "BLEND_OP_SOFTLIGHT_EXT"
+    BLEND_OP_HARDLIGHT_EXT -> showString "BLEND_OP_HARDLIGHT_EXT"
+    BLEND_OP_COLORBURN_EXT -> showString "BLEND_OP_COLORBURN_EXT"
+    BLEND_OP_COLORDODGE_EXT -> showString "BLEND_OP_COLORDODGE_EXT"
+    BLEND_OP_LIGHTEN_EXT -> showString "BLEND_OP_LIGHTEN_EXT"
+    BLEND_OP_DARKEN_EXT -> showString "BLEND_OP_DARKEN_EXT"
+    BLEND_OP_OVERLAY_EXT -> showString "BLEND_OP_OVERLAY_EXT"
+    BLEND_OP_SCREEN_EXT -> showString "BLEND_OP_SCREEN_EXT"
+    BLEND_OP_MULTIPLY_EXT -> showString "BLEND_OP_MULTIPLY_EXT"
+    BLEND_OP_XOR_EXT -> showString "BLEND_OP_XOR_EXT"
+    BLEND_OP_DST_ATOP_EXT -> showString "BLEND_OP_DST_ATOP_EXT"
+    BLEND_OP_SRC_ATOP_EXT -> showString "BLEND_OP_SRC_ATOP_EXT"
+    BLEND_OP_DST_OUT_EXT -> showString "BLEND_OP_DST_OUT_EXT"
+    BLEND_OP_SRC_OUT_EXT -> showString "BLEND_OP_SRC_OUT_EXT"
+    BLEND_OP_DST_IN_EXT -> showString "BLEND_OP_DST_IN_EXT"
+    BLEND_OP_SRC_IN_EXT -> showString "BLEND_OP_SRC_IN_EXT"
+    BLEND_OP_DST_OVER_EXT -> showString "BLEND_OP_DST_OVER_EXT"
+    BLEND_OP_SRC_OVER_EXT -> showString "BLEND_OP_SRC_OVER_EXT"
+    BLEND_OP_DST_EXT -> showString "BLEND_OP_DST_EXT"
+    BLEND_OP_SRC_EXT -> showString "BLEND_OP_SRC_EXT"
+    BLEND_OP_ZERO_EXT -> showString "BLEND_OP_ZERO_EXT"
+    BlendOp x -> showParen (p >= 11) (showString "BlendOp " . showsPrec 11 x)
+
+instance Read BlendOp where
+  readPrec = parens (choose [("BLEND_OP_ADD", pure BLEND_OP_ADD)
+                            , ("BLEND_OP_SUBTRACT", pure BLEND_OP_SUBTRACT)
+                            , ("BLEND_OP_REVERSE_SUBTRACT", pure BLEND_OP_REVERSE_SUBTRACT)
+                            , ("BLEND_OP_MIN", pure BLEND_OP_MIN)
+                            , ("BLEND_OP_MAX", pure BLEND_OP_MAX)
+                            , ("BLEND_OP_BLUE_EXT", pure BLEND_OP_BLUE_EXT)
+                            , ("BLEND_OP_GREEN_EXT", pure BLEND_OP_GREEN_EXT)
+                            , ("BLEND_OP_RED_EXT", pure BLEND_OP_RED_EXT)
+                            , ("BLEND_OP_INVERT_OVG_EXT", pure BLEND_OP_INVERT_OVG_EXT)
+                            , ("BLEND_OP_CONTRAST_EXT", pure BLEND_OP_CONTRAST_EXT)
+                            , ("BLEND_OP_MINUS_CLAMPED_EXT", pure BLEND_OP_MINUS_CLAMPED_EXT)
+                            , ("BLEND_OP_MINUS_EXT", pure BLEND_OP_MINUS_EXT)
+                            , ("BLEND_OP_PLUS_DARKER_EXT", pure BLEND_OP_PLUS_DARKER_EXT)
+                            , ("BLEND_OP_PLUS_CLAMPED_ALPHA_EXT", pure BLEND_OP_PLUS_CLAMPED_ALPHA_EXT)
+                            , ("BLEND_OP_PLUS_CLAMPED_EXT", pure BLEND_OP_PLUS_CLAMPED_EXT)
+                            , ("BLEND_OP_PLUS_EXT", pure BLEND_OP_PLUS_EXT)
+                            , ("BLEND_OP_HSL_LUMINOSITY_EXT", pure BLEND_OP_HSL_LUMINOSITY_EXT)
+                            , ("BLEND_OP_HSL_COLOR_EXT", pure BLEND_OP_HSL_COLOR_EXT)
+                            , ("BLEND_OP_HSL_SATURATION_EXT", pure BLEND_OP_HSL_SATURATION_EXT)
+                            , ("BLEND_OP_HSL_HUE_EXT", pure BLEND_OP_HSL_HUE_EXT)
+                            , ("BLEND_OP_HARDMIX_EXT", pure BLEND_OP_HARDMIX_EXT)
+                            , ("BLEND_OP_PINLIGHT_EXT", pure BLEND_OP_PINLIGHT_EXT)
+                            , ("BLEND_OP_LINEARLIGHT_EXT", pure BLEND_OP_LINEARLIGHT_EXT)
+                            , ("BLEND_OP_VIVIDLIGHT_EXT", pure BLEND_OP_VIVIDLIGHT_EXT)
+                            , ("BLEND_OP_LINEARBURN_EXT", pure BLEND_OP_LINEARBURN_EXT)
+                            , ("BLEND_OP_LINEARDODGE_EXT", pure BLEND_OP_LINEARDODGE_EXT)
+                            , ("BLEND_OP_INVERT_RGB_EXT", pure BLEND_OP_INVERT_RGB_EXT)
+                            , ("BLEND_OP_INVERT_EXT", pure BLEND_OP_INVERT_EXT)
+                            , ("BLEND_OP_EXCLUSION_EXT", pure BLEND_OP_EXCLUSION_EXT)
+                            , ("BLEND_OP_DIFFERENCE_EXT", pure BLEND_OP_DIFFERENCE_EXT)
+                            , ("BLEND_OP_SOFTLIGHT_EXT", pure BLEND_OP_SOFTLIGHT_EXT)
+                            , ("BLEND_OP_HARDLIGHT_EXT", pure BLEND_OP_HARDLIGHT_EXT)
+                            , ("BLEND_OP_COLORBURN_EXT", pure BLEND_OP_COLORBURN_EXT)
+                            , ("BLEND_OP_COLORDODGE_EXT", pure BLEND_OP_COLORDODGE_EXT)
+                            , ("BLEND_OP_LIGHTEN_EXT", pure BLEND_OP_LIGHTEN_EXT)
+                            , ("BLEND_OP_DARKEN_EXT", pure BLEND_OP_DARKEN_EXT)
+                            , ("BLEND_OP_OVERLAY_EXT", pure BLEND_OP_OVERLAY_EXT)
+                            , ("BLEND_OP_SCREEN_EXT", pure BLEND_OP_SCREEN_EXT)
+                            , ("BLEND_OP_MULTIPLY_EXT", pure BLEND_OP_MULTIPLY_EXT)
+                            , ("BLEND_OP_XOR_EXT", pure BLEND_OP_XOR_EXT)
+                            , ("BLEND_OP_DST_ATOP_EXT", pure BLEND_OP_DST_ATOP_EXT)
+                            , ("BLEND_OP_SRC_ATOP_EXT", pure BLEND_OP_SRC_ATOP_EXT)
+                            , ("BLEND_OP_DST_OUT_EXT", pure BLEND_OP_DST_OUT_EXT)
+                            , ("BLEND_OP_SRC_OUT_EXT", pure BLEND_OP_SRC_OUT_EXT)
+                            , ("BLEND_OP_DST_IN_EXT", pure BLEND_OP_DST_IN_EXT)
+                            , ("BLEND_OP_SRC_IN_EXT", pure BLEND_OP_SRC_IN_EXT)
+                            , ("BLEND_OP_DST_OVER_EXT", pure BLEND_OP_DST_OVER_EXT)
+                            , ("BLEND_OP_SRC_OVER_EXT", pure BLEND_OP_SRC_OVER_EXT)
+                            , ("BLEND_OP_DST_EXT", pure BLEND_OP_DST_EXT)
+                            , ("BLEND_OP_SRC_EXT", pure BLEND_OP_SRC_EXT)
+                            , ("BLEND_OP_ZERO_EXT", pure BLEND_OP_ZERO_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "BlendOp")
+                       v <- step readPrec
+                       pure (BlendOp v)))
+
diff --git a/src/Vulkan/Core10/Enums/BorderColor.hs b/src/Vulkan/Core10/Enums/BorderColor.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/BorderColor.hs
@@ -0,0 +1,105 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.BorderColor  (BorderColor( BORDER_COLOR_FLOAT_TRANSPARENT_BLACK
+                                                    , BORDER_COLOR_INT_TRANSPARENT_BLACK
+                                                    , BORDER_COLOR_FLOAT_OPAQUE_BLACK
+                                                    , BORDER_COLOR_INT_OPAQUE_BLACK
+                                                    , BORDER_COLOR_FLOAT_OPAQUE_WHITE
+                                                    , BORDER_COLOR_INT_OPAQUE_WHITE
+                                                    , BORDER_COLOR_INT_CUSTOM_EXT
+                                                    , BORDER_COLOR_FLOAT_CUSTOM_EXT
+                                                    , ..
+                                                    )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkBorderColor - Specify border color used for texture lookups
+--
+-- = Description
+--
+-- These colors are described in detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-texel-replacement Texel Replacement>.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'
+newtype BorderColor = BorderColor Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'BORDER_COLOR_FLOAT_TRANSPARENT_BLACK' specifies a transparent,
+-- floating-point format, black color.
+pattern BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = BorderColor 0
+-- | 'BORDER_COLOR_INT_TRANSPARENT_BLACK' specifies a transparent, integer
+-- format, black color.
+pattern BORDER_COLOR_INT_TRANSPARENT_BLACK = BorderColor 1
+-- | 'BORDER_COLOR_FLOAT_OPAQUE_BLACK' specifies an opaque, floating-point
+-- format, black color.
+pattern BORDER_COLOR_FLOAT_OPAQUE_BLACK = BorderColor 2
+-- | 'BORDER_COLOR_INT_OPAQUE_BLACK' specifies an opaque, integer format,
+-- black color.
+pattern BORDER_COLOR_INT_OPAQUE_BLACK = BorderColor 3
+-- | 'BORDER_COLOR_FLOAT_OPAQUE_WHITE' specifies an opaque, floating-point
+-- format, white color.
+pattern BORDER_COLOR_FLOAT_OPAQUE_WHITE = BorderColor 4
+-- | 'BORDER_COLOR_INT_OPAQUE_WHITE' specifies an opaque, integer format,
+-- white color.
+pattern BORDER_COLOR_INT_OPAQUE_WHITE = BorderColor 5
+-- | 'BORDER_COLOR_INT_CUSTOM_EXT' indicates that a
+-- 'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'
+-- structure is present in the
+-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'::@pNext@ chain which contains
+-- the color data in integer format.
+pattern BORDER_COLOR_INT_CUSTOM_EXT = BorderColor 1000287004
+-- | 'BORDER_COLOR_FLOAT_CUSTOM_EXT' indicates that a
+-- 'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'
+-- structure is present in the
+-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'::@pNext@ chain which contains
+-- the color data in floating-point format.
+pattern BORDER_COLOR_FLOAT_CUSTOM_EXT = BorderColor 1000287003
+{-# complete BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
+             BORDER_COLOR_INT_TRANSPARENT_BLACK,
+             BORDER_COLOR_FLOAT_OPAQUE_BLACK,
+             BORDER_COLOR_INT_OPAQUE_BLACK,
+             BORDER_COLOR_FLOAT_OPAQUE_WHITE,
+             BORDER_COLOR_INT_OPAQUE_WHITE,
+             BORDER_COLOR_INT_CUSTOM_EXT,
+             BORDER_COLOR_FLOAT_CUSTOM_EXT :: BorderColor #-}
+
+instance Show BorderColor where
+  showsPrec p = \case
+    BORDER_COLOR_FLOAT_TRANSPARENT_BLACK -> showString "BORDER_COLOR_FLOAT_TRANSPARENT_BLACK"
+    BORDER_COLOR_INT_TRANSPARENT_BLACK -> showString "BORDER_COLOR_INT_TRANSPARENT_BLACK"
+    BORDER_COLOR_FLOAT_OPAQUE_BLACK -> showString "BORDER_COLOR_FLOAT_OPAQUE_BLACK"
+    BORDER_COLOR_INT_OPAQUE_BLACK -> showString "BORDER_COLOR_INT_OPAQUE_BLACK"
+    BORDER_COLOR_FLOAT_OPAQUE_WHITE -> showString "BORDER_COLOR_FLOAT_OPAQUE_WHITE"
+    BORDER_COLOR_INT_OPAQUE_WHITE -> showString "BORDER_COLOR_INT_OPAQUE_WHITE"
+    BORDER_COLOR_INT_CUSTOM_EXT -> showString "BORDER_COLOR_INT_CUSTOM_EXT"
+    BORDER_COLOR_FLOAT_CUSTOM_EXT -> showString "BORDER_COLOR_FLOAT_CUSTOM_EXT"
+    BorderColor x -> showParen (p >= 11) (showString "BorderColor " . showsPrec 11 x)
+
+instance Read BorderColor where
+  readPrec = parens (choose [("BORDER_COLOR_FLOAT_TRANSPARENT_BLACK", pure BORDER_COLOR_FLOAT_TRANSPARENT_BLACK)
+                            , ("BORDER_COLOR_INT_TRANSPARENT_BLACK", pure BORDER_COLOR_INT_TRANSPARENT_BLACK)
+                            , ("BORDER_COLOR_FLOAT_OPAQUE_BLACK", pure BORDER_COLOR_FLOAT_OPAQUE_BLACK)
+                            , ("BORDER_COLOR_INT_OPAQUE_BLACK", pure BORDER_COLOR_INT_OPAQUE_BLACK)
+                            , ("BORDER_COLOR_FLOAT_OPAQUE_WHITE", pure BORDER_COLOR_FLOAT_OPAQUE_WHITE)
+                            , ("BORDER_COLOR_INT_OPAQUE_WHITE", pure BORDER_COLOR_INT_OPAQUE_WHITE)
+                            , ("BORDER_COLOR_INT_CUSTOM_EXT", pure BORDER_COLOR_INT_CUSTOM_EXT)
+                            , ("BORDER_COLOR_FLOAT_CUSTOM_EXT", pure BORDER_COLOR_FLOAT_CUSTOM_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "BorderColor")
+                       v <- step readPrec
+                       pure (BorderColor v)))
+
diff --git a/src/Vulkan/Core10/Enums/BufferCreateFlagBits.hs b/src/Vulkan/Core10/Enums/BufferCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/BufferCreateFlagBits.hs
@@ -0,0 +1,90 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.BufferCreateFlagBits  ( BufferCreateFlagBits( BUFFER_CREATE_SPARSE_BINDING_BIT
+                                                                       , BUFFER_CREATE_SPARSE_RESIDENCY_BIT
+                                                                       , BUFFER_CREATE_SPARSE_ALIASED_BIT
+                                                                       , BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
+                                                                       , BUFFER_CREATE_PROTECTED_BIT
+                                                                       , ..
+                                                                       )
+                                                 , BufferCreateFlags
+                                                 ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkBufferCreateFlagBits - Bitmask specifying additional parameters of a
+-- buffer
+--
+-- = Description
+--
+-- See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures Sparse Resource Features>
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features Physical Device Features>
+-- for details of the sparse memory features supported on a device.
+--
+-- = See Also
+--
+-- 'BufferCreateFlags'
+newtype BufferCreateFlagBits = BufferCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'BUFFER_CREATE_SPARSE_BINDING_BIT' specifies that the buffer will be
+-- backed using sparse memory binding.
+pattern BUFFER_CREATE_SPARSE_BINDING_BIT = BufferCreateFlagBits 0x00000001
+-- | '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 'BUFFER_CREATE_SPARSE_BINDING_BIT'
+-- flag.
+pattern BUFFER_CREATE_SPARSE_RESIDENCY_BIT = BufferCreateFlagBits 0x00000002
+-- | '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
+-- 'BUFFER_CREATE_SPARSE_BINDING_BIT' flag.
+pattern BUFFER_CREATE_SPARSE_ALIASED_BIT = BufferCreateFlagBits 0x00000004
+-- | 'BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT' specifies that the
+-- buffer’s address /can/ be saved and reused on a subsequent run (e.g. for
+-- trace capture and replay), see
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo'
+-- for more detail.
+pattern BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = BufferCreateFlagBits 0x00000010
+-- | 'BUFFER_CREATE_PROTECTED_BIT' specifies that the buffer is a protected
+-- buffer.
+pattern BUFFER_CREATE_PROTECTED_BIT = BufferCreateFlagBits 0x00000008
+
+type BufferCreateFlags = BufferCreateFlagBits
+
+instance Show BufferCreateFlagBits where
+  showsPrec p = \case
+    BUFFER_CREATE_SPARSE_BINDING_BIT -> showString "BUFFER_CREATE_SPARSE_BINDING_BIT"
+    BUFFER_CREATE_SPARSE_RESIDENCY_BIT -> showString "BUFFER_CREATE_SPARSE_RESIDENCY_BIT"
+    BUFFER_CREATE_SPARSE_ALIASED_BIT -> showString "BUFFER_CREATE_SPARSE_ALIASED_BIT"
+    BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT -> showString "BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"
+    BUFFER_CREATE_PROTECTED_BIT -> showString "BUFFER_CREATE_PROTECTED_BIT"
+    BufferCreateFlagBits x -> showParen (p >= 11) (showString "BufferCreateFlagBits 0x" . showHex x)
+
+instance Read BufferCreateFlagBits where
+  readPrec = parens (choose [("BUFFER_CREATE_SPARSE_BINDING_BIT", pure BUFFER_CREATE_SPARSE_BINDING_BIT)
+                            , ("BUFFER_CREATE_SPARSE_RESIDENCY_BIT", pure BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
+                            , ("BUFFER_CREATE_SPARSE_ALIASED_BIT", pure BUFFER_CREATE_SPARSE_ALIASED_BIT)
+                            , ("BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT", pure BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT)
+                            , ("BUFFER_CREATE_PROTECTED_BIT", pure BUFFER_CREATE_PROTECTED_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "BufferCreateFlagBits")
+                       v <- step readPrec
+                       pure (BufferCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/BufferUsageFlagBits.hs b/src/Vulkan/Core10/Enums/BufferUsageFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/BufferUsageFlagBits.hs
@@ -0,0 +1,161 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.BufferUsageFlagBits  ( BufferUsageFlagBits( BUFFER_USAGE_TRANSFER_SRC_BIT
+                                                                     , BUFFER_USAGE_TRANSFER_DST_BIT
+                                                                     , BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
+                                                                     , BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
+                                                                     , BUFFER_USAGE_UNIFORM_BUFFER_BIT
+                                                                     , BUFFER_USAGE_STORAGE_BUFFER_BIT
+                                                                     , BUFFER_USAGE_INDEX_BUFFER_BIT
+                                                                     , BUFFER_USAGE_VERTEX_BUFFER_BIT
+                                                                     , BUFFER_USAGE_INDIRECT_BUFFER_BIT
+                                                                     , BUFFER_USAGE_RAY_TRACING_BIT_KHR
+                                                                     , BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT
+                                                                     , BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
+                                                                     , BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT
+                                                                     , BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
+                                                                     , ..
+                                                                     )
+                                                , BufferUsageFlags
+                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkBufferUsageFlagBits - Bitmask specifying allowed usage of a buffer
+--
+-- = See Also
+--
+-- 'BufferUsageFlags'
+newtype BufferUsageFlagBits = BufferUsageFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'BUFFER_USAGE_TRANSFER_SRC_BIT' specifies that the buffer /can/ be used
+-- as the source of a /transfer command/ (see the definition of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-transfer >).
+pattern BUFFER_USAGE_TRANSFER_SRC_BIT = BufferUsageFlagBits 0x00000001
+-- | 'BUFFER_USAGE_TRANSFER_DST_BIT' specifies that the buffer /can/ be used
+-- as the destination of a transfer command.
+pattern BUFFER_USAGE_TRANSFER_DST_BIT = BufferUsageFlagBits 0x00000002
+-- | 'BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT' specifies that the buffer /can/
+-- be used to create a 'Vulkan.Core10.Handles.BufferView' suitable for
+-- occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot of type
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'.
+pattern BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = BufferUsageFlagBits 0x00000004
+-- | 'BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT' specifies that the buffer /can/
+-- be used to create a 'Vulkan.Core10.Handles.BufferView' suitable for
+-- occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot of type
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'.
+pattern BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = BufferUsageFlagBits 0x00000008
+-- | 'BUFFER_USAGE_UNIFORM_BUFFER_BIT' specifies that the buffer /can/ be
+-- used in a 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' suitable
+-- for occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot either of
+-- type 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
+-- or
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'.
+pattern BUFFER_USAGE_UNIFORM_BUFFER_BIT = BufferUsageFlagBits 0x00000010
+-- | 'BUFFER_USAGE_STORAGE_BUFFER_BIT' specifies that the buffer /can/ be
+-- used in a 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' suitable
+-- for occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot either of
+-- type 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
+-- or
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'.
+pattern BUFFER_USAGE_STORAGE_BUFFER_BIT = BufferUsageFlagBits 0x00000020
+-- | 'BUFFER_USAGE_INDEX_BUFFER_BIT' specifies that the buffer is suitable
+-- for passing as the @buffer@ parameter to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'.
+pattern BUFFER_USAGE_INDEX_BUFFER_BIT = BufferUsageFlagBits 0x00000040
+-- | 'BUFFER_USAGE_VERTEX_BUFFER_BIT' specifies that the buffer is suitable
+-- for passing as an element of the @pBuffers@ array to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers'.
+pattern BUFFER_USAGE_VERTEX_BUFFER_BIT = BufferUsageFlagBits 0x00000080
+-- | 'BUFFER_USAGE_INDIRECT_BUFFER_BIT' specifies that the buffer is suitable
+-- for passing as the @buffer@ parameter to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
+-- or 'Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect'. It is also
+-- suitable for passing as the @buffer@ member of
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsStreamNV',
+-- or @sequencesCountBuffer@ or @sequencesIndexBuffer@ or
+-- @preprocessedBuffer@ member of
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV'
+pattern BUFFER_USAGE_INDIRECT_BUFFER_BIT = BufferUsageFlagBits 0x00000100
+-- | 'BUFFER_USAGE_RAY_TRACING_BIT_KHR' specifies that the buffer is suitable
+-- for use in 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysKHR' and
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureKHR'.
+pattern BUFFER_USAGE_RAY_TRACING_BIT_KHR = BufferUsageFlagBits 0x00000400
+-- | 'BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT' specifies that the buffer
+-- is suitable for passing as the @buffer@ parameter to
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.cmdBeginConditionalRenderingEXT'.
+pattern BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = BufferUsageFlagBits 0x00000200
+-- | 'BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT' specifies that
+-- the buffer is suitable for using as a counter buffer with
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT'
+-- and
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT'.
+pattern BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = BufferUsageFlagBits 0x00001000
+-- | 'BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT' specifies that the
+-- buffer is suitable for using for binding as a transform feedback buffer
+-- with
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT'.
+pattern BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = BufferUsageFlagBits 0x00000800
+-- | 'BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT' specifies that the buffer /can/
+-- be used to retrieve a buffer device address via
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
+-- and use that address to access the buffer’s memory from a shader.
+pattern BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = BufferUsageFlagBits 0x00020000
+
+type BufferUsageFlags = BufferUsageFlagBits
+
+instance Show BufferUsageFlagBits where
+  showsPrec p = \case
+    BUFFER_USAGE_TRANSFER_SRC_BIT -> showString "BUFFER_USAGE_TRANSFER_SRC_BIT"
+    BUFFER_USAGE_TRANSFER_DST_BIT -> showString "BUFFER_USAGE_TRANSFER_DST_BIT"
+    BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT -> showString "BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"
+    BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT -> showString "BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"
+    BUFFER_USAGE_UNIFORM_BUFFER_BIT -> showString "BUFFER_USAGE_UNIFORM_BUFFER_BIT"
+    BUFFER_USAGE_STORAGE_BUFFER_BIT -> showString "BUFFER_USAGE_STORAGE_BUFFER_BIT"
+    BUFFER_USAGE_INDEX_BUFFER_BIT -> showString "BUFFER_USAGE_INDEX_BUFFER_BIT"
+    BUFFER_USAGE_VERTEX_BUFFER_BIT -> showString "BUFFER_USAGE_VERTEX_BUFFER_BIT"
+    BUFFER_USAGE_INDIRECT_BUFFER_BIT -> showString "BUFFER_USAGE_INDIRECT_BUFFER_BIT"
+    BUFFER_USAGE_RAY_TRACING_BIT_KHR -> showString "BUFFER_USAGE_RAY_TRACING_BIT_KHR"
+    BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT -> showString "BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT"
+    BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT -> showString "BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT"
+    BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT -> showString "BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT"
+    BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT -> showString "BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT"
+    BufferUsageFlagBits x -> showParen (p >= 11) (showString "BufferUsageFlagBits 0x" . showHex x)
+
+instance Read BufferUsageFlagBits where
+  readPrec = parens (choose [("BUFFER_USAGE_TRANSFER_SRC_BIT", pure BUFFER_USAGE_TRANSFER_SRC_BIT)
+                            , ("BUFFER_USAGE_TRANSFER_DST_BIT", pure BUFFER_USAGE_TRANSFER_DST_BIT)
+                            , ("BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT", pure BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
+                            , ("BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT", pure BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
+                            , ("BUFFER_USAGE_UNIFORM_BUFFER_BIT", pure BUFFER_USAGE_UNIFORM_BUFFER_BIT)
+                            , ("BUFFER_USAGE_STORAGE_BUFFER_BIT", pure BUFFER_USAGE_STORAGE_BUFFER_BIT)
+                            , ("BUFFER_USAGE_INDEX_BUFFER_BIT", pure BUFFER_USAGE_INDEX_BUFFER_BIT)
+                            , ("BUFFER_USAGE_VERTEX_BUFFER_BIT", pure BUFFER_USAGE_VERTEX_BUFFER_BIT)
+                            , ("BUFFER_USAGE_INDIRECT_BUFFER_BIT", pure BUFFER_USAGE_INDIRECT_BUFFER_BIT)
+                            , ("BUFFER_USAGE_RAY_TRACING_BIT_KHR", pure BUFFER_USAGE_RAY_TRACING_BIT_KHR)
+                            , ("BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT", pure BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT)
+                            , ("BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT", pure BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT)
+                            , ("BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT", pure BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT)
+                            , ("BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT", pure BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "BufferUsageFlagBits")
+                       v <- step readPrec
+                       pure (BufferUsageFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/BufferViewCreateFlags.hs b/src/Vulkan/Core10/Enums/BufferViewCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/BufferViewCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.BufferViewCreateFlags  (BufferViewCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkBufferViewCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'BufferViewCreateFlags' is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BufferView.BufferViewCreateInfo'
+newtype BufferViewCreateFlags = BufferViewCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show BufferViewCreateFlags where
+  showsPrec p = \case
+    BufferViewCreateFlags x -> showParen (p >= 11) (showString "BufferViewCreateFlags 0x" . showHex x)
+
+instance Read BufferViewCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "BufferViewCreateFlags")
+                       v <- step readPrec
+                       pure (BufferViewCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/ColorComponentFlagBits.hs b/src/Vulkan/Core10/Enums/ColorComponentFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ColorComponentFlagBits.hs
@@ -0,0 +1,77 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ColorComponentFlagBits  ( ColorComponentFlagBits( COLOR_COMPONENT_R_BIT
+                                                                           , COLOR_COMPONENT_G_BIT
+                                                                           , COLOR_COMPONENT_B_BIT
+                                                                           , COLOR_COMPONENT_A_BIT
+                                                                           , ..
+                                                                           )
+                                                   , ColorComponentFlags
+                                                   ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkColorComponentFlagBits - Bitmask controlling which components are
+-- written to the framebuffer
+--
+-- = Description
+--
+-- The color write mask operation is applied regardless of whether blending
+-- is enabled.
+--
+-- = See Also
+--
+-- 'ColorComponentFlags'
+newtype ColorComponentFlagBits = ColorComponentFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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.
+pattern COLOR_COMPONENT_R_BIT = ColorComponentFlagBits 0x00000001
+-- | '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.
+pattern COLOR_COMPONENT_G_BIT = ColorComponentFlagBits 0x00000002
+-- | '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.
+pattern COLOR_COMPONENT_B_BIT = ColorComponentFlagBits 0x00000004
+-- | '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.
+pattern COLOR_COMPONENT_A_BIT = ColorComponentFlagBits 0x00000008
+
+type ColorComponentFlags = ColorComponentFlagBits
+
+instance Show ColorComponentFlagBits where
+  showsPrec p = \case
+    COLOR_COMPONENT_R_BIT -> showString "COLOR_COMPONENT_R_BIT"
+    COLOR_COMPONENT_G_BIT -> showString "COLOR_COMPONENT_G_BIT"
+    COLOR_COMPONENT_B_BIT -> showString "COLOR_COMPONENT_B_BIT"
+    COLOR_COMPONENT_A_BIT -> showString "COLOR_COMPONENT_A_BIT"
+    ColorComponentFlagBits x -> showParen (p >= 11) (showString "ColorComponentFlagBits 0x" . showHex x)
+
+instance Read ColorComponentFlagBits where
+  readPrec = parens (choose [("COLOR_COMPONENT_R_BIT", pure COLOR_COMPONENT_R_BIT)
+                            , ("COLOR_COMPONENT_G_BIT", pure COLOR_COMPONENT_G_BIT)
+                            , ("COLOR_COMPONENT_B_BIT", pure COLOR_COMPONENT_B_BIT)
+                            , ("COLOR_COMPONENT_A_BIT", pure COLOR_COMPONENT_A_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ColorComponentFlagBits")
+                       v <- step readPrec
+                       pure (ColorComponentFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/CommandBufferLevel.hs b/src/Vulkan/Core10/Enums/CommandBufferLevel.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/CommandBufferLevel.hs
@@ -0,0 +1,50 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.CommandBufferLevel  (CommandBufferLevel( COMMAND_BUFFER_LEVEL_PRIMARY
+                                                                  , COMMAND_BUFFER_LEVEL_SECONDARY
+                                                                  , ..
+                                                                  )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkCommandBufferLevel - Enumerant specifying a command buffer level
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBuffer.CommandBufferAllocateInfo'
+newtype CommandBufferLevel = CommandBufferLevel Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'COMMAND_BUFFER_LEVEL_PRIMARY' specifies a primary command buffer.
+pattern COMMAND_BUFFER_LEVEL_PRIMARY = CommandBufferLevel 0
+-- | 'COMMAND_BUFFER_LEVEL_SECONDARY' specifies a secondary command buffer.
+pattern COMMAND_BUFFER_LEVEL_SECONDARY = CommandBufferLevel 1
+{-# complete COMMAND_BUFFER_LEVEL_PRIMARY,
+             COMMAND_BUFFER_LEVEL_SECONDARY :: CommandBufferLevel #-}
+
+instance Show CommandBufferLevel where
+  showsPrec p = \case
+    COMMAND_BUFFER_LEVEL_PRIMARY -> showString "COMMAND_BUFFER_LEVEL_PRIMARY"
+    COMMAND_BUFFER_LEVEL_SECONDARY -> showString "COMMAND_BUFFER_LEVEL_SECONDARY"
+    CommandBufferLevel x -> showParen (p >= 11) (showString "CommandBufferLevel " . showsPrec 11 x)
+
+instance Read CommandBufferLevel where
+  readPrec = parens (choose [("COMMAND_BUFFER_LEVEL_PRIMARY", pure COMMAND_BUFFER_LEVEL_PRIMARY)
+                            , ("COMMAND_BUFFER_LEVEL_SECONDARY", pure COMMAND_BUFFER_LEVEL_SECONDARY)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CommandBufferLevel")
+                       v <- step readPrec
+                       pure (CommandBufferLevel v)))
+
diff --git a/src/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs b/src/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs
@@ -0,0 +1,54 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.CommandBufferResetFlagBits  ( CommandBufferResetFlagBits( COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
+                                                                                   , ..
+                                                                                   )
+                                                       , CommandBufferResetFlags
+                                                       ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkCommandBufferResetFlagBits - Bitmask controlling behavior of a command
+-- buffer reset
+--
+-- = See Also
+--
+-- 'CommandBufferResetFlags'
+newtype CommandBufferResetFlagBits = CommandBufferResetFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>.
+pattern COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = CommandBufferResetFlagBits 0x00000001
+
+type CommandBufferResetFlags = CommandBufferResetFlagBits
+
+instance Show CommandBufferResetFlagBits where
+  showsPrec p = \case
+    COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT -> showString "COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"
+    CommandBufferResetFlagBits x -> showParen (p >= 11) (showString "CommandBufferResetFlagBits 0x" . showHex x)
+
+instance Read CommandBufferResetFlagBits where
+  readPrec = parens (choose [("COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT", pure COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CommandBufferResetFlagBits")
+                       v <- step readPrec
+                       pure (CommandBufferResetFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs-boot b/src/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/CommandBufferResetFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.CommandBufferResetFlagBits  ( CommandBufferResetFlagBits
+                                                       , CommandBufferResetFlags
+                                                       ) where
+
+
+
+data CommandBufferResetFlagBits
+
+type CommandBufferResetFlags = CommandBufferResetFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/CommandBufferUsageFlagBits.hs b/src/Vulkan/Core10/Enums/CommandBufferUsageFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/CommandBufferUsageFlagBits.hs
@@ -0,0 +1,65 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.CommandBufferUsageFlagBits  ( CommandBufferUsageFlagBits( COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
+                                                                                   , COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
+                                                                                   , COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
+                                                                                   , ..
+                                                                                   )
+                                                       , CommandBufferUsageFlags
+                                                       ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkCommandBufferUsageFlagBits - Bitmask specifying usage behavior for
+-- command buffer
+--
+-- = See Also
+--
+-- 'CommandBufferUsageFlags'
+newtype CommandBufferUsageFlagBits = CommandBufferUsageFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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 COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = CommandBufferUsageFlagBits 0x00000001
+-- | '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 COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = CommandBufferUsageFlagBits 0x00000002
+-- | '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 COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = CommandBufferUsageFlagBits 0x00000004
+
+type CommandBufferUsageFlags = CommandBufferUsageFlagBits
+
+instance Show CommandBufferUsageFlagBits where
+  showsPrec p = \case
+    COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT -> showString "COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"
+    COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT -> showString "COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"
+    COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT -> showString "COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"
+    CommandBufferUsageFlagBits x -> showParen (p >= 11) (showString "CommandBufferUsageFlagBits 0x" . showHex x)
+
+instance Read CommandBufferUsageFlagBits where
+  readPrec = parens (choose [("COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT", pure COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
+                            , ("COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT", pure COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
+                            , ("COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT", pure COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CommandBufferUsageFlagBits")
+                       v <- step readPrec
+                       pure (CommandBufferUsageFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/CommandPoolCreateFlagBits.hs b/src/Vulkan/Core10/Enums/CommandPoolCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/CommandPoolCreateFlagBits.hs
@@ -0,0 +1,71 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.CommandPoolCreateFlagBits  ( CommandPoolCreateFlagBits( COMMAND_POOL_CREATE_TRANSIENT_BIT
+                                                                                 , COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
+                                                                                 , COMMAND_POOL_CREATE_PROTECTED_BIT
+                                                                                 , ..
+                                                                                 )
+                                                      , CommandPoolCreateFlags
+                                                      ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkCommandPoolCreateFlagBits - Bitmask specifying usage behavior for a
+-- command pool
+--
+-- = See Also
+--
+-- 'CommandPoolCreateFlags'
+newtype CommandPoolCreateFlagBits = CommandPoolCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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 COMMAND_POOL_CREATE_TRANSIENT_BIT = CommandPoolCreateFlagBits 0x00000001
+-- | 'COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT' allows any command buffer
+-- allocated from a pool to be individually reset to the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state>;
+-- either by calling 'Vulkan.Core10.CommandBuffer.resetCommandBuffer', or
+-- via the implicit reset when calling
+-- 'Vulkan.Core10.CommandBuffer.beginCommandBuffer'. If this flag is not
+-- set on a pool, then 'Vulkan.Core10.CommandBuffer.resetCommandBuffer'
+-- /must/ not be called for any command buffer allocated from that pool.
+pattern COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = CommandPoolCreateFlagBits 0x00000002
+-- | 'COMMAND_POOL_CREATE_PROTECTED_BIT' specifies that command buffers
+-- allocated from the pool are protected command buffers.
+pattern COMMAND_POOL_CREATE_PROTECTED_BIT = CommandPoolCreateFlagBits 0x00000004
+
+type CommandPoolCreateFlags = CommandPoolCreateFlagBits
+
+instance Show CommandPoolCreateFlagBits where
+  showsPrec p = \case
+    COMMAND_POOL_CREATE_TRANSIENT_BIT -> showString "COMMAND_POOL_CREATE_TRANSIENT_BIT"
+    COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT -> showString "COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"
+    COMMAND_POOL_CREATE_PROTECTED_BIT -> showString "COMMAND_POOL_CREATE_PROTECTED_BIT"
+    CommandPoolCreateFlagBits x -> showParen (p >= 11) (showString "CommandPoolCreateFlagBits 0x" . showHex x)
+
+instance Read CommandPoolCreateFlagBits where
+  readPrec = parens (choose [("COMMAND_POOL_CREATE_TRANSIENT_BIT", pure COMMAND_POOL_CREATE_TRANSIENT_BIT)
+                            , ("COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT", pure COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
+                            , ("COMMAND_POOL_CREATE_PROTECTED_BIT", pure COMMAND_POOL_CREATE_PROTECTED_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CommandPoolCreateFlagBits")
+                       v <- step readPrec
+                       pure (CommandPoolCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs b/src/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs
@@ -0,0 +1,51 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.CommandPoolResetFlagBits  ( CommandPoolResetFlagBits( COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
+                                                                               , ..
+                                                                               )
+                                                     , CommandPoolResetFlags
+                                                     ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkCommandPoolResetFlagBits - Bitmask controlling behavior of a command
+-- pool reset
+--
+-- = See Also
+--
+-- 'CommandPoolResetFlags'
+newtype CommandPoolResetFlagBits = CommandPoolResetFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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 COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = CommandPoolResetFlagBits 0x00000001
+
+type CommandPoolResetFlags = CommandPoolResetFlagBits
+
+instance Show CommandPoolResetFlagBits where
+  showsPrec p = \case
+    COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT -> showString "COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"
+    CommandPoolResetFlagBits x -> showParen (p >= 11) (showString "CommandPoolResetFlagBits 0x" . showHex x)
+
+instance Read CommandPoolResetFlagBits where
+  readPrec = parens (choose [("COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT", pure COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CommandPoolResetFlagBits")
+                       v <- step readPrec
+                       pure (CommandPoolResetFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs-boot b/src/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/CommandPoolResetFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.CommandPoolResetFlagBits  ( CommandPoolResetFlagBits
+                                                     , CommandPoolResetFlags
+                                                     ) where
+
+
+
+data CommandPoolResetFlagBits
+
+type CommandPoolResetFlags = CommandPoolResetFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/CompareOp.hs b/src/Vulkan/Core10/Enums/CompareOp.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/CompareOp.hs
@@ -0,0 +1,88 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.CompareOp  (CompareOp( COMPARE_OP_NEVER
+                                                , COMPARE_OP_LESS
+                                                , COMPARE_OP_EQUAL
+                                                , COMPARE_OP_LESS_OR_EQUAL
+                                                , COMPARE_OP_GREATER
+                                                , COMPARE_OP_NOT_EQUAL
+                                                , COMPARE_OP_GREATER_OR_EQUAL
+                                                , COMPARE_OP_ALWAYS
+                                                , ..
+                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkCompareOp - Stencil comparison function
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo',
+-- 'Vulkan.Core10.Sampler.SamplerCreateInfo',
+-- 'Vulkan.Core10.Pipeline.StencilOpState'
+newtype CompareOp = CompareOp Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'COMPARE_OP_NEVER' specifies that the test evaluates to false.
+pattern COMPARE_OP_NEVER = CompareOp 0
+-- | 'COMPARE_OP_LESS' specifies that the test evaluates A \< B.
+pattern COMPARE_OP_LESS = CompareOp 1
+-- | 'COMPARE_OP_EQUAL' specifies that the test evaluates A = B.
+pattern COMPARE_OP_EQUAL = CompareOp 2
+-- | 'COMPARE_OP_LESS_OR_EQUAL' specifies that the test evaluates A ≤ B.
+pattern COMPARE_OP_LESS_OR_EQUAL = CompareOp 3
+-- | 'COMPARE_OP_GREATER' specifies that the test evaluates A > B.
+pattern COMPARE_OP_GREATER = CompareOp 4
+-- | 'COMPARE_OP_NOT_EQUAL' specifies that the test evaluates A ≠ B.
+pattern COMPARE_OP_NOT_EQUAL = CompareOp 5
+-- | 'COMPARE_OP_GREATER_OR_EQUAL' specifies that the test evaluates A ≥ B.
+pattern COMPARE_OP_GREATER_OR_EQUAL = CompareOp 6
+-- | 'COMPARE_OP_ALWAYS' specifies that the test evaluates to true.
+pattern COMPARE_OP_ALWAYS = CompareOp 7
+{-# complete COMPARE_OP_NEVER,
+             COMPARE_OP_LESS,
+             COMPARE_OP_EQUAL,
+             COMPARE_OP_LESS_OR_EQUAL,
+             COMPARE_OP_GREATER,
+             COMPARE_OP_NOT_EQUAL,
+             COMPARE_OP_GREATER_OR_EQUAL,
+             COMPARE_OP_ALWAYS :: CompareOp #-}
+
+instance Show CompareOp where
+  showsPrec p = \case
+    COMPARE_OP_NEVER -> showString "COMPARE_OP_NEVER"
+    COMPARE_OP_LESS -> showString "COMPARE_OP_LESS"
+    COMPARE_OP_EQUAL -> showString "COMPARE_OP_EQUAL"
+    COMPARE_OP_LESS_OR_EQUAL -> showString "COMPARE_OP_LESS_OR_EQUAL"
+    COMPARE_OP_GREATER -> showString "COMPARE_OP_GREATER"
+    COMPARE_OP_NOT_EQUAL -> showString "COMPARE_OP_NOT_EQUAL"
+    COMPARE_OP_GREATER_OR_EQUAL -> showString "COMPARE_OP_GREATER_OR_EQUAL"
+    COMPARE_OP_ALWAYS -> showString "COMPARE_OP_ALWAYS"
+    CompareOp x -> showParen (p >= 11) (showString "CompareOp " . showsPrec 11 x)
+
+instance Read CompareOp where
+  readPrec = parens (choose [("COMPARE_OP_NEVER", pure COMPARE_OP_NEVER)
+                            , ("COMPARE_OP_LESS", pure COMPARE_OP_LESS)
+                            , ("COMPARE_OP_EQUAL", pure COMPARE_OP_EQUAL)
+                            , ("COMPARE_OP_LESS_OR_EQUAL", pure COMPARE_OP_LESS_OR_EQUAL)
+                            , ("COMPARE_OP_GREATER", pure COMPARE_OP_GREATER)
+                            , ("COMPARE_OP_NOT_EQUAL", pure COMPARE_OP_NOT_EQUAL)
+                            , ("COMPARE_OP_GREATER_OR_EQUAL", pure COMPARE_OP_GREATER_OR_EQUAL)
+                            , ("COMPARE_OP_ALWAYS", pure COMPARE_OP_ALWAYS)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CompareOp")
+                       v <- step readPrec
+                       pure (CompareOp v)))
+
diff --git a/src/Vulkan/Core10/Enums/ComponentSwizzle.hs b/src/Vulkan/Core10/Enums/ComponentSwizzle.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ComponentSwizzle.hs
@@ -0,0 +1,108 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ComponentSwizzle  (ComponentSwizzle( COMPONENT_SWIZZLE_IDENTITY
+                                                              , COMPONENT_SWIZZLE_ZERO
+                                                              , COMPONENT_SWIZZLE_ONE
+                                                              , COMPONENT_SWIZZLE_R
+                                                              , COMPONENT_SWIZZLE_G
+                                                              , COMPONENT_SWIZZLE_B
+                                                              , COMPONENT_SWIZZLE_A
+                                                              , ..
+                                                              )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkComponentSwizzle - Specify how a component is swizzled
+--
+-- = Description
+--
+-- Setting the identity swizzle on a component is equivalent to setting the
+-- identity mapping on that component. That is:
+--
+-- +-----------------------------------+-----------------------------------+
+-- | Component                         | Identity Mapping                  |
+-- +===================================+===================================+
+-- | @components.r@                    | 'COMPONENT_SWIZZLE_R'             |
+-- +-----------------------------------+-----------------------------------+
+-- | @components.g@                    | 'COMPONENT_SWIZZLE_G'             |
+-- +-----------------------------------+-----------------------------------+
+-- | @components.b@                    | 'COMPONENT_SWIZZLE_B'             |
+-- +-----------------------------------+-----------------------------------+
+-- | @components.a@                    | 'COMPONENT_SWIZZLE_A'             |
+-- +-----------------------------------+-----------------------------------+
+--
+-- Component Mappings Equivalent To 'COMPONENT_SWIZZLE_IDENTITY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.ImageView.ComponentMapping'
+newtype ComponentSwizzle = ComponentSwizzle Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'COMPONENT_SWIZZLE_IDENTITY' specifies that the component is set to the
+-- identity swizzle.
+pattern COMPONENT_SWIZZLE_IDENTITY = ComponentSwizzle 0
+-- | 'COMPONENT_SWIZZLE_ZERO' specifies that the component is set to zero.
+pattern COMPONENT_SWIZZLE_ZERO = ComponentSwizzle 1
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-definition Format Definition>
+-- section for each 'Vulkan.Core10.Enums.Format.Format'.
+pattern COMPONENT_SWIZZLE_ONE = ComponentSwizzle 2
+-- | 'COMPONENT_SWIZZLE_R' specifies that the component is set to the value
+-- of the R component of the image.
+pattern COMPONENT_SWIZZLE_R = ComponentSwizzle 3
+-- | 'COMPONENT_SWIZZLE_G' specifies that the component is set to the value
+-- of the G component of the image.
+pattern COMPONENT_SWIZZLE_G = ComponentSwizzle 4
+-- | 'COMPONENT_SWIZZLE_B' specifies that the component is set to the value
+-- of the B component of the image.
+pattern COMPONENT_SWIZZLE_B = ComponentSwizzle 5
+-- | 'COMPONENT_SWIZZLE_A' specifies that the component is set to the value
+-- of the A component of the image.
+pattern COMPONENT_SWIZZLE_A = ComponentSwizzle 6
+{-# complete COMPONENT_SWIZZLE_IDENTITY,
+             COMPONENT_SWIZZLE_ZERO,
+             COMPONENT_SWIZZLE_ONE,
+             COMPONENT_SWIZZLE_R,
+             COMPONENT_SWIZZLE_G,
+             COMPONENT_SWIZZLE_B,
+             COMPONENT_SWIZZLE_A :: ComponentSwizzle #-}
+
+instance Show ComponentSwizzle where
+  showsPrec p = \case
+    COMPONENT_SWIZZLE_IDENTITY -> showString "COMPONENT_SWIZZLE_IDENTITY"
+    COMPONENT_SWIZZLE_ZERO -> showString "COMPONENT_SWIZZLE_ZERO"
+    COMPONENT_SWIZZLE_ONE -> showString "COMPONENT_SWIZZLE_ONE"
+    COMPONENT_SWIZZLE_R -> showString "COMPONENT_SWIZZLE_R"
+    COMPONENT_SWIZZLE_G -> showString "COMPONENT_SWIZZLE_G"
+    COMPONENT_SWIZZLE_B -> showString "COMPONENT_SWIZZLE_B"
+    COMPONENT_SWIZZLE_A -> showString "COMPONENT_SWIZZLE_A"
+    ComponentSwizzle x -> showParen (p >= 11) (showString "ComponentSwizzle " . showsPrec 11 x)
+
+instance Read ComponentSwizzle where
+  readPrec = parens (choose [("COMPONENT_SWIZZLE_IDENTITY", pure COMPONENT_SWIZZLE_IDENTITY)
+                            , ("COMPONENT_SWIZZLE_ZERO", pure COMPONENT_SWIZZLE_ZERO)
+                            , ("COMPONENT_SWIZZLE_ONE", pure COMPONENT_SWIZZLE_ONE)
+                            , ("COMPONENT_SWIZZLE_R", pure COMPONENT_SWIZZLE_R)
+                            , ("COMPONENT_SWIZZLE_G", pure COMPONENT_SWIZZLE_G)
+                            , ("COMPONENT_SWIZZLE_B", pure COMPONENT_SWIZZLE_B)
+                            , ("COMPONENT_SWIZZLE_A", pure COMPONENT_SWIZZLE_A)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ComponentSwizzle")
+                       v <- step readPrec
+                       pure (ComponentSwizzle v)))
+
diff --git a/src/Vulkan/Core10/Enums/CullModeFlagBits.hs b/src/Vulkan/Core10/Enums/CullModeFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/CullModeFlagBits.hs
@@ -0,0 +1,69 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.CullModeFlagBits  ( CullModeFlagBits( CULL_MODE_NONE
+                                                               , CULL_MODE_FRONT_BIT
+                                                               , CULL_MODE_BACK_BIT
+                                                               , CULL_MODE_FRONT_AND_BACK
+                                                               , ..
+                                                               )
+                                             , CullModeFlags
+                                             ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkCullModeFlagBits - Bitmask controlling triangle culling
+--
+-- = Description
+--
+-- Following culling, fragments are produced for any triangles which have
+-- not been discarded.
+--
+-- = See Also
+--
+-- 'CullModeFlags'
+newtype CullModeFlagBits = CullModeFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'CULL_MODE_NONE' specifies that no triangles are discarded
+pattern CULL_MODE_NONE = CullModeFlagBits 0x00000000
+-- | 'CULL_MODE_FRONT_BIT' specifies that front-facing triangles are
+-- discarded
+pattern CULL_MODE_FRONT_BIT = CullModeFlagBits 0x00000001
+-- | 'CULL_MODE_BACK_BIT' specifies that back-facing triangles are discarded
+pattern CULL_MODE_BACK_BIT = CullModeFlagBits 0x00000002
+-- | 'CULL_MODE_FRONT_AND_BACK' specifies that all triangles are discarded.
+pattern CULL_MODE_FRONT_AND_BACK = CullModeFlagBits 0x00000003
+
+type CullModeFlags = CullModeFlagBits
+
+instance Show CullModeFlagBits where
+  showsPrec p = \case
+    CULL_MODE_NONE -> showString "CULL_MODE_NONE"
+    CULL_MODE_FRONT_BIT -> showString "CULL_MODE_FRONT_BIT"
+    CULL_MODE_BACK_BIT -> showString "CULL_MODE_BACK_BIT"
+    CULL_MODE_FRONT_AND_BACK -> showString "CULL_MODE_FRONT_AND_BACK"
+    CullModeFlagBits x -> showParen (p >= 11) (showString "CullModeFlagBits 0x" . showHex x)
+
+instance Read CullModeFlagBits where
+  readPrec = parens (choose [("CULL_MODE_NONE", pure CULL_MODE_NONE)
+                            , ("CULL_MODE_FRONT_BIT", pure CULL_MODE_FRONT_BIT)
+                            , ("CULL_MODE_BACK_BIT", pure CULL_MODE_BACK_BIT)
+                            , ("CULL_MODE_FRONT_AND_BACK", pure CULL_MODE_FRONT_AND_BACK)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CullModeFlagBits")
+                       v <- step readPrec
+                       pure (CullModeFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/DependencyFlagBits.hs b/src/Vulkan/Core10/Enums/DependencyFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/DependencyFlagBits.hs
@@ -0,0 +1,62 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.DependencyFlagBits  ( DependencyFlagBits( DEPENDENCY_BY_REGION_BIT
+                                                                   , DEPENDENCY_VIEW_LOCAL_BIT
+                                                                   , DEPENDENCY_DEVICE_GROUP_BIT
+                                                                   , ..
+                                                                   )
+                                               , DependencyFlags
+                                               ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkDependencyFlagBits - Bitmask specifying how execution and memory
+-- dependencies are formed
+--
+-- = See Also
+--
+-- 'DependencyFlags'
+newtype DependencyFlagBits = DependencyFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'DEPENDENCY_BY_REGION_BIT' specifies that dependencies will be
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-local>.
+pattern DEPENDENCY_BY_REGION_BIT = DependencyFlagBits 0x00000001
+-- | 'DEPENDENCY_VIEW_LOCAL_BIT' specifies that a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-barriers-subpass-self-dependencies subpass has more than one view>.
+pattern DEPENDENCY_VIEW_LOCAL_BIT = DependencyFlagBits 0x00000002
+-- | 'DEPENDENCY_DEVICE_GROUP_BIT' specifies that dependencies are
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-device-local-dependencies non-device-local dependency>.
+pattern DEPENDENCY_DEVICE_GROUP_BIT = DependencyFlagBits 0x00000004
+
+type DependencyFlags = DependencyFlagBits
+
+instance Show DependencyFlagBits where
+  showsPrec p = \case
+    DEPENDENCY_BY_REGION_BIT -> showString "DEPENDENCY_BY_REGION_BIT"
+    DEPENDENCY_VIEW_LOCAL_BIT -> showString "DEPENDENCY_VIEW_LOCAL_BIT"
+    DEPENDENCY_DEVICE_GROUP_BIT -> showString "DEPENDENCY_DEVICE_GROUP_BIT"
+    DependencyFlagBits x -> showParen (p >= 11) (showString "DependencyFlagBits 0x" . showHex x)
+
+instance Read DependencyFlagBits where
+  readPrec = parens (choose [("DEPENDENCY_BY_REGION_BIT", pure DEPENDENCY_BY_REGION_BIT)
+                            , ("DEPENDENCY_VIEW_LOCAL_BIT", pure DEPENDENCY_VIEW_LOCAL_BIT)
+                            , ("DEPENDENCY_DEVICE_GROUP_BIT", pure DEPENDENCY_DEVICE_GROUP_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DependencyFlagBits")
+                       v <- step readPrec
+                       pure (DependencyFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/DependencyFlagBits.hs-boot b/src/Vulkan/Core10/Enums/DependencyFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/DependencyFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.DependencyFlagBits  ( DependencyFlagBits
+                                               , DependencyFlags
+                                               ) where
+
+
+
+data DependencyFlagBits
+
+type DependencyFlags = DependencyFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/DescriptorPoolCreateFlagBits.hs b/src/Vulkan/Core10/Enums/DescriptorPoolCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/DescriptorPoolCreateFlagBits.hs
@@ -0,0 +1,69 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits  ( DescriptorPoolCreateFlagBits( DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
+                                                                                       , DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT
+                                                                                       , ..
+                                                                                       )
+                                                         , DescriptorPoolCreateFlags
+                                                         ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkDescriptorPoolCreateFlagBits - Bitmask specifying certain supported
+-- operations on a descriptor pool
+--
+-- = See Also
+--
+-- 'DescriptorPoolCreateFlags'
+newtype DescriptorPoolCreateFlagBits = DescriptorPoolCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT' specifies that
+-- descriptor sets /can/ return their individual allocations to the pool,
+-- i.e. all of 'Vulkan.Core10.DescriptorSet.allocateDescriptorSets',
+-- 'Vulkan.Core10.DescriptorSet.freeDescriptorSets', and
+-- 'Vulkan.Core10.DescriptorSet.resetDescriptorPool' are allowed.
+-- Otherwise, descriptor sets allocated from the pool /must/ not be
+-- individually freed back to the pool, i.e. only
+-- 'Vulkan.Core10.DescriptorSet.allocateDescriptorSets' and
+-- 'Vulkan.Core10.DescriptorSet.resetDescriptorPool' are allowed.
+pattern DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = DescriptorPoolCreateFlagBits 0x00000001
+-- | 'DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT' specifies that descriptor
+-- sets allocated from this pool /can/ include bindings with the
+-- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+-- bit set. It is valid to allocate descriptor sets that have bindings that
+-- do not set the
+-- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+-- bit from a pool that has 'DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
+-- set.
+pattern DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = DescriptorPoolCreateFlagBits 0x00000002
+
+type DescriptorPoolCreateFlags = DescriptorPoolCreateFlagBits
+
+instance Show DescriptorPoolCreateFlagBits where
+  showsPrec p = \case
+    DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT -> showString "DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT"
+    DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT -> showString "DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT"
+    DescriptorPoolCreateFlagBits x -> showParen (p >= 11) (showString "DescriptorPoolCreateFlagBits 0x" . showHex x)
+
+instance Read DescriptorPoolCreateFlagBits where
+  readPrec = parens (choose [("DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT", pure DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT)
+                            , ("DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT", pure DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DescriptorPoolCreateFlagBits")
+                       v <- step readPrec
+                       pure (DescriptorPoolCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs b/src/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.DescriptorPoolResetFlags  (DescriptorPoolResetFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkDescriptorPoolResetFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'DescriptorPoolResetFlags' is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DescriptorSet.resetDescriptorPool'
+newtype DescriptorPoolResetFlags = DescriptorPoolResetFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show DescriptorPoolResetFlags where
+  showsPrec p = \case
+    DescriptorPoolResetFlags x -> showParen (p >= 11) (showString "DescriptorPoolResetFlags 0x" . showHex x)
+
+instance Read DescriptorPoolResetFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DescriptorPoolResetFlags")
+                       v <- step readPrec
+                       pure (DescriptorPoolResetFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs-boot b/src/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/DescriptorPoolResetFlags.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.DescriptorPoolResetFlags  (DescriptorPoolResetFlags) where
+
+
+
+data DescriptorPoolResetFlags
+
diff --git a/src/Vulkan/Core10/Enums/DescriptorSetLayoutCreateFlagBits.hs b/src/Vulkan/Core10/Enums/DescriptorSetLayoutCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/DescriptorSetLayoutCreateFlagBits.hs
@@ -0,0 +1,66 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits  ( DescriptorSetLayoutCreateFlagBits( DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
+                                                                                                 , DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
+                                                                                                 , ..
+                                                                                                 )
+                                                              , DescriptorSetLayoutCreateFlags
+                                                              ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkDescriptorSetLayoutCreateFlagBits - Bitmask specifying descriptor set
+-- layout properties
+--
+-- = See Also
+--
+-- 'DescriptorSetLayoutCreateFlags'
+newtype DescriptorSetLayoutCreateFlagBits = DescriptorSetLayoutCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR' specifies that
+-- descriptor sets /must/ not be allocated using this layout, and
+-- descriptors are instead pushed by
+-- 'Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetKHR'.
+pattern DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = DescriptorSetLayoutCreateFlagBits 0x00000001
+-- | 'DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' specifies that
+-- descriptor sets using this layout /must/ be allocated from a descriptor
+-- pool created with the
+-- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
+-- bit set. Descriptor set layouts created with this bit set have alternate
+-- limits for the maximum number of descriptors per-stage and per-pipeline
+-- layout. The non-UpdateAfterBind limits only count descriptors in sets
+-- created without this flag. The UpdateAfterBind limits count all
+-- descriptors, but the limits /may/ be higher than the non-UpdateAfterBind
+-- limits.
+pattern DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = DescriptorSetLayoutCreateFlagBits 0x00000002
+
+type DescriptorSetLayoutCreateFlags = DescriptorSetLayoutCreateFlagBits
+
+instance Show DescriptorSetLayoutCreateFlagBits where
+  showsPrec p = \case
+    DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR -> showString "DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR"
+    DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT -> showString "DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT"
+    DescriptorSetLayoutCreateFlagBits x -> showParen (p >= 11) (showString "DescriptorSetLayoutCreateFlagBits 0x" . showHex x)
+
+instance Read DescriptorSetLayoutCreateFlagBits where
+  readPrec = parens (choose [("DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR", pure DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR)
+                            , ("DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT", pure DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DescriptorSetLayoutCreateFlagBits")
+                       v <- step readPrec
+                       pure (DescriptorSetLayoutCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/DescriptorType.hs b/src/Vulkan/Core10/Enums/DescriptorType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/DescriptorType.hs
@@ -0,0 +1,211 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.DescriptorType  (DescriptorType( DESCRIPTOR_TYPE_SAMPLER
+                                                          , DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
+                                                          , DESCRIPTOR_TYPE_SAMPLED_IMAGE
+                                                          , DESCRIPTOR_TYPE_STORAGE_IMAGE
+                                                          , DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
+                                                          , DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
+                                                          , DESCRIPTOR_TYPE_UNIFORM_BUFFER
+                                                          , DESCRIPTOR_TYPE_STORAGE_BUFFER
+                                                          , DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
+                                                          , DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
+                                                          , DESCRIPTOR_TYPE_INPUT_ATTACHMENT
+                                                          , DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR
+                                                          , DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
+                                                          , ..
+                                                          )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkDescriptorType - Specifies the type of a descriptor in a descriptor
+-- set
+--
+-- = Description
+--
+-- -   'DESCRIPTOR_TYPE_SAMPLER' specifies a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampler sampler descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER' specifies a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler combined image sampler descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_SAMPLED_IMAGE' specifies a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled image descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_STORAGE_IMAGE' specifies a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER' specifies a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer uniform texel buffer descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER' specifies a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer storage texel buffer descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_UNIFORM_BUFFER' specifies a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer uniform buffer descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_STORAGE_BUFFER' specifies a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer storage buffer descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC' specifies a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic dynamic uniform buffer descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC' specifies a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic dynamic storage buffer descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_INPUT_ATTACHMENT' specifies an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment input attachment descriptor>.
+--
+-- -   'DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT' specifies an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inlineuniformblock inline uniform block>.
+--
+-- When a descriptor set is updated via elements of
+-- 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet', 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 'DESCRIPTOR_TYPE_SAMPLER', only the @sampler@ member of each
+--     element of
+--     'Vulkan.Core10.DescriptorSet.WriteDescriptorSet'::@pImageInfo@ is
+--     accessed.
+--
+-- -   For 'DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+--     'DESCRIPTOR_TYPE_STORAGE_IMAGE', or
+--     'DESCRIPTOR_TYPE_INPUT_ATTACHMENT', only the @imageView@ and
+--     @imageLayout@ members of each element of
+--     'Vulkan.Core10.DescriptorSet.WriteDescriptorSet'::@pImageInfo@ are
+--     accessed.
+--
+-- -   For 'DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', all members of each
+--     element of
+--     'Vulkan.Core10.DescriptorSet.WriteDescriptorSet'::@pImageInfo@ are
+--     accessed.
+--
+-- -   For 'DESCRIPTOR_TYPE_UNIFORM_BUFFER',
+--     'DESCRIPTOR_TYPE_STORAGE_BUFFER',
+--     'DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC', or
+--     'DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC', all members of each
+--     element of
+--     'Vulkan.Core10.DescriptorSet.WriteDescriptorSet'::@pBufferInfo@ are
+--     accessed.
+--
+-- -   For 'DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER' or
+--     'DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER', each element of
+--     'Vulkan.Core10.DescriptorSet.WriteDescriptorSet'::@pTexelBufferView@
+--     is accessed.
+--
+-- When updating descriptors with a @descriptorType@ of
+-- 'DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT', none of the @pImageInfo@,
+-- @pBufferInfo@, or @pTexelBufferView@ members are accessed, instead the
+-- source data of the descriptor update operation is taken from the
+-- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT'
+-- structure in the @pNext@ chain of
+-- 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet'. When updating
+-- descriptors with a @descriptorType@ of
+-- 'DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR', none of the @pImageInfo@,
+-- @pBufferInfo@, or @pTexelBufferView@ members are accessed, instead the
+-- source data of the descriptor update operation is taken from the
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR'
+-- structure in the @pNext@ chain of
+-- 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet'.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DescriptorSet.DescriptorPoolSize',
+-- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateEntry',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewHandleInfoNVX',
+-- 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet'
+newtype DescriptorType = DescriptorType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_SAMPLER"
+pattern DESCRIPTOR_TYPE_SAMPLER = DescriptorType 0
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER"
+pattern DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = DescriptorType 1
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE"
+pattern DESCRIPTOR_TYPE_SAMPLED_IMAGE = DescriptorType 2
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE"
+pattern DESCRIPTOR_TYPE_STORAGE_IMAGE = DescriptorType 3
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER"
+pattern DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = DescriptorType 4
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER"
+pattern DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = DescriptorType 5
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER"
+pattern DESCRIPTOR_TYPE_UNIFORM_BUFFER = DescriptorType 6
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER"
+pattern DESCRIPTOR_TYPE_STORAGE_BUFFER = DescriptorType 7
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC"
+pattern DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = DescriptorType 8
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"
+pattern DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = DescriptorType 9
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT"
+pattern DESCRIPTOR_TYPE_INPUT_ATTACHMENT = DescriptorType 10
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR"
+pattern DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = DescriptorType 1000165000
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT"
+pattern DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = DescriptorType 1000138000
+{-# complete DESCRIPTOR_TYPE_SAMPLER,
+             DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+             DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+             DESCRIPTOR_TYPE_STORAGE_IMAGE,
+             DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
+             DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
+             DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+             DESCRIPTOR_TYPE_STORAGE_BUFFER,
+             DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
+             DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
+             DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
+             DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR,
+             DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT :: DescriptorType #-}
+
+instance Show DescriptorType where
+  showsPrec p = \case
+    DESCRIPTOR_TYPE_SAMPLER -> showString "DESCRIPTOR_TYPE_SAMPLER"
+    DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER -> showString "DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER"
+    DESCRIPTOR_TYPE_SAMPLED_IMAGE -> showString "DESCRIPTOR_TYPE_SAMPLED_IMAGE"
+    DESCRIPTOR_TYPE_STORAGE_IMAGE -> showString "DESCRIPTOR_TYPE_STORAGE_IMAGE"
+    DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER -> showString "DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER"
+    DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER -> showString "DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER"
+    DESCRIPTOR_TYPE_UNIFORM_BUFFER -> showString "DESCRIPTOR_TYPE_UNIFORM_BUFFER"
+    DESCRIPTOR_TYPE_STORAGE_BUFFER -> showString "DESCRIPTOR_TYPE_STORAGE_BUFFER"
+    DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC -> showString "DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC"
+    DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC -> showString "DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"
+    DESCRIPTOR_TYPE_INPUT_ATTACHMENT -> showString "DESCRIPTOR_TYPE_INPUT_ATTACHMENT"
+    DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR -> showString "DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR"
+    DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT -> showString "DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT"
+    DescriptorType x -> showParen (p >= 11) (showString "DescriptorType " . showsPrec 11 x)
+
+instance Read DescriptorType where
+  readPrec = parens (choose [("DESCRIPTOR_TYPE_SAMPLER", pure DESCRIPTOR_TYPE_SAMPLER)
+                            , ("DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER", pure DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
+                            , ("DESCRIPTOR_TYPE_SAMPLED_IMAGE", pure DESCRIPTOR_TYPE_SAMPLED_IMAGE)
+                            , ("DESCRIPTOR_TYPE_STORAGE_IMAGE", pure DESCRIPTOR_TYPE_STORAGE_IMAGE)
+                            , ("DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER", pure DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER)
+                            , ("DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER", pure DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER)
+                            , ("DESCRIPTOR_TYPE_UNIFORM_BUFFER", pure DESCRIPTOR_TYPE_UNIFORM_BUFFER)
+                            , ("DESCRIPTOR_TYPE_STORAGE_BUFFER", pure DESCRIPTOR_TYPE_STORAGE_BUFFER)
+                            , ("DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC", pure DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC)
+                            , ("DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", pure DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
+                            , ("DESCRIPTOR_TYPE_INPUT_ATTACHMENT", pure DESCRIPTOR_TYPE_INPUT_ATTACHMENT)
+                            , ("DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR", pure DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR)
+                            , ("DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT", pure DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DescriptorType")
+                       v <- step readPrec
+                       pure (DescriptorType v)))
+
diff --git a/src/Vulkan/Core10/Enums/DeviceCreateFlags.hs b/src/Vulkan/Core10/Enums/DeviceCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/DeviceCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.DeviceCreateFlags  (DeviceCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkDeviceCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'DeviceCreateFlags' is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Device.DeviceCreateInfo'
+newtype DeviceCreateFlags = DeviceCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show DeviceCreateFlags where
+  showsPrec p = \case
+    DeviceCreateFlags x -> showParen (p >= 11) (showString "DeviceCreateFlags 0x" . showHex x)
+
+instance Read DeviceCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DeviceCreateFlags")
+                       v <- step readPrec
+                       pure (DeviceCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/DeviceQueueCreateFlagBits.hs b/src/Vulkan/Core10/Enums/DeviceQueueCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/DeviceQueueCreateFlagBits.hs
@@ -0,0 +1,49 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.DeviceQueueCreateFlagBits  ( DeviceQueueCreateFlagBits( DEVICE_QUEUE_CREATE_PROTECTED_BIT
+                                                                                 , ..
+                                                                                 )
+                                                      , DeviceQueueCreateFlags
+                                                      ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkDeviceQueueCreateFlagBits - Bitmask specifying behavior of the queue
+--
+-- = See Also
+--
+-- 'DeviceQueueCreateFlags'
+newtype DeviceQueueCreateFlagBits = DeviceQueueCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'DEVICE_QUEUE_CREATE_PROTECTED_BIT' specifies that the device queue is a
+-- protected-capable queue.
+pattern DEVICE_QUEUE_CREATE_PROTECTED_BIT = DeviceQueueCreateFlagBits 0x00000001
+
+type DeviceQueueCreateFlags = DeviceQueueCreateFlagBits
+
+instance Show DeviceQueueCreateFlagBits where
+  showsPrec p = \case
+    DEVICE_QUEUE_CREATE_PROTECTED_BIT -> showString "DEVICE_QUEUE_CREATE_PROTECTED_BIT"
+    DeviceQueueCreateFlagBits x -> showParen (p >= 11) (showString "DeviceQueueCreateFlagBits 0x" . showHex x)
+
+instance Read DeviceQueueCreateFlagBits where
+  readPrec = parens (choose [("DEVICE_QUEUE_CREATE_PROTECTED_BIT", pure DEVICE_QUEUE_CREATE_PROTECTED_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DeviceQueueCreateFlagBits")
+                       v <- step readPrec
+                       pure (DeviceQueueCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/DynamicState.hs b/src/Vulkan/Core10/Enums/DynamicState.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/DynamicState.hs
@@ -0,0 +1,239 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.DynamicState  (DynamicState( DYNAMIC_STATE_VIEWPORT
+                                                      , DYNAMIC_STATE_SCISSOR
+                                                      , DYNAMIC_STATE_LINE_WIDTH
+                                                      , DYNAMIC_STATE_DEPTH_BIAS
+                                                      , DYNAMIC_STATE_BLEND_CONSTANTS
+                                                      , DYNAMIC_STATE_DEPTH_BOUNDS
+                                                      , DYNAMIC_STATE_STENCIL_COMPARE_MASK
+                                                      , DYNAMIC_STATE_STENCIL_WRITE_MASK
+                                                      , DYNAMIC_STATE_STENCIL_REFERENCE
+                                                      , DYNAMIC_STATE_LINE_STIPPLE_EXT
+                                                      , DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV
+                                                      , DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV
+                                                      , DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
+                                                      , DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
+                                                      , DYNAMIC_STATE_DISCARD_RECTANGLE_EXT
+                                                      , DYNAMIC_STATE_VIEWPORT_W_SCALING_NV
+                                                      , ..
+                                                      )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkDynamicState - Indicate which dynamic state is taken from dynamic
+-- state commands
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'
+newtype DynamicState = DynamicState Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'DYNAMIC_STATE_VIEWPORT' specifies that the @pViewports@ state in
+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' will be ignored
+-- and /must/ be set dynamically with
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetViewport' before any draw
+-- commands. The number of viewports used by a pipeline is still specified
+-- by the @viewportCount@ member of
+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'.
+pattern DYNAMIC_STATE_VIEWPORT = DynamicState 0
+-- | 'DYNAMIC_STATE_SCISSOR' specifies that the @pScissors@ state in
+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' will be ignored
+-- and /must/ be set dynamically with
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetScissor' before any draw
+-- commands. The number of scissor rectangles used by a pipeline is still
+-- specified by the @scissorCount@ member of
+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'.
+pattern DYNAMIC_STATE_SCISSOR = DynamicState 1
+-- | 'DYNAMIC_STATE_LINE_WIDTH' specifies that the @lineWidth@ state in
+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' will be
+-- ignored and /must/ be set dynamically with
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' before any draw
+-- commands that generate line primitives for the rasterizer.
+pattern DYNAMIC_STATE_LINE_WIDTH = DynamicState 2
+-- | 'DYNAMIC_STATE_DEPTH_BIAS' specifies that the @depthBiasConstantFactor@,
+-- @depthBiasClamp@ and @depthBiasSlopeFactor@ states in
+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' will be
+-- ignored and /must/ be set dynamically with
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBias' before any draws
+-- are performed with @depthBiasEnable@ in
+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' set to
+-- 'Vulkan.Core10.BaseType.TRUE'.
+pattern DYNAMIC_STATE_DEPTH_BIAS = DynamicState 3
+-- | 'DYNAMIC_STATE_BLEND_CONSTANTS' specifies that the @blendConstants@
+-- state in 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo' will
+-- be ignored and /must/ be set dynamically with
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetBlendConstants' before any
+-- draws are performed with a pipeline state with
+-- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState' member
+-- @blendEnable@ set to 'Vulkan.Core10.BaseType.TRUE' and any of the blend
+-- functions using a constant blend color.
+pattern DYNAMIC_STATE_BLEND_CONSTANTS = DynamicState 4
+-- | 'DYNAMIC_STATE_DEPTH_BOUNDS' specifies that the @minDepthBounds@ and
+-- @maxDepthBounds@ states of
+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' will be
+-- ignored and /must/ be set dynamically with
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBounds' before any draws
+-- are performed with a pipeline state with
+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' member
+-- @depthBoundsTestEnable@ set to 'Vulkan.Core10.BaseType.TRUE'.
+pattern DYNAMIC_STATE_DEPTH_BOUNDS = DynamicState 5
+-- | 'DYNAMIC_STATE_STENCIL_COMPARE_MASK' specifies that the @compareMask@
+-- state in 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
+-- for both @front@ and @back@ will be ignored and /must/ be set
+-- dynamically with
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetStencilCompareMask' before
+-- any draws are performed with a pipeline state with
+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' member
+-- @stencilTestEnable@ set to 'Vulkan.Core10.BaseType.TRUE'
+pattern DYNAMIC_STATE_STENCIL_COMPARE_MASK = DynamicState 6
+-- | 'DYNAMIC_STATE_STENCIL_WRITE_MASK' specifies that the @writeMask@ state
+-- in 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' for both
+-- @front@ and @back@ will be ignored and /must/ be set dynamically with
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetStencilWriteMask' before any
+-- draws are performed with a pipeline state with
+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' member
+-- @stencilTestEnable@ set to 'Vulkan.Core10.BaseType.TRUE'
+pattern DYNAMIC_STATE_STENCIL_WRITE_MASK = DynamicState 7
+-- | 'DYNAMIC_STATE_STENCIL_REFERENCE' specifies that the @reference@ state
+-- in 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' for both
+-- @front@ and @back@ will be ignored and /must/ be set dynamically with
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetStencilReference' before any
+-- draws are performed with a pipeline state with
+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' member
+-- @stencilTestEnable@ set to 'Vulkan.Core10.BaseType.TRUE'
+pattern DYNAMIC_STATE_STENCIL_REFERENCE = DynamicState 8
+-- | 'DYNAMIC_STATE_LINE_STIPPLE_EXT' specifies that the @lineStippleFactor@
+-- and @lineStipplePattern@ state in
+-- 'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
+-- will be ignored and /must/ be set dynamically with
+-- 'Vulkan.Extensions.VK_EXT_line_rasterization.cmdSetLineStippleEXT'
+-- before any draws are performed with a pipeline state with
+-- 'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
+-- member @stippledLineEnable@ set to 'Vulkan.Core10.BaseType.TRUE'.
+pattern DYNAMIC_STATE_LINE_STIPPLE_EXT = DynamicState 1000259000
+-- | 'DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV' specifies that the
+-- @pExclusiveScissors@ state in
+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'
+-- will be ignored and /must/ be set dynamically with
+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV'
+-- before any draw commands. The number of exclusive scissor rectangles
+-- used by a pipeline is still specified by the @exclusiveScissorCount@
+-- member of
+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'.
+pattern DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = DynamicState 1000205001
+-- | 'DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV' specifies that the
+-- coarse sample order state in
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportCoarseSampleOrderStateCreateInfoNV'
+-- will be ignored and /must/ be set dynamically with
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetCoarseSampleOrderNV'
+-- before any draw commands.
+pattern DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = DynamicState 1000164006
+-- | 'DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV' specifies that the
+-- @pShadingRatePalettes@ state in
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'
+-- will be ignored and /must/ be set dynamically with
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'
+-- before any draw commands.
+pattern DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = DynamicState 1000164004
+-- | 'DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT' specifies that the
+-- @sampleLocationsInfo@ state in
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+-- will be ignored and /must/ be set dynamically with
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
+-- before any draw or clear commands. Enabling custom sample locations is
+-- still indicated by the @sampleLocationsEnable@ member of
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'.
+pattern DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = DynamicState 1000143000
+-- | 'DYNAMIC_STATE_DISCARD_RECTANGLE_EXT' specifies that the
+-- @pDiscardRectangles@ state in
+-- 'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'
+-- will be ignored and /must/ be set dynamically with
+-- 'Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEXT'
+-- before any draw or clear commands. The
+-- 'Vulkan.Extensions.VK_EXT_discard_rectangles.DiscardRectangleModeEXT'
+-- and the number of active discard rectangles is still specified by the
+-- @discardRectangleMode@ and @discardRectangleCount@ members of
+-- 'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'.
+pattern DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = DynamicState 1000099000
+-- | 'DYNAMIC_STATE_VIEWPORT_W_SCALING_NV' specifies that the
+-- @pViewportScalings@ state in
+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+-- will be ignored and /must/ be set dynamically with
+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'
+-- before any draws are performed with a pipeline state with
+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+-- member @viewportScalingEnable@ set to 'Vulkan.Core10.BaseType.TRUE'
+pattern DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = DynamicState 1000087000
+{-# complete DYNAMIC_STATE_VIEWPORT,
+             DYNAMIC_STATE_SCISSOR,
+             DYNAMIC_STATE_LINE_WIDTH,
+             DYNAMIC_STATE_DEPTH_BIAS,
+             DYNAMIC_STATE_BLEND_CONSTANTS,
+             DYNAMIC_STATE_DEPTH_BOUNDS,
+             DYNAMIC_STATE_STENCIL_COMPARE_MASK,
+             DYNAMIC_STATE_STENCIL_WRITE_MASK,
+             DYNAMIC_STATE_STENCIL_REFERENCE,
+             DYNAMIC_STATE_LINE_STIPPLE_EXT,
+             DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV,
+             DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV,
+             DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV,
+             DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT,
+             DYNAMIC_STATE_DISCARD_RECTANGLE_EXT,
+             DYNAMIC_STATE_VIEWPORT_W_SCALING_NV :: DynamicState #-}
+
+instance Show DynamicState where
+  showsPrec p = \case
+    DYNAMIC_STATE_VIEWPORT -> showString "DYNAMIC_STATE_VIEWPORT"
+    DYNAMIC_STATE_SCISSOR -> showString "DYNAMIC_STATE_SCISSOR"
+    DYNAMIC_STATE_LINE_WIDTH -> showString "DYNAMIC_STATE_LINE_WIDTH"
+    DYNAMIC_STATE_DEPTH_BIAS -> showString "DYNAMIC_STATE_DEPTH_BIAS"
+    DYNAMIC_STATE_BLEND_CONSTANTS -> showString "DYNAMIC_STATE_BLEND_CONSTANTS"
+    DYNAMIC_STATE_DEPTH_BOUNDS -> showString "DYNAMIC_STATE_DEPTH_BOUNDS"
+    DYNAMIC_STATE_STENCIL_COMPARE_MASK -> showString "DYNAMIC_STATE_STENCIL_COMPARE_MASK"
+    DYNAMIC_STATE_STENCIL_WRITE_MASK -> showString "DYNAMIC_STATE_STENCIL_WRITE_MASK"
+    DYNAMIC_STATE_STENCIL_REFERENCE -> showString "DYNAMIC_STATE_STENCIL_REFERENCE"
+    DYNAMIC_STATE_LINE_STIPPLE_EXT -> showString "DYNAMIC_STATE_LINE_STIPPLE_EXT"
+    DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV -> showString "DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV"
+    DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV -> showString "DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV"
+    DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV -> showString "DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV"
+    DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT -> showString "DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT"
+    DYNAMIC_STATE_DISCARD_RECTANGLE_EXT -> showString "DYNAMIC_STATE_DISCARD_RECTANGLE_EXT"
+    DYNAMIC_STATE_VIEWPORT_W_SCALING_NV -> showString "DYNAMIC_STATE_VIEWPORT_W_SCALING_NV"
+    DynamicState x -> showParen (p >= 11) (showString "DynamicState " . showsPrec 11 x)
+
+instance Read DynamicState where
+  readPrec = parens (choose [("DYNAMIC_STATE_VIEWPORT", pure DYNAMIC_STATE_VIEWPORT)
+                            , ("DYNAMIC_STATE_SCISSOR", pure DYNAMIC_STATE_SCISSOR)
+                            , ("DYNAMIC_STATE_LINE_WIDTH", pure DYNAMIC_STATE_LINE_WIDTH)
+                            , ("DYNAMIC_STATE_DEPTH_BIAS", pure DYNAMIC_STATE_DEPTH_BIAS)
+                            , ("DYNAMIC_STATE_BLEND_CONSTANTS", pure DYNAMIC_STATE_BLEND_CONSTANTS)
+                            , ("DYNAMIC_STATE_DEPTH_BOUNDS", pure DYNAMIC_STATE_DEPTH_BOUNDS)
+                            , ("DYNAMIC_STATE_STENCIL_COMPARE_MASK", pure DYNAMIC_STATE_STENCIL_COMPARE_MASK)
+                            , ("DYNAMIC_STATE_STENCIL_WRITE_MASK", pure DYNAMIC_STATE_STENCIL_WRITE_MASK)
+                            , ("DYNAMIC_STATE_STENCIL_REFERENCE", pure DYNAMIC_STATE_STENCIL_REFERENCE)
+                            , ("DYNAMIC_STATE_LINE_STIPPLE_EXT", pure DYNAMIC_STATE_LINE_STIPPLE_EXT)
+                            , ("DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV", pure DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV)
+                            , ("DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV", pure DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV)
+                            , ("DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV", pure DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV)
+                            , ("DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT", pure DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT)
+                            , ("DYNAMIC_STATE_DISCARD_RECTANGLE_EXT", pure DYNAMIC_STATE_DISCARD_RECTANGLE_EXT)
+                            , ("DYNAMIC_STATE_VIEWPORT_W_SCALING_NV", pure DYNAMIC_STATE_VIEWPORT_W_SCALING_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DynamicState")
+                       v <- step readPrec
+                       pure (DynamicState v)))
+
diff --git a/src/Vulkan/Core10/Enums/EventCreateFlags.hs b/src/Vulkan/Core10/Enums/EventCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/EventCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.EventCreateFlags  (EventCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkEventCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'EventCreateFlags' is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Event.EventCreateInfo'
+newtype EventCreateFlags = EventCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show EventCreateFlags where
+  showsPrec p = \case
+    EventCreateFlags x -> showParen (p >= 11) (showString "EventCreateFlags 0x" . showHex x)
+
+instance Read EventCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "EventCreateFlags")
+                       v <- step readPrec
+                       pure (EventCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/FenceCreateFlagBits.hs b/src/Vulkan/Core10/Enums/FenceCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/FenceCreateFlagBits.hs
@@ -0,0 +1,50 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.FenceCreateFlagBits  ( FenceCreateFlagBits( FENCE_CREATE_SIGNALED_BIT
+                                                                     , ..
+                                                                     )
+                                                , FenceCreateFlags
+                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkFenceCreateFlagBits - Bitmask specifying initial state and behavior of
+-- a fence
+--
+-- = See Also
+--
+-- 'FenceCreateFlags'
+newtype FenceCreateFlagBits = FenceCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'FENCE_CREATE_SIGNALED_BIT' specifies that the fence object is created
+-- in the signaled state. Otherwise, it is created in the unsignaled state.
+pattern FENCE_CREATE_SIGNALED_BIT = FenceCreateFlagBits 0x00000001
+
+type FenceCreateFlags = FenceCreateFlagBits
+
+instance Show FenceCreateFlagBits where
+  showsPrec p = \case
+    FENCE_CREATE_SIGNALED_BIT -> showString "FENCE_CREATE_SIGNALED_BIT"
+    FenceCreateFlagBits x -> showParen (p >= 11) (showString "FenceCreateFlagBits 0x" . showHex x)
+
+instance Read FenceCreateFlagBits where
+  readPrec = parens (choose [("FENCE_CREATE_SIGNALED_BIT", pure FENCE_CREATE_SIGNALED_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "FenceCreateFlagBits")
+                       v <- step readPrec
+                       pure (FenceCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/Filter.hs b/src/Vulkan/Core10/Enums/Filter.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/Filter.hs
@@ -0,0 +1,63 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.Filter  (Filter( FILTER_NEAREST
+                                          , FILTER_LINEAR
+                                          , FILTER_CUBIC_IMG
+                                          , ..
+                                          )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkFilter - Specify filters used for texture lookups
+--
+-- = Description
+--
+-- These filters are described in detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-texel-filtering Texel Filtering>.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Sampler.SamplerCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
+newtype Filter = Filter Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'FILTER_NEAREST' specifies nearest filtering.
+pattern FILTER_NEAREST = Filter 0
+-- | 'FILTER_LINEAR' specifies linear filtering.
+pattern FILTER_LINEAR = Filter 1
+-- No documentation found for Nested "VkFilter" "VK_FILTER_CUBIC_IMG"
+pattern FILTER_CUBIC_IMG = Filter 1000015000
+{-# complete FILTER_NEAREST,
+             FILTER_LINEAR,
+             FILTER_CUBIC_IMG :: Filter #-}
+
+instance Show Filter where
+  showsPrec p = \case
+    FILTER_NEAREST -> showString "FILTER_NEAREST"
+    FILTER_LINEAR -> showString "FILTER_LINEAR"
+    FILTER_CUBIC_IMG -> showString "FILTER_CUBIC_IMG"
+    Filter x -> showParen (p >= 11) (showString "Filter " . showsPrec 11 x)
+
+instance Read Filter where
+  readPrec = parens (choose [("FILTER_NEAREST", pure FILTER_NEAREST)
+                            , ("FILTER_LINEAR", pure FILTER_LINEAR)
+                            , ("FILTER_CUBIC_IMG", pure FILTER_CUBIC_IMG)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "Filter")
+                       v <- step readPrec
+                       pure (Filter v)))
+
diff --git a/src/Vulkan/Core10/Enums/Filter.hs-boot b/src/Vulkan/Core10/Enums/Filter.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/Filter.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.Filter  (Filter) where
+
+
+
+data Filter
+
diff --git a/src/Vulkan/Core10/Enums/Format.hs b/src/Vulkan/Core10/Enums/Format.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/Format.hs
@@ -0,0 +1,2435 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.Format  (Format( FORMAT_UNDEFINED
+                                          , FORMAT_R4G4_UNORM_PACK8
+                                          , FORMAT_R4G4B4A4_UNORM_PACK16
+                                          , FORMAT_B4G4R4A4_UNORM_PACK16
+                                          , FORMAT_R5G6B5_UNORM_PACK16
+                                          , FORMAT_B5G6R5_UNORM_PACK16
+                                          , FORMAT_R5G5B5A1_UNORM_PACK16
+                                          , FORMAT_B5G5R5A1_UNORM_PACK16
+                                          , FORMAT_A1R5G5B5_UNORM_PACK16
+                                          , FORMAT_R8_UNORM
+                                          , FORMAT_R8_SNORM
+                                          , FORMAT_R8_USCALED
+                                          , FORMAT_R8_SSCALED
+                                          , FORMAT_R8_UINT
+                                          , FORMAT_R8_SINT
+                                          , FORMAT_R8_SRGB
+                                          , FORMAT_R8G8_UNORM
+                                          , FORMAT_R8G8_SNORM
+                                          , FORMAT_R8G8_USCALED
+                                          , FORMAT_R8G8_SSCALED
+                                          , FORMAT_R8G8_UINT
+                                          , FORMAT_R8G8_SINT
+                                          , FORMAT_R8G8_SRGB
+                                          , FORMAT_R8G8B8_UNORM
+                                          , FORMAT_R8G8B8_SNORM
+                                          , FORMAT_R8G8B8_USCALED
+                                          , FORMAT_R8G8B8_SSCALED
+                                          , FORMAT_R8G8B8_UINT
+                                          , FORMAT_R8G8B8_SINT
+                                          , FORMAT_R8G8B8_SRGB
+                                          , FORMAT_B8G8R8_UNORM
+                                          , FORMAT_B8G8R8_SNORM
+                                          , FORMAT_B8G8R8_USCALED
+                                          , FORMAT_B8G8R8_SSCALED
+                                          , FORMAT_B8G8R8_UINT
+                                          , FORMAT_B8G8R8_SINT
+                                          , FORMAT_B8G8R8_SRGB
+                                          , FORMAT_R8G8B8A8_UNORM
+                                          , FORMAT_R8G8B8A8_SNORM
+                                          , FORMAT_R8G8B8A8_USCALED
+                                          , FORMAT_R8G8B8A8_SSCALED
+                                          , FORMAT_R8G8B8A8_UINT
+                                          , FORMAT_R8G8B8A8_SINT
+                                          , FORMAT_R8G8B8A8_SRGB
+                                          , FORMAT_B8G8R8A8_UNORM
+                                          , FORMAT_B8G8R8A8_SNORM
+                                          , FORMAT_B8G8R8A8_USCALED
+                                          , FORMAT_B8G8R8A8_SSCALED
+                                          , FORMAT_B8G8R8A8_UINT
+                                          , FORMAT_B8G8R8A8_SINT
+                                          , FORMAT_B8G8R8A8_SRGB
+                                          , FORMAT_A8B8G8R8_UNORM_PACK32
+                                          , FORMAT_A8B8G8R8_SNORM_PACK32
+                                          , FORMAT_A8B8G8R8_USCALED_PACK32
+                                          , FORMAT_A8B8G8R8_SSCALED_PACK32
+                                          , FORMAT_A8B8G8R8_UINT_PACK32
+                                          , FORMAT_A8B8G8R8_SINT_PACK32
+                                          , FORMAT_A8B8G8R8_SRGB_PACK32
+                                          , FORMAT_A2R10G10B10_UNORM_PACK32
+                                          , FORMAT_A2R10G10B10_SNORM_PACK32
+                                          , FORMAT_A2R10G10B10_USCALED_PACK32
+                                          , FORMAT_A2R10G10B10_SSCALED_PACK32
+                                          , FORMAT_A2R10G10B10_UINT_PACK32
+                                          , FORMAT_A2R10G10B10_SINT_PACK32
+                                          , FORMAT_A2B10G10R10_UNORM_PACK32
+                                          , FORMAT_A2B10G10R10_SNORM_PACK32
+                                          , FORMAT_A2B10G10R10_USCALED_PACK32
+                                          , FORMAT_A2B10G10R10_SSCALED_PACK32
+                                          , FORMAT_A2B10G10R10_UINT_PACK32
+                                          , FORMAT_A2B10G10R10_SINT_PACK32
+                                          , FORMAT_R16_UNORM
+                                          , FORMAT_R16_SNORM
+                                          , FORMAT_R16_USCALED
+                                          , FORMAT_R16_SSCALED
+                                          , FORMAT_R16_UINT
+                                          , FORMAT_R16_SINT
+                                          , FORMAT_R16_SFLOAT
+                                          , FORMAT_R16G16_UNORM
+                                          , FORMAT_R16G16_SNORM
+                                          , FORMAT_R16G16_USCALED
+                                          , FORMAT_R16G16_SSCALED
+                                          , FORMAT_R16G16_UINT
+                                          , FORMAT_R16G16_SINT
+                                          , FORMAT_R16G16_SFLOAT
+                                          , FORMAT_R16G16B16_UNORM
+                                          , FORMAT_R16G16B16_SNORM
+                                          , FORMAT_R16G16B16_USCALED
+                                          , FORMAT_R16G16B16_SSCALED
+                                          , FORMAT_R16G16B16_UINT
+                                          , FORMAT_R16G16B16_SINT
+                                          , FORMAT_R16G16B16_SFLOAT
+                                          , FORMAT_R16G16B16A16_UNORM
+                                          , FORMAT_R16G16B16A16_SNORM
+                                          , FORMAT_R16G16B16A16_USCALED
+                                          , FORMAT_R16G16B16A16_SSCALED
+                                          , FORMAT_R16G16B16A16_UINT
+                                          , FORMAT_R16G16B16A16_SINT
+                                          , FORMAT_R16G16B16A16_SFLOAT
+                                          , FORMAT_R32_UINT
+                                          , FORMAT_R32_SINT
+                                          , FORMAT_R32_SFLOAT
+                                          , FORMAT_R32G32_UINT
+                                          , FORMAT_R32G32_SINT
+                                          , FORMAT_R32G32_SFLOAT
+                                          , FORMAT_R32G32B32_UINT
+                                          , FORMAT_R32G32B32_SINT
+                                          , FORMAT_R32G32B32_SFLOAT
+                                          , FORMAT_R32G32B32A32_UINT
+                                          , FORMAT_R32G32B32A32_SINT
+                                          , FORMAT_R32G32B32A32_SFLOAT
+                                          , FORMAT_R64_UINT
+                                          , FORMAT_R64_SINT
+                                          , FORMAT_R64_SFLOAT
+                                          , FORMAT_R64G64_UINT
+                                          , FORMAT_R64G64_SINT
+                                          , FORMAT_R64G64_SFLOAT
+                                          , FORMAT_R64G64B64_UINT
+                                          , FORMAT_R64G64B64_SINT
+                                          , FORMAT_R64G64B64_SFLOAT
+                                          , FORMAT_R64G64B64A64_UINT
+                                          , FORMAT_R64G64B64A64_SINT
+                                          , FORMAT_R64G64B64A64_SFLOAT
+                                          , FORMAT_B10G11R11_UFLOAT_PACK32
+                                          , FORMAT_E5B9G9R9_UFLOAT_PACK32
+                                          , FORMAT_D16_UNORM
+                                          , FORMAT_X8_D24_UNORM_PACK32
+                                          , FORMAT_D32_SFLOAT
+                                          , FORMAT_S8_UINT
+                                          , FORMAT_D16_UNORM_S8_UINT
+                                          , FORMAT_D24_UNORM_S8_UINT
+                                          , FORMAT_D32_SFLOAT_S8_UINT
+                                          , FORMAT_BC1_RGB_UNORM_BLOCK
+                                          , FORMAT_BC1_RGB_SRGB_BLOCK
+                                          , FORMAT_BC1_RGBA_UNORM_BLOCK
+                                          , FORMAT_BC1_RGBA_SRGB_BLOCK
+                                          , FORMAT_BC2_UNORM_BLOCK
+                                          , FORMAT_BC2_SRGB_BLOCK
+                                          , FORMAT_BC3_UNORM_BLOCK
+                                          , FORMAT_BC3_SRGB_BLOCK
+                                          , FORMAT_BC4_UNORM_BLOCK
+                                          , FORMAT_BC4_SNORM_BLOCK
+                                          , FORMAT_BC5_UNORM_BLOCK
+                                          , FORMAT_BC5_SNORM_BLOCK
+                                          , FORMAT_BC6H_UFLOAT_BLOCK
+                                          , FORMAT_BC6H_SFLOAT_BLOCK
+                                          , FORMAT_BC7_UNORM_BLOCK
+                                          , FORMAT_BC7_SRGB_BLOCK
+                                          , FORMAT_ETC2_R8G8B8_UNORM_BLOCK
+                                          , FORMAT_ETC2_R8G8B8_SRGB_BLOCK
+                                          , FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
+                                          , FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
+                                          , FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
+                                          , FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
+                                          , FORMAT_EAC_R11_UNORM_BLOCK
+                                          , FORMAT_EAC_R11_SNORM_BLOCK
+                                          , FORMAT_EAC_R11G11_UNORM_BLOCK
+                                          , FORMAT_EAC_R11G11_SNORM_BLOCK
+                                          , FORMAT_ASTC_4x4_UNORM_BLOCK
+                                          , FORMAT_ASTC_4x4_SRGB_BLOCK
+                                          , FORMAT_ASTC_5x4_UNORM_BLOCK
+                                          , FORMAT_ASTC_5x4_SRGB_BLOCK
+                                          , FORMAT_ASTC_5x5_UNORM_BLOCK
+                                          , FORMAT_ASTC_5x5_SRGB_BLOCK
+                                          , FORMAT_ASTC_6x5_UNORM_BLOCK
+                                          , FORMAT_ASTC_6x5_SRGB_BLOCK
+                                          , FORMAT_ASTC_6x6_UNORM_BLOCK
+                                          , FORMAT_ASTC_6x6_SRGB_BLOCK
+                                          , FORMAT_ASTC_8x5_UNORM_BLOCK
+                                          , FORMAT_ASTC_8x5_SRGB_BLOCK
+                                          , FORMAT_ASTC_8x6_UNORM_BLOCK
+                                          , FORMAT_ASTC_8x6_SRGB_BLOCK
+                                          , FORMAT_ASTC_8x8_UNORM_BLOCK
+                                          , FORMAT_ASTC_8x8_SRGB_BLOCK
+                                          , FORMAT_ASTC_10x5_UNORM_BLOCK
+                                          , FORMAT_ASTC_10x5_SRGB_BLOCK
+                                          , FORMAT_ASTC_10x6_UNORM_BLOCK
+                                          , FORMAT_ASTC_10x6_SRGB_BLOCK
+                                          , FORMAT_ASTC_10x8_UNORM_BLOCK
+                                          , FORMAT_ASTC_10x8_SRGB_BLOCK
+                                          , FORMAT_ASTC_10x10_UNORM_BLOCK
+                                          , FORMAT_ASTC_10x10_SRGB_BLOCK
+                                          , FORMAT_ASTC_12x10_UNORM_BLOCK
+                                          , FORMAT_ASTC_12x10_SRGB_BLOCK
+                                          , FORMAT_ASTC_12x12_UNORM_BLOCK
+                                          , FORMAT_ASTC_12x12_SRGB_BLOCK
+                                          , FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT
+                                          , FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT
+                                          , FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG
+                                          , FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG
+                                          , FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG
+                                          , FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG
+                                          , FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG
+                                          , FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG
+                                          , FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG
+                                          , FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG
+                                          , FORMAT_G16_B16_R16_3PLANE_444_UNORM
+                                          , FORMAT_G16_B16R16_2PLANE_422_UNORM
+                                          , FORMAT_G16_B16_R16_3PLANE_422_UNORM
+                                          , FORMAT_G16_B16R16_2PLANE_420_UNORM
+                                          , FORMAT_G16_B16_R16_3PLANE_420_UNORM
+                                          , FORMAT_B16G16R16G16_422_UNORM
+                                          , FORMAT_G16B16G16R16_422_UNORM
+                                          , FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
+                                          , FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
+                                          , FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
+                                          , FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
+                                          , FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
+                                          , FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
+                                          , FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
+                                          , FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
+                                          , FORMAT_R12X4G12X4_UNORM_2PACK16
+                                          , FORMAT_R12X4_UNORM_PACK16
+                                          , FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
+                                          , FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
+                                          , FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
+                                          , FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
+                                          , FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
+                                          , FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
+                                          , FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
+                                          , FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
+                                          , FORMAT_R10X6G10X6_UNORM_2PACK16
+                                          , FORMAT_R10X6_UNORM_PACK16
+                                          , FORMAT_G8_B8_R8_3PLANE_444_UNORM
+                                          , FORMAT_G8_B8R8_2PLANE_422_UNORM
+                                          , FORMAT_G8_B8_R8_3PLANE_422_UNORM
+                                          , FORMAT_G8_B8R8_2PLANE_420_UNORM
+                                          , FORMAT_G8_B8_R8_3PLANE_420_UNORM
+                                          , FORMAT_B8G8R8G8_422_UNORM
+                                          , FORMAT_G8B8G8R8_422_UNORM
+                                          , ..
+                                          )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkFormat - Available image formats
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateGeometryTypeInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryTrianglesDataKHR',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
+-- 'Vulkan.Core10.Pass.AttachmentDescription',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',
+-- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentImageInfo',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
+-- 'Vulkan.Core10.Image.ImageCreateInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_astc_decode_mode.ImageViewASTCDecodeModeEXT',
+-- 'Vulkan.Core10.ImageView.ImageViewCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',
+-- 'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
+-- 'Vulkan.Core10.Pipeline.VertexInputAttributeDescription',
+-- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV',
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2KHR',
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties'
+newtype Format = Format Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'FORMAT_UNDEFINED' specifies that the format is not specified.
+pattern FORMAT_UNDEFINED = Format 0
+-- | '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 FORMAT_R4G4_UNORM_PACK8 = Format 1
+-- | '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 FORMAT_R4G4B4A4_UNORM_PACK16 = Format 2
+-- | '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 FORMAT_B4G4R4A4_UNORM_PACK16 = Format 3
+-- | '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 FORMAT_R5G6B5_UNORM_PACK16 = Format 4
+-- | '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 FORMAT_B5G6R5_UNORM_PACK16 = Format 5
+-- | '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 FORMAT_R5G5B5A1_UNORM_PACK16 = Format 6
+-- | '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 FORMAT_B5G5R5A1_UNORM_PACK16 = Format 7
+-- | '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 FORMAT_A1R5G5B5_UNORM_PACK16 = Format 8
+-- | 'FORMAT_R8_UNORM' specifies a one-component, 8-bit unsigned normalized
+-- format that has a single 8-bit R component.
+pattern FORMAT_R8_UNORM = Format 9
+-- | 'FORMAT_R8_SNORM' specifies a one-component, 8-bit signed normalized
+-- format that has a single 8-bit R component.
+pattern FORMAT_R8_SNORM = Format 10
+-- | 'FORMAT_R8_USCALED' specifies a one-component, 8-bit unsigned scaled
+-- integer format that has a single 8-bit R component.
+pattern FORMAT_R8_USCALED = Format 11
+-- | 'FORMAT_R8_SSCALED' specifies a one-component, 8-bit signed scaled
+-- integer format that has a single 8-bit R component.
+pattern FORMAT_R8_SSCALED = Format 12
+-- | 'FORMAT_R8_UINT' specifies a one-component, 8-bit unsigned integer
+-- format that has a single 8-bit R component.
+pattern FORMAT_R8_UINT = Format 13
+-- | 'FORMAT_R8_SINT' specifies a one-component, 8-bit signed integer format
+-- that has a single 8-bit R component.
+pattern FORMAT_R8_SINT = Format 14
+-- | '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 FORMAT_R8_SRGB = Format 15
+-- | '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 FORMAT_R8G8_UNORM = Format 16
+-- | '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 FORMAT_R8G8_SNORM = Format 17
+-- | '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 FORMAT_R8G8_USCALED = Format 18
+-- | '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 FORMAT_R8G8_SSCALED = Format 19
+-- | '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 FORMAT_R8G8_UINT = Format 20
+-- | '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 FORMAT_R8G8_SINT = Format 21
+-- | '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 FORMAT_R8G8_SRGB = Format 22
+-- | '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 FORMAT_R8G8B8_UNORM = Format 23
+-- | '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 FORMAT_R8G8B8_SNORM = Format 24
+-- | '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 FORMAT_R8G8B8_USCALED = Format 25
+-- | '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 FORMAT_R8G8B8_SSCALED = Format 26
+-- | '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 FORMAT_R8G8B8_UINT = Format 27
+-- | '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 FORMAT_R8G8B8_SINT = Format 28
+-- | '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 FORMAT_R8G8B8_SRGB = Format 29
+-- | '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 FORMAT_B8G8R8_UNORM = Format 30
+-- | '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 FORMAT_B8G8R8_SNORM = Format 31
+-- | '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 FORMAT_B8G8R8_USCALED = Format 32
+-- | '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 FORMAT_B8G8R8_SSCALED = Format 33
+-- | '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 FORMAT_B8G8R8_UINT = Format 34
+-- | '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 FORMAT_B8G8R8_SINT = Format 35
+-- | '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 FORMAT_B8G8R8_SRGB = Format 36
+-- | '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 FORMAT_R8G8B8A8_UNORM = Format 37
+-- | '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 FORMAT_R8G8B8A8_SNORM = Format 38
+-- | '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 FORMAT_R8G8B8A8_USCALED = Format 39
+-- | '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 FORMAT_R8G8B8A8_SSCALED = Format 40
+-- | '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 FORMAT_R8G8B8A8_UINT = Format 41
+-- | '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 FORMAT_R8G8B8A8_SINT = Format 42
+-- | '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 FORMAT_R8G8B8A8_SRGB = Format 43
+-- | '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 FORMAT_B8G8R8A8_UNORM = Format 44
+-- | '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 FORMAT_B8G8R8A8_SNORM = Format 45
+-- | '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 FORMAT_B8G8R8A8_USCALED = Format 46
+-- | '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 FORMAT_B8G8R8A8_SSCALED = Format 47
+-- | '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 FORMAT_B8G8R8A8_UINT = Format 48
+-- | '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 FORMAT_B8G8R8A8_SINT = Format 49
+-- | '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 FORMAT_B8G8R8A8_SRGB = Format 50
+-- | '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 FORMAT_A8B8G8R8_UNORM_PACK32 = Format 51
+-- | '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 FORMAT_A8B8G8R8_SNORM_PACK32 = Format 52
+-- | '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 FORMAT_A8B8G8R8_USCALED_PACK32 = Format 53
+-- | '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 FORMAT_A8B8G8R8_SSCALED_PACK32 = Format 54
+-- | '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 FORMAT_A8B8G8R8_UINT_PACK32 = Format 55
+-- | '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 FORMAT_A8B8G8R8_SINT_PACK32 = Format 56
+-- | '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 FORMAT_A8B8G8R8_SRGB_PACK32 = Format 57
+-- | '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 FORMAT_A2R10G10B10_UNORM_PACK32 = Format 58
+-- | '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 FORMAT_A2R10G10B10_SNORM_PACK32 = Format 59
+-- | '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 FORMAT_A2R10G10B10_USCALED_PACK32 = Format 60
+-- | '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 FORMAT_A2R10G10B10_SSCALED_PACK32 = Format 61
+-- | '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 FORMAT_A2R10G10B10_UINT_PACK32 = Format 62
+-- | '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 FORMAT_A2R10G10B10_SINT_PACK32 = Format 63
+-- | '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 FORMAT_A2B10G10R10_UNORM_PACK32 = Format 64
+-- | '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 FORMAT_A2B10G10R10_SNORM_PACK32 = Format 65
+-- | '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 FORMAT_A2B10G10R10_USCALED_PACK32 = Format 66
+-- | '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 FORMAT_A2B10G10R10_SSCALED_PACK32 = Format 67
+-- | '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 FORMAT_A2B10G10R10_UINT_PACK32 = Format 68
+-- | '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 FORMAT_A2B10G10R10_SINT_PACK32 = Format 69
+-- | 'FORMAT_R16_UNORM' specifies a one-component, 16-bit unsigned normalized
+-- format that has a single 16-bit R component.
+pattern FORMAT_R16_UNORM = Format 70
+-- | 'FORMAT_R16_SNORM' specifies a one-component, 16-bit signed normalized
+-- format that has a single 16-bit R component.
+pattern FORMAT_R16_SNORM = Format 71
+-- | 'FORMAT_R16_USCALED' specifies a one-component, 16-bit unsigned scaled
+-- integer format that has a single 16-bit R component.
+pattern FORMAT_R16_USCALED = Format 72
+-- | 'FORMAT_R16_SSCALED' specifies a one-component, 16-bit signed scaled
+-- integer format that has a single 16-bit R component.
+pattern FORMAT_R16_SSCALED = Format 73
+-- | 'FORMAT_R16_UINT' specifies a one-component, 16-bit unsigned integer
+-- format that has a single 16-bit R component.
+pattern FORMAT_R16_UINT = Format 74
+-- | 'FORMAT_R16_SINT' specifies a one-component, 16-bit signed integer
+-- format that has a single 16-bit R component.
+pattern FORMAT_R16_SINT = Format 75
+-- | 'FORMAT_R16_SFLOAT' specifies a one-component, 16-bit signed
+-- floating-point format that has a single 16-bit R component.
+pattern FORMAT_R16_SFLOAT = Format 76
+-- | '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 FORMAT_R16G16_UNORM = Format 77
+-- | '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 FORMAT_R16G16_SNORM = Format 78
+-- | '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 FORMAT_R16G16_USCALED = Format 79
+-- | '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 FORMAT_R16G16_SSCALED = Format 80
+-- | '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 FORMAT_R16G16_UINT = Format 81
+-- | '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 FORMAT_R16G16_SINT = Format 82
+-- | '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 FORMAT_R16G16_SFLOAT = Format 83
+-- | '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 FORMAT_R16G16B16_UNORM = Format 84
+-- | '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 FORMAT_R16G16B16_SNORM = Format 85
+-- | '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 FORMAT_R16G16B16_USCALED = Format 86
+-- | '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 FORMAT_R16G16B16_SSCALED = Format 87
+-- | '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 FORMAT_R16G16B16_UINT = Format 88
+-- | '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 FORMAT_R16G16B16_SINT = Format 89
+-- | '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 FORMAT_R16G16B16_SFLOAT = Format 90
+-- | '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 FORMAT_R16G16B16A16_UNORM = Format 91
+-- | '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 FORMAT_R16G16B16A16_SNORM = Format 92
+-- | '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 FORMAT_R16G16B16A16_USCALED = Format 93
+-- | '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 FORMAT_R16G16B16A16_SSCALED = Format 94
+-- | '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 FORMAT_R16G16B16A16_UINT = Format 95
+-- | '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 FORMAT_R16G16B16A16_SINT = Format 96
+-- | '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 FORMAT_R16G16B16A16_SFLOAT = Format 97
+-- | 'FORMAT_R32_UINT' specifies a one-component, 32-bit unsigned integer
+-- format that has a single 32-bit R component.
+pattern FORMAT_R32_UINT = Format 98
+-- | 'FORMAT_R32_SINT' specifies a one-component, 32-bit signed integer
+-- format that has a single 32-bit R component.
+pattern FORMAT_R32_SINT = Format 99
+-- | 'FORMAT_R32_SFLOAT' specifies a one-component, 32-bit signed
+-- floating-point format that has a single 32-bit R component.
+pattern FORMAT_R32_SFLOAT = Format 100
+-- | '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 FORMAT_R32G32_UINT = Format 101
+-- | '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 FORMAT_R32G32_SINT = Format 102
+-- | '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 FORMAT_R32G32_SFLOAT = Format 103
+-- | '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 FORMAT_R32G32B32_UINT = Format 104
+-- | '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 FORMAT_R32G32B32_SINT = Format 105
+-- | '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 FORMAT_R32G32B32_SFLOAT = Format 106
+-- | '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 FORMAT_R32G32B32A32_UINT = Format 107
+-- | '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 FORMAT_R32G32B32A32_SINT = Format 108
+-- | '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 FORMAT_R32G32B32A32_SFLOAT = Format 109
+-- | 'FORMAT_R64_UINT' specifies a one-component, 64-bit unsigned integer
+-- format that has a single 64-bit R component.
+pattern FORMAT_R64_UINT = Format 110
+-- | 'FORMAT_R64_SINT' specifies a one-component, 64-bit signed integer
+-- format that has a single 64-bit R component.
+pattern FORMAT_R64_SINT = Format 111
+-- | 'FORMAT_R64_SFLOAT' specifies a one-component, 64-bit signed
+-- floating-point format that has a single 64-bit R component.
+pattern FORMAT_R64_SFLOAT = Format 112
+-- | '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 FORMAT_R64G64_UINT = Format 113
+-- | '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 FORMAT_R64G64_SINT = Format 114
+-- | '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 FORMAT_R64G64_SFLOAT = Format 115
+-- | '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 FORMAT_R64G64B64_UINT = Format 116
+-- | '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 FORMAT_R64G64B64_SINT = Format 117
+-- | '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 FORMAT_R64G64B64_SFLOAT = Format 118
+-- | '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 FORMAT_R64G64B64A64_UINT = Format 119
+-- | '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 FORMAT_R64G64B64A64_SINT = Format 120
+-- | '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 FORMAT_R64G64B64A64_SFLOAT = Format 121
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-fp10>
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-fp11>.
+pattern FORMAT_B10G11R11_UFLOAT_PACK32 = Format 122
+-- | '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 FORMAT_E5B9G9R9_UFLOAT_PACK32 = Format 123
+-- | 'FORMAT_D16_UNORM' specifies a one-component, 16-bit unsigned normalized
+-- format that has a single 16-bit depth component.
+pattern FORMAT_D16_UNORM = Format 124
+-- | '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 FORMAT_X8_D24_UNORM_PACK32 = Format 125
+-- | 'FORMAT_D32_SFLOAT' specifies a one-component, 32-bit signed
+-- floating-point format that has 32-bits in the depth component.
+pattern FORMAT_D32_SFLOAT = Format 126
+-- | 'FORMAT_S8_UINT' specifies a one-component, 8-bit unsigned integer
+-- format that has 8-bits in the stencil component.
+pattern FORMAT_S8_UINT = Format 127
+-- | '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 FORMAT_D16_UNORM_S8_UINT = Format 128
+-- | '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 FORMAT_D24_UNORM_S8_UINT = Format 129
+-- | '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 FORMAT_D32_SFLOAT_S8_UINT = Format 130
+-- | '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 FORMAT_BC1_RGB_UNORM_BLOCK = Format 131
+-- | '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 FORMAT_BC1_RGB_SRGB_BLOCK = Format 132
+-- | '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 FORMAT_BC1_RGBA_UNORM_BLOCK = Format 133
+-- | '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 FORMAT_BC1_RGBA_SRGB_BLOCK = Format 134
+-- | '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 FORMAT_BC2_UNORM_BLOCK = Format 135
+-- | '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 FORMAT_BC2_SRGB_BLOCK = Format 136
+-- | '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 FORMAT_BC3_UNORM_BLOCK = Format 137
+-- | '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 FORMAT_BC3_SRGB_BLOCK = Format 138
+-- | '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 FORMAT_BC4_UNORM_BLOCK = Format 139
+-- | '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 FORMAT_BC4_SNORM_BLOCK = Format 140
+-- | '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 FORMAT_BC5_UNORM_BLOCK = Format 141
+-- | '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 FORMAT_BC5_SNORM_BLOCK = Format 142
+-- | '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 FORMAT_BC6H_UFLOAT_BLOCK = Format 143
+-- | '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 FORMAT_BC6H_SFLOAT_BLOCK = Format 144
+-- | '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 FORMAT_BC7_UNORM_BLOCK = Format 145
+-- | '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 FORMAT_BC7_SRGB_BLOCK = Format 146
+-- | '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 FORMAT_ETC2_R8G8B8_UNORM_BLOCK = Format 147
+-- | '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 FORMAT_ETC2_R8G8B8_SRGB_BLOCK = Format 148
+-- | '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 FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = Format 149
+-- | '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 FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = Format 150
+-- | '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 FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = Format 151
+-- | '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 FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = Format 152
+-- | '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 FORMAT_EAC_R11_UNORM_BLOCK = Format 153
+-- | '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 FORMAT_EAC_R11_SNORM_BLOCK = Format 154
+-- | '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 FORMAT_EAC_R11G11_UNORM_BLOCK = Format 155
+-- | '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 FORMAT_EAC_R11G11_SNORM_BLOCK = Format 156
+-- | '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 FORMAT_ASTC_4x4_UNORM_BLOCK = Format 157
+-- | '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 FORMAT_ASTC_4x4_SRGB_BLOCK = Format 158
+-- | '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 FORMAT_ASTC_5x4_UNORM_BLOCK = Format 159
+-- | '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 FORMAT_ASTC_5x4_SRGB_BLOCK = Format 160
+-- | '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 FORMAT_ASTC_5x5_UNORM_BLOCK = Format 161
+-- | '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 FORMAT_ASTC_5x5_SRGB_BLOCK = Format 162
+-- | '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 FORMAT_ASTC_6x5_UNORM_BLOCK = Format 163
+-- | '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 FORMAT_ASTC_6x5_SRGB_BLOCK = Format 164
+-- | '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 FORMAT_ASTC_6x6_UNORM_BLOCK = Format 165
+-- | '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 FORMAT_ASTC_6x6_SRGB_BLOCK = Format 166
+-- | '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 FORMAT_ASTC_8x5_UNORM_BLOCK = Format 167
+-- | '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 FORMAT_ASTC_8x5_SRGB_BLOCK = Format 168
+-- | '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 FORMAT_ASTC_8x6_UNORM_BLOCK = Format 169
+-- | '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 FORMAT_ASTC_8x6_SRGB_BLOCK = Format 170
+-- | '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 FORMAT_ASTC_8x8_UNORM_BLOCK = Format 171
+-- | '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 FORMAT_ASTC_8x8_SRGB_BLOCK = Format 172
+-- | '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 FORMAT_ASTC_10x5_UNORM_BLOCK = Format 173
+-- | '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 FORMAT_ASTC_10x5_SRGB_BLOCK = Format 174
+-- | '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 FORMAT_ASTC_10x6_UNORM_BLOCK = Format 175
+-- | '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 FORMAT_ASTC_10x6_SRGB_BLOCK = Format 176
+-- | '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 FORMAT_ASTC_10x8_UNORM_BLOCK = Format 177
+-- | '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 FORMAT_ASTC_10x8_SRGB_BLOCK = Format 178
+-- | '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 FORMAT_ASTC_10x10_UNORM_BLOCK = Format 179
+-- | '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 FORMAT_ASTC_10x10_SRGB_BLOCK = Format 180
+-- | '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 FORMAT_ASTC_12x10_UNORM_BLOCK = Format 181
+-- | '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 FORMAT_ASTC_12x10_SRGB_BLOCK = Format 182
+-- | '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 FORMAT_ASTC_12x12_UNORM_BLOCK = Format 183
+-- | '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 FORMAT_ASTC_12x12_SRGB_BLOCK = Format 184
+-- | 'FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 12×12 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = Format 1000066013
+-- | 'FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 12×10 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = Format 1000066012
+-- | 'FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×10 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = Format 1000066011
+-- | 'FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×8 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = Format 1000066010
+-- | 'FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×6 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = Format 1000066009
+-- | 'FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×5 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = Format 1000066008
+-- | 'FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 8×8 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = Format 1000066007
+-- | 'FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 8×6 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = Format 1000066006
+-- | 'FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 8×5 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = Format 1000066005
+-- | 'FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 6×6 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = Format 1000066004
+-- | 'FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 6×5 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = Format 1000066003
+-- | 'FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 5×5 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = Format 1000066002
+-- | 'FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 5×4 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = Format 1000066001
+-- | 'FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT' specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 4×4 rectangle of signed floating-point RGBA texel data.
+pattern FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = Format 1000066000
+-- | 'FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG' specifies a four-component, PVRTC
+-- compressed format where each 64-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 FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = Format 1000054007
+-- | 'FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG' specifies a four-component, PVRTC
+-- compressed format where each 64-bit compressed texel block encodes an
+-- 8×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
+-- encoding applied to the RGB components.
+pattern FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = Format 1000054006
+-- | 'FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG' specifies a four-component, PVRTC
+-- compressed format where each 64-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 FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = Format 1000054005
+-- | 'FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG' specifies a four-component, PVRTC
+-- compressed format where each 64-bit compressed texel block encodes an
+-- 8×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
+-- encoding applied to the RGB components.
+pattern FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = Format 1000054004
+-- | 'FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG' specifies a four-component, PVRTC
+-- compressed format where each 64-bit compressed texel block encodes a 4×4
+-- rectangle of unsigned normalized RGBA texel data.
+pattern FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = Format 1000054003
+-- | 'FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG' specifies a four-component, PVRTC
+-- compressed format where each 64-bit compressed texel block encodes an
+-- 8×4 rectangle of unsigned normalized RGBA texel data.
+pattern FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = Format 1000054002
+-- | 'FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG' specifies a four-component, PVRTC
+-- compressed format where each 64-bit compressed texel block encodes a 4×4
+-- rectangle of unsigned normalized RGBA texel data.
+pattern FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = Format 1000054001
+-- | 'FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG' specifies a four-component, PVRTC
+-- compressed format where each 64-bit compressed texel block encodes an
+-- 8×4 rectangle of unsigned normalized RGBA texel data.
+pattern FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = Format 1000054000
+-- | 'FORMAT_G16_B16_R16_3PLANE_444_UNORM' specifies an unsigned normalized
+-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
+-- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
+-- 16-bit R component in each 16-bit word of plane 2. Each plane has the
+-- same dimensions and each R, G and B component contributes to a single
+-- texel. The location of each plane when this image is in linear layout
+-- can be determined via 'Vulkan.Core10.Image.getImageSubresourceLayout',
+-- using 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+-- for the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane.
+pattern FORMAT_G16_B16_R16_3PLANE_444_UNORM = Format 1000156033
+-- | 'FORMAT_G16_B16R16_2PLANE_422_UNORM' specifies an unsigned normalized
+-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
+-- of plane 0, and a two-component, 32-bit BR plane 1 consisting of a
+-- 16-bit B component in the word in bytes 0..1, and a 16-bit R component
+-- in the word in bytes 2..3. The horizontal dimensions of the BR plane is
+-- halved relative to the image dimensions, and each R and B value is
+-- shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
+-- plane when this image is in linear layout can be determined via
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the BR plane. Images in this format /must/ be defined with a width that
+-- is a multiple of two.
+pattern FORMAT_G16_B16R16_2PLANE_422_UNORM = Format 1000156032
+-- | 'FORMAT_G16_B16_R16_3PLANE_422_UNORM' specifies an unsigned normalized
+-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
+-- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
+-- 16-bit R component in each 16-bit word of plane 2. The horizontal
+-- dimension of the R and B plane is halved relative to the image
+-- dimensions, and each R and B value is shared with the G components for
+-- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
+-- each plane when this image is in linear layout can be determined via
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane. Images in this format /must/ be defined with a width that
+-- is a multiple of two.
+pattern FORMAT_G16_B16_R16_3PLANE_422_UNORM = Format 1000156031
+-- | 'FORMAT_G16_B16R16_2PLANE_420_UNORM' specifies an unsigned normalized
+-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
+-- of plane 0, and a two-component, 32-bit BR plane 1 consisting of a
+-- 16-bit B component in the word in bytes 0..1, and a 16-bit R component
+-- in the word in bytes 2..3. The horizontal and vertical dimensions of the
+-- BR plane is halved relative to the image dimensions, and each R and B
+-- value is shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor =
+-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
+-- location of each plane when this image is in linear layout can be
+-- determined via 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the BR plane. Images in this format /must/ be defined with a width and
+-- height that is a multiple of two.
+pattern FORMAT_G16_B16R16_2PLANE_420_UNORM = Format 1000156030
+-- | 'FORMAT_G16_B16_R16_3PLANE_420_UNORM' specifies an unsigned normalized
+-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
+-- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
+-- 16-bit R component in each 16-bit word of plane 2. The horizontal and
+-- vertical dimensions of the R and B planes are halved relative to the
+-- image dimensions, and each R and B component is shared with the G
+-- components for which \(\lfloor i_G \times 0.5
+-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
+-- = j_R\). The location of each plane when this image is in linear layout
+-- can be determined via 'Vulkan.Core10.Image.getImageSubresourceLayout',
+-- using 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+-- for the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane. Images in this format /must/ be defined with a width and
+-- height that is a multiple of two.
+pattern FORMAT_G16_B16_R16_3PLANE_420_UNORM = Format 1000156029
+-- | 'FORMAT_B16G16R16G16_422_UNORM' specifies a four-component, 64-bit
+-- format containing a pair of G components, an R component, and a B
+-- component, collectively encoding a 2×1 rectangle of unsigned normalized
+-- RGB texel data. One G value is present at each /i/ coordinate, with the
+-- B and R values shared across both G values and thus recorded at half the
+-- horizontal resolution of the image. This format has a 16-bit B component
+-- in the word in bytes 0..1, a 16-bit G component for the even /i/
+-- coordinate in the word in bytes 2..3, a 16-bit R component in the word
+-- in bytes 4..5, and a 16-bit G component for the odd /i/ coordinate in
+-- the word in bytes 6..7. Images in this format /must/ be defined with a
+-- width that is a multiple of two. For the purposes of the constraints on
+-- copy extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
+pattern FORMAT_B16G16R16G16_422_UNORM = Format 1000156028
+-- | 'FORMAT_G16B16G16R16_422_UNORM' specifies a four-component, 64-bit
+-- format containing a pair of G components, an R component, and a B
+-- component, collectively encoding a 2×1 rectangle of unsigned normalized
+-- RGB texel data. One G value is present at each /i/ coordinate, with the
+-- B and R values shared across both G values and thus recorded at half the
+-- horizontal resolution of the image. This format has a 16-bit G component
+-- for the even /i/ coordinate in the word in bytes 0..1, a 16-bit B
+-- component in the word in bytes 2..3, a 16-bit G component for the odd
+-- /i/ coordinate in the word in bytes 4..5, and a 16-bit R component in
+-- the word in bytes 6..7. Images in this format /must/ be defined with a
+-- width that is a multiple of two. For the purposes of the constraints on
+-- copy extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
+pattern FORMAT_G16B16G16R16_422_UNORM = Format 1000156027
+-- | 'FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16' specifies an
+-- unsigned normalized /multi-planar format/ that has a 12-bit G component
+-- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
+-- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
+-- component in the top 12 bits of each 16-bit word of plane 2, with the
+-- bottom 4 bits of each word unused. Each plane has the same dimensions
+-- and each R, G and B component contributes to a single texel. The
+-- location of each plane when this image is in linear layout can be
+-- determined via 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane.
+pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = Format 1000156026
+-- | 'FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16' specifies an unsigned
+-- normalized /multi-planar format/ that has a 12-bit G component in the
+-- top 12 bits of each 16-bit word of plane 0, and a two-component, 32-bit
+-- BR plane 1 consisting of a 12-bit B component in the top 12 bits of the
+-- word in bytes 0..1, and a 12-bit R component in the top 12 bits of the
+-- word in bytes 2..3, the bottom 4 bits of each word unused. The
+-- horizontal dimensions of the BR plane is halved relative to the image
+-- dimensions, and each R and B value is shared with the G components for
+-- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
+-- each plane when this image is in linear layout can be determined via
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the BR plane. Images in this format /must/ be defined with a width that
+-- is a multiple of two.
+pattern FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = Format 1000156025
+-- | 'FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16' specifies an
+-- unsigned normalized /multi-planar format/ that has a 12-bit G component
+-- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
+-- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
+-- component in the top 12 bits of each 16-bit word of plane 2, with the
+-- bottom 4 bits of each word unused. The horizontal dimension of the R and
+-- B plane is halved relative to the image dimensions, and each R and B
+-- value is shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
+-- plane when this image is in linear layout can be determined via
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane. Images in this format /must/ be defined with a width that
+-- is a multiple of two.
+pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = Format 1000156024
+-- | 'FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16' specifies an unsigned
+-- normalized /multi-planar format/ that has a 12-bit G component in the
+-- top 12 bits of each 16-bit word of plane 0, and a two-component, 32-bit
+-- BR plane 1 consisting of a 12-bit B component in the top 12 bits of the
+-- word in bytes 0..1, and a 12-bit R component in the top 12 bits of the
+-- word in bytes 2..3, the bottom 4 bits of each word unused. The
+-- horizontal and vertical dimensions of the BR plane is halved relative to
+-- the image dimensions, and each R and B value is shared with the G
+-- components for which \(\lfloor i_G \times 0.5 \rfloor =
+-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
+-- location of each plane when this image is in linear layout can be
+-- determined via 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the BR plane. Images in this format /must/ be defined with a width and
+-- height that is a multiple of two.
+pattern FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = Format 1000156023
+-- | 'FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16' specifies an
+-- unsigned normalized /multi-planar format/ that has a 12-bit G component
+-- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
+-- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
+-- component in the top 12 bits of each 16-bit word of plane 2, with the
+-- bottom 4 bits of each word unused. The horizontal and vertical
+-- dimensions of the R and B planes are halved relative to the image
+-- dimensions, and each R and B component is shared with the G components
+-- for which \(\lfloor i_G \times 0.5
+-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
+-- = j_R\). The location of each plane when this image is in linear layout
+-- can be determined via 'Vulkan.Core10.Image.getImageSubresourceLayout',
+-- using 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+-- for the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane. Images in this format /must/ be defined with a width and
+-- height that is a multiple of two.
+pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = Format 1000156022
+-- | 'FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16' specifies a
+-- four-component, 64-bit format containing a pair of G components, an R
+-- component, and a B component, collectively encoding a 2×1 rectangle of
+-- unsigned normalized RGB texel data. One G value is present at each /i/
+-- coordinate, with the B and R values shared across both G values and thus
+-- recorded at half the horizontal resolution of the image. This format has
+-- a 12-bit B component in the top 12 bits of the word in bytes 0..1, a
+-- 12-bit G component for the even /i/ coordinate in the top 12 bits of the
+-- word in bytes 2..3, a 12-bit R component in the top 12 bits of the word
+-- in bytes 4..5, and a 12-bit G component for the odd /i/ coordinate in
+-- the top 12 bits of the word in bytes 6..7, with the bottom 4 bits of
+-- each word unused. Images in this format /must/ be defined with a width
+-- that is a multiple of two. For the purposes of the constraints on copy
+-- extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
+pattern FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = Format 1000156021
+-- | 'FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16' specifies a
+-- four-component, 64-bit format containing a pair of G components, an R
+-- component, and a B component, collectively encoding a 2×1 rectangle of
+-- unsigned normalized RGB texel data. One G value is present at each /i/
+-- coordinate, with the B and R values shared across both G values and thus
+-- recorded at half the horizontal resolution of the image. This format has
+-- a 12-bit G component for the even /i/ coordinate in the top 12 bits of
+-- the word in bytes 0..1, a 12-bit B component in the top 12 bits of the
+-- word in bytes 2..3, a 12-bit G component for the odd /i/ coordinate in
+-- the top 12 bits of the word in bytes 4..5, and a 12-bit R component in
+-- the top 12 bits of the word in bytes 6..7, with the bottom 4 bits of
+-- each word unused. Images in this format /must/ be defined with a width
+-- that is a multiple of two. For the purposes of the constraints on copy
+-- extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
+pattern FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = Format 1000156020
+-- | 'FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16' specifies a four-component,
+-- 64-bit unsigned normalized format that has a 12-bit R component in the
+-- top 12 bits of the word in bytes 0..1, a 12-bit G component in the top
+-- 12 bits of the word in bytes 2..3, a 12-bit B component in the top 12
+-- bits of the word in bytes 4..5, and a 12-bit A component in the top 12
+-- bits of the word in bytes 6..7, with the bottom 4 bits of each word
+-- unused.
+pattern FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = Format 1000156019
+-- | 'FORMAT_R12X4G12X4_UNORM_2PACK16' specifies a two-component, 32-bit
+-- unsigned normalized format that has a 12-bit R component in the top 12
+-- bits of the word in bytes 0..1, and a 12-bit G component in the top 12
+-- bits of the word in bytes 2..3, with the bottom 4 bits of each word
+-- unused.
+pattern FORMAT_R12X4G12X4_UNORM_2PACK16 = Format 1000156018
+-- | 'FORMAT_R12X4_UNORM_PACK16' specifies a one-component, 16-bit unsigned
+-- normalized format that has a single 12-bit R component in the top 12
+-- bits of a 16-bit word, with the bottom 4 bits unused.
+pattern FORMAT_R12X4_UNORM_PACK16 = Format 1000156017
+-- | 'FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16' specifies an
+-- unsigned normalized /multi-planar format/ that has a 10-bit G component
+-- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
+-- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
+-- component in the top 10 bits of each 16-bit word of plane 2, with the
+-- bottom 6 bits of each word unused. Each plane has the same dimensions
+-- and each R, G and B component contributes to a single texel. The
+-- location of each plane when this image is in linear layout can be
+-- determined via 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane.
+pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = Format 1000156016
+-- | 'FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16' specifies an unsigned
+-- normalized /multi-planar format/ that has a 10-bit G component in the
+-- top 10 bits of each 16-bit word of plane 0, and a two-component, 32-bit
+-- BR plane 1 consisting of a 10-bit B component in the top 10 bits of the
+-- word in bytes 0..1, and a 10-bit R component in the top 10 bits of the
+-- word in bytes 2..3, the bottom 6 bits of each word unused. The
+-- horizontal dimensions of the BR plane is halved relative to the image
+-- dimensions, and each R and B value is shared with the G components for
+-- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
+-- each plane when this image is in linear layout can be determined via
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the BR plane. Images in this format /must/ be defined with a width that
+-- is a multiple of two.
+pattern FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = Format 1000156015
+-- | 'FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16' specifies an
+-- unsigned normalized /multi-planar format/ that has a 10-bit G component
+-- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
+-- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
+-- component in the top 10 bits of each 16-bit word of plane 2, with the
+-- bottom 6 bits of each word unused. The horizontal dimension of the R and
+-- B plane is halved relative to the image dimensions, and each R and B
+-- value is shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
+-- plane when this image is in linear layout can be determined via
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane. Images in this format /must/ be defined with a width that
+-- is a multiple of two.
+pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = Format 1000156014
+-- | 'FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16' specifies an unsigned
+-- normalized /multi-planar format/ that has a 10-bit G component in the
+-- top 10 bits of each 16-bit word of plane 0, and a two-component, 32-bit
+-- BR plane 1 consisting of a 10-bit B component in the top 10 bits of the
+-- word in bytes 0..1, and a 10-bit R component in the top 10 bits of the
+-- word in bytes 2..3, the bottom 6 bits of each word unused. The
+-- horizontal and vertical dimensions of the BR plane is halved relative to
+-- the image dimensions, and each R and B value is shared with the G
+-- components for which \(\lfloor i_G \times 0.5 \rfloor =
+-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
+-- location of each plane when this image is in linear layout can be
+-- determined via 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the BR plane. Images in this format /must/ be defined with a width and
+-- height that is a multiple of two.
+pattern FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = Format 1000156013
+-- | 'FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16' specifies an
+-- unsigned normalized /multi-planar format/ that has a 10-bit G component
+-- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
+-- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
+-- component in the top 10 bits of each 16-bit word of plane 2, with the
+-- bottom 6 bits of each word unused. The horizontal and vertical
+-- dimensions of the R and B planes are halved relative to the image
+-- dimensions, and each R and B component is shared with the G components
+-- for which \(\lfloor i_G \times 0.5
+-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
+-- = j_R\). The location of each plane when this image is in linear layout
+-- can be determined via 'Vulkan.Core10.Image.getImageSubresourceLayout',
+-- using 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+-- for the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane. Images in this format /must/ be defined with a width and
+-- height that is a multiple of two.
+pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = Format 1000156012
+-- | 'FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16' specifies a
+-- four-component, 64-bit format containing a pair of G components, an R
+-- component, and a B component, collectively encoding a 2×1 rectangle of
+-- unsigned normalized RGB texel data. One G value is present at each /i/
+-- coordinate, with the B and R values shared across both G values and thus
+-- recorded at half the horizontal resolution of the image. This format has
+-- a 10-bit B component in the top 10 bits of the word in bytes 0..1, a
+-- 10-bit G component for the even /i/ coordinate in the top 10 bits of the
+-- word in bytes 2..3, a 10-bit R component in the top 10 bits of the word
+-- in bytes 4..5, and a 10-bit G component for the odd /i/ coordinate in
+-- the top 10 bits of the word in bytes 6..7, with the bottom 6 bits of
+-- each word unused. Images in this format /must/ be defined with a width
+-- that is a multiple of two. For the purposes of the constraints on copy
+-- extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
+pattern FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = Format 1000156011
+-- | 'FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16' specifies a
+-- four-component, 64-bit format containing a pair of G components, an R
+-- component, and a B component, collectively encoding a 2×1 rectangle of
+-- unsigned normalized RGB texel data. One G value is present at each /i/
+-- coordinate, with the B and R values shared across both G values and thus
+-- recorded at half the horizontal resolution of the image. This format has
+-- a 10-bit G component for the even /i/ coordinate in the top 10 bits of
+-- the word in bytes 0..1, a 10-bit B component in the top 10 bits of the
+-- word in bytes 2..3, a 10-bit G component for the odd /i/ coordinate in
+-- the top 10 bits of the word in bytes 4..5, and a 10-bit R component in
+-- the top 10 bits of the word in bytes 6..7, with the bottom 6 bits of
+-- each word unused. Images in this format /must/ be defined with a width
+-- that is a multiple of two. For the purposes of the constraints on copy
+-- extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
+pattern FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = Format 1000156010
+-- | 'FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16' specifies a four-component,
+-- 64-bit unsigned normalized format that has a 10-bit R component in the
+-- top 10 bits of the word in bytes 0..1, a 10-bit G component in the top
+-- 10 bits of the word in bytes 2..3, a 10-bit B component in the top 10
+-- bits of the word in bytes 4..5, and a 10-bit A component in the top 10
+-- bits of the word in bytes 6..7, with the bottom 6 bits of each word
+-- unused.
+pattern FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = Format 1000156009
+-- | 'FORMAT_R10X6G10X6_UNORM_2PACK16' specifies a two-component, 32-bit
+-- unsigned normalized format that has a 10-bit R component in the top 10
+-- bits of the word in bytes 0..1, and a 10-bit G component in the top 10
+-- bits of the word in bytes 2..3, with the bottom 6 bits of each word
+-- unused.
+pattern FORMAT_R10X6G10X6_UNORM_2PACK16 = Format 1000156008
+-- | 'FORMAT_R10X6_UNORM_PACK16' specifies a one-component, 16-bit unsigned
+-- normalized format that has a single 10-bit R component in the top 10
+-- bits of a 16-bit word, with the bottom 6 bits unused.
+pattern FORMAT_R10X6_UNORM_PACK16 = Format 1000156007
+-- | 'FORMAT_G8_B8_R8_3PLANE_444_UNORM' specifies an unsigned normalized
+-- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
+-- B component in plane 1, and an 8-bit R component in plane 2. Each plane
+-- has the same dimensions and each R, G and B component contributes to a
+-- single texel. The location of each plane when this image is in linear
+-- layout can be determined via
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane.
+pattern FORMAT_G8_B8_R8_3PLANE_444_UNORM = Format 1000156006
+-- | 'FORMAT_G8_B8R8_2PLANE_422_UNORM' specifies an unsigned normalized
+-- /multi-planar format/ that has an 8-bit G component in plane 0, and a
+-- two-component, 16-bit BR plane 1 consisting of an 8-bit B component in
+-- byte 0 and an 8-bit R component in byte 1. The horizontal dimensions of
+-- the BR plane is halved relative to the image dimensions, and each R and
+-- B value is shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
+-- plane when this image is in linear layout can be determined via
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the BR plane. Images in this format /must/ be defined with a width that
+-- is a multiple of two.
+pattern FORMAT_G8_B8R8_2PLANE_422_UNORM = Format 1000156005
+-- | 'FORMAT_G8_B8_R8_3PLANE_422_UNORM' specifies an unsigned normalized
+-- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
+-- B component in plane 1, and an 8-bit R component in plane 2. The
+-- horizontal dimension of the R and B plane is halved relative to the
+-- image dimensions, and each R and B value is shared with the G components
+-- for which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location
+-- of each plane when this image is in linear layout can be determined via
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane. Images in this format /must/ be defined with a width that
+-- is a multiple of two.
+pattern FORMAT_G8_B8_R8_3PLANE_422_UNORM = Format 1000156004
+-- | 'FORMAT_G8_B8R8_2PLANE_420_UNORM' specifies an unsigned normalized
+-- /multi-planar format/ that has an 8-bit G component in plane 0, and a
+-- two-component, 16-bit BR plane 1 consisting of an 8-bit B component in
+-- byte 0 and an 8-bit R component in byte 1. The horizontal and vertical
+-- dimensions of the BR plane is halved relative to the image dimensions,
+-- and each R and B value is shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor =
+-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
+-- location of each plane when this image is in linear layout can be
+-- determined via 'Vulkan.Core10.Image.getImageSubresourceLayout', using
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' for
+-- the G plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the BR plane. Images in this format /must/ be defined with a width and
+-- height that is a multiple of two.
+pattern FORMAT_G8_B8R8_2PLANE_420_UNORM = Format 1000156003
+-- | 'FORMAT_G8_B8_R8_3PLANE_420_UNORM' specifies an unsigned normalized
+-- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
+-- B component in plane 1, and an 8-bit R component in plane 2. The
+-- horizontal and vertical dimensions of the R and B planes are halved
+-- relative to the image dimensions, and each R and B component is shared
+-- with the G components for which \(\lfloor i_G \times 0.5
+-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
+-- = j_R\). The location of each plane when this image is in linear layout
+-- can be determined via 'Vulkan.Core10.Image.getImageSubresourceLayout',
+-- using 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+-- for the G plane,
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' for
+-- the B plane, and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' for
+-- the R plane. Images in this format /must/ be defined with a width and
+-- height that is a multiple of two.
+pattern FORMAT_G8_B8_R8_3PLANE_420_UNORM = Format 1000156002
+-- | 'FORMAT_B8G8R8G8_422_UNORM' specifies a four-component, 32-bit format
+-- containing a pair of G components, an R component, and a B component,
+-- collectively encoding a 2×1 rectangle of unsigned normalized RGB texel
+-- data. One G value is present at each /i/ coordinate, with the B and R
+-- values shared across both G values and thus recorded at half the
+-- horizontal resolution of the image. This format has an 8-bit B component
+-- in byte 0, an 8-bit G component for the even /i/ coordinate in byte 1,
+-- an 8-bit R component in byte 2, and an 8-bit G component for the odd /i/
+-- coordinate in byte 3. Images in this format /must/ be defined with a
+-- width that is a multiple of two. For the purposes of the constraints on
+-- copy extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
+pattern FORMAT_B8G8R8G8_422_UNORM = Format 1000156001
+-- | 'FORMAT_G8B8G8R8_422_UNORM' specifies a four-component, 32-bit format
+-- containing a pair of G components, an R component, and a B component,
+-- collectively encoding a 2×1 rectangle of unsigned normalized RGB texel
+-- data. One G value is present at each /i/ coordinate, with the B and R
+-- values shared across both G values and thus recorded at half the
+-- horizontal resolution of the image. This format has an 8-bit G component
+-- for the even /i/ coordinate in byte 0, an 8-bit B component in byte 1,
+-- an 8-bit G component for the odd /i/ coordinate in byte 2, and an 8-bit
+-- R component in byte 3. Images in this format /must/ be defined with a
+-- width that is a multiple of two. For the purposes of the constraints on
+-- copy extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
+pattern FORMAT_G8B8G8R8_422_UNORM = Format 1000156000
+{-# complete FORMAT_UNDEFINED,
+             FORMAT_R4G4_UNORM_PACK8,
+             FORMAT_R4G4B4A4_UNORM_PACK16,
+             FORMAT_B4G4R4A4_UNORM_PACK16,
+             FORMAT_R5G6B5_UNORM_PACK16,
+             FORMAT_B5G6R5_UNORM_PACK16,
+             FORMAT_R5G5B5A1_UNORM_PACK16,
+             FORMAT_B5G5R5A1_UNORM_PACK16,
+             FORMAT_A1R5G5B5_UNORM_PACK16,
+             FORMAT_R8_UNORM,
+             FORMAT_R8_SNORM,
+             FORMAT_R8_USCALED,
+             FORMAT_R8_SSCALED,
+             FORMAT_R8_UINT,
+             FORMAT_R8_SINT,
+             FORMAT_R8_SRGB,
+             FORMAT_R8G8_UNORM,
+             FORMAT_R8G8_SNORM,
+             FORMAT_R8G8_USCALED,
+             FORMAT_R8G8_SSCALED,
+             FORMAT_R8G8_UINT,
+             FORMAT_R8G8_SINT,
+             FORMAT_R8G8_SRGB,
+             FORMAT_R8G8B8_UNORM,
+             FORMAT_R8G8B8_SNORM,
+             FORMAT_R8G8B8_USCALED,
+             FORMAT_R8G8B8_SSCALED,
+             FORMAT_R8G8B8_UINT,
+             FORMAT_R8G8B8_SINT,
+             FORMAT_R8G8B8_SRGB,
+             FORMAT_B8G8R8_UNORM,
+             FORMAT_B8G8R8_SNORM,
+             FORMAT_B8G8R8_USCALED,
+             FORMAT_B8G8R8_SSCALED,
+             FORMAT_B8G8R8_UINT,
+             FORMAT_B8G8R8_SINT,
+             FORMAT_B8G8R8_SRGB,
+             FORMAT_R8G8B8A8_UNORM,
+             FORMAT_R8G8B8A8_SNORM,
+             FORMAT_R8G8B8A8_USCALED,
+             FORMAT_R8G8B8A8_SSCALED,
+             FORMAT_R8G8B8A8_UINT,
+             FORMAT_R8G8B8A8_SINT,
+             FORMAT_R8G8B8A8_SRGB,
+             FORMAT_B8G8R8A8_UNORM,
+             FORMAT_B8G8R8A8_SNORM,
+             FORMAT_B8G8R8A8_USCALED,
+             FORMAT_B8G8R8A8_SSCALED,
+             FORMAT_B8G8R8A8_UINT,
+             FORMAT_B8G8R8A8_SINT,
+             FORMAT_B8G8R8A8_SRGB,
+             FORMAT_A8B8G8R8_UNORM_PACK32,
+             FORMAT_A8B8G8R8_SNORM_PACK32,
+             FORMAT_A8B8G8R8_USCALED_PACK32,
+             FORMAT_A8B8G8R8_SSCALED_PACK32,
+             FORMAT_A8B8G8R8_UINT_PACK32,
+             FORMAT_A8B8G8R8_SINT_PACK32,
+             FORMAT_A8B8G8R8_SRGB_PACK32,
+             FORMAT_A2R10G10B10_UNORM_PACK32,
+             FORMAT_A2R10G10B10_SNORM_PACK32,
+             FORMAT_A2R10G10B10_USCALED_PACK32,
+             FORMAT_A2R10G10B10_SSCALED_PACK32,
+             FORMAT_A2R10G10B10_UINT_PACK32,
+             FORMAT_A2R10G10B10_SINT_PACK32,
+             FORMAT_A2B10G10R10_UNORM_PACK32,
+             FORMAT_A2B10G10R10_SNORM_PACK32,
+             FORMAT_A2B10G10R10_USCALED_PACK32,
+             FORMAT_A2B10G10R10_SSCALED_PACK32,
+             FORMAT_A2B10G10R10_UINT_PACK32,
+             FORMAT_A2B10G10R10_SINT_PACK32,
+             FORMAT_R16_UNORM,
+             FORMAT_R16_SNORM,
+             FORMAT_R16_USCALED,
+             FORMAT_R16_SSCALED,
+             FORMAT_R16_UINT,
+             FORMAT_R16_SINT,
+             FORMAT_R16_SFLOAT,
+             FORMAT_R16G16_UNORM,
+             FORMAT_R16G16_SNORM,
+             FORMAT_R16G16_USCALED,
+             FORMAT_R16G16_SSCALED,
+             FORMAT_R16G16_UINT,
+             FORMAT_R16G16_SINT,
+             FORMAT_R16G16_SFLOAT,
+             FORMAT_R16G16B16_UNORM,
+             FORMAT_R16G16B16_SNORM,
+             FORMAT_R16G16B16_USCALED,
+             FORMAT_R16G16B16_SSCALED,
+             FORMAT_R16G16B16_UINT,
+             FORMAT_R16G16B16_SINT,
+             FORMAT_R16G16B16_SFLOAT,
+             FORMAT_R16G16B16A16_UNORM,
+             FORMAT_R16G16B16A16_SNORM,
+             FORMAT_R16G16B16A16_USCALED,
+             FORMAT_R16G16B16A16_SSCALED,
+             FORMAT_R16G16B16A16_UINT,
+             FORMAT_R16G16B16A16_SINT,
+             FORMAT_R16G16B16A16_SFLOAT,
+             FORMAT_R32_UINT,
+             FORMAT_R32_SINT,
+             FORMAT_R32_SFLOAT,
+             FORMAT_R32G32_UINT,
+             FORMAT_R32G32_SINT,
+             FORMAT_R32G32_SFLOAT,
+             FORMAT_R32G32B32_UINT,
+             FORMAT_R32G32B32_SINT,
+             FORMAT_R32G32B32_SFLOAT,
+             FORMAT_R32G32B32A32_UINT,
+             FORMAT_R32G32B32A32_SINT,
+             FORMAT_R32G32B32A32_SFLOAT,
+             FORMAT_R64_UINT,
+             FORMAT_R64_SINT,
+             FORMAT_R64_SFLOAT,
+             FORMAT_R64G64_UINT,
+             FORMAT_R64G64_SINT,
+             FORMAT_R64G64_SFLOAT,
+             FORMAT_R64G64B64_UINT,
+             FORMAT_R64G64B64_SINT,
+             FORMAT_R64G64B64_SFLOAT,
+             FORMAT_R64G64B64A64_UINT,
+             FORMAT_R64G64B64A64_SINT,
+             FORMAT_R64G64B64A64_SFLOAT,
+             FORMAT_B10G11R11_UFLOAT_PACK32,
+             FORMAT_E5B9G9R9_UFLOAT_PACK32,
+             FORMAT_D16_UNORM,
+             FORMAT_X8_D24_UNORM_PACK32,
+             FORMAT_D32_SFLOAT,
+             FORMAT_S8_UINT,
+             FORMAT_D16_UNORM_S8_UINT,
+             FORMAT_D24_UNORM_S8_UINT,
+             FORMAT_D32_SFLOAT_S8_UINT,
+             FORMAT_BC1_RGB_UNORM_BLOCK,
+             FORMAT_BC1_RGB_SRGB_BLOCK,
+             FORMAT_BC1_RGBA_UNORM_BLOCK,
+             FORMAT_BC1_RGBA_SRGB_BLOCK,
+             FORMAT_BC2_UNORM_BLOCK,
+             FORMAT_BC2_SRGB_BLOCK,
+             FORMAT_BC3_UNORM_BLOCK,
+             FORMAT_BC3_SRGB_BLOCK,
+             FORMAT_BC4_UNORM_BLOCK,
+             FORMAT_BC4_SNORM_BLOCK,
+             FORMAT_BC5_UNORM_BLOCK,
+             FORMAT_BC5_SNORM_BLOCK,
+             FORMAT_BC6H_UFLOAT_BLOCK,
+             FORMAT_BC6H_SFLOAT_BLOCK,
+             FORMAT_BC7_UNORM_BLOCK,
+             FORMAT_BC7_SRGB_BLOCK,
+             FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
+             FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
+             FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
+             FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
+             FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
+             FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
+             FORMAT_EAC_R11_UNORM_BLOCK,
+             FORMAT_EAC_R11_SNORM_BLOCK,
+             FORMAT_EAC_R11G11_UNORM_BLOCK,
+             FORMAT_EAC_R11G11_SNORM_BLOCK,
+             FORMAT_ASTC_4x4_UNORM_BLOCK,
+             FORMAT_ASTC_4x4_SRGB_BLOCK,
+             FORMAT_ASTC_5x4_UNORM_BLOCK,
+             FORMAT_ASTC_5x4_SRGB_BLOCK,
+             FORMAT_ASTC_5x5_UNORM_BLOCK,
+             FORMAT_ASTC_5x5_SRGB_BLOCK,
+             FORMAT_ASTC_6x5_UNORM_BLOCK,
+             FORMAT_ASTC_6x5_SRGB_BLOCK,
+             FORMAT_ASTC_6x6_UNORM_BLOCK,
+             FORMAT_ASTC_6x6_SRGB_BLOCK,
+             FORMAT_ASTC_8x5_UNORM_BLOCK,
+             FORMAT_ASTC_8x5_SRGB_BLOCK,
+             FORMAT_ASTC_8x6_UNORM_BLOCK,
+             FORMAT_ASTC_8x6_SRGB_BLOCK,
+             FORMAT_ASTC_8x8_UNORM_BLOCK,
+             FORMAT_ASTC_8x8_SRGB_BLOCK,
+             FORMAT_ASTC_10x5_UNORM_BLOCK,
+             FORMAT_ASTC_10x5_SRGB_BLOCK,
+             FORMAT_ASTC_10x6_UNORM_BLOCK,
+             FORMAT_ASTC_10x6_SRGB_BLOCK,
+             FORMAT_ASTC_10x8_UNORM_BLOCK,
+             FORMAT_ASTC_10x8_SRGB_BLOCK,
+             FORMAT_ASTC_10x10_UNORM_BLOCK,
+             FORMAT_ASTC_10x10_SRGB_BLOCK,
+             FORMAT_ASTC_12x10_UNORM_BLOCK,
+             FORMAT_ASTC_12x10_SRGB_BLOCK,
+             FORMAT_ASTC_12x12_UNORM_BLOCK,
+             FORMAT_ASTC_12x12_SRGB_BLOCK,
+             FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT,
+             FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT,
+             FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG,
+             FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,
+             FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
+             FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
+             FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,
+             FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
+             FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
+             FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
+             FORMAT_G16_B16_R16_3PLANE_444_UNORM,
+             FORMAT_G16_B16R16_2PLANE_422_UNORM,
+             FORMAT_G16_B16_R16_3PLANE_422_UNORM,
+             FORMAT_G16_B16R16_2PLANE_420_UNORM,
+             FORMAT_G16_B16_R16_3PLANE_420_UNORM,
+             FORMAT_B16G16R16G16_422_UNORM,
+             FORMAT_G16B16G16R16_422_UNORM,
+             FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
+             FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
+             FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
+             FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
+             FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
+             FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
+             FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
+             FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
+             FORMAT_R12X4G12X4_UNORM_2PACK16,
+             FORMAT_R12X4_UNORM_PACK16,
+             FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
+             FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
+             FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
+             FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
+             FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
+             FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
+             FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
+             FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
+             FORMAT_R10X6G10X6_UNORM_2PACK16,
+             FORMAT_R10X6_UNORM_PACK16,
+             FORMAT_G8_B8_R8_3PLANE_444_UNORM,
+             FORMAT_G8_B8R8_2PLANE_422_UNORM,
+             FORMAT_G8_B8_R8_3PLANE_422_UNORM,
+             FORMAT_G8_B8R8_2PLANE_420_UNORM,
+             FORMAT_G8_B8_R8_3PLANE_420_UNORM,
+             FORMAT_B8G8R8G8_422_UNORM,
+             FORMAT_G8B8G8R8_422_UNORM :: Format #-}
+
+instance Show Format where
+  showsPrec p = \case
+    FORMAT_UNDEFINED -> showString "FORMAT_UNDEFINED"
+    FORMAT_R4G4_UNORM_PACK8 -> showString "FORMAT_R4G4_UNORM_PACK8"
+    FORMAT_R4G4B4A4_UNORM_PACK16 -> showString "FORMAT_R4G4B4A4_UNORM_PACK16"
+    FORMAT_B4G4R4A4_UNORM_PACK16 -> showString "FORMAT_B4G4R4A4_UNORM_PACK16"
+    FORMAT_R5G6B5_UNORM_PACK16 -> showString "FORMAT_R5G6B5_UNORM_PACK16"
+    FORMAT_B5G6R5_UNORM_PACK16 -> showString "FORMAT_B5G6R5_UNORM_PACK16"
+    FORMAT_R5G5B5A1_UNORM_PACK16 -> showString "FORMAT_R5G5B5A1_UNORM_PACK16"
+    FORMAT_B5G5R5A1_UNORM_PACK16 -> showString "FORMAT_B5G5R5A1_UNORM_PACK16"
+    FORMAT_A1R5G5B5_UNORM_PACK16 -> showString "FORMAT_A1R5G5B5_UNORM_PACK16"
+    FORMAT_R8_UNORM -> showString "FORMAT_R8_UNORM"
+    FORMAT_R8_SNORM -> showString "FORMAT_R8_SNORM"
+    FORMAT_R8_USCALED -> showString "FORMAT_R8_USCALED"
+    FORMAT_R8_SSCALED -> showString "FORMAT_R8_SSCALED"
+    FORMAT_R8_UINT -> showString "FORMAT_R8_UINT"
+    FORMAT_R8_SINT -> showString "FORMAT_R8_SINT"
+    FORMAT_R8_SRGB -> showString "FORMAT_R8_SRGB"
+    FORMAT_R8G8_UNORM -> showString "FORMAT_R8G8_UNORM"
+    FORMAT_R8G8_SNORM -> showString "FORMAT_R8G8_SNORM"
+    FORMAT_R8G8_USCALED -> showString "FORMAT_R8G8_USCALED"
+    FORMAT_R8G8_SSCALED -> showString "FORMAT_R8G8_SSCALED"
+    FORMAT_R8G8_UINT -> showString "FORMAT_R8G8_UINT"
+    FORMAT_R8G8_SINT -> showString "FORMAT_R8G8_SINT"
+    FORMAT_R8G8_SRGB -> showString "FORMAT_R8G8_SRGB"
+    FORMAT_R8G8B8_UNORM -> showString "FORMAT_R8G8B8_UNORM"
+    FORMAT_R8G8B8_SNORM -> showString "FORMAT_R8G8B8_SNORM"
+    FORMAT_R8G8B8_USCALED -> showString "FORMAT_R8G8B8_USCALED"
+    FORMAT_R8G8B8_SSCALED -> showString "FORMAT_R8G8B8_SSCALED"
+    FORMAT_R8G8B8_UINT -> showString "FORMAT_R8G8B8_UINT"
+    FORMAT_R8G8B8_SINT -> showString "FORMAT_R8G8B8_SINT"
+    FORMAT_R8G8B8_SRGB -> showString "FORMAT_R8G8B8_SRGB"
+    FORMAT_B8G8R8_UNORM -> showString "FORMAT_B8G8R8_UNORM"
+    FORMAT_B8G8R8_SNORM -> showString "FORMAT_B8G8R8_SNORM"
+    FORMAT_B8G8R8_USCALED -> showString "FORMAT_B8G8R8_USCALED"
+    FORMAT_B8G8R8_SSCALED -> showString "FORMAT_B8G8R8_SSCALED"
+    FORMAT_B8G8R8_UINT -> showString "FORMAT_B8G8R8_UINT"
+    FORMAT_B8G8R8_SINT -> showString "FORMAT_B8G8R8_SINT"
+    FORMAT_B8G8R8_SRGB -> showString "FORMAT_B8G8R8_SRGB"
+    FORMAT_R8G8B8A8_UNORM -> showString "FORMAT_R8G8B8A8_UNORM"
+    FORMAT_R8G8B8A8_SNORM -> showString "FORMAT_R8G8B8A8_SNORM"
+    FORMAT_R8G8B8A8_USCALED -> showString "FORMAT_R8G8B8A8_USCALED"
+    FORMAT_R8G8B8A8_SSCALED -> showString "FORMAT_R8G8B8A8_SSCALED"
+    FORMAT_R8G8B8A8_UINT -> showString "FORMAT_R8G8B8A8_UINT"
+    FORMAT_R8G8B8A8_SINT -> showString "FORMAT_R8G8B8A8_SINT"
+    FORMAT_R8G8B8A8_SRGB -> showString "FORMAT_R8G8B8A8_SRGB"
+    FORMAT_B8G8R8A8_UNORM -> showString "FORMAT_B8G8R8A8_UNORM"
+    FORMAT_B8G8R8A8_SNORM -> showString "FORMAT_B8G8R8A8_SNORM"
+    FORMAT_B8G8R8A8_USCALED -> showString "FORMAT_B8G8R8A8_USCALED"
+    FORMAT_B8G8R8A8_SSCALED -> showString "FORMAT_B8G8R8A8_SSCALED"
+    FORMAT_B8G8R8A8_UINT -> showString "FORMAT_B8G8R8A8_UINT"
+    FORMAT_B8G8R8A8_SINT -> showString "FORMAT_B8G8R8A8_SINT"
+    FORMAT_B8G8R8A8_SRGB -> showString "FORMAT_B8G8R8A8_SRGB"
+    FORMAT_A8B8G8R8_UNORM_PACK32 -> showString "FORMAT_A8B8G8R8_UNORM_PACK32"
+    FORMAT_A8B8G8R8_SNORM_PACK32 -> showString "FORMAT_A8B8G8R8_SNORM_PACK32"
+    FORMAT_A8B8G8R8_USCALED_PACK32 -> showString "FORMAT_A8B8G8R8_USCALED_PACK32"
+    FORMAT_A8B8G8R8_SSCALED_PACK32 -> showString "FORMAT_A8B8G8R8_SSCALED_PACK32"
+    FORMAT_A8B8G8R8_UINT_PACK32 -> showString "FORMAT_A8B8G8R8_UINT_PACK32"
+    FORMAT_A8B8G8R8_SINT_PACK32 -> showString "FORMAT_A8B8G8R8_SINT_PACK32"
+    FORMAT_A8B8G8R8_SRGB_PACK32 -> showString "FORMAT_A8B8G8R8_SRGB_PACK32"
+    FORMAT_A2R10G10B10_UNORM_PACK32 -> showString "FORMAT_A2R10G10B10_UNORM_PACK32"
+    FORMAT_A2R10G10B10_SNORM_PACK32 -> showString "FORMAT_A2R10G10B10_SNORM_PACK32"
+    FORMAT_A2R10G10B10_USCALED_PACK32 -> showString "FORMAT_A2R10G10B10_USCALED_PACK32"
+    FORMAT_A2R10G10B10_SSCALED_PACK32 -> showString "FORMAT_A2R10G10B10_SSCALED_PACK32"
+    FORMAT_A2R10G10B10_UINT_PACK32 -> showString "FORMAT_A2R10G10B10_UINT_PACK32"
+    FORMAT_A2R10G10B10_SINT_PACK32 -> showString "FORMAT_A2R10G10B10_SINT_PACK32"
+    FORMAT_A2B10G10R10_UNORM_PACK32 -> showString "FORMAT_A2B10G10R10_UNORM_PACK32"
+    FORMAT_A2B10G10R10_SNORM_PACK32 -> showString "FORMAT_A2B10G10R10_SNORM_PACK32"
+    FORMAT_A2B10G10R10_USCALED_PACK32 -> showString "FORMAT_A2B10G10R10_USCALED_PACK32"
+    FORMAT_A2B10G10R10_SSCALED_PACK32 -> showString "FORMAT_A2B10G10R10_SSCALED_PACK32"
+    FORMAT_A2B10G10R10_UINT_PACK32 -> showString "FORMAT_A2B10G10R10_UINT_PACK32"
+    FORMAT_A2B10G10R10_SINT_PACK32 -> showString "FORMAT_A2B10G10R10_SINT_PACK32"
+    FORMAT_R16_UNORM -> showString "FORMAT_R16_UNORM"
+    FORMAT_R16_SNORM -> showString "FORMAT_R16_SNORM"
+    FORMAT_R16_USCALED -> showString "FORMAT_R16_USCALED"
+    FORMAT_R16_SSCALED -> showString "FORMAT_R16_SSCALED"
+    FORMAT_R16_UINT -> showString "FORMAT_R16_UINT"
+    FORMAT_R16_SINT -> showString "FORMAT_R16_SINT"
+    FORMAT_R16_SFLOAT -> showString "FORMAT_R16_SFLOAT"
+    FORMAT_R16G16_UNORM -> showString "FORMAT_R16G16_UNORM"
+    FORMAT_R16G16_SNORM -> showString "FORMAT_R16G16_SNORM"
+    FORMAT_R16G16_USCALED -> showString "FORMAT_R16G16_USCALED"
+    FORMAT_R16G16_SSCALED -> showString "FORMAT_R16G16_SSCALED"
+    FORMAT_R16G16_UINT -> showString "FORMAT_R16G16_UINT"
+    FORMAT_R16G16_SINT -> showString "FORMAT_R16G16_SINT"
+    FORMAT_R16G16_SFLOAT -> showString "FORMAT_R16G16_SFLOAT"
+    FORMAT_R16G16B16_UNORM -> showString "FORMAT_R16G16B16_UNORM"
+    FORMAT_R16G16B16_SNORM -> showString "FORMAT_R16G16B16_SNORM"
+    FORMAT_R16G16B16_USCALED -> showString "FORMAT_R16G16B16_USCALED"
+    FORMAT_R16G16B16_SSCALED -> showString "FORMAT_R16G16B16_SSCALED"
+    FORMAT_R16G16B16_UINT -> showString "FORMAT_R16G16B16_UINT"
+    FORMAT_R16G16B16_SINT -> showString "FORMAT_R16G16B16_SINT"
+    FORMAT_R16G16B16_SFLOAT -> showString "FORMAT_R16G16B16_SFLOAT"
+    FORMAT_R16G16B16A16_UNORM -> showString "FORMAT_R16G16B16A16_UNORM"
+    FORMAT_R16G16B16A16_SNORM -> showString "FORMAT_R16G16B16A16_SNORM"
+    FORMAT_R16G16B16A16_USCALED -> showString "FORMAT_R16G16B16A16_USCALED"
+    FORMAT_R16G16B16A16_SSCALED -> showString "FORMAT_R16G16B16A16_SSCALED"
+    FORMAT_R16G16B16A16_UINT -> showString "FORMAT_R16G16B16A16_UINT"
+    FORMAT_R16G16B16A16_SINT -> showString "FORMAT_R16G16B16A16_SINT"
+    FORMAT_R16G16B16A16_SFLOAT -> showString "FORMAT_R16G16B16A16_SFLOAT"
+    FORMAT_R32_UINT -> showString "FORMAT_R32_UINT"
+    FORMAT_R32_SINT -> showString "FORMAT_R32_SINT"
+    FORMAT_R32_SFLOAT -> showString "FORMAT_R32_SFLOAT"
+    FORMAT_R32G32_UINT -> showString "FORMAT_R32G32_UINT"
+    FORMAT_R32G32_SINT -> showString "FORMAT_R32G32_SINT"
+    FORMAT_R32G32_SFLOAT -> showString "FORMAT_R32G32_SFLOAT"
+    FORMAT_R32G32B32_UINT -> showString "FORMAT_R32G32B32_UINT"
+    FORMAT_R32G32B32_SINT -> showString "FORMAT_R32G32B32_SINT"
+    FORMAT_R32G32B32_SFLOAT -> showString "FORMAT_R32G32B32_SFLOAT"
+    FORMAT_R32G32B32A32_UINT -> showString "FORMAT_R32G32B32A32_UINT"
+    FORMAT_R32G32B32A32_SINT -> showString "FORMAT_R32G32B32A32_SINT"
+    FORMAT_R32G32B32A32_SFLOAT -> showString "FORMAT_R32G32B32A32_SFLOAT"
+    FORMAT_R64_UINT -> showString "FORMAT_R64_UINT"
+    FORMAT_R64_SINT -> showString "FORMAT_R64_SINT"
+    FORMAT_R64_SFLOAT -> showString "FORMAT_R64_SFLOAT"
+    FORMAT_R64G64_UINT -> showString "FORMAT_R64G64_UINT"
+    FORMAT_R64G64_SINT -> showString "FORMAT_R64G64_SINT"
+    FORMAT_R64G64_SFLOAT -> showString "FORMAT_R64G64_SFLOAT"
+    FORMAT_R64G64B64_UINT -> showString "FORMAT_R64G64B64_UINT"
+    FORMAT_R64G64B64_SINT -> showString "FORMAT_R64G64B64_SINT"
+    FORMAT_R64G64B64_SFLOAT -> showString "FORMAT_R64G64B64_SFLOAT"
+    FORMAT_R64G64B64A64_UINT -> showString "FORMAT_R64G64B64A64_UINT"
+    FORMAT_R64G64B64A64_SINT -> showString "FORMAT_R64G64B64A64_SINT"
+    FORMAT_R64G64B64A64_SFLOAT -> showString "FORMAT_R64G64B64A64_SFLOAT"
+    FORMAT_B10G11R11_UFLOAT_PACK32 -> showString "FORMAT_B10G11R11_UFLOAT_PACK32"
+    FORMAT_E5B9G9R9_UFLOAT_PACK32 -> showString "FORMAT_E5B9G9R9_UFLOAT_PACK32"
+    FORMAT_D16_UNORM -> showString "FORMAT_D16_UNORM"
+    FORMAT_X8_D24_UNORM_PACK32 -> showString "FORMAT_X8_D24_UNORM_PACK32"
+    FORMAT_D32_SFLOAT -> showString "FORMAT_D32_SFLOAT"
+    FORMAT_S8_UINT -> showString "FORMAT_S8_UINT"
+    FORMAT_D16_UNORM_S8_UINT -> showString "FORMAT_D16_UNORM_S8_UINT"
+    FORMAT_D24_UNORM_S8_UINT -> showString "FORMAT_D24_UNORM_S8_UINT"
+    FORMAT_D32_SFLOAT_S8_UINT -> showString "FORMAT_D32_SFLOAT_S8_UINT"
+    FORMAT_BC1_RGB_UNORM_BLOCK -> showString "FORMAT_BC1_RGB_UNORM_BLOCK"
+    FORMAT_BC1_RGB_SRGB_BLOCK -> showString "FORMAT_BC1_RGB_SRGB_BLOCK"
+    FORMAT_BC1_RGBA_UNORM_BLOCK -> showString "FORMAT_BC1_RGBA_UNORM_BLOCK"
+    FORMAT_BC1_RGBA_SRGB_BLOCK -> showString "FORMAT_BC1_RGBA_SRGB_BLOCK"
+    FORMAT_BC2_UNORM_BLOCK -> showString "FORMAT_BC2_UNORM_BLOCK"
+    FORMAT_BC2_SRGB_BLOCK -> showString "FORMAT_BC2_SRGB_BLOCK"
+    FORMAT_BC3_UNORM_BLOCK -> showString "FORMAT_BC3_UNORM_BLOCK"
+    FORMAT_BC3_SRGB_BLOCK -> showString "FORMAT_BC3_SRGB_BLOCK"
+    FORMAT_BC4_UNORM_BLOCK -> showString "FORMAT_BC4_UNORM_BLOCK"
+    FORMAT_BC4_SNORM_BLOCK -> showString "FORMAT_BC4_SNORM_BLOCK"
+    FORMAT_BC5_UNORM_BLOCK -> showString "FORMAT_BC5_UNORM_BLOCK"
+    FORMAT_BC5_SNORM_BLOCK -> showString "FORMAT_BC5_SNORM_BLOCK"
+    FORMAT_BC6H_UFLOAT_BLOCK -> showString "FORMAT_BC6H_UFLOAT_BLOCK"
+    FORMAT_BC6H_SFLOAT_BLOCK -> showString "FORMAT_BC6H_SFLOAT_BLOCK"
+    FORMAT_BC7_UNORM_BLOCK -> showString "FORMAT_BC7_UNORM_BLOCK"
+    FORMAT_BC7_SRGB_BLOCK -> showString "FORMAT_BC7_SRGB_BLOCK"
+    FORMAT_ETC2_R8G8B8_UNORM_BLOCK -> showString "FORMAT_ETC2_R8G8B8_UNORM_BLOCK"
+    FORMAT_ETC2_R8G8B8_SRGB_BLOCK -> showString "FORMAT_ETC2_R8G8B8_SRGB_BLOCK"
+    FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK -> showString "FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK"
+    FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK -> showString "FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK"
+    FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK -> showString "FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK"
+    FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK -> showString "FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK"
+    FORMAT_EAC_R11_UNORM_BLOCK -> showString "FORMAT_EAC_R11_UNORM_BLOCK"
+    FORMAT_EAC_R11_SNORM_BLOCK -> showString "FORMAT_EAC_R11_SNORM_BLOCK"
+    FORMAT_EAC_R11G11_UNORM_BLOCK -> showString "FORMAT_EAC_R11G11_UNORM_BLOCK"
+    FORMAT_EAC_R11G11_SNORM_BLOCK -> showString "FORMAT_EAC_R11G11_SNORM_BLOCK"
+    FORMAT_ASTC_4x4_UNORM_BLOCK -> showString "FORMAT_ASTC_4x4_UNORM_BLOCK"
+    FORMAT_ASTC_4x4_SRGB_BLOCK -> showString "FORMAT_ASTC_4x4_SRGB_BLOCK"
+    FORMAT_ASTC_5x4_UNORM_BLOCK -> showString "FORMAT_ASTC_5x4_UNORM_BLOCK"
+    FORMAT_ASTC_5x4_SRGB_BLOCK -> showString "FORMAT_ASTC_5x4_SRGB_BLOCK"
+    FORMAT_ASTC_5x5_UNORM_BLOCK -> showString "FORMAT_ASTC_5x5_UNORM_BLOCK"
+    FORMAT_ASTC_5x5_SRGB_BLOCK -> showString "FORMAT_ASTC_5x5_SRGB_BLOCK"
+    FORMAT_ASTC_6x5_UNORM_BLOCK -> showString "FORMAT_ASTC_6x5_UNORM_BLOCK"
+    FORMAT_ASTC_6x5_SRGB_BLOCK -> showString "FORMAT_ASTC_6x5_SRGB_BLOCK"
+    FORMAT_ASTC_6x6_UNORM_BLOCK -> showString "FORMAT_ASTC_6x6_UNORM_BLOCK"
+    FORMAT_ASTC_6x6_SRGB_BLOCK -> showString "FORMAT_ASTC_6x6_SRGB_BLOCK"
+    FORMAT_ASTC_8x5_UNORM_BLOCK -> showString "FORMAT_ASTC_8x5_UNORM_BLOCK"
+    FORMAT_ASTC_8x5_SRGB_BLOCK -> showString "FORMAT_ASTC_8x5_SRGB_BLOCK"
+    FORMAT_ASTC_8x6_UNORM_BLOCK -> showString "FORMAT_ASTC_8x6_UNORM_BLOCK"
+    FORMAT_ASTC_8x6_SRGB_BLOCK -> showString "FORMAT_ASTC_8x6_SRGB_BLOCK"
+    FORMAT_ASTC_8x8_UNORM_BLOCK -> showString "FORMAT_ASTC_8x8_UNORM_BLOCK"
+    FORMAT_ASTC_8x8_SRGB_BLOCK -> showString "FORMAT_ASTC_8x8_SRGB_BLOCK"
+    FORMAT_ASTC_10x5_UNORM_BLOCK -> showString "FORMAT_ASTC_10x5_UNORM_BLOCK"
+    FORMAT_ASTC_10x5_SRGB_BLOCK -> showString "FORMAT_ASTC_10x5_SRGB_BLOCK"
+    FORMAT_ASTC_10x6_UNORM_BLOCK -> showString "FORMAT_ASTC_10x6_UNORM_BLOCK"
+    FORMAT_ASTC_10x6_SRGB_BLOCK -> showString "FORMAT_ASTC_10x6_SRGB_BLOCK"
+    FORMAT_ASTC_10x8_UNORM_BLOCK -> showString "FORMAT_ASTC_10x8_UNORM_BLOCK"
+    FORMAT_ASTC_10x8_SRGB_BLOCK -> showString "FORMAT_ASTC_10x8_SRGB_BLOCK"
+    FORMAT_ASTC_10x10_UNORM_BLOCK -> showString "FORMAT_ASTC_10x10_UNORM_BLOCK"
+    FORMAT_ASTC_10x10_SRGB_BLOCK -> showString "FORMAT_ASTC_10x10_SRGB_BLOCK"
+    FORMAT_ASTC_12x10_UNORM_BLOCK -> showString "FORMAT_ASTC_12x10_UNORM_BLOCK"
+    FORMAT_ASTC_12x10_SRGB_BLOCK -> showString "FORMAT_ASTC_12x10_SRGB_BLOCK"
+    FORMAT_ASTC_12x12_UNORM_BLOCK -> showString "FORMAT_ASTC_12x12_UNORM_BLOCK"
+    FORMAT_ASTC_12x12_SRGB_BLOCK -> showString "FORMAT_ASTC_12x12_SRGB_BLOCK"
+    FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT"
+    FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT -> showString "FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT"
+    FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG -> showString "FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG"
+    FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG -> showString "FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG"
+    FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG -> showString "FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG"
+    FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG -> showString "FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG"
+    FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG -> showString "FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG"
+    FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG -> showString "FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG"
+    FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG -> showString "FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG"
+    FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG -> showString "FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG"
+    FORMAT_G16_B16_R16_3PLANE_444_UNORM -> showString "FORMAT_G16_B16_R16_3PLANE_444_UNORM"
+    FORMAT_G16_B16R16_2PLANE_422_UNORM -> showString "FORMAT_G16_B16R16_2PLANE_422_UNORM"
+    FORMAT_G16_B16_R16_3PLANE_422_UNORM -> showString "FORMAT_G16_B16_R16_3PLANE_422_UNORM"
+    FORMAT_G16_B16R16_2PLANE_420_UNORM -> showString "FORMAT_G16_B16R16_2PLANE_420_UNORM"
+    FORMAT_G16_B16_R16_3PLANE_420_UNORM -> showString "FORMAT_G16_B16_R16_3PLANE_420_UNORM"
+    FORMAT_B16G16R16G16_422_UNORM -> showString "FORMAT_B16G16R16G16_422_UNORM"
+    FORMAT_G16B16G16R16_422_UNORM -> showString "FORMAT_G16B16G16R16_422_UNORM"
+    FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 -> showString "FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16"
+    FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 -> showString "FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16"
+    FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 -> showString "FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16"
+    FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 -> showString "FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16"
+    FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 -> showString "FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16"
+    FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 -> showString "FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16"
+    FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 -> showString "FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16"
+    FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 -> showString "FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16"
+    FORMAT_R12X4G12X4_UNORM_2PACK16 -> showString "FORMAT_R12X4G12X4_UNORM_2PACK16"
+    FORMAT_R12X4_UNORM_PACK16 -> showString "FORMAT_R12X4_UNORM_PACK16"
+    FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 -> showString "FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16"
+    FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 -> showString "FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16"
+    FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 -> showString "FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16"
+    FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 -> showString "FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16"
+    FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 -> showString "FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16"
+    FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 -> showString "FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16"
+    FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 -> showString "FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16"
+    FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 -> showString "FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16"
+    FORMAT_R10X6G10X6_UNORM_2PACK16 -> showString "FORMAT_R10X6G10X6_UNORM_2PACK16"
+    FORMAT_R10X6_UNORM_PACK16 -> showString "FORMAT_R10X6_UNORM_PACK16"
+    FORMAT_G8_B8_R8_3PLANE_444_UNORM -> showString "FORMAT_G8_B8_R8_3PLANE_444_UNORM"
+    FORMAT_G8_B8R8_2PLANE_422_UNORM -> showString "FORMAT_G8_B8R8_2PLANE_422_UNORM"
+    FORMAT_G8_B8_R8_3PLANE_422_UNORM -> showString "FORMAT_G8_B8_R8_3PLANE_422_UNORM"
+    FORMAT_G8_B8R8_2PLANE_420_UNORM -> showString "FORMAT_G8_B8R8_2PLANE_420_UNORM"
+    FORMAT_G8_B8_R8_3PLANE_420_UNORM -> showString "FORMAT_G8_B8_R8_3PLANE_420_UNORM"
+    FORMAT_B8G8R8G8_422_UNORM -> showString "FORMAT_B8G8R8G8_422_UNORM"
+    FORMAT_G8B8G8R8_422_UNORM -> showString "FORMAT_G8B8G8R8_422_UNORM"
+    Format x -> showParen (p >= 11) (showString "Format " . showsPrec 11 x)
+
+instance Read Format where
+  readPrec = parens (choose [("FORMAT_UNDEFINED", pure FORMAT_UNDEFINED)
+                            , ("FORMAT_R4G4_UNORM_PACK8", pure FORMAT_R4G4_UNORM_PACK8)
+                            , ("FORMAT_R4G4B4A4_UNORM_PACK16", pure FORMAT_R4G4B4A4_UNORM_PACK16)
+                            , ("FORMAT_B4G4R4A4_UNORM_PACK16", pure FORMAT_B4G4R4A4_UNORM_PACK16)
+                            , ("FORMAT_R5G6B5_UNORM_PACK16", pure FORMAT_R5G6B5_UNORM_PACK16)
+                            , ("FORMAT_B5G6R5_UNORM_PACK16", pure FORMAT_B5G6R5_UNORM_PACK16)
+                            , ("FORMAT_R5G5B5A1_UNORM_PACK16", pure FORMAT_R5G5B5A1_UNORM_PACK16)
+                            , ("FORMAT_B5G5R5A1_UNORM_PACK16", pure FORMAT_B5G5R5A1_UNORM_PACK16)
+                            , ("FORMAT_A1R5G5B5_UNORM_PACK16", pure FORMAT_A1R5G5B5_UNORM_PACK16)
+                            , ("FORMAT_R8_UNORM", pure FORMAT_R8_UNORM)
+                            , ("FORMAT_R8_SNORM", pure FORMAT_R8_SNORM)
+                            , ("FORMAT_R8_USCALED", pure FORMAT_R8_USCALED)
+                            , ("FORMAT_R8_SSCALED", pure FORMAT_R8_SSCALED)
+                            , ("FORMAT_R8_UINT", pure FORMAT_R8_UINT)
+                            , ("FORMAT_R8_SINT", pure FORMAT_R8_SINT)
+                            , ("FORMAT_R8_SRGB", pure FORMAT_R8_SRGB)
+                            , ("FORMAT_R8G8_UNORM", pure FORMAT_R8G8_UNORM)
+                            , ("FORMAT_R8G8_SNORM", pure FORMAT_R8G8_SNORM)
+                            , ("FORMAT_R8G8_USCALED", pure FORMAT_R8G8_USCALED)
+                            , ("FORMAT_R8G8_SSCALED", pure FORMAT_R8G8_SSCALED)
+                            , ("FORMAT_R8G8_UINT", pure FORMAT_R8G8_UINT)
+                            , ("FORMAT_R8G8_SINT", pure FORMAT_R8G8_SINT)
+                            , ("FORMAT_R8G8_SRGB", pure FORMAT_R8G8_SRGB)
+                            , ("FORMAT_R8G8B8_UNORM", pure FORMAT_R8G8B8_UNORM)
+                            , ("FORMAT_R8G8B8_SNORM", pure FORMAT_R8G8B8_SNORM)
+                            , ("FORMAT_R8G8B8_USCALED", pure FORMAT_R8G8B8_USCALED)
+                            , ("FORMAT_R8G8B8_SSCALED", pure FORMAT_R8G8B8_SSCALED)
+                            , ("FORMAT_R8G8B8_UINT", pure FORMAT_R8G8B8_UINT)
+                            , ("FORMAT_R8G8B8_SINT", pure FORMAT_R8G8B8_SINT)
+                            , ("FORMAT_R8G8B8_SRGB", pure FORMAT_R8G8B8_SRGB)
+                            , ("FORMAT_B8G8R8_UNORM", pure FORMAT_B8G8R8_UNORM)
+                            , ("FORMAT_B8G8R8_SNORM", pure FORMAT_B8G8R8_SNORM)
+                            , ("FORMAT_B8G8R8_USCALED", pure FORMAT_B8G8R8_USCALED)
+                            , ("FORMAT_B8G8R8_SSCALED", pure FORMAT_B8G8R8_SSCALED)
+                            , ("FORMAT_B8G8R8_UINT", pure FORMAT_B8G8R8_UINT)
+                            , ("FORMAT_B8G8R8_SINT", pure FORMAT_B8G8R8_SINT)
+                            , ("FORMAT_B8G8R8_SRGB", pure FORMAT_B8G8R8_SRGB)
+                            , ("FORMAT_R8G8B8A8_UNORM", pure FORMAT_R8G8B8A8_UNORM)
+                            , ("FORMAT_R8G8B8A8_SNORM", pure FORMAT_R8G8B8A8_SNORM)
+                            , ("FORMAT_R8G8B8A8_USCALED", pure FORMAT_R8G8B8A8_USCALED)
+                            , ("FORMAT_R8G8B8A8_SSCALED", pure FORMAT_R8G8B8A8_SSCALED)
+                            , ("FORMAT_R8G8B8A8_UINT", pure FORMAT_R8G8B8A8_UINT)
+                            , ("FORMAT_R8G8B8A8_SINT", pure FORMAT_R8G8B8A8_SINT)
+                            , ("FORMAT_R8G8B8A8_SRGB", pure FORMAT_R8G8B8A8_SRGB)
+                            , ("FORMAT_B8G8R8A8_UNORM", pure FORMAT_B8G8R8A8_UNORM)
+                            , ("FORMAT_B8G8R8A8_SNORM", pure FORMAT_B8G8R8A8_SNORM)
+                            , ("FORMAT_B8G8R8A8_USCALED", pure FORMAT_B8G8R8A8_USCALED)
+                            , ("FORMAT_B8G8R8A8_SSCALED", pure FORMAT_B8G8R8A8_SSCALED)
+                            , ("FORMAT_B8G8R8A8_UINT", pure FORMAT_B8G8R8A8_UINT)
+                            , ("FORMAT_B8G8R8A8_SINT", pure FORMAT_B8G8R8A8_SINT)
+                            , ("FORMAT_B8G8R8A8_SRGB", pure FORMAT_B8G8R8A8_SRGB)
+                            , ("FORMAT_A8B8G8R8_UNORM_PACK32", pure FORMAT_A8B8G8R8_UNORM_PACK32)
+                            , ("FORMAT_A8B8G8R8_SNORM_PACK32", pure FORMAT_A8B8G8R8_SNORM_PACK32)
+                            , ("FORMAT_A8B8G8R8_USCALED_PACK32", pure FORMAT_A8B8G8R8_USCALED_PACK32)
+                            , ("FORMAT_A8B8G8R8_SSCALED_PACK32", pure FORMAT_A8B8G8R8_SSCALED_PACK32)
+                            , ("FORMAT_A8B8G8R8_UINT_PACK32", pure FORMAT_A8B8G8R8_UINT_PACK32)
+                            , ("FORMAT_A8B8G8R8_SINT_PACK32", pure FORMAT_A8B8G8R8_SINT_PACK32)
+                            , ("FORMAT_A8B8G8R8_SRGB_PACK32", pure FORMAT_A8B8G8R8_SRGB_PACK32)
+                            , ("FORMAT_A2R10G10B10_UNORM_PACK32", pure FORMAT_A2R10G10B10_UNORM_PACK32)
+                            , ("FORMAT_A2R10G10B10_SNORM_PACK32", pure FORMAT_A2R10G10B10_SNORM_PACK32)
+                            , ("FORMAT_A2R10G10B10_USCALED_PACK32", pure FORMAT_A2R10G10B10_USCALED_PACK32)
+                            , ("FORMAT_A2R10G10B10_SSCALED_PACK32", pure FORMAT_A2R10G10B10_SSCALED_PACK32)
+                            , ("FORMAT_A2R10G10B10_UINT_PACK32", pure FORMAT_A2R10G10B10_UINT_PACK32)
+                            , ("FORMAT_A2R10G10B10_SINT_PACK32", pure FORMAT_A2R10G10B10_SINT_PACK32)
+                            , ("FORMAT_A2B10G10R10_UNORM_PACK32", pure FORMAT_A2B10G10R10_UNORM_PACK32)
+                            , ("FORMAT_A2B10G10R10_SNORM_PACK32", pure FORMAT_A2B10G10R10_SNORM_PACK32)
+                            , ("FORMAT_A2B10G10R10_USCALED_PACK32", pure FORMAT_A2B10G10R10_USCALED_PACK32)
+                            , ("FORMAT_A2B10G10R10_SSCALED_PACK32", pure FORMAT_A2B10G10R10_SSCALED_PACK32)
+                            , ("FORMAT_A2B10G10R10_UINT_PACK32", pure FORMAT_A2B10G10R10_UINT_PACK32)
+                            , ("FORMAT_A2B10G10R10_SINT_PACK32", pure FORMAT_A2B10G10R10_SINT_PACK32)
+                            , ("FORMAT_R16_UNORM", pure FORMAT_R16_UNORM)
+                            , ("FORMAT_R16_SNORM", pure FORMAT_R16_SNORM)
+                            , ("FORMAT_R16_USCALED", pure FORMAT_R16_USCALED)
+                            , ("FORMAT_R16_SSCALED", pure FORMAT_R16_SSCALED)
+                            , ("FORMAT_R16_UINT", pure FORMAT_R16_UINT)
+                            , ("FORMAT_R16_SINT", pure FORMAT_R16_SINT)
+                            , ("FORMAT_R16_SFLOAT", pure FORMAT_R16_SFLOAT)
+                            , ("FORMAT_R16G16_UNORM", pure FORMAT_R16G16_UNORM)
+                            , ("FORMAT_R16G16_SNORM", pure FORMAT_R16G16_SNORM)
+                            , ("FORMAT_R16G16_USCALED", pure FORMAT_R16G16_USCALED)
+                            , ("FORMAT_R16G16_SSCALED", pure FORMAT_R16G16_SSCALED)
+                            , ("FORMAT_R16G16_UINT", pure FORMAT_R16G16_UINT)
+                            , ("FORMAT_R16G16_SINT", pure FORMAT_R16G16_SINT)
+                            , ("FORMAT_R16G16_SFLOAT", pure FORMAT_R16G16_SFLOAT)
+                            , ("FORMAT_R16G16B16_UNORM", pure FORMAT_R16G16B16_UNORM)
+                            , ("FORMAT_R16G16B16_SNORM", pure FORMAT_R16G16B16_SNORM)
+                            , ("FORMAT_R16G16B16_USCALED", pure FORMAT_R16G16B16_USCALED)
+                            , ("FORMAT_R16G16B16_SSCALED", pure FORMAT_R16G16B16_SSCALED)
+                            , ("FORMAT_R16G16B16_UINT", pure FORMAT_R16G16B16_UINT)
+                            , ("FORMAT_R16G16B16_SINT", pure FORMAT_R16G16B16_SINT)
+                            , ("FORMAT_R16G16B16_SFLOAT", pure FORMAT_R16G16B16_SFLOAT)
+                            , ("FORMAT_R16G16B16A16_UNORM", pure FORMAT_R16G16B16A16_UNORM)
+                            , ("FORMAT_R16G16B16A16_SNORM", pure FORMAT_R16G16B16A16_SNORM)
+                            , ("FORMAT_R16G16B16A16_USCALED", pure FORMAT_R16G16B16A16_USCALED)
+                            , ("FORMAT_R16G16B16A16_SSCALED", pure FORMAT_R16G16B16A16_SSCALED)
+                            , ("FORMAT_R16G16B16A16_UINT", pure FORMAT_R16G16B16A16_UINT)
+                            , ("FORMAT_R16G16B16A16_SINT", pure FORMAT_R16G16B16A16_SINT)
+                            , ("FORMAT_R16G16B16A16_SFLOAT", pure FORMAT_R16G16B16A16_SFLOAT)
+                            , ("FORMAT_R32_UINT", pure FORMAT_R32_UINT)
+                            , ("FORMAT_R32_SINT", pure FORMAT_R32_SINT)
+                            , ("FORMAT_R32_SFLOAT", pure FORMAT_R32_SFLOAT)
+                            , ("FORMAT_R32G32_UINT", pure FORMAT_R32G32_UINT)
+                            , ("FORMAT_R32G32_SINT", pure FORMAT_R32G32_SINT)
+                            , ("FORMAT_R32G32_SFLOAT", pure FORMAT_R32G32_SFLOAT)
+                            , ("FORMAT_R32G32B32_UINT", pure FORMAT_R32G32B32_UINT)
+                            , ("FORMAT_R32G32B32_SINT", pure FORMAT_R32G32B32_SINT)
+                            , ("FORMAT_R32G32B32_SFLOAT", pure FORMAT_R32G32B32_SFLOAT)
+                            , ("FORMAT_R32G32B32A32_UINT", pure FORMAT_R32G32B32A32_UINT)
+                            , ("FORMAT_R32G32B32A32_SINT", pure FORMAT_R32G32B32A32_SINT)
+                            , ("FORMAT_R32G32B32A32_SFLOAT", pure FORMAT_R32G32B32A32_SFLOAT)
+                            , ("FORMAT_R64_UINT", pure FORMAT_R64_UINT)
+                            , ("FORMAT_R64_SINT", pure FORMAT_R64_SINT)
+                            , ("FORMAT_R64_SFLOAT", pure FORMAT_R64_SFLOAT)
+                            , ("FORMAT_R64G64_UINT", pure FORMAT_R64G64_UINT)
+                            , ("FORMAT_R64G64_SINT", pure FORMAT_R64G64_SINT)
+                            , ("FORMAT_R64G64_SFLOAT", pure FORMAT_R64G64_SFLOAT)
+                            , ("FORMAT_R64G64B64_UINT", pure FORMAT_R64G64B64_UINT)
+                            , ("FORMAT_R64G64B64_SINT", pure FORMAT_R64G64B64_SINT)
+                            , ("FORMAT_R64G64B64_SFLOAT", pure FORMAT_R64G64B64_SFLOAT)
+                            , ("FORMAT_R64G64B64A64_UINT", pure FORMAT_R64G64B64A64_UINT)
+                            , ("FORMAT_R64G64B64A64_SINT", pure FORMAT_R64G64B64A64_SINT)
+                            , ("FORMAT_R64G64B64A64_SFLOAT", pure FORMAT_R64G64B64A64_SFLOAT)
+                            , ("FORMAT_B10G11R11_UFLOAT_PACK32", pure FORMAT_B10G11R11_UFLOAT_PACK32)
+                            , ("FORMAT_E5B9G9R9_UFLOAT_PACK32", pure FORMAT_E5B9G9R9_UFLOAT_PACK32)
+                            , ("FORMAT_D16_UNORM", pure FORMAT_D16_UNORM)
+                            , ("FORMAT_X8_D24_UNORM_PACK32", pure FORMAT_X8_D24_UNORM_PACK32)
+                            , ("FORMAT_D32_SFLOAT", pure FORMAT_D32_SFLOAT)
+                            , ("FORMAT_S8_UINT", pure FORMAT_S8_UINT)
+                            , ("FORMAT_D16_UNORM_S8_UINT", pure FORMAT_D16_UNORM_S8_UINT)
+                            , ("FORMAT_D24_UNORM_S8_UINT", pure FORMAT_D24_UNORM_S8_UINT)
+                            , ("FORMAT_D32_SFLOAT_S8_UINT", pure FORMAT_D32_SFLOAT_S8_UINT)
+                            , ("FORMAT_BC1_RGB_UNORM_BLOCK", pure FORMAT_BC1_RGB_UNORM_BLOCK)
+                            , ("FORMAT_BC1_RGB_SRGB_BLOCK", pure FORMAT_BC1_RGB_SRGB_BLOCK)
+                            , ("FORMAT_BC1_RGBA_UNORM_BLOCK", pure FORMAT_BC1_RGBA_UNORM_BLOCK)
+                            , ("FORMAT_BC1_RGBA_SRGB_BLOCK", pure FORMAT_BC1_RGBA_SRGB_BLOCK)
+                            , ("FORMAT_BC2_UNORM_BLOCK", pure FORMAT_BC2_UNORM_BLOCK)
+                            , ("FORMAT_BC2_SRGB_BLOCK", pure FORMAT_BC2_SRGB_BLOCK)
+                            , ("FORMAT_BC3_UNORM_BLOCK", pure FORMAT_BC3_UNORM_BLOCK)
+                            , ("FORMAT_BC3_SRGB_BLOCK", pure FORMAT_BC3_SRGB_BLOCK)
+                            , ("FORMAT_BC4_UNORM_BLOCK", pure FORMAT_BC4_UNORM_BLOCK)
+                            , ("FORMAT_BC4_SNORM_BLOCK", pure FORMAT_BC4_SNORM_BLOCK)
+                            , ("FORMAT_BC5_UNORM_BLOCK", pure FORMAT_BC5_UNORM_BLOCK)
+                            , ("FORMAT_BC5_SNORM_BLOCK", pure FORMAT_BC5_SNORM_BLOCK)
+                            , ("FORMAT_BC6H_UFLOAT_BLOCK", pure FORMAT_BC6H_UFLOAT_BLOCK)
+                            , ("FORMAT_BC6H_SFLOAT_BLOCK", pure FORMAT_BC6H_SFLOAT_BLOCK)
+                            , ("FORMAT_BC7_UNORM_BLOCK", pure FORMAT_BC7_UNORM_BLOCK)
+                            , ("FORMAT_BC7_SRGB_BLOCK", pure FORMAT_BC7_SRGB_BLOCK)
+                            , ("FORMAT_ETC2_R8G8B8_UNORM_BLOCK", pure FORMAT_ETC2_R8G8B8_UNORM_BLOCK)
+                            , ("FORMAT_ETC2_R8G8B8_SRGB_BLOCK", pure FORMAT_ETC2_R8G8B8_SRGB_BLOCK)
+                            , ("FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK", pure FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK)
+                            , ("FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK", pure FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK)
+                            , ("FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK", pure FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK)
+                            , ("FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK", pure FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK)
+                            , ("FORMAT_EAC_R11_UNORM_BLOCK", pure FORMAT_EAC_R11_UNORM_BLOCK)
+                            , ("FORMAT_EAC_R11_SNORM_BLOCK", pure FORMAT_EAC_R11_SNORM_BLOCK)
+                            , ("FORMAT_EAC_R11G11_UNORM_BLOCK", pure FORMAT_EAC_R11G11_UNORM_BLOCK)
+                            , ("FORMAT_EAC_R11G11_SNORM_BLOCK", pure FORMAT_EAC_R11G11_SNORM_BLOCK)
+                            , ("FORMAT_ASTC_4x4_UNORM_BLOCK", pure FORMAT_ASTC_4x4_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_4x4_SRGB_BLOCK", pure FORMAT_ASTC_4x4_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_5x4_UNORM_BLOCK", pure FORMAT_ASTC_5x4_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_5x4_SRGB_BLOCK", pure FORMAT_ASTC_5x4_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_5x5_UNORM_BLOCK", pure FORMAT_ASTC_5x5_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_5x5_SRGB_BLOCK", pure FORMAT_ASTC_5x5_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_6x5_UNORM_BLOCK", pure FORMAT_ASTC_6x5_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_6x5_SRGB_BLOCK", pure FORMAT_ASTC_6x5_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_6x6_UNORM_BLOCK", pure FORMAT_ASTC_6x6_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_6x6_SRGB_BLOCK", pure FORMAT_ASTC_6x6_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_8x5_UNORM_BLOCK", pure FORMAT_ASTC_8x5_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_8x5_SRGB_BLOCK", pure FORMAT_ASTC_8x5_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_8x6_UNORM_BLOCK", pure FORMAT_ASTC_8x6_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_8x6_SRGB_BLOCK", pure FORMAT_ASTC_8x6_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_8x8_UNORM_BLOCK", pure FORMAT_ASTC_8x8_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_8x8_SRGB_BLOCK", pure FORMAT_ASTC_8x8_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_10x5_UNORM_BLOCK", pure FORMAT_ASTC_10x5_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_10x5_SRGB_BLOCK", pure FORMAT_ASTC_10x5_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_10x6_UNORM_BLOCK", pure FORMAT_ASTC_10x6_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_10x6_SRGB_BLOCK", pure FORMAT_ASTC_10x6_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_10x8_UNORM_BLOCK", pure FORMAT_ASTC_10x8_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_10x8_SRGB_BLOCK", pure FORMAT_ASTC_10x8_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_10x10_UNORM_BLOCK", pure FORMAT_ASTC_10x10_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_10x10_SRGB_BLOCK", pure FORMAT_ASTC_10x10_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_12x10_UNORM_BLOCK", pure FORMAT_ASTC_12x10_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_12x10_SRGB_BLOCK", pure FORMAT_ASTC_12x10_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_12x12_UNORM_BLOCK", pure FORMAT_ASTC_12x12_UNORM_BLOCK)
+                            , ("FORMAT_ASTC_12x12_SRGB_BLOCK", pure FORMAT_ASTC_12x12_SRGB_BLOCK)
+                            , ("FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT", pure FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT)
+                            , ("FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG", pure FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG)
+                            , ("FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG", pure FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG)
+                            , ("FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG", pure FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG)
+                            , ("FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG", pure FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG)
+                            , ("FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG", pure FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG)
+                            , ("FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG", pure FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG)
+                            , ("FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG", pure FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG)
+                            , ("FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG", pure FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG)
+                            , ("FORMAT_G16_B16_R16_3PLANE_444_UNORM", pure FORMAT_G16_B16_R16_3PLANE_444_UNORM)
+                            , ("FORMAT_G16_B16R16_2PLANE_422_UNORM", pure FORMAT_G16_B16R16_2PLANE_422_UNORM)
+                            , ("FORMAT_G16_B16_R16_3PLANE_422_UNORM", pure FORMAT_G16_B16_R16_3PLANE_422_UNORM)
+                            , ("FORMAT_G16_B16R16_2PLANE_420_UNORM", pure FORMAT_G16_B16R16_2PLANE_420_UNORM)
+                            , ("FORMAT_G16_B16_R16_3PLANE_420_UNORM", pure FORMAT_G16_B16_R16_3PLANE_420_UNORM)
+                            , ("FORMAT_B16G16R16G16_422_UNORM", pure FORMAT_B16G16R16G16_422_UNORM)
+                            , ("FORMAT_G16B16G16R16_422_UNORM", pure FORMAT_G16B16G16R16_422_UNORM)
+                            , ("FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16", pure FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16)
+                            , ("FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16", pure FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16)
+                            , ("FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16", pure FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16)
+                            , ("FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16", pure FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16)
+                            , ("FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16", pure FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16)
+                            , ("FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16", pure FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16)
+                            , ("FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16", pure FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16)
+                            , ("FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16", pure FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16)
+                            , ("FORMAT_R12X4G12X4_UNORM_2PACK16", pure FORMAT_R12X4G12X4_UNORM_2PACK16)
+                            , ("FORMAT_R12X4_UNORM_PACK16", pure FORMAT_R12X4_UNORM_PACK16)
+                            , ("FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16", pure FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16)
+                            , ("FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16", pure FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16)
+                            , ("FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16", pure FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16)
+                            , ("FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16", pure FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16)
+                            , ("FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16", pure FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16)
+                            , ("FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16", pure FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16)
+                            , ("FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16", pure FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16)
+                            , ("FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16", pure FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16)
+                            , ("FORMAT_R10X6G10X6_UNORM_2PACK16", pure FORMAT_R10X6G10X6_UNORM_2PACK16)
+                            , ("FORMAT_R10X6_UNORM_PACK16", pure FORMAT_R10X6_UNORM_PACK16)
+                            , ("FORMAT_G8_B8_R8_3PLANE_444_UNORM", pure FORMAT_G8_B8_R8_3PLANE_444_UNORM)
+                            , ("FORMAT_G8_B8R8_2PLANE_422_UNORM", pure FORMAT_G8_B8R8_2PLANE_422_UNORM)
+                            , ("FORMAT_G8_B8_R8_3PLANE_422_UNORM", pure FORMAT_G8_B8_R8_3PLANE_422_UNORM)
+                            , ("FORMAT_G8_B8R8_2PLANE_420_UNORM", pure FORMAT_G8_B8R8_2PLANE_420_UNORM)
+                            , ("FORMAT_G8_B8_R8_3PLANE_420_UNORM", pure FORMAT_G8_B8_R8_3PLANE_420_UNORM)
+                            , ("FORMAT_B8G8R8G8_422_UNORM", pure FORMAT_B8G8R8G8_422_UNORM)
+                            , ("FORMAT_G8B8G8R8_422_UNORM", pure FORMAT_G8B8G8R8_422_UNORM)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "Format")
+                       v <- step readPrec
+                       pure (Format v)))
+
diff --git a/src/Vulkan/Core10/Enums/Format.hs-boot b/src/Vulkan/Core10/Enums/Format.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/Format.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.Format  (Format) where
+
+
+
+data Format
+
diff --git a/src/Vulkan/Core10/Enums/FormatFeatureFlagBits.hs b/src/Vulkan/Core10/Enums/FormatFeatureFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/FormatFeatureFlagBits.hs
@@ -0,0 +1,460 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.FormatFeatureFlagBits  ( FormatFeatureFlagBits( FORMAT_FEATURE_SAMPLED_IMAGE_BIT
+                                                                         , FORMAT_FEATURE_STORAGE_IMAGE_BIT
+                                                                         , FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
+                                                                         , FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
+                                                                         , FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
+                                                                         , FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
+                                                                         , FORMAT_FEATURE_VERTEX_BUFFER_BIT
+                                                                         , FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+                                                                         , FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
+                                                                         , FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+                                                                         , FORMAT_FEATURE_BLIT_SRC_BIT
+                                                                         , FORMAT_FEATURE_BLIT_DST_BIT
+                                                                         , FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
+                                                                         , FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT
+                                                                         , FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
+                                                                         , FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
+                                                                         , FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT
+                                                                         , FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
+                                                                         , FORMAT_FEATURE_DISJOINT_BIT
+                                                                         , FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
+                                                                         , FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
+                                                                         , FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
+                                                                         , FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
+                                                                         , FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
+                                                                         , FORMAT_FEATURE_TRANSFER_DST_BIT
+                                                                         , FORMAT_FEATURE_TRANSFER_SRC_BIT
+                                                                         , ..
+                                                                         )
+                                                  , FormatFeatureFlags
+                                                  ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkFormatFeatureFlagBits - Bitmask specifying features supported by a
+-- buffer
+--
+-- = Description
+--
+-- The following bits /may/ be set in @linearTilingFeatures@,
+-- @optimalTilingFeatures@, and
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierTilingFeatures@,
+-- specifying that the features are supported by <VkImage.html images> or
+-- <VkImageView.html image views> or
+-- <VkSamplerYcbcrConversion.html sampler Y′CBCR conversion objects>
+-- created with the queried
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'::@format@:
+--
+-- -   'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' specifies that an image view
+--     /can/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled from>.
+--
+-- -   'FORMAT_FEATURE_STORAGE_IMAGE_BIT' specifies that an image view
+--     /can/ be used as a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage images>.
+--
+-- -   'FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' specifies that an image
+--     view /can/ be used as storage image that supports atomic operations.
+--
+-- -   'FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' specifies that an image view
+--     /can/ be used as a framebuffer color attachment and as an input
+--     attachment.
+--
+-- -   '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.
+--
+-- -   '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.
+--
+-- -   'FORMAT_FEATURE_BLIT_SRC_BIT' specifies that an image /can/ be used
+--     as @srcImage@ for the
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' command.
+--
+-- -   'FORMAT_FEATURE_BLIT_DST_BIT' specifies that an image /can/ be used
+--     as @dstImage@ for the
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' command.
+--
+-- -   'FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' specifies that if
+--     '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 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', or @mipmapMode@
+--     set to
+--     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'.
+--     If 'FORMAT_FEATURE_BLIT_SRC_BIT' is also set, an image can be used
+--     as the @srcImage@ to
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' with a @filter@
+--     of 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR'. This bit /must/ only
+--     be exposed for formats that also support the
+--     'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' or '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.
+--
+-- -   'FORMAT_FEATURE_TRANSFER_SRC_BIT' specifies that an image /can/ be
+--     used as a source image for
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>.
+--
+-- -   'FORMAT_FEATURE_TRANSFER_DST_BIT' specifies that an image /can/ be
+--     used as a destination image for
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>
+--     and
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>.
+--
+-- -   'FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' specifies
+--     'Vulkan.Core10.Handles.Image' /can/ be used as a sampled image with
+--     a min or max
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode'.
+--     This bit /must/ only be exposed for formats that also support the
+--     'FORMAT_FEATURE_SAMPLED_IMAGE_BIT'.
+--
+-- -   'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--     specifies that 'Vulkan.Core10.Handles.Image' /can/ be used with a
+--     sampler that has either of @magFilter@ or @minFilter@ set to
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', or be the
+--     source image for a blit with @filter@ set to
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'. This bit
+--     /must/ only be exposed for formats that also support the
+--     'FORMAT_FEATURE_SAMPLED_IMAGE_BIT'. If the format being queried is a
+--     depth\/stencil format, this only specifies that the depth aspect is
+--     cubic filterable.
+--
+-- -   'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT' specifies that an
+--     application /can/ define a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+--     using this format as a source, and that an image of this format
+--     /can/ be used with a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
+--     @xChromaOffset@ and\/or @yChromaOffset@ of
+--     'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'.
+--     Otherwise both @xChromaOffset@ and @yChromaOffset@ /must/ be
+--     'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'.
+--     If a format does not incorporate chroma downsampling (it is not a
+--     “422” or “420” format) but the implementation supports sampler
+--     Y′CBCR conversion for this format, the implementation /must/ set
+--     'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT'.
+--
+-- -   'FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT' specifies that an
+--     application /can/ define a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+--     using this format as a source, and that an image of this format
+--     /can/ be used with a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
+--     @xChromaOffset@ and\/or @yChromaOffset@ of
+--     'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'.
+--     Otherwise both @xChromaOffset@ and @yChromaOffset@ /must/ be
+--     'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'. If
+--     neither 'FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT' nor
+--     'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT' is set, the application
+--     /must/ not define a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+--     using this format as a source.
+--
+-- -   'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT'
+--     specifies that the format can do linear sampler filtering
+--     (min\/magFilter) whilst sampler Y′CBCR conversion is enabled.
+--
+-- -   'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT'
+--     specifies that the format can have different chroma, min, and mag
+--     filters.
+--
+-- -   'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT'
+--     specifies that reconstruction is explicit, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction>.
+--     If this bit is not present, reconstruction is implicit by default.
+--
+-- -   'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'
+--     specifies that reconstruction /can/ be forcibly made explicit by
+--     setting
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'::@forceExplicitReconstruction@
+--     to 'Vulkan.Core10.BaseType.TRUE'. If the format being queried
+--     supports
+--     'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT'
+--     it /must/ also support
+--     'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'.
+--
+-- -   'FORMAT_FEATURE_DISJOINT_BIT' specifies that a multi-planar image
+--     /can/ have the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--     set during image creation. An implementation /must/ not set
+--     'FORMAT_FEATURE_DISJOINT_BIT' for /single-plane formats/.
+--
+-- -   'FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT' specifies that an
+--     image view /can/ be used as a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>.
+--
+-- The following bits /may/ be set in @bufferFeatures@, specifying that the
+-- features are supported by <VkBuffer.html buffers> or
+-- <VkBufferView.html buffer views> created with the queried
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceProperties'::@format@:
+--
+-- -   'FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT' specifies that the format
+--     /can/ be used to create a buffer view that /can/ be bound to a
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+--     descriptor.
+--
+-- -   'FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT' specifies that the format
+--     /can/ be used to create a buffer view that /can/ be bound to a
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+--     descriptor.
+--
+-- -   'FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT' specifies that
+--     atomic operations are supported on
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+--     with this format.
+--
+-- -   'FORMAT_FEATURE_VERTEX_BUFFER_BIT' specifies that the format /can/
+--     be used as a vertex attribute format
+--     ('Vulkan.Core10.Pipeline.VertexInputAttributeDescription'::@format@).
+--
+-- = See Also
+--
+-- 'FormatFeatureFlags'
+newtype FormatFeatureFlagBits = FormatFeatureFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' specifies that an image view /can/ be
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled from>.
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_BIT = FormatFeatureFlagBits 0x00000001
+-- | 'FORMAT_FEATURE_STORAGE_IMAGE_BIT' specifies that an image view /can/ be
+-- used as a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage images>.
+pattern FORMAT_FEATURE_STORAGE_IMAGE_BIT = FormatFeatureFlagBits 0x00000002
+-- | 'FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' specifies that an image view
+-- /can/ be used as storage image that supports atomic operations.
+pattern FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = FormatFeatureFlagBits 0x00000004
+-- | 'FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT' specifies that the format
+-- /can/ be used to create a buffer view that /can/ be bound to a
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+-- descriptor.
+pattern FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = FormatFeatureFlagBits 0x00000008
+-- | 'FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT' specifies that the format
+-- /can/ be used to create a buffer view that /can/ be bound to a
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+-- descriptor.
+pattern FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = FormatFeatureFlagBits 0x00000010
+-- | 'FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT' specifies that atomic
+-- operations are supported on
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+-- with this format.
+pattern FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = FormatFeatureFlagBits 0x00000020
+-- | 'FORMAT_FEATURE_VERTEX_BUFFER_BIT' specifies that the format /can/ be
+-- used as a vertex attribute format
+-- ('Vulkan.Core10.Pipeline.VertexInputAttributeDescription'::@format@).
+pattern FORMAT_FEATURE_VERTEX_BUFFER_BIT = FormatFeatureFlagBits 0x00000040
+-- | 'FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' specifies that an image view /can/
+-- be used as a framebuffer color attachment and as an input attachment.
+pattern FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = FormatFeatureFlagBits 0x00000080
+-- | '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.
+pattern FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = FormatFeatureFlagBits 0x00000100
+-- | '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.
+pattern FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = FormatFeatureFlagBits 0x00000200
+-- | 'FORMAT_FEATURE_BLIT_SRC_BIT' specifies that an image /can/ be used as
+-- @srcImage@ for the 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
+-- command.
+pattern FORMAT_FEATURE_BLIT_SRC_BIT = FormatFeatureFlagBits 0x00000400
+-- | 'FORMAT_FEATURE_BLIT_DST_BIT' specifies that an image /can/ be used as
+-- @dstImage@ for the 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
+-- command.
+pattern FORMAT_FEATURE_BLIT_DST_BIT = FormatFeatureFlagBits 0x00000800
+-- | 'FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' specifies that if
+-- '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
+-- 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', or @mipmapMode@ set to
+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'. If
+-- 'FORMAT_FEATURE_BLIT_SRC_BIT' is also set, an image can be used as the
+-- @srcImage@ to 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' with a
+-- @filter@ of 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR'. This bit /must/
+-- only be exposed for formats that also support the
+-- 'FORMAT_FEATURE_SAMPLED_IMAGE_BIT' or '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.
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = FormatFeatureFlagBits 0x00001000
+-- | 'FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT' specifies that an image
+-- view /can/ be used as a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>.
+pattern FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = FormatFeatureFlagBits 0x01000000
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"
+pattern FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = FormatFeatureFlagBits 0x20000000
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = FormatFeatureFlagBits 0x00002000
+-- | 'FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' specifies
+-- 'Vulkan.Core10.Handles.Image' /can/ be used as a sampled image with a
+-- min or max
+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode'. This
+-- bit /must/ only be exposed for formats that also support the
+-- 'FORMAT_FEATURE_SAMPLED_IMAGE_BIT'.
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = FormatFeatureFlagBits 0x00010000
+-- | 'FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT' specifies that an
+-- application /can/ define a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+-- using this format as a source, and that an image of this format /can/ be
+-- used with a
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
+-- @xChromaOffset@ and\/or @yChromaOffset@ of
+-- 'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'.
+-- Otherwise both @xChromaOffset@ and @yChromaOffset@ /must/ be
+-- 'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'. If
+-- neither 'FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT' nor
+-- 'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT' is set, the application
+-- /must/ not define a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+-- using this format as a source.
+pattern FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = FormatFeatureFlagBits 0x00800000
+-- | 'FORMAT_FEATURE_DISJOINT_BIT' specifies that a multi-planar image /can/
+-- have the
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' set
+-- during image creation. An implementation /must/ not set
+-- 'FORMAT_FEATURE_DISJOINT_BIT' for /single-plane formats/.
+pattern FORMAT_FEATURE_DISJOINT_BIT = FormatFeatureFlagBits 0x00400000
+-- | 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'
+-- specifies that reconstruction /can/ be forcibly made explicit by setting
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'::@forceExplicitReconstruction@
+-- to 'Vulkan.Core10.BaseType.TRUE'. If the format being queried supports
+-- 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT'
+-- it /must/ also support
+-- 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'.
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = FormatFeatureFlagBits 0x00200000
+-- | 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT'
+-- specifies that reconstruction is explicit, as described in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction>.
+-- If this bit is not present, reconstruction is implicit by default.
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = FormatFeatureFlagBits 0x00100000
+-- | 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT'
+-- specifies that the format can have different chroma, min, and mag
+-- filters.
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = FormatFeatureFlagBits 0x00080000
+-- | 'FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT'
+-- specifies that the format can do linear sampler filtering
+-- (min\/magFilter) whilst sampler Y′CBCR conversion is enabled.
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = FormatFeatureFlagBits 0x00040000
+-- | 'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT' specifies that an
+-- application /can/ define a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+-- using this format as a source, and that an image of this format /can/ be
+-- used with a
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
+-- @xChromaOffset@ and\/or @yChromaOffset@ of
+-- 'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'. Otherwise
+-- both @xChromaOffset@ and @yChromaOffset@ /must/ be
+-- 'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'. If a
+-- format does not incorporate chroma downsampling (it is not a “422” or
+-- “420” format) but the implementation supports sampler Y′CBCR conversion
+-- for this format, the implementation /must/ set
+-- 'FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT'.
+pattern FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = FormatFeatureFlagBits 0x00020000
+-- | 'FORMAT_FEATURE_TRANSFER_DST_BIT' specifies that an image /can/ be used
+-- as a destination image for
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>.
+pattern FORMAT_FEATURE_TRANSFER_DST_BIT = FormatFeatureFlagBits 0x00008000
+-- | 'FORMAT_FEATURE_TRANSFER_SRC_BIT' specifies that an image /can/ be used
+-- as a source image for
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>.
+pattern FORMAT_FEATURE_TRANSFER_SRC_BIT = FormatFeatureFlagBits 0x00004000
+
+type FormatFeatureFlags = FormatFeatureFlagBits
+
+instance Show FormatFeatureFlagBits where
+  showsPrec p = \case
+    FORMAT_FEATURE_SAMPLED_IMAGE_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_BIT"
+    FORMAT_FEATURE_STORAGE_IMAGE_BIT -> showString "FORMAT_FEATURE_STORAGE_IMAGE_BIT"
+    FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT -> showString "FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"
+    FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT -> showString "FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"
+    FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT -> showString "FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"
+    FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT -> showString "FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"
+    FORMAT_FEATURE_VERTEX_BUFFER_BIT -> showString "FORMAT_FEATURE_VERTEX_BUFFER_BIT"
+    FORMAT_FEATURE_COLOR_ATTACHMENT_BIT -> showString "FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"
+    FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT -> showString "FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"
+    FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT -> showString "FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"
+    FORMAT_FEATURE_BLIT_SRC_BIT -> showString "FORMAT_FEATURE_BLIT_SRC_BIT"
+    FORMAT_FEATURE_BLIT_DST_BIT -> showString "FORMAT_FEATURE_BLIT_DST_BIT"
+    FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"
+    FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT -> showString "FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT"
+    FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR -> showString "FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"
+    FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"
+    FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT"
+    FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT -> showString "FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"
+    FORMAT_FEATURE_DISJOINT_BIT -> showString "FORMAT_FEATURE_DISJOINT_BIT"
+    FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"
+    FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"
+    FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"
+    FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT -> showString "FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"
+    FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT -> showString "FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"
+    FORMAT_FEATURE_TRANSFER_DST_BIT -> showString "FORMAT_FEATURE_TRANSFER_DST_BIT"
+    FORMAT_FEATURE_TRANSFER_SRC_BIT -> showString "FORMAT_FEATURE_TRANSFER_SRC_BIT"
+    FormatFeatureFlagBits x -> showParen (p >= 11) (showString "FormatFeatureFlagBits 0x" . showHex x)
+
+instance Read FormatFeatureFlagBits where
+  readPrec = parens (choose [("FORMAT_FEATURE_SAMPLED_IMAGE_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
+                            , ("FORMAT_FEATURE_STORAGE_IMAGE_BIT", pure FORMAT_FEATURE_STORAGE_IMAGE_BIT)
+                            , ("FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", pure FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
+                            , ("FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT", pure FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
+                            , ("FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT", pure FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
+                            , ("FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", pure FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
+                            , ("FORMAT_FEATURE_VERTEX_BUFFER_BIT", pure FORMAT_FEATURE_VERTEX_BUFFER_BIT)
+                            , ("FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", pure FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
+                            , ("FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", pure FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
+                            , ("FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", pure FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
+                            , ("FORMAT_FEATURE_BLIT_SRC_BIT", pure FORMAT_FEATURE_BLIT_SRC_BIT)
+                            , ("FORMAT_FEATURE_BLIT_DST_BIT", pure FORMAT_FEATURE_BLIT_DST_BIT)
+                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
+                            , ("FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT", pure FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT)
+                            , ("FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR", pure FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR)
+                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG", pure FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG)
+                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT)
+                            , ("FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT", pure FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT)
+                            , ("FORMAT_FEATURE_DISJOINT_BIT", pure FORMAT_FEATURE_DISJOINT_BIT)
+                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT)
+                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT)
+                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT)
+                            , ("FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT", pure FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT)
+                            , ("FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT", pure FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT)
+                            , ("FORMAT_FEATURE_TRANSFER_DST_BIT", pure FORMAT_FEATURE_TRANSFER_DST_BIT)
+                            , ("FORMAT_FEATURE_TRANSFER_SRC_BIT", pure FORMAT_FEATURE_TRANSFER_SRC_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "FormatFeatureFlagBits")
+                       v <- step readPrec
+                       pure (FormatFeatureFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/FramebufferCreateFlagBits.hs b/src/Vulkan/Core10/Enums/FramebufferCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/FramebufferCreateFlagBits.hs
@@ -0,0 +1,52 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.FramebufferCreateFlagBits  ( FramebufferCreateFlagBits( FRAMEBUFFER_CREATE_IMAGELESS_BIT
+                                                                                 , ..
+                                                                                 )
+                                                      , FramebufferCreateFlags
+                                                      ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkFramebufferCreateFlagBits - Bitmask specifying framebuffer properties
+--
+-- = See Also
+--
+-- 'FramebufferCreateFlags'
+newtype FramebufferCreateFlagBits = FramebufferCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'FRAMEBUFFER_CREATE_IMAGELESS_BIT' specifies that image views are not
+-- specified, and only attachment compatibility information will be
+-- provided via a
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentImageInfo'
+-- structure.
+pattern FRAMEBUFFER_CREATE_IMAGELESS_BIT = FramebufferCreateFlagBits 0x00000001
+
+type FramebufferCreateFlags = FramebufferCreateFlagBits
+
+instance Show FramebufferCreateFlagBits where
+  showsPrec p = \case
+    FRAMEBUFFER_CREATE_IMAGELESS_BIT -> showString "FRAMEBUFFER_CREATE_IMAGELESS_BIT"
+    FramebufferCreateFlagBits x -> showParen (p >= 11) (showString "FramebufferCreateFlagBits 0x" . showHex x)
+
+instance Read FramebufferCreateFlagBits where
+  readPrec = parens (choose [("FRAMEBUFFER_CREATE_IMAGELESS_BIT", pure FRAMEBUFFER_CREATE_IMAGELESS_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "FramebufferCreateFlagBits")
+                       v <- step readPrec
+                       pure (FramebufferCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/FrontFace.hs b/src/Vulkan/Core10/Enums/FrontFace.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/FrontFace.hs
@@ -0,0 +1,57 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.FrontFace  (FrontFace( FRONT_FACE_COUNTER_CLOCKWISE
+                                                , FRONT_FACE_CLOCKWISE
+                                                , ..
+                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkFrontFace - Interpret polygon front-facing orientation
+--
+-- = Description
+--
+-- Any triangle which is not front-facing is back-facing, including
+-- zero-area triangles.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
+newtype FrontFace = FrontFace Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'FRONT_FACE_COUNTER_CLOCKWISE' specifies that a triangle with positive
+-- area is considered front-facing.
+pattern FRONT_FACE_COUNTER_CLOCKWISE = FrontFace 0
+-- | 'FRONT_FACE_CLOCKWISE' specifies that a triangle with negative area is
+-- considered front-facing.
+pattern FRONT_FACE_CLOCKWISE = FrontFace 1
+{-# complete FRONT_FACE_COUNTER_CLOCKWISE,
+             FRONT_FACE_CLOCKWISE :: FrontFace #-}
+
+instance Show FrontFace where
+  showsPrec p = \case
+    FRONT_FACE_COUNTER_CLOCKWISE -> showString "FRONT_FACE_COUNTER_CLOCKWISE"
+    FRONT_FACE_CLOCKWISE -> showString "FRONT_FACE_CLOCKWISE"
+    FrontFace x -> showParen (p >= 11) (showString "FrontFace " . showsPrec 11 x)
+
+instance Read FrontFace where
+  readPrec = parens (choose [("FRONT_FACE_COUNTER_CLOCKWISE", pure FRONT_FACE_COUNTER_CLOCKWISE)
+                            , ("FRONT_FACE_CLOCKWISE", pure FRONT_FACE_CLOCKWISE)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "FrontFace")
+                       v <- step readPrec
+                       pure (FrontFace v)))
+
diff --git a/src/Vulkan/Core10/Enums/ImageAspectFlagBits.hs b/src/Vulkan/Core10/Enums/ImageAspectFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageAspectFlagBits.hs
@@ -0,0 +1,107 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageAspectFlagBits  ( ImageAspectFlagBits( IMAGE_ASPECT_COLOR_BIT
+                                                                     , IMAGE_ASPECT_DEPTH_BIT
+                                                                     , IMAGE_ASPECT_STENCIL_BIT
+                                                                     , IMAGE_ASPECT_METADATA_BIT
+                                                                     , IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT
+                                                                     , IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT
+                                                                     , IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT
+                                                                     , IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT
+                                                                     , IMAGE_ASPECT_PLANE_2_BIT
+                                                                     , IMAGE_ASPECT_PLANE_1_BIT
+                                                                     , IMAGE_ASPECT_PLANE_0_BIT
+                                                                     , ..
+                                                                     )
+                                                , ImageAspectFlags
+                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkImageAspectFlagBits - Bitmask specifying which aspects of an image are
+-- included in a view
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo',
+-- 'ImageAspectFlags',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
+newtype ImageAspectFlagBits = ImageAspectFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'IMAGE_ASPECT_COLOR_BIT' specifies the color aspect.
+pattern IMAGE_ASPECT_COLOR_BIT = ImageAspectFlagBits 0x00000001
+-- | 'IMAGE_ASPECT_DEPTH_BIT' specifies the depth aspect.
+pattern IMAGE_ASPECT_DEPTH_BIT = ImageAspectFlagBits 0x00000002
+-- | 'IMAGE_ASPECT_STENCIL_BIT' specifies the stencil aspect.
+pattern IMAGE_ASPECT_STENCIL_BIT = ImageAspectFlagBits 0x00000004
+-- | 'IMAGE_ASPECT_METADATA_BIT' specifies the metadata aspect, used for
+-- sparse
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory sparse resource>
+-- operations.
+pattern IMAGE_ASPECT_METADATA_BIT = ImageAspectFlagBits 0x00000008
+-- | 'IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT' specifies /memory plane/ 3.
+pattern IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT = ImageAspectFlagBits 0x00000400
+-- | 'IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT' specifies /memory plane/ 2.
+pattern IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = ImageAspectFlagBits 0x00000200
+-- | 'IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT' specifies /memory plane/ 1.
+pattern IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = ImageAspectFlagBits 0x00000100
+-- | 'IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT' specifies /memory plane/ 0.
+pattern IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = ImageAspectFlagBits 0x00000080
+-- | 'IMAGE_ASPECT_PLANE_2_BIT' specifies plane 2 of a /multi-planar/ image
+-- format.
+pattern IMAGE_ASPECT_PLANE_2_BIT = ImageAspectFlagBits 0x00000040
+-- | 'IMAGE_ASPECT_PLANE_1_BIT' specifies plane 1 of a /multi-planar/ image
+-- format.
+pattern IMAGE_ASPECT_PLANE_1_BIT = ImageAspectFlagBits 0x00000020
+-- | 'IMAGE_ASPECT_PLANE_0_BIT' specifies plane 0 of a /multi-planar/ image
+-- format.
+pattern IMAGE_ASPECT_PLANE_0_BIT = ImageAspectFlagBits 0x00000010
+
+type ImageAspectFlags = ImageAspectFlagBits
+
+instance Show ImageAspectFlagBits where
+  showsPrec p = \case
+    IMAGE_ASPECT_COLOR_BIT -> showString "IMAGE_ASPECT_COLOR_BIT"
+    IMAGE_ASPECT_DEPTH_BIT -> showString "IMAGE_ASPECT_DEPTH_BIT"
+    IMAGE_ASPECT_STENCIL_BIT -> showString "IMAGE_ASPECT_STENCIL_BIT"
+    IMAGE_ASPECT_METADATA_BIT -> showString "IMAGE_ASPECT_METADATA_BIT"
+    IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT -> showString "IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT"
+    IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT -> showString "IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT"
+    IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT -> showString "IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT"
+    IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT -> showString "IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT"
+    IMAGE_ASPECT_PLANE_2_BIT -> showString "IMAGE_ASPECT_PLANE_2_BIT"
+    IMAGE_ASPECT_PLANE_1_BIT -> showString "IMAGE_ASPECT_PLANE_1_BIT"
+    IMAGE_ASPECT_PLANE_0_BIT -> showString "IMAGE_ASPECT_PLANE_0_BIT"
+    ImageAspectFlagBits x -> showParen (p >= 11) (showString "ImageAspectFlagBits 0x" . showHex x)
+
+instance Read ImageAspectFlagBits where
+  readPrec = parens (choose [("IMAGE_ASPECT_COLOR_BIT", pure IMAGE_ASPECT_COLOR_BIT)
+                            , ("IMAGE_ASPECT_DEPTH_BIT", pure IMAGE_ASPECT_DEPTH_BIT)
+                            , ("IMAGE_ASPECT_STENCIL_BIT", pure IMAGE_ASPECT_STENCIL_BIT)
+                            , ("IMAGE_ASPECT_METADATA_BIT", pure IMAGE_ASPECT_METADATA_BIT)
+                            , ("IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT", pure IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT)
+                            , ("IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT", pure IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT)
+                            , ("IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT", pure IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT)
+                            , ("IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT", pure IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT)
+                            , ("IMAGE_ASPECT_PLANE_2_BIT", pure IMAGE_ASPECT_PLANE_2_BIT)
+                            , ("IMAGE_ASPECT_PLANE_1_BIT", pure IMAGE_ASPECT_PLANE_1_BIT)
+                            , ("IMAGE_ASPECT_PLANE_0_BIT", pure IMAGE_ASPECT_PLANE_0_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ImageAspectFlagBits")
+                       v <- step readPrec
+                       pure (ImageAspectFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/ImageCreateFlagBits.hs b/src/Vulkan/Core10/Enums/ImageCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageCreateFlagBits.hs
@@ -0,0 +1,205 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageCreateFlagBits  ( ImageCreateFlagBits( IMAGE_CREATE_SPARSE_BINDING_BIT
+                                                                     , IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+                                                                     , IMAGE_CREATE_SPARSE_ALIASED_BIT
+                                                                     , IMAGE_CREATE_MUTABLE_FORMAT_BIT
+                                                                     , IMAGE_CREATE_CUBE_COMPATIBLE_BIT
+                                                                     , IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+                                                                     , IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
+                                                                     , IMAGE_CREATE_CORNER_SAMPLED_BIT_NV
+                                                                     , IMAGE_CREATE_DISJOINT_BIT
+                                                                     , IMAGE_CREATE_PROTECTED_BIT
+                                                                     , IMAGE_CREATE_EXTENDED_USAGE_BIT
+                                                                     , IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT
+                                                                     , IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT
+                                                                     , IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT
+                                                                     , IMAGE_CREATE_ALIAS_BIT
+                                                                     , ..
+                                                                     )
+                                                , ImageCreateFlags
+                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkImageCreateFlagBits - Bitmask specifying additional parameters of an
+-- image
+--
+-- = Description
+--
+-- See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures Sparse Resource Features>
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-physicalfeatures Sparse Physical Device Features>
+-- for more details.
+--
+-- = See Also
+--
+-- 'ImageCreateFlags'
+newtype ImageCreateFlagBits = ImageCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'IMAGE_CREATE_SPARSE_BINDING_BIT' specifies that the image will be
+-- backed using sparse memory binding.
+pattern IMAGE_CREATE_SPARSE_BINDING_BIT = ImageCreateFlagBits 0x00000001
+-- | '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 'IMAGE_CREATE_SPARSE_BINDING_BIT'
+-- flag.
+pattern IMAGE_CREATE_SPARSE_RESIDENCY_BIT = ImageCreateFlagBits 0x00000002
+-- | '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
+-- 'IMAGE_CREATE_SPARSE_BINDING_BIT' flag
+pattern IMAGE_CREATE_SPARSE_ALIASED_BIT = ImageCreateFlagBits 0x00000004
+-- | 'IMAGE_CREATE_MUTABLE_FORMAT_BIT' specifies that the image /can/ be used
+-- to create a 'Vulkan.Core10.Handles.ImageView' with a different format
+-- from the image. For
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
+-- formats, 'IMAGE_CREATE_MUTABLE_FORMAT_BIT' specifies that a
+-- 'Vulkan.Core10.Handles.ImageView' can be created of a /plane/ of the
+-- image.
+pattern IMAGE_CREATE_MUTABLE_FORMAT_BIT = ImageCreateFlagBits 0x00000008
+-- | 'IMAGE_CREATE_CUBE_COMPATIBLE_BIT' specifies that the image /can/ be
+-- used to create a 'Vulkan.Core10.Handles.ImageView' of type
+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE' or
+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'.
+pattern IMAGE_CREATE_CUBE_COMPATIBLE_BIT = ImageCreateFlagBits 0x00000010
+-- | 'IMAGE_CREATE_SUBSAMPLED_BIT_EXT' specifies that an image /can/ be in a
+-- subsampled format which /may/ be more optimal when written as an
+-- attachment by a render pass that has a fragment density map attachment.
+-- Accessing a subsampled image has additional considerations:
+--
+-- -   Image data read as an image sampler is undefined if the sampler was
+--     not created with @flags@ containing
+--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT'
+--     or was not sampled through the use of a combined image sampler with
+--     an immutable sampler in
+--     'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding'.
+--
+-- -   Image data read with an input attachment is undefined if the
+--     contents were not written as an attachment in an earlier subpass of
+--     the same render pass.
+--
+-- -   Image data read with load operations /may/ be resampled to the
+--     fragment density of the render pass.
+--
+-- -   Image contents outside of the render area become undefined if the
+--     image is stored as a render pass attachment.
+pattern IMAGE_CREATE_SUBSAMPLED_BIT_EXT = ImageCreateFlagBits 0x00004000
+-- | 'IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT' specifies that
+-- an image with a depth or depth\/stencil format /can/ be used with custom
+-- sample locations when used as a depth\/stencil attachment.
+pattern IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = ImageCreateFlagBits 0x00001000
+-- | 'IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' specifies that the image is a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-images-corner-sampled corner-sampled image>.
+pattern IMAGE_CREATE_CORNER_SAMPLED_BIT_NV = ImageCreateFlagBits 0x00002000
+-- | 'IMAGE_CREATE_DISJOINT_BIT' specifies that an image with a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
+-- /must/ have each plane separately bound to memory, rather than having a
+-- single memory binding for the whole image; the presence of this bit
+-- distinguishes a /disjoint image/ from an image without this bit set.
+pattern IMAGE_CREATE_DISJOINT_BIT = ImageCreateFlagBits 0x00000200
+-- | 'IMAGE_CREATE_PROTECTED_BIT' specifies that the image is a protected
+-- image.
+pattern IMAGE_CREATE_PROTECTED_BIT = ImageCreateFlagBits 0x00000800
+-- | 'IMAGE_CREATE_EXTENDED_USAGE_BIT' specifies that the image /can/ be
+-- created with usage flags that are not supported for the format the image
+-- is created with but are supported for at least one format a
+-- 'Vulkan.Core10.Handles.ImageView' created from the image /can/ have.
+pattern IMAGE_CREATE_EXTENDED_USAGE_BIT = ImageCreateFlagBits 0x00000100
+-- | 'IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT' specifies that the image
+-- having a compressed format /can/ be used to create a
+-- 'Vulkan.Core10.Handles.ImageView' with an uncompressed format where each
+-- texel in the image view corresponds to a compressed texel block of the
+-- image.
+pattern IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = ImageCreateFlagBits 0x00000080
+-- | 'IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' specifies that the image /can/ be
+-- used to create a 'Vulkan.Core10.Handles.ImageView' of type
+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'.
+pattern IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = ImageCreateFlagBits 0x00000020
+-- | 'IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT' specifies that the image
+-- /can/ be used with a non-zero value of the
+-- @splitInstanceBindRegionCount@ member of a
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'
+-- structure passed into
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.bindImageMemory2'. This
+-- flag also has the effect of making the image use the standard sparse
+-- image block dimensions.
+pattern IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = ImageCreateFlagBits 0x00000040
+-- | 'IMAGE_CREATE_ALIAS_BIT' specifies that two images created with the same
+-- creation parameters and aliased to the same memory /can/ interpret the
+-- contents of the memory consistently with each other, subject to the
+-- rules described in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing Memory Aliasing>
+-- section. This flag further specifies that each plane of a /disjoint/
+-- image /can/ share an in-memory non-linear representation with
+-- single-plane images, and that a single-plane image /can/ share an
+-- in-memory non-linear representation with a plane of a multi-planar
+-- disjoint image, according to the rules in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>.
+-- If the @pNext@ chain includes a
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
+-- or
+-- 'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'
+-- structure whose @handleTypes@ member is not @0@, it is as if
+-- 'IMAGE_CREATE_ALIAS_BIT' is set.
+pattern IMAGE_CREATE_ALIAS_BIT = ImageCreateFlagBits 0x00000400
+
+type ImageCreateFlags = ImageCreateFlagBits
+
+instance Show ImageCreateFlagBits where
+  showsPrec p = \case
+    IMAGE_CREATE_SPARSE_BINDING_BIT -> showString "IMAGE_CREATE_SPARSE_BINDING_BIT"
+    IMAGE_CREATE_SPARSE_RESIDENCY_BIT -> showString "IMAGE_CREATE_SPARSE_RESIDENCY_BIT"
+    IMAGE_CREATE_SPARSE_ALIASED_BIT -> showString "IMAGE_CREATE_SPARSE_ALIASED_BIT"
+    IMAGE_CREATE_MUTABLE_FORMAT_BIT -> showString "IMAGE_CREATE_MUTABLE_FORMAT_BIT"
+    IMAGE_CREATE_CUBE_COMPATIBLE_BIT -> showString "IMAGE_CREATE_CUBE_COMPATIBLE_BIT"
+    IMAGE_CREATE_SUBSAMPLED_BIT_EXT -> showString "IMAGE_CREATE_SUBSAMPLED_BIT_EXT"
+    IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT -> showString "IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"
+    IMAGE_CREATE_CORNER_SAMPLED_BIT_NV -> showString "IMAGE_CREATE_CORNER_SAMPLED_BIT_NV"
+    IMAGE_CREATE_DISJOINT_BIT -> showString "IMAGE_CREATE_DISJOINT_BIT"
+    IMAGE_CREATE_PROTECTED_BIT -> showString "IMAGE_CREATE_PROTECTED_BIT"
+    IMAGE_CREATE_EXTENDED_USAGE_BIT -> showString "IMAGE_CREATE_EXTENDED_USAGE_BIT"
+    IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT -> showString "IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"
+    IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT -> showString "IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT"
+    IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT -> showString "IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"
+    IMAGE_CREATE_ALIAS_BIT -> showString "IMAGE_CREATE_ALIAS_BIT"
+    ImageCreateFlagBits x -> showParen (p >= 11) (showString "ImageCreateFlagBits 0x" . showHex x)
+
+instance Read ImageCreateFlagBits where
+  readPrec = parens (choose [("IMAGE_CREATE_SPARSE_BINDING_BIT", pure IMAGE_CREATE_SPARSE_BINDING_BIT)
+                            , ("IMAGE_CREATE_SPARSE_RESIDENCY_BIT", pure IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
+                            , ("IMAGE_CREATE_SPARSE_ALIASED_BIT", pure IMAGE_CREATE_SPARSE_ALIASED_BIT)
+                            , ("IMAGE_CREATE_MUTABLE_FORMAT_BIT", pure IMAGE_CREATE_MUTABLE_FORMAT_BIT)
+                            , ("IMAGE_CREATE_CUBE_COMPATIBLE_BIT", pure IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
+                            , ("IMAGE_CREATE_SUBSAMPLED_BIT_EXT", pure IMAGE_CREATE_SUBSAMPLED_BIT_EXT)
+                            , ("IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT", pure IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT)
+                            , ("IMAGE_CREATE_CORNER_SAMPLED_BIT_NV", pure IMAGE_CREATE_CORNER_SAMPLED_BIT_NV)
+                            , ("IMAGE_CREATE_DISJOINT_BIT", pure IMAGE_CREATE_DISJOINT_BIT)
+                            , ("IMAGE_CREATE_PROTECTED_BIT", pure IMAGE_CREATE_PROTECTED_BIT)
+                            , ("IMAGE_CREATE_EXTENDED_USAGE_BIT", pure IMAGE_CREATE_EXTENDED_USAGE_BIT)
+                            , ("IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT", pure IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT)
+                            , ("IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT", pure IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT)
+                            , ("IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT", pure IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT)
+                            , ("IMAGE_CREATE_ALIAS_BIT", pure IMAGE_CREATE_ALIAS_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ImageCreateFlagBits")
+                       v <- step readPrec
+                       pure (ImageCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/ImageCreateFlagBits.hs-boot b/src/Vulkan/Core10/Enums/ImageCreateFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageCreateFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageCreateFlagBits  ( ImageCreateFlagBits
+                                                , ImageCreateFlags
+                                                ) where
+
+
+
+data ImageCreateFlagBits
+
+type ImageCreateFlags = ImageCreateFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/ImageLayout.hs b/src/Vulkan/Core10/Enums/ImageLayout.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageLayout.hs
@@ -0,0 +1,269 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageLayout  (ImageLayout( IMAGE_LAYOUT_UNDEFINED
+                                                    , IMAGE_LAYOUT_GENERAL
+                                                    , IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+                                                    , IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
+                                                    , IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+                                                    , IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+                                                    , IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
+                                                    , IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
+                                                    , IMAGE_LAYOUT_PREINITIALIZED
+                                                    , IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
+                                                    , IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV
+                                                    , IMAGE_LAYOUT_SHARED_PRESENT_KHR
+                                                    , IMAGE_LAYOUT_PRESENT_SRC_KHR
+                                                    , IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+                                                    , IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
+                                                    , IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+                                                    , IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL
+                                                    , IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+                                                    , IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+                                                    , ..
+                                                    )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkImageLayout - Layout of image and image subresources
+--
+-- = Description
+--
+-- The type(s) of device access supported by each layout are:
+--
+-- 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears>
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies>).
+-- For use as a framebuffer attachment, this is a member in the
+-- substructures of the 'Vulkan.Core10.Pass.RenderPassCreateInfo' (see
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass Render Pass>).
+-- For use in a descriptor set, this is a member in the
+-- 'Vulkan.Core10.DescriptorSet.DescriptorImageInfo' structure (see
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates>).
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pass.AttachmentDescription',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout',
+-- 'Vulkan.Core10.Pass.AttachmentReference',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout',
+-- 'Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
+-- 'Vulkan.Core10.Image.ImageCreateInfo',
+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearDepthStencilImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage'
+newtype ImageLayout = ImageLayout Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'IMAGE_LAYOUT_UNDEFINED' does not support device access. This layout
+-- /must/ only be used as the @initialLayout@ member of
+-- 'Vulkan.Core10.Image.ImageCreateInfo' or
+-- 'Vulkan.Core10.Pass.AttachmentDescription', 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.
+pattern IMAGE_LAYOUT_UNDEFINED = ImageLayout 0
+-- | 'IMAGE_LAYOUT_GENERAL' supports all types of device access.
+pattern IMAGE_LAYOUT_GENERAL = ImageLayout 1
+-- | 'IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL' /must/ only be used as a color
+-- or resolve attachment in a 'Vulkan.Core10.Handles.Framebuffer'. This
+-- layout is valid only for image subresources of images created with the
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
+-- usage bit enabled.
+pattern IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = ImageLayout 2
+-- | 'IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL' specifies a layout for
+-- both the depth and stencil aspects of a depth\/stencil format image
+-- allowing read and write access as a depth\/stencil attachment. It is
+-- equivalent to 'IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' and
+-- 'IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'.
+pattern IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = ImageLayout 3
+-- | 'IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL' specifies a layout for
+-- both the depth and stencil aspects of a depth\/stencil format image
+-- allowing read only access as a depth\/stencil attachment or in shaders.
+-- It is equivalent to 'IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL' and
+-- 'IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'.
+pattern IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = ImageLayout 4
+-- | '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
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' or
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
+-- usage bit enabled.
+pattern IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = ImageLayout 5
+-- | 'IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL' /must/ only be used as a source
+-- image of a transfer command (see the definition of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-transfer >).
+-- This layout is valid only for image subresources of images created with
+-- the
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+-- usage bit enabled.
+pattern IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = ImageLayout 6
+-- | '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
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+-- usage bit enabled.
+pattern IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = ImageLayout 7
+-- | 'IMAGE_LAYOUT_PREINITIALIZED' does not support device access. This
+-- layout /must/ only be used as the @initialLayout@ member of
+-- 'Vulkan.Core10.Image.ImageCreateInfo' or
+-- 'Vulkan.Core10.Pass.AttachmentDescription', 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, 'IMAGE_LAYOUT_PREINITIALIZED'
+-- is only useful with
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource linear>
+-- images because there is not a standard layout defined for
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL' images.
+pattern IMAGE_LAYOUT_PREINITIALIZED = ImageLayout 8
+-- | 'IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT' /must/ only be used as a
+-- fragment density map attachment in a 'Vulkan.Core10.Handles.RenderPass'.
+-- This layout is valid only for image subresources of images created with
+-- the
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT'
+-- usage bit enabled.
+pattern IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = ImageLayout 1000218000
+-- | 'IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV' /must/ only be used as a
+-- read-only
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image shading-rate-image>.
+-- This layout is valid only for image subresources of images created with
+-- the
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV'
+-- usage bit enabled.
+pattern IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = ImageLayout 1000164003
+-- | 'IMAGE_LAYOUT_SHARED_PRESENT_KHR' is valid only for shared presentable
+-- images, and /must/ be used for any usage the image supports.
+pattern IMAGE_LAYOUT_SHARED_PRESENT_KHR = ImageLayout 1000111000
+-- | 'IMAGE_LAYOUT_PRESENT_SRC_KHR' /must/ only be used for presenting a
+-- presentable image for display. A swapchain’s image /must/ be
+-- transitioned to this layout before calling
+-- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR', and /must/ be
+-- transitioned away from this layout after calling
+-- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR'.
+pattern IMAGE_LAYOUT_PRESENT_SRC_KHR = ImageLayout 1000001002
+-- | 'IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' specifies a layout for the
+-- stencil aspect of a depth\/stencil format image allowing read-only
+-- access as a stencil attachment or in shaders.
+pattern IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = ImageLayout 1000241003
+-- | 'IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL' specifies a layout for the
+-- stencil aspect of a depth\/stencil format image allowing read and write
+-- access as a stencil attachment.
+pattern IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = ImageLayout 1000241002
+-- | 'IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL' specifies a layout for the depth
+-- aspect of a depth\/stencil format image allowing read-only access as a
+-- depth attachment or in shaders.
+pattern IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL = ImageLayout 1000241001
+-- | 'IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' specifies a layout for the depth
+-- aspect of a depth\/stencil format image allowing read and write access
+-- as a depth attachment.
+pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL = ImageLayout 1000241000
+-- | 'IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL' specifies a
+-- layout for depth\/stencil format images allowing read and write access
+-- to the depth aspect as a depth attachment, and read only access to the
+-- stencil aspect as a stencil attachment or in shaders. It is equivalent
+-- to 'IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' and
+-- 'IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'.
+pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = ImageLayout 1000117001
+-- | 'IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL' specifies a
+-- layout for depth\/stencil format images allowing read and write access
+-- to the stencil aspect as a stencil attachment, and read only access to
+-- the depth aspect as a depth attachment or in shaders. It is equivalent
+-- to 'IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL' and
+-- 'IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'.
+pattern IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = ImageLayout 1000117000
+{-# complete IMAGE_LAYOUT_UNDEFINED,
+             IMAGE_LAYOUT_GENERAL,
+             IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+             IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+             IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
+             IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
+             IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+             IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+             IMAGE_LAYOUT_PREINITIALIZED,
+             IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT,
+             IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV,
+             IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+             IMAGE_LAYOUT_PRESENT_SRC_KHR,
+             IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
+             IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL,
+             IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+             IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+             IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
+             IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL :: ImageLayout #-}
+
+instance Show ImageLayout where
+  showsPrec p = \case
+    IMAGE_LAYOUT_UNDEFINED -> showString "IMAGE_LAYOUT_UNDEFINED"
+    IMAGE_LAYOUT_GENERAL -> showString "IMAGE_LAYOUT_GENERAL"
+    IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL -> showString "IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL"
+    IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL"
+    IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL"
+    IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL -> showString "IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL"
+    IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL -> showString "IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL"
+    IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL -> showString "IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL"
+    IMAGE_LAYOUT_PREINITIALIZED -> showString "IMAGE_LAYOUT_PREINITIALIZED"
+    IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT -> showString "IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT"
+    IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV -> showString "IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV"
+    IMAGE_LAYOUT_SHARED_PRESENT_KHR -> showString "IMAGE_LAYOUT_SHARED_PRESENT_KHR"
+    IMAGE_LAYOUT_PRESENT_SRC_KHR -> showString "IMAGE_LAYOUT_PRESENT_SRC_KHR"
+    IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL -> showString "IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL"
+    IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL -> showString "IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL"
+    IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL"
+    IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL"
+    IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL"
+    IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL -> showString "IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL"
+    ImageLayout x -> showParen (p >= 11) (showString "ImageLayout " . showsPrec 11 x)
+
+instance Read ImageLayout where
+  readPrec = parens (choose [("IMAGE_LAYOUT_UNDEFINED", pure IMAGE_LAYOUT_UNDEFINED)
+                            , ("IMAGE_LAYOUT_GENERAL", pure IMAGE_LAYOUT_GENERAL)
+                            , ("IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", pure IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)
+                            , ("IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL)
+                            , ("IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL)
+                            , ("IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL", pure IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
+                            , ("IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL", pure IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL)
+                            , ("IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL", pure IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
+                            , ("IMAGE_LAYOUT_PREINITIALIZED", pure IMAGE_LAYOUT_PREINITIALIZED)
+                            , ("IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT", pure IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT)
+                            , ("IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV", pure IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV)
+                            , ("IMAGE_LAYOUT_SHARED_PRESENT_KHR", pure IMAGE_LAYOUT_SHARED_PRESENT_KHR)
+                            , ("IMAGE_LAYOUT_PRESENT_SRC_KHR", pure IMAGE_LAYOUT_PRESENT_SRC_KHR)
+                            , ("IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", pure IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL)
+                            , ("IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL", pure IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL)
+                            , ("IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL)
+                            , ("IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL)
+                            , ("IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL)
+                            , ("IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", pure IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ImageLayout")
+                       v <- step readPrec
+                       pure (ImageLayout v)))
+
diff --git a/src/Vulkan/Core10/Enums/ImageLayout.hs-boot b/src/Vulkan/Core10/Enums/ImageLayout.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageLayout.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageLayout  (ImageLayout) where
+
+
+
+data ImageLayout
+
diff --git a/src/Vulkan/Core10/Enums/ImageTiling.hs b/src/Vulkan/Core10/Enums/ImageTiling.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageTiling.hs
@@ -0,0 +1,72 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageTiling  (ImageTiling( IMAGE_TILING_OPTIMAL
+                                                    , IMAGE_TILING_LINEAR
+                                                    , IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
+                                                    , ..
+                                                    )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkImageTiling - Specifies the tiling arrangement of data in an image
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Image.ImageCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',
+-- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV',
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties'
+newtype ImageTiling = ImageTiling Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'IMAGE_TILING_OPTIMAL' specifies optimal tiling (texels are laid out in
+-- an implementation-dependent arrangement, for more optimal memory
+-- access).
+pattern IMAGE_TILING_OPTIMAL = ImageTiling 0
+-- | 'IMAGE_TILING_LINEAR' specifies linear tiling (texels are laid out in
+-- memory in row-major order, possibly with some padding on each row).
+pattern IMAGE_TILING_LINEAR = ImageTiling 1
+-- | 'IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT' indicates that the image’s tiling
+-- is defined by a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-drm-format-modifier Linux DRM format modifier>.
+-- The modifier is specified at image creation with
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT'
+-- or
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
+-- and /can/ be queried with
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.getImageDrmFormatModifierPropertiesEXT'.
+pattern IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = ImageTiling 1000158000
+{-# complete IMAGE_TILING_OPTIMAL,
+             IMAGE_TILING_LINEAR,
+             IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT :: ImageTiling #-}
+
+instance Show ImageTiling where
+  showsPrec p = \case
+    IMAGE_TILING_OPTIMAL -> showString "IMAGE_TILING_OPTIMAL"
+    IMAGE_TILING_LINEAR -> showString "IMAGE_TILING_LINEAR"
+    IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT -> showString "IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT"
+    ImageTiling x -> showParen (p >= 11) (showString "ImageTiling " . showsPrec 11 x)
+
+instance Read ImageTiling where
+  readPrec = parens (choose [("IMAGE_TILING_OPTIMAL", pure IMAGE_TILING_OPTIMAL)
+                            , ("IMAGE_TILING_LINEAR", pure IMAGE_TILING_LINEAR)
+                            , ("IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT", pure IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ImageTiling")
+                       v <- step readPrec
+                       pure (ImageTiling v)))
+
diff --git a/src/Vulkan/Core10/Enums/ImageTiling.hs-boot b/src/Vulkan/Core10/Enums/ImageTiling.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageTiling.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageTiling  (ImageTiling) where
+
+
+
+data ImageTiling
+
diff --git a/src/Vulkan/Core10/Enums/ImageType.hs b/src/Vulkan/Core10/Enums/ImageType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageType.hs
@@ -0,0 +1,61 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageType  (ImageType( IMAGE_TYPE_1D
+                                                , IMAGE_TYPE_2D
+                                                , IMAGE_TYPE_3D
+                                                , ..
+                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkImageType - Specifies the type of an image object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Image.ImageCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',
+-- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV',
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties'
+newtype ImageType = ImageType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'IMAGE_TYPE_1D' specifies a one-dimensional image.
+pattern IMAGE_TYPE_1D = ImageType 0
+-- | 'IMAGE_TYPE_2D' specifies a two-dimensional image.
+pattern IMAGE_TYPE_2D = ImageType 1
+-- | 'IMAGE_TYPE_3D' specifies a three-dimensional image.
+pattern IMAGE_TYPE_3D = ImageType 2
+{-# complete IMAGE_TYPE_1D,
+             IMAGE_TYPE_2D,
+             IMAGE_TYPE_3D :: ImageType #-}
+
+instance Show ImageType where
+  showsPrec p = \case
+    IMAGE_TYPE_1D -> showString "IMAGE_TYPE_1D"
+    IMAGE_TYPE_2D -> showString "IMAGE_TYPE_2D"
+    IMAGE_TYPE_3D -> showString "IMAGE_TYPE_3D"
+    ImageType x -> showParen (p >= 11) (showString "ImageType " . showsPrec 11 x)
+
+instance Read ImageType where
+  readPrec = parens (choose [("IMAGE_TYPE_1D", pure IMAGE_TYPE_1D)
+                            , ("IMAGE_TYPE_2D", pure IMAGE_TYPE_2D)
+                            , ("IMAGE_TYPE_3D", pure IMAGE_TYPE_3D)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ImageType")
+                       v <- step readPrec
+                       pure (ImageType v)))
+
diff --git a/src/Vulkan/Core10/Enums/ImageType.hs-boot b/src/Vulkan/Core10/Enums/ImageType.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageType.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageType  (ImageType) where
+
+
+
+data ImageType
+
diff --git a/src/Vulkan/Core10/Enums/ImageUsageFlagBits.hs b/src/Vulkan/Core10/Enums/ImageUsageFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageUsageFlagBits.hs
@@ -0,0 +1,126 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageUsageFlagBits  ( ImageUsageFlagBits( IMAGE_USAGE_TRANSFER_SRC_BIT
+                                                                   , IMAGE_USAGE_TRANSFER_DST_BIT
+                                                                   , IMAGE_USAGE_SAMPLED_BIT
+                                                                   , IMAGE_USAGE_STORAGE_BIT
+                                                                   , IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+                                                                   , IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+                                                                   , IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
+                                                                   , IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+                                                                   , IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
+                                                                   , IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV
+                                                                   , ..
+                                                                   )
+                                               , ImageUsageFlags
+                                               ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkImageUsageFlagBits - Bitmask specifying intended usage of an image
+--
+-- = See Also
+--
+-- 'ImageUsageFlags'
+newtype ImageUsageFlagBits = ImageUsageFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'IMAGE_USAGE_TRANSFER_SRC_BIT' specifies that the image /can/ be used as
+-- the source of a transfer command.
+pattern IMAGE_USAGE_TRANSFER_SRC_BIT = ImageUsageFlagBits 0x00000001
+-- | 'IMAGE_USAGE_TRANSFER_DST_BIT' specifies that the image /can/ be used as
+-- the destination of a transfer command.
+pattern IMAGE_USAGE_TRANSFER_DST_BIT = ImageUsageFlagBits 0x00000002
+-- | 'IMAGE_USAGE_SAMPLED_BIT' specifies that the image /can/ be used to
+-- create a 'Vulkan.Core10.Handles.ImageView' suitable for occupying a
+-- 'Vulkan.Core10.Handles.DescriptorSet' slot either of type
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE' or
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+-- and be sampled by a shader.
+pattern IMAGE_USAGE_SAMPLED_BIT = ImageUsageFlagBits 0x00000004
+-- | 'IMAGE_USAGE_STORAGE_BIT' specifies that the image /can/ be used to
+-- create a 'Vulkan.Core10.Handles.ImageView' suitable for occupying a
+-- 'Vulkan.Core10.Handles.DescriptorSet' slot of type
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'.
+pattern IMAGE_USAGE_STORAGE_BIT = ImageUsageFlagBits 0x00000008
+-- | 'IMAGE_USAGE_COLOR_ATTACHMENT_BIT' specifies that the image /can/ be
+-- used to create a 'Vulkan.Core10.Handles.ImageView' suitable for use as a
+-- color or resolve attachment in a 'Vulkan.Core10.Handles.Framebuffer'.
+pattern IMAGE_USAGE_COLOR_ATTACHMENT_BIT = ImageUsageFlagBits 0x00000010
+-- | 'IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' specifies that the image
+-- /can/ be used to create a 'Vulkan.Core10.Handles.ImageView' suitable for
+-- use as a depth\/stencil or depth\/stencil resolve attachment in a
+-- 'Vulkan.Core10.Handles.Framebuffer'.
+pattern IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = ImageUsageFlagBits 0x00000020
+-- | 'IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT' specifies that the memory bound
+-- to this image will have been allocated with the
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT'
+-- (see
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory>
+-- for more detail). This bit /can/ be set for any image that /can/ be used
+-- to create a 'Vulkan.Core10.Handles.ImageView' suitable for use as a
+-- color, resolve, depth\/stencil, or input attachment.
+pattern IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = ImageUsageFlagBits 0x00000040
+-- | 'IMAGE_USAGE_INPUT_ATTACHMENT_BIT' specifies that the image /can/ be
+-- used to create a 'Vulkan.Core10.Handles.ImageView' suitable for
+-- occupying 'Vulkan.Core10.Handles.DescriptorSet' slot of type
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT';
+-- be read from a shader as an input attachment; and be used as an input
+-- attachment in a framebuffer.
+pattern IMAGE_USAGE_INPUT_ATTACHMENT_BIT = ImageUsageFlagBits 0x00000080
+-- | 'IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT' specifies that the image
+-- /can/ be used to create a 'Vulkan.Core10.Handles.ImageView' suitable for
+-- use as a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops fragment density map image>.
+pattern IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = ImageUsageFlagBits 0x00000200
+-- | 'IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV' specifies that the image /can/
+-- be used to create a 'Vulkan.Core10.Handles.ImageView' suitable for use
+-- as a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image shading rate image>.
+pattern IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = ImageUsageFlagBits 0x00000100
+
+type ImageUsageFlags = ImageUsageFlagBits
+
+instance Show ImageUsageFlagBits where
+  showsPrec p = \case
+    IMAGE_USAGE_TRANSFER_SRC_BIT -> showString "IMAGE_USAGE_TRANSFER_SRC_BIT"
+    IMAGE_USAGE_TRANSFER_DST_BIT -> showString "IMAGE_USAGE_TRANSFER_DST_BIT"
+    IMAGE_USAGE_SAMPLED_BIT -> showString "IMAGE_USAGE_SAMPLED_BIT"
+    IMAGE_USAGE_STORAGE_BIT -> showString "IMAGE_USAGE_STORAGE_BIT"
+    IMAGE_USAGE_COLOR_ATTACHMENT_BIT -> showString "IMAGE_USAGE_COLOR_ATTACHMENT_BIT"
+    IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT -> showString "IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"
+    IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT -> showString "IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"
+    IMAGE_USAGE_INPUT_ATTACHMENT_BIT -> showString "IMAGE_USAGE_INPUT_ATTACHMENT_BIT"
+    IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT -> showString "IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT"
+    IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV -> showString "IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV"
+    ImageUsageFlagBits x -> showParen (p >= 11) (showString "ImageUsageFlagBits 0x" . showHex x)
+
+instance Read ImageUsageFlagBits where
+  readPrec = parens (choose [("IMAGE_USAGE_TRANSFER_SRC_BIT", pure IMAGE_USAGE_TRANSFER_SRC_BIT)
+                            , ("IMAGE_USAGE_TRANSFER_DST_BIT", pure IMAGE_USAGE_TRANSFER_DST_BIT)
+                            , ("IMAGE_USAGE_SAMPLED_BIT", pure IMAGE_USAGE_SAMPLED_BIT)
+                            , ("IMAGE_USAGE_STORAGE_BIT", pure IMAGE_USAGE_STORAGE_BIT)
+                            , ("IMAGE_USAGE_COLOR_ATTACHMENT_BIT", pure IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
+                            , ("IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", pure IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
+                            , ("IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT", pure IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
+                            , ("IMAGE_USAGE_INPUT_ATTACHMENT_BIT", pure IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
+                            , ("IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT", pure IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT)
+                            , ("IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV", pure IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ImageUsageFlagBits")
+                       v <- step readPrec
+                       pure (ImageUsageFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/ImageUsageFlagBits.hs-boot b/src/Vulkan/Core10/Enums/ImageUsageFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageUsageFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageUsageFlagBits  ( ImageUsageFlagBits
+                                               , ImageUsageFlags
+                                               ) where
+
+
+
+data ImageUsageFlagBits
+
+type ImageUsageFlags = ImageUsageFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/ImageViewCreateFlagBits.hs b/src/Vulkan/Core10/Enums/ImageViewCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageViewCreateFlagBits.hs
@@ -0,0 +1,52 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageViewCreateFlagBits  ( ImageViewCreateFlagBits( IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT
+                                                                             , ..
+                                                                             )
+                                                    , ImageViewCreateFlags
+                                                    ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkImageViewCreateFlagBits - Bitmask specifying additional parameters of
+-- an image view
+--
+-- = See Also
+--
+-- 'ImageViewCreateFlags'
+newtype ImageViewCreateFlagBits = ImageViewCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT' prohibits the
+-- implementation from accessing the fragment density map by the host
+-- during 'Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass' as the
+-- contents are expected to change after recording
+pattern IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT = ImageViewCreateFlagBits 0x00000001
+
+type ImageViewCreateFlags = ImageViewCreateFlagBits
+
+instance Show ImageViewCreateFlagBits where
+  showsPrec p = \case
+    IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT -> showString "IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT"
+    ImageViewCreateFlagBits x -> showParen (p >= 11) (showString "ImageViewCreateFlagBits 0x" . showHex x)
+
+instance Read ImageViewCreateFlagBits where
+  readPrec = parens (choose [("IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT", pure IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ImageViewCreateFlagBits")
+                       v <- step readPrec
+                       pure (ImageViewCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/ImageViewType.hs b/src/Vulkan/Core10/Enums/ImageViewType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ImageViewType.hs
@@ -0,0 +1,91 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ImageViewType  (ImageViewType( IMAGE_VIEW_TYPE_1D
+                                                        , IMAGE_VIEW_TYPE_2D
+                                                        , IMAGE_VIEW_TYPE_3D
+                                                        , IMAGE_VIEW_TYPE_CUBE
+                                                        , IMAGE_VIEW_TYPE_1D_ARRAY
+                                                        , IMAGE_VIEW_TYPE_2D_ARRAY
+                                                        , IMAGE_VIEW_TYPE_CUBE_ARRAY
+                                                        , ..
+                                                        )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkImageViewType - Image view types
+--
+-- = 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-compatibility image view compatibility table>
+-- for 'Vulkan.Core10.ImageView.createImageView'. This table also shows
+-- which SPIR-V @OpTypeImage@ @Dim@ and @Arrayed@ parameters correspond to
+-- each image view type.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.ImageView.ImageViewCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.PhysicalDeviceImageViewImageFormatInfoEXT'
+newtype ImageViewType = ImageViewType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_1D"
+pattern IMAGE_VIEW_TYPE_1D = ImageViewType 0
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_2D"
+pattern IMAGE_VIEW_TYPE_2D = ImageViewType 1
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_3D"
+pattern IMAGE_VIEW_TYPE_3D = ImageViewType 2
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_CUBE"
+pattern IMAGE_VIEW_TYPE_CUBE = ImageViewType 3
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_1D_ARRAY"
+pattern IMAGE_VIEW_TYPE_1D_ARRAY = ImageViewType 4
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_2D_ARRAY"
+pattern IMAGE_VIEW_TYPE_2D_ARRAY = ImageViewType 5
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY"
+pattern IMAGE_VIEW_TYPE_CUBE_ARRAY = ImageViewType 6
+{-# complete IMAGE_VIEW_TYPE_1D,
+             IMAGE_VIEW_TYPE_2D,
+             IMAGE_VIEW_TYPE_3D,
+             IMAGE_VIEW_TYPE_CUBE,
+             IMAGE_VIEW_TYPE_1D_ARRAY,
+             IMAGE_VIEW_TYPE_2D_ARRAY,
+             IMAGE_VIEW_TYPE_CUBE_ARRAY :: ImageViewType #-}
+
+instance Show ImageViewType where
+  showsPrec p = \case
+    IMAGE_VIEW_TYPE_1D -> showString "IMAGE_VIEW_TYPE_1D"
+    IMAGE_VIEW_TYPE_2D -> showString "IMAGE_VIEW_TYPE_2D"
+    IMAGE_VIEW_TYPE_3D -> showString "IMAGE_VIEW_TYPE_3D"
+    IMAGE_VIEW_TYPE_CUBE -> showString "IMAGE_VIEW_TYPE_CUBE"
+    IMAGE_VIEW_TYPE_1D_ARRAY -> showString "IMAGE_VIEW_TYPE_1D_ARRAY"
+    IMAGE_VIEW_TYPE_2D_ARRAY -> showString "IMAGE_VIEW_TYPE_2D_ARRAY"
+    IMAGE_VIEW_TYPE_CUBE_ARRAY -> showString "IMAGE_VIEW_TYPE_CUBE_ARRAY"
+    ImageViewType x -> showParen (p >= 11) (showString "ImageViewType " . showsPrec 11 x)
+
+instance Read ImageViewType where
+  readPrec = parens (choose [("IMAGE_VIEW_TYPE_1D", pure IMAGE_VIEW_TYPE_1D)
+                            , ("IMAGE_VIEW_TYPE_2D", pure IMAGE_VIEW_TYPE_2D)
+                            , ("IMAGE_VIEW_TYPE_3D", pure IMAGE_VIEW_TYPE_3D)
+                            , ("IMAGE_VIEW_TYPE_CUBE", pure IMAGE_VIEW_TYPE_CUBE)
+                            , ("IMAGE_VIEW_TYPE_1D_ARRAY", pure IMAGE_VIEW_TYPE_1D_ARRAY)
+                            , ("IMAGE_VIEW_TYPE_2D_ARRAY", pure IMAGE_VIEW_TYPE_2D_ARRAY)
+                            , ("IMAGE_VIEW_TYPE_CUBE_ARRAY", pure IMAGE_VIEW_TYPE_CUBE_ARRAY)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ImageViewType")
+                       v <- step readPrec
+                       pure (ImageViewType v)))
+
diff --git a/src/Vulkan/Core10/Enums/IndexType.hs b/src/Vulkan/Core10/Enums/IndexType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/IndexType.hs
@@ -0,0 +1,70 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.IndexType  (IndexType( INDEX_TYPE_UINT16
+                                                , INDEX_TYPE_UINT32
+                                                , INDEX_TYPE_UINT8_EXT
+                                                , INDEX_TYPE_NONE_KHR
+                                                , ..
+                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkIndexType - Type of index buffer indices
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateGeometryTypeInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryTrianglesDataKHR',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.BindIndexBufferIndirectCommandNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'
+newtype IndexType = IndexType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'INDEX_TYPE_UINT16' specifies that indices are 16-bit unsigned integer
+-- values.
+pattern INDEX_TYPE_UINT16 = IndexType 0
+-- | 'INDEX_TYPE_UINT32' specifies that indices are 32-bit unsigned integer
+-- values.
+pattern INDEX_TYPE_UINT32 = IndexType 1
+-- | 'INDEX_TYPE_UINT8_EXT' specifies that indices are 8-bit unsigned integer
+-- values.
+pattern INDEX_TYPE_UINT8_EXT = IndexType 1000265000
+-- | 'INDEX_TYPE_NONE_KHR' specifies that no indices are provided.
+pattern INDEX_TYPE_NONE_KHR = IndexType 1000165000
+{-# complete INDEX_TYPE_UINT16,
+             INDEX_TYPE_UINT32,
+             INDEX_TYPE_UINT8_EXT,
+             INDEX_TYPE_NONE_KHR :: IndexType #-}
+
+instance Show IndexType where
+  showsPrec p = \case
+    INDEX_TYPE_UINT16 -> showString "INDEX_TYPE_UINT16"
+    INDEX_TYPE_UINT32 -> showString "INDEX_TYPE_UINT32"
+    INDEX_TYPE_UINT8_EXT -> showString "INDEX_TYPE_UINT8_EXT"
+    INDEX_TYPE_NONE_KHR -> showString "INDEX_TYPE_NONE_KHR"
+    IndexType x -> showParen (p >= 11) (showString "IndexType " . showsPrec 11 x)
+
+instance Read IndexType where
+  readPrec = parens (choose [("INDEX_TYPE_UINT16", pure INDEX_TYPE_UINT16)
+                            , ("INDEX_TYPE_UINT32", pure INDEX_TYPE_UINT32)
+                            , ("INDEX_TYPE_UINT8_EXT", pure INDEX_TYPE_UINT8_EXT)
+                            , ("INDEX_TYPE_NONE_KHR", pure INDEX_TYPE_NONE_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "IndexType")
+                       v <- step readPrec
+                       pure (IndexType v)))
+
diff --git a/src/Vulkan/Core10/Enums/IndexType.hs-boot b/src/Vulkan/Core10/Enums/IndexType.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/IndexType.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.IndexType  (IndexType) where
+
+
+
+data IndexType
+
diff --git a/src/Vulkan/Core10/Enums/InstanceCreateFlags.hs b/src/Vulkan/Core10/Enums/InstanceCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/InstanceCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.InstanceCreateFlags  (InstanceCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkInstanceCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'InstanceCreateFlags' is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo'
+newtype InstanceCreateFlags = InstanceCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show InstanceCreateFlags where
+  showsPrec p = \case
+    InstanceCreateFlags x -> showParen (p >= 11) (showString "InstanceCreateFlags 0x" . showHex x)
+
+instance Read InstanceCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "InstanceCreateFlags")
+                       v <- step readPrec
+                       pure (InstanceCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/InternalAllocationType.hs b/src/Vulkan/Core10/Enums/InternalAllocationType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/InternalAllocationType.hs
@@ -0,0 +1,46 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.InternalAllocationType  (InternalAllocationType( INTERNAL_ALLOCATION_TYPE_EXECUTABLE
+                                                                          , ..
+                                                                          )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkInternalAllocationType - Allocation type
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.FuncPointers.PFN_vkInternalAllocationNotification',
+-- 'Vulkan.Core10.FuncPointers.PFN_vkInternalFreeNotification'
+newtype InternalAllocationType = InternalAllocationType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'INTERNAL_ALLOCATION_TYPE_EXECUTABLE' specifies that the allocation is
+-- intended for execution by the host.
+pattern INTERNAL_ALLOCATION_TYPE_EXECUTABLE = InternalAllocationType 0
+{-# complete INTERNAL_ALLOCATION_TYPE_EXECUTABLE :: InternalAllocationType #-}
+
+instance Show InternalAllocationType where
+  showsPrec p = \case
+    INTERNAL_ALLOCATION_TYPE_EXECUTABLE -> showString "INTERNAL_ALLOCATION_TYPE_EXECUTABLE"
+    InternalAllocationType x -> showParen (p >= 11) (showString "InternalAllocationType " . showsPrec 11 x)
+
+instance Read InternalAllocationType where
+  readPrec = parens (choose [("INTERNAL_ALLOCATION_TYPE_EXECUTABLE", pure INTERNAL_ALLOCATION_TYPE_EXECUTABLE)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "InternalAllocationType")
+                       v <- step readPrec
+                       pure (InternalAllocationType v)))
+
diff --git a/src/Vulkan/Core10/Enums/LogicOp.hs b/src/Vulkan/Core10/Enums/LogicOp.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/LogicOp.hs
@@ -0,0 +1,195 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.LogicOp  (LogicOp( LOGIC_OP_CLEAR
+                                            , LOGIC_OP_AND
+                                            , LOGIC_OP_AND_REVERSE
+                                            , LOGIC_OP_COPY
+                                            , LOGIC_OP_AND_INVERTED
+                                            , LOGIC_OP_NO_OP
+                                            , LOGIC_OP_XOR
+                                            , LOGIC_OP_OR
+                                            , LOGIC_OP_NOR
+                                            , LOGIC_OP_EQUIVALENT
+                                            , LOGIC_OP_INVERT
+                                            , LOGIC_OP_OR_REVERSE
+                                            , LOGIC_OP_COPY_INVERTED
+                                            , LOGIC_OP_OR_INVERTED
+                                            , LOGIC_OP_NAND
+                                            , LOGIC_OP_SET
+                                            , ..
+                                            )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkLogicOp - Framebuffer logical operations
+--
+-- = Description
+--
+-- The logical operations supported by Vulkan are summarized in the
+-- following table in which
+--
+-- -   ¬ is bitwise invert,
+--
+-- -   ∧ is bitwise and,
+--
+-- -   ∨ is bitwise or,
+--
+-- -   ⊕ is bitwise exclusive or,
+--
+-- -   s is the fragment’s Rs0, Gs0, Bs0 or As0 component value for the
+--     fragment output corresponding to the color attachment being updated,
+--     and
+--
+-- -   d is the color attachment’s R, G, B or A component value:
+--
+-- +-----------------------------------+-----------------------------------+
+-- | Mode                              | Operation                         |
+-- +===================================+===================================+
+-- | 'LOGIC_OP_CLEAR'                  | 0                                 |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_AND'                    | s ∧ d                             |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_AND_REVERSE'            | s ∧ ¬ d                           |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_COPY'                   | s                                 |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_AND_INVERTED'           | ¬ s ∧ d                           |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_NO_OP'                  | d                                 |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_XOR'                    | s ⊕ d                             |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_OR'                     | s ∨ d                             |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_NOR'                    | ¬ (s ∨ d)                         |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_EQUIVALENT'             | ¬ (s ⊕ d)                         |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_INVERT'                 | ¬ d                               |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_OR_REVERSE'             | s ∨ ¬ d                           |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_COPY_INVERTED'          | ¬ s                               |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_OR_INVERTED'            | ¬ s ∨ d                           |
+-- +-----------------------------------+-----------------------------------+
+-- | 'LOGIC_OP_NAND'                   | ¬ (s ∧ d)                         |
+-- +-----------------------------------+-----------------------------------+
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendoperations Blend Operations>.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'
+newtype LogicOp = LogicOp Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_CLEAR"
+pattern LOGIC_OP_CLEAR = LogicOp 0
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND"
+pattern LOGIC_OP_AND = LogicOp 1
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND_REVERSE"
+pattern LOGIC_OP_AND_REVERSE = LogicOp 2
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_COPY"
+pattern LOGIC_OP_COPY = LogicOp 3
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND_INVERTED"
+pattern LOGIC_OP_AND_INVERTED = LogicOp 4
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NO_OP"
+pattern LOGIC_OP_NO_OP = LogicOp 5
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_XOR"
+pattern LOGIC_OP_XOR = LogicOp 6
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR"
+pattern LOGIC_OP_OR = LogicOp 7
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NOR"
+pattern LOGIC_OP_NOR = LogicOp 8
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_EQUIVALENT"
+pattern LOGIC_OP_EQUIVALENT = LogicOp 9
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_INVERT"
+pattern LOGIC_OP_INVERT = LogicOp 10
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR_REVERSE"
+pattern LOGIC_OP_OR_REVERSE = LogicOp 11
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_COPY_INVERTED"
+pattern LOGIC_OP_COPY_INVERTED = LogicOp 12
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR_INVERTED"
+pattern LOGIC_OP_OR_INVERTED = LogicOp 13
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NAND"
+pattern LOGIC_OP_NAND = LogicOp 14
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_SET"
+pattern LOGIC_OP_SET = LogicOp 15
+{-# complete LOGIC_OP_CLEAR,
+             LOGIC_OP_AND,
+             LOGIC_OP_AND_REVERSE,
+             LOGIC_OP_COPY,
+             LOGIC_OP_AND_INVERTED,
+             LOGIC_OP_NO_OP,
+             LOGIC_OP_XOR,
+             LOGIC_OP_OR,
+             LOGIC_OP_NOR,
+             LOGIC_OP_EQUIVALENT,
+             LOGIC_OP_INVERT,
+             LOGIC_OP_OR_REVERSE,
+             LOGIC_OP_COPY_INVERTED,
+             LOGIC_OP_OR_INVERTED,
+             LOGIC_OP_NAND,
+             LOGIC_OP_SET :: LogicOp #-}
+
+instance Show LogicOp where
+  showsPrec p = \case
+    LOGIC_OP_CLEAR -> showString "LOGIC_OP_CLEAR"
+    LOGIC_OP_AND -> showString "LOGIC_OP_AND"
+    LOGIC_OP_AND_REVERSE -> showString "LOGIC_OP_AND_REVERSE"
+    LOGIC_OP_COPY -> showString "LOGIC_OP_COPY"
+    LOGIC_OP_AND_INVERTED -> showString "LOGIC_OP_AND_INVERTED"
+    LOGIC_OP_NO_OP -> showString "LOGIC_OP_NO_OP"
+    LOGIC_OP_XOR -> showString "LOGIC_OP_XOR"
+    LOGIC_OP_OR -> showString "LOGIC_OP_OR"
+    LOGIC_OP_NOR -> showString "LOGIC_OP_NOR"
+    LOGIC_OP_EQUIVALENT -> showString "LOGIC_OP_EQUIVALENT"
+    LOGIC_OP_INVERT -> showString "LOGIC_OP_INVERT"
+    LOGIC_OP_OR_REVERSE -> showString "LOGIC_OP_OR_REVERSE"
+    LOGIC_OP_COPY_INVERTED -> showString "LOGIC_OP_COPY_INVERTED"
+    LOGIC_OP_OR_INVERTED -> showString "LOGIC_OP_OR_INVERTED"
+    LOGIC_OP_NAND -> showString "LOGIC_OP_NAND"
+    LOGIC_OP_SET -> showString "LOGIC_OP_SET"
+    LogicOp x -> showParen (p >= 11) (showString "LogicOp " . showsPrec 11 x)
+
+instance Read LogicOp where
+  readPrec = parens (choose [("LOGIC_OP_CLEAR", pure LOGIC_OP_CLEAR)
+                            , ("LOGIC_OP_AND", pure LOGIC_OP_AND)
+                            , ("LOGIC_OP_AND_REVERSE", pure LOGIC_OP_AND_REVERSE)
+                            , ("LOGIC_OP_COPY", pure LOGIC_OP_COPY)
+                            , ("LOGIC_OP_AND_INVERTED", pure LOGIC_OP_AND_INVERTED)
+                            , ("LOGIC_OP_NO_OP", pure LOGIC_OP_NO_OP)
+                            , ("LOGIC_OP_XOR", pure LOGIC_OP_XOR)
+                            , ("LOGIC_OP_OR", pure LOGIC_OP_OR)
+                            , ("LOGIC_OP_NOR", pure LOGIC_OP_NOR)
+                            , ("LOGIC_OP_EQUIVALENT", pure LOGIC_OP_EQUIVALENT)
+                            , ("LOGIC_OP_INVERT", pure LOGIC_OP_INVERT)
+                            , ("LOGIC_OP_OR_REVERSE", pure LOGIC_OP_OR_REVERSE)
+                            , ("LOGIC_OP_COPY_INVERTED", pure LOGIC_OP_COPY_INVERTED)
+                            , ("LOGIC_OP_OR_INVERTED", pure LOGIC_OP_OR_INVERTED)
+                            , ("LOGIC_OP_NAND", pure LOGIC_OP_NAND)
+                            , ("LOGIC_OP_SET", pure LOGIC_OP_SET)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "LogicOp")
+                       v <- step readPrec
+                       pure (LogicOp v)))
+
diff --git a/src/Vulkan/Core10/Enums/MemoryHeapFlagBits.hs b/src/Vulkan/Core10/Enums/MemoryHeapFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/MemoryHeapFlagBits.hs
@@ -0,0 +1,60 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.MemoryHeapFlagBits  ( MemoryHeapFlagBits( MEMORY_HEAP_DEVICE_LOCAL_BIT
+                                                                   , MEMORY_HEAP_MULTI_INSTANCE_BIT
+                                                                   , ..
+                                                                   )
+                                               , MemoryHeapFlags
+                                               ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkMemoryHeapFlagBits - Bitmask specifying attribute flags for a heap
+--
+-- = See Also
+--
+-- 'MemoryHeapFlags'
+newtype MemoryHeapFlagBits = MemoryHeapFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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 MEMORY_HEAP_DEVICE_LOCAL_BIT = MemoryHeapFlagBits 0x00000001
+-- | 'MEMORY_HEAP_MULTI_INSTANCE_BIT' specifies that in a logical device
+-- representing more than one physical device, there is a per-physical
+-- device instance of the heap memory. By default, an allocation from such
+-- a heap will be replicated to each physical device’s instance of the
+-- heap.
+pattern MEMORY_HEAP_MULTI_INSTANCE_BIT = MemoryHeapFlagBits 0x00000002
+
+type MemoryHeapFlags = MemoryHeapFlagBits
+
+instance Show MemoryHeapFlagBits where
+  showsPrec p = \case
+    MEMORY_HEAP_DEVICE_LOCAL_BIT -> showString "MEMORY_HEAP_DEVICE_LOCAL_BIT"
+    MEMORY_HEAP_MULTI_INSTANCE_BIT -> showString "MEMORY_HEAP_MULTI_INSTANCE_BIT"
+    MemoryHeapFlagBits x -> showParen (p >= 11) (showString "MemoryHeapFlagBits 0x" . showHex x)
+
+instance Read MemoryHeapFlagBits where
+  readPrec = parens (choose [("MEMORY_HEAP_DEVICE_LOCAL_BIT", pure MEMORY_HEAP_DEVICE_LOCAL_BIT)
+                            , ("MEMORY_HEAP_MULTI_INSTANCE_BIT", pure MEMORY_HEAP_MULTI_INSTANCE_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "MemoryHeapFlagBits")
+                       v <- step readPrec
+                       pure (MemoryHeapFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/MemoryMapFlags.hs b/src/Vulkan/Core10/Enums/MemoryMapFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/MemoryMapFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.MemoryMapFlags  (MemoryMapFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkMemoryMapFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'MemoryMapFlags' is a bitmask type for setting a mask, but is currently
+-- reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Memory.mapMemory'
+newtype MemoryMapFlags = MemoryMapFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show MemoryMapFlags where
+  showsPrec p = \case
+    MemoryMapFlags x -> showParen (p >= 11) (showString "MemoryMapFlags 0x" . showHex x)
+
+instance Read MemoryMapFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "MemoryMapFlags")
+                       v <- step readPrec
+                       pure (MemoryMapFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/MemoryMapFlags.hs-boot b/src/Vulkan/Core10/Enums/MemoryMapFlags.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/MemoryMapFlags.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.MemoryMapFlags  (MemoryMapFlags) where
+
+
+
+data MemoryMapFlags
+
diff --git a/src/Vulkan/Core10/Enums/MemoryPropertyFlagBits.hs b/src/Vulkan/Core10/Enums/MemoryPropertyFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/MemoryPropertyFlagBits.hs
@@ -0,0 +1,135 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.MemoryPropertyFlagBits  ( MemoryPropertyFlagBits( MEMORY_PROPERTY_DEVICE_LOCAL_BIT
+                                                                           , MEMORY_PROPERTY_HOST_VISIBLE_BIT
+                                                                           , MEMORY_PROPERTY_HOST_COHERENT_BIT
+                                                                           , MEMORY_PROPERTY_HOST_CACHED_BIT
+                                                                           , MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
+                                                                           , MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
+                                                                           , MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
+                                                                           , MEMORY_PROPERTY_PROTECTED_BIT
+                                                                           , ..
+                                                                           )
+                                                   , MemoryPropertyFlags
+                                                   ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkMemoryPropertyFlagBits - Bitmask specifying properties for a memory
+-- type
+--
+-- = Description
+--
+-- For any memory allocated with both the
+-- 'MEMORY_PROPERTY_HOST_COHERENT_BIT' and the
+-- 'MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD', host or device accesses also
+-- perform automatic memory domain transfer operations, such that writes
+-- are always automatically available and visible to both host and device
+-- memory domains.
+--
+-- Note
+--
+-- Device coherence is a useful property for certain debugging use cases
+-- (e.g. crash analysis, where performing separate coherence actions could
+-- mean values are not reported correctly). However, device coherent
+-- accesses may be slower than equivalent accesses without device
+-- coherence, particularly if they are also device uncached. For device
+-- uncached memory in particular, repeated accesses to the same or
+-- neighbouring memory locations over a short time period (e.g. within a
+-- frame) may be slower than it would be for the equivalent cached memory
+-- type. As such, it is generally inadvisable to use device coherent or
+-- device uncached memory except when really needed.
+--
+-- = See Also
+--
+-- 'MemoryPropertyFlags'
+newtype MemoryPropertyFlagBits = MemoryPropertyFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_DEVICE_LOCAL_BIT'
+-- set.
+pattern MEMORY_PROPERTY_DEVICE_LOCAL_BIT = MemoryPropertyFlagBits 0x00000001
+-- | 'MEMORY_PROPERTY_HOST_VISIBLE_BIT' bit specifies that memory allocated
+-- with this type /can/ be mapped for host access using
+-- 'Vulkan.Core10.Memory.mapMemory'.
+pattern MEMORY_PROPERTY_HOST_VISIBLE_BIT = MemoryPropertyFlagBits 0x00000002
+-- | 'MEMORY_PROPERTY_HOST_COHERENT_BIT' bit specifies that the host cache
+-- management commands 'Vulkan.Core10.Memory.flushMappedMemoryRanges' and
+-- 'Vulkan.Core10.Memory.invalidateMappedMemoryRanges' are not needed to
+-- flush host writes to the device or make device writes visible to the
+-- host, respectively.
+pattern MEMORY_PROPERTY_HOST_COHERENT_BIT = MemoryPropertyFlagBits 0x00000004
+-- | '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 MEMORY_PROPERTY_HOST_CACHED_BIT = MemoryPropertyFlagBits 0x00000008
+-- | 'MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT' bit specifies that the memory
+-- type only allows device access to the memory. Memory types /must/ not
+-- have both 'MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT' and
+-- 'MEMORY_PROPERTY_HOST_VISIBLE_BIT' set. Additionally, the object’s
+-- backing memory /may/ be provided by the implementation lazily as
+-- specified in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-lazy_allocation Lazily Allocated Memory>.
+pattern MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = MemoryPropertyFlagBits 0x00000010
+-- | 'MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD' bit specifies that memory
+-- allocated with this type is not cached on the device. Uncached device
+-- memory is always device coherent.
+pattern MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD = MemoryPropertyFlagBits 0x00000080
+-- | 'MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD' bit specifies that device
+-- accesses to allocations of this memory type are automatically made
+-- available and visible.
+pattern MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD = MemoryPropertyFlagBits 0x00000040
+-- | 'MEMORY_PROPERTY_PROTECTED_BIT' bit specifies that the memory type only
+-- allows device access to the memory, and allows protected queue
+-- operations to access the memory. Memory types /must/ not have
+-- 'MEMORY_PROPERTY_PROTECTED_BIT' set and any of
+-- 'MEMORY_PROPERTY_HOST_VISIBLE_BIT' set, or
+-- 'MEMORY_PROPERTY_HOST_COHERENT_BIT' set, or
+-- 'MEMORY_PROPERTY_HOST_CACHED_BIT' set.
+pattern MEMORY_PROPERTY_PROTECTED_BIT = MemoryPropertyFlagBits 0x00000020
+
+type MemoryPropertyFlags = MemoryPropertyFlagBits
+
+instance Show MemoryPropertyFlagBits where
+  showsPrec p = \case
+    MEMORY_PROPERTY_DEVICE_LOCAL_BIT -> showString "MEMORY_PROPERTY_DEVICE_LOCAL_BIT"
+    MEMORY_PROPERTY_HOST_VISIBLE_BIT -> showString "MEMORY_PROPERTY_HOST_VISIBLE_BIT"
+    MEMORY_PROPERTY_HOST_COHERENT_BIT -> showString "MEMORY_PROPERTY_HOST_COHERENT_BIT"
+    MEMORY_PROPERTY_HOST_CACHED_BIT -> showString "MEMORY_PROPERTY_HOST_CACHED_BIT"
+    MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT -> showString "MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"
+    MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD -> showString "MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD"
+    MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD -> showString "MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD"
+    MEMORY_PROPERTY_PROTECTED_BIT -> showString "MEMORY_PROPERTY_PROTECTED_BIT"
+    MemoryPropertyFlagBits x -> showParen (p >= 11) (showString "MemoryPropertyFlagBits 0x" . showHex x)
+
+instance Read MemoryPropertyFlagBits where
+  readPrec = parens (choose [("MEMORY_PROPERTY_DEVICE_LOCAL_BIT", pure MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
+                            , ("MEMORY_PROPERTY_HOST_VISIBLE_BIT", pure MEMORY_PROPERTY_HOST_VISIBLE_BIT)
+                            , ("MEMORY_PROPERTY_HOST_COHERENT_BIT", pure MEMORY_PROPERTY_HOST_COHERENT_BIT)
+                            , ("MEMORY_PROPERTY_HOST_CACHED_BIT", pure MEMORY_PROPERTY_HOST_CACHED_BIT)
+                            , ("MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT", pure MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
+                            , ("MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD", pure MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD)
+                            , ("MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD", pure MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD)
+                            , ("MEMORY_PROPERTY_PROTECTED_BIT", pure MEMORY_PROPERTY_PROTECTED_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "MemoryPropertyFlagBits")
+                       v <- step readPrec
+                       pure (MemoryPropertyFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/ObjectType.hs b/src/Vulkan/Core10/Enums/ObjectType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ObjectType.hs
@@ -0,0 +1,367 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ObjectType  (ObjectType( OBJECT_TYPE_UNKNOWN
+                                                  , OBJECT_TYPE_INSTANCE
+                                                  , OBJECT_TYPE_PHYSICAL_DEVICE
+                                                  , OBJECT_TYPE_DEVICE
+                                                  , OBJECT_TYPE_QUEUE
+                                                  , OBJECT_TYPE_SEMAPHORE
+                                                  , OBJECT_TYPE_COMMAND_BUFFER
+                                                  , OBJECT_TYPE_FENCE
+                                                  , OBJECT_TYPE_DEVICE_MEMORY
+                                                  , OBJECT_TYPE_BUFFER
+                                                  , OBJECT_TYPE_IMAGE
+                                                  , OBJECT_TYPE_EVENT
+                                                  , OBJECT_TYPE_QUERY_POOL
+                                                  , OBJECT_TYPE_BUFFER_VIEW
+                                                  , OBJECT_TYPE_IMAGE_VIEW
+                                                  , OBJECT_TYPE_SHADER_MODULE
+                                                  , OBJECT_TYPE_PIPELINE_CACHE
+                                                  , OBJECT_TYPE_PIPELINE_LAYOUT
+                                                  , OBJECT_TYPE_RENDER_PASS
+                                                  , OBJECT_TYPE_PIPELINE
+                                                  , OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT
+                                                  , OBJECT_TYPE_SAMPLER
+                                                  , OBJECT_TYPE_DESCRIPTOR_POOL
+                                                  , OBJECT_TYPE_DESCRIPTOR_SET
+                                                  , OBJECT_TYPE_FRAMEBUFFER
+                                                  , OBJECT_TYPE_COMMAND_POOL
+                                                  , OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT
+                                                  , OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV
+                                                  , OBJECT_TYPE_DEFERRED_OPERATION_KHR
+                                                  , OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL
+                                                  , OBJECT_TYPE_VALIDATION_CACHE_EXT
+                                                  , OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR
+                                                  , OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT
+                                                  , OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT
+                                                  , OBJECT_TYPE_DISPLAY_MODE_KHR
+                                                  , OBJECT_TYPE_DISPLAY_KHR
+                                                  , OBJECT_TYPE_SWAPCHAIN_KHR
+                                                  , OBJECT_TYPE_SURFACE_KHR
+                                                  , OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE
+                                                  , OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION
+                                                  , ..
+                                                  )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkObjectType - Specify an enumeration to track object handle types
+--
+-- = Description
+--
+-- \'
+--
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'ObjectType'                                  | Vulkan Handle Type                                        |
+-- +===============================================+===========================================================+
+-- | 'OBJECT_TYPE_UNKNOWN'                         | Unknown\/Undefined Handle                                 |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_INSTANCE'                        | 'Vulkan.Core10.Handles.Instance'                          |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_PHYSICAL_DEVICE'                 | 'Vulkan.Core10.Handles.PhysicalDevice'                    |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_DEVICE'                          | 'Vulkan.Core10.Handles.Device'                            |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_QUEUE'                           | 'Vulkan.Core10.Handles.Queue'                             |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_SEMAPHORE'                       | 'Vulkan.Core10.Handles.Semaphore'                         |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_COMMAND_BUFFER'                  | 'Vulkan.Core10.Handles.CommandBuffer'                     |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_FENCE'                           | 'Vulkan.Core10.Handles.Fence'                             |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_DEVICE_MEMORY'                   | 'Vulkan.Core10.Handles.DeviceMemory'                      |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_BUFFER'                          | 'Vulkan.Core10.Handles.Buffer'                            |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_IMAGE'                           | 'Vulkan.Core10.Handles.Image'                             |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_EVENT'                           | 'Vulkan.Core10.Handles.Event'                             |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_QUERY_POOL'                      | 'Vulkan.Core10.Handles.QueryPool'                         |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_BUFFER_VIEW'                     | 'Vulkan.Core10.Handles.BufferView'                        |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_IMAGE_VIEW'                      | 'Vulkan.Core10.Handles.ImageView'                         |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_SHADER_MODULE'                   | 'Vulkan.Core10.Handles.ShaderModule'                      |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_PIPELINE_CACHE'                  | 'Vulkan.Core10.Handles.PipelineCache'                     |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_PIPELINE_LAYOUT'                 | 'Vulkan.Core10.Handles.PipelineLayout'                    |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_RENDER_PASS'                     | 'Vulkan.Core10.Handles.RenderPass'                        |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_PIPELINE'                        | 'Vulkan.Core10.Handles.Pipeline'                          |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT'           | 'Vulkan.Core10.Handles.DescriptorSetLayout'               |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_SAMPLER'                         | 'Vulkan.Core10.Handles.Sampler'                           |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_DESCRIPTOR_POOL'                 | 'Vulkan.Core10.Handles.DescriptorPool'                    |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_DESCRIPTOR_SET'                  | 'Vulkan.Core10.Handles.DescriptorSet'                     |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_FRAMEBUFFER'                     | 'Vulkan.Core10.Handles.Framebuffer'                       |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_COMMAND_POOL'                    | 'Vulkan.Core10.Handles.CommandPool'                       |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION'        | 'Vulkan.Core11.Handles.SamplerYcbcrConversion'            |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE'      | 'Vulkan.Core11.Handles.DescriptorUpdateTemplate'          |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_SURFACE_KHR'                     | 'Vulkan.Extensions.Handles.SurfaceKHR'                    |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_SWAPCHAIN_KHR'                   | 'Vulkan.Extensions.Handles.SwapchainKHR'                  |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_DISPLAY_KHR'                     | 'Vulkan.Extensions.Handles.DisplayKHR'                    |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_DISPLAY_MODE_KHR'                | 'Vulkan.Extensions.Handles.DisplayModeKHR'                |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT'       | 'Vulkan.Extensions.Handles.DebugReportCallbackEXT'        |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV'     | 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV'      |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT'       | 'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT'        |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_VALIDATION_CACHE_EXT'            | 'Vulkan.Extensions.Handles.ValidationCacheEXT'            |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR'      | 'Vulkan.Extensions.Handles.AccelerationStructureKHR'      |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+-- | 'OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL' | 'Vulkan.Extensions.Handles.PerformanceConfigurationINTEL' |
+-- +-----------------------------------------------+-----------------------------------------------------------+
+--
+-- VkObjectType and Vulkan Handle Relationship
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectTagInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_private_data.getPrivateDataEXT',
+-- 'Vulkan.Extensions.VK_EXT_private_data.setPrivateDataEXT'
+newtype ObjectType = ObjectType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_UNKNOWN"
+pattern OBJECT_TYPE_UNKNOWN = ObjectType 0
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_INSTANCE"
+pattern OBJECT_TYPE_INSTANCE = ObjectType 1
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PHYSICAL_DEVICE"
+pattern OBJECT_TYPE_PHYSICAL_DEVICE = ObjectType 2
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEVICE"
+pattern OBJECT_TYPE_DEVICE = ObjectType 3
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_QUEUE"
+pattern OBJECT_TYPE_QUEUE = ObjectType 4
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SEMAPHORE"
+pattern OBJECT_TYPE_SEMAPHORE = ObjectType 5
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_COMMAND_BUFFER"
+pattern OBJECT_TYPE_COMMAND_BUFFER = ObjectType 6
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_FENCE"
+pattern OBJECT_TYPE_FENCE = ObjectType 7
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEVICE_MEMORY"
+pattern OBJECT_TYPE_DEVICE_MEMORY = ObjectType 8
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_BUFFER"
+pattern OBJECT_TYPE_BUFFER = ObjectType 9
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_IMAGE"
+pattern OBJECT_TYPE_IMAGE = ObjectType 10
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_EVENT"
+pattern OBJECT_TYPE_EVENT = ObjectType 11
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_QUERY_POOL"
+pattern OBJECT_TYPE_QUERY_POOL = ObjectType 12
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_BUFFER_VIEW"
+pattern OBJECT_TYPE_BUFFER_VIEW = ObjectType 13
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_IMAGE_VIEW"
+pattern OBJECT_TYPE_IMAGE_VIEW = ObjectType 14
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SHADER_MODULE"
+pattern OBJECT_TYPE_SHADER_MODULE = ObjectType 15
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PIPELINE_CACHE"
+pattern OBJECT_TYPE_PIPELINE_CACHE = ObjectType 16
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PIPELINE_LAYOUT"
+pattern OBJECT_TYPE_PIPELINE_LAYOUT = ObjectType 17
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_RENDER_PASS"
+pattern OBJECT_TYPE_RENDER_PASS = ObjectType 18
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PIPELINE"
+pattern OBJECT_TYPE_PIPELINE = ObjectType 19
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT"
+pattern OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = ObjectType 20
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SAMPLER"
+pattern OBJECT_TYPE_SAMPLER = ObjectType 21
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_POOL"
+pattern OBJECT_TYPE_DESCRIPTOR_POOL = ObjectType 22
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_SET"
+pattern OBJECT_TYPE_DESCRIPTOR_SET = ObjectType 23
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_FRAMEBUFFER"
+pattern OBJECT_TYPE_FRAMEBUFFER = ObjectType 24
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_COMMAND_POOL"
+pattern OBJECT_TYPE_COMMAND_POOL = ObjectType 25
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT"
+pattern OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT = ObjectType 1000295000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV"
+pattern OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV = ObjectType 1000277000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR"
+pattern OBJECT_TYPE_DEFERRED_OPERATION_KHR = ObjectType 1000268000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL"
+pattern OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = ObjectType 1000210000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_VALIDATION_CACHE_EXT"
+pattern OBJECT_TYPE_VALIDATION_CACHE_EXT = ObjectType 1000160000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR"
+pattern OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = ObjectType 1000165000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT"
+pattern OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = ObjectType 1000128000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT"
+pattern OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = ObjectType 1000011000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DISPLAY_MODE_KHR"
+pattern OBJECT_TYPE_DISPLAY_MODE_KHR = ObjectType 1000002001
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DISPLAY_KHR"
+pattern OBJECT_TYPE_DISPLAY_KHR = ObjectType 1000002000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SWAPCHAIN_KHR"
+pattern OBJECT_TYPE_SWAPCHAIN_KHR = ObjectType 1000001000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SURFACE_KHR"
+pattern OBJECT_TYPE_SURFACE_KHR = ObjectType 1000000000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"
+pattern OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = ObjectType 1000085000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"
+pattern OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = ObjectType 1000156000
+{-# complete OBJECT_TYPE_UNKNOWN,
+             OBJECT_TYPE_INSTANCE,
+             OBJECT_TYPE_PHYSICAL_DEVICE,
+             OBJECT_TYPE_DEVICE,
+             OBJECT_TYPE_QUEUE,
+             OBJECT_TYPE_SEMAPHORE,
+             OBJECT_TYPE_COMMAND_BUFFER,
+             OBJECT_TYPE_FENCE,
+             OBJECT_TYPE_DEVICE_MEMORY,
+             OBJECT_TYPE_BUFFER,
+             OBJECT_TYPE_IMAGE,
+             OBJECT_TYPE_EVENT,
+             OBJECT_TYPE_QUERY_POOL,
+             OBJECT_TYPE_BUFFER_VIEW,
+             OBJECT_TYPE_IMAGE_VIEW,
+             OBJECT_TYPE_SHADER_MODULE,
+             OBJECT_TYPE_PIPELINE_CACHE,
+             OBJECT_TYPE_PIPELINE_LAYOUT,
+             OBJECT_TYPE_RENDER_PASS,
+             OBJECT_TYPE_PIPELINE,
+             OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,
+             OBJECT_TYPE_SAMPLER,
+             OBJECT_TYPE_DESCRIPTOR_POOL,
+             OBJECT_TYPE_DESCRIPTOR_SET,
+             OBJECT_TYPE_FRAMEBUFFER,
+             OBJECT_TYPE_COMMAND_POOL,
+             OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT,
+             OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV,
+             OBJECT_TYPE_DEFERRED_OPERATION_KHR,
+             OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL,
+             OBJECT_TYPE_VALIDATION_CACHE_EXT,
+             OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR,
+             OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT,
+             OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT,
+             OBJECT_TYPE_DISPLAY_MODE_KHR,
+             OBJECT_TYPE_DISPLAY_KHR,
+             OBJECT_TYPE_SWAPCHAIN_KHR,
+             OBJECT_TYPE_SURFACE_KHR,
+             OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE,
+             OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION :: ObjectType #-}
+
+instance Show ObjectType where
+  showsPrec p = \case
+    OBJECT_TYPE_UNKNOWN -> showString "OBJECT_TYPE_UNKNOWN"
+    OBJECT_TYPE_INSTANCE -> showString "OBJECT_TYPE_INSTANCE"
+    OBJECT_TYPE_PHYSICAL_DEVICE -> showString "OBJECT_TYPE_PHYSICAL_DEVICE"
+    OBJECT_TYPE_DEVICE -> showString "OBJECT_TYPE_DEVICE"
+    OBJECT_TYPE_QUEUE -> showString "OBJECT_TYPE_QUEUE"
+    OBJECT_TYPE_SEMAPHORE -> showString "OBJECT_TYPE_SEMAPHORE"
+    OBJECT_TYPE_COMMAND_BUFFER -> showString "OBJECT_TYPE_COMMAND_BUFFER"
+    OBJECT_TYPE_FENCE -> showString "OBJECT_TYPE_FENCE"
+    OBJECT_TYPE_DEVICE_MEMORY -> showString "OBJECT_TYPE_DEVICE_MEMORY"
+    OBJECT_TYPE_BUFFER -> showString "OBJECT_TYPE_BUFFER"
+    OBJECT_TYPE_IMAGE -> showString "OBJECT_TYPE_IMAGE"
+    OBJECT_TYPE_EVENT -> showString "OBJECT_TYPE_EVENT"
+    OBJECT_TYPE_QUERY_POOL -> showString "OBJECT_TYPE_QUERY_POOL"
+    OBJECT_TYPE_BUFFER_VIEW -> showString "OBJECT_TYPE_BUFFER_VIEW"
+    OBJECT_TYPE_IMAGE_VIEW -> showString "OBJECT_TYPE_IMAGE_VIEW"
+    OBJECT_TYPE_SHADER_MODULE -> showString "OBJECT_TYPE_SHADER_MODULE"
+    OBJECT_TYPE_PIPELINE_CACHE -> showString "OBJECT_TYPE_PIPELINE_CACHE"
+    OBJECT_TYPE_PIPELINE_LAYOUT -> showString "OBJECT_TYPE_PIPELINE_LAYOUT"
+    OBJECT_TYPE_RENDER_PASS -> showString "OBJECT_TYPE_RENDER_PASS"
+    OBJECT_TYPE_PIPELINE -> showString "OBJECT_TYPE_PIPELINE"
+    OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT -> showString "OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT"
+    OBJECT_TYPE_SAMPLER -> showString "OBJECT_TYPE_SAMPLER"
+    OBJECT_TYPE_DESCRIPTOR_POOL -> showString "OBJECT_TYPE_DESCRIPTOR_POOL"
+    OBJECT_TYPE_DESCRIPTOR_SET -> showString "OBJECT_TYPE_DESCRIPTOR_SET"
+    OBJECT_TYPE_FRAMEBUFFER -> showString "OBJECT_TYPE_FRAMEBUFFER"
+    OBJECT_TYPE_COMMAND_POOL -> showString "OBJECT_TYPE_COMMAND_POOL"
+    OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT -> showString "OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT"
+    OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV -> showString "OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV"
+    OBJECT_TYPE_DEFERRED_OPERATION_KHR -> showString "OBJECT_TYPE_DEFERRED_OPERATION_KHR"
+    OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL -> showString "OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL"
+    OBJECT_TYPE_VALIDATION_CACHE_EXT -> showString "OBJECT_TYPE_VALIDATION_CACHE_EXT"
+    OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR -> showString "OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR"
+    OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT -> showString "OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT"
+    OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT -> showString "OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT"
+    OBJECT_TYPE_DISPLAY_MODE_KHR -> showString "OBJECT_TYPE_DISPLAY_MODE_KHR"
+    OBJECT_TYPE_DISPLAY_KHR -> showString "OBJECT_TYPE_DISPLAY_KHR"
+    OBJECT_TYPE_SWAPCHAIN_KHR -> showString "OBJECT_TYPE_SWAPCHAIN_KHR"
+    OBJECT_TYPE_SURFACE_KHR -> showString "OBJECT_TYPE_SURFACE_KHR"
+    OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE -> showString "OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"
+    OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION -> showString "OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"
+    ObjectType x -> showParen (p >= 11) (showString "ObjectType " . showsPrec 11 x)
+
+instance Read ObjectType where
+  readPrec = parens (choose [("OBJECT_TYPE_UNKNOWN", pure OBJECT_TYPE_UNKNOWN)
+                            , ("OBJECT_TYPE_INSTANCE", pure OBJECT_TYPE_INSTANCE)
+                            , ("OBJECT_TYPE_PHYSICAL_DEVICE", pure OBJECT_TYPE_PHYSICAL_DEVICE)
+                            , ("OBJECT_TYPE_DEVICE", pure OBJECT_TYPE_DEVICE)
+                            , ("OBJECT_TYPE_QUEUE", pure OBJECT_TYPE_QUEUE)
+                            , ("OBJECT_TYPE_SEMAPHORE", pure OBJECT_TYPE_SEMAPHORE)
+                            , ("OBJECT_TYPE_COMMAND_BUFFER", pure OBJECT_TYPE_COMMAND_BUFFER)
+                            , ("OBJECT_TYPE_FENCE", pure OBJECT_TYPE_FENCE)
+                            , ("OBJECT_TYPE_DEVICE_MEMORY", pure OBJECT_TYPE_DEVICE_MEMORY)
+                            , ("OBJECT_TYPE_BUFFER", pure OBJECT_TYPE_BUFFER)
+                            , ("OBJECT_TYPE_IMAGE", pure OBJECT_TYPE_IMAGE)
+                            , ("OBJECT_TYPE_EVENT", pure OBJECT_TYPE_EVENT)
+                            , ("OBJECT_TYPE_QUERY_POOL", pure OBJECT_TYPE_QUERY_POOL)
+                            , ("OBJECT_TYPE_BUFFER_VIEW", pure OBJECT_TYPE_BUFFER_VIEW)
+                            , ("OBJECT_TYPE_IMAGE_VIEW", pure OBJECT_TYPE_IMAGE_VIEW)
+                            , ("OBJECT_TYPE_SHADER_MODULE", pure OBJECT_TYPE_SHADER_MODULE)
+                            , ("OBJECT_TYPE_PIPELINE_CACHE", pure OBJECT_TYPE_PIPELINE_CACHE)
+                            , ("OBJECT_TYPE_PIPELINE_LAYOUT", pure OBJECT_TYPE_PIPELINE_LAYOUT)
+                            , ("OBJECT_TYPE_RENDER_PASS", pure OBJECT_TYPE_RENDER_PASS)
+                            , ("OBJECT_TYPE_PIPELINE", pure OBJECT_TYPE_PIPELINE)
+                            , ("OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT", pure OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)
+                            , ("OBJECT_TYPE_SAMPLER", pure OBJECT_TYPE_SAMPLER)
+                            , ("OBJECT_TYPE_DESCRIPTOR_POOL", pure OBJECT_TYPE_DESCRIPTOR_POOL)
+                            , ("OBJECT_TYPE_DESCRIPTOR_SET", pure OBJECT_TYPE_DESCRIPTOR_SET)
+                            , ("OBJECT_TYPE_FRAMEBUFFER", pure OBJECT_TYPE_FRAMEBUFFER)
+                            , ("OBJECT_TYPE_COMMAND_POOL", pure OBJECT_TYPE_COMMAND_POOL)
+                            , ("OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT", pure OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT)
+                            , ("OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV", pure OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV)
+                            , ("OBJECT_TYPE_DEFERRED_OPERATION_KHR", pure OBJECT_TYPE_DEFERRED_OPERATION_KHR)
+                            , ("OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL", pure OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL)
+                            , ("OBJECT_TYPE_VALIDATION_CACHE_EXT", pure OBJECT_TYPE_VALIDATION_CACHE_EXT)
+                            , ("OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR", pure OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR)
+                            , ("OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT", pure OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT)
+                            , ("OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT", pure OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT)
+                            , ("OBJECT_TYPE_DISPLAY_MODE_KHR", pure OBJECT_TYPE_DISPLAY_MODE_KHR)
+                            , ("OBJECT_TYPE_DISPLAY_KHR", pure OBJECT_TYPE_DISPLAY_KHR)
+                            , ("OBJECT_TYPE_SWAPCHAIN_KHR", pure OBJECT_TYPE_SWAPCHAIN_KHR)
+                            , ("OBJECT_TYPE_SURFACE_KHR", pure OBJECT_TYPE_SURFACE_KHR)
+                            , ("OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE", pure OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE)
+                            , ("OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION", pure OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ObjectType")
+                       v <- step readPrec
+                       pure (ObjectType v)))
+
diff --git a/src/Vulkan/Core10/Enums/ObjectType.hs-boot b/src/Vulkan/Core10/Enums/ObjectType.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ObjectType.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ObjectType  (ObjectType) where
+
+
+
+data ObjectType
+
diff --git a/src/Vulkan/Core10/Enums/PhysicalDeviceType.hs b/src/Vulkan/Core10/Enums/PhysicalDeviceType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PhysicalDeviceType.hs
@@ -0,0 +1,80 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PhysicalDeviceType  (PhysicalDeviceType( PHYSICAL_DEVICE_TYPE_OTHER
+                                                                  , PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
+                                                                  , PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
+                                                                  , PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU
+                                                                  , PHYSICAL_DEVICE_TYPE_CPU
+                                                                  , ..
+                                                                  )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkPhysicalDeviceType - Supported physical device types
+--
+-- = Description
+--
+-- 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
+--
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'
+newtype PhysicalDeviceType = PhysicalDeviceType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'PHYSICAL_DEVICE_TYPE_OTHER' - the device does not match any other
+-- available types.
+pattern PHYSICAL_DEVICE_TYPE_OTHER = PhysicalDeviceType 0
+-- | 'PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU' - the device is typically one
+-- embedded in or tightly coupled with the host.
+pattern PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = PhysicalDeviceType 1
+-- | 'PHYSICAL_DEVICE_TYPE_DISCRETE_GPU' - the device is typically a separate
+-- processor connected to the host via an interlink.
+pattern PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = PhysicalDeviceType 2
+-- | 'PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU' - the device is typically a virtual
+-- node in a virtualization environment.
+pattern PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = PhysicalDeviceType 3
+-- | 'PHYSICAL_DEVICE_TYPE_CPU' - the device is typically running on the same
+-- processors as the host.
+pattern PHYSICAL_DEVICE_TYPE_CPU = PhysicalDeviceType 4
+{-# complete PHYSICAL_DEVICE_TYPE_OTHER,
+             PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU,
+             PHYSICAL_DEVICE_TYPE_DISCRETE_GPU,
+             PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU,
+             PHYSICAL_DEVICE_TYPE_CPU :: PhysicalDeviceType #-}
+
+instance Show PhysicalDeviceType where
+  showsPrec p = \case
+    PHYSICAL_DEVICE_TYPE_OTHER -> showString "PHYSICAL_DEVICE_TYPE_OTHER"
+    PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU -> showString "PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU"
+    PHYSICAL_DEVICE_TYPE_DISCRETE_GPU -> showString "PHYSICAL_DEVICE_TYPE_DISCRETE_GPU"
+    PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU -> showString "PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU"
+    PHYSICAL_DEVICE_TYPE_CPU -> showString "PHYSICAL_DEVICE_TYPE_CPU"
+    PhysicalDeviceType x -> showParen (p >= 11) (showString "PhysicalDeviceType " . showsPrec 11 x)
+
+instance Read PhysicalDeviceType where
+  readPrec = parens (choose [("PHYSICAL_DEVICE_TYPE_OTHER", pure PHYSICAL_DEVICE_TYPE_OTHER)
+                            , ("PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU", pure PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU)
+                            , ("PHYSICAL_DEVICE_TYPE_DISCRETE_GPU", pure PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
+                            , ("PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU", pure PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU)
+                            , ("PHYSICAL_DEVICE_TYPE_CPU", pure PHYSICAL_DEVICE_TYPE_CPU)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PhysicalDeviceType")
+                       v <- step readPrec
+                       pure (PhysicalDeviceType v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineBindPoint.hs b/src/Vulkan/Core10/Enums/PipelineBindPoint.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineBindPoint.hs
@@ -0,0 +1,67 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineBindPoint  (PipelineBindPoint( PIPELINE_BIND_POINT_GRAPHICS
+                                                                , PIPELINE_BIND_POINT_COMPUTE
+                                                                , PIPELINE_BIND_POINT_RAY_TRACING_KHR
+                                                                , ..
+                                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkPipelineBindPoint - Specify the bind point of a pipeline object to a
+-- command buffer
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsMemoryRequirementsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutCreateInfoNV',
+-- 'Vulkan.Core10.Pass.SubpassDescription',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDescription2',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdBindPipelineShaderGroupNV',
+-- 'Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetKHR'
+newtype PipelineBindPoint = PipelineBindPoint Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'PIPELINE_BIND_POINT_GRAPHICS' specifies binding as a graphics pipeline.
+pattern PIPELINE_BIND_POINT_GRAPHICS = PipelineBindPoint 0
+-- | 'PIPELINE_BIND_POINT_COMPUTE' specifies binding as a compute pipeline.
+pattern PIPELINE_BIND_POINT_COMPUTE = PipelineBindPoint 1
+-- | 'PIPELINE_BIND_POINT_RAY_TRACING_KHR' specifies binding as a ray tracing
+-- pipeline.
+pattern PIPELINE_BIND_POINT_RAY_TRACING_KHR = PipelineBindPoint 1000165000
+{-# complete PIPELINE_BIND_POINT_GRAPHICS,
+             PIPELINE_BIND_POINT_COMPUTE,
+             PIPELINE_BIND_POINT_RAY_TRACING_KHR :: PipelineBindPoint #-}
+
+instance Show PipelineBindPoint where
+  showsPrec p = \case
+    PIPELINE_BIND_POINT_GRAPHICS -> showString "PIPELINE_BIND_POINT_GRAPHICS"
+    PIPELINE_BIND_POINT_COMPUTE -> showString "PIPELINE_BIND_POINT_COMPUTE"
+    PIPELINE_BIND_POINT_RAY_TRACING_KHR -> showString "PIPELINE_BIND_POINT_RAY_TRACING_KHR"
+    PipelineBindPoint x -> showParen (p >= 11) (showString "PipelineBindPoint " . showsPrec 11 x)
+
+instance Read PipelineBindPoint where
+  readPrec = parens (choose [("PIPELINE_BIND_POINT_GRAPHICS", pure PIPELINE_BIND_POINT_GRAPHICS)
+                            , ("PIPELINE_BIND_POINT_COMPUTE", pure PIPELINE_BIND_POINT_COMPUTE)
+                            , ("PIPELINE_BIND_POINT_RAY_TRACING_KHR", pure PIPELINE_BIND_POINT_RAY_TRACING_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineBindPoint")
+                       v <- step readPrec
+                       pure (PipelineBindPoint v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineBindPoint.hs-boot b/src/Vulkan/Core10/Enums/PipelineBindPoint.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineBindPoint.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineBindPoint  (PipelineBindPoint) where
+
+
+
+data PipelineBindPoint
+
diff --git a/src/Vulkan/Core10/Enums/PipelineCacheCreateFlagBits.hs b/src/Vulkan/Core10/Enums/PipelineCacheCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineCacheCreateFlagBits.hs
@@ -0,0 +1,55 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineCacheCreateFlagBits  ( PipelineCacheCreateFlagBits( PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT
+                                                                                     , ..
+                                                                                     )
+                                                        , PipelineCacheCreateFlags
+                                                        ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineCacheCreateFlagBits - Bitmask specifying the behavior of the
+-- pipeline cache
+--
+-- = See Also
+--
+-- 'PipelineCacheCreateFlags'
+newtype PipelineCacheCreateFlagBits = PipelineCacheCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT' specifies that
+-- all commands that modify the created
+-- 'Vulkan.Core10.Handles.PipelineCache' will be
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>.
+-- When set, the implementation /may/ skip any unnecessary processing
+-- needed to support simultaneous modification from multiple threads where
+-- allowed.
+pattern PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = PipelineCacheCreateFlagBits 0x00000001
+
+type PipelineCacheCreateFlags = PipelineCacheCreateFlagBits
+
+instance Show PipelineCacheCreateFlagBits where
+  showsPrec p = \case
+    PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT -> showString "PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT"
+    PipelineCacheCreateFlagBits x -> showParen (p >= 11) (showString "PipelineCacheCreateFlagBits 0x" . showHex x)
+
+instance Read PipelineCacheCreateFlagBits where
+  readPrec = parens (choose [("PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT", pure PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineCacheCreateFlagBits")
+                       v <- step readPrec
+                       pure (PipelineCacheCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineCacheHeaderVersion.hs b/src/Vulkan/Core10/Enums/PipelineCacheHeaderVersion.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineCacheHeaderVersion.hs
@@ -0,0 +1,47 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineCacheHeaderVersion  (PipelineCacheHeaderVersion( PIPELINE_CACHE_HEADER_VERSION_ONE
+                                                                                  , ..
+                                                                                  )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkPipelineCacheHeaderVersion - Encode pipeline cache version
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.PipelineCache.createPipelineCache',
+-- 'Vulkan.Core10.PipelineCache.getPipelineCacheData'
+newtype PipelineCacheHeaderVersion = PipelineCacheHeaderVersion Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+-- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
+
+-- | 'PIPELINE_CACHE_HEADER_VERSION_ONE' specifies version one of the
+-- pipeline cache.
+pattern PIPELINE_CACHE_HEADER_VERSION_ONE = PipelineCacheHeaderVersion 1
+{-# complete PIPELINE_CACHE_HEADER_VERSION_ONE :: PipelineCacheHeaderVersion #-}
+
+instance Show PipelineCacheHeaderVersion where
+  showsPrec p = \case
+    PIPELINE_CACHE_HEADER_VERSION_ONE -> showString "PIPELINE_CACHE_HEADER_VERSION_ONE"
+    PipelineCacheHeaderVersion x -> showParen (p >= 11) (showString "PipelineCacheHeaderVersion " . showsPrec 11 x)
+
+instance Read PipelineCacheHeaderVersion where
+  readPrec = parens (choose [("PIPELINE_CACHE_HEADER_VERSION_ONE", pure PIPELINE_CACHE_HEADER_VERSION_ONE)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineCacheHeaderVersion")
+                       v <- step readPrec
+                       pure (PipelineCacheHeaderVersion v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineColorBlendStateCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineColorBlendStateCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineColorBlendStateCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags  (PipelineColorBlendStateCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineColorBlendStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineColorBlendStateCreateFlags' is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'
+newtype PipelineColorBlendStateCreateFlags = PipelineColorBlendStateCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineColorBlendStateCreateFlags where
+  showsPrec p = \case
+    PipelineColorBlendStateCreateFlags x -> showParen (p >= 11) (showString "PipelineColorBlendStateCreateFlags 0x" . showHex x)
+
+instance Read PipelineColorBlendStateCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineColorBlendStateCreateFlags")
+                       v <- step readPrec
+                       pure (PipelineColorBlendStateCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs b/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs
@@ -0,0 +1,232 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineCreateFlagBits  ( PipelineCreateFlagBits( PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT
+                                                                           , PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT
+                                                                           , PIPELINE_CREATE_DERIVATIVE_BIT
+                                                                           , PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
+                                                                           , PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT
+                                                                           , PIPELINE_CREATE_LIBRARY_BIT_KHR
+                                                                           , PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
+                                                                           , PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
+                                                                           , PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR
+                                                                           , PIPELINE_CREATE_DEFER_COMPILE_BIT_NV
+                                                                           , PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
+                                                                           , PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
+                                                                           , PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
+                                                                           , PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
+                                                                           , PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
+                                                                           , PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
+                                                                           , PIPELINE_CREATE_DISPATCH_BASE_BIT
+                                                                           , PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT
+                                                                           , ..
+                                                                           )
+                                                   , PipelineCreateFlags
+                                                   ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineCreateFlagBits - Bitmask controlling how a pipeline is created
+--
+-- = Description
+--
+-- -   '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.
+--
+-- -   '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 pipeline creation call.
+--
+-- -   'PIPELINE_CREATE_DERIVATIVE_BIT' specifies that the pipeline to be
+--     created will be a child of a previously created parent pipeline.
+--
+-- -   'PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT' specifies that
+--     any shader input variables decorated as @ViewIndex@ will be assigned
+--     values as if they were decorated as @DeviceIndex@.
+--
+-- -   'Vulkan.Core11.Promoted_From_VK_KHR_device_group.PIPELINE_CREATE_DISPATCH_BASE'
+--     specifies that a compute pipeline /can/ be used with
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.cmdDispatchBase'
+--     with a non-zero base workgroup.
+--
+-- -   'PIPELINE_CREATE_DEFER_COMPILE_BIT_NV' specifies that a pipeline is
+--     created with all shaders in the deferred state. Before using the
+--     pipeline the application /must/ call
+--     'Vulkan.Extensions.VK_NV_ray_tracing.compileDeferredNV' exactly once
+--     on each shader in the pipeline before using the pipeline.
+--
+-- -   'PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR' specifies that the
+--     shader compiler should capture statistics for the executables
+--     produced by the compile process which /can/ later be retrieved by
+--     calling
+--     'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutableStatisticsKHR'.
+--     Enabling this flag /must/ not affect the final compiled pipeline but
+--     /may/ disable pipeline caching or otherwise affect pipeline creation
+--     time.
+--
+-- -   'PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR' specifies
+--     that the shader compiler should capture the internal representations
+--     of executables produced by the compile process which /can/ later be
+--     retrieved by calling
+--     'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutableInternalRepresentationsKHR'.
+--     Enabling this flag /must/ not affect the final compiled pipeline but
+--     /may/ disable pipeline caching or otherwise affect pipeline creation
+--     time.
+--
+-- -   'PIPELINE_CREATE_LIBRARY_BIT_KHR' specifies that the pipeline
+--     /cannot/ be used directly, and instead defines a /pipeline library/
+--     that /can/ be combined with other pipelines using the
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
+--     structure. This is available in raytracing pipelines.
+--
+-- -   'PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
+--     specifies that an any hit shader will always be present when an any
+--     hit shader would be executed.
+--
+-- -   'PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
+--     specifies that a closest hit shader will always be present when a
+--     closest hit shader would be executed.
+--
+-- -   'PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR' specifies
+--     that a miss shader will always be present when a miss shader would
+--     be executed.
+--
+-- -   'PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
+--     specifies that an intersection shader will always be present when an
+--     intersection shader would be executed.
+--
+-- -   'PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR' specifies that
+--     triangle primitives will be skipped during traversal using
+--     @OpTraceKHR@.
+--
+-- -   'PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR' specifies that AABB
+--     primitives will be skipped during traversal using @OpTraceKHR@.
+--
+-- -   'PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV' specifies that the
+--     pipeline can be used in combination with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#device-generated-commands>.
+--
+-- -   'PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
+--     specifies that pipeline creation will fail if a compile is required
+--     for creation of a valid 'Vulkan.Core10.Handles.Pipeline' object;
+--     'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT' will be
+--     returned by pipeline creation, and the
+--     'Vulkan.Core10.Handles.Pipeline' will be set to
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'.
+--
+-- -   When creating multiple pipelines,
+--     'PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT' specifies that
+--     control will be returned to the application on failure of the
+--     corresponding pipeline rather than continuing to create additional
+--     pipelines.
+--
+-- It is valid to set both 'PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT' and
+-- 'PIPELINE_CREATE_DERIVATIVE_BIT'. This allows a pipeline to be both a
+-- parent and possibly a child in a pipeline hierarchy. See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>
+-- for more information.
+--
+-- = See Also
+--
+-- 'PipelineCreateFlags'
+newtype PipelineCreateFlagBits = PipelineCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"
+pattern PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = PipelineCreateFlagBits 0x00000001
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"
+pattern PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = PipelineCreateFlagBits 0x00000002
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DERIVATIVE_BIT"
+pattern PIPELINE_CREATE_DERIVATIVE_BIT = PipelineCreateFlagBits 0x00000004
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT"
+pattern PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = PipelineCreateFlagBits 0x00000200
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT"
+pattern PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = PipelineCreateFlagBits 0x00000100
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_LIBRARY_BIT_KHR"
+pattern PIPELINE_CREATE_LIBRARY_BIT_KHR = PipelineCreateFlagBits 0x00000800
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV"
+pattern PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV = PipelineCreateFlagBits 0x00040000
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR"
+pattern PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = PipelineCreateFlagBits 0x00000080
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR"
+pattern PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = PipelineCreateFlagBits 0x00000040
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV"
+pattern PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = PipelineCreateFlagBits 0x00000020
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR"
+pattern PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR = PipelineCreateFlagBits 0x00002000
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR"
+pattern PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = PipelineCreateFlagBits 0x00001000
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR"
+pattern PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = PipelineCreateFlagBits 0x00020000
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR"
+pattern PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = PipelineCreateFlagBits 0x00010000
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR"
+pattern PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = PipelineCreateFlagBits 0x00008000
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR"
+pattern PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = PipelineCreateFlagBits 0x00004000
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"
+pattern PIPELINE_CREATE_DISPATCH_BASE_BIT = PipelineCreateFlagBits 0x00000010
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"
+pattern PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = PipelineCreateFlagBits 0x00000008
+
+type PipelineCreateFlags = PipelineCreateFlagBits
+
+instance Show PipelineCreateFlagBits where
+  showsPrec p = \case
+    PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT -> showString "PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"
+    PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT -> showString "PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"
+    PIPELINE_CREATE_DERIVATIVE_BIT -> showString "PIPELINE_CREATE_DERIVATIVE_BIT"
+    PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT -> showString "PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT"
+    PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT -> showString "PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT"
+    PIPELINE_CREATE_LIBRARY_BIT_KHR -> showString "PIPELINE_CREATE_LIBRARY_BIT_KHR"
+    PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV -> showString "PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV"
+    PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR -> showString "PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR"
+    PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR -> showString "PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR"
+    PIPELINE_CREATE_DEFER_COMPILE_BIT_NV -> showString "PIPELINE_CREATE_DEFER_COMPILE_BIT_NV"
+    PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR"
+    PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR"
+    PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR"
+    PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR"
+    PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR"
+    PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR -> showString "PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR"
+    PIPELINE_CREATE_DISPATCH_BASE_BIT -> showString "PIPELINE_CREATE_DISPATCH_BASE_BIT"
+    PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT -> showString "PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"
+    PipelineCreateFlagBits x -> showParen (p >= 11) (showString "PipelineCreateFlagBits 0x" . showHex x)
+
+instance Read PipelineCreateFlagBits where
+  readPrec = parens (choose [("PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT", pure PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
+                            , ("PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT", pure PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
+                            , ("PIPELINE_CREATE_DERIVATIVE_BIT", pure PIPELINE_CREATE_DERIVATIVE_BIT)
+                            , ("PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT", pure PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT)
+                            , ("PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT", pure PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT)
+                            , ("PIPELINE_CREATE_LIBRARY_BIT_KHR", pure PIPELINE_CREATE_LIBRARY_BIT_KHR)
+                            , ("PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", pure PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV)
+                            , ("PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR", pure PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR)
+                            , ("PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR", pure PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR)
+                            , ("PIPELINE_CREATE_DEFER_COMPILE_BIT_NV", pure PIPELINE_CREATE_DEFER_COMPILE_BIT_NV)
+                            , ("PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR)
+                            , ("PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR)
+                            , ("PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR)
+                            , ("PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR)
+                            , ("PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR)
+                            , ("PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR", pure PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR)
+                            , ("PIPELINE_CREATE_DISPATCH_BASE_BIT", pure PIPELINE_CREATE_DISPATCH_BASE_BIT)
+                            , ("PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT", pure PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineCreateFlagBits")
+                       v <- step readPrec
+                       pure (PipelineCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineDepthStencilStateCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineDepthStencilStateCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineDepthStencilStateCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags  (PipelineDepthStencilStateCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineDepthStencilStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineDepthStencilStateCreateFlags' is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'
+newtype PipelineDepthStencilStateCreateFlags = PipelineDepthStencilStateCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineDepthStencilStateCreateFlags where
+  showsPrec p = \case
+    PipelineDepthStencilStateCreateFlags x -> showParen (p >= 11) (showString "PipelineDepthStencilStateCreateFlags 0x" . showHex x)
+
+instance Read PipelineDepthStencilStateCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineDepthStencilStateCreateFlags")
+                       v <- step readPrec
+                       pure (PipelineDepthStencilStateCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineDynamicStateCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineDynamicStateCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineDynamicStateCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags  (PipelineDynamicStateCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineDynamicStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineDynamicStateCreateFlags' is a bitmask type for setting a mask,
+-- but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'
+newtype PipelineDynamicStateCreateFlags = PipelineDynamicStateCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineDynamicStateCreateFlags where
+  showsPrec p = \case
+    PipelineDynamicStateCreateFlags x -> showParen (p >= 11) (showString "PipelineDynamicStateCreateFlags 0x" . showHex x)
+
+instance Read PipelineDynamicStateCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineDynamicStateCreateFlags")
+                       v <- step readPrec
+                       pure (PipelineDynamicStateCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineInputAssemblyStateCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineInputAssemblyStateCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineInputAssemblyStateCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags  (PipelineInputAssemblyStateCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineInputAssemblyStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineInputAssemblyStateCreateFlags' is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'
+newtype PipelineInputAssemblyStateCreateFlags = PipelineInputAssemblyStateCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineInputAssemblyStateCreateFlags where
+  showsPrec p = \case
+    PipelineInputAssemblyStateCreateFlags x -> showParen (p >= 11) (showString "PipelineInputAssemblyStateCreateFlags 0x" . showHex x)
+
+instance Read PipelineInputAssemblyStateCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineInputAssemblyStateCreateFlags")
+                       v <- step readPrec
+                       pure (PipelineInputAssemblyStateCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineLayoutCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineLayoutCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineLayoutCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineLayoutCreateFlags  (PipelineLayoutCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineLayoutCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineLayoutCreateFlags' is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'
+newtype PipelineLayoutCreateFlags = PipelineLayoutCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineLayoutCreateFlags where
+  showsPrec p = \case
+    PipelineLayoutCreateFlags x -> showParen (p >= 11) (showString "PipelineLayoutCreateFlags 0x" . showHex x)
+
+instance Read PipelineLayoutCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineLayoutCreateFlags")
+                       v <- step readPrec
+                       pure (PipelineLayoutCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineMultisampleStateCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineMultisampleStateCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineMultisampleStateCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags  (PipelineMultisampleStateCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineMultisampleStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineMultisampleStateCreateFlags' is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'
+newtype PipelineMultisampleStateCreateFlags = PipelineMultisampleStateCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineMultisampleStateCreateFlags where
+  showsPrec p = \case
+    PipelineMultisampleStateCreateFlags x -> showParen (p >= 11) (showString "PipelineMultisampleStateCreateFlags 0x" . showHex x)
+
+instance Read PipelineMultisampleStateCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineMultisampleStateCreateFlags")
+                       v <- step readPrec
+                       pure (PipelineMultisampleStateCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineRasterizationStateCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineRasterizationStateCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineRasterizationStateCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags  (PipelineRasterizationStateCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineRasterizationStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineRasterizationStateCreateFlags' is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
+newtype PipelineRasterizationStateCreateFlags = PipelineRasterizationStateCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineRasterizationStateCreateFlags where
+  showsPrec p = \case
+    PipelineRasterizationStateCreateFlags x -> showParen (p >= 11) (showString "PipelineRasterizationStateCreateFlags 0x" . showHex x)
+
+instance Read PipelineRasterizationStateCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineRasterizationStateCreateFlags")
+                       v <- step readPrec
+                       pure (PipelineRasterizationStateCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineShaderStageCreateFlagBits.hs b/src/Vulkan/Core10/Enums/PipelineShaderStageCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineShaderStageCreateFlagBits.hs
@@ -0,0 +1,77 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits  ( PipelineShaderStageCreateFlagBits( PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
+                                                                                                 , PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
+                                                                                                 , ..
+                                                                                                 )
+                                                              , PipelineShaderStageCreateFlags
+                                                              ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineShaderStageCreateFlagBits - Bitmask controlling how a pipeline
+-- shader stage is created
+--
+-- = Description
+--
+-- Note
+--
+-- If 'PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
+-- and 'PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT' are
+-- specified and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size minSubgroupSize>
+-- does not equal
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size maxSubgroupSize>
+-- and no
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-required-subgroup-size required subgroup size>
+-- is specified, then the only way to guarantee that the \'X\' dimension of
+-- the local workgroup size is a multiple of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-sgs SubgroupSize>
+-- is to make it a multiple of @maxSubgroupSize@. Under these conditions,
+-- you are guaranteed full subgroups but not any particular subgroup size.
+--
+-- = See Also
+--
+-- 'PipelineShaderStageCreateFlags'
+newtype PipelineShaderStageCreateFlagBits = PipelineShaderStageCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT' specifies
+-- that the subgroup sizes /must/ be launched with all invocations active
+-- in the compute stage.
+pattern PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = PipelineShaderStageCreateFlagBits 0x00000002
+-- | 'PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
+-- specifies that the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-sgs SubgroupSize>
+-- /may/ vary in the shader stage.
+pattern PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = PipelineShaderStageCreateFlagBits 0x00000001
+
+type PipelineShaderStageCreateFlags = PipelineShaderStageCreateFlagBits
+
+instance Show PipelineShaderStageCreateFlagBits where
+  showsPrec p = \case
+    PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT -> showString "PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT"
+    PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT -> showString "PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT"
+    PipelineShaderStageCreateFlagBits x -> showParen (p >= 11) (showString "PipelineShaderStageCreateFlagBits 0x" . showHex x)
+
+instance Read PipelineShaderStageCreateFlagBits where
+  readPrec = parens (choose [("PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT", pure PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT)
+                            , ("PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT", pure PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineShaderStageCreateFlagBits")
+                       v <- step readPrec
+                       pure (PipelineShaderStageCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs b/src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs
@@ -0,0 +1,295 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineStageFlagBits  ( PipelineStageFlagBits( PIPELINE_STAGE_TOP_OF_PIPE_BIT
+                                                                         , PIPELINE_STAGE_DRAW_INDIRECT_BIT
+                                                                         , PIPELINE_STAGE_VERTEX_INPUT_BIT
+                                                                         , PIPELINE_STAGE_VERTEX_SHADER_BIT
+                                                                         , PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
+                                                                         , PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
+                                                                         , PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+                                                                         , PIPELINE_STAGE_FRAGMENT_SHADER_BIT
+                                                                         , PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
+                                                                         , PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
+                                                                         , PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+                                                                         , PIPELINE_STAGE_COMPUTE_SHADER_BIT
+                                                                         , PIPELINE_STAGE_TRANSFER_BIT
+                                                                         , PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
+                                                                         , PIPELINE_STAGE_HOST_BIT
+                                                                         , PIPELINE_STAGE_ALL_GRAPHICS_BIT
+                                                                         , PIPELINE_STAGE_ALL_COMMANDS_BIT
+                                                                         , PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
+                                                                         , PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
+                                                                         , PIPELINE_STAGE_MESH_SHADER_BIT_NV
+                                                                         , PIPELINE_STAGE_TASK_SHADER_BIT_NV
+                                                                         , PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
+                                                                         , PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+                                                                         , PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
+                                                                         , PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
+                                                                         , PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
+                                                                         , ..
+                                                                         )
+                                                  , PipelineStageFlags
+                                                  ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineStageFlagBits - Bitmask specifying pipeline stages
+--
+-- = Description
+--
+-- Note
+--
+-- An execution dependency with only '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 '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
+-- 'PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT' or 'PIPELINE_STAGE_TOP_OF_PIPE_BIT'
+-- would never make any accesses available and\/or visible because these
+-- stages do not access memory.
+--
+-- 'PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT' and '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
+--
+-- 'Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.CheckpointDataNV',
+-- 'PipelineStageFlags',
+-- 'Vulkan.Extensions.VK_AMD_buffer_marker.cmdWriteBufferMarkerAMD',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp'
+newtype PipelineStageFlagBits = PipelineStageFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'PIPELINE_STAGE_TOP_OF_PIPE_BIT' specifies the stage of the pipeline
+-- where any commands are initially received by the queue.
+pattern PIPELINE_STAGE_TOP_OF_PIPE_BIT = PipelineStageFlagBits 0x00000001
+-- | 'PIPELINE_STAGE_DRAW_INDIRECT_BIT' specifies the stage of the pipeline
+-- where Draw\/DispatchIndirect data structures are consumed. This stage
+-- also includes reading commands written by
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdExecuteGeneratedCommandsNV'.
+pattern PIPELINE_STAGE_DRAW_INDIRECT_BIT = PipelineStageFlagBits 0x00000002
+-- | 'PIPELINE_STAGE_VERTEX_INPUT_BIT' specifies the stage of the pipeline
+-- where vertex and index buffers are consumed.
+pattern PIPELINE_STAGE_VERTEX_INPUT_BIT = PipelineStageFlagBits 0x00000004
+-- | 'PIPELINE_STAGE_VERTEX_SHADER_BIT' specifies the vertex shader stage.
+pattern PIPELINE_STAGE_VERTEX_SHADER_BIT = PipelineStageFlagBits 0x00000008
+-- | 'PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT' specifies the
+-- tessellation control shader stage.
+pattern PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = PipelineStageFlagBits 0x00000010
+-- | 'PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT' specifies the
+-- tessellation evaluation shader stage.
+pattern PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = PipelineStageFlagBits 0x00000020
+-- | 'PIPELINE_STAGE_GEOMETRY_SHADER_BIT' specifies the geometry shader
+-- stage.
+pattern PIPELINE_STAGE_GEOMETRY_SHADER_BIT = PipelineStageFlagBits 0x00000040
+-- | 'PIPELINE_STAGE_FRAGMENT_SHADER_BIT' specifies the fragment shader
+-- stage.
+pattern PIPELINE_STAGE_FRAGMENT_SHADER_BIT = PipelineStageFlagBits 0x00000080
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load operations>
+-- for framebuffer attachments with a depth\/stencil format.
+pattern PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = PipelineStageFlagBits 0x00000100
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass store operations>
+-- for framebuffer attachments with a depth\/stencil format.
+pattern PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = PipelineStageFlagBits 0x00000200
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load and store operations>
+-- and multisample resolve operations for framebuffer attachments with a
+-- color or depth\/stencil format.
+pattern PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = PipelineStageFlagBits 0x00000400
+-- | 'PIPELINE_STAGE_COMPUTE_SHADER_BIT' specifies the execution of a compute
+-- shader.
+pattern PIPELINE_STAGE_COMPUTE_SHADER_BIT = PipelineStageFlagBits 0x00000800
+-- | 'PIPELINE_STAGE_TRANSFER_BIT' specifies the following commands:
+--
+-- -   All
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>,
+--     including
+--     'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults'
+--
+-- -   'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'
+--
+-- -   'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage'
+--
+-- -   All
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>,
+--     with the exception of
+--     'Vulkan.Core10.CommandBufferBuilding.cmdClearAttachments'
+pattern PIPELINE_STAGE_TRANSFER_BIT = PipelineStageFlagBits 0x00001000
+-- | 'PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT' specifies the final stage in the
+-- pipeline where operations generated by all commands complete execution.
+pattern PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = PipelineStageFlagBits 0x00002000
+-- | '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.
+pattern PIPELINE_STAGE_HOST_BIT = PipelineStageFlagBits 0x00004000
+-- | 'PIPELINE_STAGE_ALL_GRAPHICS_BIT' specifies the execution of all
+-- graphics pipeline stages, and is equivalent to the logical OR of:
+--
+-- -   'PIPELINE_STAGE_TOP_OF_PIPE_BIT'
+--
+-- -   'PIPELINE_STAGE_DRAW_INDIRECT_BIT'
+--
+-- -   'PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- -   'PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   'PIPELINE_STAGE_VERTEX_INPUT_BIT'
+--
+-- -   'PIPELINE_STAGE_VERTEX_SHADER_BIT'
+--
+-- -   'PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--
+-- -   'PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   'PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   'PIPELINE_STAGE_FRAGMENT_SHADER_BIT'
+--
+-- -   'PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT'
+--
+-- -   'PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'
+--
+-- -   'PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'
+--
+-- -   'PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT'
+--
+-- -   'PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'
+--
+-- -   'PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'
+--
+-- -   'PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'
+--
+-- -   'PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
+pattern PIPELINE_STAGE_ALL_GRAPHICS_BIT = PipelineStageFlagBits 0x00008000
+-- | '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.
+pattern PIPELINE_STAGE_ALL_COMMANDS_BIT = PipelineStageFlagBits 0x00010000
+-- | 'PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV' specifies the stage of the
+-- pipeline where device-side preprocessing for generated commands via
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV'
+-- is handled.
+pattern PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = PipelineStageFlagBits 0x00020000
+-- | 'PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT' specifies the stage of
+-- the pipeline where the fragment density map is read to
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops generate the fragment areas>.
+pattern PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = PipelineStageFlagBits 0x00800000
+-- | 'PIPELINE_STAGE_MESH_SHADER_BIT_NV' specifies the mesh shader stage.
+pattern PIPELINE_STAGE_MESH_SHADER_BIT_NV = PipelineStageFlagBits 0x00100000
+-- | 'PIPELINE_STAGE_TASK_SHADER_BIT_NV' specifies the task shader stage.
+pattern PIPELINE_STAGE_TASK_SHADER_BIT_NV = PipelineStageFlagBits 0x00080000
+-- | 'PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV' specifies the stage of the
+-- pipeline where the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image shading rate image>
+-- is read to determine the shading rate for portions of a rasterized
+-- primitive.
+pattern PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = PipelineStageFlagBits 0x00400000
+-- | 'PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' specifies the
+-- execution of
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdCopyAccelerationStructureKHR',
+-- and
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdWriteAccelerationStructuresPropertiesKHR'.
+pattern PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = PipelineStageFlagBits 0x02000000
+-- | 'PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR' specifies the execution of
+-- the ray tracing shader stages.
+pattern PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR = PipelineStageFlagBits 0x00200000
+-- | 'PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT' specifies the stage of
+-- the pipeline where the predicate of conditional rendering is consumed.
+pattern PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT = PipelineStageFlagBits 0x00040000
+-- | 'PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT' specifies the stage of the
+-- pipeline where vertex attribute output values are written to the
+-- transform feedback buffers.
+pattern PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT = PipelineStageFlagBits 0x01000000
+
+type PipelineStageFlags = PipelineStageFlagBits
+
+instance Show PipelineStageFlagBits where
+  showsPrec p = \case
+    PIPELINE_STAGE_TOP_OF_PIPE_BIT -> showString "PIPELINE_STAGE_TOP_OF_PIPE_BIT"
+    PIPELINE_STAGE_DRAW_INDIRECT_BIT -> showString "PIPELINE_STAGE_DRAW_INDIRECT_BIT"
+    PIPELINE_STAGE_VERTEX_INPUT_BIT -> showString "PIPELINE_STAGE_VERTEX_INPUT_BIT"
+    PIPELINE_STAGE_VERTEX_SHADER_BIT -> showString "PIPELINE_STAGE_VERTEX_SHADER_BIT"
+    PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT -> showString "PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"
+    PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT -> showString "PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"
+    PIPELINE_STAGE_GEOMETRY_SHADER_BIT -> showString "PIPELINE_STAGE_GEOMETRY_SHADER_BIT"
+    PIPELINE_STAGE_FRAGMENT_SHADER_BIT -> showString "PIPELINE_STAGE_FRAGMENT_SHADER_BIT"
+    PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT -> showString "PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"
+    PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT -> showString "PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"
+    PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT -> showString "PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"
+    PIPELINE_STAGE_COMPUTE_SHADER_BIT -> showString "PIPELINE_STAGE_COMPUTE_SHADER_BIT"
+    PIPELINE_STAGE_TRANSFER_BIT -> showString "PIPELINE_STAGE_TRANSFER_BIT"
+    PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT -> showString "PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"
+    PIPELINE_STAGE_HOST_BIT -> showString "PIPELINE_STAGE_HOST_BIT"
+    PIPELINE_STAGE_ALL_GRAPHICS_BIT -> showString "PIPELINE_STAGE_ALL_GRAPHICS_BIT"
+    PIPELINE_STAGE_ALL_COMMANDS_BIT -> showString "PIPELINE_STAGE_ALL_COMMANDS_BIT"
+    PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV -> showString "PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV"
+    PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT -> showString "PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT"
+    PIPELINE_STAGE_MESH_SHADER_BIT_NV -> showString "PIPELINE_STAGE_MESH_SHADER_BIT_NV"
+    PIPELINE_STAGE_TASK_SHADER_BIT_NV -> showString "PIPELINE_STAGE_TASK_SHADER_BIT_NV"
+    PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV -> showString "PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV"
+    PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR -> showString "PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"
+    PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR -> showString "PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR"
+    PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT -> showString "PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT"
+    PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT -> showString "PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT"
+    PipelineStageFlagBits x -> showParen (p >= 11) (showString "PipelineStageFlagBits 0x" . showHex x)
+
+instance Read PipelineStageFlagBits where
+  readPrec = parens (choose [("PIPELINE_STAGE_TOP_OF_PIPE_BIT", pure PIPELINE_STAGE_TOP_OF_PIPE_BIT)
+                            , ("PIPELINE_STAGE_DRAW_INDIRECT_BIT", pure PIPELINE_STAGE_DRAW_INDIRECT_BIT)
+                            , ("PIPELINE_STAGE_VERTEX_INPUT_BIT", pure PIPELINE_STAGE_VERTEX_INPUT_BIT)
+                            , ("PIPELINE_STAGE_VERTEX_SHADER_BIT", pure PIPELINE_STAGE_VERTEX_SHADER_BIT)
+                            , ("PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT", pure PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
+                            , ("PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", pure PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
+                            , ("PIPELINE_STAGE_GEOMETRY_SHADER_BIT", pure PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
+                            , ("PIPELINE_STAGE_FRAGMENT_SHADER_BIT", pure PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
+                            , ("PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT", pure PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
+                            , ("PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT", pure PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
+                            , ("PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT", pure PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
+                            , ("PIPELINE_STAGE_COMPUTE_SHADER_BIT", pure PIPELINE_STAGE_COMPUTE_SHADER_BIT)
+                            , ("PIPELINE_STAGE_TRANSFER_BIT", pure PIPELINE_STAGE_TRANSFER_BIT)
+                            , ("PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT", pure PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
+                            , ("PIPELINE_STAGE_HOST_BIT", pure PIPELINE_STAGE_HOST_BIT)
+                            , ("PIPELINE_STAGE_ALL_GRAPHICS_BIT", pure PIPELINE_STAGE_ALL_GRAPHICS_BIT)
+                            , ("PIPELINE_STAGE_ALL_COMMANDS_BIT", pure PIPELINE_STAGE_ALL_COMMANDS_BIT)
+                            , ("PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV", pure PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV)
+                            , ("PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", pure PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT)
+                            , ("PIPELINE_STAGE_MESH_SHADER_BIT_NV", pure PIPELINE_STAGE_MESH_SHADER_BIT_NV)
+                            , ("PIPELINE_STAGE_TASK_SHADER_BIT_NV", pure PIPELINE_STAGE_TASK_SHADER_BIT_NV)
+                            , ("PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV", pure PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV)
+                            , ("PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", pure PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR)
+                            , ("PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", pure PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR)
+                            , ("PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", pure PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT)
+                            , ("PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", pure PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineStageFlagBits")
+                       v <- step readPrec
+                       pure (PipelineStageFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs-boot b/src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineStageFlagBits  ( PipelineStageFlagBits
+                                                  , PipelineStageFlags
+                                                  ) where
+
+
+
+data PipelineStageFlagBits
+
+type PipelineStageFlags = PipelineStageFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/PipelineTessellationStateCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineTessellationStateCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineTessellationStateCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags  (PipelineTessellationStateCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineTessellationStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineTessellationStateCreateFlags' is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo'
+newtype PipelineTessellationStateCreateFlags = PipelineTessellationStateCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineTessellationStateCreateFlags where
+  showsPrec p = \case
+    PipelineTessellationStateCreateFlags x -> showParen (p >= 11) (showString "PipelineTessellationStateCreateFlags 0x" . showHex x)
+
+instance Read PipelineTessellationStateCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineTessellationStateCreateFlags")
+                       v <- step readPrec
+                       pure (PipelineTessellationStateCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineVertexInputStateCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineVertexInputStateCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineVertexInputStateCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags  (PipelineVertexInputStateCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineVertexInputStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineVertexInputStateCreateFlags' is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo'
+newtype PipelineVertexInputStateCreateFlags = PipelineVertexInputStateCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineVertexInputStateCreateFlags where
+  showsPrec p = \case
+    PipelineVertexInputStateCreateFlags x -> showParen (p >= 11) (showString "PipelineVertexInputStateCreateFlags 0x" . showHex x)
+
+instance Read PipelineVertexInputStateCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineVertexInputStateCreateFlags")
+                       v <- step readPrec
+                       pure (PipelineVertexInputStateCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/PipelineViewportStateCreateFlags.hs b/src/Vulkan/Core10/Enums/PipelineViewportStateCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PipelineViewportStateCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PipelineViewportStateCreateFlags  (PipelineViewportStateCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPipelineViewportStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineViewportStateCreateFlags' is a bitmask type for setting a mask,
+-- but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'
+newtype PipelineViewportStateCreateFlags = PipelineViewportStateCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineViewportStateCreateFlags where
+  showsPrec p = \case
+    PipelineViewportStateCreateFlags x -> showParen (p >= 11) (showString "PipelineViewportStateCreateFlags 0x" . showHex x)
+
+instance Read PipelineViewportStateCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineViewportStateCreateFlags")
+                       v <- step readPrec
+                       pure (PipelineViewportStateCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/PolygonMode.hs b/src/Vulkan/Core10/Enums/PolygonMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PolygonMode.hs
@@ -0,0 +1,88 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PolygonMode  (PolygonMode( POLYGON_MODE_FILL
+                                                    , POLYGON_MODE_LINE
+                                                    , POLYGON_MODE_POINT
+                                                    , POLYGON_MODE_FILL_RECTANGLE_NV
+                                                    , ..
+                                                    )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkPolygonMode - Control polygon rasterization mode
+--
+-- = Description
+--
+-- 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
+--
+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'
+newtype PolygonMode = PolygonMode Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'POLYGON_MODE_FILL' specifies that polygons are rendered using the
+-- polygon rasterization rules in this section.
+pattern POLYGON_MODE_FILL = PolygonMode 0
+-- | 'POLYGON_MODE_LINE' specifies that polygon edges are drawn as line
+-- segments.
+pattern POLYGON_MODE_LINE = PolygonMode 1
+-- | 'POLYGON_MODE_POINT' specifies that polygon vertices are drawn as
+-- points.
+pattern POLYGON_MODE_POINT = PolygonMode 2
+-- | 'POLYGON_MODE_FILL_RECTANGLE_NV' specifies that polygons are rendered
+-- using polygon rasterization rules, modified to consider a sample within
+-- the primitive if the sample location is inside the axis-aligned bounding
+-- box of the triangle after projection. Note that the barycentric weights
+-- used in attribute interpolation /can/ extend outside the range [0,1]
+-- when these primitives are shaded. Special treatment is given to a sample
+-- position on the boundary edge of the bounding box. In such a case, if
+-- two rectangles lie on either side of a common edge (with identical
+-- endpoints) on which a sample position lies, then exactly one of the
+-- triangles /must/ produce a fragment that covers that sample during
+-- rasterization.
+--
+-- Polygons rendered in 'POLYGON_MODE_FILL_RECTANGLE_NV' mode /may/ be
+-- clipped by the frustum or by user clip planes. If clipping is applied,
+-- the triangle is culled rather than clipped.
+--
+-- Area calculation and facingness are determined for
+-- 'POLYGON_MODE_FILL_RECTANGLE_NV' mode using the triangle’s vertices.
+pattern POLYGON_MODE_FILL_RECTANGLE_NV = PolygonMode 1000153000
+{-# complete POLYGON_MODE_FILL,
+             POLYGON_MODE_LINE,
+             POLYGON_MODE_POINT,
+             POLYGON_MODE_FILL_RECTANGLE_NV :: PolygonMode #-}
+
+instance Show PolygonMode where
+  showsPrec p = \case
+    POLYGON_MODE_FILL -> showString "POLYGON_MODE_FILL"
+    POLYGON_MODE_LINE -> showString "POLYGON_MODE_LINE"
+    POLYGON_MODE_POINT -> showString "POLYGON_MODE_POINT"
+    POLYGON_MODE_FILL_RECTANGLE_NV -> showString "POLYGON_MODE_FILL_RECTANGLE_NV"
+    PolygonMode x -> showParen (p >= 11) (showString "PolygonMode " . showsPrec 11 x)
+
+instance Read PolygonMode where
+  readPrec = parens (choose [("POLYGON_MODE_FILL", pure POLYGON_MODE_FILL)
+                            , ("POLYGON_MODE_LINE", pure POLYGON_MODE_LINE)
+                            , ("POLYGON_MODE_POINT", pure POLYGON_MODE_POINT)
+                            , ("POLYGON_MODE_FILL_RECTANGLE_NV", pure POLYGON_MODE_FILL_RECTANGLE_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PolygonMode")
+                       v <- step readPrec
+                       pure (PolygonMode v)))
+
diff --git a/src/Vulkan/Core10/Enums/PrimitiveTopology.hs b/src/Vulkan/Core10/Enums/PrimitiveTopology.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/PrimitiveTopology.hs
@@ -0,0 +1,152 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.PrimitiveTopology  (PrimitiveTopology( PRIMITIVE_TOPOLOGY_POINT_LIST
+                                                                , PRIMITIVE_TOPOLOGY_LINE_LIST
+                                                                , PRIMITIVE_TOPOLOGY_LINE_STRIP
+                                                                , PRIMITIVE_TOPOLOGY_TRIANGLE_LIST
+                                                                , PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
+                                                                , PRIMITIVE_TOPOLOGY_TRIANGLE_FAN
+                                                                , PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY
+                                                                , PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY
+                                                                , PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY
+                                                                , PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
+                                                                , PRIMITIVE_TOPOLOGY_PATCH_LIST
+                                                                , ..
+                                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkPrimitiveTopology - Supported primitive topologies
+--
+-- = Description
+--
+-- Each primitive topology, and its construction from a list of vertices,
+-- is described in detail below with a supporting diagram, according to the
+-- following key:
+--
+-- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
+-- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iOC45ODE3ODY3IgogICBoZWlnaHQ9IjguOTgxNzg2NyIKICAgdmlld0JveD0iMCAwIDguOTgxNzg2OCA4Ljk4MTc4NyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnODY1MyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0icHJpbWl0aXZlX3RvcG9sb2d5X2tleV92ZXJ0ZXguc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzODY0NyIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMi44Mjg0MjcxIgogICAgIGlua3NjYXBlOmN4PSIxMDAuMjYxNiIKICAgICBpbmtzY2FwZTpjeT0iLTEwNC40NTE0NyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDAxIgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOSIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTkiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBmaXQtbWFyZ2luLXRvcD0iMSIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjEiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMSIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMSIKICAgICBpbmtzY2FwZTpzbmFwLWdyaWRzPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtdGV4dC1iYXNlbGluZT0idHJ1ZSIKICAgICBpbmtzY2FwZTpzbmFwLW9iamVjdC1taWRwb2ludHM9InRydWUiCiAgICAgdW5pdHM9InB4IgogICAgIGJvcmRlcmxheWVyPSJmYWxzZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgaWQ9ImdyaWQ5NjI2IgogICAgICAgb3JpZ2lueD0iLTkwLjUwOTExIgogICAgICAgb3JpZ2lueT0iLTY0NS41MDkyMiIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE4NjUwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAzLjA0MzUsMjMyLjUyNikiPgogICAgPGNpcmNsZQogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InBhdGg0NTE3LTAtOC01LTItMyIKICAgICAgIGN4PSIxMDcuNTM0MzkiCiAgICAgICBjeT0iLTIyOC4wMzUxMSIKICAgICAgIHI9IjMuNDkwODkzMSIgLz4KICA8L2c+Cjwvc3ZnPgo= primitive topology key vertex>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | Vertex    | A point in 3-dimensional space. Positions chosen within the diagrams are arbitrary and for illustration only.                  |
+-- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
+-- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iOS41NzgxMjUiCiAgIGhlaWdodD0iMTMuODc1IgogICB2aWV3Qm94PSIwIDAgOS41NzgxMjUxIDEzLjg3NSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnODY1MyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0icHJpbWl0aXZlX3RvcG9sb2d5X2tleV92ZXJ0ZXhfbnVtYmVyLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczg2NDciIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjIuODI4NDI3MSIKICAgICBpbmtzY2FwZTpjeD0iNzguNTg2NDQiCiAgICAgaW5rc2NhcGU6Y3k9Ii02OS41NjgzODgiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0idHJ1ZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAwMSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTkiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii05IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgZml0LW1hcmdpbi10b3A9IjEiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIxIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjEiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjEiCiAgICAgaW5rc2NhcGU6c25hcC1ncmlkcz0idHJ1ZSIKICAgICBpbmtzY2FwZTpzbmFwLXRleHQtYmFzZWxpbmU9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC1vYmplY3QtbWlkcG9pbnRzPSJ0cnVlIgogICAgIHVuaXRzPSJweCIKICAgICBib3JkZXJsYXllcj0iZmFsc2UiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIHR5cGU9Inh5Z3JpZCIKICAgICAgIGlkPSJncmlkOTYyNiIKICAgICAgIG9yaWdpbng9Ii05MC4zNjcxOTEiCiAgICAgICBvcmlnaW55PSItNjE4Ljc1Nzg0IiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTg2NTAiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMDIuOTAxNTgsMjEwLjY2Nzg2KSI+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjEuMjU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidzYW5zLXNlcmlmLCBOb3JtYWwnO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWw7Zm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDt0ZXh0LWFsaWduOmNlbnRlcjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6bWlkZGxlO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS4xNjQyNzM5OCIKICAgICAgIHg9IjEwNy41MzQzOSIKICAgICAgIHk9Ii0xOTguMDM1MDUiCiAgICAgICBpZD0idGV4dDUwNzAtMi0yLTktOS00MS05Ij48dHNwYW4KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgaWQ9InRzcGFuNTA2OC0wLTMtMzYtOS0xLTUiCiAgICAgICAgIHg9IjEwNy41MzQzOSIKICAgICAgICAgeT0iLTE5OC4wMzUwNSIKICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjE2cHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidzYW5zLXNlcmlmLCBOb3JtYWwnO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWw7Zm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDt0ZXh0LWFsaWduOmNlbnRlcjt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6bWlkZGxlO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MS4xNjQyNzM5OCI+NTwvdHNwYW4+PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg== primitive topology key vertex number>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Vertex    | Sequence position of a vertex within the provided vertex data.                                                                 |
+-- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Number    |                                                                                                                                |
+-- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
+-- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNTcuNDYxNTcxIgogICBoZWlnaHQ9IjguOTgxNzg2NyIKICAgdmlld0JveD0iMCAwIDU3LjQ2MTU3MSA4Ljk4MTc4NyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnODY1MyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0icHJpbWl0aXZlX3RvcG9sb2d5X2tleV9wcm92b2tpbmdfdmVydGV4LnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczg2NDciPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iQXJyb3cxTXN0YXJ0IgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgcmVmWT0iMCIKICAgICAgIHJlZlg9IjAiCiAgICAgICBpZD0ibWFya2VyNjc0NC04LTItMiIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoNjc0Mi05LTY3LTUiCiAgICAgICAgIGQ9Ik0gMCwwIDUsLTUgLTEyLjUsMCA1LDUgWiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZiMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZiMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNCwwLDAsMC40LDQsMCkiIC8+CiAgICA8L21hcmtlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjIuODI4NDI3MSIKICAgICBpbmtzY2FwZTpjeD0iLTEzOC43MDg0NCIKICAgICBpbmtzY2FwZTpjeT0iLTU1Ljg2NTYyOCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU5NSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxNDk1IgogICAgIGlua3NjYXBlOndpbmRvdy14PSI0ODEiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjE5MSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGZpdC1tYXJnaW4tdG9wPSIxIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMSIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIxIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIxIgogICAgIGlua3NjYXBlOnNuYXAtZ3JpZHM9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC10ZXh0LWJhc2VsaW5lPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtb2JqZWN0LW1pZHBvaW50cz0idHJ1ZSIKICAgICB1bml0cz0icHgiCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIj4KICAgIDxpbmtzY2FwZTpncmlkCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBpZD0iZ3JpZDk2MjYiCiAgICAgICBvcmlnaW54PSItOTAuNTA5MTEiCiAgICAgICBvcmlnaW55PSItNTk1LjUwOTE2IiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTg2NTAiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMDMuMDQzNSwxODIuNTI1OTUpIj4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTMwLDM1LjAwMDA1NykiCiAgICAgICBpZD0iZzExOTEzLTAiPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDE4NzItMi0zLTEtMS01IgogICAgICAgICBkPSJtIDI4Ny41MzQzOSwtMjEzLjAzNTExIGggLTUwIgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmIwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXItc3RhcnQ6dXJsKCNtYXJrZXI2NzQ0LTgtMi0yKSIgLz4KICAgICAgPGNpcmNsZQogICAgICAgICByPSIzLjQ5MDg5MzEiCiAgICAgICAgIGN5PSItMjEzLjAzNTExIgogICAgICAgICBjeD0iMjM3LjUzNDM5IgogICAgICAgICBpZD0icGF0aDQ1MTctMC04LTUtOTEtMC0zLTgiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZjAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo= primitive topology key provoking vertex>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | Provoking | Provoking vertex within the main primitive. The arrow points along an edge of the relevant primitive, following winding order. |
+-- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Vertex    | Used in                                                                                                                        |
+-- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |           | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-flatshading flat shading>.       |
+-- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
+-- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iODIiCiAgIGhlaWdodD0iMyIKICAgdmlld0JveD0iMCAwIDgyLjAwMDAwMSAzLjAwMDAwMDEiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2Zzg2NTMiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuNCAoNWRhNjg5YzMxMywgMjAxOS0wMS0xNCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9InByaW1pdGl2ZV90b3BvbG9neV9rZXlfZWRnZS5zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM4NjQ3IiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIyLjgyODQyNzEiCiAgICAgaW5rc2NhcGU6Y3g9Ii0xNTUuNzc5NSIKICAgICBpbmtzY2FwZTpjeT0iLTQuNTU4MjQ3MyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjI2MiIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxNTA3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSI0ODIiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjM4NSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGZpdC1tYXJnaW4tdG9wPSIxIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMSIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIxIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIxIgogICAgIGlua3NjYXBlOnNuYXAtZ3JpZHM9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC10ZXh0LWJhc2VsaW5lPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtb2JqZWN0LW1pZHBvaW50cz0idHJ1ZSIKICAgICB1bml0cz0icHgiCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIj4KICAgIDxpbmtzY2FwZTpncmlkCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBpZD0iZ3JpZDk2MjYiCiAgICAgICBvcmlnaW54PSItMzA5IgogICAgICAgb3JpZ2lueT0iLTY0OC41MDAwMyIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE4NjUwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzIxLjUzNDM5LDIyOS41MzUwMykiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAzMjIuNTM0MzksLTIyOC4wMzUwMyBoIDgwIgogICAgICAgaWQ9InBhdGgyMDMzLTEiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogIDwvZz4KPC9zdmc+Cg== primitive topology key edge>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | Primitive | An edge connecting the points of a main primitive.                                                                             |
+-- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Edge      |                                                                                                                                |
+-- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
+-- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iODIiCiAgIGhlaWdodD0iMyIKICAgdmlld0JveD0iMCAwIDgyLjAwMDAwMSAzLjAwMDAwMDEiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2Zzg2NTMiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuNCAoNWRhNjg5YzMxMywgMjAxOS0wMS0xNCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9InByaW1pdGl2ZV90b3BvbG9neV9rZXlfYWRqYWNlbmN5X2VkZ2Uuc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzODY0NyIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMi44Mjg0MjcxIgogICAgIGlua3NjYXBlOmN4PSItMTYxLjc4OTkiCiAgICAgaW5rc2NhcGU6Y3k9Ii03MC43NzUwMjMiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0idHJ1ZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjIyMzMiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTM0MyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMzkyIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyOTYiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBmaXQtbWFyZ2luLXRvcD0iMSIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjEiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMSIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMSIKICAgICBpbmtzY2FwZTpzbmFwLWdyaWRzPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtdGV4dC1iYXNlbGluZT0idHJ1ZSIKICAgICBpbmtzY2FwZTpzbmFwLW9iamVjdC1taWRwb2ludHM9InRydWUiCiAgICAgdW5pdHM9InB4IgogICAgIGJvcmRlcmxheWVyPSJmYWxzZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgaWQ9ImdyaWQ5NjI2IgogICAgICAgb3JpZ2lueD0iLTMwOSIKICAgICAgIG9yaWdpbnk9Ii02MjMuNTAwMDMiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhODY1MCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMyMS41MzQzOSwyMDQuNTM1MDMpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo0LCA0O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzIyLjUzNDM5LC0yMDMuMDM1MDMgaCA4MCIKICAgICAgIGlkPSJwYXRoMjAzMyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPC9nPgo8L3N2Zz4K primitive topology key adjacency edge>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | Adjacency | Points connected by these lines do not contribute to a main primitive, and are only accessible in a                            |
+-- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Edge      | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry geometry shader>.                      |
+-- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
+-- | <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNTUuMDYzODE2IgogICBoZWlnaHQ9IjQ2LjE3ODgyOSIKICAgdmlld0JveD0iMCAwIDU1LjA2MzgxNyA0Ni4xNzg4MyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnODY1MyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0icHJpbWl0aXZlX3RvcG9sb2d5X2tleV93aW5kaW5nX29yZGVyLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczg2NDciPgogICAgPG1hcmtlcgogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSIKICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaWQ9Im1hcmtlcjMwMzktMSIKICAgICAgIHJlZlg9IjAiCiAgICAgICByZWZZPSIwIgogICAgICAgb3JpZW50PSJhdXRvIgogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iQXJyb3cxTWVuZCI+CiAgICAgIDxwYXRoCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjQsMCwwLC0wLjQsLTQsMCkiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIDAsMCA1LC01IC0xMi41LDAgNSw1IFoiCiAgICAgICAgIGlkPSJwYXRoMzAzNy0wIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpZD0ibWFya2VyMjg5MS02IgogICAgICAgcmVmWD0iMCIKICAgICAgIHJlZlk9IjAiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJBcnJvdzFNZW5kIj4KICAgICAgPHBhdGgKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNCwwLDAsLTAuNCwtNCwwKSIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Ik0gMCwwIDUsLTUgLTEyLjUsMCA1LDUgWiIKICAgICAgICAgaWQ9InBhdGgyODg5LTYiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L21hcmtlcj4KICAgIDxtYXJrZXIKICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IkFycm93MU1lbmQiCiAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgICByZWZZPSIwIgogICAgICAgcmVmWD0iMCIKICAgICAgIGlkPSJBcnJvdzFNZW5kLTgwIgogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGg4OTAtMCIKICAgICAgICAgZD0iTSAwLDAgNSwtNSAtMTIuNSwwIDUsNSBaIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNCwwLDAsLTAuNCwtNCwwKSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvbWFya2VyPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMi44Mjg0MjcxIgogICAgIGlua3NjYXBlOmN4PSItMTQwLjU1MDU2IgogICAgIGlua3NjYXBlOmN5PSItOC40MzI2NjQ2IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMDEiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii05IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGZpdC1tYXJnaW4tdG9wPSIxIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMSIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIxIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIxIgogICAgIGlua3NjYXBlOnNuYXAtZ3JpZHM9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC10ZXh0LWJhc2VsaW5lPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtb2JqZWN0LW1pZHBvaW50cz0idHJ1ZSIKICAgICB1bml0cz0icHgiCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIj4KICAgIDxpbmtzY2FwZTpncmlkCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBpZD0iZ3JpZDk2MjYiCiAgICAgICBvcmlnaW54PSItMzA3LjAyOTMzIgogICAgICAgb3JpZ2lueT0iLTU2Ni40NjA5NyIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE4NjUwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzE5LjU2MzcxLDE5MC42NzQ4KSI+CiAgICA8ZwogICAgICAgaWQ9Imc0Mzg5LTg5IgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjU1LC00NC45OTk5OTUpIj4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgxODY4LTc5IgogICAgICAgICBkPSJtIDY3LjUzNDM5MywtMTEzLjAzNTEgMjAsLTMwIgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXItZW5kOnVybCgjbWFya2VyMzAzOS0xKSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgxODcwLTMiCiAgICAgICAgIGQ9Im0gOTcuNTM0MzkzLC0xNDMuMDM1MSAxOS45OTk5OTcsMzAiCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO21hcmtlci1lbmQ6dXJsKCNtYXJrZXIyODkxLTYpIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDE4NzItOSIKICAgICAgICAgZD0iTSAxMTcuNTM0MzksLTEwMy4wMzUxIEggNjcuNTM0MzkzIgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXItZW5kOnVybCgjQXJyb3cxTWVuZC04MCkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K primitive topology key winding order>> | Winding   | The relative order in which vertices are defined within a primitive, used in the                                               |
+-- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Order     | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-polygons-basic facing determination>. |
+-- |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |           | This ordering has no specific start or end point.                                                                              |
+-- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------+
+--
+-- The diagrams are supported with mathematical definitions where the
+-- vertices (v) and primitives (p) are numbered starting from 0; v0 is the
+-- first vertex in the provided data and p0 is the first primitive in the
+-- set of primitives defined by the vertices and topology.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'
+newtype PrimitiveTopology = PrimitiveTopology Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'PRIMITIVE_TOPOLOGY_POINT_LIST' specifies a series of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-point-lists separate point primitives>.
+pattern PRIMITIVE_TOPOLOGY_POINT_LIST = PrimitiveTopology 0
+-- | 'PRIMITIVE_TOPOLOGY_LINE_LIST' specifies a series of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-line-lists separate line primitives>.
+pattern PRIMITIVE_TOPOLOGY_LINE_LIST = PrimitiveTopology 1
+-- | 'PRIMITIVE_TOPOLOGY_LINE_STRIP' specifies a series of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-line-strips connected line primitives>
+-- with consecutive lines sharing a vertex.
+pattern PRIMITIVE_TOPOLOGY_LINE_STRIP = PrimitiveTopology 2
+-- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_LIST' specifies a series of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-lists separate triangle primitives>.
+pattern PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = PrimitiveTopology 3
+-- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP' specifies a series of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-strips connected triangle primitives>
+-- with consecutive triangles sharing an edge.
+pattern PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = PrimitiveTopology 4
+-- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_FAN' specifies a series of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-fans connected triangle primitives>
+-- with all triangles sharing a common vertex.
+pattern PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = PrimitiveTopology 5
+-- | 'PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY' specifies a series of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-line-lists-with-adjacency separate line primitives with adjacency>.
+pattern PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = PrimitiveTopology 6
+-- | 'PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY' specifies a series of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-line-strips-with-adjacency connected line primitives with adjacency>,
+-- with consecutive primitives sharing three vertices.
+pattern PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = PrimitiveTopology 7
+-- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY' specifies a series of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-lists-with-adjacency separate triangle primitives with adjacency>.
+pattern PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = PrimitiveTopology 8
+-- | 'PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY' specifies
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-strips-with-adjacency connected triangle primitives with adjacency>,
+-- with consecutive triangles sharing an edge.
+pattern PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = PrimitiveTopology 9
+-- | 'PRIMITIVE_TOPOLOGY_PATCH_LIST' specifies
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-patch-lists separate patch primitives>.
+pattern PRIMITIVE_TOPOLOGY_PATCH_LIST = PrimitiveTopology 10
+{-# complete PRIMITIVE_TOPOLOGY_POINT_LIST,
+             PRIMITIVE_TOPOLOGY_LINE_LIST,
+             PRIMITIVE_TOPOLOGY_LINE_STRIP,
+             PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+             PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
+             PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
+             PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
+             PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
+             PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
+             PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY,
+             PRIMITIVE_TOPOLOGY_PATCH_LIST :: PrimitiveTopology #-}
+
+instance Show PrimitiveTopology where
+  showsPrec p = \case
+    PRIMITIVE_TOPOLOGY_POINT_LIST -> showString "PRIMITIVE_TOPOLOGY_POINT_LIST"
+    PRIMITIVE_TOPOLOGY_LINE_LIST -> showString "PRIMITIVE_TOPOLOGY_LINE_LIST"
+    PRIMITIVE_TOPOLOGY_LINE_STRIP -> showString "PRIMITIVE_TOPOLOGY_LINE_STRIP"
+    PRIMITIVE_TOPOLOGY_TRIANGLE_LIST -> showString "PRIMITIVE_TOPOLOGY_TRIANGLE_LIST"
+    PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP -> showString "PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP"
+    PRIMITIVE_TOPOLOGY_TRIANGLE_FAN -> showString "PRIMITIVE_TOPOLOGY_TRIANGLE_FAN"
+    PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY -> showString "PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY"
+    PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY -> showString "PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY"
+    PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY -> showString "PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY"
+    PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY -> showString "PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY"
+    PRIMITIVE_TOPOLOGY_PATCH_LIST -> showString "PRIMITIVE_TOPOLOGY_PATCH_LIST"
+    PrimitiveTopology x -> showParen (p >= 11) (showString "PrimitiveTopology " . showsPrec 11 x)
+
+instance Read PrimitiveTopology where
+  readPrec = parens (choose [("PRIMITIVE_TOPOLOGY_POINT_LIST", pure PRIMITIVE_TOPOLOGY_POINT_LIST)
+                            , ("PRIMITIVE_TOPOLOGY_LINE_LIST", pure PRIMITIVE_TOPOLOGY_LINE_LIST)
+                            , ("PRIMITIVE_TOPOLOGY_LINE_STRIP", pure PRIMITIVE_TOPOLOGY_LINE_STRIP)
+                            , ("PRIMITIVE_TOPOLOGY_TRIANGLE_LIST", pure PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
+                            , ("PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP", pure PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
+                            , ("PRIMITIVE_TOPOLOGY_TRIANGLE_FAN", pure PRIMITIVE_TOPOLOGY_TRIANGLE_FAN)
+                            , ("PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY", pure PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY)
+                            , ("PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY", pure PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY)
+                            , ("PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY", pure PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY)
+                            , ("PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY", pure PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY)
+                            , ("PRIMITIVE_TOPOLOGY_PATCH_LIST", pure PRIMITIVE_TOPOLOGY_PATCH_LIST)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PrimitiveTopology")
+                       v <- step readPrec
+                       pure (PrimitiveTopology v)))
+
diff --git a/src/Vulkan/Core10/Enums/QueryControlFlagBits.hs b/src/Vulkan/Core10/Enums/QueryControlFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/QueryControlFlagBits.hs
@@ -0,0 +1,49 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.QueryControlFlagBits  ( QueryControlFlagBits( QUERY_CONTROL_PRECISE_BIT
+                                                                       , ..
+                                                                       )
+                                                 , QueryControlFlags
+                                                 ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkQueryControlFlagBits - Bitmask specifying constraints on a query
+--
+-- = See Also
+--
+-- 'QueryControlFlags'
+newtype QueryControlFlagBits = QueryControlFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'QUERY_CONTROL_PRECISE_BIT' specifies the precision of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-occlusion occlusion queries>.
+pattern QUERY_CONTROL_PRECISE_BIT = QueryControlFlagBits 0x00000001
+
+type QueryControlFlags = QueryControlFlagBits
+
+instance Show QueryControlFlagBits where
+  showsPrec p = \case
+    QUERY_CONTROL_PRECISE_BIT -> showString "QUERY_CONTROL_PRECISE_BIT"
+    QueryControlFlagBits x -> showParen (p >= 11) (showString "QueryControlFlagBits 0x" . showHex x)
+
+instance Read QueryControlFlagBits where
+  readPrec = parens (choose [("QUERY_CONTROL_PRECISE_BIT", pure QUERY_CONTROL_PRECISE_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "QueryControlFlagBits")
+                       v <- step readPrec
+                       pure (QueryControlFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/QueryControlFlagBits.hs-boot b/src/Vulkan/Core10/Enums/QueryControlFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/QueryControlFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.QueryControlFlagBits  ( QueryControlFlagBits
+                                                 , QueryControlFlags
+                                                 ) where
+
+
+
+data QueryControlFlagBits
+
+type QueryControlFlags = QueryControlFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/QueryPipelineStatisticFlagBits.hs b/src/Vulkan/Core10/Enums/QueryPipelineStatisticFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/QueryPipelineStatisticFlagBits.hs
@@ -0,0 +1,189 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits  ( QueryPipelineStatisticFlagBits( QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT
+                                                                                           , QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT
+                                                                                           , QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT
+                                                                                           , QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT
+                                                                                           , QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT
+                                                                                           , QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT
+                                                                                           , QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT
+                                                                                           , QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT
+                                                                                           , QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT
+                                                                                           , QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT
+                                                                                           , QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
+                                                                                           , ..
+                                                                                           )
+                                                           , QueryPipelineStatisticFlags
+                                                           ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkQueryPipelineStatisticFlagBits - Bitmask specifying queried pipeline
+-- statistics
+--
+-- = Description
+--
+-- 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults'), or
+-- request it be put into host memory (via
+-- 'Vulkan.Core10.Query.getQueryPoolResults').
+--
+-- = See Also
+--
+-- 'QueryPipelineStatisticFlags'
+newtype QueryPipelineStatisticFlagBits = QueryPipelineStatisticFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT' specifies that
+-- queries managed by the pool will count the number of vertices processed
+-- by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing input assembly>
+-- stage. Vertices corresponding to incomplete primitives /may/ contribute
+-- to the count.
+pattern QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = QueryPipelineStatisticFlagBits 0x00000001
+-- | 'QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT' specifies that
+-- queries managed by the pool will count the number of primitives
+-- processed by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing input assembly>
+-- stage. If primitive restart is enabled, restarting the primitive
+-- topology has no effect on the count. Incomplete primitives /may/ be
+-- counted.
+pattern QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = QueryPipelineStatisticFlagBits 0x00000002
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-vertex-execution invoked>.
+pattern QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000004
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution invoked>.
+-- In the case of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry-invocations instanced geometry shaders>,
+-- the geometry shader invocations count is incremented for each separate
+-- instanced invocation.
+pattern QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000008
+-- | '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.
+pattern QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = QueryPipelineStatisticFlagBits 0x00000010
+-- | 'QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT' specifies that
+-- queries managed by the pool will count the number of primitives
+-- processed by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>
+-- stage of the pipeline. The counter’s value is incremented each time a
+-- primitive reaches the primitive clipping stage.
+pattern QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000020
+-- | 'QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT' specifies that
+-- queries managed by the pool will count the number of primitives output
+-- by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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.
+pattern QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = QueryPipelineStatisticFlagBits 0x00000040
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-execution invoked>.
+pattern QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000080
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-tessellation-control-execution invoked>.
+pattern QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = QueryPipelineStatisticFlagBits 0x00000100
+-- | '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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-tessellation-evaluation-execution invoked>.
+pattern QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000200
+-- | '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.
+pattern QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000400
+
+type QueryPipelineStatisticFlags = QueryPipelineStatisticFlagBits
+
+instance Show QueryPipelineStatisticFlagBits where
+  showsPrec p = \case
+    QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT -> showString "QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"
+    QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT -> showString "QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"
+    QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"
+    QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"
+    QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT -> showString "QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"
+    QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"
+    QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT -> showString "QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"
+    QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"
+    QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT -> showString "QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"
+    QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"
+    QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"
+    QueryPipelineStatisticFlagBits x -> showParen (p >= 11) (showString "QueryPipelineStatisticFlagBits 0x" . showHex x)
+
+instance Read QueryPipelineStatisticFlagBits where
+  readPrec = parens (choose [("QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT", pure QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
+                            , ("QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT", pure QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
+                            , ("QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
+                            , ("QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
+                            , ("QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT", pure QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
+                            , ("QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
+                            , ("QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT", pure QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
+                            , ("QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
+                            , ("QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT", pure QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
+                            , ("QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
+                            , ("QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "QueryPipelineStatisticFlagBits")
+                       v <- step readPrec
+                       pure (QueryPipelineStatisticFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/QueryPoolCreateFlags.hs b/src/Vulkan/Core10/Enums/QueryPoolCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/QueryPoolCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.QueryPoolCreateFlags  (QueryPoolCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkQueryPoolCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'QueryPoolCreateFlags' is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Query.QueryPoolCreateInfo'
+newtype QueryPoolCreateFlags = QueryPoolCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show QueryPoolCreateFlags where
+  showsPrec p = \case
+    QueryPoolCreateFlags x -> showParen (p >= 11) (showString "QueryPoolCreateFlags 0x" . showHex x)
+
+instance Read QueryPoolCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "QueryPoolCreateFlags")
+                       v <- step readPrec
+                       pure (QueryPoolCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/QueryResultFlagBits.hs b/src/Vulkan/Core10/Enums/QueryResultFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/QueryResultFlagBits.hs
@@ -0,0 +1,69 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.QueryResultFlagBits  ( QueryResultFlagBits( QUERY_RESULT_64_BIT
+                                                                     , QUERY_RESULT_WAIT_BIT
+                                                                     , QUERY_RESULT_WITH_AVAILABILITY_BIT
+                                                                     , QUERY_RESULT_PARTIAL_BIT
+                                                                     , ..
+                                                                     )
+                                                , QueryResultFlags
+                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkQueryResultFlagBits - Bitmask specifying how and when query results
+-- are returned
+--
+-- = See Also
+--
+-- 'QueryResultFlags'
+newtype QueryResultFlagBits = QueryResultFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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 QUERY_RESULT_64_BIT = QueryResultFlagBits 0x00000001
+-- | 'QUERY_RESULT_WAIT_BIT' specifies that Vulkan will wait for each query’s
+-- status to become available before retrieving its results.
+pattern QUERY_RESULT_WAIT_BIT = QueryResultFlagBits 0x00000002
+-- | 'QUERY_RESULT_WITH_AVAILABILITY_BIT' specifies that the availability
+-- status accompanies the results.
+pattern QUERY_RESULT_WITH_AVAILABILITY_BIT = QueryResultFlagBits 0x00000004
+-- | 'QUERY_RESULT_PARTIAL_BIT' specifies that returning partial results is
+-- acceptable.
+pattern QUERY_RESULT_PARTIAL_BIT = QueryResultFlagBits 0x00000008
+
+type QueryResultFlags = QueryResultFlagBits
+
+instance Show QueryResultFlagBits where
+  showsPrec p = \case
+    QUERY_RESULT_64_BIT -> showString "QUERY_RESULT_64_BIT"
+    QUERY_RESULT_WAIT_BIT -> showString "QUERY_RESULT_WAIT_BIT"
+    QUERY_RESULT_WITH_AVAILABILITY_BIT -> showString "QUERY_RESULT_WITH_AVAILABILITY_BIT"
+    QUERY_RESULT_PARTIAL_BIT -> showString "QUERY_RESULT_PARTIAL_BIT"
+    QueryResultFlagBits x -> showParen (p >= 11) (showString "QueryResultFlagBits 0x" . showHex x)
+
+instance Read QueryResultFlagBits where
+  readPrec = parens (choose [("QUERY_RESULT_64_BIT", pure QUERY_RESULT_64_BIT)
+                            , ("QUERY_RESULT_WAIT_BIT", pure QUERY_RESULT_WAIT_BIT)
+                            , ("QUERY_RESULT_WITH_AVAILABILITY_BIT", pure QUERY_RESULT_WITH_AVAILABILITY_BIT)
+                            , ("QUERY_RESULT_PARTIAL_BIT", pure QUERY_RESULT_PARTIAL_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "QueryResultFlagBits")
+                       v <- step readPrec
+                       pure (QueryResultFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/QueryResultFlagBits.hs-boot b/src/Vulkan/Core10/Enums/QueryResultFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/QueryResultFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.QueryResultFlagBits  ( QueryResultFlagBits
+                                                , QueryResultFlags
+                                                ) where
+
+
+
+data QueryResultFlagBits
+
+type QueryResultFlags = QueryResultFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/QueryType.hs b/src/Vulkan/Core10/Enums/QueryType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/QueryType.hs
@@ -0,0 +1,97 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.QueryType  (QueryType( QUERY_TYPE_OCCLUSION
+                                                , QUERY_TYPE_PIPELINE_STATISTICS
+                                                , QUERY_TYPE_TIMESTAMP
+                                                , QUERY_TYPE_PERFORMANCE_QUERY_INTEL
+                                                , QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
+                                                , QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
+                                                , QUERY_TYPE_PERFORMANCE_QUERY_KHR
+                                                , QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
+                                                , ..
+                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkQueryType - Specify the type of queries managed by a query pool
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Query.QueryPoolCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdWriteAccelerationStructuresPropertiesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdWriteAccelerationStructuresPropertiesNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.writeAccelerationStructuresPropertiesKHR'
+newtype QueryType = QueryType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'QUERY_TYPE_OCCLUSION' specifies an
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-occlusion occlusion query>.
+pattern QUERY_TYPE_OCCLUSION = QueryType 0
+-- | 'QUERY_TYPE_PIPELINE_STATISTICS' specifies a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-pipestats pipeline statistics query>.
+pattern QUERY_TYPE_PIPELINE_STATISTICS = QueryType 1
+-- | 'QUERY_TYPE_TIMESTAMP' specifies a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-timestamps timestamp query>.
+pattern QUERY_TYPE_TIMESTAMP = QueryType 2
+-- | 'QUERY_TYPE_PERFORMANCE_QUERY_INTEL' specifies a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-performance-intel Intel performance query>.
+pattern QUERY_TYPE_PERFORMANCE_QUERY_INTEL = QueryType 1000210000
+-- | 'QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR' specifies a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-copying ray tracing serialization acceleration structure size query>
+pattern QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR = QueryType 1000150000
+-- | 'QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR' specifies a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-copying ray tracing acceleration structure size query>.
+pattern QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = QueryType 1000165000
+-- | 'QUERY_TYPE_PERFORMANCE_QUERY_KHR' specifies a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-performance performance query>.
+pattern QUERY_TYPE_PERFORMANCE_QUERY_KHR = QueryType 1000116000
+-- | 'QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT' specifies a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-transform-feedback transform feedback query>.
+pattern QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = QueryType 1000028004
+{-# complete QUERY_TYPE_OCCLUSION,
+             QUERY_TYPE_PIPELINE_STATISTICS,
+             QUERY_TYPE_TIMESTAMP,
+             QUERY_TYPE_PERFORMANCE_QUERY_INTEL,
+             QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR,
+             QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR,
+             QUERY_TYPE_PERFORMANCE_QUERY_KHR,
+             QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT :: QueryType #-}
+
+instance Show QueryType where
+  showsPrec p = \case
+    QUERY_TYPE_OCCLUSION -> showString "QUERY_TYPE_OCCLUSION"
+    QUERY_TYPE_PIPELINE_STATISTICS -> showString "QUERY_TYPE_PIPELINE_STATISTICS"
+    QUERY_TYPE_TIMESTAMP -> showString "QUERY_TYPE_TIMESTAMP"
+    QUERY_TYPE_PERFORMANCE_QUERY_INTEL -> showString "QUERY_TYPE_PERFORMANCE_QUERY_INTEL"
+    QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR -> showString "QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR"
+    QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR -> showString "QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR"
+    QUERY_TYPE_PERFORMANCE_QUERY_KHR -> showString "QUERY_TYPE_PERFORMANCE_QUERY_KHR"
+    QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT -> showString "QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT"
+    QueryType x -> showParen (p >= 11) (showString "QueryType " . showsPrec 11 x)
+
+instance Read QueryType where
+  readPrec = parens (choose [("QUERY_TYPE_OCCLUSION", pure QUERY_TYPE_OCCLUSION)
+                            , ("QUERY_TYPE_PIPELINE_STATISTICS", pure QUERY_TYPE_PIPELINE_STATISTICS)
+                            , ("QUERY_TYPE_TIMESTAMP", pure QUERY_TYPE_TIMESTAMP)
+                            , ("QUERY_TYPE_PERFORMANCE_QUERY_INTEL", pure QUERY_TYPE_PERFORMANCE_QUERY_INTEL)
+                            , ("QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR", pure QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR)
+                            , ("QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR", pure QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR)
+                            , ("QUERY_TYPE_PERFORMANCE_QUERY_KHR", pure QUERY_TYPE_PERFORMANCE_QUERY_KHR)
+                            , ("QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT", pure QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "QueryType")
+                       v <- step readPrec
+                       pure (QueryType v)))
+
diff --git a/src/Vulkan/Core10/Enums/QueryType.hs-boot b/src/Vulkan/Core10/Enums/QueryType.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/QueryType.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.QueryType  (QueryType) where
+
+
+
+data QueryType
+
diff --git a/src/Vulkan/Core10/Enums/QueueFlagBits.hs b/src/Vulkan/Core10/Enums/QueueFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/QueueFlagBits.hs
@@ -0,0 +1,117 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.QueueFlagBits  ( QueueFlagBits( QUEUE_GRAPHICS_BIT
+                                                         , QUEUE_COMPUTE_BIT
+                                                         , QUEUE_TRANSFER_BIT
+                                                         , QUEUE_SPARSE_BINDING_BIT
+                                                         , QUEUE_PROTECTED_BIT
+                                                         , ..
+                                                         )
+                                          , QueueFlags
+                                          ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkQueueFlagBits - Bitmask specifying capabilities of queues in a queue
+-- family
+--
+-- = Description
+--
+-- -   'QUEUE_GRAPHICS_BIT' specifies that queues in this queue family
+--     support graphics operations.
+--
+-- -   'QUEUE_COMPUTE_BIT' specifies that queues in this queue family
+--     support compute operations.
+--
+-- -   'QUEUE_TRANSFER_BIT' specifies that queues in this queue family
+--     support transfer operations.
+--
+-- -   'QUEUE_SPARSE_BINDING_BIT' specifies that queues in this queue
+--     family support sparse memory management operations (see
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory Sparse Resources>).
+--     If any of the sparse resource features are enabled, then at least
+--     one queue family /must/ support this bit.
+--
+-- -   if 'QUEUE_PROTECTED_BIT' is set, then the queues in this queue
+--     family support the
+--     'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DEVICE_QUEUE_CREATE_PROTECTED_BIT'
+--     bit. (see
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-protected-memory Protected Memory>).
+--     If the protected memory physical device feature is supported, then
+--     at least one queue family of at least one physical device exposed by
+--     the implementation /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.
+--
+-- Furthermore, if the protected memory physical device feature is
+-- supported, then at least one queue family of at least one physical
+-- device exposed by the implementation /must/ support graphics operations,
+-- compute operations, and protected memory 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
+-- 'QUEUE_GRAPHICS_BIT' or 'QUEUE_COMPUTE_BIT', then reporting the
+-- 'QUEUE_TRANSFER_BIT' capability separately for that queue family is
+-- /optional/.
+--
+-- For further details see
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-queues Queues>.
+--
+-- = See Also
+--
+-- 'QueueFlags'
+newtype QueueFlagBits = QueueFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_GRAPHICS_BIT"
+pattern QUEUE_GRAPHICS_BIT = QueueFlagBits 0x00000001
+-- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_COMPUTE_BIT"
+pattern QUEUE_COMPUTE_BIT = QueueFlagBits 0x00000002
+-- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_TRANSFER_BIT"
+pattern QUEUE_TRANSFER_BIT = QueueFlagBits 0x00000004
+-- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_SPARSE_BINDING_BIT"
+pattern QUEUE_SPARSE_BINDING_BIT = QueueFlagBits 0x00000008
+-- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_PROTECTED_BIT"
+pattern QUEUE_PROTECTED_BIT = QueueFlagBits 0x00000010
+
+type QueueFlags = QueueFlagBits
+
+instance Show QueueFlagBits where
+  showsPrec p = \case
+    QUEUE_GRAPHICS_BIT -> showString "QUEUE_GRAPHICS_BIT"
+    QUEUE_COMPUTE_BIT -> showString "QUEUE_COMPUTE_BIT"
+    QUEUE_TRANSFER_BIT -> showString "QUEUE_TRANSFER_BIT"
+    QUEUE_SPARSE_BINDING_BIT -> showString "QUEUE_SPARSE_BINDING_BIT"
+    QUEUE_PROTECTED_BIT -> showString "QUEUE_PROTECTED_BIT"
+    QueueFlagBits x -> showParen (p >= 11) (showString "QueueFlagBits 0x" . showHex x)
+
+instance Read QueueFlagBits where
+  readPrec = parens (choose [("QUEUE_GRAPHICS_BIT", pure QUEUE_GRAPHICS_BIT)
+                            , ("QUEUE_COMPUTE_BIT", pure QUEUE_COMPUTE_BIT)
+                            , ("QUEUE_TRANSFER_BIT", pure QUEUE_TRANSFER_BIT)
+                            , ("QUEUE_SPARSE_BINDING_BIT", pure QUEUE_SPARSE_BINDING_BIT)
+                            , ("QUEUE_PROTECTED_BIT", pure QUEUE_PROTECTED_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "QueueFlagBits")
+                       v <- step readPrec
+                       pure (QueueFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/RenderPassCreateFlagBits.hs b/src/Vulkan/Core10/Enums/RenderPassCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/RenderPassCreateFlagBits.hs
@@ -0,0 +1,51 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.RenderPassCreateFlagBits  ( RenderPassCreateFlagBits( RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM
+                                                                               , ..
+                                                                               )
+                                                     , RenderPassCreateFlags
+                                                     ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkRenderPassCreateFlagBits - Bitmask specifying additional properties of
+-- a renderpass
+--
+-- = See Also
+--
+-- 'RenderPassCreateFlags'
+newtype RenderPassCreateFlagBits = RenderPassCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM' specifies that the created
+-- renderpass is compatible with
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>.
+pattern RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM = RenderPassCreateFlagBits 0x00000002
+
+type RenderPassCreateFlags = RenderPassCreateFlagBits
+
+instance Show RenderPassCreateFlagBits where
+  showsPrec p = \case
+    RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM -> showString "RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM"
+    RenderPassCreateFlagBits x -> showParen (p >= 11) (showString "RenderPassCreateFlagBits 0x" . showHex x)
+
+instance Read RenderPassCreateFlagBits where
+  readPrec = parens (choose [("RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM", pure RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "RenderPassCreateFlagBits")
+                       v <- step readPrec
+                       pure (RenderPassCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/Result.hs b/src/Vulkan/Core10/Enums/Result.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/Result.hs
@@ -0,0 +1,349 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.Result  (Result( SUCCESS
+                                          , NOT_READY
+                                          , TIMEOUT
+                                          , EVENT_SET
+                                          , EVENT_RESET
+                                          , INCOMPLETE
+                                          , ERROR_OUT_OF_HOST_MEMORY
+                                          , ERROR_OUT_OF_DEVICE_MEMORY
+                                          , ERROR_INITIALIZATION_FAILED
+                                          , ERROR_DEVICE_LOST
+                                          , ERROR_MEMORY_MAP_FAILED
+                                          , ERROR_LAYER_NOT_PRESENT
+                                          , ERROR_EXTENSION_NOT_PRESENT
+                                          , ERROR_FEATURE_NOT_PRESENT
+                                          , ERROR_INCOMPATIBLE_DRIVER
+                                          , ERROR_TOO_MANY_OBJECTS
+                                          , ERROR_FORMAT_NOT_SUPPORTED
+                                          , ERROR_FRAGMENTED_POOL
+                                          , ERROR_UNKNOWN
+                                          , PIPELINE_COMPILE_REQUIRED_EXT
+                                          , OPERATION_NOT_DEFERRED_KHR
+                                          , OPERATION_DEFERRED_KHR
+                                          , THREAD_DONE_KHR
+                                          , THREAD_IDLE_KHR
+                                          , ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT
+                                          , ERROR_NOT_PERMITTED_EXT
+                                          , ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT
+                                          , ERROR_INCOMPATIBLE_VERSION_KHR
+                                          , ERROR_INVALID_SHADER_NV
+                                          , ERROR_VALIDATION_FAILED_EXT
+                                          , ERROR_INCOMPATIBLE_DISPLAY_KHR
+                                          , ERROR_OUT_OF_DATE_KHR
+                                          , SUBOPTIMAL_KHR
+                                          , ERROR_NATIVE_WINDOW_IN_USE_KHR
+                                          , ERROR_SURFACE_LOST_KHR
+                                          , ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
+                                          , ERROR_FRAGMENTATION
+                                          , ERROR_INVALID_EXTERNAL_HANDLE
+                                          , ERROR_OUT_OF_POOL_MEMORY
+                                          , ..
+                                          )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkResult - Vulkan command return codes
+--
+-- = Description
+--
+-- 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.
+--
+-- 'ERROR_UNKNOWN' will be returned by an implementation when an unexpected
+-- error occurs that cannot be attributed to valid behavior of the
+-- application and implementation. Under these conditions, it /may/ be
+-- returned from any command returning a 'Result'.
+--
+-- Note
+--
+-- 'ERROR_UNKNOWN' is not expected to ever be returned if the application
+-- behavior is valid, and if the implementation is bug-free. If
+-- 'ERROR_UNKNOWN' is received, the application should be checked against
+-- the latest validation layers to verify correct behavior as much as
+-- possible. If no issues are identified it could be an implementation
+-- issue, and the implementor should be contacted for support.
+--
+-- 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
+-- 'Vulkan.Core10.CommandBuffer.endCommandBuffer'.
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'
+newtype Result = Result Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'SUCCESS' Command successfully completed
+pattern SUCCESS = Result 0
+-- | 'NOT_READY' A fence or query has not yet completed
+pattern NOT_READY = Result 1
+-- | 'TIMEOUT' A wait operation has not completed in the specified time
+pattern TIMEOUT = Result 2
+-- | 'EVENT_SET' An event is signaled
+pattern EVENT_SET = Result 3
+-- | 'EVENT_RESET' An event is unsignaled
+pattern EVENT_RESET = Result 4
+-- | 'INCOMPLETE' A return array was too small for the result
+pattern INCOMPLETE = Result 5
+-- | 'ERROR_OUT_OF_HOST_MEMORY' A host memory allocation has failed.
+pattern ERROR_OUT_OF_HOST_MEMORY = Result (-1)
+-- | 'ERROR_OUT_OF_DEVICE_MEMORY' A device memory allocation has failed.
+pattern ERROR_OUT_OF_DEVICE_MEMORY = Result (-2)
+-- | 'ERROR_INITIALIZATION_FAILED' Initialization of an object could not be
+-- completed for implementation-specific reasons.
+pattern ERROR_INITIALIZATION_FAILED = Result (-3)
+-- | 'ERROR_DEVICE_LOST' The logical or physical device has been lost. See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>
+pattern ERROR_DEVICE_LOST = Result (-4)
+-- | 'ERROR_MEMORY_MAP_FAILED' Mapping of a memory object has failed.
+pattern ERROR_MEMORY_MAP_FAILED = Result (-5)
+-- | 'ERROR_LAYER_NOT_PRESENT' A requested layer is not present or could not
+-- be loaded.
+pattern ERROR_LAYER_NOT_PRESENT = Result (-6)
+-- | 'ERROR_EXTENSION_NOT_PRESENT' A requested extension is not supported.
+pattern ERROR_EXTENSION_NOT_PRESENT = Result (-7)
+-- | 'ERROR_FEATURE_NOT_PRESENT' A requested feature is not supported.
+pattern ERROR_FEATURE_NOT_PRESENT = Result (-8)
+-- | 'ERROR_INCOMPATIBLE_DRIVER' The requested version of Vulkan is not
+-- supported by the driver or is otherwise incompatible for
+-- implementation-specific reasons.
+pattern ERROR_INCOMPATIBLE_DRIVER = Result (-9)
+-- | 'ERROR_TOO_MANY_OBJECTS' Too many objects of the type have already been
+-- created.
+pattern ERROR_TOO_MANY_OBJECTS = Result (-10)
+-- | 'ERROR_FORMAT_NOT_SUPPORTED' A requested format is not supported on this
+-- device.
+pattern ERROR_FORMAT_NOT_SUPPORTED = Result (-11)
+-- | '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 accommodate the
+-- new allocation. This /should/ be returned in preference to
+-- 'ERROR_OUT_OF_POOL_MEMORY', but only if the implementation is certain
+-- that the pool allocation failure was due to fragmentation.
+pattern ERROR_FRAGMENTED_POOL = Result (-12)
+-- | 'ERROR_UNKNOWN' An unknown error has occurred; either the application
+-- has provided invalid input, or an implementation failure has occurred.
+pattern ERROR_UNKNOWN = Result (-13)
+-- | 'PIPELINE_COMPILE_REQUIRED_EXT' A requested pipeline creation would have
+-- required compilation, but the application requested compilation to not
+-- be performed.
+pattern PIPELINE_COMPILE_REQUIRED_EXT = Result 1000297000
+-- | 'OPERATION_NOT_DEFERRED_KHR' A deferred operation was requested and no
+-- operations were deferred.
+pattern OPERATION_NOT_DEFERRED_KHR = Result 1000268003
+-- | 'OPERATION_DEFERRED_KHR' A deferred operation was requested and at least
+-- some of the work was deferred.
+pattern OPERATION_DEFERRED_KHR = Result 1000268002
+-- | 'THREAD_DONE_KHR' A deferred operation is not complete but there is no
+-- work remaining to assign to additional threads.
+pattern THREAD_DONE_KHR = Result 1000268001
+-- | 'THREAD_IDLE_KHR' A deferred operation is not complete but there is
+-- currently no work for this thread to do at the time of this call.
+pattern THREAD_IDLE_KHR = Result 1000268000
+-- | 'ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT' An operation on a swapchain
+-- created with
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT'
+-- failed as it did not have exlusive full-screen access. This /may/ occur
+-- due to implementation-dependent reasons, outside of the application’s
+-- control.
+pattern ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = Result (-1000255000)
+-- No documentation found for Nested "VkResult" "VK_ERROR_NOT_PERMITTED_EXT"
+pattern ERROR_NOT_PERMITTED_EXT = Result (-1000174001)
+-- No documentation found for Nested "VkResult" "VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT"
+pattern ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = Result (-1000158000)
+-- No documentation found for Nested "VkResult" "VK_ERROR_INCOMPATIBLE_VERSION_KHR"
+pattern ERROR_INCOMPATIBLE_VERSION_KHR = Result (-1000150000)
+-- | 'ERROR_INVALID_SHADER_NV' One or more shaders failed to compile or link.
+-- More details are reported back to the application via
+-- @VK_EXT_debug_report@ if enabled.
+pattern ERROR_INVALID_SHADER_NV = Result (-1000012000)
+-- No documentation found for Nested "VkResult" "VK_ERROR_VALIDATION_FAILED_EXT"
+pattern ERROR_VALIDATION_FAILED_EXT = Result (-1000011001)
+-- | 'ERROR_INCOMPATIBLE_DISPLAY_KHR' The display used by a swapchain does
+-- not use the same presentable image layout, or is incompatible in a way
+-- that prevents sharing an image.
+pattern ERROR_INCOMPATIBLE_DISPLAY_KHR = Result (-1000003001)
+-- | 'ERROR_OUT_OF_DATE_KHR' A surface has changed in such a way that it is
+-- no longer compatible with the swapchain, and further presentation
+-- requests using the swapchain will fail. Applications /must/ query the
+-- new surface properties and recreate their swapchain if they wish to
+-- continue presenting to the surface.
+pattern ERROR_OUT_OF_DATE_KHR = Result (-1000001004)
+-- | 'SUBOPTIMAL_KHR' A swapchain no longer matches the surface properties
+-- exactly, but /can/ still be used to present to the surface successfully.
+pattern SUBOPTIMAL_KHR = Result 1000001003
+-- | 'ERROR_NATIVE_WINDOW_IN_USE_KHR' The requested window is already in use
+-- by Vulkan or another API in a manner which prevents it from being used
+-- again.
+pattern ERROR_NATIVE_WINDOW_IN_USE_KHR = Result (-1000000001)
+-- | 'ERROR_SURFACE_LOST_KHR' A surface is no longer available.
+pattern ERROR_SURFACE_LOST_KHR = Result (-1000000000)
+-- | 'ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS' A buffer creation or memory
+-- allocation failed because the requested address is not available. A
+-- shader group handle assignment failed because the requested shader group
+-- handle information is no longer valid.
+pattern ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = Result (-1000257000)
+-- | 'ERROR_FRAGMENTATION' A descriptor pool creation has failed due to
+-- fragmentation.
+pattern ERROR_FRAGMENTATION = Result (-1000161000)
+-- | 'ERROR_INVALID_EXTERNAL_HANDLE' An external handle is not a valid handle
+-- of the specified type.
+pattern ERROR_INVALID_EXTERNAL_HANDLE = Result (-1000072003)
+-- | 'ERROR_OUT_OF_POOL_MEMORY' A pool memory allocation has failed. This
+-- /must/ only be returned if no attempt to allocate host or device memory
+-- was made to accommodate the new allocation. If the failure was
+-- definitely due to fragmentation of the pool, 'ERROR_FRAGMENTED_POOL'
+-- /should/ be returned instead.
+pattern ERROR_OUT_OF_POOL_MEMORY = Result (-1000069000)
+{-# complete SUCCESS,
+             NOT_READY,
+             TIMEOUT,
+             EVENT_SET,
+             EVENT_RESET,
+             INCOMPLETE,
+             ERROR_OUT_OF_HOST_MEMORY,
+             ERROR_OUT_OF_DEVICE_MEMORY,
+             ERROR_INITIALIZATION_FAILED,
+             ERROR_DEVICE_LOST,
+             ERROR_MEMORY_MAP_FAILED,
+             ERROR_LAYER_NOT_PRESENT,
+             ERROR_EXTENSION_NOT_PRESENT,
+             ERROR_FEATURE_NOT_PRESENT,
+             ERROR_INCOMPATIBLE_DRIVER,
+             ERROR_TOO_MANY_OBJECTS,
+             ERROR_FORMAT_NOT_SUPPORTED,
+             ERROR_FRAGMENTED_POOL,
+             ERROR_UNKNOWN,
+             PIPELINE_COMPILE_REQUIRED_EXT,
+             OPERATION_NOT_DEFERRED_KHR,
+             OPERATION_DEFERRED_KHR,
+             THREAD_DONE_KHR,
+             THREAD_IDLE_KHR,
+             ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT,
+             ERROR_NOT_PERMITTED_EXT,
+             ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT,
+             ERROR_INCOMPATIBLE_VERSION_KHR,
+             ERROR_INVALID_SHADER_NV,
+             ERROR_VALIDATION_FAILED_EXT,
+             ERROR_INCOMPATIBLE_DISPLAY_KHR,
+             ERROR_OUT_OF_DATE_KHR,
+             SUBOPTIMAL_KHR,
+             ERROR_NATIVE_WINDOW_IN_USE_KHR,
+             ERROR_SURFACE_LOST_KHR,
+             ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS,
+             ERROR_FRAGMENTATION,
+             ERROR_INVALID_EXTERNAL_HANDLE,
+             ERROR_OUT_OF_POOL_MEMORY :: Result #-}
+
+instance Show Result where
+  showsPrec p = \case
+    SUCCESS -> showString "SUCCESS"
+    NOT_READY -> showString "NOT_READY"
+    TIMEOUT -> showString "TIMEOUT"
+    EVENT_SET -> showString "EVENT_SET"
+    EVENT_RESET -> showString "EVENT_RESET"
+    INCOMPLETE -> showString "INCOMPLETE"
+    ERROR_OUT_OF_HOST_MEMORY -> showString "ERROR_OUT_OF_HOST_MEMORY"
+    ERROR_OUT_OF_DEVICE_MEMORY -> showString "ERROR_OUT_OF_DEVICE_MEMORY"
+    ERROR_INITIALIZATION_FAILED -> showString "ERROR_INITIALIZATION_FAILED"
+    ERROR_DEVICE_LOST -> showString "ERROR_DEVICE_LOST"
+    ERROR_MEMORY_MAP_FAILED -> showString "ERROR_MEMORY_MAP_FAILED"
+    ERROR_LAYER_NOT_PRESENT -> showString "ERROR_LAYER_NOT_PRESENT"
+    ERROR_EXTENSION_NOT_PRESENT -> showString "ERROR_EXTENSION_NOT_PRESENT"
+    ERROR_FEATURE_NOT_PRESENT -> showString "ERROR_FEATURE_NOT_PRESENT"
+    ERROR_INCOMPATIBLE_DRIVER -> showString "ERROR_INCOMPATIBLE_DRIVER"
+    ERROR_TOO_MANY_OBJECTS -> showString "ERROR_TOO_MANY_OBJECTS"
+    ERROR_FORMAT_NOT_SUPPORTED -> showString "ERROR_FORMAT_NOT_SUPPORTED"
+    ERROR_FRAGMENTED_POOL -> showString "ERROR_FRAGMENTED_POOL"
+    ERROR_UNKNOWN -> showString "ERROR_UNKNOWN"
+    PIPELINE_COMPILE_REQUIRED_EXT -> showString "PIPELINE_COMPILE_REQUIRED_EXT"
+    OPERATION_NOT_DEFERRED_KHR -> showString "OPERATION_NOT_DEFERRED_KHR"
+    OPERATION_DEFERRED_KHR -> showString "OPERATION_DEFERRED_KHR"
+    THREAD_DONE_KHR -> showString "THREAD_DONE_KHR"
+    THREAD_IDLE_KHR -> showString "THREAD_IDLE_KHR"
+    ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT -> showString "ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT"
+    ERROR_NOT_PERMITTED_EXT -> showString "ERROR_NOT_PERMITTED_EXT"
+    ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT -> showString "ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT"
+    ERROR_INCOMPATIBLE_VERSION_KHR -> showString "ERROR_INCOMPATIBLE_VERSION_KHR"
+    ERROR_INVALID_SHADER_NV -> showString "ERROR_INVALID_SHADER_NV"
+    ERROR_VALIDATION_FAILED_EXT -> showString "ERROR_VALIDATION_FAILED_EXT"
+    ERROR_INCOMPATIBLE_DISPLAY_KHR -> showString "ERROR_INCOMPATIBLE_DISPLAY_KHR"
+    ERROR_OUT_OF_DATE_KHR -> showString "ERROR_OUT_OF_DATE_KHR"
+    SUBOPTIMAL_KHR -> showString "SUBOPTIMAL_KHR"
+    ERROR_NATIVE_WINDOW_IN_USE_KHR -> showString "ERROR_NATIVE_WINDOW_IN_USE_KHR"
+    ERROR_SURFACE_LOST_KHR -> showString "ERROR_SURFACE_LOST_KHR"
+    ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS -> showString "ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS"
+    ERROR_FRAGMENTATION -> showString "ERROR_FRAGMENTATION"
+    ERROR_INVALID_EXTERNAL_HANDLE -> showString "ERROR_INVALID_EXTERNAL_HANDLE"
+    ERROR_OUT_OF_POOL_MEMORY -> showString "ERROR_OUT_OF_POOL_MEMORY"
+    Result x -> showParen (p >= 11) (showString "Result " . showsPrec 11 x)
+
+instance Read Result where
+  readPrec = parens (choose [("SUCCESS", pure SUCCESS)
+                            , ("NOT_READY", pure NOT_READY)
+                            , ("TIMEOUT", pure TIMEOUT)
+                            , ("EVENT_SET", pure EVENT_SET)
+                            , ("EVENT_RESET", pure EVENT_RESET)
+                            , ("INCOMPLETE", pure INCOMPLETE)
+                            , ("ERROR_OUT_OF_HOST_MEMORY", pure ERROR_OUT_OF_HOST_MEMORY)
+                            , ("ERROR_OUT_OF_DEVICE_MEMORY", pure ERROR_OUT_OF_DEVICE_MEMORY)
+                            , ("ERROR_INITIALIZATION_FAILED", pure ERROR_INITIALIZATION_FAILED)
+                            , ("ERROR_DEVICE_LOST", pure ERROR_DEVICE_LOST)
+                            , ("ERROR_MEMORY_MAP_FAILED", pure ERROR_MEMORY_MAP_FAILED)
+                            , ("ERROR_LAYER_NOT_PRESENT", pure ERROR_LAYER_NOT_PRESENT)
+                            , ("ERROR_EXTENSION_NOT_PRESENT", pure ERROR_EXTENSION_NOT_PRESENT)
+                            , ("ERROR_FEATURE_NOT_PRESENT", pure ERROR_FEATURE_NOT_PRESENT)
+                            , ("ERROR_INCOMPATIBLE_DRIVER", pure ERROR_INCOMPATIBLE_DRIVER)
+                            , ("ERROR_TOO_MANY_OBJECTS", pure ERROR_TOO_MANY_OBJECTS)
+                            , ("ERROR_FORMAT_NOT_SUPPORTED", pure ERROR_FORMAT_NOT_SUPPORTED)
+                            , ("ERROR_FRAGMENTED_POOL", pure ERROR_FRAGMENTED_POOL)
+                            , ("ERROR_UNKNOWN", pure ERROR_UNKNOWN)
+                            , ("PIPELINE_COMPILE_REQUIRED_EXT", pure PIPELINE_COMPILE_REQUIRED_EXT)
+                            , ("OPERATION_NOT_DEFERRED_KHR", pure OPERATION_NOT_DEFERRED_KHR)
+                            , ("OPERATION_DEFERRED_KHR", pure OPERATION_DEFERRED_KHR)
+                            , ("THREAD_DONE_KHR", pure THREAD_DONE_KHR)
+                            , ("THREAD_IDLE_KHR", pure THREAD_IDLE_KHR)
+                            , ("ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT", pure ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT)
+                            , ("ERROR_NOT_PERMITTED_EXT", pure ERROR_NOT_PERMITTED_EXT)
+                            , ("ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT", pure ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT)
+                            , ("ERROR_INCOMPATIBLE_VERSION_KHR", pure ERROR_INCOMPATIBLE_VERSION_KHR)
+                            , ("ERROR_INVALID_SHADER_NV", pure ERROR_INVALID_SHADER_NV)
+                            , ("ERROR_VALIDATION_FAILED_EXT", pure ERROR_VALIDATION_FAILED_EXT)
+                            , ("ERROR_INCOMPATIBLE_DISPLAY_KHR", pure ERROR_INCOMPATIBLE_DISPLAY_KHR)
+                            , ("ERROR_OUT_OF_DATE_KHR", pure ERROR_OUT_OF_DATE_KHR)
+                            , ("SUBOPTIMAL_KHR", pure SUBOPTIMAL_KHR)
+                            , ("ERROR_NATIVE_WINDOW_IN_USE_KHR", pure ERROR_NATIVE_WINDOW_IN_USE_KHR)
+                            , ("ERROR_SURFACE_LOST_KHR", pure ERROR_SURFACE_LOST_KHR)
+                            , ("ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS", pure ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS)
+                            , ("ERROR_FRAGMENTATION", pure ERROR_FRAGMENTATION)
+                            , ("ERROR_INVALID_EXTERNAL_HANDLE", pure ERROR_INVALID_EXTERNAL_HANDLE)
+                            , ("ERROR_OUT_OF_POOL_MEMORY", pure ERROR_OUT_OF_POOL_MEMORY)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "Result")
+                       v <- step readPrec
+                       pure (Result v)))
+
diff --git a/src/Vulkan/Core10/Enums/Result.hs-boot b/src/Vulkan/Core10/Enums/Result.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/Result.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.Result  (Result) where
+
+
+
+data Result
+
diff --git a/src/Vulkan/Core10/Enums/SampleCountFlagBits.hs b/src/Vulkan/Core10/Enums/SampleCountFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SampleCountFlagBits.hs
@@ -0,0 +1,88 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SampleCountFlagBits  ( SampleCountFlagBits( SAMPLE_COUNT_1_BIT
+                                                                     , SAMPLE_COUNT_2_BIT
+                                                                     , SAMPLE_COUNT_4_BIT
+                                                                     , SAMPLE_COUNT_8_BIT
+                                                                     , SAMPLE_COUNT_16_BIT
+                                                                     , SAMPLE_COUNT_32_BIT
+                                                                     , SAMPLE_COUNT_64_BIT
+                                                                     , ..
+                                                                     )
+                                                , SampleCountFlags
+                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkSampleCountFlagBits - Bitmask specifying sample counts supported for
+-- an image used for storage operations
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pass.AttachmentDescription',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',
+-- 'Vulkan.Extensions.VK_NV_coverage_reduction_mode.FramebufferMixedSamplesCombinationNV',
+-- 'Vulkan.Core10.Image.ImageCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',
+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo',
+-- 'SampleCountFlags',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties'
+newtype SampleCountFlagBits = SampleCountFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SAMPLE_COUNT_1_BIT' specifies an image with one sample per pixel.
+pattern SAMPLE_COUNT_1_BIT = SampleCountFlagBits 0x00000001
+-- | 'SAMPLE_COUNT_2_BIT' specifies an image with 2 samples per pixel.
+pattern SAMPLE_COUNT_2_BIT = SampleCountFlagBits 0x00000002
+-- | 'SAMPLE_COUNT_4_BIT' specifies an image with 4 samples per pixel.
+pattern SAMPLE_COUNT_4_BIT = SampleCountFlagBits 0x00000004
+-- | 'SAMPLE_COUNT_8_BIT' specifies an image with 8 samples per pixel.
+pattern SAMPLE_COUNT_8_BIT = SampleCountFlagBits 0x00000008
+-- | 'SAMPLE_COUNT_16_BIT' specifies an image with 16 samples per pixel.
+pattern SAMPLE_COUNT_16_BIT = SampleCountFlagBits 0x00000010
+-- | 'SAMPLE_COUNT_32_BIT' specifies an image with 32 samples per pixel.
+pattern SAMPLE_COUNT_32_BIT = SampleCountFlagBits 0x00000020
+-- | 'SAMPLE_COUNT_64_BIT' specifies an image with 64 samples per pixel.
+pattern SAMPLE_COUNT_64_BIT = SampleCountFlagBits 0x00000040
+
+type SampleCountFlags = SampleCountFlagBits
+
+instance Show SampleCountFlagBits where
+  showsPrec p = \case
+    SAMPLE_COUNT_1_BIT -> showString "SAMPLE_COUNT_1_BIT"
+    SAMPLE_COUNT_2_BIT -> showString "SAMPLE_COUNT_2_BIT"
+    SAMPLE_COUNT_4_BIT -> showString "SAMPLE_COUNT_4_BIT"
+    SAMPLE_COUNT_8_BIT -> showString "SAMPLE_COUNT_8_BIT"
+    SAMPLE_COUNT_16_BIT -> showString "SAMPLE_COUNT_16_BIT"
+    SAMPLE_COUNT_32_BIT -> showString "SAMPLE_COUNT_32_BIT"
+    SAMPLE_COUNT_64_BIT -> showString "SAMPLE_COUNT_64_BIT"
+    SampleCountFlagBits x -> showParen (p >= 11) (showString "SampleCountFlagBits 0x" . showHex x)
+
+instance Read SampleCountFlagBits where
+  readPrec = parens (choose [("SAMPLE_COUNT_1_BIT", pure SAMPLE_COUNT_1_BIT)
+                            , ("SAMPLE_COUNT_2_BIT", pure SAMPLE_COUNT_2_BIT)
+                            , ("SAMPLE_COUNT_4_BIT", pure SAMPLE_COUNT_4_BIT)
+                            , ("SAMPLE_COUNT_8_BIT", pure SAMPLE_COUNT_8_BIT)
+                            , ("SAMPLE_COUNT_16_BIT", pure SAMPLE_COUNT_16_BIT)
+                            , ("SAMPLE_COUNT_32_BIT", pure SAMPLE_COUNT_32_BIT)
+                            , ("SAMPLE_COUNT_64_BIT", pure SAMPLE_COUNT_64_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SampleCountFlagBits")
+                       v <- step readPrec
+                       pure (SampleCountFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/SampleCountFlagBits.hs-boot b/src/Vulkan/Core10/Enums/SampleCountFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SampleCountFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SampleCountFlagBits  ( SampleCountFlagBits
+                                                , SampleCountFlags
+                                                ) where
+
+
+
+data SampleCountFlagBits
+
+type SampleCountFlags = SampleCountFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/SamplerAddressMode.hs b/src/Vulkan/Core10/Enums/SamplerAddressMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SamplerAddressMode.hs
@@ -0,0 +1,77 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SamplerAddressMode  (SamplerAddressMode( SAMPLER_ADDRESS_MODE_REPEAT
+                                                                  , SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT
+                                                                  , SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
+                                                                  , SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER
+                                                                  , SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
+                                                                  , ..
+                                                                  )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkSamplerAddressMode - Specify behavior of sampling with texture
+-- coordinates outside an image
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'
+newtype SamplerAddressMode = SamplerAddressMode Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'SAMPLER_ADDRESS_MODE_REPEAT' specifies that the repeat wrap mode will
+-- be used.
+pattern SAMPLER_ADDRESS_MODE_REPEAT = SamplerAddressMode 0
+-- | 'SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT' specifies that the mirrored
+-- repeat wrap mode will be used.
+pattern SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = SamplerAddressMode 1
+-- | 'SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' specifies that the clamp to edge
+-- wrap mode will be used.
+pattern SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = SamplerAddressMode 2
+-- | 'SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER' specifies that the clamp to
+-- border wrap mode will be used.
+pattern SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = SamplerAddressMode 3
+-- | 'SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE' specifies that the mirror
+-- clamp to edge wrap mode will be used. This is only valid if
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-samplerMirrorClampToEdge samplerMirrorClampToEdge>
+-- is enabled, or if the @VK_KHR_sampler_mirror_clamp_to_edge@ extension is
+-- enabled.
+pattern SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = SamplerAddressMode 4
+{-# complete SAMPLER_ADDRESS_MODE_REPEAT,
+             SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
+             SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
+             SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
+             SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE :: SamplerAddressMode #-}
+
+instance Show SamplerAddressMode where
+  showsPrec p = \case
+    SAMPLER_ADDRESS_MODE_REPEAT -> showString "SAMPLER_ADDRESS_MODE_REPEAT"
+    SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT -> showString "SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT"
+    SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE -> showString "SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE"
+    SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER -> showString "SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER"
+    SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE -> showString "SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE"
+    SamplerAddressMode x -> showParen (p >= 11) (showString "SamplerAddressMode " . showsPrec 11 x)
+
+instance Read SamplerAddressMode where
+  readPrec = parens (choose [("SAMPLER_ADDRESS_MODE_REPEAT", pure SAMPLER_ADDRESS_MODE_REPEAT)
+                            , ("SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT", pure SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT)
+                            , ("SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", pure SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE)
+                            , ("SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER", pure SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER)
+                            , ("SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE", pure SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SamplerAddressMode")
+                       v <- step readPrec
+                       pure (SamplerAddressMode v)))
+
diff --git a/src/Vulkan/Core10/Enums/SamplerCreateFlagBits.hs b/src/Vulkan/Core10/Enums/SamplerCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SamplerCreateFlagBits.hs
@@ -0,0 +1,69 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SamplerCreateFlagBits  ( SamplerCreateFlagBits( SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT
+                                                                         , SAMPLER_CREATE_SUBSAMPLED_BIT_EXT
+                                                                         , ..
+                                                                         )
+                                                  , SamplerCreateFlags
+                                                  ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkSamplerCreateFlagBits - Bitmask specifying additional parameters of
+-- sampler
+--
+-- = Description
+--
+-- Note
+--
+-- The approximations used when
+-- 'SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT' is specified
+-- are implementation defined. Some implementations /may/ interpolate
+-- between fragment density levels in a subsampled image. In that case,
+-- this bit /may/ be used to decide whether the interpolation factors are
+-- calculated per fragment or at a coarser granularity.
+--
+-- = See Also
+--
+-- 'SamplerCreateFlags'
+newtype SamplerCreateFlagBits = SamplerCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT' specifies that
+-- the implementation /may/ use approximations when reconstructing a full
+-- color value for texture access from a subsampled image.
+pattern SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = SamplerCreateFlagBits 0x00000002
+-- | 'SAMPLER_CREATE_SUBSAMPLED_BIT_EXT' specifies that the sampler will read
+-- from an image created with @flags@ containing
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'.
+pattern SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = SamplerCreateFlagBits 0x00000001
+
+type SamplerCreateFlags = SamplerCreateFlagBits
+
+instance Show SamplerCreateFlagBits where
+  showsPrec p = \case
+    SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT -> showString "SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT"
+    SAMPLER_CREATE_SUBSAMPLED_BIT_EXT -> showString "SAMPLER_CREATE_SUBSAMPLED_BIT_EXT"
+    SamplerCreateFlagBits x -> showParen (p >= 11) (showString "SamplerCreateFlagBits 0x" . showHex x)
+
+instance Read SamplerCreateFlagBits where
+  readPrec = parens (choose [("SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT", pure SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT)
+                            , ("SAMPLER_CREATE_SUBSAMPLED_BIT_EXT", pure SAMPLER_CREATE_SUBSAMPLED_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SamplerCreateFlagBits")
+                       v <- step readPrec
+                       pure (SamplerCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/SamplerMipmapMode.hs b/src/Vulkan/Core10/Enums/SamplerMipmapMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SamplerMipmapMode.hs
@@ -0,0 +1,55 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SamplerMipmapMode  (SamplerMipmapMode( SAMPLER_MIPMAP_MODE_NEAREST
+                                                                , SAMPLER_MIPMAP_MODE_LINEAR
+                                                                , ..
+                                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkSamplerMipmapMode - Specify mipmap mode used for texture lookups
+--
+-- = Description
+--
+-- These modes are described in detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-texel-filtering Texel Filtering>.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'
+newtype SamplerMipmapMode = SamplerMipmapMode Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'SAMPLER_MIPMAP_MODE_NEAREST' specifies nearest filtering.
+pattern SAMPLER_MIPMAP_MODE_NEAREST = SamplerMipmapMode 0
+-- | 'SAMPLER_MIPMAP_MODE_LINEAR' specifies linear filtering.
+pattern SAMPLER_MIPMAP_MODE_LINEAR = SamplerMipmapMode 1
+{-# complete SAMPLER_MIPMAP_MODE_NEAREST,
+             SAMPLER_MIPMAP_MODE_LINEAR :: SamplerMipmapMode #-}
+
+instance Show SamplerMipmapMode where
+  showsPrec p = \case
+    SAMPLER_MIPMAP_MODE_NEAREST -> showString "SAMPLER_MIPMAP_MODE_NEAREST"
+    SAMPLER_MIPMAP_MODE_LINEAR -> showString "SAMPLER_MIPMAP_MODE_LINEAR"
+    SamplerMipmapMode x -> showParen (p >= 11) (showString "SamplerMipmapMode " . showsPrec 11 x)
+
+instance Read SamplerMipmapMode where
+  readPrec = parens (choose [("SAMPLER_MIPMAP_MODE_NEAREST", pure SAMPLER_MIPMAP_MODE_NEAREST)
+                            , ("SAMPLER_MIPMAP_MODE_LINEAR", pure SAMPLER_MIPMAP_MODE_LINEAR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SamplerMipmapMode")
+                       v <- step readPrec
+                       pure (SamplerMipmapMode v)))
+
diff --git a/src/Vulkan/Core10/Enums/SemaphoreCreateFlags.hs b/src/Vulkan/Core10/Enums/SemaphoreCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SemaphoreCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SemaphoreCreateFlags  (SemaphoreCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkSemaphoreCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'SemaphoreCreateFlags' is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo'
+newtype SemaphoreCreateFlags = SemaphoreCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show SemaphoreCreateFlags where
+  showsPrec p = \case
+    SemaphoreCreateFlags x -> showParen (p >= 11) (showString "SemaphoreCreateFlags 0x" . showHex x)
+
+instance Read SemaphoreCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SemaphoreCreateFlags")
+                       v <- step readPrec
+                       pure (SemaphoreCreateFlags v)))
+
diff --git a/src/Vulkan/Core10/Enums/ShaderModuleCreateFlagBits.hs b/src/Vulkan/Core10/Enums/ShaderModuleCreateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ShaderModuleCreateFlagBits.hs
@@ -0,0 +1,40 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ShaderModuleCreateFlagBits  ( ShaderModuleCreateFlagBits(..)
+                                                       , ShaderModuleCreateFlags
+                                                       ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- No documentation found for TopLevel "VkShaderModuleCreateFlagBits"
+newtype ShaderModuleCreateFlagBits = ShaderModuleCreateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+type ShaderModuleCreateFlags = ShaderModuleCreateFlagBits
+
+instance Show ShaderModuleCreateFlagBits where
+  showsPrec p = \case
+    ShaderModuleCreateFlagBits x -> showParen (p >= 11) (showString "ShaderModuleCreateFlagBits 0x" . showHex x)
+
+instance Read ShaderModuleCreateFlagBits where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ShaderModuleCreateFlagBits")
+                       v <- step readPrec
+                       pure (ShaderModuleCreateFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/ShaderStageFlagBits.hs b/src/Vulkan/Core10/Enums/ShaderStageFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ShaderStageFlagBits.hs
@@ -0,0 +1,139 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ShaderStageFlagBits  ( ShaderStageFlagBits( SHADER_STAGE_VERTEX_BIT
+                                                                     , SHADER_STAGE_TESSELLATION_CONTROL_BIT
+                                                                     , SHADER_STAGE_TESSELLATION_EVALUATION_BIT
+                                                                     , SHADER_STAGE_GEOMETRY_BIT
+                                                                     , SHADER_STAGE_FRAGMENT_BIT
+                                                                     , SHADER_STAGE_COMPUTE_BIT
+                                                                     , SHADER_STAGE_ALL_GRAPHICS
+                                                                     , SHADER_STAGE_ALL
+                                                                     , SHADER_STAGE_MESH_BIT_NV
+                                                                     , SHADER_STAGE_TASK_BIT_NV
+                                                                     , SHADER_STAGE_CALLABLE_BIT_KHR
+                                                                     , SHADER_STAGE_INTERSECTION_BIT_KHR
+                                                                     , SHADER_STAGE_MISS_BIT_KHR
+                                                                     , SHADER_STAGE_CLOSEST_HIT_BIT_KHR
+                                                                     , SHADER_STAGE_ANY_HIT_BIT_KHR
+                                                                     , SHADER_STAGE_RAYGEN_BIT_KHR
+                                                                     , ..
+                                                                     )
+                                                , ShaderStageFlags
+                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkShaderStageFlagBits - Bitmask specifying a pipeline stage
+--
+-- = Description
+--
+-- Note
+--
+-- 'SHADER_STAGE_ALL_GRAPHICS' only includes the original five graphics
+-- stages included in Vulkan 1.0, and not any stages added by extensions.
+-- Thus, it may not have the desired effect in all cases.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
+-- 'ShaderStageFlags',
+-- 'Vulkan.Extensions.VK_AMD_shader_info.getShaderInfoAMD'
+newtype ShaderStageFlagBits = ShaderStageFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SHADER_STAGE_VERTEX_BIT' specifies the vertex stage.
+pattern SHADER_STAGE_VERTEX_BIT = ShaderStageFlagBits 0x00000001
+-- | 'SHADER_STAGE_TESSELLATION_CONTROL_BIT' specifies the tessellation
+-- control stage.
+pattern SHADER_STAGE_TESSELLATION_CONTROL_BIT = ShaderStageFlagBits 0x00000002
+-- | 'SHADER_STAGE_TESSELLATION_EVALUATION_BIT' specifies the tessellation
+-- evaluation stage.
+pattern SHADER_STAGE_TESSELLATION_EVALUATION_BIT = ShaderStageFlagBits 0x00000004
+-- | 'SHADER_STAGE_GEOMETRY_BIT' specifies the geometry stage.
+pattern SHADER_STAGE_GEOMETRY_BIT = ShaderStageFlagBits 0x00000008
+-- | 'SHADER_STAGE_FRAGMENT_BIT' specifies the fragment stage.
+pattern SHADER_STAGE_FRAGMENT_BIT = ShaderStageFlagBits 0x00000010
+-- | 'SHADER_STAGE_COMPUTE_BIT' specifies the compute stage.
+pattern SHADER_STAGE_COMPUTE_BIT = ShaderStageFlagBits 0x00000020
+-- | 'SHADER_STAGE_ALL_GRAPHICS' is a combination of bits used as shorthand
+-- to specify all graphics stages defined above (excluding the compute
+-- stage).
+pattern SHADER_STAGE_ALL_GRAPHICS = ShaderStageFlagBits 0x0000001f
+-- | '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 SHADER_STAGE_ALL = ShaderStageFlagBits 0x7fffffff
+-- | 'SHADER_STAGE_MESH_BIT_NV' specifies the mesh stage.
+pattern SHADER_STAGE_MESH_BIT_NV = ShaderStageFlagBits 0x00000080
+-- | 'SHADER_STAGE_TASK_BIT_NV' specifies the task stage.
+pattern SHADER_STAGE_TASK_BIT_NV = ShaderStageFlagBits 0x00000040
+-- | 'SHADER_STAGE_CALLABLE_BIT_KHR' specifies the callable stage.
+pattern SHADER_STAGE_CALLABLE_BIT_KHR = ShaderStageFlagBits 0x00002000
+-- | 'SHADER_STAGE_INTERSECTION_BIT_KHR' specifies the intersection stage.
+pattern SHADER_STAGE_INTERSECTION_BIT_KHR = ShaderStageFlagBits 0x00001000
+-- | 'SHADER_STAGE_MISS_BIT_KHR' specifies the miss stage.
+pattern SHADER_STAGE_MISS_BIT_KHR = ShaderStageFlagBits 0x00000800
+-- | 'SHADER_STAGE_CLOSEST_HIT_BIT_KHR' specifies the closest hit stage.
+pattern SHADER_STAGE_CLOSEST_HIT_BIT_KHR = ShaderStageFlagBits 0x00000400
+-- | 'SHADER_STAGE_ANY_HIT_BIT_KHR' specifies the any-hit stage.
+pattern SHADER_STAGE_ANY_HIT_BIT_KHR = ShaderStageFlagBits 0x00000200
+-- | 'SHADER_STAGE_RAYGEN_BIT_KHR' specifies the ray generation stage.
+pattern SHADER_STAGE_RAYGEN_BIT_KHR = ShaderStageFlagBits 0x00000100
+
+type ShaderStageFlags = ShaderStageFlagBits
+
+instance Show ShaderStageFlagBits where
+  showsPrec p = \case
+    SHADER_STAGE_VERTEX_BIT -> showString "SHADER_STAGE_VERTEX_BIT"
+    SHADER_STAGE_TESSELLATION_CONTROL_BIT -> showString "SHADER_STAGE_TESSELLATION_CONTROL_BIT"
+    SHADER_STAGE_TESSELLATION_EVALUATION_BIT -> showString "SHADER_STAGE_TESSELLATION_EVALUATION_BIT"
+    SHADER_STAGE_GEOMETRY_BIT -> showString "SHADER_STAGE_GEOMETRY_BIT"
+    SHADER_STAGE_FRAGMENT_BIT -> showString "SHADER_STAGE_FRAGMENT_BIT"
+    SHADER_STAGE_COMPUTE_BIT -> showString "SHADER_STAGE_COMPUTE_BIT"
+    SHADER_STAGE_ALL_GRAPHICS -> showString "SHADER_STAGE_ALL_GRAPHICS"
+    SHADER_STAGE_ALL -> showString "SHADER_STAGE_ALL"
+    SHADER_STAGE_MESH_BIT_NV -> showString "SHADER_STAGE_MESH_BIT_NV"
+    SHADER_STAGE_TASK_BIT_NV -> showString "SHADER_STAGE_TASK_BIT_NV"
+    SHADER_STAGE_CALLABLE_BIT_KHR -> showString "SHADER_STAGE_CALLABLE_BIT_KHR"
+    SHADER_STAGE_INTERSECTION_BIT_KHR -> showString "SHADER_STAGE_INTERSECTION_BIT_KHR"
+    SHADER_STAGE_MISS_BIT_KHR -> showString "SHADER_STAGE_MISS_BIT_KHR"
+    SHADER_STAGE_CLOSEST_HIT_BIT_KHR -> showString "SHADER_STAGE_CLOSEST_HIT_BIT_KHR"
+    SHADER_STAGE_ANY_HIT_BIT_KHR -> showString "SHADER_STAGE_ANY_HIT_BIT_KHR"
+    SHADER_STAGE_RAYGEN_BIT_KHR -> showString "SHADER_STAGE_RAYGEN_BIT_KHR"
+    ShaderStageFlagBits x -> showParen (p >= 11) (showString "ShaderStageFlagBits 0x" . showHex x)
+
+instance Read ShaderStageFlagBits where
+  readPrec = parens (choose [("SHADER_STAGE_VERTEX_BIT", pure SHADER_STAGE_VERTEX_BIT)
+                            , ("SHADER_STAGE_TESSELLATION_CONTROL_BIT", pure SHADER_STAGE_TESSELLATION_CONTROL_BIT)
+                            , ("SHADER_STAGE_TESSELLATION_EVALUATION_BIT", pure SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
+                            , ("SHADER_STAGE_GEOMETRY_BIT", pure SHADER_STAGE_GEOMETRY_BIT)
+                            , ("SHADER_STAGE_FRAGMENT_BIT", pure SHADER_STAGE_FRAGMENT_BIT)
+                            , ("SHADER_STAGE_COMPUTE_BIT", pure SHADER_STAGE_COMPUTE_BIT)
+                            , ("SHADER_STAGE_ALL_GRAPHICS", pure SHADER_STAGE_ALL_GRAPHICS)
+                            , ("SHADER_STAGE_ALL", pure SHADER_STAGE_ALL)
+                            , ("SHADER_STAGE_MESH_BIT_NV", pure SHADER_STAGE_MESH_BIT_NV)
+                            , ("SHADER_STAGE_TASK_BIT_NV", pure SHADER_STAGE_TASK_BIT_NV)
+                            , ("SHADER_STAGE_CALLABLE_BIT_KHR", pure SHADER_STAGE_CALLABLE_BIT_KHR)
+                            , ("SHADER_STAGE_INTERSECTION_BIT_KHR", pure SHADER_STAGE_INTERSECTION_BIT_KHR)
+                            , ("SHADER_STAGE_MISS_BIT_KHR", pure SHADER_STAGE_MISS_BIT_KHR)
+                            , ("SHADER_STAGE_CLOSEST_HIT_BIT_KHR", pure SHADER_STAGE_CLOSEST_HIT_BIT_KHR)
+                            , ("SHADER_STAGE_ANY_HIT_BIT_KHR", pure SHADER_STAGE_ANY_HIT_BIT_KHR)
+                            , ("SHADER_STAGE_RAYGEN_BIT_KHR", pure SHADER_STAGE_RAYGEN_BIT_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ShaderStageFlagBits")
+                       v <- step readPrec
+                       pure (ShaderStageFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/ShaderStageFlagBits.hs-boot b/src/Vulkan/Core10/Enums/ShaderStageFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/ShaderStageFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.ShaderStageFlagBits  ( ShaderStageFlagBits
+                                                , ShaderStageFlags
+                                                ) where
+
+
+
+data ShaderStageFlagBits
+
+type ShaderStageFlags = ShaderStageFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/SharingMode.hs b/src/Vulkan/Core10/Enums/SharingMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SharingMode.hs
@@ -0,0 +1,95 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SharingMode  (SharingMode( SHARING_MODE_EXCLUSIVE
+                                                    , SHARING_MODE_CONCURRENT
+                                                    , ..
+                                                    )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkSharingMode - Buffer and image sharing modes
+--
+-- = Description
+--
+-- Note
+--
+-- 'SHARING_MODE_CONCURRENT' /may/ result in lower performance access to
+-- the buffer or image than 'SHARING_MODE_EXCLUSIVE'.
+--
+-- Ranges of buffers and image subresources of image objects created using
+-- '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
+-- 'SHARING_MODE_EXCLUSIVE' is owned by some queue family, the application
+-- /must/ perform a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts layout transition>
+-- from 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
+-- 'Vulkan.Core10.Enums.ImageLayout.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 '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
+-- '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
+--
+-- 'Vulkan.Core10.Buffer.BufferCreateInfo',
+-- 'Vulkan.Core10.Image.ImageCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
+newtype SharingMode = SharingMode Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | '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.
+pattern SHARING_MODE_EXCLUSIVE = SharingMode 0
+-- | 'SHARING_MODE_CONCURRENT' specifies that concurrent access to any range
+-- or image subresource of the object from multiple queue families is
+-- supported.
+pattern SHARING_MODE_CONCURRENT = SharingMode 1
+{-# complete SHARING_MODE_EXCLUSIVE,
+             SHARING_MODE_CONCURRENT :: SharingMode #-}
+
+instance Show SharingMode where
+  showsPrec p = \case
+    SHARING_MODE_EXCLUSIVE -> showString "SHARING_MODE_EXCLUSIVE"
+    SHARING_MODE_CONCURRENT -> showString "SHARING_MODE_CONCURRENT"
+    SharingMode x -> showParen (p >= 11) (showString "SharingMode " . showsPrec 11 x)
+
+instance Read SharingMode where
+  readPrec = parens (choose [("SHARING_MODE_EXCLUSIVE", pure SHARING_MODE_EXCLUSIVE)
+                            , ("SHARING_MODE_CONCURRENT", pure SHARING_MODE_CONCURRENT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SharingMode")
+                       v <- step readPrec
+                       pure (SharingMode v)))
+
diff --git a/src/Vulkan/Core10/Enums/SparseImageFormatFlagBits.hs b/src/Vulkan/Core10/Enums/SparseImageFormatFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SparseImageFormatFlagBits.hs
@@ -0,0 +1,65 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SparseImageFormatFlagBits  ( SparseImageFormatFlagBits( SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT
+                                                                                 , SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT
+                                                                                 , SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT
+                                                                                 , ..
+                                                                                 )
+                                                      , SparseImageFormatFlags
+                                                      ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkSparseImageFormatFlagBits - Bitmask specifying additional information
+-- about a sparse image resource
+--
+-- = See Also
+--
+-- 'SparseImageFormatFlags'
+newtype SparseImageFormatFlagBits = SparseImageFormatFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT' specifies that the image uses a
+-- single mip tail region for all array layers.
+pattern SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = SparseImageFormatFlagBits 0x00000001
+-- | '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 SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = SparseImageFormatFlagBits 0x00000002
+-- | '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 SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = SparseImageFormatFlagBits 0x00000004
+
+type SparseImageFormatFlags = SparseImageFormatFlagBits
+
+instance Show SparseImageFormatFlagBits where
+  showsPrec p = \case
+    SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT -> showString "SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"
+    SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT -> showString "SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"
+    SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT -> showString "SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT"
+    SparseImageFormatFlagBits x -> showParen (p >= 11) (showString "SparseImageFormatFlagBits 0x" . showHex x)
+
+instance Read SparseImageFormatFlagBits where
+  readPrec = parens (choose [("SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT", pure SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
+                            , ("SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT", pure SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
+                            , ("SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT", pure SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SparseImageFormatFlagBits")
+                       v <- step readPrec
+                       pure (SparseImageFormatFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/SparseMemoryBindFlagBits.hs b/src/Vulkan/Core10/Enums/SparseMemoryBindFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SparseMemoryBindFlagBits.hs
@@ -0,0 +1,50 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SparseMemoryBindFlagBits  ( SparseMemoryBindFlagBits( SPARSE_MEMORY_BIND_METADATA_BIT
+                                                                               , ..
+                                                                               )
+                                                     , SparseMemoryBindFlags
+                                                     ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkSparseMemoryBindFlagBits - Bitmask specifying usage of a sparse memory
+-- binding operation
+--
+-- = See Also
+--
+-- 'SparseMemoryBindFlags'
+newtype SparseMemoryBindFlagBits = SparseMemoryBindFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SPARSE_MEMORY_BIND_METADATA_BIT' specifies that the memory being bound
+-- is only for the metadata aspect.
+pattern SPARSE_MEMORY_BIND_METADATA_BIT = SparseMemoryBindFlagBits 0x00000001
+
+type SparseMemoryBindFlags = SparseMemoryBindFlagBits
+
+instance Show SparseMemoryBindFlagBits where
+  showsPrec p = \case
+    SPARSE_MEMORY_BIND_METADATA_BIT -> showString "SPARSE_MEMORY_BIND_METADATA_BIT"
+    SparseMemoryBindFlagBits x -> showParen (p >= 11) (showString "SparseMemoryBindFlagBits 0x" . showHex x)
+
+instance Read SparseMemoryBindFlagBits where
+  readPrec = parens (choose [("SPARSE_MEMORY_BIND_METADATA_BIT", pure SPARSE_MEMORY_BIND_METADATA_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SparseMemoryBindFlagBits")
+                       v <- step readPrec
+                       pure (SparseMemoryBindFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/StencilFaceFlagBits.hs b/src/Vulkan/Core10/Enums/StencilFaceFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/StencilFaceFlagBits.hs
@@ -0,0 +1,63 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.StencilFaceFlagBits  ( StencilFaceFlagBits( STENCIL_FACE_FRONT_BIT
+                                                                     , STENCIL_FACE_BACK_BIT
+                                                                     , STENCIL_FACE_FRONT_AND_BACK
+                                                                     , ..
+                                                                     )
+                                                , StencilFaceFlags
+                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkStencilFaceFlagBits - Bitmask specifying sets of stencil state for
+-- which to update the compare mask
+--
+-- = See Also
+--
+-- 'StencilFaceFlags'
+newtype StencilFaceFlagBits = StencilFaceFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'STENCIL_FACE_FRONT_BIT' specifies that only the front set of stencil
+-- state is updated.
+pattern STENCIL_FACE_FRONT_BIT = StencilFaceFlagBits 0x00000001
+-- | 'STENCIL_FACE_BACK_BIT' specifies that only the back set of stencil
+-- state is updated.
+pattern STENCIL_FACE_BACK_BIT = StencilFaceFlagBits 0x00000002
+-- | 'STENCIL_FACE_FRONT_AND_BACK' is the combination of
+-- 'STENCIL_FACE_FRONT_BIT' and 'STENCIL_FACE_BACK_BIT', and specifies that
+-- both sets of stencil state are updated.
+pattern STENCIL_FACE_FRONT_AND_BACK = StencilFaceFlagBits 0x00000003
+
+type StencilFaceFlags = StencilFaceFlagBits
+
+instance Show StencilFaceFlagBits where
+  showsPrec p = \case
+    STENCIL_FACE_FRONT_BIT -> showString "STENCIL_FACE_FRONT_BIT"
+    STENCIL_FACE_BACK_BIT -> showString "STENCIL_FACE_BACK_BIT"
+    STENCIL_FACE_FRONT_AND_BACK -> showString "STENCIL_FACE_FRONT_AND_BACK"
+    StencilFaceFlagBits x -> showParen (p >= 11) (showString "StencilFaceFlagBits 0x" . showHex x)
+
+instance Read StencilFaceFlagBits where
+  readPrec = parens (choose [("STENCIL_FACE_FRONT_BIT", pure STENCIL_FACE_FRONT_BIT)
+                            , ("STENCIL_FACE_BACK_BIT", pure STENCIL_FACE_BACK_BIT)
+                            , ("STENCIL_FACE_FRONT_AND_BACK", pure STENCIL_FACE_FRONT_AND_BACK)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "StencilFaceFlagBits")
+                       v <- step readPrec
+                       pure (StencilFaceFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/StencilFaceFlagBits.hs-boot b/src/Vulkan/Core10/Enums/StencilFaceFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/StencilFaceFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.StencilFaceFlagBits  ( StencilFaceFlagBits
+                                                , StencilFaceFlags
+                                                ) where
+
+
+
+data StencilFaceFlagBits
+
+type StencilFaceFlags = StencilFaceFlagBits
+
diff --git a/src/Vulkan/Core10/Enums/StencilOp.hs b/src/Vulkan/Core10/Enums/StencilOp.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/StencilOp.hs
@@ -0,0 +1,95 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.StencilOp  (StencilOp( STENCIL_OP_KEEP
+                                                , STENCIL_OP_ZERO
+                                                , STENCIL_OP_REPLACE
+                                                , STENCIL_OP_INCREMENT_AND_CLAMP
+                                                , STENCIL_OP_DECREMENT_AND_CLAMP
+                                                , STENCIL_OP_INVERT
+                                                , STENCIL_OP_INCREMENT_AND_WRAP
+                                                , STENCIL_OP_DECREMENT_AND_WRAP
+                                                , ..
+                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkStencilOp - Stencil comparison function
+--
+-- = Description
+--
+-- For purposes of increment and decrement, the stencil bits are considered
+-- as an unsigned integer.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.StencilOpState'
+newtype StencilOp = StencilOp Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'STENCIL_OP_KEEP' keeps the current value.
+pattern STENCIL_OP_KEEP = StencilOp 0
+-- | 'STENCIL_OP_ZERO' sets the value to 0.
+pattern STENCIL_OP_ZERO = StencilOp 1
+-- | 'STENCIL_OP_REPLACE' sets the value to @reference@.
+pattern STENCIL_OP_REPLACE = StencilOp 2
+-- | 'STENCIL_OP_INCREMENT_AND_CLAMP' increments the current value and clamps
+-- to the maximum representable unsigned value.
+pattern STENCIL_OP_INCREMENT_AND_CLAMP = StencilOp 3
+-- | 'STENCIL_OP_DECREMENT_AND_CLAMP' decrements the current value and clamps
+-- to 0.
+pattern STENCIL_OP_DECREMENT_AND_CLAMP = StencilOp 4
+-- | 'STENCIL_OP_INVERT' bitwise-inverts the current value.
+pattern STENCIL_OP_INVERT = StencilOp 5
+-- | 'STENCIL_OP_INCREMENT_AND_WRAP' increments the current value and wraps
+-- to 0 when the maximum value would have been exceeded.
+pattern STENCIL_OP_INCREMENT_AND_WRAP = StencilOp 6
+-- | 'STENCIL_OP_DECREMENT_AND_WRAP' decrements the current value and wraps
+-- to the maximum possible value when the value would go below 0.
+pattern STENCIL_OP_DECREMENT_AND_WRAP = StencilOp 7
+{-# complete STENCIL_OP_KEEP,
+             STENCIL_OP_ZERO,
+             STENCIL_OP_REPLACE,
+             STENCIL_OP_INCREMENT_AND_CLAMP,
+             STENCIL_OP_DECREMENT_AND_CLAMP,
+             STENCIL_OP_INVERT,
+             STENCIL_OP_INCREMENT_AND_WRAP,
+             STENCIL_OP_DECREMENT_AND_WRAP :: StencilOp #-}
+
+instance Show StencilOp where
+  showsPrec p = \case
+    STENCIL_OP_KEEP -> showString "STENCIL_OP_KEEP"
+    STENCIL_OP_ZERO -> showString "STENCIL_OP_ZERO"
+    STENCIL_OP_REPLACE -> showString "STENCIL_OP_REPLACE"
+    STENCIL_OP_INCREMENT_AND_CLAMP -> showString "STENCIL_OP_INCREMENT_AND_CLAMP"
+    STENCIL_OP_DECREMENT_AND_CLAMP -> showString "STENCIL_OP_DECREMENT_AND_CLAMP"
+    STENCIL_OP_INVERT -> showString "STENCIL_OP_INVERT"
+    STENCIL_OP_INCREMENT_AND_WRAP -> showString "STENCIL_OP_INCREMENT_AND_WRAP"
+    STENCIL_OP_DECREMENT_AND_WRAP -> showString "STENCIL_OP_DECREMENT_AND_WRAP"
+    StencilOp x -> showParen (p >= 11) (showString "StencilOp " . showsPrec 11 x)
+
+instance Read StencilOp where
+  readPrec = parens (choose [("STENCIL_OP_KEEP", pure STENCIL_OP_KEEP)
+                            , ("STENCIL_OP_ZERO", pure STENCIL_OP_ZERO)
+                            , ("STENCIL_OP_REPLACE", pure STENCIL_OP_REPLACE)
+                            , ("STENCIL_OP_INCREMENT_AND_CLAMP", pure STENCIL_OP_INCREMENT_AND_CLAMP)
+                            , ("STENCIL_OP_DECREMENT_AND_CLAMP", pure STENCIL_OP_DECREMENT_AND_CLAMP)
+                            , ("STENCIL_OP_INVERT", pure STENCIL_OP_INVERT)
+                            , ("STENCIL_OP_INCREMENT_AND_WRAP", pure STENCIL_OP_INCREMENT_AND_WRAP)
+                            , ("STENCIL_OP_DECREMENT_AND_WRAP", pure STENCIL_OP_DECREMENT_AND_WRAP)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "StencilOp")
+                       v <- step readPrec
+                       pure (StencilOp v)))
+
diff --git a/src/Vulkan/Core10/Enums/StructureType.hs b/src/Vulkan/Core10/Enums/StructureType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/StructureType.hs
@@ -0,0 +1,3105 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.StructureType  (StructureType( STRUCTURE_TYPE_APPLICATION_INFO
+                                                        , STRUCTURE_TYPE_INSTANCE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_DEVICE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_SUBMIT_INFO
+                                                        , STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
+                                                        , STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
+                                                        , STRUCTURE_TYPE_BIND_SPARSE_INFO
+                                                        , STRUCTURE_TYPE_FENCE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_EVENT_CREATE_INFO
+                                                        , STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
+                                                        , STRUCTURE_TYPE_BUFFER_CREATE_INFO
+                                                        , STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
+                                                        , STRUCTURE_TYPE_IMAGE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
+                                                        , STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
+                                                        , STRUCTURE_TYPE_SAMPLER_CREATE_INFO
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO
+                                                        , STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
+                                                        , STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
+                                                        , STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
+                                                        , STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
+                                                        , STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
+                                                        , STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO
+                                                        , STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO
+                                                        , STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
+                                                        , STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
+                                                        , STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
+                                                        , STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
+                                                        , STRUCTURE_TYPE_MEMORY_BARRIER
+                                                        , STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM
+                                                        , STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV
+                                                        , STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV
+                                                        , STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV
+                                                        , STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV
+                                                        , STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR
+                                                        , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR
+                                                        , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR
+                                                        , STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR
+                                                        , STRUCTURE_TYPE_PIPELINE_INFO_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR
+                                                        , STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT
+                                                        , STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT
+                                                        , STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV
+                                                        , STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV
+                                                        , STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV
+                                                        , STRUCTURE_TYPE_VALIDATION_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV
+                                                        , STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR
+                                                        , STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA
+                                                        , STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD
+                                                        , STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL
+                                                        , STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL
+                                                        , STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL
+                                                        , STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL
+                                                        , STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL
+                                                        , STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL
+                                                        , STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV
+                                                        , STRUCTURE_TYPE_CHECKPOINT_DATA_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV
+                                                        , STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV
+                                                        , STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD
+                                                        , STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT
+                                                        , STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV
+                                                        , STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV
+                                                        , STRUCTURE_TYPE_GEOMETRY_AABB_NV
+                                                        , STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV
+                                                        , STRUCTURE_TYPE_GEOMETRY_NV
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV
+                                                        , STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT
+                                                        , STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV
+                                                        , STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR
+                                                        , STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR
+                                                        , STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR
+                                                        , STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR
+                                                        , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR
+                                                        , STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR
+                                                        , STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR
+                                                        , STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT
+                                                        , STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
+                                                        , STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID
+                                                        , STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID
+                                                        , STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID
+                                                        , STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID
+                                                        , STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID
+                                                        , STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT
+                                                        , STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT
+                                                        , STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT
+                                                        , STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT
+                                                        , STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK
+                                                        , STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK
+                                                        , STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR
+                                                        , STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR
+                                                        , STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR
+                                                        , STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR
+                                                        , STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR
+                                                        , STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR
+                                                        , STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR
+                                                        , STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR
+                                                        , STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR
+                                                        , STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR
+                                                        , STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR
+                                                        , STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR
+                                                        , STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR
+                                                        , STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR
+                                                        , STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR
+                                                        , STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR
+                                                        , STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR
+                                                        , STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR
+                                                        , STRUCTURE_TYPE_HDR_METADATA_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX
+                                                        , STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE
+                                                        , STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT
+                                                        , STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT
+                                                        , STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT
+                                                        , STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PRESENT_REGIONS_KHR
+                                                        , STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR
+                                                        , STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR
+                                                        , STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR
+                                                        , STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR
+                                                        , STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR
+                                                        , STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR
+                                                        , STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR
+                                                        , STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR
+                                                        , STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR
+                                                        , STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR
+                                                        , STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR
+                                                        , STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR
+                                                        , STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR
+                                                        , STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR
+                                                        , STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN
+                                                        , STRUCTURE_TYPE_VALIDATION_FLAGS_EXT
+                                                        , STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR
+                                                        , STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR
+                                                        , STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR
+                                                        , STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR
+                                                        , STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV
+                                                        , STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV
+                                                        , STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV
+                                                        , STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV
+                                                        , STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV
+                                                        , STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP
+                                                        , STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD
+                                                        , STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX
+                                                        , STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX
+                                                        , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT
+                                                        , STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV
+                                                        , STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV
+                                                        , STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT
+                                                        , STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT
+                                                        , STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT
+                                                        , STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD
+                                                        , STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
+                                                        , STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR
+                                                        , STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_PRESENT_INFO_KHR
+                                                        , STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR
+                                                        , STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO
+                                                        , STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO
+                                                        , STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO
+                                                        , STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES
+                                                        , STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO
+                                                        , STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO
+                                                        , STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO
+                                                        , STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES
+                                                        , STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT
+                                                        , STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES
+                                                        , STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO
+                                                        , STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO
+                                                        , STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES
+                                                        , STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES
+                                                        , STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES
+                                                        , STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES
+                                                        , STRUCTURE_TYPE_SUBPASS_END_INFO
+                                                        , STRUCTURE_TYPE_SUBPASS_BEGIN_INFO
+                                                        , STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2
+                                                        , STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2
+                                                        , STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2
+                                                        , STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2
+                                                        , STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2
+                                                        , STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES
+                                                        , STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO
+                                                        , STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO
+                                                        , STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO
+                                                        , STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES
+                                                        , STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO
+                                                        , STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO
+                                                        , STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES
+                                                        , STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO
+                                                        , STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO
+                                                        , STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO
+                                                        , STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO
+                                                        , STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES
+                                                        , STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES
+                                                        , STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2
+                                                        , STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2
+                                                        , STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2
+                                                        , STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2
+                                                        , STRUCTURE_TYPE_FORMAT_PROPERTIES_2
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2
+                                                        , STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2
+                                                        , STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2
+                                                        , STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2
+                                                        , STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2
+                                                        , STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2
+                                                        , STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES
+                                                        , STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO
+                                                        , STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO
+                                                        , STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO
+                                                        , STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO
+                                                        , STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO
+                                                        , STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO
+                                                        , STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO
+                                                        , STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO
+                                                        , STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES
+                                                        , STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO
+                                                        , STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO
+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES
+                                                        , ..
+                                                        )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkStructureType - Vulkan structure types (@sType@)
+--
+-- = Description
+--
+-- Each value corresponds to a particular structure with a @sType@ member
+-- with a matching name. As a general rule, the name of each
+-- 'StructureType' 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
+-- 'Vulkan.Core10.Image.ImageCreateInfo' correspond to a 'StructureType' of
+-- 'STRUCTURE_TYPE_IMAGE_CREATE_INFO', and thus its @sType@ member /must/
+-- equal that when it is passed to the API.
+--
+-- The values 'STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO' and
+-- '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
+--
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureBuildGeometryInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateGeometryTypeInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureCreateInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureDeviceAddressInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryAabbsDataKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryInstancesDataKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureGeometryTrianglesDataKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureMemoryRequirementsInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureMemoryRequirementsInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureVersionKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.AcquireNextImageInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.AcquireProfilingLockInfoKHR',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferPropertiesANDROID',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferUsageANDROID',
+-- 'Vulkan.Extensions.VK_KHR_android_surface.AndroidSurfaceCreateInfoKHR',
+-- 'Vulkan.Core10.DeviceInitialization.ApplicationInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout',
+-- 'Vulkan.CStruct.Extends.BaseInStructure',
+-- 'Vulkan.CStruct.Extends.BaseOutStructure',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.BindAccelerationStructureMemoryInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.BindSparseInfo',
+-- 'Vulkan.Core10.Buffer.BufferCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferDeviceAddressInfo',
+-- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.BufferMemoryRequirementsInfo2',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo',
+-- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_calibrated_timestamps.CalibratedTimestampInfoEXT',
+-- 'Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.CheckpointDataNV',
+-- 'Vulkan.Core10.CommandBuffer.CommandBufferAllocateInfo',
+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo',
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.CommandBufferInheritanceConditionalRenderingInfoEXT',
+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',
+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM',
+-- 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo',
+-- 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
+-- 'Vulkan.Extensions.VK_NV_cooperative_matrix.CooperativeMatrixPropertiesNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureToMemoryInfoKHR',
+-- 'Vulkan.Core10.DescriptorSet.CopyDescriptorSet',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.CopyMemoryToAccelerationStructureInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.D3D12FenceSubmitInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerMarkerInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerObjectNameInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerObjectTagInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportCallbackCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsLabelEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCallbackDataEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectTagInfoEXT',
+-- 'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR',
+-- 'Vulkan.Core10.DescriptorSet.DescriptorPoolCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.DescriptorPoolInlineUniformBlockCreateInfoEXT',
+-- 'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetLayoutBindingFlagsCreateInfo',
+-- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.DescriptorSetLayoutSupport',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountAllocateInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountLayoutSupport',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo',
+-- 'Vulkan.Core10.Device.DeviceCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.DeviceDiagnosticsConfigCreateInfoNV',
+-- 'Vulkan.Extensions.VK_EXT_display_control.DeviceEventInfoEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupBindSparseInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupCommandBufferBeginInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupPresentCapabilitiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupPresentInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupSubmitInfo',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupSwapchainCreateInfoKHR',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.DeviceMemoryOpaqueCaptureAddressInfo',
+-- 'Vulkan.Extensions.VK_AMD_memory_overallocation_behavior.DeviceMemoryOverallocationCreateInfoAMD',
+-- 'Vulkan.Extensions.VK_EXT_private_data.DevicePrivateDataCreateInfoEXT',
+-- 'Vulkan.Core10.Device.DeviceQueueCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_global_priority.DeviceQueueGlobalPriorityCreateInfoEXT',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.DeviceQueueInfo2',
+-- 'Vulkan.Extensions.VK_EXT_display_control.DisplayEventInfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayModeCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayModeProperties2KHR',
+-- 'Vulkan.Extensions.VK_AMD_display_native_hdr.DisplayNativeHdrSurfaceCapabilitiesAMD',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneCapabilities2KHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneProperties2KHR',
+-- 'Vulkan.Extensions.VK_EXT_display_control.DisplayPowerInfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_display_swapchain.DisplayPresentInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayProperties2KHR',
+-- 'Vulkan.Extensions.VK_KHR_display.DisplaySurfaceCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesListEXT',
+-- 'Vulkan.Core10.Event.EventCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_win32.ExportFenceWin32HandleInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo',
+-- 'Vulkan.Extensions.VK_NV_external_memory.ExportMemoryAllocateInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_win32.ExportMemoryWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_external_memory_win32.ExportMemoryWin32HandleInfoNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.ExportSemaphoreWin32HandleInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties',
+-- 'Vulkan.Core10.Fence.FenceCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_fd.FenceGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_win32.FenceGetWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.FormatProperties2',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentImageInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo',
+-- 'Vulkan.Core10.Pass.FramebufferCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_coverage_reduction_mode.FramebufferMixedSamplesCombinationNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsMemoryRequirementsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
+-- 'Vulkan.Extensions.VK_EXT_hdr_metadata.HdrMetadataEXT',
+-- 'Vulkan.Extensions.VK_EXT_headless_surface.HeadlessSurfaceCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_MVK_ios_surface.IOSSurfaceCreateInfoMVK',
+-- 'Vulkan.Core10.Image.ImageCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierPropertiesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2',
+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2',
+-- 'Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface.ImagePipeSurfaceCreateInfoFUCHSIA',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageSparseMemoryRequirementsInfo2',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_astc_decode_mode.ImageViewASTCDecodeModeEXT',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewAddressPropertiesNVX',
+-- 'Vulkan.Core10.ImageView.ImageViewCreateInfo',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewHandleInfoNVX',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_fd.ImportFenceFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_win32.ImportFenceWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_fd.ImportMemoryFdInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_external_memory_win32.ImportMemoryWin32HandleInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_fd.ImportSemaphoreFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.ImportSemaphoreWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.InitializePerformanceApiInfoINTEL',
+-- 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo',
+-- 'Vulkan.Extensions.VK_MVK_macos_surface.MacOSSurfaceCreateInfoMVK',
+-- 'Vulkan.Core10.Memory.MappedMemoryRange',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo',
+-- 'Vulkan.Core10.Memory.MemoryAllocateInfo',
+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryFdPropertiesKHR',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.MemoryGetAndroidHardwareBufferInfoANDROID',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryGetWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_external_memory_host.MemoryHostPointerPropertiesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo',
+-- 'Vulkan.Extensions.VK_EXT_memory_priority.MemoryPriorityAllocateInfoEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryWin32HandlePropertiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_metal_surface.MetalSurfaceCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.PerformanceConfigurationAcquireInfoINTEL',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterDescriptionKHR',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterKHR',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.PerformanceMarkerInfoINTEL',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.PerformanceOverrideInfoINTEL',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.PerformanceQuerySubmitInfoKHR',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.PerformanceStreamMarkerInfoINTEL',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures',
+-- 'Vulkan.Extensions.VK_EXT_astc_decode_mode.PhysicalDeviceASTCDecodeFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures',
+-- 'Vulkan.Extensions.VK_EXT_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeaturesEXT',
+-- 'Vulkan.Extensions.VK_AMD_device_coherent_memory.PhysicalDeviceCoherentMemoryFeaturesAMD',
+-- 'Vulkan.Extensions.VK_NV_compute_shader_derivatives.PhysicalDeviceComputeShaderDerivativesFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.PhysicalDeviceConditionalRenderingFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_conservative_rasterization.PhysicalDeviceConservativeRasterizationPropertiesEXT',
+-- 'Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixFeaturesNV',
+-- 'Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixPropertiesNV',
+-- 'Vulkan.Extensions.VK_NV_corner_sampled_image.PhysicalDeviceCornerSampledImageFeaturesNV',
+-- 'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PhysicalDeviceCoverageReductionModeFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_custom_border_color.PhysicalDeviceCustomBorderColorFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_custom_border_color.PhysicalDeviceCustomBorderColorPropertiesEXT',
+-- 'Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing.PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PhysicalDeviceDepthClipEnableFeaturesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsPropertiesNV',
+-- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_discard_rectangles.PhysicalDeviceDiscardRectanglePropertiesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalBufferInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.PhysicalDeviceExternalFenceInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo',
+-- 'Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.PhysicalDeviceExternalSemaphoreInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
+-- 'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT',
+-- 'Vulkan.Extensions.VK_NV_fragment_shader_barycentric.PhysicalDeviceFragmentShaderBarycentricFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_fragment_shader_interlock.PhysicalDeviceFragmentShaderInterlockFeaturesEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.PhysicalDeviceImageViewImageFormatInfoEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.PhysicalDeviceImagelessFramebufferFeatures',
+-- 'Vulkan.Extensions.VK_EXT_index_type_uint8.PhysicalDeviceIndexTypeUint8FeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationPropertiesEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties',
+-- 'Vulkan.Extensions.VK_EXT_memory_budget.PhysicalDeviceMemoryBudgetPropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceMemoryProperties2',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
+-- 'Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties',
+-- 'Vulkan.Extensions.VK_EXT_pci_bus_info.PhysicalDevicePCIBusInfoPropertiesEXT',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryFeaturesKHR',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeaturesEXT',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
+-- 'Vulkan.Extensions.VK_EXT_private_data.PhysicalDevicePrivateDataFeaturesEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
+-- 'Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingFeaturesKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV',
+-- 'Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV',
+-- 'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2FeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2PropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.PhysicalDeviceSamplerFilterMinmaxProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
+-- 'Vulkan.Extensions.VK_KHR_shader_clock.PhysicalDeviceShaderClockFeaturesKHR',
+-- 'Vulkan.Extensions.VK_AMD_shader_core_properties2.PhysicalDeviceShaderCoreProperties2AMD',
+-- 'Vulkan.Extensions.VK_AMD_shader_core_properties.PhysicalDeviceShaderCorePropertiesAMD',
+-- 'Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation.PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8.PhysicalDeviceShaderFloat16Int8Features',
+-- 'Vulkan.Extensions.VK_NV_shader_image_footprint.PhysicalDeviceShaderImageFootprintFeaturesNV',
+-- 'Vulkan.Extensions.VK_INTEL_shader_integer_functions2.PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL',
+-- 'Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsFeaturesNV',
+-- 'Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsPropertiesNV',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types.PhysicalDeviceShaderSubgroupExtendedTypesFeatures',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImageFeaturesNV',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImagePropertiesNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
+-- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlPropertiesEXT',
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR',
+-- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreFeatures',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreProperties',
+-- 'Vulkan.Extensions.VK_EXT_tooling_info.PhysicalDeviceToolPropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout.PhysicalDeviceUniformBufferStandardLayoutFeatures',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers.PhysicalDeviceVariablePointersFeatures',
+-- 'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PhysicalDeviceVertexAttributeDivisorFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PhysicalDeviceVertexAttributeDivisorPropertiesEXT',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan11Features',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan11Properties',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan12Features',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan12Properties',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures',
+-- 'Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT',
+-- 'Vulkan.Core10.PipelineCache.PipelineCacheCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT',
+-- 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo',
+-- 'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD',
+-- 'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.PipelineCoverageModulationStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_fragment_coverage_to_color.PipelineCoverageToColorStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT',
+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT',
+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableInternalRepresentationKHR',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutablePropertiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableStatisticKHR',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineInfoKHR',
+-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo',
+-- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',
+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_conservative_rasterization.PipelineRasterizationConservativeStateCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT',
+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo',
+-- 'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT',
+-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PipelineTessellationDomainOriginStateCreateInfo',
+-- 'Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PipelineVertexInputDivisorStateCreateInfoEXT',
+-- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportCoarseSampleOrderStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV',
+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV',
+-- 'Vulkan.Extensions.VK_GGP_frame_token.PresentFrameTokenGGP',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_incremental_present.PresentRegionsKHR',
+-- 'Vulkan.Extensions.VK_GOOGLE_display_timing.PresentTimesInfoGOOGLE',
+-- 'Vulkan.Extensions.VK_EXT_private_data.PrivateDataSlotCreateInfoEXT',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.ProtectedSubmitInfo',
+-- 'Vulkan.Core10.Query.QueryPoolCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.QueryPoolPerformanceCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.QueryPoolPerformanceQueryCreateInfoINTEL',
+-- 'Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.QueueFamilyCheckpointPropertiesNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.QueueFamilyProperties2',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineInterfaceCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingShaderGroupCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingShaderGroupCreateInfoNV',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',
+-- 'Vulkan.Core10.Pass.RenderPassCreateInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.RenderPassCreateInfo2',
+-- 'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT',
+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT',
+-- 'Vulkan.Core10.Sampler.SamplerCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionImageFormatProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo',
+-- 'Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_fd.SemaphoreGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.SemaphoreGetWin32HandleInfoKHR',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreSignalInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo',
+-- 'Vulkan.Core10.Shader.ShaderModuleCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.ShaderModuleValidationCacheCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.SparseImageFormatProperties2',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.SparseImageMemoryRequirements2',
+-- 'Vulkan.Extensions.VK_GGP_stream_descriptor_surface.StreamDescriptorSurfaceCreateInfoGGP',
+-- 'Vulkan.Core10.Queue.SubmitInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassBeginInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDependency2',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDescription2',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassEndInfo',
+-- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT',
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT',
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceFormat2KHR',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_display_control.SwapchainCounterCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_AMD_display_native_hdr.SwapchainDisplayNativeHdrCreateInfoAMD',
+-- 'Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.TextureLODGatherFormatPropertiesAMD',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.ValidationCacheCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_validation_features.ValidationFeaturesEXT',
+-- 'Vulkan.Extensions.VK_EXT_validation_flags.ValidationFlagsEXT',
+-- 'Vulkan.Extensions.VK_NN_vi_surface.ViSurfaceCreateInfoNN',
+-- 'Vulkan.Extensions.VK_KHR_wayland_surface.WaylandSurfaceCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_win32_surface.Win32SurfaceCreateInfoKHR',
+-- 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT',
+-- 'Vulkan.Extensions.VK_KHR_xcb_surface.XcbSurfaceCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_xlib_surface.XlibSurfaceCreateInfoKHR'
+newtype StructureType = StructureType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_APPLICATION_INFO"
+pattern STRUCTURE_TYPE_APPLICATION_INFO = StructureType 0
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO"
+pattern STRUCTURE_TYPE_INSTANCE_CREATE_INFO = StructureType 1
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"
+pattern STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = StructureType 2
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO"
+pattern STRUCTURE_TYPE_DEVICE_CREATE_INFO = StructureType 3
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBMIT_INFO"
+pattern STRUCTURE_TYPE_SUBMIT_INFO = StructureType 4
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"
+pattern STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = StructureType 5
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"
+pattern STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = StructureType 6
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO"
+pattern STRUCTURE_TYPE_BIND_SPARSE_INFO = StructureType 7
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO"
+pattern STRUCTURE_TYPE_FENCE_CREATE_INFO = StructureType 8
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"
+pattern STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = StructureType 9
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO"
+pattern STRUCTURE_TYPE_EVENT_CREATE_INFO = StructureType 10
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"
+pattern STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = StructureType 11
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO"
+pattern STRUCTURE_TYPE_BUFFER_CREATE_INFO = StructureType 12
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"
+pattern STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = StructureType 13
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO"
+pattern STRUCTURE_TYPE_IMAGE_CREATE_INFO = StructureType 14
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"
+pattern STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = StructureType 15
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"
+pattern STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = StructureType 16
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = StructureType 17
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = StructureType 18
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = StructureType 19
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = StructureType 20
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = StructureType 21
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = StructureType 22
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = StructureType 23
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = StructureType 24
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = StructureType 25
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = StructureType 26
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = StructureType 27
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"
+pattern STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = StructureType 28
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"
+pattern STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = StructureType 29
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = StructureType 30
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO"
+pattern STRUCTURE_TYPE_SAMPLER_CREATE_INFO = StructureType 31
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = StructureType 32
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"
+pattern STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = StructureType 33
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = StructureType 34
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"
+pattern STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = StructureType 35
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"
+pattern STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = StructureType 36
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"
+pattern STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = StructureType 37
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"
+pattern STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = StructureType 38
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"
+pattern STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = StructureType 39
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"
+pattern STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = StructureType 40
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"
+pattern STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = StructureType 41
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"
+pattern STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = StructureType 42
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"
+pattern STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = StructureType 43
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"
+pattern STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = StructureType 44
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"
+pattern STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = StructureType 45
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_BARRIER"
+pattern STRUCTURE_TYPE_MEMORY_BARRIER = StructureType 46
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO"
+pattern STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = StructureType 47
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"
+pattern STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = StructureType 48
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = StructureType 1000300001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = StructureType 1000300000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT = StructureType 1000297000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT = StructureType 1000295002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT = StructureType 1000295001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = StructureType 1000295000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR = StructureType 1000290000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT = StructureType 1000287002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT = StructureType 1000287001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT = StructureType 1000287000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = StructureType 1000286001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = StructureType 1000286000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM"
+pattern STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM = StructureType 1000282001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM"
+pattern STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = StructureType 1000282000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = StructureType 1000281001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = StructureType 1000281000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = StructureType 1000277007
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV"
+pattern STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV = StructureType 1000277006
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV"
+pattern STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV = StructureType 1000277005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV = StructureType 1000277004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV"
+pattern STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV = StructureType 1000277003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV = StructureType 1000277002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV = StructureType 1000277001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = StructureType 1000277000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = StructureType 1000276000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR"
+pattern STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = StructureType 1000269005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR"
+pattern STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = StructureType 1000269004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR"
+pattern STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = StructureType 1000269003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = StructureType 1000269002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR"
+pattern STRUCTURE_TYPE_PIPELINE_INFO_KHR = StructureType 1000269001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = StructureType 1000269000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR"
+pattern STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR = StructureType 1000268000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = StructureType 1000265000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = StructureType 1000259002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = StructureType 1000259001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = StructureType 1000259000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = StructureType 1000256000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT"
+pattern STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT = StructureType 1000255001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT"
+pattern STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT = StructureType 1000255002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT"
+pattern STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT = StructureType 1000255000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT = StructureType 1000252000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT = StructureType 1000251000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV"
+pattern STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV = StructureType 1000250002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV = StructureType 1000250001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV = StructureType 1000250000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV = StructureType 1000249002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV"
+pattern STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV = StructureType 1000249001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = StructureType 1000249000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT"
+pattern STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = StructureType 1000247000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = StructureType 1000245000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = StructureType 1000244002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = StructureType 1000244000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = StructureType 1000240000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR"
+pattern STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR = StructureType 1000239000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT"
+pattern STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT = StructureType 1000238001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT = StructureType 1000238000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = StructureType 1000237000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD = StructureType 1000229000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD = StructureType 1000227000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = StructureType 1000225002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = StructureType 1000225001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = StructureType 1000225000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT = StructureType 1000218002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT = StructureType 1000218001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT = StructureType 1000218000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = StructureType 1000217000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA"
+pattern STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = StructureType 1000214000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD"
+pattern STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD = StructureType 1000213001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD"
+pattern STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = StructureType 1000213000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = StructureType 1000212000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL"
+pattern STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = StructureType 1000210005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL"
+pattern STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = StructureType 1000210004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL"
+pattern STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = StructureType 1000210003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL"
+pattern STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = StructureType 1000210002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL"
+pattern STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = StructureType 1000210001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL"
+pattern STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL = StructureType 1000210000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = StructureType 1000209000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV"
+pattern STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = StructureType 1000206001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV"
+pattern STRUCTURE_TYPE_CHECKPOINT_DATA_NV = StructureType 1000206000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = StructureType 1000205002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV = StructureType 1000205000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV = StructureType 1000204000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = StructureType 1000203000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = StructureType 1000202001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = StructureType 1000202000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = StructureType 1000201000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = StructureType 1000192000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP"
+pattern STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = StructureType 1000191000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = StructureType 1000190002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = StructureType 1000190001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = StructureType 1000190000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD"
+pattern STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = StructureType 1000189000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = StructureType 1000185000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT"
+pattern STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = StructureType 1000184000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD"
+pattern STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = StructureType 1000183000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = StructureType 1000181000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = StructureType 1000178002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = StructureType 1000178001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT"
+pattern STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = StructureType 1000178000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = StructureType 1000174000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = StructureType 1000170001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = StructureType 1000170000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = StructureType 1000166001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV = StructureType 1000166000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV = StructureType 1000165012
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV = StructureType 1000165011
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV = StructureType 1000165009
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV = StructureType 1000165008
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV"
+pattern STRUCTURE_TYPE_GEOMETRY_AABB_NV = StructureType 1000165005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV"
+pattern STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV = StructureType 1000165004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GEOMETRY_NV"
+pattern STRUCTURE_TYPE_GEOMETRY_NV = StructureType 1000165003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV = StructureType 1000165001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV = StructureType 1000165000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV = StructureType 1000164005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = StructureType 1000164002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = StructureType 1000164001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = StructureType 1000164000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = StructureType 1000160001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = StructureType 1000160000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = StructureType 1000158005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = StructureType 1000158004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = StructureType 1000158003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT = StructureType 1000158002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = StructureType 1000158001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT"
+pattern STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT = StructureType 1000158000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV = StructureType 1000154001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV = StructureType 1000154000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = StructureType 1000152000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR = StructureType 1000150018
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR = StructureType 1000150017
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR = StructureType 1000150016
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR = StructureType 1000150015
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR = StructureType 1000150014
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR = StructureType 1000150013
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR"
+pattern STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR = StructureType 1000150012
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR"
+pattern STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR = StructureType 1000150011
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR"
+pattern STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR = StructureType 1000150010
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR = StructureType 1000150009
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR = StructureType 1000150008
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR = StructureType 1000150006
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR = StructureType 1000150005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR = StructureType 1000150004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR = StructureType 1000150003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR = StructureType 1000150002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR = StructureType 1000150001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR"
+pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR = StructureType 1000150000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR"
+pattern STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR = StructureType 1000165007
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR"
+pattern STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR = StructureType 1000165006
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = StructureType 1000149000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = StructureType 1000148002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = StructureType 1000148001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = StructureType 1000148000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = StructureType 1000143004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = StructureType 1000143003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = StructureType 1000143002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT"
+pattern STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = StructureType 1000143001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT"
+pattern STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = StructureType 1000143000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = StructureType 1000138003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT"
+pattern STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = StructureType 1000138002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = StructureType 1000138001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = StructureType 1000138000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID"
+pattern STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = StructureType 1000129005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
+pattern STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = StructureType 1000129004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
+pattern STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = StructureType 1000129003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID"
+pattern STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = StructureType 1000129002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID"
+pattern STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = StructureType 1000129001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID"
+pattern STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = StructureType 1000129000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = StructureType 1000128004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"
+pattern STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = StructureType 1000128003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT"
+pattern STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = StructureType 1000128002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT"
+pattern STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = StructureType 1000128001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT"
+pattern STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = StructureType 1000128000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK"
+pattern STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = StructureType 1000123000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK"
+pattern STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = StructureType 1000122000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR"
+pattern STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = StructureType 1000121004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR"
+pattern STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = StructureType 1000121003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR"
+pattern STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = StructureType 1000121002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR"
+pattern STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = StructureType 1000121001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR"
+pattern STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = StructureType 1000121000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"
+pattern STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = StructureType 1000119002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"
+pattern STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = StructureType 1000119001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = StructureType 1000119000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR"
+pattern STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR = StructureType 1000116006
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR"
+pattern STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR = StructureType 1000116005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR"
+pattern STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR = StructureType 1000116004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR"
+pattern STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR = StructureType 1000116003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR = StructureType 1000116002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR = StructureType 1000116001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR = StructureType 1000116000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR"
+pattern STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = StructureType 1000115001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR"
+pattern STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = StructureType 1000115000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR"
+pattern STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = StructureType 1000114002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR"
+pattern STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = StructureType 1000114001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR"
+pattern STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = StructureType 1000114000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"
+pattern STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = StructureType 1000111000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_HDR_METADATA_EXT"
+pattern STRUCTURE_TYPE_HDR_METADATA_EXT = StructureType 1000105000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT = StructureType 1000102001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT = StructureType 1000102000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = StructureType 1000101001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = StructureType 1000101000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = StructureType 1000099001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = StructureType 1000099000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = StructureType 1000098000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = StructureType 1000097000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"
+pattern STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = StructureType 1000092000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = StructureType 1000091003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT"
+pattern STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = StructureType 1000091002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT"
+pattern STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = StructureType 1000091001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT"
+pattern STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = StructureType 1000091000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT"
+pattern STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = StructureType 1000090000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = StructureType 1000087000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR"
+pattern STRUCTURE_TYPE_PRESENT_REGIONS_KHR = StructureType 1000084000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT"
+pattern STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = StructureType 1000081002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = StructureType 1000081001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT"
+pattern STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = StructureType 1000081000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = StructureType 1000080000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR"
+pattern STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = StructureType 1000079001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR"
+pattern STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = StructureType 1000079000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR"
+pattern STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = StructureType 1000078003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR"
+pattern STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = StructureType 1000078002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
+pattern STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = StructureType 1000078001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
+pattern STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = StructureType 1000078000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"
+pattern STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = StructureType 1000075000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR"
+pattern STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = StructureType 1000074002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = StructureType 1000074001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR"
+pattern STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = StructureType 1000074000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR"
+pattern STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = StructureType 1000073003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = StructureType 1000073002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
+pattern STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = StructureType 1000073001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
+pattern STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = StructureType 1000073000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = StructureType 1000067001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT"
+pattern STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = StructureType 1000067000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = StructureType 1000066000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN"
+pattern STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = StructureType 1000062000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"
+pattern STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = StructureType 1000061000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = StructureType 1000060012
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = StructureType 1000060011
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"
+pattern STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = StructureType 1000060010
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"
+pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = StructureType 1000060009
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = StructureType 1000060008
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = StructureType 1000060007
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"
+pattern STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = StructureType 1000058000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"
+pattern STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = StructureType 1000057001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV"
+pattern STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = StructureType 1000057000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV"
+pattern STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = StructureType 1000056001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = StructureType 1000056000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = StructureType 1000050000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP"
+pattern STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = StructureType 1000049000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD"
+pattern STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = StructureType 1000041000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX"
+pattern STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = StructureType 1000030001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX"
+pattern STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = StructureType 1000030000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = StructureType 1000028002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT = StructureType 1000028001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT = StructureType 1000028000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"
+pattern STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = StructureType 1000026002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = StructureType 1000026001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"
+pattern STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = StructureType 1000026000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT"
+pattern STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = StructureType 1000022002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT"
+pattern STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = StructureType 1000022001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT"
+pattern STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = StructureType 1000022000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"
+pattern STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = StructureType 1000018000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = StructureType 1000011000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = StructureType 1000009000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = StructureType 1000008000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = StructureType 1000006000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = StructureType 1000005000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = StructureType 1000004000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"
+pattern STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = StructureType 1000003000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = StructureType 1000002001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = StructureType 1000002000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR"
+pattern STRUCTURE_TYPE_PRESENT_INFO_KHR = StructureType 1000001001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = StructureType 1000001000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"
+pattern STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO = StructureType 1000257004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"
+pattern STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO = StructureType 1000257003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"
+pattern STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO = StructureType 1000257002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"
+pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO = StructureType 1000244001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES = StructureType 1000257000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"
+pattern STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO = StructureType 1000207005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"
+pattern STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO = StructureType 1000207004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"
+pattern STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO = StructureType 1000207003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"
+pattern STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO = StructureType 1000207002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES = StructureType 1000207001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES = StructureType 1000207000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES = StructureType 1000261000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT"
+pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT = StructureType 1000241002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT"
+pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT = StructureType 1000241001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES = StructureType 1000241000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES = StructureType 1000175000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES = StructureType 1000253000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO"
+pattern STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO = StructureType 1000108003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO"
+pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO = StructureType 1000108002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO"
+pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO = StructureType 1000108001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES = StructureType 1000108000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES = StructureType 1000211000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO"
+pattern STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO = StructureType 1000130001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES = StructureType 1000130000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"
+pattern STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO = StructureType 1000246000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES = StructureType 1000221000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"
+pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE = StructureType 1000199001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES = StructureType 1000199000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT = StructureType 1000161004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO = StructureType 1000161003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES = StructureType 1000161002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES = StructureType 1000161001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO = StructureType 1000161000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES = StructureType 1000197000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES = StructureType 1000082000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES = StructureType 1000180000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES = StructureType 1000196000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES = StructureType 1000177000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBPASS_END_INFO"
+pattern STRUCTURE_TYPE_SUBPASS_END_INFO = StructureType 1000109006
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"
+pattern STRUCTURE_TYPE_SUBPASS_BEGIN_INFO = StructureType 1000109005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"
+pattern STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 = StructureType 1000109004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"
+pattern STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 = StructureType 1000109003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"
+pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 = StructureType 1000109002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"
+pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 = StructureType 1000109001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"
+pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 = StructureType 1000109000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO"
+pattern STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO = StructureType 1000147000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES = StructureType 52
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES = StructureType 51
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES = StructureType 50
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES = StructureType 49
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = StructureType 1000063000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = StructureType 1000168001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = StructureType 1000168000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"
+pattern STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = StructureType 1000076001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = StructureType 1000076000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"
+pattern STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = StructureType 1000077000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO"
+pattern STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = StructureType 1000113000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"
+pattern STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = StructureType 1000112001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = StructureType 1000112000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO"
+pattern STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = StructureType 1000072002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO"
+pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = StructureType 1000072001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO"
+pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = StructureType 1000072000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = StructureType 1000071004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES"
+pattern STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = StructureType 1000071003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = StructureType 1000071002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"
+pattern STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = StructureType 1000071001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = StructureType 1000071000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = StructureType 1000085000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"
+pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = StructureType 1000156005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = StructureType 1000156004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"
+pattern STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = StructureType 1000156003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"
+pattern STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = StructureType 1000156002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"
+pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = StructureType 1000156001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"
+pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = StructureType 1000156000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"
+pattern STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = StructureType 1000145003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = StructureType 1000145002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = StructureType 1000145001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"
+pattern STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = StructureType 1000145000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES = StructureType 1000120000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = StructureType 1000053002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = StructureType 1000053001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"
+pattern STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = StructureType 1000053000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"
+pattern STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = StructureType 1000117003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"
+pattern STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = StructureType 1000117002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"
+pattern STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = StructureType 1000117001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = StructureType 1000117000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = StructureType 1000059008
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"
+pattern STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = StructureType 1000059007
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = StructureType 1000059006
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2"
+pattern STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = StructureType 1000059005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = StructureType 1000059004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2"
+pattern STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = StructureType 1000059003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2"
+pattern STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = StructureType 1000059002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = StructureType 1000059001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = StructureType 1000059000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"
+pattern STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = StructureType 1000146004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2"
+pattern STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = StructureType 1000146003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"
+pattern STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = StructureType 1000146002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2"
+pattern STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = StructureType 1000146001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2"
+pattern STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = StructureType 1000146000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = StructureType 1000070001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = StructureType 1000070000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO"
+pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = StructureType 1000060014
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO"
+pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = StructureType 1000060013
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = StructureType 1000060006
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = StructureType 1000060005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = StructureType 1000060004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = StructureType 1000060003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"
+pattern STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = StructureType 1000060000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"
+pattern STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = StructureType 1000127001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"
+pattern STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = StructureType 1000127000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = StructureType 1000083000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"
+pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = StructureType 1000157001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"
+pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = StructureType 1000157000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = StructureType 1000094000
+{-# complete STRUCTURE_TYPE_APPLICATION_INFO,
+             STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+             STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
+             STRUCTURE_TYPE_DEVICE_CREATE_INFO,
+             STRUCTURE_TYPE_SUBMIT_INFO,
+             STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
+             STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
+             STRUCTURE_TYPE_BIND_SPARSE_INFO,
+             STRUCTURE_TYPE_FENCE_CREATE_INFO,
+             STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
+             STRUCTURE_TYPE_EVENT_CREATE_INFO,
+             STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
+             STRUCTURE_TYPE_BUFFER_CREATE_INFO,
+             STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO,
+             STRUCTURE_TYPE_IMAGE_CREATE_INFO,
+             STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+             STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
+             STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
+             STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
+             STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
+             STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+             STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
+             STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
+             STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+             STRUCTURE_TYPE_COPY_DESCRIPTOR_SET,
+             STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
+             STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
+             STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
+             STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
+             STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+             STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+             STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+             STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+             STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
+             STRUCTURE_TYPE_MEMORY_BARRIER,
+             STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO,
+             STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
+             STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT,
+             STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT,
+             STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT,
+             STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT,
+             STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM,
+             STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV,
+             STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV,
+             STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV,
+             STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV,
+             STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV,
+             STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV,
+             STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT,
+             STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR,
+             STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR,
+             STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR,
+             STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR,
+             STRUCTURE_TYPE_PIPELINE_INFO_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR,
+             STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT,
+             STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT,
+             STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT,
+             STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT,
+             STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV,
+             STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV,
+             STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV,
+             STRUCTURE_TYPE_VALIDATION_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT,
+             STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV,
+             STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR,
+             STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT,
+             STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT,
+             STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT,
+             STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA,
+             STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD,
+             STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL,
+             STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL,
+             STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL,
+             STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL,
+             STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL,
+             STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL,
+             STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV,
+             STRUCTURE_TYPE_CHECKPOINT_DATA_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV,
+             STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV,
+             STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT,
+             STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT,
+             STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD,
+             STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT,
+             STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT,
+             STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT,
+             STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT,
+             STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT,
+             STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV,
+             STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV,
+             STRUCTURE_TYPE_GEOMETRY_AABB_NV,
+             STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV,
+             STRUCTURE_TYPE_GEOMETRY_NV,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV,
+             STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT,
+             STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT,
+             STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT,
+             STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV,
+             STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR,
+             STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR,
+             STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR,
+             STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR,
+             STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR,
+             STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,
+             STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR,
+             STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT,
+             STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT,
+             STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT,
+             STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT,
+             STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID,
+             STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID,
+             STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID,
+             STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID,
+             STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID,
+             STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID,
+             STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT,
+             STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT,
+             STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT,
+             STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT,
+             STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK,
+             STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK,
+             STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR,
+             STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR,
+             STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR,
+             STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR,
+             STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR,
+             STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR,
+             STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR,
+             STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR,
+             STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR,
+             STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR,
+             STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR,
+             STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR,
+             STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR,
+             STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR,
+             STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR,
+             STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR,
+             STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR,
+             STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR,
+             STRUCTURE_TYPE_HDR_METADATA_EXT,
+             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT,
+             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX,
+             STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE,
+             STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT,
+             STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT,
+             STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT,
+             STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT,
+             STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PRESENT_REGIONS_KHR,
+             STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT,
+             STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR,
+             STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR,
+             STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR,
+             STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR,
+             STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR,
+             STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR,
+             STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR,
+             STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR,
+             STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR,
+             STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR,
+             STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR,
+             STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR,
+             STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR,
+             STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR,
+             STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT,
+             STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT,
+             STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN,
+             STRUCTURE_TYPE_VALIDATION_FLAGS_EXT,
+             STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR,
+             STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR,
+             STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR,
+             STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR,
+             STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV,
+             STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV,
+             STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV,
+             STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV,
+             STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV,
+             STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP,
+             STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD,
+             STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX,
+             STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX,
+             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT,
+             STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV,
+             STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV,
+             STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,
+             STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
+             STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT,
+             STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT,
+             STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD,
+             STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
+             STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR,
+             STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_PRESENT_INFO_KHR,
+             STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
+             STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO,
+             STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO,
+             STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO,
+             STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES,
+             STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO,
+             STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
+             STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO,
+             STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES,
+             STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT,
+             STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES,
+             STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO,
+             STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO,
+             STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES,
+             STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES,
+             STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES,
+             STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES,
+             STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT,
+             STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
+             STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES,
+             STRUCTURE_TYPE_SUBPASS_END_INFO,
+             STRUCTURE_TYPE_SUBPASS_BEGIN_INFO,
+             STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,
+             STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
+             STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2,
+             STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
+             STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
+             STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
+             STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES,
+             STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO,
+             STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO,
+             STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,
+             STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO,
+             STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO,
+             STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
+             STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES,
+             STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO,
+             STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO,
+             STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,
+             STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
+             STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,
+             STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,
+             STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO,
+             STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO,
+             STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES,
+             STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
+             STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,
+             STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO,
+             STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO,
+             STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2,
+             STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2,
+             STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2,
+             STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2,
+             STRUCTURE_TYPE_FORMAT_PROPERTIES_2,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
+             STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2,
+             STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
+             STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2,
+             STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
+             STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,
+             STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES,
+             STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO,
+             STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO,
+             STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO,
+             STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO,
+             STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO,
+             STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO,
+             STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO,
+             STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,
+             STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,
+             STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
+             STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO,
+             STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES :: StructureType #-}
+
+instance Show StructureType where
+  showsPrec p = \case
+    STRUCTURE_TYPE_APPLICATION_INFO -> showString "STRUCTURE_TYPE_APPLICATION_INFO"
+    STRUCTURE_TYPE_INSTANCE_CREATE_INFO -> showString "STRUCTURE_TYPE_INSTANCE_CREATE_INFO"
+    STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO -> showString "STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"
+    STRUCTURE_TYPE_DEVICE_CREATE_INFO -> showString "STRUCTURE_TYPE_DEVICE_CREATE_INFO"
+    STRUCTURE_TYPE_SUBMIT_INFO -> showString "STRUCTURE_TYPE_SUBMIT_INFO"
+    STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"
+    STRUCTURE_TYPE_MAPPED_MEMORY_RANGE -> showString "STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"
+    STRUCTURE_TYPE_BIND_SPARSE_INFO -> showString "STRUCTURE_TYPE_BIND_SPARSE_INFO"
+    STRUCTURE_TYPE_FENCE_CREATE_INFO -> showString "STRUCTURE_TYPE_FENCE_CREATE_INFO"
+    STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO -> showString "STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"
+    STRUCTURE_TYPE_EVENT_CREATE_INFO -> showString "STRUCTURE_TYPE_EVENT_CREATE_INFO"
+    STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO -> showString "STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"
+    STRUCTURE_TYPE_BUFFER_CREATE_INFO -> showString "STRUCTURE_TYPE_BUFFER_CREATE_INFO"
+    STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO -> showString "STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"
+    STRUCTURE_TYPE_IMAGE_CREATE_INFO -> showString "STRUCTURE_TYPE_IMAGE_CREATE_INFO"
+    STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO -> showString "STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"
+    STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO -> showString "STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"
+    STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO -> showString "STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"
+    STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO -> showString "STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"
+    STRUCTURE_TYPE_SAMPLER_CREATE_INFO -> showString "STRUCTURE_TYPE_SAMPLER_CREATE_INFO"
+    STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"
+    STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"
+    STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"
+    STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET -> showString "STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"
+    STRUCTURE_TYPE_COPY_DESCRIPTOR_SET -> showString "STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"
+    STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO -> showString "STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"
+    STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO -> showString "STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"
+    STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO -> showString "STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"
+    STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"
+    STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"
+    STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"
+    STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO -> showString "STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"
+    STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER -> showString "STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"
+    STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER -> showString "STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"
+    STRUCTURE_TYPE_MEMORY_BARRIER -> showString "STRUCTURE_TYPE_MEMORY_BARRIER"
+    STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO -> showString "STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO"
+    STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO -> showString "STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"
+    STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT"
+    STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT"
+    STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT"
+    STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT"
+    STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM -> showString "STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM"
+    STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV"
+    STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV -> showString "STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV"
+    STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV -> showString "STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV"
+    STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV"
+    STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV -> showString "STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV"
+    STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV"
+    STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT"
+    STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR -> showString "STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR"
+    STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR -> showString "STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR"
+    STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR -> showString "STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR"
+    STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR"
+    STRUCTURE_TYPE_PIPELINE_INFO_KHR -> showString "STRUCTURE_TYPE_PIPELINE_INFO_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR"
+    STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR -> showString "STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT"
+    STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT -> showString "STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT"
+    STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT -> showString "STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT"
+    STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT -> showString "STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT"
+    STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV -> showString "STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV"
+    STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV"
+    STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV -> showString "STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV"
+    STRUCTURE_TYPE_VALIDATION_FEATURES_EXT -> showString "STRUCTURE_TYPE_VALIDATION_FEATURES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT"
+    STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV"
+    STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR -> showString "STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR"
+    STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT -> showString "STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT"
+    STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT"
+    STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT"
+    STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA -> showString "STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA"
+    STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD -> showString "STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD"
+    STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD -> showString "STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL -> showString "STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL"
+    STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL -> showString "STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL"
+    STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL -> showString "STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL"
+    STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL -> showString "STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL"
+    STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL -> showString "STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL"
+    STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL -> showString "STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL"
+    STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV -> showString "STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV"
+    STRUCTURE_TYPE_CHECKPOINT_DATA_NV -> showString "STRUCTURE_TYPE_CHECKPOINT_DATA_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV"
+    STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV"
+    STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP -> showString "STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT"
+    STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"
+    STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD -> showString "STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"
+    STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT -> showString "STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT"
+    STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD -> showString "STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"
+    STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT"
+    STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT -> showString "STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT"
+    STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT"
+    STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV"
+    STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV"
+    STRUCTURE_TYPE_GEOMETRY_AABB_NV -> showString "STRUCTURE_TYPE_GEOMETRY_AABB_NV"
+    STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV -> showString "STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV"
+    STRUCTURE_TYPE_GEOMETRY_NV -> showString "STRUCTURE_TYPE_GEOMETRY_NV"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV"
+    STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"
+    STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT"
+    STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"
+    STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT -> showString "STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV"
+    STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR"
+    STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR -> showString "STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR"
+    STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR -> showString "STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR"
+    STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR -> showString "STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR"
+    STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR -> showString "STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR"
+    STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR -> showString "STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR"
+    STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR -> showString "STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR"
+    STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT"
+    STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT -> showString "STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT"
+    STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT -> showString "STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT"
+    STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT -> showString "STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT"
+    STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID -> showString "STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID"
+    STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID -> showString "STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
+    STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID -> showString "STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
+    STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID -> showString "STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID"
+    STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID -> showString "STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID"
+    STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID -> showString "STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID"
+    STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT -> showString "STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"
+    STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT -> showString "STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT"
+    STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT"
+    STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT"
+    STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK -> showString "STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK"
+    STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK -> showString "STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK"
+    STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR -> showString "STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR"
+    STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR -> showString "STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR"
+    STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR -> showString "STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR"
+    STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR -> showString "STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR"
+    STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR -> showString "STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR"
+    STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR -> showString "STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"
+    STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR -> showString "STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"
+    STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR -> showString "STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR"
+    STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR -> showString "STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR"
+    STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR -> showString "STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR"
+    STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR -> showString "STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR"
+    STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR"
+    STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR -> showString "STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR"
+    STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR"
+    STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR"
+    STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR"
+    STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR"
+    STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR -> showString "STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"
+    STRUCTURE_TYPE_HDR_METADATA_EXT -> showString "STRUCTURE_TYPE_HDR_METADATA_EXT"
+    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT"
+    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX"
+    STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE -> showString "STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"
+    STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT -> showString "STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT"
+    STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT -> showString "STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT"
+    STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT -> showString "STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT"
+    STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT -> showString "STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT"
+    STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PRESENT_REGIONS_KHR -> showString "STRUCTURE_TYPE_PRESENT_REGIONS_KHR"
+    STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT -> showString "STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT"
+    STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT -> showString "STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"
+    STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR -> showString "STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR"
+    STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR"
+    STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR"
+    STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR -> showString "STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR"
+    STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
+    STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
+    STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR -> showString "STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"
+    STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR -> showString "STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR"
+    STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR"
+    STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR"
+    STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR"
+    STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR -> showString "STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR"
+    STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
+    STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR -> showString "STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT"
+    STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT -> showString "STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT"
+    STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN -> showString "STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN"
+    STRUCTURE_TYPE_VALIDATION_FLAGS_EXT -> showString "STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"
+    STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR -> showString "STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"
+    STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR -> showString "STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"
+    STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR -> showString "STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"
+    STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR -> showString "STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"
+    STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV -> showString "STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"
+    STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV -> showString "STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"
+    STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV -> showString "STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV"
+    STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV -> showString "STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV"
+    STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV"
+    STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP -> showString "STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP"
+    STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD -> showString "STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD"
+    STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX -> showString "STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX"
+    STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX -> showString "STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX"
+    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT"
+    STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV -> showString "STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"
+    STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"
+    STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"
+    STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT"
+    STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT"
+    STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT"
+    STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD -> showString "STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"
+    STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT -> showString "STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"
+    STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR -> showString "STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"
+    STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_PRESENT_INFO_KHR -> showString "STRUCTURE_TYPE_PRESENT_INFO_KHR"
+    STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR -> showString "STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"
+    STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO -> showString "STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"
+    STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"
+    STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO -> showString "STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"
+    STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO -> showString "STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"
+    STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO -> showString "STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"
+    STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO -> showString "STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"
+    STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO -> showString "STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"
+    STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO -> showString "STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"
+    STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT -> showString "STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT"
+    STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT -> showString "STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"
+    STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO -> showString "STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO"
+    STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO -> showString "STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO"
+    STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO -> showString "STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"
+    STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO -> showString "STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"
+    STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO -> showString "STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"
+    STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE -> showString "STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"
+    STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"
+    STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES"
+    STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"
+    STRUCTURE_TYPE_SUBPASS_END_INFO -> showString "STRUCTURE_TYPE_SUBPASS_END_INFO"
+    STRUCTURE_TYPE_SUBPASS_BEGIN_INFO -> showString "STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"
+    STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 -> showString "STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"
+    STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 -> showString "STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"
+    STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 -> showString "STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"
+    STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 -> showString "STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"
+    STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 -> showString "STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"
+    STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO -> showString "STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"
+    STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT -> showString "STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"
+    STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES -> showString "STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"
+    STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO -> showString "STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"
+    STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO -> showString "STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO"
+    STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES -> showString "STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"
+    STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO"
+    STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO -> showString "STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO"
+    STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO -> showString "STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"
+    STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES -> showString "STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"
+    STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES -> showString "STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"
+    STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO -> showString "STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"
+    STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES -> showString "STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"
+    STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO -> showString "STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"
+    STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO -> showString "STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"
+    STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO -> showString "STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"
+    STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO -> showString "STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"
+    STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 -> showString "STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"
+    STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO -> showString "STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"
+    STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO -> showString "STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"
+    STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO -> showString "STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"
+    STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO -> showString "STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"
+    STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO -> showString "STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"
+    STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 -> showString "STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"
+    STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 -> showString "STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2"
+    STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 -> showString "STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2"
+    STRUCTURE_TYPE_FORMAT_PROPERTIES_2 -> showString "STRUCTURE_TYPE_FORMAT_PROPERTIES_2"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2"
+    STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 -> showString "STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"
+    STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 -> showString "STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2"
+    STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 -> showString "STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"
+    STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 -> showString "STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2"
+    STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 -> showString "STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2"
+    STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO -> showString "STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"
+    STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO -> showString "STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO"
+    STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO -> showString "STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO"
+    STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO -> showString "STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"
+    STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO -> showString "STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"
+    STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO -> showString "STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"
+    STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO -> showString "STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"
+    STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO -> showString "STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"
+    STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO -> showString "STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"
+    STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS -> showString "STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"
+    STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO -> showString "STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"
+    STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO -> showString "STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"
+    STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"
+    StructureType x -> showParen (p >= 11) (showString "StructureType " . showsPrec 11 x)
+
+instance Read StructureType where
+  readPrec = parens (choose [("STRUCTURE_TYPE_APPLICATION_INFO", pure STRUCTURE_TYPE_APPLICATION_INFO)
+                            , ("STRUCTURE_TYPE_INSTANCE_CREATE_INFO", pure STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO", pure STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_DEVICE_CREATE_INFO", pure STRUCTURE_TYPE_DEVICE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_SUBMIT_INFO", pure STRUCTURE_TYPE_SUBMIT_INFO)
+                            , ("STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO", pure STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
+                            , ("STRUCTURE_TYPE_MAPPED_MEMORY_RANGE", pure STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
+                            , ("STRUCTURE_TYPE_BIND_SPARSE_INFO", pure STRUCTURE_TYPE_BIND_SPARSE_INFO)
+                            , ("STRUCTURE_TYPE_FENCE_CREATE_INFO", pure STRUCTURE_TYPE_FENCE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO", pure STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_EVENT_CREATE_INFO", pure STRUCTURE_TYPE_EVENT_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO", pure STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_BUFFER_CREATE_INFO", pure STRUCTURE_TYPE_BUFFER_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO", pure STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_IMAGE_CREATE_INFO", pure STRUCTURE_TYPE_IMAGE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO", pure STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO", pure STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO", pure STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO", pure STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_SAMPLER_CREATE_INFO", pure STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO)
+                            , ("STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET", pure STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
+                            , ("STRUCTURE_TYPE_COPY_DESCRIPTOR_SET", pure STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
+                            , ("STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO", pure STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO", pure STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO", pure STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO", pure STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
+                            , ("STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO", pure STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO)
+                            , ("STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO", pure STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
+                            , ("STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO", pure STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
+                            , ("STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER", pure STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER)
+                            , ("STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER", pure STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER)
+                            , ("STRUCTURE_TYPE_MEMORY_BARRIER", pure STRUCTURE_TYPE_MEMORY_BARRIER)
+                            , ("STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO", pure STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO", pure STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV", pure STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR", pure STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT", pure STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM", pure STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM)
+                            , ("STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM", pure STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV", pure STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV)
+                            , ("STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV", pure STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV)
+                            , ("STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV", pure STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV", pure STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV)
+                            , ("STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV", pure STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV", pure STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR", pure STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR)
+                            , ("STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR", pure STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR)
+                            , ("STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR", pure STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR", pure STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR)
+                            , ("STRUCTURE_TYPE_PIPELINE_INFO_KHR", pure STRUCTURE_TYPE_PIPELINE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR)
+                            , ("STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR", pure STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT", pure STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT)
+                            , ("STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT", pure STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT)
+                            , ("STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT", pure STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV", pure STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV)
+                            , ("STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV)
+                            , ("STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV", pure STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_VALIDATION_FEATURES_EXT", pure STRUCTURE_TYPE_VALIDATION_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT", pure STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR", pure STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR)
+                            , ("STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT", pure STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT", pure STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA", pure STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA)
+                            , ("STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD", pure STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD)
+                            , ("STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD", pure STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL", pure STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL)
+                            , ("STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL", pure STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL)
+                            , ("STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL", pure STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL)
+                            , ("STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL", pure STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL)
+                            , ("STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL", pure STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL)
+                            , ("STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL", pure STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL)
+                            , ("STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV", pure STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV)
+                            , ("STRUCTURE_TYPE_CHECKPOINT_DATA_NV", pure STRUCTURE_TYPE_CHECKPOINT_DATA_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP", pure STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD", pure STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD)
+                            , ("STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT", pure STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD", pure STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT", pure STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT", pure STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT", pure STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV)
+                            , ("STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV", pure STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV)
+                            , ("STRUCTURE_TYPE_GEOMETRY_AABB_NV", pure STRUCTURE_TYPE_GEOMETRY_AABB_NV)
+                            , ("STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV", pure STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV)
+                            , ("STRUCTURE_TYPE_GEOMETRY_NV", pure STRUCTURE_TYPE_GEOMETRY_NV)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV", pure STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT", pure STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT", pure STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT", pure STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT", pure STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT", pure STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR", pure STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR)
+                            , ("STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR", pure STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR", pure STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)
+                            , ("STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR", pure STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR", pure STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)
+                            , ("STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR", pure STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)
+                            , ("STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR", pure STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR)
+                            , ("STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT", pure STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT", pure STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT)
+                            , ("STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT", pure STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT", pure STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID", pure STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID)
+                            , ("STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID", pure STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
+                            , ("STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID", pure STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
+                            , ("STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID", pure STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID)
+                            , ("STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID", pure STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID)
+                            , ("STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID", pure STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID)
+                            , ("STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT", pure STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT)
+                            , ("STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT", pure STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT)
+                            , ("STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT)
+                            , ("STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK", pure STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK)
+                            , ("STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK", pure STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK)
+                            , ("STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR", pure STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR)
+                            , ("STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR", pure STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR)
+                            , ("STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR", pure STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR)
+                            , ("STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR", pure STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR)
+                            , ("STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR", pure STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR)
+                            , ("STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR", pure STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR)
+                            , ("STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR", pure STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR)
+                            , ("STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR", pure STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR)
+                            , ("STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR", pure STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR)
+                            , ("STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR", pure STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR)
+                            , ("STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR", pure STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR)
+                            , ("STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR)
+                            , ("STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR", pure STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR)
+                            , ("STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR)
+                            , ("STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR", pure STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR)
+                            , ("STRUCTURE_TYPE_HDR_METADATA_EXT", pure STRUCTURE_TYPE_HDR_METADATA_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX)
+                            , ("STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE", pure STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE)
+                            , ("STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT", pure STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT", pure STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT", pure STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT", pure STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT)
+                            , ("STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT", pure STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PRESENT_REGIONS_KHR", pure STRUCTURE_TYPE_PRESENT_REGIONS_KHR)
+                            , ("STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT", pure STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT", pure STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR)
+                            , ("STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR", pure STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR)
+                            , ("STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR)
+                            , ("STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR", pure STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR)
+                            , ("STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR", pure STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR", pure STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR)
+                            , ("STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR", pure STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR)
+                            , ("STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR)
+                            , ("STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR", pure STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR)
+                            , ("STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR", pure STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT", pure STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN", pure STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN)
+                            , ("STRUCTURE_TYPE_VALIDATION_FLAGS_EXT", pure STRUCTURE_TYPE_VALIDATION_FLAGS_EXT)
+                            , ("STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR", pure STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR", pure STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR)
+                            , ("STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR", pure STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR", pure STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR)
+                            , ("STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR", pure STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR", pure STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR)
+                            , ("STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV", pure STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV)
+                            , ("STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV", pure STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV)
+                            , ("STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV", pure STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV)
+                            , ("STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV", pure STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV", pure STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV)
+                            , ("STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP", pure STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP)
+                            , ("STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD", pure STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD)
+                            , ("STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX", pure STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX)
+                            , ("STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX", pure STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX)
+                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT)
+                            , ("STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV", pure STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV", pure STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV", pure STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV)
+                            , ("STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT)
+                            , ("STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT)
+                            , ("STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD", pure STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD)
+                            , ("STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT", pure STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT)
+                            , ("STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR", pure STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR)
+                            , ("STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR", pure STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_PRESENT_INFO_KHR", pure STRUCTURE_TYPE_PRESENT_INFO_KHR)
+                            , ("STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR", pure STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
+                            , ("STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO", pure STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO)
+                            , ("STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO", pure STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO)
+                            , ("STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO", pure STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO", pure STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES)
+                            , ("STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO", pure STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO)
+                            , ("STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO", pure STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO)
+                            , ("STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO", pure STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO)
+                            , ("STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO", pure STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES)
+                            , ("STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT", pure STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT)
+                            , ("STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT", pure STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES)
+                            , ("STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO", pure STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO)
+                            , ("STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO", pure STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO)
+                            , ("STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO", pure STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES)
+                            , ("STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO", pure STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES)
+                            , ("STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO", pure STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES)
+                            , ("STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE", pure STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES)
+                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT", pure STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT)
+                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES)
+                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES)
+                            , ("STRUCTURE_TYPE_SUBPASS_END_INFO", pure STRUCTURE_TYPE_SUBPASS_END_INFO)
+                            , ("STRUCTURE_TYPE_SUBPASS_BEGIN_INFO", pure STRUCTURE_TYPE_SUBPASS_BEGIN_INFO)
+                            , ("STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2", pure STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2)
+                            , ("STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2", pure STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2)
+                            , ("STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2", pure STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2)
+                            , ("STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2", pure STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2)
+                            , ("STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2", pure STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2)
+                            , ("STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO", pure STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES)
+                            , ("STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT", pure STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES)
+                            , ("STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES", pure STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO)
+                            , ("STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO", pure STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO", pure STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES", pure STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO)
+                            , ("STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO", pure STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO)
+                            , ("STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO", pure STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO", pure STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES)
+                            , ("STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES", pure STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO)
+                            , ("STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES", pure STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO)
+                            , ("STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO", pure STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES", pure STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES)
+                            , ("STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO", pure STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO)
+                            , ("STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO", pure STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO)
+                            , ("STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO", pure STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO)
+                            , ("STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO", pure STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2", pure STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES)
+                            , ("STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO", pure STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES)
+                            , ("STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO", pure STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO", pure STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO", pure STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO", pure STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2)
+                            , ("STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2", pure STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2)
+                            , ("STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2", pure STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2)
+                            , ("STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2", pure STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2)
+                            , ("STRUCTURE_TYPE_FORMAT_PROPERTIES_2", pure STRUCTURE_TYPE_FORMAT_PROPERTIES_2)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2)
+                            , ("STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2", pure STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2)
+                            , ("STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2", pure STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2)
+                            , ("STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2", pure STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2)
+                            , ("STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2", pure STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2)
+                            , ("STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2", pure STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2)
+                            , ("STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO", pure STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES)
+                            , ("STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO", pure STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO)
+                            , ("STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO", pure STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO)
+                            , ("STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO", pure STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO)
+                            , ("STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO", pure STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO)
+                            , ("STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO", pure STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO)
+                            , ("STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO", pure STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO)
+                            , ("STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO", pure STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO)
+                            , ("STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO", pure STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO)
+                            , ("STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS", pure STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES)
+                            , ("STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO", pure STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO)
+                            , ("STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO", pure STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO)
+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "StructureType")
+                       v <- step readPrec
+                       pure (StructureType v)))
+
diff --git a/src/Vulkan/Core10/Enums/SubpassContents.hs b/src/Vulkan/Core10/Enums/SubpassContents.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SubpassContents.hs
@@ -0,0 +1,61 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SubpassContents  (SubpassContents( SUBPASS_CONTENTS_INLINE
+                                                            , SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
+                                                            , ..
+                                                            )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkSubpassContents - Specify how commands in the first subpass of a
+-- render pass are provided
+--
+-- = See Also
+--
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassBeginInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdNextSubpass'
+newtype SubpassContents = SubpassContents Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | '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 SUBPASS_CONTENTS_INLINE = SubpassContents 0
+-- | '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
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdExecuteCommands' is the only
+-- valid command on the command buffer until
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdNextSubpass' or
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdEndRenderPass'.
+pattern SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = SubpassContents 1
+{-# complete SUBPASS_CONTENTS_INLINE,
+             SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS :: SubpassContents #-}
+
+instance Show SubpassContents where
+  showsPrec p = \case
+    SUBPASS_CONTENTS_INLINE -> showString "SUBPASS_CONTENTS_INLINE"
+    SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS -> showString "SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS"
+    SubpassContents x -> showParen (p >= 11) (showString "SubpassContents " . showsPrec 11 x)
+
+instance Read SubpassContents where
+  readPrec = parens (choose [("SUBPASS_CONTENTS_INLINE", pure SUBPASS_CONTENTS_INLINE)
+                            , ("SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS", pure SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SubpassContents")
+                       v <- step readPrec
+                       pure (SubpassContents v)))
+
diff --git a/src/Vulkan/Core10/Enums/SubpassContents.hs-boot b/src/Vulkan/Core10/Enums/SubpassContents.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SubpassContents.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SubpassContents  (SubpassContents) where
+
+
+
+data SubpassContents
+
diff --git a/src/Vulkan/Core10/Enums/SubpassDescriptionFlagBits.hs b/src/Vulkan/Core10/Enums/SubpassDescriptionFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SubpassDescriptionFlagBits.hs
@@ -0,0 +1,87 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SubpassDescriptionFlagBits  ( SubpassDescriptionFlagBits( SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM
+                                                                                   , SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM
+                                                                                   , SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX
+                                                                                   , SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX
+                                                                                   , ..
+                                                                                   )
+                                                       , SubpassDescriptionFlags
+                                                       ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkSubpassDescriptionFlagBits - Bitmask specifying usage of a subpass
+--
+-- = Description
+--
+-- Note
+--
+-- Shader resolve operations allow for custom resolve operations, but
+-- overdrawing pixels /may/ have a performance and\/or power cost.
+-- Furthermore, since the contents of any depth stencil attachment or color
+-- attachment is undefined at the begining of a shader resolve subpass, any
+-- depth testing, stencil testing, or blending which sources these
+-- undefined values are also undefined.
+--
+-- = See Also
+--
+-- 'SubpassDescriptionFlags'
+newtype SubpassDescriptionFlagBits = SubpassDescriptionFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM' specifies that the subpass
+-- performs shader resolve operations.
+pattern SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM = SubpassDescriptionFlagBits 0x00000008
+-- | 'SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM' specifies that the
+-- framebuffer region is the fragment region, that is, the minimum region
+-- dependencies are by pixel rather than by sample, such that any fragment
+-- shader invocation /can/ access any sample associated with that fragment
+-- shader invocation.
+pattern SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM = SubpassDescriptionFlagBits 0x00000004
+-- | 'SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX' specifies that
+-- shaders compiled for this subpass use per-view positions which only
+-- differ in value in the x component. Per-view viewport mask /can/ also be
+-- used.
+pattern SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = SubpassDescriptionFlagBits 0x00000002
+-- | 'SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX' specifies that shaders
+-- compiled for this subpass write the attributes for all views in a single
+-- invocation of each vertex processing stage. All pipelines compiled
+-- against a subpass that includes this bit /must/ write per-view
+-- attributes to the @*PerViewNV[]@ shader outputs, in addition to the
+-- non-per-view (e.g. @Position@) outputs.
+pattern SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = SubpassDescriptionFlagBits 0x00000001
+
+type SubpassDescriptionFlags = SubpassDescriptionFlagBits
+
+instance Show SubpassDescriptionFlagBits where
+  showsPrec p = \case
+    SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM -> showString "SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM"
+    SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM -> showString "SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM"
+    SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX -> showString "SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"
+    SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX -> showString "SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX"
+    SubpassDescriptionFlagBits x -> showParen (p >= 11) (showString "SubpassDescriptionFlagBits 0x" . showHex x)
+
+instance Read SubpassDescriptionFlagBits where
+  readPrec = parens (choose [("SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM", pure SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM)
+                            , ("SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM", pure SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM)
+                            , ("SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX", pure SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX)
+                            , ("SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX", pure SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SubpassDescriptionFlagBits")
+                       v <- step readPrec
+                       pure (SubpassDescriptionFlagBits v)))
+
diff --git a/src/Vulkan/Core10/Enums/SystemAllocationScope.hs b/src/Vulkan/Core10/Enums/SystemAllocationScope.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/SystemAllocationScope.hs
@@ -0,0 +1,133 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.SystemAllocationScope  (SystemAllocationScope( SYSTEM_ALLOCATION_SCOPE_COMMAND
+                                                                        , SYSTEM_ALLOCATION_SCOPE_OBJECT
+                                                                        , SYSTEM_ALLOCATION_SCOPE_CACHE
+                                                                        , SYSTEM_ALLOCATION_SCOPE_DEVICE
+                                                                        , SYSTEM_ALLOCATION_SCOPE_INSTANCE
+                                                                        , ..
+                                                                        )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkSystemAllocationScope - Allocation scope
+--
+-- = Description
+--
+-- -   'SYSTEM_ALLOCATION_SCOPE_COMMAND' specifies that the allocation is
+--     scoped to the duration of the Vulkan command.
+--
+-- -   'SYSTEM_ALLOCATION_SCOPE_OBJECT' specifies that the allocation is
+--     scoped to the lifetime of the Vulkan object that is being created or
+--     used.
+--
+-- -   'SYSTEM_ALLOCATION_SCOPE_CACHE' specifies that the allocation is
+--     scoped to the lifetime of a 'Vulkan.Core10.Handles.PipelineCache' or
+--     'Vulkan.Extensions.Handles.ValidationCacheEXT' object.
+--
+-- -   'SYSTEM_ALLOCATION_SCOPE_DEVICE' specifies that the allocation is
+--     scoped to the lifetime of the Vulkan device.
+--
+-- -   '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 'SYSTEM_ALLOCATION_SCOPE_OBJECT' or
+-- '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 '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
+--     'Vulkan.Core10.Handles.Device' has an allocator it will be used,
+--     else if the parent 'Vulkan.Core10.Handles.Instance' has an allocator
+--     it will be used. Else,
+--
+-- -   If an allocation is associated with a
+--     'Vulkan.Extensions.Handles.ValidationCacheEXT' or
+--     'Vulkan.Core10.Handles.PipelineCache' object, the allocator will use
+--     the '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 'Vulkan.Core10.Handles.Device' or
+--     'Vulkan.Core10.Handles.Instance', the allocator will use an
+--     allocation scope of '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
+--     '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 'SYSTEM_ALLOCATION_SCOPE_INSTANCE'.
+--
+-- -   Otherwise an implementation will allocate memory through an
+--     alternative mechanism that is unspecified.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
+newtype SystemAllocationScope = SystemAllocationScope Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND"
+pattern SYSTEM_ALLOCATION_SCOPE_COMMAND = SystemAllocationScope 0
+-- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT"
+pattern SYSTEM_ALLOCATION_SCOPE_OBJECT = SystemAllocationScope 1
+-- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_CACHE"
+pattern SYSTEM_ALLOCATION_SCOPE_CACHE = SystemAllocationScope 2
+-- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE"
+pattern SYSTEM_ALLOCATION_SCOPE_DEVICE = SystemAllocationScope 3
+-- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE"
+pattern SYSTEM_ALLOCATION_SCOPE_INSTANCE = SystemAllocationScope 4
+{-# complete SYSTEM_ALLOCATION_SCOPE_COMMAND,
+             SYSTEM_ALLOCATION_SCOPE_OBJECT,
+             SYSTEM_ALLOCATION_SCOPE_CACHE,
+             SYSTEM_ALLOCATION_SCOPE_DEVICE,
+             SYSTEM_ALLOCATION_SCOPE_INSTANCE :: SystemAllocationScope #-}
+
+instance Show SystemAllocationScope where
+  showsPrec p = \case
+    SYSTEM_ALLOCATION_SCOPE_COMMAND -> showString "SYSTEM_ALLOCATION_SCOPE_COMMAND"
+    SYSTEM_ALLOCATION_SCOPE_OBJECT -> showString "SYSTEM_ALLOCATION_SCOPE_OBJECT"
+    SYSTEM_ALLOCATION_SCOPE_CACHE -> showString "SYSTEM_ALLOCATION_SCOPE_CACHE"
+    SYSTEM_ALLOCATION_SCOPE_DEVICE -> showString "SYSTEM_ALLOCATION_SCOPE_DEVICE"
+    SYSTEM_ALLOCATION_SCOPE_INSTANCE -> showString "SYSTEM_ALLOCATION_SCOPE_INSTANCE"
+    SystemAllocationScope x -> showParen (p >= 11) (showString "SystemAllocationScope " . showsPrec 11 x)
+
+instance Read SystemAllocationScope where
+  readPrec = parens (choose [("SYSTEM_ALLOCATION_SCOPE_COMMAND", pure SYSTEM_ALLOCATION_SCOPE_COMMAND)
+                            , ("SYSTEM_ALLOCATION_SCOPE_OBJECT", pure SYSTEM_ALLOCATION_SCOPE_OBJECT)
+                            , ("SYSTEM_ALLOCATION_SCOPE_CACHE", pure SYSTEM_ALLOCATION_SCOPE_CACHE)
+                            , ("SYSTEM_ALLOCATION_SCOPE_DEVICE", pure SYSTEM_ALLOCATION_SCOPE_DEVICE)
+                            , ("SYSTEM_ALLOCATION_SCOPE_INSTANCE", pure SYSTEM_ALLOCATION_SCOPE_INSTANCE)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SystemAllocationScope")
+                       v <- step readPrec
+                       pure (SystemAllocationScope v)))
+
diff --git a/src/Vulkan/Core10/Enums/VendorId.hs b/src/Vulkan/Core10/Enums/VendorId.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/VendorId.hs
@@ -0,0 +1,76 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.VendorId  (VendorId( VENDOR_ID_VIV
+                                              , VENDOR_ID_VSI
+                                              , VENDOR_ID_KAZAN
+                                              , VENDOR_ID_CODEPLAY
+                                              , ..
+                                              )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkVendorId - Khronos vendor IDs
+--
+-- = Description
+--
+-- Note
+--
+-- Khronos vendor IDs may be allocated by vendors at any time. Only the
+-- latest canonical versions of this Specification, of the corresponding
+-- @vk.xml@ API Registry, and of the corresponding @vulkan_core.h@ header
+-- file /must/ contain all reserved Khronos vendor IDs.
+--
+-- Only Khronos vendor IDs are given symbolic names at present. PCI vendor
+-- IDs returned by the implementation can be looked up in the PCI-SIG
+-- database.
+--
+-- = See Also
+--
+-- No cross-references are available
+newtype VendorId = VendorId Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+-- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
+
+-- No documentation found for Nested "VkVendorId" "VK_VENDOR_ID_VIV"
+pattern VENDOR_ID_VIV = VendorId 65537
+-- No documentation found for Nested "VkVendorId" "VK_VENDOR_ID_VSI"
+pattern VENDOR_ID_VSI = VendorId 65538
+-- No documentation found for Nested "VkVendorId" "VK_VENDOR_ID_KAZAN"
+pattern VENDOR_ID_KAZAN = VendorId 65539
+-- No documentation found for Nested "VkVendorId" "VK_VENDOR_ID_CODEPLAY"
+pattern VENDOR_ID_CODEPLAY = VendorId 65540
+{-# complete VENDOR_ID_VIV,
+             VENDOR_ID_VSI,
+             VENDOR_ID_KAZAN,
+             VENDOR_ID_CODEPLAY :: VendorId #-}
+
+instance Show VendorId where
+  showsPrec p = \case
+    VENDOR_ID_VIV -> showString "VENDOR_ID_VIV"
+    VENDOR_ID_VSI -> showString "VENDOR_ID_VSI"
+    VENDOR_ID_KAZAN -> showString "VENDOR_ID_KAZAN"
+    VENDOR_ID_CODEPLAY -> showString "VENDOR_ID_CODEPLAY"
+    VendorId x -> showParen (p >= 11) (showString "VendorId " . showsPrec 11 x)
+
+instance Read VendorId where
+  readPrec = parens (choose [("VENDOR_ID_VIV", pure VENDOR_ID_VIV)
+                            , ("VENDOR_ID_VSI", pure VENDOR_ID_VSI)
+                            , ("VENDOR_ID_KAZAN", pure VENDOR_ID_KAZAN)
+                            , ("VENDOR_ID_CODEPLAY", pure VENDOR_ID_CODEPLAY)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "VendorId")
+                       v <- step readPrec
+                       pure (VendorId v)))
+
diff --git a/src/Vulkan/Core10/Enums/VertexInputRate.hs b/src/Vulkan/Core10/Enums/VertexInputRate.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Enums/VertexInputRate.hs
@@ -0,0 +1,53 @@
+{-# language CPP #-}
+module Vulkan.Core10.Enums.VertexInputRate  (VertexInputRate( VERTEX_INPUT_RATE_VERTEX
+                                                            , VERTEX_INPUT_RATE_INSTANCE
+                                                            , ..
+                                                            )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkVertexInputRate - Specify rate at which vertex attributes are pulled
+-- from buffers
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription'
+newtype VertexInputRate = VertexInputRate Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'VERTEX_INPUT_RATE_VERTEX' specifies that vertex attribute addressing is
+-- a function of the vertex index.
+pattern VERTEX_INPUT_RATE_VERTEX = VertexInputRate 0
+-- | 'VERTEX_INPUT_RATE_INSTANCE' specifies that vertex attribute addressing
+-- is a function of the instance index.
+pattern VERTEX_INPUT_RATE_INSTANCE = VertexInputRate 1
+{-# complete VERTEX_INPUT_RATE_VERTEX,
+             VERTEX_INPUT_RATE_INSTANCE :: VertexInputRate #-}
+
+instance Show VertexInputRate where
+  showsPrec p = \case
+    VERTEX_INPUT_RATE_VERTEX -> showString "VERTEX_INPUT_RATE_VERTEX"
+    VERTEX_INPUT_RATE_INSTANCE -> showString "VERTEX_INPUT_RATE_INSTANCE"
+    VertexInputRate x -> showParen (p >= 11) (showString "VertexInputRate " . showsPrec 11 x)
+
+instance Read VertexInputRate where
+  readPrec = parens (choose [("VERTEX_INPUT_RATE_VERTEX", pure VERTEX_INPUT_RATE_VERTEX)
+                            , ("VERTEX_INPUT_RATE_INSTANCE", pure VERTEX_INPUT_RATE_INSTANCE)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "VertexInputRate")
+                       v <- step readPrec
+                       pure (VertexInputRate v)))
+
diff --git a/src/Vulkan/Core10/Event.hs b/src/Vulkan/Core10/Event.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Event.hs
@@ -0,0 +1,461 @@
+{-# language CPP #-}
+module Vulkan.Core10.Event  ( createEvent
+                            , withEvent
+                            , destroyEvent
+                            , getEventStatus
+                            , setEvent
+                            , resetEvent
+                            , EventCreateInfo(..)
+                            ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateEvent))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyEvent))
+import Vulkan.Dynamic (DeviceCmds(pVkGetEventStatus))
+import Vulkan.Dynamic (DeviceCmds(pVkResetEvent))
+import Vulkan.Dynamic (DeviceCmds(pVkSetEvent))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.Handles (Event)
+import Vulkan.Core10.Handles (Event(..))
+import Vulkan.Core10.Enums.EventCreateFlags (EventCreateFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EVENT_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateEvent
+  :: FunPtr (Ptr Device_T -> Ptr EventCreateInfo -> Ptr AllocationCallbacks -> Ptr Event -> IO Result) -> Ptr Device_T -> Ptr EventCreateInfo -> Ptr AllocationCallbacks -> Ptr Event -> IO Result
+
+-- | vkCreateEvent - Create a new event object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the event.
+--
+-- -   @pCreateInfo@ is a pointer to a 'EventCreateInfo' structure
+--     containing information about how the event is to be created.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pEvent@ is a pointer to a handle in which the resulting event
+--     object is returned.
+--
+-- = Description
+--
+-- When created, the event object is in the unsignaled state.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid 'EventCreateInfo'
+--     structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pEvent@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Event' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Event',
+-- 'EventCreateInfo'
+createEvent :: forall io . MonadIO io => Device -> EventCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Event)
+createEvent device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateEventPtr = pVkCreateEvent (deviceCmds (device :: Device))
+  lift $ unless (vkCreateEventPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateEvent is null" Nothing Nothing
+  let vkCreateEvent' = mkVkCreateEvent vkCreateEventPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPEvent <- ContT $ bracket (callocBytes @Event 8) free
+  r <- lift $ vkCreateEvent' (deviceHandle (device)) pCreateInfo pAllocator (pPEvent)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pEvent <- lift $ peek @Event pPEvent
+  pure $ (pEvent)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createEvent' and 'destroyEvent'
+--
+-- To ensure that 'destroyEvent' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withEvent :: forall io r . MonadIO io => Device -> EventCreateInfo -> Maybe AllocationCallbacks -> (io (Event) -> ((Event) -> io ()) -> r) -> r
+withEvent device pCreateInfo pAllocator b =
+  b (createEvent device pCreateInfo pAllocator)
+    (\(o0) -> destroyEvent device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyEvent
+  :: FunPtr (Ptr Device_T -> Event -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Event -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyEvent - Destroy an event object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @event@ /must/ have completed
+--     execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @event@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @event@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @event@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @event@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Event' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @event@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @event@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Event'
+destroyEvent :: forall io . MonadIO io => Device -> Event -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyEvent device event allocator = liftIO . evalContT $ do
+  let vkDestroyEventPtr = pVkDestroyEvent (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyEventPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyEvent is null" Nothing Nothing
+  let vkDestroyEvent' = mkVkDestroyEvent vkDestroyEventPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyEvent' (deviceHandle (device)) (event) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetEventStatus
+  :: FunPtr (Ptr Device_T -> Event -> IO Result) -> Ptr Device_T -> Event -> IO Result
+
+-- | vkGetEventStatus - Retrieve the status of an event object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the event.
+--
+-- -   @event@ is the handle of the event to query.
+--
+-- = Description
+--
+-- Upon success, 'getEventStatus' returns the state of the event object
+-- with the following return codes:
+--
+-- +------------------------------------------+-----------------------------------+
+-- | Status                                   | Meaning                           |
+-- +==========================================+===================================+
+-- | 'Vulkan.Core10.Enums.Result.EVENT_SET'   | The event specified by @event@ is |
+-- |                                          | signaled.                         |
+-- +------------------------------------------+-----------------------------------+
+-- | 'Vulkan.Core10.Enums.Result.EVENT_RESET' | The event specified by @event@ is |
+-- |                                          | unsignaled.                       |
+-- +------------------------------------------+-----------------------------------+
+--
+-- Event Object Status Codes
+--
+-- If a 'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent' or
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResetEvent' command is in a
+-- command buffer that is in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 'getEventStatus'
+-- will return the new state. If an event is already in the requested
+-- state, then updating it to the same state has no effect.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.EVENT_SET'
+--
+--     -   'Vulkan.Core10.Enums.Result.EVENT_RESET'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Event'
+getEventStatus :: forall io . MonadIO io => Device -> Event -> io (Result)
+getEventStatus device event = liftIO $ do
+  let vkGetEventStatusPtr = pVkGetEventStatus (deviceCmds (device :: Device))
+  unless (vkGetEventStatusPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetEventStatus is null" Nothing Nothing
+  let vkGetEventStatus' = mkVkGetEventStatus vkGetEventStatusPtr
+  r <- vkGetEventStatus' (deviceHandle (device)) (event)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkSetEvent
+  :: FunPtr (Ptr Device_T -> Event -> IO Result) -> Ptr Device_T -> Event -> IO Result
+
+-- | vkSetEvent - Set an event to signaled state
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the event.
+--
+-- -   @event@ is the event to set.
+--
+-- = Description
+--
+-- When 'setEvent' 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 'setEvent' is executed,
+-- then 'setEvent' has no effect, and no event signal operation occurs.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @event@ /must/ be a valid 'Vulkan.Core10.Handles.Event' handle
+--
+-- -   @event@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @event@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Event'
+setEvent :: forall io . MonadIO io => Device -> Event -> io ()
+setEvent device event = liftIO $ do
+  let vkSetEventPtr = pVkSetEvent (deviceCmds (device :: Device))
+  unless (vkSetEventPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkSetEvent is null" Nothing Nothing
+  let vkSetEvent' = mkVkSetEvent vkSetEventPtr
+  r <- vkSetEvent' (deviceHandle (device)) (event)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkResetEvent
+  :: FunPtr (Ptr Device_T -> Event -> IO Result) -> Ptr Device_T -> Event -> IO Result
+
+-- | vkResetEvent - Reset an event to non-signaled state
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the event.
+--
+-- -   @event@ is the event to reset.
+--
+-- = Description
+--
+-- When 'resetEvent' 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 'resetEvent' is
+-- executed, then 'resetEvent' has no effect, and no event unsignal
+-- operation occurs.
+--
+-- == Valid Usage
+--
+-- -   @event@ /must/ not be waited on by a
+--     'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents' command that is
+--     currently executing
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @event@ /must/ be a valid 'Vulkan.Core10.Handles.Event' handle
+--
+-- -   @event@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @event@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Event'
+resetEvent :: forall io . MonadIO io => Device -> Event -> io ()
+resetEvent device event = liftIO $ do
+  let vkResetEventPtr = pVkResetEvent (deviceCmds (device :: Device))
+  unless (vkResetEventPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkResetEvent is null" Nothing Nothing
+  let vkResetEvent' = mkVkResetEvent vkResetEventPtr
+  r <- vkResetEvent' (deviceHandle (device)) (event)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkEventCreateInfo - Structure specifying parameters of a newly created
+-- event
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.EventCreateFlags.EventCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createEvent'
+data EventCreateInfo = EventCreateInfo
+  { -- | @flags@ /must/ be @0@
+    flags :: EventCreateFlags }
+  deriving (Typeable)
+deriving instance Show EventCreateInfo
+
+instance ToCStruct EventCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p EventCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EVENT_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr EventCreateFlags)) (flags)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EVENT_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct EventCreateInfo where
+  peekCStruct p = do
+    flags <- peek @EventCreateFlags ((p `plusPtr` 16 :: Ptr EventCreateFlags))
+    pure $ EventCreateInfo
+             flags
+
+instance Storable EventCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero EventCreateInfo where
+  zero = EventCreateInfo
+           zero
+
diff --git a/src/Vulkan/Core10/Event.hs-boot b/src/Vulkan/Core10/Event.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Event.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core10.Event  (EventCreateInfo) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data EventCreateInfo
+
+instance ToCStruct EventCreateInfo
+instance Show EventCreateInfo
+
+instance FromCStruct EventCreateInfo
+
diff --git a/src/Vulkan/Core10/ExtensionDiscovery.hs b/src/Vulkan/Core10/ExtensionDiscovery.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/ExtensionDiscovery.hs
@@ -0,0 +1,305 @@
+{-# language CPP #-}
+module Vulkan.Core10.ExtensionDiscovery  ( enumerateInstanceExtensionProperties
+                                         , enumerateDeviceExtensionProperties
+                                         , ExtensionProperties(..)
+                                         ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import Foreign.Ptr (castFunPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.ByteString (packCString)
+import Data.ByteString (useAsCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Foreign.C.Types (CChar(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Ptr (Ptr(Ptr))
+import Data.Word (Word32)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Dynamic (getInstanceProcAddr')
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
+import Vulkan.NamedType ((:::))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkEnumerateDeviceExtensionProperties))
+import Vulkan.Core10.APIConstants (MAX_EXTENSION_NAME_SIZE)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkEnumerateInstanceExtensionProperties
+  :: FunPtr (Ptr CChar -> Ptr Word32 -> Ptr ExtensionProperties -> IO Result) -> Ptr CChar -> Ptr Word32 -> Ptr ExtensionProperties -> IO Result
+
+-- | vkEnumerateInstanceExtensionProperties - Returns up to requested number
+-- of global extension properties
+--
+-- = 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
+--     'ExtensionProperties' structures.
+--
+-- = 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,
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.SUCCESS', to indicate that not all the
+-- available properties were returned.
+--
+-- Because the list of available layers may change externally between calls
+-- to 'enumerateInstanceExtensionProperties', 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.
+--
+-- Implementations /must/ not advertise any pair of extensions that cannot
+-- be enabled together due to behavioral differences, or any extension that
+-- cannot be enabled against the advertised version.
+--
+-- == 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@ 'ExtensionProperties' structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_LAYER_NOT_PRESENT'
+--
+-- = See Also
+--
+-- 'ExtensionProperties'
+enumerateInstanceExtensionProperties :: forall io . MonadIO io => ("layerName" ::: Maybe ByteString) -> io (Result, ("properties" ::: Vector ExtensionProperties))
+enumerateInstanceExtensionProperties layerName = liftIO . evalContT $ do
+  vkEnumerateInstanceExtensionPropertiesPtr <- lift $ castFunPtr @_ @(("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr ExtensionProperties) -> IO Result) <$> getInstanceProcAddr' nullPtr (Ptr "vkEnumerateInstanceExtensionProperties"#)
+  lift $ unless (vkEnumerateInstanceExtensionPropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEnumerateInstanceExtensionProperties is null" Nothing Nothing
+  let vkEnumerateInstanceExtensionProperties' = mkVkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionPropertiesPtr
+  pLayerName <- case (layerName) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ useAsCString (j)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkEnumerateInstanceExtensionProperties' pLayerName (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @ExtensionProperties ((fromIntegral (pPropertyCount)) * 260)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 260) :: Ptr ExtensionProperties) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkEnumerateInstanceExtensionProperties' pLayerName (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @ExtensionProperties (((pPProperties) `advancePtrBytes` (260 * (i)) :: Ptr ExtensionProperties)))
+  pure $ ((r'), pProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkEnumerateDeviceExtensionProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr CChar -> Ptr Word32 -> Ptr ExtensionProperties -> IO Result) -> Ptr PhysicalDevice_T -> Ptr CChar -> Ptr Word32 -> Ptr ExtensionProperties -> IO Result
+
+-- | vkEnumerateDeviceExtensionProperties - Returns properties of available
+-- physical device extensions
+--
+-- = 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
+--     'enumerateInstanceExtensionProperties'::@pPropertyCount@ parameter.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     'ExtensionProperties' structures.
+--
+-- = 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.
+--
+-- Implementations /must/ not advertise any pair of extensions that cannot
+-- be enabled together due to behavioral differences, or any extension that
+-- cannot be enabled against the advertised version.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' 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@ 'ExtensionProperties' structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_LAYER_NOT_PRESENT'
+--
+-- = See Also
+--
+-- 'ExtensionProperties', 'Vulkan.Core10.Handles.PhysicalDevice'
+enumerateDeviceExtensionProperties :: forall io . MonadIO io => PhysicalDevice -> ("layerName" ::: Maybe ByteString) -> io (Result, ("properties" ::: Vector ExtensionProperties))
+enumerateDeviceExtensionProperties physicalDevice layerName = liftIO . evalContT $ do
+  let vkEnumerateDeviceExtensionPropertiesPtr = pVkEnumerateDeviceExtensionProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkEnumerateDeviceExtensionPropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEnumerateDeviceExtensionProperties is null" Nothing Nothing
+  let vkEnumerateDeviceExtensionProperties' = mkVkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionPropertiesPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pLayerName <- case (layerName) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ useAsCString (j)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkEnumerateDeviceExtensionProperties' physicalDevice' pLayerName (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @ExtensionProperties ((fromIntegral (pPropertyCount)) * 260)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 260) :: Ptr ExtensionProperties) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkEnumerateDeviceExtensionProperties' physicalDevice' pLayerName (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @ExtensionProperties (((pPProperties) `advancePtrBytes` (260 * (i)) :: Ptr ExtensionProperties)))
+  pure $ ((r'), pProperties')
+
+
+-- | VkExtensionProperties - Structure specifying an extension properties
+--
+-- = See Also
+--
+-- 'enumerateDeviceExtensionProperties',
+-- 'enumerateInstanceExtensionProperties'
+data ExtensionProperties = ExtensionProperties
+  { -- | @extensionName@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_EXTENSION_NAME_SIZE' @char@ containing a
+    -- null-terminated UTF-8 string which is the name of the extension.
+    extensionName :: ByteString
+  , -- | @specVersion@ is the version of this extension. It is an integer,
+    -- incremented with backward compatible changes.
+    specVersion :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show ExtensionProperties
+
+instance ToCStruct ExtensionProperties where
+  withCStruct x f = allocaBytesAligned 260 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExtensionProperties{..} f = do
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (extensionName)
+    poke ((p `plusPtr` 256 :: Ptr Word32)) (specVersion)
+    f
+  cStructSize = 260
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (mempty)
+    poke ((p `plusPtr` 256 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct ExtensionProperties where
+  peekCStruct p = do
+    extensionName <- packCString (lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))))
+    specVersion <- peek @Word32 ((p `plusPtr` 256 :: Ptr Word32))
+    pure $ ExtensionProperties
+             extensionName specVersion
+
+instance Storable ExtensionProperties where
+  sizeOf ~_ = 260
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExtensionProperties where
+  zero = ExtensionProperties
+           mempty
+           zero
+
diff --git a/src/Vulkan/Core10/ExtensionDiscovery.hs-boot b/src/Vulkan/Core10/ExtensionDiscovery.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/ExtensionDiscovery.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core10.ExtensionDiscovery  (ExtensionProperties) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExtensionProperties
+
+instance ToCStruct ExtensionProperties
+instance Show ExtensionProperties
+
+instance FromCStruct ExtensionProperties
+
diff --git a/src/Vulkan/Core10/Fence.hs b/src/Vulkan/Core10/Fence.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Fence.hs
@@ -0,0 +1,568 @@
+{-# language CPP #-}
+module Vulkan.Core10.Fence  ( createFence
+                            , withFence
+                            , destroyFence
+                            , resetFences
+                            , getFenceStatus
+                            , waitForFences
+                            , FenceCreateInfo(..)
+                            ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Bool32(..))
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateFence))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyFence))
+import Vulkan.Dynamic (DeviceCmds(pVkGetFenceStatus))
+import Vulkan.Dynamic (DeviceCmds(pVkResetFences))
+import Vulkan.Dynamic (DeviceCmds(pVkWaitForFences))
+import Vulkan.Core10.Handles (Device_T)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_fence (ExportFenceCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_fence_win32 (ExportFenceWin32HandleInfoKHR)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.Handles (Fence)
+import Vulkan.Core10.Handles (Fence(..))
+import Vulkan.Core10.Enums.FenceCreateFlagBits (FenceCreateFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FENCE_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateFence
+  :: FunPtr (Ptr Device_T -> Ptr (FenceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result) -> Ptr Device_T -> Ptr (FenceCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result
+
+-- | vkCreateFence - Create a new fence object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the fence.
+--
+-- -   @pCreateInfo@ is a pointer to a 'FenceCreateInfo' structure
+--     containing information about how the fence is to be created.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pFence@ is a pointer to a handle in which the resulting fence
+--     object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid 'FenceCreateInfo'
+--     structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pFence@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Fence' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Fence',
+-- 'FenceCreateInfo'
+createFence :: forall a io . (Extendss FenceCreateInfo a, PokeChain a, MonadIO io) => Device -> FenceCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Fence)
+createFence device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateFencePtr = pVkCreateFence (deviceCmds (device :: Device))
+  lift $ unless (vkCreateFencePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateFence is null" Nothing Nothing
+  let vkCreateFence' = mkVkCreateFence vkCreateFencePtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPFence <- ContT $ bracket (callocBytes @Fence 8) free
+  r <- lift $ vkCreateFence' (deviceHandle (device)) pCreateInfo pAllocator (pPFence)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pFence <- lift $ peek @Fence pPFence
+  pure $ (pFence)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createFence' and 'destroyFence'
+--
+-- To ensure that 'destroyFence' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withFence :: forall a io r . (Extendss FenceCreateInfo a, PokeChain a, MonadIO io) => Device -> FenceCreateInfo a -> Maybe AllocationCallbacks -> (io (Fence) -> ((Fence) -> io ()) -> r) -> r
+withFence device pCreateInfo pAllocator b =
+  b (createFence device pCreateInfo pAllocator)
+    (\(o0) -> destroyFence device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyFence
+  :: FunPtr (Ptr Device_T -> Fence -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Fence -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyFence - Destroy a fence object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-submission queue submission>
+--     commands that refer to @fence@ /must/ have completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @fence@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @fence@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' 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
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Fence'
+destroyFence :: forall io . MonadIO io => Device -> Fence -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyFence device fence allocator = liftIO . evalContT $ do
+  let vkDestroyFencePtr = pVkDestroyFence (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyFencePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyFence is null" Nothing Nothing
+  let vkDestroyFence' = mkVkDestroyFence vkDestroyFencePtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyFence' (deviceHandle (device)) (fence) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkResetFences
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr Fence -> IO Result) -> Ptr Device_T -> Word32 -> Ptr Fence -> IO Result
+
+-- | vkResetFences - Resets one or more fence objects
+--
+-- = 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
+--
+-- If any member of @pFences@ currently has its
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing payload imported>
+-- with temporary permanence, that fence’s prior permanent payload is first
+-- restored. The remaining operations described therefore operate on the
+-- restored payload.
+--
+-- When 'resetFences' 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
+-- 'resetFences' is executed, then 'resetFences' 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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pFences@ /must/ be a valid pointer to an array of @fenceCount@
+--     valid 'Vulkan.Core10.Handles.Fence' 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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Fence'
+resetFences :: forall io . MonadIO io => Device -> ("fences" ::: Vector Fence) -> io ()
+resetFences device fences = liftIO . evalContT $ do
+  let vkResetFencesPtr = pVkResetFences (deviceCmds (device :: Device))
+  lift $ unless (vkResetFencesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkResetFences is null" Nothing Nothing
+  let vkResetFences' = mkVkResetFences vkResetFencesPtr
+  pPFences <- ContT $ allocaBytesAligned @Fence ((Data.Vector.length (fences)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPFences `plusPtr` (8 * (i)) :: Ptr Fence) (e)) (fences)
+  r <- lift $ vkResetFences' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (fences)) :: Word32)) (pPFences)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetFenceStatus
+  :: FunPtr (Ptr Device_T -> Fence -> IO Result) -> Ptr Device_T -> Fence -> IO Result
+
+-- | vkGetFenceStatus - Return the status of a fence
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the fence.
+--
+-- -   @fence@ is the handle of the fence to query.
+--
+-- = Description
+--
+-- Upon success, 'getFenceStatus' returns the status of the fence object,
+-- with the following return codes:
+--
+-- +------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
+-- | Status                                         | Meaning                                                                                                                |
+-- +================================================+========================================================================================================================+
+-- | 'Vulkan.Core10.Enums.Result.SUCCESS'           | The fence specified by @fence@ is signaled.                                                                            |
+-- +------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
+-- | 'Vulkan.Core10.Enums.Result.NOT_READY'         | The fence specified by @fence@ is unsignaled.                                                                          |
+-- +------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
+-- | 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST' | The device has been lost. See                                                                                          |
+-- |                                                | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>. |
+-- +------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+
+--
+-- Fence Object Status Codes
+--
+-- If a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>),
+-- 'getFenceStatus' /may/ return any of the above status codes. If the
+-- device has been lost and 'getFenceStatus' is called repeatedly, it will
+-- eventually return either 'Vulkan.Core10.Enums.Result.SUCCESS' or
+-- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.NOT_READY'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Fence'
+getFenceStatus :: forall io . MonadIO io => Device -> Fence -> io (Result)
+getFenceStatus device fence = liftIO $ do
+  let vkGetFenceStatusPtr = pVkGetFenceStatus (deviceCmds (device :: Device))
+  unless (vkGetFenceStatusPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetFenceStatus is null" Nothing Nothing
+  let vkGetFenceStatus' = mkVkGetFenceStatus vkGetFenceStatusPtr
+  r <- vkGetFenceStatus' (deviceHandle (device)) (fence)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkWaitForFences
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr Fence -> Bool32 -> Word64 -> IO Result) -> Ptr Device_T -> Word32 -> Ptr Fence -> Bool32 -> Word64 -> IO Result
+
+-- | vkWaitForFences - Wait for one or more fences to become signaled
+--
+-- = 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 'Vulkan.Core10.BaseType.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
+--
+-- If the condition is satisfied when 'waitForFences' is called, then
+-- 'waitForFences' returns immediately. If the condition is not satisfied
+-- at the time 'waitForFences' is called, then 'waitForFences' will block
+-- and wait up to @timeout@ nanoseconds for the condition to become
+-- satisfied.
+--
+-- If @timeout@ is zero, then 'waitForFences' does not wait, but simply
+-- returns the current state of the fences.
+-- 'Vulkan.Core10.Enums.Result.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, 'waitForFences' returns 'Vulkan.Core10.Enums.Result.TIMEOUT'.
+-- If the condition is satisfied before @timeout@ nanoseconds has expired,
+-- 'waitForFences' returns 'Vulkan.Core10.Enums.Result.SUCCESS'.
+--
+-- If device loss occurs (see
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>)
+-- before the timeout has expired, 'waitForFences' /must/ return in finite
+-- time with either 'Vulkan.Core10.Enums.Result.SUCCESS' or
+-- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'.
+--
+-- Note
+--
+-- While we guarantee that 'waitForFences' /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 'waitForFences' will not result in a
+-- permanently (or seemingly permanently) dead process.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pFences@ /must/ be a valid pointer to an array of @fenceCount@
+--     valid 'Vulkan.Core10.Handles.Fence' handles
+--
+-- -   @fenceCount@ /must/ be greater than @0@
+--
+-- -   Each element of @pFences@ /must/ have been created, allocated, or
+--     retrieved from @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.TIMEOUT'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core10.Handles.Fence'
+waitForFences :: forall io . MonadIO io => Device -> ("fences" ::: Vector Fence) -> ("waitAll" ::: Bool) -> ("timeout" ::: Word64) -> io (Result)
+waitForFences device fences waitAll timeout = liftIO . evalContT $ do
+  let vkWaitForFencesPtr = pVkWaitForFences (deviceCmds (device :: Device))
+  lift $ unless (vkWaitForFencesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkWaitForFences is null" Nothing Nothing
+  let vkWaitForFences' = mkVkWaitForFences vkWaitForFencesPtr
+  pPFences <- ContT $ allocaBytesAligned @Fence ((Data.Vector.length (fences)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPFences `plusPtr` (8 * (i)) :: Ptr Fence) (e)) (fences)
+  r <- lift $ vkWaitForFences' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (fences)) :: Word32)) (pPFences) (boolToBool32 (waitAll)) (timeout)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+-- | VkFenceCreateInfo - Structure specifying parameters of a newly created
+-- fence
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FENCE_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'
+--     or
+--     'Vulkan.Extensions.VK_KHR_external_fence_win32.ExportFenceWin32HandleInfoKHR'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.FenceCreateFlagBits.FenceCreateFlagBits' values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.FenceCreateFlagBits.FenceCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createFence'
+data FenceCreateInfo (es :: [Type]) = FenceCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.FenceCreateFlagBits.FenceCreateFlagBits' specifying
+    -- the initial state and behavior of the fence.
+    flags :: FenceCreateFlags
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (FenceCreateInfo es)
+
+instance Extensible FenceCreateInfo where
+  extensibleType = STRUCTURE_TYPE_FENCE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext FenceCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends FenceCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @ExportFenceWin32HandleInfoKHR = Just f
+    | Just Refl <- eqT @e @ExportFenceCreateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss FenceCreateInfo es, PokeChain es) => ToCStruct (FenceCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p FenceCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr FenceCreateFlags)) (flags)
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ f
+
+instance (Extendss FenceCreateInfo es, PeekChain es) => FromCStruct (FenceCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @FenceCreateFlags ((p `plusPtr` 16 :: Ptr FenceCreateFlags))
+    pure $ FenceCreateInfo
+             next flags
+
+instance es ~ '[] => Zero (FenceCreateInfo es) where
+  zero = FenceCreateInfo
+           ()
+           zero
+
diff --git a/src/Vulkan/Core10/Fence.hs-boot b/src/Vulkan/Core10/Fence.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Fence.hs-boot
@@ -0,0 +1,18 @@
+{-# language CPP #-}
+module Vulkan.Core10.Fence  (FenceCreateInfo) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role FenceCreateInfo nominal
+data FenceCreateInfo (es :: [Type])
+
+instance (Extendss FenceCreateInfo es, PokeChain es) => ToCStruct (FenceCreateInfo es)
+instance Show (Chain es) => Show (FenceCreateInfo es)
+
+instance (Extendss FenceCreateInfo es, PeekChain es) => FromCStruct (FenceCreateInfo es)
+
diff --git a/src/Vulkan/Core10/FuncPointers.hs b/src/Vulkan/Core10/FuncPointers.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/FuncPointers.hs
@@ -0,0 +1,234 @@
+{-# language CPP #-}
+module Vulkan.Core10.FuncPointers  ( PFN_vkInternalAllocationNotification
+                                   , FN_vkInternalAllocationNotification
+                                   , PFN_vkInternalFreeNotification
+                                   , FN_vkInternalFreeNotification
+                                   , PFN_vkReallocationFunction
+                                   , FN_vkReallocationFunction
+                                   , PFN_vkAllocationFunction
+                                   , FN_vkAllocationFunction
+                                   , PFN_vkFreeFunction
+                                   , FN_vkFreeFunction
+                                   , PFN_vkVoidFunction
+                                   , FN_vkVoidFunction
+                                   ) where
+
+import Foreign.C.Types (CSize)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Enums.InternalAllocationType (InternalAllocationType)
+import Vulkan.Core10.Enums.SystemAllocationScope (SystemAllocationScope)
+type FN_vkInternalAllocationNotification = ("pUserData" ::: Ptr ()) -> CSize -> InternalAllocationType -> SystemAllocationScope -> IO ()
+-- | PFN_vkInternalAllocationNotification - Application-defined memory
+-- allocation notification function
+--
+-- = Parameters
+--
+-- -   @pUserData@ is the value specified for
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'::@pUserData@
+--     in the allocator specified by the application.
+--
+-- -   @size@ is the requested size of an allocation.
+--
+-- -   @allocationType@ is a
+--     'Vulkan.Core10.Enums.InternalAllocationType.InternalAllocationType'
+--     value specifying the requested type of an allocation.
+--
+-- -   @allocationScope@ is a
+--     'Vulkan.Core10.Enums.SystemAllocationScope.SystemAllocationScope'
+--     value specifying the allocation scope of the lifetime of the
+--     allocation, as described
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-host-allocation-scope here>.
+--
+-- = Description
+--
+-- This is a purely informational callback.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
+type PFN_vkInternalAllocationNotification = FunPtr FN_vkInternalAllocationNotification
+
+
+type FN_vkInternalFreeNotification = ("pUserData" ::: Ptr ()) -> CSize -> InternalAllocationType -> SystemAllocationScope -> IO ()
+-- | PFN_vkInternalFreeNotification - Application-defined memory free
+-- notification function
+--
+-- = Parameters
+--
+-- -   @pUserData@ is the value specified for
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'::@pUserData@
+--     in the allocator specified by the application.
+--
+-- -   @size@ is the requested size of an allocation.
+--
+-- -   @allocationType@ is a
+--     'Vulkan.Core10.Enums.InternalAllocationType.InternalAllocationType'
+--     value specifying the requested type of an allocation.
+--
+-- -   @allocationScope@ is a
+--     'Vulkan.Core10.Enums.SystemAllocationScope.SystemAllocationScope'
+--     value specifying the allocation scope of the lifetime of the
+--     allocation, as described
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-host-allocation-scope here>.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
+type PFN_vkInternalFreeNotification = FunPtr FN_vkInternalFreeNotification
+
+
+type FN_vkReallocationFunction = ("pUserData" ::: Ptr ()) -> ("pOriginal" ::: Ptr ()) -> CSize -> ("alignment" ::: CSize) -> SystemAllocationScope -> IO (Ptr ())
+-- | PFN_vkReallocationFunction - Application-defined memory reallocation
+-- function
+--
+-- = Parameters
+--
+-- -   @pUserData@ is the value specified for
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'::@pUserData@
+--     in the allocator specified by the application.
+--
+-- -   @pOriginal@ /must/ be either @NULL@ or a pointer previously returned
+--     by @pfnReallocation@ or @pfnAllocation@ of a compatible 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
+--     'Vulkan.Core10.Enums.SystemAllocationScope.SystemAllocationScope'
+--     value specifying the allocation scope of the lifetime of the
+--     allocation, as described
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-host-allocation-scope here>.
+--
+-- = 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
+-- <vkAllocationFunction_return_rules.html rules for return values as >.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
+type PFN_vkReallocationFunction = FunPtr FN_vkReallocationFunction
+
+
+type FN_vkAllocationFunction = ("pUserData" ::: Ptr ()) -> CSize -> ("alignment" ::: CSize) -> SystemAllocationScope -> IO (Ptr ())
+-- | PFN_vkAllocationFunction - Application-defined memory allocation
+-- function
+--
+-- = Parameters
+--
+-- -   @pUserData@ is the value specified for
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'::@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
+--     'Vulkan.Core10.Enums.SystemAllocationScope.SystemAllocationScope'
+--     value specifying the allocation scope of the lifetime of the
+--     allocation, as described
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-host-allocation-scope here>.
+--
+-- = 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
+-- 'Vulkan.Core10.Handles.Instance' objects are going to operate correctly
+-- (even 'Vulkan.Core10.DeviceInitialization.destroyInstance'), 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 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' at the
+-- appropriate time for the command in which the condition was detected, as
+-- described in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' as a result of
+-- this failed allocation.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
+type PFN_vkAllocationFunction = FunPtr FN_vkAllocationFunction
+
+
+type FN_vkFreeFunction = ("pUserData" ::: Ptr ()) -> ("pMemory" ::: Ptr ()) -> IO ()
+-- | PFN_vkFreeFunction - Application-defined memory free function
+--
+-- = Parameters
+--
+-- -   @pUserData@ is the value specified for
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'::@pUserData@
+--     in the allocator specified by the application.
+--
+-- -   @pMemory@ is the allocation to be freed.
+--
+-- = Description
+--
+-- @pMemory@ /may/ be @NULL@, which the callback /must/ handle safely. If
+-- @pMemory@ is non-@NULL@, it /must/ be a pointer previously allocated by
+-- @pfnAllocation@ or @pfnReallocation@. The application /should/ free this
+-- memory.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
+type PFN_vkFreeFunction = FunPtr FN_vkFreeFunction
+
+
+type FN_vkVoidFunction = () -> IO ()
+-- | PFN_vkVoidFunction - Dummy function pointer type returned by queries
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DeviceInitialization.getDeviceProcAddr',
+-- 'Vulkan.Core10.DeviceInitialization.getInstanceProcAddr'
+type PFN_vkVoidFunction = FunPtr FN_vkVoidFunction
+
diff --git a/src/Vulkan/Core10/FuncPointers.hs-boot b/src/Vulkan/Core10/FuncPointers.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/FuncPointers.hs-boot
@@ -0,0 +1,16 @@
+{-# language CPP #-}
+module Vulkan.Core10.FuncPointers  ( PFN_vkVoidFunction
+                                   , FN_vkVoidFunction
+                                   ) where
+
+import Foreign.Ptr (FunPtr)
+
+type FN_vkVoidFunction = () -> IO ()
+-- | PFN_vkVoidFunction - Dummy function pointer type returned by queries
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DeviceInitialization.getDeviceProcAddr',
+-- 'Vulkan.Core10.DeviceInitialization.getInstanceProcAddr'
+type PFN_vkVoidFunction = FunPtr FN_vkVoidFunction
+
diff --git a/src/Vulkan/Core10/Handles.hs b/src/Vulkan/Core10/Handles.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Handles.hs
@@ -0,0 +1,1077 @@
+{-# language CPP #-}
+module Vulkan.Core10.Handles  ( Instance(..)
+                              , Instance_T
+                              , PhysicalDevice(..)
+                              , PhysicalDevice_T
+                              , Device(..)
+                              , Device_T
+                              , Queue(..)
+                              , Queue_T
+                              , CommandBuffer(..)
+                              , CommandBuffer_T
+                              , DeviceMemory(..)
+                              , CommandPool(..)
+                              , Buffer(..)
+                              , BufferView(..)
+                              , Image(..)
+                              , ImageView(..)
+                              , ShaderModule(..)
+                              , Pipeline(..)
+                              , PipelineLayout(..)
+                              , Sampler(..)
+                              , DescriptorSet(..)
+                              , DescriptorSetLayout(..)
+                              , DescriptorPool(..)
+                              , Fence(..)
+                              , Semaphore(..)
+                              , Event(..)
+                              , QueryPool(..)
+                              , Framebuffer(..)
+                              , RenderPass(..)
+                              , PipelineCache(..)
+                              ) where
+
+import Foreign.Ptr (ptrToWordPtr)
+import GHC.Show (showParen)
+import Numeric (showHex)
+import Foreign.Ptr (pattern WordPtr)
+import Foreign.Storable (Storable)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word64)
+import Vulkan.Dynamic (DeviceCmds)
+import Vulkan.Core10.APIConstants (HasObjectType(..))
+import Vulkan.Dynamic (InstanceCmds)
+import Vulkan.Core10.APIConstants (IsHandle)
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_BUFFER))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_BUFFER_VIEW))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_COMMAND_BUFFER))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_COMMAND_POOL))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DESCRIPTOR_POOL))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DESCRIPTOR_SET))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DEVICE))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DEVICE_MEMORY))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_EVENT))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_FENCE))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_FRAMEBUFFER))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_IMAGE))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_IMAGE_VIEW))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_INSTANCE))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_PHYSICAL_DEVICE))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_PIPELINE))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_PIPELINE_CACHE))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_PIPELINE_LAYOUT))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_QUERY_POOL))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_QUEUE))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_RENDER_PASS))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_SAMPLER))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_SEMAPHORE))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_SHADER_MODULE))
+-- | An opaque type for representing pointers to VkInstance handles
+data Instance_T
+-- | VkInstance - Opaque handle to an instance object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_android_surface.createAndroidSurfaceKHR',
+-- 'Vulkan.Extensions.VK_EXT_debug_report.createDebugReportCallbackEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.createDebugUtilsMessengerEXT',
+-- 'Vulkan.Extensions.VK_KHR_display.createDisplayPlaneSurfaceKHR',
+-- 'Vulkan.Extensions.VK_EXT_headless_surface.createHeadlessSurfaceEXT',
+-- 'Vulkan.Extensions.VK_MVK_ios_surface.createIOSSurfaceMVK',
+-- 'Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface.createImagePipeSurfaceFUCHSIA',
+-- 'Vulkan.Core10.DeviceInitialization.createInstance',
+-- 'Vulkan.Extensions.VK_MVK_macos_surface.createMacOSSurfaceMVK',
+-- 'Vulkan.Extensions.VK_EXT_metal_surface.createMetalSurfaceEXT',
+-- 'Vulkan.Extensions.VK_GGP_stream_descriptor_surface.createStreamDescriptorSurfaceGGP',
+-- 'Vulkan.Extensions.VK_NN_vi_surface.createViSurfaceNN',
+-- 'Vulkan.Extensions.VK_KHR_wayland_surface.createWaylandSurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_win32_surface.createWin32SurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_xcb_surface.createXcbSurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_xlib_surface.createXlibSurfaceKHR',
+-- 'Vulkan.Extensions.VK_EXT_debug_report.debugReportMessageEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_report.destroyDebugReportCallbackEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.destroyDebugUtilsMessengerEXT',
+-- 'Vulkan.Core10.DeviceInitialization.destroyInstance',
+-- 'Vulkan.Extensions.VK_KHR_surface.destroySurfaceKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.enumeratePhysicalDeviceGroups',
+-- 'Vulkan.Extensions.VK_KHR_device_group_creation.enumeratePhysicalDeviceGroupsKHR',
+-- 'Vulkan.Core10.DeviceInitialization.enumeratePhysicalDevices',
+-- 'Vulkan.Core10.DeviceInitialization.getInstanceProcAddr',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.submitDebugUtilsMessageEXT'
+data Instance = Instance
+  { instanceHandle :: Ptr Instance_T
+  , instanceCmds :: InstanceCmds
+  }
+  deriving stock (Eq, Show)
+  deriving anyclass (IsHandle)
+instance Zero Instance where
+  zero = Instance zero zero
+instance HasObjectType Instance where
+  objectTypeAndHandle (Instance (ptrToWordPtr -> WordPtr h) _) = (OBJECT_TYPE_INSTANCE, fromIntegral h)
+
+
+-- | An opaque type for representing pointers to VkPhysicalDevice handles
+data PhysicalDevice_T
+-- | VkPhysicalDevice - Opaque handle to a physical device object
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties',
+-- 'Vulkan.Extensions.VK_EXT_acquire_xlib_display.acquireXlibDisplayEXT',
+-- 'Vulkan.Core10.Device.createDevice',
+-- 'Vulkan.Extensions.VK_KHR_display.createDisplayModeKHR',
+-- 'Vulkan.Core10.ExtensionDiscovery.enumerateDeviceExtensionProperties',
+-- 'Vulkan.Core10.LayerDiscovery.enumerateDeviceLayerProperties',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR',
+-- 'Vulkan.Core10.DeviceInitialization.enumeratePhysicalDevices',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.getDisplayModeProperties2KHR',
+-- 'Vulkan.Extensions.VK_KHR_display.getDisplayModePropertiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.getDisplayPlaneCapabilities2KHR',
+-- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneCapabilitiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneSupportedDisplaysKHR',
+-- 'Vulkan.Extensions.VK_EXT_calibrated_timestamps.getPhysicalDeviceCalibrateableTimeDomainsEXT',
+-- 'Vulkan.Extensions.VK_NV_cooperative_matrix.getPhysicalDeviceCooperativeMatrixPropertiesNV',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.getPhysicalDeviceDisplayPlaneProperties2KHR',
+-- 'Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPlanePropertiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.getPhysicalDeviceDisplayProperties2KHR',
+-- 'Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPropertiesKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferProperties',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferPropertiesKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.getPhysicalDeviceExternalFenceProperties',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_capabilities.getPhysicalDeviceExternalFencePropertiesKHR',
+-- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.getPhysicalDeviceExternalSemaphoreProperties',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.getPhysicalDeviceExternalSemaphorePropertiesKHR',
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFeatures',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2KHR',
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2KHR',
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2KHR',
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceMemoryProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceMemoryProperties2KHR',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getPhysicalDevicePresentRectanglesKHR',
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2KHR',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR',
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2KHR',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceSparseImageFormatProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceSparseImageFormatProperties2KHR',
+-- 'Vulkan.Extensions.VK_NV_coverage_reduction_mode.getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV',
+-- 'Vulkan.Extensions.VK_EXT_display_surface_counter.getPhysicalDeviceSurfaceCapabilities2EXT',
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceFormats2KHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceFormatsKHR',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.getPhysicalDeviceSurfacePresentModes2EXT',
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR',
+-- 'Vulkan.Extensions.VK_EXT_tooling_info.getPhysicalDeviceToolPropertiesEXT',
+-- 'Vulkan.Extensions.VK_KHR_wayland_surface.getPhysicalDeviceWaylandPresentationSupportKHR',
+-- 'Vulkan.Extensions.VK_KHR_win32_surface.getPhysicalDeviceWin32PresentationSupportKHR',
+-- 'Vulkan.Extensions.VK_KHR_xcb_surface.getPhysicalDeviceXcbPresentationSupportKHR',
+-- 'Vulkan.Extensions.VK_KHR_xlib_surface.getPhysicalDeviceXlibPresentationSupportKHR',
+-- 'Vulkan.Extensions.VK_EXT_acquire_xlib_display.getRandROutputDisplayEXT',
+-- 'Vulkan.Extensions.VK_EXT_direct_mode_display.releaseDisplayEXT'
+data PhysicalDevice = PhysicalDevice
+  { physicalDeviceHandle :: Ptr PhysicalDevice_T
+  , instanceCmds :: InstanceCmds
+  }
+  deriving stock (Eq, Show)
+  deriving anyclass (IsHandle)
+instance Zero PhysicalDevice where
+  zero = PhysicalDevice zero zero
+instance HasObjectType PhysicalDevice where
+  objectTypeAndHandle (PhysicalDevice (ptrToWordPtr -> WordPtr h) _) = (OBJECT_TYPE_PHYSICAL_DEVICE, fromIntegral h)
+
+
+-- | An opaque type for representing pointers to VkDevice handles
+data Device_T
+-- | VkDevice - Opaque handle to a device object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.acquireFullScreenExclusiveModeEXT',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImage2KHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.acquirePerformanceConfigurationINTEL',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.acquireProfilingLockKHR',
+-- 'Vulkan.Core10.CommandBuffer.allocateCommandBuffers',
+-- 'Vulkan.Core10.DescriptorSet.allocateDescriptorSets',
+-- 'Vulkan.Core10.Memory.allocateMemory',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.bindAccelerationStructureMemoryKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.bindAccelerationStructureMemoryNV',
+-- 'Vulkan.Core10.MemoryManagement.bindBufferMemory',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.bindBufferMemory2',
+-- 'Vulkan.Extensions.VK_KHR_bind_memory2.bindBufferMemory2KHR',
+-- 'Vulkan.Core10.MemoryManagement.bindImageMemory',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.bindImageMemory2',
+-- 'Vulkan.Extensions.VK_KHR_bind_memory2.bindImageMemory2KHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.buildAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.compileDeferredNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.copyAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.copyAccelerationStructureToMemoryKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.copyMemoryToAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.createAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.createAccelerationStructureNV',
+-- 'Vulkan.Core10.Buffer.createBuffer',
+-- 'Vulkan.Core10.BufferView.createBufferView',
+-- 'Vulkan.Core10.CommandPool.createCommandPool',
+-- 'Vulkan.Core10.Pipeline.createComputePipelines',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.createDeferredOperationKHR',
+-- 'Vulkan.Core10.DescriptorSet.createDescriptorPool',
+-- 'Vulkan.Core10.DescriptorSet.createDescriptorSetLayout',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.createDescriptorUpdateTemplate',
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR',
+-- 'Vulkan.Core10.Device.createDevice', 'Vulkan.Core10.Event.createEvent',
+-- 'Vulkan.Core10.Fence.createFence',
+-- 'Vulkan.Core10.Pass.createFramebuffer',
+-- 'Vulkan.Core10.Pipeline.createGraphicsPipelines',
+-- 'Vulkan.Core10.Image.createImage',
+-- 'Vulkan.Core10.ImageView.createImageView',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.createIndirectCommandsLayoutNV',
+-- 'Vulkan.Core10.PipelineCache.createPipelineCache',
+-- 'Vulkan.Core10.PipelineLayout.createPipelineLayout',
+-- 'Vulkan.Extensions.VK_EXT_private_data.createPrivateDataSlotEXT',
+-- 'Vulkan.Core10.Query.createQueryPool',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV',
+-- 'Vulkan.Core10.Pass.createRenderPass',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.createRenderPass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR',
+-- 'Vulkan.Core10.Sampler.createSampler',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversion',
+-- 'Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversionKHR',
+-- 'Vulkan.Core10.QueueSemaphore.createSemaphore',
+-- 'Vulkan.Core10.Shader.createShaderModule',
+-- 'Vulkan.Extensions.VK_KHR_display_swapchain.createSharedSwapchainsKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.createValidationCacheEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_marker.debugMarkerSetObjectNameEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_marker.debugMarkerSetObjectTagEXT',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.deferredOperationJoinKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.destroyAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.destroyAccelerationStructureNV',
+-- 'Vulkan.Core10.Buffer.destroyBuffer',
+-- 'Vulkan.Core10.BufferView.destroyBufferView',
+-- 'Vulkan.Core10.CommandPool.destroyCommandPool',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.destroyDeferredOperationKHR',
+-- 'Vulkan.Core10.DescriptorSet.destroyDescriptorPool',
+-- 'Vulkan.Core10.DescriptorSet.destroyDescriptorSetLayout',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplate',
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplateKHR',
+-- 'Vulkan.Core10.Device.destroyDevice',
+-- 'Vulkan.Core10.Event.destroyEvent', 'Vulkan.Core10.Fence.destroyFence',
+-- 'Vulkan.Core10.Pass.destroyFramebuffer',
+-- 'Vulkan.Core10.Image.destroyImage',
+-- 'Vulkan.Core10.ImageView.destroyImageView',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.destroyIndirectCommandsLayoutNV',
+-- 'Vulkan.Core10.Pipeline.destroyPipeline',
+-- 'Vulkan.Core10.PipelineCache.destroyPipelineCache',
+-- 'Vulkan.Core10.PipelineLayout.destroyPipelineLayout',
+-- 'Vulkan.Extensions.VK_EXT_private_data.destroyPrivateDataSlotEXT',
+-- 'Vulkan.Core10.Query.destroyQueryPool',
+-- 'Vulkan.Core10.Pass.destroyRenderPass',
+-- 'Vulkan.Core10.Sampler.destroySampler',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversion',
+-- 'Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversionKHR',
+-- 'Vulkan.Core10.QueueSemaphore.destroySemaphore',
+-- 'Vulkan.Core10.Shader.destroyShaderModule',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.destroySwapchainKHR',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.destroyValidationCacheEXT',
+-- 'Vulkan.Core10.Queue.deviceWaitIdle',
+-- 'Vulkan.Extensions.VK_EXT_display_control.displayPowerControlEXT',
+-- 'Vulkan.Core10.Memory.flushMappedMemoryRanges',
+-- 'Vulkan.Core10.CommandBuffer.freeCommandBuffers',
+-- 'Vulkan.Core10.DescriptorSet.freeDescriptorSets',
+-- 'Vulkan.Core10.Memory.freeMemory',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.getAccelerationStructureDeviceAddressKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.getAccelerationStructureMemoryRequirementsKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureMemoryRequirementsNV',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress',
+-- 'Vulkan.Extensions.VK_EXT_buffer_device_address.getBufferDeviceAddressEXT',
+-- 'Vulkan.Extensions.VK_KHR_buffer_device_address.getBufferDeviceAddressKHR',
+-- 'Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2',
+-- 'Vulkan.Extensions.VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2KHR',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferOpaqueCaptureAddress',
+-- 'Vulkan.Extensions.VK_KHR_buffer_device_address.getBufferOpaqueCaptureAddressKHR',
+-- 'Vulkan.Extensions.VK_EXT_calibrated_timestamps.getCalibratedTimestampsEXT',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.getDeferredOperationMaxConcurrencyKHR',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.getDeferredOperationResultKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.getDescriptorSetLayoutSupport',
+-- 'Vulkan.Extensions.VK_KHR_maintenance3.getDescriptorSetLayoutSupportKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.getDeviceAccelerationStructureCompatibilityKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.getDeviceGroupPeerMemoryFeatures',
+-- 'Vulkan.Extensions.VK_KHR_device_group.getDeviceGroupPeerMemoryFeaturesKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getDeviceGroupPresentCapabilitiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.getDeviceGroupSurfacePresentModes2EXT',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getDeviceGroupSurfacePresentModesKHR',
+-- 'Vulkan.Core10.Memory.getDeviceMemoryCommitment',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getDeviceMemoryOpaqueCaptureAddress',
+-- 'Vulkan.Extensions.VK_KHR_buffer_device_address.getDeviceMemoryOpaqueCaptureAddressKHR',
+-- 'Vulkan.Core10.DeviceInitialization.getDeviceProcAddr',
+-- 'Vulkan.Core10.Queue.getDeviceQueue',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.getDeviceQueue2',
+-- 'Vulkan.Core10.Event.getEventStatus',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_fd.getFenceFdKHR',
+-- 'Vulkan.Core10.Fence.getFenceStatus',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_win32.getFenceWin32HandleKHR',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.getGeneratedCommandsMemoryRequirementsNV',
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.getImageDrmFormatModifierPropertiesEXT',
+-- 'Vulkan.Core10.MemoryManagement.getImageMemoryRequirements',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2',
+-- 'Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageMemoryRequirements2KHR',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.getImageSparseMemoryRequirements',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageSparseMemoryRequirements2',
+-- 'Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageSparseMemoryRequirements2KHR',
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.getImageViewAddressNVX',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.getImageViewHandleNVX',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getMemoryAndroidHardwareBufferANDROID',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdPropertiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_external_memory_host.getMemoryHostPointerPropertiesEXT',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandleKHR',
+-- 'Vulkan.Extensions.VK_NV_external_memory_win32.getMemoryWin32HandleNV',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandlePropertiesKHR',
+-- 'Vulkan.Extensions.VK_GOOGLE_display_timing.getPastPresentationTimingGOOGLE',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.getPerformanceParameterINTEL',
+-- 'Vulkan.Core10.PipelineCache.getPipelineCacheData',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutableInternalRepresentationsKHR',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutablePropertiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.getPipelineExecutableStatisticsKHR',
+-- 'Vulkan.Extensions.VK_EXT_private_data.getPrivateDataEXT',
+-- 'Vulkan.Core10.Query.getQueryPoolResults',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.getRayTracingCaptureReplayShaderGroupHandlesKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.getRayTracingShaderGroupHandlesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.getRayTracingShaderGroupHandlesNV',
+-- 'Vulkan.Extensions.VK_GOOGLE_display_timing.getRefreshCycleDurationGOOGLE',
+-- 'Vulkan.Core10.Pass.getRenderAreaGranularity',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.getSemaphoreCounterValue',
+-- 'Vulkan.Extensions.VK_KHR_timeline_semaphore.getSemaphoreCounterValueKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_fd.getSemaphoreFdKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.getSemaphoreWin32HandleKHR',
+-- 'Vulkan.Extensions.VK_AMD_shader_info.getShaderInfoAMD',
+-- 'Vulkan.Extensions.VK_EXT_display_control.getSwapchainCounterEXT',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getSwapchainImagesKHR',
+-- 'Vulkan.Extensions.VK_KHR_shared_presentable_image.getSwapchainStatusKHR',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.getValidationCacheDataEXT',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_fd.importFenceFdKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_win32.importFenceWin32HandleKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_fd.importSemaphoreFdKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.importSemaphoreWin32HandleKHR',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.initializePerformanceApiINTEL',
+-- 'Vulkan.Core10.Memory.invalidateMappedMemoryRanges',
+-- 'Vulkan.Core10.Memory.mapMemory',
+-- 'Vulkan.Core10.PipelineCache.mergePipelineCaches',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.mergeValidationCachesEXT',
+-- 'Vulkan.Extensions.VK_EXT_display_control.registerDeviceEventEXT',
+-- 'Vulkan.Extensions.VK_EXT_display_control.registerDisplayEventEXT',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.releaseFullScreenExclusiveModeEXT',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.releasePerformanceConfigurationINTEL',
+-- 'Vulkan.Extensions.VK_KHR_performance_query.releaseProfilingLockKHR',
+-- 'Vulkan.Core10.CommandPool.resetCommandPool',
+-- 'Vulkan.Core10.DescriptorSet.resetDescriptorPool',
+-- 'Vulkan.Core10.Event.resetEvent', 'Vulkan.Core10.Fence.resetFences',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool',
+-- 'Vulkan.Extensions.VK_EXT_host_query_reset.resetQueryPoolEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.setDebugUtilsObjectNameEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.setDebugUtilsObjectTagEXT',
+-- 'Vulkan.Core10.Event.setEvent',
+-- 'Vulkan.Extensions.VK_EXT_hdr_metadata.setHdrMetadataEXT',
+-- 'Vulkan.Extensions.VK_AMD_display_native_hdr.setLocalDimmingAMD',
+-- 'Vulkan.Extensions.VK_EXT_private_data.setPrivateDataEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.signalSemaphore',
+-- 'Vulkan.Extensions.VK_KHR_timeline_semaphore.signalSemaphoreKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance1.trimCommandPool',
+-- 'Vulkan.Extensions.VK_KHR_maintenance1.trimCommandPoolKHR',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.uninitializePerformanceApiINTEL',
+-- 'Vulkan.Core10.Memory.unmapMemory',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplate',
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplateKHR',
+-- 'Vulkan.Core10.DescriptorSet.updateDescriptorSets',
+-- 'Vulkan.Core10.Fence.waitForFences',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.waitSemaphores',
+-- 'Vulkan.Extensions.VK_KHR_timeline_semaphore.waitSemaphoresKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.writeAccelerationStructuresPropertiesKHR'
+data Device = Device
+  { deviceHandle :: Ptr Device_T
+  , deviceCmds :: DeviceCmds
+  }
+  deriving stock (Eq, Show)
+  deriving anyclass (IsHandle)
+instance Zero Device where
+  zero = Device zero zero
+instance HasObjectType Device where
+  objectTypeAndHandle (Device (ptrToWordPtr -> WordPtr h) _) = (OBJECT_TYPE_DEVICE, fromIntegral h)
+
+
+-- | An opaque type for representing pointers to VkQueue handles
+data Queue_T
+-- | VkQueue - Opaque handle to a queue object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Queue.getDeviceQueue',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.getDeviceQueue2',
+-- 'Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.getQueueCheckpointDataNV',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.queueBeginDebugUtilsLabelEXT',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.queueBindSparse',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.queueEndDebugUtilsLabelEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.queueInsertDebugUtilsLabelEXT',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.queueSetPerformanceConfigurationINTEL',
+-- 'Vulkan.Core10.Queue.queueSubmit', 'Vulkan.Core10.Queue.queueWaitIdle'
+data Queue = Queue
+  { queueHandle :: Ptr Queue_T
+  , deviceCmds :: DeviceCmds
+  }
+  deriving stock (Eq, Show)
+  deriving anyclass (IsHandle)
+instance Zero Queue where
+  zero = Queue zero zero
+instance HasObjectType Queue where
+  objectTypeAndHandle (Queue (ptrToWordPtr -> WordPtr h) _) = (OBJECT_TYPE_QUEUE, fromIntegral h)
+
+
+-- | An opaque type for representing pointers to VkCommandBuffer handles
+data CommandBuffer_T
+-- | VkCommandBuffer - Opaque handle to a command buffer object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Queue.SubmitInfo',
+-- 'Vulkan.Core10.CommandBuffer.allocateCommandBuffers',
+-- 'Vulkan.Core10.CommandBuffer.beginCommandBuffer',
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.cmdBeginConditionalRenderingEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.cmdBeginDebugUtilsLabelEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdBeginRenderPass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdBeginRenderPass2KHR',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdBindPipelineShaderGroupNV',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureIndirectKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearAttachments',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearDepthStencilImage',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdCopyAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdCopyAccelerationStructureNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdCopyAccelerationStructureToMemoryKHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdCopyMemoryToAccelerationStructureKHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
+-- 'Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerBeginEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerEndEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerInsertEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDispatch',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.cmdDispatchBase',
+-- 'Vulkan.Extensions.VK_KHR_device_group.cmdDispatchBaseKHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDraw',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount',
+-- 'Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndexedIndirectCountAMD',
+-- 'Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCountKHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdDrawIndirectByteCountEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount',
+-- 'Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndirectCountAMD',
+-- 'Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndirectCountKHR',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksNV',
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.cmdEndConditionalRenderingEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.cmdEndDebugUtilsLabelEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdEndQuery',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndQueryIndexedEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdEndRenderPass',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdEndRenderPass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdEndRenderPass2KHR',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdExecuteCommands',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdExecuteGeneratedCommandsNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdFillBuffer',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.cmdInsertDebugUtilsLabelEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdNextSubpass',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdNextSubpass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdNextSubpass2KHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdPipelineBarrier',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdPushConstants',
+-- 'Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetKHR',
+-- 'Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetWithTemplateKHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResetEvent',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetBlendConstants',
+-- 'Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.cmdSetCheckpointNV',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetCoarseSampleOrderNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBias',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBounds',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.cmdSetDeviceMask',
+-- 'Vulkan.Extensions.VK_KHR_device_group.cmdSetDeviceMaskKHR',
+-- 'Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent',
+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV',
+-- 'Vulkan.Extensions.VK_EXT_line_rasterization.cmdSetLineStippleEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.cmdSetPerformanceMarkerINTEL',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.cmdSetPerformanceOverrideINTEL',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.cmdSetPerformanceStreamMarkerINTEL',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetScissor',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetStencilCompareMask',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetStencilReference',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetStencilWriteMask',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetViewport',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV',
+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysIndirectKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdUpdateBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdWriteAccelerationStructuresPropertiesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdWriteAccelerationStructuresPropertiesNV',
+-- 'Vulkan.Extensions.VK_AMD_buffer_marker.cmdWriteBufferMarkerAMD',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp',
+-- 'Vulkan.Core10.CommandBuffer.endCommandBuffer',
+-- 'Vulkan.Core10.CommandBuffer.freeCommandBuffers',
+-- 'Vulkan.Core10.CommandBuffer.resetCommandBuffer'
+data CommandBuffer = CommandBuffer
+  { commandBufferHandle :: Ptr CommandBuffer_T
+  , deviceCmds :: DeviceCmds
+  }
+  deriving stock (Eq, Show)
+  deriving anyclass (IsHandle)
+instance Zero CommandBuffer where
+  zero = CommandBuffer zero zero
+instance HasObjectType CommandBuffer where
+  objectTypeAndHandle (CommandBuffer (ptrToWordPtr -> WordPtr h) _) = (OBJECT_TYPE_COMMAND_BUFFER, fromIntegral h)
+
+
+-- | VkDeviceMemory - Opaque handle to a device memory object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.BindAccelerationStructureMemoryInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.DeviceMemoryOpaqueCaptureAddressInfo',
+-- 'Vulkan.Core10.Memory.MappedMemoryRange',
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.MemoryGetAndroidHardwareBufferInfoANDROID',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryGetWin32HandleInfoKHR',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseMemoryBind',
+-- 'Vulkan.Extensions.VK_KHR_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoNV',
+-- 'Vulkan.Core10.Memory.allocateMemory',
+-- 'Vulkan.Core10.MemoryManagement.bindBufferMemory',
+-- 'Vulkan.Core10.MemoryManagement.bindImageMemory',
+-- 'Vulkan.Core10.Memory.freeMemory',
+-- 'Vulkan.Core10.Memory.getDeviceMemoryCommitment',
+-- 'Vulkan.Extensions.VK_NV_external_memory_win32.getMemoryWin32HandleNV',
+-- 'Vulkan.Core10.Memory.mapMemory', 'Vulkan.Core10.Memory.unmapMemory'
+newtype DeviceMemory = DeviceMemory Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType DeviceMemory where
+  objectTypeAndHandle (DeviceMemory h) = (OBJECT_TYPE_DEVICE_MEMORY, h)
+instance Show DeviceMemory where
+  showsPrec p (DeviceMemory x) = showParen (p >= 11) (showString "DeviceMemory 0x" . showHex x)
+
+
+-- | VkCommandPool - Opaque handle to a command pool object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBuffer.CommandBufferAllocateInfo',
+-- 'Vulkan.Core10.CommandPool.createCommandPool',
+-- 'Vulkan.Core10.CommandPool.destroyCommandPool',
+-- 'Vulkan.Core10.CommandBuffer.freeCommandBuffers',
+-- 'Vulkan.Core10.CommandPool.resetCommandPool',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance1.trimCommandPool',
+-- 'Vulkan.Extensions.VK_KHR_maintenance1.trimCommandPoolKHR'
+newtype CommandPool = CommandPool Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType CommandPool where
+  objectTypeAndHandle (CommandPool h) = (OBJECT_TYPE_COMMAND_POOL, h)
+instance Show CommandPool where
+  showsPrec p (CommandPool x) = showParen (p >= 11) (showString "CommandPool 0x" . showHex x)
+
+
+-- | VkBuffer - Opaque handle to a buffer object
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferDeviceAddressInfo',
+-- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.BufferMemoryRequirementsInfo2',
+-- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',
+-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.ConditionalRenderingBeginInfoEXT',
+-- 'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV',
+-- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsStreamNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseBufferMemoryBindInfo',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.StridedBufferRegionKHR',
+-- 'Vulkan.Core10.MemoryManagement.bindBufferMemory',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureIndirectKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount',
+-- 'Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndexedIndirectCountAMD',
+-- 'Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCountKHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdDrawIndirectByteCountEXT',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount',
+-- 'Vulkan.Extensions.VK_AMD_draw_indirect_count.cmdDrawIndirectCountAMD',
+-- 'Vulkan.Extensions.VK_KHR_draw_indirect_count.cmdDrawIndirectCountKHR',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
+-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdFillBuffer',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysIndirectKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdUpdateBuffer',
+-- 'Vulkan.Extensions.VK_AMD_buffer_marker.cmdWriteBufferMarkerAMD',
+-- 'Vulkan.Core10.Buffer.createBuffer',
+-- 'Vulkan.Core10.Buffer.destroyBuffer',
+-- 'Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements'
+newtype Buffer = Buffer Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType Buffer where
+  objectTypeAndHandle (Buffer h) = (OBJECT_TYPE_BUFFER, h)
+instance Show Buffer where
+  showsPrec p (Buffer x) = showParen (p >= 11) (showString "Buffer 0x" . showHex x)
+
+
+-- | VkBufferView - Opaque handle to a buffer view object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet',
+-- 'Vulkan.Core10.BufferView.createBufferView',
+-- 'Vulkan.Core10.BufferView.destroyBufferView'
+newtype BufferView = BufferView Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType BufferView where
+  objectTypeAndHandle (BufferView h) = (OBJECT_TYPE_BUFFER_VIEW, h)
+instance Show BufferView where
+  showsPrec p (BufferView x) = showParen (p >= 11) (showString "BufferView 0x" . showHex x)
+
+
+-- | VkImage - Opaque handle to an image object
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo',
+-- 'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV',
+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageSparseMemoryRequirementsInfo2',
+-- 'Vulkan.Core10.ImageView.ImageViewCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBindInfo',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageOpaqueMemoryBindInfo',
+-- 'Vulkan.Core10.MemoryManagement.bindImageMemory',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearDepthStencilImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage',
+-- 'Vulkan.Core10.Image.createImage', 'Vulkan.Core10.Image.destroyImage',
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.getImageDrmFormatModifierPropertiesEXT',
+-- 'Vulkan.Core10.MemoryManagement.getImageMemoryRequirements',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.getImageSparseMemoryRequirements',
+-- 'Vulkan.Core10.Image.getImageSubresourceLayout',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getSwapchainImagesKHR'
+newtype Image = Image Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType Image where
+  objectTypeAndHandle (Image h) = (OBJECT_TYPE_IMAGE, h)
+instance Show Image where
+  showsPrec p (Image x) = showParen (p >= 11) (showString "Image 0x" . showHex x)
+
+
+-- | VkImageView - Opaque handle to an image view object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
+-- 'Vulkan.Core10.Pass.FramebufferCreateInfo',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewHandleInfoNVX',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
+-- 'Vulkan.Core10.ImageView.createImageView',
+-- 'Vulkan.Core10.ImageView.destroyImageView',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.getImageViewAddressNVX'
+newtype ImageView = ImageView Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType ImageView where
+  objectTypeAndHandle (ImageView h) = (OBJECT_TYPE_IMAGE_VIEW, h)
+instance Show ImageView where
+  showsPrec p (ImageView x) = showParen (p >= 11) (showString "ImageView 0x" . showHex x)
+
+
+-- | VkShaderModule - Opaque handle to a shader module object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
+-- 'Vulkan.Core10.Shader.createShaderModule',
+-- 'Vulkan.Core10.Shader.destroyShaderModule'
+newtype ShaderModule = ShaderModule Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType ShaderModule where
+  objectTypeAndHandle (ShaderModule h) = (OBJECT_TYPE_SHADER_MODULE, h)
+instance Show ShaderModule where
+  showsPrec p (ShaderModule x) = showParen (p >= 11) (showString "ShaderModule 0x" . showHex x)
+
+
+-- | VkPipeline - Opaque handle to a pipeline object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsMemoryRequirementsInfoNV',
+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdBindPipelineShaderGroupNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.compileDeferredNV',
+-- 'Vulkan.Core10.Pipeline.createComputePipelines',
+-- 'Vulkan.Core10.Pipeline.createGraphicsPipelines',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV',
+-- 'Vulkan.Core10.Pipeline.destroyPipeline',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.getRayTracingCaptureReplayShaderGroupHandlesKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.getRayTracingShaderGroupHandlesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.getRayTracingShaderGroupHandlesNV',
+-- 'Vulkan.Extensions.VK_AMD_shader_info.getShaderInfoAMD'
+newtype Pipeline = Pipeline Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType Pipeline where
+  objectTypeAndHandle (Pipeline h) = (OBJECT_TYPE_PIPELINE, h)
+instance Show Pipeline where
+  showsPrec p (Pipeline x) = showParen (p >= 11) (showString "Pipeline 0x" . showHex x)
+
+
+-- | VkPipelineLayout - Opaque handle to a pipeline layout object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo',
+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdPushConstants',
+-- 'Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetKHR',
+-- 'Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetWithTemplateKHR',
+-- 'Vulkan.Core10.PipelineLayout.createPipelineLayout',
+-- 'Vulkan.Core10.PipelineLayout.destroyPipelineLayout'
+newtype PipelineLayout = PipelineLayout Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType PipelineLayout where
+  objectTypeAndHandle (PipelineLayout h) = (OBJECT_TYPE_PIPELINE_LAYOUT, h)
+instance Show PipelineLayout where
+  showsPrec p (PipelineLayout x) = showParen (p >= 11) (showString "PipelineLayout 0x" . showHex x)
+
+
+-- | VkSampler - Opaque handle to a sampler object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
+-- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding',
+-- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewHandleInfoNVX',
+-- 'Vulkan.Core10.Sampler.createSampler',
+-- 'Vulkan.Core10.Sampler.destroySampler'
+newtype Sampler = Sampler Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType Sampler where
+  objectTypeAndHandle (Sampler h) = (OBJECT_TYPE_SAMPLER, h)
+instance Show Sampler where
+  showsPrec p (Sampler x) = showParen (p >= 11) (showString "Sampler 0x" . showHex x)
+
+
+-- | VkDescriptorSet - Opaque handle to a descriptor set object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DescriptorSet.CopyDescriptorSet',
+-- 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet',
+-- 'Vulkan.Core10.DescriptorSet.allocateDescriptorSets',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',
+-- 'Vulkan.Core10.DescriptorSet.freeDescriptorSets',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplate',
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplateKHR'
+newtype DescriptorSet = DescriptorSet Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType DescriptorSet where
+  objectTypeAndHandle (DescriptorSet h) = (OBJECT_TYPE_DESCRIPTOR_SET, h)
+instance Show DescriptorSet where
+  showsPrec p (DescriptorSet x) = showParen (p >= 11) (showString "DescriptorSet 0x" . showHex x)
+
+
+-- | VkDescriptorSetLayout - Opaque handle to a descriptor set layout object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo',
+-- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo',
+-- 'Vulkan.Core10.DescriptorSet.createDescriptorSetLayout',
+-- 'Vulkan.Core10.DescriptorSet.destroyDescriptorSetLayout'
+newtype DescriptorSetLayout = DescriptorSetLayout Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType DescriptorSetLayout where
+  objectTypeAndHandle (DescriptorSetLayout h) = (OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, h)
+instance Show DescriptorSetLayout where
+  showsPrec p (DescriptorSetLayout x) = showParen (p >= 11) (showString "DescriptorSetLayout 0x" . showHex x)
+
+
+-- | VkDescriptorPool - Opaque handle to a descriptor pool object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo',
+-- 'Vulkan.Core10.DescriptorSet.createDescriptorPool',
+-- 'Vulkan.Core10.DescriptorSet.destroyDescriptorPool',
+-- 'Vulkan.Core10.DescriptorSet.freeDescriptorSets',
+-- 'Vulkan.Core10.DescriptorSet.resetDescriptorPool'
+newtype DescriptorPool = DescriptorPool Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType DescriptorPool where
+  objectTypeAndHandle (DescriptorPool h) = (OBJECT_TYPE_DESCRIPTOR_POOL, h)
+instance Show DescriptorPool where
+  showsPrec p (DescriptorPool x) = showParen (p >= 11) (showString "DescriptorPool 0x" . showHex x)
+
+
+-- | VkFence - Opaque handle to a fence object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_swapchain.AcquireNextImageInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_fd.FenceGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_win32.FenceGetWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_fd.ImportFenceFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_win32.ImportFenceWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR',
+-- 'Vulkan.Core10.Fence.createFence', 'Vulkan.Core10.Fence.destroyFence',
+-- 'Vulkan.Core10.Fence.getFenceStatus',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.queueBindSparse',
+-- 'Vulkan.Core10.Queue.queueSubmit',
+-- 'Vulkan.Extensions.VK_EXT_display_control.registerDeviceEventEXT',
+-- 'Vulkan.Extensions.VK_EXT_display_control.registerDisplayEventEXT',
+-- 'Vulkan.Core10.Fence.resetFences', 'Vulkan.Core10.Fence.waitForFences'
+newtype Fence = Fence Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType Fence where
+  objectTypeAndHandle (Fence h) = (OBJECT_TYPE_FENCE, h)
+instance Show Fence where
+  showsPrec p (Fence x) = showParen (p >= 11) (showString "Fence 0x" . showHex x)
+
+
+-- | VkSemaphore - Opaque handle to a semaphore object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_swapchain.AcquireNextImageInfoKHR',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.BindSparseInfo',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_fd.ImportSemaphoreFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.ImportSemaphoreWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_fd.SemaphoreGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.SemaphoreGetWin32HandleInfoKHR',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreSignalInfo',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo',
+-- 'Vulkan.Core10.Queue.SubmitInfo',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR',
+-- 'Vulkan.Core10.QueueSemaphore.createSemaphore',
+-- 'Vulkan.Core10.QueueSemaphore.destroySemaphore',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.getSemaphoreCounterValue',
+-- 'Vulkan.Extensions.VK_KHR_timeline_semaphore.getSemaphoreCounterValueKHR'
+newtype Semaphore = Semaphore Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType Semaphore where
+  objectTypeAndHandle (Semaphore h) = (OBJECT_TYPE_SEMAPHORE, h)
+instance Show Semaphore where
+  showsPrec p (Semaphore x) = showParen (p >= 11) (showString "Semaphore 0x" . showHex x)
+
+
+-- | VkEvent - Opaque handle to an event object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResetEvent',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents',
+-- 'Vulkan.Core10.Event.createEvent', 'Vulkan.Core10.Event.destroyEvent',
+-- 'Vulkan.Core10.Event.getEventStatus', 'Vulkan.Core10.Event.resetEvent',
+-- 'Vulkan.Core10.Event.setEvent'
+newtype Event = Event Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType Event where
+  objectTypeAndHandle (Event h) = (OBJECT_TYPE_EVENT, h)
+instance Show Event where
+  showsPrec p (Event x) = showParen (p >= 11) (showString "Event 0x" . showHex x)
+
+
+-- | VkQueryPool - Opaque handle to a query pool object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdEndQuery',
+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndQueryIndexedEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdWriteAccelerationStructuresPropertiesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdWriteAccelerationStructuresPropertiesNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp',
+-- 'Vulkan.Core10.Query.createQueryPool',
+-- 'Vulkan.Core10.Query.destroyQueryPool',
+-- 'Vulkan.Core10.Query.getQueryPoolResults',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool',
+-- 'Vulkan.Extensions.VK_EXT_host_query_reset.resetQueryPoolEXT'
+newtype QueryPool = QueryPool Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType QueryPool where
+  objectTypeAndHandle (QueryPool h) = (OBJECT_TYPE_QUERY_POOL, h)
+instance Show QueryPool where
+  showsPrec p (QueryPool x) = showParen (p >= 11) (showString "QueryPool 0x" . showHex x)
+
+
+-- | VkFramebuffer - Opaque handle to a framebuffer object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',
+-- 'Vulkan.Core10.Pass.createFramebuffer',
+-- 'Vulkan.Core10.Pass.destroyFramebuffer'
+newtype Framebuffer = Framebuffer Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType Framebuffer where
+  objectTypeAndHandle (Framebuffer h) = (OBJECT_TYPE_FRAMEBUFFER, h)
+instance Show Framebuffer where
+  showsPrec p (Framebuffer x) = showParen (p >= 11) (showString "Framebuffer 0x" . showHex x)
+
+
+-- | VkRenderPass - Opaque handle to a render pass object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',
+-- 'Vulkan.Core10.Pass.FramebufferCreateInfo',
+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',
+-- 'Vulkan.Core10.Pass.createRenderPass',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.createRenderPass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR',
+-- 'Vulkan.Core10.Pass.destroyRenderPass',
+-- 'Vulkan.Core10.Pass.getRenderAreaGranularity'
+newtype RenderPass = RenderPass Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType RenderPass where
+  objectTypeAndHandle (RenderPass h) = (OBJECT_TYPE_RENDER_PASS, h)
+instance Show RenderPass where
+  showsPrec p (RenderPass x) = showParen (p >= 11) (showString "RenderPass 0x" . showHex x)
+
+
+-- | VkPipelineCache - Opaque handle to a pipeline cache object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.createComputePipelines',
+-- 'Vulkan.Core10.Pipeline.createGraphicsPipelines',
+-- 'Vulkan.Core10.PipelineCache.createPipelineCache',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV',
+-- 'Vulkan.Core10.PipelineCache.destroyPipelineCache',
+-- 'Vulkan.Core10.PipelineCache.getPipelineCacheData',
+-- 'Vulkan.Core10.PipelineCache.mergePipelineCaches'
+newtype PipelineCache = PipelineCache Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType PipelineCache where
+  objectTypeAndHandle (PipelineCache h) = (OBJECT_TYPE_PIPELINE_CACHE, h)
+instance Show PipelineCache where
+  showsPrec p (PipelineCache x) = showParen (p >= 11) (showString "PipelineCache 0x" . showHex x)
+
diff --git a/src/Vulkan/Core10/Handles.hs-boot b/src/Vulkan/Core10/Handles.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Handles.hs-boot
@@ -0,0 +1,119 @@
+{-# language CPP #-}
+module Vulkan.Core10.Handles  ( Buffer
+                              , BufferView
+                              , CommandBuffer
+                              , CommandBuffer_T
+                              , CommandPool
+                              , DescriptorPool
+                              , DescriptorSet
+                              , DescriptorSetLayout
+                              , DeviceMemory
+                              , Device
+                              , Device_T
+                              , Event
+                              , Fence
+                              , Framebuffer
+                              , Image
+                              , ImageView
+                              , Instance
+                              , Instance_T
+                              , PhysicalDevice
+                              , PhysicalDevice_T
+                              , Pipeline
+                              , PipelineCache
+                              , PipelineLayout
+                              , QueryPool
+                              , Queue
+                              , Queue_T
+                              , RenderPass
+                              , Sampler
+                              , Semaphore
+                              , ShaderModule
+                              ) where
+
+
+
+data Buffer
+
+
+data BufferView
+
+
+data CommandBuffer
+
+data CommandBuffer_T
+
+
+data CommandPool
+
+
+data DescriptorPool
+
+
+data DescriptorSet
+
+
+data DescriptorSetLayout
+
+
+data DeviceMemory
+
+
+data Device
+
+data Device_T
+
+
+data Event
+
+
+data Fence
+
+
+data Framebuffer
+
+
+data Image
+
+
+data ImageView
+
+
+data Instance
+
+data Instance_T
+
+
+data PhysicalDevice
+
+data PhysicalDevice_T
+
+
+data Pipeline
+
+
+data PipelineCache
+
+
+data PipelineLayout
+
+
+data QueryPool
+
+
+data Queue
+
+data Queue_T
+
+
+data RenderPass
+
+
+data Sampler
+
+
+data Semaphore
+
+
+data ShaderModule
+
diff --git a/src/Vulkan/Core10/Image.hs b/src/Vulkan/Core10/Image.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Image.hs
@@ -0,0 +1,1630 @@
+{-# language CPP #-}
+module Vulkan.Core10.Image  ( createImage
+                            , withImage
+                            , destroyImage
+                            , getImageSubresourceLayout
+                            , ImageSubresource(..)
+                            , ImageCreateInfo(..)
+                            , SubresourceLayout(..)
+                            ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationImageCreateInfoNV)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateImage))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyImage))
+import Vulkan.Dynamic (DeviceCmds(pVkGetImageSubresourceLayout))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.SharedTypes (Extent3D)
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (ExternalFormatANDROID)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryImageCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory (ExternalMemoryImageCreateInfoNV)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.Handles (Image(..))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierExplicitCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierListCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_image_format_list (ImageFormatListCreateInfo)
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage (ImageStencilUsageCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (ImageSwapchainCreateInfoKHR)
+import Vulkan.Core10.Enums.ImageTiling (ImageTiling)
+import Vulkan.Core10.Enums.ImageType (ImageType)
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
+import Vulkan.Core10.Enums.SharingMode (SharingMode)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateImage
+  :: FunPtr (Ptr Device_T -> Ptr (ImageCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Image -> IO Result) -> Ptr Device_T -> Ptr (ImageCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Image -> IO Result
+
+-- | vkCreateImage - Create a new image object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the image.
+--
+-- -   @pCreateInfo@ is a pointer to a 'ImageCreateInfo' structure
+--     containing parameters to be used to create the image.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pImage@ is a pointer to a 'Vulkan.Core10.Handles.Image' handle in
+--     which the resulting image object is returned.
+--
+-- == Valid Usage
+--
+-- -   If the @flags@ member of @pCreateInfo@ includes
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
+--     creating this 'Vulkan.Core10.Handles.Image' /must/ not cause the
+--     total required sparse memory for all currently valid sparse
+--     resources on the device to exceed
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@sparseAddressSpaceSize@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid 'ImageCreateInfo'
+--     structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pImage@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Image' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Image',
+-- 'ImageCreateInfo'
+createImage :: forall a io . (Extendss ImageCreateInfo a, PokeChain a, MonadIO io) => Device -> ImageCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Image)
+createImage device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateImagePtr = pVkCreateImage (deviceCmds (device :: Device))
+  lift $ unless (vkCreateImagePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateImage is null" Nothing Nothing
+  let vkCreateImage' = mkVkCreateImage vkCreateImagePtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPImage <- ContT $ bracket (callocBytes @Image 8) free
+  r <- lift $ vkCreateImage' (deviceHandle (device)) pCreateInfo pAllocator (pPImage)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pImage <- lift $ peek @Image pPImage
+  pure $ (pImage)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createImage' and 'destroyImage'
+--
+-- To ensure that 'destroyImage' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withImage :: forall a io r . (Extendss ImageCreateInfo a, PokeChain a, MonadIO io) => Device -> ImageCreateInfo a -> Maybe AllocationCallbacks -> (io (Image) -> ((Image) -> io ()) -> r) -> r
+withImage device pCreateInfo pAllocator b =
+  b (createImage device pCreateInfo pAllocator)
+    (\(o0) -> destroyImage device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyImage
+  :: FunPtr (Ptr Device_T -> Image -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Image -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyImage - Destroy an image object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @image@, either directly or via
+--     a 'Vulkan.Core10.Handles.ImageView', /must/ have completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @image@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @image@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' 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
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Image'
+destroyImage :: forall io . MonadIO io => Device -> Image -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyImage device image allocator = liftIO . evalContT $ do
+  let vkDestroyImagePtr = pVkDestroyImage (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyImagePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyImage is null" Nothing Nothing
+  let vkDestroyImage' = mkVkDestroyImage vkDestroyImagePtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyImage' (deviceHandle (device)) (image) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetImageSubresourceLayout
+  :: FunPtr (Ptr Device_T -> Image -> Ptr ImageSubresource -> Ptr SubresourceLayout -> IO ()) -> Ptr Device_T -> Image -> Ptr ImageSubresource -> Ptr SubresourceLayout -> IO ()
+
+-- | vkGetImageSubresourceLayout - Retrieve information about an image
+-- subresource
+--
+-- = 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 'ImageSubresource' structure
+--     selecting a specific image for the image subresource.
+--
+-- -   @pLayout@ is a pointer to a 'SubresourceLayout' structure in which
+--     the layout is returned.
+--
+-- = Description
+--
+-- If the image is
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource linear>,
+-- then the returned layout is valid for
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-hostaccess host access>.
+--
+-- If the image’s tiling is
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and its format is
+-- a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,
+-- then 'getImageSubresourceLayout' describes one /format plane/ of the
+-- image. If the image’s tiling is
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+-- then 'getImageSubresourceLayout' describes one /memory plane/ of the
+-- image. If the image’s tiling is
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
+-- and the image is
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource non-linear>,
+-- then the returned layout has an implementation-dependent meaning; the
+-- vendor of the image’s
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-drm-format-modifier DRM format modifier>
+-- /may/ provide documentation that explains how to interpret the returned
+-- layout.
+--
+-- 'getImageSubresourceLayout' is invariant for the lifetime of a single
+-- image. However, the subresource layout of images in Android hardware
+-- buffer external memory is not known until the image has been bound to
+-- memory, so applications /must/ not call 'getImageSubresourceLayout' for
+-- such an image before it has been bound.
+--
+-- == Valid Usage
+--
+-- -   @image@ /must/ have been created with @tiling@ equal to
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
+--
+-- -   The @aspectMask@ member of @pSubresource@ /must/ only have a single
+--     bit set
+--
+-- -   The @mipLevel@ member of @pSubresource@ /must/ be less than the
+--     @mipLevels@ specified in 'ImageCreateInfo' when @image@ was created
+--
+-- -   The @arrayLayer@ member of @pSubresource@ /must/ be less than the
+--     @arrayLayers@ specified in 'ImageCreateInfo' when @image@ was
+--     created
+--
+-- -   If the @tiling@ of the @image@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and its
+--     @format@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
+--     with two planes, the @aspectMask@ member of @pSubresource@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
+--
+-- -   If the @tiling@ of the @image@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and its
+--     @format@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
+--     with three planes, the @aspectMask@ member of @pSubresource@ /must/
+--     be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--
+-- -   If @image@ was created with the
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     external memory handle type, then @image@ /must/ be bound to memory
+--
+-- -   If the @tiling@ of the @image@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--     then the @aspectMask@ member of @pSubresource@ /must/ be
+--     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ and the index @i@ /must/ be
+--     less than the
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
+--     associated with the image’s @format@ and
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierPropertiesEXT'::@drmFormatModifier@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @pSubresource@ /must/ be a valid pointer to a valid
+--     'ImageSubresource' structure
+--
+-- -   @pLayout@ /must/ be a valid pointer to a 'SubresourceLayout'
+--     structure
+--
+-- -   @image@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Image',
+-- 'ImageSubresource', 'SubresourceLayout'
+getImageSubresourceLayout :: forall io . MonadIO io => Device -> Image -> ImageSubresource -> io (SubresourceLayout)
+getImageSubresourceLayout device image subresource = liftIO . evalContT $ do
+  let vkGetImageSubresourceLayoutPtr = pVkGetImageSubresourceLayout (deviceCmds (device :: Device))
+  lift $ unless (vkGetImageSubresourceLayoutPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetImageSubresourceLayout is null" Nothing Nothing
+  let vkGetImageSubresourceLayout' = mkVkGetImageSubresourceLayout vkGetImageSubresourceLayoutPtr
+  pSubresource <- ContT $ withCStruct (subresource)
+  pPLayout <- ContT (withZeroCStruct @SubresourceLayout)
+  lift $ vkGetImageSubresourceLayout' (deviceHandle (device)) (image) pSubresource (pPLayout)
+  pLayout <- lift $ peekCStruct @SubresourceLayout pPLayout
+  pure $ (pLayout)
+
+
+-- | VkImageSubresource - Structure specifying an image subresource
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind',
+-- 'getImageSubresourceLayout'
+data ImageSubresource = ImageSubresource
+  { -- | @aspectMask@ /must/ not be @0@
+    aspectMask :: ImageAspectFlags
+  , -- | @mipLevel@ selects the mipmap level.
+    mipLevel :: Word32
+  , -- | @arrayLayer@ selects the array layer.
+    arrayLayer :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show ImageSubresource
+
+instance ToCStruct ImageSubresource where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageSubresource{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (mipLevel)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (arrayLayer)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct ImageSubresource where
+  peekCStruct p = do
+    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 0 :: Ptr ImageAspectFlags))
+    mipLevel <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    arrayLayer <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pure $ ImageSubresource
+             aspectMask mipLevel arrayLayer
+
+instance Storable ImageSubresource where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageSubresource where
+  zero = ImageSubresource
+           zero
+           zero
+           zero
+
+
+-- | VkImageCreateInfo - Structure specifying the parameters of a newly
+-- created image object
+--
+-- = Description
+--
+-- Images created with @tiling@ equal to
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' have further
+-- restrictions on their limits and capabilities compared to images created
+-- with @tiling@ equal to
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'. Creation of
+-- images with tiling 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'
+-- /may/ not be supported unless other parameters meet all of the
+-- constraints:
+--
+-- -   @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--
+-- -   @format@ is not a depth\/stencil format
+--
+-- -   @mipLevels@ is 1
+--
+-- -   @arrayLayers@ is 1
+--
+-- -   @samples@ is
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   @usage@ only includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     and\/or
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--
+-- Images created with a @format@ from one of those listed in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>
+-- have further restrictions on their limits and capabilities compared to
+-- images created with other formats. Creation of images with a format
+-- requiring
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion Y′CBCR conversion>
+-- /may/ not be supported unless other parameters meet all of the
+-- constraints:
+--
+-- -   @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--
+-- -   @mipLevels@ is 1
+--
+-- -   @arrayLayers@ is 1
+--
+-- -   @samples@ is
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- Implementations /may/ support additional limits and capabilities beyond
+-- those listed above.
+--
+-- To determine the set of valid @usage@ bits for a given format, call
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'.
+--
+-- If the size of the resultant image would exceed @maxResourceSize@, then
+-- 'createImage' /must/ fail and return
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'. This failure
+-- /may/ occur even when all image creation parameters satisfy their valid
+-- usage requirements.
+--
+-- Note
+--
+-- For images created without
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_EXTENDED_USAGE_BIT'
+-- a @usage@ bit is valid if it is supported for the format the image is
+-- created with.
+--
+-- For images created with
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_EXTENDED_USAGE_BIT'
+-- a @usage@ bit is valid if it is supported for at least one of the
+-- formats a 'Vulkan.Core10.Handles.ImageView' created from the image /can/
+-- have (see
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>
+-- for more detail).
+--
+-- Valid values for some image creation parameters are limited by a
+-- numerical upper bound or by inclusion in a bitset. For example,
+-- 'ImageCreateInfo'::@arrayLayers@ is limited by
+-- @imageCreateMaxArrayLayers@, defined below; and
+-- 'ImageCreateInfo'::@samples@ is limited by @imageCreateSampleCounts@,
+-- also defined below.
+--
+-- Several limiting values are defined below, as well as assisting values
+-- from which the limiting values are derived. The limiting values are
+-- referenced by the relevant valid usage statements of 'ImageCreateInfo'.
+--
+-- -   Let @uint64_t imageCreateDrmFormatModifiers[]@ be the set of
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-drm-format-modifier Linux DRM format modifiers>
+--     that the resultant image /may/ have.
+--
+--     -   If @tiling@ is not
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--         then @imageCreateDrmFormatModifiers@ is empty.
+--
+--     -   If 'ImageCreateInfo'::@pNext@ contains
+--         'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
+--         then @imageCreateDrmFormatModifiers@ contains exactly one
+--         modifier,
+--         'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT'::@drmFormatModifier@.
+--
+--     -   If 'ImageCreateInfo'::@pNext@ contains
+--         'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT',
+--         then @imageCreateDrmFormatModifiers@ contains the entire array
+--         'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT'::@pDrmFormatModifiers@.
+--
+-- -   Let @VkBool32 imageCreateMaybeLinear@ indicate if the resultant
+--     image may be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource linear>.
+--
+--     -   If @tiling@ is
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR', then
+--         @imageCreateMaybeLinear@ is @true@.
+--
+--     -   If @tiling@ is
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then
+--         @imageCreateMaybeLinear@ is @false@.
+--
+--     -   If @tiling@ is
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--         then @imageCreateMaybeLinear_@ is @true@ if and only if
+--         @imageCreateDrmFormatModifiers@ contains
+--         @DRM_FORMAT_MOD_LINEAR@.
+--
+-- -   Let @VkFormatFeatureFlags imageCreateFormatFeatures@ be the set of
+--     valid /format features/ available during image creation.
+--
+--     -   If @tiling@ is
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR', then
+--         @imageCreateFormatFeatures@ is the value of
+--         'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@linearTilingFeatures@
+--         found by calling
+--         'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
+--         with parameter @format@ equal to 'ImageCreateInfo'::@format@.
+--
+--     -   If @tiling@ is
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', and if
+--         the @pNext@ chain includes no
+--         'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+--         structure with non-zero @externalFormat@, then
+--         @imageCreateFormatFeatures@ is value of
+--         'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@optimalTilingFeatures@
+--         found by calling
+--         'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
+--         with parameter @format@ equal to 'ImageCreateInfo'::@format@.
+--
+--     -   If @tiling@ is
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', and if
+--         the @pNext@ chain includes a
+--         'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+--         structure with non-zero @externalFormat@, then
+--         @imageCreateFormatFeatures@ is the value of
+--         'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID'::@formatFeatures@
+--         obtained by
+--         'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID'
+--         with a matching @externalFormat@ value.
+--
+--     -   If @tiling@ is
+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--         then the value of @imageCreateFormatFeatures@ is found by
+--         calling
+--         'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'
+--         with
+--         'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@format@
+--         equal to 'ImageCreateInfo'::@format@ and with
+--         'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesListEXT'
+--         chained into
+--         'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2';
+--         by collecting all members of the returned array
+--         'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesListEXT'::@pDrmFormatModifierProperties@
+--         whose @drmFormatModifier@ belongs to
+--         @imageCreateDrmFormatModifiers@; and by taking the bitwise
+--         intersection, over the collected array members, of
+--         @drmFormatModifierTilingFeatures@. (The resultant
+--         @imageCreateFormatFeatures@ /may/ be empty).
+--
+-- -   Let
+--     @VkImageFormatProperties2 imageCreateImageFormatPropertiesList[]@ be
+--     defined as follows.
+--
+--     -   If 'ImageCreateInfo'::@pNext@ contains no
+--         'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+--         structure with non-zero @externalFormat@, then
+--         @imageCreateImageFormatPropertiesList@ is the list of structures
+--         obtained by calling
+--         'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2',
+--         possibly multiple times, as follows:
+--
+--         -   The parameters
+--             'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@format@,
+--             @imageType@, @tiling@, @usage@, and @flags@ /must/ be equal
+--             to those in 'ImageCreateInfo'.
+--
+--         -   If 'ImageCreateInfo'::@pNext@ contains a
+--             'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
+--             structure whose @handleTypes@ is not @0@, then
+--             'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@
+--             /must/ contain a
+--             'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'
+--             structure whose @handleType@ is not @0@; and
+--             'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--             /must/ be called for each handle type in
+--             'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@,
+--             successively setting
+--             'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'::@handleType@
+--             on each call.
+--
+--         -   If 'ImageCreateInfo'::@pNext@ contains no
+--             'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
+--             structure, or contains a structure whose @handleTypes@ is
+--             @0@, then
+--             'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@
+--             /must/ either contain no
+--             'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'
+--             structure, or contain a structure whose @handleType@ is @0@.
+--
+--         -   If @tiling@ is
+--             'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--             then
+--             'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@
+--             /must/ contain a
+--             'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT'
+--             structure where @sharingMode@ is equal to
+--             'ImageCreateInfo'::@sharingMode@; and, if @sharingMode@ is
+--             'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
+--             then @queueFamilyIndexCount@ and @pQueueFamilyIndices@
+--             /must/ be equal to those in 'ImageCreateInfo'; and, if
+--             @flags@ contains
+--             'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
+--             then the
+--             'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
+--             structure included in the @pNext@ chain of
+--             'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
+--             /must/ be equivalent to the one included in the @pNext@
+--             chain of 'ImageCreateInfo'; and
+--             'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--             /must/ be called for each modifier in
+--             @imageCreateDrmFormatModifiers@, successively setting
+--             'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT'::@drmFormatModifier@
+--             on each call.
+--
+--         -   If @tiling@ is not
+--             'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--             then
+--             'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@
+--             /must/ contain no
+--             'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT'
+--             structure.
+--
+--         -   If any call to
+--             'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--             returns an error, then
+--             @imageCreateImageFormatPropertiesList@ is defined to be the
+--             empty list.
+--
+--     -   If 'ImageCreateInfo'::@pNext@ contains a
+--         'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+--         structure with non-zero @externalFormat@, then
+--         @imageCreateImageFormatPropertiesList@ contains a single element
+--         where:
+--
+--         -   'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxMipLevels@
+--             is ⌊log2(max(@extent.width@, @extent.height@,
+--             @extent.depth@))⌋ + 1.
+--
+--         -   'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxArrayLayers@
+--             is
+--             'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::maxImageArrayLayers.
+--
+--         -   Each component of
+--             'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxExtent@
+--             is
+--             'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::maxImageDimension2D.
+--
+--         -   'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@sampleCounts@
+--             contains exactly
+--             'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'.
+--
+-- -   Let @uint32_t imageCreateMaxMipLevels@ be the minimum value of
+--     'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxMipLevels@
+--     in @imageCreateImageFormatPropertiesList@. The value is undefined if
+--     @imageCreateImageFormatPropertiesList@ is empty.
+--
+-- -   Let @uint32_t imageCreateMaxArrayLayers@ be the minimum value of
+--     'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxArrayLayers@
+--     in @imageCreateImageFormatPropertiesList@. The value is undefined if
+--     @imageCreateImageFormatPropertiesList@ is empty.
+--
+-- -   Let @VkExtent3D imageCreateMaxExtent@ be the component-wise minimum
+--     over all
+--     'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@maxExtent@
+--     values in @imageCreateImageFormatPropertiesList@. The value is
+--     undefined if @imageCreateImageFormatPropertiesList@ is empty.
+--
+-- -   Let @VkSampleCountFlags imageCreateSampleCounts@ be the intersection
+--     of each
+--     'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@sampleCounts@
+--     in @imageCreateImageFormatPropertiesList@. The value is undefined if
+--     @imageCreateImageFormatPropertiesList@ is empty.
+--
+-- = Valid Usage
+--
+-- -   Each of the following values (as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
+--     /must/ not be undefined @imageCreateMaxMipLevels@,
+--     @imageCreateMaxArrayLayers@, @imageCreateMaxExtent@, and
+--     @imageCreateSampleCounts@
+--
+-- -   If @sharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
+--     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
+--     @queueFamilyIndexCount@ @uint32_t@ values
+--
+-- -   If @sharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
+--     @queueFamilyIndexCount@ /must/ be greater than @1@
+--
+-- -   If @sharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', each
+--     element of @pQueueFamilyIndices@ /must/ be unique and /must/ be less
+--     than @pQueueFamilyPropertyCount@ returned by either
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'
+--     for the @physicalDevice@ that was used to create @device@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+--     structure, and its @externalFormat@ member is non-zero the @format@
+--     /must/ be 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
+--
+-- -   If the @pNext@ chain does not include a
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+--     structure, or does and its @externalFormat@ member is @0@, the
+--     @format@ /must/ not be 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
+--
+-- -   @extent.width@ /must/ be greater than @0@
+--
+-- -   @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
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT',
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT',
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
+--
+-- -   @extent.width@ /must/ be less than or equal to
+--     @imageCreateMaxExtent.width@ (as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
+--
+-- -   @extent.height@ /must/ be less than or equal to
+--     @imageCreateMaxExtent.height@ (as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
+--
+-- -   @extent.depth@ /must/ be less than or equal to
+--     @imageCreateMaxExtent.depth@ (as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
+--
+-- -   If @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and
+--     @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT',
+--     @extent.width@ and @extent.height@ /must/ be equal and @arrayLayers@
+--     /must/ be greater than or equal to 6
+--
+-- -   If @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D',
+--     both @extent.height@ and @extent.depth@ /must/ be @1@
+--
+-- -   If @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D',
+--     @extent.depth@ /must/ be @1@
+--
+-- -   @mipLevels@ /must/ be less than or equal to the number of levels in
+--     the complete mipmap chain based on @extent.width@, @extent.height@,
+--     and @extent.depth@
+--
+-- -   @mipLevels@ /must/ be less than or equal to
+--     @imageCreateMaxMipLevels@ (as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
+--
+-- -   @arrayLayers@ /must/ be less than or equal to
+--     @imageCreateMaxArrayLayers@ (as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
+--
+-- -   If @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D',
+--     @arrayLayers@ /must/ be @1@
+--
+-- -   If @samples@ is not
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT', then
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D',
+--     @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT',
+--     @mipLevels@ /must/ be equal to @1@, and @imageCreateMaybeLinear@ (as
+--     defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
+--     /must/ be @false@,
+--
+-- -   If @samples@ is not
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT',
+--     @usage@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT'
+--
+-- -   If @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
+--     then bits other than
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
+--     and
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
+--     /must/ not be set
+--
+-- -   If @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
+--     @extent.width@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferWidth@
+--
+-- -   If @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
+--     @extent.height@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferHeight@
+--
+-- -   If @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',
+--     @extent.width@ /must/ be less than or equal to
+--     \(\lceil{\frac{maxFramebufferWidth}{minFragmentDensityTexelSize_{width}}}\rceil\)
+--
+-- -   If @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',
+--     @extent.height@ /must/ be less than or equal to
+--     \(\lceil{\frac{maxFramebufferHeight}{minFragmentDensityTexelSize_{height}}}\rceil\)
+--
+-- -   If @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
+--     @usage@ /must/ also contain at least one of
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
+--
+-- -   @samples@ /must/ be a bit value that is set in
+--     @imageCreateSampleCounts@ (as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderStorageImageMultisample multisampled storage images>
+--     feature is not enabled, and @usage@ contains
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT',
+--     @samples@ /must/ be
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseBinding sparse bindings>
+--     feature is not enabled, @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyAliased sparse aliased residency>
+--     feature is not enabled, @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
+--
+-- -   If @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D',
+--     @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyImage2D sparse residency for 2D images>
+--     feature is not enabled, and @imageType@ is
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', @flags@ /must/ not
+--     contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyImage3D sparse residency for 3D images>
+--     feature is not enabled, and @imageType@ is
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', @flags@ /must/ not
+--     contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency2Samples sparse residency for images with 2 samples>
+--     feature is not enabled, @imageType@ is
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @samples@ is
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_2_BIT',
+--     @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency4Samples sparse residency for images with 4 samples>
+--     feature is not enabled, @imageType@ is
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @samples@ is
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_4_BIT',
+--     @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency8Samples sparse residency for images with 8 samples>
+--     feature is not enabled, @imageType@ is
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @samples@ is
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_8_BIT',
+--     @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency16Samples sparse residency for images with 16 samples>
+--     feature is not enabled, @imageType@ is
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @samples@ is
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_16_BIT',
+--     @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT',
+--     it /must/ also contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'
+--
+-- -   If any of the bits
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
+--     are set,
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT'
+--     /must/ not also be set
+--
+-- -   If the protected memory feature is not enabled, @flags@ /must/ not
+--     contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT'
+--
+-- -   If any of the bits
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
+--     are set,
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT'
+--     /must/ not also be set
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'
+--     structure, it /must/ not contain a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
+--     structure
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
+--     structure, its @handleTypes@ member /must/ only contain bits that
+--     are also in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'::@externalMemoryProperties.compatibleHandleTypes@,
+--     as returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--     with @format@, @imageType@, @tiling@, @usage@, and @flags@ equal to
+--     those in this structure, and with a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'
+--     structure included in the @pNext@ chain, with a @handleType@ equal
+--     to any one of the handle types specified in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'
+--     structure, its @handleTypes@ member /must/ only contain bits that
+--     are also in
+--     'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalImageFormatPropertiesNV'::@externalMemoryProperties.compatibleHandleTypes@,
+--     as returned by
+--     'Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV'
+--     with @format@, @imageType@, @tiling@, @usage@, and @flags@ equal to
+--     those in this structure, and with @externalHandleType@ equal to any
+--     one of the handle types specified in
+--     'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'::@handleTypes@
+--
+-- -   If the logical device was created with
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo'::@physicalDeviceCount@
+--     equal to 1, @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT',
+--     then @mipLevels@ /must/ be one, @arrayLayers@ /must/ be one,
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'.
+--     and @imageCreateMaybeLinear@ (as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
+--     /must/ be @false@
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT',
+--     then @format@ /must/ be a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#appendix-compressedtex-bc block-compressed image format>,
+--     an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#appendix-compressedtex-etc2 ETC compressed image format>,
+--     or an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#appendix-compressedtex-astc ASTC compressed image format>
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT',
+--     then @flags@ /must/ also contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
+--
+-- -   @initialLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
+--     or
+--     'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'
+--     structure whose @handleTypes@ member is not @0@, @initialLayout@
+--     /must/ be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'
+--
+-- -   If the image @format@ is one of those listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>,
+--     then @mipLevels@ /must/ be 1
+--
+-- -   If the image @format@ is one of those listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>,
+--     @samples@ /must/ be
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If the image @format@ is one of those listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>,
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--
+-- -   If the image @format@ is one of those listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>,
+--     and the @ycbcrImageArrays@ feature is not enabled, @arrayLayers@
+--     /must/ be 1
+--
+-- -   If @format@ is a /multi-planar/ format, and if
+--     @imageCreateFormatFeatures@ (as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>)
+--     does not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DISJOINT_BIT',
+--     then @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--
+-- -   If @format@ is not a /multi-planar/ format, and @flags@ does not
+--     include
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_ALIAS_BIT',
+--     @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--
+-- -   If @tiling@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--     then the @pNext@ chain /must/ include exactly one of
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT'
+--     structures
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT'
+--     structure, then @tiling@ /must/ be
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
+--
+-- -   If @tiling@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
+--     and @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
+--     then the @pNext@ chain /must/ include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
+--     structure with non-zero @viewFormatCount@
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     @format@ /must/ be a depth or depth\/stencil format
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
+--     structure whose @handleTypes@ member includes
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
+--     structure whose @handleTypes@ member includes
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',
+--     @mipLevels@ /must/ either be @1@ or equal to the number of levels in
+--     the complete mipmap chain based on @extent.width@, @extent.height@,
+--     and @extent.depth@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+--     structure whose @externalFormat@ member is not @0@, @flags@ /must/
+--     not include
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+--     structure whose @externalFormat@ member is not @0@, @usage@ /must/
+--     not include any usages except
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT'
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+--     structure whose @externalFormat@ member is not @0@, @tiling@ /must/
+--     be 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'
+--
+-- -   If @format@ is a depth-stencil format, @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
+--     and the @pNext@ chain includes a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure, then its
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
+--     member /must/ also include
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If @format@ is a depth-stencil format, @usage@ does not include
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
+--     and the @pNext@ chain includes a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure, then its
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
+--     member /must/ also not include
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If @format@ is a depth-stencil format, @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
+--     and the @pNext@ chain includes a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure, then its
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
+--     member /must/ also include
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT'
+--
+-- -   If @format@ is a depth-stencil format, @usage@ does not include
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
+--     and the @pNext@ chain includes a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure, then its
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@
+--     member /must/ also not include
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT'
+--
+-- -   If 'Vulkan.Core10.Enums.Format.Format' is a depth-stencil format and
+--     the @pNext@ chain includes a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure with its @stencilUsage@ member including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
+--     @extent.width@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferWidth@
+--
+-- -   If @format@ is a depth-stencil format and the @pNext@ chain includes
+--     a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure with its @stencilUsage@ member including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
+--     @extent.height@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferHeight@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderStorageImageMultisample multisampled storage images>
+--     feature is not enabled, @format@ is a depth-stencil format and the
+--     @pNext@ chain includes a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure with its @stencilUsage@ including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT',
+--     @samples@ /must/ be
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV',
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--     or 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV',
+--     it /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
+--     and the @format@ /must/ not be a depth\/stencil format
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     and @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D',
+--     @extent.width@ and @extent.height@ /must/ be greater than @1@
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     and @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D',
+--     @extent.width@, @extent.height@, and @extent.depth@ /must/ be
+--     greater than @1@
+--
+-- -   If @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--
+-- -   If @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
+--     @samples@ /must/ be
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If @usage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
+--     @tiling@ /must/ be
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
+--     @tiling@ /must/ be
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
+--     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
+--     @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
+--     @mipLevels@ /must/ be @1@
+--
+-- = Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV',
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo',
+--     'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV',
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo',
+--     or 'Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' values
+--
+-- -   @imageType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageType.ImageType' value
+--
+-- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- -   @samples@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+--
+-- -   @tiling@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value
+--
+-- -   @usage@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- -   @sharingMode@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SharingMode.SharingMode' value
+--
+-- -   @initialLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- \<\/section>
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.Extent3D',
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Enums.ImageTiling.ImageTiling',
+-- 'Vulkan.Core10.Enums.ImageType.ImageType',
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
+-- 'Vulkan.Core10.Enums.SharingMode.SharingMode',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createImage'
+data ImageCreateInfo (es :: [Type]) = ImageCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' describing
+    -- additional parameters of the image.
+    flags :: ImageCreateFlags
+  , -- | @imageType@ is a 'Vulkan.Core10.Enums.ImageType.ImageType' value
+    -- specifying the basic dimensionality of the image. Layers in array
+    -- textures do not count as a dimension for the purposes of the image type.
+    imageType :: ImageType
+  , -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' describing the format
+    -- and type of the texel blocks that will be contained in the image.
+    format :: Format
+  , -- | @extent@ is a 'Vulkan.Core10.SharedTypes.Extent3D' describing the number
+    -- of data elements in each dimension of the base level.
+    extent :: Extent3D
+  , -- | @mipLevels@ describes the number of levels of detail available for
+    -- minified sampling of the image.
+    mipLevels :: Word32
+  , -- | @arrayLayers@ is the number of layers in the image.
+    arrayLayers :: Word32
+  , -- | @samples@ is a
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' specifying
+    -- the number of
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling samples per texel>.
+    samples :: SampleCountFlagBits
+  , -- | @tiling@ is a 'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value
+    -- specifying the tiling arrangement of the texel blocks in memory.
+    tiling :: ImageTiling
+  , -- | @usage@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' describing
+    -- the intended usage of the image.
+    usage :: ImageUsageFlags
+  , -- | @sharingMode@ is a 'Vulkan.Core10.Enums.SharingMode.SharingMode' value
+    -- specifying the sharing mode of the image when it will be accessed by
+    -- multiple queue families.
+    sharingMode :: SharingMode
+  , -- | @pQueueFamilyIndices@ is a list of queue families that will access this
+    -- image (ignored if @sharingMode@ is not
+    -- 'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT').
+    queueFamilyIndices :: Vector Word32
+  , -- | @initialLayout@ is a 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+    -- specifying the initial 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' of
+    -- all image subresources of the image. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts Image Layouts>.
+    initialLayout :: ImageLayout
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (ImageCreateInfo es)
+
+instance Extensible ImageCreateInfo where
+  extensibleType = STRUCTURE_TYPE_IMAGE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext ImageCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @ImageStencilUsageCreateInfo = Just f
+    | Just Refl <- eqT @e @ImageDrmFormatModifierExplicitCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @ImageDrmFormatModifierListCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @ExternalFormatANDROID = Just f
+    | Just Refl <- eqT @e @ImageFormatListCreateInfo = Just f
+    | Just Refl <- eqT @e @ImageSwapchainCreateInfoKHR = Just f
+    | Just Refl <- eqT @e @ExternalMemoryImageCreateInfo = Just f
+    | Just Refl <- eqT @e @ExternalMemoryImageCreateInfoNV = Just f
+    | Just Refl <- eqT @e @DedicatedAllocationImageCreateInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss ImageCreateInfo es, PokeChain es) => ToCStruct (ImageCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr ImageCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr ImageType)) (imageType)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Format)) (format)
+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr Extent3D)) (extent) . ($ ())
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (mipLevels)
+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (arrayLayers)
+    lift $ poke ((p `plusPtr` 48 :: Ptr SampleCountFlagBits)) (samples)
+    lift $ poke ((p `plusPtr` 52 :: Ptr ImageTiling)) (tiling)
+    lift $ poke ((p `plusPtr` 56 :: Ptr ImageUsageFlags)) (usage)
+    lift $ poke ((p `plusPtr` 60 :: Ptr SharingMode)) (sharingMode)
+    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueFamilyIndices)) :: Word32))
+    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (queueFamilyIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (queueFamilyIndices)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
+    lift $ poke ((p `plusPtr` 80 :: Ptr ImageLayout)) (initialLayout)
+    lift $ f
+  cStructSize = 88
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr ImageType)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Format)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 48 :: Ptr SampleCountFlagBits)) (zero)
+    lift $ poke ((p `plusPtr` 52 :: Ptr ImageTiling)) (zero)
+    lift $ poke ((p `plusPtr` 56 :: Ptr ImageUsageFlags)) (zero)
+    lift $ poke ((p `plusPtr` 60 :: Ptr SharingMode)) (zero)
+    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
+    lift $ poke ((p `plusPtr` 80 :: Ptr ImageLayout)) (zero)
+    lift $ f
+
+instance (Extendss ImageCreateInfo es, PeekChain es) => FromCStruct (ImageCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @ImageCreateFlags ((p `plusPtr` 16 :: Ptr ImageCreateFlags))
+    imageType <- peek @ImageType ((p `plusPtr` 20 :: Ptr ImageType))
+    format <- peek @Format ((p `plusPtr` 24 :: Ptr Format))
+    extent <- peekCStruct @Extent3D ((p `plusPtr` 28 :: Ptr Extent3D))
+    mipLevels <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    arrayLayers <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
+    samples <- peek @SampleCountFlagBits ((p `plusPtr` 48 :: Ptr SampleCountFlagBits))
+    tiling <- peek @ImageTiling ((p `plusPtr` 52 :: Ptr ImageTiling))
+    usage <- peek @ImageUsageFlags ((p `plusPtr` 56 :: Ptr ImageUsageFlags))
+    sharingMode <- peek @SharingMode ((p `plusPtr` 60 :: Ptr SharingMode))
+    queueFamilyIndexCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    pQueueFamilyIndices <- peek @(Ptr Word32) ((p `plusPtr` 72 :: Ptr (Ptr Word32)))
+    pQueueFamilyIndices' <- generateM (fromIntegral queueFamilyIndexCount) (\i -> peek @Word32 ((pQueueFamilyIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    initialLayout <- peek @ImageLayout ((p `plusPtr` 80 :: Ptr ImageLayout))
+    pure $ ImageCreateInfo
+             next flags imageType format extent mipLevels arrayLayers samples tiling usage sharingMode pQueueFamilyIndices' initialLayout
+
+instance es ~ '[] => Zero (ImageCreateInfo es) where
+  zero = ImageCreateInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           mempty
+           zero
+
+
+-- | VkSubresourceLayout - Structure specifying subresource layout
+--
+-- = Description
+--
+-- If the image is
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource linear>,
+-- then @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;
+--
+-- The value of @arrayPitch@ is undefined for images that were not created
+-- as arrays. @depthPitch@ is defined only for 3D images.
+--
+-- If the image has a /single-plane/ color format and its tiling is
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' , then the
+-- @aspectMask@ member of 'ImageSubresource' /must/ be
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'.
+--
+-- If the image has a depth\/stencil format and its tiling is
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' , then
+-- @aspectMask@ /must/ be either
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.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.
+--
+-- If the image has a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
+-- and its tiling is 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'
+-- , then the @aspectMask@ member of 'ImageSubresource' /must/ be
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or
+-- (for 3-plane formats only)
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'.
+-- Querying each of these image subresource layouts will return a different
+-- @offset@ and @size@ representing the region of memory used for that
+-- plane. If the image is /disjoint/, then the @offset@ is relative to the
+-- base address of the plane. If the image is /non-disjoint/, then the
+-- @offset@ is relative to the base address of the image.
+--
+-- If the image’s tiling is
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+-- then the @aspectMask@ member of 'ImageSubresource' /must/ be one of
+-- @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@, where the maximum allowed
+-- plane index @i@ is defined by the
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
+-- associated with the image’s 'ImageCreateInfo'::@format@ and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-drm-format-modifier modifier>.
+-- The memory range used by the subresource is described by @offset@ and
+-- @size@. If the image is /disjoint/, then the @offset@ is relative to the
+-- base address of the /memory plane/. If the image is /non-disjoint/, then
+-- the @offset@ is relative to the base address of the image. If the image
+-- is
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource non-linear>,
+-- then @rowPitch@, @arrayPitch@, and @depthPitch@ have an
+-- implementation-dependent meaning.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT',
+-- 'getImageSubresourceLayout'
+data SubresourceLayout = SubresourceLayout
+  { -- | @offset@ is the byte offset from the start of the image or the plane
+    -- where the image subresource begins.
+    offset :: DeviceSize
+  , -- | @size@ is the size in bytes of the image subresource. @size@ includes
+    -- any extra memory that is required based on @rowPitch@.
+    size :: DeviceSize
+  , -- | @rowPitch@ describes the number of bytes between each row of texels in
+    -- an image.
+    rowPitch :: DeviceSize
+  , -- | @arrayPitch@ describes the number of bytes between each array layer of
+    -- an image.
+    arrayPitch :: DeviceSize
+  , -- | @depthPitch@ describes the number of bytes between each slice of 3D
+    -- image.
+    depthPitch :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show SubresourceLayout
+
+instance ToCStruct SubresourceLayout where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SubresourceLayout{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (offset)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (size)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (rowPitch)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (arrayPitch)
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (depthPitch)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct SubresourceLayout where
+  peekCStruct p = do
+    offset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
+    size <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
+    rowPitch <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    arrayPitch <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    depthPitch <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
+    pure $ SubresourceLayout
+             offset size rowPitch arrayPitch depthPitch
+
+instance Storable SubresourceLayout where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SubresourceLayout where
+  zero = SubresourceLayout
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/Image.hs-boot b/src/Vulkan/Core10/Image.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Image.hs-boot
@@ -0,0 +1,37 @@
+{-# language CPP #-}
+module Vulkan.Core10.Image  ( ImageCreateInfo
+                            , ImageSubresource
+                            , SubresourceLayout
+                            ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role ImageCreateInfo nominal
+data ImageCreateInfo (es :: [Type])
+
+instance (Extendss ImageCreateInfo es, PokeChain es) => ToCStruct (ImageCreateInfo es)
+instance Show (Chain es) => Show (ImageCreateInfo es)
+
+instance (Extendss ImageCreateInfo es, PeekChain es) => FromCStruct (ImageCreateInfo es)
+
+
+data ImageSubresource
+
+instance ToCStruct ImageSubresource
+instance Show ImageSubresource
+
+instance FromCStruct ImageSubresource
+
+
+data SubresourceLayout
+
+instance ToCStruct SubresourceLayout
+instance Show SubresourceLayout
+
+instance FromCStruct SubresourceLayout
+
diff --git a/src/Vulkan/Core10/ImageView.hs b/src/Vulkan/Core10/ImageView.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/ImageView.hs
@@ -0,0 +1,956 @@
+{-# language CPP #-}
+module Vulkan.Core10.ImageView  ( createImageView
+                                , withImageView
+                                , destroyImageView
+                                , ComponentMapping(..)
+                                , ImageViewCreateInfo(..)
+                                ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Enums.ComponentSwizzle (ComponentSwizzle)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateImageView))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyImageView))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.SharedTypes (ImageSubresourceRange)
+import Vulkan.Core10.Handles (ImageView)
+import Vulkan.Core10.Handles (ImageView(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_astc_decode_mode (ImageViewASTCDecodeModeEXT)
+import Vulkan.Core10.Enums.ImageViewCreateFlagBits (ImageViewCreateFlags)
+import Vulkan.Core10.Enums.ImageViewType (ImageViewType)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (ImageViewUsageCreateInfo)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionInfo)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateImageView
+  :: FunPtr (Ptr Device_T -> Ptr (ImageViewCreateInfo a) -> Ptr AllocationCallbacks -> Ptr ImageView -> IO Result) -> Ptr Device_T -> Ptr (ImageViewCreateInfo a) -> Ptr AllocationCallbacks -> Ptr ImageView -> IO Result
+
+-- | vkCreateImageView - Create an image view from an existing image
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the image view.
+--
+-- -   @pCreateInfo@ is a pointer to a 'ImageViewCreateInfo' structure
+--     containing parameters to be used to create the image view.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pView@ is a pointer to a 'Vulkan.Core10.Handles.ImageView' handle
+--     in which the resulting image view object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'ImageViewCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pView@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.ImageView' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.ImageView',
+-- 'ImageViewCreateInfo'
+createImageView :: forall a io . (Extendss ImageViewCreateInfo a, PokeChain a, MonadIO io) => Device -> ImageViewCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (ImageView)
+createImageView device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateImageViewPtr = pVkCreateImageView (deviceCmds (device :: Device))
+  lift $ unless (vkCreateImageViewPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateImageView is null" Nothing Nothing
+  let vkCreateImageView' = mkVkCreateImageView vkCreateImageViewPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPView <- ContT $ bracket (callocBytes @ImageView 8) free
+  r <- lift $ vkCreateImageView' (deviceHandle (device)) pCreateInfo pAllocator (pPView)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pView <- lift $ peek @ImageView pPView
+  pure $ (pView)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createImageView' and 'destroyImageView'
+--
+-- To ensure that 'destroyImageView' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withImageView :: forall a io r . (Extendss ImageViewCreateInfo a, PokeChain a, MonadIO io) => Device -> ImageViewCreateInfo a -> Maybe AllocationCallbacks -> (io (ImageView) -> ((ImageView) -> io ()) -> r) -> r
+withImageView device pCreateInfo pAllocator b =
+  b (createImageView device pCreateInfo pAllocator)
+    (\(o0) -> destroyImageView device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyImageView
+  :: FunPtr (Ptr Device_T -> ImageView -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> ImageView -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyImageView - Destroy an image view object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @imageView@ /must/ have
+--     completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @imageView@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @imageView@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView'
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @imageView@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @imageView@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.ImageView'
+destroyImageView :: forall io . MonadIO io => Device -> ImageView -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyImageView device imageView allocator = liftIO . evalContT $ do
+  let vkDestroyImageViewPtr = pVkDestroyImageView (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyImageViewPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyImageView is null" Nothing Nothing
+  let vkDestroyImageView' = mkVkDestroyImageView vkDestroyImageViewPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyImageView' (deviceHandle (device)) (imageView) pAllocator
+  pure $ ()
+
+
+-- | VkComponentMapping - Structure specifying a color component mapping
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
+-- 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle',
+-- 'ImageViewCreateInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
+data ComponentMapping = ComponentMapping
+  { -- | @r@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value
+    r :: ComponentSwizzle
+  , -- | @g@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value
+    g :: ComponentSwizzle
+  , -- | @b@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value
+    b :: ComponentSwizzle
+  , -- | @a@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value
+    a :: ComponentSwizzle
+  }
+  deriving (Typeable)
+deriving instance Show ComponentMapping
+
+instance ToCStruct ComponentMapping where
+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ComponentMapping{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr ComponentSwizzle)) (r)
+    poke ((p `plusPtr` 4 :: Ptr ComponentSwizzle)) (g)
+    poke ((p `plusPtr` 8 :: Ptr ComponentSwizzle)) (b)
+    poke ((p `plusPtr` 12 :: Ptr ComponentSwizzle)) (a)
+    f
+  cStructSize = 16
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr ComponentSwizzle)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr ComponentSwizzle)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr ComponentSwizzle)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr ComponentSwizzle)) (zero)
+    f
+
+instance FromCStruct ComponentMapping where
+  peekCStruct p = do
+    r <- peek @ComponentSwizzle ((p `plusPtr` 0 :: Ptr ComponentSwizzle))
+    g <- peek @ComponentSwizzle ((p `plusPtr` 4 :: Ptr ComponentSwizzle))
+    b <- peek @ComponentSwizzle ((p `plusPtr` 8 :: Ptr ComponentSwizzle))
+    a <- peek @ComponentSwizzle ((p `plusPtr` 12 :: Ptr ComponentSwizzle))
+    pure $ ComponentMapping
+             r g b a
+
+instance Storable ComponentMapping where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ComponentMapping where
+  zero = ComponentMapping
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkImageViewCreateInfo - Structure specifying parameters of a newly
+-- created image view
+--
+-- = 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
+-- 'Vulkan.Core10.Image.ImageCreateInfo' at image creation time. If the
+-- image was has a depth-stencil format and was created with a
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+-- structure included in the @pNext@ chain of
+-- 'Vulkan.Core10.Image.ImageCreateInfo', the usage is calculated based on
+-- the @subresource.aspectMask@ provided:
+--
+-- -   If @aspectMask@ includes only
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     the implicit @usage@ is equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@.
+--
+-- -   If @aspectMask@ includes only
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',
+--     the implicit @usage@ is equal to
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@.
+--
+-- -   If both aspects are included in @aspectMask@, the implicit @usage@
+--     is equal to the intersection of
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ and
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@.
+--     The implicit @usage@ /can/ be overriden by adding a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
+--     structure to the @pNext@ chain.
+--
+-- If @image@ was created with the
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
+-- flag, and if the @format@ of the image is not
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>,
+-- @format@ /can/ be different from the image’s format, but if @image@ was
+-- created without the
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'
+-- flag and they are not equal they /must/ be /compatible/. Image format
+-- compatibility is defined in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-fixedfpconv Conversion from Normalized Fixed-Point to Floating-Point>.
+--
+-- If @image@ was created with the
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'
+-- flag, @format@ /must/ be /compatible/ with the image’s format as
+-- described above, or /must/ be an uncompressed format in which case it
+-- /must/ be /size-compatible/ with the image’s format, as defined for
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-size-compatibility copying data between images>
+-- In this case the resulting image view’s texel dimensions equal the
+-- dimensions of the selected mip level divided by the compressed texel
+-- block size and rounded up.
+--
+-- If the image view is to be used with a sampler which supports
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
+-- an /identically defined object/ of type
+-- 'Vulkan.Core11.Handles.SamplerYcbcrConversion' to that used to create
+-- the sampler /must/ be passed to 'createImageView' in a
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+-- included in the @pNext@ chain of 'ImageViewCreateInfo'. Conversely, if a
+-- 'Vulkan.Core11.Handles.SamplerYcbcrConversion' object is passed to
+-- 'createImageView', an identically defined
+-- 'Vulkan.Core11.Handles.SamplerYcbcrConversion' object /must/ be used
+-- when sampling the image.
+--
+-- If the image has a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
+-- @format@ and @subresourceRange.aspectMask@ is
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
+-- @format@ /must/ be identical to the image @format@, and the sampler to
+-- be used with the image view /must/ enable
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
+--
+-- If @image@ was created with the
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
+-- and the image has a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
+-- @format@, and if @subresourceRange.aspectMask@ is
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT',
+-- @format@ /must/ be
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes compatible>
+-- with the corresponding plane of the image, and the sampler to be used
+-- with the image view /must/ not enable
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
+-- The @width@ and @height@ of the single-plane image view /must/ be
+-- derived from the multi-planar image’s dimensions in the manner listed
+-- for
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes plane compatibility>
+-- for the plane.
+--
+-- Any view of an image plane will have the same mapping between texel
+-- coordinates and memory locations as used by the channels of the color
+-- aspect, subject to the formulae relating texel coordinates to
+-- lower-resolution planes as described in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction Chroma Reconstruction>.
+-- That is, if an R or B plane has a reduced resolution relative to the G
+-- plane of the multi-planar image, the image view operates using the
+-- (/uplane/, /vplane/) unnormalized coordinates of the reduced-resolution
+-- plane, and these coordinates access the same memory locations as the
+-- (/ucolor/, /vcolor/) unnormalized coordinates of the color aspect for
+-- which chroma reconstruction operations operate on the same (/uplane/,
+-- /vplane/) or (/iplane/, /jplane/) coordinates.
+--
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | Dim,     | Image parameters                                                               | View parameters                                                |
+-- | Arrayed, |                                                                                |                                                                |
+-- | MS       |                                                                                |                                                                |
+-- +==========+================================================================================+================================================================+
+-- |          | @imageType@ = ci.@imageType@                                                   | @baseArrayLayer@, @layerCount@, and @levelCount@ are members   |
+-- |          | @width@ = ci.@extent.width@                                                    | of the @subresourceRange@ member.                              |
+-- |          | @height@ = ci.@extent.height@                                                  |                                                                |
+-- |          | @depth@ = ci.@extent.depth@                                                    |                                                                |
+-- |          | @arrayLayers@ = ci.@arrayLayers@                                               |                                                                |
+-- |          | @samples@ = ci.@samples@                                                       |                                                                |
+-- |          | @flags@ = ci.@flags@                                                           |                                                                |
+-- |          | where ci is the 'Vulkan.Core10.Image.ImageCreateInfo' used to create @image@.  |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __1D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'                    | @viewType@ =                                                   |
+-- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D'         |
+-- |          | @height@ = 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
+-- |          | @depth@ = 1                                                                    | @layerCount@ = 1                                               |
+-- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
+-- |          | @samples@ = 1                                                                  |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __1D, 1, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'                    | @viewType@ =                                                   |
+-- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY'   |
+-- |          | @height@ = 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
+-- |          | @depth@ = 1                                                                    | @layerCount@ ≥ 1                                               |
+-- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
+-- |          | @samples@ = 1                                                                  |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __2D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
+-- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         |
+-- |          | @height@ ≥ 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
+-- |          | @depth@ = 1                                                                    | @layerCount@ = 1                                               |
+-- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
+-- |          | @samples@ = 1                                                                  |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __2D, 1, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
+-- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   |
+-- |          | @height@ ≥ 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
+-- |          | @depth@ = 1                                                                    | @layerCount@ ≥ 1                                               |
+-- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
+-- |          | @samples@ = 1                                                                  |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __2D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
+-- | 1__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         |
+-- |          | @height@ ≥ 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
+-- |          | @depth@ = 1                                                                    | @layerCount@ = 1                                               |
+-- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
+-- |          | @samples@ > 1                                                                  |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __2D, 1, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
+-- | 1__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   |
+-- |          | @height@ ≥ 1                                                                   | @baseArrayLayer@ ≥ 0                                           |
+-- |          | @depth@ = 1                                                                    | @layerCount@ ≥ 1                                               |
+-- |          | @arrayLayers@ ≥ 1                                                              |                                                                |
+-- |          | @samples@ > 1                                                                  |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __CUBE,  | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
+-- | 0, 0__   | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE'       |
+-- |          | @height@ = @width@                                                             | @baseArrayLayer@ ≥ 0                                           |
+-- |          | @depth@ = 1                                                                    | @layerCount@ = 6                                               |
+-- |          | @arrayLayers@ ≥ 6                                                              |                                                                |
+-- |          | @samples@ = 1                                                                  |                                                                |
+-- |          | @flags@ includes                                                               |                                                                |
+-- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'     |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __CUBE,  | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'                    | @viewType@ =                                                   |
+-- | 1, 0__   | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' |
+-- |          | @height@ = width                                                               | @baseArrayLayer@ ≥ 0                                           |
+-- |          | @depth@ = 1                                                                    | @layerCount@ = 6 × /N/, /N/ ≥ 1                                |
+-- |          | /N/ ≥ 1                                                                        |                                                                |
+-- |          | @arrayLayers@ ≥ 6 × /N/                                                        |                                                                |
+-- |          | @samples@ = 1                                                                  |                                                                |
+-- |          | @flags@ includes                                                               |                                                                |
+-- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'     |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __3D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'                    | @viewType@ =                                                   |
+-- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D'         |
+-- |          | @height@ ≥ 1                                                                   | @baseArrayLayer@ = 0                                           |
+-- |          | @depth@ ≥ 1                                                                    | @layerCount@ = 1                                               |
+-- |          | @arrayLayers@ = 1                                                              |                                                                |
+-- |          | @samples@ = 1                                                                  |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __3D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'                    | @viewType@ =                                                   |
+-- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'         |
+-- |          | @height@ ≥ 1                                                                   | @levelCount@ = 1                                               |
+-- |          | @depth@ ≥ 1                                                                    | @baseArrayLayer@ ≥ 0                                           |
+-- |          | @arrayLayers@ = 1                                                              | @layerCount@ = 1                                               |
+-- |          | @samples@ = 1                                                                  |                                                                |
+-- |          | @flags@ includes                                                               |                                                                |
+-- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' |                                                                |
+-- |          | @flags@ does not include                                                       |                                                                |
+-- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',     |                                                                |
+-- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',   |                                                                |
+-- |          | and 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'  |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+-- | __3D, 0, | @imageType@ = 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'                    | @viewType@ =                                                   |
+-- | 0__      | @width@ ≥ 1                                                                    | 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'   |
+-- |          | @height@ ≥ 1                                                                   | @levelCount@ = 1                                               |
+-- |          | @depth@ ≥ 1                                                                    | @baseArrayLayer@ ≥ 0                                           |
+-- |          | @arrayLayers@ = 1                                                              | @layerCount@ ≥ 1                                               |
+-- |          | @samples@ = 1                                                                  |                                                                |
+-- |          | @flags@ includes                                                               |                                                                |
+-- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' |                                                                |
+-- |          | @flags@ does not include                                                       |                                                                |
+-- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',     |                                                                |
+-- |          | 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',   |                                                                |
+-- |          | and 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'  |                                                                |
+-- +----------+--------------------------------------------------------------------------------+----------------------------------------------------------------+
+--
+-- Image and image view parameter compatibility requirements
+--
+-- == Valid Usage
+--
+-- -   If @image@ was not created with
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'
+--     then @viewType@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-imageCubeArray image cubemap arrays>
+--     feature is not enabled, @viewType@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
+--
+-- -   If @image@ was created with
+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' but without
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
+--     set then @viewType@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
+--
+-- -   @image@ /must/ have been created with a @usage@ value containing at
+--     least one of
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
+--     or
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT'
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     of the resultant image view /must/ contain at least one bit
+--
+-- -   If @usage@ contains
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT',
+--     then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     of the resultant image view /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT'
+--
+-- -   If @usage@ contains
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT',
+--     then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_BIT'
+--
+-- -   If @usage@ contains
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',
+--     then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--
+-- -   If @usage@ contains
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
+--     then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If @usage@ contains
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT',
+--     then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain at least one of
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--     or
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@
+--     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
+--     created
+--
+-- -   If @subresourceRange.levelCount@ is not
+--     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS',
+--     @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@
+--     /must/ be less than or equal to the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
+--
+-- -   If @image@ was created with @usage@ containing
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',
+--     @subresourceRange.levelCount@ /must/ be @1@
+--
+-- -   If @image@ is not a 3D image created with
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
+--     set, or @viewType@ is not
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY',
+--     @subresourceRange.baseArrayLayer@ /must/ be less than the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @image@ was created
+--
+-- -   If @subresourceRange.layerCount@ is not
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', @image@ is not
+--     a 3D image created with
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
+--     set, or @viewType@ is not
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY',
+--     @subresourceRange.layerCount@ /must/ be non-zero and
+--     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
+--     /must/ be less than or equal to the @arrayLayers@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
+--
+-- -   If @image@ is a 3D image created with
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
+--     set, and @viewType@ is
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY',
+--     @subresourceRange.baseArrayLayer@ /must/ be less than the depth
+--     computed from @baseMipLevel@ and @extent.depth@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created,
+--     according to the formula defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-miplevel-sizing Image Miplevel Sizing>
+--
+-- -   If @subresourceRange.layerCount@ is not
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', @image@ is a 3D
+--     image created with
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'
+--     set, and @viewType@ is
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY',
+--     @subresourceRange.layerCount@ /must/ be non-zero and
+--     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
+--     /must/ be less than or equal to the depth computed from
+--     @baseMipLevel@ and @extent.depth@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created,
+--     according to the formula defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-miplevel-sizing Image Miplevel Sizing>
+--
+-- -   If @image@ was created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
+--     flag, but without the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'
+--     flag, and if the @format@ of the @image@ is not a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
+--     format, @format@ /must/ be compatible with the @format@ used to
+--     create @image@, as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility-classes Format Compatibility Classes>
+--
+-- -   If @image@ was created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'
+--     flag, @format@ /must/ be compatible with, or /must/ be an
+--     uncompressed format that is size-compatible with, the @format@ used
+--     to create @image@
+--
+-- -   If @image@ was created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'
+--     flag, the @levelCount@ and @layerCount@ members of
+--     @subresourceRange@ /must/ both be @1@
+--
+-- -   If a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
+--     structure was included in the @pNext@ chain of the
+--     'Vulkan.Core10.Image.ImageCreateInfo' structure used when creating
+--     @image@ and the @viewFormatCount@ field of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
+--     is not zero then @format@ /must/ be one of the formats in
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@pViewFormats@
+--
+-- -   If @image@ was created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
+--     flag, if the @format@ of the @image@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
+--     format, and if @subresourceRange.aspectMask@ is one of
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT',
+--     then @format@ /must/ be compatible with the
+--     'Vulkan.Core10.Enums.Format.Format' for the plane of the @image@
+--     @format@ indicated by @subresourceRange.aspectMask@, as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>
+--
+-- -   If @image@ was not created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT'
+--     flag, or if the @format@ of the @image@ is a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
+--     format and if @subresourceRange.aspectMask@ is
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
+--     @format@ /must/ be identical to the @format@ used to create @image@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--     structure with a @conversion@ value other than
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', all members of
+--     @components@ /must/ have the value
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
+--
+-- -   If @image@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @subresourceRange@ and @viewType@ /must/ be compatible with the
+--     image, as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-compatibility compatibility table>
+--
+-- -   If @image@ has an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>,
+--     @format@ /must/ be 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
+--
+-- -   If @image@ has an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>,
+--     the @pNext@ chain /must/ include a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--     structure with a @conversion@ object created with the same external
+--     format as @image@
+--
+-- -   If @image@ has an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>,
+--     all members of @components@ /must/ be
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
+--
+-- -   If @image@ was created with @usage@ containing
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
+--     @viewType@ /must/ be
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
+--
+-- -   If @image@ was created with @usage@ containing
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV',
+--     @format@ /must/ be 'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'
+--
+-- -   If
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentdensitymapdynamic dynamic fragment density map>
+--     feature is not enabled, @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT'
+--
+-- -   If
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentdensitymapdynamic dynamic fragment density map>
+--     feature is not enabled and @image@ was created with @usage@
+--     containing
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',
+--     @flags@ /must/ not contain any of
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT',
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
+--     structure, and @image@ was not created with a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure included in the @pNext@ chain of
+--     'Vulkan.Core10.Image.ImageCreateInfo', its @usage@ member /must/ not
+--     include any bits that were not set in the @usage@ member of the
+--     'Vulkan.Core10.Image.ImageCreateInfo' structure used to create
+--     @image@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
+--     structure, @image@ was created with a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure included in the @pNext@ chain of
+--     'Vulkan.Core10.Image.ImageCreateInfo', and
+--     @subResourceRange.aspectMask@ includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     the @usage@ member of the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
+--     instance /must/ not include any bits that were not set in the
+--     @usage@ member of the
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure used to create @image@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
+--     structure, @image@ was created with a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'
+--     structure included in the @pNext@ chain of
+--     'Vulkan.Core10.Image.ImageCreateInfo', and
+--     @subResourceRange.aspectMask@ includes bits other than
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     the @usage@ member of the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'
+--     structure /must/ not include any bits that were not set in the
+--     @usage@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'
+--     structure used to create @image@
+--
+-- -   If @viewType@ is
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE' and
+--     @subresourceRange.layerCount@ is not
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS',
+--     @subresourceRange.layerCount@ /must/ be @6@
+--
+-- -   If @viewType@ is
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' and
+--     @subresourceRange.layerCount@ is not
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS',
+--     @subresourceRange.layerCount@ /must/ be a multiple of @6@
+--
+-- -   If @viewType@ is
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE' and
+--     @subresourceRange.layerCount@ is
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', the remaining
+--     number of layers /must/ be @6@
+--
+-- -   If @viewType@ is
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' and
+--     @subresourceRange.layerCount@ is
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', the remaining
+--     number of layers /must/ be a multiple of @6@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_EXT_astc_decode_mode.ImageViewASTCDecodeModeEXT',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo',
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageViewCreateFlagBits.ImageViewCreateFlagBits'
+--     values
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @viewType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' value
+--
+-- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- -   @components@ /must/ be a valid 'ComponentMapping' structure
+--
+-- -   @subresourceRange@ /must/ be a valid
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceRange' structure
+--
+-- = See Also
+--
+-- 'ComponentMapping', 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.SharedTypes.ImageSubresourceRange',
+-- 'Vulkan.Core10.Enums.ImageViewCreateFlagBits.ImageViewCreateFlags',
+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createImageView'
+data ImageViewCreateInfo (es :: [Type]) = ImageViewCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageViewCreateFlagBits.ImageViewCreateFlagBits'
+    -- describing additional parameters of the image view.
+    flags :: ImageViewCreateFlags
+  , -- | @image@ is a 'Vulkan.Core10.Handles.Image' on which the view will be
+    -- created.
+    image :: Image
+  , -- | @viewType@ is a 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' value
+    -- specifying the type of the image view.
+    viewType :: ImageViewType
+  , -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' describing the format
+    -- and type used to interpret texel blocks in the image.
+    format :: Format
+  , -- | @components@ is a 'ComponentMapping' specifies a remapping of color
+    -- components (or of depth or stencil components after they have been
+    -- converted into color components).
+    components :: ComponentMapping
+  , -- | @subresourceRange@ is a
+    -- 'Vulkan.Core10.SharedTypes.ImageSubresourceRange' selecting the set of
+    -- mipmap levels and array layers to be accessible to the view.
+    subresourceRange :: ImageSubresourceRange
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (ImageViewCreateInfo es)
+
+instance Extensible ImageViewCreateInfo where
+  extensibleType = STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext ImageViewCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageViewCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @ImageViewASTCDecodeModeEXT = Just f
+    | Just Refl <- eqT @e @SamplerYcbcrConversionInfo = Just f
+    | Just Refl <- eqT @e @ImageViewUsageCreateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss ImageViewCreateInfo es, PokeChain es) => ToCStruct (ImageViewCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 80 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageViewCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr ImageViewCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Image)) (image)
+    lift $ poke ((p `plusPtr` 32 :: Ptr ImageViewType)) (viewType)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Format)) (format)
+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ComponentMapping)) (components) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr ImageSubresourceRange)) (subresourceRange) . ($ ())
+    lift $ f
+  cStructSize = 80
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 24 :: Ptr Image)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr ImageViewType)) (zero)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Format)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ComponentMapping)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr ImageSubresourceRange)) (zero) . ($ ())
+    lift $ f
+
+instance (Extendss ImageViewCreateInfo es, PeekChain es) => FromCStruct (ImageViewCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @ImageViewCreateFlags ((p `plusPtr` 16 :: Ptr ImageViewCreateFlags))
+    image <- peek @Image ((p `plusPtr` 24 :: Ptr Image))
+    viewType <- peek @ImageViewType ((p `plusPtr` 32 :: Ptr ImageViewType))
+    format <- peek @Format ((p `plusPtr` 36 :: Ptr Format))
+    components <- peekCStruct @ComponentMapping ((p `plusPtr` 40 :: Ptr ComponentMapping))
+    subresourceRange <- peekCStruct @ImageSubresourceRange ((p `plusPtr` 56 :: Ptr ImageSubresourceRange))
+    pure $ ImageViewCreateInfo
+             next flags image viewType format components subresourceRange
+
+instance es ~ '[] => Zero (ImageViewCreateInfo es) where
+  zero = ImageViewCreateInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/ImageView.hs-boot b/src/Vulkan/Core10/ImageView.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/ImageView.hs-boot
@@ -0,0 +1,28 @@
+{-# language CPP #-}
+module Vulkan.Core10.ImageView  ( ComponentMapping
+                                , ImageViewCreateInfo
+                                ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data ComponentMapping
+
+instance ToCStruct ComponentMapping
+instance Show ComponentMapping
+
+instance FromCStruct ComponentMapping
+
+
+type role ImageViewCreateInfo nominal
+data ImageViewCreateInfo (es :: [Type])
+
+instance (Extendss ImageViewCreateInfo es, PokeChain es) => ToCStruct (ImageViewCreateInfo es)
+instance Show (Chain es) => Show (ImageViewCreateInfo es)
+
+instance (Extendss ImageViewCreateInfo es, PeekChain es) => FromCStruct (ImageViewCreateInfo es)
+
diff --git a/src/Vulkan/Core10/LayerDiscovery.hs b/src/Vulkan/Core10/LayerDiscovery.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/LayerDiscovery.hs
@@ -0,0 +1,299 @@
+{-# language CPP #-}
+module Vulkan.Core10.LayerDiscovery  ( enumerateInstanceLayerProperties
+                                     , enumerateDeviceLayerProperties
+                                     , LayerProperties(..)
+                                     ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import Foreign.Ptr (castFunPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.ByteString (packCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Ptr (Ptr(Ptr))
+import Data.Word (Word32)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Dynamic (getInstanceProcAddr')
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
+import Vulkan.NamedType ((:::))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkEnumerateDeviceLayerProperties))
+import Vulkan.Core10.APIConstants (MAX_DESCRIPTION_SIZE)
+import Vulkan.Core10.APIConstants (MAX_EXTENSION_NAME_SIZE)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkEnumerateInstanceLayerProperties
+  :: FunPtr (Ptr Word32 -> Ptr LayerProperties -> IO Result) -> Ptr Word32 -> Ptr LayerProperties -> IO Result
+
+-- | vkEnumerateInstanceLayerProperties - Returns up to requested number of
+-- global layer properties
+--
+-- = 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
+--     'LayerProperties' structures.
+--
+-- = 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,
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.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
+-- 'enumerateInstanceLayerProperties' 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@ 'LayerProperties' structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'LayerProperties'
+enumerateInstanceLayerProperties :: forall io . MonadIO io => io (Result, ("properties" ::: Vector LayerProperties))
+enumerateInstanceLayerProperties  = liftIO . evalContT $ do
+  vkEnumerateInstanceLayerPropertiesPtr <- lift $ castFunPtr @_ @(("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr LayerProperties) -> IO Result) <$> getInstanceProcAddr' nullPtr (Ptr "vkEnumerateInstanceLayerProperties"#)
+  lift $ unless (vkEnumerateInstanceLayerPropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEnumerateInstanceLayerProperties is null" Nothing Nothing
+  let vkEnumerateInstanceLayerProperties' = mkVkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerPropertiesPtr
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkEnumerateInstanceLayerProperties' (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @LayerProperties ((fromIntegral (pPropertyCount)) * 520)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 520) :: Ptr LayerProperties) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkEnumerateInstanceLayerProperties' (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @LayerProperties (((pPProperties) `advancePtrBytes` (520 * (i)) :: Ptr LayerProperties)))
+  pure $ ((r'), pProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkEnumerateDeviceLayerProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr LayerProperties -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr LayerProperties -> IO Result
+
+-- | vkEnumerateDeviceLayerProperties - Returns properties of available
+-- physical device layers
+--
+-- = 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
+--     'LayerProperties' structures.
+--
+-- = 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,
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.SUCCESS', to indicate that not all the
+-- available layer properties were returned.
+--
+-- The list of layers enumerated by 'enumerateDeviceLayerProperties' /must/
+-- be exactly the sequence of layers enabled for the instance. The members
+-- of 'LayerProperties' for each enumerated layer /must/ be the same as the
+-- properties when the layer was enumerated by
+-- 'enumerateInstanceLayerProperties'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' 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@ 'LayerProperties' structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'LayerProperties', 'Vulkan.Core10.Handles.PhysicalDevice'
+enumerateDeviceLayerProperties :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector LayerProperties))
+enumerateDeviceLayerProperties physicalDevice = liftIO . evalContT $ do
+  let vkEnumerateDeviceLayerPropertiesPtr = pVkEnumerateDeviceLayerProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkEnumerateDeviceLayerPropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEnumerateDeviceLayerProperties is null" Nothing Nothing
+  let vkEnumerateDeviceLayerProperties' = mkVkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerPropertiesPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkEnumerateDeviceLayerProperties' physicalDevice' (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @LayerProperties ((fromIntegral (pPropertyCount)) * 520)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 520) :: Ptr LayerProperties) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkEnumerateDeviceLayerProperties' physicalDevice' (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @LayerProperties (((pPProperties) `advancePtrBytes` (520 * (i)) :: Ptr LayerProperties)))
+  pure $ ((r'), pProperties')
+
+
+-- | VkLayerProperties - Structure specifying layer properties
+--
+-- = See Also
+--
+-- 'enumerateDeviceLayerProperties', 'enumerateInstanceLayerProperties'
+data LayerProperties = LayerProperties
+  { -- | @layerName@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_EXTENSION_NAME_SIZE' @char@ containing a
+    -- null-terminated UTF-8 string which is the name of the layer. Use this
+    -- name in the @ppEnabledLayerNames@ array passed in the
+    -- 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo' structure to
+    -- enable this layer for an instance.
+    layerName :: ByteString
+  , -- | @specVersion@ is the Vulkan version the layer was written to, encoded as
+    -- described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.
+    specVersion :: Word32
+  , -- | @implementationVersion@ is the version of this layer. It is an integer,
+    -- increasing with backward compatible changes.
+    implementationVersion :: Word32
+  , -- | @description@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@ containing a
+    -- null-terminated UTF-8 string which provides additional details that
+    -- /can/ be used by the application to identify the layer.
+    description :: ByteString
+  }
+  deriving (Typeable)
+deriving instance Show LayerProperties
+
+instance ToCStruct LayerProperties where
+  withCStruct x f = allocaBytesAligned 520 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p LayerProperties{..} f = do
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (layerName)
+    poke ((p `plusPtr` 256 :: Ptr Word32)) (specVersion)
+    poke ((p `plusPtr` 260 :: Ptr Word32)) (implementationVersion)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 264 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
+    f
+  cStructSize = 520
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (mempty)
+    poke ((p `plusPtr` 256 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 260 :: Ptr Word32)) (zero)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 264 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    f
+
+instance FromCStruct LayerProperties where
+  peekCStruct p = do
+    layerName <- packCString (lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))))
+    specVersion <- peek @Word32 ((p `plusPtr` 256 :: Ptr Word32))
+    implementationVersion <- peek @Word32 ((p `plusPtr` 260 :: Ptr Word32))
+    description <- packCString (lowerArrayPtr ((p `plusPtr` 264 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    pure $ LayerProperties
+             layerName specVersion implementationVersion description
+
+instance Storable LayerProperties where
+  sizeOf ~_ = 520
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero LayerProperties where
+  zero = LayerProperties
+           mempty
+           zero
+           zero
+           mempty
+
diff --git a/src/Vulkan/Core10/LayerDiscovery.hs-boot b/src/Vulkan/Core10/LayerDiscovery.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/LayerDiscovery.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core10.LayerDiscovery  (LayerProperties) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data LayerProperties
+
+instance ToCStruct LayerProperties
+instance Show LayerProperties
+
+instance FromCStruct LayerProperties
+
diff --git a/src/Vulkan/Core10/Memory.hs b/src/Vulkan/Core10/Memory.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Memory.hs
@@ -0,0 +1,1234 @@
+{-# language CPP #-}
+module Vulkan.Core10.Memory  ( allocateMemory
+                             , withMemory
+                             , freeMemory
+                             , mapMemory
+                             , withMappedMemory
+                             , unmapMemory
+                             , flushMappedMemoryRanges
+                             , invalidateMappedMemoryRanges
+                             , getDeviceMemoryCommitment
+                             , MemoryAllocateInfo(..)
+                             , MappedMemoryRange(..)
+                             ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_dedicated_allocation (DedicatedAllocationMemoryAllocateInfoNV)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkAllocateMemory))
+import Vulkan.Dynamic (DeviceCmds(pVkFlushMappedMemoryRanges))
+import Vulkan.Dynamic (DeviceCmds(pVkFreeMemory))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceMemoryCommitment))
+import Vulkan.Dynamic (DeviceCmds(pVkInvalidateMappedMemoryRanges))
+import Vulkan.Dynamic (DeviceCmds(pVkMapMemory))
+import Vulkan.Dynamic (DeviceCmds(pVkUnmapMemory))
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.Handles (DeviceMemory(..))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExportMemoryAllocateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory (ExportMemoryAllocateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (ExportMemoryWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_win32 (ExportMemoryWin32HandleInfoNV)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (ImportAndroidHardwareBufferInfoANDROID)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_fd (ImportMemoryFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_external_memory_host (ImportMemoryHostPointerInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (ImportMemoryWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_win32 (ImportMemoryWin32HandleInfoNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (MemoryAllocateFlagsInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedAllocateInfo)
+import Vulkan.Core10.Enums.MemoryMapFlags (MemoryMapFlags)
+import Vulkan.Core10.Enums.MemoryMapFlags (MemoryMapFlags(..))
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (MemoryOpaqueCaptureAddressAllocateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_priority (MemoryPriorityAllocateInfoEXT)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MAPPED_MEMORY_RANGE))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkAllocateMemory
+  :: FunPtr (Ptr Device_T -> Ptr (MemoryAllocateInfo a) -> Ptr AllocationCallbacks -> Ptr DeviceMemory -> IO Result) -> Ptr Device_T -> Ptr (MemoryAllocateInfo a) -> Ptr AllocationCallbacks -> Ptr DeviceMemory -> IO Result
+
+-- | vkAllocateMemory - Allocate device memory
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @pAllocateInfo@ is a pointer to a 'MemoryAllocateInfo' 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pMemory@ is a pointer to a 'Vulkan.Core10.Handles.DeviceMemory'
+--     handle in which information about the allocated memory is returned.
+--
+-- = Description
+--
+-- Allocations returned by 'allocateMemory' 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 with the following
+-- constraint:
+--
+-- -   The contents of unprotected memory /must/ not be a function of data
+--     protected memory objects, even if those memory objects were
+--     previously freed.
+--
+-- Note
+--
+-- The contents of memory allocated by one application /should/ not be a
+-- function of data from protected memory objects of another application,
+-- even if those memory objects were previously freed.
+--
+-- The maximum number of valid memory allocations that /can/ exist
+-- simultaneously within a 'Vulkan.Core10.Handles.Device' /may/ be
+-- restricted by implementation- or platform-dependent limits. If a call to
+-- 'allocateMemory' would cause the total number of allocations to exceed
+-- these limits, such a call will fail and /must/ return
+-- 'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'. The
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY' /must/ be
+-- returned. This limit is advertised in
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties'::@maxMemoryAllocationSize@.
+--
+-- The cumulative memory size allocated to a heap /can/ be limited by the
+-- size of the specified heap. In such cases, allocated memory is tracked
+-- on a per-device and per-heap basis. Some platforms allow overallocation
+-- into other heaps. The overallocation behavior /can/ be specified through
+-- the @VK_AMD_memory_overallocation_behavior@ extension.
+--
+-- == Valid Usage
+--
+-- -   @pAllocateInfo->allocationSize@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryHeaps@[memindex].size
+--     where @memindex@ =
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryTypes@[pAllocateInfo->memoryTypeIndex].heapIndex
+--     as returned by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties'
+--     for the 'Vulkan.Core10.Handles.PhysicalDevice' that @device@ was
+--     created from
+--
+-- -   @pAllocateInfo->memoryTypeIndex@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryTypeCount@
+--     as returned by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties'
+--     for the 'Vulkan.Core10.Handles.PhysicalDevice' that @device@ was
+--     created from
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceCoherentMemory deviceCoherentMemory>
+--     feature is not enabled, @pAllocateInfo->memoryTypeIndex@ /must/ not
+--     identify a memory type supporting
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pAllocateInfo@ /must/ be a valid pointer to a valid
+--     'MemoryAllocateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pMemory@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.DeviceMemory' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
+--
+--     -   'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'MemoryAllocateInfo'
+allocateMemory :: forall a io . (Extendss MemoryAllocateInfo a, PokeChain a, MonadIO io) => Device -> MemoryAllocateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DeviceMemory)
+allocateMemory device allocateInfo allocator = liftIO . evalContT $ do
+  let vkAllocateMemoryPtr = pVkAllocateMemory (deviceCmds (device :: Device))
+  lift $ unless (vkAllocateMemoryPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAllocateMemory is null" Nothing Nothing
+  let vkAllocateMemory' = mkVkAllocateMemory vkAllocateMemoryPtr
+  pAllocateInfo <- ContT $ withCStruct (allocateInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPMemory <- ContT $ bracket (callocBytes @DeviceMemory 8) free
+  r <- lift $ vkAllocateMemory' (deviceHandle (device)) pAllocateInfo pAllocator (pPMemory)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pMemory <- lift $ peek @DeviceMemory pPMemory
+  pure $ (pMemory)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'allocateMemory' and 'freeMemory'
+--
+-- To ensure that 'freeMemory' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withMemory :: forall a io r . (Extendss MemoryAllocateInfo a, PokeChain a, MonadIO io) => Device -> MemoryAllocateInfo a -> Maybe AllocationCallbacks -> (io (DeviceMemory) -> ((DeviceMemory) -> io ()) -> r) -> r
+withMemory device pAllocateInfo pAllocator b =
+  b (allocateMemory device pAllocateInfo pAllocator)
+    (\(o0) -> freeMemory device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkFreeMemory
+  :: FunPtr (Ptr Device_T -> DeviceMemory -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DeviceMemory -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkFreeMemory - Free device memory
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @memory@ is the 'Vulkan.Core10.Handles.DeviceMemory' object to be
+--     freed.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- = 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/. Memory /can/ be freed whilst still bound to
+-- resources, but those resources /must/ not be used afterwards. 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @memory@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' 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
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.DeviceMemory'
+freeMemory :: forall io . MonadIO io => Device -> DeviceMemory -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+freeMemory device memory allocator = liftIO . evalContT $ do
+  let vkFreeMemoryPtr = pVkFreeMemory (deviceCmds (device :: Device))
+  lift $ unless (vkFreeMemoryPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkFreeMemory is null" Nothing Nothing
+  let vkFreeMemory' = mkVkFreeMemory vkFreeMemoryPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkFreeMemory' (deviceHandle (device)) (memory) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkMapMemory
+  :: FunPtr (Ptr Device_T -> DeviceMemory -> DeviceSize -> DeviceSize -> MemoryMapFlags -> Ptr (Ptr ()) -> IO Result) -> Ptr Device_T -> DeviceMemory -> DeviceSize -> DeviceSize -> MemoryMapFlags -> Ptr (Ptr ()) -> IO Result
+
+-- | vkMapMemory - Map a memory object into application address space
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @memory@ is the 'Vulkan.Core10.Handles.DeviceMemory' 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
+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE' to map from @offset@ to the
+--     end of the allocation.
+--
+-- -   @flags@ is reserved for future use.
+--
+-- -   @ppData@ is a pointer to a @void *@ variable 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
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minMemoryMapAlignment@.
+--
+-- = Description
+--
+-- After a successful call to 'mapMemory' the memory object @memory@ is
+-- considered to be currently /host mapped/.
+--
+-- Note
+--
+-- It is an application error to call 'mapMemory' on a memory object that
+-- is already /host mapped/.
+--
+-- Note
+--
+-- 'mapMemory' 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,
+-- 'mapMemory' /must/ return
+-- 'Vulkan.Core10.Enums.Result.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 'unmapMemory'.
+--
+-- 'mapMemory' 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-host-writes here>
+-- for details on fulfilling such a guarantee). If the device memory was
+-- allocated without the
+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.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
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@,
+-- and round the end of the range up to the nearest multiple of
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@.
+--
+-- While a range of device memory is host mapped, 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization Synchronization and Cache Control>
+-- as they are crucial to maintaining memory access ordering.
+--
+-- == Valid Usage
+--
+-- -   @memory@ /must/ not be currently host mapped
+--
+-- -   @offset@ /must/ be less than the size of @memory@
+--
+-- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @size@ /must/ be greater than @0@
+--
+-- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @size@ /must/ be less than or equal to the size of the @memory@
+--     minus @offset@
+--
+-- -   @memory@ /must/ have been created with a memory type that reports
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'
+--
+-- -   @memory@ /must/ not have been allocated with multiple instances
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_MEMORY_MAP_FAILED'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.MemoryMapFlags.MemoryMapFlags'
+mapMemory :: forall io . MonadIO io => Device -> DeviceMemory -> ("offset" ::: DeviceSize) -> DeviceSize -> MemoryMapFlags -> io (("data" ::: Ptr ()))
+mapMemory device memory offset size flags = liftIO . evalContT $ do
+  let vkMapMemoryPtr = pVkMapMemory (deviceCmds (device :: Device))
+  lift $ unless (vkMapMemoryPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkMapMemory is null" Nothing Nothing
+  let vkMapMemory' = mkVkMapMemory vkMapMemoryPtr
+  pPpData <- ContT $ bracket (callocBytes @(Ptr ()) 8) free
+  r <- lift $ vkMapMemory' (deviceHandle (device)) (memory) (offset) (size) (flags) (pPpData)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  ppData <- lift $ peek @(Ptr ()) pPpData
+  pure $ (ppData)
+
+-- | A convenience wrapper to make a compatible pair of calls to 'mapMemory'
+-- and 'unmapMemory'
+--
+-- To ensure that 'unmapMemory' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withMappedMemory :: forall io r . MonadIO io => Device -> DeviceMemory -> DeviceSize -> DeviceSize -> MemoryMapFlags -> (io (Ptr ()) -> ((Ptr ()) -> io ()) -> r) -> r
+withMappedMemory device memory offset size flags b =
+  b (mapMemory device memory offset size flags)
+    (\(_) -> unmapMemory device memory)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkUnmapMemory
+  :: FunPtr (Ptr Device_T -> DeviceMemory -> IO ()) -> Ptr Device_T -> DeviceMemory -> IO ()
+
+-- | vkUnmapMemory - Unmap a previously mapped memory object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @memory@ is the memory object to be unmapped.
+--
+-- == Valid Usage
+--
+-- -   @memory@ /must/ be currently host mapped
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     handle
+--
+-- -   @memory@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @memory@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.DeviceMemory'
+unmapMemory :: forall io . MonadIO io => Device -> DeviceMemory -> io ()
+unmapMemory device memory = liftIO $ do
+  let vkUnmapMemoryPtr = pVkUnmapMemory (deviceCmds (device :: Device))
+  unless (vkUnmapMemoryPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkUnmapMemory is null" Nothing Nothing
+  let vkUnmapMemory' = mkVkUnmapMemory vkUnmapMemoryPtr
+  vkUnmapMemory' (deviceHandle (device)) (memory)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkFlushMappedMemoryRanges
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr MappedMemoryRange -> IO Result) -> Ptr Device_T -> Word32 -> Ptr MappedMemoryRange -> IO Result
+
+-- | vkFlushMappedMemoryRanges - Flush mapped memory ranges
+--
+-- = 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 'MappedMemoryRange'
+--     structures describing the memory ranges to flush.
+--
+-- = Description
+--
+-- 'flushMappedMemoryRanges' guarantees that host writes to the memory
+-- ranges described by @pMemoryRanges@ are made available to the host
+-- memory domain, such that they /can/ be made available to the device
+-- memory domain via
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-available-and-visible memory domain operations>
+-- using the 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_HOST_WRITE_BIT'
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 host 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 host 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).
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'MappedMemoryRange'
+flushMappedMemoryRanges :: forall io . MonadIO io => Device -> ("memoryRanges" ::: Vector MappedMemoryRange) -> io ()
+flushMappedMemoryRanges device memoryRanges = liftIO . evalContT $ do
+  let vkFlushMappedMemoryRangesPtr = pVkFlushMappedMemoryRanges (deviceCmds (device :: Device))
+  lift $ unless (vkFlushMappedMemoryRangesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkFlushMappedMemoryRanges is null" Nothing Nothing
+  let vkFlushMappedMemoryRanges' = mkVkFlushMappedMemoryRanges vkFlushMappedMemoryRangesPtr
+  pPMemoryRanges <- ContT $ allocaBytesAligned @MappedMemoryRange ((Data.Vector.length (memoryRanges)) * 40) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryRanges `plusPtr` (40 * (i)) :: Ptr MappedMemoryRange) (e) . ($ ())) (memoryRanges)
+  r <- lift $ vkFlushMappedMemoryRanges' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (memoryRanges)) :: Word32)) (pPMemoryRanges)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkInvalidateMappedMemoryRanges
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr MappedMemoryRange -> IO Result) -> Ptr Device_T -> Word32 -> Ptr MappedMemoryRange -> IO Result
+
+-- | vkInvalidateMappedMemoryRanges - Invalidate ranges of mapped memory
+-- objects
+--
+-- = 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 'MappedMemoryRange'
+--     structures describing the memory ranges to invalidate.
+--
+-- = Description
+--
+-- 'invalidateMappedMemoryRanges' guarantees that device writes to the
+-- memory ranges described by @pMemoryRanges@, which have been made
+-- available to the host memory domain using the
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_HOST_WRITE_BIT' and
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_HOST_READ_BIT'
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 host mapped,
+-- or the last time it was invalidated.
+--
+-- Note
+--
+-- Mapping non-coherent memory does not implicitly invalidate that memory.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'MappedMemoryRange'
+invalidateMappedMemoryRanges :: forall io . MonadIO io => Device -> ("memoryRanges" ::: Vector MappedMemoryRange) -> io ()
+invalidateMappedMemoryRanges device memoryRanges = liftIO . evalContT $ do
+  let vkInvalidateMappedMemoryRangesPtr = pVkInvalidateMappedMemoryRanges (deviceCmds (device :: Device))
+  lift $ unless (vkInvalidateMappedMemoryRangesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkInvalidateMappedMemoryRanges is null" Nothing Nothing
+  let vkInvalidateMappedMemoryRanges' = mkVkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRangesPtr
+  pPMemoryRanges <- ContT $ allocaBytesAligned @MappedMemoryRange ((Data.Vector.length (memoryRanges)) * 40) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryRanges `plusPtr` (40 * (i)) :: Ptr MappedMemoryRange) (e) . ($ ())) (memoryRanges)
+  r <- lift $ vkInvalidateMappedMemoryRanges' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (memoryRanges)) :: Word32)) (pPMemoryRanges)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceMemoryCommitment
+  :: FunPtr (Ptr Device_T -> DeviceMemory -> Ptr DeviceSize -> IO ()) -> Ptr Device_T -> DeviceMemory -> Ptr DeviceSize -> IO ()
+
+-- | vkGetDeviceMemoryCommitment - Query the current commitment for a
+-- VkDeviceMemory
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @memory@ is the memory object being queried.
+--
+-- -   @pCommittedMemoryInBytes@ is a pointer to a
+--     'Vulkan.Core10.BaseType.DeviceSize' value in which the number of
+--     bytes currently committed is returned, on success.
+--
+-- = 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 (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+getDeviceMemoryCommitment :: forall io . MonadIO io => Device -> DeviceMemory -> io (("committedMemoryInBytes" ::: DeviceSize))
+getDeviceMemoryCommitment device memory = liftIO . evalContT $ do
+  let vkGetDeviceMemoryCommitmentPtr = pVkGetDeviceMemoryCommitment (deviceCmds (device :: Device))
+  lift $ unless (vkGetDeviceMemoryCommitmentPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceMemoryCommitment is null" Nothing Nothing
+  let vkGetDeviceMemoryCommitment' = mkVkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitmentPtr
+  pPCommittedMemoryInBytes <- ContT $ bracket (callocBytes @DeviceSize 8) free
+  lift $ vkGetDeviceMemoryCommitment' (deviceHandle (device)) (memory) (pPCommittedMemoryInBytes)
+  pCommittedMemoryInBytes <- lift $ peek @DeviceSize pPCommittedMemoryInBytes
+  pure $ (pCommittedMemoryInBytes)
+
+
+-- | VkMemoryAllocateInfo - Structure containing parameters of a memory
+-- allocation
+--
+-- = Description
+--
+-- A 'MemoryAllocateInfo' structure defines a memory import operation if
+-- its @pNext@ chain includes one of the following structures:
+--
+-- -   'Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR'
+--     with non-zero @handleType@ value
+--
+-- -   'Vulkan.Extensions.VK_KHR_external_memory_fd.ImportMemoryFdInfoKHR'
+--     with a non-zero @handleType@ value
+--
+-- -   'Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT'
+--     with a non-zero @handleType@ value
+--
+-- -   'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
+--     with a non-@NULL@ @buffer@ value
+--
+-- Importing memory /must/ not modify the content of the memory.
+-- Implementations /must/ ensure that importing memory does not enable the
+-- importing Vulkan instance to access any memory or resources in other
+-- Vulkan instances other than that corresponding to the memory object
+-- imported. Implementations /must/ also ensure accessing imported memory
+-- which has not been initialized does not allow the importing Vulkan
+-- instance to obtain data from the exporting Vulkan instance or
+-- vice-versa.
+--
+-- Note
+--
+-- How exported and imported memory is isolated is left to the
+-- implementation, but applications should be aware that such isolation
+-- /may/ prevent implementations from placing multiple exportable memory
+-- objects in the same physical or virtual page. Hence, applications
+-- /should/ avoid creating many small external memory objects whenever
+-- possible.
+--
+-- When performing a memory import operation, it is the responsibility of
+-- the application to ensure the external handles meet all valid usage
+-- requirements. However, implementations /must/ perform sufficient
+-- validation of external handles to ensure that the operation results in a
+-- valid memory object which will not cause program termination, device
+-- loss, queue stalls, or corruption of other resources when used as
+-- allowed according to its allocation parameters. If the external handle
+-- provided does not meet these requirements, the implementation /must/
+-- fail the memory import operation with the error code
+-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'.
+--
+-- == Valid Usage
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
+--     structure, and any of the handle types specified in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+--     require a dedicated allocation, as reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--     in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'::@externalMemoryProperties.externalMemoryFeatures@
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'::@externalMemoryProperties.externalMemoryFeatures@,
+--     the @pNext@ chain /must/ include a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     or
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'
+--     structure with either its @image@ or @buffer@ member set to a value
+--     other than 'Vulkan.Core10.APIConstants.NULL_HANDLE'.
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
+--     structure, it /must/ not include a
+--     'Vulkan.Extensions.VK_NV_external_memory.ExportMemoryAllocateInfoNV'
+--     or
+--     'Vulkan.Extensions.VK_NV_external_memory_win32.ExportMemoryWin32HandleInfoNV'
+--     structure
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR'
+--     structure, it /must/ not include a
+--     'Vulkan.Extensions.VK_NV_external_memory_win32.ImportMemoryWin32HandleInfoNV'
+--     structure
+--
+-- -   If the parameters define an import operation, the external handle
+--     specified was created by the Vulkan API, and the external handle
+--     type is
+--     'Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR',
+--     then the values of @allocationSize@ and @memoryTypeIndex@ /must/
+--     match those specified when the memory object being imported was
+--     created
+--
+-- -   If the parameters define an import operation and the external handle
+--     specified was created by the Vulkan API, the device mask specified
+--     by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'
+--     /must/ match that specified when the memory object being imported
+--     was allocated
+--
+-- -   If the parameters define an import operation and the external handle
+--     specified was created by the Vulkan API, the list of physical
+--     devices that comprise the logical device passed to 'allocateMemory'
+--     /must/ match the list of physical devices that comprise the logical
+--     device on which the memory was originally allocated
+--
+-- -   If the parameters define an import operation and the external handle
+--     is an NT handle or a global share handle created outside of the
+--     Vulkan API, the value of @memoryTypeIndex@ /must/ be one of those
+--     returned by
+--     'Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandlePropertiesKHR'
+--
+-- -   If the parameters define an import operation, the external handle
+--     was created by the Vulkan API, and the external handle type is
+--     'Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR'
+--     or
+--     'Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR',
+--     then the values of @allocationSize@ and @memoryTypeIndex@ /must/
+--     match those specified when the memory object being imported was
+--     created
+--
+-- -   If the parameters define an import operation and the external handle
+--     type is
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT',
+--     or
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT',
+--     @allocationSize@ /must/ match the size reported in the memory
+--     requirements of the @image@ or @buffer@ member of the
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'
+--     structure included in the @pNext@ chain
+--
+-- -   If the parameters define an import operation and the external handle
+--     type is
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
+--     @allocationSize@ /must/ match the size specified when creating the
+--     Direct3D 12 heap from which the external handle was extracted
+--
+-- -   If the parameters define an import operation and the external handle
+--     is a POSIX file descriptor created outside of the Vulkan API, the
+--     value of @memoryTypeIndex@ /must/ be one of those returned by
+--     'Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdPropertiesKHR'
+--
+-- -   If the protected memory feature is not enabled, the
+--     'MemoryAllocateInfo'::@memoryTypeIndex@ /must/ not indicate a memory
+--     type that reports
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
+--
+-- -   If the parameters define an import operation and the external handle
+--     is a host pointer, the value of @memoryTypeIndex@ /must/ be one of
+--     those returned by
+--     'Vulkan.Extensions.VK_EXT_external_memory_host.getMemoryHostPointerPropertiesEXT'
+--
+-- -   If the parameters define an import operation and the external handle
+--     is a host pointer, @allocationSize@ /must/ be an integer multiple of
+--     'Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT'::@minImportedHostPointerAlignment@
+--
+-- -   If the parameters define an import operation and the external handle
+--     is a host pointer, the @pNext@ chain /must/ not include a
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'
+--     structure with either its @image@ or @buffer@ field set to a value
+--     other than 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If the parameters define an import operation and the external handle
+--     is a host pointer, the @pNext@ chain /must/ not include a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure with either its @image@ or @buffer@ field set to a value
+--     other than 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If the parameters define an import operation and the external handle
+--     type is
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',
+--     @allocationSize@ /must/ be the size returned by
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID'
+--     for the Android hardware buffer
+--
+-- -   If the parameters define an import operation and the external handle
+--     type is
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',
+--     and the @pNext@ chain does not include a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the Android hardware
+--     buffer /must/ have a @AHardwareBuffer_Desc@::@format@ of
+--     @AHARDWAREBUFFER_FORMAT_BLOB@ and a @AHardwareBuffer_Desc@::@usage@
+--     that includes @AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER@
+--
+-- -   If the parameters define an import operation and the external handle
+--     type is
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',
+--     @memoryTypeIndex@ /must/ be one of those returned by
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID'
+--     for the Android hardware buffer
+--
+-- -   If the parameters do not define an import operation, and the @pNext@
+--     chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
+--     structure with
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     included in its @handleTypes@ member, and the @pNext@ chain includes
+--     a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure with @image@ not equal to
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', then @allocationSize@
+--     /must/ be @0@, otherwise @allocationSize@ /must/ be greater than @0@
+--
+-- -   If the parameters define an import operation, the external handle is
+--     an Android hardware buffer, and the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     with @image@ that is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     the Android hardware buffer’s
+--     'Vulkan.Extensions.WSITypes.AHardwareBuffer'::@usage@ /must/ include
+--     at least one of @AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT@ or
+--     @AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE@
+--
+-- -   If the parameters define an import operation, the external handle is
+--     an Android hardware buffer, and the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     with @image@ that is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     the format of @image@ /must/ be
+--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' or the format returned
+--     by
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID'
+--     in
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID'::@format@
+--     for the Android hardware buffer
+--
+-- -   If the parameters define an import operation, the external handle is
+--     an Android hardware buffer, and the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure with @image@ that is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', the width, height, and
+--     array layer dimensions of @image@ and the Android hardware buffer’s
+--     @AHardwareBuffer_Desc@ /must/ be identical
+--
+-- -   If the parameters define an import operation, the external handle is
+--     an Android hardware buffer, and the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure with @image@ that is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', and the Android hardware
+--     buffer’s 'Vulkan.Extensions.WSITypes.AHardwareBuffer'::@usage@
+--     includes @AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE@, the @image@
+--     /must/ have a complete mipmap chain
+--
+-- -   If the parameters define an import operation, the external handle is
+--     an Android hardware buffer, and the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure with @image@ that is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', and the Android hardware
+--     buffer’s 'Vulkan.Extensions.WSITypes.AHardwareBuffer'::@usage@ does
+--     not include @AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE@, the @image@
+--     /must/ have exactly one mipmap level
+--
+-- -   If the parameters define an import operation, the external handle is
+--     an Android hardware buffer, and the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure with @image@ that is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', each bit set in the usage
+--     of @image@ /must/ be listed in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-usage AHardwareBuffer Usage Equivalence>,
+--     and if there is a corresponding @AHARDWAREBUFFER_USAGE@ bit listed
+--     that bit /must/ be included in the Android hardware buffer’s
+--     @AHardwareBuffer_Desc@::@usage@
+--
+-- -   If
+--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@
+--     is not zero,
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@flags@
+--     /must/ include
+--     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
+--
+-- -   If
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@flags@
+--     includes
+--     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT',
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressCaptureReplay bufferDeviceAddressCaptureReplay>
+--     feature /must/ be enabled
+--
+-- -   If
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@flags@
+--     includes
+--     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT',
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress>
+--     feature /must/ be enabled
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT'
+--     structure,
+--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@
+--     /must/ be zero
+--
+-- -   If the parameters define an import operation,
+--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@
+--     /must/ be zero
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo',
+--     'Vulkan.Extensions.VK_NV_external_memory.ExportMemoryAllocateInfoNV',
+--     'Vulkan.Extensions.VK_KHR_external_memory_win32.ExportMemoryWin32HandleInfoKHR',
+--     'Vulkan.Extensions.VK_NV_external_memory_win32.ExportMemoryWin32HandleInfoNV',
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID',
+--     'Vulkan.Extensions.VK_KHR_external_memory_fd.ImportMemoryFdInfoKHR',
+--     'Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT',
+--     'Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR',
+--     'Vulkan.Extensions.VK_NV_external_memory_win32.ImportMemoryWin32HandleInfoNV',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo',
+--     or
+--     'Vulkan.Extensions.VK_EXT_memory_priority.MemoryPriorityAllocateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'allocateMemory'
+data MemoryAllocateInfo (es :: [Type]) = MemoryAllocateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @allocationSize@ is the size of the allocation in bytes
+    allocationSize :: DeviceSize
+  , -- | @memoryTypeIndex@ is an index identifying a memory type from the
+    -- @memoryTypes@ array of the
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'
+    -- structure
+    memoryTypeIndex :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (MemoryAllocateInfo es)
+
+instance Extensible MemoryAllocateInfo where
+  extensibleType = STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
+  setNext x next = x{next = next}
+  getNext MemoryAllocateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends MemoryAllocateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @MemoryOpaqueCaptureAddressAllocateInfo = Just f
+    | Just Refl <- eqT @e @MemoryPriorityAllocateInfoEXT = Just f
+    | Just Refl <- eqT @e @ImportAndroidHardwareBufferInfoANDROID = Just f
+    | Just Refl <- eqT @e @ImportMemoryHostPointerInfoEXT = Just f
+    | Just Refl <- eqT @e @MemoryDedicatedAllocateInfo = Just f
+    | Just Refl <- eqT @e @MemoryAllocateFlagsInfo = Just f
+    | Just Refl <- eqT @e @ImportMemoryFdInfoKHR = Just f
+    | Just Refl <- eqT @e @ExportMemoryWin32HandleInfoKHR = Just f
+    | Just Refl <- eqT @e @ImportMemoryWin32HandleInfoKHR = Just f
+    | Just Refl <- eqT @e @ExportMemoryAllocateInfo = Just f
+    | Just Refl <- eqT @e @ExportMemoryWin32HandleInfoNV = Just f
+    | Just Refl <- eqT @e @ImportMemoryWin32HandleInfoNV = Just f
+    | Just Refl <- eqT @e @ExportMemoryAllocateInfoNV = Just f
+    | Just Refl <- eqT @e @DedicatedAllocationMemoryAllocateInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss MemoryAllocateInfo es, PokeChain es) => ToCStruct (MemoryAllocateInfo es) where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryAllocateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (allocationSize)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (memoryTypeIndex)
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance (Extendss MemoryAllocateInfo es, PeekChain es) => FromCStruct (MemoryAllocateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    allocationSize <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    memoryTypeIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ MemoryAllocateInfo
+             next allocationSize memoryTypeIndex
+
+instance es ~ '[] => Zero (MemoryAllocateInfo es) where
+  zero = MemoryAllocateInfo
+           ()
+           zero
+           zero
+
+
+-- | VkMappedMemoryRange - Structure specifying a mapped memory range
+--
+-- == Valid Usage
+--
+-- -   @memory@ /must/ be currently host mapped
+--
+-- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @offset@ and @size@ /must/ specify a range contained within the
+--     currently mapped range of @memory@
+--
+-- -   If @size@ is equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @offset@ /must/ be within the currently mapped range of @memory@
+--
+-- -   If @size@ is equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE', the
+--     end of the current mapping of @memory@ /must/ be a multiple of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@
+--     bytes from the beginning of the memory object
+--
+-- -   @offset@ /must/ be a multiple of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@
+--
+-- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @size@ /must/ either be a multiple of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@,
+--     or @offset@ plus @size@ /must/ equal the size of @memory@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MAPPED_MEMORY_RANGE'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'flushMappedMemoryRanges', 'invalidateMappedMemoryRanges'
+data MappedMemoryRange = MappedMemoryRange
+  { -- | @memory@ is the memory object to which this range belongs.
+    memory :: DeviceMemory
+  , -- | @offset@ is the zero-based byte offset from the beginning of the memory
+    -- object.
+    offset :: DeviceSize
+  , -- | @size@ is either the size of range, or
+    -- 'Vulkan.Core10.APIConstants.WHOLE_SIZE' to affect the range from
+    -- @offset@ to the end of the current mapping of the allocation.
+    size :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show MappedMemoryRange
+
+instance ToCStruct MappedMemoryRange where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MappedMemoryRange{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (offset)
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (size)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct MappedMemoryRange where
+  peekCStruct p = do
+    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
+    offset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    size <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
+    pure $ MappedMemoryRange
+             memory offset size
+
+instance Storable MappedMemoryRange where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MappedMemoryRange where
+  zero = MappedMemoryRange
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/Memory.hs-boot b/src/Vulkan/Core10/Memory.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Memory.hs-boot
@@ -0,0 +1,28 @@
+{-# language CPP #-}
+module Vulkan.Core10.Memory  ( MappedMemoryRange
+                             , MemoryAllocateInfo
+                             ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data MappedMemoryRange
+
+instance ToCStruct MappedMemoryRange
+instance Show MappedMemoryRange
+
+instance FromCStruct MappedMemoryRange
+
+
+type role MemoryAllocateInfo nominal
+data MemoryAllocateInfo (es :: [Type])
+
+instance (Extendss MemoryAllocateInfo es, PokeChain es) => ToCStruct (MemoryAllocateInfo es)
+instance Show (Chain es) => Show (MemoryAllocateInfo es)
+
+instance (Extendss MemoryAllocateInfo es, PeekChain es) => FromCStruct (MemoryAllocateInfo es)
+
diff --git a/src/Vulkan/Core10/MemoryManagement.hs b/src/Vulkan/Core10/MemoryManagement.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/MemoryManagement.hs
@@ -0,0 +1,576 @@
+{-# language CPP #-}
+module Vulkan.Core10.MemoryManagement  ( getBufferMemoryRequirements
+                                       , bindBufferMemory
+                                       , getImageMemoryRequirements
+                                       , bindImageMemory
+                                       , MemoryRequirements(..)
+                                       ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkBindBufferMemory))
+import Vulkan.Dynamic (DeviceCmds(pVkBindImageMemory))
+import Vulkan.Dynamic (DeviceCmds(pVkGetBufferMemoryRequirements))
+import Vulkan.Dynamic (DeviceCmds(pVkGetImageMemoryRequirements))
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.Handles (DeviceMemory(..))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.Handles (Image(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetBufferMemoryRequirements
+  :: FunPtr (Ptr Device_T -> Buffer -> Ptr MemoryRequirements -> IO ()) -> Ptr Device_T -> Buffer -> Ptr MemoryRequirements -> IO ()
+
+-- | vkGetBufferMemoryRequirements - Returns the memory requirements for
+-- specified Vulkan object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the buffer.
+--
+-- -   @buffer@ is the buffer to query.
+--
+-- -   @pMemoryRequirements@ is a pointer to a 'MemoryRequirements'
+--     structure in which the memory requirements of the buffer object are
+--     returned.
+--
+-- == Valid Usage
+--
+-- -   If @buffer@ was created with the
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     external memory handle type, then @buffer@ /must/ be bound to memory
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @pMemoryRequirements@ /must/ be a valid pointer to a
+--     'MemoryRequirements' structure
+--
+-- -   @buffer@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.Device',
+-- 'MemoryRequirements'
+getBufferMemoryRequirements :: forall io . MonadIO io => Device -> Buffer -> io (MemoryRequirements)
+getBufferMemoryRequirements device buffer = liftIO . evalContT $ do
+  let vkGetBufferMemoryRequirementsPtr = pVkGetBufferMemoryRequirements (deviceCmds (device :: Device))
+  lift $ unless (vkGetBufferMemoryRequirementsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetBufferMemoryRequirements is null" Nothing Nothing
+  let vkGetBufferMemoryRequirements' = mkVkGetBufferMemoryRequirements vkGetBufferMemoryRequirementsPtr
+  pPMemoryRequirements <- ContT (withZeroCStruct @MemoryRequirements)
+  lift $ vkGetBufferMemoryRequirements' (deviceHandle (device)) (buffer) (pPMemoryRequirements)
+  pMemoryRequirements <- lift $ peekCStruct @MemoryRequirements pPMemoryRequirements
+  pure $ (pMemoryRequirements)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkBindBufferMemory
+  :: FunPtr (Ptr Device_T -> Buffer -> DeviceMemory -> DeviceSize -> IO Result) -> Ptr Device_T -> Buffer -> DeviceMemory -> DeviceSize -> IO Result
+
+-- | vkBindBufferMemory - Bind device memory to a buffer object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the buffer and memory.
+--
+-- -   @buffer@ is the buffer to be attached to memory.
+--
+-- -   @memory@ is a 'Vulkan.Core10.Handles.DeviceMemory' 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
+--     'MemoryRequirements'::@size@ member in @memory@, starting from
+--     @memoryOffset@ bytes, will be bound to the specified buffer.
+--
+-- = Description
+--
+-- 'bindBufferMemory' is equivalent to passing the same parameters through
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo'
+-- to 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.bindBufferMemory2'.
+--
+-- == 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@
+--
+-- -   @memory@ /must/ have been allocated using one of the memory types
+--     allowed in the @memoryTypeBits@ member of the 'MemoryRequirements'
+--     structure returned from a call to 'getBufferMemoryRequirements' with
+--     @buffer@
+--
+-- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@
+--     member of the 'MemoryRequirements' structure returned from a call to
+--     'getBufferMemoryRequirements' with @buffer@
+--
+-- -   The @size@ member of the 'MemoryRequirements' structure returned
+--     from a call to 'getBufferMemoryRequirements' with @buffer@ /must/ be
+--     less than or equal to the size of @memory@ minus @memoryOffset@
+--
+-- -   If @buffer@ requires a dedicated allocation(as reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2'
+--     in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation
+--     for @buffer@), @memory@ /must/ have been created with
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@
+--     equal to @buffer@
+--
+-- -   If the 'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when
+--     @memory@ was allocated included a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure in its @pNext@ chain, and
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@
+--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', then @buffer@
+--     /must/ equal
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@,
+--     and @memoryOffset@ /must/ be zero
+--
+-- -   If buffer was created with the
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT'
+--     bit set, the buffer /must/ be bound to a memory object allocated
+--     with a memory type that reports
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
+--
+-- -   If buffer was created with the
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT'
+--     bit not set, the buffer /must/ not be bound to a memory object
+--     created with a memory type that reports
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
+--
+-- -   If @buffer@ was created with
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@
+--     equal to 'Vulkan.Core10.BaseType.TRUE', @memory@ /must/ have been
+--     created with
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'::@buffer@
+--     equal to a buffer handle created with identical creation parameters
+--     to @buffer@ and @memoryOffset@ /must/ be zero
+--
+-- -   If the value of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+--     used to allocate @memory@ is not @0@, it /must/ include at least one
+--     of the handles set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
+--     when @buffer@ was created
+--
+-- -   If @memory@ was created by a memory import operation, that is not
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
+--     with a non-@NULL@ @buffer@ value, the external handle type of the
+--     imported memory /must/ also have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
+--     when @buffer@ was created
+--
+-- -   If @memory@ was created with the
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
+--     memory import operation with a non-@NULL@ @buffer@ value,
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     /must/ also have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
+--     when @buffer@ was created
+--
+-- -   If the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures'::@bufferDeviceAddress@
+--     feature is enabled and @buffer@ was created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT'
+--     bit set, @memory@ /must/ have been allocated with the
+--     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT'
+--     bit set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+bindBufferMemory :: forall io . MonadIO io => Device -> Buffer -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> io ()
+bindBufferMemory device buffer memory memoryOffset = liftIO $ do
+  let vkBindBufferMemoryPtr = pVkBindBufferMemory (deviceCmds (device :: Device))
+  unless (vkBindBufferMemoryPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBindBufferMemory is null" Nothing Nothing
+  let vkBindBufferMemory' = mkVkBindBufferMemory vkBindBufferMemoryPtr
+  r <- vkBindBufferMemory' (deviceHandle (device)) (buffer) (memory) (memoryOffset)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetImageMemoryRequirements
+  :: FunPtr (Ptr Device_T -> Image -> Ptr MemoryRequirements -> IO ()) -> Ptr Device_T -> Image -> Ptr MemoryRequirements -> IO ()
+
+-- | vkGetImageMemoryRequirements - Returns the memory requirements for
+-- specified Vulkan object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the image.
+--
+-- -   @image@ is the image to query.
+--
+-- -   @pMemoryRequirements@ is a pointer to a 'MemoryRequirements'
+--     structure in which the memory requirements of the image object are
+--     returned.
+--
+-- == Valid Usage
+--
+-- -   @image@ /must/ not have been created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--     flag set
+--
+-- -   If @image@ was created with the
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     external memory handle type, then @image@ /must/ be bound to memory
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @pMemoryRequirements@ /must/ be a valid pointer to a
+--     'MemoryRequirements' structure
+--
+-- -   @image@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Image',
+-- 'MemoryRequirements'
+getImageMemoryRequirements :: forall io . MonadIO io => Device -> Image -> io (MemoryRequirements)
+getImageMemoryRequirements device image = liftIO . evalContT $ do
+  let vkGetImageMemoryRequirementsPtr = pVkGetImageMemoryRequirements (deviceCmds (device :: Device))
+  lift $ unless (vkGetImageMemoryRequirementsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetImageMemoryRequirements is null" Nothing Nothing
+  let vkGetImageMemoryRequirements' = mkVkGetImageMemoryRequirements vkGetImageMemoryRequirementsPtr
+  pPMemoryRequirements <- ContT (withZeroCStruct @MemoryRequirements)
+  lift $ vkGetImageMemoryRequirements' (deviceHandle (device)) (image) (pPMemoryRequirements)
+  pMemoryRequirements <- lift $ peekCStruct @MemoryRequirements pPMemoryRequirements
+  pure $ (pMemoryRequirements)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkBindImageMemory
+  :: FunPtr (Ptr Device_T -> Image -> DeviceMemory -> DeviceSize -> IO Result) -> Ptr Device_T -> Image -> DeviceMemory -> DeviceSize -> IO Result
+
+-- | vkBindImageMemory - Bind device memory to an image object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the image and memory.
+--
+-- -   @image@ is the image.
+--
+-- -   @memory@ is the 'Vulkan.Core10.Handles.DeviceMemory' 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
+--     'MemoryRequirements'::@size@ member in @memory@, starting from
+--     @memoryOffset@ bytes, will be bound to the specified image.
+--
+-- = Description
+--
+-- 'bindImageMemory' is equivalent to passing the same parameters through
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo' to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.bindImageMemory2'.
+--
+-- == Valid Usage
+--
+-- -   @image@ /must/ not have been created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--     set
+--
+-- -   @image@ /must/ not already be backed by a memory object
+--
+-- -   @image@ /must/ not have been created with any sparse memory binding
+--     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 'MemoryRequirements'
+--     structure returned from a call to 'getImageMemoryRequirements' with
+--     @image@
+--
+-- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@
+--     member of the 'MemoryRequirements' structure returned from a call to
+--     'getImageMemoryRequirements' with @image@
+--
+-- -   The difference of the size of @memory@ and @memoryOffset@ /must/ be
+--     greater than or equal to the @size@ member of the
+--     'MemoryRequirements' structure returned from a call to
+--     'getImageMemoryRequirements' with the same @image@
+--
+-- -   If @image@ requires a dedicated allocation (as reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
+--     in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation
+--     for @image@), @memory@ /must/ have been created with
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     equal to @image@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing>
+--     feature is not enabled, and the
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when @memory@ was
+--     allocated included a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure in its @pNext@ chain, and
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', then @image@
+--     /must/ equal
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     and @memoryOffset@ /must/ be zero
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing>
+--     feature is enabled, and the
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when @memory@ was
+--     allocated included a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure in its @pNext@ chain, and
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', then
+--     @memoryOffset@ /must/ be zero, and @image@ /must/ be either equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     or an image that was created using the same parameters in
+--     'Vulkan.Core10.Image.ImageCreateInfo', with the exception that
+--     @extent@ and @arrayLayers@ /may/ differ subject to the following
+--     restrictions: every dimension in the @extent@ parameter of the image
+--     being bound /must/ be equal to or smaller than the original image
+--     for which the allocation was created; and the @arrayLayers@
+--     parameter of the image being bound /must/ be equal to or smaller
+--     than the original image for which the allocation was created
+--
+-- -   If image was created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT'
+--     bit set, the image /must/ be bound to a memory object allocated with
+--     a memory type that reports
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
+--
+-- -   If image was created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT'
+--     bit not set, the image /must/ not be bound to a memory object
+--     created with a memory type that reports
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
+--
+-- -   If @image@ was created with
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@
+--     equal to 'Vulkan.Core10.BaseType.TRUE', @memory@ /must/ have been
+--     created with
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'::@image@
+--     equal to an image handle created with identical creation parameters
+--     to @image@ and @memoryOffset@ /must/ be zero
+--
+-- -   If the value of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+--     used to allocate @memory@ is not @0@, it /must/ include at least one
+--     of the handles set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     when @image@ was created
+--
+-- -   If @memory@ was created by a memory import operation, that is not
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
+--     with a non-@NULL@ @buffer@ value, the external handle type of the
+--     imported memory /must/ also have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     when @image@ was created
+--
+-- -   If @memory@ was created with the
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
+--     memory import operation with a non-@NULL@ @buffer@ value,
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     /must/ also have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     when @image@ was created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.BaseType.DeviceSize', 'Vulkan.Core10.Handles.Image'
+bindImageMemory :: forall io . MonadIO io => Device -> Image -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> io ()
+bindImageMemory device image memory memoryOffset = liftIO $ do
+  let vkBindImageMemoryPtr = pVkBindImageMemory (deviceCmds (device :: Device))
+  unless (vkBindImageMemoryPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBindImageMemory is null" Nothing Nothing
+  let vkBindImageMemory' = mkVkBindImageMemory vkBindImageMemoryPtr
+  r <- vkBindImageMemory' (deviceHandle (device)) (image) (memory) (memoryOffset)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkMemoryRequirements - Structure specifying memory requirements
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2',
+-- 'getBufferMemoryRequirements', 'getImageMemoryRequirements'
+data MemoryRequirements = MemoryRequirements
+  { -- | @size@ is the size, in bytes, of the memory allocation /required/ for
+    -- the resource.
+    size :: DeviceSize
+  , -- | @alignment@ is the alignment, in bytes, of the offset within the
+    -- allocation /required/ for the resource.
+    alignment :: DeviceSize
+  , -- | @memoryTypeBits@ is a bitmask and contains one bit set for every
+    -- supported memory type for the resource. Bit @i@ is set if and only if
+    -- the memory type @i@ in the
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'
+    -- structure for the physical device is supported for the resource.
+    memoryTypeBits :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show MemoryRequirements
+
+instance ToCStruct MemoryRequirements where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryRequirements{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (size)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (alignment)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (memoryTypeBits)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct MemoryRequirements where
+  peekCStruct p = do
+    size <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
+    alignment <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
+    memoryTypeBits <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ MemoryRequirements
+             size alignment memoryTypeBits
+
+instance Storable MemoryRequirements where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryRequirements where
+  zero = MemoryRequirements
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/MemoryManagement.hs-boot b/src/Vulkan/Core10/MemoryManagement.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/MemoryManagement.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core10.MemoryManagement  (MemoryRequirements) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data MemoryRequirements
+
+instance ToCStruct MemoryRequirements
+instance Show MemoryRequirements
+
+instance FromCStruct MemoryRequirements
+
diff --git a/src/Vulkan/Core10/OtherTypes.hs b/src/Vulkan/Core10/OtherTypes.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/OtherTypes.hs
@@ -0,0 +1,938 @@
+{-# language CPP #-}
+module Vulkan.Core10.OtherTypes  ( MemoryBarrier(..)
+                                 , BufferMemoryBarrier(..)
+                                 , ImageMemoryBarrier(..)
+                                 , DrawIndirectCommand(..)
+                                 , DrawIndexedIndirectCommand(..)
+                                 , DispatchIndirectCommand(..)
+                                 , BaseOutStructure(..)
+                                 , BaseInStructure(..)
+                                 , ObjectType(..)
+                                 , VendorId(..)
+                                 ) where
+
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Ptr (castPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import Vulkan.Core10.SharedTypes (ImageSubresourceRange)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_BARRIER))
+import Vulkan.CStruct.Extends (BaseInStructure(..))
+import Vulkan.CStruct.Extends (BaseOutStructure(..))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(..))
+import Vulkan.Core10.Enums.VendorId (VendorId(..))
+-- | VkMemoryBarrier - Structure specifying a global memory barrier
+--
+-- = Description
+--
+-- The first
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access types in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>
+-- specified by @srcAccessMask@.
+--
+-- The second
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access types in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>
+-- specified by @dstAccessMask@.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdPipelineBarrier',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents'
+data MemoryBarrier = MemoryBarrier
+  { -- | @srcAccessMask@ /must/ be a valid combination of
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
+    srcAccessMask :: AccessFlags
+  , -- | @dstAccessMask@ /must/ be a valid combination of
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
+    dstAccessMask :: AccessFlags
+  }
+  deriving (Typeable)
+deriving instance Show MemoryBarrier
+
+instance ToCStruct MemoryBarrier where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryBarrier{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_BARRIER)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (srcAccessMask)
+    poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (dstAccessMask)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_BARRIER)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct MemoryBarrier where
+  peekCStruct p = do
+    srcAccessMask <- peek @AccessFlags ((p `plusPtr` 16 :: Ptr AccessFlags))
+    dstAccessMask <- peek @AccessFlags ((p `plusPtr` 20 :: Ptr AccessFlags))
+    pure $ MemoryBarrier
+             srcAccessMask dstAccessMask
+
+instance Storable MemoryBarrier where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryBarrier where
+  zero = MemoryBarrier
+           zero
+           zero
+
+
+-- | VkBufferMemoryBarrier - Structure specifying a buffer memory barrier
+--
+-- = Description
+--
+-- The first
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access to memory through the specified buffer range, via
+-- access types in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>
+-- specified by @srcAccessMask@. If @srcAccessMask@ includes
+-- 'Vulkan.Core10.Enums.AccessFlagBits.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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access to memory through the specified buffer range, via
+-- access types in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>
+-- specified by @dstAccessMask@. If @dstAccessMask@ includes
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_HOST_WRITE_BIT' or
+-- 'Vulkan.Core10.Enums.AccessFlagBits.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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @size@ /must/ be greater than @0@
+--
+-- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',
+--     @size@ /must/ be less than or equal to than the size of @buffer@
+--     minus @offset@
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', at least
+--     one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ /must/ be
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED'
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', and one
+--     of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ is
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', the other /must/
+--     be 'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED' or a special
+--     queue family reserved for external memory ownership transfers, as
+--     described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE' and
+--     @srcQueueFamilyIndex@ is
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED',
+--     @dstQueueFamilyIndex@ /must/ also be
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED'
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE' and
+--     @srcQueueFamilyIndex@ is not
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', it /must/ be a
+--     valid queue family or a special queue family reserved for external
+--     memory transfers, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE' and
+--     @dstQueueFamilyIndex@ is not
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', it /must/ be a
+--     valid queue family or a special queue family reserved for external
+--     memory transfers, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE', and
+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', at least one of
+--     them /must/ be the same as the family of the queue that will execute
+--     this barrier
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlags',
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdPipelineBarrier',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents'
+data BufferMemoryBarrier = BufferMemoryBarrier
+  { -- | @srcAccessMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>.
+    srcAccessMask :: AccessFlags
+  , -- | @dstAccessMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>.
+    dstAccessMask :: AccessFlags
+  , -- | @srcQueueFamilyIndex@ is the source queue family for a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
+    srcQueueFamilyIndex :: Word32
+  , -- | @dstQueueFamilyIndex@ is the destination queue family for a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
+    dstQueueFamilyIndex :: Word32
+  , -- | @buffer@ is a handle to the buffer whose backing memory is affected by
+    -- the barrier.
+    buffer :: Buffer
+  , -- | @offset@ is an offset in bytes into the backing memory for @buffer@;
+    -- this is relative to the base offset as bound to the buffer (see
+    -- 'Vulkan.Core10.MemoryManagement.bindBufferMemory').
+    offset :: DeviceSize
+  , -- | @size@ is a size in bytes of the affected area of backing memory for
+    -- @buffer@, or 'Vulkan.Core10.APIConstants.WHOLE_SIZE' to use the range
+    -- from @offset@ to the end of the buffer.
+    size :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show BufferMemoryBarrier
+
+instance ToCStruct BufferMemoryBarrier where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferMemoryBarrier{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (srcAccessMask)
+    poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (dstAccessMask)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (srcQueueFamilyIndex)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (dstQueueFamilyIndex)
+    poke ((p `plusPtr` 32 :: Ptr Buffer)) (buffer)
+    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (offset)
+    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (size)
+    f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Buffer)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct BufferMemoryBarrier where
+  peekCStruct p = do
+    srcAccessMask <- peek @AccessFlags ((p `plusPtr` 16 :: Ptr AccessFlags))
+    dstAccessMask <- peek @AccessFlags ((p `plusPtr` 20 :: Ptr AccessFlags))
+    srcQueueFamilyIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    dstQueueFamilyIndex <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    buffer <- peek @Buffer ((p `plusPtr` 32 :: Ptr Buffer))
+    offset <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
+    size <- peek @DeviceSize ((p `plusPtr` 48 :: Ptr DeviceSize))
+    pure $ BufferMemoryBarrier
+             srcAccessMask dstAccessMask srcQueueFamilyIndex dstQueueFamilyIndex buffer offset size
+
+instance Storable BufferMemoryBarrier where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BufferMemoryBarrier where
+  zero = BufferMemoryBarrier
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkImageMemoryBarrier - Structure specifying the parameters of an image
+-- memory barrier
+--
+-- = Description
+--
+-- The first
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access to memory through the specified image subresource
+-- range, via access types in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>
+-- specified by @srcAccessMask@. If @srcAccessMask@ includes
+-- 'Vulkan.Core10.Enums.AccessFlagBits.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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access to memory through the specified image subresource
+-- range, via access types in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>
+-- specified by @dstAccessMask@. If @dstAccessMask@ includes
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_HOST_WRITE_BIT' or
+-- 'Vulkan.Core10.Enums.AccessFlagBits.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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>,
+-- relative to other image layout transitions submitted to the same queue,
+-- including those performed by
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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.
+--
+-- The image layout of each image subresource of a depth\/stencil image
+-- created with
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+-- is dependent on the last sample locations used to render to the image
+-- subresource as a depth\/stencil attachment, thus when the @image@ member
+-- of a 'ImageMemoryBarrier' is an image created with this flag the
+-- application /can/ include a
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT'
+-- structure in the @pNext@ chain of 'ImageMemoryBarrier' to specify the
+-- sample locations to use during the image layout transition.
+--
+-- If the
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT'
+-- structure included in the @pNext@ chain of 'ImageMemoryBarrier' does not
+-- match the sample location state last used to render to the image
+-- subresource range specified by @subresourceRange@ or if no
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT'
+-- structure is included in the @pNext@ chain of 'ImageMemoryBarrier', then
+-- the contents of the given image subresource range becomes undefined as
+-- if @oldLayout@ would equal
+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED'.
+--
+-- If @image@ has a multi-planar format and the image is /disjoint/, then
+-- including
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT' in the
+-- @aspectMask@ member of @subresourceRange@ is equivalent to including
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', and
+-- (for three-plane formats only)
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'.
+--
+-- == Valid Usage
+--
+-- -   @oldLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or the
+--     current layout of the image subresources affected by the barrier
+--
+-- -   @newLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
+--
+-- -   If @image@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', at least
+--     one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ /must/ be
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED'
+--
+-- -   If @image@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', and one
+--     of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ is
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', the other /must/
+--     be 'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED' or a special
+--     queue family reserved for external memory transfers, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
+--
+-- -   If @image@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE' and
+--     @srcQueueFamilyIndex@ is
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED',
+--     @dstQueueFamilyIndex@ /must/ also be
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED'
+--
+-- -   If @image@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE' and
+--     @srcQueueFamilyIndex@ is not
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', it /must/ be a
+--     valid queue family or a special queue family reserved for external
+--     memory transfers, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
+--
+-- -   If @image@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE' and
+--     @dstQueueFamilyIndex@ is not
+--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED', it /must/ be a
+--     valid queue family or a special queue family reserved for external
+--     memory transfers, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>
+--
+-- -   If @image@ was created with a sharing mode of
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE', and
+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not
+--     'Vulkan.Core10.APIConstants.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 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
+--     created
+--
+-- -   If @subresourceRange.levelCount@ is not
+--     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS',
+--     @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@
+--     /must/ be less than or equal to the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
+--
+-- -   @subresourceRange.baseArrayLayer@ /must/ be less than the
+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
+--     when @image@ was created
+--
+-- -   If @subresourceRange.layerCount@ is not
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS',
+--     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
+--     /must/ be less than or equal to the @arrayLayers@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
+--
+-- -   If @image@ has a depth\/stencil format with both depth and stencil
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+--     feature is enabled, then the @aspectMask@ member of
+--     @subresourceRange@ /must/ include either or both
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' and
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--
+-- -   If @image@ has a depth\/stencil format with both depth and stencil
+--     and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+--     feature is not enabled, then the @aspectMask@ member of
+--     @subresourceRange@ /must/ include both
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' and
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--
+-- -   If @image@ has a color format and either the format is single-plane
+--     or the image is not disjoint then the @aspectMask@ member of
+--     @subresourceRange@ /must/ only include
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
+--
+-- -   If @image@ has a multi-planar format and the image is /disjoint/,
+--     then the @aspectMask@ member of @subresourceRange@ /must/ include
+--     either at least one of
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     and
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT';
+--     or /must/ include
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
+--
+-- -   If @image@ has a multi-planar format with only two planes, then the
+--     @aspectMask@ member of @subresourceRange@ /must/ not include
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
+--     then @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
+--     set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL'
+--     then @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--     set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
+--     then @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--     set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
+--     then @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--     set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
+--     then @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--     set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
+--     then @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' or
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
+--     set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
+--     then @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--     set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
+--     then @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--     set
+--
+-- -   If @image@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV'
+--     then @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV'
+--     set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @oldLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @newLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @subresourceRange@ /must/ be a valid
+--     'Vulkan.Core10.SharedTypes.ImageSubresourceRange' structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlags',
+-- 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.SharedTypes.ImageSubresourceRange',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdPipelineBarrier',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents'
+data ImageMemoryBarrier (es :: [Type]) = ImageMemoryBarrier
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @srcAccessMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>.
+    srcAccessMask :: AccessFlags
+  , -- | @dstAccessMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>.
+    dstAccessMask :: AccessFlags
+  , -- | @oldLayout@ is the old layout in an
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>.
+    oldLayout :: ImageLayout
+  , -- | @newLayout@ is the new layout in an
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>.
+    newLayout :: ImageLayout
+  , -- | @srcQueueFamilyIndex@ is the source queue family for a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
+    srcQueueFamilyIndex :: Word32
+  , -- | @dstQueueFamilyIndex@ is the destination queue family for a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
+    dstQueueFamilyIndex :: Word32
+  , -- | @image@ is a handle to the image affected by this barrier.
+    image :: Image
+  , -- | @subresourceRange@ describes the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views image subresource range>
+    -- within @image@ that is affected by this barrier.
+    subresourceRange :: ImageSubresourceRange
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (ImageMemoryBarrier es)
+
+instance Extensible ImageMemoryBarrier where
+  extensibleType = STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
+  setNext x next = x{next = next}
+  getNext ImageMemoryBarrier{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageMemoryBarrier e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @SampleLocationsInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss ImageMemoryBarrier es, PokeChain es) => ToCStruct (ImageMemoryBarrier es) where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageMemoryBarrier{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (srcAccessMask)
+    lift $ poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (dstAccessMask)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (oldLayout)
+    lift $ poke ((p `plusPtr` 28 :: Ptr ImageLayout)) (newLayout)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (srcQueueFamilyIndex)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (dstQueueFamilyIndex)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Image)) (image)
+    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr ImageSubresourceRange)) (subresourceRange) . ($ ())
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (zero)
+    lift $ poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)
+    lift $ poke ((p `plusPtr` 28 :: Ptr ImageLayout)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Image)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr ImageSubresourceRange)) (zero) . ($ ())
+    lift $ f
+
+instance (Extendss ImageMemoryBarrier es, PeekChain es) => FromCStruct (ImageMemoryBarrier es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    srcAccessMask <- peek @AccessFlags ((p `plusPtr` 16 :: Ptr AccessFlags))
+    dstAccessMask <- peek @AccessFlags ((p `plusPtr` 20 :: Ptr AccessFlags))
+    oldLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))
+    newLayout <- peek @ImageLayout ((p `plusPtr` 28 :: Ptr ImageLayout))
+    srcQueueFamilyIndex <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    dstQueueFamilyIndex <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
+    image <- peek @Image ((p `plusPtr` 40 :: Ptr Image))
+    subresourceRange <- peekCStruct @ImageSubresourceRange ((p `plusPtr` 48 :: Ptr ImageSubresourceRange))
+    pure $ ImageMemoryBarrier
+             next srcAccessMask dstAccessMask oldLayout newLayout srcQueueFamilyIndex dstQueueFamilyIndex image subresourceRange
+
+instance es ~ '[] => Zero (ImageMemoryBarrier es) where
+  zero = ImageMemoryBarrier
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDrawIndirectCommand - Structure specifying a draw indirect command
+--
+-- = Description
+--
+-- The members of 'DrawIndirectCommand' have the same meaning as the
+-- similarly named parameters of
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDraw'.
+--
+-- == 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>
+--     feature is not enabled, @firstInstance@ /must/ be @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect'
+data DrawIndirectCommand = DrawIndirectCommand
+  { -- | @vertexCount@ is the number of vertices to draw.
+    vertexCount :: Word32
+  , -- | @instanceCount@ is the number of instances to draw.
+    instanceCount :: Word32
+  , -- | @firstVertex@ is the index of the first vertex to draw.
+    firstVertex :: Word32
+  , -- | @firstInstance@ is the instance ID of the first instance to draw.
+    firstInstance :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DrawIndirectCommand
+
+instance ToCStruct DrawIndirectCommand where
+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DrawIndirectCommand{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (vertexCount)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (instanceCount)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (firstVertex)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (firstInstance)
+    f
+  cStructSize = 16
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DrawIndirectCommand where
+  peekCStruct p = do
+    vertexCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    instanceCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    firstVertex <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    firstInstance <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    pure $ DrawIndirectCommand
+             vertexCount instanceCount firstVertex firstInstance
+
+instance Storable DrawIndirectCommand where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DrawIndirectCommand where
+  zero = DrawIndirectCommand
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDrawIndexedIndirectCommand - Structure specifying a draw indexed
+-- indirect command
+--
+-- = Description
+--
+-- The members of 'DrawIndexedIndirectCommand' have the same meaning as the
+-- similarly named parameters of
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed'.
+--
+-- == 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>
+--
+-- -   (@indexSize@ * (@firstIndex@ + @indexCount@) + @offset@) /must/ be
+--     less than or equal to the size of the bound index buffer, with
+--     @indexSize@ being based on the type specified by @indexType@, where
+--     the index buffer, @indexType@, and @offset@ are specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>
+--     feature is not enabled, @firstInstance@ /must/ be @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'
+data DrawIndexedIndirectCommand = DrawIndexedIndirectCommand
+  { -- | @indexCount@ is the number of vertices to draw.
+    indexCount :: Word32
+  , -- | @instanceCount@ is the number of instances to draw.
+    instanceCount :: Word32
+  , -- | @firstIndex@ is the base index within the index buffer.
+    firstIndex :: Word32
+  , -- | @vertexOffset@ is the value added to the vertex index before indexing
+    -- into the vertex buffer.
+    vertexOffset :: Int32
+  , -- | @firstInstance@ is the instance ID of the first instance to draw.
+    firstInstance :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DrawIndexedIndirectCommand
+
+instance ToCStruct DrawIndexedIndirectCommand where
+  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DrawIndexedIndirectCommand{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (indexCount)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (instanceCount)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (firstIndex)
+    poke ((p `plusPtr` 12 :: Ptr Int32)) (vertexOffset)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (firstInstance)
+    f
+  cStructSize = 20
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr Int32)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DrawIndexedIndirectCommand where
+  peekCStruct p = do
+    indexCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    instanceCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    firstIndex <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    vertexOffset <- peek @Int32 ((p `plusPtr` 12 :: Ptr Int32))
+    firstInstance <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ DrawIndexedIndirectCommand
+             indexCount instanceCount firstIndex vertexOffset firstInstance
+
+instance Storable DrawIndexedIndirectCommand where
+  sizeOf ~_ = 20
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DrawIndexedIndirectCommand where
+  zero = DrawIndexedIndirectCommand
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDispatchIndirectCommand - Structure specifying a dispatch indirect
+-- command
+--
+-- = Description
+--
+-- The members of 'DispatchIndirectCommand' have the same meaning as the
+-- corresponding parameters of
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDispatch'.
+--
+-- == Valid Usage
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect'
+data DispatchIndirectCommand = DispatchIndirectCommand
+  { -- | @x@ /must/ be less than or equal to
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
+    x :: Word32
+  , -- | @y@ /must/ be less than or equal to
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
+    y :: Word32
+  , -- | @z@ /must/ be less than or equal to
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
+    z :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DispatchIndirectCommand
+
+instance ToCStruct DispatchIndirectCommand where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DispatchIndirectCommand{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (x)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (y)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (z)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DispatchIndirectCommand where
+  peekCStruct p = do
+    x <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    y <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    z <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pure $ DispatchIndirectCommand
+             x y z
+
+instance Storable DispatchIndirectCommand where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DispatchIndirectCommand where
+  zero = DispatchIndirectCommand
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/OtherTypes.hs-boot b/src/Vulkan/Core10/OtherTypes.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/OtherTypes.hs-boot
@@ -0,0 +1,64 @@
+{-# language CPP #-}
+module Vulkan.Core10.OtherTypes  ( BufferMemoryBarrier
+                                 , DispatchIndirectCommand
+                                 , DrawIndexedIndirectCommand
+                                 , DrawIndirectCommand
+                                 , ImageMemoryBarrier
+                                 , MemoryBarrier
+                                 ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data BufferMemoryBarrier
+
+instance ToCStruct BufferMemoryBarrier
+instance Show BufferMemoryBarrier
+
+instance FromCStruct BufferMemoryBarrier
+
+
+data DispatchIndirectCommand
+
+instance ToCStruct DispatchIndirectCommand
+instance Show DispatchIndirectCommand
+
+instance FromCStruct DispatchIndirectCommand
+
+
+data DrawIndexedIndirectCommand
+
+instance ToCStruct DrawIndexedIndirectCommand
+instance Show DrawIndexedIndirectCommand
+
+instance FromCStruct DrawIndexedIndirectCommand
+
+
+data DrawIndirectCommand
+
+instance ToCStruct DrawIndirectCommand
+instance Show DrawIndirectCommand
+
+instance FromCStruct DrawIndirectCommand
+
+
+type role ImageMemoryBarrier nominal
+data ImageMemoryBarrier (es :: [Type])
+
+instance (Extendss ImageMemoryBarrier es, PokeChain es) => ToCStruct (ImageMemoryBarrier es)
+instance Show (Chain es) => Show (ImageMemoryBarrier es)
+
+instance (Extendss ImageMemoryBarrier es, PeekChain es) => FromCStruct (ImageMemoryBarrier es)
+
+
+data MemoryBarrier
+
+instance ToCStruct MemoryBarrier
+instance Show MemoryBarrier
+
+instance FromCStruct MemoryBarrier
+
diff --git a/src/Vulkan/Core10/Pass.hs b/src/Vulkan/Core10/Pass.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Pass.hs
@@ -0,0 +1,2296 @@
+{-# language CPP #-}
+module Vulkan.Core10.Pass  ( createFramebuffer
+                           , withFramebuffer
+                           , destroyFramebuffer
+                           , createRenderPass
+                           , withRenderPass
+                           , destroyRenderPass
+                           , getRenderAreaGranularity
+                           , AttachmentDescription(..)
+                           , AttachmentReference(..)
+                           , SubpassDescription(..)
+                           , SubpassDependency(..)
+                           , RenderPassCreateInfo(..)
+                           , FramebufferCreateInfo(..)
+                           ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (maybePeek)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Enums.AttachmentDescriptionFlagBits (AttachmentDescriptionFlags)
+import Vulkan.Core10.Enums.AttachmentLoadOp (AttachmentLoadOp)
+import Vulkan.Core10.Enums.AttachmentStoreOp (AttachmentStoreOp)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateFramebuffer))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateRenderPass))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyFramebuffer))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyRenderPass))
+import Vulkan.Dynamic (DeviceCmds(pVkGetRenderAreaGranularity))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.SharedTypes (Extent2D)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.Core10.Handles (Framebuffer)
+import Vulkan.Core10.Handles (Framebuffer(..))
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (FramebufferAttachmentsCreateInfo)
+import Vulkan.Core10.Enums.FramebufferCreateFlagBits (FramebufferCreateFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import Vulkan.Core10.Handles (ImageView)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Handles (RenderPass)
+import Vulkan.Core10.Handles (RenderPass(..))
+import Vulkan.Core10.Enums.RenderPassCreateFlagBits (RenderPassCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (RenderPassFragmentDensityMapCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (RenderPassInputAttachmentAspectCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (RenderPassMultiviewCreateInfo)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.SubpassDescriptionFlagBits (SubpassDescriptionFlags)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateFramebuffer
+  :: FunPtr (Ptr Device_T -> Ptr (FramebufferCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Framebuffer -> IO Result) -> Ptr Device_T -> Ptr (FramebufferCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Framebuffer -> IO Result
+
+-- | vkCreateFramebuffer - Create a new framebuffer object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the framebuffer.
+--
+-- -   @pCreateInfo@ is a pointer to a 'FramebufferCreateInfo' structure
+--     describing additional information about framebuffer creation.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pFramebuffer@ is a pointer to a 'Vulkan.Core10.Handles.Framebuffer'
+--     handle in which the resulting framebuffer object is returned.
+--
+-- == Valid Usage
+--
+-- -   If @pCreateInfo->flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     and @attachmentCount@ is not @0@, each element of
+--     @pCreateInfo->pAttachments@ /must/ have been created on @device@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'FramebufferCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pFramebuffer@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Framebuffer' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Framebuffer',
+-- 'FramebufferCreateInfo'
+createFramebuffer :: forall a io . (Extendss FramebufferCreateInfo a, PokeChain a, MonadIO io) => Device -> FramebufferCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Framebuffer)
+createFramebuffer device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateFramebufferPtr = pVkCreateFramebuffer (deviceCmds (device :: Device))
+  lift $ unless (vkCreateFramebufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateFramebuffer is null" Nothing Nothing
+  let vkCreateFramebuffer' = mkVkCreateFramebuffer vkCreateFramebufferPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPFramebuffer <- ContT $ bracket (callocBytes @Framebuffer 8) free
+  r <- lift $ vkCreateFramebuffer' (deviceHandle (device)) pCreateInfo pAllocator (pPFramebuffer)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pFramebuffer <- lift $ peek @Framebuffer pPFramebuffer
+  pure $ (pFramebuffer)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createFramebuffer' and 'destroyFramebuffer'
+--
+-- To ensure that 'destroyFramebuffer' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withFramebuffer :: forall a io r . (Extendss FramebufferCreateInfo a, PokeChain a, MonadIO io) => Device -> FramebufferCreateInfo a -> Maybe AllocationCallbacks -> (io (Framebuffer) -> ((Framebuffer) -> io ()) -> r) -> r
+withFramebuffer device pCreateInfo pAllocator b =
+  b (createFramebuffer device pCreateInfo pAllocator)
+    (\(o0) -> destroyFramebuffer device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyFramebuffer
+  :: FunPtr (Ptr Device_T -> Framebuffer -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Framebuffer -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyFramebuffer - Destroy a framebuffer object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @framebuffer@ /must/ have
+--     completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @framebuffer@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @framebuffer@ was created, @pAllocator@ /must/ be
+--     @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @framebuffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @framebuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Framebuffer'
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @framebuffer@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @framebuffer@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Framebuffer'
+destroyFramebuffer :: forall io . MonadIO io => Device -> Framebuffer -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyFramebuffer device framebuffer allocator = liftIO . evalContT $ do
+  let vkDestroyFramebufferPtr = pVkDestroyFramebuffer (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyFramebufferPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyFramebuffer is null" Nothing Nothing
+  let vkDestroyFramebuffer' = mkVkDestroyFramebuffer vkDestroyFramebufferPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyFramebuffer' (deviceHandle (device)) (framebuffer) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateRenderPass
+  :: FunPtr (Ptr Device_T -> Ptr (RenderPassCreateInfo a) -> Ptr AllocationCallbacks -> Ptr RenderPass -> IO Result) -> Ptr Device_T -> Ptr (RenderPassCreateInfo a) -> Ptr AllocationCallbacks -> Ptr RenderPass -> IO Result
+
+-- | vkCreateRenderPass - Create a new render pass object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the render pass.
+--
+-- -   @pCreateInfo@ is a pointer to a 'RenderPassCreateInfo' structure
+--     describing the parameters of the render pass.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pRenderPass@ is a pointer to a 'Vulkan.Core10.Handles.RenderPass'
+--     handle in which the resulting render pass object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'RenderPassCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pRenderPass@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.RenderPass' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.RenderPass',
+-- 'RenderPassCreateInfo'
+createRenderPass :: forall a io . (Extendss RenderPassCreateInfo a, PokeChain a, MonadIO io) => Device -> RenderPassCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (RenderPass)
+createRenderPass device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateRenderPassPtr = pVkCreateRenderPass (deviceCmds (device :: Device))
+  lift $ unless (vkCreateRenderPassPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateRenderPass is null" Nothing Nothing
+  let vkCreateRenderPass' = mkVkCreateRenderPass vkCreateRenderPassPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPRenderPass <- ContT $ bracket (callocBytes @RenderPass 8) free
+  r <- lift $ vkCreateRenderPass' (deviceHandle (device)) pCreateInfo pAllocator (pPRenderPass)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pRenderPass <- lift $ peek @RenderPass pPRenderPass
+  pure $ (pRenderPass)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createRenderPass' and 'destroyRenderPass'
+--
+-- To ensure that 'destroyRenderPass' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withRenderPass :: forall a io r . (Extendss RenderPassCreateInfo a, PokeChain a, MonadIO io) => Device -> RenderPassCreateInfo a -> Maybe AllocationCallbacks -> (io (RenderPass) -> ((RenderPass) -> io ()) -> r) -> r
+withRenderPass device pCreateInfo pAllocator b =
+  b (createRenderPass device pCreateInfo pAllocator)
+    (\(o0) -> destroyRenderPass device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyRenderPass
+  :: FunPtr (Ptr Device_T -> RenderPass -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> RenderPass -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyRenderPass - Destroy a render pass object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @renderPass@ /must/ have
+--     completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @renderPass@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @renderPass@ was created, @pAllocator@ /must/ be
+--     @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @renderPass@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @renderPass@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @renderPass@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.RenderPass'
+destroyRenderPass :: forall io . MonadIO io => Device -> RenderPass -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyRenderPass device renderPass allocator = liftIO . evalContT $ do
+  let vkDestroyRenderPassPtr = pVkDestroyRenderPass (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyRenderPassPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyRenderPass is null" Nothing Nothing
+  let vkDestroyRenderPass' = mkVkDestroyRenderPass vkDestroyRenderPassPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyRenderPass' (deviceHandle (device)) (renderPass) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetRenderAreaGranularity
+  :: FunPtr (Ptr Device_T -> RenderPass -> Ptr Extent2D -> IO ()) -> Ptr Device_T -> RenderPass -> Ptr Extent2D -> IO ()
+
+-- | vkGetRenderAreaGranularity - Returns the granularity for optimal render
+-- area
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the render pass.
+--
+-- -   @renderPass@ is a handle to a render pass.
+--
+-- -   @pGranularity@ is a pointer to a
+--     'Vulkan.Core10.SharedTypes.Extent2D' structure in which the
+--     granularity is returned.
+--
+-- = 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 'Vulkan.Core10.SharedTypes.Extent2D' (the
+--     horizontal granularity).
+--
+-- -   the @offset.y@ member in @renderArea@ is a multiple of the @height@
+--     of the returned 'Vulkan.Core10.SharedTypes.Extent2D' (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
+--     'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'.
+--
+-- -   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
+--     'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'.
+--
+-- 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'
+--     handle
+--
+-- -   @pGranularity@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.SharedTypes.Extent2D' structure
+--
+-- -   @renderPass@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.Handles.RenderPass'
+getRenderAreaGranularity :: forall io . MonadIO io => Device -> RenderPass -> io (("granularity" ::: Extent2D))
+getRenderAreaGranularity device renderPass = liftIO . evalContT $ do
+  let vkGetRenderAreaGranularityPtr = pVkGetRenderAreaGranularity (deviceCmds (device :: Device))
+  lift $ unless (vkGetRenderAreaGranularityPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetRenderAreaGranularity is null" Nothing Nothing
+  let vkGetRenderAreaGranularity' = mkVkGetRenderAreaGranularity vkGetRenderAreaGranularityPtr
+  pPGranularity <- ContT (withZeroCStruct @Extent2D)
+  lift $ vkGetRenderAreaGranularity' (deviceHandle (device)) (renderPass) (pPGranularity)
+  pGranularity <- lift $ peekCStruct @Extent2D pPGranularity
+  pure $ (pGranularity)
+
+
+-- | VkAttachmentDescription - Structure specifying an attachment 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
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT'
+-- pipeline stage. Load operations for attachments with a color format
+-- execute in the
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.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
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'
+-- pipeline stage. Store operations for attachments with a color format
+-- execute in the
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.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.
+--
+-- The load and store operations apply on the first and last use of each
+-- view in the render pass, respectively. If a view index of an attachment
+-- is not included in the view mask in any subpass that uses it, then the
+-- load and store operations are ignored, and the attachment’s memory
+-- contents will not be modified by execution of a render pass instance.
+--
+-- During a render pass instance, input\/color attachments with color
+-- formats that have a component size of 8, 16, or 32 bits /must/ be
+-- represented in the attachment’s format throughout the instance.
+-- 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-numerics Numeric Representation and Computation>
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-fixedconv Fixed-Point Data Conversions>.
+--
+-- If @flags@ includes
+-- 'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.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.
+--
+-- If a render pass uses multiple attachments that alias the same device
+-- memory, those attachments /must/ each include the
+-- 'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'
+-- bit in their attachment description flags. Attachments aliasing the same
+-- memory occurs in multiple ways:
+--
+-- -   Multiple attachments being assigned the same image view as part of
+--     framebuffer creation.
+--
+-- -   Attachments using distinct image views that correspond to the same
+--     image subresource of an image.
+--
+-- -   Attachments using views of distinct image subresources which are
+--     bound to overlapping memory ranges.
+--
+-- Note
+--
+-- Render passes /must/ include subpass dependencies (either directly or
+-- via a subpass dependency chain) between any two subpasses that operate
+-- on the same attachment or aliasing attachments and those subpass
+-- dependencies /must/ include execution and memory dependencies separating
+-- uses of the aliases, if at least one of those subpasses writes to one of
+-- the aliases. These dependencies /must/ not include the
+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT' if the
+-- aliases are views of distinct image subresources which overlap in
+-- memory.
+--
+-- Multiple attachments that alias the same memory /must/ not be used in a
+-- single subpass. A given attachment index /must/ not be used multiple
+-- times in a single subpass, with one exception: two subpass attachments
+-- /can/ use the same attachment index if at least one use is as an input
+-- attachment and neither use is as a resolve or preserve attachment. In
+-- other words, the same view /can/ be used simultaneously as an input and
+-- color or depth\/stencil attachment, but /must/ not be used as multiple
+-- color or depth\/stencil attachments nor as resolve or preserve
+-- attachments. The precise set of valid scenarios is described in more
+-- detail
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-feedbackloop below>.
+--
+-- If a set of attachments alias each other, then all except the first to
+-- be used in the render pass /must/ use an @initialLayout@ of
+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', since the
+-- earlier uses of the other aliases make their contents undefined. Once an
+-- alias has been used and a different alias has been used after it, the
+-- first alias /must/ not be used in any later subpasses. However, an
+-- application /can/ assign the same image view to multiple aliasing
+-- attachment indices, which allows that image view to be used multiple
+-- times even if other aliases are used in between.
+--
+-- Note
+--
+-- Once an attachment needs the
+-- 'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'
+-- bit, there /should/ be no additional cost of introducing additional
+-- aliases, and using these additional aliases /may/ allow more efficient
+-- clearing of the attachments on multiple uses via
+-- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'.
+--
+-- == Valid Usage
+--
+-- -   @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
+--
+-- -   If @format@ is a color format, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format, @initialLayout@ /must/ not
+--     be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
+--
+-- -   If @format@ is a color format, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+--     feature is not enabled, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+--     feature is not enabled, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a color format, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a color format, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format which includes both depth and
+--     stencil aspects, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format which includes both depth and
+--     stencil aspects, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format which includes only the depth
+--     aspect, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format which includes only the depth
+--     aspect, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format which includes only the
+--     stencil aspect, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format which includes only the
+--     stencil aspect, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlagBits'
+--     values
+--
+-- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- -   @samples@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+--
+-- -   @loadOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value
+--
+-- -   @storeOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value
+--
+-- -   @stencilLoadOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value
+--
+-- -   @stencilStoreOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value
+--
+-- -   @initialLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @finalLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlags',
+-- 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp',
+-- 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp',
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout', 'RenderPassCreateInfo',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
+data AttachmentDescription = AttachmentDescription
+  { -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlagBits'
+    -- specifying additional properties of the attachment.
+    flags :: AttachmentDescriptionFlags
+  , -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' value specifying the
+    -- format of the image view that will be used for the attachment.
+    format :: Format
+  , -- | @samples@ is the number of samples of the image as defined in
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'.
+    samples :: SampleCountFlagBits
+  , -- | @loadOp@ is a 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp'
+    -- value specifying how the contents of color and depth components of the
+    -- attachment are treated at the beginning of the subpass where it is first
+    -- used.
+    loadOp :: AttachmentLoadOp
+  , -- | @storeOp@ is a 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp'
+    -- value specifying how the contents of color and depth components of the
+    -- attachment are treated at the end of the subpass where it is last used.
+    storeOp :: AttachmentStoreOp
+  , -- | @stencilLoadOp@ is a
+    -- 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value specifying
+    -- how the contents of stencil components of the attachment are treated at
+    -- the beginning of the subpass where it is first used.
+    stencilLoadOp :: AttachmentLoadOp
+  , -- | @stencilStoreOp@ is a
+    -- 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value
+    -- specifying how the contents of stencil components of the attachment are
+    -- treated at the end of the last subpass where it is used.
+    stencilStoreOp :: AttachmentStoreOp
+  , -- | @initialLayout@ is the layout the attachment image subresource will be
+    -- in when a render pass instance begins.
+    initialLayout :: ImageLayout
+  , -- | @finalLayout@ is the layout the attachment image subresource will be
+    -- transitioned to when a render pass instance ends.
+    finalLayout :: ImageLayout
+  }
+  deriving (Typeable)
+deriving instance Show AttachmentDescription
+
+instance ToCStruct AttachmentDescription where
+  withCStruct x f = allocaBytesAligned 36 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AttachmentDescription{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr AttachmentDescriptionFlags)) (flags)
+    poke ((p `plusPtr` 4 :: Ptr Format)) (format)
+    poke ((p `plusPtr` 8 :: Ptr SampleCountFlagBits)) (samples)
+    poke ((p `plusPtr` 12 :: Ptr AttachmentLoadOp)) (loadOp)
+    poke ((p `plusPtr` 16 :: Ptr AttachmentStoreOp)) (storeOp)
+    poke ((p `plusPtr` 20 :: Ptr AttachmentLoadOp)) (stencilLoadOp)
+    poke ((p `plusPtr` 24 :: Ptr AttachmentStoreOp)) (stencilStoreOp)
+    poke ((p `plusPtr` 28 :: Ptr ImageLayout)) (initialLayout)
+    poke ((p `plusPtr` 32 :: Ptr ImageLayout)) (finalLayout)
+    f
+  cStructSize = 36
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 4 :: Ptr Format)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr SampleCountFlagBits)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr AttachmentLoadOp)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr AttachmentStoreOp)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr AttachmentLoadOp)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr AttachmentStoreOp)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr ImageLayout)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr ImageLayout)) (zero)
+    f
+
+instance FromCStruct AttachmentDescription where
+  peekCStruct p = do
+    flags <- peek @AttachmentDescriptionFlags ((p `plusPtr` 0 :: Ptr AttachmentDescriptionFlags))
+    format <- peek @Format ((p `plusPtr` 4 :: Ptr Format))
+    samples <- peek @SampleCountFlagBits ((p `plusPtr` 8 :: Ptr SampleCountFlagBits))
+    loadOp <- peek @AttachmentLoadOp ((p `plusPtr` 12 :: Ptr AttachmentLoadOp))
+    storeOp <- peek @AttachmentStoreOp ((p `plusPtr` 16 :: Ptr AttachmentStoreOp))
+    stencilLoadOp <- peek @AttachmentLoadOp ((p `plusPtr` 20 :: Ptr AttachmentLoadOp))
+    stencilStoreOp <- peek @AttachmentStoreOp ((p `plusPtr` 24 :: Ptr AttachmentStoreOp))
+    initialLayout <- peek @ImageLayout ((p `plusPtr` 28 :: Ptr ImageLayout))
+    finalLayout <- peek @ImageLayout ((p `plusPtr` 32 :: Ptr ImageLayout))
+    pure $ AttachmentDescription
+             flags format samples loadOp storeOp stencilLoadOp stencilStoreOp initialLayout finalLayout
+
+instance Storable AttachmentDescription where
+  sizeOf ~_ = 36
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AttachmentDescription where
+  zero = AttachmentDescription
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkAttachmentReference - Structure specifying an attachment reference
+--
+-- == Valid Usage
+--
+-- -   If @attachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@ /must/ not
+--     be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR',
+--     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR',
+--     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR',
+--     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR',
+--     or
+--     'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @layout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT',
+-- 'SubpassDescription'
+data AttachmentReference = AttachmentReference
+  { -- | @attachment@ is either an integer value identifying an attachment at the
+    -- corresponding index in 'RenderPassCreateInfo'::@pAttachments@, or
+    -- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' to signify that this
+    -- attachment is not used.
+    attachment :: Word32
+  , -- | @layout@ is a 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+    -- specifying the layout the attachment uses during the subpass.
+    layout :: ImageLayout
+  }
+  deriving (Typeable)
+deriving instance Show AttachmentReference
+
+instance ToCStruct AttachmentReference where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AttachmentReference{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (attachment)
+    poke ((p `plusPtr` 4 :: Ptr ImageLayout)) (layout)
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr ImageLayout)) (zero)
+    f
+
+instance FromCStruct AttachmentReference where
+  peekCStruct p = do
+    attachment <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    layout <- peek @ImageLayout ((p `plusPtr` 4 :: Ptr ImageLayout))
+    pure $ AttachmentReference
+             attachment layout
+
+instance Storable AttachmentReference where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AttachmentReference where
+  zero = AttachmentReference
+           zero
+           zero
+
+
+-- | VkSubpassDescription - Structure specifying a subpass description
+--
+-- = Description
+--
+-- Each element of the @pInputAttachments@ array corresponds to an input
+-- attachment index in a fragment shader, i.e. if a shader declares an
+-- image variable decorated with a @InputAttachmentIndex@ value of __X__,
+-- then it uses the attachment provided in @pInputAttachments@[__X__].
+-- Input attachments /must/ also be bound to the pipeline in a descriptor
+-- set. If the @attachment@ member of any element of @pInputAttachments@ is
+-- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the application /must/
+-- not read from the corresponding input attachment index. Fragment shaders
+-- /can/ use subpass input variables to access the contents of an input
+-- attachment at the fragment’s (x, y, layer) framebuffer coordinates.
+-- Input attachments /must/ not be used by any subpasses within a
+-- renderpass that enables
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>.
+--
+-- Each element of the @pColorAttachments@ array corresponds to an output
+-- location in the shader, i.e. if the shader declares an output variable
+-- decorated with a @Location@ value of __X__, then it uses the attachment
+-- provided in @pColorAttachments@[__X__]. If the @attachment@ member of
+-- any element of @pColorAttachments@ is
+-- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', writes to the
+-- corresponding location by a fragment are discarded.
+--
+-- If @flags@ does not include
+-- 'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
+-- and if @pResolveAttachments@ is not @NULL@, each of its elements
+-- corresponds to a color attachment (the element in @pColorAttachments@ at
+-- the same index), and a multisample resolve operation is defined for each
+-- attachment. At the end of each subpass, multisample resolve operations
+-- read the subpass’s color attachments, and resolve the samples for each
+-- pixel within the render area to the same pixel location in the
+-- corresponding resolve attachments, unless the resolve attachment index
+-- is 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'.
+--
+-- Similarly, if @flags@ does not include
+-- 'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
+-- and
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@pDepthStencilResolveAttachment@
+-- is not @NULL@ and does not have the value
+-- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it corresponds to the
+-- depth\/stencil attachment in @pDepthStencilAttachment@, and multisample
+-- resolve operations for depth and stencil are defined by
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@depthResolveMode@
+-- and
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@stencilResolveMode@,
+-- respectively. At the end of each subpass, multisample resolve operations
+-- read the subpass’s depth\/stencil attachment, and resolve the samples
+-- for each pixel to the same pixel location in the corresponding resolve
+-- attachment. If
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@depthResolveMode@
+-- is 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE', then the
+-- depth component of the resolve attachment is not written to and its
+-- contents are preserved. Similarly, if
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@stencilResolveMode@
+-- is 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE', then the
+-- stencil component of the resolve attachment is not written to and its
+-- contents are preserved.
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@depthResolveMode@
+-- is ignored if the 'Vulkan.Core10.Enums.Format.Format' of the
+-- @pDepthStencilResolveAttachment@ does not have a depth component.
+-- Similarly,
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'::@stencilResolveMode@
+-- is ignored if the 'Vulkan.Core10.Enums.Format.Format' of the
+-- @pDepthStencilResolveAttachment@ does not have a stencil component.
+--
+-- If the image subresource range referenced by the depth\/stencil
+-- attachment is created with
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT',
+-- then the multisample resolve operation uses the sample locations state
+-- specified in the @sampleLocationsInfo@ member of the element of the
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT'::@pPostSubpassSampleLocations@
+-- for the subpass.
+--
+-- If @pDepthStencilAttachment@ is @NULL@, or if its attachment index is
+-- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it indicates that no
+-- depth\/stencil attachment will be used in the subpass.
+--
+-- 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__.
+--
+-- In addition, 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:
+--
+-- -   'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM'
+--     is set.
+--
+-- -   The attachment is used as a color or depth\/stencil in the subpass.
+--
+-- 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
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   @colorAttachmentCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxColorAttachments@
+--
+-- -   If the first use of an attachment in this render pass is as an input
+--     attachment, and the attachment is not also used as a color or
+--     depth\/stencil attachment in the same subpass, then @loadOp@ /must/
+--     not be
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'
+--
+-- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment
+--     that is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the
+--     corresponding color attachment /must/ not be
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment
+--     that is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the
+--     corresponding color attachment /must/ not have a sample count of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If @pResolveAttachments@ is not @NULL@, each resolve attachment that
+--     is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have a
+--     sample count of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If @pResolveAttachments@ is not @NULL@, each resolve attachment that
+--     is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have
+--     the same 'Vulkan.Core10.Enums.Format.Format' as its corresponding
+--     color attachment
+--
+-- -   All attachments in @pColorAttachments@ that are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have the same
+--     sample count
+--
+-- -   All attachments in @pInputAttachments@ that are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have formats
+--     whose features contain at least one of
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--     or
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   All attachments in @pColorAttachments@ that are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have formats
+--     whose features contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--
+-- -   All attachments in @pResolveAttachments@ that are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have formats
+--     whose features contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--
+-- -   If @pDepthStencilAttachment@ is not @NULL@ and the attachment is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it /must/ have a
+--     format whose features contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, and
+--     all attachments in @pColorAttachments@ that are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have a sample
+--     count that is smaller than or equal to the sample count of
+--     @pDepthStencilAttachment@ if it is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- -   If neither the @VK_AMD_mixed_attachment_samples@ nor the
+--     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if
+--     @pDepthStencilAttachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' and any attachments
+--     in @pColorAttachments@ are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', they /must/ have the
+--     same sample count
+--
+-- -   The @attachment@ member of each element of @pPreserveAttachments@
+--     /must/ not be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- -   Each element of @pPreserveAttachments@ /must/ not also be an element
+--     of any other member of the subpass description
+--
+-- -   If any attachment is used by more than one 'AttachmentReference'
+--     member, then each use /must/ use the same @layout@
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX',
+--     it /must/ also include
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
+--     and if @pResolveAttachments@ is not @NULL@, then each resolve
+--     attachment /must/ be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
+--     and if @pDepthStencilResolveAttachmentKHR@ is not @NULL@, then the
+--     depth\/stencil resolve attachment /must/ be
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM',
+--     then the subpass /must/ be the last subpass in a subpass dependency
+--     chain
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM',
+--     then the sample count of the input attachments /must/ equal
+--     @rasterizationSamples@
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM',
+--     and if @sampleShadingEnable@ is enabled (explicitly or implicitly)
+--     then @minSampleShading@ /must/ equal 0.0
+--
+-- -   If the render pass is created with
+--     'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM'
+--     each of the elements of @pInputAttachments@ /must/ be
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlagBits'
+--     values
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--
+-- -   If @inputAttachmentCount@ is not @0@, @pInputAttachments@ /must/ be
+--     a valid pointer to an array of @inputAttachmentCount@ valid
+--     'AttachmentReference' structures
+--
+-- -   If @colorAttachmentCount@ is not @0@, @pColorAttachments@ /must/ be
+--     a valid pointer to an array of @colorAttachmentCount@ valid
+--     'AttachmentReference' structures
+--
+-- -   If @colorAttachmentCount@ is not @0@, and @pResolveAttachments@ is
+--     not @NULL@, @pResolveAttachments@ /must/ be a valid pointer to an
+--     array of @colorAttachmentCount@ valid 'AttachmentReference'
+--     structures
+--
+-- -   If @pDepthStencilAttachment@ is not @NULL@,
+--     @pDepthStencilAttachment@ /must/ be a valid pointer to a valid
+--     'AttachmentReference' structure
+--
+-- -   If @preserveAttachmentCount@ is not @0@, @pPreserveAttachments@
+--     /must/ be a valid pointer to an array of @preserveAttachmentCount@
+--     @uint32_t@ values
+--
+-- = See Also
+--
+-- 'AttachmentReference',
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
+-- 'RenderPassCreateInfo',
+-- 'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlags'
+data SubpassDescription = SubpassDescription
+  { -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlagBits'
+    -- specifying usage of the subpass.
+    flags :: SubpassDescriptionFlags
+  , -- | @pipelineBindPoint@ is a
+    -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+    -- specifying the pipeline type supported for this subpass.
+    pipelineBindPoint :: PipelineBindPoint
+  , -- | @pInputAttachments@ is a pointer to an array of 'AttachmentReference'
+    -- structures defining the input attachments for this subpass and their
+    -- layouts.
+    inputAttachments :: Vector AttachmentReference
+  , -- | @pColorAttachments@ is a pointer to an array of 'AttachmentReference'
+    -- structures defining the color attachments for this subpass and their
+    -- layouts.
+    colorAttachments :: Vector AttachmentReference
+  , -- | @pResolveAttachments@ is an optional array of @colorAttachmentCount@
+    -- 'AttachmentReference' structures defining the resolve attachments for
+    -- this subpass and their layouts.
+    resolveAttachments :: Vector AttachmentReference
+  , -- | @pDepthStencilAttachment@ is a pointer to a 'AttachmentReference'
+    -- structure specifying the depth\/stencil attachment for this subpass and
+    -- its layout.
+    depthStencilAttachment :: Maybe AttachmentReference
+  , -- | @pPreserveAttachments@ is a pointer to an array of
+    -- @preserveAttachmentCount@ render pass attachment indices identifying
+    -- attachments that are not used by this subpass, but whose contents /must/
+    -- be preserved throughout the subpass.
+    preserveAttachments :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show SubpassDescription
+
+instance ToCStruct SubpassDescription where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SubpassDescription{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr SubpassDescriptionFlags)) (flags)
+    lift $ poke ((p `plusPtr` 4 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (inputAttachments)) :: Word32))
+    pPInputAttachments' <- ContT $ allocaBytesAligned @AttachmentReference ((Data.Vector.length (inputAttachments)) * 8) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPInputAttachments' `plusPtr` (8 * (i)) :: Ptr AttachmentReference) (e) . ($ ())) (inputAttachments)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr AttachmentReference))) (pPInputAttachments')
+    let pColorAttachmentsLength = Data.Vector.length $ (colorAttachments)
+    let pResolveAttachmentsLength = Data.Vector.length $ (resolveAttachments)
+    lift $ unless (fromIntegral pResolveAttachmentsLength == pColorAttachmentsLength || pResolveAttachmentsLength == 0) $
+      throwIO $ IOError Nothing InvalidArgument "" "pResolveAttachments and pColorAttachments must have the same length" Nothing Nothing
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral pColorAttachmentsLength :: Word32))
+    pPColorAttachments' <- ContT $ allocaBytesAligned @AttachmentReference ((Data.Vector.length (colorAttachments)) * 8) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPColorAttachments' `plusPtr` (8 * (i)) :: Ptr AttachmentReference) (e) . ($ ())) (colorAttachments)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr AttachmentReference))) (pPColorAttachments')
+    pResolveAttachments'' <- if Data.Vector.null (resolveAttachments)
+      then pure nullPtr
+      else do
+        pPResolveAttachments <- ContT $ allocaBytesAligned @AttachmentReference (((Data.Vector.length (resolveAttachments))) * 8) 4
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPResolveAttachments `plusPtr` (8 * (i)) :: Ptr AttachmentReference) (e) . ($ ())) ((resolveAttachments))
+        pure $ pPResolveAttachments
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr AttachmentReference))) pResolveAttachments''
+    pDepthStencilAttachment'' <- case (depthStencilAttachment) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr AttachmentReference))) pDepthStencilAttachment''
+    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (preserveAttachments)) :: Word32))
+    pPPreserveAttachments' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (preserveAttachments)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPPreserveAttachments' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (preserveAttachments)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word32))) (pPPreserveAttachments')
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 4 :: Ptr PipelineBindPoint)) (zero)
+    pPInputAttachments' <- ContT $ allocaBytesAligned @AttachmentReference ((Data.Vector.length (mempty)) * 8) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPInputAttachments' `plusPtr` (8 * (i)) :: Ptr AttachmentReference) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr AttachmentReference))) (pPInputAttachments')
+    pPColorAttachments' <- ContT $ allocaBytesAligned @AttachmentReference ((Data.Vector.length (mempty)) * 8) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPColorAttachments' `plusPtr` (8 * (i)) :: Ptr AttachmentReference) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr AttachmentReference))) (pPColorAttachments')
+    pPPreserveAttachments' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPPreserveAttachments' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word32))) (pPPreserveAttachments')
+    lift $ f
+
+instance FromCStruct SubpassDescription where
+  peekCStruct p = do
+    flags <- peek @SubpassDescriptionFlags ((p `plusPtr` 0 :: Ptr SubpassDescriptionFlags))
+    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 4 :: Ptr PipelineBindPoint))
+    inputAttachmentCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pInputAttachments <- peek @(Ptr AttachmentReference) ((p `plusPtr` 16 :: Ptr (Ptr AttachmentReference)))
+    pInputAttachments' <- generateM (fromIntegral inputAttachmentCount) (\i -> peekCStruct @AttachmentReference ((pInputAttachments `advancePtrBytes` (8 * (i)) :: Ptr AttachmentReference)))
+    colorAttachmentCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pColorAttachments <- peek @(Ptr AttachmentReference) ((p `plusPtr` 32 :: Ptr (Ptr AttachmentReference)))
+    pColorAttachments' <- generateM (fromIntegral colorAttachmentCount) (\i -> peekCStruct @AttachmentReference ((pColorAttachments `advancePtrBytes` (8 * (i)) :: Ptr AttachmentReference)))
+    pResolveAttachments <- peek @(Ptr AttachmentReference) ((p `plusPtr` 40 :: Ptr (Ptr AttachmentReference)))
+    let pResolveAttachmentsLength = if pResolveAttachments == nullPtr then 0 else (fromIntegral colorAttachmentCount)
+    pResolveAttachments' <- generateM pResolveAttachmentsLength (\i -> peekCStruct @AttachmentReference ((pResolveAttachments `advancePtrBytes` (8 * (i)) :: Ptr AttachmentReference)))
+    pDepthStencilAttachment <- peek @(Ptr AttachmentReference) ((p `plusPtr` 48 :: Ptr (Ptr AttachmentReference)))
+    pDepthStencilAttachment' <- maybePeek (\j -> peekCStruct @AttachmentReference (j)) pDepthStencilAttachment
+    preserveAttachmentCount <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    pPreserveAttachments <- peek @(Ptr Word32) ((p `plusPtr` 64 :: Ptr (Ptr Word32)))
+    pPreserveAttachments' <- generateM (fromIntegral preserveAttachmentCount) (\i -> peek @Word32 ((pPreserveAttachments `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ SubpassDescription
+             flags pipelineBindPoint pInputAttachments' pColorAttachments' pResolveAttachments' pDepthStencilAttachment' pPreserveAttachments'
+
+instance Zero SubpassDescription where
+  zero = SubpassDescription
+           zero
+           zero
+           mempty
+           mempty
+           mempty
+           Nothing
+           mempty
+
+
+-- | VkSubpassDependency - Structure specifying a subpass dependency
+--
+-- = Description
+--
+-- If @srcSubpass@ is equal to @dstSubpass@ then the 'SubpassDependency'
+-- describes a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- 'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', the first
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
+-- includes commands that occur earlier in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
+-- than the 'Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass' 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
+-- specified by @srcStageMask@.
+--
+-- If @dstSubpass@ is equal to
+-- 'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', the second
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
+-- includes commands that occur later in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
+-- than the 'Vulkan.Core10.CommandBufferBuilding.cmdEndRenderPass' 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
+-- specified by @dstStageMask@.
+--
+-- The first
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access in the pipeline stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>
+-- specified by @srcStageMask@. It is also limited to access types in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>
+-- specified by @srcAccessMask@.
+--
+-- The second
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
+-- is limited to access in the pipeline stages determined by the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
+-- specified by @dstStageMask@. It is also limited to access types in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>
+-- specified by @dstAccessMask@.
+--
+-- The
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-available-and-visible availability and visibility operations>
+-- defined by a subpass dependency affect the execution of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier' (with matching @srcAccessMask@
+-- and @dstAccessMask@ parameters) submitted as a part of a
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdPipelineBarrier' (with matching
+-- @srcStageMask@ and @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 a
+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' defined similarly to the
+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier' above, the queue family indices
+-- set to 'Vulkan.Core10.APIConstants.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 the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   @srcSubpass@ /must/ be less than or equal to @dstSubpass@, unless
+--     one of them is 'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', to
+--     avoid cyclic dependencies and ensure a valid execution order
+--
+-- -   @srcSubpass@ and @dstSubpass@ /must/ not both be equal to
+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
+--
+-- -   If @srcSubpass@ is equal to @dstSubpass@ and not all of the stages
+--     in @srcStageMask@ and @dstStageMask@ are
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stages>,
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>
+--     pipeline stage in @srcStageMask@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>
+--     than or equal to the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   Any access flag included in @dstAccessMask@ /must/ be supported by
+--     one of the pipeline stages in @dstStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   If @srcSubpass@ equals @dstSubpass@, and @srcStageMask@ and
+--     @dstStageMask@ both include a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stage>,
+--     then @dependencyFlags@ /must/ include
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT'
+--
+-- -   If @dependencyFlags@ includes
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
+--     @srcSubpass@ /must/ not be equal to
+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
+--
+-- -   If @dependencyFlags@ includes
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
+--     @dstSubpass@ /must/ not be equal to
+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
+--
+-- -   If @srcSubpass@ equals @dstSubpass@ and that subpass has more than
+--     one bit set in the view mask, then @dependencyFlags@ /must/ include
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @srcStageMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   @srcStageMask@ /must/ not be @0@
+--
+-- -   @dstStageMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   @dstStageMask@ /must/ not be @0@
+--
+-- -   @srcAccessMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
+--
+-- -   @dstAccessMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
+--
+-- -   @dependencyFlags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlags',
+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags',
+-- 'RenderPassCreateInfo'
+data SubpassDependency = SubpassDependency
+  { -- | @srcSubpass@ is the subpass index of the first subpass in the
+    -- dependency, or 'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'.
+    srcSubpass :: Word32
+  , -- | @dstSubpass@ is the subpass index of the second subpass in the
+    -- dependency, or 'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'.
+    dstSubpass :: Word32
+  , -- | @srcStageMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+    -- specifying the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>.
+    srcStageMask :: PipelineStageFlags
+  , -- | @dstStageMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+    -- specifying the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
+    dstStageMask :: PipelineStageFlags
+  , -- | @srcAccessMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>.
+    srcAccessMask :: AccessFlags
+  , -- | @dstAccessMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>.
+    dstAccessMask :: AccessFlags
+  , -- | @dependencyFlags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits'.
+    dependencyFlags :: DependencyFlags
+  }
+  deriving (Typeable)
+deriving instance Show SubpassDependency
+
+instance ToCStruct SubpassDependency where
+  withCStruct x f = allocaBytesAligned 28 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SubpassDependency{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (srcSubpass)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (dstSubpass)
+    poke ((p `plusPtr` 8 :: Ptr PipelineStageFlags)) (srcStageMask)
+    poke ((p `plusPtr` 12 :: Ptr PipelineStageFlags)) (dstStageMask)
+    poke ((p `plusPtr` 16 :: Ptr AccessFlags)) (srcAccessMask)
+    poke ((p `plusPtr` 20 :: Ptr AccessFlags)) (dstAccessMask)
+    poke ((p `plusPtr` 24 :: Ptr DependencyFlags)) (dependencyFlags)
+    f
+  cStructSize = 28
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr PipelineStageFlags)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr PipelineStageFlags)) (zero)
+    f
+
+instance FromCStruct SubpassDependency where
+  peekCStruct p = do
+    srcSubpass <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    dstSubpass <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    srcStageMask <- peek @PipelineStageFlags ((p `plusPtr` 8 :: Ptr PipelineStageFlags))
+    dstStageMask <- peek @PipelineStageFlags ((p `plusPtr` 12 :: Ptr PipelineStageFlags))
+    srcAccessMask <- peek @AccessFlags ((p `plusPtr` 16 :: Ptr AccessFlags))
+    dstAccessMask <- peek @AccessFlags ((p `plusPtr` 20 :: Ptr AccessFlags))
+    dependencyFlags <- peek @DependencyFlags ((p `plusPtr` 24 :: Ptr DependencyFlags))
+    pure $ SubpassDependency
+             srcSubpass dstSubpass srcStageMask dstStageMask srcAccessMask dstAccessMask dependencyFlags
+
+instance Storable SubpassDependency where
+  sizeOf ~_ = 28
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SubpassDependency where
+  zero = SubpassDependency
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkRenderPassCreateInfo - Structure specifying parameters of a newly
+-- created render pass
+--
+-- = Description
+--
+-- Note
+--
+-- Care should be taken to avoid a data race here; if any subpasses access
+-- attachments with overlapping memory locations, and one of those accesses
+-- is a write, a subpass dependency needs to be included between them.
+--
+-- == Valid Usage
+--
+-- -   If the @attachment@ member of any element of @pInputAttachments@,
+--     @pColorAttachments@, @pResolveAttachments@ or
+--     @pDepthStencilAttachment@, or any element of @pPreserveAttachments@
+--     in any element of @pSubpasses@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it /must/ be less
+--     than @attachmentCount@
+--
+-- -   For any member of @pAttachments@ with a @loadOp@ equal to
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the
+--     first use of that attachment /must/ not specify a @layout@ equal to
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   For any member of @pAttachments@ with a @stencilLoadOp@ equal to
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the
+--     first use of that attachment /must/ not specify a @layout@ equal to
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   For any member of @pAttachments@ with a @loadOp@ equal to
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the
+--     first use of that attachment /must/ not specify a @layout@ equal to
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
+--
+-- -   For any member of @pAttachments@ with a @stencilLoadOp@ equal to
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the
+--     first use of that attachment /must/ not specify a @layout@ equal to
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo'
+--     structure, the @subpass@ member of each element of its
+--     @pAspectReferences@ member /must/ be less than @subpassCount@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo'
+--     structure, the @inputAttachmentIndex@ member of each element of its
+--     @pAspectReferences@ member /must/ be less than the value of
+--     @inputAttachmentCount@ in the member of @pSubpasses@ identified by
+--     its @subpass@ member
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo'
+--     structure, for any element of the @pInputAttachments@ member of any
+--     element of @pSubpasses@ where the @attachment@ member is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the @aspectMask@
+--     member of the corresponding element of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo'::@pAspectReferences@
+--     /must/ only include aspects that are present in images of the format
+--     specified by the element of @pAttachments@ at @attachment@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
+--     structure, and its @subpassCount@ member is not zero, that member
+--     /must/ be equal to the value of @subpassCount@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
+--     structure, if its @dependencyCount@ member is not zero, it /must/ be
+--     equal to @dependencyCount@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
+--     structure, for each non-zero element of @pViewOffsets@, the
+--     @srcSubpass@ and @dstSubpass@ members of @pDependencies@ at the same
+--     index /must/ not be equal
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
+--     structure, for any element of @pDependencies@ with a
+--     @dependencyFlags@ member that does not include
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
+--     the corresponding element of the @pViewOffsets@ member of that
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
+--     instance /must/ be @0@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
+--     structure, elements of its @pViewMasks@ member /must/ either all be
+--     @0@, or all not be @0@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
+--     structure, and each element of its @pViewMasks@ member is @0@, the
+--     @dependencyFlags@ member of each element of @pDependencies@ /must/
+--     not include
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
+--     structure, and each element of its @pViewMasks@ member is @0@,
+--     @correlatedViewMaskCount@ /must/ be @0@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
+--     structure, each element of its @pViewMask@ member /must/ not have a
+--     bit set at an index greater than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferLayers@
+--
+-- -   For any element of @pDependencies@, if the @srcSubpass@ is not
+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage flags
+--     included in the @srcStageMask@ member of that dependency /must/ be a
+--     pipeline stage supported by the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types pipeline>
+--     identified by the @pipelineBindPoint@ member of the source subpass
+--
+-- -   For any element of @pDependencies@, if the @dstSubpass@ is not
+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage flags
+--     included in the @dstStageMask@ member of that dependency /must/ be a
+--     pipeline stage supported by the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types pipeline>
+--     identified by the @pipelineBindPoint@ member of the destination
+--     subpass
+--
+-- -   The @srcSubpass@ member of each element of @pDependencies@ /must/ be
+--     less than @subpassCount@
+--
+-- -   The @dstSubpass@ member of each element of @pDependencies@ /must/ be
+--     less than @subpassCount@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo',
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlagBits'
+--     values
+--
+-- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
+--     pointer to an array of @attachmentCount@ valid
+--     'AttachmentDescription' structures
+--
+-- -   @pSubpasses@ /must/ be a valid pointer to an array of @subpassCount@
+--     valid 'SubpassDescription' structures
+--
+-- -   If @dependencyCount@ is not @0@, @pDependencies@ /must/ be a valid
+--     pointer to an array of @dependencyCount@ valid 'SubpassDependency'
+--     structures
+--
+-- -   @subpassCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'AttachmentDescription',
+-- 'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'SubpassDependency',
+-- 'SubpassDescription', 'createRenderPass'
+data RenderPassCreateInfo (es :: [Type]) = RenderPassCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlagBits'
+    flags :: RenderPassCreateFlags
+  , -- | @pAttachments@ is a pointer to an array of @attachmentCount@
+    -- 'AttachmentDescription' structures describing the attachments used by
+    -- the render pass.
+    attachments :: Vector AttachmentDescription
+  , -- | @pSubpasses@ is a pointer to an array of @subpassCount@
+    -- 'SubpassDescription' structures describing each subpass.
+    subpasses :: Vector SubpassDescription
+  , -- | @pDependencies@ is a pointer to an array of @dependencyCount@
+    -- 'SubpassDependency' structures describing dependencies between pairs of
+    -- subpasses.
+    dependencies :: Vector SubpassDependency
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (RenderPassCreateInfo es)
+
+instance Extensible RenderPassCreateInfo where
+  extensibleType = STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext RenderPassCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RenderPassCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @RenderPassFragmentDensityMapCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @RenderPassInputAttachmentAspectCreateInfo = Just f
+    | Just Refl <- eqT @e @RenderPassMultiviewCreateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss RenderPassCreateInfo es, PokeChain es) => ToCStruct (RenderPassCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RenderPassCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPassCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
+    pPAttachments' <- ContT $ allocaBytesAligned @AttachmentDescription ((Data.Vector.length (attachments)) * 36) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (36 * (i)) :: Ptr AttachmentDescription) (e) . ($ ())) (attachments)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AttachmentDescription))) (pPAttachments')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (subpasses)) :: Word32))
+    pPSubpasses' <- ContT $ allocaBytesAligned @SubpassDescription ((Data.Vector.length (subpasses)) * 72) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSubpasses' `plusPtr` (72 * (i)) :: Ptr SubpassDescription) (e) . ($ ())) (subpasses)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SubpassDescription))) (pPSubpasses')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (dependencies)) :: Word32))
+    pPDependencies' <- ContT $ allocaBytesAligned @SubpassDependency ((Data.Vector.length (dependencies)) * 28) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDependencies' `plusPtr` (28 * (i)) :: Ptr SubpassDependency) (e) . ($ ())) (dependencies)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency))) (pPDependencies')
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPAttachments' <- ContT $ allocaBytesAligned @AttachmentDescription ((Data.Vector.length (mempty)) * 36) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (36 * (i)) :: Ptr AttachmentDescription) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AttachmentDescription))) (pPAttachments')
+    pPSubpasses' <- ContT $ allocaBytesAligned @SubpassDescription ((Data.Vector.length (mempty)) * 72) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSubpasses' `plusPtr` (72 * (i)) :: Ptr SubpassDescription) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SubpassDescription))) (pPSubpasses')
+    pPDependencies' <- ContT $ allocaBytesAligned @SubpassDependency ((Data.Vector.length (mempty)) * 28) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDependencies' `plusPtr` (28 * (i)) :: Ptr SubpassDependency) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency))) (pPDependencies')
+    lift $ f
+
+instance (Extendss RenderPassCreateInfo es, PeekChain es) => FromCStruct (RenderPassCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @RenderPassCreateFlags ((p `plusPtr` 16 :: Ptr RenderPassCreateFlags))
+    attachmentCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pAttachments <- peek @(Ptr AttachmentDescription) ((p `plusPtr` 24 :: Ptr (Ptr AttachmentDescription)))
+    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peekCStruct @AttachmentDescription ((pAttachments `advancePtrBytes` (36 * (i)) :: Ptr AttachmentDescription)))
+    subpassCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pSubpasses <- peek @(Ptr SubpassDescription) ((p `plusPtr` 40 :: Ptr (Ptr SubpassDescription)))
+    pSubpasses' <- generateM (fromIntegral subpassCount) (\i -> peekCStruct @SubpassDescription ((pSubpasses `advancePtrBytes` (72 * (i)) :: Ptr SubpassDescription)))
+    dependencyCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pDependencies <- peek @(Ptr SubpassDependency) ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency)))
+    pDependencies' <- generateM (fromIntegral dependencyCount) (\i -> peekCStruct @SubpassDependency ((pDependencies `advancePtrBytes` (28 * (i)) :: Ptr SubpassDependency)))
+    pure $ RenderPassCreateInfo
+             next flags pAttachments' pSubpasses' pDependencies'
+
+instance es ~ '[] => Zero (RenderPassCreateInfo es) where
+  zero = RenderPassCreateInfo
+           ()
+           zero
+           mempty
+           mempty
+           mempty
+
+
+-- | VkFramebufferCreateInfo - Structure specifying parameters of a newly
+-- created framebuffer
+--
+-- = 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops load operations>
+-- for those attachments, or happen-after the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops store operations>
+-- for those attachments.
+--
+-- For depth\/stencil attachments, each aspect /can/ be used separately as
+-- attachments and non-attachments as long as the non-attachment accesses
+-- are also via an image subresource in either the
+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
+-- layout or the
+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
+-- layout, and the attachment resource uses whichever of those two layouts
+-- the image accesses do not. Use of non-attachment aspects in this case is
+-- only well defined if the attachment is used in the subpass where the
+-- non-attachment access is being made, or the layout of the image
+-- subresource is constant throughout the entire render pass instance,
+-- including the @initialLayout@ and @finalLayout@.
+--
+-- Note
+--
+-- These restrictions mean that the render pass has full knowledge of all
+-- uses of all of the attachments, so that the implementation is able to
+-- make correct decisions about when and how to perform layout transitions,
+-- when to overlap execution of subpasses, etc.
+--
+-- It is legal for a subpass to use no color or depth\/stencil attachments,
+-- either because it has no attachment references or because all of them
+-- are 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'. This kind of subpass
+-- /can/ 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
+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo' to define
+-- the number of samples used in rasterization; however, if
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures'::@variableMultisampleRate@
+-- is 'Vulkan.Core10.BaseType.FALSE', then all pipelines to be bound with
+-- the subpass /must/ have the same value for
+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@.
+--
+-- == Valid Usage
+--
+-- -   @attachmentCount@ /must/ be equal to the attachment count specified
+--     in @renderPass@
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     and @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
+--     pointer to an array of @attachmentCount@ valid
+--     'Vulkan.Core10.Handles.ImageView' handles
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of @pAttachments@ that is used as a color attachment or
+--     resolve attachment by @renderPass@ /must/ have been created with a
+--     @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of @pAttachments@ that is used as a depth\/stencil
+--     attachment by @renderPass@ /must/ have been created with a @usage@
+--     value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of @pAttachments@ that is used as a depth\/stencil
+--     resolve attachment by @renderPass@ /must/ have been created with a
+--     @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of @pAttachments@ that is used as an input attachment
+--     by @renderPass@ /must/ have been created with a @usage@ value
+--     including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
+--
+-- -   Each element of @pAttachments@ that is used as a fragment density
+--     map attachment by @renderPass@ /must/ not have been created with a
+--     @flags@ value including
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--
+-- -   If @renderPass@ has a fragment density map attachment and
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nonsubsampledimages non-subsample image feature>
+--     is not enabled, each element of @pAttachments@ /must/ have been
+--     created with a @flags@ value including
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'
+--     unless that element is the fragment density map attachment
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of @pAttachments@ /must/ have been created with a
+--     'Vulkan.Core10.Enums.Format.Format' value that matches the
+--     'Vulkan.Core10.Enums.Format.Format' specified by the corresponding
+--     'AttachmentDescription' in @renderPass@
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of @pAttachments@ /must/ have been created with a
+--     @samples@ value that matches the @samples@ value specified by the
+--     corresponding 'AttachmentDescription' in @renderPass@
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of @pAttachments@ /must/ have dimensions at least as
+--     large as the corresponding framebuffer dimension except for any
+--     element that is referenced by @fragmentDensityMapAttachment@
+--
+-- -   If @renderPass@ was specified with non-zero view masks, each element
+--     of @pAttachments@ that is not referenced by
+--     @fragmentDensityMapAttachment@ /must/ have a @layerCount@ greater
+--     than the index of the most significant bit set in any of those view
+--     masks
+--
+-- -   If @renderPass@ was specified with non-zero view masks, each element
+--     of @pAttachments@ that is referenced by
+--     @fragmentDensityMapAttachment@ /must/ have a @layerCount@ equal to
+--     @1@ or greater than the index of the most significant bit set in any
+--     of those view masks
+--
+-- -   If @renderPass@ was not specified with non-zero view masks, each
+--     element of @pAttachments@ that is referenced by
+--     @fragmentDensityMapAttachment@ /must/ have a @layerCount@ equal to
+--     @1@
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     an element of @pAttachments@ that is referenced by
+--     @fragmentDensityMapAttachment@ /must/ have a width at least as large
+--     as
+--     \(\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\rceil\)
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     an element of @pAttachments@ that is referenced by
+--     @fragmentDensityMapAttachment@ /must/ have a height at least as
+--     large as
+--     \(\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\rceil\)
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of @pAttachments@ /must/ only specify a single mip
+--     level
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of @pAttachments@ /must/ have been created with the
+--     identity swizzle
+--
+-- -   @width@ /must/ be greater than @0@
+--
+-- -   @width@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferWidth@
+--
+-- -   @height@ /must/ be greater than @0@
+--
+-- -   @height@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferHeight@
+--
+-- -   @layers@ /must/ be greater than @0@
+--
+-- -   @layers@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferLayers@
+--
+-- -   If @renderPass@ was specified with non-zero view masks, @layers@
+--     /must/ be @1@
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     each element of @pAttachments@ that is a 2D or 2D array image view
+--     taken from a 3D image /must/ not be a depth\/stencil format
+--
+-- -   If @flags@ does not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     and @attachmentCount@ is not 0, @pAttachments@ /must/ be a valid
+--     pointer to an array of @attachmentCount@ valid
+--     'Vulkan.Core10.Handles.ImageView' handles
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-imagelessFramebuffer imageless framebuffer>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @pNext@ chain /must/ include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @attachmentImageInfoCount@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain /must/ be equal to either
+--     zero or @attachmentCount@
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @width@ member of any element of the @pAttachmentImageInfos@
+--     member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain /must/ be greater than or
+--     equal to @width@, except for any element that is referenced by
+--     'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'::@fragmentDensityMapAttachment@
+--     in @renderPass@
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @height@ member of any element of the @pAttachmentImageInfos@
+--     member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain /must/ be greater than or
+--     equal to @height@, except for any element that is referenced by
+--     'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'::@fragmentDensityMapAttachment@
+--     in @renderPass@
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @width@ member of any element of the @pAttachmentImageInfos@
+--     member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain that is referenced by
+--     'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'::@fragmentDensityMapAttachment@
+--     in @renderPass@ /must/ be greater than or equal to
+--     \(\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\rceil\)
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @height@ member of any element of the @pAttachmentImageInfos@
+--     member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain that is referenced by
+--     'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'::@fragmentDensityMapAttachment@
+--     in @renderPass@ /must/ be greater than or equal to
+--     \(\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\rceil\)
+--
+-- -   If multiview is enabled for @renderPass@, and @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @layerCount@ member of any element of the
+--     @pAttachmentImageInfos@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain /must/ be greater than the
+--     maximum bit index set in the view mask in the subpasses in which it
+--     is used in @renderPass@
+--
+-- -   If multiview is not enabled for @renderPass@, and @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @layerCount@ member of any element of the
+--     @pAttachmentImageInfos@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain /must/ be greater than or
+--     equal to @layers@
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @usage@ member of any element of the @pAttachmentImageInfos@
+--     member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain that refers to an attachment
+--     used as a color attachment or resolve attachment by @renderPass@
+--     /must/ include
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @usage@ member of any element of the @pAttachmentImageInfos@
+--     member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain that refers to an attachment
+--     used as a depth\/stencil attachment by @renderPass@ /must/ include
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @usage@ member of any element of the @pAttachmentImageInfos@
+--     member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain that refers to an attachment
+--     used as a depth\/stencil resolve attachment by @renderPass@ /must/
+--     include
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     the @usage@ member of any element of the @pAttachmentImageInfos@
+--     member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain that refers to an attachment
+--     used as an input attachment by @renderPass@ /must/ include
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+--     at least one element of the @pViewFormats@ member of any element of
+--     the @pAttachmentImageInfos@ member of a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--     structure included in the @pNext@ chain /must/ be equal to the
+--     corresponding value of 'AttachmentDescription'::@format@ used to
+--     create @renderPass@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FramebufferCreateFlagBits'
+--     values
+--
+-- -   @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'
+--     handle
+--
+-- -   Both of @renderPass@, and the elements of @pAttachments@ that are
+--     valid handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FramebufferCreateFlags',
+-- 'Vulkan.Core10.Handles.ImageView', 'Vulkan.Core10.Handles.RenderPass',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createFramebuffer'
+data FramebufferCreateInfo (es :: [Type]) = FramebufferCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FramebufferCreateFlagBits'
+    flags :: FramebufferCreateFlags
+  , -- | @renderPass@ is a render pass defining what render passes the
+    -- framebuffer will be compatible with. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility Render Pass Compatibility>
+    -- for details.
+    renderPass :: RenderPass
+  , -- | @pAttachments@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.ImageView' handles, each of which will be used as
+    -- the corresponding attachment in a render pass instance. If @flags@
+    -- includes
+    -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',
+    -- this parameter is ignored.
+    attachments :: Vector ImageView
+  , -- | @width@, @height@ and @layers@ define the dimensions of the framebuffer.
+    -- If the render pass uses multiview, then @layers@ /must/ be one and each
+    -- attachment requires a number of layers that is greater than the maximum
+    -- bit index set in the view mask in the subpasses in which it is used.
+    width :: Word32
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "height"
+    height :: Word32
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "layers"
+    layers :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (FramebufferCreateInfo es)
+
+instance Extensible FramebufferCreateInfo where
+  extensibleType = STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext FramebufferCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends FramebufferCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @FramebufferAttachmentsCreateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss FramebufferCreateInfo es, PokeChain es) => ToCStruct (FramebufferCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p FramebufferCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr FramebufferCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 24 :: Ptr RenderPass)) (renderPass)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
+    pPAttachments' <- ContT $ allocaBytesAligned @ImageView ((Data.Vector.length (attachments)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAttachments' `plusPtr` (8 * (i)) :: Ptr ImageView) (e)) (attachments)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr ImageView))) (pPAttachments')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (width)
+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (height)
+    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (layers)
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 24 :: Ptr RenderPass)) (zero)
+    pPAttachments' <- ContT $ allocaBytesAligned @ImageView ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAttachments' `plusPtr` (8 * (i)) :: Ptr ImageView) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr ImageView))) (pPAttachments')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance (Extendss FramebufferCreateInfo es, PeekChain es) => FromCStruct (FramebufferCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @FramebufferCreateFlags ((p `plusPtr` 16 :: Ptr FramebufferCreateFlags))
+    renderPass <- peek @RenderPass ((p `plusPtr` 24 :: Ptr RenderPass))
+    attachmentCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pAttachments <- peek @(Ptr ImageView) ((p `plusPtr` 40 :: Ptr (Ptr ImageView)))
+    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peek @ImageView ((pAttachments `advancePtrBytes` (8 * (i)) :: Ptr ImageView)))
+    width <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    height <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
+    layers <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    pure $ FramebufferCreateInfo
+             next flags renderPass pAttachments' width height layers
+
+instance es ~ '[] => Zero (FramebufferCreateInfo es) where
+  zero = FramebufferCreateInfo
+           ()
+           zero
+           zero
+           mempty
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/Pass.hs-boot b/src/Vulkan/Core10/Pass.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Pass.hs-boot
@@ -0,0 +1,65 @@
+{-# language CPP #-}
+module Vulkan.Core10.Pass  ( AttachmentDescription
+                           , AttachmentReference
+                           , FramebufferCreateInfo
+                           , RenderPassCreateInfo
+                           , SubpassDependency
+                           , SubpassDescription
+                           ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data AttachmentDescription
+
+instance ToCStruct AttachmentDescription
+instance Show AttachmentDescription
+
+instance FromCStruct AttachmentDescription
+
+
+data AttachmentReference
+
+instance ToCStruct AttachmentReference
+instance Show AttachmentReference
+
+instance FromCStruct AttachmentReference
+
+
+type role FramebufferCreateInfo nominal
+data FramebufferCreateInfo (es :: [Type])
+
+instance (Extendss FramebufferCreateInfo es, PokeChain es) => ToCStruct (FramebufferCreateInfo es)
+instance Show (Chain es) => Show (FramebufferCreateInfo es)
+
+instance (Extendss FramebufferCreateInfo es, PeekChain es) => FromCStruct (FramebufferCreateInfo es)
+
+
+type role RenderPassCreateInfo nominal
+data RenderPassCreateInfo (es :: [Type])
+
+instance (Extendss RenderPassCreateInfo es, PokeChain es) => ToCStruct (RenderPassCreateInfo es)
+instance Show (Chain es) => Show (RenderPassCreateInfo es)
+
+instance (Extendss RenderPassCreateInfo es, PeekChain es) => FromCStruct (RenderPassCreateInfo es)
+
+
+data SubpassDependency
+
+instance ToCStruct SubpassDependency
+instance Show SubpassDependency
+
+instance FromCStruct SubpassDependency
+
+
+data SubpassDescription
+
+instance ToCStruct SubpassDescription
+instance Show SubpassDescription
+
+instance FromCStruct SubpassDescription
+
diff --git a/src/Vulkan/Core10/Pipeline.hs b/src/Vulkan/Core10/Pipeline.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Pipeline.hs
@@ -0,0 +1,3528 @@
+{-# language CPP #-}
+module Vulkan.Core10.Pipeline  ( createGraphicsPipelines
+                               , withGraphicsPipelines
+                               , createComputePipelines
+                               , withComputePipelines
+                               , destroyPipeline
+                               , SpecializationMapEntry(..)
+                               , SpecializationInfo(..)
+                               , PipelineShaderStageCreateInfo(..)
+                               , ComputePipelineCreateInfo(..)
+                               , VertexInputBindingDescription(..)
+                               , VertexInputAttributeDescription(..)
+                               , PipelineVertexInputStateCreateInfo(..)
+                               , PipelineInputAssemblyStateCreateInfo(..)
+                               , PipelineTessellationStateCreateInfo(..)
+                               , PipelineViewportStateCreateInfo(..)
+                               , PipelineRasterizationStateCreateInfo(..)
+                               , PipelineMultisampleStateCreateInfo(..)
+                               , PipelineColorBlendAttachmentState(..)
+                               , PipelineColorBlendStateCreateInfo(..)
+                               , PipelineDynamicStateCreateInfo(..)
+                               , StencilOpState(..)
+                               , PipelineDepthStencilStateCreateInfo(..)
+                               , GraphicsPipelineCreateInfo(..)
+                               ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Foldable (traverse_)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (maybePeek)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import qualified Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.ByteString (packCString)
+import Data.ByteString (useAsCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Extends (peekSomeCStruct)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.CStruct.Extends (withSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Enums.BlendFactor (BlendFactor)
+import Vulkan.Core10.Enums.BlendOp (BlendOp)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlags)
+import Vulkan.Core10.Enums.CompareOp (CompareOp)
+import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlags)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateComputePipelines))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateGraphicsPipelines))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyPipeline))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.Enums.DynamicState (DynamicState)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.FrontFace (FrontFace)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsPipelineShaderGroupsCreateInfoNV)
+import Vulkan.Core10.Enums.LogicOp (LogicOp)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (Pipeline)
+import Vulkan.Core10.Handles (Pipeline(..))
+import Vulkan.Core10.Handles (PipelineCache)
+import Vulkan.Core10.Handles (PipelineCache(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PipelineColorBlendAdvancedStateCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags (PipelineColorBlendStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_pipeline_compiler_control (PipelineCompilerControlCreateInfoAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_framebuffer_mixed_samples (PipelineCoverageModulationStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (PipelineCoverageReductionStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_coverage_to_color (PipelineCoverageToColorStateCreateInfoNV)
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags (PipelineDepthStencilStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PipelineDiscardRectangleStateCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags (PipelineDynamicStateCreateFlags)
+import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags (PipelineInputAssemblyStateCreateFlags)
+import Vulkan.Core10.Handles (PipelineLayout)
+import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags (PipelineMultisampleStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conservative_rasterization (PipelineRasterizationConservativeStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PipelineRasterizationDepthClipStateCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PipelineRasterizationLineStateCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_rasterization_order (PipelineRasterizationStateRasterizationOrderAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PipelineRasterizationStateStreamCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PipelineRepresentativeFragmentTestStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (PipelineSampleLocationsStateCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subgroup_size_control (PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PipelineTessellationDomainOriginStateCreateInfo)
+import Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags (PipelineTessellationStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PipelineVertexInputDivisorStateCreateInfoEXT)
+import Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags (PipelineVertexInputStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportCoarseSampleOrderStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PipelineViewportExclusiveScissorStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportShadingRateImageStateCreateInfoNV)
+import Vulkan.Core10.Enums.PipelineViewportStateCreateFlags (PipelineViewportStateCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_viewport_swizzle (PipelineViewportSwizzleStateCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_clip_space_w_scaling (PipelineViewportWScalingStateCreateInfoNV)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.PolygonMode (PolygonMode)
+import Vulkan.Core10.Enums.PrimitiveTopology (PrimitiveTopology)
+import Vulkan.Core10.CommandBufferBuilding (Rect2D)
+import Vulkan.Core10.Handles (RenderPass)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits(SampleCountFlagBits))
+import Vulkan.Core10.BaseType (SampleMask)
+import Vulkan.Core10.Handles (ShaderModule)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits)
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.CStruct.Extends (SomeStruct(..))
+import Vulkan.Core10.Enums.StencilOp (StencilOp)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Core10.Enums.VertexInputRate (VertexInputRate)
+import Vulkan.Core10.CommandBufferBuilding (Viewport)
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateGraphicsPipelines
+  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (GraphicsPipelineCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (GraphicsPipelineCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
+
+-- | vkCreateGraphicsPipelines - Create graphics pipelines
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the graphics pipelines.
+--
+-- -   @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     indicating that pipeline caching is disabled; or the handle of a
+--     valid
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>
+--     object, in which case use of that cache is enabled for the duration
+--     of the command.
+--
+-- -   @createInfoCount@ is the length of the @pCreateInfos@ and
+--     @pPipelines@ arrays.
+--
+-- -   @pCreateInfos@ is a pointer to an array of
+--     'GraphicsPipelineCreateInfo' structures.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pPipelines@ is a pointer to an array of
+--     'Vulkan.Core10.Handles.Pipeline' handles in which the resulting
+--     graphics pipeline objects are returned.
+--
+-- = Description
+--
+-- The 'GraphicsPipelineCreateInfo' structure includes an array of shader
+-- create info structures containing all the desired active shader stages,
+-- as well as creation info to define all relevant fixed-function stages,
+-- and a pipeline layout.
+--
+-- == Valid Usage
+--
+-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and the @basePipelineIndex@ member of that same element is not
+--     @-1@, @basePipelineIndex@ /must/ be less than the index into
+--     @pCreateInfos@ that corresponds to that element
+--
+-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, the base pipeline /must/ have been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
+--     flag set
+--
+-- -   If @pipelineCache@ was created with
+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
+--     host access to @pipelineCache@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
+--
+-- Note
+--
+-- An implicit cache may be provided by the implementation or a layer. For
+-- this reason, it is still valid to set
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
+-- on @flags@ for any element of @pCreateInfos@ while passing
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' for @pipelineCache@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pipelineCache@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineCache' handle
+--
+-- -   @pCreateInfos@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ valid 'GraphicsPipelineCreateInfo' structures
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pPipelines@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles
+--
+-- -   @createInfoCount@ /must/ be greater than @0@
+--
+-- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'
+createGraphicsPipelines :: forall io . MonadIO io => Device -> PipelineCache -> ("createInfos" ::: Vector (SomeStruct GraphicsPipelineCreateInfo)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, ("pipelines" ::: Vector Pipeline))
+createGraphicsPipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do
+  let vkCreateGraphicsPipelinesPtr = pVkCreateGraphicsPipelines (deviceCmds (device :: Device))
+  lift $ unless (vkCreateGraphicsPipelinesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateGraphicsPipelines is null" Nothing Nothing
+  let vkCreateGraphicsPipelines' = mkVkCreateGraphicsPipelines vkCreateGraphicsPipelinesPtr
+  pPCreateInfos <- ContT $ allocaBytesAligned @(GraphicsPipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 144) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (144 * (i)) :: Ptr (GraphicsPipelineCreateInfo _))) (e) . ($ ())) (createInfos)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
+  r <- lift $ vkCreateGraphicsPipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (pPCreateInfos) pAllocator (pPPipelines)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
+  pure $ (r, pPipelines)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createGraphicsPipelines' and 'destroyPipeline'
+--
+-- To ensure that 'destroyPipeline' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withGraphicsPipelines :: forall io r . MonadIO io => Device -> PipelineCache -> Vector (SomeStruct GraphicsPipelineCreateInfo) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r
+withGraphicsPipelines device pipelineCache pCreateInfos pAllocator b =
+  b (createGraphicsPipelines device pipelineCache pCreateInfos pAllocator)
+    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateComputePipelines
+  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (ComputePipelineCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (ComputePipelineCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
+
+-- | vkCreateComputePipelines - Creates a new compute pipeline object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the compute pipelines.
+--
+-- -   @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     indicating that pipeline caching is disabled; or the handle of a
+--     valid
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>
+--     object, in which case use of that cache is enabled for the duration
+--     of the command.
+--
+-- -   @createInfoCount@ is the length of the @pCreateInfos@ and
+--     @pPipelines@ arrays.
+--
+-- -   @pCreateInfos@ is a pointer to an array of
+--     'ComputePipelineCreateInfo' structures.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pPipelines@ is a pointer to an array of
+--     'Vulkan.Core10.Handles.Pipeline' handles in which the resulting
+--     compute pipeline objects are returned.
+--
+-- == Valid Usage
+--
+-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and the @basePipelineIndex@ member of that same element is not
+--     @-1@, @basePipelineIndex@ /must/ be less than the index into
+--     @pCreateInfos@ that corresponds to that element
+--
+-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, the base pipeline /must/ have been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
+--     flag set
+--
+-- -   If @pipelineCache@ was created with
+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
+--     host access to @pipelineCache@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pipelineCache@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineCache' handle
+--
+-- -   @pCreateInfos@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ valid 'ComputePipelineCreateInfo' structures
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pPipelines@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles
+--
+-- -   @createInfoCount@ /must/ be greater than @0@
+--
+-- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'ComputePipelineCreateInfo', 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'
+createComputePipelines :: forall io . MonadIO io => Device -> PipelineCache -> ("createInfos" ::: Vector (SomeStruct ComputePipelineCreateInfo)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, ("pipelines" ::: Vector Pipeline))
+createComputePipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do
+  let vkCreateComputePipelinesPtr = pVkCreateComputePipelines (deviceCmds (device :: Device))
+  lift $ unless (vkCreateComputePipelinesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateComputePipelines is null" Nothing Nothing
+  let vkCreateComputePipelines' = mkVkCreateComputePipelines vkCreateComputePipelinesPtr
+  pPCreateInfos <- ContT $ allocaBytesAligned @(ComputePipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 96) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (96 * (i)) :: Ptr (ComputePipelineCreateInfo _))) (e) . ($ ())) (createInfos)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
+  r <- lift $ vkCreateComputePipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (pPCreateInfos) pAllocator (pPPipelines)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
+  pure $ (r, pPipelines)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createComputePipelines' and 'destroyPipeline'
+--
+-- To ensure that 'destroyPipeline' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withComputePipelines :: forall io r . MonadIO io => Device -> PipelineCache -> Vector (SomeStruct ComputePipelineCreateInfo) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r
+withComputePipelines device pipelineCache pCreateInfos pAllocator b =
+  b (createComputePipelines device pipelineCache pCreateInfos pAllocator)
+    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyPipeline
+  :: FunPtr (Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyPipeline - Destroy a pipeline object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @pipeline@ /must/ have
+--     completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @pipeline@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @pipeline@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @pipeline@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @pipeline@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pipeline@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'
+destroyPipeline :: forall io . MonadIO io => Device -> Pipeline -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyPipeline device pipeline allocator = liftIO . evalContT $ do
+  let vkDestroyPipelinePtr = pVkDestroyPipeline (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyPipelinePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyPipeline is null" Nothing Nothing
+  let vkDestroyPipeline' = mkVkDestroyPipeline vkDestroyPipelinePtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyPipeline' (deviceHandle (device)) (pipeline) pAllocator
+  pure $ ()
+
+
+-- | VkSpecializationMapEntry - Structure specifying a specialization map
+-- entry
+--
+-- = Description
+--
+-- If a @constantID@ value is not a specialization constant ID used in the
+-- shader, that map entry does not affect the behavior of the pipeline.
+--
+-- == Valid Usage
+--
+-- -   For a @constantID@ specialization constant declared in a shader,
+--     @size@ /must/ match the byte size of the @constantID@. If the
+--     specialization constant is of type @boolean@, @size@ /must/ be the
+--     byte size of 'Vulkan.Core10.BaseType.Bool32'
+--
+-- = See Also
+--
+-- 'SpecializationInfo'
+data SpecializationMapEntry = SpecializationMapEntry
+  { -- | @constantID@ is the ID of the specialization constant in SPIR-V.
+    constantID :: Word32
+  , -- | @offset@ is the byte offset of the specialization constant value within
+    -- the supplied data buffer.
+    offset :: Word32
+  , -- | @size@ is the byte size of the specialization constant value within the
+    -- supplied data buffer.
+    size :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show SpecializationMapEntry
+
+instance ToCStruct SpecializationMapEntry where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SpecializationMapEntry{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (constantID)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (offset)
+    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (size))
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (zero))
+    f
+
+instance FromCStruct SpecializationMapEntry where
+  peekCStruct p = do
+    constantID <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    offset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    size <- peek @CSize ((p `plusPtr` 8 :: Ptr CSize))
+    pure $ SpecializationMapEntry
+             constantID offset ((\(CSize a) -> a) size)
+
+instance Storable SpecializationMapEntry where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SpecializationMapEntry where
+  zero = SpecializationMapEntry
+           zero
+           zero
+           zero
+
+
+-- | VkSpecializationInfo - Structure specifying specialization info
+--
+-- = Description
+--
+-- @pMapEntries@ is a pointer to a 'SpecializationMapEntry' structure.
+--
+-- == Valid Usage
+--
+-- -   The @offset@ member of each element of @pMapEntries@ /must/ be less
+--     than @dataSize@
+--
+-- -   The @size@ member of each element of @pMapEntries@ /must/ be less
+--     than or equal to @dataSize@ minus @offset@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @mapEntryCount@ is not @0@, @pMapEntries@ /must/ be a valid
+--     pointer to an array of @mapEntryCount@ valid
+--     'SpecializationMapEntry' structures
+--
+-- -   If @dataSize@ is not @0@, @pData@ /must/ be a valid pointer to an
+--     array of @dataSize@ bytes
+--
+-- = See Also
+--
+-- 'PipelineShaderStageCreateInfo', 'SpecializationMapEntry'
+data SpecializationInfo = SpecializationInfo
+  { -- | @pMapEntries@ is a pointer to an array of 'SpecializationMapEntry'
+    -- structures which map constant IDs to offsets in @pData@.
+    mapEntries :: Vector SpecializationMapEntry
+  , -- | @dataSize@ is the byte size of the @pData@ buffer.
+    dataSize :: Word64
+  , -- | @pData@ contains the actual constant values to specialize with.
+    data' :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show SpecializationInfo
+
+instance ToCStruct SpecializationInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SpecializationInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (mapEntries)) :: Word32))
+    pPMapEntries' <- ContT $ allocaBytesAligned @SpecializationMapEntry ((Data.Vector.length (mapEntries)) * 16) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMapEntries' `plusPtr` (16 * (i)) :: Ptr SpecializationMapEntry) (e) . ($ ())) (mapEntries)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry))) (pPMapEntries')
+    lift $ poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (dataSize))
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (data')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    pPMapEntries' <- ContT $ allocaBytesAligned @SpecializationMapEntry ((Data.Vector.length (mempty)) * 16) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMapEntries' `plusPtr` (16 * (i)) :: Ptr SpecializationMapEntry) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry))) (pPMapEntries')
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
+    lift $ f
+
+instance FromCStruct SpecializationInfo where
+  peekCStruct p = do
+    mapEntryCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    pMapEntries <- peek @(Ptr SpecializationMapEntry) ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry)))
+    pMapEntries' <- generateM (fromIntegral mapEntryCount) (\i -> peekCStruct @SpecializationMapEntry ((pMapEntries `advancePtrBytes` (16 * (i)) :: Ptr SpecializationMapEntry)))
+    dataSize <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))
+    pData <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
+    pure $ SpecializationInfo
+             pMapEntries' ((\(CSize a) -> a) dataSize) pData
+
+instance Zero SpecializationInfo where
+  zero = SpecializationInfo
+           mempty
+           zero
+           zero
+
+
+-- | VkPipelineShaderStageCreateInfo - Structure specifying parameters of a
+-- newly created pipeline shader stage
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @stage@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @stage@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shader>
+--     feature is not enabled, @stage@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shader>
+--     feature is not enabled, @stage@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'
+--
+-- -   @stage@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL_GRAPHICS',
+--     or 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL'
+--
+-- -   @pName@ /must/ be the name of an @OpEntryPoint@ in @module@ with an
+--     execution model that matches @stage@
+--
+-- -   If the identified entry point includes any variable in its interface
+--     that is declared with the @ClipDistance@ @BuiltIn@ decoration, that
+--     variable /must/ not have an array size greater than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxClipDistances@
+--
+-- -   If the identified entry point includes any variable in its interface
+--     that is declared with the @CullDistance@ @BuiltIn@ decoration, that
+--     variable /must/ not have an array size greater than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCullDistances@
+--
+-- -   If the identified entry point includes any variables in its
+--     interface that are declared with the @ClipDistance@ or
+--     @CullDistance@ @BuiltIn@ decoration, those variables /must/ not have
+--     array sizes which sum to more than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCombinedClipAndCullDistances@
+--
+-- -   If the identified entry point includes any variable in its interface
+--     that is declared with the 'Vulkan.Core10.BaseType.SampleMask'
+--     @BuiltIn@ decoration, that variable /must/ not have an array size
+--     greater than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSampleMaskWords@
+--
+-- -   If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',
+--     the identified entry point /must/ not include any input variable in
+--     its interface that is decorated with @CullDistance@
+--
+-- -   If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',
+--     and the identified entry point has an @OpExecutionMode@ instruction
+--     that specifies a patch size with @OutputVertices@, the patch size
+--     /must/ be greater than @0@ and less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@
+--
+-- -   If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',
+--     the identified entry point /must/ have an @OpExecutionMode@
+--     instruction that specifies a maximum output vertex count that is
+--     greater than @0@ and less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryOutputVertices@
+--
+-- -   If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',
+--     the identified entry point /must/ have an @OpExecutionMode@
+--     instruction that specifies an invocation count that is greater than
+--     @0@ and less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryShaderInvocations@
+--
+-- -   If @stage@ is a vertex processing stage, and the identified entry
+--     point writes to @Layer@ for any primitive, it /must/ write the same
+--     value to @Layer@ for all vertices of a given primitive
+--
+-- -   If @stage@ is a vertex processing stage, and the identified entry
+--     point writes to @ViewportIndex@ for any primitive, it /must/ write
+--     the same value to @ViewportIndex@ for all vertices of a given
+--     primitive
+--
+-- -   If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
+--     the identified entry point /must/ not include any output variables
+--     in its interface decorated with @CullDistance@
+--
+-- -   If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
+--     and the identified entry point writes to @FragDepth@ in any
+--     execution path, it /must/ write to @FragDepth@ in all execution
+--     paths
+--
+-- -   If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
+--     and the identified entry point writes to @FragStencilRefEXT@ in any
+--     execution path, it /must/ write to @FragStencilRefEXT@ in all
+--     execution paths
+--
+-- -   If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',
+--     the identified entry point /must/ have an @OpExecutionMode@
+--     instruction that specifies a maximum output vertex count,
+--     @OutputVertices@, that is greater than @0@ and less than or equal to
+--     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputVertices@
+--
+-- -   If @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',
+--     the identified entry point /must/ have an @OpExecutionMode@
+--     instruction that specifies a maximum output primitive count,
+--     @OutputPrimitivesNV@, that is greater than @0@ and less than or
+--     equal to
+--     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputPrimitives@
+--
+-- -   If @flags@ has the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
+--     flag set, the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>
+--     feature /must/ be enabled
+--
+-- -   If @flags@ has the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'
+--     flag set, the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-computeFullSubgroups computeFullSubgroups>
+--     feature /must/ be enabled
+--
+-- -   If a
+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
+--     structure is included in the @pNext@ chain, @flags@ /must/ not have
+--     the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
+--     flag set
+--
+-- -   If a
+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
+--     structure is included in the @pNext@ chain, the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>
+--     feature /must/ be enabled, and @stage@ /must/ be a valid bit
+--     specified in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-required-subgroup-size-stages requiredSubgroupSizeStages>
+--
+-- -   If a
+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
+--     structure is included in the @pNext@ chain and @stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT',
+--     the local workgroup size of the shader /must/ be less than or equal
+--     to the product of
+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'::@requiredSubgroupSize@
+--     and
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroups-per-workgroup maxComputeWorkgroupSubgroups>
+--
+-- -   If a
+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
+--     structure is included in the @pNext@ chain, and @flags@ has the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'
+--     flag set, the local workgroup size in the X dimension of the
+--     pipeline /must/ be a multiple of
+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'::@requiredSubgroupSize@
+--
+-- -   If @flags@ has both the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'
+--     and
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
+--     flags set, the local workgroup size in the X dimension of the
+--     pipeline /must/ be a multiple of
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size maxSubgroupSize>
+--
+-- -   If @flags@ has the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'
+--     flag set and @flags@ does not have the
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
+--     flag set and no
+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
+--     structure is included in the @pNext@ chain, the local workgroup size
+--     in the X dimension of the pipeline /must/ be a multiple of
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'
+--     values
+--
+-- -   @stage@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value
+--
+-- -   @module@ /must/ be a valid 'Vulkan.Core10.Handles.ShaderModule'
+--     handle
+--
+-- -   @pName@ /must/ be a null-terminated UTF-8 string
+--
+-- -   If @pSpecializationInfo@ is not @NULL@, @pSpecializationInfo@ /must/
+--     be a valid pointer to a valid 'SpecializationInfo' structure
+--
+-- = See Also
+--
+-- 'ComputePipelineCreateInfo', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
+-- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlags',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
+-- 'Vulkan.Core10.Handles.ShaderModule',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits',
+-- 'SpecializationInfo', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineShaderStageCreateInfo (es :: [Type]) = PipelineShaderStageCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'
+    -- specifying how the pipeline shader stage will be generated.
+    flags :: PipelineShaderStageCreateFlags
+  , -- | @stage@ is a
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value
+    -- specifying a single pipeline stage.
+    stage :: ShaderStageFlagBits
+  , -- | @module@ is a 'Vulkan.Core10.Handles.ShaderModule' object containing the
+    -- shader for this stage.
+    module' :: ShaderModule
+  , -- | @pName@ is a pointer to a null-terminated UTF-8 string specifying the
+    -- entry point name of the shader for this stage.
+    name :: ByteString
+  , -- | @pSpecializationInfo@ is a pointer to a 'SpecializationInfo' structure,
+    -- as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-specialization-constants Specialization Constants>,
+    -- or @NULL@.
+    specializationInfo :: Maybe SpecializationInfo
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PipelineShaderStageCreateInfo es)
+
+instance Extensible PipelineShaderStageCreateInfo where
+  extensibleType = STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext PipelineShaderStageCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineShaderStageCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineShaderStageCreateInfo es, PokeChain es) => ToCStruct (PipelineShaderStageCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineShaderStageCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (stage)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (module')
+    pName'' <- ContT $ useAsCString (name)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''
+    pSpecializationInfo'' <- case (specializationInfo) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo))) pSpecializationInfo''
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (zero)
+    pName'' <- ContT $ useAsCString (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''
+    lift $ f
+
+instance (Extendss PipelineShaderStageCreateInfo es, PeekChain es) => FromCStruct (PipelineShaderStageCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineShaderStageCreateFlags ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags))
+    stage <- peek @ShaderStageFlagBits ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits))
+    module' <- peek @ShaderModule ((p `plusPtr` 24 :: Ptr ShaderModule))
+    pName <- packCString =<< peek ((p `plusPtr` 32 :: Ptr (Ptr CChar)))
+    pSpecializationInfo <- peek @(Ptr SpecializationInfo) ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo)))
+    pSpecializationInfo' <- maybePeek (\j -> peekCStruct @SpecializationInfo (j)) pSpecializationInfo
+    pure $ PipelineShaderStageCreateInfo
+             next flags stage module' pName pSpecializationInfo'
+
+instance es ~ '[] => Zero (PipelineShaderStageCreateInfo es) where
+  zero = PipelineShaderStageCreateInfo
+           ()
+           zero
+           zero
+           zero
+           mempty
+           Nothing
+
+
+-- | VkComputePipelineCreateInfo - Structure specifying parameters of a newly
+-- created compute pipeline
+--
+-- = Description
+--
+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
+-- described in more detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
+--
+-- == Valid Usage
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be
+--     a valid handle to a compute 'Vulkan.Core10.Handles.Pipeline'
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be a valid index into the calling command’s @pCreateInfos@ parameter
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/
+--     be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be -1
+--
+-- -   The @stage@ member of @stage@ /must/ be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
+--
+-- -   The shader code for the entry point identified by @stage@ and the
+--     rest of the state identified by this structure /must/ adhere to the
+--     pipeline linking rules described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>
+--     chapter
+--
+-- -   @layout@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
+--     with the layout of the compute shader specified in @stage@
+--
+-- -   The number of resources in @layout@ accessible to the compute shader
+--     stage /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD'
+--     or
+--     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+--     values
+--
+-- -   @stage@ /must/ be a valid 'PipelineShaderStageCreateInfo' structure
+--
+-- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'
+--     handle
+--
+-- -   Both of @basePipelineHandle@, and @layout@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
+-- 'Vulkan.Core10.Handles.PipelineLayout', 'PipelineShaderStageCreateInfo',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createComputePipelines'
+data ComputePipelineCreateInfo (es :: [Type]) = ComputePipelineCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+    -- specifying how the pipeline will be generated.
+    flags :: PipelineCreateFlags
+  , -- | @stage@ is a 'PipelineShaderStageCreateInfo' structure describing the
+    -- compute shader.
+    stage :: SomeStruct PipelineShaderStageCreateInfo
+  , -- | @layout@ is the description of binding locations used by both the
+    -- pipeline and descriptor sets used with the pipeline.
+    layout :: PipelineLayout
+  , -- | @basePipelineHandle@ is a pipeline to derive from
+    basePipelineHandle :: Pipeline
+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
+    -- as a pipeline to derive from
+    basePipelineIndex :: Int32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (ComputePipelineCreateInfo es)
+
+instance Extensible ComputePipelineCreateInfo where
+  extensibleType = STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext ComputePipelineCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ComputePipelineCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f
+    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss ComputePipelineCreateInfo es, PokeChain es) => ToCStruct (ComputePipelineCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ComputePipelineCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
+    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) (stage) . ($ ())
+    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (layout)
+    lift $ poke ((p `plusPtr` 80 :: Ptr Pipeline)) (basePipelineHandle)
+    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (basePipelineIndex)
+    lift $ f
+  cStructSize = 96
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) ((SomeStruct zero)) . ($ ())
+    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (zero)
+    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (zero)
+    lift $ f
+
+instance (Extendss ComputePipelineCreateInfo es, PeekChain es) => FromCStruct (ComputePipelineCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
+    stage <- peekSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo a))))
+    layout <- peek @PipelineLayout ((p `plusPtr` 72 :: Ptr PipelineLayout))
+    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 80 :: Ptr Pipeline))
+    basePipelineIndex <- peek @Int32 ((p `plusPtr` 88 :: Ptr Int32))
+    pure $ ComputePipelineCreateInfo
+             next flags stage layout basePipelineHandle basePipelineIndex
+
+instance es ~ '[] => Zero (ComputePipelineCreateInfo es) where
+  zero = ComputePipelineCreateInfo
+           ()
+           zero
+           (SomeStruct zero)
+           zero
+           zero
+           zero
+
+
+-- | VkVertexInputBindingDescription - Structure specifying vertex input
+-- binding description
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PipelineVertexInputStateCreateInfo',
+-- 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'
+data VertexInputBindingDescription = VertexInputBindingDescription
+  { -- | @binding@ /must/ be less than
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+    binding :: Word32
+  , -- | @stride@ /must/ be less than or equal to
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindingStride@
+    stride :: Word32
+  , -- | @inputRate@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate' value
+    inputRate :: VertexInputRate
+  }
+  deriving (Typeable)
+deriving instance Show VertexInputBindingDescription
+
+instance ToCStruct VertexInputBindingDescription where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p VertexInputBindingDescription{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (binding)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (stride)
+    poke ((p `plusPtr` 8 :: Ptr VertexInputRate)) (inputRate)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr VertexInputRate)) (zero)
+    f
+
+instance FromCStruct VertexInputBindingDescription where
+  peekCStruct p = do
+    binding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    stride <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    inputRate <- peek @VertexInputRate ((p `plusPtr` 8 :: Ptr VertexInputRate))
+    pure $ VertexInputBindingDescription
+             binding stride inputRate
+
+instance Storable VertexInputBindingDescription where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero VertexInputBindingDescription where
+  zero = VertexInputBindingDescription
+           zero
+           zero
+           zero
+
+
+-- | VkVertexInputAttributeDescription - Structure specifying vertex input
+-- attribute description
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'PipelineVertexInputStateCreateInfo'
+data VertexInputAttributeDescription = VertexInputAttributeDescription
+  { -- | @location@ /must/ be less than
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@
+    location :: Word32
+  , -- | @binding@ /must/ be less than
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+    binding :: Word32
+  , -- | @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+    format :: Format
+  , -- | @offset@ /must/ be less than or equal to
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributeOffset@
+    offset :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show VertexInputAttributeDescription
+
+instance ToCStruct VertexInputAttributeDescription where
+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p VertexInputAttributeDescription{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (location)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (binding)
+    poke ((p `plusPtr` 8 :: Ptr Format)) (format)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (offset)
+    f
+  cStructSize = 16
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Format)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct VertexInputAttributeDescription where
+  peekCStruct p = do
+    location <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    binding <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    format <- peek @Format ((p `plusPtr` 8 :: Ptr Format))
+    offset <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    pure $ VertexInputAttributeDescription
+             location binding format offset
+
+instance Storable VertexInputAttributeDescription where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero VertexInputAttributeDescription where
+  zero = VertexInputAttributeDescription
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineVertexInputStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline vertex input state
+--
+-- == Valid Usage
+--
+-- -   @vertexBindingDescriptionCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+--
+-- -   @vertexAttributeDescriptionCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@
+--
+-- -   For every @binding@ specified by each element of
+--     @pVertexAttributeDescriptions@, a 'VertexInputBindingDescription'
+--     /must/ exist in @pVertexBindingDescriptions@ with the same value of
+--     @binding@
+--
+-- -   All elements of @pVertexBindingDescriptions@ /must/ describe
+--     distinct binding numbers
+--
+-- -   All elements of @pVertexAttributeDescriptions@ /must/ describe
+--     distinct attribute locations
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PipelineVertexInputDivisorStateCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @vertexBindingDescriptionCount@ is not @0@,
+--     @pVertexBindingDescriptions@ /must/ be a valid pointer to an array
+--     of @vertexBindingDescriptionCount@ valid
+--     'VertexInputBindingDescription' structures
+--
+-- -   If @vertexAttributeDescriptionCount@ is not @0@,
+--     @pVertexAttributeDescriptions@ /must/ be a valid pointer to an array
+--     of @vertexAttributeDescriptionCount@ valid
+--     'VertexInputAttributeDescription' structures
+--
+-- = See Also
+--
+-- 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
+-- 'Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags.PipelineVertexInputStateCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'VertexInputAttributeDescription', 'VertexInputBindingDescription'
+data PipelineVertexInputStateCreateInfo (es :: [Type]) = PipelineVertexInputStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineVertexInputStateCreateFlags
+  , -- | @pVertexBindingDescriptions@ is a pointer to an array of
+    -- 'VertexInputBindingDescription' structures.
+    vertexBindingDescriptions :: Vector VertexInputBindingDescription
+  , -- | @pVertexAttributeDescriptions@ is a pointer to an array of
+    -- 'VertexInputAttributeDescription' structures.
+    vertexAttributeDescriptions :: Vector VertexInputAttributeDescription
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PipelineVertexInputStateCreateInfo es)
+
+instance Extensible PipelineVertexInputStateCreateInfo where
+  extensibleType = STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext PipelineVertexInputStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineVertexInputStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineVertexInputDivisorStateCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineVertexInputStateCreateInfo es, PokeChain es) => ToCStruct (PipelineVertexInputStateCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineVertexInputStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexBindingDescriptions)) :: Word32))
+    pPVertexBindingDescriptions' <- ContT $ allocaBytesAligned @VertexInputBindingDescription ((Data.Vector.length (vertexBindingDescriptions)) * 12) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDescriptions' `plusPtr` (12 * (i)) :: Ptr VertexInputBindingDescription) (e) . ($ ())) (vertexBindingDescriptions)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription))) (pPVertexBindingDescriptions')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexAttributeDescriptions)) :: Word32))
+    pPVertexAttributeDescriptions' <- ContT $ allocaBytesAligned @VertexInputAttributeDescription ((Data.Vector.length (vertexAttributeDescriptions)) * 16) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexAttributeDescriptions' `plusPtr` (16 * (i)) :: Ptr VertexInputAttributeDescription) (e) . ($ ())) (vertexAttributeDescriptions)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription))) (pPVertexAttributeDescriptions')
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPVertexBindingDescriptions' <- ContT $ allocaBytesAligned @VertexInputBindingDescription ((Data.Vector.length (mempty)) * 12) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDescriptions' `plusPtr` (12 * (i)) :: Ptr VertexInputBindingDescription) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription))) (pPVertexBindingDescriptions')
+    pPVertexAttributeDescriptions' <- ContT $ allocaBytesAligned @VertexInputAttributeDescription ((Data.Vector.length (mempty)) * 16) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexAttributeDescriptions' `plusPtr` (16 * (i)) :: Ptr VertexInputAttributeDescription) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription))) (pPVertexAttributeDescriptions')
+    lift $ f
+
+instance (Extendss PipelineVertexInputStateCreateInfo es, PeekChain es) => FromCStruct (PipelineVertexInputStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineVertexInputStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags))
+    vertexBindingDescriptionCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pVertexBindingDescriptions <- peek @(Ptr VertexInputBindingDescription) ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription)))
+    pVertexBindingDescriptions' <- generateM (fromIntegral vertexBindingDescriptionCount) (\i -> peekCStruct @VertexInputBindingDescription ((pVertexBindingDescriptions `advancePtrBytes` (12 * (i)) :: Ptr VertexInputBindingDescription)))
+    vertexAttributeDescriptionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pVertexAttributeDescriptions <- peek @(Ptr VertexInputAttributeDescription) ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription)))
+    pVertexAttributeDescriptions' <- generateM (fromIntegral vertexAttributeDescriptionCount) (\i -> peekCStruct @VertexInputAttributeDescription ((pVertexAttributeDescriptions `advancePtrBytes` (16 * (i)) :: Ptr VertexInputAttributeDescription)))
+    pure $ PipelineVertexInputStateCreateInfo
+             next flags pVertexBindingDescriptions' pVertexAttributeDescriptions'
+
+instance es ~ '[] => Zero (PipelineVertexInputStateCreateInfo es) where
+  zero = PipelineVertexInputStateCreateInfo
+           ()
+           zero
+           mempty
+           mempty
+
+
+-- | VkPipelineInputAssemblyStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline input assembly state
+--
+-- = Description
+--
+-- Restarting the assembly of primitives discards the most recent index
+-- values if those elements formed an incomplete primitive, and restarts
+-- the primitive assembly using the subsequent indices, but only assembling
+-- the immediately following element through the end of the originally
+-- specified elements. The primitive restart index value comparison is
+-- performed before adding the @vertexOffset@ value to the index value.
+--
+-- == Valid Usage
+--
+-- -   If @topology@ is
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_POINT_LIST',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY'
+--     or
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',
+--     @primitiveRestartEnable@ /must/ be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @topology@ /must/ not be any of
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY',
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY'
+--     or
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @topology@ /must/ not be
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @topology@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags.PipelineInputAssemblyStateCreateFlags',
+-- 'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineInputAssemblyStateCreateInfo = PipelineInputAssemblyStateCreateInfo
+  { -- | @flags@ is reserved for future use.
+    flags :: PipelineInputAssemblyStateCreateFlags
+  , -- | @topology@ is a
+    -- 'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' defining the
+    -- primitive topology, as described below.
+    topology :: PrimitiveTopology
+  , -- | @primitiveRestartEnable@ controls whether a special vertex index value
+    -- is treated as restarting the assembly of primitives. This enable only
+    -- applies to indexed draws
+    -- ('Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed' and
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'), and the
+    -- special index value is either 0xFFFFFFFF when the @indexType@ parameter
+    -- of 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer' is equal to
+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', 0xFF when @indexType@
+    -- is equal to 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', or
+    -- 0xFFFF when @indexType@ is equal to
+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16'. Primitive restart is
+    -- not allowed for “list” topologies.
+    primitiveRestartEnable :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PipelineInputAssemblyStateCreateInfo
+
+instance ToCStruct PipelineInputAssemblyStateCreateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineInputAssemblyStateCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (topology)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (primitiveRestartEnable))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PipelineInputAssemblyStateCreateInfo where
+  peekCStruct p = do
+    flags <- peek @PipelineInputAssemblyStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags))
+    topology <- peek @PrimitiveTopology ((p `plusPtr` 20 :: Ptr PrimitiveTopology))
+    primitiveRestartEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PipelineInputAssemblyStateCreateInfo
+             flags topology (bool32ToBool primitiveRestartEnable)
+
+instance Storable PipelineInputAssemblyStateCreateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineInputAssemblyStateCreateInfo where
+  zero = PipelineInputAssemblyStateCreateInfo
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineTessellationStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline tessellation state
+--
+-- == Valid Usage
+--
+-- -   @patchControlPoints@ /must/ be greater than zero and less than or
+--     equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PipelineTessellationDomainOriginStateCreateInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- = See Also
+--
+-- 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',
+-- 'Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags.PipelineTessellationStateCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineTessellationStateCreateInfo (es :: [Type]) = PipelineTessellationStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineTessellationStateCreateFlags
+  , -- | @patchControlPoints@ number of control points per patch.
+    patchControlPoints :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PipelineTessellationStateCreateInfo es)
+
+instance Extensible PipelineTessellationStateCreateInfo where
+  extensibleType = STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext PipelineTessellationStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineTessellationStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineTessellationDomainOriginStateCreateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineTessellationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineTessellationStateCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineTessellationStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (patchControlPoints)
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance (Extendss PipelineTessellationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineTessellationStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineTessellationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags))
+    patchControlPoints <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pure $ PipelineTessellationStateCreateInfo
+             next flags patchControlPoints
+
+instance es ~ '[] => Zero (PipelineTessellationStateCreateInfo es) where
+  zero = PipelineTessellationStateCreateInfo
+           ()
+           zero
+           zero
+
+
+-- | VkPipelineViewportStateCreateInfo - Structure specifying parameters of a
+-- newly created pipeline viewport state
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @viewportCount@ /must/ be @1@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @scissorCount@ /must/ be @1@
+--
+-- -   @viewportCount@ /must/ be between @1@ and
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
+--     inclusive
+--
+-- -   @scissorCount@ /must/ be between @1@ and
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
+--     inclusive
+--
+-- -   @scissorCount@ and @viewportCount@ /must/ be identical
+--
+-- -   The @x@ and @y@ members of @offset@ member of any element of
+--     @pScissors@ /must/ be greater than or equal to @0@
+--
+-- -   Evaluation of (@offset.x@ + @extent.width@) /must/ not cause a
+--     signed integer addition overflow for any element of @pScissors@
+--
+-- -   Evaluation of (@offset.y@ + @extent.height@) /must/ not cause a
+--     signed integer addition overflow for any element of @pScissors@
+--
+-- -   If the @viewportWScalingEnable@ member of a
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+--     structure included in the @pNext@ chain is
+--     'Vulkan.Core10.BaseType.TRUE', the @viewportCount@ member of the
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+--     structure /must/ be equal to @viewportCount@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportCoarseSampleOrderStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV',
+--     or
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @viewportCount@ /must/ be greater than @0@
+--
+-- -   @scissorCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineViewportStateCreateFlags.PipelineViewportStateCreateFlags',
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Core10.CommandBufferBuilding.Viewport'
+data PipelineViewportStateCreateInfo (es :: [Type]) = PipelineViewportStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineViewportStateCreateFlags
+  , -- | @viewportCount@ is the number of viewports used by the pipeline.
+    viewportCount :: Word32
+  , -- | @pViewports@ is a pointer to an array of
+    -- 'Vulkan.Core10.CommandBufferBuilding.Viewport' structures, defining the
+    -- viewport transforms. If the viewport state is dynamic, this member is
+    -- ignored.
+    viewports :: Vector Viewport
+  , -- | @scissorCount@ is the number of
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-scissor scissors>
+    -- and /must/ match the number of viewports.
+    scissorCount :: Word32
+  , -- | @pScissors@ is a pointer to an array of
+    -- 'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures defining the
+    -- rectangular bounds of the scissor for the corresponding viewport. If the
+    -- scissor state is dynamic, this member is ignored.
+    scissors :: Vector Rect2D
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PipelineViewportStateCreateInfo es)
+
+instance Extensible PipelineViewportStateCreateInfo where
+  extensibleType = STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext PipelineViewportStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineViewportStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineViewportCoarseSampleOrderStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineViewportShadingRateImageStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineViewportExclusiveScissorStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineViewportSwizzleStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineViewportWScalingStateCreateInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineViewportStateCreateInfo es, PokeChain es) => ToCStruct (PipelineViewportStateCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineViewportStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags)) (flags)
+    let pViewportsLength = Data.Vector.length $ (viewports)
+    viewportCount'' <- lift $ if (viewportCount) == 0
+      then pure $ fromIntegral pViewportsLength
+      else do
+        unless (fromIntegral pViewportsLength == (viewportCount) || pViewportsLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pViewports must be empty or have 'viewportCount' elements" Nothing Nothing
+        pure (viewportCount)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (viewportCount'')
+    pViewports'' <- if Data.Vector.null (viewports)
+      then pure nullPtr
+      else do
+        pPViewports <- ContT $ allocaBytesAligned @Viewport (((Data.Vector.length (viewports))) * 24) 4
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e) . ($ ())) ((viewports))
+        pure $ pPViewports
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Viewport))) pViewports''
+    let pScissorsLength = Data.Vector.length $ (scissors)
+    scissorCount'' <- lift $ if (scissorCount) == 0
+      then pure $ fromIntegral pScissorsLength
+      else do
+        unless (fromIntegral pScissorsLength == (scissorCount) || pScissorsLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pScissors must be empty or have 'scissorCount' elements" Nothing Nothing
+        pure (scissorCount)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (scissorCount'')
+    pScissors'' <- if Data.Vector.null (scissors)
+      then pure nullPtr
+      else do
+        pPScissors <- ContT $ allocaBytesAligned @Rect2D (((Data.Vector.length (scissors))) * 16) 4
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) ((scissors))
+        pure $ pPScissors
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Rect2D))) pScissors''
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ f
+
+instance (Extendss PipelineViewportStateCreateInfo es, PeekChain es) => FromCStruct (PipelineViewportStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineViewportStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags))
+    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pViewports <- peek @(Ptr Viewport) ((p `plusPtr` 24 :: Ptr (Ptr Viewport)))
+    let pViewportsLength = if pViewports == nullPtr then 0 else (fromIntegral viewportCount)
+    pViewports' <- generateM pViewportsLength (\i -> peekCStruct @Viewport ((pViewports `advancePtrBytes` (24 * (i)) :: Ptr Viewport)))
+    scissorCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pScissors <- peek @(Ptr Rect2D) ((p `plusPtr` 40 :: Ptr (Ptr Rect2D)))
+    let pScissorsLength = if pScissors == nullPtr then 0 else (fromIntegral scissorCount)
+    pScissors' <- generateM pScissorsLength (\i -> peekCStruct @Rect2D ((pScissors `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
+    pure $ PipelineViewportStateCreateInfo
+             next flags viewportCount pViewports' scissorCount pScissors'
+
+instance es ~ '[] => Zero (PipelineViewportStateCreateInfo es) where
+  zero = PipelineViewportStateCreateInfo
+           ()
+           zero
+           zero
+           mempty
+           zero
+           mempty
+
+
+-- | VkPipelineRasterizationStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline rasterization state
+--
+-- = Description
+--
+-- The application /can/ also add a
+-- 'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD'
+-- structure to the @pNext@ chain of a
+-- 'PipelineRasterizationStateCreateInfo' structure. This structure enables
+-- selecting the rasterization order to use when rendering with the
+-- corresponding graphics pipeline as described in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primrast-order Rasterization Order>.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthClamp depth clamping>
+--     feature is not enabled, @depthClampEnable@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fillModeNonSolid non-solid fill modes>
+--     feature is not enabled, @polygonMode@ /must/ be
+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL' or
+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'
+--
+-- -   If the @VK_NV_fill_rectangle@ extension is not enabled,
+--     @polygonMode@ /must/ not be
+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_EXT_conservative_rasterization.PipelineRasterizationConservativeStateCreateInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT',
+--     'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD',
+--     or
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @polygonMode@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PolygonMode.PolygonMode' value
+--
+-- -   @cullMode@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits' values
+--
+-- -   @frontFace@ /must/ be a valid
+--     'Vulkan.Core10.Enums.FrontFace.FrontFace' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlags',
+-- 'Vulkan.Core10.Enums.FrontFace.FrontFace', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags.PipelineRasterizationStateCreateFlags',
+-- 'Vulkan.Core10.Enums.PolygonMode.PolygonMode',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineRasterizationStateCreateInfo (es :: [Type]) = PipelineRasterizationStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineRasterizationStateCreateFlags
+  , -- | @depthClampEnable@ controls whether to clamp the fragment’s depth values
+    -- as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth Depth Test>.
+    -- If the pipeline is not created with
+    -- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'
+    -- present then enabling depth clamp will also disable clipping primitives
+    -- to the z planes of the frustrum as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>.
+    -- Otherwise depth clipping is controlled by the state set in
+    -- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'.
+    depthClampEnable :: Bool
+  , -- | @rasterizerDiscardEnable@ controls whether primitives are discarded
+    -- immediately before the rasterization stage.
+    rasterizerDiscardEnable :: Bool
+  , -- | @polygonMode@ is the triangle rendering mode. See
+    -- 'Vulkan.Core10.Enums.PolygonMode.PolygonMode'.
+    polygonMode :: PolygonMode
+  , -- | @cullMode@ is the triangle facing direction used for primitive culling.
+    -- See 'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits'.
+    cullMode :: CullModeFlags
+  , -- | @frontFace@ is a 'Vulkan.Core10.Enums.FrontFace.FrontFace' value
+    -- specifying the front-facing triangle orientation to be used for culling.
+    frontFace :: FrontFace
+  , -- | @depthBiasEnable@ controls whether to bias fragment depth values.
+    depthBiasEnable :: Bool
+  , -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant
+    -- depth value added to each fragment.
+    depthBiasConstantFactor :: Float
+  , -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.
+    depthBiasClamp :: Float
+  , -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope
+    -- in depth bias calculations.
+    depthBiasSlopeFactor :: Float
+  , -- | @lineWidth@ is the width of rasterized line segments.
+    lineWidth :: Float
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PipelineRasterizationStateCreateInfo es)
+
+instance Extensible PipelineRasterizationStateCreateInfo where
+  extensibleType = STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext PipelineRasterizationStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineRasterizationStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineRasterizationLineStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineRasterizationDepthClipStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineRasterizationStateStreamCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineRasterizationConservativeStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineRasterizationStateRasterizationOrderAMD = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineRasterizationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineRasterizationStateCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineRasterizationStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthClampEnable))
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (rasterizerDiscardEnable))
+    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (polygonMode)
+    lift $ poke ((p `plusPtr` 32 :: Ptr CullModeFlags)) (cullMode)
+    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (frontFace)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (depthBiasEnable))
+    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (depthBiasConstantFactor))
+    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (depthBiasClamp))
+    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (depthBiasSlopeFactor))
+    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (lineWidth))
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (zero)
+    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero))
+    lift $ f
+
+instance (Extendss PipelineRasterizationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineRasterizationStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineRasterizationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags))
+    depthClampEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    rasterizerDiscardEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    polygonMode <- peek @PolygonMode ((p `plusPtr` 28 :: Ptr PolygonMode))
+    cullMode <- peek @CullModeFlags ((p `plusPtr` 32 :: Ptr CullModeFlags))
+    frontFace <- peek @FrontFace ((p `plusPtr` 36 :: Ptr FrontFace))
+    depthBiasEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    depthBiasConstantFactor <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))
+    depthBiasClamp <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat))
+    depthBiasSlopeFactor <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))
+    lineWidth <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat))
+    pure $ PipelineRasterizationStateCreateInfo
+             next flags (bool32ToBool depthClampEnable) (bool32ToBool rasterizerDiscardEnable) polygonMode cullMode frontFace (bool32ToBool depthBiasEnable) ((\(CFloat a) -> a) depthBiasConstantFactor) ((\(CFloat a) -> a) depthBiasClamp) ((\(CFloat a) -> a) depthBiasSlopeFactor) ((\(CFloat a) -> a) lineWidth)
+
+instance es ~ '[] => Zero (PipelineRasterizationStateCreateInfo es) where
+  zero = PipelineRasterizationStateCreateInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineMultisampleStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline multisample state
+--
+-- = Description
+--
+-- Each bit in the sample mask is associated with a unique
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask sample index>
+-- as defined for the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask coverage mask>.
+-- Each bit b for mask word w in the sample mask corresponds to sample
+-- index i, where i = 32 × w + b. @pSampleMask@ has a length equal to ⌈
+-- @rasterizationSamples@ \/ 32 ⌉ words.
+--
+-- If @pSampleMask@ is @NULL@, it is treated as if the mask has all bits
+-- set to @1@.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sampleRateShading sample rate shading>
+--     feature is not enabled, @sampleShadingEnable@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-alphaToOne alpha to one>
+--     feature is not enabled, @alphaToOneEnable@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   @minSampleShading@ /must/ be in the range [0,1]
+--
+-- -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
+--     if the subpass has any color attachments and @rasterizationSamples@
+--     is greater than the number of color samples, then
+--     @sampleShadingEnable@ /must/ be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.PipelineCoverageModulationStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV',
+--     'Vulkan.Extensions.VK_NV_fragment_coverage_to_color.PipelineCoverageToColorStateCreateInfoNV',
+--     or
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @rasterizationSamples@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+--
+-- -   If @pSampleMask@ is not @NULL@, @pSampleMask@ /must/ be a valid
+--     pointer to an array of
+--     \(\lceil{\mathit{rasterizationSamples} \over 32}\rceil\)
+--     'Vulkan.Core10.BaseType.SampleMask' values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags.PipelineMultisampleStateCreateFlags',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
+-- 'Vulkan.Core10.BaseType.SampleMask',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineMultisampleStateCreateInfo (es :: [Type]) = PipelineMultisampleStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineMultisampleStateCreateFlags
+  , -- | @rasterizationSamples@ is a
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' specifying
+    -- the number of samples used in rasterization.
+    rasterizationSamples :: SampleCountFlagBits
+  , -- | @sampleShadingEnable@ /can/ be used to enable
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-sampleshading Sample Shading>.
+    sampleShadingEnable :: Bool
+  , -- | @minSampleShading@ specifies a minimum fraction of sample shading if
+    -- @sampleShadingEnable@ is set to 'Vulkan.Core10.BaseType.TRUE'.
+    minSampleShading :: Float
+  , -- | @pSampleMask@ is an array of 'Vulkan.Core10.BaseType.SampleMask' values
+    -- used in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-samplemask sample mask test>.
+    sampleMask :: Vector SampleMask
+  , -- | @alphaToCoverageEnable@ controls whether a temporary coverage value is
+    -- generated based on the alpha component of the fragment’s first color
+    -- output as specified in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-covg Multisample Coverage>
+    -- section.
+    alphaToCoverageEnable :: Bool
+  , -- | @alphaToOneEnable@ controls whether the alpha component of the
+    -- fragment’s first color output is replaced with one as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-covg Multisample Coverage>.
+    alphaToOneEnable :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PipelineMultisampleStateCreateInfo es)
+
+instance Extensible PipelineMultisampleStateCreateInfo where
+  extensibleType = STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext PipelineMultisampleStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineMultisampleStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineCoverageReductionStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineCoverageModulationStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineSampleLocationsStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineCoverageToColorStateCreateInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineMultisampleStateCreateInfo es, PokeChain es) => ToCStruct (PipelineMultisampleStateCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineMultisampleStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (rasterizationSamples)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (sampleShadingEnable))
+    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (minSampleShading))
+    pSampleMask'' <- case Data.Vector.length (sampleMask) of
+      0      -> pure nullPtr
+      vecLen -> do
+        let requiredLen = case (rasterizationSamples) of
+              SampleCountFlagBits n -> (n + 31) `quot` 32
+        lift $ unless (requiredLen == fromIntegral vecLen) $
+          throwIO $ IOError Nothing InvalidArgument "" "sampleMask must be either empty or contain enough bits to cover all the sample specified by 'rasterizationSamples'" Nothing Nothing
+        do
+          pPSampleMask' <- ContT $ allocaBytesAligned @SampleMask ((Data.Vector.length ((sampleMask))) * 4) 4
+          lift $ Data.Vector.imapM_ (\i e -> poke (pPSampleMask' `plusPtr` (4 * (i)) :: Ptr SampleMask) (e)) ((sampleMask))
+          pure $ pPSampleMask'
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SampleMask))) pSampleMask''
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (alphaToCoverageEnable))
+    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (alphaToOneEnable))
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance (Extendss PipelineMultisampleStateCreateInfo es, PeekChain es) => FromCStruct (PipelineMultisampleStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineMultisampleStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags))
+    rasterizationSamples <- peek @SampleCountFlagBits ((p `plusPtr` 20 :: Ptr SampleCountFlagBits))
+    sampleShadingEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    minSampleShading <- peek @CFloat ((p `plusPtr` 28 :: Ptr CFloat))
+    pSampleMask <- peek @(Ptr SampleMask) ((p `plusPtr` 32 :: Ptr (Ptr SampleMask)))
+    pSampleMask' <- if pSampleMask == nullPtr
+      then pure mempty
+      else generateM (case rasterizationSamples of
+        SampleCountFlagBits n -> (fromIntegral n + 31) `quot` 32) (\i -> peek @SampleMask (((pSampleMask) `advancePtrBytes` (4 * (i)) :: Ptr SampleMask)))
+    alphaToCoverageEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    alphaToOneEnable <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    pure $ PipelineMultisampleStateCreateInfo
+             next flags rasterizationSamples (bool32ToBool sampleShadingEnable) ((\(CFloat a) -> a) minSampleShading) pSampleMask' (bool32ToBool alphaToCoverageEnable) (bool32ToBool alphaToOneEnable)
+
+instance es ~ '[] => Zero (PipelineMultisampleStateCreateInfo es) where
+  zero = PipelineMultisampleStateCreateInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+           mempty
+           zero
+           zero
+
+
+-- | VkPipelineColorBlendAttachmentState - Structure specifying a pipeline
+-- color blend attachment state
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
+--     feature is not enabled, @srcColorBlendFactor@ /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
+--     feature is not enabled, @dstColorBlendFactor@ /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
+--     feature is not enabled, @srcAlphaBlendFactor@ /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>
+--     feature is not enabled, @dstAlphaBlendFactor@ /must/ not be
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or
+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'
+--
+-- -   If either of @colorBlendOp@ or @alphaBlendOp@ is an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
+--     then @colorBlendOp@ /must/ equal @alphaBlendOp@
+--
+-- -   If
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@
+--     is 'Vulkan.Core10.BaseType.FALSE' and @colorBlendOp@ is an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
+--     then @colorBlendOp@ /must/ be the same for all attachments
+--
+-- -   If
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@
+--     is 'Vulkan.Core10.BaseType.FALSE' and @alphaBlendOp@ is an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
+--     then @alphaBlendOp@ /must/ be the same for all attachments
+--
+-- -   If
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendAllOperations@
+--     is 'Vulkan.Core10.BaseType.FALSE', then @colorBlendOp@ /must/ not be
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_ZERO_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OVER_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OVER_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_IN_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_IN_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OUT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OUT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_ATOP_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_ATOP_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_XOR_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_RGB_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARDODGE_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARBURN_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_VIVIDLIGHT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARLIGHT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PINLIGHT_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_HARDMIX_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_ALPHA_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_DARKER_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_CLAMPED_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_CONTRAST_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_OVG_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_RED_EXT',
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_GREEN_EXT', or
+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_BLUE_EXT'
+--
+-- -   If @colorBlendOp@ or @alphaBlendOp@ is an
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,
+--     then 'Vulkan.Core10.Pass.SubpassDescription'::@colorAttachmentCount@
+--     of the subpass this pipeline is compiled against /must/ be less than
+--     or equal to
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::advancedBlendMaxColorAttachments
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @srcColorBlendFactor@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
+--
+-- -   @dstColorBlendFactor@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
+--
+-- -   @colorBlendOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendOp.BlendOp' value
+--
+-- -   @srcAlphaBlendFactor@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
+--
+-- -   @dstAlphaBlendFactor@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value
+--
+-- -   @alphaBlendOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BlendOp.BlendOp' value
+--
+-- -   @colorWriteMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.BlendFactor.BlendFactor',
+-- 'Vulkan.Core10.Enums.BlendOp.BlendOp', 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlags',
+-- 'PipelineColorBlendStateCreateInfo'
+data PipelineColorBlendAttachmentState = PipelineColorBlendAttachmentState
+  { -- | @blendEnable@ controls whether blending is enabled for the corresponding
+    -- color attachment. If blending is not enabled, the source fragment’s
+    -- color for that attachment is passed through unmodified.
+    blendEnable :: Bool
+  , -- | @srcColorBlendFactor@ selects which blend factor is used to determine
+    -- the source factors (Sr,Sg,Sb).
+    srcColorBlendFactor :: BlendFactor
+  , -- | @dstColorBlendFactor@ selects which blend factor is used to determine
+    -- the destination factors (Dr,Dg,Db).
+    dstColorBlendFactor :: BlendFactor
+  , -- | @colorBlendOp@ selects which blend operation is used to calculate the
+    -- RGB values to write to the color attachment.
+    colorBlendOp :: BlendOp
+  , -- | @srcAlphaBlendFactor@ selects which blend factor is used to determine
+    -- the source factor Sa.
+    srcAlphaBlendFactor :: BlendFactor
+  , -- | @dstAlphaBlendFactor@ selects which blend factor is used to determine
+    -- the destination factor Da.
+    dstAlphaBlendFactor :: BlendFactor
+  , -- | @alphaBlendOp@ selects which blend operation is use to calculate the
+    -- alpha values to write to the color attachment.
+    alphaBlendOp :: BlendOp
+  , -- | @colorWriteMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'
+    -- specifying which of the R, G, B, and\/or A components are enabled for
+    -- writing, as described for the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-color-write-mask Color Write Mask>.
+    colorWriteMask :: ColorComponentFlags
+  }
+  deriving (Typeable)
+deriving instance Show PipelineColorBlendAttachmentState
+
+instance ToCStruct PipelineColorBlendAttachmentState where
+  withCStruct x f = allocaBytesAligned 32 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineColorBlendAttachmentState{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (blendEnable))
+    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (srcColorBlendFactor)
+    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (dstColorBlendFactor)
+    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (colorBlendOp)
+    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (srcAlphaBlendFactor)
+    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (dstAlphaBlendFactor)
+    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (alphaBlendOp)
+    poke ((p `plusPtr` 28 :: Ptr ColorComponentFlags)) (colorWriteMask)
+    f
+  cStructSize = 32
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (zero)
+    f
+
+instance FromCStruct PipelineColorBlendAttachmentState where
+  peekCStruct p = do
+    blendEnable <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))
+    srcColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 4 :: Ptr BlendFactor))
+    dstColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 8 :: Ptr BlendFactor))
+    colorBlendOp <- peek @BlendOp ((p `plusPtr` 12 :: Ptr BlendOp))
+    srcAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 16 :: Ptr BlendFactor))
+    dstAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 20 :: Ptr BlendFactor))
+    alphaBlendOp <- peek @BlendOp ((p `plusPtr` 24 :: Ptr BlendOp))
+    colorWriteMask <- peek @ColorComponentFlags ((p `plusPtr` 28 :: Ptr ColorComponentFlags))
+    pure $ PipelineColorBlendAttachmentState
+             (bool32ToBool blendEnable) srcColorBlendFactor dstColorBlendFactor colorBlendOp srcAlphaBlendFactor dstAlphaBlendFactor alphaBlendOp colorWriteMask
+
+instance Storable PipelineColorBlendAttachmentState where
+  sizeOf ~_ = 32
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineColorBlendAttachmentState where
+  zero = PipelineColorBlendAttachmentState
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineColorBlendStateCreateInfo - Structure specifying parameters of
+-- a newly created pipeline color blend state
+--
+-- = Description
+--
+-- Each element of the @pAttachments@ array is a
+-- 'PipelineColorBlendAttachmentState' structure specifying per-target
+-- blending state for each individual color attachment. If the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-independentBlend independent blending>
+-- feature is not enabled on the device, all
+-- 'PipelineColorBlendAttachmentState' elements in the @pAttachments@ array
+-- /must/ be identical.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-independentBlend independent blending>
+--     feature is not enabled, all elements of @pAttachments@ /must/ be
+--     identical
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-logicOp logic operations>
+--     feature is not enabled, @logicOpEnable@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If @logicOpEnable@ is 'Vulkan.Core10.BaseType.TRUE', @logicOp@
+--     /must/ be a valid 'Vulkan.Core10.Enums.LogicOp.LogicOp' value
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
+--     pointer to an array of @attachmentCount@ valid
+--     'PipelineColorBlendAttachmentState' structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.LogicOp.LogicOp',
+-- 'PipelineColorBlendAttachmentState',
+-- 'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags.PipelineColorBlendStateCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineColorBlendStateCreateInfo (es :: [Type]) = PipelineColorBlendStateCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: PipelineColorBlendStateCreateFlags
+  , -- | @logicOpEnable@ controls whether to apply
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-logicop Logical Operations>.
+    logicOpEnable :: Bool
+  , -- | @logicOp@ selects which logical operation to apply.
+    logicOp :: LogicOp
+  , -- | @pAttachments@: is a pointer to an array of per target attachment
+    -- states.
+    attachments :: Vector PipelineColorBlendAttachmentState
+  , -- | @blendConstants@ is a pointer to an array of four values used as the R,
+    -- G, B, and A components of the blend constant that are used in blending,
+    -- depending on the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.
+    blendConstants :: (Float, Float, Float, Float)
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PipelineColorBlendStateCreateInfo es)
+
+instance Extensible PipelineColorBlendStateCreateInfo where
+  extensibleType = STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext PipelineColorBlendStateCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineColorBlendStateCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineColorBlendAdvancedStateCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss PipelineColorBlendStateCreateInfo es, PokeChain es) => ToCStruct (PipelineColorBlendStateCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineColorBlendStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (logicOpEnable))
+    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (logicOp)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
+    pPAttachments' <- ContT $ allocaBytesAligned @PipelineColorBlendAttachmentState ((Data.Vector.length (attachments)) * 32) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState) (e) . ($ ())) (attachments)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState))) (pPAttachments')
+    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
+    lift $ case (blendConstants) of
+      (e0, e1, e2, e3) -> do
+        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))
+        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
+        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (zero)
+    pPAttachments' <- ContT $ allocaBytesAligned @PipelineColorBlendAttachmentState ((Data.Vector.length (mempty)) * 32) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState))) (pPAttachments')
+    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
+    lift $ case ((zero, zero, zero, zero)) of
+      (e0, e1, e2, e3) -> do
+        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))
+        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
+        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+    lift $ f
+
+instance (Extendss PipelineColorBlendStateCreateInfo es, PeekChain es) => FromCStruct (PipelineColorBlendStateCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineColorBlendStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags))
+    logicOpEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    logicOp <- peek @LogicOp ((p `plusPtr` 24 :: Ptr LogicOp))
+    attachmentCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    pAttachments <- peek @(Ptr PipelineColorBlendAttachmentState) ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState)))
+    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peekCStruct @PipelineColorBlendAttachmentState ((pAttachments `advancePtrBytes` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState)))
+    let pblendConstants = lowerArrayPtr @CFloat ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))
+    blendConstants0 <- peek @CFloat ((pblendConstants `advancePtrBytes` 0 :: Ptr CFloat))
+    blendConstants1 <- peek @CFloat ((pblendConstants `advancePtrBytes` 4 :: Ptr CFloat))
+    blendConstants2 <- peek @CFloat ((pblendConstants `advancePtrBytes` 8 :: Ptr CFloat))
+    blendConstants3 <- peek @CFloat ((pblendConstants `advancePtrBytes` 12 :: Ptr CFloat))
+    pure $ PipelineColorBlendStateCreateInfo
+             next flags (bool32ToBool logicOpEnable) logicOp pAttachments' ((((\(CFloat a) -> a) blendConstants0), ((\(CFloat a) -> a) blendConstants1), ((\(CFloat a) -> a) blendConstants2), ((\(CFloat a) -> a) blendConstants3)))
+
+instance es ~ '[] => Zero (PipelineColorBlendStateCreateInfo es) where
+  zero = PipelineColorBlendStateCreateInfo
+           ()
+           zero
+           zero
+           zero
+           mempty
+           (zero, zero, zero, zero)
+
+
+-- | VkPipelineDynamicStateCreateInfo - Structure specifying parameters of a
+-- newly created pipeline dynamic state
+--
+-- == Valid Usage
+--
+-- -   Each element of @pDynamicStates@ /must/ be unique
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @dynamicStateCount@ is not @0@, @pDynamicStates@ /must/ be a
+--     valid pointer to an array of @dynamicStateCount@ valid
+--     'Vulkan.Core10.Enums.DynamicState.DynamicState' values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.DynamicState.DynamicState',
+-- 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags.PipelineDynamicStateCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineDynamicStateCreateInfo = PipelineDynamicStateCreateInfo
+  { -- | @flags@ is reserved for future use.
+    flags :: PipelineDynamicStateCreateFlags
+  , -- | @pDynamicStates@ is a pointer to an array of
+    -- 'Vulkan.Core10.Enums.DynamicState.DynamicState' values specifying which
+    -- pieces of pipeline state will use the values from dynamic state commands
+    -- rather than from pipeline state creation info.
+    dynamicStates :: Vector DynamicState
+  }
+  deriving (Typeable)
+deriving instance Show PipelineDynamicStateCreateInfo
+
+instance ToCStruct PipelineDynamicStateCreateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineDynamicStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (dynamicStates)) :: Word32))
+    pPDynamicStates' <- ContT $ allocaBytesAligned @DynamicState ((Data.Vector.length (dynamicStates)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicStates' `plusPtr` (4 * (i)) :: Ptr DynamicState) (e)) (dynamicStates)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DynamicState))) (pPDynamicStates')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPDynamicStates' <- ContT $ allocaBytesAligned @DynamicState ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicStates' `plusPtr` (4 * (i)) :: Ptr DynamicState) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DynamicState))) (pPDynamicStates')
+    lift $ f
+
+instance FromCStruct PipelineDynamicStateCreateInfo where
+  peekCStruct p = do
+    flags <- peek @PipelineDynamicStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags))
+    dynamicStateCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pDynamicStates <- peek @(Ptr DynamicState) ((p `plusPtr` 24 :: Ptr (Ptr DynamicState)))
+    pDynamicStates' <- generateM (fromIntegral dynamicStateCount) (\i -> peek @DynamicState ((pDynamicStates `advancePtrBytes` (4 * (i)) :: Ptr DynamicState)))
+    pure $ PipelineDynamicStateCreateInfo
+             flags pDynamicStates'
+
+instance Zero PipelineDynamicStateCreateInfo where
+  zero = PipelineDynamicStateCreateInfo
+           zero
+           mempty
+
+
+-- | VkStencilOpState - Structure specifying stencil operation state
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.CompareOp.CompareOp',
+-- 'PipelineDepthStencilStateCreateInfo',
+-- 'Vulkan.Core10.Enums.StencilOp.StencilOp'
+data StencilOpState = StencilOpState
+  { -- | @failOp@ /must/ be a valid 'Vulkan.Core10.Enums.StencilOp.StencilOp'
+    -- value
+    failOp :: StencilOp
+  , -- | @passOp@ /must/ be a valid 'Vulkan.Core10.Enums.StencilOp.StencilOp'
+    -- value
+    passOp :: StencilOp
+  , -- | @depthFailOp@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.StencilOp.StencilOp' value
+    depthFailOp :: StencilOp
+  , -- | @compareOp@ /must/ be a valid 'Vulkan.Core10.Enums.CompareOp.CompareOp'
+    -- value
+    compareOp :: CompareOp
+  , -- | @compareMask@ selects the bits of the unsigned integer stencil values
+    -- participating in the stencil test.
+    compareMask :: Word32
+  , -- | @writeMask@ selects the bits of the unsigned integer stencil values
+    -- updated by the stencil test in the stencil framebuffer attachment.
+    writeMask :: Word32
+  , -- | @reference@ is an integer reference value that is used in the unsigned
+    -- stencil comparison.
+    reference :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show StencilOpState
+
+instance ToCStruct StencilOpState where
+  withCStruct x f = allocaBytesAligned 28 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p StencilOpState{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (failOp)
+    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (passOp)
+    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (depthFailOp)
+    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (compareOp)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (compareMask)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (writeMask)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (reference)
+    f
+  cStructSize = 28
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct StencilOpState where
+  peekCStruct p = do
+    failOp <- peek @StencilOp ((p `plusPtr` 0 :: Ptr StencilOp))
+    passOp <- peek @StencilOp ((p `plusPtr` 4 :: Ptr StencilOp))
+    depthFailOp <- peek @StencilOp ((p `plusPtr` 8 :: Ptr StencilOp))
+    compareOp <- peek @CompareOp ((p `plusPtr` 12 :: Ptr CompareOp))
+    compareMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    writeMask <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    reference <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ StencilOpState
+             failOp passOp depthFailOp compareOp compareMask writeMask reference
+
+instance Storable StencilOpState where
+  sizeOf ~_ = 28
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero StencilOpState where
+  zero = StencilOpState
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineDepthStencilStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline depth stencil state
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBounds depth bounds testing>
+--     feature is not enabled, @depthBoundsTestEnable@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @depthCompareOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.CompareOp.CompareOp' value
+--
+-- -   @front@ /must/ be a valid 'StencilOpState' structure
+--
+-- -   @back@ /must/ be a valid 'StencilOpState' structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.CompareOp.CompareOp', 'GraphicsPipelineCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags.PipelineDepthStencilStateCreateFlags',
+-- 'StencilOpState', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineDepthStencilStateCreateInfo = PipelineDepthStencilStateCreateInfo
+  { -- | @flags@ is reserved for future use.
+    flags :: PipelineDepthStencilStateCreateFlags
+  , -- | @depthTestEnable@ controls whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth testing>
+    -- is enabled.
+    depthTestEnable :: Bool
+  , -- | @depthWriteEnable@ controls whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth-write depth writes>
+    -- are enabled when @depthTestEnable@ is 'Vulkan.Core10.BaseType.TRUE'.
+    -- Depth writes are always disabled when @depthTestEnable@ is
+    -- 'Vulkan.Core10.BaseType.FALSE'.
+    depthWriteEnable :: Bool
+  , -- | @depthCompareOp@ is the comparison operator used in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth test>.
+    depthCompareOp :: CompareOp
+  , -- | @depthBoundsTestEnable@ controls whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds testing>
+    -- is enabled.
+    depthBoundsTestEnable :: Bool
+  , -- | @stencilTestEnable@ controls whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil stencil testing>
+    -- is enabled.
+    stencilTestEnable :: Bool
+  , -- | @front@ and @back@ control the parameters of the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil stencil test>.
+    front :: StencilOpState
+  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "back"
+    back :: StencilOpState
+  , -- | @minDepthBounds@ is the minimum depth bound used in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds test>.
+    minDepthBounds :: Float
+  , -- | @maxDepthBounds@ is the maximum depth bound used in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds test>.
+    maxDepthBounds :: Float
+  }
+  deriving (Typeable)
+deriving instance Show PipelineDepthStencilStateCreateInfo
+
+instance ToCStruct PipelineDepthStencilStateCreateInfo where
+  withCStruct x f = allocaBytesAligned 104 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineDepthStencilStateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthTestEnable))
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (depthWriteEnable))
+    lift $ poke ((p `plusPtr` 28 :: Ptr CompareOp)) (depthCompareOp)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (depthBoundsTestEnable))
+    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (stencilTestEnable))
+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr StencilOpState)) (front) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 68 :: Ptr StencilOpState)) (back) . ($ ())
+    lift $ poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (minDepthBounds))
+    lift $ poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (maxDepthBounds))
+    lift $ f
+  cStructSize = 104
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 28 :: Ptr CompareOp)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr StencilOpState)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 68 :: Ptr StencilOpState)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (zero))
+    lift $ f
+
+instance FromCStruct PipelineDepthStencilStateCreateInfo where
+  peekCStruct p = do
+    flags <- peek @PipelineDepthStencilStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags))
+    depthTestEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    depthWriteEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    depthCompareOp <- peek @CompareOp ((p `plusPtr` 28 :: Ptr CompareOp))
+    depthBoundsTestEnable <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    stencilTestEnable <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    front <- peekCStruct @StencilOpState ((p `plusPtr` 40 :: Ptr StencilOpState))
+    back <- peekCStruct @StencilOpState ((p `plusPtr` 68 :: Ptr StencilOpState))
+    minDepthBounds <- peek @CFloat ((p `plusPtr` 96 :: Ptr CFloat))
+    maxDepthBounds <- peek @CFloat ((p `plusPtr` 100 :: Ptr CFloat))
+    pure $ PipelineDepthStencilStateCreateInfo
+             flags (bool32ToBool depthTestEnable) (bool32ToBool depthWriteEnable) depthCompareOp (bool32ToBool depthBoundsTestEnable) (bool32ToBool stencilTestEnable) front back ((\(CFloat a) -> a) minDepthBounds) ((\(CFloat a) -> a) maxDepthBounds)
+
+instance Zero PipelineDepthStencilStateCreateInfo where
+  zero = PipelineDepthStencilStateCreateInfo
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkGraphicsPipelineCreateInfo - Structure specifying parameters of a
+-- newly created graphics pipeline
+--
+-- = Description
+--
+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
+-- described in more detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
+--
+-- If any shader stage fails to compile, the compile log will be reported
+-- back to the application, and
+-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV' will be generated.
+--
+-- == Valid Usage
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be
+--     a valid handle to a graphics 'Vulkan.Core10.Handles.Pipeline'
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be a valid index into the calling command’s @pCreateInfos@ parameter
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/
+--     be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be -1
+--
+-- -   The @stage@ member of each element of @pStages@ /must/ be unique
+--
+-- -   The geometric shader stages provided in @pStages@ /must/ be either
+--     from the mesh shading pipeline (@stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'
+--     or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV')
+--     or from the primitive shading pipeline (@stage@ is
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT')
+--
+-- -   The @stage@ member of one element of @pStages@ /must/ be either
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT' or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'
+--
+-- -   The @stage@ member of each element of @pStages@ /must/ not be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
+--
+-- -   If @pStages@ includes a tessellation control shader stage, it /must/
+--     include a tessellation evaluation shader stage
+--
+-- -   If @pStages@ includes a tessellation evaluation shader stage, it
+--     /must/ include a tessellation control shader stage
+--
+-- -   If @pStages@ includes a tessellation control shader stage and a
+--     tessellation evaluation shader stage, @pTessellationState@ /must/ be
+--     a valid pointer to a valid 'PipelineTessellationStateCreateInfo'
+--     structure
+--
+-- -   If @pStages@ includes tessellation shader stages, the shader code of
+--     at least one stage /must/ contain an @OpExecutionMode@ instruction
+--     that specifies the type of subdivision in the pipeline
+--
+-- -   If @pStages@ includes tessellation shader stages, and the shader
+--     code of both stages contain an @OpExecutionMode@ instruction that
+--     specifies the type of subdivision in the pipeline, they /must/ both
+--     specify the same subdivision mode
+--
+-- -   If @pStages@ includes tessellation shader stages, the shader code of
+--     at least one stage /must/ contain an @OpExecutionMode@ instruction
+--     that specifies the output patch size in the pipeline
+--
+-- -   If @pStages@ includes tessellation shader stages, and the shader
+--     code of both contain an @OpExecutionMode@ instruction that specifies
+--     the out patch size in the pipeline, they /must/ both specify the
+--     same patch size
+--
+-- -   If @pStages@ includes tessellation shader stages, the @topology@
+--     member of @pInputAssembly@ /must/ be
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'
+--
+-- -   If the @topology@ member of @pInputAssembly@ is
+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',
+--     @pStages@ /must/ include tessellation shader stages
+--
+-- -   If @pStages@ includes a geometry shader stage, and does not include
+--     any tessellation shader stages, its shader code /must/ contain an
+--     @OpExecutionMode@ instruction that specifies an input primitive type
+--     that is
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution compatible>
+--     with the primitive topology specified in @pInputAssembly@
+--
+-- -   If @pStages@ includes a geometry shader stage, and also includes
+--     tessellation shader stages, its shader code /must/ contain an
+--     @OpExecutionMode@ instruction that specifies an input primitive type
+--     that is
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution compatible>
+--     with the primitive topology that is output by the tessellation
+--     stages
+--
+-- -   If @pStages@ includes a fragment shader stage and a geometry shader
+--     stage, and the fragment shader code reads from an input variable
+--     that is decorated with @PrimitiveID@, then the geometry shader code
+--     /must/ write to a matching output variable, decorated with
+--     @PrimitiveID@, in all execution paths
+--
+-- -   If @pStages@ includes a fragment shader stage, its shader code
+--     /must/ not read from any input attachment that is defined as
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' in @subpass@
+--
+-- -   The shader code for the entry points identified by @pStages@, and
+--     the rest of the state identified by this structure /must/ adhere to
+--     the pipeline linking rules described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>
+--     chapter
+--
+-- -   If rasterization is not disabled and @subpass@ uses a depth\/stencil
+--     attachment in @renderPass@ that has a layout of
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
+--     in the 'Vulkan.Core10.Pass.AttachmentReference' defined by
+--     @subpass@, the @depthWriteEnable@ member of @pDepthStencilState@
+--     /must/ be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If rasterization is not disabled and @subpass@ uses a depth\/stencil
+--     attachment in @renderPass@ that has a layout of
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
+--     in the 'Vulkan.Core10.Pass.AttachmentReference' defined by
+--     @subpass@, the @failOp@, @passOp@ and @depthFailOp@ members of each
+--     of the @front@ and @back@ members of @pDepthStencilState@ /must/ be
+--     'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
+--
+-- -   If rasterization is not disabled and the subpass uses color
+--     attachments, then for each color attachment in the subpass the
+--     @blendEnable@ member of the corresponding element of the
+--     @pAttachment@ member of @pColorBlendState@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE' if the attached image’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>
+--     does not contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT'
+--
+-- -   If rasterization is not disabled and the subpass uses color
+--     attachments, the @attachmentCount@ member of @pColorBlendState@
+--     /must/ be equal to the @colorAttachmentCount@ used to create
+--     @subpass@
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT', the
+--     @pViewports@ member of @pViewportState@ /must/ be a valid pointer to
+--     an array of @pViewportState->viewportCount@ valid
+--     'Vulkan.Core10.CommandBufferBuilding.Viewport' structures
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR', the
+--     @pScissors@ member of @pViewportState@ /must/ be a valid pointer to
+--     an array of @pViewportState->scissorCount@
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
+--
+-- -   If the wide lines feature is not enabled, and no element of the
+--     @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH', the
+--     @lineWidth@ member of @pRasterizationState@ /must/ be @1.0@
+--
+-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
+--     'Vulkan.Core10.BaseType.FALSE', @pViewportState@ /must/ be a valid
+--     pointer to a valid 'PipelineViewportStateCreateInfo' structure
+--
+-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
+--     'Vulkan.Core10.BaseType.FALSE', @pMultisampleState@ /must/ be a
+--     valid pointer to a valid 'PipelineMultisampleStateCreateInfo'
+--     structure
+--
+-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
+--     'Vulkan.Core10.BaseType.FALSE', and @subpass@ uses a depth\/stencil
+--     attachment, @pDepthStencilState@ /must/ be a valid pointer to a
+--     valid 'PipelineDepthStencilStateCreateInfo' structure
+--
+-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
+--     'Vulkan.Core10.BaseType.FALSE', and @subpass@ uses color
+--     attachments, @pColorBlendState@ /must/ be a valid pointer to a valid
+--     'PipelineColorBlendStateCreateInfo' structure
+--
+-- -   If the depth bias clamping feature is not enabled, no element of the
+--     @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS', and the
+--     @depthBiasEnable@ member of @pRasterizationState@ is
+--     'Vulkan.Core10.BaseType.TRUE', the @depthBiasClamp@ member of
+--     @pRasterizationState@ /must/ be @0.0@
+--
+-- -   If the @VK_EXT_depth_range_unrestricted@ extension is not enabled
+--     and no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS', and
+--     the @depthBoundsTestEnable@ member of @pDepthStencilState@ is
+--     'Vulkan.Core10.BaseType.TRUE', the @minDepthBounds@ and
+--     @maxDepthBounds@ members of @pDepthStencilState@ /must/ be between
+--     @0.0@ and @1.0@, inclusive
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
+--     and the @sampleLocationsEnable@ member of a
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--     structure included in the @pNext@ chain of @pMultisampleState@ is
+--     'Vulkan.Core10.BaseType.TRUE',
+--     @sampleLocationsInfo.sampleLocationGridSize.width@ /must/ evenly
+--     divide
+--     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.width@
+--     as returned by
+--     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
+--     with a @samples@ parameter equaling @rasterizationSamples@
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
+--     and the @sampleLocationsEnable@ member of a
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--     structure included in the @pNext@ chain of @pMultisampleState@ is
+--     'Vulkan.Core10.BaseType.TRUE',
+--     @sampleLocationsInfo.sampleLocationGridSize.height@ /must/ evenly
+--     divide
+--     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.height@
+--     as returned by
+--     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
+--     with a @samples@ parameter equaling @rasterizationSamples@
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',
+--     and the @sampleLocationsEnable@ member of a
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--     structure included in the @pNext@ chain of @pMultisampleState@ is
+--     'Vulkan.Core10.BaseType.TRUE',
+--     @sampleLocationsInfo.sampleLocationsPerPixel@ /must/ equal
+--     @rasterizationSamples@
+--
+-- -   If the @sampleLocationsEnable@ member of a
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'
+--     structure included in the @pNext@ chain of @pMultisampleState@ is
+--     'Vulkan.Core10.BaseType.TRUE', the fragment shader code /must/ not
+--     statically use the extended instruction @InterpolateAtSample@
+--
+-- -   @layout@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
+--     with all shaders specified in @pStages@
+--
+-- -   If neither the @VK_AMD_mixed_attachment_samples@ nor the
+--     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if
+--     @subpass@ uses color and\/or depth\/stencil attachments, then the
+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the
+--     same as the sample count for those subpass attachments
+--
+-- -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, and
+--     if @subpass@ uses color and\/or depth\/stencil attachments, then the
+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ equal
+--     the maximum of the sample counts of those subpass attachments
+--
+-- -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
+--     if @subpass@ has a depth\/stencil attachment and depth test, stencil
+--     test, or depth bounds test are enabled, then the
+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the
+--     same as the sample count of the depth\/stencil attachment
+--
+-- -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
+--     if @subpass@ has any color attachments, then the
+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ be
+--     greater than or equal to the sample count for those subpass
+--     attachments
+--
+-- -   If the @VK_NV_coverage_reduction_mode@ extension is enabled, the
+--     coverage reduction mode specified by
+--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV'::@coverageReductionMode@,
+--     the @rasterizationSamples@ member of @pMultisampleState@ and the
+--     sample counts for the color and depth\/stencil attachments (if the
+--     subpass has them) /must/ be a valid combination returned by
+--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV'
+--
+-- -   If @subpass@ does not use any color and\/or depth\/stencil
+--     attachments, then the @rasterizationSamples@ member of
+--     @pMultisampleState@ /must/ follow the rules for a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments zero-attachment subpass>
+--
+-- -   @subpass@ /must/ be a valid subpass within @renderPass@
+--
+-- -   If the @renderPass@ has multiview enabled and @subpass@ has more
+--     than one bit set in the view mask and @multiviewTessellationShader@
+--     is not enabled, then @pStages@ /must/ not include tessellation
+--     shaders
+--
+-- -   If the @renderPass@ has multiview enabled and @subpass@ has more
+--     than one bit set in the view mask and @multiviewGeometryShader@ is
+--     not enabled, then @pStages@ /must/ not include a geometry shader
+--
+-- -   If the @renderPass@ has multiview enabled and @subpass@ has more
+--     than one bit set in the view mask, shaders in the pipeline /must/
+--     not write to the @Layer@ built-in output
+--
+-- -   If the @renderPass@ has multiview enabled, then all shaders /must/
+--     not include variables decorated with the @Layer@ built-in decoration
+--     in their interfaces
+--
+-- -   @flags@ /must/ not contain the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.PIPELINE_CREATE_DISPATCH_BASE'
+--     flag
+--
+-- -   If @pStages@ includes a fragment shader stage and an input
+--     attachment was referenced by an @aspectMask@ at @renderPass@
+--     creation time, its shader code /must/ only read from the aspects
+--     that were specified for that input attachment
+--
+-- -   The number of resources in @layout@ accessible to each shader stage
+--     that is used by the pipeline /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV',
+--     and the @viewportWScalingEnable@ member of a
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+--     structure, included in the @pNext@ chain of @pViewportState@, is
+--     'Vulkan.Core10.BaseType.TRUE', the @pViewportWScalings@ member of
+--     the
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'
+--     /must/ be a pointer to an array of
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@
+--     valid
+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.ViewportWScalingNV'
+--     structures
+--
+-- -   If @pStages@ includes a vertex shader stage, @pVertexInputState@
+--     /must/ be a valid pointer to a valid
+--     'PipelineVertexInputStateCreateInfo' structure
+--
+-- -   If @pStages@ includes a vertex shader stage, @pInputAssemblyState@
+--     /must/ be a valid pointer to a valid
+--     'PipelineInputAssemblyStateCreateInfo' structure
+--
+-- -   The @Xfb@ execution mode /can/ be specified by only one shader stage
+--     in @pStages@
+--
+-- -   If any shader stage in @pStages@ specifies @Xfb@ execution mode it
+--     /must/ be the last vertex processing stage
+--
+-- -   If a
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@
+--     value other than zero is specified, all variables in the output
+--     interface of the entry point being compiled decorated with
+--     @Position@, @PointSize@, @ClipDistance@, or @CullDistance@ /must/
+--     all be decorated with identical @Stream@ values that match the
+--     @rasterizationStream@
+--
+-- -   If
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@
+--     is zero, or not specified, all variables in the output interface of
+--     the entry point being compiled decorated with @Position@,
+--     @PointSize@, @ClipDistance@, or @CullDistance@ /must/ all be
+--     decorated with a @Stream@ value of zero, or /must/ not specify the
+--     @Stream@ decoration
+--
+-- -   If the last vertex processing stage is a geometry shader, and that
+--     geometry shader uses the @GeometryStreams@ capability, then
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT'::@geometryStreams@
+--     feature /must/ be enabled
+--
+-- -   If there are any mesh shader stages in the pipeline there /must/ not
+--     be any shader stage in the pipeline with a @Xfb@ execution mode
+--
+-- -   If the @lineRasterizationMode@ member of a
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
+--     structure included in the @pNext@ chain of @pRasterizationState@ is
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_BRESENHAM_EXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT'
+--     and if rasterization is enabled, then the @alphaToCoverageEnable@,
+--     @alphaToOneEnable@, and @sampleShadingEnable@ members of
+--     @pMultisampleState@ /must/ all be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If the @stippledLineEnable@ member of
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
+--     is 'Vulkan.Core10.BaseType.TRUE' and no element of the
+--     @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_EXT',
+--     then the @lineStippleFactor@ member of
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'
+--     /must/ be in the range [1,256]
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',
+--     then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
+--     feature /must/ be enabled
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',
+--     then all stages /must/ not specify @Xfb@ execution mode
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',
+--     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD',
+--     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT',
+--     or
+--     'Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+--     values
+--
+-- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@
+--     valid 'PipelineShaderStageCreateInfo' structures
+--
+-- -   @pRasterizationState@ /must/ be a valid pointer to a valid
+--     'PipelineRasterizationStateCreateInfo' structure
+--
+-- -   If @pDynamicState@ is not @NULL@, @pDynamicState@ /must/ be a valid
+--     pointer to a valid 'PipelineDynamicStateCreateInfo' structure
+--
+-- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'
+--     handle
+--
+-- -   @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'
+--     handle
+--
+-- -   @stageCount@ /must/ be greater than @0@
+--
+-- -   Each of @basePipelineHandle@, @layout@, and @renderPass@ that are
+--     valid handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Pipeline', 'PipelineColorBlendStateCreateInfo',
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
+-- 'PipelineDepthStencilStateCreateInfo', 'PipelineDynamicStateCreateInfo',
+-- 'PipelineInputAssemblyStateCreateInfo',
+-- 'Vulkan.Core10.Handles.PipelineLayout',
+-- 'PipelineMultisampleStateCreateInfo',
+-- 'PipelineRasterizationStateCreateInfo', 'PipelineShaderStageCreateInfo',
+-- 'PipelineTessellationStateCreateInfo',
+-- 'PipelineVertexInputStateCreateInfo', 'PipelineViewportStateCreateInfo',
+-- 'Vulkan.Core10.Handles.RenderPass',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createGraphicsPipelines'
+data GraphicsPipelineCreateInfo (es :: [Type]) = GraphicsPipelineCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+    -- specifying how the pipeline will be generated.
+    flags :: PipelineCreateFlags
+  , -- | @pStages@ is a pointer to an array of @stageCount@
+    -- 'PipelineShaderStageCreateInfo' structures describing the set of the
+    -- shader stages to be included in the graphics pipeline.
+    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
+  , -- | @pVertexInputState@ is a pointer to a
+    -- 'PipelineVertexInputStateCreateInfo' structure. It is ignored if the
+    -- pipeline includes a mesh shader stage.
+    vertexInputState :: Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
+  , -- | @pInputAssemblyState@ is a pointer to a
+    -- 'PipelineInputAssemblyStateCreateInfo' structure which determines input
+    -- assembly behavior, as described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing Drawing Commands>.
+    -- It is ignored if the pipeline includes a mesh shader stage.
+    inputAssemblyState :: Maybe PipelineInputAssemblyStateCreateInfo
+  , -- | @pTessellationState@ is a pointer to a
+    -- 'PipelineTessellationStateCreateInfo' structure, and is ignored if the
+    -- pipeline does not include a tessellation control shader stage and
+    -- tessellation evaluation shader stage.
+    tessellationState :: Maybe (SomeStruct PipelineTessellationStateCreateInfo)
+  , -- | @pViewportState@ is a pointer to a 'PipelineViewportStateCreateInfo'
+    -- structure, and is ignored if the pipeline has rasterization disabled.
+    viewportState :: Maybe (SomeStruct PipelineViewportStateCreateInfo)
+  , -- | @pRasterizationState@ is a pointer to a
+    -- 'PipelineRasterizationStateCreateInfo' structure.
+    rasterizationState :: SomeStruct PipelineRasterizationStateCreateInfo
+  , -- | @pMultisampleState@ is a pointer to a
+    -- 'PipelineMultisampleStateCreateInfo' structure, and is ignored if the
+    -- pipeline has rasterization disabled.
+    multisampleState :: Maybe (SomeStruct PipelineMultisampleStateCreateInfo)
+  , -- | @pDepthStencilState@ is a pointer to a
+    -- 'PipelineDepthStencilStateCreateInfo' structure, and is ignored if the
+    -- pipeline has rasterization disabled or if the subpass of the render pass
+    -- the pipeline is created against does not use a depth\/stencil
+    -- attachment.
+    depthStencilState :: Maybe PipelineDepthStencilStateCreateInfo
+  , -- | @pColorBlendState@ is a pointer to a 'PipelineColorBlendStateCreateInfo'
+    -- structure, and is ignored if the pipeline has rasterization disabled or
+    -- if the subpass of the render pass the pipeline is created against does
+    -- not use any color attachments.
+    colorBlendState :: Maybe (SomeStruct PipelineColorBlendStateCreateInfo)
+  , -- | @pDynamicState@ is a pointer to a 'PipelineDynamicStateCreateInfo'
+    -- structure, and is used to indicate which properties of the pipeline
+    -- state object are dynamic and /can/ be changed independently of the
+    -- pipeline state. This /can/ be @NULL@, which means no state in the
+    -- pipeline is considered dynamic.
+    dynamicState :: Maybe PipelineDynamicStateCreateInfo
+  , -- | @layout@ is the description of binding locations used by both the
+    -- pipeline and descriptor sets used with the pipeline.
+    layout :: PipelineLayout
+  , -- | @renderPass@ is a handle to a render pass object describing the
+    -- environment in which the pipeline will be used; the pipeline /must/ only
+    -- be used with an instance of any render pass compatible with the one
+    -- provided. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility Render Pass Compatibility>
+    -- for more information.
+    renderPass :: RenderPass
+  , -- | @subpass@ is the index of the subpass in the render pass where this
+    -- pipeline will be used.
+    subpass :: Word32
+  , -- | @basePipelineHandle@ is a pipeline to derive from.
+    basePipelineHandle :: Pipeline
+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
+    -- as a pipeline to derive from.
+    basePipelineIndex :: Int32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (GraphicsPipelineCreateInfo es)
+
+instance Extensible GraphicsPipelineCreateInfo where
+  extensibleType = STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext GraphicsPipelineCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends GraphicsPipelineCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f
+    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @PipelineRepresentativeFragmentTestStateCreateInfoNV = Just f
+    | Just Refl <- eqT @e @PipelineDiscardRectangleStateCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @GraphicsPipelineShaderGroupsCreateInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss GraphicsPipelineCreateInfo es, PokeChain es) => ToCStruct (GraphicsPipelineCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 144 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GraphicsPipelineCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))
+    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
+    pVertexInputState'' <- case (vertexInputState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineVertexInputStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineVertexInputStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo _)))) pVertexInputState''
+    pInputAssemblyState'' <- case (inputAssemblyState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr PipelineInputAssemblyStateCreateInfo))) pInputAssemblyState''
+    pTessellationState'' <- case (tessellationState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineTessellationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineTessellationStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (PipelineTessellationStateCreateInfo _)))) pTessellationState''
+    pViewportState'' <- case (viewportState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineViewportStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineViewportStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (PipelineViewportStateCreateInfo _)))) pViewportState''
+    pRasterizationState'' <- ContT @_ @_ @(Ptr (PipelineRasterizationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineRasterizationStateCreateInfo (rasterizationState) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo _)))) pRasterizationState''
+    pMultisampleState'' <- case (multisampleState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineMultisampleStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineMultisampleStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr (PipelineMultisampleStateCreateInfo _)))) pMultisampleState''
+    pDepthStencilState'' <- case (depthStencilState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr PipelineDepthStencilStateCreateInfo))) pDepthStencilState''
+    pColorBlendState'' <- case (colorBlendState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineColorBlendStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineColorBlendStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr (PipelineColorBlendStateCreateInfo _)))) pColorBlendState''
+    pDynamicState'' <- case (dynamicState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 96 :: Ptr (Ptr PipelineDynamicStateCreateInfo))) pDynamicState''
+    lift $ poke ((p `plusPtr` 104 :: Ptr PipelineLayout)) (layout)
+    lift $ poke ((p `plusPtr` 112 :: Ptr RenderPass)) (renderPass)
+    lift $ poke ((p `plusPtr` 120 :: Ptr Word32)) (subpass)
+    lift $ poke ((p `plusPtr` 128 :: Ptr Pipeline)) (basePipelineHandle)
+    lift $ poke ((p `plusPtr` 136 :: Ptr Int32)) (basePipelineIndex)
+    lift $ f
+  cStructSize = 144
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (mempty)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
+    pRasterizationState'' <- ContT @_ @_ @(Ptr (PipelineRasterizationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineRasterizationStateCreateInfo ((SomeStruct zero)) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo _)))) pRasterizationState''
+    lift $ poke ((p `plusPtr` 104 :: Ptr PipelineLayout)) (zero)
+    lift $ poke ((p `plusPtr` 112 :: Ptr RenderPass)) (zero)
+    lift $ poke ((p `plusPtr` 120 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 136 :: Ptr Int32)) (zero)
+    lift $ f
+
+instance (Extendss GraphicsPipelineCreateInfo es, PeekChain es) => FromCStruct (GraphicsPipelineCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
+    stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo a))))
+    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
+    pVertexInputState <- peek @(Ptr (PipelineVertexInputStateCreateInfo _)) ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo a))))
+    pVertexInputState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pVertexInputState
+    pInputAssemblyState <- peek @(Ptr PipelineInputAssemblyStateCreateInfo) ((p `plusPtr` 40 :: Ptr (Ptr PipelineInputAssemblyStateCreateInfo)))
+    pInputAssemblyState' <- maybePeek (\j -> peekCStruct @PipelineInputAssemblyStateCreateInfo (j)) pInputAssemblyState
+    pTessellationState <- peek @(Ptr (PipelineTessellationStateCreateInfo _)) ((p `plusPtr` 48 :: Ptr (Ptr (PipelineTessellationStateCreateInfo a))))
+    pTessellationState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pTessellationState
+    pViewportState <- peek @(Ptr (PipelineViewportStateCreateInfo _)) ((p `plusPtr` 56 :: Ptr (Ptr (PipelineViewportStateCreateInfo a))))
+    pViewportState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pViewportState
+    pRasterizationState <- peekSomeCStruct . forgetExtensions =<< peek ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo a))))
+    pMultisampleState <- peek @(Ptr (PipelineMultisampleStateCreateInfo _)) ((p `plusPtr` 72 :: Ptr (Ptr (PipelineMultisampleStateCreateInfo a))))
+    pMultisampleState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pMultisampleState
+    pDepthStencilState <- peek @(Ptr PipelineDepthStencilStateCreateInfo) ((p `plusPtr` 80 :: Ptr (Ptr PipelineDepthStencilStateCreateInfo)))
+    pDepthStencilState' <- maybePeek (\j -> peekCStruct @PipelineDepthStencilStateCreateInfo (j)) pDepthStencilState
+    pColorBlendState <- peek @(Ptr (PipelineColorBlendStateCreateInfo _)) ((p `plusPtr` 88 :: Ptr (Ptr (PipelineColorBlendStateCreateInfo a))))
+    pColorBlendState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pColorBlendState
+    pDynamicState <- peek @(Ptr PipelineDynamicStateCreateInfo) ((p `plusPtr` 96 :: Ptr (Ptr PipelineDynamicStateCreateInfo)))
+    pDynamicState' <- maybePeek (\j -> peekCStruct @PipelineDynamicStateCreateInfo (j)) pDynamicState
+    layout <- peek @PipelineLayout ((p `plusPtr` 104 :: Ptr PipelineLayout))
+    renderPass <- peek @RenderPass ((p `plusPtr` 112 :: Ptr RenderPass))
+    subpass <- peek @Word32 ((p `plusPtr` 120 :: Ptr Word32))
+    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 128 :: Ptr Pipeline))
+    basePipelineIndex <- peek @Int32 ((p `plusPtr` 136 :: Ptr Int32))
+    pure $ GraphicsPipelineCreateInfo
+             next flags pStages' pVertexInputState' pInputAssemblyState' pTessellationState' pViewportState' pRasterizationState pMultisampleState' pDepthStencilState' pColorBlendState' pDynamicState' layout renderPass subpass basePipelineHandle basePipelineIndex
+
+instance es ~ '[] => Zero (GraphicsPipelineCreateInfo es) where
+  zero = GraphicsPipelineCreateInfo
+           ()
+           zero
+           mempty
+           Nothing
+           Nothing
+           Nothing
+           Nothing
+           (SomeStruct zero)
+           Nothing
+           Nothing
+           Nothing
+           Nothing
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/Pipeline.hs-boot b/src/Vulkan/Core10/Pipeline.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Pipeline.hs-boot
@@ -0,0 +1,180 @@
+{-# language CPP #-}
+module Vulkan.Core10.Pipeline  ( ComputePipelineCreateInfo
+                               , GraphicsPipelineCreateInfo
+                               , PipelineColorBlendAttachmentState
+                               , PipelineColorBlendStateCreateInfo
+                               , PipelineDepthStencilStateCreateInfo
+                               , PipelineDynamicStateCreateInfo
+                               , PipelineInputAssemblyStateCreateInfo
+                               , PipelineMultisampleStateCreateInfo
+                               , PipelineRasterizationStateCreateInfo
+                               , PipelineShaderStageCreateInfo
+                               , PipelineTessellationStateCreateInfo
+                               , PipelineVertexInputStateCreateInfo
+                               , PipelineViewportStateCreateInfo
+                               , SpecializationInfo
+                               , SpecializationMapEntry
+                               , StencilOpState
+                               , VertexInputAttributeDescription
+                               , VertexInputBindingDescription
+                               ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role ComputePipelineCreateInfo nominal
+data ComputePipelineCreateInfo (es :: [Type])
+
+instance (Extendss ComputePipelineCreateInfo es, PokeChain es) => ToCStruct (ComputePipelineCreateInfo es)
+instance Show (Chain es) => Show (ComputePipelineCreateInfo es)
+
+instance (Extendss ComputePipelineCreateInfo es, PeekChain es) => FromCStruct (ComputePipelineCreateInfo es)
+
+
+type role GraphicsPipelineCreateInfo nominal
+data GraphicsPipelineCreateInfo (es :: [Type])
+
+instance (Extendss GraphicsPipelineCreateInfo es, PokeChain es) => ToCStruct (GraphicsPipelineCreateInfo es)
+instance Show (Chain es) => Show (GraphicsPipelineCreateInfo es)
+
+instance (Extendss GraphicsPipelineCreateInfo es, PeekChain es) => FromCStruct (GraphicsPipelineCreateInfo es)
+
+
+data PipelineColorBlendAttachmentState
+
+instance ToCStruct PipelineColorBlendAttachmentState
+instance Show PipelineColorBlendAttachmentState
+
+instance FromCStruct PipelineColorBlendAttachmentState
+
+
+type role PipelineColorBlendStateCreateInfo nominal
+data PipelineColorBlendStateCreateInfo (es :: [Type])
+
+instance (Extendss PipelineColorBlendStateCreateInfo es, PokeChain es) => ToCStruct (PipelineColorBlendStateCreateInfo es)
+instance Show (Chain es) => Show (PipelineColorBlendStateCreateInfo es)
+
+instance (Extendss PipelineColorBlendStateCreateInfo es, PeekChain es) => FromCStruct (PipelineColorBlendStateCreateInfo es)
+
+
+data PipelineDepthStencilStateCreateInfo
+
+instance ToCStruct PipelineDepthStencilStateCreateInfo
+instance Show PipelineDepthStencilStateCreateInfo
+
+instance FromCStruct PipelineDepthStencilStateCreateInfo
+
+
+data PipelineDynamicStateCreateInfo
+
+instance ToCStruct PipelineDynamicStateCreateInfo
+instance Show PipelineDynamicStateCreateInfo
+
+instance FromCStruct PipelineDynamicStateCreateInfo
+
+
+data PipelineInputAssemblyStateCreateInfo
+
+instance ToCStruct PipelineInputAssemblyStateCreateInfo
+instance Show PipelineInputAssemblyStateCreateInfo
+
+instance FromCStruct PipelineInputAssemblyStateCreateInfo
+
+
+type role PipelineMultisampleStateCreateInfo nominal
+data PipelineMultisampleStateCreateInfo (es :: [Type])
+
+instance (Extendss PipelineMultisampleStateCreateInfo es, PokeChain es) => ToCStruct (PipelineMultisampleStateCreateInfo es)
+instance Show (Chain es) => Show (PipelineMultisampleStateCreateInfo es)
+
+instance (Extendss PipelineMultisampleStateCreateInfo es, PeekChain es) => FromCStruct (PipelineMultisampleStateCreateInfo es)
+
+
+type role PipelineRasterizationStateCreateInfo nominal
+data PipelineRasterizationStateCreateInfo (es :: [Type])
+
+instance (Extendss PipelineRasterizationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineRasterizationStateCreateInfo es)
+instance Show (Chain es) => Show (PipelineRasterizationStateCreateInfo es)
+
+instance (Extendss PipelineRasterizationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineRasterizationStateCreateInfo es)
+
+
+type role PipelineShaderStageCreateInfo nominal
+data PipelineShaderStageCreateInfo (es :: [Type])
+
+instance (Extendss PipelineShaderStageCreateInfo es, PokeChain es) => ToCStruct (PipelineShaderStageCreateInfo es)
+instance Show (Chain es) => Show (PipelineShaderStageCreateInfo es)
+
+instance (Extendss PipelineShaderStageCreateInfo es, PeekChain es) => FromCStruct (PipelineShaderStageCreateInfo es)
+
+
+type role PipelineTessellationStateCreateInfo nominal
+data PipelineTessellationStateCreateInfo (es :: [Type])
+
+instance (Extendss PipelineTessellationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineTessellationStateCreateInfo es)
+instance Show (Chain es) => Show (PipelineTessellationStateCreateInfo es)
+
+instance (Extendss PipelineTessellationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineTessellationStateCreateInfo es)
+
+
+type role PipelineVertexInputStateCreateInfo nominal
+data PipelineVertexInputStateCreateInfo (es :: [Type])
+
+instance (Extendss PipelineVertexInputStateCreateInfo es, PokeChain es) => ToCStruct (PipelineVertexInputStateCreateInfo es)
+instance Show (Chain es) => Show (PipelineVertexInputStateCreateInfo es)
+
+instance (Extendss PipelineVertexInputStateCreateInfo es, PeekChain es) => FromCStruct (PipelineVertexInputStateCreateInfo es)
+
+
+type role PipelineViewportStateCreateInfo nominal
+data PipelineViewportStateCreateInfo (es :: [Type])
+
+instance (Extendss PipelineViewportStateCreateInfo es, PokeChain es) => ToCStruct (PipelineViewportStateCreateInfo es)
+instance Show (Chain es) => Show (PipelineViewportStateCreateInfo es)
+
+instance (Extendss PipelineViewportStateCreateInfo es, PeekChain es) => FromCStruct (PipelineViewportStateCreateInfo es)
+
+
+data SpecializationInfo
+
+instance ToCStruct SpecializationInfo
+instance Show SpecializationInfo
+
+instance FromCStruct SpecializationInfo
+
+
+data SpecializationMapEntry
+
+instance ToCStruct SpecializationMapEntry
+instance Show SpecializationMapEntry
+
+instance FromCStruct SpecializationMapEntry
+
+
+data StencilOpState
+
+instance ToCStruct StencilOpState
+instance Show StencilOpState
+
+instance FromCStruct StencilOpState
+
+
+data VertexInputAttributeDescription
+
+instance ToCStruct VertexInputAttributeDescription
+instance Show VertexInputAttributeDescription
+
+instance FromCStruct VertexInputAttributeDescription
+
+
+data VertexInputBindingDescription
+
+instance ToCStruct VertexInputBindingDescription
+instance Show VertexInputBindingDescription
+
+instance FromCStruct VertexInputBindingDescription
+
diff --git a/src/Vulkan/Core10/PipelineCache.hs b/src/Vulkan/Core10/PipelineCache.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/PipelineCache.hs
@@ -0,0 +1,566 @@
+{-# language CPP #-}
+module Vulkan.Core10.PipelineCache  ( createPipelineCache
+                                    , withPipelineCache
+                                    , destroyPipelineCache
+                                    , getPipelineCacheData
+                                    , mergePipelineCaches
+                                    , PipelineCacheCreateInfo(..)
+                                    ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.ByteString (packCStringLen)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Foreign.C.Types (CSize(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreatePipelineCache))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyPipelineCache))
+import Vulkan.Dynamic (DeviceCmds(pVkGetPipelineCacheData))
+import Vulkan.Dynamic (DeviceCmds(pVkMergePipelineCaches))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (PipelineCache)
+import Vulkan.Core10.Handles (PipelineCache(..))
+import Vulkan.Core10.Enums.PipelineCacheCreateFlagBits (PipelineCacheCreateFlags)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreatePipelineCache
+  :: FunPtr (Ptr Device_T -> Ptr PipelineCacheCreateInfo -> Ptr AllocationCallbacks -> Ptr PipelineCache -> IO Result) -> Ptr Device_T -> Ptr PipelineCacheCreateInfo -> Ptr AllocationCallbacks -> Ptr PipelineCache -> IO Result
+
+-- | vkCreatePipelineCache - Creates a new pipeline cache
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the pipeline cache
+--     object.
+--
+-- -   @pCreateInfo@ is a pointer to a 'PipelineCacheCreateInfo' structure
+--     containing initial parameters for the pipeline cache object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pPipelineCache@ is a pointer to a
+--     'Vulkan.Core10.Handles.PipelineCache' handle in which the resulting
+--     pipeline cache object is returned.
+--
+-- = 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
+-- 'getPipelineCacheData'. 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
+-- 'Vulkan.Core10.Pipeline.createGraphicsPipelines'
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV', and
+-- 'Vulkan.Core10.Pipeline.createComputePipelines' commands. If the
+-- pipeline cache passed into these commands is not
+-- 'Vulkan.Core10.APIConstants.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.
+--
+-- If @flags@ of @pCreateInfo@ includes
+-- 'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
+-- all commands that modify the returned pipeline cache object /must/ be
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>.
+--
+-- 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 @vkCreate*Pipelines@
+-- commands.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'PipelineCacheCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pPipelineCache@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.PipelineCache' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.PipelineCache',
+-- 'PipelineCacheCreateInfo'
+createPipelineCache :: forall io . MonadIO io => Device -> PipelineCacheCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (PipelineCache)
+createPipelineCache device createInfo allocator = liftIO . evalContT $ do
+  let vkCreatePipelineCachePtr = pVkCreatePipelineCache (deviceCmds (device :: Device))
+  lift $ unless (vkCreatePipelineCachePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreatePipelineCache is null" Nothing Nothing
+  let vkCreatePipelineCache' = mkVkCreatePipelineCache vkCreatePipelineCachePtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPPipelineCache <- ContT $ bracket (callocBytes @PipelineCache 8) free
+  r <- lift $ vkCreatePipelineCache' (deviceHandle (device)) pCreateInfo pAllocator (pPPipelineCache)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPipelineCache <- lift $ peek @PipelineCache pPPipelineCache
+  pure $ (pPipelineCache)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createPipelineCache' and 'destroyPipelineCache'
+--
+-- To ensure that 'destroyPipelineCache' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withPipelineCache :: forall io r . MonadIO io => Device -> PipelineCacheCreateInfo -> Maybe AllocationCallbacks -> (io (PipelineCache) -> ((PipelineCache) -> io ()) -> r) -> r
+withPipelineCache device pCreateInfo pAllocator b =
+  b (createPipelineCache device pCreateInfo pAllocator)
+    (\(o0) -> destroyPipelineCache device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyPipelineCache
+  :: FunPtr (Ptr Device_T -> PipelineCache -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> PipelineCache -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyPipelineCache - Destroy a pipeline cache object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @pipelineCache@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @pipelineCache@ was created, @pAllocator@ /must/ be
+--     @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pipelineCache@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineCache' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pipelineCache@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.PipelineCache'
+destroyPipelineCache :: forall io . MonadIO io => Device -> PipelineCache -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyPipelineCache device pipelineCache allocator = liftIO . evalContT $ do
+  let vkDestroyPipelineCachePtr = pVkDestroyPipelineCache (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyPipelineCachePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyPipelineCache is null" Nothing Nothing
+  let vkDestroyPipelineCache' = mkVkDestroyPipelineCache vkDestroyPipelineCachePtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyPipelineCache' (deviceHandle (device)) (pipelineCache) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPipelineCacheData
+  :: FunPtr (Ptr Device_T -> PipelineCache -> Ptr CSize -> Ptr () -> IO Result) -> Ptr Device_T -> PipelineCache -> Ptr CSize -> Ptr () -> IO Result
+
+-- | vkGetPipelineCacheData - Get the data store from a pipeline cache
+--
+-- = 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 @size_t@ 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
+--
+-- 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 'getPipelineCacheData' will return
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE'. Any data written to @pData@ is
+-- valid and /can/ be provided as the @pInitialData@ member of the
+-- 'PipelineCacheCreateInfo' structure passed to 'createPipelineCache'.
+--
+-- Two calls to 'getPipelineCacheData' 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:
+--
+-- +--------+----------------------------------------+------------------------------------------------------------------------------------+
+-- | Offset | Size                                   | Meaning                                                                            |
+-- +========+========================================+====================================================================================+
+-- | 0      | 4                                      | length in bytes of the entire pipeline cache header written as a stream of bytes,  |
+-- |        |                                        | with the least significant byte first                                              |
+-- +--------+----------------------------------------+------------------------------------------------------------------------------------+
+-- | 4      | 4                                      | a 'Vulkan.Core10.Enums.PipelineCacheHeaderVersion.PipelineCacheHeaderVersion'      |
+-- |        |                                        | value written as a stream of bytes, with the least significant byte first          |
+-- +--------+----------------------------------------+------------------------------------------------------------------------------------+
+-- | 8      | 4                                      | a vendor ID equal to                                                               |
+-- |        |                                        | 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@vendorID@ written  |
+-- |        |                                        | as a stream of bytes, with the least significant byte first                        |
+-- +--------+----------------------------------------+------------------------------------------------------------------------------------+
+-- | 12     | 4                                      | a device ID equal to                                                               |
+-- |        |                                        | 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@deviceID@ written  |
+-- |        |                                        | as a stream of bytes, with the least significant byte first                        |
+-- +--------+----------------------------------------+------------------------------------------------------------------------------------+
+-- | 16     | 'Vulkan.Core10.APIConstants.UUID_SIZE' | a pipeline cache ID equal to                                                       |
+-- |        |                                        | 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@pipelineCacheUUID@ |
+-- +--------+----------------------------------------+------------------------------------------------------------------------------------+
+--
+-- Layout for pipeline cache header version
+-- 'Vulkan.Core10.Enums.PipelineCacheHeaderVersion.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
+-- 'Vulkan.Core10.Enums.PipelineCacheHeaderVersion.PipelineCacheHeaderVersion'.
+-- 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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pipelineCache@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineCache' 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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.PipelineCache'
+getPipelineCacheData :: forall io . MonadIO io => Device -> PipelineCache -> io (Result, ("data" ::: ByteString))
+getPipelineCacheData device pipelineCache = liftIO . evalContT $ do
+  let vkGetPipelineCacheDataPtr = pVkGetPipelineCacheData (deviceCmds (device :: Device))
+  lift $ unless (vkGetPipelineCacheDataPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPipelineCacheData is null" Nothing Nothing
+  let vkGetPipelineCacheData' = mkVkGetPipelineCacheData vkGetPipelineCacheDataPtr
+  let device' = deviceHandle (device)
+  pPDataSize <- ContT $ bracket (callocBytes @CSize 8) free
+  r <- lift $ vkGetPipelineCacheData' device' (pipelineCache) (pPDataSize) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pDataSize <- lift $ peek @CSize pPDataSize
+  pPData <- ContT $ bracket (callocBytes @(()) (fromIntegral (((\(CSize a) -> a) pDataSize)))) free
+  r' <- lift $ vkGetPipelineCacheData' device' (pipelineCache) (pPDataSize) (pPData)
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pDataSize'' <- lift $ peek @CSize pPDataSize
+  pData' <- lift $ packCStringLen  (castPtr @() @CChar pPData, (fromIntegral (((\(CSize a) -> a) pDataSize''))))
+  pure $ ((r'), pData')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkMergePipelineCaches
+  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr PipelineCache -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr PipelineCache -> IO Result
+
+-- | vkMergePipelineCaches - Combine the data stores of pipeline caches
+--
+-- = 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 a pointer to an array of pipeline cache handles,
+--     which will be merged into @dstCache@. The previous contents of
+--     @dstCache@ are included after the merge.
+--
+-- = 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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @dstCache@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineCache'
+--     handle
+--
+-- -   @pSrcCaches@ /must/ be a valid pointer to an array of
+--     @srcCacheCount@ valid 'Vulkan.Core10.Handles.PipelineCache' handles
+--
+-- -   @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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.PipelineCache'
+mergePipelineCaches :: forall io . MonadIO io => Device -> ("dstCache" ::: PipelineCache) -> ("srcCaches" ::: Vector PipelineCache) -> io ()
+mergePipelineCaches device dstCache srcCaches = liftIO . evalContT $ do
+  let vkMergePipelineCachesPtr = pVkMergePipelineCaches (deviceCmds (device :: Device))
+  lift $ unless (vkMergePipelineCachesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkMergePipelineCaches is null" Nothing Nothing
+  let vkMergePipelineCaches' = mkVkMergePipelineCaches vkMergePipelineCachesPtr
+  pPSrcCaches <- ContT $ allocaBytesAligned @PipelineCache ((Data.Vector.length (srcCaches)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPSrcCaches `plusPtr` (8 * (i)) :: Ptr PipelineCache) (e)) (srcCaches)
+  r <- lift $ vkMergePipelineCaches' (deviceHandle (device)) (dstCache) ((fromIntegral (Data.Vector.length $ (srcCaches)) :: Word32)) (pPSrcCaches)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkPipelineCacheCreateInfo - Structure specifying parameters of a newly
+-- created pipeline cache
+--
+-- == Valid Usage
+--
+-- -   If @initialDataSize@ is not @0@, it /must/ be equal to the size of
+--     @pInitialData@, as returned by 'getPipelineCacheData' when
+--     @pInitialData@ was originally retrieved
+--
+-- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ have been
+--     retrieved from a previous call to 'getPipelineCacheData'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PipelineCacheCreateFlagBits'
+--     values
+--
+-- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ be a valid
+--     pointer to an array of @initialDataSize@ bytes
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PipelineCacheCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createPipelineCache'
+data PipelineCacheCreateInfo = PipelineCacheCreateInfo
+  { -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PipelineCacheCreateFlagBits'
+    -- specifying the behavior of the pipeline cache.
+    flags :: PipelineCacheCreateFlags
+  , -- | @initialDataSize@ is the number of bytes in @pInitialData@. If
+    -- @initialDataSize@ is zero, the pipeline cache will initially be empty.
+    initialDataSize :: Word64
+  , -- | @pInitialData@ is a pointer to previously retrieved pipeline cache data.
+    -- If the pipeline cache data is incompatible (as defined below) with the
+    -- device, the pipeline cache will be initially empty. If @initialDataSize@
+    -- is zero, @pInitialData@ is ignored.
+    initialData :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show PipelineCacheCreateInfo
+
+instance ToCStruct PipelineCacheCreateInfo where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineCacheCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineCacheCreateFlags)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (initialDataSize))
+    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (initialData)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct PipelineCacheCreateInfo where
+  peekCStruct p = do
+    flags <- peek @PipelineCacheCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCacheCreateFlags))
+    initialDataSize <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
+    pInitialData <- peek @(Ptr ()) ((p `plusPtr` 32 :: Ptr (Ptr ())))
+    pure $ PipelineCacheCreateInfo
+             flags ((\(CSize a) -> a) initialDataSize) pInitialData
+
+instance Storable PipelineCacheCreateInfo where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineCacheCreateInfo where
+  zero = PipelineCacheCreateInfo
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/PipelineCache.hs-boot b/src/Vulkan/Core10/PipelineCache.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/PipelineCache.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core10.PipelineCache  (PipelineCacheCreateInfo) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PipelineCacheCreateInfo
+
+instance ToCStruct PipelineCacheCreateInfo
+instance Show PipelineCacheCreateInfo
+
+instance FromCStruct PipelineCacheCreateInfo
+
diff --git a/src/Vulkan/Core10/PipelineLayout.hs b/src/Vulkan/Core10/PipelineLayout.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/PipelineLayout.hs
@@ -0,0 +1,658 @@
+{-# language CPP #-}
+module Vulkan.Core10.PipelineLayout  ( createPipelineLayout
+                                     , withPipelineLayout
+                                     , destroyPipelineLayout
+                                     , PushConstantRange(..)
+                                     , PipelineLayoutCreateInfo(..)
+                                     ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Handles (DescriptorSetLayout)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreatePipelineLayout))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyPipelineLayout))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (PipelineLayout)
+import Vulkan.Core10.Handles (PipelineLayout(..))
+import Vulkan.Core10.Enums.PipelineLayoutCreateFlags (PipelineLayoutCreateFlags)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreatePipelineLayout
+  :: FunPtr (Ptr Device_T -> Ptr PipelineLayoutCreateInfo -> Ptr AllocationCallbacks -> Ptr PipelineLayout -> IO Result) -> Ptr Device_T -> Ptr PipelineLayoutCreateInfo -> Ptr AllocationCallbacks -> Ptr PipelineLayout -> IO Result
+
+-- | vkCreatePipelineLayout - Creates a new pipeline layout object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the pipeline layout.
+--
+-- -   @pCreateInfo@ is a pointer to a 'PipelineLayoutCreateInfo' structure
+--     specifying the state of the pipeline layout object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pPipelineLayout@ is a pointer to a
+--     'Vulkan.Core10.Handles.PipelineLayout' handle in which the resulting
+--     pipeline layout object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'PipelineLayoutCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pPipelineLayout@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.PipelineLayout' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.PipelineLayout',
+-- 'PipelineLayoutCreateInfo'
+createPipelineLayout :: forall io . MonadIO io => Device -> PipelineLayoutCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (PipelineLayout)
+createPipelineLayout device createInfo allocator = liftIO . evalContT $ do
+  let vkCreatePipelineLayoutPtr = pVkCreatePipelineLayout (deviceCmds (device :: Device))
+  lift $ unless (vkCreatePipelineLayoutPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreatePipelineLayout is null" Nothing Nothing
+  let vkCreatePipelineLayout' = mkVkCreatePipelineLayout vkCreatePipelineLayoutPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPPipelineLayout <- ContT $ bracket (callocBytes @PipelineLayout 8) free
+  r <- lift $ vkCreatePipelineLayout' (deviceHandle (device)) pCreateInfo pAllocator (pPPipelineLayout)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPipelineLayout <- lift $ peek @PipelineLayout pPPipelineLayout
+  pure $ (pPipelineLayout)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createPipelineLayout' and 'destroyPipelineLayout'
+--
+-- To ensure that 'destroyPipelineLayout' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withPipelineLayout :: forall io r . MonadIO io => Device -> PipelineLayoutCreateInfo -> Maybe AllocationCallbacks -> (io (PipelineLayout) -> ((PipelineLayout) -> io ()) -> r) -> r
+withPipelineLayout device pCreateInfo pAllocator b =
+  b (createPipelineLayout device pCreateInfo pAllocator)
+    (\(o0) -> destroyPipelineLayout device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyPipelineLayout
+  :: FunPtr (Ptr Device_T -> PipelineLayout -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> PipelineLayout -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyPipelineLayout - Destroy a pipeline layout object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @pipelineLayout@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @pipelineLayout@ was created, @pAllocator@ /must/ be
+--     @NULL@
+--
+-- -   @pipelineLayout@ /must/ not have been passed to any @vkCmd*@ command
+--     for any command buffers that are still in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--     when 'destroyPipelineLayout' is called
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @pipelineLayout@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pipelineLayout@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineLayout' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' 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
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.PipelineLayout'
+destroyPipelineLayout :: forall io . MonadIO io => Device -> PipelineLayout -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyPipelineLayout device pipelineLayout allocator = liftIO . evalContT $ do
+  let vkDestroyPipelineLayoutPtr = pVkDestroyPipelineLayout (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyPipelineLayoutPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyPipelineLayout is null" Nothing Nothing
+  let vkDestroyPipelineLayout' = mkVkDestroyPipelineLayout vkDestroyPipelineLayoutPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyPipelineLayout' (deviceHandle (device)) (pipelineLayout) pAllocator
+  pure $ ()
+
+
+-- | VkPushConstantRange - Structure specifying a push constant range
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PipelineLayoutCreateInfo',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'
+data PushConstantRange = PushConstantRange
+  { -- | @stageFlags@ /must/ not be @0@
+    stageFlags :: ShaderStageFlags
+  , -- | @offset@ /must/ be a multiple of @4@
+    offset :: Word32
+  , -- | @size@ /must/ be less than or equal to
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
+    -- minus @offset@
+    size :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PushConstantRange
+
+instance ToCStruct PushConstantRange where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PushConstantRange{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr ShaderStageFlags)) (stageFlags)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (offset)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (size)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr ShaderStageFlags)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PushConstantRange where
+  peekCStruct p = do
+    stageFlags <- peek @ShaderStageFlags ((p `plusPtr` 0 :: Ptr ShaderStageFlags))
+    offset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    size <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pure $ PushConstantRange
+             stageFlags offset size
+
+instance Storable PushConstantRange where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PushConstantRange where
+  zero = PushConstantRange
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineLayoutCreateInfo - Structure specifying the parameters of a
+-- newly created pipeline layout object
+--
+-- == Valid Usage
+--
+-- -   @setLayoutCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxBoundDescriptorSets@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorSamplers@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorUniformBuffers@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorStorageBuffers@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorSampledImages@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorStorageImages@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorInputAttachments@
+--
+-- -   The total number of bindings in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxPerStageDescriptorInlineUniformBlocks@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindSamplers@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindUniformBuffers@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindStorageBuffers@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindSampledImages@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindStorageImages@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindInputAttachments@
+--
+-- -   The total number of bindings with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetSamplers@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetUniformBuffers@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetUniformBuffersDynamic@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetStorageBuffers@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetStorageBuffersDynamic@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetSampledImages@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetStorageImages@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetInputAttachments@
+--
+-- -   The total number of bindings in descriptor set layouts created
+--     without the
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+--     bit set with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxDescriptorSetInlineUniformBlocks@
+--
+-- -   The total number of descriptors of the type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindSamplers@
+--
+-- -   The total number of descriptors of the type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindUniformBuffers@
+--
+-- -   The total number of descriptors of the type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@
+--
+-- -   The total number of descriptors of the type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindStorageBuffers@
+--
+-- -   The total number of descriptors of the type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@
+--
+-- -   The total number of descriptors of the type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindSampledImages@
+--
+-- -   The total number of descriptors of the type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+--     and
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindStorageImages@
+--
+-- -   The total number of descriptors of the type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindInputAttachments@
+--
+-- -   The total number of bindings with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxDescriptorSetUpdateAfterBindInlineUniformBlocks@
+--
+-- -   Any two elements of @pPushConstantRanges@ /must/ not include the
+--     same stage in @stageFlags@
+--
+-- -   @pSetLayouts@ /must/ not contain more than one descriptor set layout
+--     that was created with
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'
+--     set
+--
+-- -   The total number of bindings with a @descriptorType@ of
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR'
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@maxDescriptorSetAccelerationStructures@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.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
+--     'Vulkan.Core10.Handles.DescriptorSetLayout' handles
+--
+-- -   If @pushConstantRangeCount@ is not @0@, @pPushConstantRanges@ /must/
+--     be a valid pointer to an array of @pushConstantRangeCount@ valid
+--     'PushConstantRange' structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DescriptorSetLayout',
+-- 'Vulkan.Core10.Enums.PipelineLayoutCreateFlags.PipelineLayoutCreateFlags',
+-- 'PushConstantRange', 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createPipelineLayout'
+data PipelineLayoutCreateInfo = PipelineLayoutCreateInfo
+  { -- | @flags@ is reserved for future use.
+    flags :: PipelineLayoutCreateFlags
+  , -- | @pSetLayouts@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.DescriptorSetLayout' objects.
+    setLayouts :: Vector DescriptorSetLayout
+  , -- | @pPushConstantRanges@ is a pointer to an array of 'PushConstantRange'
+    -- 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.
+    pushConstantRanges :: Vector PushConstantRange
+  }
+  deriving (Typeable)
+deriving instance Show PipelineLayoutCreateInfo
+
+instance ToCStruct PipelineLayoutCreateInfo where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineLayoutCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineLayoutCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (setLayouts)) :: Word32))
+    pPSetLayouts' <- ContT $ allocaBytesAligned @DescriptorSetLayout ((Data.Vector.length (setLayouts)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSetLayouts' `plusPtr` (8 * (i)) :: Ptr DescriptorSetLayout) (e)) (setLayouts)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayout))) (pPSetLayouts')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (pushConstantRanges)) :: Word32))
+    pPPushConstantRanges' <- ContT $ allocaBytesAligned @PushConstantRange ((Data.Vector.length (pushConstantRanges)) * 12) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPushConstantRanges' `plusPtr` (12 * (i)) :: Ptr PushConstantRange) (e) . ($ ())) (pushConstantRanges)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr PushConstantRange))) (pPPushConstantRanges')
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPSetLayouts' <- ContT $ allocaBytesAligned @DescriptorSetLayout ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSetLayouts' `plusPtr` (8 * (i)) :: Ptr DescriptorSetLayout) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayout))) (pPSetLayouts')
+    pPPushConstantRanges' <- ContT $ allocaBytesAligned @PushConstantRange ((Data.Vector.length (mempty)) * 12) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPushConstantRanges' `plusPtr` (12 * (i)) :: Ptr PushConstantRange) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr PushConstantRange))) (pPPushConstantRanges')
+    lift $ f
+
+instance FromCStruct PipelineLayoutCreateInfo where
+  peekCStruct p = do
+    flags <- peek @PipelineLayoutCreateFlags ((p `plusPtr` 16 :: Ptr PipelineLayoutCreateFlags))
+    setLayoutCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pSetLayouts <- peek @(Ptr DescriptorSetLayout) ((p `plusPtr` 24 :: Ptr (Ptr DescriptorSetLayout)))
+    pSetLayouts' <- generateM (fromIntegral setLayoutCount) (\i -> peek @DescriptorSetLayout ((pSetLayouts `advancePtrBytes` (8 * (i)) :: Ptr DescriptorSetLayout)))
+    pushConstantRangeCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pPushConstantRanges <- peek @(Ptr PushConstantRange) ((p `plusPtr` 40 :: Ptr (Ptr PushConstantRange)))
+    pPushConstantRanges' <- generateM (fromIntegral pushConstantRangeCount) (\i -> peekCStruct @PushConstantRange ((pPushConstantRanges `advancePtrBytes` (12 * (i)) :: Ptr PushConstantRange)))
+    pure $ PipelineLayoutCreateInfo
+             flags pSetLayouts' pPushConstantRanges'
+
+instance Zero PipelineLayoutCreateInfo where
+  zero = PipelineLayoutCreateInfo
+           zero
+           mempty
+           mempty
+
diff --git a/src/Vulkan/Core10/PipelineLayout.hs-boot b/src/Vulkan/Core10/PipelineLayout.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/PipelineLayout.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Core10.PipelineLayout  ( PipelineLayoutCreateInfo
+                                     , PushConstantRange
+                                     ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PipelineLayoutCreateInfo
+
+instance ToCStruct PipelineLayoutCreateInfo
+instance Show PipelineLayoutCreateInfo
+
+instance FromCStruct PipelineLayoutCreateInfo
+
+
+data PushConstantRange
+
+instance ToCStruct PushConstantRange
+instance Show PushConstantRange
+
+instance FromCStruct PushConstantRange
+
diff --git a/src/Vulkan/Core10/Query.hs b/src/Vulkan/Core10/Query.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Query.hs
@@ -0,0 +1,576 @@
+{-# language CPP #-}
+module Vulkan.Core10.Query  ( createQueryPool
+                            , withQueryPool
+                            , destroyQueryPool
+                            , getQueryPoolResults
+                            , QueryPoolCreateInfo(..)
+                            ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Foreign.C.Types (CSize(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateQueryPool))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyQueryPool))
+import Vulkan.Dynamic (DeviceCmds(pVkGetQueryPoolResults))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits (QueryPipelineStatisticFlags)
+import Vulkan.Core10.Handles (QueryPool)
+import Vulkan.Core10.Handles (QueryPool(..))
+import Vulkan.Core10.Enums.QueryPoolCreateFlags (QueryPoolCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (QueryPoolPerformanceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (QueryPoolPerformanceQueryCreateInfoINTEL)
+import Vulkan.Core10.Enums.QueryResultFlagBits (QueryResultFlagBits(..))
+import Vulkan.Core10.Enums.QueryResultFlagBits (QueryResultFlags)
+import Vulkan.Core10.Enums.QueryType (QueryType)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateQueryPool
+  :: FunPtr (Ptr Device_T -> Ptr (QueryPoolCreateInfo a) -> Ptr AllocationCallbacks -> Ptr QueryPool -> IO Result) -> Ptr Device_T -> Ptr (QueryPoolCreateInfo a) -> Ptr AllocationCallbacks -> Ptr QueryPool -> IO Result
+
+-- | vkCreateQueryPool - Create a new query pool object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the query pool.
+--
+-- -   @pCreateInfo@ is a pointer to a 'QueryPoolCreateInfo' structure
+--     containing the number and type of queries to be managed by the pool.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pQueryPool@ is a pointer to a 'Vulkan.Core10.Handles.QueryPool'
+--     handle in which the resulting query pool object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'QueryPoolCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pQueryPool@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.QueryPool' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.QueryPool',
+-- 'QueryPoolCreateInfo'
+createQueryPool :: forall a io . (Extendss QueryPoolCreateInfo a, PokeChain a, MonadIO io) => Device -> QueryPoolCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (QueryPool)
+createQueryPool device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateQueryPoolPtr = pVkCreateQueryPool (deviceCmds (device :: Device))
+  lift $ unless (vkCreateQueryPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateQueryPool is null" Nothing Nothing
+  let vkCreateQueryPool' = mkVkCreateQueryPool vkCreateQueryPoolPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPQueryPool <- ContT $ bracket (callocBytes @QueryPool 8) free
+  r <- lift $ vkCreateQueryPool' (deviceHandle (device)) pCreateInfo pAllocator (pPQueryPool)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pQueryPool <- lift $ peek @QueryPool pPQueryPool
+  pure $ (pQueryPool)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createQueryPool' and 'destroyQueryPool'
+--
+-- To ensure that 'destroyQueryPool' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withQueryPool :: forall a io r . (Extendss QueryPoolCreateInfo a, PokeChain a, MonadIO io) => Device -> QueryPoolCreateInfo a -> Maybe AllocationCallbacks -> (io (QueryPool) -> ((QueryPool) -> io ()) -> r) -> r
+withQueryPool device pCreateInfo pAllocator b =
+  b (createQueryPool device pCreateInfo pAllocator)
+    (\(o0) -> destroyQueryPool device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyQueryPool
+  :: FunPtr (Ptr Device_T -> QueryPool -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> QueryPool -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyQueryPool - Destroy a query pool object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @queryPool@ /must/ have
+--     completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @queryPool@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @queryPool@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @queryPool@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @queryPool@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @queryPool@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.QueryPool'
+destroyQueryPool :: forall io . MonadIO io => Device -> QueryPool -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyQueryPool device queryPool allocator = liftIO . evalContT $ do
+  let vkDestroyQueryPoolPtr = pVkDestroyQueryPool (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyQueryPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyQueryPool is null" Nothing Nothing
+  let vkDestroyQueryPool' = mkVkDestroyQueryPool vkDestroyQueryPoolPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyQueryPool' (deviceHandle (device)) (queryPool) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetQueryPoolResults
+  :: FunPtr (Ptr Device_T -> QueryPool -> Word32 -> Word32 -> CSize -> Ptr () -> DeviceSize -> QueryResultFlags -> IO Result) -> Ptr Device_T -> QueryPool -> Word32 -> Word32 -> CSize -> Ptr () -> DeviceSize -> QueryResultFlags -> IO Result
+
+-- | vkGetQueryPoolResults - Copy results of queries in a query pool to a
+-- host memory region
+--
+-- = 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 to read.
+--
+-- -   @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
+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits'
+--     specifying how and when results are returned.
+--
+-- = Description
+--
+-- The range of queries read is defined by [@firstQuery@, @firstQuery@ +
+-- @queryCount@ - 1]. For pipeline statistics queries, each query index in
+-- the pool contains one integer value for each bit that is enabled in
+-- 'QueryPoolCreateInfo'::@pipelineStatistics@ when the pool is created.
+--
+-- 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-wait-bit-not-set below>.
+--
+-- If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is not
+-- set and the result overflows a 32-bit value, the value /may/ either wrap
+-- or saturate. Similarly, if
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set and
+-- the result overflows a 64-bit value, the value /may/ either wrap or
+-- saturate.
+--
+-- If 'Vulkan.Core10.Enums.QueryResultFlagBits.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,
+-- 'getQueryPoolResults' is guaranteed to succeed and return
+-- 'Vulkan.Core10.Enums.Result.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
+-- 'getQueryPoolResults' /may/ not return in finite time.
+--
+-- If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' and
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.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
+-- 'getQueryPoolResults' returns 'Vulkan.Core10.Enums.Result.NOT_READY'.
+-- However, availability state is still written to @pData@ for those
+-- queries if
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'
+-- is set.
+--
+-- Note
+--
+-- Applications /must/ take care to ensure that use of the
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.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
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery', and
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdEndQuery' for that query, then
+-- the query will remain in the available state until
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool' is
+-- called or the 'Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool'
+-- 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
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is used
+-- in combination with
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'.
+-- In this case, the returned availability status /may/ reflect the result
+-- of a previous use of the query unless
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool' is
+-- called or the 'Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool'
+-- 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 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT' is
+-- set, 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is
+-- not set, and the query’s status is unavailable, an intermediate result
+-- value between zero and the final result value is written to @pData@ for
+-- that query.
+--
+-- If
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.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
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.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 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is
+--     not set in @flags@, then @pData@ and @stride@ /must/ be multiples of
+--     @4@
+--
+-- -   If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is
+--     not set in @flags@ and the @queryType@ used to create @queryPool@
+--     was not
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     then @pData@ and @stride@ /must/ be multiples of @4@
+--
+-- -   If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is
+--     set in @flags@ then @pData@ and @stride@ /must/ be multiples of @8@
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     then @pData@ and @stride@ /must/ be multiples of the size of
+--     'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterResultKHR'
+--
+-- -   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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-memorylayout here>
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP', @flags@ /must/
+--     not contain
+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     @flags@ /must/ not contain
+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT',
+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'
+--     or 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     the @queryPool@ /must/ have been recorded once for each pass as
+--     retrieved via a call to
+--     'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' values
+--
+-- -   @dataSize@ /must/ be greater than @0@
+--
+-- -   @queryPool@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.NOT_READY'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Handles.QueryPool',
+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlags'
+getQueryPoolResults :: forall io . MonadIO io => Device -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> io (Result)
+getQueryPoolResults device queryPool firstQuery queryCount dataSize data' stride flags = liftIO $ do
+  let vkGetQueryPoolResultsPtr = pVkGetQueryPoolResults (deviceCmds (device :: Device))
+  unless (vkGetQueryPoolResultsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetQueryPoolResults is null" Nothing Nothing
+  let vkGetQueryPoolResults' = mkVkGetQueryPoolResults vkGetQueryPoolResultsPtr
+  r <- vkGetQueryPoolResults' (deviceHandle (device)) (queryPool) (firstQuery) (queryCount) (CSize (dataSize)) (data') (stride) (flags)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+-- | VkQueryPoolCreateInfo - Structure specifying parameters of a newly
+-- created query pool
+--
+-- = Description
+--
+-- @pipelineStatistics@ is ignored if @queryType@ is not
+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineStatisticsQuery pipeline statistics queries>
+--     feature is not enabled, @queryType@ /must/ not be
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'
+--
+-- -   If @queryType@ is
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS',
+--     @pipelineStatistics@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'
+--     values
+--
+-- -   If @queryType@ is
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     the @pNext@ chain /must/ include a structure of type
+--     'Vulkan.Extensions.VK_KHR_performance_query.QueryPoolPerformanceCreateInfoKHR'
+--
+-- -   @queryCount@ /must/ be greater than 0
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_KHR_performance_query.QueryPoolPerformanceCreateInfoKHR'
+--     or
+--     'Vulkan.Extensions.VK_INTEL_performance_query.QueryPoolPerformanceQueryCreateInfoINTEL'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @queryType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.QueryType.QueryType' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlags',
+-- 'Vulkan.Core10.Enums.QueryPoolCreateFlags.QueryPoolCreateFlags',
+-- 'Vulkan.Core10.Enums.QueryType.QueryType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createQueryPool'
+data QueryPoolCreateInfo (es :: [Type]) = QueryPoolCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: QueryPoolCreateFlags
+  , -- | @queryType@ is a 'Vulkan.Core10.Enums.QueryType.QueryType' value
+    -- specifying the type of queries managed by the pool.
+    queryType :: QueryType
+  , -- | @queryCount@ is the number of queries managed by the pool.
+    queryCount :: Word32
+  , -- | @pipelineStatistics@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'
+    -- specifying which counters will be returned in queries on the new pool,
+    -- as described below in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-pipestats>.
+    pipelineStatistics :: QueryPipelineStatisticFlags
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (QueryPoolCreateInfo es)
+
+instance Extensible QueryPoolCreateInfo where
+  extensibleType = STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext QueryPoolCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends QueryPoolCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @QueryPoolPerformanceQueryCreateInfoINTEL = Just f
+    | Just Refl <- eqT @e @QueryPoolPerformanceCreateInfoKHR = Just f
+    | otherwise = Nothing
+
+instance (Extendss QueryPoolCreateInfo es, PokeChain es) => ToCStruct (QueryPoolCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p QueryPoolCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr QueryPoolCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr QueryType)) (queryType)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (queryCount)
+    lift $ poke ((p `plusPtr` 28 :: Ptr QueryPipelineStatisticFlags)) (pipelineStatistics)
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr QueryType)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance (Extendss QueryPoolCreateInfo es, PeekChain es) => FromCStruct (QueryPoolCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @QueryPoolCreateFlags ((p `plusPtr` 16 :: Ptr QueryPoolCreateFlags))
+    queryType <- peek @QueryType ((p `plusPtr` 20 :: Ptr QueryType))
+    queryCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pipelineStatistics <- peek @QueryPipelineStatisticFlags ((p `plusPtr` 28 :: Ptr QueryPipelineStatisticFlags))
+    pure $ QueryPoolCreateInfo
+             next flags queryType queryCount pipelineStatistics
+
+instance es ~ '[] => Zero (QueryPoolCreateInfo es) where
+  zero = QueryPoolCreateInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/Query.hs-boot b/src/Vulkan/Core10/Query.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Query.hs-boot
@@ -0,0 +1,18 @@
+{-# language CPP #-}
+module Vulkan.Core10.Query  (QueryPoolCreateInfo) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role QueryPoolCreateInfo nominal
+data QueryPoolCreateInfo (es :: [Type])
+
+instance (Extendss QueryPoolCreateInfo es, PokeChain es) => ToCStruct (QueryPoolCreateInfo es)
+instance Show (Chain es) => Show (QueryPoolCreateInfo es)
+
+instance (Extendss QueryPoolCreateInfo es, PeekChain es) => FromCStruct (QueryPoolCreateInfo es)
+
diff --git a/src/Vulkan/Core10/Queue.hs b/src/Vulkan/Core10/Queue.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Queue.hs
@@ -0,0 +1,774 @@
+{-# language CPP #-}
+module Vulkan.Core10.Queue  ( getDeviceQueue
+                            , queueSubmit
+                            , queueWaitIdle
+                            , deviceWaitIdle
+                            , SubmitInfo(..)
+                            ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_win32 (D3D12FenceSubmitInfoKHR)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkDeviceWaitIdle))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceQueue))
+import Vulkan.Dynamic (DeviceCmds(pVkQueueSubmit))
+import Vulkan.Dynamic (DeviceCmds(pVkQueueWaitIdle))
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupSubmitInfo)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.Handles (Fence)
+import Vulkan.Core10.Handles (Fence(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PerformanceQuerySubmitInfoKHR)
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (ProtectedSubmitInfo)
+import Vulkan.Core10.Handles (Queue)
+import Vulkan.Core10.Handles (Queue(..))
+import Vulkan.Core10.Handles (Queue(Queue))
+import Vulkan.Core10.Handles (Queue_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Handles (Semaphore)
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (TimelineSemaphoreSubmitInfo)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_win32_keyed_mutex (Win32KeyedMutexAcquireReleaseInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_win32_keyed_mutex (Win32KeyedMutexAcquireReleaseInfoNV)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBMIT_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceQueue
+  :: FunPtr (Ptr Device_T -> Word32 -> Word32 -> Ptr (Ptr Queue_T) -> IO ()) -> Ptr Device_T -> Word32 -> Word32 -> Ptr (Ptr Queue_T) -> IO ()
+
+-- | vkGetDeviceQueue - Get a queue handle from a device
+--
+-- = 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 'Vulkan.Core10.Handles.Queue' object that
+--     will be filled with the handle for the requested queue.
+--
+-- = Description
+--
+-- 'getDeviceQueue' /must/ only be used to get queues that were created
+-- with the @flags@ parameter of
+-- 'Vulkan.Core10.Device.DeviceQueueCreateInfo' set to zero. To get queues
+-- that were created with a non-zero @flags@ parameter use
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.getDeviceQueue2'.
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be one of the queue family indices
+--     specified when @device@ was created, via the
+--     'Vulkan.Core10.Device.DeviceQueueCreateInfo' structure
+--
+-- -   @queueIndex@ /must/ be less than the number of queues created for
+--     the specified queue family index when @device@ was created, via the
+--     @queueCount@ member of the
+--     'Vulkan.Core10.Device.DeviceQueueCreateInfo' structure
+--
+-- -   'Vulkan.Core10.Device.DeviceQueueCreateInfo'::@flags@ /must/ have
+--     been set to zero when @device@ was created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pQueue@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Queue' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Queue'
+getDeviceQueue :: forall io . MonadIO io => Device -> ("queueFamilyIndex" ::: Word32) -> ("queueIndex" ::: Word32) -> io (Queue)
+getDeviceQueue device queueFamilyIndex queueIndex = liftIO . evalContT $ do
+  let cmds = deviceCmds (device :: Device)
+  let vkGetDeviceQueuePtr = pVkGetDeviceQueue cmds
+  lift $ unless (vkGetDeviceQueuePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceQueue is null" Nothing Nothing
+  let vkGetDeviceQueue' = mkVkGetDeviceQueue vkGetDeviceQueuePtr
+  pPQueue <- ContT $ bracket (callocBytes @(Ptr Queue_T) 8) free
+  lift $ vkGetDeviceQueue' (deviceHandle (device)) (queueFamilyIndex) (queueIndex) (pPQueue)
+  pQueue <- lift $ peek @(Ptr Queue_T) pPQueue
+  pure $ (((\h -> Queue h cmds ) pQueue))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkQueueSubmit
+  :: FunPtr (Ptr Queue_T -> Word32 -> Ptr (SubmitInfo a) -> Fence -> IO Result) -> Ptr Queue_T -> Word32 -> Ptr (SubmitInfo a) -> Fence -> IO Result
+
+-- | vkQueueSubmit - Submits a sequence of semaphores or command buffers to a
+-- queue
+--
+-- = 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 'SubmitInfo' 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 'Vulkan.Core10.APIConstants.NULL_HANDLE', it defines a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation>.
+--
+-- = Description
+--
+-- Note
+--
+-- Submission can be a high overhead operation, and applications /should/
+-- attempt to batch work together into as few calls to 'queueSubmit' as
+-- possible.
+--
+-- 'queueSubmit' is a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-submission queue submission command>,
+-- with each batch defined by an element of @pSubmits@. Batches begin
+-- execution in the order they appear in @pSubmits@, but /may/ complete out
+-- of order.
+--
+-- Fence and semaphore operations submitted with 'queueSubmit' 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores semaphore>
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences fence>
+-- sections of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization the synchronization chapter>.
+--
+-- Details on the interaction of @pWaitDstStageMask@ with synchronization
+-- are described in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-waiting semaphore wait operation>
+-- section of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization the synchronization chapter>.
+--
+-- The order that batches appear in @pSubmits@ is used to determine
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>,
+-- and thus all the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-implicit implicit ordering guarantees>
+-- that respect it. Other than these implicit ordering guarantees and any
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable state>,
+-- it is moved to the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>.
+-- Once execution of all submissions of a command buffer complete, it moves
+-- from the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>,
+-- back to the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable state>.
+-- If a command buffer was recorded with the
+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT'
+-- flag, it instead moves to the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid state>.
+--
+-- If 'queueSubmit' fails, it /may/ return
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' or
+-- 'Vulkan.Core10.Enums.Result.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 'queueSubmit' fails in such a
+-- way that the implementation is unable to make that guarantee, the
+-- implementation /must/ return
+-- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'. See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>.
+--
+-- == Valid Usage
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@
+--     /must/ be unsignaled
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@
+--     /must/ not be associated with any other queue command that has not
+--     yet completed execution on that queue
+--
+-- -   Any calls to 'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent',
+--     'Vulkan.Core10.CommandBufferBuilding.cmdResetEvent' or
+--     'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents' that have been
+--     recorded into any of the command buffer elements of the
+--     @pCommandBuffers@ member of any element of @pSubmits@, /must/ not
+--     reference any 'Vulkan.Core10.Handles.Event' 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>
+--
+-- -   Each element of the @pSignalSemaphores@ member of any element of
+--     @pSubmits@ /must/ be unsignaled when the semaphore signal operation
+--     it defines is executed on the device
+--
+-- -   When a semaphore wait operation referring to a binary semaphore
+--     defined by any element of the @pWaitSemaphores@ member of any
+--     element of @pSubmits@ executes on @queue@, there /must/ be no other
+--     queues waiting on the same semaphore
+--
+-- -   All elements of the @pWaitSemaphores@ member of all elements of
+--     @pSubmits@ created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY' /must/
+--     reference a semaphore signal operation that has been submitted for
+--     execution and any semaphore signal operations on which it depends
+--     (if any) /must/ have also been submitted for execution
+--
+-- -   Each element of the @pCommandBuffers@ member of each element of
+--     @pSubmits@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>
+--
+-- -   If any element of the @pCommandBuffers@ member of any element of
+--     @pSubmits@ was not recorded with the
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT',
+--     it /must/ not be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
+--
+-- -   Any
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-secondary secondary command buffers recorded>
+--     into any element of the @pCommandBuffers@ member of any element of
+--     @pSubmits@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>
+--
+-- -   If any
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-secondary secondary command buffers recorded>
+--     into any element of the @pCommandBuffers@ member of any element of
+--     @pSubmits@ was not recorded with the
+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT',
+--     it /must/ not be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
+--
+-- -   Each element of the @pCommandBuffers@ member of each element of
+--     @pSubmits@ /must/ have been allocated from a
+--     'Vulkan.Core10.Handles.CommandPool' that was created for the same
+--     queue family @queue@ belongs to
+--
+-- -   If any element of @pSubmits->pCommandBuffers@ includes a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire Queue Family Transfer Acquire Operation>,
+--     there /must/ exist a previously submitted
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-release Queue Family Transfer Release Operation>
+--     on a queue in the queue family identified by the acquire operation,
+--     with parameters matching the acquire operation as defined in the
+--     definition of such
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire acquire operations>,
+--     and which happens-before the acquire operation
+--
+-- -   If a command recorded into any element of @pCommandBuffers@ was a
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery' whose
+--     @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#profiling-lock profiling lock>
+--     /must/ have been held continuously on the
+--     'Vulkan.Core10.Handles.Device' that @queue@ was retrieved from,
+--     throughout recording of those command buffers
+--
+-- -   Any resource created with
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE' that is
+--     read by an operation specified by @pSubmits@ /must/ not be owned by
+--     any queue family other than the one which @queue@ belongs to, at the
+--     time it is executed
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle
+--
+-- -   If @submitCount@ is not @0@, @pSubmits@ /must/ be a valid pointer to
+--     an array of @submitCount@ valid 'SubmitInfo' structures
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle
+--
+-- -   Both of @fence@, and @queue@ that are valid handles of non-ignored
+--     parameters /must/ have been created, allocated, or retrieved from
+--     the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @queue@ /must/ be externally synchronized
+--
+-- -   Host access to @fence@ /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Fence', 'Vulkan.Core10.Handles.Queue',
+-- 'SubmitInfo'
+queueSubmit :: forall io . MonadIO io => Queue -> ("submits" ::: Vector (SomeStruct SubmitInfo)) -> Fence -> io ()
+queueSubmit queue submits fence = liftIO . evalContT $ do
+  let vkQueueSubmitPtr = pVkQueueSubmit (deviceCmds (queue :: Queue))
+  lift $ unless (vkQueueSubmitPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkQueueSubmit is null" Nothing Nothing
+  let vkQueueSubmit' = mkVkQueueSubmit vkQueueSubmitPtr
+  pPSubmits <- ContT $ allocaBytesAligned @(SubmitInfo _) ((Data.Vector.length (submits)) * 72) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPSubmits `plusPtr` (72 * (i)) :: Ptr (SubmitInfo _))) (e) . ($ ())) (submits)
+  r <- lift $ vkQueueSubmit' (queueHandle (queue)) ((fromIntegral (Data.Vector.length $ (submits)) :: Word32)) (pPSubmits) (fence)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkQueueWaitIdle
+  :: FunPtr (Ptr Queue_T -> IO Result) -> Ptr Queue_T -> IO Result
+
+-- | vkQueueWaitIdle - Wait for a queue to become idle
+--
+-- = Parameters
+--
+-- -   @queue@ is the queue on which to wait.
+--
+-- = Description
+--
+-- 'queueWaitIdle' 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 'Vulkan.Core10.Handles.Queue' handle
+--
+-- == Host Synchronization
+--
+-- -   Host access to @queue@ /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Queue'
+queueWaitIdle :: forall io . MonadIO io => Queue -> io ()
+queueWaitIdle queue = liftIO $ do
+  let vkQueueWaitIdlePtr = pVkQueueWaitIdle (deviceCmds (queue :: Queue))
+  unless (vkQueueWaitIdlePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkQueueWaitIdle is null" Nothing Nothing
+  let vkQueueWaitIdle' = mkVkQueueWaitIdle vkQueueWaitIdlePtr
+  r <- vkQueueWaitIdle' (queueHandle (queue))
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDeviceWaitIdle
+  :: FunPtr (Ptr Device_T -> IO Result) -> Ptr Device_T -> IO Result
+
+-- | vkDeviceWaitIdle - Wait for a device to become idle
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device to idle.
+--
+-- = Description
+--
+-- 'deviceWaitIdle' is equivalent to calling 'queueWaitIdle' for all queues
+-- owned by @device@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- == Host Synchronization
+--
+-- -   Host access to all 'Vulkan.Core10.Handles.Queue' objects created
+--     from @device@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device'
+deviceWaitIdle :: forall io . MonadIO io => Device -> io ()
+deviceWaitIdle device = liftIO $ do
+  let vkDeviceWaitIdlePtr = pVkDeviceWaitIdle (deviceCmds (device :: Device))
+  unless (vkDeviceWaitIdlePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDeviceWaitIdle is null" Nothing Nothing
+  let vkDeviceWaitIdle' = mkVkDeviceWaitIdle vkDeviceWaitIdlePtr
+  r <- vkDeviceWaitIdle' (deviceHandle (device))
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkSubmitInfo - Structure specifying a queue submit operation
+--
+-- = Description
+--
+-- The order that command buffers appear in @pCommandBuffers@ is used to
+-- determine
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>,
+-- and thus all the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-implicit implicit ordering guarantees>
+-- that respect it. Other than these implicit ordering guarantees and any
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+--     'Vulkan.Core10.Enums.CommandBufferLevel.COMMAND_BUFFER_LEVEL_SECONDARY'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, each element of @pWaitDstStageMask@ /must/
+--     not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, each element of @pWaitDstStageMask@ /must/
+--     not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   Each element of @pWaitDstStageMask@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'
+--
+-- -   If any element of @pWaitSemaphores@ or @pSignalSemaphores@ was
+--     created with a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE', then
+--     the @pNext@ chain /must/ include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
+--     structure
+--
+-- -   If the @pNext@ chain of this structure includes a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
+--     structure and any element of @pWaitSemaphores@ was created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE', then
+--     its @waitSemaphoreValueCount@ member /must/ equal
+--     @waitSemaphoreCount@
+--
+-- -   If the @pNext@ chain of this structure includes a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
+--     structure and any element of @pSignalSemaphores@ was created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE', then
+--     its @signalSemaphoreValueCount@ member /must/ equal
+--     @signalSemaphoreCount@
+--
+-- -   For each element of @pSignalSemaphores@ created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the
+--     corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pSignalSemaphoreValues
+--     /must/ have a value greater than the current value of the semaphore
+--     when the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
+--     is executed
+--
+-- -   For each element of @pWaitSemaphores@ created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the
+--     corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pWaitSemaphoreValues
+--     /must/ have a value which does not differ from the current value of
+--     the semaphore or the value of any outstanding semaphore wait or
+--     signal operation on that semaphore by more than
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
+--
+-- -   For each element of @pSignalSemaphores@ created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the
+--     corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pSignalSemaphoreValues
+--     /must/ have a value which does not differ from the current value of
+--     the semaphore or the value of any outstanding semaphore wait or
+--     signal operation on that semaphore by more than
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, each element of @pWaitDstStageMask@ /must/
+--     not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, each element of @pWaitDstStageMask@ /must/
+--     not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBMIT_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_KHR_external_semaphore_win32.D3D12FenceSubmitInfoKHR',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupSubmitInfo',
+--     'Vulkan.Extensions.VK_KHR_performance_query.PerformanceQuerySubmitInfoKHR',
+--     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.ProtectedSubmitInfo',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo',
+--     'Vulkan.Extensions.VK_KHR_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoKHR',
+--     or
+--     'Vulkan.Extensions.VK_NV_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoNV'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a
+--     valid pointer to an array of @waitSemaphoreCount@ valid
+--     'Vulkan.Core10.Handles.Semaphore' handles
+--
+-- -   If @waitSemaphoreCount@ is not @0@, @pWaitDstStageMask@ /must/ be a
+--     valid pointer to an array of @waitSemaphoreCount@ valid combinations
+--     of 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   Each element of @pWaitDstStageMask@ /must/ not be @0@
+--
+-- -   If @commandBufferCount@ is not @0@, @pCommandBuffers@ /must/ be a
+--     valid pointer to an array of @commandBufferCount@ valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handles
+--
+-- -   If @signalSemaphoreCount@ is not @0@, @pSignalSemaphores@ /must/ be
+--     a valid pointer to an array of @signalSemaphoreCount@ valid
+--     'Vulkan.Core10.Handles.Semaphore' handles
+--
+-- -   Each of the elements of @pCommandBuffers@, the elements of
+--     @pSignalSemaphores@, and the elements of @pWaitSemaphores@ that are
+--     valid handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags',
+-- 'Vulkan.Core10.Handles.Semaphore',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'queueSubmit'
+data SubmitInfo (es :: [Type]) = SubmitInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @pWaitSemaphores@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.Semaphore' handles upon which to wait before the
+    -- command buffers for this batch begin execution. If semaphores to wait on
+    -- are provided, they define a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-waiting semaphore wait operation>.
+    waitSemaphores :: Vector Semaphore
+  , -- | @pWaitDstStageMask@ is a pointer to an array of pipeline stages at which
+    -- each corresponding semaphore wait will occur.
+    waitDstStageMask :: Vector PipelineStageFlags
+  , -- | @pCommandBuffers@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.CommandBuffer' handles to execute in the batch.
+    commandBuffers :: Vector (Ptr CommandBuffer_T)
+  , -- | @pSignalSemaphores@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.Semaphore' handles which will be signaled when
+    -- the command buffers for this batch have completed execution. If
+    -- semaphores to be signaled are provided, they define a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>.
+    signalSemaphores :: Vector Semaphore
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (SubmitInfo es)
+
+instance Extensible SubmitInfo where
+  extensibleType = STRUCTURE_TYPE_SUBMIT_INFO
+  setNext x next = x{next = next}
+  getNext SubmitInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SubmitInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PerformanceQuerySubmitInfoKHR = Just f
+    | Just Refl <- eqT @e @TimelineSemaphoreSubmitInfo = Just f
+    | Just Refl <- eqT @e @ProtectedSubmitInfo = Just f
+    | Just Refl <- eqT @e @DeviceGroupSubmitInfo = Just f
+    | Just Refl <- eqT @e @D3D12FenceSubmitInfoKHR = Just f
+    | Just Refl <- eqT @e @Win32KeyedMutexAcquireReleaseInfoKHR = Just f
+    | Just Refl <- eqT @e @Win32KeyedMutexAcquireReleaseInfoNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss SubmitInfo es, PokeChain es) => ToCStruct (SubmitInfo es) where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SubmitInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBMIT_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    let pWaitSemaphoresLength = Data.Vector.length $ (waitSemaphores)
+    lift $ unless ((Data.Vector.length $ (waitDstStageMask)) == pWaitSemaphoresLength) $
+      throwIO $ IOError Nothing InvalidArgument "" "pWaitDstStageMask and pWaitSemaphores must have the same length" Nothing Nothing
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral pWaitSemaphoresLength :: Word32))
+    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (waitSemaphores)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (waitSemaphores)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
+    pPWaitDstStageMask' <- ContT $ allocaBytesAligned @PipelineStageFlags ((Data.Vector.length (waitDstStageMask)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitDstStageMask' `plusPtr` (4 * (i)) :: Ptr PipelineStageFlags) (e)) (waitDstStageMask)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineStageFlags))) (pPWaitDstStageMask')
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (commandBuffers)) :: Word32))
+    pPCommandBuffers' <- ContT $ allocaBytesAligned @(Ptr CommandBuffer_T) ((Data.Vector.length (commandBuffers)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBuffers' `plusPtr` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)) (e)) (commandBuffers)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (Ptr CommandBuffer_T)))) (pPCommandBuffers')
+    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (signalSemaphores)) :: Word32))
+    pPSignalSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (signalSemaphores)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (signalSemaphores)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Semaphore))) (pPSignalSemaphores')
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBMIT_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
+    pPWaitDstStageMask' <- ContT $ allocaBytesAligned @PipelineStageFlags ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitDstStageMask' `plusPtr` (4 * (i)) :: Ptr PipelineStageFlags) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineStageFlags))) (pPWaitDstStageMask')
+    pPCommandBuffers' <- ContT $ allocaBytesAligned @(Ptr CommandBuffer_T) ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBuffers' `plusPtr` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (Ptr CommandBuffer_T)))) (pPCommandBuffers')
+    pPSignalSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Semaphore))) (pPSignalSemaphores')
+    lift $ f
+
+instance (Extendss SubmitInfo es, PeekChain es) => FromCStruct (SubmitInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    waitSemaphoreCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pWaitSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 24 :: Ptr (Ptr Semaphore)))
+    pWaitSemaphores' <- generateM (fromIntegral waitSemaphoreCount) (\i -> peek @Semaphore ((pWaitSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
+    pWaitDstStageMask <- peek @(Ptr PipelineStageFlags) ((p `plusPtr` 32 :: Ptr (Ptr PipelineStageFlags)))
+    pWaitDstStageMask' <- generateM (fromIntegral waitSemaphoreCount) (\i -> peek @PipelineStageFlags ((pWaitDstStageMask `advancePtrBytes` (4 * (i)) :: Ptr PipelineStageFlags)))
+    commandBufferCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    pCommandBuffers <- peek @(Ptr (Ptr CommandBuffer_T)) ((p `plusPtr` 48 :: Ptr (Ptr (Ptr CommandBuffer_T))))
+    pCommandBuffers' <- generateM (fromIntegral commandBufferCount) (\i -> peek @(Ptr CommandBuffer_T) ((pCommandBuffers `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CommandBuffer_T))))
+    signalSemaphoreCount <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    pSignalSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 64 :: Ptr (Ptr Semaphore)))
+    pSignalSemaphores' <- generateM (fromIntegral signalSemaphoreCount) (\i -> peek @Semaphore ((pSignalSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
+    pure $ SubmitInfo
+             next pWaitSemaphores' pWaitDstStageMask' pCommandBuffers' pSignalSemaphores'
+
+instance es ~ '[] => Zero (SubmitInfo es) where
+  zero = SubmitInfo
+           ()
+           mempty
+           mempty
+           mempty
+           mempty
+
diff --git a/src/Vulkan/Core10/Queue.hs-boot b/src/Vulkan/Core10/Queue.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Queue.hs-boot
@@ -0,0 +1,18 @@
+{-# language CPP #-}
+module Vulkan.Core10.Queue  (SubmitInfo) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role SubmitInfo nominal
+data SubmitInfo (es :: [Type])
+
+instance (Extendss SubmitInfo es, PokeChain es) => ToCStruct (SubmitInfo es)
+instance Show (Chain es) => Show (SubmitInfo es)
+
+instance (Extendss SubmitInfo es, PeekChain es) => FromCStruct (SubmitInfo es)
+
diff --git a/src/Vulkan/Core10/QueueSemaphore.hs b/src/Vulkan/Core10/QueueSemaphore.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/QueueSemaphore.hs
@@ -0,0 +1,290 @@
+{-# language CPP #-}
+module Vulkan.Core10.QueueSemaphore  ( createSemaphore
+                                     , withSemaphore
+                                     , destroySemaphore
+                                     , SemaphoreCreateInfo(..)
+                                     ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateSemaphore))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroySemaphore))
+import Vulkan.Core10.Handles (Device_T)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore (ExportSemaphoreCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_win32 (ExportSemaphoreWin32HandleInfoKHR)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Handles (Semaphore)
+import Vulkan.Core10.Handles (Semaphore(..))
+import Vulkan.Core10.Enums.SemaphoreCreateFlags (SemaphoreCreateFlags)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreTypeCreateInfo)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateSemaphore
+  :: FunPtr (Ptr Device_T -> Ptr (SemaphoreCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Semaphore -> IO Result) -> Ptr Device_T -> Ptr (SemaphoreCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Semaphore -> IO Result
+
+-- | vkCreateSemaphore - Create a new queue semaphore object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the semaphore.
+--
+-- -   @pCreateInfo@ is a pointer to a 'SemaphoreCreateInfo' structure
+--     containing information about how the semaphore is to be created.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pSemaphore@ is a pointer to a handle in which the resulting
+--     semaphore object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'SemaphoreCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSemaphore@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Semaphore' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Semaphore',
+-- 'SemaphoreCreateInfo'
+createSemaphore :: forall a io . (Extendss SemaphoreCreateInfo a, PokeChain a, MonadIO io) => Device -> SemaphoreCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Semaphore)
+createSemaphore device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateSemaphorePtr = pVkCreateSemaphore (deviceCmds (device :: Device))
+  lift $ unless (vkCreateSemaphorePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateSemaphore is null" Nothing Nothing
+  let vkCreateSemaphore' = mkVkCreateSemaphore vkCreateSemaphorePtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSemaphore <- ContT $ bracket (callocBytes @Semaphore 8) free
+  r <- lift $ vkCreateSemaphore' (deviceHandle (device)) pCreateInfo pAllocator (pPSemaphore)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSemaphore <- lift $ peek @Semaphore pPSemaphore
+  pure $ (pSemaphore)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createSemaphore' and 'destroySemaphore'
+--
+-- To ensure that 'destroySemaphore' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withSemaphore :: forall a io r . (Extendss SemaphoreCreateInfo a, PokeChain a, MonadIO io) => Device -> SemaphoreCreateInfo a -> Maybe AllocationCallbacks -> (io (Semaphore) -> ((Semaphore) -> io ()) -> r) -> r
+withSemaphore device pCreateInfo pAllocator b =
+  b (createSemaphore device pCreateInfo pAllocator)
+    (\(o0) -> destroySemaphore device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroySemaphore
+  :: FunPtr (Ptr Device_T -> Semaphore -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Semaphore -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroySemaphore - Destroy a semaphore object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted batches that refer to @semaphore@ /must/ have
+--     completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @semaphore@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @semaphore@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @semaphore@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @semaphore@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Semaphore'
+destroySemaphore :: forall io . MonadIO io => Device -> Semaphore -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroySemaphore device semaphore allocator = liftIO . evalContT $ do
+  let vkDestroySemaphorePtr = pVkDestroySemaphore (deviceCmds (device :: Device))
+  lift $ unless (vkDestroySemaphorePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroySemaphore is null" Nothing Nothing
+  let vkDestroySemaphore' = mkVkDestroySemaphore vkDestroySemaphorePtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroySemaphore' (deviceHandle (device)) (semaphore) pAllocator
+  pure $ ()
+
+
+-- | VkSemaphoreCreateInfo - Structure specifying parameters of a newly
+-- created semaphore
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo',
+--     'Vulkan.Extensions.VK_KHR_external_semaphore_win32.ExportSemaphoreWin32HandleInfoKHR',
+--     or
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.SemaphoreCreateFlags.SemaphoreCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createSemaphore'
+data SemaphoreCreateInfo (es :: [Type]) = SemaphoreCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: SemaphoreCreateFlags
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (SemaphoreCreateInfo es)
+
+instance Extensible SemaphoreCreateInfo where
+  extensibleType = STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext SemaphoreCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SemaphoreCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @SemaphoreTypeCreateInfo = Just f
+    | Just Refl <- eqT @e @ExportSemaphoreWin32HandleInfoKHR = Just f
+    | Just Refl <- eqT @e @ExportSemaphoreCreateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss SemaphoreCreateInfo es, PokeChain es) => ToCStruct (SemaphoreCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SemaphoreCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr SemaphoreCreateFlags)) (flags)
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ f
+
+instance (Extendss SemaphoreCreateInfo es, PeekChain es) => FromCStruct (SemaphoreCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @SemaphoreCreateFlags ((p `plusPtr` 16 :: Ptr SemaphoreCreateFlags))
+    pure $ SemaphoreCreateInfo
+             next flags
+
+instance es ~ '[] => Zero (SemaphoreCreateInfo es) where
+  zero = SemaphoreCreateInfo
+           ()
+           zero
+
diff --git a/src/Vulkan/Core10/QueueSemaphore.hs-boot b/src/Vulkan/Core10/QueueSemaphore.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/QueueSemaphore.hs-boot
@@ -0,0 +1,18 @@
+{-# language CPP #-}
+module Vulkan.Core10.QueueSemaphore  (SemaphoreCreateInfo) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role SemaphoreCreateInfo nominal
+data SemaphoreCreateInfo (es :: [Type])
+
+instance (Extendss SemaphoreCreateInfo es, PokeChain es) => ToCStruct (SemaphoreCreateInfo es)
+instance Show (Chain es) => Show (SemaphoreCreateInfo es)
+
+instance (Extendss SemaphoreCreateInfo es, PeekChain es) => FromCStruct (SemaphoreCreateInfo es)
+
diff --git a/src/Vulkan/Core10/Sampler.hs b/src/Vulkan/Core10/Sampler.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Sampler.hs
@@ -0,0 +1,655 @@
+{-# language CPP #-}
+module Vulkan.Core10.Sampler  ( createSampler
+                              , withSampler
+                              , destroySampler
+                              , SamplerCreateInfo(..)
+                              ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Enums.BorderColor (BorderColor)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Enums.CompareOp (CompareOp)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateSampler))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroySampler))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.Enums.Filter (Filter)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Handles (Sampler)
+import Vulkan.Core10.Handles (Sampler(..))
+import Vulkan.Core10.Enums.SamplerAddressMode (SamplerAddressMode)
+import Vulkan.Core10.Enums.SamplerCreateFlagBits (SamplerCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_custom_border_color (SamplerCustomBorderColorCreateInfoEXT)
+import Vulkan.Core10.Enums.SamplerMipmapMode (SamplerMipmapMode)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (SamplerReductionModeCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionInfo)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateSampler
+  :: FunPtr (Ptr Device_T -> Ptr (SamplerCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Sampler -> IO Result) -> Ptr Device_T -> Ptr (SamplerCreateInfo a) -> Ptr AllocationCallbacks -> Ptr Sampler -> IO Result
+
+-- | vkCreateSampler - Create a new sampler object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the sampler.
+--
+-- -   @pCreateInfo@ is a pointer to a 'SamplerCreateInfo' structure
+--     specifying the state of the sampler object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pSampler@ is a pointer to a 'Vulkan.Core10.Handles.Sampler' handle
+--     in which the resulting sampler object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'SamplerCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSampler@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Sampler' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Sampler',
+-- 'SamplerCreateInfo'
+createSampler :: forall a io . (Extendss SamplerCreateInfo a, PokeChain a, MonadIO io) => Device -> SamplerCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Sampler)
+createSampler device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateSamplerPtr = pVkCreateSampler (deviceCmds (device :: Device))
+  lift $ unless (vkCreateSamplerPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateSampler is null" Nothing Nothing
+  let vkCreateSampler' = mkVkCreateSampler vkCreateSamplerPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSampler <- ContT $ bracket (callocBytes @Sampler 8) free
+  r <- lift $ vkCreateSampler' (deviceHandle (device)) pCreateInfo pAllocator (pPSampler)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSampler <- lift $ peek @Sampler pPSampler
+  pure $ (pSampler)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createSampler' and 'destroySampler'
+--
+-- To ensure that 'destroySampler' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withSampler :: forall a io r . (Extendss SamplerCreateInfo a, PokeChain a, MonadIO io) => Device -> SamplerCreateInfo a -> Maybe AllocationCallbacks -> (io (Sampler) -> ((Sampler) -> io ()) -> r) -> r
+withSampler device pCreateInfo pAllocator b =
+  b (createSampler device pCreateInfo pAllocator)
+    (\(o0) -> destroySampler device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroySampler
+  :: FunPtr (Ptr Device_T -> Sampler -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Sampler -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroySampler - Destroy a sampler object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @sampler@ /must/ have completed
+--     execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @sampler@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @sampler@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @sampler@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @sampler@ /must/ be a valid 'Vulkan.Core10.Handles.Sampler' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @sampler@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @sampler@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Sampler'
+destroySampler :: forall io . MonadIO io => Device -> Sampler -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroySampler device sampler allocator = liftIO . evalContT $ do
+  let vkDestroySamplerPtr = pVkDestroySampler (deviceCmds (device :: Device))
+  lift $ unless (vkDestroySamplerPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroySampler is null" Nothing Nothing
+  let vkDestroySampler' = mkVkDestroySampler vkDestroySamplerPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroySampler' (deviceHandle (device)) (sampler) pAllocator
+  pure $ ()
+
+
+-- | VkSamplerCreateInfo - Structure specifying parameters of a newly created
+-- sampler
+--
+-- = Description
+--
+-- Mapping of OpenGL to Vulkan filter modes
+--
+-- @magFilter@ values of 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST' and
+-- 'Vulkan.Core10.Enums.Filter.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 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and
+-- @mipmapMode@ of
+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.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
+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST',
+-- @minLod@ = 0, and @maxLod@ = 0.25, and using @minFilter@ =
+-- 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' or @minFilter@ =
+-- 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST', respectively.
+--
+-- Note that using a @maxLod@ of zero would cause
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxSamplerAllocationCount maxSamplerAllocationCount>
+-- member of the 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'
+-- structure. If @maxSamplerAllocationCount@ is exceeded, 'createSampler'
+-- will return 'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'.
+--
+-- Since 'Vulkan.Core10.Handles.Sampler' 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
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSamplerLodBias@
+--
+-- -   @maxLod@ /must/ be greater than or equal to @minLod@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-samplerAnisotropy anisotropic sampling>
+--     feature is not enabled, @anisotropyEnable@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If @anisotropyEnable@ is 'Vulkan.Core10.BaseType.TRUE',
+--     @maxAnisotropy@ /must/ be between @1.0@ and
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSamplerAnisotropy@,
+--     inclusive
+--
+-- -   If
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+--     is enabled and the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
+--     do not support
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT',
+--     @minFilter@ and @magFilter@ /must/ be equal to the sampler Y′CBCR
+--     conversion’s @chromaFilter@
+--
+-- -   If @unnormalizedCoordinates@ is 'Vulkan.Core10.BaseType.TRUE',
+--     @minFilter@ and @magFilter@ /must/ be equal
+--
+-- -   If @unnormalizedCoordinates@ is 'Vulkan.Core10.BaseType.TRUE',
+--     @mipmapMode@ /must/ be
+--     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST'
+--
+-- -   If @unnormalizedCoordinates@ is 'Vulkan.Core10.BaseType.TRUE',
+--     @minLod@ and @maxLod@ /must/ be zero
+--
+-- -   If @unnormalizedCoordinates@ is 'Vulkan.Core10.BaseType.TRUE',
+--     @addressModeU@ and @addressModeV@ /must/ each be either
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--     or
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER'
+--
+-- -   If @unnormalizedCoordinates@ is 'Vulkan.Core10.BaseType.TRUE',
+--     @anisotropyEnable@ /must/ be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If @unnormalizedCoordinates@ is 'Vulkan.Core10.BaseType.TRUE',
+--     @compareEnable@ /must/ be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If any of @addressModeU@, @addressModeV@ or @addressModeW@ are
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER',
+--     @borderColor@ /must/ be a valid
+--     'Vulkan.Core10.Enums.BorderColor.BorderColor' value
+--
+-- -   If
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+--     is enabled, @addressModeU@, @addressModeV@, and @addressModeW@
+--     /must/ be
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE',
+--     @anisotropyEnable@ /must/ be 'Vulkan.Core10.BaseType.FALSE', and
+--     @unnormalizedCoordinates@ /must/ be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   The sampler reduction mode /must/ be set to
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE'
+--     if
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+--     is enabled
+--
+-- -   If
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-samplerMirrorClampToEdge samplerMirrorClampToEdge>
+--     is not enabled, and if the @VK_KHR_sampler_mirror_clamp_to_edge@
+--     extension is not enabled, @addressModeU@, @addressModeV@ and
+--     @addressModeW@ /must/ not be
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE'
+--
+-- -   If @compareEnable@ is 'Vulkan.Core10.BaseType.TRUE', @compareOp@
+--     /must/ be a valid 'Vulkan.Core10.Enums.CompareOp.CompareOp' value
+--
+-- -   If either @magFilter@ or @minFilter@ is
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT',
+--     @anisotropyEnable@ /must/ be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If @compareEnable@ is 'Vulkan.Core10.BaseType.TRUE', the
+--     @reductionMode@ member of
+--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'
+--     /must/ be
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
+--     then @minFilter@ and @magFilter@ /must/ be equal
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
+--     then @mipmapMode@ /must/ be
+--     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
+--     then @minLod@ and @maxLod@ /must/ be zero
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
+--     then @addressModeU@ and @addressModeV@ /must/ each be either
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--     or
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
+--     then @anisotropyEnable@ /must/ be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
+--     then @compareEnable@ /must/ be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT',
+--     then @unnormalizedCoordinates@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If @borderColor@ is set to one of
+--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or
+--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT', then
+--     a
+--     'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'
+--     /must/ be present in the @pNext@ chain
+--
+-- -   The maximum number of samplers with custom border colors which /can/
+--     be simultaneously created on a device is implementation-dependent
+--     and specified by the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxCustomBorderColorSamplers maxCustomBorderColorSamplers>
+--     member of the
+--     'Vulkan.Extensions.VK_EXT_custom_border_color.PhysicalDeviceCustomBorderColorPropertiesEXT'
+--     structure
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLER_CREATE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo',
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SamplerCreateFlagBits'
+--     values
+--
+-- -   @magFilter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter'
+--     value
+--
+-- -   @minFilter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter'
+--     value
+--
+-- -   @mipmapMode@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SamplerMipmapMode.SamplerMipmapMode' value
+--
+-- -   @addressModeU@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' value
+--
+-- -   @addressModeV@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' value
+--
+-- -   @addressModeW@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.BorderColor.BorderColor',
+-- 'Vulkan.Core10.Enums.CompareOp.CompareOp',
+-- 'Vulkan.Core10.Enums.Filter.Filter',
+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode',
+-- 'Vulkan.Core10.Enums.SamplerCreateFlagBits.SamplerCreateFlags',
+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SamplerMipmapMode',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createSampler'
+data SamplerCreateInfo (es :: [Type]) = SamplerCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.SamplerCreateFlagBits.SamplerCreateFlagBits'
+    -- describing additional parameters of the sampler.
+    flags :: SamplerCreateFlags
+  , -- | @magFilter@ is a 'Vulkan.Core10.Enums.Filter.Filter' value specifying
+    -- the magnification filter to apply to lookups.
+    magFilter :: Filter
+  , -- | @minFilter@ is a 'Vulkan.Core10.Enums.Filter.Filter' value specifying
+    -- the minification filter to apply to lookups.
+    minFilter :: Filter
+  , -- | @mipmapMode@ is a
+    -- 'Vulkan.Core10.Enums.SamplerMipmapMode.SamplerMipmapMode' value
+    -- specifying the mipmap filter to apply to lookups.
+    mipmapMode :: SamplerMipmapMode
+  , -- | @addressModeU@ is a
+    -- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' value
+    -- specifying the addressing mode for outside [0..1] range for U
+    -- coordinate.
+    addressModeU :: SamplerAddressMode
+  , -- | @addressModeV@ is a
+    -- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' value
+    -- specifying the addressing mode for outside [0..1] range for V
+    -- coordinate.
+    addressModeV :: SamplerAddressMode
+  , -- | @addressModeW@ is a
+    -- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' value
+    -- specifying the addressing mode for outside [0..1] range for W
+    -- coordinate.
+    addressModeW :: SamplerAddressMode
+  , -- | @mipLodBias@ is the bias to be added to mipmap LOD (level-of-detail)
+    -- calculation and bias provided by image sampling functions in SPIR-V, as
+    -- described in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-level-of-detail-operation Level-of-Detail Operation>
+    -- section.
+    mipLodBias :: Float
+  , -- | @anisotropyEnable@ is 'Vulkan.Core10.BaseType.TRUE' to enable
+    -- anisotropic filtering, as described in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-texel-anisotropic-filtering Texel Anisotropic Filtering>
+    -- section, or 'Vulkan.Core10.BaseType.FALSE' otherwise.
+    anisotropyEnable :: Bool
+  , -- | @maxAnisotropy@ is the anisotropy value clamp used by the sampler when
+    -- @anisotropyEnable@ is 'Vulkan.Core10.BaseType.TRUE'. If
+    -- @anisotropyEnable@ is 'Vulkan.Core10.BaseType.FALSE', @maxAnisotropy@ is
+    -- ignored.
+    maxAnisotropy :: Float
+  , -- | @compareEnable@ is 'Vulkan.Core10.BaseType.TRUE' to enable comparison
+    -- against a reference value during lookups, or
+    -- 'Vulkan.Core10.BaseType.FALSE' otherwise.
+    --
+    -- -   Note: Some implementations will default to shader state if this
+    --     member does not match.
+    compareEnable :: Bool
+  , -- | @compareOp@ is a 'Vulkan.Core10.Enums.CompareOp.CompareOp' value
+    -- specifying the comparison function to apply to fetched data before
+    -- filtering as described in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-depth-compare-operation Depth Compare Operation>
+    -- section.
+    compareOp :: CompareOp
+  , -- | @minLod@ and @maxLod@ are the values used to clamp the computed LOD
+    -- value, as described in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-level-of-detail-operation Level-of-Detail Operation>
+    -- section.
+    minLod :: Float
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "maxLod"
+    maxLod :: Float
+  , -- | @borderColor@ is a 'Vulkan.Core10.Enums.BorderColor.BorderColor' value
+    -- specifying the predefined border color to use.
+    borderColor :: BorderColor
+  , -- | @unnormalizedCoordinates@ controls whether to use unnormalized or
+    -- normalized texel coordinates to address texels of the image. When set to
+    -- 'Vulkan.Core10.BaseType.TRUE', the range of the image coordinates used
+    -- to lookup the texel is in the range of zero to the image dimensions for
+    -- x, y and z. When set to 'Vulkan.Core10.BaseType.FALSE' the range of
+    -- image coordinates is zero to one.
+    --
+    -- When @unnormalizedCoordinates@ is 'Vulkan.Core10.BaseType.TRUE', images
+    -- the sampler is used with in the shader have the following requirements:
+    --
+    -- -   The @viewType@ /must/ be either
+    --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D' or
+    --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'.
+    --
+    -- -   The image view /must/ have a single layer and a single mip level.
+    --
+    -- When @unnormalizedCoordinates@ is 'Vulkan.Core10.BaseType.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.
+    unnormalizedCoordinates :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (SamplerCreateInfo es)
+
+instance Extensible SamplerCreateInfo where
+  extensibleType = STRUCTURE_TYPE_SAMPLER_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext SamplerCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SamplerCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @SamplerCustomBorderColorCreateInfoEXT = Just f
+    | Just Refl <- eqT @e @SamplerReductionModeCreateInfo = Just f
+    | Just Refl <- eqT @e @SamplerYcbcrConversionInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss SamplerCreateInfo es, PokeChain es) => ToCStruct (SamplerCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 80 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SamplerCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr SamplerCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Filter)) (magFilter)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Filter)) (minFilter)
+    lift $ poke ((p `plusPtr` 28 :: Ptr SamplerMipmapMode)) (mipmapMode)
+    lift $ poke ((p `plusPtr` 32 :: Ptr SamplerAddressMode)) (addressModeU)
+    lift $ poke ((p `plusPtr` 36 :: Ptr SamplerAddressMode)) (addressModeV)
+    lift $ poke ((p `plusPtr` 40 :: Ptr SamplerAddressMode)) (addressModeW)
+    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (mipLodBias))
+    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (anisotropyEnable))
+    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (maxAnisotropy))
+    lift $ poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (compareEnable))
+    lift $ poke ((p `plusPtr` 60 :: Ptr CompareOp)) (compareOp)
+    lift $ poke ((p `plusPtr` 64 :: Ptr CFloat)) (CFloat (minLod))
+    lift $ poke ((p `plusPtr` 68 :: Ptr CFloat)) (CFloat (maxLod))
+    lift $ poke ((p `plusPtr` 72 :: Ptr BorderColor)) (borderColor)
+    lift $ poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (unnormalizedCoordinates))
+    lift $ f
+  cStructSize = 80
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr Filter)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Filter)) (zero)
+    lift $ poke ((p `plusPtr` 28 :: Ptr SamplerMipmapMode)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr SamplerAddressMode)) (zero)
+    lift $ poke ((p `plusPtr` 36 :: Ptr SamplerAddressMode)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr SamplerAddressMode)) (zero)
+    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 60 :: Ptr CompareOp)) (zero)
+    lift $ poke ((p `plusPtr` 64 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 68 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 72 :: Ptr BorderColor)) (zero)
+    lift $ poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance (Extendss SamplerCreateInfo es, PeekChain es) => FromCStruct (SamplerCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @SamplerCreateFlags ((p `plusPtr` 16 :: Ptr SamplerCreateFlags))
+    magFilter <- peek @Filter ((p `plusPtr` 20 :: Ptr Filter))
+    minFilter <- peek @Filter ((p `plusPtr` 24 :: Ptr Filter))
+    mipmapMode <- peek @SamplerMipmapMode ((p `plusPtr` 28 :: Ptr SamplerMipmapMode))
+    addressModeU <- peek @SamplerAddressMode ((p `plusPtr` 32 :: Ptr SamplerAddressMode))
+    addressModeV <- peek @SamplerAddressMode ((p `plusPtr` 36 :: Ptr SamplerAddressMode))
+    addressModeW <- peek @SamplerAddressMode ((p `plusPtr` 40 :: Ptr SamplerAddressMode))
+    mipLodBias <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))
+    anisotropyEnable <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    maxAnisotropy <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))
+    compareEnable <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
+    compareOp <- peek @CompareOp ((p `plusPtr` 60 :: Ptr CompareOp))
+    minLod <- peek @CFloat ((p `plusPtr` 64 :: Ptr CFloat))
+    maxLod <- peek @CFloat ((p `plusPtr` 68 :: Ptr CFloat))
+    borderColor <- peek @BorderColor ((p `plusPtr` 72 :: Ptr BorderColor))
+    unnormalizedCoordinates <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
+    pure $ SamplerCreateInfo
+             next flags magFilter minFilter mipmapMode addressModeU addressModeV addressModeW ((\(CFloat a) -> a) mipLodBias) (bool32ToBool anisotropyEnable) ((\(CFloat a) -> a) maxAnisotropy) (bool32ToBool compareEnable) compareOp ((\(CFloat a) -> a) minLod) ((\(CFloat a) -> a) maxLod) borderColor (bool32ToBool unnormalizedCoordinates)
+
+instance es ~ '[] => Zero (SamplerCreateInfo es) where
+  zero = SamplerCreateInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core10/Sampler.hs-boot b/src/Vulkan/Core10/Sampler.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Sampler.hs-boot
@@ -0,0 +1,18 @@
+{-# language CPP #-}
+module Vulkan.Core10.Sampler  (SamplerCreateInfo) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role SamplerCreateInfo nominal
+data SamplerCreateInfo (es :: [Type])
+
+instance (Extendss SamplerCreateInfo es, PokeChain es) => ToCStruct (SamplerCreateInfo es)
+instance Show (Chain es) => Show (SamplerCreateInfo es)
+
+instance (Extendss SamplerCreateInfo es, PeekChain es) => FromCStruct (SamplerCreateInfo es)
+
diff --git a/src/Vulkan/Core10/Shader.hs b/src/Vulkan/Core10/Shader.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Shader.hs
@@ -0,0 +1,372 @@
+{-# language CPP #-}
+module Vulkan.Core10.Shader  ( createShaderModule
+                             , withShaderModule
+                             , destroyShaderModule
+                             , ShaderModuleCreateInfo(..)
+                             ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Bits ((.&.))
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (copyBytes)
+import Foreign.Ptr (ptrToWordPtr)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import qualified Data.ByteString (length)
+import Data.ByteString (packCStringLen)
+import Data.ByteString.Unsafe (unsafeUseAsCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateShaderModule))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyShaderModule))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Handles (ShaderModule)
+import Vulkan.Core10.Handles (ShaderModule(..))
+import Vulkan.Core10.Enums.ShaderModuleCreateFlagBits (ShaderModuleCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_validation_cache (ShaderModuleValidationCacheCreateInfoEXT)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateShaderModule
+  :: FunPtr (Ptr Device_T -> Ptr (ShaderModuleCreateInfo a) -> Ptr AllocationCallbacks -> Ptr ShaderModule -> IO Result) -> Ptr Device_T -> Ptr (ShaderModuleCreateInfo a) -> Ptr AllocationCallbacks -> Ptr ShaderModule -> IO Result
+
+-- | vkCreateShaderModule - Creates a new shader module object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the shader module.
+--
+-- -   @pCreateInfo@ is a pointer to a 'ShaderModuleCreateInfo' structure.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pShaderModule@ is a pointer to a
+--     'Vulkan.Core10.Handles.ShaderModule' handle in which the resulting
+--     shader module object is returned.
+--
+-- = Description
+--
+-- Once a shader module has been created, any entry points it contains
+-- /can/ be used in pipeline shader stages as described in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-compute Compute Pipelines>
+-- and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-graphics Graphics Pipelines>.
+--
+-- If the shader stage fails to compile
+-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV' will be generated
+-- and the compile log will be reported back to the application by
+-- @VK_EXT_debug_report@ if enabled.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'ShaderModuleCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pShaderModule@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.ShaderModule' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.ShaderModule',
+-- 'ShaderModuleCreateInfo'
+createShaderModule :: forall a io . (Extendss ShaderModuleCreateInfo a, PokeChain a, MonadIO io) => Device -> ShaderModuleCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (ShaderModule)
+createShaderModule device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateShaderModulePtr = pVkCreateShaderModule (deviceCmds (device :: Device))
+  lift $ unless (vkCreateShaderModulePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateShaderModule is null" Nothing Nothing
+  let vkCreateShaderModule' = mkVkCreateShaderModule vkCreateShaderModulePtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPShaderModule <- ContT $ bracket (callocBytes @ShaderModule 8) free
+  r <- lift $ vkCreateShaderModule' (deviceHandle (device)) pCreateInfo pAllocator (pPShaderModule)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pShaderModule <- lift $ peek @ShaderModule pPShaderModule
+  pure $ (pShaderModule)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createShaderModule' and 'destroyShaderModule'
+--
+-- To ensure that 'destroyShaderModule' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withShaderModule :: forall a io r . (Extendss ShaderModuleCreateInfo a, PokeChain a, MonadIO io) => Device -> ShaderModuleCreateInfo a -> Maybe AllocationCallbacks -> (io (ShaderModule) -> ((ShaderModule) -> io ()) -> r) -> r
+withShaderModule device pCreateInfo pAllocator b =
+  b (createShaderModule device pCreateInfo pAllocator)
+    (\(o0) -> destroyShaderModule device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyShaderModule
+  :: FunPtr (Ptr Device_T -> ShaderModule -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> ShaderModule -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyShaderModule - Destroy a shader module
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- = Description
+--
+-- A shader module /can/ be destroyed while pipelines created using its
+-- shaders are still in use.
+--
+-- == Valid Usage
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @shaderModule@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @shaderModule@ was created, @pAllocator@ /must/ be
+--     @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @shaderModule@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @shaderModule@ /must/ be a valid
+--     'Vulkan.Core10.Handles.ShaderModule' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' 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
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.ShaderModule'
+destroyShaderModule :: forall io . MonadIO io => Device -> ShaderModule -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyShaderModule device shaderModule allocator = liftIO . evalContT $ do
+  let vkDestroyShaderModulePtr = pVkDestroyShaderModule (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyShaderModulePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyShaderModule is null" Nothing Nothing
+  let vkDestroyShaderModule' = mkVkDestroyShaderModule vkDestroyShaderModulePtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyShaderModule' (deviceHandle (device)) (shaderModule) pAllocator
+  pure $ ()
+
+
+-- | VkShaderModuleCreateInfo - Structure specifying parameters of a newly
+-- created shader module
+--
+-- == Valid Usage
+--
+-- -   @codeSize@ /must/ be greater than 0
+--
+-- -   If @pCode@ is a pointer to SPIR-V code, @codeSize@ /must/ be a
+--     multiple of 4
+--
+-- -   @pCode@ /must/ point to either valid SPIR-V code, formatted and
+--     packed as described by the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirv-spec Khronos SPIR-V Specification>
+--     or valid GLSL code which /must/ be written to the
+--     @GL_KHR_vulkan_glsl@ extension specification
+--
+-- -   If @pCode@ is a pointer to SPIR-V code, that code /must/ adhere to
+--     the validation rules described by the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-module-validation Validation Rules within a Module>
+--     section of the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities SPIR-V Environment>
+--     appendix
+--
+-- -   If @pCode@ is a pointer to GLSL code, it /must/ be valid GLSL code
+--     written to the @GL_KHR_vulkan_glsl@ GLSL extension specification
+--
+-- -   @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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-module-validation Capabilities>
+--     section of the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities SPIR-V Environment>
+--     appendix
+--
+-- -   If @pCode@ declares any of the capabilities listed as /optional/ in
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table SPIR-V Environment>
+--     appendix, the corresponding feature(s) /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_validation_cache.ShaderModuleValidationCacheCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @pCode@ /must/ be a valid pointer to an array of
+--     \(\textrm{codeSize} \over 4\) @uint32_t@ values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ShaderModuleCreateFlagBits.ShaderModuleCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createShaderModule'
+data ShaderModuleCreateInfo (es :: [Type]) = ShaderModuleCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: ShaderModuleCreateFlags
+  , -- | @pCode@ is a pointer to code that is used to create the shader module.
+    -- The type and format of the code is determined from the content of the
+    -- memory addressed by @pCode@.
+    code :: ByteString
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (ShaderModuleCreateInfo es)
+
+instance Extensible ShaderModuleCreateInfo where
+  extensibleType = STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext ShaderModuleCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ShaderModuleCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @ShaderModuleValidationCacheCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss ShaderModuleCreateInfo es, PokeChain es) => ToCStruct (ShaderModuleCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ShaderModuleCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr ShaderModuleCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 24 :: Ptr CSize)) (fromIntegral $ Data.ByteString.length (code))
+    lift $ unless (Data.ByteString.length (code) .&. 3 == 0) $
+      throwIO $ IOError Nothing InvalidArgument "" "code size must be a multiple of 4" Nothing Nothing
+    unalignedCode <- ContT $ unsafeUseAsCString (code)
+    pCode'' <- if ptrToWordPtr unalignedCode .&. 3 == 0
+      -- If this pointer is already aligned properly then use it
+      then pure $ castPtr @CChar @Word32 unalignedCode
+      -- Otherwise allocate and copy the bytes
+      else do
+        let len = Data.ByteString.length (code)
+        mem <- ContT $ allocaBytesAligned @Word32 len 4
+        lift $ copyBytes mem (castPtr @CChar @Word32 unalignedCode) len
+        pure mem
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word32))) pCode''
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ f
+
+instance (Extendss ShaderModuleCreateInfo es, PeekChain es) => FromCStruct (ShaderModuleCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @ShaderModuleCreateFlags ((p `plusPtr` 16 :: Ptr ShaderModuleCreateFlags))
+    codeSize <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
+    pCode <- peek @(Ptr Word32) ((p `plusPtr` 32 :: Ptr (Ptr Word32)))
+    code <- packCStringLen (castPtr @Word32 @CChar pCode, fromIntegral $ ((\(CSize a) -> a) codeSize) * 4)
+    pure $ ShaderModuleCreateInfo
+             next flags code
+
+instance es ~ '[] => Zero (ShaderModuleCreateInfo es) where
+  zero = ShaderModuleCreateInfo
+           ()
+           zero
+           mempty
+
diff --git a/src/Vulkan/Core10/Shader.hs-boot b/src/Vulkan/Core10/Shader.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/Shader.hs-boot
@@ -0,0 +1,18 @@
+{-# language CPP #-}
+module Vulkan.Core10.Shader  (ShaderModuleCreateInfo) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role ShaderModuleCreateInfo nominal
+data ShaderModuleCreateInfo (es :: [Type])
+
+instance (Extendss ShaderModuleCreateInfo es, PokeChain es) => ToCStruct (ShaderModuleCreateInfo es)
+instance Show (Chain es) => Show (ShaderModuleCreateInfo es)
+
+instance (Extendss ShaderModuleCreateInfo es, PeekChain es) => FromCStruct (ShaderModuleCreateInfo es)
+
diff --git a/src/Vulkan/Core10/SharedTypes.hs b/src/Vulkan/Core10/SharedTypes.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/SharedTypes.hs
@@ -0,0 +1,653 @@
+{-# language CPP #-}
+module Vulkan.Core10.SharedTypes  ( Offset2D(..)
+                                  , Offset3D(..)
+                                  , Extent2D(..)
+                                  , Extent3D(..)
+                                  , ImageSubresourceLayers(..)
+                                  , ImageSubresourceRange(..)
+                                  , ClearDepthStencilValue(..)
+                                  , ClearColorValue(..)
+                                  , ClearValue(..)
+                                  ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Ptr (castPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (runContT)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+-- | VkOffset2D - Structure specifying a two-dimensional offset
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayPlaneCapabilitiesKHR',
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D',
+-- 'Vulkan.Extensions.VK_KHR_incremental_present.RectLayerKHR'
+data Offset2D = Offset2D
+  { -- | @x@ is the x offset.
+    x :: Int32
+  , -- | @y@ is the y offset.
+    y :: Int32
+  }
+  deriving (Typeable)
+deriving instance Show Offset2D
+
+instance ToCStruct Offset2D where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p Offset2D{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Int32)) (x)
+    poke ((p `plusPtr` 4 :: Ptr Int32)) (y)
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Int32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Int32)) (zero)
+    f
+
+instance FromCStruct Offset2D where
+  peekCStruct p = do
+    x <- peek @Int32 ((p `plusPtr` 0 :: Ptr Int32))
+    y <- peek @Int32 ((p `plusPtr` 4 :: Ptr Int32))
+    pure $ Offset2D
+             x y
+
+instance Storable Offset2D where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero Offset2D where
+  zero = Offset2D
+           zero
+           zero
+
+
+-- | VkOffset3D - Structure specifying a three-dimensional offset
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageBlit',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageCopy',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageResolve',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind'
+data Offset3D = Offset3D
+  { -- | @x@ is the x offset.
+    x :: Int32
+  , -- | @y@ is the y offset.
+    y :: Int32
+  , -- | @z@ is the z offset.
+    z :: Int32
+  }
+  deriving (Typeable)
+deriving instance Show Offset3D
+
+instance ToCStruct Offset3D where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p Offset3D{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Int32)) (x)
+    poke ((p `plusPtr` 4 :: Ptr Int32)) (y)
+    poke ((p `plusPtr` 8 :: Ptr Int32)) (z)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Int32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Int32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Int32)) (zero)
+    f
+
+instance FromCStruct Offset3D where
+  peekCStruct p = do
+    x <- peek @Int32 ((p `plusPtr` 0 :: Ptr Int32))
+    y <- peek @Int32 ((p `plusPtr` 4 :: Ptr Int32))
+    z <- peek @Int32 ((p `plusPtr` 8 :: Ptr Int32))
+    pure $ Offset3D
+             x y z
+
+instance Storable Offset3D where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero Offset3D where
+  zero = Offset3D
+           zero
+           zero
+           zero
+
+
+-- | VkExtent2D - Structure specifying a two-dimensional extent
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayModeParametersKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayPlaneCapabilitiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.DisplaySurfaceCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT',
+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImagePropertiesNV',
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D',
+-- 'Vulkan.Extensions.VK_KHR_incremental_present.RectLayerKHR',
+-- 'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
+-- 'Vulkan.Core10.Pass.getRenderAreaGranularity'
+data Extent2D = Extent2D
+  { -- | @width@ is the width of the extent.
+    width :: Word32
+  , -- | @height@ is the height of the extent.
+    height :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show Extent2D
+
+instance ToCStruct Extent2D where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p Extent2D{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (width)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (height)
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct Extent2D where
+  peekCStruct p = do
+    width <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    height <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    pure $ Extent2D
+             width height
+
+instance Storable Extent2D where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero Extent2D where
+  zero = Extent2D
+           zero
+           zero
+
+
+-- | VkExtent3D - Structure specifying a three-dimensional extent
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageCopy',
+-- 'Vulkan.Core10.Image.ImageCreateInfo',
+-- 'Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageResolve',
+-- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties',
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryBind'
+data Extent3D = Extent3D
+  { -- | @width@ is the width of the extent.
+    width :: Word32
+  , -- | @height@ is the height of the extent.
+    height :: Word32
+  , -- | @depth@ is the depth of the extent.
+    depth :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show Extent3D
+
+instance ToCStruct Extent3D where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p Extent3D{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (width)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (height)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (depth)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct Extent3D where
+  peekCStruct p = do
+    width <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    height <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    depth <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pure $ Extent3D
+             width height depth
+
+instance Storable Extent3D where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero Extent3D where
+  zero = Extent3D
+           zero
+           zero
+           zero
+
+
+-- | VkImageSubresourceLayers - Structure specifying an image subresource
+-- layers
+--
+-- == Valid Usage
+--
+-- -   If @aspectMask@ contains
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT', it
+--     /must/ not contain either of
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--
+-- -   @aspectMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'
+--
+-- -   @aspectMask@ /must/ not include
+--     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@
+--
+-- -   @layerCount@ /must/ be greater than 0
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @aspectMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' values
+--
+-- -   @aspectMask@ /must/ not be @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageBlit',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageCopy',
+-- 'Vulkan.Core10.CommandBufferBuilding.ImageResolve'
+data ImageSubresourceLayers = ImageSubresourceLayers
+  { -- | @aspectMask@ is a combination of
+    -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits', selecting
+    -- the color, depth and\/or stencil aspects to be copied.
+    aspectMask :: ImageAspectFlags
+  , -- | @mipLevel@ is the mipmap level to copy from.
+    mipLevel :: Word32
+  , -- | @baseArrayLayer@ and @layerCount@ are the starting layer and number of
+    -- layers to copy.
+    baseArrayLayer :: Word32
+  , -- No documentation found for Nested "VkImageSubresourceLayers" "layerCount"
+    layerCount :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show ImageSubresourceLayers
+
+instance ToCStruct ImageSubresourceLayers where
+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageSubresourceLayers{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (mipLevel)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (baseArrayLayer)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (layerCount)
+    f
+  cStructSize = 16
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct ImageSubresourceLayers where
+  peekCStruct p = do
+    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 0 :: Ptr ImageAspectFlags))
+    mipLevel <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    baseArrayLayer <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    layerCount <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    pure $ ImageSubresourceLayers
+             aspectMask mipLevel baseArrayLayer layerCount
+
+instance Storable ImageSubresourceLayers where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageSubresourceLayers where
+  zero = ImageSubresourceLayers
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkImageSubresourceRange - Structure specifying an image subresource
+-- range
+--
+-- = 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 'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS' and
+-- 'Vulkan.Core10.APIConstants.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
+-- 'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', is not a multiple
+-- of 6, the last cube map in the array /must/ not be accessed.
+--
+-- @aspectMask@ /must/ be only
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT' if
+-- @format@ is a color, depth-only or stencil-only format, respectively,
+-- except if @format@ is a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>.
+-- If using a depth\/stencil format with both depth and stencil components,
+-- @aspectMask@ /must/ include at least one of
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' and
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT', and
+-- /can/ include both.
+--
+-- When the 'ImageSubresourceRange' structure is used to select a subset of
+-- the slices of a 3D image’s mip level in order to create a 2D or 2D array
+-- image view of a 3D image created with
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT',
+-- @baseArrayLayer@ and @layerCount@ specify the first slice index and the
+-- number of slices to include in the created image view. Such an image
+-- view /can/ be used as a framebuffer attachment that refers only to the
+-- specified range of slices of the selected mip level. However, any layout
+-- transitions performed on such an attachment view during a render pass
+-- instance still apply to the entire subresource referenced which includes
+-- all the slices of the selected mip level.
+--
+-- When using an image view 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 image view 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 image view 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 'Vulkan.Core10.ImageView.ComponentMapping' @components@ member
+-- 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,
+-- framebuffer attachments, and any 'Vulkan.Core10.Handles.ImageView' used
+-- with a combined image sampler that enables
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
+--
+-- When creating a 'Vulkan.Core10.Handles.ImageView', if
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
+-- is enabled in the sampler, the @aspectMask@ of a @subresourceRange@ used
+-- by the 'Vulkan.Core10.Handles.ImageView' /must/ be
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'.
+--
+-- When creating a 'Vulkan.Core10.Handles.ImageView', if sampler Y′CBCR
+-- conversion is not enabled in the sampler and the image @format@ is
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>,
+-- the image /must/ have been created with
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
+-- and the @aspectMask@ of the 'Vulkan.Core10.Handles.ImageView'’s
+-- @subresourceRange@ /must/ be
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' or
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'.
+--
+-- == Valid Usage
+--
+-- -   If @levelCount@ is not
+--     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', it /must/ be
+--     greater than @0@
+--
+-- -   If @layerCount@ is not
+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', it /must/ be
+--     greater than @0@
+--
+-- -   If @aspectMask@ includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
+--     then it /must/ not include any of
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
+--
+-- -   @aspectMask@ /must/ not include
+--     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @aspectMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' values
+--
+-- -   @aspectMask@ /must/ not be @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',
+-- 'Vulkan.Core10.ImageView.ImageViewCreateInfo',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearDepthStencilImage'
+data ImageSubresourceRange = ImageSubresourceRange
+  { -- | @aspectMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' specifying
+    -- which aspect(s) of the image are included in the view.
+    aspectMask :: ImageAspectFlags
+  , -- | @baseMipLevel@ is the first mipmap level accessible to the view.
+    baseMipLevel :: Word32
+  , -- | @levelCount@ is the number of mipmap levels (starting from
+    -- @baseMipLevel@) accessible to the view.
+    levelCount :: Word32
+  , -- | @baseArrayLayer@ is the first array layer accessible to the view.
+    baseArrayLayer :: Word32
+  , -- | @layerCount@ is the number of array layers (starting from
+    -- @baseArrayLayer@) accessible to the view.
+    layerCount :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show ImageSubresourceRange
+
+instance ToCStruct ImageSubresourceRange where
+  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageSubresourceRange{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (baseMipLevel)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (levelCount)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (baseArrayLayer)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (layerCount)
+    f
+  cStructSize = 20
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct ImageSubresourceRange where
+  peekCStruct p = do
+    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 0 :: Ptr ImageAspectFlags))
+    baseMipLevel <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    levelCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    baseArrayLayer <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    layerCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ ImageSubresourceRange
+             aspectMask baseMipLevel levelCount baseArrayLayer layerCount
+
+instance Storable ImageSubresourceRange where
+  sizeOf ~_ = 20
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageSubresourceRange where
+  zero = ImageSubresourceRange
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkClearDepthStencilValue - Structure specifying a clear depth stencil
+-- value
+--
+-- == Valid Usage
+--
+-- -   Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled
+--     @depth@ /must/ be between @0.0@ and @1.0@, inclusive
+--
+-- = See Also
+--
+-- 'ClearValue',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearDepthStencilImage'
+data ClearDepthStencilValue = ClearDepthStencilValue
+  { -- | @depth@ is the clear value for the depth aspect of the depth\/stencil
+    -- attachment. It is a floating-point value which is automatically
+    -- converted to the attachment’s format.
+    depth :: Float
+  , -- | @stencil@ is the clear value for the stencil aspect of the
+    -- depth\/stencil attachment. It is a 32-bit integer value which is
+    -- converted to the attachment’s format by taking the appropriate number of
+    -- LSBs.
+    stencil :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show ClearDepthStencilValue
+
+instance ToCStruct ClearDepthStencilValue where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ClearDepthStencilValue{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (depth))
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (stencil)
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct ClearDepthStencilValue where
+  peekCStruct p = do
+    depth <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
+    stencil <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    pure $ ClearDepthStencilValue
+             ((\(CFloat a) -> a) depth) stencil
+
+instance Storable ClearDepthStencilValue where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ClearDepthStencilValue where
+  zero = ClearDepthStencilValue
+           zero
+           zero
+
+
+data ClearColorValue
+  = Float32 ((Float, Float, Float, Float))
+  | Int32 ((Int32, Int32, Int32, Int32))
+  | Uint32 ((Word32, Word32, Word32, Word32))
+  deriving (Show)
+
+instance ToCStruct ClearColorValue where
+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct :: Ptr ClearColorValue -> ClearColorValue -> IO a -> IO a
+  pokeCStruct p = (. const) . runContT .  \case
+    Float32 v -> lift $ do
+      let pFloat32 = lowerArrayPtr (castPtr @_ @(FixedArray 4 CFloat) p)
+      case (v) of
+        (e0, e1, e2, e3) -> do
+          poke (pFloat32 :: Ptr CFloat) (CFloat (e0))
+          poke (pFloat32 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+          poke (pFloat32 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
+          poke (pFloat32 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+    Int32 v -> lift $ do
+      let pInt32 = lowerArrayPtr (castPtr @_ @(FixedArray 4 Int32) p)
+      case (v) of
+        (e0, e1, e2, e3) -> do
+          poke (pInt32 :: Ptr Int32) (e0)
+          poke (pInt32 `plusPtr` 4 :: Ptr Int32) (e1)
+          poke (pInt32 `plusPtr` 8 :: Ptr Int32) (e2)
+          poke (pInt32 `plusPtr` 12 :: Ptr Int32) (e3)
+    Uint32 v -> lift $ do
+      let pUint32 = lowerArrayPtr (castPtr @_ @(FixedArray 4 Word32) p)
+      case (v) of
+        (e0, e1, e2, e3) -> do
+          poke (pUint32 :: Ptr Word32) (e0)
+          poke (pUint32 `plusPtr` 4 :: Ptr Word32) (e1)
+          poke (pUint32 `plusPtr` 8 :: Ptr Word32) (e2)
+          poke (pUint32 `plusPtr` 12 :: Ptr Word32) (e3)
+  pokeZeroCStruct :: Ptr ClearColorValue -> IO b -> IO b
+  pokeZeroCStruct _ f = f
+  cStructSize = 16
+  cStructAlignment = 4
+
+instance Zero ClearColorValue where
+  zero = Float32 (zero, zero, zero, zero)
+
+
+data ClearValue
+  = Color ClearColorValue
+  | DepthStencil ClearDepthStencilValue
+  deriving (Show)
+
+instance ToCStruct ClearValue where
+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct :: Ptr ClearValue -> ClearValue -> IO a -> IO a
+  pokeCStruct p = (. const) . runContT .  \case
+    Color v -> ContT $ pokeCStruct (castPtr @_ @ClearColorValue p) (v) . ($ ())
+    DepthStencil v -> ContT $ pokeCStruct (castPtr @_ @ClearDepthStencilValue p) (v) . ($ ())
+  pokeZeroCStruct :: Ptr ClearValue -> IO b -> IO b
+  pokeZeroCStruct _ f = f
+  cStructSize = 16
+  cStructAlignment = 4
+
+instance Zero ClearValue where
+  zero = Color zero
+
diff --git a/src/Vulkan/Core10/SharedTypes.hs-boot b/src/Vulkan/Core10/SharedTypes.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/SharedTypes.hs-boot
@@ -0,0 +1,72 @@
+{-# language CPP #-}
+module Vulkan.Core10.SharedTypes  ( ClearDepthStencilValue
+                                  , Extent2D
+                                  , Extent3D
+                                  , ImageSubresourceLayers
+                                  , ImageSubresourceRange
+                                  , Offset2D
+                                  , Offset3D
+                                  , ClearColorValue
+                                  ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ClearDepthStencilValue
+
+instance ToCStruct ClearDepthStencilValue
+instance Show ClearDepthStencilValue
+
+instance FromCStruct ClearDepthStencilValue
+
+
+data Extent2D
+
+instance ToCStruct Extent2D
+instance Show Extent2D
+
+instance FromCStruct Extent2D
+
+
+data Extent3D
+
+instance ToCStruct Extent3D
+instance Show Extent3D
+
+instance FromCStruct Extent3D
+
+
+data ImageSubresourceLayers
+
+instance ToCStruct ImageSubresourceLayers
+instance Show ImageSubresourceLayers
+
+instance FromCStruct ImageSubresourceLayers
+
+
+data ImageSubresourceRange
+
+instance ToCStruct ImageSubresourceRange
+instance Show ImageSubresourceRange
+
+instance FromCStruct ImageSubresourceRange
+
+
+data Offset2D
+
+instance ToCStruct Offset2D
+instance Show Offset2D
+
+instance FromCStruct Offset2D
+
+
+data Offset3D
+
+instance ToCStruct Offset3D
+instance Show Offset3D
+
+instance FromCStruct Offset3D
+
+
+data ClearColorValue
+
diff --git a/src/Vulkan/Core10/SparseResourceMemoryManagement.hs b/src/Vulkan/Core10/SparseResourceMemoryManagement.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/SparseResourceMemoryManagement.hs
@@ -0,0 +1,1297 @@
+{-# language CPP #-}
+module Vulkan.Core10.SparseResourceMemoryManagement  ( getImageSparseMemoryRequirements
+                                                     , getPhysicalDeviceSparseImageFormatProperties
+                                                     , queueBindSparse
+                                                     , SparseImageFormatProperties(..)
+                                                     , SparseImageMemoryRequirements(..)
+                                                     , SparseMemoryBind(..)
+                                                     , SparseImageMemoryBind(..)
+                                                     , SparseBufferMemoryBindInfo(..)
+                                                     , SparseImageOpaqueMemoryBindInfo(..)
+                                                     , SparseImageMemoryBindInfo(..)
+                                                     , BindSparseInfo(..)
+                                                     ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetImageSparseMemoryRequirements))
+import Vulkan.Dynamic (DeviceCmds(pVkQueueBindSparse))
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupBindSparseInfo)
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.SharedTypes (Extent3D)
+import Vulkan.Core10.Handles (Fence)
+import Vulkan.Core10.Handles (Fence(..))
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.Core10.Enums.Format (Format(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.Handles (Image(..))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
+import Vulkan.Core10.Image (ImageSubresource)
+import Vulkan.Core10.Enums.ImageTiling (ImageTiling)
+import Vulkan.Core10.Enums.ImageTiling (ImageTiling(..))
+import Vulkan.Core10.Enums.ImageType (ImageType)
+import Vulkan.Core10.Enums.ImageType (ImageType(..))
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlagBits(..))
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSparseImageFormatProperties))
+import Vulkan.Core10.SharedTypes (Offset3D)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Handles (Queue)
+import Vulkan.Core10.Handles (Queue(..))
+import Vulkan.Core10.Handles (Queue_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits(..))
+import Vulkan.Core10.Handles (Semaphore)
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.SparseImageFormatFlagBits (SparseImageFormatFlags)
+import Vulkan.Core10.Enums.SparseMemoryBindFlagBits (SparseMemoryBindFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (TimelineSemaphoreSubmitInfo)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_SPARSE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetImageSparseMemoryRequirements
+  :: FunPtr (Ptr Device_T -> Image -> Ptr Word32 -> Ptr SparseImageMemoryRequirements -> IO ()) -> Ptr Device_T -> Image -> Ptr Word32 -> Ptr SparseImageMemoryRequirements -> IO ()
+
+-- | vkGetImageSparseMemoryRequirements - Query the memory requirements for a
+-- sparse image
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the image.
+--
+-- -   @image@ is the 'Vulkan.Core10.Handles.Image' 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 'SparseImageMemoryRequirements' structures.
+--
+-- = 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
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.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
+-- 'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ than would
+-- be obtained by adding together memory sizes for all
+-- 'SparseImageMemoryRequirements' returned by
+-- 'getImageSparseMemoryRequirements'. This /may/ occur when the
+-- implementation requires unused padding in the address range describing
+-- the resource.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' 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@ 'SparseImageMemoryRequirements'
+--     structures
+--
+-- -   @image@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Image',
+-- 'SparseImageMemoryRequirements'
+getImageSparseMemoryRequirements :: forall io . MonadIO io => Device -> Image -> io (("sparseMemoryRequirements" ::: Vector SparseImageMemoryRequirements))
+getImageSparseMemoryRequirements device image = liftIO . evalContT $ do
+  let vkGetImageSparseMemoryRequirementsPtr = pVkGetImageSparseMemoryRequirements (deviceCmds (device :: Device))
+  lift $ unless (vkGetImageSparseMemoryRequirementsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetImageSparseMemoryRequirements is null" Nothing Nothing
+  let vkGetImageSparseMemoryRequirements' = mkVkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirementsPtr
+  let device' = deviceHandle (device)
+  pPSparseMemoryRequirementCount <- ContT $ bracket (callocBytes @Word32 4) free
+  lift $ vkGetImageSparseMemoryRequirements' device' (image) (pPSparseMemoryRequirementCount) (nullPtr)
+  pSparseMemoryRequirementCount <- lift $ peek @Word32 pPSparseMemoryRequirementCount
+  pPSparseMemoryRequirements <- ContT $ bracket (callocBytes @SparseImageMemoryRequirements ((fromIntegral (pSparseMemoryRequirementCount)) * 48)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPSparseMemoryRequirements `advancePtrBytes` (i * 48) :: Ptr SparseImageMemoryRequirements) . ($ ())) [0..(fromIntegral (pSparseMemoryRequirementCount)) - 1]
+  lift $ vkGetImageSparseMemoryRequirements' device' (image) (pPSparseMemoryRequirementCount) ((pPSparseMemoryRequirements))
+  pSparseMemoryRequirementCount' <- lift $ peek @Word32 pPSparseMemoryRequirementCount
+  pSparseMemoryRequirements' <- lift $ generateM (fromIntegral (pSparseMemoryRequirementCount')) (\i -> peekCStruct @SparseImageMemoryRequirements (((pPSparseMemoryRequirements) `advancePtrBytes` (48 * (i)) :: Ptr SparseImageMemoryRequirements)))
+  pure $ (pSparseMemoryRequirements')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSparseImageFormatProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> SampleCountFlagBits -> ImageUsageFlags -> ImageTiling -> Ptr Word32 -> Ptr SparseImageFormatProperties -> IO ()) -> Ptr PhysicalDevice_T -> Format -> ImageType -> SampleCountFlagBits -> ImageUsageFlags -> ImageTiling -> Ptr Word32 -> Ptr SparseImageFormatProperties -> IO ()
+
+-- | vkGetPhysicalDeviceSparseImageFormatProperties - Retrieve properties of
+-- an image format applied to sparse images
+--
+-- = 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
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'.
+--
+-- -   @usage@ is a bitmask describing the intended usage of the image.
+--
+-- -   @tiling@ is the tiling arrangement of the texel blocks 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
+--     'SparseImageFormatProperties' structures.
+--
+-- = 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
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.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 'SparseImageFormatProperties' data.
+--
+-- Depth\/stencil images with depth and stencil data interleaved into a
+-- single plane will return a single 'SparseImageFormatProperties'
+-- structure with the @aspectMask@ set to
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' |
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'.
+--
+-- == Valid Usage
+--
+-- -   @samples@ /must/ be a bit value that is set in
+--     'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@sampleCounts@
+--     returned by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties'
+--     with @format@, @type@, @tiling@, and @usage@ equal to those in this
+--     command and @flags@ equal to the value that is set in
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ when the image is
+--     created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- -   @type@ /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType'
+--     value
+--
+-- -   @samples@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+--
+-- -   @usage@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- -   @tiling@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageTiling.ImageTiling' 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@ 'SparseImageFormatProperties'
+--     structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.ImageTiling.ImageTiling',
+-- 'Vulkan.Core10.Enums.ImageType.ImageType',
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
+-- 'SparseImageFormatProperties'
+getPhysicalDeviceSparseImageFormatProperties :: forall io . MonadIO io => PhysicalDevice -> Format -> ImageType -> ("samples" ::: SampleCountFlagBits) -> ImageUsageFlags -> ImageTiling -> io (("properties" ::: Vector SparseImageFormatProperties))
+getPhysicalDeviceSparseImageFormatProperties physicalDevice format type' samples usage tiling = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSparseImageFormatPropertiesPtr = pVkGetPhysicalDeviceSparseImageFormatProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSparseImageFormatPropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSparseImageFormatProperties is null" Nothing Nothing
+  let vkGetPhysicalDeviceSparseImageFormatProperties' = mkVkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatPropertiesPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  lift $ vkGetPhysicalDeviceSparseImageFormatProperties' physicalDevice' (format) (type') (samples) (usage) (tiling) (pPPropertyCount) (nullPtr)
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @SparseImageFormatProperties ((fromIntegral (pPropertyCount)) * 20)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 20) :: Ptr SparseImageFormatProperties) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  lift $ vkGetPhysicalDeviceSparseImageFormatProperties' physicalDevice' (format) (type') (samples) (usage) (tiling) (pPPropertyCount) ((pPProperties))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @SparseImageFormatProperties (((pPProperties) `advancePtrBytes` (20 * (i)) :: Ptr SparseImageFormatProperties)))
+  pure $ (pProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkQueueBindSparse
+  :: FunPtr (Ptr Queue_T -> Word32 -> Ptr (BindSparseInfo a) -> Fence -> IO Result) -> Ptr Queue_T -> Word32 -> Ptr (BindSparseInfo a) -> Fence -> IO Result
+
+-- | vkQueueBindSparse - Bind device memory to a sparse resource object
+--
+-- = 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 a pointer to an array of 'BindSparseInfo' structures,
+--     each specifying a sparse binding submission batch.
+--
+-- -   @fence@ is an /optional/ handle to a fence to be signaled. If
+--     @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it defines
+--     a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation>.
+--
+-- = Description
+--
+-- 'queueBindSparse' is a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-submission queue submission command>,
+-- with each batch defined by an element of @pBindInfo@ as a
+-- 'BindSparseInfo' 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 'queueBindSparse' 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization the synchronization chapter>.
+--
+-- == Valid Usage
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@
+--     /must/ be unsignaled
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@
+--     /must/ not be associated with any other queue command that has not
+--     yet completed execution on that queue
+--
+-- -   Each element of the @pSignalSemaphores@ member of each element of
+--     @pBindInfo@ /must/ be unsignaled when the semaphore signal operation
+--     it defines is executed on the device
+--
+-- -   When a semaphore wait operation referring to a binary semaphore
+--     defined by any element of the @pWaitSemaphores@ member of any
+--     element of @pBindInfo@ executes on @queue@, there /must/ be no other
+--     queues waiting on the same semaphore
+--
+-- -   All elements of the @pWaitSemaphores@ member of all elements of
+--     @pBindInfo@ member referring to a binary semaphore /must/ be
+--     semaphores that are signaled, or have
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operations>
+--     previously submitted for execution
+--
+-- -   All elements of the @pWaitSemaphores@ member of all elements of
+--     @pBindInfo@ created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY' /must/
+--     reference a semaphore signal operation that has been submitted for
+--     execution and any semaphore signal operations on which it depends
+--     (if any) /must/ have also been submitted for execution
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle
+--
+-- -   If @bindInfoCount@ is not @0@, @pBindInfo@ /must/ be a valid pointer
+--     to an array of @bindInfoCount@ valid 'BindSparseInfo' structures
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle
+--
+-- -   The @queue@ /must/ support sparse binding operations
+--
+-- -   Both of @fence@, and @queue@ that are valid handles of non-ignored
+--     parameters /must/ have been created, allocated, or retrieved from
+--     the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @queue@ /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
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | -                                                                                                                          | -                                                                                                                      | SPARSE_BINDING                                                                                                        | -                                                                                                                                   |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'BindSparseInfo', 'Vulkan.Core10.Handles.Fence',
+-- 'Vulkan.Core10.Handles.Queue'
+queueBindSparse :: forall io . MonadIO io => Queue -> ("bindInfo" ::: Vector (SomeStruct BindSparseInfo)) -> Fence -> io ()
+queueBindSparse queue bindInfo fence = liftIO . evalContT $ do
+  let vkQueueBindSparsePtr = pVkQueueBindSparse (deviceCmds (queue :: Queue))
+  lift $ unless (vkQueueBindSparsePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkQueueBindSparse is null" Nothing Nothing
+  let vkQueueBindSparse' = mkVkQueueBindSparse vkQueueBindSparsePtr
+  pPBindInfo <- ContT $ allocaBytesAligned @(BindSparseInfo _) ((Data.Vector.length (bindInfo)) * 96) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPBindInfo `plusPtr` (96 * (i)) :: Ptr (BindSparseInfo _))) (e) . ($ ())) (bindInfo)
+  r <- lift $ vkQueueBindSparse' (queueHandle (queue)) ((fromIntegral (Data.Vector.length $ (bindInfo)) :: Word32)) (pPBindInfo) (fence)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkSparseImageFormatProperties - Structure specifying sparse image format
+-- properties
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.Extent3D',
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
+-- 'Vulkan.Core10.Enums.SparseImageFormatFlagBits.SparseImageFormatFlags',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.SparseImageFormatProperties2',
+-- 'SparseImageMemoryRequirements',
+-- 'getPhysicalDeviceSparseImageFormatProperties'
+data SparseImageFormatProperties = SparseImageFormatProperties
+  { -- | @aspectMask@ is a bitmask
+    -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' specifying
+    -- which aspects of the image the properties apply to.
+    aspectMask :: ImageAspectFlags
+  , -- | @imageGranularity@ is the width, height, and depth of the sparse image
+    -- block in texels or compressed texel blocks.
+    imageGranularity :: Extent3D
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.SparseImageFormatFlagBits.SparseImageFormatFlagBits'
+    -- specifying additional information about the sparse resource.
+    flags :: SparseImageFormatFlags
+  }
+  deriving (Typeable)
+deriving instance Show SparseImageFormatProperties
+
+instance ToCStruct SparseImageFormatProperties where
+  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SparseImageFormatProperties{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)
+    ContT $ pokeCStruct ((p `plusPtr` 4 :: Ptr Extent3D)) (imageGranularity) . ($ ())
+    lift $ poke ((p `plusPtr` 16 :: Ptr SparseImageFormatFlags)) (flags)
+    lift $ f
+  cStructSize = 20
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 4 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct SparseImageFormatProperties where
+  peekCStruct p = do
+    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 0 :: Ptr ImageAspectFlags))
+    imageGranularity <- peekCStruct @Extent3D ((p `plusPtr` 4 :: Ptr Extent3D))
+    flags <- peek @SparseImageFormatFlags ((p `plusPtr` 16 :: Ptr SparseImageFormatFlags))
+    pure $ SparseImageFormatProperties
+             aspectMask imageGranularity flags
+
+instance Zero SparseImageFormatProperties where
+  zero = SparseImageFormatProperties
+           zero
+           zero
+           zero
+
+
+-- | VkSparseImageMemoryRequirements - Structure specifying sparse image
+-- memory requirements
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize', 'SparseImageFormatProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.SparseImageMemoryRequirements2',
+-- 'getImageSparseMemoryRequirements'
+data SparseImageMemoryRequirements = SparseImageMemoryRequirements
+  { -- No documentation found for Nested "VkSparseImageMemoryRequirements" "formatProperties"
+    formatProperties :: SparseImageFormatProperties
+  , -- | @imageMipTailFirstLod@ is the first mip level at which image
+    -- subresources are included in the mip tail region.
+    imageMipTailFirstLod :: Word32
+  , -- | @imageMipTailSize@ is the memory size (in bytes) of the mip tail region.
+    -- If @formatProperties.flags@ contains
+    -- 'Vulkan.Core10.Enums.SparseImageFormatFlagBits.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.
+    imageMipTailSize :: DeviceSize
+  , -- | @imageMipTailOffset@ is the opaque memory offset used with
+    -- 'SparseImageOpaqueMemoryBindInfo' to bind the mip tail region(s).
+    imageMipTailOffset :: DeviceSize
+  , -- | @imageMipTailStride@ is the offset stride between each array-layer’s mip
+    -- tail, if @formatProperties.flags@ does not contain
+    -- 'Vulkan.Core10.Enums.SparseImageFormatFlagBits.SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT'
+    -- (otherwise the value is undefined).
+    imageMipTailStride :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show SparseImageMemoryRequirements
+
+instance ToCStruct SparseImageMemoryRequirements where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SparseImageMemoryRequirements{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr SparseImageFormatProperties)) (formatProperties) . ($ ())
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (imageMipTailFirstLod)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (imageMipTailSize)
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (imageMipTailOffset)
+    lift $ poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (imageMipTailStride)
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr SparseImageFormatProperties)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero)
+    lift $ f
+
+instance FromCStruct SparseImageMemoryRequirements where
+  peekCStruct p = do
+    formatProperties <- peekCStruct @SparseImageFormatProperties ((p `plusPtr` 0 :: Ptr SparseImageFormatProperties))
+    imageMipTailFirstLod <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    imageMipTailSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    imageMipTailOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
+    imageMipTailStride <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
+    pure $ SparseImageMemoryRequirements
+             formatProperties imageMipTailFirstLod imageMipTailSize imageMipTailOffset imageMipTailStride
+
+instance Zero SparseImageMemoryRequirements where
+  zero = SparseImageMemoryRequirements
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkSparseMemoryBind - Structure specifying a sparse memory bind operation
+--
+-- = Description
+--
+-- The /binding range/ [@resourceOffset@, @resourceOffset@ + @size@) has
+-- different constraints based on @flags@. If @flags@ contains
+-- 'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.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 'SparseImageMemoryRequirements' 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
+-- 'SparseImageMemoryRequirements'::@formatProperties.flags@ contains
+-- 'Vulkan.Core10.Enums.SparseImageFormatFlagBits.SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT'.
+--
+-- If @flags@ does not contain
+-- 'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SPARSE_MEMORY_BIND_METADATA_BIT',
+-- the binding range /must/ be within the range
+-- [0,'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@).
+--
+-- == Valid Usage
+--
+-- -   If @memory@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @memory@ and @memoryOffset@ /must/ match the memory requirements of
+--     the resource, as described in section
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-association>
+--
+-- -   If @memory@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @memory@ /must/ not have been created with a memory type that
+--     reports
+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.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@
+--
+-- -   If @memory@ was created with
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+--     not equal to @0@, at least one handle type it contained /must/ also
+--     have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     when the resource was created
+--
+-- -   If @memory@ was created by a memory import operation, the external
+--     handle type of the imported memory /must/ also have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     when the resource was created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @memory@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.BaseType.DeviceSize', 'SparseBufferMemoryBindInfo',
+-- 'SparseImageOpaqueMemoryBindInfo',
+-- 'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlags'
+data SparseMemoryBind = SparseMemoryBind
+  { -- | @resourceOffset@ is the offset into the resource.
+    resourceOffset :: DeviceSize
+  , -- | @size@ is the size of the memory region to be bound.
+    size :: DeviceSize
+  , -- | @memory@ is the 'Vulkan.Core10.Handles.DeviceMemory' object that the
+    -- range of the resource is bound to. If @memory@ is
+    -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the range is unbound.
+    memory :: DeviceMemory
+  , -- | @memoryOffset@ is the offset into the
+    -- 'Vulkan.Core10.Handles.DeviceMemory' object to bind the resource range
+    -- to. If @memory@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', this value
+    -- is ignored.
+    memoryOffset :: DeviceSize
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlagBits'
+    -- specifying usage of the binding operation.
+    flags :: SparseMemoryBindFlags
+  }
+  deriving (Typeable)
+deriving instance Show SparseMemoryBind
+
+instance ToCStruct SparseMemoryBind where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SparseMemoryBind{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (resourceOffset)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (size)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (memoryOffset)
+    poke ((p `plusPtr` 32 :: Ptr SparseMemoryBindFlags)) (flags)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct SparseMemoryBind where
+  peekCStruct p = do
+    resourceOffset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))
+    size <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
+    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
+    memoryOffset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    flags <- peek @SparseMemoryBindFlags ((p `plusPtr` 32 :: Ptr SparseMemoryBindFlags))
+    pure $ SparseMemoryBind
+             resourceOffset size memory memoryOffset flags
+
+instance Storable SparseMemoryBind where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SparseMemoryBind where
+  zero = SparseMemoryBind
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkSparseImageMemoryBind - Structure specifying sparse image memory bind
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyAliased sparse aliased residency>
+--     feature is not enabled, and if any other resources are bound to
+--     ranges of @memory@, the range of @memory@ being bound /must/ not
+--     overlap with those bound ranges
+--
+-- -   @memory@ and @memoryOffset@ /must/ match the memory requirements of
+--     the calling command’s @image@, as described in section
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-association>
+--
+-- -   @subresource@ /must/ be a valid image subresource for @image@ (see
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views>)
+--
+-- -   @offset.x@ /must/ be a multiple of the sparse image block width
+--     ('SparseImageFormatProperties'::@imageGranularity.width@) of the
+--     image
+--
+-- -   @extent.width@ /must/ either be a multiple of the sparse image block
+--     width of the image, or else (@extent.width@ + @offset.x@) /must/
+--     equal the width of the image subresource
+--
+-- -   @offset.y@ /must/ be a multiple of the sparse image block height
+--     ('SparseImageFormatProperties'::@imageGranularity.height@) of the
+--     image
+--
+-- -   @extent.height@ /must/ either be a multiple of the sparse image
+--     block height of the image, or else (@extent.height@ + @offset.y@)
+--     /must/ equal the height of the image subresource
+--
+-- -   @offset.z@ /must/ be a multiple of the sparse image block depth
+--     ('SparseImageFormatProperties'::@imageGranularity.depth@) of the
+--     image
+--
+-- -   @extent.depth@ /must/ either be a multiple of the sparse image block
+--     depth of the image, or else (@extent.depth@ + @offset.z@) /must/
+--     equal the depth of the image subresource
+--
+-- -   If @memory@ was created with
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+--     not equal to @0@, at least one handle type it contained /must/ also
+--     have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     when the image was created
+--
+-- -   If @memory@ was created by a memory import operation, the external
+--     handle type of the imported memory /must/ also have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     when @image@ was created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @subresource@ /must/ be a valid
+--     'Vulkan.Core10.Image.ImageSubresource' structure
+--
+-- -   If @memory@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.SharedTypes.Extent3D',
+-- 'Vulkan.Core10.Image.ImageSubresource',
+-- 'Vulkan.Core10.SharedTypes.Offset3D', 'SparseImageMemoryBindInfo',
+-- 'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlags'
+data SparseImageMemoryBind = SparseImageMemoryBind
+  { -- | @subresource@ is the image /aspect/ and region of interest in the image.
+    subresource :: ImageSubresource
+  , -- | @offset@ are the coordinates of the first texel within the image
+    -- subresource to bind.
+    offset :: Offset3D
+  , -- | @extent@ is the size in texels of the region within the image
+    -- subresource to bind. The extent /must/ be a multiple of the sparse image
+    -- block dimensions, except when binding sparse image blocks along the edge
+    -- of an image subresource it /can/ instead be such that any coordinate of
+    -- @offset@ + @extent@ equals the corresponding dimensions of the image
+    -- subresource.
+    extent :: Extent3D
+  , -- | @memory@ is the 'Vulkan.Core10.Handles.DeviceMemory' object that the
+    -- sparse image blocks of the image are bound to. If @memory@ is
+    -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the sparse image blocks are
+    -- unbound.
+    memory :: DeviceMemory
+  , -- | @memoryOffset@ is an offset into 'Vulkan.Core10.Handles.DeviceMemory'
+    -- object. If @memory@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', this
+    -- value is ignored.
+    memoryOffset :: DeviceSize
+  , -- | @flags@ are sparse memory binding flags.
+    flags :: SparseMemoryBindFlags
+  }
+  deriving (Typeable)
+deriving instance Show SparseImageMemoryBind
+
+instance ToCStruct SparseImageMemoryBind where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SparseImageMemoryBind{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresource)) (subresource) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Offset3D)) (offset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent3D)) (extent) . ($ ())
+    lift $ poke ((p `plusPtr` 40 :: Ptr DeviceMemory)) (memory)
+    lift $ poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (memoryOffset)
+    lift $ poke ((p `plusPtr` 56 :: Ptr SparseMemoryBindFlags)) (flags)
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresource)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Offset3D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent3D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 48 :: Ptr DeviceSize)) (zero)
+    lift $ f
+
+instance FromCStruct SparseImageMemoryBind where
+  peekCStruct p = do
+    subresource <- peekCStruct @ImageSubresource ((p `plusPtr` 0 :: Ptr ImageSubresource))
+    offset <- peekCStruct @Offset3D ((p `plusPtr` 12 :: Ptr Offset3D))
+    extent <- peekCStruct @Extent3D ((p `plusPtr` 24 :: Ptr Extent3D))
+    memory <- peek @DeviceMemory ((p `plusPtr` 40 :: Ptr DeviceMemory))
+    memoryOffset <- peek @DeviceSize ((p `plusPtr` 48 :: Ptr DeviceSize))
+    flags <- peek @SparseMemoryBindFlags ((p `plusPtr` 56 :: Ptr SparseMemoryBindFlags))
+    pure $ SparseImageMemoryBind
+             subresource offset extent memory memoryOffset flags
+
+instance Zero SparseImageMemoryBind where
+  zero = SparseImageMemoryBind
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkSparseBufferMemoryBindInfo - Structure specifying a sparse buffer
+-- memory bind operation
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'BindSparseInfo', 'Vulkan.Core10.Handles.Buffer', 'SparseMemoryBind'
+data SparseBufferMemoryBindInfo = SparseBufferMemoryBindInfo
+  { -- | @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+    buffer :: Buffer
+  , -- | @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid
+    -- 'SparseMemoryBind' structures
+    binds :: Vector SparseMemoryBind
+  }
+  deriving (Typeable)
+deriving instance Show SparseBufferMemoryBindInfo
+
+instance ToCStruct SparseBufferMemoryBindInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SparseBufferMemoryBindInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Buffer)) (buffer)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (binds)) :: Word32))
+    pPBinds' <- ContT $ allocaBytesAligned @SparseMemoryBind ((Data.Vector.length (binds)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (40 * (i)) :: Ptr SparseMemoryBind) (e) . ($ ())) (binds)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind))) (pPBinds')
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Buffer)) (zero)
+    pPBinds' <- ContT $ allocaBytesAligned @SparseMemoryBind ((Data.Vector.length (mempty)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (40 * (i)) :: Ptr SparseMemoryBind) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind))) (pPBinds')
+    lift $ f
+
+instance FromCStruct SparseBufferMemoryBindInfo where
+  peekCStruct p = do
+    buffer <- peek @Buffer ((p `plusPtr` 0 :: Ptr Buffer))
+    bindCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pBinds <- peek @(Ptr SparseMemoryBind) ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind)))
+    pBinds' <- generateM (fromIntegral bindCount) (\i -> peekCStruct @SparseMemoryBind ((pBinds `advancePtrBytes` (40 * (i)) :: Ptr SparseMemoryBind)))
+    pure $ SparseBufferMemoryBindInfo
+             buffer pBinds'
+
+instance Zero SparseBufferMemoryBindInfo where
+  zero = SparseBufferMemoryBindInfo
+           zero
+           mempty
+
+
+-- | VkSparseImageOpaqueMemoryBindInfo - Structure specifying sparse image
+-- opaque memory bind info
+--
+-- == Valid Usage
+--
+-- -   If the @flags@ member of any element of @pBinds@ contains
+--     'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SPARSE_MEMORY_BIND_METADATA_BIT',
+--     the binding range defined /must/ be within the mip tail region of
+--     the metadata aspect of @image@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid
+--     'SparseMemoryBind' structures
+--
+-- -   @bindCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'BindSparseInfo', 'Vulkan.Core10.Handles.Image', 'SparseMemoryBind'
+data SparseImageOpaqueMemoryBindInfo = SparseImageOpaqueMemoryBindInfo
+  { -- | @image@ is the 'Vulkan.Core10.Handles.Image' object to be bound.
+    image :: Image
+  , -- | @pBinds@ is a pointer to an array of 'SparseMemoryBind' structures.
+    binds :: Vector SparseMemoryBind
+  }
+  deriving (Typeable)
+deriving instance Show SparseImageOpaqueMemoryBindInfo
+
+instance ToCStruct SparseImageOpaqueMemoryBindInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SparseImageOpaqueMemoryBindInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Image)) (image)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (binds)) :: Word32))
+    pPBinds' <- ContT $ allocaBytesAligned @SparseMemoryBind ((Data.Vector.length (binds)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (40 * (i)) :: Ptr SparseMemoryBind) (e) . ($ ())) (binds)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind))) (pPBinds')
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Image)) (zero)
+    pPBinds' <- ContT $ allocaBytesAligned @SparseMemoryBind ((Data.Vector.length (mempty)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (40 * (i)) :: Ptr SparseMemoryBind) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind))) (pPBinds')
+    lift $ f
+
+instance FromCStruct SparseImageOpaqueMemoryBindInfo where
+  peekCStruct p = do
+    image <- peek @Image ((p `plusPtr` 0 :: Ptr Image))
+    bindCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pBinds <- peek @(Ptr SparseMemoryBind) ((p `plusPtr` 16 :: Ptr (Ptr SparseMemoryBind)))
+    pBinds' <- generateM (fromIntegral bindCount) (\i -> peekCStruct @SparseMemoryBind ((pBinds `advancePtrBytes` (40 * (i)) :: Ptr SparseMemoryBind)))
+    pure $ SparseImageOpaqueMemoryBindInfo
+             image pBinds'
+
+instance Zero SparseImageOpaqueMemoryBindInfo where
+  zero = SparseImageOpaqueMemoryBindInfo
+           zero
+           mempty
+
+
+-- | VkSparseImageMemoryBindInfo - Structure specifying sparse image memory
+-- bind info
+--
+-- == Valid Usage
+--
+-- -   The @subresource.mipLevel@ member of each element of @pBinds@ /must/
+--     be less than the @mipLevels@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
+--
+-- -   The @subresource.arrayLayer@ member of each element of @pBinds@
+--     /must/ be less than the @arrayLayers@ specified in
+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
+--
+-- -   @image@ /must/ have been created with
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
+--     set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid
+--     'SparseImageMemoryBind' structures
+--
+-- -   @bindCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'BindSparseInfo', 'Vulkan.Core10.Handles.Image', 'SparseImageMemoryBind'
+data SparseImageMemoryBindInfo = SparseImageMemoryBindInfo
+  { -- | @image@ is the 'Vulkan.Core10.Handles.Image' object to be bound
+    image :: Image
+  , -- | @pBinds@ is a pointer to an array of 'SparseImageMemoryBind' structures
+    binds :: Vector SparseImageMemoryBind
+  }
+  deriving (Typeable)
+deriving instance Show SparseImageMemoryBindInfo
+
+instance ToCStruct SparseImageMemoryBindInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SparseImageMemoryBindInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Image)) (image)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (binds)) :: Word32))
+    pPBinds' <- ContT $ allocaBytesAligned @SparseImageMemoryBind ((Data.Vector.length (binds)) * 64) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (64 * (i)) :: Ptr SparseImageMemoryBind) (e) . ($ ())) (binds)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseImageMemoryBind))) (pPBinds')
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Image)) (zero)
+    pPBinds' <- ContT $ allocaBytesAligned @SparseImageMemoryBind ((Data.Vector.length (mempty)) * 64) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBinds' `plusPtr` (64 * (i)) :: Ptr SparseImageMemoryBind) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr SparseImageMemoryBind))) (pPBinds')
+    lift $ f
+
+instance FromCStruct SparseImageMemoryBindInfo where
+  peekCStruct p = do
+    image <- peek @Image ((p `plusPtr` 0 :: Ptr Image))
+    bindCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pBinds <- peek @(Ptr SparseImageMemoryBind) ((p `plusPtr` 16 :: Ptr (Ptr SparseImageMemoryBind)))
+    pBinds' <- generateM (fromIntegral bindCount) (\i -> peekCStruct @SparseImageMemoryBind ((pBinds `advancePtrBytes` (64 * (i)) :: Ptr SparseImageMemoryBind)))
+    pure $ SparseImageMemoryBindInfo
+             image pBinds'
+
+instance Zero SparseImageMemoryBindInfo where
+  zero = SparseImageMemoryBindInfo
+           zero
+           mempty
+
+
+-- | VkBindSparseInfo - Structure specifying a sparse binding operation
+--
+-- == Valid Usage
+--
+-- -   If any element of @pWaitSemaphores@ or @pSignalSemaphores@ was
+--     created with a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' then the
+--     @pNext@ chain /must/ include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
+--     structure
+--
+-- -   If the @pNext@ chain of this structure includes a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
+--     structure and any element of @pWaitSemaphores@ was created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' then its
+--     @waitSemaphoreValueCount@ member /must/ equal @waitSemaphoreCount@
+--
+-- -   If the @pNext@ chain of this structure includes a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
+--     structure and any element of @pSignalSemaphores@ was created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' then its
+--     @signalSemaphoreValueCount@ member /must/ equal
+--     @signalSemaphoreCount@
+--
+-- -   For each element of @pSignalSemaphores@ created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the
+--     corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pSignalSemaphoreValues
+--     /must/ have a value greater than the current value of the semaphore
+--     when the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
+--     is executed
+--
+-- -   For each element of @pWaitSemaphores@ created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the
+--     corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pWaitSemaphoreValues
+--     /must/ have a value which does not differ from the current value of
+--     the semaphore or from the value of any outstanding semaphore wait or
+--     signal operation on that semaphore by more than
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
+--
+-- -   For each element of @pSignalSemaphores@ created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the
+--     corresponding element of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'::pSignalSemaphoreValues
+--     /must/ have a value which does not differ from the current value of
+--     the semaphore or from the value of any outstanding semaphore wait or
+--     signal operation on that semaphore by more than
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_SPARSE_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupBindSparseInfo'
+--     or
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a
+--     valid pointer to an array of @waitSemaphoreCount@ valid
+--     'Vulkan.Core10.Handles.Semaphore' handles
+--
+-- -   If @bufferBindCount@ is not @0@, @pBufferBinds@ /must/ be a valid
+--     pointer to an array of @bufferBindCount@ valid
+--     'SparseBufferMemoryBindInfo' structures
+--
+-- -   If @imageOpaqueBindCount@ is not @0@, @pImageOpaqueBinds@ /must/ be
+--     a valid pointer to an array of @imageOpaqueBindCount@ valid
+--     'SparseImageOpaqueMemoryBindInfo' structures
+--
+-- -   If @imageBindCount@ is not @0@, @pImageBinds@ /must/ be a valid
+--     pointer to an array of @imageBindCount@ valid
+--     'SparseImageMemoryBindInfo' structures
+--
+-- -   If @signalSemaphoreCount@ is not @0@, @pSignalSemaphores@ /must/ be
+--     a valid pointer to an array of @signalSemaphoreCount@ valid
+--     'Vulkan.Core10.Handles.Semaphore' handles
+--
+-- -   Both of the elements of @pSignalSemaphores@, and the elements of
+--     @pWaitSemaphores@ that are valid handles of non-ignored parameters
+--     /must/ have been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Semaphore', 'SparseBufferMemoryBindInfo',
+-- 'SparseImageMemoryBindInfo', 'SparseImageOpaqueMemoryBindInfo',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'queueBindSparse'
+data BindSparseInfo (es :: [Type]) = BindSparseInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @pWaitSemaphores@ is a pointer to an array of semaphores upon which to
+    -- wait on before the sparse binding operations for this batch begin
+    -- execution. If semaphores to wait on are provided, they define a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-waiting semaphore wait operation>.
+    waitSemaphores :: Vector Semaphore
+  , -- | @pBufferBinds@ is a pointer to an array of 'SparseBufferMemoryBindInfo'
+    -- structures.
+    bufferBinds :: Vector SparseBufferMemoryBindInfo
+  , -- | @pImageOpaqueBinds@ is a pointer to an array of
+    -- 'SparseImageOpaqueMemoryBindInfo' structures, indicating opaque sparse
+    -- image bindings to perform.
+    imageOpaqueBinds :: Vector SparseImageOpaqueMemoryBindInfo
+  , -- | @pImageBinds@ is a pointer to an array of 'SparseImageMemoryBindInfo'
+    -- structures, indicating sparse image bindings to perform.
+    imageBinds :: Vector SparseImageMemoryBindInfo
+  , -- | @pSignalSemaphores@ is a pointer to an array of semaphores which will be
+    -- signaled when the sparse binding operations for this batch have
+    -- completed execution. If semaphores to be signaled are provided, they
+    -- define a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>.
+    signalSemaphores :: Vector Semaphore
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (BindSparseInfo es)
+
+instance Extensible BindSparseInfo where
+  extensibleType = STRUCTURE_TYPE_BIND_SPARSE_INFO
+  setNext x next = x{next = next}
+  getNext BindSparseInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends BindSparseInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @TimelineSemaphoreSubmitInfo = Just f
+    | Just Refl <- eqT @e @DeviceGroupBindSparseInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss BindSparseInfo es, PokeChain es) => ToCStruct (BindSparseInfo es) where
+  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindSparseInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_SPARSE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (waitSemaphores)) :: Word32))
+    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (waitSemaphores)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (waitSemaphores)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (bufferBinds)) :: Word32))
+    pPBufferBinds' <- ContT $ allocaBytesAligned @SparseBufferMemoryBindInfo ((Data.Vector.length (bufferBinds)) * 24) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferBinds' `plusPtr` (24 * (i)) :: Ptr SparseBufferMemoryBindInfo) (e) . ($ ())) (bufferBinds)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SparseBufferMemoryBindInfo))) (pPBufferBinds')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (imageOpaqueBinds)) :: Word32))
+    pPImageOpaqueBinds' <- ContT $ allocaBytesAligned @SparseImageOpaqueMemoryBindInfo ((Data.Vector.length (imageOpaqueBinds)) * 24) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageOpaqueBinds' `plusPtr` (24 * (i)) :: Ptr SparseImageOpaqueMemoryBindInfo) (e) . ($ ())) (imageOpaqueBinds)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SparseImageOpaqueMemoryBindInfo))) (pPImageOpaqueBinds')
+    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (imageBinds)) :: Word32))
+    pPImageBinds' <- ContT $ allocaBytesAligned @SparseImageMemoryBindInfo ((Data.Vector.length (imageBinds)) * 24) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageBinds' `plusPtr` (24 * (i)) :: Ptr SparseImageMemoryBindInfo) (e) . ($ ())) (imageBinds)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr SparseImageMemoryBindInfo))) (pPImageBinds')
+    lift $ poke ((p `plusPtr` 80 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (signalSemaphores)) :: Word32))
+    pPSignalSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (signalSemaphores)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (signalSemaphores)
+    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr Semaphore))) (pPSignalSemaphores')
+    lift $ f
+  cStructSize = 96
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_SPARSE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
+    pPBufferBinds' <- ContT $ allocaBytesAligned @SparseBufferMemoryBindInfo ((Data.Vector.length (mempty)) * 24) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferBinds' `plusPtr` (24 * (i)) :: Ptr SparseBufferMemoryBindInfo) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SparseBufferMemoryBindInfo))) (pPBufferBinds')
+    pPImageOpaqueBinds' <- ContT $ allocaBytesAligned @SparseImageOpaqueMemoryBindInfo ((Data.Vector.length (mempty)) * 24) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageOpaqueBinds' `plusPtr` (24 * (i)) :: Ptr SparseImageOpaqueMemoryBindInfo) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SparseImageOpaqueMemoryBindInfo))) (pPImageOpaqueBinds')
+    pPImageBinds' <- ContT $ allocaBytesAligned @SparseImageMemoryBindInfo ((Data.Vector.length (mempty)) * 24) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPImageBinds' `plusPtr` (24 * (i)) :: Ptr SparseImageMemoryBindInfo) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr SparseImageMemoryBindInfo))) (pPImageBinds')
+    pPSignalSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr Semaphore))) (pPSignalSemaphores')
+    lift $ f
+
+instance (Extendss BindSparseInfo es, PeekChain es) => FromCStruct (BindSparseInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    waitSemaphoreCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pWaitSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 24 :: Ptr (Ptr Semaphore)))
+    pWaitSemaphores' <- generateM (fromIntegral waitSemaphoreCount) (\i -> peek @Semaphore ((pWaitSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
+    bufferBindCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pBufferBinds <- peek @(Ptr SparseBufferMemoryBindInfo) ((p `plusPtr` 40 :: Ptr (Ptr SparseBufferMemoryBindInfo)))
+    pBufferBinds' <- generateM (fromIntegral bufferBindCount) (\i -> peekCStruct @SparseBufferMemoryBindInfo ((pBufferBinds `advancePtrBytes` (24 * (i)) :: Ptr SparseBufferMemoryBindInfo)))
+    imageOpaqueBindCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pImageOpaqueBinds <- peek @(Ptr SparseImageOpaqueMemoryBindInfo) ((p `plusPtr` 56 :: Ptr (Ptr SparseImageOpaqueMemoryBindInfo)))
+    pImageOpaqueBinds' <- generateM (fromIntegral imageOpaqueBindCount) (\i -> peekCStruct @SparseImageOpaqueMemoryBindInfo ((pImageOpaqueBinds `advancePtrBytes` (24 * (i)) :: Ptr SparseImageOpaqueMemoryBindInfo)))
+    imageBindCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    pImageBinds <- peek @(Ptr SparseImageMemoryBindInfo) ((p `plusPtr` 72 :: Ptr (Ptr SparseImageMemoryBindInfo)))
+    pImageBinds' <- generateM (fromIntegral imageBindCount) (\i -> peekCStruct @SparseImageMemoryBindInfo ((pImageBinds `advancePtrBytes` (24 * (i)) :: Ptr SparseImageMemoryBindInfo)))
+    signalSemaphoreCount <- peek @Word32 ((p `plusPtr` 80 :: Ptr Word32))
+    pSignalSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 88 :: Ptr (Ptr Semaphore)))
+    pSignalSemaphores' <- generateM (fromIntegral signalSemaphoreCount) (\i -> peek @Semaphore ((pSignalSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
+    pure $ BindSparseInfo
+             next pWaitSemaphores' pBufferBinds' pImageOpaqueBinds' pImageBinds' pSignalSemaphores'
+
+instance es ~ '[] => Zero (BindSparseInfo es) where
+  zero = BindSparseInfo
+           ()
+           mempty
+           mempty
+           mempty
+           mempty
+           mempty
+
diff --git a/src/Vulkan/Core10/SparseResourceMemoryManagement.hs-boot b/src/Vulkan/Core10/SparseResourceMemoryManagement.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core10/SparseResourceMemoryManagement.hs-boot
@@ -0,0 +1,82 @@
+{-# language CPP #-}
+module Vulkan.Core10.SparseResourceMemoryManagement  ( BindSparseInfo
+                                                     , SparseBufferMemoryBindInfo
+                                                     , SparseImageFormatProperties
+                                                     , SparseImageMemoryBind
+                                                     , SparseImageMemoryBindInfo
+                                                     , SparseImageMemoryRequirements
+                                                     , SparseImageOpaqueMemoryBindInfo
+                                                     , SparseMemoryBind
+                                                     ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role BindSparseInfo nominal
+data BindSparseInfo (es :: [Type])
+
+instance (Extendss BindSparseInfo es, PokeChain es) => ToCStruct (BindSparseInfo es)
+instance Show (Chain es) => Show (BindSparseInfo es)
+
+instance (Extendss BindSparseInfo es, PeekChain es) => FromCStruct (BindSparseInfo es)
+
+
+data SparseBufferMemoryBindInfo
+
+instance ToCStruct SparseBufferMemoryBindInfo
+instance Show SparseBufferMemoryBindInfo
+
+instance FromCStruct SparseBufferMemoryBindInfo
+
+
+data SparseImageFormatProperties
+
+instance ToCStruct SparseImageFormatProperties
+instance Show SparseImageFormatProperties
+
+instance FromCStruct SparseImageFormatProperties
+
+
+data SparseImageMemoryBind
+
+instance ToCStruct SparseImageMemoryBind
+instance Show SparseImageMemoryBind
+
+instance FromCStruct SparseImageMemoryBind
+
+
+data SparseImageMemoryBindInfo
+
+instance ToCStruct SparseImageMemoryBindInfo
+instance Show SparseImageMemoryBindInfo
+
+instance FromCStruct SparseImageMemoryBindInfo
+
+
+data SparseImageMemoryRequirements
+
+instance ToCStruct SparseImageMemoryRequirements
+instance Show SparseImageMemoryRequirements
+
+instance FromCStruct SparseImageMemoryRequirements
+
+
+data SparseImageOpaqueMemoryBindInfo
+
+instance ToCStruct SparseImageOpaqueMemoryBindInfo
+instance Show SparseImageOpaqueMemoryBindInfo
+
+instance FromCStruct SparseImageOpaqueMemoryBindInfo
+
+
+data SparseMemoryBind
+
+instance ToCStruct SparseMemoryBind
+instance Show SparseMemoryBind
+
+instance FromCStruct SparseMemoryBind
+
diff --git a/src/Vulkan/Core11.hs b/src/Vulkan/Core11.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11.hs
@@ -0,0 +1,62 @@
+{-# language CPP #-}
+module Vulkan.Core11  ( pattern API_VERSION_1_1
+                      , module Vulkan.Core11.DeviceInitialization
+                      , module Vulkan.Core11.Enums
+                      , module Vulkan.Core11.Handles
+                      , module Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory
+                      , module Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_device_group
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_external_fence
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_external_memory
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_maintenance1
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_maintenance2
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_maintenance3
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_multiview
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters
+                      , module Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers
+                      ) where
+import Vulkan.Core11.DeviceInitialization
+import Vulkan.Core11.Enums
+import Vulkan.Core11.Handles
+import Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory
+import Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup
+import Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage
+import Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2
+import Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation
+import Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group
+import Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation
+import Vulkan.Core11.Promoted_From_VK_KHR_external_fence
+import Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities
+import Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore
+import Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance1
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance2
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance3
+import Vulkan.Core11.Promoted_From_VK_KHR_multiview
+import Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion
+import Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters
+import Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers
+import Data.Word (Word32)
+import Vulkan.Version (pattern MAKE_VERSION)
+pattern API_VERSION_1_1 :: Word32
+pattern API_VERSION_1_1 = MAKE_VERSION 1 1 0
+
diff --git a/src/Vulkan/Core11/DeviceInitialization.hs b/src/Vulkan/Core11/DeviceInitialization.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/DeviceInitialization.hs
@@ -0,0 +1,83 @@
+{-# language CPP #-}
+module Vulkan.Core11.DeviceInitialization  (enumerateInstanceVersion) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import Foreign.Ptr (castFunPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Foreign.Storable (Storable(peek))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Ptr (Ptr(Ptr))
+import Data.Word (Word32)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Dynamic (getInstanceProcAddr')
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkEnumerateInstanceVersion
+  :: FunPtr (Ptr Word32 -> IO Result) -> Ptr Word32 -> IO Result
+
+-- | vkEnumerateInstanceVersion - Query instance-level version before
+-- instance creation
+--
+-- = Parameters
+--
+-- -   @pApiVersion@ is a pointer to a @uint32_t@, which is the version of
+--     Vulkan supported by instance-level functionality, encoded as
+--     described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.
+--
+-- = Description
+--
+-- Note
+--
+-- The intended behaviour of 'enumerateInstanceVersion' is that an
+-- implementation /should/ not need to perform memory allocations and
+-- /should/ unconditionally return 'Vulkan.Core10.Enums.Result.SUCCESS'.
+-- The loader, and any enabled layers, /may/ return
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' in the case of a
+-- failed memory allocation.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- No cross-references are available
+enumerateInstanceVersion :: forall io . MonadIO io => io (("apiVersion" ::: Word32))
+enumerateInstanceVersion  = liftIO . evalContT $ do
+  vkEnumerateInstanceVersionPtr <- lift $ castFunPtr @_ @(("pApiVersion" ::: Ptr Word32) -> IO Result) <$> getInstanceProcAddr' nullPtr (Ptr "vkEnumerateInstanceVersion"#)
+  lift $ unless (vkEnumerateInstanceVersionPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEnumerateInstanceVersion is null" Nothing Nothing
+  let vkEnumerateInstanceVersion' = mkVkEnumerateInstanceVersion vkEnumerateInstanceVersionPtr
+  pPApiVersion <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkEnumerateInstanceVersion' (pPApiVersion)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pApiVersion <- lift $ peek @Word32 pPApiVersion
+  pure $ (pApiVersion)
+
diff --git a/src/Vulkan/Core11/Enums.hs b/src/Vulkan/Core11/Enums.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums.hs
@@ -0,0 +1,41 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums  ( module Vulkan.Core11.Enums.ChromaLocation
+                            , module Vulkan.Core11.Enums.CommandPoolTrimFlags
+                            , module Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags
+                            , module Vulkan.Core11.Enums.DescriptorUpdateTemplateType
+                            , module Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits
+                            , module Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits
+                            , module Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits
+                            , module Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits
+                            , module Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits
+                            , module Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits
+                            , module Vulkan.Core11.Enums.FenceImportFlagBits
+                            , module Vulkan.Core11.Enums.MemoryAllocateFlagBits
+                            , module Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits
+                            , module Vulkan.Core11.Enums.PointClippingBehavior
+                            , module Vulkan.Core11.Enums.SamplerYcbcrModelConversion
+                            , module Vulkan.Core11.Enums.SamplerYcbcrRange
+                            , module Vulkan.Core11.Enums.SemaphoreImportFlagBits
+                            , module Vulkan.Core11.Enums.SubgroupFeatureFlagBits
+                            , module Vulkan.Core11.Enums.TessellationDomainOrigin
+                            ) where
+import Vulkan.Core11.Enums.ChromaLocation
+import Vulkan.Core11.Enums.CommandPoolTrimFlags
+import Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags
+import Vulkan.Core11.Enums.DescriptorUpdateTemplateType
+import Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits
+import Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits
+import Vulkan.Core11.Enums.FenceImportFlagBits
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits
+import Vulkan.Core11.Enums.PointClippingBehavior
+import Vulkan.Core11.Enums.SamplerYcbcrModelConversion
+import Vulkan.Core11.Enums.SamplerYcbcrRange
+import Vulkan.Core11.Enums.SemaphoreImportFlagBits
+import Vulkan.Core11.Enums.SubgroupFeatureFlagBits
+import Vulkan.Core11.Enums.TessellationDomainOrigin
+
diff --git a/src/Vulkan/Core11/Enums/ChromaLocation.hs b/src/Vulkan/Core11/Enums/ChromaLocation.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ChromaLocation.hs
@@ -0,0 +1,54 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ChromaLocation  (ChromaLocation( CHROMA_LOCATION_COSITED_EVEN
+                                                          , CHROMA_LOCATION_MIDPOINT
+                                                          , ..
+                                                          )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkChromaLocation - Position of downsampled chroma samples
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
+newtype ChromaLocation = ChromaLocation Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'CHROMA_LOCATION_COSITED_EVEN' specifies that downsampled chroma samples
+-- are aligned with luma samples with even coordinates.
+pattern CHROMA_LOCATION_COSITED_EVEN = ChromaLocation 0
+-- | 'CHROMA_LOCATION_MIDPOINT' specifies that downsampled chroma samples are
+-- located half way between each even luma sample and the nearest higher
+-- odd luma sample.
+pattern CHROMA_LOCATION_MIDPOINT = ChromaLocation 1
+{-# complete CHROMA_LOCATION_COSITED_EVEN,
+             CHROMA_LOCATION_MIDPOINT :: ChromaLocation #-}
+
+instance Show ChromaLocation where
+  showsPrec p = \case
+    CHROMA_LOCATION_COSITED_EVEN -> showString "CHROMA_LOCATION_COSITED_EVEN"
+    CHROMA_LOCATION_MIDPOINT -> showString "CHROMA_LOCATION_MIDPOINT"
+    ChromaLocation x -> showParen (p >= 11) (showString "ChromaLocation " . showsPrec 11 x)
+
+instance Read ChromaLocation where
+  readPrec = parens (choose [("CHROMA_LOCATION_COSITED_EVEN", pure CHROMA_LOCATION_COSITED_EVEN)
+                            , ("CHROMA_LOCATION_MIDPOINT", pure CHROMA_LOCATION_MIDPOINT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ChromaLocation")
+                       v <- step readPrec
+                       pure (ChromaLocation v)))
+
diff --git a/src/Vulkan/Core11/Enums/ChromaLocation.hs-boot b/src/Vulkan/Core11/Enums/ChromaLocation.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ChromaLocation.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ChromaLocation  (ChromaLocation) where
+
+
+
+data ChromaLocation
+
diff --git a/src/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs b/src/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs
@@ -0,0 +1,46 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.CommandPoolTrimFlags  (CommandPoolTrimFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkCommandPoolTrimFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'CommandPoolTrimFlags' is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance1.trimCommandPool',
+-- 'Vulkan.Extensions.VK_KHR_maintenance1.trimCommandPoolKHR'
+newtype CommandPoolTrimFlags = CommandPoolTrimFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show CommandPoolTrimFlags where
+  showsPrec p = \case
+    CommandPoolTrimFlags x -> showParen (p >= 11) (showString "CommandPoolTrimFlags 0x" . showHex x)
+
+instance Read CommandPoolTrimFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CommandPoolTrimFlags")
+                       v <- step readPrec
+                       pure (CommandPoolTrimFlags v)))
+
diff --git a/src/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs-boot b/src/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/CommandPoolTrimFlags.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.CommandPoolTrimFlags  (CommandPoolTrimFlags) where
+
+
+
+data CommandPoolTrimFlags
+
diff --git a/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs b/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags  (DescriptorUpdateTemplateCreateFlags(..)) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkDescriptorUpdateTemplateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- 'DescriptorUpdateTemplateCreateFlags' is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo'
+newtype DescriptorUpdateTemplateCreateFlags = DescriptorUpdateTemplateCreateFlags Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show DescriptorUpdateTemplateCreateFlags where
+  showsPrec p = \case
+    DescriptorUpdateTemplateCreateFlags x -> showParen (p >= 11) (showString "DescriptorUpdateTemplateCreateFlags 0x" . showHex x)
+
+instance Read DescriptorUpdateTemplateCreateFlags where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DescriptorUpdateTemplateCreateFlags")
+                       v <- step readPrec
+                       pure (DescriptorUpdateTemplateCreateFlags v)))
+
diff --git a/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs-boot b/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateCreateFlags.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags  (DescriptorUpdateTemplateCreateFlags) where
+
+
+
+data DescriptorUpdateTemplateCreateFlags
+
diff --git a/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs b/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs
@@ -0,0 +1,54 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.DescriptorUpdateTemplateType  (DescriptorUpdateTemplateType( DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET
+                                                                                      , DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
+                                                                                      , ..
+                                                                                      )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkDescriptorUpdateTemplateType - Indicates the valid usage of the
+-- descriptor update template
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.DescriptorUpdateTemplateCreateInfo'
+newtype DescriptorUpdateTemplateType = DescriptorUpdateTemplateType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET' specifies that the
+-- descriptor update template will be used for descriptor set updates only.
+pattern DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = DescriptorUpdateTemplateType 0
+-- | 'DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR' specifies that
+-- the descriptor update template will be used for push descriptor updates
+-- only.
+pattern DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = DescriptorUpdateTemplateType 1
+{-# complete DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
+             DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR :: DescriptorUpdateTemplateType #-}
+
+instance Show DescriptorUpdateTemplateType where
+  showsPrec p = \case
+    DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET -> showString "DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"
+    DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR -> showString "DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR"
+    DescriptorUpdateTemplateType x -> showParen (p >= 11) (showString "DescriptorUpdateTemplateType " . showsPrec 11 x)
+
+instance Read DescriptorUpdateTemplateType where
+  readPrec = parens (choose [("DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET", pure DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)
+                            , ("DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR", pure DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DescriptorUpdateTemplateType")
+                       v <- step readPrec
+                       pure (DescriptorUpdateTemplateType v)))
+
diff --git a/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs-boot b/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/DescriptorUpdateTemplateType.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.DescriptorUpdateTemplateType  (DescriptorUpdateTemplateType) where
+
+
+
+data DescriptorUpdateTemplateType
+
diff --git a/src/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs b/src/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs
@@ -0,0 +1,56 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits  ( ExternalFenceFeatureFlagBits( EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT
+                                                                                       , EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT
+                                                                                       , ..
+                                                                                       )
+                                                         , ExternalFenceFeatureFlags
+                                                         ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkExternalFenceFeatureFlagBits - Bitfield describing features of an
+-- external fence handle type
+--
+-- = See Also
+--
+-- 'ExternalFenceFeatureFlags'
+newtype ExternalFenceFeatureFlagBits = ExternalFenceFeatureFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT' specifies handles of this type
+-- /can/ be exported from Vulkan fence objects.
+pattern EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = ExternalFenceFeatureFlagBits 0x00000001
+-- | 'EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT' specifies handles of this type
+-- /can/ be imported to Vulkan fence objects.
+pattern EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = ExternalFenceFeatureFlagBits 0x00000002
+
+type ExternalFenceFeatureFlags = ExternalFenceFeatureFlagBits
+
+instance Show ExternalFenceFeatureFlagBits where
+  showsPrec p = \case
+    EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT -> showString "EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"
+    EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT -> showString "EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"
+    ExternalFenceFeatureFlagBits x -> showParen (p >= 11) (showString "ExternalFenceFeatureFlagBits 0x" . showHex x)
+
+instance Read ExternalFenceFeatureFlagBits where
+  readPrec = parens (choose [("EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT", pure EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT)
+                            , ("EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT", pure EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ExternalFenceFeatureFlagBits")
+                       v <- step readPrec
+                       pure (ExternalFenceFeatureFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs-boot b/src/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalFenceFeatureFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits  ( ExternalFenceFeatureFlagBits
+                                                         , ExternalFenceFeatureFlags
+                                                         ) where
+
+
+
+data ExternalFenceFeatureFlagBits
+
+type ExternalFenceFeatureFlags = ExternalFenceFeatureFlagBits
+
diff --git a/src/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs b/src/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs
@@ -0,0 +1,111 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits  ( ExternalFenceHandleTypeFlagBits( EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT
+                                                                                             , EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+                                                                                             , EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+                                                                                             , EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
+                                                                                             , ..
+                                                                                             )
+                                                            , ExternalFenceHandleTypeFlags
+                                                            ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkExternalFenceHandleTypeFlagBits - Bitmask of valid external fence
+-- handle types
+--
+-- = Description
+--
+-- Some external fence handle types can only be shared within the same
+-- underlying physical device and\/or the same driver version, as defined
+-- in the following table:
+--
+-- +---------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | Handle type                                       | 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@ | 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@deviceUUID@ |
+-- +---------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT'        | Must match                                                                                                 | Must match                                                                                                 |
+-- +---------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT'     | Must match                                                                                                 | Must match                                                                                                 |
+-- +---------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' | Must match                                                                                                 | Must match                                                                                                 |
+-- +---------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT'          | No restriction                                                                                             | No restriction                                                                                             |
+-- +---------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+--
+-- External fence handle types compatibility
+--
+-- = See Also
+--
+-- 'ExternalFenceHandleTypeFlags',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_fd.FenceGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_win32.FenceGetWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_fd.ImportFenceFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_win32.ImportFenceWin32HandleInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.PhysicalDeviceExternalFenceInfo'
+newtype ExternalFenceHandleTypeFlagBits = ExternalFenceHandleTypeFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT' specifies a POSIX file
+-- descriptor handle that has only limited valid usage outside of Vulkan
+-- and other compatible APIs. It /must/ be compatible with the POSIX system
+-- calls @dup@, @dup2@, @close@, and the non-standard system call @dup3@.
+-- Additionally, it /must/ be transportable over a socket using an
+-- @SCM_RIGHTS@ control message. It owns a reference to the underlying
+-- synchronization primitive represented by its Vulkan fence object.
+pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = ExternalFenceHandleTypeFlagBits 0x00000001
+-- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT' specifies an NT handle
+-- that has only limited valid usage outside of Vulkan and other compatible
+-- APIs. It /must/ be compatible with the functions @DuplicateHandle@,
+-- @CloseHandle@, @CompareObjectHandles@, @GetHandleInformation@, and
+-- @SetHandleInformation@. It owns a reference to the underlying
+-- synchronization primitive represented by its Vulkan fence object.
+pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = ExternalFenceHandleTypeFlagBits 0x00000002
+-- | 'EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' specifies a global
+-- share handle that has only limited valid usage outside of Vulkan and
+-- other compatible APIs. It is not compatible with any native APIs. It
+-- does not own a reference to the underlying synchronization primitive
+-- represented by its Vulkan fence object, and will therefore become
+-- invalid when all Vulkan fence objects associated with it are destroyed.
+pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = ExternalFenceHandleTypeFlagBits 0x00000004
+-- | 'EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT' specifies a POSIX file
+-- descriptor handle to a Linux Sync File or Android Fence. It can be used
+-- with any native API accepting a valid sync file or fence as input. It
+-- owns a reference to the underlying synchronization primitive associated
+-- with the file descriptor. Implementations which support importing this
+-- handle type /must/ accept any type of sync or fence FD supported by the
+-- native system they are running on.
+pattern EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = ExternalFenceHandleTypeFlagBits 0x00000008
+
+type ExternalFenceHandleTypeFlags = ExternalFenceHandleTypeFlagBits
+
+instance Show ExternalFenceHandleTypeFlagBits where
+  showsPrec p = \case
+    EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT -> showString "EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"
+    EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT -> showString "EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"
+    EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT -> showString "EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
+    EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT -> showString "EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"
+    ExternalFenceHandleTypeFlagBits x -> showParen (p >= 11) (showString "ExternalFenceHandleTypeFlagBits 0x" . showHex x)
+
+instance Read ExternalFenceHandleTypeFlagBits where
+  readPrec = parens (choose [("EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT", pure EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT)
+                            , ("EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT", pure EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT)
+                            , ("EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT", pure EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT)
+                            , ("EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT", pure EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ExternalFenceHandleTypeFlagBits")
+                       v <- step readPrec
+                       pure (ExternalFenceHandleTypeFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs-boot b/src/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalFenceHandleTypeFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits  ( ExternalFenceHandleTypeFlagBits
+                                                            , ExternalFenceHandleTypeFlags
+                                                            ) where
+
+
+
+data ExternalFenceHandleTypeFlagBits
+
+type ExternalFenceHandleTypeFlags = ExternalFenceHandleTypeFlagBits
+
diff --git a/src/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs b/src/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs
@@ -0,0 +1,85 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits  ( ExternalMemoryFeatureFlagBits( EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
+                                                                                         , EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT
+                                                                                         , EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT
+                                                                                         , ..
+                                                                                         )
+                                                          , ExternalMemoryFeatureFlags
+                                                          ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkExternalMemoryFeatureFlagBits - Bitmask specifying features of an
+-- external memory handle type
+--
+-- = Description
+--
+-- Because their semantics in external APIs roughly align with that of an
+-- image or buffer with a dedicated allocation in Vulkan, implementations
+-- are /required/ to report 'EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT'
+-- for the following external handle types:
+--
+-- Implementations /must/ not report
+-- 'EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT' for buffers with external
+-- handle type
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'.
+-- Implementations /must/ not report
+-- 'EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT' for images or buffers with
+-- external handle type
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT',
+-- or
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT'.
+--
+-- = See Also
+--
+-- 'ExternalMemoryFeatureFlags'
+newtype ExternalMemoryFeatureFlagBits = ExternalMemoryFeatureFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT' specifies that images or
+-- buffers created with the specified parameters and handle type /must/ use
+-- the mechanisms defined by
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'
+-- and
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+-- to create (or import) a dedicated allocation for the image or buffer.
+pattern EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = ExternalMemoryFeatureFlagBits 0x00000001
+-- | 'EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT' specifies that handles of this
+-- type /can/ be exported from Vulkan memory objects.
+pattern EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = ExternalMemoryFeatureFlagBits 0x00000002
+-- | 'EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT' specifies that handles of this
+-- type /can/ be imported as Vulkan memory objects.
+pattern EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = ExternalMemoryFeatureFlagBits 0x00000004
+
+type ExternalMemoryFeatureFlags = ExternalMemoryFeatureFlagBits
+
+instance Show ExternalMemoryFeatureFlagBits where
+  showsPrec p = \case
+    EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT -> showString "EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"
+    EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT -> showString "EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"
+    EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT -> showString "EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"
+    ExternalMemoryFeatureFlagBits x -> showParen (p >= 11) (showString "ExternalMemoryFeatureFlagBits 0x" . showHex x)
+
+instance Read ExternalMemoryFeatureFlagBits where
+  readPrec = parens (choose [("EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT", pure EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT)
+                            , ("EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT", pure EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT)
+                            , ("EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT", pure EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ExternalMemoryFeatureFlagBits")
+                       v <- step readPrec
+                       pure (ExternalMemoryFeatureFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs-boot b/src/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalMemoryFeatureFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits  ( ExternalMemoryFeatureFlagBits
+                                                          , ExternalMemoryFeatureFlags
+                                                          ) where
+
+
+
+data ExternalMemoryFeatureFlagBits
+
+type ExternalMemoryFeatureFlags = ExternalMemoryFeatureFlagBits
+
diff --git a/src/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs b/src/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs
@@ -0,0 +1,207 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits  ( ExternalMemoryHandleTypeFlagBits( EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+                                                                                               , EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT
+                                                                                               , ..
+                                                                                               )
+                                                             , ExternalMemoryHandleTypeFlags
+                                                             ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkExternalMemoryHandleTypeFlagBits - Bit specifying external memory
+-- handle types
+--
+-- = Description
+--
+-- Some external memory handle types can only be shared within the same
+-- underlying physical device and\/or the same driver version, as defined
+-- in the following table:
+--
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | Handle type                                                       | 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@ | 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@deviceUUID@ |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT'                       | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT'                    | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT'                | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT'                   | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT'               | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT'                      | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT'                  | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT'             | No restriction                                                                                             | No restriction                                                                                             |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT'  | No restriction                                                                                             | No restriction                                                                                             |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT'                     | No restriction                                                                                             | No restriction                                                                                             |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID' | No restriction                                                                                             | No restriction                                                                                             |
+-- +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+--
+-- External memory handle types compatibility
+--
+-- Note
+--
+-- The above table does not restrict the drivers and devices with which
+-- 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT' and
+-- 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT' /may/
+-- be shared, as these handle types inherently mean memory that does not
+-- come from the same device, as they import memory from the host or a
+-- foreign device, respectively.
+--
+-- Note
+--
+-- Even though the above table does not restrict the drivers and devices
+-- with which 'EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT' /may/ be
+-- shared, query mechanisms exist in the Vulkan API that prevent the import
+-- of incompatible dma-bufs (such as
+-- 'Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdPropertiesKHR')
+-- and that prevent incompatible usage of dma-bufs (such as
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalBufferInfo'
+-- and
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo').
+--
+-- = See Also
+--
+-- 'ExternalMemoryHandleTypeFlags',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_fd.ImportMemoryFdInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_fd.MemoryGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_win32.MemoryGetWin32HandleInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalBufferInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdPropertiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_external_memory_host.getMemoryHostPointerPropertiesEXT',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandlePropertiesKHR'
+newtype ExternalMemoryHandleTypeFlagBits = ExternalMemoryHandleTypeFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT' specifies a POSIX file
+-- descriptor handle that has only limited valid usage outside of Vulkan
+-- and other compatible APIs. It /must/ be compatible with the POSIX system
+-- calls @dup@, @dup2@, @close@, and the non-standard system call @dup3@.
+-- Additionally, it /must/ be transportable over a socket using an
+-- @SCM_RIGHTS@ control message. It owns a reference to the underlying
+-- memory resource represented by its Vulkan memory object.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = ExternalMemoryHandleTypeFlagBits 0x00000001
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT' specifies an NT handle
+-- that has only limited valid usage outside of Vulkan and other compatible
+-- APIs. It /must/ be compatible with the functions @DuplicateHandle@,
+-- @CloseHandle@, @CompareObjectHandles@, @GetHandleInformation@, and
+-- @SetHandleInformation@. It owns a reference to the underlying memory
+-- resource represented by its Vulkan memory object.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = ExternalMemoryHandleTypeFlagBits 0x00000002
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' specifies a global
+-- share handle that has only limited valid usage outside of Vulkan and
+-- other compatible APIs. It is not compatible with any native APIs. It
+-- does not own a reference to the underlying memory resource represented
+-- its Vulkan memory object, and will therefore become invalid when all
+-- Vulkan memory objects associated with it are destroyed.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = ExternalMemoryHandleTypeFlagBits 0x00000004
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT' specifies an NT handle
+-- returned by @IDXGIResource1@::@CreateSharedHandle@ referring to a
+-- Direct3D 10 or 11 texture resource. It owns a reference to the memory
+-- used by the Direct3D resource.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = ExternalMemoryHandleTypeFlagBits 0x00000008
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT' specifies a global
+-- share handle returned by @IDXGIResource@::@GetSharedHandle@ referring to
+-- a Direct3D 10 or 11 texture resource. It does not own a reference to the
+-- underlying Direct3D resource, and will therefore become invalid when all
+-- Vulkan memory objects and Direct3D resources associated with it are
+-- destroyed.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = ExternalMemoryHandleTypeFlagBits 0x00000010
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT' specifies an NT handle
+-- returned by @ID3D12Device@::@CreateSharedHandle@ referring to a Direct3D
+-- 12 heap resource. It owns a reference to the resources used by the
+-- Direct3D heap.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = ExternalMemoryHandleTypeFlagBits 0x00000020
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT' specifies an NT handle
+-- returned by @ID3D12Device@::@CreateSharedHandle@ referring to a Direct3D
+-- 12 committed resource. It owns a reference to the memory used by the
+-- Direct3D resource.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = ExternalMemoryHandleTypeFlagBits 0x00000040
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT'
+-- specifies a host pointer to /host mapped foreign memory/. It does not
+-- own a reference to the underlying memory resource, and will therefore
+-- become invalid if the foreign memory is unmapped or otherwise becomes no
+-- longer available.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = ExternalMemoryHandleTypeFlagBits 0x00000100
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT' specifies a host
+-- pointer returned by a host memory allocation command. It does not own a
+-- reference to the underlying memory resource, and will therefore become
+-- invalid if the host memory is freed.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = ExternalMemoryHandleTypeFlagBits 0x00000080
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+-- specifies an 'Vulkan.Extensions.WSITypes.AHardwareBuffer' object defined
+-- by the Android NDK. See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer Android Hardware Buffers>
+-- for more details of this handle type.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = ExternalMemoryHandleTypeFlagBits 0x00000400
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT' is a file descriptor for a
+-- Linux dma_buf. It owns a reference to the underlying memory resource
+-- represented by its Vulkan memory object.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = ExternalMemoryHandleTypeFlagBits 0x00000200
+
+type ExternalMemoryHandleTypeFlags = ExternalMemoryHandleTypeFlagBits
+
+instance Show ExternalMemoryHandleTypeFlagBits where
+  showsPrec p = \case
+    EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"
+    EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"
+    EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
+    EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"
+    EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"
+    EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"
+    EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"
+    EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"
+    EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"
+    EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"
+    EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT"
+    ExternalMemoryHandleTypeFlagBits x -> showParen (p >= 11) (showString "ExternalMemoryHandleTypeFlagBits 0x" . showHex x)
+
+instance Read ExternalMemoryHandleTypeFlagBits where
+  readPrec = parens (choose [("EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT", pure EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT", pure EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID", pure EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT", pure EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ExternalMemoryHandleTypeFlagBits")
+                       v <- step readPrec
+                       pure (ExternalMemoryHandleTypeFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs-boot b/src/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalMemoryHandleTypeFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits  ( ExternalMemoryHandleTypeFlagBits
+                                                             , ExternalMemoryHandleTypeFlags
+                                                             ) where
+
+
+
+data ExternalMemoryHandleTypeFlagBits
+
+type ExternalMemoryHandleTypeFlags = ExternalMemoryHandleTypeFlagBits
+
diff --git a/src/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs b/src/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs
@@ -0,0 +1,56 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits  ( ExternalSemaphoreFeatureFlagBits( EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT
+                                                                                               , EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT
+                                                                                               , ..
+                                                                                               )
+                                                             , ExternalSemaphoreFeatureFlags
+                                                             ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkExternalSemaphoreFeatureFlagBits - Bitfield describing features of an
+-- external semaphore handle type
+--
+-- = See Also
+--
+-- 'ExternalSemaphoreFeatureFlags'
+newtype ExternalSemaphoreFeatureFlagBits = ExternalSemaphoreFeatureFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT' specifies that handles of
+-- this type /can/ be exported from Vulkan semaphore objects.
+pattern EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = ExternalSemaphoreFeatureFlagBits 0x00000001
+-- | 'EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT' specifies that handles of
+-- this type /can/ be imported as Vulkan semaphore objects.
+pattern EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = ExternalSemaphoreFeatureFlagBits 0x00000002
+
+type ExternalSemaphoreFeatureFlags = ExternalSemaphoreFeatureFlagBits
+
+instance Show ExternalSemaphoreFeatureFlagBits where
+  showsPrec p = \case
+    EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT -> showString "EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"
+    EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT -> showString "EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"
+    ExternalSemaphoreFeatureFlagBits x -> showParen (p >= 11) (showString "ExternalSemaphoreFeatureFlagBits 0x" . showHex x)
+
+instance Read ExternalSemaphoreFeatureFlagBits where
+  readPrec = parens (choose [("EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT", pure EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT)
+                            , ("EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT", pure EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ExternalSemaphoreFeatureFlagBits")
+                       v <- step readPrec
+                       pure (ExternalSemaphoreFeatureFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs-boot b/src/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalSemaphoreFeatureFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits  ( ExternalSemaphoreFeatureFlagBits
+                                                             , ExternalSemaphoreFeatureFlags
+                                                             ) where
+
+
+
+data ExternalSemaphoreFeatureFlagBits
+
+type ExternalSemaphoreFeatureFlags = ExternalSemaphoreFeatureFlagBits
+
diff --git a/src/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs b/src/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs
@@ -0,0 +1,132 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits  ( ExternalSemaphoreHandleTypeFlagBits( EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT
+                                                                                                     , EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+                                                                                                     , EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+                                                                                                     , EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
+                                                                                                     , EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
+                                                                                                     , ..
+                                                                                                     )
+                                                                , ExternalSemaphoreHandleTypeFlags
+                                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkExternalSemaphoreHandleTypeFlagBits - Bitmask of valid external
+-- semaphore handle types
+--
+-- = Description
+--
+-- Note
+--
+-- Handles of type 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT' generated
+-- by the implementation may represent either Linux Sync Files or Android
+-- Fences at the implementation’s discretion. Applications /should/ only
+-- use operations defined for both types of file descriptors, unless they
+-- know via means external to Vulkan the type of the file descriptor, or
+-- are prepared to deal with the system-defined operation failures
+-- resulting from using the wrong type.
+--
+-- Some external semaphore handle types can only be shared within the same
+-- underlying physical device and\/or the same driver version, as defined
+-- in the following table:
+--
+-- +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | Handle type                                           | 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@ | 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@deviceUUID@ |
+-- +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT'        | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'     | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT'      | Must match                                                                                                 | Must match                                                                                                 |
+-- +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+-- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT'          | No restriction                                                                                             | No restriction                                                                                             |
+-- +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
+--
+-- External semaphore handle types compatibility
+--
+-- = See Also
+--
+-- 'ExternalSemaphoreHandleTypeFlags',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_fd.ImportSemaphoreFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.ImportSemaphoreWin32HandleInfoKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.PhysicalDeviceExternalSemaphoreInfo',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_fd.SemaphoreGetFdInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_win32.SemaphoreGetWin32HandleInfoKHR'
+newtype ExternalSemaphoreHandleTypeFlagBits = ExternalSemaphoreHandleTypeFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT' specifies a POSIX file
+-- descriptor handle that has only limited valid usage outside of Vulkan
+-- and other compatible APIs. It /must/ be compatible with the POSIX system
+-- calls @dup@, @dup2@, @close@, and the non-standard system call @dup3@.
+-- Additionally, it /must/ be transportable over a socket using an
+-- @SCM_RIGHTS@ control message. It owns a reference to the underlying
+-- synchronization primitive represented by its Vulkan semaphore object.
+pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = ExternalSemaphoreHandleTypeFlagBits 0x00000001
+-- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT' specifies an NT handle
+-- that has only limited valid usage outside of Vulkan and other compatible
+-- APIs. It /must/ be compatible with the functions @DuplicateHandle@,
+-- @CloseHandle@, @CompareObjectHandles@, @GetHandleInformation@, and
+-- @SetHandleInformation@. It owns a reference to the underlying
+-- synchronization primitive represented by its Vulkan semaphore object.
+pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = ExternalSemaphoreHandleTypeFlagBits 0x00000002
+-- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' specifies a global
+-- share handle that has only limited valid usage outside of Vulkan and
+-- other compatible APIs. It is not compatible with any native APIs. It
+-- does not own a reference to the underlying synchronization primitive
+-- represented its Vulkan semaphore object, and will therefore become
+-- invalid when all Vulkan semaphore objects associated with it are
+-- destroyed.
+pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = ExternalSemaphoreHandleTypeFlagBits 0x00000004
+-- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT' specifies an NT handle
+-- returned by @ID3D12Device@::@CreateSharedHandle@ referring to a Direct3D
+-- 12 fence. It owns a reference to the underlying synchronization
+-- primitive associated with the Direct3D fence.
+pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = ExternalSemaphoreHandleTypeFlagBits 0x00000008
+-- | 'EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT' specifies a POSIX file
+-- descriptor handle to a Linux Sync File or Android Fence object. It can
+-- be used with any native API accepting a valid sync file or fence as
+-- input. It owns a reference to the underlying synchronization primitive
+-- associated with the file descriptor. Implementations which support
+-- importing this handle type /must/ accept any type of sync or fence FD
+-- supported by the native system they are running on.
+pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = ExternalSemaphoreHandleTypeFlagBits 0x00000010
+
+type ExternalSemaphoreHandleTypeFlags = ExternalSemaphoreHandleTypeFlagBits
+
+instance Show ExternalSemaphoreHandleTypeFlagBits where
+  showsPrec p = \case
+    EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT -> showString "EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"
+    EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT -> showString "EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"
+    EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT -> showString "EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
+    EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT -> showString "EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"
+    EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT -> showString "EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"
+    ExternalSemaphoreHandleTypeFlagBits x -> showParen (p >= 11) (showString "ExternalSemaphoreHandleTypeFlagBits 0x" . showHex x)
+
+instance Read ExternalSemaphoreHandleTypeFlagBits where
+  readPrec = parens (choose [("EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT", pure EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT)
+                            , ("EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT", pure EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT)
+                            , ("EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT", pure EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT)
+                            , ("EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT", pure EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT)
+                            , ("EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT", pure EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ExternalSemaphoreHandleTypeFlagBits")
+                       v <- step readPrec
+                       pure (ExternalSemaphoreHandleTypeFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs-boot b/src/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/ExternalSemaphoreHandleTypeFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits  ( ExternalSemaphoreHandleTypeFlagBits
+                                                                , ExternalSemaphoreHandleTypeFlags
+                                                                ) where
+
+
+
+data ExternalSemaphoreHandleTypeFlagBits
+
+type ExternalSemaphoreHandleTypeFlags = ExternalSemaphoreHandleTypeFlagBits
+
diff --git a/src/Vulkan/Core11/Enums/FenceImportFlagBits.hs b/src/Vulkan/Core11/Enums/FenceImportFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/FenceImportFlagBits.hs
@@ -0,0 +1,52 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.FenceImportFlagBits  ( FenceImportFlagBits( FENCE_IMPORT_TEMPORARY_BIT
+                                                                     , ..
+                                                                     )
+                                                , FenceImportFlags
+                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkFenceImportFlagBits - Bitmask specifying additional parameters of
+-- fence payload import
+--
+-- = See Also
+--
+-- 'FenceImportFlags'
+newtype FenceImportFlagBits = FenceImportFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'FENCE_IMPORT_TEMPORARY_BIT' specifies that the fence payload will be
+-- imported only temporarily, as described in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence Payloads>,
+-- regardless of the permanence of @handleType@.
+pattern FENCE_IMPORT_TEMPORARY_BIT = FenceImportFlagBits 0x00000001
+
+type FenceImportFlags = FenceImportFlagBits
+
+instance Show FenceImportFlagBits where
+  showsPrec p = \case
+    FENCE_IMPORT_TEMPORARY_BIT -> showString "FENCE_IMPORT_TEMPORARY_BIT"
+    FenceImportFlagBits x -> showParen (p >= 11) (showString "FenceImportFlagBits 0x" . showHex x)
+
+instance Read FenceImportFlagBits where
+  readPrec = parens (choose [("FENCE_IMPORT_TEMPORARY_BIT", pure FENCE_IMPORT_TEMPORARY_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "FenceImportFlagBits")
+                       v <- step readPrec
+                       pure (FenceImportFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/FenceImportFlagBits.hs-boot b/src/Vulkan/Core11/Enums/FenceImportFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/FenceImportFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.FenceImportFlagBits  ( FenceImportFlagBits
+                                                , FenceImportFlags
+                                                ) where
+
+
+
+data FenceImportFlagBits
+
+type FenceImportFlags = FenceImportFlagBits
+
diff --git a/src/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs b/src/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs
@@ -0,0 +1,70 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.MemoryAllocateFlagBits  ( MemoryAllocateFlagBits( MEMORY_ALLOCATE_DEVICE_MASK_BIT
+                                                                           , MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
+                                                                           , MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT
+                                                                           , ..
+                                                                           )
+                                                   , MemoryAllocateFlags
+                                                   ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkMemoryAllocateFlagBits - Bitmask specifying flags for a device memory
+-- allocation
+--
+-- = See Also
+--
+-- 'MemoryAllocateFlags'
+newtype MemoryAllocateFlagBits = MemoryAllocateFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'MEMORY_ALLOCATE_DEVICE_MASK_BIT' specifies that memory will be
+-- allocated for the devices in
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@deviceMask@.
+pattern MEMORY_ALLOCATE_DEVICE_MASK_BIT = MemoryAllocateFlagBits 0x00000001
+-- | 'MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT' specifies that the
+-- memory’s address /can/ be saved and reused on a subsequent run (e.g. for
+-- trace capture and replay), see
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo'
+-- for more detail.
+pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = MemoryAllocateFlagBits 0x00000004
+-- | 'MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT' specifies that the memory /can/ be
+-- attached to a buffer object created with the
+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT'
+-- bit set in @usage@, and that the memory handle /can/ be used to retrieve
+-- an opaque address via
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getDeviceMemoryOpaqueCaptureAddress'.
+pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = MemoryAllocateFlagBits 0x00000002
+
+type MemoryAllocateFlags = MemoryAllocateFlagBits
+
+instance Show MemoryAllocateFlagBits where
+  showsPrec p = \case
+    MEMORY_ALLOCATE_DEVICE_MASK_BIT -> showString "MEMORY_ALLOCATE_DEVICE_MASK_BIT"
+    MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT -> showString "MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"
+    MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT -> showString "MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT"
+    MemoryAllocateFlagBits x -> showParen (p >= 11) (showString "MemoryAllocateFlagBits 0x" . showHex x)
+
+instance Read MemoryAllocateFlagBits where
+  readPrec = parens (choose [("MEMORY_ALLOCATE_DEVICE_MASK_BIT", pure MEMORY_ALLOCATE_DEVICE_MASK_BIT)
+                            , ("MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT", pure MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT)
+                            , ("MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT", pure MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "MemoryAllocateFlagBits")
+                       v <- step readPrec
+                       pure (MemoryAllocateFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs-boot b/src/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/MemoryAllocateFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.MemoryAllocateFlagBits  ( MemoryAllocateFlagBits
+                                                   , MemoryAllocateFlags
+                                                   ) where
+
+
+
+data MemoryAllocateFlagBits
+
+type MemoryAllocateFlags = MemoryAllocateFlagBits
+
diff --git a/src/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs b/src/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs
@@ -0,0 +1,96 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits  ( PeerMemoryFeatureFlagBits( PEER_MEMORY_FEATURE_COPY_SRC_BIT
+                                                                                 , PEER_MEMORY_FEATURE_COPY_DST_BIT
+                                                                                 , PEER_MEMORY_FEATURE_GENERIC_SRC_BIT
+                                                                                 , PEER_MEMORY_FEATURE_GENERIC_DST_BIT
+                                                                                 , ..
+                                                                                 )
+                                                      , PeerMemoryFeatureFlags
+                                                      ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkPeerMemoryFeatureFlagBits - Bitmask specifying supported peer memory
+-- features
+--
+-- = Description
+--
+-- Note
+--
+-- The peer memory features of a memory heap also apply to any accesses
+-- that /may/ be performed during
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transitions>.
+--
+-- 'PEER_MEMORY_FEATURE_COPY_DST_BIT' /must/ be supported for all host
+-- local heaps and for at least one device local heap.
+--
+-- If a device does not support a peer memory feature, it is still valid to
+-- use a resource that includes both local and peer memory bindings with
+-- the corresponding access type as long as only the local bindings are
+-- actually accessed. For example, an application doing split-frame
+-- rendering would use framebuffer attachments that include both local and
+-- peer memory bindings, but would scissor the rendering to only update
+-- local memory.
+--
+-- = See Also
+--
+-- 'PeerMemoryFeatureFlags'
+newtype PeerMemoryFeatureFlagBits = PeerMemoryFeatureFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'PEER_MEMORY_FEATURE_COPY_SRC_BIT' specifies that the memory /can/ be
+-- accessed as the source of a
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', or
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer' command.
+pattern PEER_MEMORY_FEATURE_COPY_SRC_BIT = PeerMemoryFeatureFlagBits 0x00000001
+-- | 'PEER_MEMORY_FEATURE_COPY_DST_BIT' specifies that the memory /can/ be
+-- accessed as the destination of a
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage',
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', or
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer' command.
+pattern PEER_MEMORY_FEATURE_COPY_DST_BIT = PeerMemoryFeatureFlagBits 0x00000002
+-- | 'PEER_MEMORY_FEATURE_GENERIC_SRC_BIT' specifies that the memory /can/ be
+-- read as any memory access type.
+pattern PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = PeerMemoryFeatureFlagBits 0x00000004
+-- | 'PEER_MEMORY_FEATURE_GENERIC_DST_BIT' specifies that the memory /can/ be
+-- written as any memory access type. Shader atomics are considered to be
+-- writes.
+pattern PEER_MEMORY_FEATURE_GENERIC_DST_BIT = PeerMemoryFeatureFlagBits 0x00000008
+
+type PeerMemoryFeatureFlags = PeerMemoryFeatureFlagBits
+
+instance Show PeerMemoryFeatureFlagBits where
+  showsPrec p = \case
+    PEER_MEMORY_FEATURE_COPY_SRC_BIT -> showString "PEER_MEMORY_FEATURE_COPY_SRC_BIT"
+    PEER_MEMORY_FEATURE_COPY_DST_BIT -> showString "PEER_MEMORY_FEATURE_COPY_DST_BIT"
+    PEER_MEMORY_FEATURE_GENERIC_SRC_BIT -> showString "PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"
+    PEER_MEMORY_FEATURE_GENERIC_DST_BIT -> showString "PEER_MEMORY_FEATURE_GENERIC_DST_BIT"
+    PeerMemoryFeatureFlagBits x -> showParen (p >= 11) (showString "PeerMemoryFeatureFlagBits 0x" . showHex x)
+
+instance Read PeerMemoryFeatureFlagBits where
+  readPrec = parens (choose [("PEER_MEMORY_FEATURE_COPY_SRC_BIT", pure PEER_MEMORY_FEATURE_COPY_SRC_BIT)
+                            , ("PEER_MEMORY_FEATURE_COPY_DST_BIT", pure PEER_MEMORY_FEATURE_COPY_DST_BIT)
+                            , ("PEER_MEMORY_FEATURE_GENERIC_SRC_BIT", pure PEER_MEMORY_FEATURE_GENERIC_SRC_BIT)
+                            , ("PEER_MEMORY_FEATURE_GENERIC_DST_BIT", pure PEER_MEMORY_FEATURE_GENERIC_DST_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PeerMemoryFeatureFlagBits")
+                       v <- step readPrec
+                       pure (PeerMemoryFeatureFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs-boot b/src/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/PeerMemoryFeatureFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits  ( PeerMemoryFeatureFlagBits
+                                                      , PeerMemoryFeatureFlags
+                                                      ) where
+
+
+
+data PeerMemoryFeatureFlagBits
+
+type PeerMemoryFeatureFlags = PeerMemoryFeatureFlagBits
+
diff --git a/src/Vulkan/Core11/Enums/PointClippingBehavior.hs b/src/Vulkan/Core11/Enums/PointClippingBehavior.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/PointClippingBehavior.hs
@@ -0,0 +1,55 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.PointClippingBehavior  (PointClippingBehavior( POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
+                                                                        , POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
+                                                                        , ..
+                                                                        )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkPointClippingBehavior - Enum specifying the point clipping behavior
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan11Properties'
+newtype PointClippingBehavior = PointClippingBehavior Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES' specifies that the primitive
+-- is discarded if the vertex lies outside any clip plane, including the
+-- planes bounding the view volume.
+pattern POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = PointClippingBehavior 0
+-- | 'POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY' specifies that the
+-- primitive is discarded only if the vertex lies outside any user clip
+-- plane.
+pattern POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = PointClippingBehavior 1
+{-# complete POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES,
+             POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY :: PointClippingBehavior #-}
+
+instance Show PointClippingBehavior where
+  showsPrec p = \case
+    POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES -> showString "POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES"
+    POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY -> showString "POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY"
+    PointClippingBehavior x -> showParen (p >= 11) (showString "PointClippingBehavior " . showsPrec 11 x)
+
+instance Read PointClippingBehavior where
+  readPrec = parens (choose [("POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES", pure POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES)
+                            , ("POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY", pure POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PointClippingBehavior")
+                       v <- step readPrec
+                       pure (PointClippingBehavior v)))
+
diff --git a/src/Vulkan/Core11/Enums/PointClippingBehavior.hs-boot b/src/Vulkan/Core11/Enums/PointClippingBehavior.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/PointClippingBehavior.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.PointClippingBehavior  (PointClippingBehavior) where
+
+
+
+data PointClippingBehavior
+
diff --git a/src/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs b/src/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs
@@ -0,0 +1,129 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.SamplerYcbcrModelConversion  (SamplerYcbcrModelConversion( SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY
+                                                                                    , SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY
+                                                                                    , SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
+                                                                                    , SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
+                                                                                    , SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
+                                                                                    , ..
+                                                                                    )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkSamplerYcbcrModelConversion - Color model component of a color space
+--
+-- = Description
+--
+-- -   'SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY' specifies that the
+--     input values to the conversion are unmodified.
+--
+-- -   'SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY' specifies no model
+--     conversion but the inputs are range expanded as for Y′CBCR.
+--
+-- -   'SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709' specifies the color model
+--     conversion from Y′CBCR to R′G′B′ defined in BT.709 and described in
+--     the “BT.709 Y’CBCR conversion” section of the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#data-format Khronos Data Format Specification>.
+--
+-- -   'SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601' specifies the color model
+--     conversion from Y′CBCR to R′G′B′ defined in BT.601 and described in
+--     the “BT.601 Y’CBCR conversion” section of the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#data-format Khronos Data Format Specification>.
+--
+-- -   'SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020' specifies the color
+--     model conversion from Y′CBCR to R′G′B′ defined in BT.2020 and
+--     described in the “BT.2020 Y’CBCR conversion” section of the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#data-format Khronos Data Format Specification>.
+--
+-- In the @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_*@ color models, for the
+-- input to the sampler Y′CBCR range expansion and model conversion:
+--
+-- -   the Y (Y′ luma) channel corresponds to the G channel of an RGB
+--     image.
+--
+-- -   the CB (CB or “U” blue color difference) channel corresponds to the
+--     B channel of an RGB image.
+--
+-- -   the CR (CR or “V” red color difference) channel corresponds to the R
+--     channel of an RGB image.
+--
+-- -   the alpha channel, if present, is not modified by color model
+--     conversion.
+--
+-- These rules reflect the mapping of channels after the channel swizzle
+-- operation (controlled by
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'::@components@).
+--
+-- Note
+--
+-- For example, an “YUVA” 32-bit format comprising four 8-bit channels can
+-- be implemented as 'Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM'
+-- with a component mapping:
+--
+-- -   @components.a@ =
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
+--
+-- -   @components.r@ =
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_B'
+--
+-- -   @components.g@ =
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_R'
+--
+-- -   @components.b@ =
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_G'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
+newtype SamplerYcbcrModelConversion = SamplerYcbcrModelConversion Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"
+pattern SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = SamplerYcbcrModelConversion 0
+-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"
+pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = SamplerYcbcrModelConversion 1
+-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"
+pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = SamplerYcbcrModelConversion 2
+-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"
+pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = SamplerYcbcrModelConversion 3
+-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"
+pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = SamplerYcbcrModelConversion 4
+{-# complete SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY,
+             SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY,
+             SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709,
+             SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601,
+             SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 :: SamplerYcbcrModelConversion #-}
+
+instance Show SamplerYcbcrModelConversion where
+  showsPrec p = \case
+    SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY -> showString "SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"
+    SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY -> showString "SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"
+    SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 -> showString "SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"
+    SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 -> showString "SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"
+    SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 -> showString "SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"
+    SamplerYcbcrModelConversion x -> showParen (p >= 11) (showString "SamplerYcbcrModelConversion " . showsPrec 11 x)
+
+instance Read SamplerYcbcrModelConversion where
+  readPrec = parens (choose [("SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY", pure SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY)
+                            , ("SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY", pure SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY)
+                            , ("SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709", pure SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709)
+                            , ("SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601", pure SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601)
+                            , ("SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020", pure SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SamplerYcbcrModelConversion")
+                       v <- step readPrec
+                       pure (SamplerYcbcrModelConversion v)))
+
diff --git a/src/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs-boot b/src/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/SamplerYcbcrModelConversion.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.SamplerYcbcrModelConversion  (SamplerYcbcrModelConversion) where
+
+
+
+data SamplerYcbcrModelConversion
+
diff --git a/src/Vulkan/Core11/Enums/SamplerYcbcrRange.hs b/src/Vulkan/Core11/Enums/SamplerYcbcrRange.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/SamplerYcbcrRange.hs
@@ -0,0 +1,70 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.SamplerYcbcrRange  (SamplerYcbcrRange( SAMPLER_YCBCR_RANGE_ITU_FULL
+                                                                , SAMPLER_YCBCR_RANGE_ITU_NARROW
+                                                                , ..
+                                                                )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkSamplerYcbcrRange - Range of encoded values in a color space
+--
+-- = Description
+--
+-- The formulae for these conversions is described in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion-rangeexpand Sampler Y′CBCR Range Expansion>
+-- section of the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations>
+-- chapter.
+--
+-- No range modification takes place if @ycbcrModel@ is
+-- 'Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY';
+-- the @ycbcrRange@ field of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
+-- is ignored in this case.
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
+newtype SamplerYcbcrRange = SamplerYcbcrRange Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'SAMPLER_YCBCR_RANGE_ITU_FULL' specifies that the full range of the
+-- encoded values are valid and interpreted according to the ITU “full
+-- range” quantization rules.
+pattern SAMPLER_YCBCR_RANGE_ITU_FULL = SamplerYcbcrRange 0
+-- | 'SAMPLER_YCBCR_RANGE_ITU_NARROW' specifies that headroom and foot room
+-- are reserved in the numerical range of encoded values, and the remaining
+-- values are expanded according to the ITU “narrow range” quantization
+-- rules.
+pattern SAMPLER_YCBCR_RANGE_ITU_NARROW = SamplerYcbcrRange 1
+{-# complete SAMPLER_YCBCR_RANGE_ITU_FULL,
+             SAMPLER_YCBCR_RANGE_ITU_NARROW :: SamplerYcbcrRange #-}
+
+instance Show SamplerYcbcrRange where
+  showsPrec p = \case
+    SAMPLER_YCBCR_RANGE_ITU_FULL -> showString "SAMPLER_YCBCR_RANGE_ITU_FULL"
+    SAMPLER_YCBCR_RANGE_ITU_NARROW -> showString "SAMPLER_YCBCR_RANGE_ITU_NARROW"
+    SamplerYcbcrRange x -> showParen (p >= 11) (showString "SamplerYcbcrRange " . showsPrec 11 x)
+
+instance Read SamplerYcbcrRange where
+  readPrec = parens (choose [("SAMPLER_YCBCR_RANGE_ITU_FULL", pure SAMPLER_YCBCR_RANGE_ITU_FULL)
+                            , ("SAMPLER_YCBCR_RANGE_ITU_NARROW", pure SAMPLER_YCBCR_RANGE_ITU_NARROW)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SamplerYcbcrRange")
+                       v <- step readPrec
+                       pure (SamplerYcbcrRange v)))
+
diff --git a/src/Vulkan/Core11/Enums/SamplerYcbcrRange.hs-boot b/src/Vulkan/Core11/Enums/SamplerYcbcrRange.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/SamplerYcbcrRange.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.SamplerYcbcrRange  (SamplerYcbcrRange) where
+
+
+
+data SamplerYcbcrRange
+
diff --git a/src/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs b/src/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs
@@ -0,0 +1,56 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.SemaphoreImportFlagBits  ( SemaphoreImportFlagBits( SEMAPHORE_IMPORT_TEMPORARY_BIT
+                                                                             , ..
+                                                                             )
+                                                    , SemaphoreImportFlags
+                                                    ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkSemaphoreImportFlagBits - Bitmask specifying additional parameters of
+-- semaphore payload import
+--
+-- = Description
+--
+-- These bits have the following meanings:
+--
+-- = See Also
+--
+-- 'SemaphoreImportFlags'
+newtype SemaphoreImportFlagBits = SemaphoreImportFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SEMAPHORE_IMPORT_TEMPORARY_BIT' specifies that the semaphore payload
+-- will be imported only temporarily, as described in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>,
+-- regardless of the permanence of @handleType@.
+pattern SEMAPHORE_IMPORT_TEMPORARY_BIT = SemaphoreImportFlagBits 0x00000001
+
+type SemaphoreImportFlags = SemaphoreImportFlagBits
+
+instance Show SemaphoreImportFlagBits where
+  showsPrec p = \case
+    SEMAPHORE_IMPORT_TEMPORARY_BIT -> showString "SEMAPHORE_IMPORT_TEMPORARY_BIT"
+    SemaphoreImportFlagBits x -> showParen (p >= 11) (showString "SemaphoreImportFlagBits 0x" . showHex x)
+
+instance Read SemaphoreImportFlagBits where
+  readPrec = parens (choose [("SEMAPHORE_IMPORT_TEMPORARY_BIT", pure SEMAPHORE_IMPORT_TEMPORARY_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SemaphoreImportFlagBits")
+                       v <- step readPrec
+                       pure (SemaphoreImportFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs-boot b/src/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/SemaphoreImportFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.SemaphoreImportFlagBits  ( SemaphoreImportFlagBits
+                                                    , SemaphoreImportFlags
+                                                    ) where
+
+
+
+data SemaphoreImportFlagBits
+
+type SemaphoreImportFlags = SemaphoreImportFlagBits
+
diff --git a/src/Vulkan/Core11/Enums/SubgroupFeatureFlagBits.hs b/src/Vulkan/Core11/Enums/SubgroupFeatureFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/SubgroupFeatureFlagBits.hs
@@ -0,0 +1,101 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.SubgroupFeatureFlagBits  ( SubgroupFeatureFlagBits( SUBGROUP_FEATURE_BASIC_BIT
+                                                                             , SUBGROUP_FEATURE_VOTE_BIT
+                                                                             , SUBGROUP_FEATURE_ARITHMETIC_BIT
+                                                                             , SUBGROUP_FEATURE_BALLOT_BIT
+                                                                             , SUBGROUP_FEATURE_SHUFFLE_BIT
+                                                                             , SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
+                                                                             , SUBGROUP_FEATURE_CLUSTERED_BIT
+                                                                             , SUBGROUP_FEATURE_QUAD_BIT
+                                                                             , SUBGROUP_FEATURE_PARTITIONED_BIT_NV
+                                                                             , ..
+                                                                             )
+                                                    , SubgroupFeatureFlags
+                                                    ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkSubgroupFeatureFlagBits - Enum describing what group operations are
+-- supported with subgroup scope
+--
+-- = See Also
+--
+-- 'SubgroupFeatureFlags'
+newtype SubgroupFeatureFlagBits = SubgroupFeatureFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SUBGROUP_FEATURE_BASIC_BIT' specifies the device will accept SPIR-V
+-- shader modules containing the @GroupNonUniform@ capability.
+pattern SUBGROUP_FEATURE_BASIC_BIT = SubgroupFeatureFlagBits 0x00000001
+-- | 'SUBGROUP_FEATURE_VOTE_BIT' specifies the device will accept SPIR-V
+-- shader modules containing the @GroupNonUniformVote@ capability.
+pattern SUBGROUP_FEATURE_VOTE_BIT = SubgroupFeatureFlagBits 0x00000002
+-- | 'SUBGROUP_FEATURE_ARITHMETIC_BIT' specifies the device will accept
+-- SPIR-V shader modules containing the @GroupNonUniformArithmetic@
+-- capability.
+pattern SUBGROUP_FEATURE_ARITHMETIC_BIT = SubgroupFeatureFlagBits 0x00000004
+-- | 'SUBGROUP_FEATURE_BALLOT_BIT' specifies the device will accept SPIR-V
+-- shader modules containing the @GroupNonUniformBallot@ capability.
+pattern SUBGROUP_FEATURE_BALLOT_BIT = SubgroupFeatureFlagBits 0x00000008
+-- | 'SUBGROUP_FEATURE_SHUFFLE_BIT' specifies the device will accept SPIR-V
+-- shader modules containing the @GroupNonUniformShuffle@ capability.
+pattern SUBGROUP_FEATURE_SHUFFLE_BIT = SubgroupFeatureFlagBits 0x00000010
+-- | 'SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT' specifies the device will accept
+-- SPIR-V shader modules containing the @GroupNonUniformShuffleRelative@
+-- capability.
+pattern SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = SubgroupFeatureFlagBits 0x00000020
+-- | 'SUBGROUP_FEATURE_CLUSTERED_BIT' specifies the device will accept SPIR-V
+-- shader modules containing the @GroupNonUniformClustered@ capability.
+pattern SUBGROUP_FEATURE_CLUSTERED_BIT = SubgroupFeatureFlagBits 0x00000040
+-- | 'SUBGROUP_FEATURE_QUAD_BIT' specifies the device will accept SPIR-V
+-- shader modules containing the @GroupNonUniformQuad@ capability.
+pattern SUBGROUP_FEATURE_QUAD_BIT = SubgroupFeatureFlagBits 0x00000080
+-- | 'SUBGROUP_FEATURE_PARTITIONED_BIT_NV' specifies the device will accept
+-- SPIR-V shader modules containing the @GroupNonUniformPartitionedNV@
+-- capability.
+pattern SUBGROUP_FEATURE_PARTITIONED_BIT_NV = SubgroupFeatureFlagBits 0x00000100
+
+type SubgroupFeatureFlags = SubgroupFeatureFlagBits
+
+instance Show SubgroupFeatureFlagBits where
+  showsPrec p = \case
+    SUBGROUP_FEATURE_BASIC_BIT -> showString "SUBGROUP_FEATURE_BASIC_BIT"
+    SUBGROUP_FEATURE_VOTE_BIT -> showString "SUBGROUP_FEATURE_VOTE_BIT"
+    SUBGROUP_FEATURE_ARITHMETIC_BIT -> showString "SUBGROUP_FEATURE_ARITHMETIC_BIT"
+    SUBGROUP_FEATURE_BALLOT_BIT -> showString "SUBGROUP_FEATURE_BALLOT_BIT"
+    SUBGROUP_FEATURE_SHUFFLE_BIT -> showString "SUBGROUP_FEATURE_SHUFFLE_BIT"
+    SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT -> showString "SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT"
+    SUBGROUP_FEATURE_CLUSTERED_BIT -> showString "SUBGROUP_FEATURE_CLUSTERED_BIT"
+    SUBGROUP_FEATURE_QUAD_BIT -> showString "SUBGROUP_FEATURE_QUAD_BIT"
+    SUBGROUP_FEATURE_PARTITIONED_BIT_NV -> showString "SUBGROUP_FEATURE_PARTITIONED_BIT_NV"
+    SubgroupFeatureFlagBits x -> showParen (p >= 11) (showString "SubgroupFeatureFlagBits 0x" . showHex x)
+
+instance Read SubgroupFeatureFlagBits where
+  readPrec = parens (choose [("SUBGROUP_FEATURE_BASIC_BIT", pure SUBGROUP_FEATURE_BASIC_BIT)
+                            , ("SUBGROUP_FEATURE_VOTE_BIT", pure SUBGROUP_FEATURE_VOTE_BIT)
+                            , ("SUBGROUP_FEATURE_ARITHMETIC_BIT", pure SUBGROUP_FEATURE_ARITHMETIC_BIT)
+                            , ("SUBGROUP_FEATURE_BALLOT_BIT", pure SUBGROUP_FEATURE_BALLOT_BIT)
+                            , ("SUBGROUP_FEATURE_SHUFFLE_BIT", pure SUBGROUP_FEATURE_SHUFFLE_BIT)
+                            , ("SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT", pure SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT)
+                            , ("SUBGROUP_FEATURE_CLUSTERED_BIT", pure SUBGROUP_FEATURE_CLUSTERED_BIT)
+                            , ("SUBGROUP_FEATURE_QUAD_BIT", pure SUBGROUP_FEATURE_QUAD_BIT)
+                            , ("SUBGROUP_FEATURE_PARTITIONED_BIT_NV", pure SUBGROUP_FEATURE_PARTITIONED_BIT_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SubgroupFeatureFlagBits")
+                       v <- step readPrec
+                       pure (SubgroupFeatureFlagBits v)))
+
diff --git a/src/Vulkan/Core11/Enums/TessellationDomainOrigin.hs b/src/Vulkan/Core11/Enums/TessellationDomainOrigin.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/TessellationDomainOrigin.hs
@@ -0,0 +1,60 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.TessellationDomainOrigin  (TessellationDomainOrigin( TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT
+                                                                              , TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT
+                                                                              , ..
+                                                                              )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkTessellationDomainOrigin - Enum describing tessellation domain origin
+--
+-- = Description
+--
+-- This enum affects how the @VertexOrderCw@ and @VertexOrderCcw@
+-- tessellation execution modes are interpreted, since the winding is
+-- defined relative to the orientation of the domain.
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PipelineTessellationDomainOriginStateCreateInfo'
+newtype TessellationDomainOrigin = TessellationDomainOrigin Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT' specifies that the origin of the
+-- domain space is in the upper left corner, as shown in figure
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#img-tessellation-topology-ul>.
+pattern TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = TessellationDomainOrigin 0
+-- | 'TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT' specifies that the origin of the
+-- domain space is in the lower left corner, as shown in figure
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#img-tessellation-topology-ll>.
+pattern TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = TessellationDomainOrigin 1
+{-# complete TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT,
+             TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT :: TessellationDomainOrigin #-}
+
+instance Show TessellationDomainOrigin where
+  showsPrec p = \case
+    TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT -> showString "TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT"
+    TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT -> showString "TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT"
+    TessellationDomainOrigin x -> showParen (p >= 11) (showString "TessellationDomainOrigin " . showsPrec 11 x)
+
+instance Read TessellationDomainOrigin where
+  readPrec = parens (choose [("TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT", pure TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT)
+                            , ("TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT", pure TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "TessellationDomainOrigin")
+                       v <- step readPrec
+                       pure (TessellationDomainOrigin v)))
+
diff --git a/src/Vulkan/Core11/Enums/TessellationDomainOrigin.hs-boot b/src/Vulkan/Core11/Enums/TessellationDomainOrigin.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Enums/TessellationDomainOrigin.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core11.Enums.TessellationDomainOrigin  (TessellationDomainOrigin) where
+
+
+
+data TessellationDomainOrigin
+
diff --git a/src/Vulkan/Core11/Handles.hs b/src/Vulkan/Core11/Handles.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Handles.hs
@@ -0,0 +1,79 @@
+{-# language CPP #-}
+module Vulkan.Core11.Handles  ( DescriptorUpdateTemplate(..)
+                              , SamplerYcbcrConversion(..)
+                              , Instance(..)
+                              , PhysicalDevice(..)
+                              , Device(..)
+                              , Queue(..)
+                              , CommandBuffer(..)
+                              , DeviceMemory(..)
+                              , CommandPool(..)
+                              , Buffer(..)
+                              , Image(..)
+                              , PipelineLayout(..)
+                              , Sampler(..)
+                              , DescriptorSet(..)
+                              , DescriptorSetLayout(..)
+                              ) where
+
+import GHC.Show (showParen)
+import Numeric (showHex)
+import Foreign.Storable (Storable)
+import Data.Word (Word64)
+import Vulkan.Core10.APIConstants (HasObjectType(..))
+import Vulkan.Core10.APIConstants (IsHandle)
+import Vulkan.Zero (Zero)
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION))
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandPool(..))
+import Vulkan.Core10.Handles (DescriptorSet(..))
+import Vulkan.Core10.Handles (DescriptorSetLayout(..))
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Core10.Handles (DeviceMemory(..))
+import Vulkan.Core10.Handles (Image(..))
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PipelineLayout(..))
+import Vulkan.Core10.Handles (Queue(..))
+import Vulkan.Core10.Handles (Sampler(..))
+-- | VkDescriptorUpdateTemplate - Opaque handle to a descriptor update
+-- template
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetWithTemplateKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.createDescriptorUpdateTemplate',
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplate',
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.destroyDescriptorUpdateTemplateKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplate',
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplateKHR'
+newtype DescriptorUpdateTemplate = DescriptorUpdateTemplate Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType DescriptorUpdateTemplate where
+  objectTypeAndHandle (DescriptorUpdateTemplate h) = (OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, h)
+instance Show DescriptorUpdateTemplate where
+  showsPrec p (DescriptorUpdateTemplate x) = showParen (p >= 11) (showString "DescriptorUpdateTemplate 0x" . showHex x)
+
+
+-- | VkSamplerYcbcrConversion - Opaque handle to a device-specific sampler
+-- Y′CBCR conversion description
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversion',
+-- 'Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversionKHR',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversion',
+-- 'Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.destroySamplerYcbcrConversionKHR'
+newtype SamplerYcbcrConversion = SamplerYcbcrConversion Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType SamplerYcbcrConversion where
+  objectTypeAndHandle (SamplerYcbcrConversion h) = (OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, h)
+instance Show SamplerYcbcrConversion where
+  showsPrec p (SamplerYcbcrConversion x) = showParen (p >= 11) (showString "SamplerYcbcrConversion 0x" . showHex x)
+
diff --git a/src/Vulkan/Core11/Handles.hs-boot b/src/Vulkan/Core11/Handles.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Handles.hs-boot
@@ -0,0 +1,12 @@
+{-# language CPP #-}
+module Vulkan.Core11.Handles  ( DescriptorUpdateTemplate
+                              , SamplerYcbcrConversion
+                              ) where
+
+
+
+data DescriptorUpdateTemplate
+
+
+data SamplerYcbcrConversion
+
diff --git a/src/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs b/src/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs
@@ -0,0 +1,379 @@
+{-# language CPP #-}
+module Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory  ( getDeviceQueue2
+                                                                  , ProtectedSubmitInfo(..)
+                                                                  , PhysicalDeviceProtectedMemoryFeatures(..)
+                                                                  , PhysicalDeviceProtectedMemoryProperties(..)
+                                                                  , DeviceQueueInfo2(..)
+                                                                  , StructureType(..)
+                                                                  , QueueFlagBits(..)
+                                                                  , QueueFlags
+                                                                  , DeviceQueueCreateFlagBits(..)
+                                                                  , DeviceQueueCreateFlags
+                                                                  , MemoryPropertyFlagBits(..)
+                                                                  , MemoryPropertyFlags
+                                                                  , BufferCreateFlagBits(..)
+                                                                  , BufferCreateFlags
+                                                                  , ImageCreateFlagBits(..)
+                                                                  , ImageCreateFlags
+                                                                  , CommandPoolCreateFlagBits(..)
+                                                                  , CommandPoolCreateFlags
+                                                                  ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceQueue2))
+import Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlags)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Queue)
+import Vulkan.Core10.Handles (Queue(Queue))
+import Vulkan.Core10.Handles (Queue_T)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO))
+import Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlagBits(..))
+import Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
+import Vulkan.Core10.Enums.CommandPoolCreateFlagBits (CommandPoolCreateFlagBits(..))
+import Vulkan.Core10.Enums.CommandPoolCreateFlagBits (CommandPoolCreateFlags)
+import Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlagBits(..))
+import Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlags)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.MemoryPropertyFlagBits (MemoryPropertyFlagBits(..))
+import Vulkan.Core10.Enums.MemoryPropertyFlagBits (MemoryPropertyFlags)
+import Vulkan.Core10.Enums.QueueFlagBits (QueueFlagBits(..))
+import Vulkan.Core10.Enums.QueueFlagBits (QueueFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceQueue2
+  :: FunPtr (Ptr Device_T -> Ptr DeviceQueueInfo2 -> Ptr (Ptr Queue_T) -> IO ()) -> Ptr Device_T -> Ptr DeviceQueueInfo2 -> Ptr (Ptr Queue_T) -> IO ()
+
+-- | vkGetDeviceQueue2 - Get a queue handle from a device
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the queue.
+--
+-- -   @pQueueInfo@ is a pointer to a 'DeviceQueueInfo2' structure,
+--     describing the parameters used to create the device queue.
+--
+-- -   @pQueue@ is a pointer to a 'Vulkan.Core10.Handles.Queue' object that
+--     will be filled with the handle for the requested queue.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'DeviceQueueInfo2',
+-- 'Vulkan.Core10.Handles.Queue'
+getDeviceQueue2 :: forall io . MonadIO io => Device -> DeviceQueueInfo2 -> io (Queue)
+getDeviceQueue2 device queueInfo = liftIO . evalContT $ do
+  let cmds = deviceCmds (device :: Device)
+  let vkGetDeviceQueue2Ptr = pVkGetDeviceQueue2 cmds
+  lift $ unless (vkGetDeviceQueue2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceQueue2 is null" Nothing Nothing
+  let vkGetDeviceQueue2' = mkVkGetDeviceQueue2 vkGetDeviceQueue2Ptr
+  pQueueInfo <- ContT $ withCStruct (queueInfo)
+  pPQueue <- ContT $ bracket (callocBytes @(Ptr Queue_T) 8) free
+  lift $ vkGetDeviceQueue2' (deviceHandle (device)) pQueueInfo (pPQueue)
+  pQueue <- lift $ peek @(Ptr Queue_T) pPQueue
+  pure $ (((\h -> Queue h cmds ) pQueue))
+
+
+-- | VkProtectedSubmitInfo - Structure indicating whether the submission is
+-- protected
+--
+-- == Valid Usage
+--
+-- -   If the protected memory feature is not enabled, @protectedSubmit@
+--     /must/ not be 'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If @protectedSubmit@ is 'Vulkan.Core10.BaseType.TRUE', then each
+--     element of the @pCommandBuffers@ array /must/ be a protected command
+--     buffer
+--
+-- -   If @protectedSubmit@ is 'Vulkan.Core10.BaseType.FALSE', then each
+--     element of the @pCommandBuffers@ array /must/ be an unprotected
+--     command buffer
+--
+-- -   If the 'Vulkan.Core10.Queue.SubmitInfo'::@pNext@ chain does not
+--     include a 'ProtectedSubmitInfo' structure, then each element of the
+--     command buffer of the @pCommandBuffers@ array /must/ be an
+--     unprotected command buffer
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ProtectedSubmitInfo = ProtectedSubmitInfo
+  { -- | @protectedSubmit@ specifies whether the batch is protected. If
+    -- @protectedSubmit@ is 'Vulkan.Core10.BaseType.TRUE', the batch is
+    -- protected. If @protectedSubmit@ is 'Vulkan.Core10.BaseType.FALSE', the
+    -- batch is unprotected. If the 'Vulkan.Core10.Queue.SubmitInfo'::@pNext@
+    -- chain does not include this structure, the batch is unprotected.
+    protectedSubmit :: Bool }
+  deriving (Typeable)
+deriving instance Show ProtectedSubmitInfo
+
+instance ToCStruct ProtectedSubmitInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ProtectedSubmitInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (protectedSubmit))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct ProtectedSubmitInfo where
+  peekCStruct p = do
+    protectedSubmit <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ ProtectedSubmitInfo
+             (bool32ToBool protectedSubmit)
+
+instance Storable ProtectedSubmitInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ProtectedSubmitInfo where
+  zero = ProtectedSubmitInfo
+           zero
+
+
+-- | VkPhysicalDeviceProtectedMemoryFeatures - Structure describing protected
+-- memory features that can be supported by an implementation
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceProtectedMemoryFeatures' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with a value indicating whether the feature is supported.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceProtectedMemoryFeatures = PhysicalDeviceProtectedMemoryFeatures
+  { -- | @protectedMemory@ specifies whether protected memory is supported.
+    protectedMemory :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceProtectedMemoryFeatures
+
+instance ToCStruct PhysicalDeviceProtectedMemoryFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceProtectedMemoryFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (protectedMemory))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceProtectedMemoryFeatures where
+  peekCStruct p = do
+    protectedMemory <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceProtectedMemoryFeatures
+             (bool32ToBool protectedMemory)
+
+instance Storable PhysicalDeviceProtectedMemoryFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceProtectedMemoryFeatures where
+  zero = PhysicalDeviceProtectedMemoryFeatures
+           zero
+
+
+-- | VkPhysicalDeviceProtectedMemoryProperties - Structure describing
+-- protected memory properties that can be supported by an implementation
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceProtectedMemoryProperties' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with a value indicating the implementation-dependent
+-- behavior.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceProtectedMemoryProperties = PhysicalDeviceProtectedMemoryProperties
+  { -- | @protectedNoFault@ specifies the behavior of the implementation when
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-protected-access-rules protected memory access rules>
+    -- are broken. If @protectedNoFault@ is 'Vulkan.Core10.BaseType.TRUE',
+    -- breaking those rules will not result in process termination or device
+    -- loss.
+    protectedNoFault :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceProtectedMemoryProperties
+
+instance ToCStruct PhysicalDeviceProtectedMemoryProperties where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceProtectedMemoryProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (protectedNoFault))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceProtectedMemoryProperties where
+  peekCStruct p = do
+    protectedNoFault <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceProtectedMemoryProperties
+             (bool32ToBool protectedNoFault)
+
+instance Storable PhysicalDeviceProtectedMemoryProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceProtectedMemoryProperties where
+  zero = PhysicalDeviceProtectedMemoryProperties
+           zero
+
+
+-- | VkDeviceQueueInfo2 - Structure specifying the parameters used for device
+-- queue creation
+--
+-- = Description
+--
+-- The queue returned by 'getDeviceQueue2' /must/ have the same @flags@
+-- value from this structure as that used at device creation time in a
+-- 'Vulkan.Core10.Device.DeviceQueueCreateInfo' instance. If no matching
+-- @flags@ were specified at device creation time then @pQueue@ will return
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'getDeviceQueue2'
+data DeviceQueueInfo2 = DeviceQueueInfo2
+  { -- | @flags@ /must/ be a valid combination of
+    -- 'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlagBits'
+    -- values
+    flags :: DeviceQueueCreateFlags
+  , -- | @queueFamilyIndex@ /must/ be one of the queue family indices specified
+    -- when @device@ was created, via the
+    -- 'Vulkan.Core10.Device.DeviceQueueCreateInfo' structure
+    queueFamilyIndex :: Word32
+  , -- | @queueIndex@ /must/ be less than the number of queues created for the
+    -- specified queue family index and
+    -- 'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlags'
+    -- member @flags@ equal to this @flags@ value when @device@ was created,
+    -- via the @queueCount@ member of the
+    -- 'Vulkan.Core10.Device.DeviceQueueCreateInfo' structure
+    queueIndex :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DeviceQueueInfo2
+
+instance ToCStruct DeviceQueueInfo2 where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceQueueInfo2{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceQueueCreateFlags)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (queueFamilyIndex)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (queueIndex)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DeviceQueueInfo2 where
+  peekCStruct p = do
+    flags <- peek @DeviceQueueCreateFlags ((p `plusPtr` 16 :: Ptr DeviceQueueCreateFlags))
+    queueFamilyIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    queueIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ DeviceQueueInfo2
+             flags queueFamilyIndex queueIndex
+
+instance Storable DeviceQueueInfo2 where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceQueueInfo2 where
+  zero = DeviceQueueInfo2
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs-boot b/src/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs-boot
@@ -0,0 +1,41 @@
+{-# language CPP #-}
+module Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory  ( DeviceQueueInfo2
+                                                                  , PhysicalDeviceProtectedMemoryFeatures
+                                                                  , PhysicalDeviceProtectedMemoryProperties
+                                                                  , ProtectedSubmitInfo
+                                                                  ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DeviceQueueInfo2
+
+instance ToCStruct DeviceQueueInfo2
+instance Show DeviceQueueInfo2
+
+instance FromCStruct DeviceQueueInfo2
+
+
+data PhysicalDeviceProtectedMemoryFeatures
+
+instance ToCStruct PhysicalDeviceProtectedMemoryFeatures
+instance Show PhysicalDeviceProtectedMemoryFeatures
+
+instance FromCStruct PhysicalDeviceProtectedMemoryFeatures
+
+
+data PhysicalDeviceProtectedMemoryProperties
+
+instance ToCStruct PhysicalDeviceProtectedMemoryProperties
+instance Show PhysicalDeviceProtectedMemoryProperties
+
+instance FromCStruct PhysicalDeviceProtectedMemoryProperties
+
+
+data ProtectedSubmitInfo
+
+instance ToCStruct ProtectedSubmitInfo
+instance Show ProtectedSubmitInfo
+
+instance FromCStruct ProtectedSubmitInfo
+
diff --git a/src/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs b/src/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs
@@ -0,0 +1,142 @@
+{-# language CPP #-}
+module Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup  ( PhysicalDeviceSubgroupProperties(..)
+                                                          , StructureType(..)
+                                                          , SubgroupFeatureFlagBits(..)
+                                                          , SubgroupFeatureFlags
+                                                          ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core11.Enums.SubgroupFeatureFlagBits (SubgroupFeatureFlags)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+import Vulkan.Core11.Enums.SubgroupFeatureFlagBits (SubgroupFeatureFlagBits(..))
+import Vulkan.Core11.Enums.SubgroupFeatureFlagBits (SubgroupFeatureFlags)
+-- | VkPhysicalDeviceSubgroupProperties - Structure describing subgroup
+-- support for an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceSubgroupProperties' structure describe
+-- the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceSubgroupProperties' structure is included in the
+-- @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- If @supportedOperations@ includes
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroup-quad >,
+-- @subgroupSize@ /must/ be greater than or equal to 4.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlags'
+data PhysicalDeviceSubgroupProperties = PhysicalDeviceSubgroupProperties
+  { -- | @subgroupSize@ is the default number of invocations in each subgroup.
+    -- @subgroupSize@ is at least 1 if any of the physical device’s queues
+    -- support 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'. @subgroupSize@ is
+    -- a power-of-two.
+    subgroupSize :: Word32
+  , -- | @supportedStages@ is a bitfield of
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' describing
+    -- the shader stages that
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>
+    -- with
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-scope-subgroup subgroup scope>
+    -- are supported in. @supportedStages@ will have the
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT' bit
+    -- set if any of the physical device’s queues support
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
+    supportedStages :: ShaderStageFlags
+  , -- | @supportedOperations@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlagBits'
+    -- specifying the sets of
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>
+    -- with
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-scope-subgroup subgroup scope>
+    -- supported on this device. @supportedOperations@ will have the
+    -- 'Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SUBGROUP_FEATURE_BASIC_BIT'
+    -- bit set if any of the physical device’s queues support
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
+    supportedOperations :: SubgroupFeatureFlags
+  , -- | @quadOperationsInAllStages@ is a boolean specifying whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-quad-operations quad group operations>
+    -- are available in all stages, or are restricted to fragment and compute
+    -- stages.
+    quadOperationsInAllStages :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceSubgroupProperties
+
+instance ToCStruct PhysicalDeviceSubgroupProperties where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSubgroupProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (subgroupSize)
+    poke ((p `plusPtr` 20 :: Ptr ShaderStageFlags)) (supportedStages)
+    poke ((p `plusPtr` 24 :: Ptr SubgroupFeatureFlags)) (supportedOperations)
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (quadOperationsInAllStages))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr ShaderStageFlags)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr SubgroupFeatureFlags)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceSubgroupProperties where
+  peekCStruct p = do
+    subgroupSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    supportedStages <- peek @ShaderStageFlags ((p `plusPtr` 20 :: Ptr ShaderStageFlags))
+    supportedOperations <- peek @SubgroupFeatureFlags ((p `plusPtr` 24 :: Ptr SubgroupFeatureFlags))
+    quadOperationsInAllStages <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    pure $ PhysicalDeviceSubgroupProperties
+             subgroupSize supportedStages supportedOperations (bool32ToBool quadOperationsInAllStages)
+
+instance Storable PhysicalDeviceSubgroupProperties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceSubgroupProperties where
+  zero = PhysicalDeviceSubgroupProperties
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs-boot b/src/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup  (PhysicalDeviceSubgroupProperties) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceSubgroupProperties
+
+instance ToCStruct PhysicalDeviceSubgroupProperties
+instance Show PhysicalDeviceSubgroupProperties
+
+instance FromCStruct PhysicalDeviceSubgroupProperties
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs
@@ -0,0 +1,114 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage  ( PhysicalDevice16BitStorageFeatures(..)
+                                                         , StructureType(..)
+                                                         ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDevice16BitStorageFeatures - Structure describing features
+-- supported by VK_KHR_16bit_storage
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevice16BitStorageFeatures = PhysicalDevice16BitStorageFeatures
+  { -- | @storageBuffer16BitAccess@ specifies whether objects in the
+    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the
+    -- @Block@ decoration /can/ have 16-bit integer and 16-bit floating-point
+    -- members. If this feature is not enabled, 16-bit integer or 16-bit
+    -- floating-point members /must/ not be used in such objects. This also
+    -- specifies whether shader modules /can/ declare the
+    -- @StorageBuffer16BitAccess@ capability.
+    storageBuffer16BitAccess :: Bool
+  , -- | @uniformAndStorageBuffer16BitAccess@ specifies whether objects in the
+    -- @Uniform@ storage class with the @Block@ decoration and in the
+    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the same
+    -- decoration /can/ have 16-bit integer and 16-bit floating-point members.
+    -- If this feature is not enabled, 16-bit integer or 16-bit floating-point
+    -- members /must/ not be used in such objects. This also specifies whether
+    -- shader modules /can/ declare the @UniformAndStorageBuffer16BitAccess@
+    -- capability.
+    uniformAndStorageBuffer16BitAccess :: Bool
+  , -- | @storagePushConstant16@ specifies whether objects in the @PushConstant@
+    -- storage class /can/ have 16-bit integer and 16-bit floating-point
+    -- members. If this feature is not enabled, 16-bit integer or
+    -- floating-point members /must/ not be used in such objects. This also
+    -- specifies whether shader modules /can/ declare the
+    -- @StoragePushConstant16@ capability.
+    storagePushConstant16 :: Bool
+  , -- | @storageInputOutput16@ specifies whether objects in the @Input@ and
+    -- @Output@ storage classes /can/ have 16-bit integer and 16-bit
+    -- floating-point members. If this feature is not enabled, 16-bit integer
+    -- or 16-bit floating-point members /must/ not be used in such objects.
+    -- This also specifies whether shader modules /can/ declare the
+    -- @StorageInputOutput16@ capability.
+    storageInputOutput16 :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDevice16BitStorageFeatures
+
+instance ToCStruct PhysicalDevice16BitStorageFeatures where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevice16BitStorageFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (storageBuffer16BitAccess))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (uniformAndStorageBuffer16BitAccess))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (storagePushConstant16))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (storageInputOutput16))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevice16BitStorageFeatures where
+  peekCStruct p = do
+    storageBuffer16BitAccess <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    uniformAndStorageBuffer16BitAccess <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    storagePushConstant16 <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    storageInputOutput16 <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    pure $ PhysicalDevice16BitStorageFeatures
+             (bool32ToBool storageBuffer16BitAccess) (bool32ToBool uniformAndStorageBuffer16BitAccess) (bool32ToBool storagePushConstant16) (bool32ToBool storageInputOutput16)
+
+instance Storable PhysicalDevice16BitStorageFeatures where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevice16BitStorageFeatures where
+  zero = PhysicalDevice16BitStorageFeatures
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage  (PhysicalDevice16BitStorageFeatures) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDevice16BitStorageFeatures
+
+instance ToCStruct PhysicalDevice16BitStorageFeatures
+instance Show PhysicalDevice16BitStorageFeatures
+
+instance FromCStruct PhysicalDevice16BitStorageFeatures
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs
@@ -0,0 +1,681 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2  ( bindBufferMemory2
+                                                        , bindImageMemory2
+                                                        , BindBufferMemoryInfo(..)
+                                                        , BindImageMemoryInfo(..)
+                                                        , StructureType(..)
+                                                        , ImageCreateFlagBits(..)
+                                                        , ImageCreateFlags
+                                                        ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.NamedType ((:::))
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindBufferMemoryDeviceGroupInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindImageMemoryDeviceGroupInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (BindImageMemorySwapchainInfoKHR)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (BindImagePlaneMemoryInfo)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkBindBufferMemory2))
+import Vulkan.Dynamic (DeviceCmds(pVkBindImageMemory2))
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkBindBufferMemory2
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (BindBufferMemoryInfo a) -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (BindBufferMemoryInfo a) -> IO Result
+
+-- | vkBindBufferMemory2 - Bind device memory to buffer objects
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the buffers and memory.
+--
+-- -   @bindInfoCount@ is the number of elements in @pBindInfos@.
+--
+-- -   @pBindInfos@ is a pointer to an array of @bindInfoCount@
+--     'BindBufferMemoryInfo' structures describing buffers and memory to
+--     bind.
+--
+-- = Description
+--
+-- On some implementations, it /may/ be more efficient to batch memory
+-- bindings into a single command.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
+--
+-- = See Also
+--
+-- 'BindBufferMemoryInfo', 'Vulkan.Core10.Handles.Device'
+bindBufferMemory2 :: forall io . MonadIO io => Device -> ("bindInfos" ::: Vector (SomeStruct BindBufferMemoryInfo)) -> io ()
+bindBufferMemory2 device bindInfos = liftIO . evalContT $ do
+  let vkBindBufferMemory2Ptr = pVkBindBufferMemory2 (deviceCmds (device :: Device))
+  lift $ unless (vkBindBufferMemory2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBindBufferMemory2 is null" Nothing Nothing
+  let vkBindBufferMemory2' = mkVkBindBufferMemory2 vkBindBufferMemory2Ptr
+  pPBindInfos <- ContT $ allocaBytesAligned @(BindBufferMemoryInfo _) ((Data.Vector.length (bindInfos)) * 40) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPBindInfos `plusPtr` (40 * (i)) :: Ptr (BindBufferMemoryInfo _))) (e) . ($ ())) (bindInfos)
+  r <- lift $ vkBindBufferMemory2' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (bindInfos)) :: Word32)) (pPBindInfos)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkBindImageMemory2
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (BindImageMemoryInfo a) -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (BindImageMemoryInfo a) -> IO Result
+
+-- | vkBindImageMemory2 - Bind device memory to image objects
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the images and memory.
+--
+-- -   @bindInfoCount@ is the number of elements in @pBindInfos@.
+--
+-- -   @pBindInfos@ is a pointer to an array of 'BindImageMemoryInfo'
+--     structures, describing images and memory to bind.
+--
+-- = Description
+--
+-- On some implementations, it /may/ be more efficient to batch memory
+-- bindings into a single command.
+--
+-- == Valid Usage
+--
+-- -   If any 'BindImageMemoryInfo'::image was created with
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--     then all planes of 'BindImageMemoryInfo'::image /must/ be bound
+--     individually in separate @pBindInfos@
+--
+-- -   @pBindInfos@ /must/ not refer to the same image subresource more
+--     than once
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pBindInfos@ /must/ be a valid pointer to an array of
+--     @bindInfoCount@ valid 'BindImageMemoryInfo' structures
+--
+-- -   @bindInfoCount@ /must/ be greater than @0@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'BindImageMemoryInfo', 'Vulkan.Core10.Handles.Device'
+bindImageMemory2 :: forall io . MonadIO io => Device -> ("bindInfos" ::: Vector (SomeStruct BindImageMemoryInfo)) -> io ()
+bindImageMemory2 device bindInfos = liftIO . evalContT $ do
+  let vkBindImageMemory2Ptr = pVkBindImageMemory2 (deviceCmds (device :: Device))
+  lift $ unless (vkBindImageMemory2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBindImageMemory2 is null" Nothing Nothing
+  let vkBindImageMemory2' = mkVkBindImageMemory2 vkBindImageMemory2Ptr
+  pPBindInfos <- ContT $ allocaBytesAligned @(BindImageMemoryInfo _) ((Data.Vector.length (bindInfos)) * 40) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPBindInfos `plusPtr` (40 * (i)) :: Ptr (BindImageMemoryInfo _))) (e) . ($ ())) (bindInfos)
+  r <- lift $ vkBindImageMemory2' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (bindInfos)) :: Word32)) (pPBindInfos)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkBindBufferMemoryInfo - Structure specifying how to bind a buffer to
+-- memory
+--
+-- == Valid Usage
+--
+-- -   @buffer@ /must/ not already be backed by a memory object
+--
+-- -   @buffer@ /must/ not have been created with any sparse memory binding
+--     flags
+--
+-- -   @memoryOffset@ /must/ be less than the size of @memory@
+--
+-- -   @memory@ /must/ have been allocated using one of the memory types
+--     allowed in the @memoryTypeBits@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements' with
+--     @buffer@
+--
+-- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@
+--     member of the 'Vulkan.Core10.MemoryManagement.MemoryRequirements'
+--     structure returned from a call to
+--     'Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements' with
+--     @buffer@
+--
+-- -   The @size@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements' with
+--     @buffer@ /must/ be less than or equal to the size of @memory@ minus
+--     @memoryOffset@
+--
+-- -   If @buffer@ requires a dedicated allocation(as reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2'
+--     in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation
+--     for @buffer@), @memory@ /must/ have been created with
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@
+--     equal to @buffer@ and @memoryOffset@ /must/ be zero
+--
+-- -   If the 'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when
+--     @memory@ was allocated included a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure in its @pNext@ chain, and
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@
+--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', then @buffer@
+--     /must/ equal
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@
+--     and @memoryOffset@ /must/ be zero
+--
+-- -   If @buffer@ was created with
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@
+--     equal to 'Vulkan.Core10.BaseType.TRUE', @memory@ /must/ have been
+--     created with
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'::@buffer@
+--     equal to @buffer@ and @memoryOffset@ /must/ be zero
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo'
+--     structure, all instances of @memory@ specified by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo'::@pDeviceIndices@
+--     /must/ have been allocated
+--
+-- -   If the value of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+--     used to allocate @memory@ is not @0@, it /must/ include at least one
+--     of the handles set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
+--     when @buffer@ was created
+--
+-- -   If @memory@ was created by a memory import operation, that is not
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
+--     with a non-@NULL@ @buffer@ value, the external handle type of the
+--     imported memory /must/ also have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
+--     when @buffer@ was created
+--
+-- -   If @memory@ was created with the
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
+--     memory import operation with a non-@NULL@ @buffer@ value,
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     /must/ also have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
+--     when @buffer@ was created
+--
+-- -   If the
+--     'Vulkan.Extensions.VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeaturesKHR'::@bufferDeviceAddress@
+--     feature is enabled and @buffer@ was created with the
+--     'Vulkan.Extensions.VK_KHR_buffer_device_address.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR'
+--     bit set, @memory@ /must/ have been allocated with the
+--     'Vulkan.Extensions.VK_KHR_buffer_device_address.MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR'
+--     bit set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     handle
+--
+-- -   Both of @buffer@, and @memory@ /must/ have been created, allocated,
+--     or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'bindBufferMemory2',
+-- 'Vulkan.Extensions.VK_KHR_bind_memory2.bindBufferMemory2KHR'
+data BindBufferMemoryInfo (es :: [Type]) = BindBufferMemoryInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @buffer@ is the buffer to be attached to memory.
+    buffer :: Buffer
+  , -- | @memory@ is a 'Vulkan.Core10.Handles.DeviceMemory' object describing the
+    -- device memory to attach.
+    memory :: DeviceMemory
+  , -- | @memoryOffset@ is the start offset of the region of @memory@ which is to
+    -- be bound to the buffer. The number of bytes returned in the
+    -- 'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ member in
+    -- @memory@, starting from @memoryOffset@ bytes, will be bound to the
+    -- specified buffer.
+    memoryOffset :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (BindBufferMemoryInfo es)
+
+instance Extensible BindBufferMemoryInfo where
+  extensibleType = STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO
+  setNext x next = x{next = next}
+  getNext BindBufferMemoryInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends BindBufferMemoryInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @BindBufferMemoryDeviceGroupInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss BindBufferMemoryInfo es, PokeChain es) => ToCStruct (BindBufferMemoryInfo es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindBufferMemoryInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (buffer)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (memory)
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (memoryOffset)
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    lift $ f
+
+instance (Extendss BindBufferMemoryInfo es, PeekChain es) => FromCStruct (BindBufferMemoryInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    buffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
+    memory <- peek @DeviceMemory ((p `plusPtr` 24 :: Ptr DeviceMemory))
+    memoryOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
+    pure $ BindBufferMemoryInfo
+             next buffer memory memoryOffset
+
+instance es ~ '[] => Zero (BindBufferMemoryInfo es) where
+  zero = BindBufferMemoryInfo
+           ()
+           zero
+           zero
+           zero
+
+
+-- | VkBindImageMemoryInfo - Structure specifying how to bind an image to
+-- memory
+--
+-- == Valid Usage
+--
+-- -   @image@ /must/ not already be backed by a memory object
+--
+-- -   @image@ /must/ not have been created with any sparse memory binding
+--     flags
+--
+-- -   @memoryOffset@ /must/ be less than the size of @memory@
+--
+-- -   If the @pNext@ chain does not include a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
+--     structure, @memory@ /must/ have been allocated using one of the
+--     memory types allowed in the @memoryTypeBits@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
+--     with @image@
+--
+-- -   If the @pNext@ chain does not include a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
+--     structure, @memoryOffset@ /must/ be an integer multiple of the
+--     @alignment@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
+--     with @image@
+--
+-- -   If the @pNext@ chain does not include a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
+--     structure, the difference of the size of @memory@ and @memoryOffset@
+--     /must/ be greater than or equal to the @size@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
+--     with the same @image@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
+--     structure, @image@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--     bit set
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
+--     structure, @memory@ /must/ have been allocated using one of the
+--     memory types allowed in the @memoryTypeBits@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
+--     with @image@ and where
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'::@planeAspect@
+--     corresponds to the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'::@planeAspect@
+--     in the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2'
+--     structure’s @pNext@ chain
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
+--     structure, @memoryOffset@ /must/ be an integer multiple of the
+--     @alignment@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
+--     with @image@ and where
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'::@planeAspect@
+--     corresponds to the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'::@planeAspect@
+--     in the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2'
+--     structure’s @pNext@ chain
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
+--     structure, the difference of the size of @memory@ and @memoryOffset@
+--     /must/ be greater than or equal to the @size@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
+--     with the same @image@ and where
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'::@planeAspect@
+--     corresponds to the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'::@planeAspect@
+--     in the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2'
+--     structure’s @pNext@ chain
+--
+-- -   If @image@ requires a dedicated allocation (as reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
+--     in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation
+--     for @image@), @memory@ /must/ have been created with
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     equal to @image@ and @memoryOffset@ /must/ be zero
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing>
+--     feature is not enabled, and the
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when @memory@ was
+--     allocated included a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure in its @pNext@ chain, and
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', then @image@
+--     /must/ equal
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     and @memoryOffset@ /must/ be zero
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing>
+--     feature is enabled, and the
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when @memory@ was
+--     allocated included a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     structure in its @pNext@ chain, and
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', then
+--     @memoryOffset@ /must/ be zero, and @image@ /must/ be either equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@
+--     or an image that was created using the same parameters in
+--     'Vulkan.Core10.Image.ImageCreateInfo', with the exception that
+--     @extent@ and @arrayLayers@ /may/ differ subject to the following
+--     restrictions: every dimension in the @extent@ parameter of the image
+--     being bound /must/ be equal to or smaller than the original image
+--     for which the allocation was created; and the @arrayLayers@
+--     parameter of the image being bound /must/ be equal to or smaller
+--     than the original image for which the allocation was created
+--
+-- -   If @image@ was created with
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@
+--     equal to 'Vulkan.Core10.BaseType.TRUE', @memory@ /must/ have been
+--     created with
+--     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV'::@image@
+--     equal to @image@ and @memoryOffset@ /must/ be zero
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'
+--     structure, all instances of @memory@ specified by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@pDeviceIndices@
+--     /must/ have been allocated
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'
+--     structure, and
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@splitInstanceBindRegionCount@
+--     is not zero, then @image@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT'
+--     bit set
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'
+--     structure, all elements of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@pSplitInstanceBindRegions@
+--     /must/ be valid rectangles contained within the dimensions of
+--     @image@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'
+--     structure, the union of the areas of all elements of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@pSplitInstanceBindRegions@
+--     that correspond to the same instance of @image@ /must/ cover the
+--     entire image
+--
+-- -   If @image@ was created with a valid swapchain handle in
+--     'Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR'::@swapchain@,
+--     then the @pNext@ chain /must/ include a
+--     'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR'
+--     structure containing the same swapchain handle
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR'
+--     structure, @memory@ /must/ be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If the @pNext@ chain does not include a
+--     'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR'
+--     structure, @memory@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DeviceMemory' handle
+--
+-- -   If the value of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+--     used to allocate @memory@ is not @0@, it /must/ include at least one
+--     of the handles set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     when @image@ was created
+--
+-- -   If @memory@ was created by a memory import operation, that is not
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
+--     with a non-@NULL@ @buffer@ value, the external handle type of the
+--     imported memory /must/ also have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     when @image@ was created
+--
+-- -   If @memory@ was created with the
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID'
+--     memory import operation with a non-@NULL@ @buffer@ value,
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     /must/ also have been set in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     when @image@ was created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo',
+--     'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR',
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   Both of @image@, and @memory@ that are valid handles of non-ignored
+--     parameters /must/ have been created, allocated, or retrieved from
+--     the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.BaseType.DeviceSize', 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'bindImageMemory2',
+-- 'Vulkan.Extensions.VK_KHR_bind_memory2.bindImageMemory2KHR'
+data BindImageMemoryInfo (es :: [Type]) = BindImageMemoryInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @image@ is the image to be attached to memory.
+    image :: Image
+  , -- | @memory@ is a 'Vulkan.Core10.Handles.DeviceMemory' object describing the
+    -- device memory to attach.
+    memory :: DeviceMemory
+  , -- | @memoryOffset@ is the start offset of the region of @memory@ which is to
+    -- be bound to the image. The number of bytes returned in the
+    -- 'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ member in
+    -- @memory@, starting from @memoryOffset@ bytes, will be bound to the
+    -- specified image.
+    memoryOffset :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (BindImageMemoryInfo es)
+
+instance Extensible BindImageMemoryInfo where
+  extensibleType = STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO
+  setNext x next = x{next = next}
+  getNext BindImageMemoryInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends BindImageMemoryInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @BindImagePlaneMemoryInfo = Just f
+    | Just Refl <- eqT @e @BindImageMemorySwapchainInfoKHR = Just f
+    | Just Refl <- eqT @e @BindImageMemoryDeviceGroupInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss BindImageMemoryInfo es, PokeChain es) => ToCStruct (BindImageMemoryInfo es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindImageMemoryInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (image)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (memory)
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (memoryOffset)
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    lift $ f
+
+instance (Extendss BindImageMemoryInfo es, PeekChain es) => FromCStruct (BindImageMemoryInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    image <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
+    memory <- peek @DeviceMemory ((p `plusPtr` 24 :: Ptr DeviceMemory))
+    memoryOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
+    pure $ BindImageMemoryInfo
+             next image memory memoryOffset
+
+instance es ~ '[] => Zero (BindImageMemoryInfo es) where
+  zero = BindImageMemoryInfo
+           ()
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs-boot
@@ -0,0 +1,29 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2  ( BindBufferMemoryInfo
+                                                        , BindImageMemoryInfo
+                                                        ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role BindBufferMemoryInfo nominal
+data BindBufferMemoryInfo (es :: [Type])
+
+instance (Extendss BindBufferMemoryInfo es, PokeChain es) => ToCStruct (BindBufferMemoryInfo es)
+instance Show (Chain es) => Show (BindBufferMemoryInfo es)
+
+instance (Extendss BindBufferMemoryInfo es, PeekChain es) => FromCStruct (BindBufferMemoryInfo es)
+
+
+type role BindImageMemoryInfo nominal
+data BindImageMemoryInfo (es :: [Type])
+
+instance (Extendss BindImageMemoryInfo es, PokeChain es) => ToCStruct (BindImageMemoryInfo es)
+instance Show (Chain es) => Show (BindImageMemoryInfo es)
+
+instance (Extendss BindImageMemoryInfo es, PeekChain es) => FromCStruct (BindImageMemoryInfo es)
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs
@@ -0,0 +1,325 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation  ( MemoryDedicatedRequirements(..)
+                                                                , MemoryDedicatedAllocateInfo(..)
+                                                                , StructureType(..)
+                                                                ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkMemoryDedicatedRequirements - Structure describing dedicated
+-- allocation requirements of buffer and image resources
+--
+-- = Description
+--
+-- When the implementation sets @requiresDedicatedAllocation@ to
+-- 'Vulkan.Core10.BaseType.TRUE', it /must/ also set
+-- @prefersDedicatedAllocation@ to 'Vulkan.Core10.BaseType.TRUE'.
+--
+-- If the 'MemoryDedicatedRequirements' structure is included in the
+-- @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
+-- structure passed as the @pMemoryRequirements@ parameter of a
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2'
+-- call, @requiresDedicatedAllocation@ /may/ be
+-- 'Vulkan.Core10.BaseType.TRUE' under one of the following conditions:
+--
+-- -   The @pNext@ chain of 'Vulkan.Core10.Buffer.BufferCreateInfo' for the
+--     call to 'Vulkan.Core10.Buffer.createBuffer' used to create the
+--     buffer being queried included a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'
+--     structure, and any of the handle types specified in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@
+--     requires dedicated allocation, as reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferProperties'
+--     in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'::@externalMemoryProperties.externalMemoryFeatures@,
+--     the @requiresDedicatedAllocation@ field will be set to
+--     'Vulkan.Core10.BaseType.TRUE'.
+--
+-- In all other cases, @requiresDedicatedAllocation@ /must/ be set to
+-- 'Vulkan.Core10.BaseType.FALSE' by the implementation whenever a
+-- 'MemoryDedicatedRequirements' structure is included in the @pNext@ chain
+-- of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
+-- structure passed to a call to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2'.
+--
+-- If the 'MemoryDedicatedRequirements' structure is included in the
+-- @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
+-- structure passed as the @pMemoryRequirements@ parameter of a
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2'
+-- call and
+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'
+-- was set in 'Vulkan.Core10.Buffer.BufferCreateInfo'::@flags@ when
+-- @buffer@ was created then the implementation /must/ set both
+-- @prefersDedicatedAllocation@ and @requiresDedicatedAllocation@ to
+-- 'Vulkan.Core10.BaseType.FALSE'.
+--
+-- If the 'MemoryDedicatedRequirements' structure is included in the
+-- @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
+-- structure passed as the @pMemoryRequirements@ parameter of a
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
+-- call, @requiresDedicatedAllocation@ /may/ be
+-- 'Vulkan.Core10.BaseType.TRUE' under one of the following conditions:
+--
+-- -   The @pNext@ chain of 'Vulkan.Core10.Image.ImageCreateInfo' for the
+--     call to 'Vulkan.Core10.Image.createImage' used to create the image
+--     being queried included a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'
+--     structure, and any of the handle types specified in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@
+--     requires dedicated allocation, as reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--     in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'::@externalMemoryProperties.externalMemoryFeatures@,
+--     the @requiresDedicatedAllocation@ field will be set to
+--     'Vulkan.Core10.BaseType.TRUE'.
+--
+-- In all other cases, @requiresDedicatedAllocation@ /must/ be set to
+-- 'Vulkan.Core10.BaseType.FALSE' by the implementation whenever a
+-- 'MemoryDedicatedRequirements' structure is included in the @pNext@ chain
+-- of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
+-- structure passed to a call to
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'.
+--
+-- If the 'MemoryDedicatedRequirements' structure is included in the
+-- @pNext@ chain of the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
+-- structure passed as the @pMemoryRequirements@ parameter of a
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2'
+-- call and
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'
+-- was set in 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ when @image@
+-- was created then the implementation /must/ set both
+-- @prefersDedicatedAllocation@ and @requiresDedicatedAllocation@ to
+-- 'Vulkan.Core10.BaseType.FALSE'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data MemoryDedicatedRequirements = MemoryDedicatedRequirements
+  { -- | @prefersDedicatedAllocation@ specifies that the implementation would
+    -- prefer a dedicated allocation for this resource. The application is
+    -- still free to suballocate the resource but it /may/ get better
+    -- performance if a dedicated allocation is used.
+    prefersDedicatedAllocation :: Bool
+  , -- | @requiresDedicatedAllocation@ specifies that a dedicated allocation is
+    -- required for this resource.
+    requiresDedicatedAllocation :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show MemoryDedicatedRequirements
+
+instance ToCStruct MemoryDedicatedRequirements where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryDedicatedRequirements{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (prefersDedicatedAllocation))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (requiresDedicatedAllocation))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct MemoryDedicatedRequirements where
+  peekCStruct p = do
+    prefersDedicatedAllocation <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    requiresDedicatedAllocation <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ MemoryDedicatedRequirements
+             (bool32ToBool prefersDedicatedAllocation) (bool32ToBool requiresDedicatedAllocation)
+
+instance Storable MemoryDedicatedRequirements where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryDedicatedRequirements where
+  zero = MemoryDedicatedRequirements
+           zero
+           zero
+
+
+-- | VkMemoryDedicatedAllocateInfo - Specify a dedicated memory allocation
+-- resource
+--
+-- == Valid Usage
+--
+-- -   At least one of @image@ and @buffer@ /must/ be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the
+--     memory is not an imported Android Hardware Buffer,
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@ /must/
+--     equal the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ of the
+--     image
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@
+--     /must/ have been created without
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'
+--     set in 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the
+--     memory is not an imported Android Hardware Buffer,
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@ /must/
+--     equal the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ of the
+--     buffer
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @buffer@ /must/ have been created without
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'
+--     set in 'Vulkan.Core10.Buffer.BufferCreateInfo'::@flags@
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import
+--     operation with handle type
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
+--     or
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT',
+--     and the external handle was created by the Vulkan API, then the
+--     memory being imported /must/ also be a dedicated image allocation
+--     and @image@ must be identical to the image associated with the
+--     imported memory
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import
+--     operation with handle type
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
+--     or
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT',
+--     and the external handle was created by the Vulkan API, then the
+--     memory being imported /must/ also be a dedicated buffer allocation
+--     and @buffer@ /must/ be identical to the buffer associated with the
+--     imported memory
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import
+--     operation with handle type
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT',
+--     the memory being imported /must/ also be a dedicated image
+--     allocation and @image@ /must/ be identical to the image associated
+--     with the imported memory
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import
+--     operation with handle type
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT',
+--     the memory being imported /must/ also be a dedicated buffer
+--     allocation and @buffer@ /must/ be identical to the buffer associated
+--     with the imported memory
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@
+--     /must/ not have been created with
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--     set in 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO'
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   Both of @buffer@, and @image@ that are valid handles of non-ignored
+--     parameters /must/ have been created, allocated, or retrieved from
+--     the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data MemoryDedicatedAllocateInfo = MemoryDedicatedAllocateInfo
+  { -- | @image@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a handle of an
+    -- image which this memory will be bound to.
+    image :: Image
+  , -- | @buffer@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a handle of a
+    -- buffer which this memory will be bound to.
+    buffer :: Buffer
+  }
+  deriving (Typeable)
+deriving instance Show MemoryDedicatedAllocateInfo
+
+instance ToCStruct MemoryDedicatedAllocateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryDedicatedAllocateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Image)) (image)
+    poke ((p `plusPtr` 24 :: Ptr Buffer)) (buffer)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct MemoryDedicatedAllocateInfo where
+  peekCStruct p = do
+    image <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
+    buffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer))
+    pure $ MemoryDedicatedAllocateInfo
+             image buffer
+
+instance Storable MemoryDedicatedAllocateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryDedicatedAllocateInfo where
+  zero = MemoryDedicatedAllocateInfo
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation  ( MemoryDedicatedAllocateInfo
+                                                                , MemoryDedicatedRequirements
+                                                                ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data MemoryDedicatedAllocateInfo
+
+instance ToCStruct MemoryDedicatedAllocateInfo
+instance Show MemoryDedicatedAllocateInfo
+
+instance FromCStruct MemoryDedicatedAllocateInfo
+
+
+data MemoryDedicatedRequirements
+
+instance ToCStruct MemoryDedicatedRequirements
+instance Show MemoryDedicatedRequirements
+
+instance FromCStruct MemoryDedicatedRequirements
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs
@@ -0,0 +1,677 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template  ( createDescriptorUpdateTemplate
+                                                                      , withDescriptorUpdateTemplate
+                                                                      , destroyDescriptorUpdateTemplate
+                                                                      , updateDescriptorSetWithTemplate
+                                                                      , DescriptorUpdateTemplateEntry(..)
+                                                                      , DescriptorUpdateTemplateCreateInfo(..)
+                                                                      , DescriptorUpdateTemplate(..)
+                                                                      , DescriptorUpdateTemplateCreateFlags(..)
+                                                                      , StructureType(..)
+                                                                      , DescriptorUpdateTemplateType(..)
+                                                                      , ObjectType(..)
+                                                                      ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Handles (DescriptorSet)
+import Vulkan.Core10.Handles (DescriptorSet(..))
+import Vulkan.Core10.Handles (DescriptorSetLayout)
+import Vulkan.Core10.Enums.DescriptorType (DescriptorType)
+import Vulkan.Core11.Handles (DescriptorUpdateTemplate)
+import Vulkan.Core11.Handles (DescriptorUpdateTemplate(..))
+import Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags (DescriptorUpdateTemplateCreateFlags)
+import Vulkan.Core11.Enums.DescriptorUpdateTemplateType (DescriptorUpdateTemplateType)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateDescriptorUpdateTemplate))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyDescriptorUpdateTemplate))
+import Vulkan.Dynamic (DeviceCmds(pVkUpdateDescriptorSetWithTemplate))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
+import Vulkan.Core10.Handles (PipelineLayout)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Core11.Handles (DescriptorUpdateTemplate(..))
+import Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags (DescriptorUpdateTemplateCreateFlags(..))
+import Vulkan.Core11.Enums.DescriptorUpdateTemplateType (DescriptorUpdateTemplateType(..))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateDescriptorUpdateTemplate
+  :: FunPtr (Ptr Device_T -> Ptr DescriptorUpdateTemplateCreateInfo -> Ptr AllocationCallbacks -> Ptr DescriptorUpdateTemplate -> IO Result) -> Ptr Device_T -> Ptr DescriptorUpdateTemplateCreateInfo -> Ptr AllocationCallbacks -> Ptr DescriptorUpdateTemplate -> IO Result
+
+-- | vkCreateDescriptorUpdateTemplate - Create a new descriptor update
+-- template
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the descriptor update
+--     template.
+--
+-- -   @pCreateInfo@ is a pointer to a 'DescriptorUpdateTemplateCreateInfo'
+--     structure specifying the set of descriptors to update with a single
+--     call to
+--     'Vulkan.Extensions.VK_KHR_push_descriptor.cmdPushDescriptorSetWithTemplateKHR'
+--     or 'updateDescriptorSetWithTemplate'.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pDescriptorUpdateTemplate@ is a pointer to a
+--     'Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle in which the
+--     resulting descriptor update template object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'DescriptorUpdateTemplateCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pDescriptorUpdateTemplate@ /must/ be a valid pointer to a
+--     'Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core11.Handles.DescriptorUpdateTemplate',
+-- 'DescriptorUpdateTemplateCreateInfo', 'Vulkan.Core10.Handles.Device'
+createDescriptorUpdateTemplate :: forall io . MonadIO io => Device -> DescriptorUpdateTemplateCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DescriptorUpdateTemplate)
+createDescriptorUpdateTemplate device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateDescriptorUpdateTemplatePtr = pVkCreateDescriptorUpdateTemplate (deviceCmds (device :: Device))
+  lift $ unless (vkCreateDescriptorUpdateTemplatePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateDescriptorUpdateTemplate is null" Nothing Nothing
+  let vkCreateDescriptorUpdateTemplate' = mkVkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplatePtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPDescriptorUpdateTemplate <- ContT $ bracket (callocBytes @DescriptorUpdateTemplate 8) free
+  r <- lift $ vkCreateDescriptorUpdateTemplate' (deviceHandle (device)) pCreateInfo pAllocator (pPDescriptorUpdateTemplate)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pDescriptorUpdateTemplate <- lift $ peek @DescriptorUpdateTemplate pPDescriptorUpdateTemplate
+  pure $ (pDescriptorUpdateTemplate)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createDescriptorUpdateTemplate' and 'destroyDescriptorUpdateTemplate'
+--
+-- To ensure that 'destroyDescriptorUpdateTemplate' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withDescriptorUpdateTemplate :: forall io r . MonadIO io => Device -> DescriptorUpdateTemplateCreateInfo -> Maybe AllocationCallbacks -> (io (DescriptorUpdateTemplate) -> ((DescriptorUpdateTemplate) -> io ()) -> r) -> r
+withDescriptorUpdateTemplate device pCreateInfo pAllocator b =
+  b (createDescriptorUpdateTemplate device pCreateInfo pAllocator)
+    (\(o0) -> destroyDescriptorUpdateTemplate device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyDescriptorUpdateTemplate
+  :: FunPtr (Ptr Device_T -> DescriptorUpdateTemplate -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DescriptorUpdateTemplate -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyDescriptorUpdateTemplate - Destroy a descriptor update template
+-- object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that has been used to create the
+--     descriptor update template
+--
+-- -   @descriptorUpdateTemplate@ is the descriptor update template to
+--     destroy.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @descriptorSetLayout@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @descriptorSetLayout@ was created, @pAllocator@ /must/
+--     be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @descriptorUpdateTemplate@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @descriptorUpdateTemplate@
+--     /must/ be a valid 'Vulkan.Core11.Handles.DescriptorUpdateTemplate'
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @descriptorUpdateTemplate@ is a valid handle, it /must/ have been
+--     created, allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @descriptorUpdateTemplate@ /must/ be externally
+--     synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core11.Handles.DescriptorUpdateTemplate',
+-- 'Vulkan.Core10.Handles.Device'
+destroyDescriptorUpdateTemplate :: forall io . MonadIO io => Device -> DescriptorUpdateTemplate -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyDescriptorUpdateTemplate device descriptorUpdateTemplate allocator = liftIO . evalContT $ do
+  let vkDestroyDescriptorUpdateTemplatePtr = pVkDestroyDescriptorUpdateTemplate (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyDescriptorUpdateTemplatePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyDescriptorUpdateTemplate is null" Nothing Nothing
+  let vkDestroyDescriptorUpdateTemplate' = mkVkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplatePtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyDescriptorUpdateTemplate' (deviceHandle (device)) (descriptorUpdateTemplate) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkUpdateDescriptorSetWithTemplate
+  :: FunPtr (Ptr Device_T -> DescriptorSet -> DescriptorUpdateTemplate -> Ptr () -> IO ()) -> Ptr Device_T -> DescriptorSet -> DescriptorUpdateTemplate -> Ptr () -> IO ()
+
+-- | vkUpdateDescriptorSetWithTemplate - Update the contents of a descriptor
+-- set object using an update template
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that updates the descriptor sets.
+--
+-- -   @descriptorSet@ is the descriptor set to update
+--
+-- -   @descriptorUpdateTemplate@ is a
+--     'Vulkan.Core11.Handles.DescriptorUpdateTemplate' object specifying
+--     the update mapping between @pData@ and the descriptor set to update.
+--
+-- -   @pData@ is a pointer to memory containing one or more
+--     'Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
+--     'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo', or
+--     'Vulkan.Core10.Handles.BufferView' structures used to write the
+--     descriptors.
+--
+-- == Valid Usage
+--
+-- -   @pData@ /must/ be a valid pointer to a memory containing one or more
+--     valid instances of
+--     'Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
+--     'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo', or
+--     'Vulkan.Core10.Handles.BufferView' in a layout defined by
+--     @descriptorUpdateTemplate@ when it was created with
+--     'createDescriptorUpdateTemplate'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @descriptorSet@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorSet' handle
+--
+-- -   @descriptorUpdateTemplate@ /must/ be a valid
+--     'Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle
+--
+-- -   @descriptorUpdateTemplate@ /must/ have been created, allocated, or
+--     retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @descriptorSet@ /must/ be externally synchronized
+--
+-- __API example.__
+--
+-- > struct AppBufferView {
+-- >     VkBufferView bufferView;
+-- >     uint32_t     applicationRelatedInformation;
+-- > };
+-- >
+-- > struct AppDataStructure
+-- > {
+-- >     VkDescriptorImageInfo  imageInfo;          // a single image info
+-- >     VkDescriptorBufferInfo bufferInfoArray[3]; // 3 buffer infos in an array
+-- >     AppBufferView          bufferView[2];      // An application defined structure containing a bufferView
+-- >     // ... some more application related data
+-- > };
+-- >
+-- > const VkDescriptorUpdateTemplateEntry descriptorUpdateTemplateEntries[] =
+-- > {
+-- >     // binding to a single image descriptor
+-- >     {
+-- >         0,                                           // binding
+-- >         0,                                           // dstArrayElement
+-- >         1,                                           // descriptorCount
+-- >         VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,   // descriptorType
+-- >         offsetof(AppDataStructure, imageInfo),       // offset
+-- >         0                                            // stride is not required if descriptorCount is 1
+-- >     },
+-- >
+-- >     // binding to an array of buffer descriptors
+-- >     {
+-- >         1,                                           // binding
+-- >         0,                                           // dstArrayElement
+-- >         3,                                           // descriptorCount
+-- >         VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,           // descriptorType
+-- >         offsetof(AppDataStructure, bufferInfoArray), // offset
+-- >         sizeof(VkDescriptorBufferInfo)               // stride, descriptor buffer infos are compact
+-- >     },
+-- >
+-- >     // binding to an array of buffer views
+-- >     {
+-- >         2,                                           // binding
+-- >         0,                                           // dstArrayElement
+-- >         2,                                           // descriptorCount
+-- >         VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,     // descriptorType
+-- >         offsetof(AppDataStructure, bufferView) +
+-- >           offsetof(AppBufferView, bufferView),       // offset
+-- >         sizeof(AppBufferView)                        // stride, bufferViews do not have to be compact
+-- >     },
+-- > };
+-- >
+-- > // create a descriptor update template for descriptor set updates
+-- > const VkDescriptorUpdateTemplateCreateInfo createInfo =
+-- > {
+-- >     VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,  // sType
+-- >     NULL,                                                      // pNext
+-- >     0,                                                         // flags
+-- >     3,                                                         // descriptorUpdateEntryCount
+-- >     descriptorUpdateTemplateEntries,                           // pDescriptorUpdateEntries
+-- >     VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,         // templateType
+-- >     myLayout,                                                  // descriptorSetLayout
+-- >     0,                                                         // pipelineBindPoint, ignored by given templateType
+-- >     0,                                                         // pipelineLayout, ignored by given templateType
+-- >     0,                                                         // set, ignored by given templateType
+-- > };
+-- >
+-- > VkDescriptorUpdateTemplate myDescriptorUpdateTemplate;
+-- > myResult = vkCreateDescriptorUpdateTemplate(
+-- >     myDevice,
+-- >     &createInfo,
+-- >     NULL,
+-- >     &myDescriptorUpdateTemplate);
+-- > }
+-- >
+-- >
+-- > AppDataStructure appData;
+-- >
+-- > // fill appData here or cache it in your engine
+-- > vkUpdateDescriptorSetWithTemplate(myDevice, myDescriptorSet, myDescriptorUpdateTemplate, &appData);
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DescriptorSet',
+-- 'Vulkan.Core11.Handles.DescriptorUpdateTemplate',
+-- 'Vulkan.Core10.Handles.Device'
+updateDescriptorSetWithTemplate :: forall io . MonadIO io => Device -> DescriptorSet -> DescriptorUpdateTemplate -> ("data" ::: Ptr ()) -> io ()
+updateDescriptorSetWithTemplate device descriptorSet descriptorUpdateTemplate data' = liftIO $ do
+  let vkUpdateDescriptorSetWithTemplatePtr = pVkUpdateDescriptorSetWithTemplate (deviceCmds (device :: Device))
+  unless (vkUpdateDescriptorSetWithTemplatePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkUpdateDescriptorSetWithTemplate is null" Nothing Nothing
+  let vkUpdateDescriptorSetWithTemplate' = mkVkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplatePtr
+  vkUpdateDescriptorSetWithTemplate' (deviceHandle (device)) (descriptorSet) (descriptorUpdateTemplate) (data')
+  pure $ ()
+
+
+-- | VkDescriptorUpdateTemplateEntry - Describes a single descriptor update
+-- of the descriptor update template
+--
+-- == Valid Usage
+--
+-- -   @dstBinding@ /must/ be a valid binding in the descriptor set layout
+--     implicitly specified when using a descriptor update template to
+--     update descriptors
+--
+-- -   @dstArrayElement@ and @descriptorCount@ /must/ be less than or equal
+--     to the number of array elements in the descriptor set binding
+--     implicitly specified when using a descriptor update template to
+--     update descriptors, and all applicable consecutive bindings, as
+--     described by
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive>
+--
+-- -   If @descriptor@ type is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
+--     @dstArrayElement@ /must/ be an integer multiple of @4@
+--
+-- -   If @descriptor@ type is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT',
+--     @descriptorCount@ /must/ be an integer multiple of @4@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @descriptorType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType',
+-- 'DescriptorUpdateTemplateCreateInfo'
+data DescriptorUpdateTemplateEntry = DescriptorUpdateTemplateEntry
+  { -- | @dstBinding@ is the descriptor binding to update when using this
+    -- descriptor update template.
+    dstBinding :: Word32
+  , -- | @dstArrayElement@ is the starting element in the array belonging to
+    -- @dstBinding@. If the descriptor binding identified by @srcBinding@ has a
+    -- descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- then @dstArrayElement@ specifies the starting byte offset to update.
+    dstArrayElement :: Word32
+  , -- | @descriptorCount@ is the number of descriptors to update. If
+    -- @descriptorCount@ is greater than the number of remaining array elements
+    -- in the destination binding, those affect consecutive bindings in a
+    -- manner similar to 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet'
+    -- above. If the descriptor binding identified by @dstBinding@ has a
+    -- descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- then @descriptorCount@ specifies the number of bytes to update and the
+    -- remaining array elements in the destination binding refer to the
+    -- remaining number of bytes in it.
+    descriptorCount :: Word32
+  , -- | @descriptorType@ is a
+    -- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType' specifying the type
+    -- of the descriptor.
+    descriptorType :: DescriptorType
+  , -- | @offset@ is the offset in bytes of the first binding in the raw data
+    -- structure.
+    offset :: Word64
+  , -- | @stride@ is the stride in bytes between two consecutive array elements
+    -- of the descriptor update informations in the raw data structure. The
+    -- actual pointer ptr for each array element j of update entry i is
+    -- computed using the following formula:
+    --
+    -- >     const char *ptr = (const char *)pData + pDescriptorUpdateEntries[i].offset + j * pDescriptorUpdateEntries[i].stride
+    --
+    -- The stride is useful in case the bindings are stored in structs along
+    -- with other data. If @descriptorType@ is
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- then the value of @stride@ is ignored and the stride is assumed to be
+    -- @1@, i.e. the descriptor update information for them is always specified
+    -- as a contiguous range.
+    stride :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show DescriptorUpdateTemplateEntry
+
+instance ToCStruct DescriptorUpdateTemplateEntry where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorUpdateTemplateEntry{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (dstBinding)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (dstArrayElement)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (descriptorCount)
+    poke ((p `plusPtr` 12 :: Ptr DescriptorType)) (descriptorType)
+    poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (offset))
+    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (stride))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr DescriptorType)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (zero))
+    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (zero))
+    f
+
+instance FromCStruct DescriptorUpdateTemplateEntry where
+  peekCStruct p = do
+    dstBinding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    dstArrayElement <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    descriptorCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    descriptorType <- peek @DescriptorType ((p `plusPtr` 12 :: Ptr DescriptorType))
+    offset <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))
+    stride <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
+    pure $ DescriptorUpdateTemplateEntry
+             dstBinding dstArrayElement descriptorCount descriptorType ((\(CSize a) -> a) offset) ((\(CSize a) -> a) stride)
+
+instance Storable DescriptorUpdateTemplateEntry where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DescriptorUpdateTemplateEntry where
+  zero = DescriptorUpdateTemplateEntry
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDescriptorUpdateTemplateCreateInfo - Structure specifying parameters
+-- of a newly created descriptor update template
+--
+-- == Valid Usage
+--
+-- -   If @templateType@ is
+--     'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET',
+--     @descriptorSetLayout@ /must/ be a valid
+--     'Vulkan.Core10.Handles.DescriptorSetLayout' handle
+--
+-- -   If @templateType@ is
+--     'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR',
+--     @pipelineBindPoint@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--
+-- -   If @templateType@ is
+--     'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR',
+--     @pipelineLayout@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineLayout' handle
+--
+-- -   If @templateType@ is
+--     'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR',
+--     @set@ /must/ be the unique set number in the pipeline layout that
+--     uses a descriptor set layout that was created with
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @pDescriptorUpdateEntries@ /must/ be a valid pointer to an array of
+--     @descriptorUpdateEntryCount@ valid 'DescriptorUpdateTemplateEntry'
+--     structures
+--
+-- -   @templateType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DescriptorUpdateTemplateType'
+--     value
+--
+-- -   @descriptorUpdateEntryCount@ /must/ be greater than @0@
+--
+-- -   Both of @descriptorSetLayout@, and @pipelineLayout@ that are valid
+--     handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DescriptorSetLayout',
+-- 'Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags.DescriptorUpdateTemplateCreateFlags',
+-- 'DescriptorUpdateTemplateEntry',
+-- 'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DescriptorUpdateTemplateType',
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
+-- 'Vulkan.Core10.Handles.PipelineLayout',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createDescriptorUpdateTemplate',
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR'
+data DescriptorUpdateTemplateCreateInfo = DescriptorUpdateTemplateCreateInfo
+  { -- | @flags@ is reserved for future use.
+    flags :: DescriptorUpdateTemplateCreateFlags
+  , -- | @pDescriptorUpdateEntries@ is a pointer to an array of
+    -- 'DescriptorUpdateTemplateEntry' structures describing the descriptors to
+    -- be updated by the descriptor update template.
+    descriptorUpdateEntries :: Vector DescriptorUpdateTemplateEntry
+  , -- | @templateType@ Specifies the type of the descriptor update template. If
+    -- set to
+    -- 'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET'
+    -- it /can/ only be used to update descriptor sets with a fixed
+    -- @descriptorSetLayout@. If set to
+    -- 'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR'
+    -- it /can/ only be used to push descriptor sets using the provided
+    -- @pipelineBindPoint@, @pipelineLayout@, and @set@ number.
+    templateType :: DescriptorUpdateTemplateType
+  , -- | @descriptorSetLayout@ is the descriptor set layout the parameter update
+    -- template will be used with. All descriptor sets which are going to be
+    -- updated through the newly created descriptor update template /must/ be
+    -- created with this layout. @descriptorSetLayout@ is the descriptor set
+    -- layout used to build the descriptor update template. All descriptor sets
+    -- which are going to be updated through the newly created descriptor
+    -- update template /must/ be created with a layout that matches (is the
+    -- same as, or defined identically to) this layout. This parameter is
+    -- ignored if @templateType@ is not
+    -- 'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET'.
+    descriptorSetLayout :: DescriptorSetLayout
+  , -- | @pipelineBindPoint@ is a
+    -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' indicating
+    -- whether the descriptors will be used by graphics pipelines or compute
+    -- pipelines. This parameter is ignored if @templateType@ is not
+    -- 'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR'
+    pipelineBindPoint :: PipelineBindPoint
+  , -- | @pipelineLayout@ is a 'Vulkan.Core10.Handles.PipelineLayout' object used
+    -- to program the bindings. This parameter is ignored if @templateType@ is
+    -- not
+    -- 'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR'
+    pipelineLayout :: PipelineLayout
+  , -- | @set@ is the set number of the descriptor set in the pipeline layout
+    -- that will be updated. This parameter is ignored if @templateType@ is not
+    -- 'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR'
+    set :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DescriptorUpdateTemplateCreateInfo
+
+instance ToCStruct DescriptorUpdateTemplateCreateInfo where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorUpdateTemplateCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorUpdateTemplateCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (descriptorUpdateEntries)) :: Word32))
+    pPDescriptorUpdateEntries' <- ContT $ allocaBytesAligned @DescriptorUpdateTemplateEntry ((Data.Vector.length (descriptorUpdateEntries)) * 32) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDescriptorUpdateEntries' `plusPtr` (32 * (i)) :: Ptr DescriptorUpdateTemplateEntry) (e) . ($ ())) (descriptorUpdateEntries)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorUpdateTemplateEntry))) (pPDescriptorUpdateEntries')
+    lift $ poke ((p `plusPtr` 32 :: Ptr DescriptorUpdateTemplateType)) (templateType)
+    lift $ poke ((p `plusPtr` 40 :: Ptr DescriptorSetLayout)) (descriptorSetLayout)
+    lift $ poke ((p `plusPtr` 48 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
+    lift $ poke ((p `plusPtr` 56 :: Ptr PipelineLayout)) (pipelineLayout)
+    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) (set)
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPDescriptorUpdateEntries' <- ContT $ allocaBytesAligned @DescriptorUpdateTemplateEntry ((Data.Vector.length (mempty)) * 32) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDescriptorUpdateEntries' `plusPtr` (32 * (i)) :: Ptr DescriptorUpdateTemplateEntry) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorUpdateTemplateEntry))) (pPDescriptorUpdateEntries')
+    lift $ poke ((p `plusPtr` 32 :: Ptr DescriptorUpdateTemplateType)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr DescriptorSetLayout)) (zero)
+    lift $ poke ((p `plusPtr` 48 :: Ptr PipelineBindPoint)) (zero)
+    lift $ poke ((p `plusPtr` 56 :: Ptr PipelineLayout)) (zero)
+    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance FromCStruct DescriptorUpdateTemplateCreateInfo where
+  peekCStruct p = do
+    flags <- peek @DescriptorUpdateTemplateCreateFlags ((p `plusPtr` 16 :: Ptr DescriptorUpdateTemplateCreateFlags))
+    descriptorUpdateEntryCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pDescriptorUpdateEntries <- peek @(Ptr DescriptorUpdateTemplateEntry) ((p `plusPtr` 24 :: Ptr (Ptr DescriptorUpdateTemplateEntry)))
+    pDescriptorUpdateEntries' <- generateM (fromIntegral descriptorUpdateEntryCount) (\i -> peekCStruct @DescriptorUpdateTemplateEntry ((pDescriptorUpdateEntries `advancePtrBytes` (32 * (i)) :: Ptr DescriptorUpdateTemplateEntry)))
+    templateType <- peek @DescriptorUpdateTemplateType ((p `plusPtr` 32 :: Ptr DescriptorUpdateTemplateType))
+    descriptorSetLayout <- peek @DescriptorSetLayout ((p `plusPtr` 40 :: Ptr DescriptorSetLayout))
+    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 48 :: Ptr PipelineBindPoint))
+    pipelineLayout <- peek @PipelineLayout ((p `plusPtr` 56 :: Ptr PipelineLayout))
+    set <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    pure $ DescriptorUpdateTemplateCreateInfo
+             flags pDescriptorUpdateEntries' templateType descriptorSetLayout pipelineBindPoint pipelineLayout set
+
+instance Zero DescriptorUpdateTemplateCreateInfo where
+  zero = DescriptorUpdateTemplateCreateInfo
+           zero
+           mempty
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template  ( DescriptorUpdateTemplateCreateInfo
+                                                                      , DescriptorUpdateTemplateEntry
+                                                                      ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DescriptorUpdateTemplateCreateInfo
+
+instance ToCStruct DescriptorUpdateTemplateCreateInfo
+instance Show DescriptorUpdateTemplateCreateInfo
+
+instance FromCStruct DescriptorUpdateTemplateCreateInfo
+
+
+data DescriptorUpdateTemplateEntry
+
+instance ToCStruct DescriptorUpdateTemplateEntry
+instance Show DescriptorUpdateTemplateEntry
+
+instance FromCStruct DescriptorUpdateTemplateEntry
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs
@@ -0,0 +1,930 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_device_group  ( getDeviceGroupPeerMemoryFeatures
+                                                        , cmdSetDeviceMask
+                                                        , cmdDispatchBase
+                                                        , pattern PIPELINE_CREATE_DISPATCH_BASE
+                                                        , MemoryAllocateFlagsInfo(..)
+                                                        , DeviceGroupRenderPassBeginInfo(..)
+                                                        , DeviceGroupCommandBufferBeginInfo(..)
+                                                        , DeviceGroupSubmitInfo(..)
+                                                        , DeviceGroupBindSparseInfo(..)
+                                                        , StructureType(..)
+                                                        , PipelineCreateFlagBits(..)
+                                                        , PipelineCreateFlags
+                                                        , DependencyFlagBits(..)
+                                                        , DependencyFlags
+                                                        , PeerMemoryFeatureFlagBits(..)
+                                                        , PeerMemoryFeatureFlags
+                                                        , MemoryAllocateFlagBits(..)
+                                                        , MemoryAllocateFlags
+                                                        ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDispatchBase))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetDeviceMask))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceGroupPeerMemoryFeatures))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(..))
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
+import Vulkan.Core10.CommandBufferBuilding (Rect2D)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(PIPELINE_CREATE_DISPATCH_BASE_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO))
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(..))
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(..))
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(..))
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(..))
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceGroupPeerMemoryFeatures
+  :: FunPtr (Ptr Device_T -> Word32 -> Word32 -> Word32 -> Ptr PeerMemoryFeatureFlags -> IO ()) -> Ptr Device_T -> Word32 -> Word32 -> Word32 -> Ptr PeerMemoryFeatureFlags -> IO ()
+
+-- | vkGetDeviceGroupPeerMemoryFeatures - Query supported peer memory
+-- features of a device
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @heapIndex@ is the index of the memory heap from which the memory is
+--     allocated.
+--
+-- -   @localDeviceIndex@ is the device index of the physical device that
+--     performs the memory access.
+--
+-- -   @remoteDeviceIndex@ is the device index of the physical device that
+--     the memory is allocated for.
+--
+-- -   @pPeerMemoryFeatures@ is a pointer to a
+--     'Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits.PeerMemoryFeatureFlags'
+--     bitmask indicating which types of memory accesses are supported for
+--     the combination of heap, local, and remote devices.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits.PeerMemoryFeatureFlags'
+getDeviceGroupPeerMemoryFeatures :: forall io . MonadIO io => Device -> ("heapIndex" ::: Word32) -> ("localDeviceIndex" ::: Word32) -> ("remoteDeviceIndex" ::: Word32) -> io (("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))
+getDeviceGroupPeerMemoryFeatures device heapIndex localDeviceIndex remoteDeviceIndex = liftIO . evalContT $ do
+  let vkGetDeviceGroupPeerMemoryFeaturesPtr = pVkGetDeviceGroupPeerMemoryFeatures (deviceCmds (device :: Device))
+  lift $ unless (vkGetDeviceGroupPeerMemoryFeaturesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceGroupPeerMemoryFeatures is null" Nothing Nothing
+  let vkGetDeviceGroupPeerMemoryFeatures' = mkVkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeaturesPtr
+  pPPeerMemoryFeatures <- ContT $ bracket (callocBytes @PeerMemoryFeatureFlags 4) free
+  lift $ vkGetDeviceGroupPeerMemoryFeatures' (deviceHandle (device)) (heapIndex) (localDeviceIndex) (remoteDeviceIndex) (pPPeerMemoryFeatures)
+  pPeerMemoryFeatures <- lift $ peek @PeerMemoryFeatureFlags pPPeerMemoryFeatures
+  pure $ (pPeerMemoryFeatures)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetDeviceMask
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> IO ()
+
+-- | vkCmdSetDeviceMask - Modify device mask of a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is command buffer whose current device mask is
+--     modified.
+--
+-- -   @deviceMask@ is the new value of the current device mask.
+--
+-- = Description
+--
+-- @deviceMask@ is used to filter out subsequent commands from executing on
+-- all physical devices whose bit indices are not set in the mask, except
+-- commands beginning a render pass instance, commands transitioning to the
+-- next subpass in the render pass instance, and commands ending a render
+-- pass instance, which always execute on the set of physical devices whose
+-- bit indices are included in the @deviceMask@ member of the
+-- 'DeviceGroupRenderPassBeginInfo' structure passed to the command
+-- beginning the corresponding render pass instance.
+--
+-- == Valid Usage
+--
+-- -   @deviceMask@ /must/ be a valid device mask value
+--
+-- -   @deviceMask@ /must/ not be zero
+--
+-- -   @deviceMask@ /must/ not include any set bits that were not in the
+--     'DeviceGroupCommandBufferBeginInfo'::@deviceMask@ value when the
+--     command buffer began recording
+--
+-- -   If 'cmdSetDeviceMask' is called inside a render pass instance,
+--     @deviceMask@ /must/ not include any set bits that were not in the
+--     'DeviceGroupRenderPassBeginInfo'::@deviceMask@ value when the render
+--     pass instance began recording
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, compute, or transfer
+--     operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Transfer                                                                                                              |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdSetDeviceMask :: forall io . MonadIO io => CommandBuffer -> ("deviceMask" ::: Word32) -> io ()
+cmdSetDeviceMask commandBuffer deviceMask = liftIO $ do
+  let vkCmdSetDeviceMaskPtr = pVkCmdSetDeviceMask (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdSetDeviceMaskPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDeviceMask is null" Nothing Nothing
+  let vkCmdSetDeviceMask' = mkVkCmdSetDeviceMask vkCmdSetDeviceMaskPtr
+  vkCmdSetDeviceMask' (commandBufferHandle (commandBuffer)) (deviceMask)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDispatchBase
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDispatchBase - Dispatch compute work items
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @baseGroupX@ is the start value for the X component of
+--     @WorkgroupId@.
+--
+-- -   @baseGroupY@ is the start value for the Y component of
+--     @WorkgroupId@.
+--
+-- -   @baseGroupZ@ is the start value for the Z component of
+--     @WorkgroupId@.
+--
+-- -   @groupCountX@ is the number of local workgroups to dispatch in the X
+--     dimension.
+--
+-- -   @groupCountY@ is the number of local workgroups to dispatch in the Y
+--     dimension.
+--
+-- -   @groupCountZ@ is the number of local workgroups to dispatch in the Z
+--     dimension.
+--
+-- = Description
+--
+-- When the command is executed, a global workgroup consisting of
+-- @groupCountX@ × @groupCountY@ × @groupCountZ@ local workgroups is
+-- assembled, with @WorkgroupId@ values ranging from [@baseGroup*@,
+-- @baseGroup*@ + @groupCount*@) in each component.
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDispatch' is equivalent to
+-- @vkCmdDispatchBase(0,0,0,groupCountX,groupCountY,groupCountZ)@.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   @baseGroupX@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
+--
+-- -   @baseGroupX@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
+--
+-- -   @baseGroupZ@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
+--
+-- -   @groupCountX@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
+--     minus @baseGroupX@
+--
+-- -   @groupCountY@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
+--     minus @baseGroupY@
+--
+-- -   @groupCountZ@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
+--     minus @baseGroupZ@
+--
+-- -   If any of @baseGroupX@, @baseGroupY@, or @baseGroupZ@ are not zero,
+--     then the bound compute pipeline /must/ have been created with the
+--     'PIPELINE_CREATE_DISPATCH_BASE' flag
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdDispatchBase :: forall io . MonadIO io => CommandBuffer -> ("baseGroupX" ::: Word32) -> ("baseGroupY" ::: Word32) -> ("baseGroupZ" ::: Word32) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> io ()
+cmdDispatchBase commandBuffer baseGroupX baseGroupY baseGroupZ groupCountX groupCountY groupCountZ = liftIO $ do
+  let vkCmdDispatchBasePtr = pVkCmdDispatchBase (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDispatchBasePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatchBase is null" Nothing Nothing
+  let vkCmdDispatchBase' = mkVkCmdDispatchBase vkCmdDispatchBasePtr
+  vkCmdDispatchBase' (commandBufferHandle (commandBuffer)) (baseGroupX) (baseGroupY) (baseGroupZ) (groupCountX) (groupCountY) (groupCountZ)
+  pure $ ()
+
+
+-- No documentation found for TopLevel "VK_PIPELINE_CREATE_DISPATCH_BASE"
+pattern PIPELINE_CREATE_DISPATCH_BASE = PIPELINE_CREATE_DISPATCH_BASE_BIT
+
+
+-- | VkMemoryAllocateFlagsInfo - Structure controlling how many instances of
+-- memory will be allocated
+--
+-- = Description
+--
+-- If
+-- 'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_MASK_BIT'
+-- is not set, the number of instances allocated depends on whether
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
+-- is set in the memory heap. If
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
+-- is set, then memory is allocated for every physical device in the
+-- logical device (as if @deviceMask@ has bits set for all device indices).
+-- If
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
+-- is not set, then a single instance of memory is allocated (as if
+-- @deviceMask@ is set to one).
+--
+-- On some implementations, allocations from a multi-instance heap /may/
+-- consume memory on all physical devices even if the @deviceMask@ excludes
+-- some devices. If
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties'::@subsetAllocation@
+-- is 'Vulkan.Core10.BaseType.TRUE', then memory is only consumed for the
+-- devices in the device mask.
+--
+-- Note
+--
+-- In practice, most allocations on a multi-instance heap will be allocated
+-- across all physical devices. Unicast allocation support is an optional
+-- optimization for a minority of allocations.
+--
+-- == Valid Usage
+--
+-- -   If
+--     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_MASK_BIT'
+--     is set, @deviceMask@ /must/ be a valid device mask
+--
+-- -   If
+--     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_MASK_BIT'
+--     is set, @deviceMask@ /must/ not be zero
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO'
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MemoryAllocateFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MemoryAllocateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data MemoryAllocateFlagsInfo = MemoryAllocateFlagsInfo
+  { -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MemoryAllocateFlagBits'
+    -- controlling the allocation.
+    flags :: MemoryAllocateFlags
+  , -- | @deviceMask@ is a mask of physical devices in the logical device,
+    -- indicating that memory /must/ be allocated on each device in the mask,
+    -- if
+    -- 'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_MASK_BIT'
+    -- is set in @flags@.
+    deviceMask :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show MemoryAllocateFlagsInfo
+
+instance ToCStruct MemoryAllocateFlagsInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryAllocateFlagsInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr MemoryAllocateFlags)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (deviceMask)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct MemoryAllocateFlagsInfo where
+  peekCStruct p = do
+    flags <- peek @MemoryAllocateFlags ((p `plusPtr` 16 :: Ptr MemoryAllocateFlags))
+    deviceMask <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pure $ MemoryAllocateFlagsInfo
+             flags deviceMask
+
+instance Storable MemoryAllocateFlagsInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryAllocateFlagsInfo where
+  zero = MemoryAllocateFlagsInfo
+           zero
+           zero
+
+
+-- | VkDeviceGroupRenderPassBeginInfo - Set the initial device mask and
+-- render areas for a render pass instance
+--
+-- = Description
+--
+-- The @deviceMask@ serves several purposes. It is an upper bound on the
+-- set of physical devices that /can/ be used during the render pass
+-- instance, and the initial device mask when the render pass instance
+-- begins. In addition, commands transitioning to the next subpass in the
+-- render pass instance and commands ending the render pass instance, and,
+-- accordingly render pass attachment load, store, and resolve operations
+-- and subpass dependencies corresponding to the render pass instance, are
+-- executed on the physical devices included in the device mask provided
+-- here.
+--
+-- If @deviceRenderAreaCount@ is not zero, then the elements of
+-- @pDeviceRenderAreas@ override the value of
+-- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderArea@,
+-- and provide a render area specific to each physical device. These render
+-- areas serve the same purpose as
+-- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderArea@,
+-- including controlling the region of attachments that are cleared by
+-- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' and that
+-- are resolved into resolve attachments.
+--
+-- If this structure is not present, the render pass instance’s device mask
+-- is the value of 'DeviceGroupCommandBufferBeginInfo'::@deviceMask@. If
+-- this structure is not present or if @deviceRenderAreaCount@ is zero,
+-- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderArea@
+-- is used for all physical devices.
+--
+-- == Valid Usage
+--
+-- -   @deviceMask@ /must/ be a valid device mask value
+--
+-- -   @deviceMask@ /must/ not be zero
+--
+-- -   @deviceMask@ /must/ be a subset of the command buffer’s initial
+--     device mask
+--
+-- -   @deviceRenderAreaCount@ /must/ either be zero or equal to the number
+--     of physical devices in the logical device
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO'
+--
+-- -   If @deviceRenderAreaCount@ is not @0@, @pDeviceRenderAreas@ /must/
+--     be a valid pointer to an array of @deviceRenderAreaCount@
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceGroupRenderPassBeginInfo = DeviceGroupRenderPassBeginInfo
+  { -- | @deviceMask@ is the device mask for the render pass instance.
+    deviceMask :: Word32
+  , -- | @pDeviceRenderAreas@ is a pointer to an array of
+    -- 'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures defining the
+    -- render area for each physical device.
+    deviceRenderAreas :: Vector Rect2D
+  }
+  deriving (Typeable)
+deriving instance Show DeviceGroupRenderPassBeginInfo
+
+instance ToCStruct DeviceGroupRenderPassBeginInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceGroupRenderPassBeginInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (deviceMask)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceRenderAreas)) :: Word32))
+    pPDeviceRenderAreas' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (deviceRenderAreas)) * 16) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDeviceRenderAreas' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (deviceRenderAreas)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Rect2D))) (pPDeviceRenderAreas')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    pPDeviceRenderAreas' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (mempty)) * 16) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDeviceRenderAreas' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Rect2D))) (pPDeviceRenderAreas')
+    lift $ f
+
+instance FromCStruct DeviceGroupRenderPassBeginInfo where
+  peekCStruct p = do
+    deviceMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    deviceRenderAreaCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pDeviceRenderAreas <- peek @(Ptr Rect2D) ((p `plusPtr` 24 :: Ptr (Ptr Rect2D)))
+    pDeviceRenderAreas' <- generateM (fromIntegral deviceRenderAreaCount) (\i -> peekCStruct @Rect2D ((pDeviceRenderAreas `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
+    pure $ DeviceGroupRenderPassBeginInfo
+             deviceMask pDeviceRenderAreas'
+
+instance Zero DeviceGroupRenderPassBeginInfo where
+  zero = DeviceGroupRenderPassBeginInfo
+           zero
+           mempty
+
+
+-- | VkDeviceGroupCommandBufferBeginInfo - Set the initial device mask for a
+-- command buffer
+--
+-- = Description
+--
+-- The initial device mask also acts as an upper bound on the set of
+-- devices that /can/ ever be in the device mask in the command buffer.
+--
+-- If this structure is not present, the initial value of a command
+-- buffer’s device mask is set to include all physical devices in the
+-- logical device when the command buffer begins recording.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceGroupCommandBufferBeginInfo = DeviceGroupCommandBufferBeginInfo
+  { -- | @deviceMask@ /must/ not be zero
+    deviceMask :: Word32 }
+  deriving (Typeable)
+deriving instance Show DeviceGroupCommandBufferBeginInfo
+
+instance ToCStruct DeviceGroupCommandBufferBeginInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceGroupCommandBufferBeginInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (deviceMask)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DeviceGroupCommandBufferBeginInfo where
+  peekCStruct p = do
+    deviceMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ DeviceGroupCommandBufferBeginInfo
+             deviceMask
+
+instance Storable DeviceGroupCommandBufferBeginInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceGroupCommandBufferBeginInfo where
+  zero = DeviceGroupCommandBufferBeginInfo
+           zero
+
+
+-- | VkDeviceGroupSubmitInfo - Structure indicating which physical devices
+-- execute semaphore operations and command buffers
+--
+-- = Description
+--
+-- If this structure is not present, semaphore operations and command
+-- buffers execute on device index zero.
+--
+-- == Valid Usage
+--
+-- -   @waitSemaphoreCount@ /must/ equal
+--     'Vulkan.Core10.Queue.SubmitInfo'::@waitSemaphoreCount@
+--
+-- -   @commandBufferCount@ /must/ equal
+--     'Vulkan.Core10.Queue.SubmitInfo'::@commandBufferCount@
+--
+-- -   @signalSemaphoreCount@ /must/ equal
+--     'Vulkan.Core10.Queue.SubmitInfo'::@signalSemaphoreCount@
+--
+-- -   All elements of @pWaitSemaphoreDeviceIndices@ and
+--     @pSignalSemaphoreDeviceIndices@ /must/ be valid device indices
+--
+-- -   All elements of @pCommandBufferDeviceMasks@ /must/ be valid device
+--     masks
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO'
+--
+-- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphoreDeviceIndices@
+--     /must/ be a valid pointer to an array of @waitSemaphoreCount@
+--     @uint32_t@ values
+--
+-- -   If @commandBufferCount@ is not @0@, @pCommandBufferDeviceMasks@
+--     /must/ be a valid pointer to an array of @commandBufferCount@
+--     @uint32_t@ values
+--
+-- -   If @signalSemaphoreCount@ is not @0@,
+--     @pSignalSemaphoreDeviceIndices@ /must/ be a valid pointer to an
+--     array of @signalSemaphoreCount@ @uint32_t@ values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceGroupSubmitInfo = DeviceGroupSubmitInfo
+  { -- | @pWaitSemaphoreDeviceIndices@ is a pointer to an array of
+    -- @waitSemaphoreCount@ device indices indicating which physical device
+    -- executes the semaphore wait operation in the corresponding element of
+    -- 'Vulkan.Core10.Queue.SubmitInfo'::@pWaitSemaphores@.
+    waitSemaphoreDeviceIndices :: Vector Word32
+  , -- | @pCommandBufferDeviceMasks@ is a pointer to an array of
+    -- @commandBufferCount@ device masks indicating which physical devices
+    -- execute the command buffer in the corresponding element of
+    -- 'Vulkan.Core10.Queue.SubmitInfo'::@pCommandBuffers@. A physical device
+    -- executes the command buffer if the corresponding bit is set in the mask.
+    commandBufferDeviceMasks :: Vector Word32
+  , -- | @pSignalSemaphoreDeviceIndices@ is a pointer to an array of
+    -- @signalSemaphoreCount@ device indices indicating which physical device
+    -- executes the semaphore signal operation in the corresponding element of
+    -- 'Vulkan.Core10.Queue.SubmitInfo'::@pSignalSemaphores@.
+    signalSemaphoreDeviceIndices :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show DeviceGroupSubmitInfo
+
+instance ToCStruct DeviceGroupSubmitInfo where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceGroupSubmitInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (waitSemaphoreDeviceIndices)) :: Word32))
+    pPWaitSemaphoreDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (waitSemaphoreDeviceIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphoreDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (waitSemaphoreDeviceIndices)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPWaitSemaphoreDeviceIndices')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (commandBufferDeviceMasks)) :: Word32))
+    pPCommandBufferDeviceMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (commandBufferDeviceMasks)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBufferDeviceMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (commandBufferDeviceMasks)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPCommandBufferDeviceMasks')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (signalSemaphoreDeviceIndices)) :: Word32))
+    pPSignalSemaphoreDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (signalSemaphoreDeviceIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphoreDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (signalSemaphoreDeviceIndices)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Word32))) (pPSignalSemaphoreDeviceIndices')
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPWaitSemaphoreDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphoreDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPWaitSemaphoreDeviceIndices')
+    pPCommandBufferDeviceMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBufferDeviceMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPCommandBufferDeviceMasks')
+    pPSignalSemaphoreDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphoreDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Word32))) (pPSignalSemaphoreDeviceIndices')
+    lift $ f
+
+instance FromCStruct DeviceGroupSubmitInfo where
+  peekCStruct p = do
+    waitSemaphoreCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pWaitSemaphoreDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
+    pWaitSemaphoreDeviceIndices' <- generateM (fromIntegral waitSemaphoreCount) (\i -> peek @Word32 ((pWaitSemaphoreDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    commandBufferCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pCommandBufferDeviceMasks <- peek @(Ptr Word32) ((p `plusPtr` 40 :: Ptr (Ptr Word32)))
+    pCommandBufferDeviceMasks' <- generateM (fromIntegral commandBufferCount) (\i -> peek @Word32 ((pCommandBufferDeviceMasks `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    signalSemaphoreCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pSignalSemaphoreDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 56 :: Ptr (Ptr Word32)))
+    pSignalSemaphoreDeviceIndices' <- generateM (fromIntegral signalSemaphoreCount) (\i -> peek @Word32 ((pSignalSemaphoreDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ DeviceGroupSubmitInfo
+             pWaitSemaphoreDeviceIndices' pCommandBufferDeviceMasks' pSignalSemaphoreDeviceIndices'
+
+instance Zero DeviceGroupSubmitInfo where
+  zero = DeviceGroupSubmitInfo
+           mempty
+           mempty
+           mempty
+
+
+-- | VkDeviceGroupBindSparseInfo - Structure indicating which instances are
+-- bound
+--
+-- = Description
+--
+-- These device indices apply to all buffer and image memory binds included
+-- in the batch pointing to this structure. The semaphore waits and signals
+-- for the batch are executed only by the physical device specified by the
+-- @resourceDeviceIndex@.
+--
+-- If this structure is not present, @resourceDeviceIndex@ and
+-- @memoryDeviceIndex@ are assumed to be zero.
+--
+-- == Valid Usage
+--
+-- -   @resourceDeviceIndex@ and @memoryDeviceIndex@ /must/ both be valid
+--     device indices
+--
+-- -   Each memory allocation bound in this batch /must/ have allocated an
+--     instance for @memoryDeviceIndex@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceGroupBindSparseInfo = DeviceGroupBindSparseInfo
+  { -- | @resourceDeviceIndex@ is a device index indicating which instance of the
+    -- resource is bound.
+    resourceDeviceIndex :: Word32
+  , -- | @memoryDeviceIndex@ is a device index indicating which instance of the
+    -- memory the resource instance is bound to.
+    memoryDeviceIndex :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DeviceGroupBindSparseInfo
+
+instance ToCStruct DeviceGroupBindSparseInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceGroupBindSparseInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (resourceDeviceIndex)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (memoryDeviceIndex)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DeviceGroupBindSparseInfo where
+  peekCStruct p = do
+    resourceDeviceIndex <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    memoryDeviceIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pure $ DeviceGroupBindSparseInfo
+             resourceDeviceIndex memoryDeviceIndex
+
+instance Storable DeviceGroupBindSparseInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceGroupBindSparseInfo where
+  zero = DeviceGroupBindSparseInfo
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs-boot
@@ -0,0 +1,50 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_device_group  ( DeviceGroupBindSparseInfo
+                                                        , DeviceGroupCommandBufferBeginInfo
+                                                        , DeviceGroupRenderPassBeginInfo
+                                                        , DeviceGroupSubmitInfo
+                                                        , MemoryAllocateFlagsInfo
+                                                        ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DeviceGroupBindSparseInfo
+
+instance ToCStruct DeviceGroupBindSparseInfo
+instance Show DeviceGroupBindSparseInfo
+
+instance FromCStruct DeviceGroupBindSparseInfo
+
+
+data DeviceGroupCommandBufferBeginInfo
+
+instance ToCStruct DeviceGroupCommandBufferBeginInfo
+instance Show DeviceGroupCommandBufferBeginInfo
+
+instance FromCStruct DeviceGroupCommandBufferBeginInfo
+
+
+data DeviceGroupRenderPassBeginInfo
+
+instance ToCStruct DeviceGroupRenderPassBeginInfo
+instance Show DeviceGroupRenderPassBeginInfo
+
+instance FromCStruct DeviceGroupRenderPassBeginInfo
+
+
+data DeviceGroupSubmitInfo
+
+instance ToCStruct DeviceGroupSubmitInfo
+instance Show DeviceGroupSubmitInfo
+
+instance FromCStruct DeviceGroupSubmitInfo
+
+
+data MemoryAllocateFlagsInfo
+
+instance ToCStruct MemoryAllocateFlagsInfo
+instance Show MemoryAllocateFlagsInfo
+
+instance FromCStruct MemoryAllocateFlagsInfo
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs
@@ -0,0 +1,305 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2  ( BindBufferMemoryDeviceGroupInfo(..)
+                                                                              , BindImageMemoryDeviceGroupInfo(..)
+                                                                              , StructureType(..)
+                                                                              , ImageCreateFlagBits(..)
+                                                                              , ImageCreateFlags
+                                                                              ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.CommandBufferBuilding (Rect2D)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkBindBufferMemoryDeviceGroupInfo - Structure specifying device within a
+-- group to bind to
+--
+-- = Members
+--
+-- If the @pNext@ list of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindBufferMemoryInfo'
+-- includes a 'BindBufferMemoryDeviceGroupInfo' structure, then that
+-- structure determines how memory is bound to buffers across multiple
+-- devices in a device group.
+--
+-- = Description
+--
+-- The 'BindBufferMemoryDeviceGroupInfo' structure is defined as:
+--
+-- -   @sType@ is the type of this structure.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @deviceIndexCount@ is the number of elements in @pDeviceIndices@.
+--
+-- -   @pDeviceIndices@ is a pointer to an array of device indices.
+--
+-- If @deviceIndexCount@ is greater than zero, then on device index i the
+-- buffer is attached to the instance of @memory@ on the physical device
+-- with device index pDeviceIndices[i].
+--
+-- If @deviceIndexCount@ is zero and @memory@ comes from a memory heap with
+-- the
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
+-- bit set, then it is as if @pDeviceIndices@ contains consecutive indices
+-- from zero to the number of physical devices in the logical device, minus
+-- one. In other words, by default each physical device attaches to its own
+-- instance of @memory@.
+--
+-- If @deviceIndexCount@ is zero and @memory@ comes from a memory heap
+-- without the
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
+-- bit set, then it is as if @pDeviceIndices@ contains an array of zeros.
+-- In other words, by default each physical device attaches to instance
+-- zero.
+--
+-- == Valid Usage
+--
+-- -   @deviceIndexCount@ /must/ either be zero or equal to the number of
+--     physical devices in the logical device
+--
+-- -   All elements of @pDeviceIndices@ /must/ be valid device indices
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO'
+--
+-- -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid
+--     pointer to an array of @deviceIndexCount@ @uint32_t@ values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data BindBufferMemoryDeviceGroupInfo = BindBufferMemoryDeviceGroupInfo
+  { -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "pDeviceIndices"
+    deviceIndices :: Vector Word32 }
+  deriving (Typeable)
+deriving instance Show BindBufferMemoryDeviceGroupInfo
+
+instance ToCStruct BindBufferMemoryDeviceGroupInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindBufferMemoryDeviceGroupInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceIndices)) :: Word32))
+    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (deviceIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (deviceIndices)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceIndices')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceIndices')
+    lift $ f
+
+instance FromCStruct BindBufferMemoryDeviceGroupInfo where
+  peekCStruct p = do
+    deviceIndexCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
+    pDeviceIndices' <- generateM (fromIntegral deviceIndexCount) (\i -> peek @Word32 ((pDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ BindBufferMemoryDeviceGroupInfo
+             pDeviceIndices'
+
+instance Zero BindBufferMemoryDeviceGroupInfo where
+  zero = BindBufferMemoryDeviceGroupInfo
+           mempty
+
+
+-- | VkBindImageMemoryDeviceGroupInfo - Structure specifying device within a
+-- group to bind to
+--
+-- = Members
+--
+-- If the @pNext@ list of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2.BindImageMemoryInfo'
+-- includes a 'BindImageMemoryDeviceGroupInfo' structure, then that
+-- structure determines how memory is bound to images across multiple
+-- devices in a device group.
+--
+-- = Description
+--
+-- The 'BindImageMemoryDeviceGroupInfo' structure is defined as:
+--
+-- -   @sType@ is the type of this structure.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @deviceIndexCount@ is the number of elements in @pDeviceIndices@.
+--
+-- -   @pDeviceIndices@ is a pointer to an array of device indices.
+--
+-- -   @splitInstanceBindRegionCount@ is the number of elements in
+--     @pSplitInstanceBindRegions@.
+--
+-- -   @pSplitInstanceBindRegions@ is a pointer to an array of
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures describing
+--     which regions of the image are attached to each instance of memory.
+--
+-- If @deviceIndexCount@ is greater than zero, then on device index i
+-- @image@ is attached to the instance of the memory on the physical device
+-- with device index pDeviceIndices[i].
+--
+-- Let N be the number of physical devices in the logical device. If
+-- @splitInstanceBindRegionCount@ is greater than zero, then
+-- @pSplitInstanceBindRegions@ is an array of N2 rectangles, where the
+-- image region specified by the rectangle at element i*N+j in resource
+-- instance i is bound to the memory instance j. The blocks of the memory
+-- that are bound to each sparse image block region use an offset in
+-- memory, relative to @memoryOffset@, computed as if the whole image were
+-- being bound to a contiguous range of memory. In other words,
+-- horizontally adjacent image blocks use consecutive blocks of memory,
+-- vertically adjacent image blocks are separated by the number of bytes
+-- per block multiplied by the width in blocks of @image@, and the block at
+-- (0,0) corresponds to memory starting at @memoryOffset@.
+--
+-- If @splitInstanceBindRegionCount@ and @deviceIndexCount@ are zero and
+-- the memory comes from a memory heap with the
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
+-- bit set, then it is as if @pDeviceIndices@ contains consecutive indices
+-- from zero to the number of physical devices in the logical device, minus
+-- one. In other words, by default each physical device attaches to its own
+-- instance of the memory.
+--
+-- If @splitInstanceBindRegionCount@ and @deviceIndexCount@ are zero and
+-- the memory comes from a memory heap without the
+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_MULTI_INSTANCE_BIT'
+-- bit set, then it is as if @pDeviceIndices@ contains an array of zeros.
+-- In other words, by default each physical device attaches to instance
+-- zero.
+--
+-- == Valid Usage
+--
+-- -   At least one of @deviceIndexCount@ and
+--     @splitInstanceBindRegionCount@ /must/ be zero
+--
+-- -   @deviceIndexCount@ /must/ either be zero or equal to the number of
+--     physical devices in the logical device
+--
+-- -   All elements of @pDeviceIndices@ /must/ be valid device indices
+--
+-- -   @splitInstanceBindRegionCount@ /must/ either be zero or equal to the
+--     number of physical devices in the logical device squared
+--
+-- -   Elements of @pSplitInstanceBindRegions@ that correspond to the same
+--     instance of an image /must/ not overlap
+--
+-- -   The @offset.x@ member of any element of @pSplitInstanceBindRegions@
+--     /must/ be a multiple of the sparse image block width
+--     ('Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'::@imageGranularity.width@)
+--     of all non-metadata aspects of the image
+--
+-- -   The @offset.y@ member of any element of @pSplitInstanceBindRegions@
+--     /must/ be a multiple of the sparse image block height
+--     ('Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'::@imageGranularity.height@)
+--     of all non-metadata aspects of the image
+--
+-- -   The @extent.width@ member of any element of
+--     @pSplitInstanceBindRegions@ /must/ either be a multiple of the
+--     sparse image block width of all non-metadata aspects of the image,
+--     or else @extent.width@ + @offset.x@ /must/ equal the width of the
+--     image subresource
+--
+-- -   The @extent.height@ member of any element of
+--     @pSplitInstanceBindRegions@ /must/ either be a multiple of the
+--     sparse image block height of all non-metadata aspects of the image,
+--     or else @extent.height@ + @offset.y@ /must/ equal the width of the
+--     image subresource
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO'
+--
+-- -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid
+--     pointer to an array of @deviceIndexCount@ @uint32_t@ values
+--
+-- -   If @splitInstanceBindRegionCount@ is not @0@,
+--     @pSplitInstanceBindRegions@ /must/ be a valid pointer to an array of
+--     @splitInstanceBindRegionCount@
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data BindImageMemoryDeviceGroupInfo = BindImageMemoryDeviceGroupInfo
+  { -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "pDeviceIndices"
+    deviceIndices :: Vector Word32
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "pSplitInstanceBindRegions"
+    splitInstanceBindRegions :: Vector Rect2D
+  }
+  deriving (Typeable)
+deriving instance Show BindImageMemoryDeviceGroupInfo
+
+instance ToCStruct BindImageMemoryDeviceGroupInfo where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindImageMemoryDeviceGroupInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceIndices)) :: Word32))
+    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (deviceIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (deviceIndices)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceIndices')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (splitInstanceBindRegions)) :: Word32))
+    pPSplitInstanceBindRegions' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (splitInstanceBindRegions)) * 16) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSplitInstanceBindRegions' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (splitInstanceBindRegions)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Rect2D))) (pPSplitInstanceBindRegions')
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceIndices')
+    pPSplitInstanceBindRegions' <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (mempty)) * 16) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSplitInstanceBindRegions' `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Rect2D))) (pPSplitInstanceBindRegions')
+    lift $ f
+
+instance FromCStruct BindImageMemoryDeviceGroupInfo where
+  peekCStruct p = do
+    deviceIndexCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
+    pDeviceIndices' <- generateM (fromIntegral deviceIndexCount) (\i -> peek @Word32 ((pDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    splitInstanceBindRegionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pSplitInstanceBindRegions <- peek @(Ptr Rect2D) ((p `plusPtr` 40 :: Ptr (Ptr Rect2D)))
+    pSplitInstanceBindRegions' <- generateM (fromIntegral splitInstanceBindRegionCount) (\i -> peekCStruct @Rect2D ((pSplitInstanceBindRegions `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
+    pure $ BindImageMemoryDeviceGroupInfo
+             pDeviceIndices' pSplitInstanceBindRegions'
+
+instance Zero BindImageMemoryDeviceGroupInfo where
+  zero = BindImageMemoryDeviceGroupInfo
+           mempty
+           mempty
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2  ( BindBufferMemoryDeviceGroupInfo
+                                                                              , BindImageMemoryDeviceGroupInfo
+                                                                              ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data BindBufferMemoryDeviceGroupInfo
+
+instance ToCStruct BindBufferMemoryDeviceGroupInfo
+instance Show BindBufferMemoryDeviceGroupInfo
+
+instance FromCStruct BindBufferMemoryDeviceGroupInfo
+
+
+data BindImageMemoryDeviceGroupInfo
+
+instance ToCStruct BindImageMemoryDeviceGroupInfo
+instance Show BindImageMemoryDeviceGroupInfo
+
+instance FromCStruct BindImageMemoryDeviceGroupInfo
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs
@@ -0,0 +1,323 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation  ( enumeratePhysicalDeviceGroups
+                                                                 , PhysicalDeviceGroupProperties(..)
+                                                                 , DeviceGroupDeviceCreateInfo(..)
+                                                                 , StructureType(..)
+                                                                 , MemoryHeapFlagBits(..)
+                                                                 , MemoryHeapFlags
+                                                                 , MAX_DEVICE_GROUP_SIZE
+                                                                 , pattern MAX_DEVICE_GROUP_SIZE
+                                                                 ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkEnumeratePhysicalDeviceGroups))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.APIConstants (MAX_DEVICE_GROUP_SIZE)
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.APIConstants (pattern MAX_DEVICE_GROUP_SIZE)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Core10.APIConstants (MAX_DEVICE_GROUP_SIZE)
+import Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlagBits(..))
+import Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+import Vulkan.Core10.APIConstants (pattern MAX_DEVICE_GROUP_SIZE)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkEnumeratePhysicalDeviceGroups
+  :: FunPtr (Ptr Instance_T -> Ptr Word32 -> Ptr PhysicalDeviceGroupProperties -> IO Result) -> Ptr Instance_T -> Ptr Word32 -> Ptr PhysicalDeviceGroupProperties -> IO Result
+
+-- | vkEnumeratePhysicalDeviceGroups - Enumerates groups of physical devices
+-- that can be used to create a single logical device
+--
+-- = Parameters
+--
+-- -   @instance@ is a handle to a Vulkan instance previously created with
+--     'Vulkan.Core10.DeviceInitialization.createInstance'.
+--
+-- -   @pPhysicalDeviceGroupCount@ is a pointer to an integer related to
+--     the number of device groups available or queried, as described
+--     below.
+--
+-- -   @pPhysicalDeviceGroupProperties@ is either @NULL@ or a pointer to an
+--     array of 'PhysicalDeviceGroupProperties' structures.
+--
+-- = Description
+--
+-- If @pPhysicalDeviceGroupProperties@ is @NULL@, then the number of device
+-- groups available is returned in @pPhysicalDeviceGroupCount@. Otherwise,
+-- @pPhysicalDeviceGroupCount@ /must/ point to a variable set by the user
+-- to the number of elements in the @pPhysicalDeviceGroupProperties@ array,
+-- and on return the variable is overwritten with the number of structures
+-- actually written to @pPhysicalDeviceGroupProperties@. If
+-- @pPhysicalDeviceGroupCount@ is less than the number of device groups
+-- available, at most @pPhysicalDeviceGroupCount@ structures will be
+-- written. If @pPhysicalDeviceGroupCount@ is smaller than the number of
+-- device groups available, 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be
+-- returned instead of 'Vulkan.Core10.Enums.Result.SUCCESS', to indicate
+-- that not all the available device groups were returned.
+--
+-- Every physical device /must/ be in exactly one device group.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pPhysicalDeviceGroupCount@ /must/ be a valid pointer to a
+--     @uint32_t@ value
+--
+-- -   If the value referenced by @pPhysicalDeviceGroupCount@ is not @0@,
+--     and @pPhysicalDeviceGroupProperties@ is not @NULL@,
+--     @pPhysicalDeviceGroupProperties@ /must/ be a valid pointer to an
+--     array of @pPhysicalDeviceGroupCount@ 'PhysicalDeviceGroupProperties'
+--     structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Instance', 'PhysicalDeviceGroupProperties'
+enumeratePhysicalDeviceGroups :: forall io . MonadIO io => Instance -> io (Result, ("physicalDeviceGroupProperties" ::: Vector PhysicalDeviceGroupProperties))
+enumeratePhysicalDeviceGroups instance' = liftIO . evalContT $ do
+  let vkEnumeratePhysicalDeviceGroupsPtr = pVkEnumeratePhysicalDeviceGroups (instanceCmds (instance' :: Instance))
+  lift $ unless (vkEnumeratePhysicalDeviceGroupsPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEnumeratePhysicalDeviceGroups is null" Nothing Nothing
+  let vkEnumeratePhysicalDeviceGroups' = mkVkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroupsPtr
+  let instance'' = instanceHandle (instance')
+  pPPhysicalDeviceGroupCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkEnumeratePhysicalDeviceGroups' instance'' (pPPhysicalDeviceGroupCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPhysicalDeviceGroupCount <- lift $ peek @Word32 pPPhysicalDeviceGroupCount
+  pPPhysicalDeviceGroupProperties <- ContT $ bracket (callocBytes @PhysicalDeviceGroupProperties ((fromIntegral (pPhysicalDeviceGroupCount)) * 288)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPPhysicalDeviceGroupProperties `advancePtrBytes` (i * 288) :: Ptr PhysicalDeviceGroupProperties) . ($ ())) [0..(fromIntegral (pPhysicalDeviceGroupCount)) - 1]
+  r' <- lift $ vkEnumeratePhysicalDeviceGroups' instance'' (pPPhysicalDeviceGroupCount) ((pPPhysicalDeviceGroupProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPhysicalDeviceGroupCount' <- lift $ peek @Word32 pPPhysicalDeviceGroupCount
+  pPhysicalDeviceGroupProperties' <- lift $ generateM (fromIntegral (pPhysicalDeviceGroupCount')) (\i -> peekCStruct @PhysicalDeviceGroupProperties (((pPPhysicalDeviceGroupProperties) `advancePtrBytes` (288 * (i)) :: Ptr PhysicalDeviceGroupProperties)))
+  pure $ ((r'), pPhysicalDeviceGroupProperties')
+
+
+-- | VkPhysicalDeviceGroupProperties - Structure specifying physical device
+-- group properties
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'enumeratePhysicalDeviceGroups',
+-- 'Vulkan.Extensions.VK_KHR_device_group_creation.enumeratePhysicalDeviceGroupsKHR'
+data PhysicalDeviceGroupProperties = PhysicalDeviceGroupProperties
+  { -- | @physicalDeviceCount@ is the number of physical devices in the group.
+    physicalDeviceCount :: Word32
+  , -- | @physicalDevices@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_DEVICE_GROUP_SIZE'
+    -- 'Vulkan.Core10.Handles.PhysicalDevice' handles representing all physical
+    -- devices in the group. The first @physicalDeviceCount@ elements of the
+    -- array will be valid.
+    physicalDevices :: Vector (Ptr PhysicalDevice_T)
+  , -- | @subsetAllocation@ specifies whether logical devices created from the
+    -- group support allocating device memory on a subset of devices, via the
+    -- @deviceMask@ member of the
+    -- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'.
+    -- If this is 'Vulkan.Core10.BaseType.FALSE', then all device memory
+    -- allocations are made across all physical devices in the group. If
+    -- @physicalDeviceCount@ is @1@, then @subsetAllocation@ /must/ be
+    -- 'Vulkan.Core10.BaseType.FALSE'.
+    subsetAllocation :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceGroupProperties
+
+instance ToCStruct PhysicalDeviceGroupProperties where
+  withCStruct x f = allocaBytesAligned 288 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceGroupProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (physicalDeviceCount)
+    unless ((Data.Vector.length $ (physicalDevices)) <= MAX_DEVICE_GROUP_SIZE) $
+      throwIO $ IOError Nothing InvalidArgument "" "physicalDevices is too long, a maximum of MAX_DEVICE_GROUP_SIZE elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE (Ptr PhysicalDevice_T))))) `plusPtr` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)) (e)) (physicalDevices)
+    poke ((p `plusPtr` 280 :: Ptr Bool32)) (boolToBool32 (subsetAllocation))
+    f
+  cStructSize = 288
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    unless ((Data.Vector.length $ (mempty)) <= MAX_DEVICE_GROUP_SIZE) $
+      throwIO $ IOError Nothing InvalidArgument "" "physicalDevices is too long, a maximum of MAX_DEVICE_GROUP_SIZE elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE (Ptr PhysicalDevice_T))))) `plusPtr` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)) (e)) (mempty)
+    poke ((p `plusPtr` 280 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceGroupProperties where
+  peekCStruct p = do
+    physicalDeviceCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    physicalDevices <- generateM (MAX_DEVICE_GROUP_SIZE) (\i -> peek @(Ptr PhysicalDevice_T) (((lowerArrayPtr @(Ptr PhysicalDevice_T) ((p `plusPtr` 24 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE (Ptr PhysicalDevice_T))))) `advancePtrBytes` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T))))
+    subsetAllocation <- peek @Bool32 ((p `plusPtr` 280 :: Ptr Bool32))
+    pure $ PhysicalDeviceGroupProperties
+             physicalDeviceCount physicalDevices (bool32ToBool subsetAllocation)
+
+instance Storable PhysicalDeviceGroupProperties where
+  sizeOf ~_ = 288
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceGroupProperties where
+  zero = PhysicalDeviceGroupProperties
+           zero
+           mempty
+           zero
+
+
+-- | VkDeviceGroupDeviceCreateInfo - Create a logical device from multiple
+-- physical devices
+--
+-- = Description
+--
+-- The elements of the @pPhysicalDevices@ array are an ordered list of the
+-- physical devices that the logical device represents. These /must/ be a
+-- subset of a single device group, and need not be in the same order as
+-- they were enumerated. The order of the physical devices in the
+-- @pPhysicalDevices@ array determines the /device index/ of each physical
+-- device, with element i being assigned a device index of i. Certain
+-- commands and structures refer to one or more physical devices by using
+-- device indices or /device masks/ formed using device indices.
+--
+-- A logical device created without using 'DeviceGroupDeviceCreateInfo', or
+-- with @physicalDeviceCount@ equal to zero, is equivalent to a
+-- @physicalDeviceCount@ of one and @pPhysicalDevices@ pointing to the
+-- @physicalDevice@ parameter to 'Vulkan.Core10.Device.createDevice'. In
+-- particular, the device index of that physical device is zero.
+--
+-- == Valid Usage
+--
+-- -   Each element of @pPhysicalDevices@ /must/ be unique
+--
+-- -   All elements of @pPhysicalDevices@ /must/ be in the same device
+--     group as enumerated by 'enumeratePhysicalDeviceGroups'
+--
+-- -   If @physicalDeviceCount@ is not @0@, the @physicalDevice@ parameter
+--     of 'Vulkan.Core10.Device.createDevice' /must/ be an element of
+--     @pPhysicalDevices@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO'
+--
+-- -   If @physicalDeviceCount@ is not @0@, @pPhysicalDevices@ /must/ be a
+--     valid pointer to an array of @physicalDeviceCount@ valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handles
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceGroupDeviceCreateInfo = DeviceGroupDeviceCreateInfo
+  { -- | @pPhysicalDevices@ is a pointer to an array of physical device handles
+    -- belonging to the same device group.
+    physicalDevices :: Vector (Ptr PhysicalDevice_T) }
+  deriving (Typeable)
+deriving instance Show DeviceGroupDeviceCreateInfo
+
+instance ToCStruct DeviceGroupDeviceCreateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceGroupDeviceCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (physicalDevices)) :: Word32))
+    pPPhysicalDevices' <- ContT $ allocaBytesAligned @(Ptr PhysicalDevice_T) ((Data.Vector.length (physicalDevices)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPPhysicalDevices' `plusPtr` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)) (e)) (physicalDevices)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (Ptr PhysicalDevice_T)))) (pPPhysicalDevices')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPPhysicalDevices' <- ContT $ allocaBytesAligned @(Ptr PhysicalDevice_T) ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPPhysicalDevices' `plusPtr` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (Ptr PhysicalDevice_T)))) (pPPhysicalDevices')
+    lift $ f
+
+instance FromCStruct DeviceGroupDeviceCreateInfo where
+  peekCStruct p = do
+    physicalDeviceCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pPhysicalDevices <- peek @(Ptr (Ptr PhysicalDevice_T)) ((p `plusPtr` 24 :: Ptr (Ptr (Ptr PhysicalDevice_T))))
+    pPhysicalDevices' <- generateM (fromIntegral physicalDeviceCount) (\i -> peek @(Ptr PhysicalDevice_T) ((pPhysicalDevices `advancePtrBytes` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T))))
+    pure $ DeviceGroupDeviceCreateInfo
+             pPhysicalDevices'
+
+instance Zero DeviceGroupDeviceCreateInfo where
+  zero = DeviceGroupDeviceCreateInfo
+           mempty
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation  ( DeviceGroupDeviceCreateInfo
+                                                                 , PhysicalDeviceGroupProperties
+                                                                 ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DeviceGroupDeviceCreateInfo
+
+instance ToCStruct DeviceGroupDeviceCreateInfo
+instance Show DeviceGroupDeviceCreateInfo
+
+instance FromCStruct DeviceGroupDeviceCreateInfo
+
+
+data PhysicalDeviceGroupProperties
+
+instance ToCStruct PhysicalDeviceGroupProperties
+instance Show PhysicalDeviceGroupProperties
+
+instance FromCStruct PhysicalDeviceGroupProperties
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs
@@ -0,0 +1,90 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_fence  ( ExportFenceCreateInfo(..)
+                                                          , StructureType(..)
+                                                          , FenceImportFlagBits(..)
+                                                          , FenceImportFlags
+                                                          ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO))
+import Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlagBits(..))
+import Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkExportFenceCreateInfo - Structure specifying handle types that can be
+-- exported from a fence
+--
+-- == Valid Usage
+--
+-- -   The bits in @handleTypes@ /must/ be supported and compatible, as
+--     reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO'
+--
+-- -   @handleTypes@ /must/ be a valid combination of
+--     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExportFenceCreateInfo = ExportFenceCreateInfo
+  { -- | @handleTypes@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+    -- specifying one or more fence handle types the application /can/ export
+    -- from the resulting fence. The application /can/ request multiple handle
+    -- types for the same fence.
+    handleTypes :: ExternalFenceHandleTypeFlags }
+  deriving (Typeable)
+deriving instance Show ExportFenceCreateInfo
+
+instance ToCStruct ExportFenceCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExportFenceCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlags)) (handleTypes)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct ExportFenceCreateInfo where
+  peekCStruct p = do
+    handleTypes <- peek @ExternalFenceHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlags))
+    pure $ ExportFenceCreateInfo
+             handleTypes
+
+instance Storable ExportFenceCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExportFenceCreateInfo where
+  zero = ExportFenceCreateInfo
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_fence  (ExportFenceCreateInfo) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExportFenceCreateInfo
+
+instance ToCStruct ExportFenceCreateInfo
+instance Show ExportFenceCreateInfo
+
+instance FromCStruct ExportFenceCreateInfo
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs
@@ -0,0 +1,233 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities  ( getPhysicalDeviceExternalFenceProperties
+                                                                       , PhysicalDeviceExternalFenceInfo(..)
+                                                                       , ExternalFenceProperties(..)
+                                                                       , StructureType(..)
+                                                                       , ExternalFenceHandleTypeFlagBits(..)
+                                                                       , ExternalFenceHandleTypeFlags
+                                                                       , ExternalFenceFeatureFlagBits(..)
+                                                                       , ExternalFenceFeatureFlags
+                                                                       ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlags)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceExternalFenceProperties))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO))
+import Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlagBits(..))
+import Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlags)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits(..))
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceExternalFenceProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceExternalFenceInfo -> Ptr ExternalFenceProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceExternalFenceInfo -> Ptr ExternalFenceProperties -> IO ()
+
+-- | vkGetPhysicalDeviceExternalFenceProperties - Function for querying
+-- external fence handle capabilities.
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     fence capabilities.
+--
+-- -   @pExternalFenceInfo@ is a pointer to a
+--     'PhysicalDeviceExternalFenceInfo' structure describing the
+--     parameters that would be consumed by
+--     'Vulkan.Core10.Fence.createFence'.
+--
+-- -   @pExternalFenceProperties@ is a pointer to a
+--     'ExternalFenceProperties' structure in which capabilities are
+--     returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'ExternalFenceProperties', 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'PhysicalDeviceExternalFenceInfo'
+getPhysicalDeviceExternalFenceProperties :: forall io . MonadIO io => PhysicalDevice -> PhysicalDeviceExternalFenceInfo -> io (ExternalFenceProperties)
+getPhysicalDeviceExternalFenceProperties physicalDevice externalFenceInfo = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceExternalFencePropertiesPtr = pVkGetPhysicalDeviceExternalFenceProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceExternalFencePropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceExternalFenceProperties is null" Nothing Nothing
+  let vkGetPhysicalDeviceExternalFenceProperties' = mkVkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFencePropertiesPtr
+  pExternalFenceInfo <- ContT $ withCStruct (externalFenceInfo)
+  pPExternalFenceProperties <- ContT (withZeroCStruct @ExternalFenceProperties)
+  lift $ vkGetPhysicalDeviceExternalFenceProperties' (physicalDeviceHandle (physicalDevice)) pExternalFenceInfo (pPExternalFenceProperties)
+  pExternalFenceProperties <- lift $ peekCStruct @ExternalFenceProperties pPExternalFenceProperties
+  pure $ (pExternalFenceProperties)
+
+
+-- | VkPhysicalDeviceExternalFenceInfo - Structure specifying fence creation
+-- parameters.
+--
+-- = Description
+--
+-- Note
+--
+-- Handles of type
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT'
+-- generated by the implementation may represent either Linux Sync Files or
+-- Android Fences at the implementation’s discretion. Applications /should/
+-- only use operations defined for both types of file descriptors, unless
+-- they know via means external to Vulkan the type of the file descriptor,
+-- or are prepared to deal with the system-defined operation failures
+-- resulting from using the wrong type.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceExternalFenceProperties',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_capabilities.getPhysicalDeviceExternalFencePropertiesKHR'
+data PhysicalDeviceExternalFenceInfo = PhysicalDeviceExternalFenceInfo
+  { -- | @handleType@ /must/ be a valid
+    -- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+    -- value
+    handleType :: ExternalFenceHandleTypeFlagBits }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceExternalFenceInfo
+
+instance ToCStruct PhysicalDeviceExternalFenceInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceExternalFenceInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlagBits)) (handleType)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlagBits)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceExternalFenceInfo where
+  peekCStruct p = do
+    handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlagBits))
+    pure $ PhysicalDeviceExternalFenceInfo
+             handleType
+
+instance Storable PhysicalDeviceExternalFenceInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceExternalFenceInfo where
+  zero = PhysicalDeviceExternalFenceInfo
+           zero
+
+
+-- | VkExternalFenceProperties - Structure describing supported external
+-- fence handle features
+--
+-- = Description
+--
+-- If @handleType@ is not supported by the implementation, then
+-- 'ExternalFenceProperties'::@externalFenceFeatures@ will be set to zero.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits.ExternalFenceFeatureFlags',
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceExternalFenceProperties',
+-- 'Vulkan.Extensions.VK_KHR_external_fence_capabilities.getPhysicalDeviceExternalFencePropertiesKHR'
+data ExternalFenceProperties = ExternalFenceProperties
+  { -- | @exportFromImportedHandleTypes@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+    -- indicating which types of imported handle @handleType@ /can/ be exported
+    -- from.
+    exportFromImportedHandleTypes :: ExternalFenceHandleTypeFlags
+  , -- | @compatibleHandleTypes@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+    -- specifying handle types which /can/ be specified at the same time as
+    -- @handleType@ when creating a fence.
+    compatibleHandleTypes :: ExternalFenceHandleTypeFlags
+  , -- | @externalFenceFeatures@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits.ExternalFenceFeatureFlagBits'
+    -- indicating the features of @handleType@.
+    externalFenceFeatures :: ExternalFenceFeatureFlags
+  }
+  deriving (Typeable)
+deriving instance Show ExternalFenceProperties
+
+instance ToCStruct ExternalFenceProperties where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExternalFenceProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlags)) (exportFromImportedHandleTypes)
+    poke ((p `plusPtr` 20 :: Ptr ExternalFenceHandleTypeFlags)) (compatibleHandleTypes)
+    poke ((p `plusPtr` 24 :: Ptr ExternalFenceFeatureFlags)) (externalFenceFeatures)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlags)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr ExternalFenceHandleTypeFlags)) (zero)
+    f
+
+instance FromCStruct ExternalFenceProperties where
+  peekCStruct p = do
+    exportFromImportedHandleTypes <- peek @ExternalFenceHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalFenceHandleTypeFlags))
+    compatibleHandleTypes <- peek @ExternalFenceHandleTypeFlags ((p `plusPtr` 20 :: Ptr ExternalFenceHandleTypeFlags))
+    externalFenceFeatures <- peek @ExternalFenceFeatureFlags ((p `plusPtr` 24 :: Ptr ExternalFenceFeatureFlags))
+    pure $ ExternalFenceProperties
+             exportFromImportedHandleTypes compatibleHandleTypes externalFenceFeatures
+
+instance Storable ExternalFenceProperties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExternalFenceProperties where
+  zero = ExternalFenceProperties
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities  ( ExternalFenceProperties
+                                                                       , PhysicalDeviceExternalFenceInfo
+                                                                       ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExternalFenceProperties
+
+instance ToCStruct ExternalFenceProperties
+instance Show ExternalFenceProperties
+
+instance FromCStruct ExternalFenceProperties
+
+
+data PhysicalDeviceExternalFenceInfo
+
+instance ToCStruct PhysicalDeviceExternalFenceInfo
+instance Show PhysicalDeviceExternalFenceInfo
+
+instance FromCStruct PhysicalDeviceExternalFenceInfo
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs
@@ -0,0 +1,209 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_memory  ( ExternalMemoryImageCreateInfo(..)
+                                                           , ExternalMemoryBufferCreateInfo(..)
+                                                           , ExportMemoryAllocateInfo(..)
+                                                           , StructureType(..)
+                                                           , Result(..)
+                                                           , QUEUE_FAMILY_EXTERNAL
+                                                           , pattern QUEUE_FAMILY_EXTERNAL
+                                                           ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO))
+import Vulkan.Core10.APIConstants (QUEUE_FAMILY_EXTERNAL)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+import Vulkan.Core10.APIConstants (pattern QUEUE_FAMILY_EXTERNAL)
+-- | VkExternalMemoryImageCreateInfo - Specify that an image may be backed by
+-- external memory
+--
+-- = Members
+--
+-- Note
+--
+-- A 'ExternalMemoryImageCreateInfo' structure must be included in the
+-- creation parameters for an image that will be bound to memory that is
+-- either exported or imported.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExternalMemoryImageCreateInfo = ExternalMemoryImageCreateInfo
+  { -- | @handleTypes@ /must/ not be @0@
+    handleTypes :: ExternalMemoryHandleTypeFlags }
+  deriving (Typeable)
+deriving instance Show ExternalMemoryImageCreateInfo
+
+instance ToCStruct ExternalMemoryImageCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExternalMemoryImageCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags)) (handleTypes)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags)) (zero)
+    f
+
+instance FromCStruct ExternalMemoryImageCreateInfo where
+  peekCStruct p = do
+    handleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags))
+    pure $ ExternalMemoryImageCreateInfo
+             handleTypes
+
+instance Storable ExternalMemoryImageCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExternalMemoryImageCreateInfo where
+  zero = ExternalMemoryImageCreateInfo
+           zero
+
+
+-- | VkExternalMemoryBufferCreateInfo - Specify that a buffer may be backed
+-- by external memory
+--
+-- = Members
+--
+-- Note
+--
+-- A 'ExternalMemoryBufferCreateInfo' structure must be included in the
+-- creation parameters for a buffer that will be bound to memory that is
+-- either exported or imported.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExternalMemoryBufferCreateInfo = ExternalMemoryBufferCreateInfo
+  { -- | @handleTypes@ /must/ be a valid combination of
+    -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+    -- values
+    handleTypes :: ExternalMemoryHandleTypeFlags }
+  deriving (Typeable)
+deriving instance Show ExternalMemoryBufferCreateInfo
+
+instance ToCStruct ExternalMemoryBufferCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExternalMemoryBufferCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags)) (handleTypes)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct ExternalMemoryBufferCreateInfo where
+  peekCStruct p = do
+    handleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags))
+    pure $ ExternalMemoryBufferCreateInfo
+             handleTypes
+
+instance Storable ExternalMemoryBufferCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExternalMemoryBufferCreateInfo where
+  zero = ExternalMemoryBufferCreateInfo
+           zero
+
+
+-- | VkExportMemoryAllocateInfo - Specify exportable handle types for a
+-- device memory object
+--
+-- == Valid Usage
+--
+-- -   The bits in @handleTypes@ /must/ be supported and compatible, as
+--     reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO'
+--
+-- -   @handleTypes@ /must/ be a valid combination of
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExportMemoryAllocateInfo = ExportMemoryAllocateInfo
+  { -- | @handleTypes@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+    -- specifying one or more memory handle types the application /can/ export
+    -- from the resulting allocation. The application /can/ request multiple
+    -- handle types for the same allocation.
+    handleTypes :: ExternalMemoryHandleTypeFlags }
+  deriving (Typeable)
+deriving instance Show ExportMemoryAllocateInfo
+
+instance ToCStruct ExportMemoryAllocateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExportMemoryAllocateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags)) (handleTypes)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct ExportMemoryAllocateInfo where
+  peekCStruct p = do
+    handleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlags))
+    pure $ ExportMemoryAllocateInfo
+             handleTypes
+
+instance Storable ExportMemoryAllocateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExportMemoryAllocateInfo where
+  zero = ExportMemoryAllocateInfo
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_memory  ( ExportMemoryAllocateInfo
+                                                           , ExternalMemoryBufferCreateInfo
+                                                           , ExternalMemoryImageCreateInfo
+                                                           ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExportMemoryAllocateInfo
+
+instance ToCStruct ExportMemoryAllocateInfo
+instance Show ExportMemoryAllocateInfo
+
+instance FromCStruct ExportMemoryAllocateInfo
+
+
+data ExternalMemoryBufferCreateInfo
+
+instance ToCStruct ExternalMemoryBufferCreateInfo
+instance Show ExternalMemoryBufferCreateInfo
+
+instance FromCStruct ExternalMemoryBufferCreateInfo
+
+
+data ExternalMemoryImageCreateInfo
+
+instance ToCStruct ExternalMemoryImageCreateInfo
+instance Show ExternalMemoryImageCreateInfo
+
+instance FromCStruct ExternalMemoryImageCreateInfo
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs
@@ -0,0 +1,570 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities  ( getPhysicalDeviceExternalBufferProperties
+                                                                        , ExternalMemoryProperties(..)
+                                                                        , PhysicalDeviceExternalImageFormatInfo(..)
+                                                                        , ExternalImageFormatProperties(..)
+                                                                        , PhysicalDeviceExternalBufferInfo(..)
+                                                                        , ExternalBufferProperties(..)
+                                                                        , PhysicalDeviceIDProperties(..)
+                                                                        , StructureType(..)
+                                                                        , ExternalMemoryHandleTypeFlagBits(..)
+                                                                        , ExternalMemoryHandleTypeFlags
+                                                                        , ExternalMemoryFeatureFlagBits(..)
+                                                                        , ExternalMemoryFeatureFlags
+                                                                        , LUID_SIZE
+                                                                        , pattern LUID_SIZE
+                                                                        ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word8)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Utils (peekByteStringFromSizedVectorPtr)
+import Vulkan.CStruct.Utils (pokeFixedLengthByteString)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
+import Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceExternalBufferProperties))
+import Vulkan.Core10.APIConstants (LUID_SIZE)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Core10.APIConstants (UUID_SIZE)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES))
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlagBits(..))
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(..))
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.Core10.APIConstants (LUID_SIZE)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+import Vulkan.Core10.APIConstants (pattern LUID_SIZE)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceExternalBufferProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceExternalBufferInfo -> Ptr ExternalBufferProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceExternalBufferInfo -> Ptr ExternalBufferProperties -> IO ()
+
+-- | vkGetPhysicalDeviceExternalBufferProperties - Query external handle
+-- types supported by buffers
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     buffer capabilities.
+--
+-- -   @pExternalBufferInfo@ is a pointer to a
+--     'PhysicalDeviceExternalBufferInfo' structure describing the
+--     parameters that would be consumed by
+--     'Vulkan.Core10.Buffer.createBuffer'.
+--
+-- -   @pExternalBufferProperties@ is a pointer to a
+--     'ExternalBufferProperties' structure in which capabilities are
+--     returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'ExternalBufferProperties', 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'PhysicalDeviceExternalBufferInfo'
+getPhysicalDeviceExternalBufferProperties :: forall io . MonadIO io => PhysicalDevice -> PhysicalDeviceExternalBufferInfo -> io (ExternalBufferProperties)
+getPhysicalDeviceExternalBufferProperties physicalDevice externalBufferInfo = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceExternalBufferPropertiesPtr = pVkGetPhysicalDeviceExternalBufferProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceExternalBufferPropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceExternalBufferProperties is null" Nothing Nothing
+  let vkGetPhysicalDeviceExternalBufferProperties' = mkVkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferPropertiesPtr
+  pExternalBufferInfo <- ContT $ withCStruct (externalBufferInfo)
+  pPExternalBufferProperties <- ContT (withZeroCStruct @ExternalBufferProperties)
+  lift $ vkGetPhysicalDeviceExternalBufferProperties' (physicalDeviceHandle (physicalDevice)) pExternalBufferInfo (pPExternalBufferProperties)
+  pExternalBufferProperties <- lift $ peekCStruct @ExternalBufferProperties pPExternalBufferProperties
+  pure $ (pExternalBufferProperties)
+
+
+-- | VkExternalMemoryProperties - Structure specifying external memory handle
+-- type capabilities
+--
+-- = Description
+--
+-- @compatibleHandleTypes@ /must/ include at least @handleType@. Inclusion
+-- of a handle type in @compatibleHandleTypes@ does not imply the values
+-- returned in
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2'
+-- will be the same when
+-- 'PhysicalDeviceExternalImageFormatInfo'::@handleType@ is set to that
+-- type. The application is responsible for querying the capabilities of
+-- all handle types intended for concurrent use in a single image and
+-- intersecting them to obtain the compatible set of capabilities.
+--
+-- = See Also
+--
+-- 'ExternalBufferProperties', 'ExternalImageFormatProperties',
+-- 'Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits.ExternalMemoryFeatureFlags',
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlags'
+data ExternalMemoryProperties = ExternalMemoryProperties
+  { -- | @externalMemoryFeatures@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits.ExternalMemoryFeatureFlagBits'
+    -- specifying the features of @handleType@.
+    externalMemoryFeatures :: ExternalMemoryFeatureFlags
+  , -- | @exportFromImportedHandleTypes@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+    -- specifying which types of imported handle @handleType@ /can/ be exported
+    -- from.
+    exportFromImportedHandleTypes :: ExternalMemoryHandleTypeFlags
+  , -- | @compatibleHandleTypes@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+    -- specifying handle types which /can/ be specified at the same time as
+    -- @handleType@ when creating an image compatible with external memory.
+    compatibleHandleTypes :: ExternalMemoryHandleTypeFlags
+  }
+  deriving (Typeable)
+deriving instance Show ExternalMemoryProperties
+
+instance ToCStruct ExternalMemoryProperties where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExternalMemoryProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr ExternalMemoryFeatureFlags)) (externalMemoryFeatures)
+    poke ((p `plusPtr` 4 :: Ptr ExternalMemoryHandleTypeFlags)) (exportFromImportedHandleTypes)
+    poke ((p `plusPtr` 8 :: Ptr ExternalMemoryHandleTypeFlags)) (compatibleHandleTypes)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr ExternalMemoryFeatureFlags)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr ExternalMemoryHandleTypeFlags)) (zero)
+    f
+
+instance FromCStruct ExternalMemoryProperties where
+  peekCStruct p = do
+    externalMemoryFeatures <- peek @ExternalMemoryFeatureFlags ((p `plusPtr` 0 :: Ptr ExternalMemoryFeatureFlags))
+    exportFromImportedHandleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 4 :: Ptr ExternalMemoryHandleTypeFlags))
+    compatibleHandleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 8 :: Ptr ExternalMemoryHandleTypeFlags))
+    pure $ ExternalMemoryProperties
+             externalMemoryFeatures exportFromImportedHandleTypes compatibleHandleTypes
+
+instance Storable ExternalMemoryProperties where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExternalMemoryProperties where
+  zero = ExternalMemoryProperties
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceExternalImageFormatInfo - Structure specifying external
+-- image creation parameters
+--
+-- = Description
+--
+-- If @handleType@ is 0,
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+-- will behave as if 'PhysicalDeviceExternalImageFormatInfo' was not
+-- present, and 'ExternalImageFormatProperties' will be ignored.
+--
+-- If @handleType@ is not compatible with the @format@, @type@, @tiling@,
+-- @usage@, and @flags@ specified in
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
+-- then
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+-- returns 'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO'
+--
+-- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceExternalImageFormatInfo = PhysicalDeviceExternalImageFormatInfo
+  { -- | @handleType@ is a
+    -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+    -- value specifying the memory handle type that will be used with the
+    -- memory associated with the image.
+    handleType :: ExternalMemoryHandleTypeFlagBits }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceExternalImageFormatInfo
+
+instance ToCStruct PhysicalDeviceExternalImageFormatInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceExternalImageFormatInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct PhysicalDeviceExternalImageFormatInfo where
+  peekCStruct p = do
+    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits))
+    pure $ PhysicalDeviceExternalImageFormatInfo
+             handleType
+
+instance Storable PhysicalDeviceExternalImageFormatInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceExternalImageFormatInfo where
+  zero = PhysicalDeviceExternalImageFormatInfo
+           zero
+
+
+-- | VkExternalImageFormatProperties - Structure specifying supported
+-- external handle properties
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'ExternalMemoryProperties',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExternalImageFormatProperties = ExternalImageFormatProperties
+  { -- | @externalMemoryProperties@ is a 'ExternalMemoryProperties' structure
+    -- specifying various capabilities of the external handle type when used
+    -- with the specified image creation parameters.
+    externalMemoryProperties :: ExternalMemoryProperties }
+  deriving (Typeable)
+deriving instance Show ExternalImageFormatProperties
+
+instance ToCStruct ExternalImageFormatProperties where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExternalImageFormatProperties{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties)) (externalMemoryProperties) . ($ ())
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct ExternalImageFormatProperties where
+  peekCStruct p = do
+    externalMemoryProperties <- peekCStruct @ExternalMemoryProperties ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties))
+    pure $ ExternalImageFormatProperties
+             externalMemoryProperties
+
+instance Zero ExternalImageFormatProperties where
+  zero = ExternalImageFormatProperties
+           zero
+
+
+-- | VkPhysicalDeviceExternalBufferInfo - Structure specifying buffer
+-- creation parameters
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlags',
+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlags',
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceExternalBufferProperties',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferPropertiesKHR'
+data PhysicalDeviceExternalBufferInfo = PhysicalDeviceExternalBufferInfo
+  { -- | @flags@ /must/ be a valid combination of
+    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlagBits' values
+    flags :: BufferCreateFlags
+  , -- | @usage@ /must/ not be @0@
+    usage :: BufferUsageFlags
+  , -- | @handleType@ /must/ be a valid
+    -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+    -- value
+    handleType :: ExternalMemoryHandleTypeFlagBits
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceExternalBufferInfo
+
+instance ToCStruct PhysicalDeviceExternalBufferInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceExternalBufferInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr BufferCreateFlags)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr BufferUsageFlags)) (usage)
+    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr BufferUsageFlags)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceExternalBufferInfo where
+  peekCStruct p = do
+    flags <- peek @BufferCreateFlags ((p `plusPtr` 16 :: Ptr BufferCreateFlags))
+    usage <- peek @BufferUsageFlags ((p `plusPtr` 20 :: Ptr BufferUsageFlags))
+    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits))
+    pure $ PhysicalDeviceExternalBufferInfo
+             flags usage handleType
+
+instance Storable PhysicalDeviceExternalBufferInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceExternalBufferInfo where
+  zero = PhysicalDeviceExternalBufferInfo
+           zero
+           zero
+           zero
+
+
+-- | VkExternalBufferProperties - Structure specifying supported external
+-- handle capabilities
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'ExternalMemoryProperties',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceExternalBufferProperties',
+-- 'Vulkan.Extensions.VK_KHR_external_memory_capabilities.getPhysicalDeviceExternalBufferPropertiesKHR'
+data ExternalBufferProperties = ExternalBufferProperties
+  { -- | @externalMemoryProperties@ is a 'ExternalMemoryProperties' structure
+    -- specifying various capabilities of the external handle type when used
+    -- with the specified buffer creation parameters.
+    externalMemoryProperties :: ExternalMemoryProperties }
+  deriving (Typeable)
+deriving instance Show ExternalBufferProperties
+
+instance ToCStruct ExternalBufferProperties where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExternalBufferProperties{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties)) (externalMemoryProperties) . ($ ())
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct ExternalBufferProperties where
+  peekCStruct p = do
+    externalMemoryProperties <- peekCStruct @ExternalMemoryProperties ((p `plusPtr` 16 :: Ptr ExternalMemoryProperties))
+    pure $ ExternalBufferProperties
+             externalMemoryProperties
+
+instance Zero ExternalBufferProperties where
+  zero = ExternalBufferProperties
+           zero
+
+
+-- | VkPhysicalDeviceIDProperties - Structure specifying IDs related to the
+-- physical device
+--
+-- = Description
+--
+-- -   @deviceUUID@ is an array of 'Vulkan.Core10.APIConstants.UUID_SIZE'
+--     @uint8_t@ values representing a universally unique identifier for
+--     the device.
+--
+-- -   @driverUUID@ is an array of 'Vulkan.Core10.APIConstants.UUID_SIZE'
+--     @uint8_t@ values representing a universally unique identifier for
+--     the driver build in use by the device.
+--
+-- -   @deviceLUID@ is an array of 'Vulkan.Core10.APIConstants.LUID_SIZE'
+--     @uint8_t@ values representing a locally unique identifier for the
+--     device.
+--
+-- -   @deviceNodeMask@ is a @uint32_t@ bitfield identifying the node
+--     within a linked device adapter corresponding to the device.
+--
+-- -   @deviceLUIDValid@ is a boolean value that will be
+--     'Vulkan.Core10.BaseType.TRUE' if @deviceLUID@ contains a valid LUID
+--     and @deviceNodeMask@ contains a valid node mask, and
+--     'Vulkan.Core10.BaseType.FALSE' if they do not.
+--
+-- @deviceUUID@ /must/ be immutable for a given device across instances,
+-- processes, driver APIs, driver versions, and system reboots.
+--
+-- Applications /can/ compare the @driverUUID@ value across instance and
+-- process boundaries, and /can/ make similar queries in external APIs to
+-- determine whether they are capable of sharing memory objects and
+-- resources using them with the device.
+--
+-- @deviceUUID@ and\/or @driverUUID@ /must/ be used to determine whether a
+-- particular external object can be shared between driver components,
+-- where such a restriction exists as defined in the compatibility table
+-- for the particular object type:
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility External memory handle types compatibility>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility External semaphore handle types compatibility>
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility External fence handle types compatibility>
+--
+-- If @deviceLUIDValid@ is 'Vulkan.Core10.BaseType.FALSE', the values of
+-- @deviceLUID@ and @deviceNodeMask@ are undefined. If @deviceLUIDValid@ is
+-- 'Vulkan.Core10.BaseType.TRUE' and Vulkan is running on the Windows
+-- operating system, the contents of @deviceLUID@ /can/ be cast to an
+-- @LUID@ object and /must/ be equal to the locally unique identifier of a
+-- @IDXGIAdapter1@ object that corresponds to @physicalDevice@. If
+-- @deviceLUIDValid@ is 'Vulkan.Core10.BaseType.TRUE', @deviceNodeMask@
+-- /must/ contain exactly one bit. If Vulkan is running on an operating
+-- system that supports the Direct3D 12 API and @physicalDevice@
+-- corresponds to an individual device in a linked device adapter,
+-- @deviceNodeMask@ identifies the Direct3D 12 node corresponding to
+-- @physicalDevice@. Otherwise, @deviceNodeMask@ /must/ be @1@.
+--
+-- Note
+--
+-- Although they have identical descriptions,
+-- 'PhysicalDeviceIDProperties'::@deviceUUID@ may differ from
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'::@pipelineCacheUUID@.
+-- The former is intended to identify and correlate devices across API and
+-- driver boundaries, while the latter is used to identify a compatible
+-- device and driver combination to use when serializing and de-serializing
+-- pipeline state.
+--
+-- Note
+--
+-- While 'PhysicalDeviceIDProperties'::@deviceUUID@ is specified to remain
+-- consistent across driver versions and system reboots, it is not intended
+-- to be usable as a serializable persistent identifier for a device. It
+-- may change when a device is physically added to, removed from, or moved
+-- to a different connector in a system while that system is powered down.
+-- Further, there is no reasonable way to verify with conformance testing
+-- that a given device retains the same UUID in a given system across all
+-- driver versions supported in that system. While implementations should
+-- make every effort to report consistent device UUIDs across driver
+-- versions, applications should avoid relying on the persistence of this
+-- value for uses other than identifying compatible devices for external
+-- object sharing purposes.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceIDProperties = PhysicalDeviceIDProperties
+  { -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "deviceUUID"
+    deviceUUID :: ByteString
+  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "driverUUID"
+    driverUUID :: ByteString
+  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "deviceLUID"
+    deviceLUID :: ByteString
+  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "deviceNodeMask"
+    deviceNodeMask :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "deviceLUIDValid"
+    deviceLUIDValid :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceIDProperties
+
+instance ToCStruct PhysicalDeviceIDProperties where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceIDProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pokeFixedLengthByteString ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8))) (deviceUUID)
+    pokeFixedLengthByteString ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8))) (driverUUID)
+    pokeFixedLengthByteString ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8))) (deviceLUID)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (deviceNodeMask)
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (deviceLUIDValid))
+    f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pokeFixedLengthByteString ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
+    pokeFixedLengthByteString ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
+    pokeFixedLengthByteString ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8))) (mempty)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceIDProperties where
+  peekCStruct p = do
+    deviceUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8)))
+    driverUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8)))
+    deviceLUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8)))
+    deviceNodeMask <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    deviceLUIDValid <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
+    pure $ PhysicalDeviceIDProperties
+             deviceUUID driverUUID deviceLUID deviceNodeMask (bool32ToBool deviceLUIDValid)
+
+instance Storable PhysicalDeviceIDProperties where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceIDProperties where
+  zero = PhysicalDeviceIDProperties
+           mempty
+           mempty
+           mempty
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs-boot
@@ -0,0 +1,59 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities  ( ExternalBufferProperties
+                                                                        , ExternalImageFormatProperties
+                                                                        , ExternalMemoryProperties
+                                                                        , PhysicalDeviceExternalBufferInfo
+                                                                        , PhysicalDeviceExternalImageFormatInfo
+                                                                        , PhysicalDeviceIDProperties
+                                                                        ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExternalBufferProperties
+
+instance ToCStruct ExternalBufferProperties
+instance Show ExternalBufferProperties
+
+instance FromCStruct ExternalBufferProperties
+
+
+data ExternalImageFormatProperties
+
+instance ToCStruct ExternalImageFormatProperties
+instance Show ExternalImageFormatProperties
+
+instance FromCStruct ExternalImageFormatProperties
+
+
+data ExternalMemoryProperties
+
+instance ToCStruct ExternalMemoryProperties
+instance Show ExternalMemoryProperties
+
+instance FromCStruct ExternalMemoryProperties
+
+
+data PhysicalDeviceExternalBufferInfo
+
+instance ToCStruct PhysicalDeviceExternalBufferInfo
+instance Show PhysicalDeviceExternalBufferInfo
+
+instance FromCStruct PhysicalDeviceExternalBufferInfo
+
+
+data PhysicalDeviceExternalImageFormatInfo
+
+instance ToCStruct PhysicalDeviceExternalImageFormatInfo
+instance Show PhysicalDeviceExternalImageFormatInfo
+
+instance FromCStruct PhysicalDeviceExternalImageFormatInfo
+
+
+data PhysicalDeviceIDProperties
+
+instance ToCStruct PhysicalDeviceIDProperties
+instance Show PhysicalDeviceIDProperties
+
+instance FromCStruct PhysicalDeviceIDProperties
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs
@@ -0,0 +1,90 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore  ( ExportSemaphoreCreateInfo(..)
+                                                              , StructureType(..)
+                                                              , SemaphoreImportFlagBits(..)
+                                                              , SemaphoreImportFlags
+                                                              ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO))
+import Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlagBits(..))
+import Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkExportSemaphoreCreateInfo - Structure specifying handle types that can
+-- be exported from a semaphore
+--
+-- == Valid Usage
+--
+-- -   The bits in @handleTypes@ /must/ be supported and compatible, as
+--     reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO'
+--
+-- -   @handleTypes@ /must/ be a valid combination of
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExportSemaphoreCreateInfo = ExportSemaphoreCreateInfo
+  { -- | @handleTypes@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+    -- specifying one or more semaphore handle types the application /can/
+    -- export from the resulting semaphore. The application /can/ request
+    -- multiple handle types for the same semaphore.
+    handleTypes :: ExternalSemaphoreHandleTypeFlags }
+  deriving (Typeable)
+deriving instance Show ExportSemaphoreCreateInfo
+
+instance ToCStruct ExportSemaphoreCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExportSemaphoreCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlags)) (handleTypes)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct ExportSemaphoreCreateInfo where
+  peekCStruct p = do
+    handleTypes <- peek @ExternalSemaphoreHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlags))
+    pure $ ExportSemaphoreCreateInfo
+             handleTypes
+
+instance Storable ExportSemaphoreCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExportSemaphoreCreateInfo where
+  zero = ExportSemaphoreCreateInfo
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore  (ExportSemaphoreCreateInfo) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExportSemaphoreCreateInfo
+
+instance ToCStruct ExportSemaphoreCreateInfo
+instance Show ExportSemaphoreCreateInfo
+
+instance FromCStruct ExportSemaphoreCreateInfo
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs
@@ -0,0 +1,258 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities  ( getPhysicalDeviceExternalSemaphoreProperties
+                                                                           , PhysicalDeviceExternalSemaphoreInfo(..)
+                                                                           , ExternalSemaphoreProperties(..)
+                                                                           , StructureType(..)
+                                                                           , ExternalSemaphoreHandleTypeFlagBits(..)
+                                                                           , ExternalSemaphoreHandleTypeFlags
+                                                                           , ExternalSemaphoreFeatureFlagBits(..)
+                                                                           , ExternalSemaphoreFeatureFlags
+                                                                           ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlags)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceExternalSemaphoreProperties))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreTypeCreateInfo)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO))
+import Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlagBits(..))
+import Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlags)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(..))
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceExternalSemaphoreProperties
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceExternalSemaphoreInfo a) -> Ptr ExternalSemaphoreProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceExternalSemaphoreInfo a) -> Ptr ExternalSemaphoreProperties -> IO ()
+
+-- | vkGetPhysicalDeviceExternalSemaphoreProperties - Function for querying
+-- external semaphore handle capabilities.
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     semaphore capabilities.
+--
+-- -   @pExternalSemaphoreInfo@ is a pointer to a
+--     'PhysicalDeviceExternalSemaphoreInfo' structure describing the
+--     parameters that would be consumed by
+--     'Vulkan.Core10.QueueSemaphore.createSemaphore'.
+--
+-- -   @pExternalSemaphoreProperties@ is a pointer to a
+--     'ExternalSemaphoreProperties' structure in which capabilities are
+--     returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'ExternalSemaphoreProperties', 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'PhysicalDeviceExternalSemaphoreInfo'
+getPhysicalDeviceExternalSemaphoreProperties :: forall a io . (Extendss PhysicalDeviceExternalSemaphoreInfo a, PokeChain a, MonadIO io) => PhysicalDevice -> PhysicalDeviceExternalSemaphoreInfo a -> io (ExternalSemaphoreProperties)
+getPhysicalDeviceExternalSemaphoreProperties physicalDevice externalSemaphoreInfo = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceExternalSemaphorePropertiesPtr = pVkGetPhysicalDeviceExternalSemaphoreProperties (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceExternalSemaphorePropertiesPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceExternalSemaphoreProperties is null" Nothing Nothing
+  let vkGetPhysicalDeviceExternalSemaphoreProperties' = mkVkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphorePropertiesPtr
+  pExternalSemaphoreInfo <- ContT $ withCStruct (externalSemaphoreInfo)
+  pPExternalSemaphoreProperties <- ContT (withZeroCStruct @ExternalSemaphoreProperties)
+  lift $ vkGetPhysicalDeviceExternalSemaphoreProperties' (physicalDeviceHandle (physicalDevice)) pExternalSemaphoreInfo (pPExternalSemaphoreProperties)
+  pExternalSemaphoreProperties <- lift $ peekCStruct @ExternalSemaphoreProperties pPExternalSemaphoreProperties
+  pure $ (pExternalSemaphoreProperties)
+
+
+-- | VkPhysicalDeviceExternalSemaphoreInfo - Structure specifying semaphore
+-- creation parameters.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceExternalSemaphoreProperties',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.getPhysicalDeviceExternalSemaphorePropertiesKHR'
+data PhysicalDeviceExternalSemaphoreInfo (es :: [Type]) = PhysicalDeviceExternalSemaphoreInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @handleType@ is a
+    -- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+    -- value specifying the external semaphore handle type for which
+    -- capabilities will be returned.
+    handleType :: ExternalSemaphoreHandleTypeFlagBits
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PhysicalDeviceExternalSemaphoreInfo es)
+
+instance Extensible PhysicalDeviceExternalSemaphoreInfo where
+  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO
+  setNext x next = x{next = next}
+  getNext PhysicalDeviceExternalSemaphoreInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceExternalSemaphoreInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @SemaphoreTypeCreateInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss PhysicalDeviceExternalSemaphoreInfo es, PokeChain es) => ToCStruct (PhysicalDeviceExternalSemaphoreInfo es) where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceExternalSemaphoreInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (handleType)
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (zero)
+    lift $ f
+
+instance (Extendss PhysicalDeviceExternalSemaphoreInfo es, PeekChain es) => FromCStruct (PhysicalDeviceExternalSemaphoreInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    handleType <- peek @ExternalSemaphoreHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlagBits))
+    pure $ PhysicalDeviceExternalSemaphoreInfo
+             next handleType
+
+instance es ~ '[] => Zero (PhysicalDeviceExternalSemaphoreInfo es) where
+  zero = PhysicalDeviceExternalSemaphoreInfo
+           ()
+           zero
+
+
+-- | VkExternalSemaphoreProperties - Structure describing supported external
+-- semaphore handle features
+--
+-- = Description
+--
+-- If @handleType@ is not supported by the implementation, then
+-- 'ExternalSemaphoreProperties'::@externalSemaphoreFeatures@ will be set
+-- to zero.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits.ExternalSemaphoreFeatureFlags',
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceExternalSemaphoreProperties',
+-- 'Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.getPhysicalDeviceExternalSemaphorePropertiesKHR'
+data ExternalSemaphoreProperties = ExternalSemaphoreProperties
+  { -- | @exportFromImportedHandleTypes@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+    -- specifying which types of imported handle @handleType@ /can/ be exported
+    -- from.
+    exportFromImportedHandleTypes :: ExternalSemaphoreHandleTypeFlags
+  , -- | @compatibleHandleTypes@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+    -- specifying handle types which /can/ be specified at the same time as
+    -- @handleType@ when creating a semaphore.
+    compatibleHandleTypes :: ExternalSemaphoreHandleTypeFlags
+  , -- | @externalSemaphoreFeatures@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits.ExternalSemaphoreFeatureFlagBits'
+    -- describing the features of @handleType@.
+    externalSemaphoreFeatures :: ExternalSemaphoreFeatureFlags
+  }
+  deriving (Typeable)
+deriving instance Show ExternalSemaphoreProperties
+
+instance ToCStruct ExternalSemaphoreProperties where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExternalSemaphoreProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlags)) (exportFromImportedHandleTypes)
+    poke ((p `plusPtr` 20 :: Ptr ExternalSemaphoreHandleTypeFlags)) (compatibleHandleTypes)
+    poke ((p `plusPtr` 24 :: Ptr ExternalSemaphoreFeatureFlags)) (externalSemaphoreFeatures)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlags)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr ExternalSemaphoreHandleTypeFlags)) (zero)
+    f
+
+instance FromCStruct ExternalSemaphoreProperties where
+  peekCStruct p = do
+    exportFromImportedHandleTypes <- peek @ExternalSemaphoreHandleTypeFlags ((p `plusPtr` 16 :: Ptr ExternalSemaphoreHandleTypeFlags))
+    compatibleHandleTypes <- peek @ExternalSemaphoreHandleTypeFlags ((p `plusPtr` 20 :: Ptr ExternalSemaphoreHandleTypeFlags))
+    externalSemaphoreFeatures <- peek @ExternalSemaphoreFeatureFlags ((p `plusPtr` 24 :: Ptr ExternalSemaphoreFeatureFlags))
+    pure $ ExternalSemaphoreProperties
+             exportFromImportedHandleTypes compatibleHandleTypes externalSemaphoreFeatures
+
+instance Storable ExternalSemaphoreProperties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExternalSemaphoreProperties where
+  zero = ExternalSemaphoreProperties
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs-boot
@@ -0,0 +1,28 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities  ( ExternalSemaphoreProperties
+                                                                           , PhysicalDeviceExternalSemaphoreInfo
+                                                                           ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data ExternalSemaphoreProperties
+
+instance ToCStruct ExternalSemaphoreProperties
+instance Show ExternalSemaphoreProperties
+
+instance FromCStruct ExternalSemaphoreProperties
+
+
+type role PhysicalDeviceExternalSemaphoreInfo nominal
+data PhysicalDeviceExternalSemaphoreInfo (es :: [Type])
+
+instance (Extendss PhysicalDeviceExternalSemaphoreInfo es, PokeChain es) => ToCStruct (PhysicalDeviceExternalSemaphoreInfo es)
+instance Show (Chain es) => Show (PhysicalDeviceExternalSemaphoreInfo es)
+
+instance (Extendss PhysicalDeviceExternalSemaphoreInfo es, PeekChain es) => FromCStruct (PhysicalDeviceExternalSemaphoreInfo es)
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs
@@ -0,0 +1,558 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2  ( getBufferMemoryRequirements2
+                                                                    , getImageMemoryRequirements2
+                                                                    , getImageSparseMemoryRequirements2
+                                                                    , BufferMemoryRequirementsInfo2(..)
+                                                                    , ImageMemoryRequirementsInfo2(..)
+                                                                    , ImageSparseMemoryRequirementsInfo2(..)
+                                                                    , MemoryRequirements2(..)
+                                                                    , SparseImageMemoryRequirements2(..)
+                                                                    , MemoryRequirements2KHR
+                                                                    , StructureType(..)
+                                                                    ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetBufferMemoryRequirements2))
+import Vulkan.Dynamic (DeviceCmds(pVkGetImageMemoryRequirements2))
+import Vulkan.Dynamic (DeviceCmds(pVkGetImageSparseMemoryRequirements2))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (ImagePlaneMemoryRequirementsInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedRequirements)
+import Vulkan.Core10.MemoryManagement (MemoryRequirements)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.SparseResourceMemoryManagement (SparseImageMemoryRequirements)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetBufferMemoryRequirements2
+  :: FunPtr (Ptr Device_T -> Ptr BufferMemoryRequirementsInfo2 -> Ptr (MemoryRequirements2 a) -> IO ()) -> Ptr Device_T -> Ptr BufferMemoryRequirementsInfo2 -> Ptr (MemoryRequirements2 a) -> IO ()
+
+-- | vkGetBufferMemoryRequirements2 - Returns the memory requirements for
+-- specified Vulkan object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the buffer.
+--
+-- -   @pInfo@ is a pointer to a 'BufferMemoryRequirementsInfo2' structure
+--     containing parameters required for the memory requirements query.
+--
+-- -   @pMemoryRequirements@ is a pointer to a 'MemoryRequirements2'
+--     structure in which the memory requirements of the buffer object are
+--     returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'BufferMemoryRequirementsInfo2', 'Vulkan.Core10.Handles.Device',
+-- 'MemoryRequirements2'
+getBufferMemoryRequirements2 :: forall a io . (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io) => Device -> BufferMemoryRequirementsInfo2 -> io (MemoryRequirements2 a)
+getBufferMemoryRequirements2 device info = liftIO . evalContT $ do
+  let vkGetBufferMemoryRequirements2Ptr = pVkGetBufferMemoryRequirements2 (deviceCmds (device :: Device))
+  lift $ unless (vkGetBufferMemoryRequirements2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetBufferMemoryRequirements2 is null" Nothing Nothing
+  let vkGetBufferMemoryRequirements2' = mkVkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2Ptr
+  pInfo <- ContT $ withCStruct (info)
+  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))
+  lift $ vkGetBufferMemoryRequirements2' (deviceHandle (device)) pInfo (pPMemoryRequirements)
+  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements
+  pure $ (pMemoryRequirements)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetImageMemoryRequirements2
+  :: FunPtr (Ptr Device_T -> Ptr (ImageMemoryRequirementsInfo2 a) -> Ptr (MemoryRequirements2 b) -> IO ()) -> Ptr Device_T -> Ptr (ImageMemoryRequirementsInfo2 a) -> Ptr (MemoryRequirements2 b) -> IO ()
+
+-- | vkGetImageMemoryRequirements2 - Returns the memory requirements for
+-- specified Vulkan object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the image.
+--
+-- -   @pInfo@ is a pointer to a 'ImageMemoryRequirementsInfo2' structure
+--     containing parameters required for the memory requirements query.
+--
+-- -   @pMemoryRequirements@ is a pointer to a 'MemoryRequirements2'
+--     structure in which the memory requirements of the image object are
+--     returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'ImageMemoryRequirementsInfo2',
+-- 'MemoryRequirements2'
+getImageMemoryRequirements2 :: forall a b io . (Extendss ImageMemoryRequirementsInfo2 a, Extendss MemoryRequirements2 b, PokeChain a, PokeChain b, PeekChain b, MonadIO io) => Device -> ImageMemoryRequirementsInfo2 a -> io (MemoryRequirements2 b)
+getImageMemoryRequirements2 device info = liftIO . evalContT $ do
+  let vkGetImageMemoryRequirements2Ptr = pVkGetImageMemoryRequirements2 (deviceCmds (device :: Device))
+  lift $ unless (vkGetImageMemoryRequirements2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetImageMemoryRequirements2 is null" Nothing Nothing
+  let vkGetImageMemoryRequirements2' = mkVkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2Ptr
+  pInfo <- ContT $ withCStruct (info)
+  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))
+  lift $ vkGetImageMemoryRequirements2' (deviceHandle (device)) pInfo (pPMemoryRequirements)
+  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements
+  pure $ (pMemoryRequirements)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetImageSparseMemoryRequirements2
+  :: FunPtr (Ptr Device_T -> Ptr ImageSparseMemoryRequirementsInfo2 -> Ptr Word32 -> Ptr SparseImageMemoryRequirements2 -> IO ()) -> Ptr Device_T -> Ptr ImageSparseMemoryRequirementsInfo2 -> Ptr Word32 -> Ptr SparseImageMemoryRequirements2 -> IO ()
+
+-- | vkGetImageSparseMemoryRequirements2 - Query the memory requirements for
+-- a sparse image
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the image.
+--
+-- -   @pInfo@ is a pointer to a 'ImageSparseMemoryRequirementsInfo2'
+--     structure containing parameters required for the memory requirements
+--     query.
+--
+-- -   @pSparseMemoryRequirementCount@ is a pointer to an integer related
+--     to the number of sparse memory requirements available or queried, as
+--     described below.
+--
+-- -   @pSparseMemoryRequirements@ is either @NULL@ or a pointer to an
+--     array of 'SparseImageMemoryRequirements2' structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'ImageSparseMemoryRequirementsInfo2' structure
+--
+-- -   @pSparseMemoryRequirementCount@ /must/ be a valid pointer to a
+--     @uint32_t@ value
+--
+-- -   If the value referenced by @pSparseMemoryRequirementCount@ is not
+--     @0@, and @pSparseMemoryRequirements@ is not @NULL@,
+--     @pSparseMemoryRequirements@ /must/ be a valid pointer to an array of
+--     @pSparseMemoryRequirementCount@ 'SparseImageMemoryRequirements2'
+--     structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'ImageSparseMemoryRequirementsInfo2',
+-- 'SparseImageMemoryRequirements2'
+getImageSparseMemoryRequirements2 :: forall io . MonadIO io => Device -> ImageSparseMemoryRequirementsInfo2 -> io (("sparseMemoryRequirements" ::: Vector SparseImageMemoryRequirements2))
+getImageSparseMemoryRequirements2 device info = liftIO . evalContT $ do
+  let vkGetImageSparseMemoryRequirements2Ptr = pVkGetImageSparseMemoryRequirements2 (deviceCmds (device :: Device))
+  lift $ unless (vkGetImageSparseMemoryRequirements2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetImageSparseMemoryRequirements2 is null" Nothing Nothing
+  let vkGetImageSparseMemoryRequirements2' = mkVkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2Ptr
+  let device' = deviceHandle (device)
+  pInfo <- ContT $ withCStruct (info)
+  pPSparseMemoryRequirementCount <- ContT $ bracket (callocBytes @Word32 4) free
+  lift $ vkGetImageSparseMemoryRequirements2' device' pInfo (pPSparseMemoryRequirementCount) (nullPtr)
+  pSparseMemoryRequirementCount <- lift $ peek @Word32 pPSparseMemoryRequirementCount
+  pPSparseMemoryRequirements <- ContT $ bracket (callocBytes @SparseImageMemoryRequirements2 ((fromIntegral (pSparseMemoryRequirementCount)) * 64)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPSparseMemoryRequirements `advancePtrBytes` (i * 64) :: Ptr SparseImageMemoryRequirements2) . ($ ())) [0..(fromIntegral (pSparseMemoryRequirementCount)) - 1]
+  lift $ vkGetImageSparseMemoryRequirements2' device' pInfo (pPSparseMemoryRequirementCount) ((pPSparseMemoryRequirements))
+  pSparseMemoryRequirementCount' <- lift $ peek @Word32 pPSparseMemoryRequirementCount
+  pSparseMemoryRequirements' <- lift $ generateM (fromIntegral (pSparseMemoryRequirementCount')) (\i -> peekCStruct @SparseImageMemoryRequirements2 (((pPSparseMemoryRequirements) `advancePtrBytes` (64 * (i)) :: Ptr SparseImageMemoryRequirements2)))
+  pure $ (pSparseMemoryRequirements')
+
+
+-- | VkBufferMemoryRequirementsInfo2 - (None)
+--
+-- == Valid Usage
+--
+-- -   If @buffer@ was created with the
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     external memory handle type, then @buffer@ /must/ be bound to memory
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getBufferMemoryRequirements2',
+-- 'Vulkan.Extensions.VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2KHR'
+data BufferMemoryRequirementsInfo2 = BufferMemoryRequirementsInfo2
+  { -- | @buffer@ is the buffer to query.
+    buffer :: Buffer }
+  deriving (Typeable)
+deriving instance Show BufferMemoryRequirementsInfo2
+
+instance ToCStruct BufferMemoryRequirementsInfo2 where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferMemoryRequirementsInfo2{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Buffer)) (buffer)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)
+    f
+
+instance FromCStruct BufferMemoryRequirementsInfo2 where
+  peekCStruct p = do
+    buffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
+    pure $ BufferMemoryRequirementsInfo2
+             buffer
+
+instance Storable BufferMemoryRequirementsInfo2 where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BufferMemoryRequirementsInfo2 where
+  zero = BufferMemoryRequirementsInfo2
+           zero
+
+
+-- | VkImageMemoryRequirementsInfo2 - (None)
+--
+-- == Valid Usage
+--
+-- -   If @image@ was created with a /multi-planar/ format and the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--     flag, there /must/ be a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
+--     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2'
+--     structure
+--
+-- -   If @image@ was created with
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--     and with
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--     then there /must/ be a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
+--     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2'
+--     structure
+--
+-- -   If @image@ was not created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
+--     flag, there /must/ not be a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
+--     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2'
+--     structure
+--
+-- -   If @image@ was created with a single-plane format and with any
+--     @tiling@ other than
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--     then there /must/ not be a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
+--     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2'
+--     structure
+--
+-- -   If @image@ was created with the
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     external memory handle type, then @image@ /must/ be bound to memory
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getImageMemoryRequirements2',
+-- 'Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageMemoryRequirements2KHR'
+data ImageMemoryRequirementsInfo2 (es :: [Type]) = ImageMemoryRequirementsInfo2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @image@ is the image to query.
+    image :: Image
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (ImageMemoryRequirementsInfo2 es)
+
+instance Extensible ImageMemoryRequirementsInfo2 where
+  extensibleType = STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2
+  setNext x next = x{next = next}
+  getNext ImageMemoryRequirementsInfo2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageMemoryRequirementsInfo2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @ImagePlaneMemoryRequirementsInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss ImageMemoryRequirementsInfo2 es, PokeChain es) => ToCStruct (ImageMemoryRequirementsInfo2 es) where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageMemoryRequirementsInfo2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (image)
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)
+    lift $ f
+
+instance (Extendss ImageMemoryRequirementsInfo2 es, PeekChain es) => FromCStruct (ImageMemoryRequirementsInfo2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    image <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
+    pure $ ImageMemoryRequirementsInfo2
+             next image
+
+instance es ~ '[] => Zero (ImageMemoryRequirementsInfo2 es) where
+  zero = ImageMemoryRequirementsInfo2
+           ()
+           zero
+
+
+-- | VkImageSparseMemoryRequirementsInfo2 - (None)
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getImageSparseMemoryRequirements2',
+-- 'Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageSparseMemoryRequirements2KHR'
+data ImageSparseMemoryRequirementsInfo2 = ImageSparseMemoryRequirementsInfo2
+  { -- | @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+    image :: Image }
+  deriving (Typeable)
+deriving instance Show ImageSparseMemoryRequirementsInfo2
+
+instance ToCStruct ImageSparseMemoryRequirementsInfo2 where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageSparseMemoryRequirementsInfo2{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Image)) (image)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Image)) (zero)
+    f
+
+instance FromCStruct ImageSparseMemoryRequirementsInfo2 where
+  peekCStruct p = do
+    image <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
+    pure $ ImageSparseMemoryRequirementsInfo2
+             image
+
+instance Storable ImageSparseMemoryRequirementsInfo2 where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageSparseMemoryRequirementsInfo2 where
+  zero = ImageSparseMemoryRequirementsInfo2
+           zero
+
+
+-- | VkMemoryRequirements2 - Structure specifying memory requirements
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.MemoryManagement.MemoryRequirements',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.getAccelerationStructureMemoryRequirementsKHR',
+-- 'getBufferMemoryRequirements2',
+-- 'Vulkan.Extensions.VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2KHR',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.getGeneratedCommandsMemoryRequirementsNV',
+-- 'getImageMemoryRequirements2',
+-- 'Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageMemoryRequirements2KHR'
+data MemoryRequirements2 (es :: [Type]) = MemoryRequirements2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @memoryRequirements@ is a
+    -- 'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure describing
+    -- the memory requirements of the resource.
+    memoryRequirements :: MemoryRequirements
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (MemoryRequirements2 es)
+
+instance Extensible MemoryRequirements2 where
+  extensibleType = STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2
+  setNext x next = x{next = next}
+  getNext MemoryRequirements2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends MemoryRequirements2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @MemoryDedicatedRequirements = Just f
+    | otherwise = Nothing
+
+instance (Extendss MemoryRequirements2 es, PokeChain es) => ToCStruct (MemoryRequirements2 es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryRequirements2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr MemoryRequirements)) (memoryRequirements) . ($ ())
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr MemoryRequirements)) (zero) . ($ ())
+    lift $ f
+
+instance (Extendss MemoryRequirements2 es, PeekChain es) => FromCStruct (MemoryRequirements2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    memoryRequirements <- peekCStruct @MemoryRequirements ((p `plusPtr` 16 :: Ptr MemoryRequirements))
+    pure $ MemoryRequirements2
+             next memoryRequirements
+
+instance es ~ '[] => Zero (MemoryRequirements2 es) where
+  zero = MemoryRequirements2
+           ()
+           zero
+
+
+-- | VkSparseImageMemoryRequirements2 - (None)
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryRequirements',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getImageSparseMemoryRequirements2',
+-- 'Vulkan.Extensions.VK_KHR_get_memory_requirements2.getImageSparseMemoryRequirements2KHR'
+data SparseImageMemoryRequirements2 = SparseImageMemoryRequirements2
+  { -- | @memoryRequirements@ is a
+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageMemoryRequirements'
+    -- structure describing the memory requirements of the sparse image.
+    memoryRequirements :: SparseImageMemoryRequirements }
+  deriving (Typeable)
+deriving instance Show SparseImageMemoryRequirements2
+
+instance ToCStruct SparseImageMemoryRequirements2 where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SparseImageMemoryRequirements2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SparseImageMemoryRequirements)) (memoryRequirements) . ($ ())
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SparseImageMemoryRequirements)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct SparseImageMemoryRequirements2 where
+  peekCStruct p = do
+    memoryRequirements <- peekCStruct @SparseImageMemoryRequirements ((p `plusPtr` 16 :: Ptr SparseImageMemoryRequirements))
+    pure $ SparseImageMemoryRequirements2
+             memoryRequirements
+
+instance Zero SparseImageMemoryRequirements2 where
+  zero = SparseImageMemoryRequirements2
+           zero
+
+
+-- No documentation found for TopLevel "VkMemoryRequirements2KHR"
+type MemoryRequirements2KHR = MemoryRequirements2
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs-boot
@@ -0,0 +1,61 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2  ( BufferMemoryRequirementsInfo2
+                                                                    , ImageMemoryRequirementsInfo2
+                                                                    , ImageSparseMemoryRequirementsInfo2
+                                                                    , MemoryRequirements2
+                                                                    , SparseImageMemoryRequirements2
+                                                                    , MemoryRequirements2KHR
+                                                                    ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data BufferMemoryRequirementsInfo2
+
+instance ToCStruct BufferMemoryRequirementsInfo2
+instance Show BufferMemoryRequirementsInfo2
+
+instance FromCStruct BufferMemoryRequirementsInfo2
+
+
+type role ImageMemoryRequirementsInfo2 nominal
+data ImageMemoryRequirementsInfo2 (es :: [Type])
+
+instance (Extendss ImageMemoryRequirementsInfo2 es, PokeChain es) => ToCStruct (ImageMemoryRequirementsInfo2 es)
+instance Show (Chain es) => Show (ImageMemoryRequirementsInfo2 es)
+
+instance (Extendss ImageMemoryRequirementsInfo2 es, PeekChain es) => FromCStruct (ImageMemoryRequirementsInfo2 es)
+
+
+data ImageSparseMemoryRequirementsInfo2
+
+instance ToCStruct ImageSparseMemoryRequirementsInfo2
+instance Show ImageSparseMemoryRequirementsInfo2
+
+instance FromCStruct ImageSparseMemoryRequirementsInfo2
+
+
+type role MemoryRequirements2 nominal
+data MemoryRequirements2 (es :: [Type])
+
+instance (Extendss MemoryRequirements2 es, PokeChain es) => ToCStruct (MemoryRequirements2 es)
+instance Show (Chain es) => Show (MemoryRequirements2 es)
+
+instance (Extendss MemoryRequirements2 es, PeekChain es) => FromCStruct (MemoryRequirements2 es)
+
+
+data SparseImageMemoryRequirements2
+
+instance ToCStruct SparseImageMemoryRequirements2
+instance Show SparseImageMemoryRequirements2
+
+instance FromCStruct SparseImageMemoryRequirements2
+
+
+-- No documentation found for TopLevel "VkMemoryRequirements2KHR"
+type MemoryRequirements2KHR = MemoryRequirements2
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs
@@ -0,0 +1,1501 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2  ( getPhysicalDeviceFeatures2
+                                                                           , getPhysicalDeviceProperties2
+                                                                           , getPhysicalDeviceFormatProperties2
+                                                                           , getPhysicalDeviceImageFormatProperties2
+                                                                           , getPhysicalDeviceQueueFamilyProperties2
+                                                                           , getPhysicalDeviceMemoryProperties2
+                                                                           , getPhysicalDeviceSparseImageFormatProperties2
+                                                                           , PhysicalDeviceFeatures2(..)
+                                                                           , PhysicalDeviceProperties2(..)
+                                                                           , FormatProperties2(..)
+                                                                           , ImageFormatProperties2(..)
+                                                                           , PhysicalDeviceImageFormatInfo2(..)
+                                                                           , QueueFamilyProperties2(..)
+                                                                           , PhysicalDeviceMemoryProperties2(..)
+                                                                           , SparseImageFormatProperties2(..)
+                                                                           , PhysicalDeviceSparseImageFormatInfo2(..)
+                                                                           , StructureType(..)
+                                                                           ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (AndroidHardwareBufferUsageANDROID)
+import Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (DrmFormatModifierPropertiesListEXT)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalImageFormatProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_filter_cubic (FilterCubicImageViewImageFormatPropertiesEXT)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.Core10.Enums.Format (Format(..))
+import Vulkan.Core10.DeviceInitialization (FormatProperties)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_image_format_list (ImageFormatListCreateInfo)
+import Vulkan.Core10.DeviceInitialization (ImageFormatProperties)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage (ImageStencilUsageCreateInfo)
+import Vulkan.Core10.Enums.ImageTiling (ImageTiling)
+import Vulkan.Core10.Enums.ImageType (ImageType)
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceFeatures2))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceFormatProperties2))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceImageFormatProperties2))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceMemoryProperties2))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceProperties2))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceQueueFamilyProperties2))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSparseImageFormatProperties2))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage (PhysicalDevice16BitStorageFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage (PhysicalDevice8BitStorageFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_astc_decode_mode (PhysicalDeviceASTCDecodeFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_device_coherent_memory (PhysicalDeviceCoherentMemoryFeaturesAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_compute_shader_derivatives (PhysicalDeviceComputeShaderDerivativesFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conditional_rendering (PhysicalDeviceConditionalRenderingFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conservative_rasterization (PhysicalDeviceConservativeRasterizationPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_corner_sampled_image (PhysicalDeviceCornerSampledImageFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (PhysicalDeviceCoverageReductionModeFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_custom_border_color (PhysicalDeviceCustomBorderColorFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_custom_border_color (PhysicalDeviceCustomBorderColorPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing (PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PhysicalDeviceDepthClipEnableFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (PhysicalDeviceDepthStencilResolveProperties)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PhysicalDeviceDiscardRectanglePropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalImageFormatInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_external_memory_host (PhysicalDeviceExternalMemoryHostPropertiesEXT)
+import Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls (PhysicalDeviceFloatControlsProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shader_barycentric (PhysicalDeviceFragmentShaderBarycentricFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_shader_interlock (PhysicalDeviceFragmentShaderInterlockFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceIDProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (PhysicalDeviceImageDrmFormatModifierInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_filter_cubic (PhysicalDeviceImageViewImageFormatInfoEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (PhysicalDeviceImagelessFramebufferFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_index_type_uint8 (PhysicalDeviceIndexTypeUint8FeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (PhysicalDeviceMaintenance3Properties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_budget (PhysicalDeviceMemoryBudgetPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMemoryPriorityFeaturesEXT)
+import Vulkan.Core10.DeviceInitialization (PhysicalDeviceMemoryProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderPropertiesNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NVX_multiview_per_view_attributes (PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pci_bus_info (PhysicalDevicePCIBusInfoPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PhysicalDevicePointClippingProperties)
+import Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_push_descriptor (PhysicalDevicePushDescriptorPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (PhysicalDeviceRayTracingPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (PhysicalDeviceRayTracingPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PhysicalDeviceRepresentativeFragmentTestFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2FeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2PropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (PhysicalDeviceSampleLocationsPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (PhysicalDeviceSamplerFilterMinmaxProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_clock (PhysicalDeviceShaderClockFeaturesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_shader_core_properties2 (PhysicalDeviceShaderCoreProperties2AMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_shader_core_properties (PhysicalDeviceShaderCorePropertiesAMD)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation (PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters (PhysicalDeviceShaderDrawParametersFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8 (PhysicalDeviceShaderFloat16Int8Features)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_image_footprint (PhysicalDeviceShaderImageFootprintFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_shader_integer_functions2 (PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsPropertiesNV)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types (PhysicalDeviceShaderSubgroupExtendedTypesFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImageFeaturesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImagePropertiesNV)
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup (PhysicalDeviceSubgroupProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr (PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreFeatures)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout (PhysicalDeviceUniformBufferStandardLayoutFeatures)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers (PhysicalDeviceVariablePointersFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PhysicalDeviceVertexAttributeDivisorFeaturesEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PhysicalDeviceVertexAttributeDivisorPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan11Features)
+import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan11Properties)
+import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Features)
+import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Properties)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints (QueueFamilyCheckpointPropertiesNV)
+import Vulkan.Core10.DeviceInitialization (QueueFamilyProperties)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionImageFormatProperties)
+import Vulkan.Core10.SparseResourceMemoryManagement (SparseImageFormatProperties)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_texture_gather_bias_lod (TextureLODGatherFormatPropertiesAMD)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FORMAT_PROPERTIES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceFeatures2
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceFeatures2 a) -> IO ()) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceFeatures2 a) -> IO ()
+
+-- | vkGetPhysicalDeviceFeatures2 - Reports capabilities of a physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     supported features.
+--
+-- -   @pFeatures@ is a pointer to a 'PhysicalDeviceFeatures2' structure in
+--     which the physical device features are returned.
+--
+-- = Description
+--
+-- Each structure in @pFeatures@ and its @pNext@ chain contains members
+-- corresponding to fine-grained features. 'getPhysicalDeviceFeatures2'
+-- writes each member to a boolean value indicating whether that feature is
+-- supported.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceFeatures2'
+getPhysicalDeviceFeatures2 :: forall a io . (Extendss PhysicalDeviceFeatures2 a, PokeChain a, PeekChain a, MonadIO io) => PhysicalDevice -> io (PhysicalDeviceFeatures2 a)
+getPhysicalDeviceFeatures2 physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceFeatures2Ptr = pVkGetPhysicalDeviceFeatures2 (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceFeatures2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceFeatures2 is null" Nothing Nothing
+  let vkGetPhysicalDeviceFeatures2' = mkVkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2Ptr
+  pPFeatures <- ContT (withZeroCStruct @(PhysicalDeviceFeatures2 _))
+  lift $ vkGetPhysicalDeviceFeatures2' (physicalDeviceHandle (physicalDevice)) (pPFeatures)
+  pFeatures <- lift $ peekCStruct @(PhysicalDeviceFeatures2 _) pPFeatures
+  pure $ (pFeatures)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceProperties2
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceProperties2 a) -> IO ()) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceProperties2 a) -> IO ()
+
+-- | vkGetPhysicalDeviceProperties2 - Returns properties of a physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the physical device whose
+--     properties will be queried.
+--
+-- -   @pProperties@ is a pointer to a 'PhysicalDeviceProperties2'
+--     structure in which properties are returned.
+--
+-- = Description
+--
+-- Each structure in @pProperties@ and its @pNext@ chain contain members
+-- corresponding to properties or implementation-dependent limits.
+-- 'getPhysicalDeviceProperties2' writes each member to a value indicating
+-- the value of that property or limit.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceProperties2'
+getPhysicalDeviceProperties2 :: forall a io . (Extendss PhysicalDeviceProperties2 a, PokeChain a, PeekChain a, MonadIO io) => PhysicalDevice -> io (PhysicalDeviceProperties2 a)
+getPhysicalDeviceProperties2 physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceProperties2Ptr = pVkGetPhysicalDeviceProperties2 (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceProperties2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceProperties2 is null" Nothing Nothing
+  let vkGetPhysicalDeviceProperties2' = mkVkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2Ptr
+  pPProperties <- ContT (withZeroCStruct @(PhysicalDeviceProperties2 _))
+  lift $ vkGetPhysicalDeviceProperties2' (physicalDeviceHandle (physicalDevice)) (pPProperties)
+  pProperties <- lift $ peekCStruct @(PhysicalDeviceProperties2 _) pPProperties
+  pure $ (pProperties)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceFormatProperties2
+  :: FunPtr (Ptr PhysicalDevice_T -> Format -> Ptr (FormatProperties2 a) -> IO ()) -> Ptr PhysicalDevice_T -> Format -> Ptr (FormatProperties2 a) -> IO ()
+
+-- | vkGetPhysicalDeviceFormatProperties2 - Lists physical device’s format
+-- capabilities
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     format properties.
+--
+-- -   @format@ is the format whose properties are queried.
+--
+-- -   @pFormatProperties@ is a pointer to a 'FormatProperties2' structure
+--     in which physical device properties for @format@ are returned.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceFormatProperties2' behaves similarly to
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties',
+-- with the ability to return extended information in a @pNext@ chain of
+-- output structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Format.Format', 'FormatProperties2',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceFormatProperties2 :: forall a io . (Extendss FormatProperties2 a, PokeChain a, PeekChain a, MonadIO io) => PhysicalDevice -> Format -> io (FormatProperties2 a)
+getPhysicalDeviceFormatProperties2 physicalDevice format = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceFormatProperties2Ptr = pVkGetPhysicalDeviceFormatProperties2 (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceFormatProperties2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceFormatProperties2 is null" Nothing Nothing
+  let vkGetPhysicalDeviceFormatProperties2' = mkVkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2Ptr
+  pPFormatProperties <- ContT (withZeroCStruct @(FormatProperties2 _))
+  lift $ vkGetPhysicalDeviceFormatProperties2' (physicalDeviceHandle (physicalDevice)) (format) (pPFormatProperties)
+  pFormatProperties <- lift $ peekCStruct @(FormatProperties2 _) pPFormatProperties
+  pure $ (pFormatProperties)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceImageFormatProperties2
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceImageFormatInfo2 a) -> Ptr (ImageFormatProperties2 b) -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceImageFormatInfo2 a) -> Ptr (ImageFormatProperties2 b) -> IO Result
+
+-- | vkGetPhysicalDeviceImageFormatProperties2 - Lists physical device’s
+-- image format capabilities
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     image capabilities.
+--
+-- -   @pImageFormatInfo@ is a pointer to a
+--     'PhysicalDeviceImageFormatInfo2' structure describing the parameters
+--     that would be consumed by 'Vulkan.Core10.Image.createImage'.
+--
+-- -   @pImageFormatProperties@ is a pointer to a 'ImageFormatProperties2'
+--     structure in which capabilities are returned.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceImageFormatProperties2' behaves similarly to
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
+-- with the ability to return extended information in a @pNext@ chain of
+-- output structures.
+--
+-- == Valid Usage
+--
+-- -   If the @pNext@ chain of @pImageFormatProperties@ includes a
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferUsageANDROID'
+--     structure, the @pNext@ chain of @pImageFormatInfo@ /must/ include a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'
+--     structure with @handleType@ set to
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pImageFormatInfo@ /must/ be a valid pointer to a valid
+--     'PhysicalDeviceImageFormatInfo2' structure
+--
+-- -   @pImageFormatProperties@ /must/ be a valid pointer to a
+--     'ImageFormatProperties2' structure
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'
+--
+-- = See Also
+--
+-- 'ImageFormatProperties2', 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'PhysicalDeviceImageFormatInfo2'
+getPhysicalDeviceImageFormatProperties2 :: forall a b io . (Extendss PhysicalDeviceImageFormatInfo2 a, Extendss ImageFormatProperties2 b, PokeChain a, PokeChain b, PeekChain b, MonadIO io) => PhysicalDevice -> PhysicalDeviceImageFormatInfo2 a -> io (ImageFormatProperties2 b)
+getPhysicalDeviceImageFormatProperties2 physicalDevice imageFormatInfo = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceImageFormatProperties2Ptr = pVkGetPhysicalDeviceImageFormatProperties2 (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceImageFormatProperties2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceImageFormatProperties2 is null" Nothing Nothing
+  let vkGetPhysicalDeviceImageFormatProperties2' = mkVkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2Ptr
+  pImageFormatInfo <- ContT $ withCStruct (imageFormatInfo)
+  pPImageFormatProperties <- ContT (withZeroCStruct @(ImageFormatProperties2 _))
+  r <- lift $ vkGetPhysicalDeviceImageFormatProperties2' (physicalDeviceHandle (physicalDevice)) pImageFormatInfo (pPImageFormatProperties)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pImageFormatProperties <- lift $ peekCStruct @(ImageFormatProperties2 _) pPImageFormatProperties
+  pure $ (pImageFormatProperties)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceQueueFamilyProperties2
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr (QueueFamilyProperties2 a) -> IO ()) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr (QueueFamilyProperties2 a) -> IO ()
+
+-- | vkGetPhysicalDeviceQueueFamilyProperties2 - Reports properties of the
+-- queues of the specified physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the physical device whose
+--     properties will be queried.
+--
+-- -   @pQueueFamilyPropertyCount@ is a pointer to an integer related to
+--     the number of queue families available or queried, as described in
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'.
+--
+-- -   @pQueueFamilyProperties@ is either @NULL@ or a pointer to an array
+--     of 'QueueFamilyProperties2' structures.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceQueueFamilyProperties2' behaves similarly to
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties',
+-- with the ability to return extended information in a @pNext@ chain of
+-- output structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a
+--     @uint32_t@ value
+--
+-- -   If the value referenced by @pQueueFamilyPropertyCount@ is not @0@,
+--     and @pQueueFamilyProperties@ is not @NULL@, @pQueueFamilyProperties@
+--     /must/ be a valid pointer to an array of @pQueueFamilyPropertyCount@
+--     'QueueFamilyProperties2' structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'QueueFamilyProperties2'
+getPhysicalDeviceQueueFamilyProperties2 :: forall a io . (Extendss QueueFamilyProperties2 a, PokeChain a, PeekChain a, MonadIO io) => PhysicalDevice -> io (("queueFamilyProperties" ::: Vector (QueueFamilyProperties2 a)))
+getPhysicalDeviceQueueFamilyProperties2 physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceQueueFamilyProperties2Ptr = pVkGetPhysicalDeviceQueueFamilyProperties2 (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceQueueFamilyProperties2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceQueueFamilyProperties2 is null" Nothing Nothing
+  let vkGetPhysicalDeviceQueueFamilyProperties2' = mkVkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2Ptr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPQueueFamilyPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  lift $ vkGetPhysicalDeviceQueueFamilyProperties2' physicalDevice' (pPQueueFamilyPropertyCount) (nullPtr)
+  pQueueFamilyPropertyCount <- lift $ peek @Word32 pPQueueFamilyPropertyCount
+  pPQueueFamilyProperties <- ContT $ bracket (callocBytes @(QueueFamilyProperties2 _) ((fromIntegral (pQueueFamilyPropertyCount)) * 40)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPQueueFamilyProperties `advancePtrBytes` (i * 40) :: Ptr (QueueFamilyProperties2 _)) . ($ ())) [0..(fromIntegral (pQueueFamilyPropertyCount)) - 1]
+  lift $ vkGetPhysicalDeviceQueueFamilyProperties2' physicalDevice' (pPQueueFamilyPropertyCount) ((pPQueueFamilyProperties))
+  pQueueFamilyPropertyCount' <- lift $ peek @Word32 pPQueueFamilyPropertyCount
+  pQueueFamilyProperties' <- lift $ generateM (fromIntegral (pQueueFamilyPropertyCount')) (\i -> peekCStruct @(QueueFamilyProperties2 _) (((pPQueueFamilyProperties) `advancePtrBytes` (40 * (i)) :: Ptr (QueueFamilyProperties2 _))))
+  pure $ (pQueueFamilyProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceMemoryProperties2
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceMemoryProperties2 a) -> IO ()) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceMemoryProperties2 a) -> IO ()
+
+-- | vkGetPhysicalDeviceMemoryProperties2 - Reports memory information for
+-- the specified physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the device to query.
+--
+-- -   @pMemoryProperties@ is a pointer to a
+--     'PhysicalDeviceMemoryProperties2' structure in which the properties
+--     are returned.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceMemoryProperties2' behaves similarly to
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties',
+-- with the ability to return extended information in a @pNext@ chain of
+-- output structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'PhysicalDeviceMemoryProperties2'
+getPhysicalDeviceMemoryProperties2 :: forall a io . (Extendss PhysicalDeviceMemoryProperties2 a, PokeChain a, PeekChain a, MonadIO io) => PhysicalDevice -> io (PhysicalDeviceMemoryProperties2 a)
+getPhysicalDeviceMemoryProperties2 physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceMemoryProperties2Ptr = pVkGetPhysicalDeviceMemoryProperties2 (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceMemoryProperties2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceMemoryProperties2 is null" Nothing Nothing
+  let vkGetPhysicalDeviceMemoryProperties2' = mkVkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2Ptr
+  pPMemoryProperties <- ContT (withZeroCStruct @(PhysicalDeviceMemoryProperties2 _))
+  lift $ vkGetPhysicalDeviceMemoryProperties2' (physicalDeviceHandle (physicalDevice)) (pPMemoryProperties)
+  pMemoryProperties <- lift $ peekCStruct @(PhysicalDeviceMemoryProperties2 _) pPMemoryProperties
+  pure $ (pMemoryProperties)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSparseImageFormatProperties2
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceSparseImageFormatInfo2 -> Ptr Word32 -> Ptr SparseImageFormatProperties2 -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceSparseImageFormatInfo2 -> Ptr Word32 -> Ptr SparseImageFormatProperties2 -> IO ()
+
+-- | vkGetPhysicalDeviceSparseImageFormatProperties2 - Retrieve properties of
+-- an image format applied to sparse images
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     sparse image capabilities.
+--
+-- -   @pFormatInfo@ is a pointer to a
+--     'PhysicalDeviceSparseImageFormatInfo2' structure containing input
+--     parameters to the command.
+--
+-- -   @pPropertyCount@ is a pointer to an integer related to the number of
+--     sparse format properties available or queried, as described below.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     'SparseImageFormatProperties2' structures.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceSparseImageFormatProperties2' behaves identically to
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties',
+-- with the ability to return extended information by adding extension
+-- structures to the @pNext@ chain of its @pProperties@ parameter.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pFormatInfo@ /must/ be a valid pointer to a valid
+--     'PhysicalDeviceSparseImageFormatInfo2' structure
+--
+-- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pPropertyCount@ is not @0@, and
+--     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer
+--     to an array of @pPropertyCount@ 'SparseImageFormatProperties2'
+--     structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'PhysicalDeviceSparseImageFormatInfo2', 'SparseImageFormatProperties2'
+getPhysicalDeviceSparseImageFormatProperties2 :: forall io . MonadIO io => PhysicalDevice -> PhysicalDeviceSparseImageFormatInfo2 -> io (("properties" ::: Vector SparseImageFormatProperties2))
+getPhysicalDeviceSparseImageFormatProperties2 physicalDevice formatInfo = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSparseImageFormatProperties2Ptr = pVkGetPhysicalDeviceSparseImageFormatProperties2 (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSparseImageFormatProperties2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSparseImageFormatProperties2 is null" Nothing Nothing
+  let vkGetPhysicalDeviceSparseImageFormatProperties2' = mkVkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2Ptr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pFormatInfo <- ContT $ withCStruct (formatInfo)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  lift $ vkGetPhysicalDeviceSparseImageFormatProperties2' physicalDevice' pFormatInfo (pPPropertyCount) (nullPtr)
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @SparseImageFormatProperties2 ((fromIntegral (pPropertyCount)) * 40)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 40) :: Ptr SparseImageFormatProperties2) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  lift $ vkGetPhysicalDeviceSparseImageFormatProperties2' physicalDevice' pFormatInfo (pPPropertyCount) ((pPProperties))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @SparseImageFormatProperties2 (((pPProperties) `advancePtrBytes` (40 * (i)) :: Ptr SparseImageFormatProperties2)))
+  pure $ (pProperties')
+
+
+-- | VkPhysicalDeviceFeatures2 - Structure describing the fine-grained
+-- features that can be supported by an implementation
+--
+-- = Members
+--
+-- The 'PhysicalDeviceFeatures2' structure is defined as:
+--
+-- = Description
+--
+-- The @pNext@ chain of this structure is used to extend the structure with
+-- features defined by extensions. This structure /can/ be used in
+-- 'getPhysicalDeviceFeatures2' or /can/ be included in the @pNext@ chain
+-- of a 'Vulkan.Core10.Device.DeviceCreateInfo' structure, in which case it
+-- controls which features are enabled in the device in lieu of
+-- @pEnabledFeatures@.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceFeatures2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2KHR'
+data PhysicalDeviceFeatures2 (es :: [Type]) = PhysicalDeviceFeatures2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @features@ is a
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures' structure
+    -- describing the fine-grained features of the Vulkan 1.0 API.
+    features :: PhysicalDeviceFeatures
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PhysicalDeviceFeatures2 es)
+
+instance Extensible PhysicalDeviceFeatures2 where
+  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2
+  setNext x next = x{next = next}
+  getNext PhysicalDeviceFeatures2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceFeatures2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PhysicalDeviceRobustness2FeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDiagnosticsConfigFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCustomBorderColorFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCoherentMemoryFeaturesAMD = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVulkan12Features = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVulkan11Features = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePipelineCreationCacheControlFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceLineRasterizationFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSubgroupSizeControlFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTexelBufferAlignmentFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSeparateDepthStencilLayoutsFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceFragmentShaderInterlockFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderSMBuiltinsFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceIndexTypeUint8FeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderClockFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCoverageReductionModeFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePerformanceQueryFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceYcbcrImageArraysFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCooperativeMatrixFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceImagelessFramebufferFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceBufferDeviceAddressFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceBufferDeviceAddressFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMemoryPriorityFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDepthClipEnableFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceUniformBufferStandardLayoutFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceScalarBlockLayoutFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceFragmentDensityMapFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceRayTracingFeaturesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMeshShaderFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShadingRateImageFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderImageFootprintFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceFragmentShaderBarycentricFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceComputeShaderDerivativesFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCornerSampledImageFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceExclusiveScissorFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceRepresentativeFragmentTestFeaturesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTransformFeedbackFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceASTCDecodeFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVertexAttributeDivisorFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderAtomicInt64Features = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVulkanMemoryModelFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceConditionalRenderingFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDevice8BitStorageFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTimelineSemaphoreFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDescriptorIndexingFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceHostQueryResetFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderFloat16Int8Features = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderDrawParametersFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceInlineUniformBlockFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceBlendOperationAdvancedFeaturesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceProtectedMemoryFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderSubgroupExtendedTypesFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDevice16BitStorageFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMultiviewFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVariablePointersFeatures = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss PhysicalDeviceFeatures2 es, PokeChain es) => ToCStruct (PhysicalDeviceFeatures2 es) where
+  withCStruct x f = allocaBytesAligned 240 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceFeatures2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceFeatures)) (features) . ($ ())
+    lift $ f
+  cStructSize = 240
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceFeatures)) (zero) . ($ ())
+    lift $ f
+
+instance (Extendss PhysicalDeviceFeatures2 es, PeekChain es) => FromCStruct (PhysicalDeviceFeatures2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    features <- peekCStruct @PhysicalDeviceFeatures ((p `plusPtr` 16 :: Ptr PhysicalDeviceFeatures))
+    pure $ PhysicalDeviceFeatures2
+             next features
+
+instance es ~ '[] => Zero (PhysicalDeviceFeatures2 es) where
+  zero = PhysicalDeviceFeatures2
+           ()
+           zero
+
+
+-- | VkPhysicalDeviceProperties2 - Structure specifying physical device
+-- properties
+--
+-- = Description
+--
+-- The @pNext@ chain of this structure is used to extend the structure with
+-- properties defined by extensions.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT',
+--     'Vulkan.Extensions.VK_EXT_conservative_rasterization.PhysicalDeviceConservativeRasterizationPropertiesEXT',
+--     'Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixPropertiesNV',
+--     'Vulkan.Extensions.VK_EXT_custom_border_color.PhysicalDeviceCustomBorderColorPropertiesEXT',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
+--     'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsPropertiesNV',
+--     'Vulkan.Extensions.VK_EXT_discard_rectangles.PhysicalDeviceDiscardRectanglePropertiesEXT',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
+--     'Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
+--     'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT',
+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationPropertiesEXT',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties',
+--     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV',
+--     'Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties',
+--     'Vulkan.Extensions.VK_EXT_pci_bus_info.PhysicalDevicePCIBusInfoPropertiesEXT',
+--     'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
+--     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
+--     'Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR',
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR',
+--     'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV',
+--     'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2PropertiesEXT',
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.PhysicalDeviceSamplerFilterMinmaxProperties',
+--     'Vulkan.Extensions.VK_AMD_shader_core_properties2.PhysicalDeviceShaderCoreProperties2AMD',
+--     'Vulkan.Extensions.VK_AMD_shader_core_properties.PhysicalDeviceShaderCorePropertiesAMD',
+--     'Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsPropertiesNV',
+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImagePropertiesNV',
+--     'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlPropertiesEXT',
+--     'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreProperties',
+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT',
+--     'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PhysicalDeviceVertexAttributeDivisorPropertiesEXT',
+--     'Vulkan.Core12.PhysicalDeviceVulkan11Properties', or
+--     'Vulkan.Core12.PhysicalDeviceVulkan12Properties'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2KHR'
+data PhysicalDeviceProperties2 (es :: [Type]) = PhysicalDeviceProperties2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @properties@ is a
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties' structure
+    -- describing properties of the physical device. This structure is written
+    -- with the same values as if it were written by
+    -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceProperties'.
+    properties :: PhysicalDeviceProperties
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PhysicalDeviceProperties2 es)
+
+instance Extensible PhysicalDeviceProperties2 where
+  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2
+  setNext x next = x{next = next}
+  getNext PhysicalDeviceProperties2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceProperties2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PhysicalDeviceRobustness2PropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCustomBorderColorPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVulkan12Properties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVulkan11Properties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceLineRasterizationPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSubgroupSizeControlPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTexelBufferAlignmentPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderSMBuiltinsPropertiesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePerformanceQueryPropertiesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceCooperativeMatrixPropertiesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceFragmentDensityMapPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceRayTracingPropertiesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceRayTracingPropertiesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMeshShaderPropertiesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShadingRateImagePropertiesNV = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTransformFeedbackPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDepthStencilResolveProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePCIBusInfoPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceVertexAttributeDivisorPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceTimelineSemaphoreProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDescriptorIndexingProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderCoreProperties2AMD = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceShaderCorePropertiesAMD = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceConservativeRasterizationPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceExternalMemoryHostPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceFloatControlsProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMaintenance3Properties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceInlineUniformBlockPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceBlendOperationAdvancedPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSampleLocationsPropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSamplerFilterMinmaxProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceProtectedMemoryProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePointClippingProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceSubgroupProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDiscardRectanglePropertiesEXT = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceMultiviewProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceIDProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDriverProperties = Just f
+    | Just Refl <- eqT @e @PhysicalDevicePushDescriptorPropertiesKHR = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss PhysicalDeviceProperties2 es, PokeChain es) => ToCStruct (PhysicalDeviceProperties2 es) where
+  withCStruct x f = allocaBytesAligned 840 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceProperties2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceProperties)) (properties) . ($ ())
+    lift $ f
+  cStructSize = 840
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceProperties)) (zero) . ($ ())
+    lift $ f
+
+instance (Extendss PhysicalDeviceProperties2 es, PeekChain es) => FromCStruct (PhysicalDeviceProperties2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    properties <- peekCStruct @PhysicalDeviceProperties ((p `plusPtr` 16 :: Ptr PhysicalDeviceProperties))
+    pure $ PhysicalDeviceProperties2
+             next properties
+
+instance es ~ '[] => Zero (PhysicalDeviceProperties2 es) where
+  zero = PhysicalDeviceProperties2
+           ()
+           zero
+
+
+-- | VkFormatProperties2 - Structure specifying image format properties
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FORMAT_PROPERTIES_2'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesListEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DeviceInitialization.FormatProperties',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceFormatProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2KHR'
+data FormatProperties2 (es :: [Type]) = FormatProperties2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @formatProperties@ is a
+    -- 'Vulkan.Core10.DeviceInitialization.FormatProperties' structure
+    -- describing features supported by the requested format.
+    formatProperties :: FormatProperties
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (FormatProperties2 es)
+
+instance Extensible FormatProperties2 where
+  extensibleType = STRUCTURE_TYPE_FORMAT_PROPERTIES_2
+  setNext x next = x{next = next}
+  getNext FormatProperties2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends FormatProperties2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DrmFormatModifierPropertiesListEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss FormatProperties2 es, PokeChain es) => ToCStruct (FormatProperties2 es) where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p FormatProperties2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FORMAT_PROPERTIES_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr FormatProperties)) (formatProperties) . ($ ())
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FORMAT_PROPERTIES_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr FormatProperties)) (zero) . ($ ())
+    lift $ f
+
+instance (Extendss FormatProperties2 es, PeekChain es) => FromCStruct (FormatProperties2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    formatProperties <- peekCStruct @FormatProperties ((p `plusPtr` 16 :: Ptr FormatProperties))
+    pure $ FormatProperties2
+             next formatProperties
+
+instance es ~ '[] => Zero (FormatProperties2 es) where
+  zero = FormatProperties2
+           ()
+           zero
+
+
+-- | VkImageFormatProperties2 - Structure specifying an image format
+-- properties
+--
+-- = Description
+--
+-- If the combination of parameters to
+-- 'getPhysicalDeviceImageFormatProperties2' is not supported by the
+-- implementation for use in 'Vulkan.Core10.Image.createImage', then all
+-- members of @imageFormatProperties@ will be filled with zero.
+--
+-- Note
+--
+-- Filling @imageFormatProperties@ with zero for unsupported formats is an
+-- exception to the usual rule that output structures have undefined
+-- contents on error. This exception was unintentional, but is preserved
+-- for backwards compatibility. This exeption only applies to
+-- @imageFormatProperties@, not @sType@, @pNext@, or any structures chained
+-- from @pNext@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferUsageANDROID',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties',
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionImageFormatProperties',
+--     or
+--     'Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.TextureLODGatherFormatPropertiesAMD'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceImageFormatProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2KHR'
+data ImageFormatProperties2 (es :: [Type]) = ImageFormatProperties2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure. The
+    -- @pNext@ chain of 'ImageFormatProperties2' is used to allow the
+    -- specification of additional capabilities to be returned from
+    -- 'getPhysicalDeviceImageFormatProperties2'.
+    next :: Chain es
+  , -- | @imageFormatProperties@ is a
+    -- 'Vulkan.Core10.DeviceInitialization.ImageFormatProperties' structure in
+    -- which capabilities are returned.
+    imageFormatProperties :: ImageFormatProperties
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (ImageFormatProperties2 es)
+
+instance Extensible ImageFormatProperties2 where
+  extensibleType = STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2
+  setNext x next = x{next = next}
+  getNext ImageFormatProperties2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageFormatProperties2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @FilterCubicImageViewImageFormatPropertiesEXT = Just f
+    | Just Refl <- eqT @e @AndroidHardwareBufferUsageANDROID = Just f
+    | Just Refl <- eqT @e @TextureLODGatherFormatPropertiesAMD = Just f
+    | Just Refl <- eqT @e @SamplerYcbcrConversionImageFormatProperties = Just f
+    | Just Refl <- eqT @e @ExternalImageFormatProperties = Just f
+    | otherwise = Nothing
+
+instance (Extendss ImageFormatProperties2 es, PokeChain es) => ToCStruct (ImageFormatProperties2 es) where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageFormatProperties2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageFormatProperties)) (imageFormatProperties) . ($ ())
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageFormatProperties)) (zero) . ($ ())
+    lift $ f
+
+instance (Extendss ImageFormatProperties2 es, PeekChain es) => FromCStruct (ImageFormatProperties2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    imageFormatProperties <- peekCStruct @ImageFormatProperties ((p `plusPtr` 16 :: Ptr ImageFormatProperties))
+    pure $ ImageFormatProperties2
+             next imageFormatProperties
+
+instance es ~ '[] => Zero (ImageFormatProperties2 es) where
+  zero = ImageFormatProperties2
+           ()
+           zero
+
+
+-- | VkPhysicalDeviceImageFormatInfo2 - Structure specifying image creation
+-- parameters
+--
+-- = Description
+--
+-- The members of 'PhysicalDeviceImageFormatInfo2' correspond to the
+-- arguments to
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
+-- with @sType@ and @pNext@ added for extensibility.
+--
+-- == Valid Usage
+--
+-- -   @tiling@ /must/ be
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
+--     if and only if the @pNext@ chain includes
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT'
+--
+-- -   If @tiling@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
+--     and @flags@ contains
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
+--     then the @pNext@ chain /must/ include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
+--     structure with non-zero @viewFormatCount@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo',
+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo',
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo',
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT',
+--     or
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.PhysicalDeviceImageViewImageFormatInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- -   @type@ /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType'
+--     value
+--
+-- -   @tiling@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value
+--
+-- -   @usage@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',
+-- 'Vulkan.Core10.Enums.ImageTiling.ImageTiling',
+-- 'Vulkan.Core10.Enums.ImageType.ImageType',
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceImageFormatProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2KHR'
+data PhysicalDeviceImageFormatInfo2 (es :: [Type]) = PhysicalDeviceImageFormatInfo2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure. The
+    -- @pNext@ chain of 'PhysicalDeviceImageFormatInfo2' is used to provide
+    -- additional image parameters to
+    -- 'getPhysicalDeviceImageFormatProperties2'.
+    next :: Chain es
+  , -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' value indicating the
+    -- image format, corresponding to
+    -- 'Vulkan.Core10.Image.ImageCreateInfo'::@format@.
+    format :: Format
+  , -- | @type@ is a 'Vulkan.Core10.Enums.ImageType.ImageType' value indicating
+    -- the image type, corresponding to
+    -- 'Vulkan.Core10.Image.ImageCreateInfo'::@imageType@.
+    type' :: ImageType
+  , -- | @tiling@ is a 'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value
+    -- indicating the image tiling, corresponding to
+    -- 'Vulkan.Core10.Image.ImageCreateInfo'::@tiling@.
+    tiling :: ImageTiling
+  , -- | @usage@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' indicating
+    -- the intended usage of the image, corresponding to
+    -- 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@.
+    usage :: ImageUsageFlags
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' indicating
+    -- additional parameters of the image, corresponding to
+    -- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@.
+    flags :: ImageCreateFlags
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PhysicalDeviceImageFormatInfo2 es)
+
+instance Extensible PhysicalDeviceImageFormatInfo2 where
+  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2
+  setNext x next = x{next = next}
+  getNext PhysicalDeviceImageFormatInfo2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceImageFormatInfo2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PhysicalDeviceImageViewImageFormatInfoEXT = Just f
+    | Just Refl <- eqT @e @ImageStencilUsageCreateInfo = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceImageDrmFormatModifierInfoEXT = Just f
+    | Just Refl <- eqT @e @ImageFormatListCreateInfo = Just f
+    | Just Refl <- eqT @e @PhysicalDeviceExternalImageFormatInfo = Just f
+    | otherwise = Nothing
+
+instance (Extendss PhysicalDeviceImageFormatInfo2 es, PokeChain es) => ToCStruct (PhysicalDeviceImageFormatInfo2 es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceImageFormatInfo2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (format)
+    lift $ poke ((p `plusPtr` 20 :: Ptr ImageType)) (type')
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageTiling)) (tiling)
+    lift $ poke ((p `plusPtr` 28 :: Ptr ImageUsageFlags)) (usage)
+    lift $ poke ((p `plusPtr` 32 :: Ptr ImageCreateFlags)) (flags)
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
+    lift $ poke ((p `plusPtr` 20 :: Ptr ImageType)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageTiling)) (zero)
+    lift $ poke ((p `plusPtr` 28 :: Ptr ImageUsageFlags)) (zero)
+    lift $ f
+
+instance (Extendss PhysicalDeviceImageFormatInfo2 es, PeekChain es) => FromCStruct (PhysicalDeviceImageFormatInfo2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    format <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
+    type' <- peek @ImageType ((p `plusPtr` 20 :: Ptr ImageType))
+    tiling <- peek @ImageTiling ((p `plusPtr` 24 :: Ptr ImageTiling))
+    usage <- peek @ImageUsageFlags ((p `plusPtr` 28 :: Ptr ImageUsageFlags))
+    flags <- peek @ImageCreateFlags ((p `plusPtr` 32 :: Ptr ImageCreateFlags))
+    pure $ PhysicalDeviceImageFormatInfo2
+             next format type' tiling usage flags
+
+instance es ~ '[] => Zero (PhysicalDeviceImageFormatInfo2 es) where
+  zero = PhysicalDeviceImageFormatInfo2
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkQueueFamilyProperties2 - Structure providing information about a queue
+-- family
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.QueueFamilyCheckpointPropertiesNV'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceQueueFamilyProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2KHR'
+data QueueFamilyProperties2 (es :: [Type]) = QueueFamilyProperties2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @queueFamilyProperties@ is a
+    -- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties' structure
+    -- which is populated with the same values as in
+    -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'.
+    queueFamilyProperties :: QueueFamilyProperties
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (QueueFamilyProperties2 es)
+
+instance Extensible QueueFamilyProperties2 where
+  extensibleType = STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2
+  setNext x next = x{next = next}
+  getNext QueueFamilyProperties2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends QueueFamilyProperties2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @QueueFamilyCheckpointPropertiesNV = Just f
+    | otherwise = Nothing
+
+instance (Extendss QueueFamilyProperties2 es, PokeChain es) => ToCStruct (QueueFamilyProperties2 es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p QueueFamilyProperties2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr QueueFamilyProperties)) (queueFamilyProperties) . ($ ())
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr QueueFamilyProperties)) (zero) . ($ ())
+    lift $ f
+
+instance (Extendss QueueFamilyProperties2 es, PeekChain es) => FromCStruct (QueueFamilyProperties2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    queueFamilyProperties <- peekCStruct @QueueFamilyProperties ((p `plusPtr` 16 :: Ptr QueueFamilyProperties))
+    pure $ QueueFamilyProperties2
+             next queueFamilyProperties
+
+instance es ~ '[] => Zero (QueueFamilyProperties2 es) where
+  zero = QueueFamilyProperties2
+           ()
+           zero
+
+
+-- | VkPhysicalDeviceMemoryProperties2 - Structure specifying physical device
+-- memory properties
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_memory_budget.PhysicalDeviceMemoryBudgetPropertiesEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceMemoryProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceMemoryProperties2KHR'
+data PhysicalDeviceMemoryProperties2 (es :: [Type]) = PhysicalDeviceMemoryProperties2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @memoryProperties@ is a
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'
+    -- structure which is populated with the same values as in
+    -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties'.
+    memoryProperties :: PhysicalDeviceMemoryProperties
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PhysicalDeviceMemoryProperties2 es)
+
+instance Extensible PhysicalDeviceMemoryProperties2 where
+  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2
+  setNext x next = x{next = next}
+  getNext PhysicalDeviceMemoryProperties2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceMemoryProperties2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PhysicalDeviceMemoryBudgetPropertiesEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss PhysicalDeviceMemoryProperties2 es, PokeChain es) => ToCStruct (PhysicalDeviceMemoryProperties2 es) where
+  withCStruct x f = allocaBytesAligned 536 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMemoryProperties2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceMemoryProperties)) (memoryProperties) . ($ ())
+    lift $ f
+  cStructSize = 536
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr PhysicalDeviceMemoryProperties)) (zero) . ($ ())
+    lift $ f
+
+instance (Extendss PhysicalDeviceMemoryProperties2 es, PeekChain es) => FromCStruct (PhysicalDeviceMemoryProperties2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    memoryProperties <- peekCStruct @PhysicalDeviceMemoryProperties ((p `plusPtr` 16 :: Ptr PhysicalDeviceMemoryProperties))
+    pure $ PhysicalDeviceMemoryProperties2
+             next memoryProperties
+
+instance es ~ '[] => Zero (PhysicalDeviceMemoryProperties2 es) where
+  zero = PhysicalDeviceMemoryProperties2
+           ()
+           zero
+
+
+-- | VkSparseImageFormatProperties2 - Structure specifying sparse image
+-- format properties
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceSparseImageFormatProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceSparseImageFormatProperties2KHR'
+data SparseImageFormatProperties2 = SparseImageFormatProperties2
+  { -- | @properties@ is a
+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'
+    -- structure which is populated with the same values as in
+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.getPhysicalDeviceSparseImageFormatProperties'.
+    properties :: SparseImageFormatProperties }
+  deriving (Typeable)
+deriving instance Show SparseImageFormatProperties2
+
+instance ToCStruct SparseImageFormatProperties2 where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SparseImageFormatProperties2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SparseImageFormatProperties)) (properties) . ($ ())
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SparseImageFormatProperties)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct SparseImageFormatProperties2 where
+  peekCStruct p = do
+    properties <- peekCStruct @SparseImageFormatProperties ((p `plusPtr` 16 :: Ptr SparseImageFormatProperties))
+    pure $ SparseImageFormatProperties2
+             properties
+
+instance Zero SparseImageFormatProperties2 where
+  zero = SparseImageFormatProperties2
+           zero
+
+
+-- | VkPhysicalDeviceSparseImageFormatInfo2 - Structure specifying sparse
+-- image format inputs
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.ImageTiling.ImageTiling',
+-- 'Vulkan.Core10.Enums.ImageType.ImageType',
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceSparseImageFormatProperties2',
+-- 'Vulkan.Extensions.VK_KHR_get_physical_device_properties2.getPhysicalDeviceSparseImageFormatProperties2KHR'
+data PhysicalDeviceSparseImageFormatInfo2 = PhysicalDeviceSparseImageFormatInfo2
+  { -- | @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+    format :: Format
+  , -- | @type@ /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType' value
+    type' :: ImageType
+  , -- | @samples@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+    samples :: SampleCountFlagBits
+  , -- | @usage@ /must/ not be @0@
+    usage :: ImageUsageFlags
+  , -- | @tiling@ /must/ be a valid 'Vulkan.Core10.Enums.ImageTiling.ImageTiling'
+    -- value
+    tiling :: ImageTiling
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceSparseImageFormatInfo2
+
+instance ToCStruct PhysicalDeviceSparseImageFormatInfo2 where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSparseImageFormatInfo2{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Format)) (format)
+    poke ((p `plusPtr` 20 :: Ptr ImageType)) (type')
+    poke ((p `plusPtr` 24 :: Ptr SampleCountFlagBits)) (samples)
+    poke ((p `plusPtr` 28 :: Ptr ImageUsageFlags)) (usage)
+    poke ((p `plusPtr` 32 :: Ptr ImageTiling)) (tiling)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr ImageType)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr SampleCountFlagBits)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr ImageUsageFlags)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr ImageTiling)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceSparseImageFormatInfo2 where
+  peekCStruct p = do
+    format <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
+    type' <- peek @ImageType ((p `plusPtr` 20 :: Ptr ImageType))
+    samples <- peek @SampleCountFlagBits ((p `plusPtr` 24 :: Ptr SampleCountFlagBits))
+    usage <- peek @ImageUsageFlags ((p `plusPtr` 28 :: Ptr ImageUsageFlags))
+    tiling <- peek @ImageTiling ((p `plusPtr` 32 :: Ptr ImageTiling))
+    pure $ PhysicalDeviceSparseImageFormatInfo2
+             format type' samples usage tiling
+
+instance Storable PhysicalDeviceSparseImageFormatInfo2 where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceSparseImageFormatInfo2 where
+  zero = PhysicalDeviceSparseImageFormatInfo2
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs-boot
@@ -0,0 +1,97 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2  ( FormatProperties2
+                                                                           , ImageFormatProperties2
+                                                                           , PhysicalDeviceFeatures2
+                                                                           , PhysicalDeviceImageFormatInfo2
+                                                                           , PhysicalDeviceMemoryProperties2
+                                                                           , PhysicalDeviceProperties2
+                                                                           , PhysicalDeviceSparseImageFormatInfo2
+                                                                           , QueueFamilyProperties2
+                                                                           , SparseImageFormatProperties2
+                                                                           ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role FormatProperties2 nominal
+data FormatProperties2 (es :: [Type])
+
+instance (Extendss FormatProperties2 es, PokeChain es) => ToCStruct (FormatProperties2 es)
+instance Show (Chain es) => Show (FormatProperties2 es)
+
+instance (Extendss FormatProperties2 es, PeekChain es) => FromCStruct (FormatProperties2 es)
+
+
+type role ImageFormatProperties2 nominal
+data ImageFormatProperties2 (es :: [Type])
+
+instance (Extendss ImageFormatProperties2 es, PokeChain es) => ToCStruct (ImageFormatProperties2 es)
+instance Show (Chain es) => Show (ImageFormatProperties2 es)
+
+instance (Extendss ImageFormatProperties2 es, PeekChain es) => FromCStruct (ImageFormatProperties2 es)
+
+
+type role PhysicalDeviceFeatures2 nominal
+data PhysicalDeviceFeatures2 (es :: [Type])
+
+instance (Extendss PhysicalDeviceFeatures2 es, PokeChain es) => ToCStruct (PhysicalDeviceFeatures2 es)
+instance Show (Chain es) => Show (PhysicalDeviceFeatures2 es)
+
+instance (Extendss PhysicalDeviceFeatures2 es, PeekChain es) => FromCStruct (PhysicalDeviceFeatures2 es)
+
+
+type role PhysicalDeviceImageFormatInfo2 nominal
+data PhysicalDeviceImageFormatInfo2 (es :: [Type])
+
+instance (Extendss PhysicalDeviceImageFormatInfo2 es, PokeChain es) => ToCStruct (PhysicalDeviceImageFormatInfo2 es)
+instance Show (Chain es) => Show (PhysicalDeviceImageFormatInfo2 es)
+
+instance (Extendss PhysicalDeviceImageFormatInfo2 es, PeekChain es) => FromCStruct (PhysicalDeviceImageFormatInfo2 es)
+
+
+type role PhysicalDeviceMemoryProperties2 nominal
+data PhysicalDeviceMemoryProperties2 (es :: [Type])
+
+instance (Extendss PhysicalDeviceMemoryProperties2 es, PokeChain es) => ToCStruct (PhysicalDeviceMemoryProperties2 es)
+instance Show (Chain es) => Show (PhysicalDeviceMemoryProperties2 es)
+
+instance (Extendss PhysicalDeviceMemoryProperties2 es, PeekChain es) => FromCStruct (PhysicalDeviceMemoryProperties2 es)
+
+
+type role PhysicalDeviceProperties2 nominal
+data PhysicalDeviceProperties2 (es :: [Type])
+
+instance (Extendss PhysicalDeviceProperties2 es, PokeChain es) => ToCStruct (PhysicalDeviceProperties2 es)
+instance Show (Chain es) => Show (PhysicalDeviceProperties2 es)
+
+instance (Extendss PhysicalDeviceProperties2 es, PeekChain es) => FromCStruct (PhysicalDeviceProperties2 es)
+
+
+data PhysicalDeviceSparseImageFormatInfo2
+
+instance ToCStruct PhysicalDeviceSparseImageFormatInfo2
+instance Show PhysicalDeviceSparseImageFormatInfo2
+
+instance FromCStruct PhysicalDeviceSparseImageFormatInfo2
+
+
+type role QueueFamilyProperties2 nominal
+data QueueFamilyProperties2 (es :: [Type])
+
+instance (Extendss QueueFamilyProperties2 es, PokeChain es) => ToCStruct (QueueFamilyProperties2 es)
+instance Show (Chain es) => Show (QueueFamilyProperties2 es)
+
+instance (Extendss QueueFamilyProperties2 es, PeekChain es) => FromCStruct (QueueFamilyProperties2 es)
+
+
+data SparseImageFormatProperties2
+
+instance ToCStruct SparseImageFormatProperties2
+instance Show SparseImageFormatProperties2
+
+instance FromCStruct SparseImageFormatProperties2
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance1.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance1.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance1.hs
@@ -0,0 +1,121 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_maintenance1  ( trimCommandPool
+                                                        , CommandPoolTrimFlags(..)
+                                                        , Result(..)
+                                                        , ImageCreateFlagBits(..)
+                                                        , ImageCreateFlags
+                                                        , FormatFeatureFlagBits(..)
+                                                        , FormatFeatureFlags
+                                                        ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Control.Monad.IO.Class (MonadIO)
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Vulkan.Core10.Handles (CommandPool)
+import Vulkan.Core10.Handles (CommandPool(..))
+import Vulkan.Core11.Enums.CommandPoolTrimFlags (CommandPoolTrimFlags)
+import Vulkan.Core11.Enums.CommandPoolTrimFlags (CommandPoolTrimFlags(..))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkTrimCommandPool))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core11.Enums.CommandPoolTrimFlags (CommandPoolTrimFlags(..))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(..))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.Result (Result(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkTrimCommandPool
+  :: FunPtr (Ptr Device_T -> CommandPool -> CommandPoolTrimFlags -> IO ()) -> Ptr Device_T -> CommandPool -> CommandPoolTrimFlags -> IO ()
+
+-- | vkTrimCommandPool - Trim a command pool
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the command pool.
+--
+-- -   @commandPool@ is the command pool to trim.
+--
+-- -   @flags@ is reserved for future use.
+--
+-- = Description
+--
+-- Trimming a command pool recycles unused memory from the command pool
+-- back to the system. Command buffers allocated from the pool are not
+-- affected by the command.
+--
+-- Note
+--
+-- This command provides applications with some control over the internal
+-- memory allocations used by command pools.
+--
+-- Unused memory normally arises from command buffers that have been
+-- recorded and later reset, such that they are no longer using the memory.
+-- On reset, a command buffer can return memory to its command pool, but
+-- the only way to release memory from a command pool to the system
+-- requires calling 'Vulkan.Core10.CommandPool.resetCommandPool', which
+-- cannot be executed while any command buffers from that pool are still in
+-- use. Subsequent recording operations into command buffers will re-use
+-- this memory but since total memory requirements fluctuate over time,
+-- unused memory can accumulate.
+--
+-- In this situation, trimming a command pool /may/ be useful to return
+-- unused memory back to the system, returning the total outstanding memory
+-- allocated by the pool back to a more “average” value.
+--
+-- Implementations utilize many internal allocation strategies that make it
+-- impossible to guarantee that all unused memory is released back to the
+-- system. For instance, an implementation of a command pool /may/ involve
+-- allocating memory in bulk from the system and sub-allocating from that
+-- memory. In such an implementation any live command buffer that holds a
+-- reference to a bulk allocation would prevent that allocation from being
+-- freed, even if only a small proportion of the bulk allocation is in use.
+--
+-- In most cases trimming will result in a reduction in allocated but
+-- unused memory, but it does not guarantee the “ideal” behavior.
+--
+-- Trimming /may/ be an expensive operation, and /should/ not be called
+-- frequently. Trimming /should/ be treated as a way to relieve memory
+-- pressure after application-known points when there exists enough unused
+-- memory that the cost of trimming is “worth” it.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @commandPool@ /must/ be a valid 'Vulkan.Core10.Handles.CommandPool'
+--     handle
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @commandPool@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandPool@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandPool',
+-- 'Vulkan.Core11.Enums.CommandPoolTrimFlags.CommandPoolTrimFlags',
+-- 'Vulkan.Core10.Handles.Device'
+trimCommandPool :: forall io . MonadIO io => Device -> CommandPool -> CommandPoolTrimFlags -> io ()
+trimCommandPool device commandPool flags = liftIO $ do
+  let vkTrimCommandPoolPtr = pVkTrimCommandPool (deviceCmds (device :: Device))
+  unless (vkTrimCommandPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkTrimCommandPool is null" Nothing Nothing
+  let vkTrimCommandPool' = mkVkTrimCommandPool vkTrimCommandPoolPtr
+  vkTrimCommandPool' (deviceHandle (device)) (commandPool) (flags)
+  pure $ ()
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs
@@ -0,0 +1,339 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_maintenance2  ( InputAttachmentAspectReference(..)
+                                                        , RenderPassInputAttachmentAspectCreateInfo(..)
+                                                        , PhysicalDevicePointClippingProperties(..)
+                                                        , ImageViewUsageCreateInfo(..)
+                                                        , PipelineTessellationDomainOriginStateCreateInfo(..)
+                                                        , ImageLayout(..)
+                                                        , StructureType(..)
+                                                        , ImageCreateFlagBits(..)
+                                                        , ImageCreateFlags
+                                                        , PointClippingBehavior(..)
+                                                        , TessellationDomainOrigin(..)
+                                                        ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core11.Enums.TessellationDomainOrigin (TessellationDomainOrigin)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(..))
+import Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+import Vulkan.Core11.Enums.TessellationDomainOrigin (TessellationDomainOrigin(..))
+-- | VkInputAttachmentAspectReference - Structure specifying a subpass\/input
+-- attachment pair and an aspect mask that /can/ be read.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
+-- 'RenderPassInputAttachmentAspectCreateInfo'
+data InputAttachmentAspectReference = InputAttachmentAspectReference
+  { -- | @subpass@ is an index into the @pSubpasses@ array of the parent
+    -- 'Vulkan.Core10.Pass.RenderPassCreateInfo' structure.
+    subpass :: Word32
+  , -- | @inputAttachmentIndex@ is an index into the @pInputAttachments@ of the
+    -- specified subpass.
+    inputAttachmentIndex :: Word32
+  , -- | @aspectMask@ /must/ not be @0@
+    aspectMask :: ImageAspectFlags
+  }
+  deriving (Typeable)
+deriving instance Show InputAttachmentAspectReference
+
+instance ToCStruct InputAttachmentAspectReference where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p InputAttachmentAspectReference{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (subpass)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (inputAttachmentIndex)
+    poke ((p `plusPtr` 8 :: Ptr ImageAspectFlags)) (aspectMask)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr ImageAspectFlags)) (zero)
+    f
+
+instance FromCStruct InputAttachmentAspectReference where
+  peekCStruct p = do
+    subpass <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    inputAttachmentIndex <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 8 :: Ptr ImageAspectFlags))
+    pure $ InputAttachmentAspectReference
+             subpass inputAttachmentIndex aspectMask
+
+instance Storable InputAttachmentAspectReference where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero InputAttachmentAspectReference where
+  zero = InputAttachmentAspectReference
+           zero
+           zero
+           zero
+
+
+-- | VkRenderPassInputAttachmentAspectCreateInfo - Structure specifying, for
+-- a given subpass\/input attachment pair, which aspect /can/ be read.
+--
+-- = Description
+--
+-- An application /can/ access any aspect of an input attachment that does
+-- not have a specified aspect mask in the @pAspectReferences@ array.
+-- Otherwise, an application /must/ not access aspect(s) of an input
+-- attachment other than those in its specified aspect mask.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'InputAttachmentAspectReference',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data RenderPassInputAttachmentAspectCreateInfo = RenderPassInputAttachmentAspectCreateInfo
+  { -- | @pAspectReferences@ /must/ be a valid pointer to an array of
+    -- @aspectReferenceCount@ valid 'InputAttachmentAspectReference' structures
+    aspectReferences :: Vector InputAttachmentAspectReference }
+  deriving (Typeable)
+deriving instance Show RenderPassInputAttachmentAspectCreateInfo
+
+instance ToCStruct RenderPassInputAttachmentAspectCreateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RenderPassInputAttachmentAspectCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (aspectReferences)) :: Word32))
+    pPAspectReferences' <- ContT $ allocaBytesAligned @InputAttachmentAspectReference ((Data.Vector.length (aspectReferences)) * 12) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAspectReferences' `plusPtr` (12 * (i)) :: Ptr InputAttachmentAspectReference) (e) . ($ ())) (aspectReferences)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr InputAttachmentAspectReference))) (pPAspectReferences')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPAspectReferences' <- ContT $ allocaBytesAligned @InputAttachmentAspectReference ((Data.Vector.length (mempty)) * 12) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAspectReferences' `plusPtr` (12 * (i)) :: Ptr InputAttachmentAspectReference) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr InputAttachmentAspectReference))) (pPAspectReferences')
+    lift $ f
+
+instance FromCStruct RenderPassInputAttachmentAspectCreateInfo where
+  peekCStruct p = do
+    aspectReferenceCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pAspectReferences <- peek @(Ptr InputAttachmentAspectReference) ((p `plusPtr` 24 :: Ptr (Ptr InputAttachmentAspectReference)))
+    pAspectReferences' <- generateM (fromIntegral aspectReferenceCount) (\i -> peekCStruct @InputAttachmentAspectReference ((pAspectReferences `advancePtrBytes` (12 * (i)) :: Ptr InputAttachmentAspectReference)))
+    pure $ RenderPassInputAttachmentAspectCreateInfo
+             pAspectReferences'
+
+instance Zero RenderPassInputAttachmentAspectCreateInfo where
+  zero = RenderPassInputAttachmentAspectCreateInfo
+           mempty
+
+
+-- | VkPhysicalDevicePointClippingProperties - Structure describing the point
+-- clipping behavior supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDevicePointClippingProperties' structure
+-- describe the following implementation-dependent limit:
+--
+-- = Description
+--
+-- If the 'PhysicalDevicePointClippingProperties' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePointClippingProperties = PhysicalDevicePointClippingProperties
+  { -- | @pointClippingBehavior@ is a
+    -- 'Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior' value
+    -- specifying the point clipping behavior supported by the implementation.
+    pointClippingBehavior :: PointClippingBehavior }
+  deriving (Typeable)
+deriving instance Show PhysicalDevicePointClippingProperties
+
+instance ToCStruct PhysicalDevicePointClippingProperties where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePointClippingProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PointClippingBehavior)) (pointClippingBehavior)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PointClippingBehavior)) (zero)
+    f
+
+instance FromCStruct PhysicalDevicePointClippingProperties where
+  peekCStruct p = do
+    pointClippingBehavior <- peek @PointClippingBehavior ((p `plusPtr` 16 :: Ptr PointClippingBehavior))
+    pure $ PhysicalDevicePointClippingProperties
+             pointClippingBehavior
+
+instance Storable PhysicalDevicePointClippingProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePointClippingProperties where
+  zero = PhysicalDevicePointClippingProperties
+           zero
+
+
+-- | VkImageViewUsageCreateInfo - Specify the intended usage of an image view
+--
+-- = Description
+--
+-- When this structure is chained to
+-- 'Vulkan.Core10.ImageView.ImageViewCreateInfo' the @usage@ field
+-- overrides the implicit @usage@ parameter inherited from image creation
+-- time and its value is used instead for the purposes of determining the
+-- valid usage conditions of 'Vulkan.Core10.ImageView.ImageViewCreateInfo'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImageViewUsageCreateInfo = ImageViewUsageCreateInfo
+  { -- | @usage@ /must/ not be @0@
+    usage :: ImageUsageFlags }
+  deriving (Typeable)
+deriving instance Show ImageViewUsageCreateInfo
+
+instance ToCStruct ImageViewUsageCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageViewUsageCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageUsageFlags)) (usage)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageUsageFlags)) (zero)
+    f
+
+instance FromCStruct ImageViewUsageCreateInfo where
+  peekCStruct p = do
+    usage <- peek @ImageUsageFlags ((p `plusPtr` 16 :: Ptr ImageUsageFlags))
+    pure $ ImageViewUsageCreateInfo
+             usage
+
+instance Storable ImageViewUsageCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageViewUsageCreateInfo where
+  zero = ImageViewUsageCreateInfo
+           zero
+
+
+-- | VkPipelineTessellationDomainOriginStateCreateInfo - Structure specifying
+-- the orientation of the tessellation domain
+--
+-- = Description
+--
+-- If the 'PipelineTessellationDomainOriginStateCreateInfo' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo', it
+-- controls the origin of the tessellation domain. If this structure is not
+-- present, it is as if @domainOrigin@ were
+-- 'Vulkan.Core11.Enums.TessellationDomainOrigin.TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Core11.Enums.TessellationDomainOrigin.TessellationDomainOrigin'
+data PipelineTessellationDomainOriginStateCreateInfo = PipelineTessellationDomainOriginStateCreateInfo
+  { -- | @domainOrigin@ /must/ be a valid
+    -- 'Vulkan.Core11.Enums.TessellationDomainOrigin.TessellationDomainOrigin'
+    -- value
+    domainOrigin :: TessellationDomainOrigin }
+  deriving (Typeable)
+deriving instance Show PipelineTessellationDomainOriginStateCreateInfo
+
+instance ToCStruct PipelineTessellationDomainOriginStateCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineTessellationDomainOriginStateCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr TessellationDomainOrigin)) (domainOrigin)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr TessellationDomainOrigin)) (zero)
+    f
+
+instance FromCStruct PipelineTessellationDomainOriginStateCreateInfo where
+  peekCStruct p = do
+    domainOrigin <- peek @TessellationDomainOrigin ((p `plusPtr` 16 :: Ptr TessellationDomainOrigin))
+    pure $ PipelineTessellationDomainOriginStateCreateInfo
+             domainOrigin
+
+instance Storable PipelineTessellationDomainOriginStateCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineTessellationDomainOriginStateCreateInfo where
+  zero = PipelineTessellationDomainOriginStateCreateInfo
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs-boot
@@ -0,0 +1,50 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_maintenance2  ( ImageViewUsageCreateInfo
+                                                        , InputAttachmentAspectReference
+                                                        , PhysicalDevicePointClippingProperties
+                                                        , PipelineTessellationDomainOriginStateCreateInfo
+                                                        , RenderPassInputAttachmentAspectCreateInfo
+                                                        ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ImageViewUsageCreateInfo
+
+instance ToCStruct ImageViewUsageCreateInfo
+instance Show ImageViewUsageCreateInfo
+
+instance FromCStruct ImageViewUsageCreateInfo
+
+
+data InputAttachmentAspectReference
+
+instance ToCStruct InputAttachmentAspectReference
+instance Show InputAttachmentAspectReference
+
+instance FromCStruct InputAttachmentAspectReference
+
+
+data PhysicalDevicePointClippingProperties
+
+instance ToCStruct PhysicalDevicePointClippingProperties
+instance Show PhysicalDevicePointClippingProperties
+
+instance FromCStruct PhysicalDevicePointClippingProperties
+
+
+data PipelineTessellationDomainOriginStateCreateInfo
+
+instance ToCStruct PipelineTessellationDomainOriginStateCreateInfo
+instance Show PipelineTessellationDomainOriginStateCreateInfo
+
+instance FromCStruct PipelineTessellationDomainOriginStateCreateInfo
+
+
+data RenderPassInputAttachmentAspectCreateInfo
+
+instance ToCStruct RenderPassInputAttachmentAspectCreateInfo
+instance Show RenderPassInputAttachmentAspectCreateInfo
+
+instance FromCStruct RenderPassInputAttachmentAspectCreateInfo
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs
@@ -0,0 +1,277 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_maintenance3  ( getDescriptorSetLayoutSupport
+                                                        , PhysicalDeviceMaintenance3Properties(..)
+                                                        , DescriptorSetLayoutSupport(..)
+                                                        , StructureType(..)
+                                                        ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.DescriptorSet (DescriptorSetLayoutCreateInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountLayoutSupport)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDescriptorSetLayoutSupport))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDescriptorSetLayoutSupport
+  :: FunPtr (Ptr Device_T -> Ptr (DescriptorSetLayoutCreateInfo a) -> Ptr (DescriptorSetLayoutSupport b) -> IO ()) -> Ptr Device_T -> Ptr (DescriptorSetLayoutCreateInfo a) -> Ptr (DescriptorSetLayoutSupport b) -> IO ()
+
+-- | vkGetDescriptorSetLayoutSupport - Query whether a descriptor set layout
+-- can be created
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that would create the descriptor set
+--     layout.
+--
+-- -   @pCreateInfo@ is a pointer to a
+--     'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'
+--     structure specifying the state of the descriptor set layout object.
+--
+-- -   @pSupport@ is a pointer to a 'DescriptorSetLayoutSupport' structure,
+--     in which information about support for the descriptor set layout
+--     object is returned.
+--
+-- = Description
+--
+-- Some implementations have limitations on what fits in a descriptor set
+-- which are not easily expressible in terms of existing limits like
+-- @maxDescriptorSet@*, for example if all descriptor types share a limited
+-- space in memory but each descriptor is a different size or alignment.
+-- This command returns information about whether a descriptor set
+-- satisfies this limit. If the descriptor set layout satisfies the
+-- 'PhysicalDeviceMaintenance3Properties'::@maxPerSetDescriptors@ limit,
+-- this command is guaranteed to return 'Vulkan.Core10.BaseType.TRUE' in
+-- 'DescriptorSetLayoutSupport'::@supported@. If the descriptor set layout
+-- exceeds the
+-- 'PhysicalDeviceMaintenance3Properties'::@maxPerSetDescriptors@ limit,
+-- whether the descriptor set layout is supported is
+-- implementation-dependent and /may/ depend on whether the descriptor
+-- sizes and alignments cause the layout to exceed an internal limit.
+--
+-- This command does not consider other limits such as
+-- @maxPerStageDescriptor@*, and so a descriptor set layout that is
+-- supported according to this command /must/ still satisfy the pipeline
+-- layout limits such as @maxPerStageDescriptor@* in order to be used in a
+-- pipeline layout.
+--
+-- Note
+--
+-- This is a 'Vulkan.Core10.Handles.Device' query rather than
+-- 'Vulkan.Core10.Handles.PhysicalDevice' because the answer /may/ depend
+-- on enabled features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo',
+-- 'DescriptorSetLayoutSupport', 'Vulkan.Core10.Handles.Device'
+getDescriptorSetLayoutSupport :: forall a b io . (Extendss DescriptorSetLayoutCreateInfo a, Extendss DescriptorSetLayoutSupport b, PokeChain a, PokeChain b, PeekChain b, MonadIO io) => Device -> DescriptorSetLayoutCreateInfo a -> io (DescriptorSetLayoutSupport b)
+getDescriptorSetLayoutSupport device createInfo = liftIO . evalContT $ do
+  let vkGetDescriptorSetLayoutSupportPtr = pVkGetDescriptorSetLayoutSupport (deviceCmds (device :: Device))
+  lift $ unless (vkGetDescriptorSetLayoutSupportPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDescriptorSetLayoutSupport is null" Nothing Nothing
+  let vkGetDescriptorSetLayoutSupport' = mkVkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupportPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pPSupport <- ContT (withZeroCStruct @(DescriptorSetLayoutSupport _))
+  lift $ vkGetDescriptorSetLayoutSupport' (deviceHandle (device)) pCreateInfo (pPSupport)
+  pSupport <- lift $ peekCStruct @(DescriptorSetLayoutSupport _) pPSupport
+  pure $ (pSupport)
+
+
+-- | VkPhysicalDeviceMaintenance3Properties - Structure describing descriptor
+-- set properties
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceMaintenance3Properties' structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceMaintenance3Properties' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceMaintenance3Properties = PhysicalDeviceMaintenance3Properties
+  { -- | @maxPerSetDescriptors@ is a maximum number of descriptors (summed over
+    -- all descriptor types) in a single descriptor set that is guaranteed to
+    -- satisfy any implementation-dependent constraints on the size of a
+    -- descriptor set itself. Applications /can/ query whether a descriptor set
+    -- that goes beyond this limit is supported using
+    -- 'getDescriptorSetLayoutSupport'.
+    maxPerSetDescriptors :: Word32
+  , -- | @maxMemoryAllocationSize@ is the maximum size of a memory allocation
+    -- that /can/ be created, even if there is more space available in the
+    -- heap.
+    maxMemoryAllocationSize :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceMaintenance3Properties
+
+instance ToCStruct PhysicalDeviceMaintenance3Properties where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMaintenance3Properties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxPerSetDescriptors)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (maxMemoryAllocationSize)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceMaintenance3Properties where
+  peekCStruct p = do
+    maxPerSetDescriptors <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxMemoryAllocationSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    pure $ PhysicalDeviceMaintenance3Properties
+             maxPerSetDescriptors maxMemoryAllocationSize
+
+instance Storable PhysicalDeviceMaintenance3Properties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceMaintenance3Properties where
+  zero = PhysicalDeviceMaintenance3Properties
+           zero
+           zero
+
+
+-- | VkDescriptorSetLayoutSupport - Structure returning information about
+-- whether a descriptor set layout can be supported
+--
+-- = Description
+--
+-- @supported@ is set to 'Vulkan.Core10.BaseType.TRUE' if the descriptor
+-- set /can/ be created, or else is set to 'Vulkan.Core10.BaseType.FALSE'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountLayoutSupport'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getDescriptorSetLayoutSupport',
+-- 'Vulkan.Extensions.VK_KHR_maintenance3.getDescriptorSetLayoutSupportKHR'
+data DescriptorSetLayoutSupport (es :: [Type]) = DescriptorSetLayoutSupport
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @supported@ specifies whether the descriptor set layout /can/ be
+    -- created.
+    supported :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (DescriptorSetLayoutSupport es)
+
+instance Extensible DescriptorSetLayoutSupport where
+  extensibleType = STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT
+  setNext x next = x{next = next}
+  getNext DescriptorSetLayoutSupport{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DescriptorSetLayoutSupport e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DescriptorSetVariableDescriptorCountLayoutSupport = Just f
+    | otherwise = Nothing
+
+instance (Extendss DescriptorSetLayoutSupport es, PokeChain es) => ToCStruct (DescriptorSetLayoutSupport es) where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorSetLayoutSupport{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (supported))
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance (Extendss DescriptorSetLayoutSupport es, PeekChain es) => FromCStruct (DescriptorSetLayoutSupport es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    supported <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ DescriptorSetLayoutSupport
+             next (bool32ToBool supported)
+
+instance es ~ '[] => Zero (DescriptorSetLayoutSupport es) where
+  zero = DescriptorSetLayoutSupport
+           ()
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs-boot
@@ -0,0 +1,28 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_maintenance3  ( DescriptorSetLayoutSupport
+                                                        , PhysicalDeviceMaintenance3Properties
+                                                        ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role DescriptorSetLayoutSupport nominal
+data DescriptorSetLayoutSupport (es :: [Type])
+
+instance (Extendss DescriptorSetLayoutSupport es, PokeChain es) => ToCStruct (DescriptorSetLayoutSupport es)
+instance Show (Chain es) => Show (DescriptorSetLayoutSupport es)
+
+instance (Extendss DescriptorSetLayoutSupport es, PeekChain es) => FromCStruct (DescriptorSetLayoutSupport es)
+
+
+data PhysicalDeviceMaintenance3Properties
+
+instance ToCStruct PhysicalDeviceMaintenance3Properties
+instance Show PhysicalDeviceMaintenance3Properties
+
+instance FromCStruct PhysicalDeviceMaintenance3Properties
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs
@@ -0,0 +1,401 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_multiview  ( PhysicalDeviceMultiviewFeatures(..)
+                                                     , PhysicalDeviceMultiviewProperties(..)
+                                                     , RenderPassMultiviewCreateInfo(..)
+                                                     , StructureType(..)
+                                                     , DependencyFlagBits(..)
+                                                     , DependencyFlags
+                                                     ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO))
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(..))
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceMultiviewFeatures - Structure describing multiview
+-- features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceMultiviewFeatures' structure describe
+-- the following features:
+--
+-- = Description
+--
+-- -   @multiview@ specifies whether the implementation supports multiview
+--     rendering within a render pass. If this feature is not enabled, the
+--     view mask of each subpass /must/ always be zero.
+--
+-- -   @multiviewGeometryShader@ specifies whether the implementation
+--     supports multiview rendering within a render pass, with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry geometry shaders>.
+--     If this feature is not enabled, then a pipeline compiled against a
+--     subpass with a non-zero view mask /must/ not include a geometry
+--     shader.
+--
+-- -   @multiviewTessellationShader@ specifies whether the implementation
+--     supports multiview rendering within a render pass, with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation tessellation shaders>.
+--     If this feature is not enabled, then a pipeline compiled against a
+--     subpass with a non-zero view mask /must/ not include any
+--     tessellation shaders.
+--
+-- If the 'PhysicalDeviceMultiviewFeatures' structure is included in the
+-- @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceMultiviewFeatures' /can/ also be included in the @pNext@
+-- chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the features.
+--
+-- == Valid Usage
+--
+-- -   If @multiviewGeometryShader@ is enabled then @multiview@ /must/ also
+--     be enabled
+--
+-- -   If @multiviewTessellationShader@ is enabled then @multiview@ /must/
+--     also be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceMultiviewFeatures = PhysicalDeviceMultiviewFeatures
+  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "multiview"
+    multiview :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "multiviewGeometryShader"
+    multiviewGeometryShader :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "multiviewTessellationShader"
+    multiviewTessellationShader :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceMultiviewFeatures
+
+instance ToCStruct PhysicalDeviceMultiviewFeatures where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMultiviewFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (multiview))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (multiviewGeometryShader))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (multiviewTessellationShader))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceMultiviewFeatures where
+  peekCStruct p = do
+    multiview <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    multiviewGeometryShader <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    multiviewTessellationShader <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PhysicalDeviceMultiviewFeatures
+             (bool32ToBool multiview) (bool32ToBool multiviewGeometryShader) (bool32ToBool multiviewTessellationShader)
+
+instance Storable PhysicalDeviceMultiviewFeatures where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceMultiviewFeatures where
+  zero = PhysicalDeviceMultiviewFeatures
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceMultiviewProperties - Structure describing multiview
+-- limits that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceMultiviewProperties' structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceMultiviewProperties' structure is included in the
+-- @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceMultiviewProperties = PhysicalDeviceMultiviewProperties
+  { -- | @maxMultiviewViewCount@ is one greater than the maximum view index that
+    -- /can/ be used in a subpass.
+    maxMultiviewViewCount :: Word32
+  , -- | @maxMultiviewInstanceIndex@ is the maximum valid value of instance index
+    -- allowed to be generated by a drawing command recorded within a subpass
+    -- of a multiview render pass instance.
+    maxMultiviewInstanceIndex :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceMultiviewProperties
+
+instance ToCStruct PhysicalDeviceMultiviewProperties where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMultiviewProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxMultiviewViewCount)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxMultiviewInstanceIndex)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceMultiviewProperties where
+  peekCStruct p = do
+    maxMultiviewViewCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxMultiviewInstanceIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pure $ PhysicalDeviceMultiviewProperties
+             maxMultiviewViewCount maxMultiviewInstanceIndex
+
+instance Storable PhysicalDeviceMultiviewProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceMultiviewProperties where
+  zero = PhysicalDeviceMultiviewProperties
+           zero
+           zero
+
+
+-- | VkRenderPassMultiviewCreateInfo - Structure containing multiview info
+-- for all subpasses
+--
+-- = Description
+--
+-- When a subpass uses a non-zero view mask, /multiview/ functionality is
+-- considered to be enabled. Multiview is all-or-nothing for a render pass
+-- - that is, either all subpasses /must/ have a non-zero view mask (though
+-- some subpasses /may/ have only one view) or all /must/ be zero.
+-- Multiview causes all drawing and clear commands in the subpass to behave
+-- as if they were broadcast to each view, where a view is represented by
+-- one layer of the framebuffer attachments. All draws and clears are
+-- broadcast to each /view index/ whose bit is set in the view mask. The
+-- view index is provided in the @ViewIndex@ shader input variable, and
+-- color, depth\/stencil, and input attachments all read\/write the layer
+-- of the framebuffer corresponding to the view index.
+--
+-- If the view mask is zero for all subpasses, multiview is considered to
+-- be disabled and all drawing commands execute normally, without this
+-- additional broadcasting.
+--
+-- Some implementations /may/ not support multiview in conjunction with
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiview-gs geometry shaders>
+-- or
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiview-tess tessellation shaders>.
+--
+-- When multiview is enabled, the
+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT' bit
+-- in a dependency /can/ be used to express a view-local dependency,
+-- meaning that each view in the destination subpass depends on a single
+-- view in the source subpass. Unlike pipeline barriers, a subpass
+-- dependency /can/ potentially have a different view mask in the source
+-- subpass and the destination subpass. If the dependency is view-local,
+-- then each view (dstView) in the destination subpass depends on the view
+-- dstView + @pViewOffsets@[dependency] in the source subpass. If there is
+-- not such a view in the source subpass, then this dependency does not
+-- affect that view in the destination subpass. If the dependency is not
+-- view-local, then all views in the destination subpass depend on all
+-- views in the source subpass, and the view offset is ignored. A non-zero
+-- view offset is not allowed in a self-dependency.
+--
+-- The elements of @pCorrelationMasks@ are a set of masks of views
+-- indicating that views in the same mask /may/ exhibit spatial coherency
+-- between the views, making it more efficient to render them concurrently.
+-- Correlation masks /must/ not have a functional effect on the results of
+-- the multiview rendering.
+--
+-- When multiview is enabled, at the beginning of each subpass all
+-- non-render pass state is undefined. In particular, each time
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass' or
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdNextSubpass' is called the
+-- graphics pipeline /must/ be bound, any relevant descriptor sets or
+-- vertex\/index buffers /must/ be bound, and any relevant dynamic state or
+-- push constants /must/ be set before they are used.
+--
+-- A multiview subpass /can/ declare that its shaders will write per-view
+-- attributes for all views in a single invocation, by setting the
+-- 'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX'
+-- bit in the subpass description. The only supported per-view attributes
+-- are position and viewport mask, and per-view position and viewport masks
+-- are written to output array variables decorated with @PositionPerViewNV@
+-- and @ViewportMaskPerViewNV@, respectively. If @VK_NV_viewport_array2@ is
+-- not supported and enabled, @ViewportMaskPerViewNV@ /must/ not be used.
+-- Values written to elements of @PositionPerViewNV@ and
+-- @ViewportMaskPerViewNV@ /must/ not depend on the @ViewIndex@. The shader
+-- /must/ also write to an output variable decorated with @Position@, and
+-- the value written to @Position@ /must/ equal the value written to
+-- @PositionPerViewNV@[@ViewIndex@]. Similarly, if @ViewportMaskPerViewNV@
+-- is written to then the shader /must/ also write to an output variable
+-- decorated with @ViewportMaskNV@, and the value written to
+-- @ViewportMaskNV@ /must/ equal the value written to
+-- @ViewportMaskPerViewNV@[@ViewIndex@]. Implementations will either use
+-- values taken from @Position@ and @ViewportMaskNV@ and invoke the shader
+-- once for each view, or will use values taken from @PositionPerViewNV@
+-- and @ViewportMaskPerViewNV@ and invoke the shader fewer times. The
+-- values written to @Position@ and @ViewportMaskNV@ /must/ not depend on
+-- the values written to @PositionPerViewNV@ and @ViewportMaskPerViewNV@,
+-- or vice versa (to allow compilers to eliminate the unused outputs). All
+-- attributes that do not have @*PerViewNV@ counterparts /must/ not depend
+-- on @ViewIndex@.
+--
+-- Per-view attributes are all-or-nothing for a subpass. That is, all
+-- pipelines compiled against a subpass that includes the
+-- 'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX'
+-- bit /must/ write per-view attributes to the @*PerViewNV[]@ shader
+-- outputs, in addition to the non-per-view (e.g. @Position@) outputs.
+-- Pipelines compiled against a subpass that does not include this bit
+-- /must/ not include the @*PerViewNV[]@ outputs in their interfaces.
+--
+-- == Valid Usage
+--
+-- -   Each view index /must/ not be set in more than one element of
+--     @pCorrelationMasks@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO'
+--
+-- -   If @subpassCount@ is not @0@, @pViewMasks@ /must/ be a valid pointer
+--     to an array of @subpassCount@ @uint32_t@ values
+--
+-- -   If @dependencyCount@ is not @0@, @pViewOffsets@ /must/ be a valid
+--     pointer to an array of @dependencyCount@ @int32_t@ values
+--
+-- -   If @correlationMaskCount@ is not @0@, @pCorrelationMasks@ /must/ be
+--     a valid pointer to an array of @correlationMaskCount@ @uint32_t@
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data RenderPassMultiviewCreateInfo = RenderPassMultiviewCreateInfo
+  { -- | @pViewMasks@ is a pointer to an array of @subpassCount@ view masks,
+    -- where each mask is a bitfield of view indices describing which views
+    -- rendering is broadcast to in each subpass, when multiview is enabled. If
+    -- @subpassCount@ is zero, each view mask is treated as zero.
+    viewMasks :: Vector Word32
+  , -- | @pViewOffsets@ is a pointer to an array of @dependencyCount@ view
+    -- offsets, one for each dependency. If @dependencyCount@ is zero, each
+    -- dependency’s view offset is treated as zero. Each view offset controls
+    -- which views in the source subpass the views in the destination subpass
+    -- depend on.
+    viewOffsets :: Vector Int32
+  , -- | @pCorrelationMasks@ is a pointer to an array of @correlationMaskCount@
+    -- view masks indicating sets of views that /may/ be more efficient to
+    -- render concurrently.
+    correlationMasks :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show RenderPassMultiviewCreateInfo
+
+instance ToCStruct RenderPassMultiviewCreateInfo where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RenderPassMultiviewCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (viewMasks)) :: Word32))
+    pPViewMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (viewMasks)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (viewMasks)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPViewMasks')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (viewOffsets)) :: Word32))
+    pPViewOffsets' <- ContT $ allocaBytesAligned @Int32 ((Data.Vector.length (viewOffsets)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewOffsets' `plusPtr` (4 * (i)) :: Ptr Int32) (e)) (viewOffsets)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Int32))) (pPViewOffsets')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (correlationMasks)) :: Word32))
+    pPCorrelationMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (correlationMasks)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPCorrelationMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (correlationMasks)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Word32))) (pPCorrelationMasks')
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPViewMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPViewMasks')
+    pPViewOffsets' <- ContT $ allocaBytesAligned @Int32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewOffsets' `plusPtr` (4 * (i)) :: Ptr Int32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Int32))) (pPViewOffsets')
+    pPCorrelationMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPCorrelationMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Word32))) (pPCorrelationMasks')
+    lift $ f
+
+instance FromCStruct RenderPassMultiviewCreateInfo where
+  peekCStruct p = do
+    subpassCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pViewMasks <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
+    pViewMasks' <- generateM (fromIntegral subpassCount) (\i -> peek @Word32 ((pViewMasks `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    dependencyCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pViewOffsets <- peek @(Ptr Int32) ((p `plusPtr` 40 :: Ptr (Ptr Int32)))
+    pViewOffsets' <- generateM (fromIntegral dependencyCount) (\i -> peek @Int32 ((pViewOffsets `advancePtrBytes` (4 * (i)) :: Ptr Int32)))
+    correlationMaskCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pCorrelationMasks <- peek @(Ptr Word32) ((p `plusPtr` 56 :: Ptr (Ptr Word32)))
+    pCorrelationMasks' <- generateM (fromIntegral correlationMaskCount) (\i -> peek @Word32 ((pCorrelationMasks `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ RenderPassMultiviewCreateInfo
+             pViewMasks' pViewOffsets' pCorrelationMasks'
+
+instance Zero RenderPassMultiviewCreateInfo where
+  zero = RenderPassMultiviewCreateInfo
+           mempty
+           mempty
+           mempty
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_multiview  ( PhysicalDeviceMultiviewFeatures
+                                                     , PhysicalDeviceMultiviewProperties
+                                                     , RenderPassMultiviewCreateInfo
+                                                     ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceMultiviewFeatures
+
+instance ToCStruct PhysicalDeviceMultiviewFeatures
+instance Show PhysicalDeviceMultiviewFeatures
+
+instance FromCStruct PhysicalDeviceMultiviewFeatures
+
+
+data PhysicalDeviceMultiviewProperties
+
+instance ToCStruct PhysicalDeviceMultiviewProperties
+instance Show PhysicalDeviceMultiviewProperties
+
+instance FromCStruct PhysicalDeviceMultiviewProperties
+
+
+data RenderPassMultiviewCreateInfo
+
+instance ToCStruct RenderPassMultiviewCreateInfo
+instance Show RenderPassMultiviewCreateInfo
+
+instance FromCStruct RenderPassMultiviewCreateInfo
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs
@@ -0,0 +1,843 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion  ( createSamplerYcbcrConversion
+                                                                    , withSamplerYcbcrConversion
+                                                                    , destroySamplerYcbcrConversion
+                                                                    , SamplerYcbcrConversionInfo(..)
+                                                                    , SamplerYcbcrConversionCreateInfo(..)
+                                                                    , BindImagePlaneMemoryInfo(..)
+                                                                    , ImagePlaneMemoryRequirementsInfo(..)
+                                                                    , PhysicalDeviceSamplerYcbcrConversionFeatures(..)
+                                                                    , SamplerYcbcrConversionImageFormatProperties(..)
+                                                                    , SamplerYcbcrConversion(..)
+                                                                    , Format(..)
+                                                                    , StructureType(..)
+                                                                    , ObjectType(..)
+                                                                    , ImageCreateFlagBits(..)
+                                                                    , ImageCreateFlags
+                                                                    , FormatFeatureFlagBits(..)
+                                                                    , FormatFeatureFlags
+                                                                    , ImageAspectFlagBits(..)
+                                                                    , ImageAspectFlags
+                                                                    , SamplerYcbcrModelConversion(..)
+                                                                    , SamplerYcbcrRange(..)
+                                                                    , ChromaLocation(..)
+                                                                    ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core11.Enums.ChromaLocation (ChromaLocation)
+import Vulkan.Core10.ImageView (ComponentMapping)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateSamplerYcbcrConversion))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroySamplerYcbcrConversion))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (ExternalFormatANDROID)
+import Vulkan.Core10.Enums.Filter (Filter)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core11.Handles (SamplerYcbcrConversion)
+import Vulkan.Core11.Handles (SamplerYcbcrConversion(..))
+import Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion)
+import Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Core11.Enums.ChromaLocation (ChromaLocation(..))
+import Vulkan.Core10.Enums.Format (Format(..))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(..))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits(..))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.ObjectType (ObjectType(..))
+import Vulkan.Core11.Handles (SamplerYcbcrConversion(..))
+import Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(..))
+import Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateSamplerYcbcrConversion
+  :: FunPtr (Ptr Device_T -> Ptr (SamplerYcbcrConversionCreateInfo a) -> Ptr AllocationCallbacks -> Ptr SamplerYcbcrConversion -> IO Result) -> Ptr Device_T -> Ptr (SamplerYcbcrConversionCreateInfo a) -> Ptr AllocationCallbacks -> Ptr SamplerYcbcrConversion -> IO Result
+
+-- | vkCreateSamplerYcbcrConversion - Create a new Y′CBCR conversion
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the sampler Y′CBCR
+--     conversion.
+--
+-- -   @pCreateInfo@ is a pointer to a 'SamplerYcbcrConversionCreateInfo'
+--     structure specifying the requested sampler Y′CBCR conversion.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pYcbcrConversion@ is a pointer to a
+--     'Vulkan.Core11.Handles.SamplerYcbcrConversion' handle in which the
+--     resulting sampler Y′CBCR conversion is returned.
+--
+-- = Description
+--
+-- The interpretation of the configured sampler Y′CBCR conversion is
+-- described in more detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion the description of sampler Y′CBCR conversion>
+-- in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations>
+-- chapter.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sampler-YCbCr-conversion sampler Y′CBCR conversion feature>
+--     /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'SamplerYcbcrConversionCreateInfo' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pYcbcrConversion@ /must/ be a valid pointer to a
+--     'Vulkan.Core11.Handles.SamplerYcbcrConversion' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core11.Handles.SamplerYcbcrConversion',
+-- 'SamplerYcbcrConversionCreateInfo'
+createSamplerYcbcrConversion :: forall a io . (Extendss SamplerYcbcrConversionCreateInfo a, PokeChain a, MonadIO io) => Device -> SamplerYcbcrConversionCreateInfo a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SamplerYcbcrConversion)
+createSamplerYcbcrConversion device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateSamplerYcbcrConversionPtr = pVkCreateSamplerYcbcrConversion (deviceCmds (device :: Device))
+  lift $ unless (vkCreateSamplerYcbcrConversionPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateSamplerYcbcrConversion is null" Nothing Nothing
+  let vkCreateSamplerYcbcrConversion' = mkVkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversionPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPYcbcrConversion <- ContT $ bracket (callocBytes @SamplerYcbcrConversion 8) free
+  r <- lift $ vkCreateSamplerYcbcrConversion' (deviceHandle (device)) pCreateInfo pAllocator (pPYcbcrConversion)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pYcbcrConversion <- lift $ peek @SamplerYcbcrConversion pPYcbcrConversion
+  pure $ (pYcbcrConversion)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createSamplerYcbcrConversion' and 'destroySamplerYcbcrConversion'
+--
+-- To ensure that 'destroySamplerYcbcrConversion' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withSamplerYcbcrConversion :: forall a io r . (Extendss SamplerYcbcrConversionCreateInfo a, PokeChain a, MonadIO io) => Device -> SamplerYcbcrConversionCreateInfo a -> Maybe AllocationCallbacks -> (io (SamplerYcbcrConversion) -> ((SamplerYcbcrConversion) -> io ()) -> r) -> r
+withSamplerYcbcrConversion device pCreateInfo pAllocator b =
+  b (createSamplerYcbcrConversion device pCreateInfo pAllocator)
+    (\(o0) -> destroySamplerYcbcrConversion device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroySamplerYcbcrConversion
+  :: FunPtr (Ptr Device_T -> SamplerYcbcrConversion -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> SamplerYcbcrConversion -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroySamplerYcbcrConversion - Destroy a created Y′CBCR conversion
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that destroys the Y′CBCR conversion.
+--
+-- -   @ycbcrConversion@ is the conversion to destroy.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @ycbcrConversion@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @ycbcrConversion@ /must/
+--     be a valid 'Vulkan.Core11.Handles.SamplerYcbcrConversion' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @ycbcrConversion@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @ycbcrConversion@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core11.Handles.SamplerYcbcrConversion'
+destroySamplerYcbcrConversion :: forall io . MonadIO io => Device -> SamplerYcbcrConversion -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroySamplerYcbcrConversion device ycbcrConversion allocator = liftIO . evalContT $ do
+  let vkDestroySamplerYcbcrConversionPtr = pVkDestroySamplerYcbcrConversion (deviceCmds (device :: Device))
+  lift $ unless (vkDestroySamplerYcbcrConversionPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroySamplerYcbcrConversion is null" Nothing Nothing
+  let vkDestroySamplerYcbcrConversion' = mkVkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversionPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroySamplerYcbcrConversion' (deviceHandle (device)) (ycbcrConversion) pAllocator
+  pure $ ()
+
+
+-- | VkSamplerYcbcrConversionInfo - Structure specifying Y′CBCR conversion to
+-- a sampler or image view
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Handles.SamplerYcbcrConversion',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SamplerYcbcrConversionInfo = SamplerYcbcrConversionInfo
+  { -- | @conversion@ /must/ be a valid
+    -- 'Vulkan.Core11.Handles.SamplerYcbcrConversion' handle
+    conversion :: SamplerYcbcrConversion }
+  deriving (Typeable)
+deriving instance Show SamplerYcbcrConversionInfo
+
+instance ToCStruct SamplerYcbcrConversionInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SamplerYcbcrConversionInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SamplerYcbcrConversion)) (conversion)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SamplerYcbcrConversion)) (zero)
+    f
+
+instance FromCStruct SamplerYcbcrConversionInfo where
+  peekCStruct p = do
+    conversion <- peek @SamplerYcbcrConversion ((p `plusPtr` 16 :: Ptr SamplerYcbcrConversion))
+    pure $ SamplerYcbcrConversionInfo
+             conversion
+
+instance Storable SamplerYcbcrConversionInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SamplerYcbcrConversionInfo where
+  zero = SamplerYcbcrConversionInfo
+           zero
+
+
+-- | VkSamplerYcbcrConversionCreateInfo - Structure specifying the parameters
+-- of the newly created conversion
+--
+-- = Description
+--
+-- Note
+--
+-- Setting @forceExplicitReconstruction@ to 'Vulkan.Core10.BaseType.TRUE'
+-- /may/ have a performance penalty on implementations where explicit
+-- reconstruction is not the default mode of operation.
+--
+-- If @format@ supports
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT'
+-- the @forceExplicitReconstruction@ value behaves as if it was set to
+-- 'Vulkan.Core10.BaseType.TRUE'.
+--
+-- If the @pNext@ chain includes a
+-- 'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+-- structure with non-zero @externalFormat@ member, the sampler Y′CBCR
+-- conversion object represents an /external format conversion/, and
+-- @format@ /must/ be 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'. Such
+-- conversions /must/ only be used to sample image views with a matching
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>.
+-- When creating an external format conversion, the value of @components@
+-- is ignored.
+--
+-- == Valid Usage
+--
+-- -   If an external format conversion is being created, @format@ /must/
+--     be 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', otherwise it
+--     /must/ not be 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
+--     /must/ support
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT'
+--     or
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
+--     do not support
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT',
+--     @xChromaOffset@ and @yChromaOffset@ /must/ not be
+--     'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
+--     do not support
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT',
+--     @xChromaOffset@ and @yChromaOffset@ /must/ not be
+--     'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'
+--
+-- -   If the format has a @_422@ or @_420@ suffix, then @components.g@
+--     /must/ be
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
+--
+-- -   If the format has a @_422@ or @_420@ suffix, then @components.a@
+--     /must/ be
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY',
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_ONE', or
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_ZERO'
+--
+-- -   If the format has a @_422@ or @_420@ suffix, then @components.r@
+--     /must/ be
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY' or
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_B'
+--
+-- -   If the format has a @_422@ or @_420@ suffix, then @components.b@
+--     /must/ be
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY' or
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_R'
+--
+-- -   If the format has a @_422@ or @_420@ suffix, and if either
+--     @components.r@ or @components.b@ is
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY',
+--     both values /must/ be
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'
+--
+-- -   If @ycbcrModel@ is not
+--     'Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY',
+--     then @components.r@, @components.g@, and @components.b@ /must/
+--     correspond to channels of the @format@; that is, @components.r@,
+--     @components.g@, and @components.b@ /must/ not be
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_ZERO' or
+--     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_ONE', and
+--     /must/ not correspond to a channel which contains zero or one as a
+--     consequence of
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-conversion-to-rgba conversion to RGBA>
+--
+-- -   If @ycbcrRange@ is
+--     'Vulkan.Core11.Enums.SamplerYcbcrRange.SAMPLER_YCBCR_RANGE_ITU_NARROW'
+--     then the R, G and B channels obtained by applying the @component@
+--     swizzle to @format@ /must/ each have a bit-depth greater than or
+--     equal to 8
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
+--     do not support
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'
+--     @forceExplicitReconstruction@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-sampler-ycbcr-conversion-format-features sampler Y′CBCR conversion’s features>
+--     do not support
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT',
+--     @chromaFilter@ /must/ not be
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- -   @ycbcrModel@ /must/ be a valid
+--     'Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SamplerYcbcrModelConversion'
+--     value
+--
+-- -   @ycbcrRange@ /must/ be a valid
+--     'Vulkan.Core11.Enums.SamplerYcbcrRange.SamplerYcbcrRange' value
+--
+-- -   @components@ /must/ be a valid
+--     'Vulkan.Core10.ImageView.ComponentMapping' structure
+--
+-- -   @xChromaOffset@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ChromaLocation.ChromaLocation' value
+--
+-- -   @yChromaOffset@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ChromaLocation.ChromaLocation' value
+--
+-- -   @chromaFilter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter'
+--     value
+--
+-- If @chromaFilter@ is 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST', chroma
+-- samples are reconstructed to luma channel resolution using
+-- nearest-neighbour sampling. Otherwise, chroma samples are reconstructed
+-- using interpolation. More details can be found in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion the description of sampler Y′CBCR conversion>
+-- in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations>
+-- chapter.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core11.Enums.ChromaLocation.ChromaLocation',
+-- 'Vulkan.Core10.ImageView.ComponentMapping',
+-- 'Vulkan.Core10.Enums.Filter.Filter',
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SamplerYcbcrModelConversion',
+-- 'Vulkan.Core11.Enums.SamplerYcbcrRange.SamplerYcbcrRange',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createSamplerYcbcrConversion',
+-- 'Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.createSamplerYcbcrConversionKHR'
+data SamplerYcbcrConversionCreateInfo (es :: [Type]) = SamplerYcbcrConversionCreateInfo
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @format@ is the format of the image from which color information will be
+    -- retrieved.
+    format :: Format
+  , -- | @ycbcrModel@ describes the color matrix for conversion between color
+    -- models.
+    ycbcrModel :: SamplerYcbcrModelConversion
+  , -- | @ycbcrRange@ describes whether the encoded values have headroom and foot
+    -- room, or whether the encoding uses the full numerical range.
+    ycbcrRange :: SamplerYcbcrRange
+  , -- | @components@ applies a /swizzle/ based on
+    -- 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' enums prior to
+    -- range expansion and color model conversion.
+    components :: ComponentMapping
+  , -- | @xChromaOffset@ describes the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction sample location>
+    -- associated with downsampled chroma channels in the x dimension.
+    -- @xChromaOffset@ has no effect for formats in which chroma channels are
+    -- the same resolution as the luma channel.
+    xChromaOffset :: ChromaLocation
+  , -- | @yChromaOffset@ describes the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction sample location>
+    -- associated with downsampled chroma channels in the y dimension.
+    -- @yChromaOffset@ has no effect for formats in which the chroma channels
+    -- are not downsampled vertically.
+    yChromaOffset :: ChromaLocation
+  , -- | @chromaFilter@ is the filter for chroma reconstruction.
+    chromaFilter :: Filter
+  , -- | @forceExplicitReconstruction@ /can/ be used to ensure that
+    -- reconstruction is done explicitly, if supported.
+    forceExplicitReconstruction :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (SamplerYcbcrConversionCreateInfo es)
+
+instance Extensible SamplerYcbcrConversionCreateInfo where
+  extensibleType = STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO
+  setNext x next = x{next = next}
+  getNext SamplerYcbcrConversionCreateInfo{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SamplerYcbcrConversionCreateInfo e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @ExternalFormatANDROID = Just f
+    | otherwise = Nothing
+
+instance (Extendss SamplerYcbcrConversionCreateInfo es, PokeChain es) => ToCStruct (SamplerYcbcrConversionCreateInfo es) where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SamplerYcbcrConversionCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (format)
+    lift $ poke ((p `plusPtr` 20 :: Ptr SamplerYcbcrModelConversion)) (ycbcrModel)
+    lift $ poke ((p `plusPtr` 24 :: Ptr SamplerYcbcrRange)) (ycbcrRange)
+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ComponentMapping)) (components) . ($ ())
+    lift $ poke ((p `plusPtr` 44 :: Ptr ChromaLocation)) (xChromaOffset)
+    lift $ poke ((p `plusPtr` 48 :: Ptr ChromaLocation)) (yChromaOffset)
+    lift $ poke ((p `plusPtr` 52 :: Ptr Filter)) (chromaFilter)
+    lift $ poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (forceExplicitReconstruction))
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
+    lift $ poke ((p `plusPtr` 20 :: Ptr SamplerYcbcrModelConversion)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr SamplerYcbcrRange)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ComponentMapping)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 44 :: Ptr ChromaLocation)) (zero)
+    lift $ poke ((p `plusPtr` 48 :: Ptr ChromaLocation)) (zero)
+    lift $ poke ((p `plusPtr` 52 :: Ptr Filter)) (zero)
+    lift $ poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance (Extendss SamplerYcbcrConversionCreateInfo es, PeekChain es) => FromCStruct (SamplerYcbcrConversionCreateInfo es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    format <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
+    ycbcrModel <- peek @SamplerYcbcrModelConversion ((p `plusPtr` 20 :: Ptr SamplerYcbcrModelConversion))
+    ycbcrRange <- peek @SamplerYcbcrRange ((p `plusPtr` 24 :: Ptr SamplerYcbcrRange))
+    components <- peekCStruct @ComponentMapping ((p `plusPtr` 28 :: Ptr ComponentMapping))
+    xChromaOffset <- peek @ChromaLocation ((p `plusPtr` 44 :: Ptr ChromaLocation))
+    yChromaOffset <- peek @ChromaLocation ((p `plusPtr` 48 :: Ptr ChromaLocation))
+    chromaFilter <- peek @Filter ((p `plusPtr` 52 :: Ptr Filter))
+    forceExplicitReconstruction <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
+    pure $ SamplerYcbcrConversionCreateInfo
+             next format ycbcrModel ycbcrRange components xChromaOffset yChromaOffset chromaFilter (bool32ToBool forceExplicitReconstruction)
+
+instance es ~ '[] => Zero (SamplerYcbcrConversionCreateInfo es) where
+  zero = SamplerYcbcrConversionCreateInfo
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkBindImagePlaneMemoryInfo - Structure specifying how to bind an image
+-- plane to memory
+--
+-- == Valid Usage
+--
+-- -   If the image’s @tiling@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then
+--     @planeAspect@ /must/ be a single valid /format plane/ for the image
+--     (that is, for a two-plane image @planeAspect@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     and for a three-plane image @planeAspect@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT')
+--
+-- -   If the image’s @tiling@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--     then @planeAspect@ /must/ be a single valid /memory plane/ for the
+--     image (that is, @aspectMask@ /must/ specify a plane index that is
+--     less than the
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
+--     associated with the image’s @format@ and
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierPropertiesEXT'::@drmFormatModifier@)
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO'
+--
+-- -   @planeAspect@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data BindImagePlaneMemoryInfo = BindImagePlaneMemoryInfo
+  { -- | @planeAspect@ is the aspect of the disjoint image plane to bind.
+    planeAspect :: ImageAspectFlagBits }
+  deriving (Typeable)
+deriving instance Show BindImagePlaneMemoryInfo
+
+instance ToCStruct BindImagePlaneMemoryInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindImagePlaneMemoryInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits)) (planeAspect)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits)) (zero)
+    f
+
+instance FromCStruct BindImagePlaneMemoryInfo where
+  peekCStruct p = do
+    planeAspect <- peek @ImageAspectFlagBits ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits))
+    pure $ BindImagePlaneMemoryInfo
+             planeAspect
+
+instance Storable BindImagePlaneMemoryInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BindImagePlaneMemoryInfo where
+  zero = BindImagePlaneMemoryInfo
+           zero
+
+
+-- | VkImagePlaneMemoryRequirementsInfo - Structure specifying image plane
+-- for memory requirements
+--
+-- == Valid Usage
+--
+-- -   If the image’s @tiling@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then
+--     @planeAspect@ /must/ be a single valid /format plane/ for the image
+--     (that is, for a two-plane image @planeAspect@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
+--     and for a three-plane image @planeAspect@ /must/ be
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT')
+--
+-- -   If the image’s @tiling@ is
+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+--     then @planeAspect@ /must/ be a single valid /memory plane/ for the
+--     image (that is, @aspectMask@ /must/ specify a plane index that is
+--     less than the
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
+--     associated with the image’s @format@ and
+--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierPropertiesEXT'::@drmFormatModifier@)
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO'
+--
+-- -   @planeAspect@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImagePlaneMemoryRequirementsInfo = ImagePlaneMemoryRequirementsInfo
+  { -- | @planeAspect@ is the aspect corresponding to the image plane to query.
+    planeAspect :: ImageAspectFlagBits }
+  deriving (Typeable)
+deriving instance Show ImagePlaneMemoryRequirementsInfo
+
+instance ToCStruct ImagePlaneMemoryRequirementsInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImagePlaneMemoryRequirementsInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits)) (planeAspect)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits)) (zero)
+    f
+
+instance FromCStruct ImagePlaneMemoryRequirementsInfo where
+  peekCStruct p = do
+    planeAspect <- peek @ImageAspectFlagBits ((p `plusPtr` 16 :: Ptr ImageAspectFlagBits))
+    pure $ ImagePlaneMemoryRequirementsInfo
+             planeAspect
+
+instance Storable ImagePlaneMemoryRequirementsInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImagePlaneMemoryRequirementsInfo where
+  zero = ImagePlaneMemoryRequirementsInfo
+           zero
+
+
+-- | VkPhysicalDeviceSamplerYcbcrConversionFeatures - Structure describing
+-- Y’CbCr conversion features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceSamplerYcbcrConversionFeatures'
+-- structure describe the following feature:
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceSamplerYcbcrConversionFeatures = PhysicalDeviceSamplerYcbcrConversionFeatures
+  { -- | @samplerYcbcrConversion@ specifies whether the implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
+    -- If @samplerYcbcrConversion@ is 'Vulkan.Core10.BaseType.FALSE', sampler
+    -- Y′CBCR conversion is not supported, and samplers using sampler Y′CBCR
+    -- conversion /must/ not be used.
+    samplerYcbcrConversion :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceSamplerYcbcrConversionFeatures
+
+instance ToCStruct PhysicalDeviceSamplerYcbcrConversionFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSamplerYcbcrConversionFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (samplerYcbcrConversion))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceSamplerYcbcrConversionFeatures where
+  peekCStruct p = do
+    samplerYcbcrConversion <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceSamplerYcbcrConversionFeatures
+             (bool32ToBool samplerYcbcrConversion)
+
+instance Storable PhysicalDeviceSamplerYcbcrConversionFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceSamplerYcbcrConversionFeatures where
+  zero = PhysicalDeviceSamplerYcbcrConversionFeatures
+           zero
+
+
+-- | VkSamplerYcbcrConversionImageFormatProperties - Structure specifying
+-- combined image sampler descriptor count for multi-planar images
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SamplerYcbcrConversionImageFormatProperties = SamplerYcbcrConversionImageFormatProperties
+  { -- | @combinedImageSamplerDescriptorCount@ is the number of combined image
+    -- sampler descriptors that the implementation uses to access the format.
+    combinedImageSamplerDescriptorCount :: Word32 }
+  deriving (Typeable)
+deriving instance Show SamplerYcbcrConversionImageFormatProperties
+
+instance ToCStruct SamplerYcbcrConversionImageFormatProperties where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SamplerYcbcrConversionImageFormatProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (combinedImageSamplerDescriptorCount)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct SamplerYcbcrConversionImageFormatProperties where
+  peekCStruct p = do
+    combinedImageSamplerDescriptorCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ SamplerYcbcrConversionImageFormatProperties
+             combinedImageSamplerDescriptorCount
+
+instance Storable SamplerYcbcrConversionImageFormatProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SamplerYcbcrConversionImageFormatProperties where
+  zero = SamplerYcbcrConversionImageFormatProperties
+           zero
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs-boot
@@ -0,0 +1,64 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion  ( BindImagePlaneMemoryInfo
+                                                                    , ImagePlaneMemoryRequirementsInfo
+                                                                    , PhysicalDeviceSamplerYcbcrConversionFeatures
+                                                                    , SamplerYcbcrConversionCreateInfo
+                                                                    , SamplerYcbcrConversionImageFormatProperties
+                                                                    , SamplerYcbcrConversionInfo
+                                                                    ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data BindImagePlaneMemoryInfo
+
+instance ToCStruct BindImagePlaneMemoryInfo
+instance Show BindImagePlaneMemoryInfo
+
+instance FromCStruct BindImagePlaneMemoryInfo
+
+
+data ImagePlaneMemoryRequirementsInfo
+
+instance ToCStruct ImagePlaneMemoryRequirementsInfo
+instance Show ImagePlaneMemoryRequirementsInfo
+
+instance FromCStruct ImagePlaneMemoryRequirementsInfo
+
+
+data PhysicalDeviceSamplerYcbcrConversionFeatures
+
+instance ToCStruct PhysicalDeviceSamplerYcbcrConversionFeatures
+instance Show PhysicalDeviceSamplerYcbcrConversionFeatures
+
+instance FromCStruct PhysicalDeviceSamplerYcbcrConversionFeatures
+
+
+type role SamplerYcbcrConversionCreateInfo nominal
+data SamplerYcbcrConversionCreateInfo (es :: [Type])
+
+instance (Extendss SamplerYcbcrConversionCreateInfo es, PokeChain es) => ToCStruct (SamplerYcbcrConversionCreateInfo es)
+instance Show (Chain es) => Show (SamplerYcbcrConversionCreateInfo es)
+
+instance (Extendss SamplerYcbcrConversionCreateInfo es, PeekChain es) => FromCStruct (SamplerYcbcrConversionCreateInfo es)
+
+
+data SamplerYcbcrConversionImageFormatProperties
+
+instance ToCStruct SamplerYcbcrConversionImageFormatProperties
+instance Show SamplerYcbcrConversionImageFormatProperties
+
+instance FromCStruct SamplerYcbcrConversionImageFormatProperties
+
+
+data SamplerYcbcrConversionInfo
+
+instance ToCStruct SamplerYcbcrConversionInfo
+instance Show SamplerYcbcrConversionInfo
+
+instance FromCStruct SamplerYcbcrConversionInfo
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs
@@ -0,0 +1,91 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES
+                                                                  , PhysicalDeviceShaderDrawParametersFeatures(..)
+                                                                  , PhysicalDeviceShaderDrawParameterFeatures
+                                                                  , StructureType(..)
+                                                                  ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES
+
+
+-- | VkPhysicalDeviceShaderDrawParametersFeatures - Structure describing
+-- shader draw parameter features that can be supported by an
+-- implementation
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShaderDrawParametersFeatures' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with a value indicating whether the feature is supported.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderDrawParametersFeatures = PhysicalDeviceShaderDrawParametersFeatures
+  { -- | @shaderDrawParameters@ specifies whether shader draw parameters are
+    -- supported.
+    shaderDrawParameters :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderDrawParametersFeatures
+
+instance ToCStruct PhysicalDeviceShaderDrawParametersFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderDrawParametersFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderDrawParameters))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShaderDrawParametersFeatures where
+  peekCStruct p = do
+    shaderDrawParameters <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceShaderDrawParametersFeatures
+             (bool32ToBool shaderDrawParameters)
+
+instance Storable PhysicalDeviceShaderDrawParametersFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderDrawParametersFeatures where
+  zero = PhysicalDeviceShaderDrawParametersFeatures
+           zero
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceShaderDrawParameterFeatures"
+type PhysicalDeviceShaderDrawParameterFeatures = PhysicalDeviceShaderDrawParametersFeatures
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters  (PhysicalDeviceShaderDrawParametersFeatures) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderDrawParametersFeatures
+
+instance ToCStruct PhysicalDeviceShaderDrawParametersFeatures
+instance Show PhysicalDeviceShaderDrawParametersFeatures
+
+instance FromCStruct PhysicalDeviceShaderDrawParametersFeatures
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs
@@ -0,0 +1,123 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES
+                                                             , PhysicalDeviceVariablePointersFeatures(..)
+                                                             , PhysicalDeviceVariablePointerFeatures
+                                                             , StructureType(..)
+                                                             ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES
+
+
+-- | VkPhysicalDeviceVariablePointersFeatures - Structure describing variable
+-- pointers features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceVariablePointersFeatures' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- -   @variablePointersStorageBuffer@ specifies whether the implementation
+--     supports the SPIR-V @VariablePointersStorageBuffer@ capability. When
+--     this feature is not enabled, shader modules /must/ not declare the
+--     @SPV_KHR_variable_pointers@ extension or the
+--     @VariablePointersStorageBuffer@ capability.
+--
+-- -   @variablePointers@ specifies whether the implementation supports the
+--     SPIR-V @VariablePointers@ capability. When this feature is not
+--     enabled, shader modules /must/ not declare the @VariablePointers@
+--     capability.
+--
+-- If the 'PhysicalDeviceVariablePointersFeatures' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceVariablePointersFeatures' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the
+-- features.
+--
+-- == Valid Usage
+--
+-- -   If @variablePointers@ is enabled then
+--     @variablePointersStorageBuffer@ /must/ also be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceVariablePointersFeatures = PhysicalDeviceVariablePointersFeatures
+  { -- No documentation found for Nested "VkPhysicalDeviceVariablePointersFeatures" "variablePointersStorageBuffer"
+    variablePointersStorageBuffer :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointersFeatures" "variablePointers"
+    variablePointers :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceVariablePointersFeatures
+
+instance ToCStruct PhysicalDeviceVariablePointersFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceVariablePointersFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (variablePointersStorageBuffer))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (variablePointers))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceVariablePointersFeatures where
+  peekCStruct p = do
+    variablePointersStorageBuffer <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    variablePointers <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceVariablePointersFeatures
+             (bool32ToBool variablePointersStorageBuffer) (bool32ToBool variablePointers)
+
+instance Storable PhysicalDeviceVariablePointersFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceVariablePointersFeatures where
+  zero = PhysicalDeviceVariablePointersFeatures
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceVariablePointerFeatures"
+type PhysicalDeviceVariablePointerFeatures = PhysicalDeviceVariablePointersFeatures
+
diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs-boot b/src/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers  (PhysicalDeviceVariablePointersFeatures) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceVariablePointersFeatures
+
+instance ToCStruct PhysicalDeviceVariablePointersFeatures
+instance Show PhysicalDeviceVariablePointersFeatures
+
+instance FromCStruct PhysicalDeviceVariablePointersFeatures
+
diff --git a/src/Vulkan/Core12.hs b/src/Vulkan/Core12.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12.hs
@@ -0,0 +1,1734 @@
+{-# language CPP #-}
+module Vulkan.Core12  ( pattern API_VERSION_1_2
+                      , PhysicalDeviceVulkan11Features(..)
+                      , PhysicalDeviceVulkan11Properties(..)
+                      , PhysicalDeviceVulkan12Features(..)
+                      , PhysicalDeviceVulkan12Properties(..)
+                      , StructureType(..)
+                      , module Vulkan.Core12.Enums
+                      , module Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing
+                      , module Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset
+                      , module Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax
+                      , module Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout
+                      , module Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_driver_properties
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_image_format_list
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout
+                      , module Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model
+                      ) where
+import Vulkan.Core12.Enums
+import Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing
+import Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset
+import Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax
+import Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout
+import Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage
+import Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2
+import Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve
+import Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count
+import Vulkan.Core12.Promoted_From_VK_KHR_driver_properties
+import Vulkan.Core12.Promoted_From_VK_KHR_image_format_list
+import Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer
+import Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts
+import Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64
+import Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8
+import Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls
+import Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types
+import Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore
+import Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout
+import Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model
+import Vulkan.CStruct.Utils (FixedArray)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.ByteString (packCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Word (Word8)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Utils (peekByteStringFromSizedVectorPtr)
+import Vulkan.CStruct.Utils (pokeFixedLengthByteString)
+import Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (ConformanceVersion)
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core12.Enums.DriverId (DriverId)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.APIConstants (LUID_SIZE)
+import Vulkan.Core10.APIConstants (MAX_DRIVER_INFO_SIZE)
+import Vulkan.Core10.APIConstants (MAX_DRIVER_NAME_SIZE)
+import Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior)
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlags)
+import Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core11.Enums.SubgroupFeatureFlagBits (SubgroupFeatureFlags)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Core10.APIConstants (UUID_SIZE)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Version (pattern MAKE_VERSION)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+pattern API_VERSION_1_2 :: Word32
+pattern API_VERSION_1_2 = MAKE_VERSION 1 2 0
+
+
+-- | VkPhysicalDeviceVulkan11Features - Structure describing the Vulkan 1.1
+-- features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceVulkan11Features' structure describe
+-- the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceVulkan11Features' structure is included in the
+-- @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceVulkan11Features' /can/ also be used in the @pNext@ chain
+-- of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceVulkan11Features = PhysicalDeviceVulkan11Features
+  { -- | @storageBuffer16BitAccess@ specifies whether objects in the
+    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the
+    -- @Block@ decoration /can/ have 16-bit integer and 16-bit floating-point
+    -- members. If this feature is not enabled, 16-bit integer or 16-bit
+    -- floating-point members /must/ not be used in such objects. This also
+    -- specifies whether shader modules /can/ declare the
+    -- @StorageBuffer16BitAccess@ capability.
+    storageBuffer16BitAccess :: Bool
+  , -- | @uniformAndStorageBuffer16BitAccess@ specifies whether objects in the
+    -- @Uniform@ storage class with the @Block@ decoration and in the
+    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the same
+    -- decoration /can/ have 16-bit integer and 16-bit floating-point members.
+    -- If this feature is not enabled, 16-bit integer or 16-bit floating-point
+    -- members /must/ not be used in such objects. This also specifies whether
+    -- shader modules /can/ declare the @UniformAndStorageBuffer16BitAccess@
+    -- capability.
+    uniformAndStorageBuffer16BitAccess :: Bool
+  , -- | @storagePushConstant16@ specifies whether objects in the @PushConstant@
+    -- storage class /can/ have 16-bit integer and 16-bit floating-point
+    -- members. If this feature is not enabled, 16-bit integer or
+    -- floating-point members /must/ not be used in such objects. This also
+    -- specifies whether shader modules /can/ declare the
+    -- @StoragePushConstant16@ capability.
+    storagePushConstant16 :: Bool
+  , -- | @storageInputOutput16@ specifies whether objects in the @Input@ and
+    -- @Output@ storage classes /can/ have 16-bit integer and 16-bit
+    -- floating-point members. If this feature is not enabled, 16-bit integer
+    -- or 16-bit floating-point members /must/ not be used in such objects.
+    -- This also specifies whether shader modules /can/ declare the
+    -- @StorageInputOutput16@ capability.
+    storageInputOutput16 :: Bool
+  , -- | @multiview@ specifies whether the implementation supports multiview
+    -- rendering within a render pass. If this feature is not enabled, the view
+    -- mask of each subpass /must/ always be zero.
+    multiview :: Bool
+  , -- | @multiviewGeometryShader@ specifies whether the implementation supports
+    -- multiview rendering within a render pass, with
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry geometry shaders>.
+    -- If this feature is not enabled, then a pipeline compiled against a
+    -- subpass with a non-zero view mask /must/ not include a geometry shader.
+    multiviewGeometryShader :: Bool
+  , -- | @multiviewTessellationShader@ specifies whether the implementation
+    -- supports multiview rendering within a render pass, with
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation tessellation shaders>.
+    -- If this feature is not enabled, then a pipeline compiled against a
+    -- subpass with a non-zero view mask /must/ not include any tessellation
+    -- shaders.
+    multiviewTessellationShader :: Bool
+  , -- | @variablePointersStorageBuffer@ specifies whether the implementation
+    -- supports the SPIR-V @VariablePointersStorageBuffer@ capability. When
+    -- this feature is not enabled, shader modules /must/ not declare the
+    -- @SPV_KHR_variable_pointers@ extension or the
+    -- @VariablePointersStorageBuffer@ capability.
+    variablePointersStorageBuffer :: Bool
+  , -- | @variablePointers@ specifies whether the implementation supports the
+    -- SPIR-V @VariablePointers@ capability. When this feature is not enabled,
+    -- shader modules /must/ not declare the @VariablePointers@ capability.
+    variablePointers :: Bool
+  , -- | @protectedMemory@ specifies whether protected memory is supported.
+    protectedMemory :: Bool
+  , -- | @samplerYcbcrConversion@ specifies whether the implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.
+    -- If @samplerYcbcrConversion@ is 'Vulkan.Core10.BaseType.FALSE', sampler
+    -- Y′CBCR conversion is not supported, and samplers using sampler Y′CBCR
+    -- conversion /must/ not be used.
+    samplerYcbcrConversion :: Bool
+  , -- | @shaderDrawParameters@ specifies whether shader draw parameters are
+    -- supported.
+    shaderDrawParameters :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceVulkan11Features
+
+instance ToCStruct PhysicalDeviceVulkan11Features where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceVulkan11Features{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (storageBuffer16BitAccess))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (uniformAndStorageBuffer16BitAccess))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (storagePushConstant16))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (storageInputOutput16))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (multiview))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (multiviewGeometryShader))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (multiviewTessellationShader))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (variablePointersStorageBuffer))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (variablePointers))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (protectedMemory))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (samplerYcbcrConversion))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (shaderDrawParameters))
+    f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceVulkan11Features where
+  peekCStruct p = do
+    storageBuffer16BitAccess <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    uniformAndStorageBuffer16BitAccess <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    storagePushConstant16 <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    storageInputOutput16 <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    multiview <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    multiviewGeometryShader <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    multiviewTessellationShader <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    variablePointersStorageBuffer <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    variablePointers <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    protectedMemory <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
+    samplerYcbcrConversion <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
+    shaderDrawParameters <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
+    pure $ PhysicalDeviceVulkan11Features
+             (bool32ToBool storageBuffer16BitAccess) (bool32ToBool uniformAndStorageBuffer16BitAccess) (bool32ToBool storagePushConstant16) (bool32ToBool storageInputOutput16) (bool32ToBool multiview) (bool32ToBool multiviewGeometryShader) (bool32ToBool multiviewTessellationShader) (bool32ToBool variablePointersStorageBuffer) (bool32ToBool variablePointers) (bool32ToBool protectedMemory) (bool32ToBool samplerYcbcrConversion) (bool32ToBool shaderDrawParameters)
+
+instance Storable PhysicalDeviceVulkan11Features where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceVulkan11Features where
+  zero = PhysicalDeviceVulkan11Features
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceVulkan11Properties - Structure specifying physical
+-- device properties for functionality promoted to Vulkan 1.1
+--
+-- = Description
+--
+-- The members of 'PhysicalDeviceVulkan11Properties' /must/ have the same
+-- values as the corresponding members of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PhysicalDevicePointClippingProperties',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties',
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties',
+-- and
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlags'
+data PhysicalDeviceVulkan11Properties = PhysicalDeviceVulkan11Properties
+  { -- | @deviceUUID@ is an array of 'Vulkan.Core10.APIConstants.UUID_SIZE'
+    -- @uint8_t@ values representing a universally unique identifier for the
+    -- device.
+    deviceUUID :: ByteString
+  , -- | @driverUUID@ is an array of 'Vulkan.Core10.APIConstants.UUID_SIZE'
+    -- @uint8_t@ values representing a universally unique identifier for the
+    -- driver build in use by the device.
+    driverUUID :: ByteString
+  , -- | @deviceLUID@ is an array of 'Vulkan.Core10.APIConstants.LUID_SIZE'
+    -- @uint8_t@ values representing a locally unique identifier for the
+    -- device.
+    deviceLUID :: ByteString
+  , -- | @deviceNodeMask@ is a @uint32_t@ bitfield identifying the node within a
+    -- linked device adapter corresponding to the device.
+    deviceNodeMask :: Word32
+  , -- | @deviceLUIDValid@ is a boolean value that will be
+    -- 'Vulkan.Core10.BaseType.TRUE' if @deviceLUID@ contains a valid LUID and
+    -- @deviceNodeMask@ contains a valid node mask, and
+    -- 'Vulkan.Core10.BaseType.FALSE' if they do not.
+    deviceLUIDValid :: Bool
+  , -- | @subgroupSize@ is the default number of invocations in each subgroup.
+    -- @subgroupSize@ is at least 1 if any of the physical device’s queues
+    -- support 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'. @subgroupSize@ is
+    -- a power-of-two.
+    subgroupSize :: Word32
+  , -- | @subgroupSupportedStages@ is a bitfield of
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' describing
+    -- the shader stages that subgroup operations are supported in.
+    -- @subgroupSupportedStages@ will have the
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT' bit
+    -- set if any of the physical device’s queues support
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
+    subgroupSupportedStages :: ShaderStageFlags
+  , -- | @subgroupSupportedOperations@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlagBits'
+    -- specifying the sets of subgroup operations supported on this device.
+    -- @subgroupSupportedOperations@ will have the
+    -- 'Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SUBGROUP_FEATURE_BASIC_BIT'
+    -- bit set if any of the physical device’s queues support
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
+    subgroupSupportedOperations :: SubgroupFeatureFlags
+  , -- | @subgroupQuadOperationsInAllStages@ is a boolean specifying whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroup-quad quad subgroup operations>
+    -- are available in all stages, or are restricted to fragment and compute
+    -- stages.
+    subgroupQuadOperationsInAllStages :: Bool
+  , -- | @pointClippingBehavior@ is a
+    -- 'Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior' value
+    -- specifying the point clipping behavior supported by the implementation.
+    pointClippingBehavior :: PointClippingBehavior
+  , -- | @maxMultiviewViewCount@ is one greater than the maximum view index that
+    -- /can/ be used in a subpass.
+    maxMultiviewViewCount :: Word32
+  , -- | @maxMultiviewInstanceIndex@ is the maximum valid value of instance index
+    -- allowed to be generated by a drawing command recorded within a subpass
+    -- of a multiview render pass instance.
+    maxMultiviewInstanceIndex :: Word32
+  , -- | @protectedNoFault@ specifies the behavior of the implementation when
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-protected-access-rules protected memory access rules>
+    -- are broken. If @protectedNoFault@ is 'Vulkan.Core10.BaseType.TRUE',
+    -- breaking those rules will not result in process termination or device
+    -- loss.
+    protectedNoFault :: Bool
+  , -- | @maxPerSetDescriptors@ is a maximum number of descriptors (summed over
+    -- all descriptor types) in a single descriptor set that is guaranteed to
+    -- satisfy any implementation-dependent constraints on the size of a
+    -- descriptor set itself. Applications /can/ query whether a descriptor set
+    -- that goes beyond this limit is supported using
+    -- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.getDescriptorSetLayoutSupport'.
+    maxPerSetDescriptors :: Word32
+  , -- | @maxMemoryAllocationSize@ is the maximum size of a memory allocation
+    -- that /can/ be created, even if there is more space available in the
+    -- heap.
+    maxMemoryAllocationSize :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceVulkan11Properties
+
+instance ToCStruct PhysicalDeviceVulkan11Properties where
+  withCStruct x f = allocaBytesAligned 112 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceVulkan11Properties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pokeFixedLengthByteString ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8))) (deviceUUID)
+    pokeFixedLengthByteString ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8))) (driverUUID)
+    pokeFixedLengthByteString ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8))) (deviceLUID)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (deviceNodeMask)
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (deviceLUIDValid))
+    poke ((p `plusPtr` 64 :: Ptr Word32)) (subgroupSize)
+    poke ((p `plusPtr` 68 :: Ptr ShaderStageFlags)) (subgroupSupportedStages)
+    poke ((p `plusPtr` 72 :: Ptr SubgroupFeatureFlags)) (subgroupSupportedOperations)
+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (subgroupQuadOperationsInAllStages))
+    poke ((p `plusPtr` 80 :: Ptr PointClippingBehavior)) (pointClippingBehavior)
+    poke ((p `plusPtr` 84 :: Ptr Word32)) (maxMultiviewViewCount)
+    poke ((p `plusPtr` 88 :: Ptr Word32)) (maxMultiviewInstanceIndex)
+    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (protectedNoFault))
+    poke ((p `plusPtr` 96 :: Ptr Word32)) (maxPerSetDescriptors)
+    poke ((p `plusPtr` 104 :: Ptr DeviceSize)) (maxMemoryAllocationSize)
+    f
+  cStructSize = 112
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pokeFixedLengthByteString ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
+    pokeFixedLengthByteString ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
+    pokeFixedLengthByteString ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8))) (mempty)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 68 :: Ptr ShaderStageFlags)) (zero)
+    poke ((p `plusPtr` 72 :: Ptr SubgroupFeatureFlags)) (zero)
+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 80 :: Ptr PointClippingBehavior)) (zero)
+    poke ((p `plusPtr` 84 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 88 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 96 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 104 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceVulkan11Properties where
+  peekCStruct p = do
+    deviceUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 16 :: Ptr (FixedArray UUID_SIZE Word8)))
+    driverUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 32 :: Ptr (FixedArray UUID_SIZE Word8)))
+    deviceLUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 48 :: Ptr (FixedArray LUID_SIZE Word8)))
+    deviceNodeMask <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    deviceLUIDValid <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
+    subgroupSize <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    subgroupSupportedStages <- peek @ShaderStageFlags ((p `plusPtr` 68 :: Ptr ShaderStageFlags))
+    subgroupSupportedOperations <- peek @SubgroupFeatureFlags ((p `plusPtr` 72 :: Ptr SubgroupFeatureFlags))
+    subgroupQuadOperationsInAllStages <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
+    pointClippingBehavior <- peek @PointClippingBehavior ((p `plusPtr` 80 :: Ptr PointClippingBehavior))
+    maxMultiviewViewCount <- peek @Word32 ((p `plusPtr` 84 :: Ptr Word32))
+    maxMultiviewInstanceIndex <- peek @Word32 ((p `plusPtr` 88 :: Ptr Word32))
+    protectedNoFault <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))
+    maxPerSetDescriptors <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32))
+    maxMemoryAllocationSize <- peek @DeviceSize ((p `plusPtr` 104 :: Ptr DeviceSize))
+    pure $ PhysicalDeviceVulkan11Properties
+             deviceUUID driverUUID deviceLUID deviceNodeMask (bool32ToBool deviceLUIDValid) subgroupSize subgroupSupportedStages subgroupSupportedOperations (bool32ToBool subgroupQuadOperationsInAllStages) pointClippingBehavior maxMultiviewViewCount maxMultiviewInstanceIndex (bool32ToBool protectedNoFault) maxPerSetDescriptors maxMemoryAllocationSize
+
+instance Storable PhysicalDeviceVulkan11Properties where
+  sizeOf ~_ = 112
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceVulkan11Properties where
+  zero = PhysicalDeviceVulkan11Properties
+           mempty
+           mempty
+           mempty
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceVulkan12Features - Structure describing the Vulkan 1.2
+-- features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceVulkan12Features' structure describe
+-- the following features:
+--
+-- = Description
+--
+-- -   @samplerMirrorClampToEdge@ indicates whether the implementation
+--     supports the
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE'
+--     sampler address mode. If this feature is not enabled, the
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE'
+--     sampler address mode /must/ not be used.
+--
+-- -   @drawIndirectCount@ indicates whether the implementation supports
+--     the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount'
+--     and
+--     'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount'
+--     functions. If this feature is not enabled, these functions /must/
+--     not be used.
+--
+-- -   @storageBuffer8BitAccess@ indicates whether objects in the
+--     @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the
+--     @Block@ decoration /can/ have 8-bit integer members. If this feature
+--     is not enabled, 8-bit integer members /must/ not be used in such
+--     objects. This also indicates whether shader modules /can/ declare
+--     the @StorageBuffer8BitAccess@ capability.
+--
+-- -   @uniformAndStorageBuffer8BitAccess@ indicates whether objects in the
+--     @Uniform@ storage class with the @Block@ decoration and in the
+--     @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the
+--     same decoration /can/ have 8-bit integer members. If this feature is
+--     not enabled, 8-bit integer members /must/ not be used in such
+--     objects. This also indicates whether shader modules /can/ declare
+--     the @UniformAndStorageBuffer8BitAccess@ capability.
+--
+-- -   @storagePushConstant8@ indicates whether objects in the
+--     @PushConstant@ storage class /can/ have 8-bit integer members. If
+--     this feature is not enabled, 8-bit integer members /must/ not be
+--     used in such objects. This also indicates whether shader modules
+--     /can/ declare the @StoragePushConstant8@ capability.
+--
+-- -   @shaderBufferInt64Atomics@ indicates whether shaders /can/ support
+--     64-bit unsigned and signed integer atomic operations on buffers.
+--
+-- -   @shaderSharedInt64Atomics@ indicates whether shaders /can/ support
+--     64-bit unsigned and signed integer atomic operations on shared
+--     memory.
+--
+-- -   @shaderFloat16@ indicates whether 16-bit floats (halfs) are
+--     supported in shader code. This also indicates whether shader modules
+--     /can/ declare the @Float16@ capability. However, this only enables a
+--     subset of the storage classes that SPIR-V allows for the @Float16@
+--     SPIR-V capability: Declaring and using 16-bit floats in the
+--     @Private@, @Workgroup@, and @Function@ storage classes is enabled,
+--     while declaring them in the interface storage classes (e.g.,
+--     @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@,
+--     and @PushConstant@) is not enabled.
+--
+-- -   @shaderInt8@ indicates whether 8-bit integers (signed and unsigned)
+--     are supported in shader code. This also indicates whether shader
+--     modules /can/ declare the @Int8@ capability. However, this only
+--     enables a subset of the storage classes that SPIR-V allows for the
+--     @Int8@ SPIR-V capability: Declaring and using 8-bit integers in the
+--     @Private@, @Workgroup@, and @Function@ storage classes is enabled,
+--     while declaring them in the interface storage classes (e.g.,
+--     @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@,
+--     and @PushConstant@) is not enabled.
+--
+-- -   @descriptorIndexing@ indicates whether the implementation supports
+--     the minimum set of descriptor indexing features as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-requirements Feature Requirements>
+--     section. Enabling the @descriptorIndexing@ member when
+--     'Vulkan.Core10.Device.createDevice' is called does not imply the
+--     other minimum descriptor indexing features are also enabled. Those
+--     other descriptor indexing features /must/ be enabled individually as
+--     needed by the application.
+--
+-- -   @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
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     @InputAttachmentArrayDynamicIndexing@ 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
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     @UniformTexelBufferArrayDynamicIndexing@ 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
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     @StorageTexelBufferArrayDynamicIndexing@ 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
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     @UniformBufferArrayNonUniformIndexing@ 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
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
+--     /must/ not be indexed by non-uniform integer expressions when
+--     aggregated into arrays in shader code. This also indicates whether
+--     shader modules /can/ declare the
+--     @SampledImageArrayNonUniformIndexing@ 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
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     @StorageBufferArrayNonUniformIndexing@ 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
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     @StorageImageArrayNonUniformIndexing@ 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
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     @InputAttachmentArrayNonUniformIndexing@ 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
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     @UniformTexelBufferArrayNonUniformIndexing@ 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
+--     'Vulkan.Core10.Enums.DescriptorType.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
+--     @StorageTexelBufferArrayNonUniformIndexing@ capability.
+--
+-- -   @descriptorBindingUniformBufferUpdateAfterBind@ indicates whether
+--     the implementation supports updating uniform buffer descriptors
+--     after a set is bound. If this feature is not enabled,
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--     /must/ not be used with
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'.
+--
+-- -   @descriptorBindingSampledImageUpdateAfterBind@ indicates whether the
+--     implementation supports updating sampled image descriptors after a
+--     set is bound. If this feature is not enabled,
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--     /must/ not be used with
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'.
+--
+-- -   @descriptorBindingStorageImageUpdateAfterBind@ indicates whether the
+--     implementation supports updating storage image descriptors after a
+--     set is bound. If this feature is not enabled,
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--     /must/ not be used with
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'.
+--
+-- -   @descriptorBindingStorageBufferUpdateAfterBind@ indicates whether
+--     the implementation supports updating storage buffer descriptors
+--     after a set is bound. If this feature is not enabled,
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--     /must/ not be used with
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'.
+--
+-- -   @descriptorBindingUniformTexelBufferUpdateAfterBind@ indicates
+--     whether the implementation supports updating uniform texel buffer
+--     descriptors after a set is bound. If this feature is not enabled,
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--     /must/ not be used with
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'.
+--
+-- -   @descriptorBindingStorageTexelBufferUpdateAfterBind@ indicates
+--     whether the implementation supports updating storage texel buffer
+--     descriptors after a set is bound. If this feature is not enabled,
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--     /must/ not be used with
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'.
+--
+-- -   @descriptorBindingUpdateUnusedWhilePending@ indicates whether the
+--     implementation supports updating descriptors while the set is in
+--     use. If this feature is not enabled,
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'
+--     /must/ not be used.
+--
+-- -   @descriptorBindingPartiallyBound@ indicates whether the
+--     implementation supports statically using a descriptor set binding in
+--     which some descriptors are not valid. If this feature is not
+--     enabled,
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'
+--     /must/ not be used.
+--
+-- -   @descriptorBindingVariableDescriptorCount@ indicates whether the
+--     implementation supports descriptor sets with a variable-sized last
+--     binding. If this feature is not enabled,
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT'
+--     /must/ not be used.
+--
+-- -   @runtimeDescriptorArray@ indicates whether the implementation
+--     supports the SPIR-V @RuntimeDescriptorArray@ capability. If this
+--     feature is not enabled, descriptors /must/ not be declared in
+--     runtime arrays.
+--
+-- -   @samplerFilterMinmax@ indicates whether the implementation supports
+--     a minimum set of required formats supporting min\/max filtering as
+--     defined by the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-filterMinmaxSingleComponentFormats-minimum-requirements filterMinmaxSingleComponentFormats>
+--     property minimum requirements. If this feature is not enabled, then
+--     no 'Vulkan.Core10.Sampler.SamplerCreateInfo' @pNext@ chain can
+--     include a
+--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'
+--     structure.
+--
+-- -   @scalarBlockLayout@ indicates that the implementation supports the
+--     layout of resource blocks in shaders using
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-alignment-requirements scalar alignment>.
+--
+-- -   @imagelessFramebuffer@ indicates that the implementation supports
+--     specifying the image view for attachments at render pass begin time
+--     via
+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'.
+--
+-- -   @uniformBufferStandardLayout@ indicates that the implementation
+--     supports the same layouts for uniform buffers as for storage and
+--     other kinds of buffers. See
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Buffer Layout>.
+--
+-- -   @shaderSubgroupExtendedTypes@ is a boolean that specifies whether
+--     subgroup operations can use 8-bit integer, 16-bit integer, 64-bit
+--     integer, 16-bit floating-point, and vectors of these types in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>
+--     with
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-scope-subgroup subgroup scope>if
+--     the implementation supports the types.
+--
+-- -   @separateDepthStencilLayouts@ indicates whether the implementation
+--     supports a 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' for a
+--     depth\/stencil image with only one of
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--     set, and whether
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--     can be used.
+--
+-- -   @hostQueryReset@ indicates that the implementation supports
+--     resetting queries from the host with
+--     'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool'.
+--
+-- -   @timelineSemaphore@ indicates whether semaphores created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' are
+--     supported.
+--
+-- -   @bufferDeviceAddress@ indicates that the implementation supports
+--     accessing buffer memory in shaders as storage buffers via an address
+--     queried from
+--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'.
+--
+-- -   @bufferDeviceAddressCaptureReplay@ indicates that the implementation
+--     supports saving and reusing buffer and device addresses, e.g. for
+--     trace capture and replay.
+--
+-- -   @bufferDeviceAddressMultiDevice@ indicates that the implementation
+--     supports the @bufferDeviceAddress@ and @rayTracing@ features for
+--     logical devices created with multiple physical devices. If this
+--     feature is not supported, buffer and acceleration structure
+--     addresses /must/ not be queried on a logical device created with
+--     more than one physical device.
+--
+-- -   @vulkanMemoryModel@ indicates whether the Vulkan Memory Model is
+--     supported, as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model Vulkan Memory Model>.
+--     This also indicates whether shader modules /can/ declare the
+--     @VulkanMemoryModel@ capability.
+--
+-- -   @vulkanMemoryModelDeviceScope@ indicates whether the Vulkan Memory
+--     Model can use 'Vulkan.Core10.Handles.Device' scope synchronization.
+--     This also indicates whether shader modules /can/ declare the
+--     @VulkanMemoryModelDeviceScope@ capability.
+--
+-- -   @vulkanMemoryModelAvailabilityVisibilityChains@ indicates whether
+--     the Vulkan Memory Model can use
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model-availability-visibility availability and visibility chains>
+--     with more than one element.
+--
+-- -   @shaderOutputViewportIndex@ indicates whether the implementation
+--     supports the @ShaderViewportIndex@ SPIR-V capability enabling
+--     variables decorated with the @ViewportIndex@ built-in to be exported
+--     from vertex or tessellation evaluation shaders. If this feature is
+--     not enabled, the @ViewportIndex@ built-in decoration /must/ not be
+--     used on outputs in vertex or tessellation evaluation shaders.
+--
+-- -   @shaderOutputLayer@ indicates whether the implementation supports
+--     the @ShaderLayer@ SPIR-V capability enabling variables decorated
+--     with the @Layer@ built-in to be exported from vertex or tessellation
+--     evaluation shaders. If this feature is not enabled, the @Layer@
+--     built-in decoration /must/ not be used on outputs in vertex or
+--     tessellation evaluation shaders.
+--
+-- -   If @subgroupBroadcastDynamicId@ is 'Vulkan.Core10.BaseType.TRUE',
+--     the “Id” operand of @OpGroupNonUniformBroadcast@ /can/ be
+--     dynamically uniform within a subgroup, and the “Index” operand of
+--     @OpGroupNonUniformQuadBroadcast@ /can/ be dynamically uniform within
+--     the derivative group. If it is 'Vulkan.Core10.BaseType.FALSE', these
+--     operands /must/ be constants.
+--
+-- If the 'PhysicalDeviceVulkan12Features' structure is included in the
+-- @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceVulkan12Features' /can/ also be used in the @pNext@ chain
+-- of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the features.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceVulkan12Features = PhysicalDeviceVulkan12Features
+  { -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "samplerMirrorClampToEdge"
+    samplerMirrorClampToEdge :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "drawIndirectCount"
+    drawIndirectCount :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "storageBuffer8BitAccess"
+    storageBuffer8BitAccess :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "uniformAndStorageBuffer8BitAccess"
+    uniformAndStorageBuffer8BitAccess :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "storagePushConstant8"
+    storagePushConstant8 :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderBufferInt64Atomics"
+    shaderBufferInt64Atomics :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderSharedInt64Atomics"
+    shaderSharedInt64Atomics :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderFloat16"
+    shaderFloat16 :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderInt8"
+    shaderInt8 :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorIndexing"
+    descriptorIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderInputAttachmentArrayDynamicIndexing"
+    shaderInputAttachmentArrayDynamicIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderUniformTexelBufferArrayDynamicIndexing"
+    shaderUniformTexelBufferArrayDynamicIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderStorageTexelBufferArrayDynamicIndexing"
+    shaderStorageTexelBufferArrayDynamicIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderUniformBufferArrayNonUniformIndexing"
+    shaderUniformBufferArrayNonUniformIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderSampledImageArrayNonUniformIndexing"
+    shaderSampledImageArrayNonUniformIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderStorageBufferArrayNonUniformIndexing"
+    shaderStorageBufferArrayNonUniformIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderStorageImageArrayNonUniformIndexing"
+    shaderStorageImageArrayNonUniformIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderInputAttachmentArrayNonUniformIndexing"
+    shaderInputAttachmentArrayNonUniformIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderUniformTexelBufferArrayNonUniformIndexing"
+    shaderUniformTexelBufferArrayNonUniformIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderStorageTexelBufferArrayNonUniformIndexing"
+    shaderStorageTexelBufferArrayNonUniformIndexing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingUniformBufferUpdateAfterBind"
+    descriptorBindingUniformBufferUpdateAfterBind :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingSampledImageUpdateAfterBind"
+    descriptorBindingSampledImageUpdateAfterBind :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingStorageImageUpdateAfterBind"
+    descriptorBindingStorageImageUpdateAfterBind :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingStorageBufferUpdateAfterBind"
+    descriptorBindingStorageBufferUpdateAfterBind :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingUniformTexelBufferUpdateAfterBind"
+    descriptorBindingUniformTexelBufferUpdateAfterBind :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingStorageTexelBufferUpdateAfterBind"
+    descriptorBindingStorageTexelBufferUpdateAfterBind :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingUpdateUnusedWhilePending"
+    descriptorBindingUpdateUnusedWhilePending :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingPartiallyBound"
+    descriptorBindingPartiallyBound :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "descriptorBindingVariableDescriptorCount"
+    descriptorBindingVariableDescriptorCount :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "runtimeDescriptorArray"
+    runtimeDescriptorArray :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "samplerFilterMinmax"
+    samplerFilterMinmax :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "scalarBlockLayout"
+    scalarBlockLayout :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "imagelessFramebuffer"
+    imagelessFramebuffer :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "uniformBufferStandardLayout"
+    uniformBufferStandardLayout :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderSubgroupExtendedTypes"
+    shaderSubgroupExtendedTypes :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "separateDepthStencilLayouts"
+    separateDepthStencilLayouts :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "hostQueryReset"
+    hostQueryReset :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "timelineSemaphore"
+    timelineSemaphore :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "bufferDeviceAddress"
+    bufferDeviceAddress :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "bufferDeviceAddressCaptureReplay"
+    bufferDeviceAddressCaptureReplay :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "bufferDeviceAddressMultiDevice"
+    bufferDeviceAddressMultiDevice :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "vulkanMemoryModel"
+    vulkanMemoryModel :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "vulkanMemoryModelDeviceScope"
+    vulkanMemoryModelDeviceScope :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "vulkanMemoryModelAvailabilityVisibilityChains"
+    vulkanMemoryModelAvailabilityVisibilityChains :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderOutputViewportIndex"
+    shaderOutputViewportIndex :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "shaderOutputLayer"
+    shaderOutputLayer :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceVulkan12Features" "subgroupBroadcastDynamicId"
+    subgroupBroadcastDynamicId :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceVulkan12Features
+
+instance ToCStruct PhysicalDeviceVulkan12Features where
+  withCStruct x f = allocaBytesAligned 208 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceVulkan12Features{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (samplerMirrorClampToEdge))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (drawIndirectCount))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (storageBuffer8BitAccess))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (uniformAndStorageBuffer8BitAccess))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (storagePushConstant8))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (shaderBufferInt64Atomics))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (shaderSharedInt64Atomics))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (shaderFloat16))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (shaderInt8))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (descriptorIndexing))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayDynamicIndexing))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (shaderUniformTexelBufferArrayDynamicIndexing))
+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (shaderStorageTexelBufferArrayDynamicIndexing))
+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayNonUniformIndexing))
+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayNonUniformIndexing))
+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayNonUniformIndexing))
+    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayNonUniformIndexing))
+    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayNonUniformIndexing))
+    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (shaderUniformTexelBufferArrayNonUniformIndexing))
+    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (shaderStorageTexelBufferArrayNonUniformIndexing))
+    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUniformBufferUpdateAfterBind))
+    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (descriptorBindingSampledImageUpdateAfterBind))
+    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageImageUpdateAfterBind))
+    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageBufferUpdateAfterBind))
+    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUniformTexelBufferUpdateAfterBind))
+    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageTexelBufferUpdateAfterBind))
+    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUpdateUnusedWhilePending))
+    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (descriptorBindingPartiallyBound))
+    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (descriptorBindingVariableDescriptorCount))
+    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (runtimeDescriptorArray))
+    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (samplerFilterMinmax))
+    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (scalarBlockLayout))
+    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (imagelessFramebuffer))
+    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (uniformBufferStandardLayout))
+    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (shaderSubgroupExtendedTypes))
+    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (separateDepthStencilLayouts))
+    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (hostQueryReset))
+    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (timelineSemaphore))
+    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddress))
+    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressCaptureReplay))
+    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressMultiDevice))
+    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModel))
+    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModelDeviceScope))
+    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModelAvailabilityVisibilityChains))
+    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (shaderOutputViewportIndex))
+    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (shaderOutputLayer))
+    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (subgroupBroadcastDynamicId))
+    f
+  cStructSize = 208
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceVulkan12Features where
+  peekCStruct p = do
+    samplerMirrorClampToEdge <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    drawIndirectCount <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    storageBuffer8BitAccess <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    uniformAndStorageBuffer8BitAccess <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    storagePushConstant8 <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    shaderBufferInt64Atomics <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    shaderSharedInt64Atomics <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    shaderFloat16 <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    shaderInt8 <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    descriptorIndexing <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
+    shaderInputAttachmentArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
+    shaderUniformTexelBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
+    shaderStorageTexelBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))
+    shaderUniformBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))
+    shaderSampledImageArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))
+    shaderStorageBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
+    shaderStorageImageArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 80 :: Ptr Bool32))
+    shaderInputAttachmentArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 84 :: Ptr Bool32))
+    shaderUniformTexelBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 88 :: Ptr Bool32))
+    shaderStorageTexelBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))
+    descriptorBindingUniformBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 96 :: Ptr Bool32))
+    descriptorBindingSampledImageUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 100 :: Ptr Bool32))
+    descriptorBindingStorageImageUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 104 :: Ptr Bool32))
+    descriptorBindingStorageBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 108 :: Ptr Bool32))
+    descriptorBindingUniformTexelBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 112 :: Ptr Bool32))
+    descriptorBindingStorageTexelBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 116 :: Ptr Bool32))
+    descriptorBindingUpdateUnusedWhilePending <- peek @Bool32 ((p `plusPtr` 120 :: Ptr Bool32))
+    descriptorBindingPartiallyBound <- peek @Bool32 ((p `plusPtr` 124 :: Ptr Bool32))
+    descriptorBindingVariableDescriptorCount <- peek @Bool32 ((p `plusPtr` 128 :: Ptr Bool32))
+    runtimeDescriptorArray <- peek @Bool32 ((p `plusPtr` 132 :: Ptr Bool32))
+    samplerFilterMinmax <- peek @Bool32 ((p `plusPtr` 136 :: Ptr Bool32))
+    scalarBlockLayout <- peek @Bool32 ((p `plusPtr` 140 :: Ptr Bool32))
+    imagelessFramebuffer <- peek @Bool32 ((p `plusPtr` 144 :: Ptr Bool32))
+    uniformBufferStandardLayout <- peek @Bool32 ((p `plusPtr` 148 :: Ptr Bool32))
+    shaderSubgroupExtendedTypes <- peek @Bool32 ((p `plusPtr` 152 :: Ptr Bool32))
+    separateDepthStencilLayouts <- peek @Bool32 ((p `plusPtr` 156 :: Ptr Bool32))
+    hostQueryReset <- peek @Bool32 ((p `plusPtr` 160 :: Ptr Bool32))
+    timelineSemaphore <- peek @Bool32 ((p `plusPtr` 164 :: Ptr Bool32))
+    bufferDeviceAddress <- peek @Bool32 ((p `plusPtr` 168 :: Ptr Bool32))
+    bufferDeviceAddressCaptureReplay <- peek @Bool32 ((p `plusPtr` 172 :: Ptr Bool32))
+    bufferDeviceAddressMultiDevice <- peek @Bool32 ((p `plusPtr` 176 :: Ptr Bool32))
+    vulkanMemoryModel <- peek @Bool32 ((p `plusPtr` 180 :: Ptr Bool32))
+    vulkanMemoryModelDeviceScope <- peek @Bool32 ((p `plusPtr` 184 :: Ptr Bool32))
+    vulkanMemoryModelAvailabilityVisibilityChains <- peek @Bool32 ((p `plusPtr` 188 :: Ptr Bool32))
+    shaderOutputViewportIndex <- peek @Bool32 ((p `plusPtr` 192 :: Ptr Bool32))
+    shaderOutputLayer <- peek @Bool32 ((p `plusPtr` 196 :: Ptr Bool32))
+    subgroupBroadcastDynamicId <- peek @Bool32 ((p `plusPtr` 200 :: Ptr Bool32))
+    pure $ PhysicalDeviceVulkan12Features
+             (bool32ToBool samplerMirrorClampToEdge) (bool32ToBool drawIndirectCount) (bool32ToBool storageBuffer8BitAccess) (bool32ToBool uniformAndStorageBuffer8BitAccess) (bool32ToBool storagePushConstant8) (bool32ToBool shaderBufferInt64Atomics) (bool32ToBool shaderSharedInt64Atomics) (bool32ToBool shaderFloat16) (bool32ToBool shaderInt8) (bool32ToBool descriptorIndexing) (bool32ToBool shaderInputAttachmentArrayDynamicIndexing) (bool32ToBool shaderUniformTexelBufferArrayDynamicIndexing) (bool32ToBool shaderStorageTexelBufferArrayDynamicIndexing) (bool32ToBool shaderUniformBufferArrayNonUniformIndexing) (bool32ToBool shaderSampledImageArrayNonUniformIndexing) (bool32ToBool shaderStorageBufferArrayNonUniformIndexing) (bool32ToBool shaderStorageImageArrayNonUniformIndexing) (bool32ToBool shaderInputAttachmentArrayNonUniformIndexing) (bool32ToBool shaderUniformTexelBufferArrayNonUniformIndexing) (bool32ToBool shaderStorageTexelBufferArrayNonUniformIndexing) (bool32ToBool descriptorBindingUniformBufferUpdateAfterBind) (bool32ToBool descriptorBindingSampledImageUpdateAfterBind) (bool32ToBool descriptorBindingStorageImageUpdateAfterBind) (bool32ToBool descriptorBindingStorageBufferUpdateAfterBind) (bool32ToBool descriptorBindingUniformTexelBufferUpdateAfterBind) (bool32ToBool descriptorBindingStorageTexelBufferUpdateAfterBind) (bool32ToBool descriptorBindingUpdateUnusedWhilePending) (bool32ToBool descriptorBindingPartiallyBound) (bool32ToBool descriptorBindingVariableDescriptorCount) (bool32ToBool runtimeDescriptorArray) (bool32ToBool samplerFilterMinmax) (bool32ToBool scalarBlockLayout) (bool32ToBool imagelessFramebuffer) (bool32ToBool uniformBufferStandardLayout) (bool32ToBool shaderSubgroupExtendedTypes) (bool32ToBool separateDepthStencilLayouts) (bool32ToBool hostQueryReset) (bool32ToBool timelineSemaphore) (bool32ToBool bufferDeviceAddress) (bool32ToBool bufferDeviceAddressCaptureReplay) (bool32ToBool bufferDeviceAddressMultiDevice) (bool32ToBool vulkanMemoryModel) (bool32ToBool vulkanMemoryModelDeviceScope) (bool32ToBool vulkanMemoryModelAvailabilityVisibilityChains) (bool32ToBool shaderOutputViewportIndex) (bool32ToBool shaderOutputLayer) (bool32ToBool subgroupBroadcastDynamicId)
+
+instance Storable PhysicalDeviceVulkan12Features where
+  sizeOf ~_ = 208
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceVulkan12Features where
+  zero = PhysicalDeviceVulkan12Features
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceVulkan12Properties - Structure specifying physical
+-- device properties for functionality promoted to Vulkan 1.2
+--
+-- = Description
+--
+-- The members of 'PhysicalDeviceVulkan12Properties' /must/ have the same
+-- values as the corresponding members of
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties',
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.PhysicalDeviceSamplerFilterMinmaxProperties',
+-- and
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreProperties'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.ConformanceVersion',
+-- 'Vulkan.Core12.Enums.DriverId.DriverId',
+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlags',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags',
+-- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceVulkan12Properties = PhysicalDeviceVulkan12Properties
+  { -- | @driverID@ is a unique identifier for the driver of the physical device.
+    driverID :: DriverId
+  , -- | @driverName@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_DRIVER_NAME_SIZE' @char@ containing a
+    -- null-terminated UTF-8 string which is the name of the driver.
+    driverName :: ByteString
+  , -- | @driverInfo@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_DRIVER_INFO_SIZE' @char@ containing a
+    -- null-terminated UTF-8 string with additional information about the
+    -- driver.
+    driverInfo :: ByteString
+  , -- | @conformanceVersion@ is the version of the Vulkan conformance test this
+    -- driver is conformant against (see
+    -- 'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.ConformanceVersion').
+    conformanceVersion :: ConformanceVersion
+  , -- | @denormBehaviorIndependence@ is a
+    -- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'
+    -- value indicating whether, and how, denorm behavior can be set
+    -- independently for different bit widths.
+    denormBehaviorIndependence :: ShaderFloatControlsIndependence
+  , -- | @roundingModeIndependence@ is a
+    -- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'
+    -- value indicating whether, and how, rounding modes can be set
+    -- independently for different bit widths.
+    roundingModeIndependence :: ShaderFloatControlsIndependence
+  , -- | @shaderSignedZeroInfNanPreserveFloat16@ is a boolean value indicating
+    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
+    -- 16-bit floating-point computations. It also indicates whether the
+    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 16-bit
+    -- floating-point types.
+    shaderSignedZeroInfNanPreserveFloat16 :: Bool
+  , -- | @shaderSignedZeroInfNanPreserveFloat32@ is a boolean value indicating
+    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
+    -- 32-bit floating-point computations. It also indicates whether the
+    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 32-bit
+    -- floating-point types.
+    shaderSignedZeroInfNanPreserveFloat32 :: Bool
+  , -- | @shaderSignedZeroInfNanPreserveFloat64@ is a boolean value indicating
+    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
+    -- 64-bit floating-point computations. It also indicates whether the
+    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 64-bit
+    -- floating-point types.
+    shaderSignedZeroInfNanPreserveFloat64 :: Bool
+  , -- | @shaderDenormPreserveFloat16@ is a boolean value indicating whether
+    -- denormals /can/ be preserved in 16-bit floating-point computations. It
+    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
+    -- for 16-bit floating-point types.
+    shaderDenormPreserveFloat16 :: Bool
+  , -- | @shaderDenormPreserveFloat32@ is a boolean value indicating whether
+    -- denormals /can/ be preserved in 32-bit floating-point computations. It
+    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
+    -- for 32-bit floating-point types.
+    shaderDenormPreserveFloat32 :: Bool
+  , -- | @shaderDenormPreserveFloat64@ is a boolean value indicating whether
+    -- denormals /can/ be preserved in 64-bit floating-point computations. It
+    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
+    -- for 64-bit floating-point types.
+    shaderDenormPreserveFloat64 :: Bool
+  , -- | @shaderDenormFlushToZeroFloat16@ is a boolean value indicating whether
+    -- denormals /can/ be flushed to zero in 16-bit floating-point
+    -- computations. It also indicates whether the @DenormFlushToZero@
+    -- execution mode /can/ be used for 16-bit floating-point types.
+    shaderDenormFlushToZeroFloat16 :: Bool
+  , -- | @shaderDenormFlushToZeroFloat32@ is a boolean value indicating whether
+    -- denormals /can/ be flushed to zero in 32-bit floating-point
+    -- computations. It also indicates whether the @DenormFlushToZero@
+    -- execution mode /can/ be used for 32-bit floating-point types.
+    shaderDenormFlushToZeroFloat32 :: Bool
+  , -- | @shaderDenormFlushToZeroFloat64@ is a boolean value indicating whether
+    -- denormals /can/ be flushed to zero in 64-bit floating-point
+    -- computations. It also indicates whether the @DenormFlushToZero@
+    -- execution mode /can/ be used for 64-bit floating-point types.
+    shaderDenormFlushToZeroFloat64 :: Bool
+  , -- | @shaderRoundingModeRTEFloat16@ is a boolean value indicating whether an
+    -- implementation supports the round-to-nearest-even rounding mode for
+    -- 16-bit floating-point arithmetic and conversion instructions. It also
+    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
+    -- 16-bit floating-point types.
+    shaderRoundingModeRTEFloat16 :: Bool
+  , -- | @shaderRoundingModeRTEFloat32@ is a boolean value indicating whether an
+    -- implementation supports the round-to-nearest-even rounding mode for
+    -- 32-bit floating-point arithmetic and conversion instructions. It also
+    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
+    -- 32-bit floating-point types.
+    shaderRoundingModeRTEFloat32 :: Bool
+  , -- | @shaderRoundingModeRTEFloat64@ is a boolean value indicating whether an
+    -- implementation supports the round-to-nearest-even rounding mode for
+    -- 64-bit floating-point arithmetic and conversion instructions. It also
+    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
+    -- 64-bit floating-point types.
+    shaderRoundingModeRTEFloat64 :: Bool
+  , -- | @shaderRoundingModeRTZFloat16@ is a boolean value indicating whether an
+    -- implementation supports the round-towards-zero rounding mode for 16-bit
+    -- floating-point arithmetic and conversion instructions. It also indicates
+    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 16-bit
+    -- floating-point types.
+    shaderRoundingModeRTZFloat16 :: Bool
+  , -- | @shaderRoundingModeRTZFloat32@ is a boolean value indicating whether an
+    -- implementation supports the round-towards-zero rounding mode for 32-bit
+    -- floating-point arithmetic and conversion instructions. It also indicates
+    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 32-bit
+    -- floating-point types.
+    shaderRoundingModeRTZFloat32 :: Bool
+  , -- | @shaderRoundingModeRTZFloat64@ is a boolean value indicating whether an
+    -- implementation supports the round-towards-zero rounding mode for 64-bit
+    -- floating-point arithmetic and conversion instructions. It also indicates
+    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 64-bit
+    -- floating-point types.
+    shaderRoundingModeRTZFloat64 :: Bool
+  , -- | @maxUpdateAfterBindDescriptorsInAllPools@ is the maximum number of
+    -- descriptors (summed over all descriptor types) that /can/ be created
+    -- across all pools that are created with the
+    -- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
+    -- bit set. Pool creation /may/ fail when this limit is exceeded, or when
+    -- the space this limit represents is unable to satisfy a pool creation due
+    -- to fragmentation.
+    maxUpdateAfterBindDescriptorsInAllPools :: Word32
+  , -- | @shaderUniformBufferArrayNonUniformIndexingNative@ is a boolean value
+    -- indicating whether uniform buffer descriptors natively support
+    -- nonuniform indexing. If this is 'Vulkan.Core10.BaseType.FALSE', then a
+    -- single dynamic instance of an instruction that nonuniformly indexes an
+    -- array of uniform buffers /may/ execute multiple times in order to access
+    -- all the descriptors.
+    shaderUniformBufferArrayNonUniformIndexingNative :: Bool
+  , -- | @shaderSampledImageArrayNonUniformIndexingNative@ is a boolean value
+    -- indicating whether sampler and image descriptors natively support
+    -- nonuniform indexing. If this is 'Vulkan.Core10.BaseType.FALSE', then a
+    -- single dynamic instance of an instruction that nonuniformly indexes an
+    -- array of samplers or images /may/ execute multiple times in order to
+    -- access all the descriptors.
+    shaderSampledImageArrayNonUniformIndexingNative :: Bool
+  , -- | @shaderStorageBufferArrayNonUniformIndexingNative@ is a boolean value
+    -- indicating whether storage buffer descriptors natively support
+    -- nonuniform indexing. If this is 'Vulkan.Core10.BaseType.FALSE', then a
+    -- single dynamic instance of an instruction that nonuniformly indexes an
+    -- array of storage buffers /may/ execute multiple times in order to access
+    -- all the descriptors.
+    shaderStorageBufferArrayNonUniformIndexingNative :: Bool
+  , -- | @shaderStorageImageArrayNonUniformIndexingNative@ is a boolean value
+    -- indicating whether storage image descriptors natively support nonuniform
+    -- indexing. If this is 'Vulkan.Core10.BaseType.FALSE', then a single
+    -- dynamic instance of an instruction that nonuniformly indexes an array of
+    -- storage images /may/ execute multiple times in order to access all the
+    -- descriptors.
+    shaderStorageImageArrayNonUniformIndexingNative :: Bool
+  , -- | @shaderInputAttachmentArrayNonUniformIndexingNative@ is a boolean value
+    -- indicating whether input attachment descriptors natively support
+    -- nonuniform indexing. If this is 'Vulkan.Core10.BaseType.FALSE', then a
+    -- single dynamic instance of an instruction that nonuniformly indexes an
+    -- array of input attachments /may/ execute multiple times in order to
+    -- access all the descriptors.
+    shaderInputAttachmentArrayNonUniformIndexingNative :: Bool
+  , -- | @robustBufferAccessUpdateAfterBind@ is a boolean value indicating
+    -- whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
+    -- /can/ be enabled in a device simultaneously with
+    -- @descriptorBindingUniformBufferUpdateAfterBind@,
+    -- @descriptorBindingStorageBufferUpdateAfterBind@,
+    -- @descriptorBindingUniformTexelBufferUpdateAfterBind@, and\/or
+    -- @descriptorBindingStorageTexelBufferUpdateAfterBind@. If this is
+    -- 'Vulkan.Core10.BaseType.FALSE', then either @robustBufferAccess@ /must/
+    -- be disabled or all of these update-after-bind features /must/ be
+    -- disabled.
+    robustBufferAccessUpdateAfterBind :: Bool
+  , -- | @quadDivergentImplicitLod@ is a boolean value indicating whether
+    -- implicit level of detail calculations for image operations have
+    -- well-defined results when the image and\/or sampler objects used for the
+    -- instruction are not uniform within a quad. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-derivative-image-operations Derivative Image Operations>.
+    quadDivergentImplicitLod :: Bool
+  , -- | @maxPerStageDescriptorUpdateAfterBindSamplers@ is similar to
+    -- @maxPerStageDescriptorSamplers@ but counts descriptors from descriptor
+    -- sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindSamplers :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindUniformBuffers@ is similar to
+    -- @maxPerStageDescriptorUniformBuffers@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindUniformBuffers :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindStorageBuffers@ is similar to
+    -- @maxPerStageDescriptorStorageBuffers@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindStorageBuffers :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindSampledImages@ is similar to
+    -- @maxPerStageDescriptorSampledImages@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindSampledImages :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindStorageImages@ is similar to
+    -- @maxPerStageDescriptorStorageImages@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindStorageImages :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindInputAttachments@ is similar to
+    -- @maxPerStageDescriptorInputAttachments@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindInputAttachments :: Word32
+  , -- | @maxPerStageUpdateAfterBindResources@ is similar to
+    -- @maxPerStageResources@ but counts descriptors from descriptor sets
+    -- created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageUpdateAfterBindResources :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindSamplers@ is similar to
+    -- @maxDescriptorSetSamplers@ but counts descriptors from descriptor sets
+    -- created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindSamplers :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffers@ is similar to
+    -- @maxDescriptorSetUniformBuffers@ but counts descriptors from descriptor
+    -- sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindUniformBuffers :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@ is similar to
+    -- @maxDescriptorSetUniformBuffersDynamic@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffers@ is similar to
+    -- @maxDescriptorSetStorageBuffers@ but counts descriptors from descriptor
+    -- sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindStorageBuffers :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@ is similar to
+    -- @maxDescriptorSetStorageBuffersDynamic@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindSampledImages@ is similar to
+    -- @maxDescriptorSetSampledImages@ but counts descriptors from descriptor
+    -- sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindSampledImages :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindStorageImages@ is similar to
+    -- @maxDescriptorSetStorageImages@ but counts descriptors from descriptor
+    -- sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindStorageImages :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindInputAttachments@ is similar to
+    -- @maxDescriptorSetInputAttachments@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindInputAttachments :: Word32
+  , -- | @supportedDepthResolveModes@ is a bitmask of
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' indicating
+    -- the set of supported depth resolve modes.
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'
+    -- /must/ be included in the set but implementations /may/ support
+    -- additional modes.
+    supportedDepthResolveModes :: ResolveModeFlags
+  , -- | @supportedStencilResolveModes@ is a bitmask of
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' indicating
+    -- the set of supported stencil resolve modes.
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'
+    -- /must/ be included in the set but implementations /may/ support
+    -- additional modes.
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_AVERAGE_BIT'
+    -- /must/ not be included in the set.
+    supportedStencilResolveModes :: ResolveModeFlags
+  , -- | @independentResolveNone@ is 'Vulkan.Core10.BaseType.TRUE' if the
+    -- implementation supports setting the depth and stencil resolve modes to
+    -- different values when one of those modes is
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. Otherwise
+    -- the implementation only supports setting both modes to the same value.
+    independentResolveNone :: Bool
+  , -- | @independentResolve@ is 'Vulkan.Core10.BaseType.TRUE' if the
+    -- implementation supports all combinations of the supported depth and
+    -- stencil resolve modes, including setting either depth or stencil resolve
+    -- mode to 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. An
+    -- implementation that supports @independentResolve@ /must/ also support
+    -- @independentResolveNone@.
+    independentResolve :: Bool
+  , -- | @filterMinmaxSingleComponentFormats@ is a boolean value indicating
+    -- whether a minimum set of required formats support min\/max filtering.
+    filterMinmaxSingleComponentFormats :: Bool
+  , -- | @filterMinmaxImageComponentMapping@ is a boolean value indicating
+    -- whether the implementation supports non-identity component mapping of
+    -- the image when doing min\/max filtering.
+    filterMinmaxImageComponentMapping :: Bool
+  , -- | @maxTimelineSemaphoreValueDifference@ indicates the maximum difference
+    -- allowed by the implementation between the current value of a timeline
+    -- semaphore and any pending signal or wait operations.
+    maxTimelineSemaphoreValueDifference :: Word64
+  , -- | @framebufferIntegerColorSampleCounts@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the color sample counts that are supported for all framebuffer color
+    -- attachments with integer formats.
+    framebufferIntegerColorSampleCounts :: SampleCountFlags
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceVulkan12Properties
+
+instance ToCStruct PhysicalDeviceVulkan12Properties where
+  withCStruct x f = allocaBytesAligned 736 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceVulkan12Properties{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DriverId)) (driverID)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))) (driverName)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))) (driverInfo)
+    ContT $ pokeCStruct ((p `plusPtr` 532 :: Ptr ConformanceVersion)) (conformanceVersion) . ($ ())
+    lift $ poke ((p `plusPtr` 536 :: Ptr ShaderFloatControlsIndependence)) (denormBehaviorIndependence)
+    lift $ poke ((p `plusPtr` 540 :: Ptr ShaderFloatControlsIndependence)) (roundingModeIndependence)
+    lift $ poke ((p `plusPtr` 544 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat16))
+    lift $ poke ((p `plusPtr` 548 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat32))
+    lift $ poke ((p `plusPtr` 552 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat64))
+    lift $ poke ((p `plusPtr` 556 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat16))
+    lift $ poke ((p `plusPtr` 560 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat32))
+    lift $ poke ((p `plusPtr` 564 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat64))
+    lift $ poke ((p `plusPtr` 568 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat16))
+    lift $ poke ((p `plusPtr` 572 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat32))
+    lift $ poke ((p `plusPtr` 576 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat64))
+    lift $ poke ((p `plusPtr` 580 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat16))
+    lift $ poke ((p `plusPtr` 584 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat32))
+    lift $ poke ((p `plusPtr` 588 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat64))
+    lift $ poke ((p `plusPtr` 592 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat16))
+    lift $ poke ((p `plusPtr` 596 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat32))
+    lift $ poke ((p `plusPtr` 600 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat64))
+    lift $ poke ((p `plusPtr` 604 :: Ptr Word32)) (maxUpdateAfterBindDescriptorsInAllPools)
+    lift $ poke ((p `plusPtr` 608 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayNonUniformIndexingNative))
+    lift $ poke ((p `plusPtr` 612 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayNonUniformIndexingNative))
+    lift $ poke ((p `plusPtr` 616 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayNonUniformIndexingNative))
+    lift $ poke ((p `plusPtr` 620 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayNonUniformIndexingNative))
+    lift $ poke ((p `plusPtr` 624 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayNonUniformIndexingNative))
+    lift $ poke ((p `plusPtr` 628 :: Ptr Bool32)) (boolToBool32 (robustBufferAccessUpdateAfterBind))
+    lift $ poke ((p `plusPtr` 632 :: Ptr Bool32)) (boolToBool32 (quadDivergentImplicitLod))
+    lift $ poke ((p `plusPtr` 636 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindSamplers)
+    lift $ poke ((p `plusPtr` 640 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindUniformBuffers)
+    lift $ poke ((p `plusPtr` 644 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindStorageBuffers)
+    lift $ poke ((p `plusPtr` 648 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindSampledImages)
+    lift $ poke ((p `plusPtr` 652 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindStorageImages)
+    lift $ poke ((p `plusPtr` 656 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindInputAttachments)
+    lift $ poke ((p `plusPtr` 660 :: Ptr Word32)) (maxPerStageUpdateAfterBindResources)
+    lift $ poke ((p `plusPtr` 664 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindSamplers)
+    lift $ poke ((p `plusPtr` 668 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindUniformBuffers)
+    lift $ poke ((p `plusPtr` 672 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindUniformBuffersDynamic)
+    lift $ poke ((p `plusPtr` 676 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageBuffers)
+    lift $ poke ((p `plusPtr` 680 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageBuffersDynamic)
+    lift $ poke ((p `plusPtr` 684 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindSampledImages)
+    lift $ poke ((p `plusPtr` 688 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageImages)
+    lift $ poke ((p `plusPtr` 692 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindInputAttachments)
+    lift $ poke ((p `plusPtr` 696 :: Ptr ResolveModeFlags)) (supportedDepthResolveModes)
+    lift $ poke ((p `plusPtr` 700 :: Ptr ResolveModeFlags)) (supportedStencilResolveModes)
+    lift $ poke ((p `plusPtr` 704 :: Ptr Bool32)) (boolToBool32 (independentResolveNone))
+    lift $ poke ((p `plusPtr` 708 :: Ptr Bool32)) (boolToBool32 (independentResolve))
+    lift $ poke ((p `plusPtr` 712 :: Ptr Bool32)) (boolToBool32 (filterMinmaxSingleComponentFormats))
+    lift $ poke ((p `plusPtr` 716 :: Ptr Bool32)) (boolToBool32 (filterMinmaxImageComponentMapping))
+    lift $ poke ((p `plusPtr` 720 :: Ptr Word64)) (maxTimelineSemaphoreValueDifference)
+    lift $ poke ((p `plusPtr` 728 :: Ptr SampleCountFlags)) (framebufferIntegerColorSampleCounts)
+    lift $ f
+  cStructSize = 736
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DriverId)) (zero)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))) (mempty)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))) (mempty)
+    ContT $ pokeCStruct ((p `plusPtr` 532 :: Ptr ConformanceVersion)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 536 :: Ptr ShaderFloatControlsIndependence)) (zero)
+    lift $ poke ((p `plusPtr` 540 :: Ptr ShaderFloatControlsIndependence)) (zero)
+    lift $ poke ((p `plusPtr` 544 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 548 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 552 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 556 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 560 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 564 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 568 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 572 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 576 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 580 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 584 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 588 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 592 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 596 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 600 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 604 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 608 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 612 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 616 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 620 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 624 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 628 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 632 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 636 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 640 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 644 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 648 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 652 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 656 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 660 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 664 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 668 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 672 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 676 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 680 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 684 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 688 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 692 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 696 :: Ptr ResolveModeFlags)) (zero)
+    lift $ poke ((p `plusPtr` 700 :: Ptr ResolveModeFlags)) (zero)
+    lift $ poke ((p `plusPtr` 704 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 708 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 712 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 716 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 720 :: Ptr Word64)) (zero)
+    lift $ f
+
+instance FromCStruct PhysicalDeviceVulkan12Properties where
+  peekCStruct p = do
+    driverID <- peek @DriverId ((p `plusPtr` 16 :: Ptr DriverId))
+    driverName <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))))
+    driverInfo <- packCString (lowerArrayPtr ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))))
+    conformanceVersion <- peekCStruct @ConformanceVersion ((p `plusPtr` 532 :: Ptr ConformanceVersion))
+    denormBehaviorIndependence <- peek @ShaderFloatControlsIndependence ((p `plusPtr` 536 :: Ptr ShaderFloatControlsIndependence))
+    roundingModeIndependence <- peek @ShaderFloatControlsIndependence ((p `plusPtr` 540 :: Ptr ShaderFloatControlsIndependence))
+    shaderSignedZeroInfNanPreserveFloat16 <- peek @Bool32 ((p `plusPtr` 544 :: Ptr Bool32))
+    shaderSignedZeroInfNanPreserveFloat32 <- peek @Bool32 ((p `plusPtr` 548 :: Ptr Bool32))
+    shaderSignedZeroInfNanPreserveFloat64 <- peek @Bool32 ((p `plusPtr` 552 :: Ptr Bool32))
+    shaderDenormPreserveFloat16 <- peek @Bool32 ((p `plusPtr` 556 :: Ptr Bool32))
+    shaderDenormPreserveFloat32 <- peek @Bool32 ((p `plusPtr` 560 :: Ptr Bool32))
+    shaderDenormPreserveFloat64 <- peek @Bool32 ((p `plusPtr` 564 :: Ptr Bool32))
+    shaderDenormFlushToZeroFloat16 <- peek @Bool32 ((p `plusPtr` 568 :: Ptr Bool32))
+    shaderDenormFlushToZeroFloat32 <- peek @Bool32 ((p `plusPtr` 572 :: Ptr Bool32))
+    shaderDenormFlushToZeroFloat64 <- peek @Bool32 ((p `plusPtr` 576 :: Ptr Bool32))
+    shaderRoundingModeRTEFloat16 <- peek @Bool32 ((p `plusPtr` 580 :: Ptr Bool32))
+    shaderRoundingModeRTEFloat32 <- peek @Bool32 ((p `plusPtr` 584 :: Ptr Bool32))
+    shaderRoundingModeRTEFloat64 <- peek @Bool32 ((p `plusPtr` 588 :: Ptr Bool32))
+    shaderRoundingModeRTZFloat16 <- peek @Bool32 ((p `plusPtr` 592 :: Ptr Bool32))
+    shaderRoundingModeRTZFloat32 <- peek @Bool32 ((p `plusPtr` 596 :: Ptr Bool32))
+    shaderRoundingModeRTZFloat64 <- peek @Bool32 ((p `plusPtr` 600 :: Ptr Bool32))
+    maxUpdateAfterBindDescriptorsInAllPools <- peek @Word32 ((p `plusPtr` 604 :: Ptr Word32))
+    shaderUniformBufferArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 608 :: Ptr Bool32))
+    shaderSampledImageArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 612 :: Ptr Bool32))
+    shaderStorageBufferArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 616 :: Ptr Bool32))
+    shaderStorageImageArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 620 :: Ptr Bool32))
+    shaderInputAttachmentArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 624 :: Ptr Bool32))
+    robustBufferAccessUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 628 :: Ptr Bool32))
+    quadDivergentImplicitLod <- peek @Bool32 ((p `plusPtr` 632 :: Ptr Bool32))
+    maxPerStageDescriptorUpdateAfterBindSamplers <- peek @Word32 ((p `plusPtr` 636 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindUniformBuffers <- peek @Word32 ((p `plusPtr` 640 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindStorageBuffers <- peek @Word32 ((p `plusPtr` 644 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindSampledImages <- peek @Word32 ((p `plusPtr` 648 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindStorageImages <- peek @Word32 ((p `plusPtr` 652 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindInputAttachments <- peek @Word32 ((p `plusPtr` 656 :: Ptr Word32))
+    maxPerStageUpdateAfterBindResources <- peek @Word32 ((p `plusPtr` 660 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindSamplers <- peek @Word32 ((p `plusPtr` 664 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindUniformBuffers <- peek @Word32 ((p `plusPtr` 668 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic <- peek @Word32 ((p `plusPtr` 672 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindStorageBuffers <- peek @Word32 ((p `plusPtr` 676 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic <- peek @Word32 ((p `plusPtr` 680 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindSampledImages <- peek @Word32 ((p `plusPtr` 684 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindStorageImages <- peek @Word32 ((p `plusPtr` 688 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindInputAttachments <- peek @Word32 ((p `plusPtr` 692 :: Ptr Word32))
+    supportedDepthResolveModes <- peek @ResolveModeFlags ((p `plusPtr` 696 :: Ptr ResolveModeFlags))
+    supportedStencilResolveModes <- peek @ResolveModeFlags ((p `plusPtr` 700 :: Ptr ResolveModeFlags))
+    independentResolveNone <- peek @Bool32 ((p `plusPtr` 704 :: Ptr Bool32))
+    independentResolve <- peek @Bool32 ((p `plusPtr` 708 :: Ptr Bool32))
+    filterMinmaxSingleComponentFormats <- peek @Bool32 ((p `plusPtr` 712 :: Ptr Bool32))
+    filterMinmaxImageComponentMapping <- peek @Bool32 ((p `plusPtr` 716 :: Ptr Bool32))
+    maxTimelineSemaphoreValueDifference <- peek @Word64 ((p `plusPtr` 720 :: Ptr Word64))
+    framebufferIntegerColorSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 728 :: Ptr SampleCountFlags))
+    pure $ PhysicalDeviceVulkan12Properties
+             driverID driverName driverInfo conformanceVersion denormBehaviorIndependence roundingModeIndependence (bool32ToBool shaderSignedZeroInfNanPreserveFloat16) (bool32ToBool shaderSignedZeroInfNanPreserveFloat32) (bool32ToBool shaderSignedZeroInfNanPreserveFloat64) (bool32ToBool shaderDenormPreserveFloat16) (bool32ToBool shaderDenormPreserveFloat32) (bool32ToBool shaderDenormPreserveFloat64) (bool32ToBool shaderDenormFlushToZeroFloat16) (bool32ToBool shaderDenormFlushToZeroFloat32) (bool32ToBool shaderDenormFlushToZeroFloat64) (bool32ToBool shaderRoundingModeRTEFloat16) (bool32ToBool shaderRoundingModeRTEFloat32) (bool32ToBool shaderRoundingModeRTEFloat64) (bool32ToBool shaderRoundingModeRTZFloat16) (bool32ToBool shaderRoundingModeRTZFloat32) (bool32ToBool shaderRoundingModeRTZFloat64) maxUpdateAfterBindDescriptorsInAllPools (bool32ToBool shaderUniformBufferArrayNonUniformIndexingNative) (bool32ToBool shaderSampledImageArrayNonUniformIndexingNative) (bool32ToBool shaderStorageBufferArrayNonUniformIndexingNative) (bool32ToBool shaderStorageImageArrayNonUniformIndexingNative) (bool32ToBool shaderInputAttachmentArrayNonUniformIndexingNative) (bool32ToBool robustBufferAccessUpdateAfterBind) (bool32ToBool quadDivergentImplicitLod) maxPerStageDescriptorUpdateAfterBindSamplers maxPerStageDescriptorUpdateAfterBindUniformBuffers maxPerStageDescriptorUpdateAfterBindStorageBuffers maxPerStageDescriptorUpdateAfterBindSampledImages maxPerStageDescriptorUpdateAfterBindStorageImages maxPerStageDescriptorUpdateAfterBindInputAttachments maxPerStageUpdateAfterBindResources maxDescriptorSetUpdateAfterBindSamplers maxDescriptorSetUpdateAfterBindUniformBuffers maxDescriptorSetUpdateAfterBindUniformBuffersDynamic maxDescriptorSetUpdateAfterBindStorageBuffers maxDescriptorSetUpdateAfterBindStorageBuffersDynamic maxDescriptorSetUpdateAfterBindSampledImages maxDescriptorSetUpdateAfterBindStorageImages maxDescriptorSetUpdateAfterBindInputAttachments supportedDepthResolveModes supportedStencilResolveModes (bool32ToBool independentResolveNone) (bool32ToBool independentResolve) (bool32ToBool filterMinmaxSingleComponentFormats) (bool32ToBool filterMinmaxImageComponentMapping) maxTimelineSemaphoreValueDifference framebufferIntegerColorSampleCounts
+
+instance Zero PhysicalDeviceVulkan12Properties where
+  zero = PhysicalDeviceVulkan12Properties
+           zero
+           mempty
+           mempty
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core12.hs-boot b/src/Vulkan/Core12.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12.hs-boot
@@ -0,0 +1,41 @@
+{-# language CPP #-}
+module Vulkan.Core12  ( PhysicalDeviceVulkan11Features
+                      , PhysicalDeviceVulkan11Properties
+                      , PhysicalDeviceVulkan12Features
+                      , PhysicalDeviceVulkan12Properties
+                      ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceVulkan11Features
+
+instance ToCStruct PhysicalDeviceVulkan11Features
+instance Show PhysicalDeviceVulkan11Features
+
+instance FromCStruct PhysicalDeviceVulkan11Features
+
+
+data PhysicalDeviceVulkan11Properties
+
+instance ToCStruct PhysicalDeviceVulkan11Properties
+instance Show PhysicalDeviceVulkan11Properties
+
+instance FromCStruct PhysicalDeviceVulkan11Properties
+
+
+data PhysicalDeviceVulkan12Features
+
+instance ToCStruct PhysicalDeviceVulkan12Features
+instance Show PhysicalDeviceVulkan12Features
+
+instance FromCStruct PhysicalDeviceVulkan12Features
+
+
+data PhysicalDeviceVulkan12Properties
+
+instance ToCStruct PhysicalDeviceVulkan12Properties
+instance Show PhysicalDeviceVulkan12Properties
+
+instance FromCStruct PhysicalDeviceVulkan12Properties
+
diff --git a/src/Vulkan/Core12/Enums.hs b/src/Vulkan/Core12/Enums.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums.hs
@@ -0,0 +1,17 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums  ( module Vulkan.Core12.Enums.DescriptorBindingFlagBits
+                            , module Vulkan.Core12.Enums.DriverId
+                            , module Vulkan.Core12.Enums.ResolveModeFlagBits
+                            , module Vulkan.Core12.Enums.SamplerReductionMode
+                            , module Vulkan.Core12.Enums.SemaphoreType
+                            , module Vulkan.Core12.Enums.SemaphoreWaitFlagBits
+                            , module Vulkan.Core12.Enums.ShaderFloatControlsIndependence
+                            ) where
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits
+import Vulkan.Core12.Enums.DriverId
+import Vulkan.Core12.Enums.ResolveModeFlagBits
+import Vulkan.Core12.Enums.SamplerReductionMode
+import Vulkan.Core12.Enums.SemaphoreType
+import Vulkan.Core12.Enums.SemaphoreWaitFlagBits
+import Vulkan.Core12.Enums.ShaderFloatControlsIndependence
+
diff --git a/src/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs b/src/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs
@@ -0,0 +1,115 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.DescriptorBindingFlagBits  ( DescriptorBindingFlagBits( DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+                                                                                 , DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT
+                                                                                 , DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT
+                                                                                 , DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
+                                                                                 , ..
+                                                                                 )
+                                                      , DescriptorBindingFlags
+                                                      ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkDescriptorBindingFlagBits - Bitmask specifying descriptor set layout
+-- binding properties
+--
+-- = Description
+--
+-- Note
+--
+-- Note that while 'DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' and
+-- 'DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT' both involve
+-- updates to descriptor sets after they are bound,
+-- 'DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT' is a weaker
+-- requirement since it is only about descriptors that are not used,
+-- whereas 'DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' requires the
+-- implementation to observe updates to descriptors that are used.
+--
+-- = See Also
+--
+-- 'DescriptorBindingFlags'
+newtype DescriptorBindingFlagBits = DescriptorBindingFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' 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
+-- 'Vulkan.Extensions.VK_KHR_descriptor_update_template.updateDescriptorSetWithTemplateKHR'
+-- and 'Vulkan.Core10.DescriptorSet.updateDescriptorSets'. Multiple
+-- descriptors with this flag set /can/ be updated concurrently in
+-- different threads, though the same descriptor /must/ not be updated
+-- concurrently by two threads. Descriptors with this flag set /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.
+pattern DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = DescriptorBindingFlagBits 0x00000001
+-- | 'DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT' 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
+-- 'DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT' is also set, then descriptors
+-- /can/ be updated as long as they are not dynamically used by any shader
+-- invocations. If 'DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT' is not set,
+-- then descriptors /can/ be updated as long as they are not statically
+-- used by any shader invocations.
+pattern DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = DescriptorBindingFlagBits 0x00000002
+-- | 'DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT' 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.
+pattern DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = DescriptorBindingFlagBits 0x00000004
+-- | 'DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT' 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
+-- , except for descriptor bindings with a descriptor type of
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+-- where @descriptorCount@ specifies the upper bound on the byte size of
+-- the binding, thus it counts against the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxInlineUniformBlockSize maxInlineUniformBlockSize>
+-- limit instead. .
+pattern DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = DescriptorBindingFlagBits 0x00000008
+
+type DescriptorBindingFlags = DescriptorBindingFlagBits
+
+instance Show DescriptorBindingFlagBits where
+  showsPrec p = \case
+    DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT -> showString "DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT"
+    DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT -> showString "DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT"
+    DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT -> showString "DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT"
+    DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT -> showString "DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT"
+    DescriptorBindingFlagBits x -> showParen (p >= 11) (showString "DescriptorBindingFlagBits 0x" . showHex x)
+
+instance Read DescriptorBindingFlagBits where
+  readPrec = parens (choose [("DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", pure DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT)
+                            , ("DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT", pure DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT)
+                            , ("DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT", pure DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT)
+                            , ("DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT", pure DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DescriptorBindingFlagBits")
+                       v <- step readPrec
+                       pure (DescriptorBindingFlagBits v)))
+
diff --git a/src/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs-boot b/src/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/DescriptorBindingFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.DescriptorBindingFlagBits  ( DescriptorBindingFlagBits
+                                                      , DescriptorBindingFlags
+                                                      ) where
+
+
+
+data DescriptorBindingFlagBits
+
+type DescriptorBindingFlags = DescriptorBindingFlagBits
+
diff --git a/src/Vulkan/Core12/Enums/DriverId.hs b/src/Vulkan/Core12/Enums/DriverId.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/DriverId.hs
@@ -0,0 +1,127 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.DriverId  (DriverId( DRIVER_ID_AMD_PROPRIETARY
+                                              , DRIVER_ID_AMD_OPEN_SOURCE
+                                              , DRIVER_ID_MESA_RADV
+                                              , DRIVER_ID_NVIDIA_PROPRIETARY
+                                              , DRIVER_ID_INTEL_PROPRIETARY_WINDOWS
+                                              , DRIVER_ID_INTEL_OPEN_SOURCE_MESA
+                                              , DRIVER_ID_IMAGINATION_PROPRIETARY
+                                              , DRIVER_ID_QUALCOMM_PROPRIETARY
+                                              , DRIVER_ID_ARM_PROPRIETARY
+                                              , DRIVER_ID_GOOGLE_SWIFTSHADER
+                                              , DRIVER_ID_GGP_PROPRIETARY
+                                              , DRIVER_ID_BROADCOM_PROPRIETARY
+                                              , ..
+                                              )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkDriverId - Khronos driver IDs
+--
+-- = Description
+--
+-- Note
+--
+-- Khronos driver IDs may be allocated by vendors at any time. There may be
+-- multiple driver IDs for the same vendor, representing different drivers
+-- (for e.g. different platforms, proprietary or open source, etc.). Only
+-- the latest canonical versions of this Specification, of the
+-- corresponding @vk.xml@ API Registry, and of the corresponding
+-- @vulkan_core.h@ header file /must/ contain all reserved Khronos driver
+-- IDs.
+--
+-- Only driver IDs registered with Khronos are given symbolic names. There
+-- /may/ be unregistered driver IDs returned.
+--
+-- = See Also
+--
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan12Properties'
+newtype DriverId = DriverId Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+-- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
+
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_AMD_PROPRIETARY"
+pattern DRIVER_ID_AMD_PROPRIETARY = DriverId 1
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_AMD_OPEN_SOURCE"
+pattern DRIVER_ID_AMD_OPEN_SOURCE = DriverId 2
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_MESA_RADV"
+pattern DRIVER_ID_MESA_RADV = DriverId 3
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_NVIDIA_PROPRIETARY"
+pattern DRIVER_ID_NVIDIA_PROPRIETARY = DriverId 4
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS"
+pattern DRIVER_ID_INTEL_PROPRIETARY_WINDOWS = DriverId 5
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA"
+pattern DRIVER_ID_INTEL_OPEN_SOURCE_MESA = DriverId 6
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_IMAGINATION_PROPRIETARY"
+pattern DRIVER_ID_IMAGINATION_PROPRIETARY = DriverId 7
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_QUALCOMM_PROPRIETARY"
+pattern DRIVER_ID_QUALCOMM_PROPRIETARY = DriverId 8
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_ARM_PROPRIETARY"
+pattern DRIVER_ID_ARM_PROPRIETARY = DriverId 9
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_GOOGLE_SWIFTSHADER"
+pattern DRIVER_ID_GOOGLE_SWIFTSHADER = DriverId 10
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_GGP_PROPRIETARY"
+pattern DRIVER_ID_GGP_PROPRIETARY = DriverId 11
+-- No documentation found for Nested "VkDriverId" "VK_DRIVER_ID_BROADCOM_PROPRIETARY"
+pattern DRIVER_ID_BROADCOM_PROPRIETARY = DriverId 12
+{-# complete DRIVER_ID_AMD_PROPRIETARY,
+             DRIVER_ID_AMD_OPEN_SOURCE,
+             DRIVER_ID_MESA_RADV,
+             DRIVER_ID_NVIDIA_PROPRIETARY,
+             DRIVER_ID_INTEL_PROPRIETARY_WINDOWS,
+             DRIVER_ID_INTEL_OPEN_SOURCE_MESA,
+             DRIVER_ID_IMAGINATION_PROPRIETARY,
+             DRIVER_ID_QUALCOMM_PROPRIETARY,
+             DRIVER_ID_ARM_PROPRIETARY,
+             DRIVER_ID_GOOGLE_SWIFTSHADER,
+             DRIVER_ID_GGP_PROPRIETARY,
+             DRIVER_ID_BROADCOM_PROPRIETARY :: DriverId #-}
+
+instance Show DriverId where
+  showsPrec p = \case
+    DRIVER_ID_AMD_PROPRIETARY -> showString "DRIVER_ID_AMD_PROPRIETARY"
+    DRIVER_ID_AMD_OPEN_SOURCE -> showString "DRIVER_ID_AMD_OPEN_SOURCE"
+    DRIVER_ID_MESA_RADV -> showString "DRIVER_ID_MESA_RADV"
+    DRIVER_ID_NVIDIA_PROPRIETARY -> showString "DRIVER_ID_NVIDIA_PROPRIETARY"
+    DRIVER_ID_INTEL_PROPRIETARY_WINDOWS -> showString "DRIVER_ID_INTEL_PROPRIETARY_WINDOWS"
+    DRIVER_ID_INTEL_OPEN_SOURCE_MESA -> showString "DRIVER_ID_INTEL_OPEN_SOURCE_MESA"
+    DRIVER_ID_IMAGINATION_PROPRIETARY -> showString "DRIVER_ID_IMAGINATION_PROPRIETARY"
+    DRIVER_ID_QUALCOMM_PROPRIETARY -> showString "DRIVER_ID_QUALCOMM_PROPRIETARY"
+    DRIVER_ID_ARM_PROPRIETARY -> showString "DRIVER_ID_ARM_PROPRIETARY"
+    DRIVER_ID_GOOGLE_SWIFTSHADER -> showString "DRIVER_ID_GOOGLE_SWIFTSHADER"
+    DRIVER_ID_GGP_PROPRIETARY -> showString "DRIVER_ID_GGP_PROPRIETARY"
+    DRIVER_ID_BROADCOM_PROPRIETARY -> showString "DRIVER_ID_BROADCOM_PROPRIETARY"
+    DriverId x -> showParen (p >= 11) (showString "DriverId " . showsPrec 11 x)
+
+instance Read DriverId where
+  readPrec = parens (choose [("DRIVER_ID_AMD_PROPRIETARY", pure DRIVER_ID_AMD_PROPRIETARY)
+                            , ("DRIVER_ID_AMD_OPEN_SOURCE", pure DRIVER_ID_AMD_OPEN_SOURCE)
+                            , ("DRIVER_ID_MESA_RADV", pure DRIVER_ID_MESA_RADV)
+                            , ("DRIVER_ID_NVIDIA_PROPRIETARY", pure DRIVER_ID_NVIDIA_PROPRIETARY)
+                            , ("DRIVER_ID_INTEL_PROPRIETARY_WINDOWS", pure DRIVER_ID_INTEL_PROPRIETARY_WINDOWS)
+                            , ("DRIVER_ID_INTEL_OPEN_SOURCE_MESA", pure DRIVER_ID_INTEL_OPEN_SOURCE_MESA)
+                            , ("DRIVER_ID_IMAGINATION_PROPRIETARY", pure DRIVER_ID_IMAGINATION_PROPRIETARY)
+                            , ("DRIVER_ID_QUALCOMM_PROPRIETARY", pure DRIVER_ID_QUALCOMM_PROPRIETARY)
+                            , ("DRIVER_ID_ARM_PROPRIETARY", pure DRIVER_ID_ARM_PROPRIETARY)
+                            , ("DRIVER_ID_GOOGLE_SWIFTSHADER", pure DRIVER_ID_GOOGLE_SWIFTSHADER)
+                            , ("DRIVER_ID_GGP_PROPRIETARY", pure DRIVER_ID_GGP_PROPRIETARY)
+                            , ("DRIVER_ID_BROADCOM_PROPRIETARY", pure DRIVER_ID_BROADCOM_PROPRIETARY)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DriverId")
+                       v <- step readPrec
+                       pure (DriverId v)))
+
diff --git a/src/Vulkan/Core12/Enums/DriverId.hs-boot b/src/Vulkan/Core12/Enums/DriverId.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/DriverId.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.DriverId  (DriverId) where
+
+
+
+data DriverId
+
diff --git a/src/Vulkan/Core12/Enums/ResolveModeFlagBits.hs b/src/Vulkan/Core12/Enums/ResolveModeFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/ResolveModeFlagBits.hs
@@ -0,0 +1,74 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.ResolveModeFlagBits  ( ResolveModeFlagBits( RESOLVE_MODE_NONE
+                                                                     , RESOLVE_MODE_SAMPLE_ZERO_BIT
+                                                                     , RESOLVE_MODE_AVERAGE_BIT
+                                                                     , RESOLVE_MODE_MIN_BIT
+                                                                     , RESOLVE_MODE_MAX_BIT
+                                                                     , ..
+                                                                     )
+                                                , ResolveModeFlags
+                                                ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkResolveModeFlagBits - Bitmask indicating supported depth and stencil
+-- resolve modes
+--
+-- = See Also
+--
+-- 'ResolveModeFlags',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'
+newtype ResolveModeFlagBits = ResolveModeFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'RESOLVE_MODE_NONE' indicates that no resolve operation is done.
+pattern RESOLVE_MODE_NONE = ResolveModeFlagBits 0x00000000
+-- | 'RESOLVE_MODE_SAMPLE_ZERO_BIT' indicates that result of the resolve
+-- operation is equal to the value of sample 0.
+pattern RESOLVE_MODE_SAMPLE_ZERO_BIT = ResolveModeFlagBits 0x00000001
+-- | 'RESOLVE_MODE_AVERAGE_BIT' indicates that result of the resolve
+-- operation is the average of the sample values.
+pattern RESOLVE_MODE_AVERAGE_BIT = ResolveModeFlagBits 0x00000002
+-- | 'RESOLVE_MODE_MIN_BIT' indicates that result of the resolve operation is
+-- the minimum of the sample values.
+pattern RESOLVE_MODE_MIN_BIT = ResolveModeFlagBits 0x00000004
+-- | 'RESOLVE_MODE_MAX_BIT' indicates that result of the resolve operation is
+-- the maximum of the sample values.
+pattern RESOLVE_MODE_MAX_BIT = ResolveModeFlagBits 0x00000008
+
+type ResolveModeFlags = ResolveModeFlagBits
+
+instance Show ResolveModeFlagBits where
+  showsPrec p = \case
+    RESOLVE_MODE_NONE -> showString "RESOLVE_MODE_NONE"
+    RESOLVE_MODE_SAMPLE_ZERO_BIT -> showString "RESOLVE_MODE_SAMPLE_ZERO_BIT"
+    RESOLVE_MODE_AVERAGE_BIT -> showString "RESOLVE_MODE_AVERAGE_BIT"
+    RESOLVE_MODE_MIN_BIT -> showString "RESOLVE_MODE_MIN_BIT"
+    RESOLVE_MODE_MAX_BIT -> showString "RESOLVE_MODE_MAX_BIT"
+    ResolveModeFlagBits x -> showParen (p >= 11) (showString "ResolveModeFlagBits 0x" . showHex x)
+
+instance Read ResolveModeFlagBits where
+  readPrec = parens (choose [("RESOLVE_MODE_NONE", pure RESOLVE_MODE_NONE)
+                            , ("RESOLVE_MODE_SAMPLE_ZERO_BIT", pure RESOLVE_MODE_SAMPLE_ZERO_BIT)
+                            , ("RESOLVE_MODE_AVERAGE_BIT", pure RESOLVE_MODE_AVERAGE_BIT)
+                            , ("RESOLVE_MODE_MIN_BIT", pure RESOLVE_MODE_MIN_BIT)
+                            , ("RESOLVE_MODE_MAX_BIT", pure RESOLVE_MODE_MAX_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ResolveModeFlagBits")
+                       v <- step readPrec
+                       pure (ResolveModeFlagBits v)))
+
diff --git a/src/Vulkan/Core12/Enums/ResolveModeFlagBits.hs-boot b/src/Vulkan/Core12/Enums/ResolveModeFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/ResolveModeFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.ResolveModeFlagBits  ( ResolveModeFlagBits
+                                                , ResolveModeFlags
+                                                ) where
+
+
+
+data ResolveModeFlagBits
+
+type ResolveModeFlags = ResolveModeFlagBits
+
diff --git a/src/Vulkan/Core12/Enums/SamplerReductionMode.hs b/src/Vulkan/Core12/Enums/SamplerReductionMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/SamplerReductionMode.hs
@@ -0,0 +1,63 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.SamplerReductionMode  (SamplerReductionMode( SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
+                                                                      , SAMPLER_REDUCTION_MODE_MIN
+                                                                      , SAMPLER_REDUCTION_MODE_MAX
+                                                                      , ..
+                                                                      )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkSamplerReductionMode - Specify reduction mode for texture filtering
+--
+-- = See Also
+--
+-- 'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'
+newtype SamplerReductionMode = SamplerReductionMode Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE' specifies that texel values
+-- are combined by computing a weighted average of values in the footprint,
+-- using weights as specified in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-unnormalized-to-integer the image operations chapter>.
+pattern SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE = SamplerReductionMode 0
+-- | 'SAMPLER_REDUCTION_MODE_MIN' specifies that texel values are combined by
+-- taking the component-wise minimum of values in the footprint with
+-- non-zero weights.
+pattern SAMPLER_REDUCTION_MODE_MIN = SamplerReductionMode 1
+-- | 'SAMPLER_REDUCTION_MODE_MAX' specifies that texel values are combined by
+-- taking the component-wise maximum of values in the footprint with
+-- non-zero weights.
+pattern SAMPLER_REDUCTION_MODE_MAX = SamplerReductionMode 2
+{-# complete SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE,
+             SAMPLER_REDUCTION_MODE_MIN,
+             SAMPLER_REDUCTION_MODE_MAX :: SamplerReductionMode #-}
+
+instance Show SamplerReductionMode where
+  showsPrec p = \case
+    SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE -> showString "SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE"
+    SAMPLER_REDUCTION_MODE_MIN -> showString "SAMPLER_REDUCTION_MODE_MIN"
+    SAMPLER_REDUCTION_MODE_MAX -> showString "SAMPLER_REDUCTION_MODE_MAX"
+    SamplerReductionMode x -> showParen (p >= 11) (showString "SamplerReductionMode " . showsPrec 11 x)
+
+instance Read SamplerReductionMode where
+  readPrec = parens (choose [("SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE", pure SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE)
+                            , ("SAMPLER_REDUCTION_MODE_MIN", pure SAMPLER_REDUCTION_MODE_MIN)
+                            , ("SAMPLER_REDUCTION_MODE_MAX", pure SAMPLER_REDUCTION_MODE_MAX)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SamplerReductionMode")
+                       v <- step readPrec
+                       pure (SamplerReductionMode v)))
+
diff --git a/src/Vulkan/Core12/Enums/SamplerReductionMode.hs-boot b/src/Vulkan/Core12/Enums/SamplerReductionMode.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/SamplerReductionMode.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.SamplerReductionMode  (SamplerReductionMode) where
+
+
+
+data SamplerReductionMode
+
diff --git a/src/Vulkan/Core12/Enums/SemaphoreType.hs b/src/Vulkan/Core12/Enums/SemaphoreType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/SemaphoreType.hs
@@ -0,0 +1,57 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.SemaphoreType  (SemaphoreType( SEMAPHORE_TYPE_BINARY
+                                                        , SEMAPHORE_TYPE_TIMELINE
+                                                        , ..
+                                                        )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkSemaphoreType - Sepcifies the type of a semaphore object
+--
+-- = See Also
+--
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'
+newtype SemaphoreType = SemaphoreType Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'SEMAPHORE_TYPE_BINARY' specifies a /binary semaphore/ type that has a
+-- boolean payload indicating whether the semaphore is currently signaled
+-- or unsignaled. When created, the semaphore is in the unsignaled state.
+pattern SEMAPHORE_TYPE_BINARY = SemaphoreType 0
+-- | 'SEMAPHORE_TYPE_TIMELINE' specifies a /timeline semaphore/ type that has
+-- a monotonically increasing 64-bit unsigned integer payload indicating
+-- whether the semaphore is signaled with respect to a particular reference
+-- value. When created, the semaphore payload has the value given by the
+-- @initialValue@ field of
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'.
+pattern SEMAPHORE_TYPE_TIMELINE = SemaphoreType 1
+{-# complete SEMAPHORE_TYPE_BINARY,
+             SEMAPHORE_TYPE_TIMELINE :: SemaphoreType #-}
+
+instance Show SemaphoreType where
+  showsPrec p = \case
+    SEMAPHORE_TYPE_BINARY -> showString "SEMAPHORE_TYPE_BINARY"
+    SEMAPHORE_TYPE_TIMELINE -> showString "SEMAPHORE_TYPE_TIMELINE"
+    SemaphoreType x -> showParen (p >= 11) (showString "SemaphoreType " . showsPrec 11 x)
+
+instance Read SemaphoreType where
+  readPrec = parens (choose [("SEMAPHORE_TYPE_BINARY", pure SEMAPHORE_TYPE_BINARY)
+                            , ("SEMAPHORE_TYPE_TIMELINE", pure SEMAPHORE_TYPE_TIMELINE)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SemaphoreType")
+                       v <- step readPrec
+                       pure (SemaphoreType v)))
+
diff --git a/src/Vulkan/Core12/Enums/SemaphoreType.hs-boot b/src/Vulkan/Core12/Enums/SemaphoreType.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/SemaphoreType.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.SemaphoreType  (SemaphoreType) where
+
+
+
+data SemaphoreType
+
diff --git a/src/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs b/src/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs
@@ -0,0 +1,58 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.SemaphoreWaitFlagBits  ( SemaphoreWaitFlagBits( SEMAPHORE_WAIT_ANY_BIT
+                                                                         , ..
+                                                                         )
+                                                  , SemaphoreWaitFlags
+                                                  ) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Foreign.Storable (Storable)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Zero (Zero)
+-- | VkSemaphoreWaitFlagBits - Bitmask specifying additional parameters of a
+-- semaphore wait operation
+--
+-- = See Also
+--
+-- 'SemaphoreWaitFlags'
+newtype SemaphoreWaitFlagBits = SemaphoreWaitFlagBits Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SEMAPHORE_WAIT_ANY_BIT' specifies that the semaphore wait condition is
+-- that at least one of the semaphores in
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo'::@pSemaphores@
+-- has reached the value specified by the corresponding element of
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo'::@pValues@.
+-- If 'SEMAPHORE_WAIT_ANY_BIT' is not set, the semaphore wait condition is
+-- that all of the semaphores in
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo'::@pSemaphores@
+-- have reached the value specified by the corresponding element of
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreWaitInfo'::@pValues@.
+pattern SEMAPHORE_WAIT_ANY_BIT = SemaphoreWaitFlagBits 0x00000001
+
+type SemaphoreWaitFlags = SemaphoreWaitFlagBits
+
+instance Show SemaphoreWaitFlagBits where
+  showsPrec p = \case
+    SEMAPHORE_WAIT_ANY_BIT -> showString "SEMAPHORE_WAIT_ANY_BIT"
+    SemaphoreWaitFlagBits x -> showParen (p >= 11) (showString "SemaphoreWaitFlagBits 0x" . showHex x)
+
+instance Read SemaphoreWaitFlagBits where
+  readPrec = parens (choose [("SEMAPHORE_WAIT_ANY_BIT", pure SEMAPHORE_WAIT_ANY_BIT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SemaphoreWaitFlagBits")
+                       v <- step readPrec
+                       pure (SemaphoreWaitFlagBits v)))
+
diff --git a/src/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs-boot b/src/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/SemaphoreWaitFlagBits.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.SemaphoreWaitFlagBits  ( SemaphoreWaitFlagBits
+                                                  , SemaphoreWaitFlags
+                                                  ) where
+
+
+
+data SemaphoreWaitFlagBits
+
+type SemaphoreWaitFlags = SemaphoreWaitFlagBits
+
diff --git a/src/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs b/src/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs
@@ -0,0 +1,62 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.ShaderFloatControlsIndependence  (ShaderFloatControlsIndependence( SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY
+                                                                                            , SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
+                                                                                            , SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE
+                                                                                            , ..
+                                                                                            )) where
+
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Foreign.Storable (Storable)
+import Data.Int (Int32)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Vulkan.Zero (Zero)
+-- | VkShaderFloatControlsIndependence - Enum specifying whether, and how,
+-- shader float controls can be set separately
+--
+-- = See Also
+--
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan12Properties'
+newtype ShaderFloatControlsIndependence = ShaderFloatControlsIndependence Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY' specifies that shader
+-- float controls for 32-bit floating point /can/ be set independently;
+-- other bit widths /must/ be set identically to each other.
+pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = ShaderFloatControlsIndependence 0
+-- | 'SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL' specifies that shader float
+-- controls for all bit widths /can/ be set independently.
+pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = ShaderFloatControlsIndependence 1
+-- | 'SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE' specifies that shader float
+-- controls for all bit widths /must/ be set identically.
+pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = ShaderFloatControlsIndependence 2
+{-# complete SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY,
+             SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL,
+             SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE :: ShaderFloatControlsIndependence #-}
+
+instance Show ShaderFloatControlsIndependence where
+  showsPrec p = \case
+    SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY -> showString "SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY"
+    SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL -> showString "SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL"
+    SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE -> showString "SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE"
+    ShaderFloatControlsIndependence x -> showParen (p >= 11) (showString "ShaderFloatControlsIndependence " . showsPrec 11 x)
+
+instance Read ShaderFloatControlsIndependence where
+  readPrec = parens (choose [("SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY", pure SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY)
+                            , ("SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL", pure SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL)
+                            , ("SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE", pure SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ShaderFloatControlsIndependence")
+                       v <- step readPrec
+                       pure (ShaderFloatControlsIndependence v)))
+
diff --git a/src/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs-boot b/src/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Enums/ShaderFloatControlsIndependence.hs-boot
@@ -0,0 +1,7 @@
+{-# language CPP #-}
+module Vulkan.Core12.Enums.ShaderFloatControlsIndependence  (ShaderFloatControlsIndependence) where
+
+
+
+data ShaderFloatControlsIndependence
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs b/src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs
@@ -0,0 +1,997 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing  ( PhysicalDeviceDescriptorIndexingFeatures(..)
+                                                               , PhysicalDeviceDescriptorIndexingProperties(..)
+                                                               , DescriptorSetLayoutBindingFlagsCreateInfo(..)
+                                                               , DescriptorSetVariableDescriptorCountAllocateInfo(..)
+                                                               , DescriptorSetVariableDescriptorCountLayoutSupport(..)
+                                                               , StructureType(..)
+                                                               , Result(..)
+                                                               , DescriptorPoolCreateFlagBits(..)
+                                                               , DescriptorPoolCreateFlags
+                                                               , DescriptorSetLayoutCreateFlagBits(..)
+                                                               , DescriptorSetLayoutCreateFlags
+                                                               , DescriptorBindingFlagBits(..)
+                                                               , DescriptorBindingFlags
+                                                               ) where
+
+import Control.Monad (unless)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES))
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits(..))
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
+import Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits (DescriptorPoolCreateFlagBits(..))
+import Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits (DescriptorPoolCreateFlags)
+import Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits (DescriptorSetLayoutCreateFlagBits(..))
+import Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits (DescriptorSetLayoutCreateFlags)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceDescriptorIndexingFeatures - Structure describing
+-- descriptor indexing features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceDescriptorIndexingFeatures' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceDescriptorIndexingFeatures' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceDescriptorIndexingFeatures' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDescriptorIndexingFeatures = PhysicalDeviceDescriptorIndexingFeatures
+  { -- | @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
+    -- 'Vulkan.Core10.Enums.DescriptorType.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 @InputAttachmentArrayDynamicIndexing@ capability.
+    shaderInputAttachmentArrayDynamicIndexing :: Bool
+  , -- | @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
+    -- 'Vulkan.Core10.Enums.DescriptorType.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 @UniformTexelBufferArrayDynamicIndexing@ capability.
+    shaderUniformTexelBufferArrayDynamicIndexing :: Bool
+  , -- | @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
+    -- 'Vulkan.Core10.Enums.DescriptorType.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 @StorageTexelBufferArrayDynamicIndexing@ capability.
+    shaderStorageTexelBufferArrayDynamicIndexing :: Bool
+  , -- | @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
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.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 @UniformBufferArrayNonUniformIndexing@ capability.
+    shaderUniformBufferArrayNonUniformIndexing :: Bool
+  , -- | @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
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+    -- or 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
+    -- /must/ not be indexed by non-uniform integer expressions when aggregated
+    -- into arrays in shader code. This also indicates whether shader modules
+    -- /can/ declare the @SampledImageArrayNonUniformIndexing@ capability.
+    shaderSampledImageArrayNonUniformIndexing :: Bool
+  , -- | @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
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or
+    -- 'Vulkan.Core10.Enums.DescriptorType.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 @StorageBufferArrayNonUniformIndexing@ capability.
+    shaderStorageBufferArrayNonUniformIndexing :: Bool
+  , -- | @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
+    -- 'Vulkan.Core10.Enums.DescriptorType.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 @StorageImageArrayNonUniformIndexing@ capability.
+    shaderStorageImageArrayNonUniformIndexing :: Bool
+  , -- | @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
+    -- 'Vulkan.Core10.Enums.DescriptorType.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 @InputAttachmentArrayNonUniformIndexing@ capability.
+    shaderInputAttachmentArrayNonUniformIndexing :: Bool
+  , -- | @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
+    -- 'Vulkan.Core10.Enums.DescriptorType.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 @UniformTexelBufferArrayNonUniformIndexing@
+    -- capability.
+    shaderUniformTexelBufferArrayNonUniformIndexing :: Bool
+  , -- | @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
+    -- 'Vulkan.Core10.Enums.DescriptorType.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 @StorageTexelBufferArrayNonUniformIndexing@
+    -- capability.
+    shaderStorageTexelBufferArrayNonUniformIndexing :: Bool
+  , -- | @descriptorBindingUniformBufferUpdateAfterBind@ indicates whether the
+    -- implementation supports updating uniform buffer descriptors after a set
+    -- is bound. If this feature is not enabled,
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+    -- /must/ not be used with
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'.
+    descriptorBindingUniformBufferUpdateAfterBind :: Bool
+  , -- | @descriptorBindingSampledImageUpdateAfterBind@ indicates whether the
+    -- implementation supports updating sampled image descriptors after a set
+    -- is bound. If this feature is not enabled,
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+    -- /must/ not be used with
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+    -- or 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'.
+    descriptorBindingSampledImageUpdateAfterBind :: Bool
+  , -- | @descriptorBindingStorageImageUpdateAfterBind@ indicates whether the
+    -- implementation supports updating storage image descriptors after a set
+    -- is bound. If this feature is not enabled,
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+    -- /must/ not be used with
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'.
+    descriptorBindingStorageImageUpdateAfterBind :: Bool
+  , -- | @descriptorBindingStorageBufferUpdateAfterBind@ indicates whether the
+    -- implementation supports updating storage buffer descriptors after a set
+    -- is bound. If this feature is not enabled,
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+    -- /must/ not be used with
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'.
+    descriptorBindingStorageBufferUpdateAfterBind :: Bool
+  , -- | @descriptorBindingUniformTexelBufferUpdateAfterBind@ indicates whether
+    -- the implementation supports updating uniform texel buffer descriptors
+    -- after a set is bound. If this feature is not enabled,
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+    -- /must/ not be used with
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'.
+    descriptorBindingUniformTexelBufferUpdateAfterBind :: Bool
+  , -- | @descriptorBindingStorageTexelBufferUpdateAfterBind@ indicates whether
+    -- the implementation supports updating storage texel buffer descriptors
+    -- after a set is bound. If this feature is not enabled,
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+    -- /must/ not be used with
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'.
+    descriptorBindingStorageTexelBufferUpdateAfterBind :: Bool
+  , -- | @descriptorBindingUpdateUnusedWhilePending@ indicates whether the
+    -- implementation supports updating descriptors while the set is in use. If
+    -- this feature is not enabled,
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'
+    -- /must/ not be used.
+    descriptorBindingUpdateUnusedWhilePending :: Bool
+  , -- | @descriptorBindingPartiallyBound@ indicates whether the implementation
+    -- supports statically using a descriptor set binding in which some
+    -- descriptors are not valid. If this feature is not enabled,
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'
+    -- /must/ not be used.
+    descriptorBindingPartiallyBound :: Bool
+  , -- | @descriptorBindingVariableDescriptorCount@ indicates whether the
+    -- implementation supports descriptor sets with a variable-sized last
+    -- binding. If this feature is not enabled,
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT'
+    -- /must/ not be used.
+    descriptorBindingVariableDescriptorCount :: Bool
+  , -- | @runtimeDescriptorArray@ indicates whether the implementation supports
+    -- the SPIR-V @RuntimeDescriptorArray@ capability. If this feature is not
+    -- enabled, descriptors /must/ not be declared in runtime arrays.
+    runtimeDescriptorArray :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceDescriptorIndexingFeatures
+
+instance ToCStruct PhysicalDeviceDescriptorIndexingFeatures where
+  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDescriptorIndexingFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayDynamicIndexing))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderUniformTexelBufferArrayDynamicIndexing))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (shaderStorageTexelBufferArrayDynamicIndexing))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayNonUniformIndexing))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayNonUniformIndexing))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayNonUniformIndexing))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayNonUniformIndexing))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayNonUniformIndexing))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (shaderUniformTexelBufferArrayNonUniformIndexing))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (shaderStorageTexelBufferArrayNonUniformIndexing))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUniformBufferUpdateAfterBind))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (descriptorBindingSampledImageUpdateAfterBind))
+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageImageUpdateAfterBind))
+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageBufferUpdateAfterBind))
+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUniformTexelBufferUpdateAfterBind))
+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (descriptorBindingStorageTexelBufferUpdateAfterBind))
+    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (descriptorBindingUpdateUnusedWhilePending))
+    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (descriptorBindingPartiallyBound))
+    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (descriptorBindingVariableDescriptorCount))
+    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (runtimeDescriptorArray))
+    f
+  cStructSize = 96
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceDescriptorIndexingFeatures where
+  peekCStruct p = do
+    shaderInputAttachmentArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    shaderUniformTexelBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    shaderStorageTexelBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    shaderUniformBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    shaderSampledImageArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    shaderStorageBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    shaderStorageImageArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    shaderInputAttachmentArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    shaderUniformTexelBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    shaderStorageTexelBufferArrayNonUniformIndexing <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
+    descriptorBindingUniformBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
+    descriptorBindingSampledImageUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
+    descriptorBindingStorageImageUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))
+    descriptorBindingStorageBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))
+    descriptorBindingUniformTexelBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))
+    descriptorBindingStorageTexelBufferUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
+    descriptorBindingUpdateUnusedWhilePending <- peek @Bool32 ((p `plusPtr` 80 :: Ptr Bool32))
+    descriptorBindingPartiallyBound <- peek @Bool32 ((p `plusPtr` 84 :: Ptr Bool32))
+    descriptorBindingVariableDescriptorCount <- peek @Bool32 ((p `plusPtr` 88 :: Ptr Bool32))
+    runtimeDescriptorArray <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))
+    pure $ PhysicalDeviceDescriptorIndexingFeatures
+             (bool32ToBool shaderInputAttachmentArrayDynamicIndexing) (bool32ToBool shaderUniformTexelBufferArrayDynamicIndexing) (bool32ToBool shaderStorageTexelBufferArrayDynamicIndexing) (bool32ToBool shaderUniformBufferArrayNonUniformIndexing) (bool32ToBool shaderSampledImageArrayNonUniformIndexing) (bool32ToBool shaderStorageBufferArrayNonUniformIndexing) (bool32ToBool shaderStorageImageArrayNonUniformIndexing) (bool32ToBool shaderInputAttachmentArrayNonUniformIndexing) (bool32ToBool shaderUniformTexelBufferArrayNonUniformIndexing) (bool32ToBool shaderStorageTexelBufferArrayNonUniformIndexing) (bool32ToBool descriptorBindingUniformBufferUpdateAfterBind) (bool32ToBool descriptorBindingSampledImageUpdateAfterBind) (bool32ToBool descriptorBindingStorageImageUpdateAfterBind) (bool32ToBool descriptorBindingStorageBufferUpdateAfterBind) (bool32ToBool descriptorBindingUniformTexelBufferUpdateAfterBind) (bool32ToBool descriptorBindingStorageTexelBufferUpdateAfterBind) (bool32ToBool descriptorBindingUpdateUnusedWhilePending) (bool32ToBool descriptorBindingPartiallyBound) (bool32ToBool descriptorBindingVariableDescriptorCount) (bool32ToBool runtimeDescriptorArray)
+
+instance Storable PhysicalDeviceDescriptorIndexingFeatures where
+  sizeOf ~_ = 96
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDescriptorIndexingFeatures where
+  zero = PhysicalDeviceDescriptorIndexingFeatures
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceDescriptorIndexingProperties - Structure describing
+-- descriptor indexing properties that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceDescriptorIndexingProperties'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceDescriptorIndexingProperties' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDescriptorIndexingProperties = PhysicalDeviceDescriptorIndexingProperties
+  { -- | @maxUpdateAfterBindDescriptorsInAllPools@ is the maximum number of
+    -- descriptors (summed over all descriptor types) that /can/ be created
+    -- across all pools that are created with the
+    -- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'
+    -- bit set. Pool creation /may/ fail when this limit is exceeded, or when
+    -- the space this limit represents is unable to satisfy a pool creation due
+    -- to fragmentation.
+    maxUpdateAfterBindDescriptorsInAllPools :: Word32
+  , -- | @shaderUniformBufferArrayNonUniformIndexingNative@ is a boolean value
+    -- indicating whether uniform buffer descriptors natively support
+    -- nonuniform indexing. If this is 'Vulkan.Core10.BaseType.FALSE', then a
+    -- single dynamic instance of an instruction that nonuniformly indexes an
+    -- array of uniform buffers /may/ execute multiple times in order to access
+    -- all the descriptors.
+    shaderUniformBufferArrayNonUniformIndexingNative :: Bool
+  , -- | @shaderSampledImageArrayNonUniformIndexingNative@ is a boolean value
+    -- indicating whether sampler and image descriptors natively support
+    -- nonuniform indexing. If this is 'Vulkan.Core10.BaseType.FALSE', then a
+    -- single dynamic instance of an instruction that nonuniformly indexes an
+    -- array of samplers or images /may/ execute multiple times in order to
+    -- access all the descriptors.
+    shaderSampledImageArrayNonUniformIndexingNative :: Bool
+  , -- | @shaderStorageBufferArrayNonUniformIndexingNative@ is a boolean value
+    -- indicating whether storage buffer descriptors natively support
+    -- nonuniform indexing. If this is 'Vulkan.Core10.BaseType.FALSE', then a
+    -- single dynamic instance of an instruction that nonuniformly indexes an
+    -- array of storage buffers /may/ execute multiple times in order to access
+    -- all the descriptors.
+    shaderStorageBufferArrayNonUniformIndexingNative :: Bool
+  , -- | @shaderStorageImageArrayNonUniformIndexingNative@ is a boolean value
+    -- indicating whether storage image descriptors natively support nonuniform
+    -- indexing. If this is 'Vulkan.Core10.BaseType.FALSE', then a single
+    -- dynamic instance of an instruction that nonuniformly indexes an array of
+    -- storage images /may/ execute multiple times in order to access all the
+    -- descriptors.
+    shaderStorageImageArrayNonUniformIndexingNative :: Bool
+  , -- | @shaderInputAttachmentArrayNonUniformIndexingNative@ is a boolean value
+    -- indicating whether input attachment descriptors natively support
+    -- nonuniform indexing. If this is 'Vulkan.Core10.BaseType.FALSE', then a
+    -- single dynamic instance of an instruction that nonuniformly indexes an
+    -- array of input attachments /may/ execute multiple times in order to
+    -- access all the descriptors.
+    shaderInputAttachmentArrayNonUniformIndexingNative :: Bool
+  , -- | @robustBufferAccessUpdateAfterBind@ is a boolean value indicating
+    -- whether
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
+    -- /can/ be enabled in a device simultaneously with
+    -- @descriptorBindingUniformBufferUpdateAfterBind@,
+    -- @descriptorBindingStorageBufferUpdateAfterBind@,
+    -- @descriptorBindingUniformTexelBufferUpdateAfterBind@, and\/or
+    -- @descriptorBindingStorageTexelBufferUpdateAfterBind@. If this is
+    -- 'Vulkan.Core10.BaseType.FALSE', then either @robustBufferAccess@ /must/
+    -- be disabled or all of these update-after-bind features /must/ be
+    -- disabled.
+    robustBufferAccessUpdateAfterBind :: Bool
+  , -- | @quadDivergentImplicitLod@ is a boolean value indicating whether
+    -- implicit level of detail calculations for image operations have
+    -- well-defined results when the image and\/or sampler objects used for the
+    -- instruction are not uniform within a quad. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-derivative-image-operations Derivative Image Operations>.
+    quadDivergentImplicitLod :: Bool
+  , -- | @maxPerStageDescriptorUpdateAfterBindSamplers@ is similar to
+    -- @maxPerStageDescriptorSamplers@ but counts descriptors from descriptor
+    -- sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindSamplers :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindUniformBuffers@ is similar to
+    -- @maxPerStageDescriptorUniformBuffers@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindUniformBuffers :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindStorageBuffers@ is similar to
+    -- @maxPerStageDescriptorStorageBuffers@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindStorageBuffers :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindSampledImages@ is similar to
+    -- @maxPerStageDescriptorSampledImages@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindSampledImages :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindStorageImages@ is similar to
+    -- @maxPerStageDescriptorStorageImages@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindStorageImages :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindInputAttachments@ is similar to
+    -- @maxPerStageDescriptorInputAttachments@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindInputAttachments :: Word32
+  , -- | @maxPerStageUpdateAfterBindResources@ is similar to
+    -- @maxPerStageResources@ but counts descriptors from descriptor sets
+    -- created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageUpdateAfterBindResources :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindSamplers@ is similar to
+    -- @maxDescriptorSetSamplers@ but counts descriptors from descriptor sets
+    -- created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindSamplers :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffers@ is similar to
+    -- @maxDescriptorSetUniformBuffers@ but counts descriptors from descriptor
+    -- sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindUniformBuffers :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@ is similar to
+    -- @maxDescriptorSetUniformBuffersDynamic@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffers@ is similar to
+    -- @maxDescriptorSetStorageBuffers@ but counts descriptors from descriptor
+    -- sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindStorageBuffers :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@ is similar to
+    -- @maxDescriptorSetStorageBuffersDynamic@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindSampledImages@ is similar to
+    -- @maxDescriptorSetSampledImages@ but counts descriptors from descriptor
+    -- sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindSampledImages :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindStorageImages@ is similar to
+    -- @maxDescriptorSetStorageImages@ but counts descriptors from descriptor
+    -- sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindStorageImages :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindInputAttachments@ is similar to
+    -- @maxDescriptorSetInputAttachments@ but counts descriptors from
+    -- descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindInputAttachments :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceDescriptorIndexingProperties
+
+instance ToCStruct PhysicalDeviceDescriptorIndexingProperties where
+  withCStruct x f = allocaBytesAligned 112 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDescriptorIndexingProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxUpdateAfterBindDescriptorsInAllPools)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayNonUniformIndexingNative))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayNonUniformIndexingNative))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayNonUniformIndexingNative))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayNonUniformIndexingNative))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (shaderInputAttachmentArrayNonUniformIndexingNative))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (robustBufferAccessUpdateAfterBind))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (quadDivergentImplicitLod))
+    poke ((p `plusPtr` 48 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindSamplers)
+    poke ((p `plusPtr` 52 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindUniformBuffers)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindStorageBuffers)
+    poke ((p `plusPtr` 60 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindSampledImages)
+    poke ((p `plusPtr` 64 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindStorageImages)
+    poke ((p `plusPtr` 68 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindInputAttachments)
+    poke ((p `plusPtr` 72 :: Ptr Word32)) (maxPerStageUpdateAfterBindResources)
+    poke ((p `plusPtr` 76 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindSamplers)
+    poke ((p `plusPtr` 80 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindUniformBuffers)
+    poke ((p `plusPtr` 84 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindUniformBuffersDynamic)
+    poke ((p `plusPtr` 88 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageBuffers)
+    poke ((p `plusPtr` 92 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageBuffersDynamic)
+    poke ((p `plusPtr` 96 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindSampledImages)
+    poke ((p `plusPtr` 100 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindStorageImages)
+    poke ((p `plusPtr` 104 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindInputAttachments)
+    f
+  cStructSize = 112
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 60 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 68 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 72 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 76 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 80 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 84 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 88 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 92 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 96 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 100 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 104 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceDescriptorIndexingProperties where
+  peekCStruct p = do
+    maxUpdateAfterBindDescriptorsInAllPools <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    shaderUniformBufferArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    shaderSampledImageArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    shaderStorageBufferArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    shaderStorageImageArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    shaderInputAttachmentArrayNonUniformIndexingNative <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    robustBufferAccessUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    quadDivergentImplicitLod <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    maxPerStageDescriptorUpdateAfterBindSamplers <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindUniformBuffers <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindStorageBuffers <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindSampledImages <- peek @Word32 ((p `plusPtr` 60 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindStorageImages <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindInputAttachments <- peek @Word32 ((p `plusPtr` 68 :: Ptr Word32))
+    maxPerStageUpdateAfterBindResources <- peek @Word32 ((p `plusPtr` 72 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindSamplers <- peek @Word32 ((p `plusPtr` 76 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindUniformBuffers <- peek @Word32 ((p `plusPtr` 80 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic <- peek @Word32 ((p `plusPtr` 84 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindStorageBuffers <- peek @Word32 ((p `plusPtr` 88 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic <- peek @Word32 ((p `plusPtr` 92 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindSampledImages <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindStorageImages <- peek @Word32 ((p `plusPtr` 100 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindInputAttachments <- peek @Word32 ((p `plusPtr` 104 :: Ptr Word32))
+    pure $ PhysicalDeviceDescriptorIndexingProperties
+             maxUpdateAfterBindDescriptorsInAllPools (bool32ToBool shaderUniformBufferArrayNonUniformIndexingNative) (bool32ToBool shaderSampledImageArrayNonUniformIndexingNative) (bool32ToBool shaderStorageBufferArrayNonUniformIndexingNative) (bool32ToBool shaderStorageImageArrayNonUniformIndexingNative) (bool32ToBool shaderInputAttachmentArrayNonUniformIndexingNative) (bool32ToBool robustBufferAccessUpdateAfterBind) (bool32ToBool quadDivergentImplicitLod) maxPerStageDescriptorUpdateAfterBindSamplers maxPerStageDescriptorUpdateAfterBindUniformBuffers maxPerStageDescriptorUpdateAfterBindStorageBuffers maxPerStageDescriptorUpdateAfterBindSampledImages maxPerStageDescriptorUpdateAfterBindStorageImages maxPerStageDescriptorUpdateAfterBindInputAttachments maxPerStageUpdateAfterBindResources maxDescriptorSetUpdateAfterBindSamplers maxDescriptorSetUpdateAfterBindUniformBuffers maxDescriptorSetUpdateAfterBindUniformBuffersDynamic maxDescriptorSetUpdateAfterBindStorageBuffers maxDescriptorSetUpdateAfterBindStorageBuffersDynamic maxDescriptorSetUpdateAfterBindSampledImages maxDescriptorSetUpdateAfterBindStorageImages maxDescriptorSetUpdateAfterBindInputAttachments
+
+instance Storable PhysicalDeviceDescriptorIndexingProperties where
+  sizeOf ~_ = 112
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDescriptorIndexingProperties where
+  zero = PhysicalDeviceDescriptorIndexingProperties
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDescriptorSetLayoutBindingFlagsCreateInfo - Structure specifying
+-- creation flags for descriptor set layout bindings
+--
+-- = Description
+--
+-- If @bindingCount@ is zero or if this structure is not included in the
+-- @pNext@ chain, the
+-- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlags'
+-- for each descriptor set layout binding is considered to be zero.
+-- Otherwise, the descriptor set layout binding at
+-- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@pBindings@[i]
+-- uses the flags in @pBindingFlags@[i].
+--
+-- == Valid Usage
+--
+-- -   If @bindingCount@ is not zero, @bindingCount@ /must/ equal
+--     'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@bindingCount@
+--
+-- -   If
+--     'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@flags@
+--     includes
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR',
+--     then all elements of @pBindingFlags@ /must/ not include
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT',
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT',
+--     or
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT'
+--
+-- -   If an element of @pBindingFlags@ includes
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT',
+--     then all other elements of
+--     'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@pBindings@
+--     /must/ have a smaller value of @binding@
+--
+-- -   If
+--     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingUniformBufferUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
+--     /must/ not use
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--
+-- -   If
+--     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingSampledImageUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
+--     /must/ not use
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--
+-- -   If
+--     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingStorageImageUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'
+--     /must/ not use
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--
+-- -   If
+--     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingStorageBufferUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
+--     /must/ not use
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--
+-- -   If
+--     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingUniformTexelBufferUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
+--     /must/ not use
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--
+-- -   If
+--     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingStorageTexelBufferUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
+--     /must/ not use
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--
+-- -   If
+--     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT'::@descriptorBindingInlineUniformBlockUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+--     /must/ not use
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--
+-- -   All bindings with descriptor type
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+--     /must/ not use
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+--
+-- -   If
+--     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingUpdateUnusedWhilePending@
+--     is not enabled, all elements of @pBindingFlags@ /must/ not include
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'
+--
+-- -   If
+--     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingPartiallyBound@
+--     is not enabled, all elements of @pBindingFlags@ /must/ not include
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'
+--
+-- -   If
+--     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingVariableDescriptorCount@
+--     is not enabled, all elements of @pBindingFlags@ /must/ not include
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT'
+--
+-- -   If an element of @pBindingFlags@ includes
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT',
+--     that element’s @descriptorType@ /must/ not be
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO'
+--
+-- -   If @bindingCount@ is not @0@, and @pBindingFlags@ is not @NULL@,
+--     @pBindingFlags@ /must/ be a valid pointer to an array of
+--     @bindingCount@ valid combinations of
+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DescriptorSetLayoutBindingFlagsCreateInfo = DescriptorSetLayoutBindingFlagsCreateInfo
+  { -- | @bindingCount@ is zero or the number of elements in @pBindingFlags@.
+    bindingCount :: Word32
+  , -- | @pBindingFlags@ is a pointer to an array of
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlags'
+    -- bitfields, one for each descriptor set layout binding.
+    bindingFlags :: Vector DescriptorBindingFlags
+  }
+  deriving (Typeable)
+deriving instance Show DescriptorSetLayoutBindingFlagsCreateInfo
+
+instance ToCStruct DescriptorSetLayoutBindingFlagsCreateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorSetLayoutBindingFlagsCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    let pBindingFlagsLength = Data.Vector.length $ (bindingFlags)
+    bindingCount'' <- lift $ if (bindingCount) == 0
+      then pure $ fromIntegral pBindingFlagsLength
+      else do
+        unless (fromIntegral pBindingFlagsLength == (bindingCount) || pBindingFlagsLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pBindingFlags must be empty or have 'bindingCount' elements" Nothing Nothing
+        pure (bindingCount)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (bindingCount'')
+    pBindingFlags'' <- if Data.Vector.null (bindingFlags)
+      then pure nullPtr
+      else do
+        pPBindingFlags <- ContT $ allocaBytesAligned @DescriptorBindingFlags (((Data.Vector.length (bindingFlags))) * 4) 4
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPBindingFlags `plusPtr` (4 * (i)) :: Ptr DescriptorBindingFlags) (e)) ((bindingFlags))
+        pure $ pPBindingFlags
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DescriptorBindingFlags))) pBindingFlags''
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct DescriptorSetLayoutBindingFlagsCreateInfo where
+  peekCStruct p = do
+    bindingCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pBindingFlags <- peek @(Ptr DescriptorBindingFlags) ((p `plusPtr` 24 :: Ptr (Ptr DescriptorBindingFlags)))
+    let pBindingFlagsLength = if pBindingFlags == nullPtr then 0 else (fromIntegral bindingCount)
+    pBindingFlags' <- generateM pBindingFlagsLength (\i -> peek @DescriptorBindingFlags ((pBindingFlags `advancePtrBytes` (4 * (i)) :: Ptr DescriptorBindingFlags)))
+    pure $ DescriptorSetLayoutBindingFlagsCreateInfo
+             bindingCount pBindingFlags'
+
+instance Zero DescriptorSetLayoutBindingFlagsCreateInfo where
+  zero = DescriptorSetLayoutBindingFlagsCreateInfo
+           zero
+           mempty
+
+
+-- | VkDescriptorSetVariableDescriptorCountAllocateInfo - Structure
+-- specifying additional allocation parameters for descriptor sets
+--
+-- = 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 the variable count descriptor binding in the corresponding
+-- descriptor set layout has a descriptor type of
+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+-- then @pDescriptorCounts@[i] specifies the binding’s capacity in bytes.
+-- If
+-- 'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo'::@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
+--     'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo'::@descriptorSetCount@
+--
+-- -   If
+--     'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo'::@pSetLayouts@[i]
+--     has a variable descriptor count binding, then @pDescriptorCounts@[i]
+--     /must/ be less than or equal to the descriptor count specified for
+--     that binding when the descriptor set layout was created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO'
+--
+-- -   If @descriptorSetCount@ is not @0@, @pDescriptorCounts@ /must/ be a
+--     valid pointer to an array of @descriptorSetCount@ @uint32_t@ values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DescriptorSetVariableDescriptorCountAllocateInfo = DescriptorSetVariableDescriptorCountAllocateInfo
+  { -- | @pDescriptorCounts@ is a pointer to an array of descriptor counts, with
+    -- each member specifying the number of descriptors in a variable
+    -- descriptor count binding in the corresponding descriptor set being
+    -- allocated.
+    descriptorCounts :: Vector Word32 }
+  deriving (Typeable)
+deriving instance Show DescriptorSetVariableDescriptorCountAllocateInfo
+
+instance ToCStruct DescriptorSetVariableDescriptorCountAllocateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorSetVariableDescriptorCountAllocateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (descriptorCounts)) :: Word32))
+    pPDescriptorCounts' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (descriptorCounts)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorCounts' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (descriptorCounts)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDescriptorCounts')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPDescriptorCounts' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorCounts' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDescriptorCounts')
+    lift $ f
+
+instance FromCStruct DescriptorSetVariableDescriptorCountAllocateInfo where
+  peekCStruct p = do
+    descriptorSetCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pDescriptorCounts <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
+    pDescriptorCounts' <- generateM (fromIntegral descriptorSetCount) (\i -> peek @Word32 ((pDescriptorCounts `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ DescriptorSetVariableDescriptorCountAllocateInfo
+             pDescriptorCounts'
+
+instance Zero DescriptorSetVariableDescriptorCountAllocateInfo where
+  zero = DescriptorSetVariableDescriptorCountAllocateInfo
+           mempty
+
+
+-- | VkDescriptorSetVariableDescriptorCountLayoutSupport - Structure
+-- returning information about whether a descriptor set layout can be
+-- supported
+--
+-- = 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
+-- 'PhysicalDeviceDescriptorIndexingFeatures'::@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)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DescriptorSetVariableDescriptorCountLayoutSupport = DescriptorSetVariableDescriptorCountLayoutSupport
+  { -- | @maxVariableDescriptorCount@ indicates the maximum number of descriptors
+    -- supported in the highest numbered binding of the layout, if that binding
+    -- is variable-sized. If the highest numbered binding of the layout has a
+    -- descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- then @maxVariableDescriptorCount@ indicates the maximum byte size
+    -- supported for the binding, if that binding is variable-sized.
+    maxVariableDescriptorCount :: Word32 }
+  deriving (Typeable)
+deriving instance Show DescriptorSetVariableDescriptorCountLayoutSupport
+
+instance ToCStruct DescriptorSetVariableDescriptorCountLayoutSupport where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorSetVariableDescriptorCountLayoutSupport{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxVariableDescriptorCount)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DescriptorSetVariableDescriptorCountLayoutSupport where
+  peekCStruct p = do
+    maxVariableDescriptorCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ DescriptorSetVariableDescriptorCountLayoutSupport
+             maxVariableDescriptorCount
+
+instance Storable DescriptorSetVariableDescriptorCountLayoutSupport where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DescriptorSetVariableDescriptorCountLayoutSupport where
+  zero = DescriptorSetVariableDescriptorCountLayoutSupport
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs-boot
@@ -0,0 +1,50 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing  ( DescriptorSetLayoutBindingFlagsCreateInfo
+                                                               , DescriptorSetVariableDescriptorCountAllocateInfo
+                                                               , DescriptorSetVariableDescriptorCountLayoutSupport
+                                                               , PhysicalDeviceDescriptorIndexingFeatures
+                                                               , PhysicalDeviceDescriptorIndexingProperties
+                                                               ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DescriptorSetLayoutBindingFlagsCreateInfo
+
+instance ToCStruct DescriptorSetLayoutBindingFlagsCreateInfo
+instance Show DescriptorSetLayoutBindingFlagsCreateInfo
+
+instance FromCStruct DescriptorSetLayoutBindingFlagsCreateInfo
+
+
+data DescriptorSetVariableDescriptorCountAllocateInfo
+
+instance ToCStruct DescriptorSetVariableDescriptorCountAllocateInfo
+instance Show DescriptorSetVariableDescriptorCountAllocateInfo
+
+instance FromCStruct DescriptorSetVariableDescriptorCountAllocateInfo
+
+
+data DescriptorSetVariableDescriptorCountLayoutSupport
+
+instance ToCStruct DescriptorSetVariableDescriptorCountLayoutSupport
+instance Show DescriptorSetVariableDescriptorCountLayoutSupport
+
+instance FromCStruct DescriptorSetVariableDescriptorCountLayoutSupport
+
+
+data PhysicalDeviceDescriptorIndexingFeatures
+
+instance ToCStruct PhysicalDeviceDescriptorIndexingFeatures
+instance Show PhysicalDeviceDescriptorIndexingFeatures
+
+instance FromCStruct PhysicalDeviceDescriptorIndexingFeatures
+
+
+data PhysicalDeviceDescriptorIndexingProperties
+
+instance ToCStruct PhysicalDeviceDescriptorIndexingProperties
+instance Show PhysicalDeviceDescriptorIndexingProperties
+
+instance FromCStruct PhysicalDeviceDescriptorIndexingProperties
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs b/src/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs
@@ -0,0 +1,178 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset  ( resetQueryPool
+                                                            , PhysicalDeviceHostQueryResetFeatures(..)
+                                                            , StructureType(..)
+                                                            ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkResetQueryPool))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (QueryPool)
+import Vulkan.Core10.Handles (QueryPool(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkResetQueryPool
+  :: FunPtr (Ptr Device_T -> QueryPool -> Word32 -> Word32 -> IO ()) -> Ptr Device_T -> QueryPool -> Word32 -> Word32 -> IO ()
+
+-- | vkResetQueryPool - Reset queries in a query pool
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the query pool.
+--
+-- -   @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
+--
+-- This command sets the status of query indices [@firstQuery@,
+-- @firstQuery@ + @queryCount@ - 1] to unavailable.
+--
+-- If @queryPool@ is
+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' this
+-- command sets the status of query indices [@firstQuery@, @firstQuery@ +
+-- @queryCount@ - 1] to unavailable for each pass.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-hostQueryReset hostQueryReset>
+--     feature /must/ be enabled
+--
+-- -   @firstQuery@ /must/ be less than the number of queries in
+--     @queryPool@
+--
+-- -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or
+--     equal to the number of queries in @queryPool@
+--
+-- -   Submitted commands that refer to the range specified by @firstQuery@
+--     and @queryCount@ in @queryPool@ /must/ have completed execution
+--
+-- -   The range of queries specified by @firstQuery@ and @queryCount@ in
+--     @queryPool@ /must/ not be in use by calls to
+--     'Vulkan.Core10.Query.getQueryPoolResults' or 'resetQueryPool' in
+--     other threads
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   @queryPool@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.QueryPool'
+resetQueryPool :: forall io . MonadIO io => Device -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> io ()
+resetQueryPool device queryPool firstQuery queryCount = liftIO $ do
+  let vkResetQueryPoolPtr = pVkResetQueryPool (deviceCmds (device :: Device))
+  unless (vkResetQueryPoolPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkResetQueryPool is null" Nothing Nothing
+  let vkResetQueryPool' = mkVkResetQueryPool vkResetQueryPoolPtr
+  vkResetQueryPool' (deviceHandle (device)) (queryPool) (firstQuery) (queryCount)
+  pure $ ()
+
+
+-- | VkPhysicalDeviceHostQueryResetFeatures - Structure describing whether
+-- queries can be reset from the host
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceHostQueryResetFeatures' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceHostQueryResetFeatures' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceHostQueryResetFeatures' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceHostQueryResetFeatures = PhysicalDeviceHostQueryResetFeatures
+  { -- | @hostQueryReset@ indicates that the implementation supports resetting
+    -- queries from the host with 'resetQueryPool'.
+    hostQueryReset :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceHostQueryResetFeatures
+
+instance ToCStruct PhysicalDeviceHostQueryResetFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceHostQueryResetFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (hostQueryReset))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceHostQueryResetFeatures where
+  peekCStruct p = do
+    hostQueryReset <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceHostQueryResetFeatures
+             (bool32ToBool hostQueryReset)
+
+instance Storable PhysicalDeviceHostQueryResetFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceHostQueryResetFeatures where
+  zero = PhysicalDeviceHostQueryResetFeatures
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset  (PhysicalDeviceHostQueryResetFeatures) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceHostQueryResetFeatures
+
+instance ToCStruct PhysicalDeviceHostQueryResetFeatures
+instance Show PhysicalDeviceHostQueryResetFeatures
+
+instance FromCStruct PhysicalDeviceHostQueryResetFeatures
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs b/src/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs
@@ -0,0 +1,182 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax  ( PhysicalDeviceSamplerFilterMinmaxProperties(..)
+                                                                 , SamplerReductionModeCreateInfo(..)
+                                                                 , StructureType(..)
+                                                                 , FormatFeatureFlagBits(..)
+                                                                 , FormatFeatureFlags
+                                                                 , SamplerReductionMode(..)
+                                                                 ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(..))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceSamplerFilterMinmaxProperties - Structure describing
+-- sampler filter minmax limits that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceSamplerFilterMinmaxProperties'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceSamplerFilterMinmaxProperties' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- If @filterMinmaxSingleComponentFormats@ is
+-- 'Vulkan.Core10.BaseType.TRUE', the following formats /must/ support the
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT'
+-- feature with 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', if
+-- they support
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT'.
+--
+-- 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 'Vulkan.Core10.BaseType.FALSE'
+-- the component mapping of the image view used with min\/max filtering
+-- /must/ have been created with the @r@ component set to
+-- 'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'. Only
+-- the @r@ component of the sampled image value is defined and the other
+-- component values are undefined. If @filterMinmaxImageComponentMapping@
+-- is 'Vulkan.Core10.BaseType.TRUE' this restriction does not apply and
+-- image component mapping works as normal.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceSamplerFilterMinmaxProperties = PhysicalDeviceSamplerFilterMinmaxProperties
+  { -- | @filterMinmaxSingleComponentFormats@ is a boolean value indicating
+    -- whether a minimum set of required formats support min\/max filtering.
+    filterMinmaxSingleComponentFormats :: Bool
+  , -- | @filterMinmaxImageComponentMapping@ is a boolean value indicating
+    -- whether the implementation supports non-identity component mapping of
+    -- the image when doing min\/max filtering.
+    filterMinmaxImageComponentMapping :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceSamplerFilterMinmaxProperties
+
+instance ToCStruct PhysicalDeviceSamplerFilterMinmaxProperties where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSamplerFilterMinmaxProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (filterMinmaxSingleComponentFormats))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (filterMinmaxImageComponentMapping))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceSamplerFilterMinmaxProperties where
+  peekCStruct p = do
+    filterMinmaxSingleComponentFormats <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    filterMinmaxImageComponentMapping <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceSamplerFilterMinmaxProperties
+             (bool32ToBool filterMinmaxSingleComponentFormats) (bool32ToBool filterMinmaxImageComponentMapping)
+
+instance Storable PhysicalDeviceSamplerFilterMinmaxProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceSamplerFilterMinmaxProperties where
+  zero = PhysicalDeviceSamplerFilterMinmaxProperties
+           zero
+           zero
+
+
+-- | VkSamplerReductionModeCreateInfo - Structure specifying sampler
+-- reduction mode
+--
+-- = Description
+--
+-- If the @pNext@ chain of 'Vulkan.Core10.Sampler.SamplerCreateInfo'
+-- includes a 'SamplerReductionModeCreateInfo' structure, then that
+-- structure includes a mode that controls how texture filtering combines
+-- texel values.
+--
+-- If this structure is not present, @reductionMode@ is considered to be
+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SamplerReductionModeCreateInfo = SamplerReductionModeCreateInfo
+  { -- | @reductionMode@ /must/ be a valid
+    -- 'Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode' value
+    reductionMode :: SamplerReductionMode }
+  deriving (Typeable)
+deriving instance Show SamplerReductionModeCreateInfo
+
+instance ToCStruct SamplerReductionModeCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SamplerReductionModeCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SamplerReductionMode)) (reductionMode)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SamplerReductionMode)) (zero)
+    f
+
+instance FromCStruct SamplerReductionModeCreateInfo where
+  peekCStruct p = do
+    reductionMode <- peek @SamplerReductionMode ((p `plusPtr` 16 :: Ptr SamplerReductionMode))
+    pure $ SamplerReductionModeCreateInfo
+             reductionMode
+
+instance Storable SamplerReductionModeCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SamplerReductionModeCreateInfo where
+  zero = SamplerReductionModeCreateInfo
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax  ( PhysicalDeviceSamplerFilterMinmaxProperties
+                                                                 , SamplerReductionModeCreateInfo
+                                                                 ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceSamplerFilterMinmaxProperties
+
+instance ToCStruct PhysicalDeviceSamplerFilterMinmaxProperties
+instance Show PhysicalDeviceSamplerFilterMinmaxProperties
+
+instance FromCStruct PhysicalDeviceSamplerFilterMinmaxProperties
+
+
+data SamplerReductionModeCreateInfo
+
+instance ToCStruct SamplerReductionModeCreateInfo
+instance Show SamplerReductionModeCreateInfo
+
+instance FromCStruct SamplerReductionModeCreateInfo
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs b/src/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs
@@ -0,0 +1,89 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout  ( PhysicalDeviceScalarBlockLayoutFeatures(..)
+                                                               , StructureType(..)
+                                                               ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceScalarBlockLayoutFeatures - Structure indicating support
+-- for scalar block layouts
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceScalarBlockLayoutFeatures' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceScalarBlockLayoutFeatures' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceScalarBlockLayoutFeatures' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable this
+-- feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceScalarBlockLayoutFeatures = PhysicalDeviceScalarBlockLayoutFeatures
+  { -- | @scalarBlockLayout@ indicates that the implementation supports the
+    -- layout of resource blocks in shaders using
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-alignment-requirements scalar alignment>.
+    scalarBlockLayout :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceScalarBlockLayoutFeatures
+
+instance ToCStruct PhysicalDeviceScalarBlockLayoutFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceScalarBlockLayoutFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (scalarBlockLayout))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceScalarBlockLayoutFeatures where
+  peekCStruct p = do
+    scalarBlockLayout <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceScalarBlockLayoutFeatures
+             (bool32ToBool scalarBlockLayout)
+
+instance Storable PhysicalDeviceScalarBlockLayoutFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceScalarBlockLayoutFeatures where
+  zero = PhysicalDeviceScalarBlockLayoutFeatures
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout  (PhysicalDeviceScalarBlockLayoutFeatures) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceScalarBlockLayoutFeatures
+
+instance ToCStruct PhysicalDeviceScalarBlockLayoutFeatures
+instance Show PhysicalDeviceScalarBlockLayoutFeatures
+
+instance FromCStruct PhysicalDeviceScalarBlockLayoutFeatures
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs b/src/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs
@@ -0,0 +1,117 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage  ( ImageStencilUsageCreateInfo(..)
+                                                                  , StructureType(..)
+                                                                  ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkImageStencilUsageCreateInfo - Specify separate usage flags for the
+-- stencil aspect of a depth-stencil image
+--
+-- = Description
+--
+-- If the @pNext@ chain of 'Vulkan.Core10.Image.ImageCreateInfo' includes a
+-- 'ImageStencilUsageCreateInfo' structure, then that structure includes
+-- the usage flags specific to the stencil aspect of the image for an image
+-- with a depth-stencil format.
+--
+-- This structure specifies image usages which only apply to the stencil
+-- aspect of a depth\/stencil format image. When this structure is included
+-- in the @pNext@ chain of 'Vulkan.Core10.Image.ImageCreateInfo', the
+-- stencil aspect of the image /must/ only be used as specified by
+-- @stencilUsage@. When this structure is not included in the @pNext@ chain
+-- of 'Vulkan.Core10.Image.ImageCreateInfo', the stencil aspect of an image
+-- /must/ only be used as specified
+-- 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@. Use of other aspects of
+-- an image are unaffected by this structure.
+--
+-- This structure /can/ also be included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
+-- to query additional capabilities specific to image creation parameter
+-- combinations including a separate set of usage flags for the stencil
+-- aspect of the image using
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'.
+-- When this structure is not included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
+-- then the implicit value of @stencilUsage@ matches that of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@usage@.
+--
+-- == Valid Usage
+--
+-- -   If @stencilUsage@ includes
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',
+--     it /must/ not include bits other than
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--     or
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO'
+--
+-- -   @stencilUsage@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values
+--
+-- -   @stencilUsage@ /must/ not be @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImageStencilUsageCreateInfo = ImageStencilUsageCreateInfo
+  { -- | @stencilUsage@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' describing
+    -- the intended usage of the stencil aspect of the image.
+    stencilUsage :: ImageUsageFlags }
+  deriving (Typeable)
+deriving instance Show ImageStencilUsageCreateInfo
+
+instance ToCStruct ImageStencilUsageCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageStencilUsageCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageUsageFlags)) (stencilUsage)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageUsageFlags)) (zero)
+    f
+
+instance FromCStruct ImageStencilUsageCreateInfo where
+  peekCStruct p = do
+    stencilUsage <- peek @ImageUsageFlags ((p `plusPtr` 16 :: Ptr ImageUsageFlags))
+    pure $ ImageStencilUsageCreateInfo
+             stencilUsage
+
+instance Storable ImageStencilUsageCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageStencilUsageCreateInfo where
+  zero = ImageStencilUsageCreateInfo
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage  (ImageStencilUsageCreateInfo) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ImageStencilUsageCreateInfo
+
+instance ToCStruct ImageStencilUsageCreateInfo
+instance Show ImageStencilUsageCreateInfo
+
+instance FromCStruct ImageStencilUsageCreateInfo
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs
@@ -0,0 +1,100 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage  ( PhysicalDevice8BitStorageFeatures(..)
+                                                        , StructureType(..)
+                                                        ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDevice8BitStorageFeatures - Structure describing features
+-- supported by VK_KHR_8bit_storage
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevice8BitStorageFeatures = PhysicalDevice8BitStorageFeatures
+  { -- | @storageBuffer8BitAccess@ indicates whether objects in the
+    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the
+    -- @Block@ decoration /can/ have 8-bit integer members. If this feature is
+    -- not enabled, 8-bit integer members /must/ not be used in such objects.
+    -- This also indicates whether shader modules /can/ declare the
+    -- @StorageBuffer8BitAccess@ capability.
+    storageBuffer8BitAccess :: Bool
+  , -- | @uniformAndStorageBuffer8BitAccess@ indicates whether objects in the
+    -- @Uniform@ storage class with the @Block@ decoration and in the
+    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the same
+    -- decoration /can/ have 8-bit integer members. If this feature is not
+    -- enabled, 8-bit integer members /must/ not be used in such objects. This
+    -- also indicates whether shader modules /can/ declare the
+    -- @UniformAndStorageBuffer8BitAccess@ capability.
+    uniformAndStorageBuffer8BitAccess :: Bool
+  , -- | @storagePushConstant8@ indicates whether objects in the @PushConstant@
+    -- storage class /can/ have 8-bit integer members. If this feature is not
+    -- enabled, 8-bit integer members /must/ not be used in such objects. This
+    -- also indicates whether shader modules /can/ declare the
+    -- @StoragePushConstant8@ capability.
+    storagePushConstant8 :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDevice8BitStorageFeatures
+
+instance ToCStruct PhysicalDevice8BitStorageFeatures where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevice8BitStorageFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (storageBuffer8BitAccess))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (uniformAndStorageBuffer8BitAccess))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (storagePushConstant8))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevice8BitStorageFeatures where
+  peekCStruct p = do
+    storageBuffer8BitAccess <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    uniformAndStorageBuffer8BitAccess <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    storagePushConstant8 <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PhysicalDevice8BitStorageFeatures
+             (bool32ToBool storageBuffer8BitAccess) (bool32ToBool uniformAndStorageBuffer8BitAccess) (bool32ToBool storagePushConstant8)
+
+instance Storable PhysicalDevice8BitStorageFeatures where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevice8BitStorageFeatures where
+  zero = PhysicalDevice8BitStorageFeatures
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage  (PhysicalDevice8BitStorageFeatures) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDevice8BitStorageFeatures
+
+instance ToCStruct PhysicalDevice8BitStorageFeatures
+instance Show PhysicalDevice8BitStorageFeatures
+
+instance FromCStruct PhysicalDevice8BitStorageFeatures
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs
@@ -0,0 +1,627 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address  ( getBufferOpaqueCaptureAddress
+                                                                 , getBufferDeviceAddress
+                                                                 , getDeviceMemoryOpaqueCaptureAddress
+                                                                 , PhysicalDeviceBufferDeviceAddressFeatures(..)
+                                                                 , BufferDeviceAddressInfo(..)
+                                                                 , BufferOpaqueCaptureAddressCreateInfo(..)
+                                                                 , MemoryOpaqueCaptureAddressAllocateInfo(..)
+                                                                 , DeviceMemoryOpaqueCaptureAddressInfo(..)
+                                                                 , StructureType(..)
+                                                                 , Result(..)
+                                                                 , BufferUsageFlagBits(..)
+                                                                 , BufferUsageFlags
+                                                                 , BufferCreateFlagBits(..)
+                                                                 , BufferCreateFlags
+                                                                 , MemoryAllocateFlagBits(..)
+                                                                 , MemoryAllocateFlags
+                                                                 ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Core10.BaseType (DeviceAddress)
+import Vulkan.Dynamic (DeviceCmds(pVkGetBufferDeviceAddress))
+import Vulkan.Dynamic (DeviceCmds(pVkGetBufferOpaqueCaptureAddress))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceMemoryOpaqueCaptureAddress))
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES))
+import Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlagBits(..))
+import Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
+import Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlagBits(..))
+import Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(..))
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetBufferOpaqueCaptureAddress
+  :: FunPtr (Ptr Device_T -> Ptr BufferDeviceAddressInfo -> IO Word64) -> Ptr Device_T -> Ptr BufferDeviceAddressInfo -> IO Word64
+
+-- | vkGetBufferOpaqueCaptureAddress - Query an opaque capture address of a
+-- buffer
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that the buffer was created on.
+--
+-- -   @pInfo@ is a pointer to a 'BufferDeviceAddressInfo' structure
+--     specifying the buffer to retrieve an address for.
+--
+-- = Description
+--
+-- The 64-bit return value is an opaque capture address of the start of
+-- @pInfo->buffer@.
+--
+-- If the buffer was created with a non-zero value of
+-- 'BufferOpaqueCaptureAddressCreateInfo'::@opaqueCaptureAddress@ the
+-- return value /must/ be the same address.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress>
+--     feature /must/ be enabled
+--
+-- -   If @device@ was created with multiple physical devices, then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'BufferDeviceAddressInfo' structure
+--
+-- = See Also
+--
+-- 'BufferDeviceAddressInfo', 'Vulkan.Core10.Handles.Device'
+getBufferOpaqueCaptureAddress :: forall io . MonadIO io => Device -> BufferDeviceAddressInfo -> io (Word64)
+getBufferOpaqueCaptureAddress device info = liftIO . evalContT $ do
+  let vkGetBufferOpaqueCaptureAddressPtr = pVkGetBufferOpaqueCaptureAddress (deviceCmds (device :: Device))
+  lift $ unless (vkGetBufferOpaqueCaptureAddressPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetBufferOpaqueCaptureAddress is null" Nothing Nothing
+  let vkGetBufferOpaqueCaptureAddress' = mkVkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddressPtr
+  pInfo <- ContT $ withCStruct (info)
+  r <- lift $ vkGetBufferOpaqueCaptureAddress' (deviceHandle (device)) pInfo
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetBufferDeviceAddress
+  :: FunPtr (Ptr Device_T -> Ptr BufferDeviceAddressInfo -> IO DeviceAddress) -> Ptr Device_T -> Ptr BufferDeviceAddressInfo -> IO DeviceAddress
+
+-- | vkGetBufferDeviceAddress - Query an address of a buffer
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that the buffer was created on.
+--
+-- -   @pInfo@ is a pointer to a 'BufferDeviceAddressInfo' structure
+--     specifying the buffer to retrieve an address for.
+--
+-- = Description
+--
+-- The 64-bit return value is an address of the start of @pInfo->buffer@.
+-- The address range starting at this value and whose size is the size of
+-- the buffer /can/ be used in a shader to access the memory bound to that
+-- buffer, using the @SPV_KHR_physical_storage_buffer@ extension or the
+-- equivalent @SPV_EXT_physical_storage_buffer@ extension and the
+-- @PhysicalStorageBuffer@ storage class. For example, this value /can/ be
+-- stored in a uniform buffer, and the shader /can/ read the value from the
+-- uniform buffer and use it to do a dependent read\/write to this buffer.
+-- A value of zero is reserved as a “null” pointer and /must/ not be
+-- returned as a valid buffer device address. All loads, stores, and
+-- atomics in a shader through @PhysicalStorageBuffer@ pointers /must/
+-- access addresses in the address range of some buffer.
+--
+-- If the buffer was created with a non-zero value of
+-- 'BufferOpaqueCaptureAddressCreateInfo'::@opaqueCaptureAddress@ or
+-- 'Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT'::@deviceAddress@
+-- the return value will be the same address that was returned at capture
+-- time.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressEXT ::bufferDeviceAddress>
+--     feature /must/ be enabled
+--
+-- -   If @device@ was created with multiple physical devices, then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDeviceEXT ::bufferDeviceAddressMultiDevice>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'BufferDeviceAddressInfo' structure
+--
+-- = See Also
+--
+-- 'BufferDeviceAddressInfo', 'Vulkan.Core10.Handles.Device'
+getBufferDeviceAddress :: forall io . MonadIO io => Device -> BufferDeviceAddressInfo -> io (DeviceAddress)
+getBufferDeviceAddress device info = liftIO . evalContT $ do
+  let vkGetBufferDeviceAddressPtr = pVkGetBufferDeviceAddress (deviceCmds (device :: Device))
+  lift $ unless (vkGetBufferDeviceAddressPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetBufferDeviceAddress is null" Nothing Nothing
+  let vkGetBufferDeviceAddress' = mkVkGetBufferDeviceAddress vkGetBufferDeviceAddressPtr
+  pInfo <- ContT $ withCStruct (info)
+  r <- lift $ vkGetBufferDeviceAddress' (deviceHandle (device)) pInfo
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceMemoryOpaqueCaptureAddress
+  :: FunPtr (Ptr Device_T -> Ptr DeviceMemoryOpaqueCaptureAddressInfo -> IO Word64) -> Ptr Device_T -> Ptr DeviceMemoryOpaqueCaptureAddressInfo -> IO Word64
+
+-- | vkGetDeviceMemoryOpaqueCaptureAddress - Query an opaque capture address
+-- of a memory object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that the memory object was allocated
+--     on.
+--
+-- -   @pInfo@ is a pointer to a 'DeviceMemoryOpaqueCaptureAddressInfo'
+--     structure specifying the memory object to retrieve an address for.
+--
+-- = Description
+--
+-- The 64-bit return value is an opaque address representing the start of
+-- @pInfo->memory@.
+--
+-- If the memory object was allocated with a non-zero value of
+-- 'MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@, the
+-- return value /must/ be the same address.
+--
+-- Note
+--
+-- The expected usage for these opaque addresses is only for trace
+-- capture\/replay tools to store these addresses in a trace and
+-- subsequently specify them during replay.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress>
+--     feature /must/ be enabled
+--
+-- -   If @device@ was created with multiple physical devices, then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'DeviceMemoryOpaqueCaptureAddressInfo' structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'DeviceMemoryOpaqueCaptureAddressInfo'
+getDeviceMemoryOpaqueCaptureAddress :: forall io . MonadIO io => Device -> DeviceMemoryOpaqueCaptureAddressInfo -> io (Word64)
+getDeviceMemoryOpaqueCaptureAddress device info = liftIO . evalContT $ do
+  let vkGetDeviceMemoryOpaqueCaptureAddressPtr = pVkGetDeviceMemoryOpaqueCaptureAddress (deviceCmds (device :: Device))
+  lift $ unless (vkGetDeviceMemoryOpaqueCaptureAddressPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceMemoryOpaqueCaptureAddress is null" Nothing Nothing
+  let vkGetDeviceMemoryOpaqueCaptureAddress' = mkVkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddressPtr
+  pInfo <- ContT $ withCStruct (info)
+  r <- lift $ vkGetDeviceMemoryOpaqueCaptureAddress' (deviceHandle (device)) pInfo
+  pure $ (r)
+
+
+-- | VkPhysicalDeviceBufferDeviceAddressFeatures - Structure describing
+-- buffer address features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceBufferDeviceAddressFeatures' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- Note
+--
+-- @bufferDeviceAddressMultiDevice@ exists to allow certain legacy
+-- platforms to be able to support @bufferDeviceAddress@ without needing to
+-- support shared GPU virtual addresses for multi-device configurations.
+--
+-- See 'getBufferDeviceAddress' for more information.
+--
+-- If the 'PhysicalDeviceBufferDeviceAddressFeatures' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceBufferDeviceAddressFeatures' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceBufferDeviceAddressFeatures = PhysicalDeviceBufferDeviceAddressFeatures
+  { -- | @bufferDeviceAddress@ indicates that the implementation supports
+    -- accessing buffer memory in shaders as storage buffers via an address
+    -- queried from 'getBufferDeviceAddress'.
+    bufferDeviceAddress :: Bool
+  , -- | @bufferDeviceAddressCaptureReplay@ indicates that the implementation
+    -- supports saving and reusing buffer and device addresses, e.g. for trace
+    -- capture and replay.
+    bufferDeviceAddressCaptureReplay :: Bool
+  , -- | @bufferDeviceAddressMultiDevice@ indicates that the implementation
+    -- supports the @bufferDeviceAddress@ and @rayTracing@ features for logical
+    -- devices created with multiple physical devices. If this feature is not
+    -- supported, buffer and acceleration structure addresses /must/ not be
+    -- queried on a logical device created with more than one physical device.
+    bufferDeviceAddressMultiDevice :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceBufferDeviceAddressFeatures
+
+instance ToCStruct PhysicalDeviceBufferDeviceAddressFeatures where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceBufferDeviceAddressFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddress))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressCaptureReplay))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressMultiDevice))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceBufferDeviceAddressFeatures where
+  peekCStruct p = do
+    bufferDeviceAddress <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    bufferDeviceAddressCaptureReplay <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    bufferDeviceAddressMultiDevice <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PhysicalDeviceBufferDeviceAddressFeatures
+             (bool32ToBool bufferDeviceAddress) (bool32ToBool bufferDeviceAddressCaptureReplay) (bool32ToBool bufferDeviceAddressMultiDevice)
+
+instance Storable PhysicalDeviceBufferDeviceAddressFeatures where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceBufferDeviceAddressFeatures where
+  zero = PhysicalDeviceBufferDeviceAddressFeatures
+           zero
+           zero
+           zero
+
+
+-- | VkBufferDeviceAddressInfo - Structure specifying the buffer to query an
+-- address for
+--
+-- == Valid Usage
+--
+-- -   If @buffer@ is non-sparse and was not created with the
+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
+--     flag, then it /must/ be bound completely and contiguously to a
+--     single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @buffer@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getBufferDeviceAddress',
+-- 'Vulkan.Extensions.VK_EXT_buffer_device_address.getBufferDeviceAddressEXT',
+-- 'Vulkan.Extensions.VK_KHR_buffer_device_address.getBufferDeviceAddressKHR',
+-- 'getBufferOpaqueCaptureAddress',
+-- 'Vulkan.Extensions.VK_KHR_buffer_device_address.getBufferOpaqueCaptureAddressKHR'
+data BufferDeviceAddressInfo = BufferDeviceAddressInfo
+  { -- | @buffer@ specifies the buffer whose address is being queried.
+    buffer :: Buffer }
+  deriving (Typeable)
+deriving instance Show BufferDeviceAddressInfo
+
+instance ToCStruct BufferDeviceAddressInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferDeviceAddressInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Buffer)) (buffer)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)
+    f
+
+instance FromCStruct BufferDeviceAddressInfo where
+  peekCStruct p = do
+    buffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
+    pure $ BufferDeviceAddressInfo
+             buffer
+
+instance Storable BufferDeviceAddressInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BufferDeviceAddressInfo where
+  zero = BufferDeviceAddressInfo
+           zero
+
+
+-- | VkBufferOpaqueCaptureAddressCreateInfo - Request a specific address for
+-- a buffer
+--
+-- = Description
+--
+-- If @opaqueCaptureAddress@ is zero, no specific address is requested.
+--
+-- If @opaqueCaptureAddress@ is not zero, then it /should/ be an address
+-- retrieved from 'getBufferOpaqueCaptureAddress' for an identically
+-- created buffer on the same implementation.
+--
+-- If this structure is not present, it is as if @opaqueCaptureAddress@ is
+-- zero.
+--
+-- Apps /should/ avoid creating buffers with app-provided addresses and
+-- implementation-provided addresses in the same process, to reduce the
+-- likelihood of
+-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'
+-- errors.
+--
+-- Note
+--
+-- The expected usage for this is that a trace capture\/replay tool will
+-- add the
+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
+-- flag to all buffers that use
+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT',
+-- and during capture will save the queried opaque device addresses in the
+-- trace. During replay, the buffers will be created specifying the
+-- original address so any address values stored in the trace data will
+-- remain valid.
+--
+-- Implementations are expected to separate such buffers in the GPU address
+-- space so normal allocations will avoid using these addresses.
+-- Apps\/tools should avoid mixing app-provided and implementation-provided
+-- addresses for buffers created with
+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT',
+-- to avoid address space allocation conflicts.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data BufferOpaqueCaptureAddressCreateInfo = BufferOpaqueCaptureAddressCreateInfo
+  { -- | @opaqueCaptureAddress@ is the opaque capture address requested for the
+    -- buffer.
+    opaqueCaptureAddress :: Word64 }
+  deriving (Typeable)
+deriving instance Show BufferOpaqueCaptureAddressCreateInfo
+
+instance ToCStruct BufferOpaqueCaptureAddressCreateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferOpaqueCaptureAddressCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (opaqueCaptureAddress)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct BufferOpaqueCaptureAddressCreateInfo where
+  peekCStruct p = do
+    opaqueCaptureAddress <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
+    pure $ BufferOpaqueCaptureAddressCreateInfo
+             opaqueCaptureAddress
+
+instance Storable BufferOpaqueCaptureAddressCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BufferOpaqueCaptureAddressCreateInfo where
+  zero = BufferOpaqueCaptureAddressCreateInfo
+           zero
+
+
+-- | VkMemoryOpaqueCaptureAddressAllocateInfo - Request a specific address
+-- for a memory allocation
+--
+-- = Description
+--
+-- If @opaqueCaptureAddress@ is zero, no specific address is requested.
+--
+-- If @opaqueCaptureAddress@ is not zero, it /should/ be an address
+-- retrieved from 'getDeviceMemoryOpaqueCaptureAddress' on an identically
+-- created memory allocation on the same implementation.
+--
+-- Note
+--
+-- In most cases, it is expected that a non-zero @opaqueAddress@ is an
+-- address retrieved from 'getDeviceMemoryOpaqueCaptureAddress' on an
+-- identically created memory allocation. If this is not the case, it
+-- likely that
+-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS' errors
+-- will occur.
+--
+-- This is, however, not a strict requirement because trace capture\/replay
+-- tools may need to adjust memory allocation parameters for imported
+-- memory.
+--
+-- If this structure is not present, it is as if @opaqueCaptureAddress@ is
+-- zero.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data MemoryOpaqueCaptureAddressAllocateInfo = MemoryOpaqueCaptureAddressAllocateInfo
+  { -- | @opaqueCaptureAddress@ is the opaque capture address requested for the
+    -- memory allocation.
+    opaqueCaptureAddress :: Word64 }
+  deriving (Typeable)
+deriving instance Show MemoryOpaqueCaptureAddressAllocateInfo
+
+instance ToCStruct MemoryOpaqueCaptureAddressAllocateInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryOpaqueCaptureAddressAllocateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (opaqueCaptureAddress)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct MemoryOpaqueCaptureAddressAllocateInfo where
+  peekCStruct p = do
+    opaqueCaptureAddress <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
+    pure $ MemoryOpaqueCaptureAddressAllocateInfo
+             opaqueCaptureAddress
+
+instance Storable MemoryOpaqueCaptureAddressAllocateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryOpaqueCaptureAddressAllocateInfo where
+  zero = MemoryOpaqueCaptureAddressAllocateInfo
+           zero
+
+
+-- | VkDeviceMemoryOpaqueCaptureAddressInfo - Structure specifying the memory
+-- object to query an address for
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getDeviceMemoryOpaqueCaptureAddress',
+-- 'Vulkan.Extensions.VK_KHR_buffer_device_address.getDeviceMemoryOpaqueCaptureAddressKHR'
+data DeviceMemoryOpaqueCaptureAddressInfo = DeviceMemoryOpaqueCaptureAddressInfo
+  { -- | @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory' handle
+    memory :: DeviceMemory }
+  deriving (Typeable)
+deriving instance Show DeviceMemoryOpaqueCaptureAddressInfo
+
+instance ToCStruct DeviceMemoryOpaqueCaptureAddressInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceMemoryOpaqueCaptureAddressInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
+    f
+
+instance FromCStruct DeviceMemoryOpaqueCaptureAddressInfo where
+  peekCStruct p = do
+    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
+    pure $ DeviceMemoryOpaqueCaptureAddressInfo
+             memory
+
+instance Storable DeviceMemoryOpaqueCaptureAddressInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceMemoryOpaqueCaptureAddressInfo where
+  zero = DeviceMemoryOpaqueCaptureAddressInfo
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs-boot
@@ -0,0 +1,50 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address  ( BufferDeviceAddressInfo
+                                                                 , BufferOpaqueCaptureAddressCreateInfo
+                                                                 , DeviceMemoryOpaqueCaptureAddressInfo
+                                                                 , MemoryOpaqueCaptureAddressAllocateInfo
+                                                                 , PhysicalDeviceBufferDeviceAddressFeatures
+                                                                 ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data BufferDeviceAddressInfo
+
+instance ToCStruct BufferDeviceAddressInfo
+instance Show BufferDeviceAddressInfo
+
+instance FromCStruct BufferDeviceAddressInfo
+
+
+data BufferOpaqueCaptureAddressCreateInfo
+
+instance ToCStruct BufferOpaqueCaptureAddressCreateInfo
+instance Show BufferOpaqueCaptureAddressCreateInfo
+
+instance FromCStruct BufferOpaqueCaptureAddressCreateInfo
+
+
+data DeviceMemoryOpaqueCaptureAddressInfo
+
+instance ToCStruct DeviceMemoryOpaqueCaptureAddressInfo
+instance Show DeviceMemoryOpaqueCaptureAddressInfo
+
+instance FromCStruct DeviceMemoryOpaqueCaptureAddressInfo
+
+
+data MemoryOpaqueCaptureAddressAllocateInfo
+
+instance ToCStruct MemoryOpaqueCaptureAddressAllocateInfo
+instance Show MemoryOpaqueCaptureAddressAllocateInfo
+
+instance FromCStruct MemoryOpaqueCaptureAddressAllocateInfo
+
+
+data PhysicalDeviceBufferDeviceAddressFeatures
+
+instance ToCStruct PhysicalDeviceBufferDeviceAddressFeatures
+instance Show PhysicalDeviceBufferDeviceAddressFeatures
+
+instance FromCStruct PhysicalDeviceBufferDeviceAddressFeatures
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs
@@ -0,0 +1,1937 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2  ( createRenderPass2
+                                                              , cmdBeginRenderPass2
+                                                              , cmdUseRenderPass2
+                                                              , cmdNextSubpass2
+                                                              , cmdEndRenderPass2
+                                                              , AttachmentDescription2(..)
+                                                              , AttachmentReference2(..)
+                                                              , SubpassDescription2(..)
+                                                              , SubpassDependency2(..)
+                                                              , RenderPassCreateInfo2(..)
+                                                              , SubpassBeginInfo(..)
+                                                              , SubpassEndInfo(..)
+                                                              , StructureType(..)
+                                                              ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (maybePeek)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Extends (peekSomeCStruct)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.CStruct.Extends (withSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Enums.AttachmentDescriptionFlagBits (AttachmentDescriptionFlags)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentDescriptionStencilLayout)
+import Vulkan.Core10.Enums.AttachmentLoadOp (AttachmentLoadOp)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentReferenceStencilLayout)
+import Vulkan.Core10.Enums.AttachmentStoreOp (AttachmentStoreOp)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBeginRenderPass2))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdEndRenderPass2))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdNextSubpass2))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateRenderPass2))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Handles (RenderPass)
+import Vulkan.Core10.Handles (RenderPass(..))
+import Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo)
+import Vulkan.Core10.Enums.RenderPassCreateFlagBits (RenderPassCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (RenderPassFragmentDensityMapCreateInfoEXT)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Enums.SubpassContents (SubpassContents)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (SubpassDescriptionDepthStencilResolve)
+import Vulkan.Core10.Enums.SubpassDescriptionFlagBits (SubpassDescriptionFlags)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_BEGIN_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_END_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateRenderPass2
+  :: FunPtr (Ptr Device_T -> Ptr (RenderPassCreateInfo2 a) -> Ptr AllocationCallbacks -> Ptr RenderPass -> IO Result) -> Ptr Device_T -> Ptr (RenderPassCreateInfo2 a) -> Ptr AllocationCallbacks -> Ptr RenderPass -> IO Result
+
+-- | vkCreateRenderPass2 - Create a new render pass object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the render pass.
+--
+-- -   @pCreateInfo@ is a pointer to a 'RenderPassCreateInfo2' structure
+--     describing the parameters of the render pass.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pRenderPass@ is a pointer to a 'Vulkan.Core10.Handles.RenderPass'
+--     handle in which the resulting render pass object is returned.
+--
+-- = Description
+--
+-- This command is functionally identical to
+-- 'Vulkan.Core10.Pass.createRenderPass', but includes extensible
+-- sub-structures that include @sType@ and @pNext@ parameters, allowing
+-- them to be more easily extended.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'RenderPassCreateInfo2' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pRenderPass@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.RenderPass' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.RenderPass',
+-- 'RenderPassCreateInfo2'
+createRenderPass2 :: forall a io . (Extendss RenderPassCreateInfo2 a, PokeChain a, MonadIO io) => Device -> RenderPassCreateInfo2 a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (RenderPass)
+createRenderPass2 device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateRenderPass2Ptr = pVkCreateRenderPass2 (deviceCmds (device :: Device))
+  lift $ unless (vkCreateRenderPass2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateRenderPass2 is null" Nothing Nothing
+  let vkCreateRenderPass2' = mkVkCreateRenderPass2 vkCreateRenderPass2Ptr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPRenderPass <- ContT $ bracket (callocBytes @RenderPass 8) free
+  r <- lift $ vkCreateRenderPass2' (deviceHandle (device)) pCreateInfo pAllocator (pPRenderPass)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pRenderPass <- lift $ peek @RenderPass pPRenderPass
+  pure $ (pRenderPass)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBeginRenderPass2
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (RenderPassBeginInfo a) -> Ptr SubpassBeginInfo -> IO ()) -> Ptr CommandBuffer_T -> Ptr (RenderPassBeginInfo a) -> Ptr SubpassBeginInfo -> IO ()
+
+-- | vkCmdBeginRenderPass2 - Begin a new render pass
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer in which to record the
+--     command.
+--
+-- -   @pRenderPassBegin@ is a pointer to a
+--     'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo' structure
+--     specifying the render pass to begin an instance of, and the
+--     framebuffer the instance uses.
+--
+-- -   @pSubpassBeginInfo@ is a pointer to a 'SubpassBeginInfo' structure
+--     containing information about the subpass which is about to begin
+--     rendering.
+--
+-- = 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
+--
+-- -   Both the @framebuffer@ and @renderPass@ members of
+--     @pRenderPassBegin@ /must/ have been created on the same
+--     'Vulkan.Core10.Handles.Device' that @commandBuffer@ was allocated on
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If any of the @stencilInitialLayout@ or @stencilFinalLayout@ member
+--     of the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
+--     structures or the @stencilLayout@ member of the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' or
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the
+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'
+--     structures specified when creating the render pass specified in the
+--     @renderPass@ member of @pRenderPassBegin@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
+--     then the corresponding attachment image view of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
+--
+-- -   If any of the @initialLayout@ members of the
+--     'Vulkan.Core10.Pass.AttachmentDescription' structures specified when
+--     creating the render pass specified in the @renderPass@ member of
+--     @pRenderPassBegin@ is not
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', then each
+--     such @initialLayout@ /must/ be equal to the current layout of the
+--     corresponding attachment image subresource of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@
+--
+-- -   The @srcStageMask@ and @dstStageMask@ members of any element of the
+--     @pDependencies@ member of 'Vulkan.Core10.Pass.RenderPassCreateInfo'
+--     used to create @renderPass@ /must/ be supported by the capabilities
+--     of the queue family identified by the @queueFamilyIndex@ member of
+--     the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' used to create
+--     the command pool which @commandBuffer@ was allocated from
+--
+-- -   For any attachment in @framebuffer@ that is used by @renderPass@ and
+--     is bound to memory locations that are also bound to another
+--     attachment used by @renderPass@, and if at least one of those uses
+--     causes either attachment to be written to, both attachments /must/
+--     have had the
+--     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'
+--     set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pRenderPassBegin@ /must/ be a valid pointer to a valid
+--     'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo' structure
+--
+-- -   @pSubpassBeginInfo@ /must/ be a valid pointer to a valid
+--     'SubpassBeginInfo' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @commandBuffer@ /must/ be a primary
+--     'Vulkan.Core10.Handles.CommandBuffer'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',
+-- 'SubpassBeginInfo'
+cmdBeginRenderPass2 :: forall a io . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassBeginInfo -> io ()
+cmdBeginRenderPass2 commandBuffer renderPassBegin subpassBeginInfo = liftIO . evalContT $ do
+  let vkCmdBeginRenderPass2Ptr = pVkCmdBeginRenderPass2 (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBeginRenderPass2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginRenderPass2 is null" Nothing Nothing
+  let vkCmdBeginRenderPass2' = mkVkCmdBeginRenderPass2 vkCmdBeginRenderPass2Ptr
+  pRenderPassBegin <- ContT $ withCStruct (renderPassBegin)
+  pSubpassBeginInfo <- ContT $ withCStruct (subpassBeginInfo)
+  lift $ vkCmdBeginRenderPass2' (commandBufferHandle (commandBuffer)) pRenderPassBegin pSubpassBeginInfo
+  pure $ ()
+
+-- | This function will call the supplied action between calls to
+-- 'cmdBeginRenderPass2' and 'cmdEndRenderPass2'
+--
+-- Note that 'cmdEndRenderPass2' is *not* called if an exception is thrown
+-- by the inner action.
+cmdUseRenderPass2 :: forall a io r . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassBeginInfo -> SubpassEndInfo -> io r -> io r
+cmdUseRenderPass2 commandBuffer pRenderPassBegin pSubpassBeginInfo pSubpassEndInfo a =
+  (cmdBeginRenderPass2 commandBuffer pRenderPassBegin pSubpassBeginInfo) *> a <* (cmdEndRenderPass2 commandBuffer pSubpassEndInfo)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdNextSubpass2
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr SubpassBeginInfo -> Ptr SubpassEndInfo -> IO ()) -> Ptr CommandBuffer_T -> Ptr SubpassBeginInfo -> Ptr SubpassEndInfo -> IO ()
+
+-- | vkCmdNextSubpass2 - Transition to the next subpass of a render pass
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer in which to record the
+--     command.
+--
+-- -   @pSubpassBeginInfo@ is a pointer to a 'SubpassBeginInfo' structure
+--     containing information about the subpass which is about to begin
+--     rendering.
+--
+-- -   @pSubpassEndInfo@ is a pointer to a 'SubpassEndInfo' structure
+--     containing information about how the previous subpass will be ended.
+--
+-- = Description
+--
+-- 'cmdNextSubpass2' is semantically identical to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdNextSubpass', except that it is
+-- extensible, and that @contents@ is provided as part of an extensible
+-- structure instead of as a flat parameter.
+--
+-- == Valid Usage
+--
+-- -   The current subpass index /must/ be less than the number of
+--     subpasses in the render pass minus one
+--
+-- -   This command /must/ not be recorded when transform feedback is
+--     active
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pSubpassBeginInfo@ /must/ be a valid pointer to a valid
+--     'SubpassBeginInfo' structure
+--
+-- -   @pSubpassEndInfo@ /must/ be a valid pointer to a valid
+--     'SubpassEndInfo' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   @commandBuffer@ /must/ be a primary
+--     'Vulkan.Core10.Handles.CommandBuffer'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'SubpassBeginInfo',
+-- 'SubpassEndInfo'
+cmdNextSubpass2 :: forall io . MonadIO io => CommandBuffer -> SubpassBeginInfo -> SubpassEndInfo -> io ()
+cmdNextSubpass2 commandBuffer subpassBeginInfo subpassEndInfo = liftIO . evalContT $ do
+  let vkCmdNextSubpass2Ptr = pVkCmdNextSubpass2 (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdNextSubpass2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdNextSubpass2 is null" Nothing Nothing
+  let vkCmdNextSubpass2' = mkVkCmdNextSubpass2 vkCmdNextSubpass2Ptr
+  pSubpassBeginInfo <- ContT $ withCStruct (subpassBeginInfo)
+  pSubpassEndInfo <- ContT $ withCStruct (subpassEndInfo)
+  lift $ vkCmdNextSubpass2' (commandBufferHandle (commandBuffer)) pSubpassBeginInfo pSubpassEndInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdEndRenderPass2
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr SubpassEndInfo -> IO ()) -> Ptr CommandBuffer_T -> Ptr SubpassEndInfo -> IO ()
+
+-- | vkCmdEndRenderPass2 - End the current render pass
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer in which to end the current
+--     render pass instance.
+--
+-- -   @pSubpassEndInfo@ is a pointer to a 'SubpassEndInfo' structure
+--     containing information about how the previous subpass will be ended.
+--
+-- = Description
+--
+-- 'cmdEndRenderPass2' is semantically identical to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdEndRenderPass', except that it
+-- is extensible.
+--
+-- == Valid Usage
+--
+-- -   The current subpass index /must/ be equal to the number of subpasses
+--     in the render pass minus one
+--
+-- -   This command /must/ not be recorded when transform feedback is
+--     active
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pSubpassEndInfo@ /must/ be a valid pointer to a valid
+--     'SubpassEndInfo' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   @commandBuffer@ /must/ be a primary
+--     'Vulkan.Core10.Handles.CommandBuffer'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'SubpassEndInfo'
+cmdEndRenderPass2 :: forall io . MonadIO io => CommandBuffer -> SubpassEndInfo -> io ()
+cmdEndRenderPass2 commandBuffer subpassEndInfo = liftIO . evalContT $ do
+  let vkCmdEndRenderPass2Ptr = pVkCmdEndRenderPass2 (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdEndRenderPass2Ptr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndRenderPass2 is null" Nothing Nothing
+  let vkCmdEndRenderPass2' = mkVkCmdEndRenderPass2 vkCmdEndRenderPass2Ptr
+  pSubpassEndInfo <- ContT $ withCStruct (subpassEndInfo)
+  lift $ vkCmdEndRenderPass2' (commandBufferHandle (commandBuffer)) pSubpassEndInfo
+  pure $ ()
+
+
+-- | VkAttachmentDescription2 - Structure specifying an attachment
+-- description
+--
+-- = Description
+--
+-- Parameters defined by this structure with the same name as those in
+-- 'Vulkan.Core10.Pass.AttachmentDescription' have the identical effect to
+-- those parameters.
+--
+-- If the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+-- feature is enabled, and @format@ is a depth\/stencil format,
+-- @initialLayout@ and @finalLayout@ /can/ be set to a layout that only
+-- specifies the layout of the depth aspect.
+--
+-- If @format@ is a depth\/stencil format, and @initialLayout@ only
+-- specifies the initial layout of the depth aspect of the attachment, the
+-- initial layout of the stencil aspect is specified by the
+-- @stencilInitialLayout@ member of a
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
+-- structure included in the @pNext@ chain. Otherwise, @initialLayout@
+-- describes the initial layout for all relevant image aspects.
+--
+-- If @format@ is a depth\/stencil format, and @finalLayout@ only specifies
+-- the final layout of the depth aspect of the attachment, the final layout
+-- of the stencil aspect is specified by the @stencilFinalLayout@ member of
+-- a
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
+-- structure included in the @pNext@ chain. Otherwise, @finalLayout@
+-- describes the final layout for all relevant image aspects.
+--
+-- == Valid Usage
+--
+-- -   @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
+--
+-- -   If @format@ is a color format, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format, @initialLayout@ /must/ not
+--     be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
+--
+-- -   If @format@ is a color format, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+--     feature is not enabled, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+--     feature is not enabled, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a color format, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a color format, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format which includes both depth and
+--     stencil aspects, and @initialLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     the @pNext@ chain /must/ include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
+--     structure
+--
+-- -   If @format@ is a depth\/stencil format which includes both depth and
+--     stencil aspects, and @finalLayout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     the @pNext@ chain /must/ include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'
+--     structure
+--
+-- -   If @format@ is a depth\/stencil format which includes only the depth
+--     aspect, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format which includes only the depth
+--     aspect, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format which includes only the
+--     stencil aspect, @initialLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
+--
+-- -   If @format@ is a depth\/stencil format which includes only the
+--     stencil aspect, @finalLayout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2'
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlagBits'
+--     values
+--
+-- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- -   @samples@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+--
+-- -   @loadOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value
+--
+-- -   @storeOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value
+--
+-- -   @stencilLoadOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value
+--
+-- -   @stencilStoreOp@ /must/ be a valid
+--     'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value
+--
+-- -   @initialLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @finalLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlags',
+-- 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp',
+-- 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp',
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout', 'RenderPassCreateInfo2',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AttachmentDescription2 (es :: [Type]) = AttachmentDescription2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlagBits'
+    -- specifying additional properties of the attachment.
+    flags :: AttachmentDescriptionFlags
+  , -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' value specifying the
+    -- format of the image that will be used for the attachment.
+    format :: Format
+  , -- | @samples@ is the number of samples of the image as defined in
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'.
+    samples :: SampleCountFlagBits
+  , -- | @loadOp@ is a 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp'
+    -- value specifying how the contents of color and depth components of the
+    -- attachment are treated at the beginning of the subpass where it is first
+    -- used.
+    loadOp :: AttachmentLoadOp
+  , -- | @storeOp@ is a 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp'
+    -- value specifying how the contents of color and depth components of the
+    -- attachment are treated at the end of the subpass where it is last used.
+    storeOp :: AttachmentStoreOp
+  , -- | @stencilLoadOp@ is a
+    -- 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value specifying
+    -- how the contents of stencil components of the attachment are treated at
+    -- the beginning of the subpass where it is first used.
+    stencilLoadOp :: AttachmentLoadOp
+  , -- | @stencilStoreOp@ is a
+    -- 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value
+    -- specifying how the contents of stencil components of the attachment are
+    -- treated at the end of the last subpass where it is used.
+    stencilStoreOp :: AttachmentStoreOp
+  , -- | @initialLayout@ is the layout the attachment image subresource will be
+    -- in when a render pass instance begins.
+    initialLayout :: ImageLayout
+  , -- | @finalLayout@ is the layout the attachment image subresource will be
+    -- transitioned to when a render pass instance ends.
+    finalLayout :: ImageLayout
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (AttachmentDescription2 es)
+
+instance Extensible AttachmentDescription2 where
+  extensibleType = STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2
+  setNext x next = x{next = next}
+  getNext AttachmentDescription2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AttachmentDescription2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @AttachmentDescriptionStencilLayout = Just f
+    | otherwise = Nothing
+
+instance (Extendss AttachmentDescription2 es, PokeChain es) => ToCStruct (AttachmentDescription2 es) where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AttachmentDescription2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr AttachmentDescriptionFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Format)) (format)
+    lift $ poke ((p `plusPtr` 24 :: Ptr SampleCountFlagBits)) (samples)
+    lift $ poke ((p `plusPtr` 28 :: Ptr AttachmentLoadOp)) (loadOp)
+    lift $ poke ((p `plusPtr` 32 :: Ptr AttachmentStoreOp)) (storeOp)
+    lift $ poke ((p `plusPtr` 36 :: Ptr AttachmentLoadOp)) (stencilLoadOp)
+    lift $ poke ((p `plusPtr` 40 :: Ptr AttachmentStoreOp)) (stencilStoreOp)
+    lift $ poke ((p `plusPtr` 44 :: Ptr ImageLayout)) (initialLayout)
+    lift $ poke ((p `plusPtr` 48 :: Ptr ImageLayout)) (finalLayout)
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr Format)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr SampleCountFlagBits)) (zero)
+    lift $ poke ((p `plusPtr` 28 :: Ptr AttachmentLoadOp)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr AttachmentStoreOp)) (zero)
+    lift $ poke ((p `plusPtr` 36 :: Ptr AttachmentLoadOp)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr AttachmentStoreOp)) (zero)
+    lift $ poke ((p `plusPtr` 44 :: Ptr ImageLayout)) (zero)
+    lift $ poke ((p `plusPtr` 48 :: Ptr ImageLayout)) (zero)
+    lift $ f
+
+instance (Extendss AttachmentDescription2 es, PeekChain es) => FromCStruct (AttachmentDescription2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @AttachmentDescriptionFlags ((p `plusPtr` 16 :: Ptr AttachmentDescriptionFlags))
+    format <- peek @Format ((p `plusPtr` 20 :: Ptr Format))
+    samples <- peek @SampleCountFlagBits ((p `plusPtr` 24 :: Ptr SampleCountFlagBits))
+    loadOp <- peek @AttachmentLoadOp ((p `plusPtr` 28 :: Ptr AttachmentLoadOp))
+    storeOp <- peek @AttachmentStoreOp ((p `plusPtr` 32 :: Ptr AttachmentStoreOp))
+    stencilLoadOp <- peek @AttachmentLoadOp ((p `plusPtr` 36 :: Ptr AttachmentLoadOp))
+    stencilStoreOp <- peek @AttachmentStoreOp ((p `plusPtr` 40 :: Ptr AttachmentStoreOp))
+    initialLayout <- peek @ImageLayout ((p `plusPtr` 44 :: Ptr ImageLayout))
+    finalLayout <- peek @ImageLayout ((p `plusPtr` 48 :: Ptr ImageLayout))
+    pure $ AttachmentDescription2
+             next flags format samples loadOp storeOp stencilLoadOp stencilStoreOp initialLayout finalLayout
+
+instance es ~ '[] => Zero (AttachmentDescription2 es) where
+  zero = AttachmentDescription2
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkAttachmentReference2 - Structure specifying an attachment reference
+--
+-- = Description
+--
+-- Parameters defined by this structure with the same name as those in
+-- 'Vulkan.Core10.Pass.AttachmentReference' have the identical effect to
+-- those parameters.
+--
+-- @aspectMask@ is ignored when this structure is used to describe anything
+-- other than an input attachment reference.
+--
+-- If the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+-- feature is enabled, and @attachment@ has a depth\/stencil format,
+-- @layout@ /can/ be set to a layout that only specifies the layout of the
+-- depth aspect.
+--
+-- If @layout@ only specifies the layout of the depth aspect of the
+-- attachment, the layout of the stencil aspect is specified by the
+-- @stencilLayout@ member of a
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'
+-- structure included in the @pNext@ chain. Otherwise, @layout@ describes
+-- the layout for all relevant image aspects.
+--
+-- == Valid Usage
+--
+-- -   If @attachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@ /must/ not
+--     be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED', or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR'
+--
+-- -   If @attachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@
+--     does not include
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--     or 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',
+--     @layout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
+--
+-- -   If @attachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@
+--     does not include
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
+--     @layout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
+--     feature is not enabled, and @attachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@ /must/ not
+--     be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',
+--
+-- -   If @attachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@
+--     includes
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',
+--     @layout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',
+--
+-- -   If @attachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@
+--     includes both
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' and
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',
+--     and @layout@ is
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+--     the @pNext@ chain /must/ include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'
+--     structure
+--
+-- -   If @attachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@
+--     includes only
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
+--     then @layout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   If @attachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@
+--     includes only
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
+--     then @layout@ /must/ not be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2'
+--
+-- -   @layout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'SubpassDescription2',
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve'
+data AttachmentReference2 (es :: [Type]) = AttachmentReference2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @attachment@ is either an integer value identifying an attachment at the
+    -- corresponding index in
+    -- 'Vulkan.Core10.Pass.RenderPassCreateInfo'::@pAttachments@, or
+    -- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' to signify that this
+    -- attachment is not used.
+    attachment :: Word32
+  , -- | @layout@ is a 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+    -- specifying the layout the attachment uses during the subpass.
+    layout :: ImageLayout
+  , -- | @aspectMask@ is a mask of which aspect(s) /can/ be accessed within the
+    -- specified subpass as an input attachment.
+    aspectMask :: ImageAspectFlags
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (AttachmentReference2 es)
+
+instance Extensible AttachmentReference2 where
+  extensibleType = STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2
+  setNext x next = x{next = next}
+  getNext AttachmentReference2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AttachmentReference2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @AttachmentReferenceStencilLayout = Just f
+    | otherwise = Nothing
+
+instance (Extendss AttachmentReference2 es, PokeChain es) => ToCStruct (AttachmentReference2 es) where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AttachmentReference2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (attachment)
+    lift $ poke ((p `plusPtr` 20 :: Ptr ImageLayout)) (layout)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageAspectFlags)) (aspectMask)
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 20 :: Ptr ImageLayout)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageAspectFlags)) (zero)
+    lift $ f
+
+instance (Extendss AttachmentReference2 es, PeekChain es) => FromCStruct (AttachmentReference2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    attachment <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    layout <- peek @ImageLayout ((p `plusPtr` 20 :: Ptr ImageLayout))
+    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 24 :: Ptr ImageAspectFlags))
+    pure $ AttachmentReference2
+             next attachment layout aspectMask
+
+instance es ~ '[] => Zero (AttachmentReference2 es) where
+  zero = AttachmentReference2
+           ()
+           zero
+           zero
+           zero
+
+
+-- | VkSubpassDescription2 - Structure specifying a subpass description
+--
+-- = Description
+--
+-- Parameters defined by this structure with the same name as those in
+-- 'Vulkan.Core10.Pass.SubpassDescription' have the identical effect to
+-- those parameters.
+--
+-- @viewMask@ has the same effect for the described subpass as
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'::@pViewMasks@
+-- has on each corresponding subpass.
+--
+-- == Valid Usage
+--
+-- -   @pipelineBindPoint@ /must/ be
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   @colorAttachmentCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxColorAttachments@
+--
+-- -   If the first use of an attachment in this render pass is as an input
+--     attachment, and the attachment is not also used as a color or
+--     depth\/stencil attachment in the same subpass, then @loadOp@ /must/
+--     not be
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'
+--
+-- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment
+--     that does not have the value
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the corresponding
+--     color attachment /must/ not have the value
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment
+--     that is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the
+--     corresponding color attachment /must/ not have a sample count of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If @pResolveAttachments@ is not @NULL@, each resolve attachment that
+--     is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have a
+--     sample count of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   Any given element of @pResolveAttachments@ /must/ have the same
+--     'Vulkan.Core10.Enums.Format.Format' as its corresponding color
+--     attachment
+--
+-- -   All attachments in @pColorAttachments@ that are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have the same
+--     sample count
+--
+-- -   All attachments in @pInputAttachments@ that are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have formats
+--     whose features contain at least one of
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--     or
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   All attachments in @pColorAttachments@ that are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have formats
+--     whose features contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--
+-- -   All attachments in @pResolveAttachments@ that are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have formats
+--     whose features contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'
+--
+-- -   If @pDepthStencilAttachment@ is not @NULL@ and the attachment is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it /must/ have a
+--     format whose features contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, all
+--     attachments in @pColorAttachments@ that are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have a sample
+--     count that is smaller than or equal to the sample count of
+--     @pDepthStencilAttachment@ if it is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- -   If neither the @VK_AMD_mixed_attachment_samples@ nor the
+--     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if
+--     @pDepthStencilAttachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' and any attachments
+--     in @pColorAttachments@ are not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', they /must/ have the
+--     same sample count
+--
+-- -   The @attachment@ member of any element of @pPreserveAttachments@
+--     /must/ not be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- -   Any given element of @pPreserveAttachments@ /must/ not also be an
+--     element of any other member of the subpass description
+--
+-- -   If any attachment is used by more than one
+--     'Vulkan.Core10.Pass.AttachmentReference' member, then each use
+--     /must/ use the same @layout@
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX',
+--     it /must/ also include
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX'
+--
+-- -   If the @attachment@ member of any element of @pInputAttachments@ is
+--     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the
+--     @aspectMask@ member /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits'
+--
+-- -   If the @attachment@ member of any element of @pInputAttachments@ is
+--     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the
+--     @aspectMask@ member /must/ not be @0@
+--
+-- -   If the @attachment@ member of any element of @pInputAttachments@ is
+--     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the
+--     @aspectMask@ member /must/ not include
+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2'
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlagBits'
+--     values
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--
+-- -   If @inputAttachmentCount@ is not @0@, @pInputAttachments@ /must/ be
+--     a valid pointer to an array of @inputAttachmentCount@ valid
+--     'AttachmentReference2' structures
+--
+-- -   If @colorAttachmentCount@ is not @0@, @pColorAttachments@ /must/ be
+--     a valid pointer to an array of @colorAttachmentCount@ valid
+--     'AttachmentReference2' structures
+--
+-- -   If @colorAttachmentCount@ is not @0@, and @pResolveAttachments@ is
+--     not @NULL@, @pResolveAttachments@ /must/ be a valid pointer to an
+--     array of @colorAttachmentCount@ valid 'AttachmentReference2'
+--     structures
+--
+-- -   If @pDepthStencilAttachment@ is not @NULL@,
+--     @pDepthStencilAttachment@ /must/ be a valid pointer to a valid
+--     'AttachmentReference2' structure
+--
+-- -   If @preserveAttachmentCount@ is not @0@, @pPreserveAttachments@
+--     /must/ be a valid pointer to an array of @preserveAttachmentCount@
+--     @uint32_t@ values
+--
+-- = See Also
+--
+-- 'AttachmentReference2',
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
+-- 'RenderPassCreateInfo2',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlags'
+data SubpassDescription2 (es :: [Type]) = SubpassDescription2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlagBits'
+    -- specifying usage of the subpass.
+    flags :: SubpassDescriptionFlags
+  , -- | @pipelineBindPoint@ is a
+    -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+    -- specifying the pipeline type supported for this subpass.
+    pipelineBindPoint :: PipelineBindPoint
+  , -- | @viewMask@ is a bitfield of view indices describing which views
+    -- rendering is broadcast to in this subpass, when multiview is enabled.
+    viewMask :: Word32
+  , -- | @pInputAttachments@ is a pointer to an array of 'AttachmentReference2'
+    -- structures defining the input attachments for this subpass and their
+    -- layouts.
+    inputAttachments :: Vector (SomeStruct AttachmentReference2)
+  , -- | @pColorAttachments@ is a pointer to an array of 'AttachmentReference2'
+    -- structures defining the color attachments for this subpass and their
+    -- layouts.
+    colorAttachments :: Vector (SomeStruct AttachmentReference2)
+  , -- | @pResolveAttachments@ is an optional array of @colorAttachmentCount@
+    -- 'AttachmentReference2' structures defining the resolve attachments for
+    -- this subpass and their layouts.
+    resolveAttachments :: Vector (SomeStruct AttachmentReference2)
+  , -- | @pDepthStencilAttachment@ is a pointer to a 'AttachmentReference2'
+    -- structure specifying the depth\/stencil attachment for this subpass and
+    -- its layout.
+    depthStencilAttachment :: Maybe (SomeStruct AttachmentReference2)
+  , -- | @pPreserveAttachments@ is a pointer to an array of
+    -- @preserveAttachmentCount@ render pass attachment indices identifying
+    -- attachments that are not used by this subpass, but whose contents /must/
+    -- be preserved throughout the subpass.
+    preserveAttachments :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (SubpassDescription2 es)
+
+instance Extensible SubpassDescription2 where
+  extensibleType = STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2
+  setNext x next = x{next = next}
+  getNext SubpassDescription2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SubpassDescription2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @SubpassDescriptionDepthStencilResolve = Just f
+    | otherwise = Nothing
+
+instance (Extendss SubpassDescription2 es, PokeChain es) => ToCStruct (SubpassDescription2 es) where
+  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SubpassDescription2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr SubpassDescriptionFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (viewMask)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (inputAttachments)) :: Word32))
+    pPInputAttachments' <- ContT $ allocaBytesAligned @(AttachmentReference2 _) ((Data.Vector.length (inputAttachments)) * 32) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPInputAttachments' `plusPtr` (32 * (i)) :: Ptr (AttachmentReference2 _))) (e) . ($ ())) (inputAttachments)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr (AttachmentReference2 _)))) (pPInputAttachments')
+    let pColorAttachmentsLength = Data.Vector.length $ (colorAttachments)
+    let pResolveAttachmentsLength = Data.Vector.length $ (resolveAttachments)
+    lift $ unless (fromIntegral pResolveAttachmentsLength == pColorAttachmentsLength || pResolveAttachmentsLength == 0) $
+      throwIO $ IOError Nothing InvalidArgument "" "pResolveAttachments and pColorAttachments must have the same length" Nothing Nothing
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral pColorAttachmentsLength :: Word32))
+    pPColorAttachments' <- ContT $ allocaBytesAligned @(AttachmentReference2 _) ((Data.Vector.length (colorAttachments)) * 32) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPColorAttachments' `plusPtr` (32 * (i)) :: Ptr (AttachmentReference2 _))) (e) . ($ ())) (colorAttachments)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (AttachmentReference2 _)))) (pPColorAttachments')
+    pResolveAttachments'' <- if Data.Vector.null (resolveAttachments)
+      then pure nullPtr
+      else do
+        pPResolveAttachments <- ContT $ allocaBytesAligned @(AttachmentReference2 _) (((Data.Vector.length (resolveAttachments))) * 32) 8
+        Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPResolveAttachments `plusPtr` (32 * (i)) :: Ptr (AttachmentReference2 _))) (e) . ($ ())) ((resolveAttachments))
+        pure $ pPResolveAttachments
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (AttachmentReference2 _)))) pResolveAttachments''
+    pDepthStencilAttachment'' <- case (depthStencilAttachment) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (AttachmentReference2 '[])) $ \cont -> withSomeCStruct @AttachmentReference2 (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr (AttachmentReference2 _)))) pDepthStencilAttachment''
+    lift $ poke ((p `plusPtr` 72 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (preserveAttachments)) :: Word32))
+    pPPreserveAttachments' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (preserveAttachments)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPPreserveAttachments' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (preserveAttachments)
+    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr Word32))) (pPPreserveAttachments')
+    lift $ f
+  cStructSize = 88
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 20 :: Ptr PipelineBindPoint)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    pPInputAttachments' <- ContT $ allocaBytesAligned @(AttachmentReference2 _) ((Data.Vector.length (mempty)) * 32) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPInputAttachments' `plusPtr` (32 * (i)) :: Ptr (AttachmentReference2 _))) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr (AttachmentReference2 _)))) (pPInputAttachments')
+    pPColorAttachments' <- ContT $ allocaBytesAligned @(AttachmentReference2 _) ((Data.Vector.length (mempty)) * 32) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPColorAttachments' `plusPtr` (32 * (i)) :: Ptr (AttachmentReference2 _))) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (AttachmentReference2 _)))) (pPColorAttachments')
+    pPPreserveAttachments' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPPreserveAttachments' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr Word32))) (pPPreserveAttachments')
+    lift $ f
+
+instance (Extendss SubpassDescription2 es, PeekChain es) => FromCStruct (SubpassDescription2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @SubpassDescriptionFlags ((p `plusPtr` 16 :: Ptr SubpassDescriptionFlags))
+    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 20 :: Ptr PipelineBindPoint))
+    viewMask <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    inputAttachmentCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    pInputAttachments <- peek @(Ptr (AttachmentReference2 _)) ((p `plusPtr` 32 :: Ptr (Ptr (AttachmentReference2 a))))
+    pInputAttachments' <- generateM (fromIntegral inputAttachmentCount) (\i -> peekSomeCStruct (forgetExtensions ((pInputAttachments `advancePtrBytes` (32 * (i)) :: Ptr (AttachmentReference2 _)))))
+    colorAttachmentCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    pColorAttachments <- peek @(Ptr (AttachmentReference2 _)) ((p `plusPtr` 48 :: Ptr (Ptr (AttachmentReference2 a))))
+    pColorAttachments' <- generateM (fromIntegral colorAttachmentCount) (\i -> peekSomeCStruct (forgetExtensions ((pColorAttachments `advancePtrBytes` (32 * (i)) :: Ptr (AttachmentReference2 _)))))
+    pResolveAttachments <- peek @(Ptr (AttachmentReference2 _)) ((p `plusPtr` 56 :: Ptr (Ptr (AttachmentReference2 a))))
+    let pResolveAttachmentsLength = if pResolveAttachments == nullPtr then 0 else (fromIntegral colorAttachmentCount)
+    pResolveAttachments' <- generateM pResolveAttachmentsLength (\i -> peekSomeCStruct (forgetExtensions ((pResolveAttachments `advancePtrBytes` (32 * (i)) :: Ptr (AttachmentReference2 _)))))
+    pDepthStencilAttachment <- peek @(Ptr (AttachmentReference2 _)) ((p `plusPtr` 64 :: Ptr (Ptr (AttachmentReference2 a))))
+    pDepthStencilAttachment' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pDepthStencilAttachment
+    preserveAttachmentCount <- peek @Word32 ((p `plusPtr` 72 :: Ptr Word32))
+    pPreserveAttachments <- peek @(Ptr Word32) ((p `plusPtr` 80 :: Ptr (Ptr Word32)))
+    pPreserveAttachments' <- generateM (fromIntegral preserveAttachmentCount) (\i -> peek @Word32 ((pPreserveAttachments `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ SubpassDescription2
+             next flags pipelineBindPoint viewMask pInputAttachments' pColorAttachments' pResolveAttachments' pDepthStencilAttachment' pPreserveAttachments'
+
+instance es ~ '[] => Zero (SubpassDescription2 es) where
+  zero = SubpassDescription2
+           ()
+           zero
+           zero
+           zero
+           mempty
+           mempty
+           mempty
+           Nothing
+           mempty
+
+
+-- | VkSubpassDependency2 - Structure specifying a subpass dependency
+--
+-- = Description
+--
+-- Parameters defined by this structure with the same name as those in
+-- 'Vulkan.Core10.Pass.SubpassDependency' have the identical effect to
+-- those parameters.
+--
+-- @viewOffset@ has the same effect for the described subpass dependency as
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'::@pViewOffsets@
+-- has on each corresponding subpass dependency.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'
+--
+-- -   @srcSubpass@ /must/ be less than or equal to @dstSubpass@, unless
+--     one of them is 'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', to
+--     avoid cyclic dependencies and ensure a valid execution order
+--
+-- -   @srcSubpass@ and @dstSubpass@ /must/ not both be equal to
+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
+--
+-- -   If @srcSubpass@ is equal to @dstSubpass@ and not all of the stages
+--     in @srcStageMask@ and @dstStageMask@ are
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stages>,
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>
+--     pipeline stage in @srcStageMask@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>
+--     than or equal to the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   Any access flag included in @dstAccessMask@ /must/ be supported by
+--     one of the pipeline stages in @dstStageMask@, as specified in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>
+--
+-- -   If @dependencyFlags@ includes
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
+--     @srcSubpass@ /must/ not be equal to
+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
+--
+-- -   If @dependencyFlags@ includes
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
+--     @dstSubpass@ /must/ not be equal to
+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'
+--
+-- -   If @srcSubpass@ equals @dstSubpass@, and @srcStageMask@ and
+--     @dstStageMask@ both include a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stage>,
+--     then @dependencyFlags@ /must/ include
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT'
+--
+-- -   If @viewOffset@ is not equal to @0@, @srcSubpass@ /must/ not be
+--     equal to @dstSubpass@
+--
+-- -   If @dependencyFlags@ does not include
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT',
+--     @viewOffset@ /must/ be @0@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2'
+--
+-- -   @srcStageMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   @srcStageMask@ /must/ not be @0@
+--
+-- -   @dstStageMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     values
+--
+-- -   @dstStageMask@ /must/ not be @0@
+--
+-- -   @srcAccessMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
+--
+-- -   @dstAccessMask@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values
+--
+-- -   @dependencyFlags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlags',
+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags',
+-- 'RenderPassCreateInfo2',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SubpassDependency2 = SubpassDependency2
+  { -- | @srcSubpass@ is the subpass index of the first subpass in the
+    -- dependency, or 'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'.
+    srcSubpass :: Word32
+  , -- | @dstSubpass@ is the subpass index of the second subpass in the
+    -- dependency, or 'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL'.
+    dstSubpass :: Word32
+  , -- | @srcStageMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+    -- specifying the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>.
+    srcStageMask :: PipelineStageFlags
+  , -- | @dstStageMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+    -- specifying the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>
+    dstStageMask :: PipelineStageFlags
+  , -- | @srcAccessMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>.
+    srcAccessMask :: AccessFlags
+  , -- | @dstAccessMask@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>.
+    dstAccessMask :: AccessFlags
+  , -- | @dependencyFlags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits'.
+    dependencyFlags :: DependencyFlags
+  , -- | @viewOffset@ controls which views in the source subpass the views in the
+    -- destination subpass depend on.
+    viewOffset :: Int32
+  }
+  deriving (Typeable)
+deriving instance Show SubpassDependency2
+
+instance ToCStruct SubpassDependency2 where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SubpassDependency2{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (srcSubpass)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (dstSubpass)
+    poke ((p `plusPtr` 24 :: Ptr PipelineStageFlags)) (srcStageMask)
+    poke ((p `plusPtr` 28 :: Ptr PipelineStageFlags)) (dstStageMask)
+    poke ((p `plusPtr` 32 :: Ptr AccessFlags)) (srcAccessMask)
+    poke ((p `plusPtr` 36 :: Ptr AccessFlags)) (dstAccessMask)
+    poke ((p `plusPtr` 40 :: Ptr DependencyFlags)) (dependencyFlags)
+    poke ((p `plusPtr` 44 :: Ptr Int32)) (viewOffset)
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr PipelineStageFlags)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr PipelineStageFlags)) (zero)
+    f
+
+instance FromCStruct SubpassDependency2 where
+  peekCStruct p = do
+    srcSubpass <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    dstSubpass <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    srcStageMask <- peek @PipelineStageFlags ((p `plusPtr` 24 :: Ptr PipelineStageFlags))
+    dstStageMask <- peek @PipelineStageFlags ((p `plusPtr` 28 :: Ptr PipelineStageFlags))
+    srcAccessMask <- peek @AccessFlags ((p `plusPtr` 32 :: Ptr AccessFlags))
+    dstAccessMask <- peek @AccessFlags ((p `plusPtr` 36 :: Ptr AccessFlags))
+    dependencyFlags <- peek @DependencyFlags ((p `plusPtr` 40 :: Ptr DependencyFlags))
+    viewOffset <- peek @Int32 ((p `plusPtr` 44 :: Ptr Int32))
+    pure $ SubpassDependency2
+             srcSubpass dstSubpass srcStageMask dstStageMask srcAccessMask dstAccessMask dependencyFlags viewOffset
+
+instance Storable SubpassDependency2 where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SubpassDependency2 where
+  zero = SubpassDependency2
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkRenderPassCreateInfo2 - Structure specifying parameters of a newly
+-- created render pass
+--
+-- = Description
+--
+-- Parameters defined by this structure with the same name as those in
+-- 'Vulkan.Core10.Pass.RenderPassCreateInfo' have the identical effect to
+-- those parameters; the child structures are variants of those used in
+-- 'Vulkan.Core10.Pass.RenderPassCreateInfo' which add @sType@ and @pNext@
+-- parameters, allowing them to be extended.
+--
+-- If the 'SubpassDescription2'::@viewMask@ member of any element of
+-- @pSubpasses@ is not zero, /multiview/ functionality is considered to be
+-- enabled for this render pass.
+--
+-- @correlatedViewMaskCount@ and @pCorrelatedViewMasks@ have the same
+-- effect as
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'::@correlationMaskCount@
+-- and
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'::@pCorrelationMasks@,
+-- respectively.
+--
+-- == Valid Usage
+--
+-- -   If any two subpasses operate on attachments with overlapping ranges
+--     of the same 'Vulkan.Core10.Handles.DeviceMemory' object, and at
+--     least one subpass writes to that area of
+--     'Vulkan.Core10.Handles.DeviceMemory', a subpass dependency /must/ be
+--     included (either directly or via some intermediate subpasses)
+--     between them
+--
+-- -   If the @attachment@ member of any element of @pInputAttachments@,
+--     @pColorAttachments@, @pResolveAttachments@ or
+--     @pDepthStencilAttachment@, or the attachment indexed by any element
+--     of @pPreserveAttachments@ in any given element of @pSubpasses@ is
+--     bound to a range of a 'Vulkan.Core10.Handles.DeviceMemory' object
+--     that overlaps with any other attachment in any subpass (including
+--     the same subpass), the 'AttachmentDescription2' structures
+--     describing them /must/ include
+--     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'
+--     in @flags@
+--
+-- -   If the @attachment@ member of any element of @pInputAttachments@,
+--     @pColorAttachments@, @pResolveAttachments@ or
+--     @pDepthStencilAttachment@, or any element of @pPreserveAttachments@
+--     in any given element of @pSubpasses@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it /must/ be less
+--     than @attachmentCount@
+--
+-- -   For any member of @pAttachments@ with a @loadOp@ equal to
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the
+--     first use of that attachment /must/ not specify a @layout@ equal to
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
+--
+-- -   For any member of @pAttachments@ with a @stencilLoadOp@ equal to
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the
+--     first use of that attachment /must/ not specify a @layout@ equal to
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL',
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
+--     or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
+--
+-- -   For any element of @pDependencies@, if the @srcSubpass@ is not
+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage flags
+--     included in the @srcStageMask@ member of that dependency /must/ be a
+--     pipeline stage supported by the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types pipeline>
+--     identified by the @pipelineBindPoint@ member of the source subpass
+--
+-- -   For any element of @pDependencies@, if the @dstSubpass@ is not
+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage flags
+--     included in the @dstStageMask@ member of that dependency /must/ be a
+--     pipeline stage supported by the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types pipeline>
+--     identified by the @pipelineBindPoint@ member of the destination
+--     subpass
+--
+-- -   The set of bits included in any element of @pCorrelatedViewMasks@
+--     /must/ not overlap with the set of bits included in any other
+--     element of @pCorrelatedViewMasks@
+--
+-- -   If the 'SubpassDescription2'::@viewMask@ member of all elements of
+--     @pSubpasses@ is @0@, @correlatedViewMaskCount@ /must/ be @0@
+--
+-- -   The 'SubpassDescription2'::@viewMask@ member of all elements of
+--     @pSubpasses@ /must/ either all be @0@, or all not be @0@
+--
+-- -   If the 'SubpassDescription2'::@viewMask@ member of all elements of
+--     @pSubpasses@ is @0@, the @dependencyFlags@ member of any element of
+--     @pDependencies@ /must/ not include
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
+--
+-- -   For any element of @pDependencies@ where its @srcSubpass@ member
+--     equals its @dstSubpass@ member, if the @viewMask@ member of the
+--     corresponding element of @pSubpasses@ includes more than one bit,
+--     its @dependencyFlags@ member /must/ include
+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
+--
+-- -   The @viewMask@ member /must/ not have a bit set at an index greater
+--     than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferLayers@
+--
+-- -   If the @attachment@ member of any element of the @pInputAttachments@
+--     member of any element of @pSubpasses@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the @aspectMask@
+--     member of that element of @pInputAttachments@ /must/ only include
+--     aspects that are present in images of the format specified by the
+--     element of @pAttachments@ specified by @attachment@
+--
+-- -   The @srcSubpass@ member of each element of @pDependencies@ /must/ be
+--     less than @subpassCount@
+--
+-- -   The @dstSubpass@ member of each element of @pDependencies@ /must/ be
+--     less than @subpassCount@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlagBits'
+--     values
+--
+-- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
+--     pointer to an array of @attachmentCount@ valid
+--     'AttachmentDescription2' structures
+--
+-- -   @pSubpasses@ /must/ be a valid pointer to an array of @subpassCount@
+--     valid 'SubpassDescription2' structures
+--
+-- -   If @dependencyCount@ is not @0@, @pDependencies@ /must/ be a valid
+--     pointer to an array of @dependencyCount@ valid 'SubpassDependency2'
+--     structures
+--
+-- -   If @correlatedViewMaskCount@ is not @0@, @pCorrelatedViewMasks@
+--     /must/ be a valid pointer to an array of @correlatedViewMaskCount@
+--     @uint32_t@ values
+--
+-- -   @subpassCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'AttachmentDescription2',
+-- 'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'SubpassDependency2',
+-- 'SubpassDescription2', 'createRenderPass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR'
+data RenderPassCreateInfo2 (es :: [Type]) = RenderPassCreateInfo2
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is reserved for future use.
+    flags :: RenderPassCreateFlags
+  , -- | @pAttachments@ is a pointer to an array of @attachmentCount@
+    -- 'AttachmentDescription2' structures describing the attachments used by
+    -- the render pass.
+    attachments :: Vector (SomeStruct AttachmentDescription2)
+  , -- | @pSubpasses@ is a pointer to an array of @subpassCount@
+    -- 'SubpassDescription2' structures describing each subpass.
+    subpasses :: Vector (SomeStruct SubpassDescription2)
+  , -- | @pDependencies@ is a pointer to an array of @dependencyCount@
+    -- 'Vulkan.Core10.Pass.SubpassDependency' structures describing
+    -- dependencies between pairs of subpasses.
+    dependencies :: Vector SubpassDependency2
+  , -- | @pCorrelatedViewMasks@ is a pointer to an array of view masks indicating
+    -- sets of views that /may/ be more efficient to render concurrently.
+    correlatedViewMasks :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (RenderPassCreateInfo2 es)
+
+instance Extensible RenderPassCreateInfo2 where
+  extensibleType = STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2
+  setNext x next = x{next = next}
+  getNext RenderPassCreateInfo2{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RenderPassCreateInfo2 e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @RenderPassFragmentDensityMapCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss RenderPassCreateInfo2 es, PokeChain es) => ToCStruct (RenderPassCreateInfo2 es) where
+  withCStruct x f = allocaBytesAligned 80 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RenderPassCreateInfo2{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPassCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
+    pPAttachments' <- ContT $ allocaBytesAligned @(AttachmentDescription2 _) ((Data.Vector.length (attachments)) * 56) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPAttachments' `plusPtr` (56 * (i)) :: Ptr (AttachmentDescription2 _))) (e) . ($ ())) (attachments)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (AttachmentDescription2 _)))) (pPAttachments')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (subpasses)) :: Word32))
+    pPSubpasses' <- ContT $ allocaBytesAligned @(SubpassDescription2 _) ((Data.Vector.length (subpasses)) * 88) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPSubpasses' `plusPtr` (88 * (i)) :: Ptr (SubpassDescription2 _))) (e) . ($ ())) (subpasses)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (SubpassDescription2 _)))) (pPSubpasses')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (dependencies)) :: Word32))
+    pPDependencies' <- ContT $ allocaBytesAligned @SubpassDependency2 ((Data.Vector.length (dependencies)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDependencies' `plusPtr` (48 * (i)) :: Ptr SubpassDependency2) (e) . ($ ())) (dependencies)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency2))) (pPDependencies')
+    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (correlatedViewMasks)) :: Word32))
+    pPCorrelatedViewMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (correlatedViewMasks)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPCorrelatedViewMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (correlatedViewMasks)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPCorrelatedViewMasks')
+    lift $ f
+  cStructSize = 80
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPAttachments' <- ContT $ allocaBytesAligned @(AttachmentDescription2 _) ((Data.Vector.length (mempty)) * 56) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPAttachments' `plusPtr` (56 * (i)) :: Ptr (AttachmentDescription2 _))) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (AttachmentDescription2 _)))) (pPAttachments')
+    pPSubpasses' <- ContT $ allocaBytesAligned @(SubpassDescription2 _) ((Data.Vector.length (mempty)) * 88) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPSubpasses' `plusPtr` (88 * (i)) :: Ptr (SubpassDescription2 _))) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (SubpassDescription2 _)))) (pPSubpasses')
+    pPDependencies' <- ContT $ allocaBytesAligned @SubpassDependency2 ((Data.Vector.length (mempty)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDependencies' `plusPtr` (48 * (i)) :: Ptr SubpassDependency2) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency2))) (pPDependencies')
+    pPCorrelatedViewMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPCorrelatedViewMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPCorrelatedViewMasks')
+    lift $ f
+
+instance (Extendss RenderPassCreateInfo2 es, PeekChain es) => FromCStruct (RenderPassCreateInfo2 es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @RenderPassCreateFlags ((p `plusPtr` 16 :: Ptr RenderPassCreateFlags))
+    attachmentCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pAttachments <- peek @(Ptr (AttachmentDescription2 _)) ((p `plusPtr` 24 :: Ptr (Ptr (AttachmentDescription2 a))))
+    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peekSomeCStruct (forgetExtensions ((pAttachments `advancePtrBytes` (56 * (i)) :: Ptr (AttachmentDescription2 _)))))
+    subpassCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pSubpasses <- peek @(Ptr (SubpassDescription2 _)) ((p `plusPtr` 40 :: Ptr (Ptr (SubpassDescription2 a))))
+    pSubpasses' <- generateM (fromIntegral subpassCount) (\i -> peekSomeCStruct (forgetExtensions ((pSubpasses `advancePtrBytes` (88 * (i)) :: Ptr (SubpassDescription2 _)))))
+    dependencyCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pDependencies <- peek @(Ptr SubpassDependency2) ((p `plusPtr` 56 :: Ptr (Ptr SubpassDependency2)))
+    pDependencies' <- generateM (fromIntegral dependencyCount) (\i -> peekCStruct @SubpassDependency2 ((pDependencies `advancePtrBytes` (48 * (i)) :: Ptr SubpassDependency2)))
+    correlatedViewMaskCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    pCorrelatedViewMasks <- peek @(Ptr Word32) ((p `plusPtr` 72 :: Ptr (Ptr Word32)))
+    pCorrelatedViewMasks' <- generateM (fromIntegral correlatedViewMaskCount) (\i -> peek @Word32 ((pCorrelatedViewMasks `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ RenderPassCreateInfo2
+             next flags pAttachments' pSubpasses' pDependencies' pCorrelatedViewMasks'
+
+instance es ~ '[] => Zero (RenderPassCreateInfo2 es) where
+  zero = RenderPassCreateInfo2
+           ()
+           zero
+           mempty
+           mempty
+           mempty
+           mempty
+
+
+-- | VkSubpassBeginInfo - Structure specifying subpass begin info
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents',
+-- 'cmdBeginRenderPass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdBeginRenderPass2KHR',
+-- 'cmdNextSubpass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdNextSubpass2KHR'
+data SubpassBeginInfo = SubpassBeginInfo
+  { -- | @contents@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value
+    contents :: SubpassContents }
+  deriving (Typeable)
+deriving instance Show SubpassBeginInfo
+
+instance ToCStruct SubpassBeginInfo where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SubpassBeginInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_BEGIN_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SubpassContents)) (contents)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_BEGIN_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SubpassContents)) (zero)
+    f
+
+instance FromCStruct SubpassBeginInfo where
+  peekCStruct p = do
+    contents <- peek @SubpassContents ((p `plusPtr` 16 :: Ptr SubpassContents))
+    pure $ SubpassBeginInfo
+             contents
+
+instance Storable SubpassBeginInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SubpassBeginInfo where
+  zero = SubpassBeginInfo
+           zero
+
+
+-- | VkSubpassEndInfo - Structure specifying subpass end info
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdEndRenderPass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdEndRenderPass2KHR',
+-- 'cmdNextSubpass2',
+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdNextSubpass2KHR'
+data SubpassEndInfo = SubpassEndInfo
+  {}
+  deriving (Typeable)
+deriving instance Show SubpassEndInfo
+
+instance ToCStruct SubpassEndInfo where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SubpassEndInfo f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_END_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_END_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct SubpassEndInfo where
+  peekCStruct _ = pure $ SubpassEndInfo
+                           
+
+instance Storable SubpassEndInfo where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SubpassEndInfo where
+  zero = SubpassEndInfo
+           
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs-boot
@@ -0,0 +1,76 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2  ( AttachmentDescription2
+                                                              , AttachmentReference2
+                                                              , RenderPassCreateInfo2
+                                                              , SubpassBeginInfo
+                                                              , SubpassDependency2
+                                                              , SubpassDescription2
+                                                              , SubpassEndInfo
+                                                              ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role AttachmentDescription2 nominal
+data AttachmentDescription2 (es :: [Type])
+
+instance (Extendss AttachmentDescription2 es, PokeChain es) => ToCStruct (AttachmentDescription2 es)
+instance Show (Chain es) => Show (AttachmentDescription2 es)
+
+instance (Extendss AttachmentDescription2 es, PeekChain es) => FromCStruct (AttachmentDescription2 es)
+
+
+type role AttachmentReference2 nominal
+data AttachmentReference2 (es :: [Type])
+
+instance (Extendss AttachmentReference2 es, PokeChain es) => ToCStruct (AttachmentReference2 es)
+instance Show (Chain es) => Show (AttachmentReference2 es)
+
+instance (Extendss AttachmentReference2 es, PeekChain es) => FromCStruct (AttachmentReference2 es)
+
+
+type role RenderPassCreateInfo2 nominal
+data RenderPassCreateInfo2 (es :: [Type])
+
+instance (Extendss RenderPassCreateInfo2 es, PokeChain es) => ToCStruct (RenderPassCreateInfo2 es)
+instance Show (Chain es) => Show (RenderPassCreateInfo2 es)
+
+instance (Extendss RenderPassCreateInfo2 es, PeekChain es) => FromCStruct (RenderPassCreateInfo2 es)
+
+
+data SubpassBeginInfo
+
+instance ToCStruct SubpassBeginInfo
+instance Show SubpassBeginInfo
+
+instance FromCStruct SubpassBeginInfo
+
+
+data SubpassDependency2
+
+instance ToCStruct SubpassDependency2
+instance Show SubpassDependency2
+
+instance FromCStruct SubpassDependency2
+
+
+type role SubpassDescription2 nominal
+data SubpassDescription2 (es :: [Type])
+
+instance (Extendss SubpassDescription2 es, PokeChain es) => ToCStruct (SubpassDescription2 es)
+instance Show (Chain es) => Show (SubpassDescription2 es)
+
+instance (Extendss SubpassDescription2 es, PeekChain es) => FromCStruct (SubpassDescription2 es)
+
+
+data SubpassEndInfo
+
+instance ToCStruct SubpassEndInfo
+instance Show SubpassEndInfo
+
+instance FromCStruct SubpassEndInfo
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs
@@ -0,0 +1,283 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve  ( PhysicalDeviceDepthStencilResolveProperties(..)
+                                                                 , SubpassDescriptionDepthStencilResolve(..)
+                                                                 , StructureType(..)
+                                                                 , ResolveModeFlagBits(..)
+                                                                 , ResolveModeFlags
+                                                                 ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Utils (maybePeek)
+import GHC.Ptr (castPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Extends (peekSomeCStruct)
+import Vulkan.CStruct.Extends (withSomeCStruct)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentReference2)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits)
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE))
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(..))
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceDepthStencilResolveProperties - Structure describing
+-- depth\/stencil resolve properties that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceDepthStencilResolveProperties'
+-- structure describe the following implementation-dependent limits:
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDepthStencilResolveProperties = PhysicalDeviceDepthStencilResolveProperties
+  { -- | @supportedDepthResolveModes@ is a bitmask of
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' indicating
+    -- the set of supported depth resolve modes.
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'
+    -- /must/ be included in the set but implementations /may/ support
+    -- additional modes.
+    supportedDepthResolveModes :: ResolveModeFlags
+  , -- | @supportedStencilResolveModes@ is a bitmask of
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' indicating
+    -- the set of supported stencil resolve modes.
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'
+    -- /must/ be included in the set but implementations /may/ support
+    -- additional modes.
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_AVERAGE_BIT'
+    -- /must/ not be included in the set.
+    supportedStencilResolveModes :: ResolveModeFlags
+  , -- | @independentResolveNone@ is 'Vulkan.Core10.BaseType.TRUE' if the
+    -- implementation supports setting the depth and stencil resolve modes to
+    -- different values when one of those modes is
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. Otherwise
+    -- the implementation only supports setting both modes to the same value.
+    independentResolveNone :: Bool
+  , -- | @independentResolve@ is 'Vulkan.Core10.BaseType.TRUE' if the
+    -- implementation supports all combinations of the supported depth and
+    -- stencil resolve modes, including setting either depth or stencil resolve
+    -- mode to 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. An
+    -- implementation that supports @independentResolve@ /must/ also support
+    -- @independentResolveNone@.
+    independentResolve :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceDepthStencilResolveProperties
+
+instance ToCStruct PhysicalDeviceDepthStencilResolveProperties where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDepthStencilResolveProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ResolveModeFlags)) (supportedDepthResolveModes)
+    poke ((p `plusPtr` 20 :: Ptr ResolveModeFlags)) (supportedStencilResolveModes)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (independentResolveNone))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (independentResolve))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ResolveModeFlags)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr ResolveModeFlags)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceDepthStencilResolveProperties where
+  peekCStruct p = do
+    supportedDepthResolveModes <- peek @ResolveModeFlags ((p `plusPtr` 16 :: Ptr ResolveModeFlags))
+    supportedStencilResolveModes <- peek @ResolveModeFlags ((p `plusPtr` 20 :: Ptr ResolveModeFlags))
+    independentResolveNone <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    independentResolve <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    pure $ PhysicalDeviceDepthStencilResolveProperties
+             supportedDepthResolveModes supportedStencilResolveModes (bool32ToBool independentResolveNone) (bool32ToBool independentResolve)
+
+instance Storable PhysicalDeviceDepthStencilResolveProperties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDepthStencilResolveProperties where
+  zero = PhysicalDeviceDepthStencilResolveProperties
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkSubpassDescriptionDepthStencilResolve - Structure specifying
+-- depth\/stencil resolve operations for a subpass
+--
+-- == Valid Usage
+--
+-- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have
+--     the value 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
+--     @pDepthStencilAttachment@ /must/ not have the value
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'
+--
+-- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have
+--     the value 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
+--     @depthResolveMode@ and @stencilResolveMode@ /must/ not both be
+--     'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'
+--
+-- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have
+--     the value 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
+--     @pDepthStencilAttachment@ /must/ not have a sample count of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have
+--     the value 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
+--     @pDepthStencilResolveAttachment@ /must/ have a sample count of
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'
+--
+-- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have
+--     the value 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it
+--     /must/ have a format whose features contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'
+--
+-- -   If the 'Vulkan.Core10.Enums.Format.Format' of
+--     @pDepthStencilResolveAttachment@ has a depth component, then the
+--     'Vulkan.Core10.Enums.Format.Format' of @pDepthStencilAttachment@
+--     /must/ have a depth component with the same number of bits and
+--     numerical type
+--
+-- -   If the 'Vulkan.Core10.Enums.Format.Format' of
+--     @pDepthStencilResolveAttachment@ has a stencil component, then the
+--     'Vulkan.Core10.Enums.Format.Format' of @pDepthStencilAttachment@
+--     /must/ have a stencil component with the same number of bits and
+--     numerical type
+--
+-- -   The value of @depthResolveMode@ /must/ be one of the bits set in
+--     'PhysicalDeviceDepthStencilResolveProperties'::@supportedDepthResolveModes@
+--     or 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'
+--
+-- -   The value of @stencilResolveMode@ /must/ be one of the bits set in
+--     'PhysicalDeviceDepthStencilResolveProperties'::@supportedStencilResolveModes@
+--     or 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'
+--
+-- -   If the 'Vulkan.Core10.Enums.Format.Format' of
+--     @pDepthStencilResolveAttachment@ has both depth and stencil
+--     components,
+--     'PhysicalDeviceDepthStencilResolveProperties'::@independentResolve@
+--     is 'Vulkan.Core10.BaseType.FALSE', and
+--     'PhysicalDeviceDepthStencilResolveProperties'::@independentResolveNone@
+--     is 'Vulkan.Core10.BaseType.FALSE', then the values of
+--     @depthResolveMode@ and @stencilResolveMode@ /must/ be identical
+--
+-- -   If the 'Vulkan.Core10.Enums.Format.Format' of
+--     @pDepthStencilResolveAttachment@ has both depth and stencil
+--     components,
+--     'PhysicalDeviceDepthStencilResolveProperties'::@independentResolve@
+--     is 'Vulkan.Core10.BaseType.FALSE' and
+--     'PhysicalDeviceDepthStencilResolveProperties'::@independentResolveNone@
+--     is 'Vulkan.Core10.BaseType.TRUE', then the values of
+--     @depthResolveMode@ and @stencilResolveMode@ /must/ be identical or
+--     one of them /must/ be
+--     'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE'
+--
+-- -   @depthResolveMode@ /must/ be a valid
+--     'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' value
+--
+-- -   @stencilResolveMode@ /must/ be a valid
+--     'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' value
+--
+-- -   If @pDepthStencilResolveAttachment@ is not @NULL@,
+--     @pDepthStencilResolveAttachment@ /must/ be a valid pointer to a
+--     valid
+--     'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2'
+--     structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2',
+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SubpassDescriptionDepthStencilResolve = SubpassDescriptionDepthStencilResolve
+  { -- | @depthResolveMode@ is a bitmask of
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' describing
+    -- the depth resolve mode.
+    depthResolveMode :: ResolveModeFlagBits
+  , -- | @stencilResolveMode@ is a bitmask of
+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' describing
+    -- the stencil resolve mode.
+    stencilResolveMode :: ResolveModeFlagBits
+  , -- | @pDepthStencilResolveAttachment@ is an optional
+    -- 'Vulkan.Core10.Pass.AttachmentReference' structure defining the
+    -- depth\/stencil resolve attachment for this subpass and its layout.
+    depthStencilResolveAttachment :: Maybe (SomeStruct AttachmentReference2)
+  }
+  deriving (Typeable)
+deriving instance Show SubpassDescriptionDepthStencilResolve
+
+instance ToCStruct SubpassDescriptionDepthStencilResolve where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SubpassDescriptionDepthStencilResolve{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr ResolveModeFlagBits)) (depthResolveMode)
+    lift $ poke ((p `plusPtr` 20 :: Ptr ResolveModeFlagBits)) (stencilResolveMode)
+    pDepthStencilResolveAttachment'' <- case (depthStencilResolveAttachment) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (AttachmentReference2 '[])) $ \cont -> withSomeCStruct @AttachmentReference2 (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (AttachmentReference2 _)))) pDepthStencilResolveAttachment''
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ResolveModeFlagBits)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr ResolveModeFlagBits)) (zero)
+    f
+
+instance FromCStruct SubpassDescriptionDepthStencilResolve where
+  peekCStruct p = do
+    depthResolveMode <- peek @ResolveModeFlagBits ((p `plusPtr` 16 :: Ptr ResolveModeFlagBits))
+    stencilResolveMode <- peek @ResolveModeFlagBits ((p `plusPtr` 20 :: Ptr ResolveModeFlagBits))
+    pDepthStencilResolveAttachment <- peek @(Ptr (AttachmentReference2 _)) ((p `plusPtr` 24 :: Ptr (Ptr (AttachmentReference2 a))))
+    pDepthStencilResolveAttachment' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pDepthStencilResolveAttachment
+    pure $ SubpassDescriptionDepthStencilResolve
+             depthResolveMode stencilResolveMode pDepthStencilResolveAttachment'
+
+instance Zero SubpassDescriptionDepthStencilResolve where
+  zero = SubpassDescriptionDepthStencilResolve
+           zero
+           zero
+           Nothing
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve  ( PhysicalDeviceDepthStencilResolveProperties
+                                                                 , SubpassDescriptionDepthStencilResolve
+                                                                 ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceDepthStencilResolveProperties
+
+instance ToCStruct PhysicalDeviceDepthStencilResolveProperties
+instance Show PhysicalDeviceDepthStencilResolveProperties
+
+instance FromCStruct PhysicalDeviceDepthStencilResolveProperties
+
+
+data SubpassDescriptionDepthStencilResolve
+
+instance ToCStruct SubpassDescriptionDepthStencilResolve
+instance Show SubpassDescriptionDepthStencilResolve
+
+instance FromCStruct SubpassDescriptionDepthStencilResolve
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs
@@ -0,0 +1,672 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count  ( cmdDrawIndirectCount
+                                                               , cmdDrawIndexedIndirectCount
+                                                               ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Control.Monad.IO.Class (MonadIO)
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndexedIndirectCount))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndirectCount))
+import Vulkan.Core10.BaseType (DeviceSize)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawIndirectCount
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDrawIndirectCount - Perform an indirect draw with the draw count
+-- sourced from a buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @buffer@ is the buffer containing draw parameters.
+--
+-- -   @offset@ is the byte offset into @buffer@ where parameters begin.
+--
+-- -   @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
+--
+-- 'cmdDrawIndirectCount' behaves similarly to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' 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 a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   The current render pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   Image subresources used as attachments in the current render pass
+--     /must/ not be accessed in any way other than as an attachment by
+--     this command
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   If the bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers
+--     bound
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   For a given vertex buffer binding, any attribute data fetched /must/
+--     be entirely contained within the corresponding vertex buffer
+--     binding, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @buffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If @countBuffer@ is non-sparse then it /must/ be bound completely
+--     and contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory'
+--     object
+--
+-- -   @countBuffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @countBufferOffset@ /must/ be a multiple of @4@
+--
+-- -   The count stored in @countBuffer@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
+--
+-- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or
+--     equal to sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand')
+--
+-- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×
+--     (@maxDrawCount@ - 1) + @offset@ +
+--     sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be
+--     less than or equal to the size of @buffer@
+--
+-- -   If the count stored in @countBuffer@ is equal to @1@, (@offset@ +
+--     sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be
+--     less than or equal to the size of @buffer@
+--
+-- -   If the count stored in @countBuffer@ is greater than @1@, (@stride@
+--     × (@drawCount@ - 1) + @offset@ +
+--     sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be
+--     less than or equal to the size of @buffer@
+--
+-- -   If
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectCount drawIndirectCount>
+--     is not enabled this function /must/ not be used
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @countBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /must/ have
+--     been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdDrawIndirectCount :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
+cmdDrawIndirectCount commandBuffer buffer offset countBuffer countBufferOffset maxDrawCount stride = liftIO $ do
+  let vkCmdDrawIndirectCountPtr = pVkCmdDrawIndirectCount (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDrawIndirectCountPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndirectCount is null" Nothing Nothing
+  let vkCmdDrawIndirectCount' = mkVkCmdDrawIndirectCount vkCmdDrawIndirectCountPtr
+  vkCmdDrawIndirectCount' (commandBufferHandle (commandBuffer)) (buffer) (offset) (countBuffer) (countBufferOffset) (maxDrawCount) (stride)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawIndexedIndirectCount
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDrawIndexedIndirectCount - Perform an indexed indirect draw with
+-- the draw count sourced from a buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @buffer@ is the buffer containing draw parameters.
+--
+-- -   @offset@ is the byte offset into @buffer@ where parameters begin.
+--
+-- -   @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
+--
+-- 'cmdDrawIndexedIndirectCount' behaves similarly to
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect' 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 a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   The current render pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   Image subresources used as attachments in the current render pass
+--     /must/ not be accessed in any way other than as an attachment by
+--     this command
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   If the bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers
+--     bound
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   For a given vertex buffer binding, any attribute data fetched /must/
+--     be entirely contained within the corresponding vertex buffer
+--     binding, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @buffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If @countBuffer@ is non-sparse then it /must/ be bound completely
+--     and contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory'
+--     object
+--
+-- -   @countBuffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @countBufferOffset@ /must/ be a multiple of @4@
+--
+-- -   The count stored in @countBuffer@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
+--
+-- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or
+--     equal to
+--     sizeof('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')
+--
+-- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×
+--     (@maxDrawCount@ - 1) + @offset@ +
+--     sizeof('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))
+--     /must/ be less than or equal to the size of @buffer@
+--
+-- -   If count stored in @countBuffer@ is equal to @1@, (@offset@ +
+--     sizeof('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))
+--     /must/ be less than or equal to the size of @buffer@
+--
+-- -   If count stored in @countBuffer@ is greater than @1@, (@stride@ ×
+--     (@drawCount@ - 1) + @offset@ +
+--     sizeof('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))
+--     /must/ be less than or equal to the size of @buffer@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @countBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /must/ have
+--     been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdDrawIndexedIndirectCount :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
+cmdDrawIndexedIndirectCount commandBuffer buffer offset countBuffer countBufferOffset maxDrawCount stride = liftIO $ do
+  let vkCmdDrawIndexedIndirectCountPtr = pVkCmdDrawIndexedIndirectCount (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDrawIndexedIndirectCountPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexedIndirectCount is null" Nothing Nothing
+  let vkCmdDrawIndexedIndirectCount' = mkVkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCountPtr
+  vkCmdDrawIndexedIndirectCount' (commandBufferHandle (commandBuffer)) (buffer) (offset) (countBuffer) (countBufferOffset) (maxDrawCount) (stride)
+  pure $ ()
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs
@@ -0,0 +1,177 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_driver_properties  ( ConformanceVersion(..)
+                                                             , PhysicalDeviceDriverProperties(..)
+                                                             , StructureType(..)
+                                                             , DriverId(..)
+                                                             , MAX_DRIVER_NAME_SIZE
+                                                             , pattern MAX_DRIVER_NAME_SIZE
+                                                             , MAX_DRIVER_INFO_SIZE
+                                                             , pattern MAX_DRIVER_INFO_SIZE
+                                                             ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.ByteString (packCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word8)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
+import Vulkan.Core12.Enums.DriverId (DriverId)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.APIConstants (MAX_DRIVER_INFO_SIZE)
+import Vulkan.Core10.APIConstants (MAX_DRIVER_NAME_SIZE)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES))
+import Vulkan.Core12.Enums.DriverId (DriverId(..))
+import Vulkan.Core10.APIConstants (MAX_DRIVER_INFO_SIZE)
+import Vulkan.Core10.APIConstants (MAX_DRIVER_NAME_SIZE)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+import Vulkan.Core10.APIConstants (pattern MAX_DRIVER_INFO_SIZE)
+import Vulkan.Core10.APIConstants (pattern MAX_DRIVER_NAME_SIZE)
+-- | VkConformanceVersion - Structure containing the conformance test suite
+-- version the implementation is compliant with
+--
+-- = See Also
+--
+-- 'PhysicalDeviceDriverProperties',
+-- 'Vulkan.Core12.PhysicalDeviceVulkan12Properties'
+data ConformanceVersion = ConformanceVersion
+  { -- | @major@ is the major version number of the conformance test suite.
+    major :: Word8
+  , -- | @minor@ is the minor version number of the conformance test suite.
+    minor :: Word8
+  , -- | @subminor@ is the subminor version number of the conformance test suite.
+    subminor :: Word8
+  , -- | @patch@ is the patch version number of the conformance test suite.
+    patch :: Word8
+  }
+  deriving (Typeable)
+deriving instance Show ConformanceVersion
+
+instance ToCStruct ConformanceVersion where
+  withCStruct x f = allocaBytesAligned 4 1 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ConformanceVersion{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word8)) (major)
+    poke ((p `plusPtr` 1 :: Ptr Word8)) (minor)
+    poke ((p `plusPtr` 2 :: Ptr Word8)) (subminor)
+    poke ((p `plusPtr` 3 :: Ptr Word8)) (patch)
+    f
+  cStructSize = 4
+  cStructAlignment = 1
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word8)) (zero)
+    poke ((p `plusPtr` 1 :: Ptr Word8)) (zero)
+    poke ((p `plusPtr` 2 :: Ptr Word8)) (zero)
+    poke ((p `plusPtr` 3 :: Ptr Word8)) (zero)
+    f
+
+instance FromCStruct ConformanceVersion where
+  peekCStruct p = do
+    major <- peek @Word8 ((p `plusPtr` 0 :: Ptr Word8))
+    minor <- peek @Word8 ((p `plusPtr` 1 :: Ptr Word8))
+    subminor <- peek @Word8 ((p `plusPtr` 2 :: Ptr Word8))
+    patch <- peek @Word8 ((p `plusPtr` 3 :: Ptr Word8))
+    pure $ ConformanceVersion
+             major minor subminor patch
+
+instance Storable ConformanceVersion where
+  sizeOf ~_ = 4
+  alignment ~_ = 1
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ConformanceVersion where
+  zero = ConformanceVersion
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceDriverProperties - Structure containing driver
+-- identification information
+--
+-- = Description
+--
+-- @driverID@ /must/ be immutable for a given driver across instances,
+-- processes, driver versions, and system reboots.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'ConformanceVersion', 'Vulkan.Core12.Enums.DriverId.DriverId',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDriverProperties = PhysicalDeviceDriverProperties
+  { -- | @driverID@ is a unique identifier for the driver of the physical device.
+    driverID :: DriverId
+  , -- | @driverName@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_DRIVER_NAME_SIZE' @char@ containing a
+    -- null-terminated UTF-8 string which is the name of the driver.
+    driverName :: ByteString
+  , -- | @driverInfo@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_DRIVER_INFO_SIZE' @char@ containing a
+    -- null-terminated UTF-8 string with additional information about the
+    -- driver.
+    driverInfo :: ByteString
+  , -- | @conformanceVersion@ is the version of the Vulkan conformance test this
+    -- driver is conformant against (see 'ConformanceVersion').
+    conformanceVersion :: ConformanceVersion
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceDriverProperties
+
+instance ToCStruct PhysicalDeviceDriverProperties where
+  withCStruct x f = allocaBytesAligned 536 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDriverProperties{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DriverId)) (driverID)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))) (driverName)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))) (driverInfo)
+    ContT $ pokeCStruct ((p `plusPtr` 532 :: Ptr ConformanceVersion)) (conformanceVersion) . ($ ())
+    lift $ f
+  cStructSize = 536
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DriverId)) (zero)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))) (mempty)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))) (mempty)
+    ContT $ pokeCStruct ((p `plusPtr` 532 :: Ptr ConformanceVersion)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct PhysicalDeviceDriverProperties where
+  peekCStruct p = do
+    driverID <- peek @DriverId ((p `plusPtr` 16 :: Ptr DriverId))
+    driverName <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DRIVER_NAME_SIZE CChar))))
+    driverInfo <- packCString (lowerArrayPtr ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DRIVER_INFO_SIZE CChar))))
+    conformanceVersion <- peekCStruct @ConformanceVersion ((p `plusPtr` 532 :: Ptr ConformanceVersion))
+    pure $ PhysicalDeviceDriverProperties
+             driverID driverName driverInfo conformanceVersion
+
+instance Zero PhysicalDeviceDriverProperties where
+  zero = PhysicalDeviceDriverProperties
+           zero
+           mempty
+           mempty
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_driver_properties.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_driver_properties  ( ConformanceVersion
+                                                             , PhysicalDeviceDriverProperties
+                                                             ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ConformanceVersion
+
+instance ToCStruct ConformanceVersion
+instance Show ConformanceVersion
+
+instance FromCStruct ConformanceVersion
+
+
+data PhysicalDeviceDriverProperties
+
+instance ToCStruct PhysicalDeviceDriverProperties
+instance Show PhysicalDeviceDriverProperties
+
+instance FromCStruct PhysicalDeviceDriverProperties
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs
@@ -0,0 +1,108 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_image_format_list  ( ImageFormatListCreateInfo(..)
+                                                             , StructureType(..)
+                                                             ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkImageFormatListCreateInfo - Specify that an image /can/ be used with a
+-- particular set of formats
+--
+-- = Description
+--
+-- If @viewFormatCount@ is zero, @pViewFormats@ is ignored and the image is
+-- created as if the 'ImageFormatListCreateInfo' structure were not
+-- included in the @pNext@ list of 'Vulkan.Core10.Image.ImageCreateInfo'.
+--
+-- == 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 'Vulkan.Core10.Image.ImageCreateInfo', as
+--     described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility compatibility table>
+--
+-- -   If 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ does not contain
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',
+--     @viewFormatCount@ /must/ be @0@ or @1@
+--
+-- -   If @viewFormatCount@ is not @0@,
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@format@ /must/ be in
+--     @pViewFormats@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO'
+--
+-- -   If @viewFormatCount@ is not @0@, @pViewFormats@ /must/ be a valid
+--     pointer to an array of @viewFormatCount@ valid
+--     'Vulkan.Core10.Enums.Format.Format' values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImageFormatListCreateInfo = ImageFormatListCreateInfo
+  { -- | @pViewFormats@ is an array which lists of all formats which /can/ be
+    -- used when creating views of this image.
+    viewFormats :: Vector Format }
+  deriving (Typeable)
+deriving instance Show ImageFormatListCreateInfo
+
+instance ToCStruct ImageFormatListCreateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageFormatListCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (viewFormats)) :: Word32))
+    pPViewFormats' <- ContT $ allocaBytesAligned @Format ((Data.Vector.length (viewFormats)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewFormats' `plusPtr` (4 * (i)) :: Ptr Format) (e)) (viewFormats)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Format))) (pPViewFormats')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPViewFormats' <- ContT $ allocaBytesAligned @Format ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewFormats' `plusPtr` (4 * (i)) :: Ptr Format) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Format))) (pPViewFormats')
+    lift $ f
+
+instance FromCStruct ImageFormatListCreateInfo where
+  peekCStruct p = do
+    viewFormatCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pViewFormats <- peek @(Ptr Format) ((p `plusPtr` 24 :: Ptr (Ptr Format)))
+    pViewFormats' <- generateM (fromIntegral viewFormatCount) (\i -> peek @Format ((pViewFormats `advancePtrBytes` (4 * (i)) :: Ptr Format)))
+    pure $ ImageFormatListCreateInfo
+             pViewFormats'
+
+instance Zero ImageFormatListCreateInfo where
+  zero = ImageFormatListCreateInfo
+           mempty
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_image_format_list  (ImageFormatListCreateInfo) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ImageFormatListCreateInfo
+
+instance ToCStruct ImageFormatListCreateInfo
+instance Show ImageFormatListCreateInfo
+
+instance FromCStruct ImageFormatListCreateInfo
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs
@@ -0,0 +1,347 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer  ( PhysicalDeviceImagelessFramebufferFeatures(..)
+                                                                 , FramebufferAttachmentsCreateInfo(..)
+                                                                 , FramebufferAttachmentImageInfo(..)
+                                                                 , RenderPassAttachmentBeginInfo(..)
+                                                                 , StructureType(..)
+                                                                 , FramebufferCreateFlagBits(..)
+                                                                 , FramebufferCreateFlags
+                                                                 ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Core10.Handles (ImageView)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO))
+import Vulkan.Core10.Enums.FramebufferCreateFlagBits (FramebufferCreateFlagBits(..))
+import Vulkan.Core10.Enums.FramebufferCreateFlagBits (FramebufferCreateFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceImagelessFramebufferFeatures - Structure indicating
+-- support for imageless framebuffers
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceImagelessFramebufferFeatures'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceImagelessFramebufferFeatures' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceImagelessFramebufferFeatures' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- this feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceImagelessFramebufferFeatures = PhysicalDeviceImagelessFramebufferFeatures
+  { -- | @imagelessFramebuffer@ indicates that the implementation supports
+    -- specifying the image view for attachments at render pass begin time via
+    -- 'RenderPassAttachmentBeginInfo'.
+    imagelessFramebuffer :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceImagelessFramebufferFeatures
+
+instance ToCStruct PhysicalDeviceImagelessFramebufferFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceImagelessFramebufferFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (imagelessFramebuffer))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceImagelessFramebufferFeatures where
+  peekCStruct p = do
+    imagelessFramebuffer <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceImagelessFramebufferFeatures
+             (bool32ToBool imagelessFramebuffer)
+
+instance Storable PhysicalDeviceImagelessFramebufferFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceImagelessFramebufferFeatures where
+  zero = PhysicalDeviceImagelessFramebufferFeatures
+           zero
+
+
+-- | VkFramebufferAttachmentsCreateInfo - Structure specifying parameters of
+-- images that will be used with a framebuffer
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO'
+--
+-- -   If @attachmentImageInfoCount@ is not @0@, @pAttachmentImageInfos@
+--     /must/ be a valid pointer to an array of @attachmentImageInfoCount@
+--     valid 'FramebufferAttachmentImageInfo' structures
+--
+-- = See Also
+--
+-- 'FramebufferAttachmentImageInfo',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data FramebufferAttachmentsCreateInfo = FramebufferAttachmentsCreateInfo
+  { -- | @pAttachmentImageInfos@ is a pointer to an array of
+    -- 'FramebufferAttachmentImageInfo' instances, each of which describes a
+    -- number of parameters of the corresponding attachment in a render pass
+    -- instance.
+    attachmentImageInfos :: Vector FramebufferAttachmentImageInfo }
+  deriving (Typeable)
+deriving instance Show FramebufferAttachmentsCreateInfo
+
+instance ToCStruct FramebufferAttachmentsCreateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p FramebufferAttachmentsCreateInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachmentImageInfos)) :: Word32))
+    pPAttachmentImageInfos' <- ContT $ allocaBytesAligned @FramebufferAttachmentImageInfo ((Data.Vector.length (attachmentImageInfos)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachmentImageInfos' `plusPtr` (48 * (i)) :: Ptr FramebufferAttachmentImageInfo) (e) . ($ ())) (attachmentImageInfos)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr FramebufferAttachmentImageInfo))) (pPAttachmentImageInfos')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPAttachmentImageInfos' <- ContT $ allocaBytesAligned @FramebufferAttachmentImageInfo ((Data.Vector.length (mempty)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachmentImageInfos' `plusPtr` (48 * (i)) :: Ptr FramebufferAttachmentImageInfo) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr FramebufferAttachmentImageInfo))) (pPAttachmentImageInfos')
+    lift $ f
+
+instance FromCStruct FramebufferAttachmentsCreateInfo where
+  peekCStruct p = do
+    attachmentImageInfoCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pAttachmentImageInfos <- peek @(Ptr FramebufferAttachmentImageInfo) ((p `plusPtr` 24 :: Ptr (Ptr FramebufferAttachmentImageInfo)))
+    pAttachmentImageInfos' <- generateM (fromIntegral attachmentImageInfoCount) (\i -> peekCStruct @FramebufferAttachmentImageInfo ((pAttachmentImageInfos `advancePtrBytes` (48 * (i)) :: Ptr FramebufferAttachmentImageInfo)))
+    pure $ FramebufferAttachmentsCreateInfo
+             pAttachmentImageInfos'
+
+instance Zero FramebufferAttachmentsCreateInfo where
+  zero = FramebufferAttachmentsCreateInfo
+           mempty
+
+
+-- | VkFramebufferAttachmentImageInfo - Structure specifying parameters of an
+-- image that will be used with a framebuffer
+--
+-- = Description
+--
+-- Images that /can/ be used with the framebuffer when beginning a render
+-- pass, as specified by 'RenderPassAttachmentBeginInfo', /must/ be created
+-- with parameters that are identical to those specified here.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' values
+--
+-- -   @usage@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- -   If @viewFormatCount@ is not @0@, @pViewFormats@ /must/ be a valid
+--     pointer to an array of @viewFormatCount@ valid
+--     'Vulkan.Core10.Enums.Format.Format' values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Format.Format', 'FramebufferAttachmentsCreateInfo',
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data FramebufferAttachmentImageInfo = FramebufferAttachmentImageInfo
+  { -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits', matching
+    -- the value of 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ used to
+    -- create an image that will be used with this framebuffer.
+    flags :: ImageCreateFlags
+  , -- | @usage@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits', matching
+    -- the value of 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to
+    -- create an image used with this framebuffer.
+    usage :: ImageUsageFlags
+  , -- | @width@ is the width of the image view used for rendering.
+    width :: Word32
+  , -- | @height@ is the height of the image view used for rendering.
+    height :: Word32
+  , -- No documentation found for Nested "VkFramebufferAttachmentImageInfo" "layerCount"
+    layerCount :: Word32
+  , -- | @pViewFormats@ is an array which lists of all formats which /can/ be
+    -- used when creating views of the image, matching the value of
+    -- 'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::pViewFormats
+    -- used to create an image used with this framebuffer.
+    viewFormats :: Vector Format
+  }
+  deriving (Typeable)
+deriving instance Show FramebufferAttachmentImageInfo
+
+instance ToCStruct FramebufferAttachmentImageInfo where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p FramebufferAttachmentImageInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr ImageCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr ImageUsageFlags)) (usage)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (width)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (height)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (layerCount)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (viewFormats)) :: Word32))
+    pPViewFormats' <- ContT $ allocaBytesAligned @Format ((Data.Vector.length (viewFormats)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewFormats' `plusPtr` (4 * (i)) :: Ptr Format) (e)) (viewFormats)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Format))) (pPViewFormats')
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 20 :: Ptr ImageUsageFlags)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    pPViewFormats' <- ContT $ allocaBytesAligned @Format ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPViewFormats' `plusPtr` (4 * (i)) :: Ptr Format) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Format))) (pPViewFormats')
+    lift $ f
+
+instance FromCStruct FramebufferAttachmentImageInfo where
+  peekCStruct p = do
+    flags <- peek @ImageCreateFlags ((p `plusPtr` 16 :: Ptr ImageCreateFlags))
+    usage <- peek @ImageUsageFlags ((p `plusPtr` 20 :: Ptr ImageUsageFlags))
+    width <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    height <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    layerCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    viewFormatCount <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
+    pViewFormats <- peek @(Ptr Format) ((p `plusPtr` 40 :: Ptr (Ptr Format)))
+    pViewFormats' <- generateM (fromIntegral viewFormatCount) (\i -> peek @Format ((pViewFormats `advancePtrBytes` (4 * (i)) :: Ptr Format)))
+    pure $ FramebufferAttachmentImageInfo
+             flags usage width height layerCount pViewFormats'
+
+instance Zero FramebufferAttachmentImageInfo where
+  zero = FramebufferAttachmentImageInfo
+           zero
+           zero
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkRenderPassAttachmentBeginInfo - Structure specifying images to be used
+-- as framebuffer attachments
+--
+-- == Valid Usage
+--
+-- -   Each element of @pAttachments@ /must/ only specify a single mip
+--     level
+--
+-- -   Each element of @pAttachments@ /must/ have been created with the
+--     identity swizzle
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO'
+--
+-- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
+--     pointer to an array of @attachmentCount@ valid
+--     'Vulkan.Core10.Handles.ImageView' handles
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.ImageView',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data RenderPassAttachmentBeginInfo = RenderPassAttachmentBeginInfo
+  { -- | @pAttachments@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.ImageView' handles, each of which will be used as
+    -- the corresponding attachment in the render pass instance.
+    attachments :: Vector ImageView }
+  deriving (Typeable)
+deriving instance Show RenderPassAttachmentBeginInfo
+
+instance ToCStruct RenderPassAttachmentBeginInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RenderPassAttachmentBeginInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))
+    pPAttachments' <- ContT $ allocaBytesAligned @ImageView ((Data.Vector.length (attachments)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAttachments' `plusPtr` (8 * (i)) :: Ptr ImageView) (e)) (attachments)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ImageView))) (pPAttachments')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPAttachments' <- ContT $ allocaBytesAligned @ImageView ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAttachments' `plusPtr` (8 * (i)) :: Ptr ImageView) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ImageView))) (pPAttachments')
+    lift $ f
+
+instance FromCStruct RenderPassAttachmentBeginInfo where
+  peekCStruct p = do
+    attachmentCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pAttachments <- peek @(Ptr ImageView) ((p `plusPtr` 24 :: Ptr (Ptr ImageView)))
+    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peek @ImageView ((pAttachments `advancePtrBytes` (8 * (i)) :: Ptr ImageView)))
+    pure $ RenderPassAttachmentBeginInfo
+             pAttachments'
+
+instance Zero RenderPassAttachmentBeginInfo where
+  zero = RenderPassAttachmentBeginInfo
+           mempty
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs-boot
@@ -0,0 +1,41 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer  ( FramebufferAttachmentImageInfo
+                                                                 , FramebufferAttachmentsCreateInfo
+                                                                 , PhysicalDeviceImagelessFramebufferFeatures
+                                                                 , RenderPassAttachmentBeginInfo
+                                                                 ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data FramebufferAttachmentImageInfo
+
+instance ToCStruct FramebufferAttachmentImageInfo
+instance Show FramebufferAttachmentImageInfo
+
+instance FromCStruct FramebufferAttachmentImageInfo
+
+
+data FramebufferAttachmentsCreateInfo
+
+instance ToCStruct FramebufferAttachmentsCreateInfo
+instance Show FramebufferAttachmentsCreateInfo
+
+instance FromCStruct FramebufferAttachmentsCreateInfo
+
+
+data PhysicalDeviceImagelessFramebufferFeatures
+
+instance ToCStruct PhysicalDeviceImagelessFramebufferFeatures
+instance Show PhysicalDeviceImagelessFramebufferFeatures
+
+instance FromCStruct PhysicalDeviceImagelessFramebufferFeatures
+
+
+data RenderPassAttachmentBeginInfo
+
+instance ToCStruct RenderPassAttachmentBeginInfo
+instance Show RenderPassAttachmentBeginInfo
+
+instance FromCStruct RenderPassAttachmentBeginInfo
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs
@@ -0,0 +1,210 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts  ( PhysicalDeviceSeparateDepthStencilLayoutsFeatures(..)
+                                                                          , AttachmentReferenceStencilLayout(..)
+                                                                          , AttachmentDescriptionStencilLayout(..)
+                                                                          , ImageLayout(..)
+                                                                          , StructureType(..)
+                                                                          ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures - Structure
+-- describing whether the implementation can do depth and stencil image
+-- barriers separately
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceSeparateDepthStencilLayoutsFeatures'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceSeparateDepthStencilLayoutsFeatures' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceSeparateDepthStencilLayoutsFeatures' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable the feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceSeparateDepthStencilLayoutsFeatures = PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+  { -- | @separateDepthStencilLayouts@ indicates whether the implementation
+    -- supports a 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' for a
+    -- depth\/stencil image with only one of
+    -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
+    -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT' set,
+    -- and whether
+    -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',
+    -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
+    -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',
+    -- or
+    -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
+    -- can be used.
+    separateDepthStencilLayouts :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+
+instance ToCStruct PhysicalDeviceSeparateDepthStencilLayoutsFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSeparateDepthStencilLayoutsFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (separateDepthStencilLayouts))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceSeparateDepthStencilLayoutsFeatures where
+  peekCStruct p = do
+    separateDepthStencilLayouts <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+             (bool32ToBool separateDepthStencilLayouts)
+
+instance Storable PhysicalDeviceSeparateDepthStencilLayoutsFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceSeparateDepthStencilLayoutsFeatures where
+  zero = PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+           zero
+
+
+-- | VkAttachmentReferenceStencilLayout - Structure specifying an attachment
+-- description
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AttachmentReferenceStencilLayout = AttachmentReferenceStencilLayout
+  { -- | @stencilLayout@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+    stencilLayout :: ImageLayout }
+  deriving (Typeable)
+deriving instance Show AttachmentReferenceStencilLayout
+
+instance ToCStruct AttachmentReferenceStencilLayout where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AttachmentReferenceStencilLayout{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (stencilLayout)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (zero)
+    f
+
+instance FromCStruct AttachmentReferenceStencilLayout where
+  peekCStruct p = do
+    stencilLayout <- peek @ImageLayout ((p `plusPtr` 16 :: Ptr ImageLayout))
+    pure $ AttachmentReferenceStencilLayout
+             stencilLayout
+
+instance Storable AttachmentReferenceStencilLayout where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AttachmentReferenceStencilLayout where
+  zero = AttachmentReferenceStencilLayout
+           zero
+
+
+-- | VkAttachmentDescriptionStencilLayout - Structure specifying an
+-- attachment description
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AttachmentDescriptionStencilLayout = AttachmentDescriptionStencilLayout
+  { -- | @stencilInitialLayout@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+    stencilInitialLayout :: ImageLayout
+  , -- | @stencilFinalLayout@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+    stencilFinalLayout :: ImageLayout
+  }
+  deriving (Typeable)
+deriving instance Show AttachmentDescriptionStencilLayout
+
+instance ToCStruct AttachmentDescriptionStencilLayout where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AttachmentDescriptionStencilLayout{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (stencilInitialLayout)
+    poke ((p `plusPtr` 20 :: Ptr ImageLayout)) (stencilFinalLayout)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr ImageLayout)) (zero)
+    f
+
+instance FromCStruct AttachmentDescriptionStencilLayout where
+  peekCStruct p = do
+    stencilInitialLayout <- peek @ImageLayout ((p `plusPtr` 16 :: Ptr ImageLayout))
+    stencilFinalLayout <- peek @ImageLayout ((p `plusPtr` 20 :: Ptr ImageLayout))
+    pure $ AttachmentDescriptionStencilLayout
+             stencilInitialLayout stencilFinalLayout
+
+instance Storable AttachmentDescriptionStencilLayout where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AttachmentDescriptionStencilLayout where
+  zero = AttachmentDescriptionStencilLayout
+           zero
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts  ( AttachmentDescriptionStencilLayout
+                                                                          , AttachmentReferenceStencilLayout
+                                                                          , PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+                                                                          ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data AttachmentDescriptionStencilLayout
+
+instance ToCStruct AttachmentDescriptionStencilLayout
+instance Show AttachmentDescriptionStencilLayout
+
+instance FromCStruct AttachmentDescriptionStencilLayout
+
+
+data AttachmentReferenceStencilLayout
+
+instance ToCStruct AttachmentReferenceStencilLayout
+instance Show AttachmentReferenceStencilLayout
+
+instance FromCStruct AttachmentReferenceStencilLayout
+
+
+data PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+
+instance ToCStruct PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+instance Show PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+
+instance FromCStruct PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs
@@ -0,0 +1,81 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64  ( PhysicalDeviceShaderAtomicInt64Features(..)
+                                                               , StructureType(..)
+                                                               ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceShaderAtomicInt64Features - Structure describing
+-- features supported by VK_KHR_shader_atomic_int64
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderAtomicInt64Features = PhysicalDeviceShaderAtomicInt64Features
+  { -- | @shaderBufferInt64Atomics@ indicates whether shaders /can/ support
+    -- 64-bit unsigned and signed integer atomic operations on buffers.
+    shaderBufferInt64Atomics :: Bool
+  , -- | @shaderSharedInt64Atomics@ indicates whether shaders /can/ support
+    -- 64-bit unsigned and signed integer atomic operations on shared memory.
+    shaderSharedInt64Atomics :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderAtomicInt64Features
+
+instance ToCStruct PhysicalDeviceShaderAtomicInt64Features where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderAtomicInt64Features{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderBufferInt64Atomics))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderSharedInt64Atomics))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShaderAtomicInt64Features where
+  peekCStruct p = do
+    shaderBufferInt64Atomics <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    shaderSharedInt64Atomics <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceShaderAtomicInt64Features
+             (bool32ToBool shaderBufferInt64Atomics) (bool32ToBool shaderSharedInt64Atomics)
+
+instance Storable PhysicalDeviceShaderAtomicInt64Features where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderAtomicInt64Features where
+  zero = PhysicalDeviceShaderAtomicInt64Features
+           zero
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64  (PhysicalDeviceShaderAtomicInt64Features) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderAtomicInt64Features
+
+instance ToCStruct PhysicalDeviceShaderAtomicInt64Features
+instance Show PhysicalDeviceShaderAtomicInt64Features
+
+instance FromCStruct PhysicalDeviceShaderAtomicInt64Features
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs
@@ -0,0 +1,94 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8  ( PhysicalDeviceShaderFloat16Int8Features(..)
+                                                               , StructureType(..)
+                                                               ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceShaderFloat16Int8Features - Structure describing
+-- features supported by VK_KHR_shader_float16_int8
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderFloat16Int8Features = PhysicalDeviceShaderFloat16Int8Features
+  { -- | @shaderFloat16@ indicates whether 16-bit floats (halfs) are supported in
+    -- shader code. This also indicates whether shader modules /can/ declare
+    -- the @Float16@ capability. However, this only enables a subset of the
+    -- storage classes that SPIR-V allows for the @Float16@ SPIR-V capability:
+    -- Declaring and using 16-bit floats in the @Private@, @Workgroup@, and
+    -- @Function@ storage classes is enabled, while declaring them in the
+    -- interface storage classes (e.g., @UniformConstant@, @Uniform@,
+    -- @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is not enabled.
+    shaderFloat16 :: Bool
+  , -- | @shaderInt8@ indicates whether 8-bit integers (signed and unsigned) are
+    -- supported in shader code. This also indicates whether shader modules
+    -- /can/ declare the @Int8@ capability. However, this only enables a subset
+    -- of the storage classes that SPIR-V allows for the @Int8@ SPIR-V
+    -- capability: Declaring and using 8-bit integers in the @Private@,
+    -- @Workgroup@, and @Function@ storage classes is enabled, while declaring
+    -- them in the interface storage classes (e.g., @UniformConstant@,
+    -- @Uniform@, @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is
+    -- not enabled.
+    shaderInt8 :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderFloat16Int8Features
+
+instance ToCStruct PhysicalDeviceShaderFloat16Int8Features where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderFloat16Int8Features{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderFloat16))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderInt8))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShaderFloat16Int8Features where
+  peekCStruct p = do
+    shaderFloat16 <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    shaderInt8 <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceShaderFloat16Int8Features
+             (bool32ToBool shaderFloat16) (bool32ToBool shaderInt8)
+
+instance Storable PhysicalDeviceShaderFloat16Int8Features where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderFloat16Int8Features where
+  zero = PhysicalDeviceShaderFloat16Int8Features
+           zero
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8  (PhysicalDeviceShaderFloat16Int8Features) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderFloat16Int8Features
+
+instance ToCStruct PhysicalDeviceShaderFloat16Int8Features
+instance Show PhysicalDeviceShaderFloat16Int8Features
+
+instance FromCStruct PhysicalDeviceShaderFloat16Int8Features
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs
@@ -0,0 +1,243 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls  ( PhysicalDeviceFloatControlsProperties(..)
+                                                                 , StructureType(..)
+                                                                 ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceFloatControlsProperties - Structure describing
+-- properties supported by VK_KHR_shader_float_controls
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceFloatControlsProperties' structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceFloatControlsProperties' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceFloatControlsProperties = PhysicalDeviceFloatControlsProperties
+  { -- | @denormBehaviorIndependence@ is a
+    -- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'
+    -- value indicating whether, and how, denorm behavior can be set
+    -- independently for different bit widths.
+    denormBehaviorIndependence :: ShaderFloatControlsIndependence
+  , -- | @roundingModeIndependence@ is a
+    -- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'
+    -- value indicating whether, and how, rounding modes can be set
+    -- independently for different bit widths.
+    roundingModeIndependence :: ShaderFloatControlsIndependence
+  , -- | @shaderSignedZeroInfNanPreserveFloat16@ is a boolean value indicating
+    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
+    -- 16-bit floating-point computations. It also indicates whether the
+    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 16-bit
+    -- floating-point types.
+    shaderSignedZeroInfNanPreserveFloat16 :: Bool
+  , -- | @shaderSignedZeroInfNanPreserveFloat32@ is a boolean value indicating
+    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
+    -- 32-bit floating-point computations. It also indicates whether the
+    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 32-bit
+    -- floating-point types.
+    shaderSignedZeroInfNanPreserveFloat32 :: Bool
+  , -- | @shaderSignedZeroInfNanPreserveFloat64@ is a boolean value indicating
+    -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in
+    -- 64-bit floating-point computations. It also indicates whether the
+    -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 64-bit
+    -- floating-point types.
+    shaderSignedZeroInfNanPreserveFloat64 :: Bool
+  , -- | @shaderDenormPreserveFloat16@ is a boolean value indicating whether
+    -- denormals /can/ be preserved in 16-bit floating-point computations. It
+    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
+    -- for 16-bit floating-point types.
+    shaderDenormPreserveFloat16 :: Bool
+  , -- | @shaderDenormPreserveFloat32@ is a boolean value indicating whether
+    -- denormals /can/ be preserved in 32-bit floating-point computations. It
+    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
+    -- for 32-bit floating-point types.
+    shaderDenormPreserveFloat32 :: Bool
+  , -- | @shaderDenormPreserveFloat64@ is a boolean value indicating whether
+    -- denormals /can/ be preserved in 64-bit floating-point computations. It
+    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used
+    -- for 64-bit floating-point types.
+    shaderDenormPreserveFloat64 :: Bool
+  , -- | @shaderDenormFlushToZeroFloat16@ is a boolean value indicating whether
+    -- denormals /can/ be flushed to zero in 16-bit floating-point
+    -- computations. It also indicates whether the @DenormFlushToZero@
+    -- execution mode /can/ be used for 16-bit floating-point types.
+    shaderDenormFlushToZeroFloat16 :: Bool
+  , -- | @shaderDenormFlushToZeroFloat32@ is a boolean value indicating whether
+    -- denormals /can/ be flushed to zero in 32-bit floating-point
+    -- computations. It also indicates whether the @DenormFlushToZero@
+    -- execution mode /can/ be used for 32-bit floating-point types.
+    shaderDenormFlushToZeroFloat32 :: Bool
+  , -- | @shaderDenormFlushToZeroFloat64@ is a boolean value indicating whether
+    -- denormals /can/ be flushed to zero in 64-bit floating-point
+    -- computations. It also indicates whether the @DenormFlushToZero@
+    -- execution mode /can/ be used for 64-bit floating-point types.
+    shaderDenormFlushToZeroFloat64 :: Bool
+  , -- | @shaderRoundingModeRTEFloat16@ is a boolean value indicating whether an
+    -- implementation supports the round-to-nearest-even rounding mode for
+    -- 16-bit floating-point arithmetic and conversion instructions. It also
+    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
+    -- 16-bit floating-point types.
+    shaderRoundingModeRTEFloat16 :: Bool
+  , -- | @shaderRoundingModeRTEFloat32@ is a boolean value indicating whether an
+    -- implementation supports the round-to-nearest-even rounding mode for
+    -- 32-bit floating-point arithmetic and conversion instructions. It also
+    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
+    -- 32-bit floating-point types.
+    shaderRoundingModeRTEFloat32 :: Bool
+  , -- | @shaderRoundingModeRTEFloat64@ is a boolean value indicating whether an
+    -- implementation supports the round-to-nearest-even rounding mode for
+    -- 64-bit floating-point arithmetic and conversion instructions. It also
+    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for
+    -- 64-bit floating-point types.
+    shaderRoundingModeRTEFloat64 :: Bool
+  , -- | @shaderRoundingModeRTZFloat16@ is a boolean value indicating whether an
+    -- implementation supports the round-towards-zero rounding mode for 16-bit
+    -- floating-point arithmetic and conversion instructions. It also indicates
+    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 16-bit
+    -- floating-point types.
+    shaderRoundingModeRTZFloat16 :: Bool
+  , -- | @shaderRoundingModeRTZFloat32@ is a boolean value indicating whether an
+    -- implementation supports the round-towards-zero rounding mode for 32-bit
+    -- floating-point arithmetic and conversion instructions. It also indicates
+    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 32-bit
+    -- floating-point types.
+    shaderRoundingModeRTZFloat32 :: Bool
+  , -- | @shaderRoundingModeRTZFloat64@ is a boolean value indicating whether an
+    -- implementation supports the round-towards-zero rounding mode for 64-bit
+    -- floating-point arithmetic and conversion instructions. It also indicates
+    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 64-bit
+    -- floating-point types.
+    shaderRoundingModeRTZFloat64 :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceFloatControlsProperties
+
+instance ToCStruct PhysicalDeviceFloatControlsProperties where
+  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceFloatControlsProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ShaderFloatControlsIndependence)) (denormBehaviorIndependence)
+    poke ((p `plusPtr` 20 :: Ptr ShaderFloatControlsIndependence)) (roundingModeIndependence)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat16))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat32))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (shaderSignedZeroInfNanPreserveFloat64))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat16))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat32))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (shaderDenormPreserveFloat64))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat16))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat32))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (shaderDenormFlushToZeroFloat64))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat16))
+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat32))
+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTEFloat64))
+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat16))
+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat32))
+    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (shaderRoundingModeRTZFloat64))
+    f
+  cStructSize = 88
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ShaderFloatControlsIndependence)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr ShaderFloatControlsIndependence)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceFloatControlsProperties where
+  peekCStruct p = do
+    denormBehaviorIndependence <- peek @ShaderFloatControlsIndependence ((p `plusPtr` 16 :: Ptr ShaderFloatControlsIndependence))
+    roundingModeIndependence <- peek @ShaderFloatControlsIndependence ((p `plusPtr` 20 :: Ptr ShaderFloatControlsIndependence))
+    shaderSignedZeroInfNanPreserveFloat16 <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    shaderSignedZeroInfNanPreserveFloat32 <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    shaderSignedZeroInfNanPreserveFloat64 <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    shaderDenormPreserveFloat16 <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    shaderDenormPreserveFloat32 <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    shaderDenormPreserveFloat64 <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    shaderDenormFlushToZeroFloat16 <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    shaderDenormFlushToZeroFloat32 <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
+    shaderDenormFlushToZeroFloat64 <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
+    shaderRoundingModeRTEFloat16 <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))
+    shaderRoundingModeRTEFloat32 <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))
+    shaderRoundingModeRTEFloat64 <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))
+    shaderRoundingModeRTZFloat16 <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))
+    shaderRoundingModeRTZFloat32 <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))
+    shaderRoundingModeRTZFloat64 <- peek @Bool32 ((p `plusPtr` 80 :: Ptr Bool32))
+    pure $ PhysicalDeviceFloatControlsProperties
+             denormBehaviorIndependence roundingModeIndependence (bool32ToBool shaderSignedZeroInfNanPreserveFloat16) (bool32ToBool shaderSignedZeroInfNanPreserveFloat32) (bool32ToBool shaderSignedZeroInfNanPreserveFloat64) (bool32ToBool shaderDenormPreserveFloat16) (bool32ToBool shaderDenormPreserveFloat32) (bool32ToBool shaderDenormPreserveFloat64) (bool32ToBool shaderDenormFlushToZeroFloat16) (bool32ToBool shaderDenormFlushToZeroFloat32) (bool32ToBool shaderDenormFlushToZeroFloat64) (bool32ToBool shaderRoundingModeRTEFloat16) (bool32ToBool shaderRoundingModeRTEFloat32) (bool32ToBool shaderRoundingModeRTEFloat64) (bool32ToBool shaderRoundingModeRTZFloat16) (bool32ToBool shaderRoundingModeRTZFloat32) (bool32ToBool shaderRoundingModeRTZFloat64)
+
+instance Storable PhysicalDeviceFloatControlsProperties where
+  sizeOf ~_ = 88
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceFloatControlsProperties where
+  zero = PhysicalDeviceFloatControlsProperties
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls  (PhysicalDeviceFloatControlsProperties) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceFloatControlsProperties
+
+instance ToCStruct PhysicalDeviceFloatControlsProperties
+instance Show PhysicalDeviceFloatControlsProperties
+
+instance FromCStruct PhysicalDeviceFloatControlsProperties
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs
@@ -0,0 +1,94 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types  ( PhysicalDeviceShaderSubgroupExtendedTypesFeatures(..)
+                                                                          , StructureType(..)
+                                                                          ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures - Structure
+-- describing the extended types subgroups support feature for an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceShaderSubgroupExtendedTypesFeatures'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShaderSubgroupExtendedTypesFeatures' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceShaderSubgroupExtendedTypesFeatures' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderSubgroupExtendedTypesFeatures = PhysicalDeviceShaderSubgroupExtendedTypesFeatures
+  { -- | @shaderSubgroupExtendedTypes@ is a boolean that specifies whether
+    -- subgroup operations can use 8-bit integer, 16-bit integer, 64-bit
+    -- integer, 16-bit floating-point, and vectors of these types in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>
+    -- with
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-scope-subgroup subgroup scope>if
+    -- the implementation supports the types.
+    shaderSubgroupExtendedTypes :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderSubgroupExtendedTypesFeatures
+
+instance ToCStruct PhysicalDeviceShaderSubgroupExtendedTypesFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderSubgroupExtendedTypesFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderSubgroupExtendedTypes))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShaderSubgroupExtendedTypesFeatures where
+  peekCStruct p = do
+    shaderSubgroupExtendedTypes <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceShaderSubgroupExtendedTypesFeatures
+             (bool32ToBool shaderSubgroupExtendedTypes)
+
+instance Storable PhysicalDeviceShaderSubgroupExtendedTypesFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderSubgroupExtendedTypesFeatures where
+  zero = PhysicalDeviceShaderSubgroupExtendedTypesFeatures
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types  (PhysicalDeviceShaderSubgroupExtendedTypesFeatures) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderSubgroupExtendedTypesFeatures
+
+instance ToCStruct PhysicalDeviceShaderSubgroupExtendedTypesFeatures
+instance Show PhysicalDeviceShaderSubgroupExtendedTypesFeatures
+
+instance FromCStruct PhysicalDeviceShaderSubgroupExtendedTypesFeatures
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs
@@ -0,0 +1,742 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore  ( getSemaphoreCounterValue
+                                                              , waitSemaphores
+                                                              , signalSemaphore
+                                                              , PhysicalDeviceTimelineSemaphoreFeatures(..)
+                                                              , PhysicalDeviceTimelineSemaphoreProperties(..)
+                                                              , SemaphoreTypeCreateInfo(..)
+                                                              , TimelineSemaphoreSubmitInfo(..)
+                                                              , SemaphoreWaitInfo(..)
+                                                              , SemaphoreSignalInfo(..)
+                                                              , StructureType(..)
+                                                              , SemaphoreType(..)
+                                                              , SemaphoreWaitFlagBits(..)
+                                                              , SemaphoreWaitFlags
+                                                              ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetSemaphoreCounterValue))
+import Vulkan.Dynamic (DeviceCmds(pVkSignalSemaphore))
+import Vulkan.Dynamic (DeviceCmds(pVkWaitSemaphores))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Handles (Semaphore)
+import Vulkan.Core10.Handles (Semaphore(..))
+import Vulkan.Core12.Enums.SemaphoreType (SemaphoreType)
+import Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Core12.Enums.SemaphoreType (SemaphoreType(..))
+import Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlagBits(..))
+import Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetSemaphoreCounterValue
+  :: FunPtr (Ptr Device_T -> Semaphore -> Ptr Word64 -> IO Result) -> Ptr Device_T -> Semaphore -> Ptr Word64 -> IO Result
+
+-- | vkGetSemaphoreCounterValue - Query the current state of a timeline
+-- semaphore
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the semaphore.
+--
+-- -   @semaphore@ is the handle of the semaphore to query.
+--
+-- -   @pValue@ is a pointer to a 64-bit integer value in which the current
+--     counter value of the semaphore is returned.
+--
+-- = Description
+--
+-- Note
+--
+-- If a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-submission queue submission>
+-- command is pending execution, then the value returned by this command
+-- /may/ immediately be out of date.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Semaphore'
+getSemaphoreCounterValue :: forall io . MonadIO io => Device -> Semaphore -> io (("value" ::: Word64))
+getSemaphoreCounterValue device semaphore = liftIO . evalContT $ do
+  let vkGetSemaphoreCounterValuePtr = pVkGetSemaphoreCounterValue (deviceCmds (device :: Device))
+  lift $ unless (vkGetSemaphoreCounterValuePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetSemaphoreCounterValue is null" Nothing Nothing
+  let vkGetSemaphoreCounterValue' = mkVkGetSemaphoreCounterValue vkGetSemaphoreCounterValuePtr
+  pPValue <- ContT $ bracket (callocBytes @Word64 8) free
+  r <- lift $ vkGetSemaphoreCounterValue' (deviceHandle (device)) (semaphore) (pPValue)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pValue <- lift $ peek @Word64 pPValue
+  pure $ (pValue)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkWaitSemaphores
+  :: FunPtr (Ptr Device_T -> Ptr SemaphoreWaitInfo -> Word64 -> IO Result) -> Ptr Device_T -> Ptr SemaphoreWaitInfo -> Word64 -> IO Result
+
+-- | vkWaitSemaphores - Wait for timeline semaphores on the host
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the semaphore.
+--
+-- -   @pWaitInfo@ is a pointer to a 'SemaphoreWaitInfo' structure
+--     containing information about the wait condition.
+--
+-- -   @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
+--
+-- If the condition is satisfied when 'waitSemaphores' is called, then
+-- 'waitSemaphores' returns immediately. If the condition is not satisfied
+-- at the time 'waitSemaphores' is called, then 'waitSemaphores' will block
+-- and wait up to @timeout@ nanoseconds for the condition to become
+-- satisfied.
+--
+-- If @timeout@ is zero, then 'waitSemaphores' does not wait, but simply
+-- returns information about the current state of the semaphore.
+-- 'Vulkan.Core10.Enums.Result.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, 'waitSemaphores' returns
+-- 'Vulkan.Core10.Enums.Result.TIMEOUT'. If the condition is satisfied
+-- before @timeout@ nanoseconds has expired, 'waitSemaphores' returns
+-- 'Vulkan.Core10.Enums.Result.SUCCESS'.
+--
+-- If device loss occurs (see
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>)
+-- before the timeout has expired, 'waitSemaphores' /must/ return in finite
+-- time with either 'Vulkan.Core10.Enums.Result.SUCCESS' or
+-- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.TIMEOUT'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'SemaphoreWaitInfo'
+waitSemaphores :: forall io . MonadIO io => Device -> SemaphoreWaitInfo -> ("timeout" ::: Word64) -> io (Result)
+waitSemaphores device waitInfo timeout = liftIO . evalContT $ do
+  let vkWaitSemaphoresPtr = pVkWaitSemaphores (deviceCmds (device :: Device))
+  lift $ unless (vkWaitSemaphoresPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkWaitSemaphores is null" Nothing Nothing
+  let vkWaitSemaphores' = mkVkWaitSemaphores vkWaitSemaphoresPtr
+  pWaitInfo <- ContT $ withCStruct (waitInfo)
+  r <- lift $ vkWaitSemaphores' (deviceHandle (device)) pWaitInfo (timeout)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkSignalSemaphore
+  :: FunPtr (Ptr Device_T -> Ptr SemaphoreSignalInfo -> IO Result) -> Ptr Device_T -> Ptr SemaphoreSignalInfo -> IO Result
+
+-- | vkSignalSemaphore - Signal a timeline semaphore on the host
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the semaphore.
+--
+-- -   @pSignalInfo@ is a pointer to a 'SemaphoreSignalInfo' structure
+--     containing information about the signal operation.
+--
+-- = Description
+--
+-- When 'signalSemaphore' is executed on the host, it defines and
+-- immediately executes a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
+-- which sets the timeline semaphore to the given value.
+--
+-- The first synchronization scope is defined by the host execution model,
+-- but includes execution of 'signalSemaphore' on the host and anything
+-- that happened-before it.
+--
+-- The second synchronization scope is empty.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'SemaphoreSignalInfo'
+signalSemaphore :: forall io . MonadIO io => Device -> SemaphoreSignalInfo -> io ()
+signalSemaphore device signalInfo = liftIO . evalContT $ do
+  let vkSignalSemaphorePtr = pVkSignalSemaphore (deviceCmds (device :: Device))
+  lift $ unless (vkSignalSemaphorePtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkSignalSemaphore is null" Nothing Nothing
+  let vkSignalSemaphore' = mkVkSignalSemaphore vkSignalSemaphorePtr
+  pSignalInfo <- ContT $ withCStruct (signalInfo)
+  r <- lift $ vkSignalSemaphore' (deviceHandle (device)) pSignalInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkPhysicalDeviceTimelineSemaphoreFeatures - Structure describing
+-- timeline semaphore features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceTimelineSemaphoreFeatures' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceTimelineSemaphoreFeatures' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceTimelineSemaphoreFeatures' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceTimelineSemaphoreFeatures = PhysicalDeviceTimelineSemaphoreFeatures
+  { -- | @timelineSemaphore@ indicates whether semaphores created with a
+    -- 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+    -- 'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' are
+    -- supported.
+    timelineSemaphore :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceTimelineSemaphoreFeatures
+
+instance ToCStruct PhysicalDeviceTimelineSemaphoreFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceTimelineSemaphoreFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (timelineSemaphore))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceTimelineSemaphoreFeatures where
+  peekCStruct p = do
+    timelineSemaphore <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceTimelineSemaphoreFeatures
+             (bool32ToBool timelineSemaphore)
+
+instance Storable PhysicalDeviceTimelineSemaphoreFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceTimelineSemaphoreFeatures where
+  zero = PhysicalDeviceTimelineSemaphoreFeatures
+           zero
+
+
+-- | VkPhysicalDeviceTimelineSemaphoreProperties - Structure describing
+-- timeline semaphore properties that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceTimelineSemaphoreProperties' structure
+-- describe the following implementation-dependent limits:
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceTimelineSemaphoreProperties = PhysicalDeviceTimelineSemaphoreProperties
+  { -- | @maxTimelineSemaphoreValueDifference@ indicates the maximum difference
+    -- allowed by the implementation between the current value of a timeline
+    -- semaphore and any pending signal or wait operations.
+    maxTimelineSemaphoreValueDifference :: Word64 }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceTimelineSemaphoreProperties
+
+instance ToCStruct PhysicalDeviceTimelineSemaphoreProperties where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceTimelineSemaphoreProperties{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (maxTimelineSemaphoreValueDifference)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceTimelineSemaphoreProperties where
+  peekCStruct p = do
+    maxTimelineSemaphoreValueDifference <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
+    pure $ PhysicalDeviceTimelineSemaphoreProperties
+             maxTimelineSemaphoreValueDifference
+
+instance Storable PhysicalDeviceTimelineSemaphoreProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceTimelineSemaphoreProperties where
+  zero = PhysicalDeviceTimelineSemaphoreProperties
+           zero
+
+
+-- | VkSemaphoreTypeCreateInfo - Structure specifying the type of a newly
+-- created semaphore
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO'
+--
+-- -   @semaphoreType@ /must/ be a valid
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' value
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-timelineSemaphore timelineSemaphore>
+--     feature is not enabled, @semaphoreType@ /must/ not equal
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
+--
+-- -   If @semaphoreType@ is
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY',
+--     @initialValue@ /must/ be zero
+--
+-- If no 'SemaphoreTypeCreateInfo' structure is included in the @pNext@
+-- chain of 'Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo', then the
+-- created semaphore will have a default
+-- 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+-- 'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'.
+--
+-- = See Also
+--
+-- 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SemaphoreTypeCreateInfo = SemaphoreTypeCreateInfo
+  { -- | @semaphoreType@ is a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType'
+    -- value specifying the type of the semaphore.
+    semaphoreType :: SemaphoreType
+  , -- | @initialValue@ is the initial payload value if @semaphoreType@ is
+    -- 'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'.
+    initialValue :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show SemaphoreTypeCreateInfo
+
+instance ToCStruct SemaphoreTypeCreateInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SemaphoreTypeCreateInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SemaphoreType)) (semaphoreType)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (initialValue)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SemaphoreType)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct SemaphoreTypeCreateInfo where
+  peekCStruct p = do
+    semaphoreType <- peek @SemaphoreType ((p `plusPtr` 16 :: Ptr SemaphoreType))
+    initialValue <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    pure $ SemaphoreTypeCreateInfo
+             semaphoreType initialValue
+
+instance Storable SemaphoreTypeCreateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SemaphoreTypeCreateInfo where
+  zero = SemaphoreTypeCreateInfo
+           zero
+           zero
+
+
+-- | VkTimelineSemaphoreSubmitInfo - Structure specifying signal and wait
+-- values for timeline semaphores
+--
+-- = Description
+--
+-- If the semaphore in 'Vulkan.Core10.Queue.SubmitInfo'::@pWaitSemaphores@
+-- or 'Vulkan.Core10.Queue.SubmitInfo'::@pSignalSemaphores@ corresponding
+-- to an entry in @pWaitSemaphoreValues@ or @pSignalSemaphoreValues@
+-- respectively was not created with a
+-- 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+-- 'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE', the
+-- implementation /must/ ignore the value in the @pWaitSemaphoreValues@ or
+-- @pSignalSemaphoreValues@ entry.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO'
+--
+-- -   If @waitSemaphoreValueCount@ is not @0@, and @pWaitSemaphoreValues@
+--     is not @NULL@, @pWaitSemaphoreValues@ /must/ be a valid pointer to
+--     an array of @waitSemaphoreValueCount@ @uint64_t@ values
+--
+-- -   If @signalSemaphoreValueCount@ is not @0@, and
+--     @pSignalSemaphoreValues@ is not @NULL@, @pSignalSemaphoreValues@
+--     /must/ be a valid pointer to an array of @signalSemaphoreValueCount@
+--     @uint64_t@ values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data TimelineSemaphoreSubmitInfo = TimelineSemaphoreSubmitInfo
+  { -- | @waitSemaphoreValueCount@ is the number of semaphore wait values
+    -- specified in @pWaitSemaphoreValues@.
+    waitSemaphoreValueCount :: Word32
+  , -- | @pWaitSemaphoreValues@ is an array of length @waitSemaphoreValueCount@
+    -- containing values for the corresponding semaphores in
+    -- 'Vulkan.Core10.Queue.SubmitInfo'::@pWaitSemaphores@ to wait for.
+    waitSemaphoreValues :: Vector Word64
+  , -- | @signalSemaphoreValueCount@ is the number of semaphore signal values
+    -- specified in @pSignalSemaphoreValues@.
+    signalSemaphoreValueCount :: Word32
+  , -- | @pSignalSemaphoreValues@ is an array of length
+    -- @signalSemaphoreValueCount@ containing values for the corresponding
+    -- semaphores in 'Vulkan.Core10.Queue.SubmitInfo'::@pSignalSemaphores@ to
+    -- set when signaled.
+    signalSemaphoreValues :: Vector Word64
+  }
+  deriving (Typeable)
+deriving instance Show TimelineSemaphoreSubmitInfo
+
+instance ToCStruct TimelineSemaphoreSubmitInfo where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p TimelineSemaphoreSubmitInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    let pWaitSemaphoreValuesLength = Data.Vector.length $ (waitSemaphoreValues)
+    waitSemaphoreValueCount'' <- lift $ if (waitSemaphoreValueCount) == 0
+      then pure $ fromIntegral pWaitSemaphoreValuesLength
+      else do
+        unless (fromIntegral pWaitSemaphoreValuesLength == (waitSemaphoreValueCount) || pWaitSemaphoreValuesLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pWaitSemaphoreValues must be empty or have 'waitSemaphoreValueCount' elements" Nothing Nothing
+        pure (waitSemaphoreValueCount)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (waitSemaphoreValueCount'')
+    pWaitSemaphoreValues'' <- if Data.Vector.null (waitSemaphoreValues)
+      then pure nullPtr
+      else do
+        pPWaitSemaphoreValues <- ContT $ allocaBytesAligned @Word64 (((Data.Vector.length (waitSemaphoreValues))) * 8) 8
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphoreValues `plusPtr` (8 * (i)) :: Ptr Word64) (e)) ((waitSemaphoreValues))
+        pure $ pPWaitSemaphoreValues
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word64))) pWaitSemaphoreValues''
+    let pSignalSemaphoreValuesLength = Data.Vector.length $ (signalSemaphoreValues)
+    signalSemaphoreValueCount'' <- lift $ if (signalSemaphoreValueCount) == 0
+      then pure $ fromIntegral pSignalSemaphoreValuesLength
+      else do
+        unless (fromIntegral pSignalSemaphoreValuesLength == (signalSemaphoreValueCount) || pSignalSemaphoreValuesLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pSignalSemaphoreValues must be empty or have 'signalSemaphoreValueCount' elements" Nothing Nothing
+        pure (signalSemaphoreValueCount)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (signalSemaphoreValueCount'')
+    pSignalSemaphoreValues'' <- if Data.Vector.null (signalSemaphoreValues)
+      then pure nullPtr
+      else do
+        pPSignalSemaphoreValues <- ContT $ allocaBytesAligned @Word64 (((Data.Vector.length (signalSemaphoreValues))) * 8) 8
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphoreValues `plusPtr` (8 * (i)) :: Ptr Word64) (e)) ((signalSemaphoreValues))
+        pure $ pPSignalSemaphoreValues
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word64))) pSignalSemaphoreValues''
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct TimelineSemaphoreSubmitInfo where
+  peekCStruct p = do
+    waitSemaphoreValueCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pWaitSemaphoreValues <- peek @(Ptr Word64) ((p `plusPtr` 24 :: Ptr (Ptr Word64)))
+    let pWaitSemaphoreValuesLength = if pWaitSemaphoreValues == nullPtr then 0 else (fromIntegral waitSemaphoreValueCount)
+    pWaitSemaphoreValues' <- generateM pWaitSemaphoreValuesLength (\i -> peek @Word64 ((pWaitSemaphoreValues `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    signalSemaphoreValueCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pSignalSemaphoreValues <- peek @(Ptr Word64) ((p `plusPtr` 40 :: Ptr (Ptr Word64)))
+    let pSignalSemaphoreValuesLength = if pSignalSemaphoreValues == nullPtr then 0 else (fromIntegral signalSemaphoreValueCount)
+    pSignalSemaphoreValues' <- generateM pSignalSemaphoreValuesLength (\i -> peek @Word64 ((pSignalSemaphoreValues `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    pure $ TimelineSemaphoreSubmitInfo
+             waitSemaphoreValueCount pWaitSemaphoreValues' signalSemaphoreValueCount pSignalSemaphoreValues'
+
+instance Zero TimelineSemaphoreSubmitInfo where
+  zero = TimelineSemaphoreSubmitInfo
+           zero
+           mempty
+           zero
+           mempty
+
+
+-- | VkSemaphoreWaitInfo - Structure containing information about the
+-- semaphore wait condition
+--
+-- == Valid Usage
+--
+-- -   All of the elements of @pSemaphores@ /must/ reference a semaphore
+--     that was created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core12.Enums.SemaphoreWaitFlagBits.SemaphoreWaitFlagBits'
+--     values
+--
+-- -   @pSemaphores@ /must/ be a valid pointer to an array of
+--     @semaphoreCount@ valid 'Vulkan.Core10.Handles.Semaphore' handles
+--
+-- -   @pValues@ /must/ be a valid pointer to an array of @semaphoreCount@
+--     @uint64_t@ values
+--
+-- -   @semaphoreCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Semaphore',
+-- 'Vulkan.Core12.Enums.SemaphoreWaitFlagBits.SemaphoreWaitFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'waitSemaphores',
+-- 'Vulkan.Extensions.VK_KHR_timeline_semaphore.waitSemaphoresKHR'
+data SemaphoreWaitInfo = SemaphoreWaitInfo
+  { -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core12.Enums.SemaphoreWaitFlagBits.SemaphoreWaitFlagBits'
+    -- specifying additional parameters for the semaphore wait operation.
+    flags :: SemaphoreWaitFlags
+  , -- | @pSemaphores@ is a pointer to an array of @semaphoreCount@ semaphore
+    -- handles to wait on.
+    semaphores :: Vector Semaphore
+  , -- | @pValues@ is a pointer to an array of @semaphoreCount@ timeline
+    -- semaphore values.
+    values :: Vector Word64
+  }
+  deriving (Typeable)
+deriving instance Show SemaphoreWaitInfo
+
+instance ToCStruct SemaphoreWaitInfo where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SemaphoreWaitInfo{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr SemaphoreWaitFlags)) (flags)
+    let pSemaphoresLength = Data.Vector.length $ (semaphores)
+    lift $ unless ((Data.Vector.length $ (values)) == pSemaphoresLength) $
+      throwIO $ IOError Nothing InvalidArgument "" "pValues and pSemaphores must have the same length" Nothing Nothing
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral pSemaphoresLength :: Word32))
+    pPSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (semaphores)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (semaphores)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPSemaphores')
+    pPValues' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (values)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPValues' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (values)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPValues')
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPSemaphores')
+    pPValues' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPValues' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPValues')
+    lift $ f
+
+instance FromCStruct SemaphoreWaitInfo where
+  peekCStruct p = do
+    flags <- peek @SemaphoreWaitFlags ((p `plusPtr` 16 :: Ptr SemaphoreWaitFlags))
+    semaphoreCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 24 :: Ptr (Ptr Semaphore)))
+    pSemaphores' <- generateM (fromIntegral semaphoreCount) (\i -> peek @Semaphore ((pSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
+    pValues <- peek @(Ptr Word64) ((p `plusPtr` 32 :: Ptr (Ptr Word64)))
+    pValues' <- generateM (fromIntegral semaphoreCount) (\i -> peek @Word64 ((pValues `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    pure $ SemaphoreWaitInfo
+             flags pSemaphores' pValues'
+
+instance Zero SemaphoreWaitInfo where
+  zero = SemaphoreWaitInfo
+           zero
+           mempty
+           mempty
+
+
+-- | VkSemaphoreSignalInfo - Structure containing information about a
+-- semaphore signal operation
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Semaphore',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'signalSemaphore',
+-- 'Vulkan.Extensions.VK_KHR_timeline_semaphore.signalSemaphoreKHR'
+data SemaphoreSignalInfo = SemaphoreSignalInfo
+  { -- | @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore' handle
+    semaphore :: Semaphore
+  , -- | @value@ /must/ have a value which does not differ from the current value
+    -- of the semaphore or the value of any outstanding semaphore wait or
+    -- signal operation on @semaphore@ by more than
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
+    value :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show SemaphoreSignalInfo
+
+instance ToCStruct SemaphoreSignalInfo where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SemaphoreSignalInfo{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (semaphore)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (value)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct SemaphoreSignalInfo where
+  peekCStruct p = do
+    semaphore <- peek @Semaphore ((p `plusPtr` 16 :: Ptr Semaphore))
+    value <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    pure $ SemaphoreSignalInfo
+             semaphore value
+
+instance Storable SemaphoreSignalInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SemaphoreSignalInfo where
+  zero = SemaphoreSignalInfo
+           zero
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs-boot
@@ -0,0 +1,59 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore  ( PhysicalDeviceTimelineSemaphoreFeatures
+                                                              , PhysicalDeviceTimelineSemaphoreProperties
+                                                              , SemaphoreSignalInfo
+                                                              , SemaphoreTypeCreateInfo
+                                                              , SemaphoreWaitInfo
+                                                              , TimelineSemaphoreSubmitInfo
+                                                              ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceTimelineSemaphoreFeatures
+
+instance ToCStruct PhysicalDeviceTimelineSemaphoreFeatures
+instance Show PhysicalDeviceTimelineSemaphoreFeatures
+
+instance FromCStruct PhysicalDeviceTimelineSemaphoreFeatures
+
+
+data PhysicalDeviceTimelineSemaphoreProperties
+
+instance ToCStruct PhysicalDeviceTimelineSemaphoreProperties
+instance Show PhysicalDeviceTimelineSemaphoreProperties
+
+instance FromCStruct PhysicalDeviceTimelineSemaphoreProperties
+
+
+data SemaphoreSignalInfo
+
+instance ToCStruct SemaphoreSignalInfo
+instance Show SemaphoreSignalInfo
+
+instance FromCStruct SemaphoreSignalInfo
+
+
+data SemaphoreTypeCreateInfo
+
+instance ToCStruct SemaphoreTypeCreateInfo
+instance Show SemaphoreTypeCreateInfo
+
+instance FromCStruct SemaphoreTypeCreateInfo
+
+
+data SemaphoreWaitInfo
+
+instance ToCStruct SemaphoreWaitInfo
+instance Show SemaphoreWaitInfo
+
+instance FromCStruct SemaphoreWaitInfo
+
+
+data TimelineSemaphoreSubmitInfo
+
+instance ToCStruct TimelineSemaphoreSubmitInfo
+instance Show TimelineSemaphoreSubmitInfo
+
+instance FromCStruct TimelineSemaphoreSubmitInfo
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs
@@ -0,0 +1,90 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout  ( PhysicalDeviceUniformBufferStandardLayoutFeatures(..)
+                                                                          , StructureType(..)
+                                                                          ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceUniformBufferStandardLayoutFeatures - Structure
+-- indicating support for std430-like packing in uniform buffers
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceUniformBufferStandardLayoutFeatures'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceUniformBufferStandardLayoutFeatures' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceUniformBufferStandardLayoutFeatures' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable this feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceUniformBufferStandardLayoutFeatures = PhysicalDeviceUniformBufferStandardLayoutFeatures
+  { -- | @uniformBufferStandardLayout@ indicates that the implementation supports
+    -- the same layouts for uniform buffers as for storage and other kinds of
+    -- buffers. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Buffer Layout>.
+    uniformBufferStandardLayout :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceUniformBufferStandardLayoutFeatures
+
+instance ToCStruct PhysicalDeviceUniformBufferStandardLayoutFeatures where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceUniformBufferStandardLayoutFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (uniformBufferStandardLayout))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceUniformBufferStandardLayoutFeatures where
+  peekCStruct p = do
+    uniformBufferStandardLayout <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceUniformBufferStandardLayoutFeatures
+             (bool32ToBool uniformBufferStandardLayout)
+
+instance Storable PhysicalDeviceUniformBufferStandardLayoutFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceUniformBufferStandardLayoutFeatures where
+  zero = PhysicalDeviceUniformBufferStandardLayoutFeatures
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout  (PhysicalDeviceUniformBufferStandardLayoutFeatures) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceUniformBufferStandardLayoutFeatures
+
+instance ToCStruct PhysicalDeviceUniformBufferStandardLayoutFeatures
+instance Show PhysicalDeviceUniformBufferStandardLayoutFeatures
+
+instance FromCStruct PhysicalDeviceUniformBufferStandardLayoutFeatures
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs b/src/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs
@@ -0,0 +1,95 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model  ( PhysicalDeviceVulkanMemoryModelFeatures(..)
+                                                               , StructureType(..)
+                                                               ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(..))
+-- | VkPhysicalDeviceVulkanMemoryModelFeatures - Structure describing
+-- features supported by the memory model
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceVulkanMemoryModelFeatures = PhysicalDeviceVulkanMemoryModelFeatures
+  { -- | @vulkanMemoryModel@ indicates whether the Vulkan Memory Model is
+    -- supported, as defined in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model Vulkan Memory Model>.
+    -- This also indicates whether shader modules /can/ declare the
+    -- @VulkanMemoryModel@ capability.
+    vulkanMemoryModel :: Bool
+  , -- | @vulkanMemoryModelDeviceScope@ indicates whether the Vulkan Memory Model
+    -- can use 'Vulkan.Core10.Handles.Device' scope synchronization. This also
+    -- indicates whether shader modules /can/ declare the
+    -- @VulkanMemoryModelDeviceScope@ capability.
+    vulkanMemoryModelDeviceScope :: Bool
+  , -- | @vulkanMemoryModelAvailabilityVisibilityChains@ indicates whether the
+    -- Vulkan Memory Model can use
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model-availability-visibility availability and visibility chains>
+    -- with more than one element.
+    vulkanMemoryModelAvailabilityVisibilityChains :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceVulkanMemoryModelFeatures
+
+instance ToCStruct PhysicalDeviceVulkanMemoryModelFeatures where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceVulkanMemoryModelFeatures{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModel))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModelDeviceScope))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (vulkanMemoryModelAvailabilityVisibilityChains))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceVulkanMemoryModelFeatures where
+  peekCStruct p = do
+    vulkanMemoryModel <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    vulkanMemoryModelDeviceScope <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    vulkanMemoryModelAvailabilityVisibilityChains <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PhysicalDeviceVulkanMemoryModelFeatures
+             (bool32ToBool vulkanMemoryModel) (bool32ToBool vulkanMemoryModelDeviceScope) (bool32ToBool vulkanMemoryModelAvailabilityVisibilityChains)
+
+instance Storable PhysicalDeviceVulkanMemoryModelFeatures where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceVulkanMemoryModelFeatures where
+  zero = PhysicalDeviceVulkanMemoryModelFeatures
+           zero
+           zero
+           zero
+
diff --git a/src/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs-boot b/src/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model  (PhysicalDeviceVulkanMemoryModelFeatures) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceVulkanMemoryModelFeatures
+
+instance ToCStruct PhysicalDeviceVulkanMemoryModelFeatures
+instance Show PhysicalDeviceVulkanMemoryModelFeatures
+
+instance FromCStruct PhysicalDeviceVulkanMemoryModelFeatures
+
diff --git a/src/Vulkan/Dynamic.hs b/src/Vulkan/Dynamic.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Dynamic.hs
@@ -0,0 +1,1529 @@
+{-# language CPP #-}
+module Vulkan.Dynamic  ( InstanceCmds(..)
+                       , getInstanceProcAddr'
+                       , initInstanceCmds
+                       , DeviceCmds(..)
+                       , initDeviceCmds
+                       ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Foreign.Ptr (castFunPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CInt)
+import Foreign.C.Types (CSize)
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Ptr (Ptr(Ptr))
+import Data.Word (Word16)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Vulkan.NamedType ((:::))
+import {-# SOURCE #-} Vulkan.Extensions.WSITypes (AHardwareBuffer)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureBuildGeometryInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureBuildOffsetInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureDeviceAddressInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (AccelerationStructureKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureMemoryRequirementsInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureVersionKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (AcquireNextImageInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (AcquireProfilingLockInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (AndroidHardwareBufferPropertiesANDROID)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_android_surface (AndroidSurfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (BindAccelerationStructureMemoryInfoKHR)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindBufferMemoryInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindImageMemoryInfo)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (BindSparseInfo)
+import {-# SOURCE #-} Vulkan.Core10.BaseType (Bool32)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Buffer)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (BufferCopy)
+import {-# SOURCE #-} Vulkan.Core10.Buffer (BufferCreateInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferDeviceAddressInfo)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (BufferImageCopy)
+import {-# SOURCE #-} Vulkan.Core10.OtherTypes (BufferMemoryBarrier)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (BufferMemoryRequirementsInfo2)
+import {-# SOURCE #-} Vulkan.Core10.Handles (BufferView)
+import {-# SOURCE #-} Vulkan.Core10.BufferView (BufferViewCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_calibrated_timestamps (CalibratedTimestampInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints (CheckpointDataNV)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ClearAttachment)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (ClearColorValue)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (ClearDepthStencilValue)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ClearRect)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (CoarseSampleOrderCustomNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (CoarseSampleOrderTypeNV)
+import {-# SOURCE #-} Vulkan.Core10.CommandBuffer (CommandBufferAllocateInfo)
+import {-# SOURCE #-} Vulkan.Core10.CommandBuffer (CommandBufferBeginInfo)
+import {-# SOURCE #-} Vulkan.Core10.Enums.CommandBufferResetFlagBits (CommandBufferResetFlags)
+import {-# SOURCE #-} Vulkan.Core10.Handles (CommandBuffer_T)
+import {-# SOURCE #-} Vulkan.Core10.Handles (CommandPool)
+import {-# SOURCE #-} Vulkan.Core10.CommandPool (CommandPoolCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.Enums.CommandPoolResetFlagBits (CommandPoolResetFlags)
+import {-# SOURCE #-} Vulkan.Core11.Enums.CommandPoolTrimFlags (CommandPoolTrimFlags)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (ComputePipelineCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conditional_rendering (ConditionalRenderingBeginInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_matrix (CooperativeMatrixPropertiesNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureToMemoryInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (CopyDescriptorSet)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (CopyMemoryToAccelerationStructureInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerMarkerInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerObjectNameInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_marker (DebugMarkerObjectTagInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_report (DebugReportCallbackCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (DebugReportCallbackEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_report (DebugReportFlagsEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsLabelEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessageSeverityFlagBitsEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessageTypeFlagsEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessengerCallbackDataEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsMessengerCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (DebugUtilsMessengerEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsObjectNameInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsObjectTagInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (DeferredOperationKHR)
+import {-# SOURCE #-} Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
+import {-# SOURCE #-} Vulkan.Core10.Handles (DescriptorPool)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorPoolCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.Enums.DescriptorPoolResetFlags (DescriptorPoolResetFlags)
+import {-# SOURCE #-} Vulkan.Core10.Handles (DescriptorSet)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorSetAllocateInfo)
+import {-# SOURCE #-} Vulkan.Core10.Handles (DescriptorSetLayout)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (DescriptorSetLayoutCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (DescriptorSetLayoutSupport)
+import {-# SOURCE #-} Vulkan.Core11.Handles (DescriptorUpdateTemplate)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.BaseType (DeviceAddress)
+import {-# SOURCE #-} Vulkan.Core10.Device (DeviceCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_control (DeviceEventInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentCapabilitiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagsKHR)
+import {-# SOURCE #-} Vulkan.Core10.Handles (DeviceMemory)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (DeviceMemoryOpaqueCaptureAddressInfo)
+import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (DeviceQueueInfo2)
+import {-# SOURCE #-} Vulkan.Core10.BaseType (DeviceSize)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Device_T)
+import {-# SOURCE #-} Vulkan.Extensions.WSITypes (Display)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_control (DisplayEventInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (DisplayKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayModeCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (DisplayModeKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayModeProperties2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayModePropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneCapabilities2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayPlaneCapabilitiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneInfo2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayPlaneProperties2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayPlanePropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_control (DisplayPowerInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_display_properties2 (DisplayProperties2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplayPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display (DisplaySurfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Event)
+import {-# SOURCE #-} Vulkan.Core10.Event (EventCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.ExtensionDiscovery (ExtensionProperties)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (Extent2D)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalBufferProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (ExternalFenceProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalImageFormatPropertiesNV)
+import {-# SOURCE #-} Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagsNV)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (ExternalSemaphoreProperties)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Fence)
+import {-# SOURCE #-} Vulkan.Core10.Fence (FenceCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_fence_fd (FenceGetFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_fence_win32 (FenceGetWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.Enums.Filter (Filter)
+import {-# SOURCE #-} Vulkan.Core10.Enums.Format (Format)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (FormatProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (FormatProperties2)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Framebuffer)
+import {-# SOURCE #-} Vulkan.Core10.Pass (FramebufferCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (FramebufferMixedSamplesCombinationNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GeneratedCommandsInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GeneratedCommandsMemoryRequirementsInfoNV)
+import {-# SOURCE #-} Vulkan.Core10.Pipeline (GraphicsPipelineCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.WSITypes (HANDLE)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_hdr_metadata (HdrMetadataEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_headless_surface (HeadlessSurfaceCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_MVK_ios_surface (IOSSurfaceCreateInfoMVK)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Image)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ImageBlit)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ImageCopy)
+import {-# SOURCE #-} Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import {-# SOURCE #-} Vulkan.Core10.Image (ImageCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_drm_format_modifier (ImageDrmFormatModifierPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (ImageFormatProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (ImageFormatProperties2)
+import {-# SOURCE #-} Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import {-# SOURCE #-} Vulkan.Core10.OtherTypes (ImageMemoryBarrier)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageMemoryRequirementsInfo2)
+import {-# SOURCE #-} Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface (ImagePipeSurfaceCreateInfoFUCHSIA)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (ImageResolve)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageSparseMemoryRequirementsInfo2)
+import {-# SOURCE #-} Vulkan.Core10.Image (ImageSubresource)
+import {-# SOURCE #-} Vulkan.Core10.SharedTypes (ImageSubresourceRange)
+import {-# SOURCE #-} Vulkan.Core10.Enums.ImageTiling (ImageTiling)
+import {-# SOURCE #-} Vulkan.Core10.Enums.ImageType (ImageType)
+import {-# SOURCE #-} Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import {-# SOURCE #-} Vulkan.Core10.Handles (ImageView)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NVX_image_view_handle (ImageViewAddressPropertiesNVX)
+import {-# SOURCE #-} Vulkan.Core10.ImageView (ImageViewCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NVX_image_view_handle (ImageViewHandleInfoNVX)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_fence_fd (ImportFenceFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_fence_win32 (ImportFenceWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_fd (ImportSemaphoreFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_win32 (ImportSemaphoreWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.Enums.IndexType (IndexType)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (IndirectCommandsLayoutCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (IndirectCommandsLayoutNV)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (InitializePerformanceApiInfoINTEL)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Instance_T)
+import {-# SOURCE #-} Vulkan.Core10.LayerDiscovery (LayerProperties)
+import {-# SOURCE #-} Vulkan.Extensions.VK_MVK_macos_surface (MacOSSurfaceCreateInfoMVK)
+import {-# SOURCE #-} Vulkan.Core10.Memory (MappedMemoryRange)
+import {-# SOURCE #-} Vulkan.Core10.Memory (MemoryAllocateInfo)
+import {-# SOURCE #-} Vulkan.Core10.OtherTypes (MemoryBarrier)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryFdPropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (MemoryGetAndroidHardwareBufferInfoANDROID)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_fd (MemoryGetFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryGetWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_external_memory_host (MemoryHostPointerPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core10.Enums.MemoryMapFlags (MemoryMapFlags)
+import {-# SOURCE #-} Vulkan.Core10.MemoryManagement (MemoryRequirements)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryWin32HandlePropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_metal_surface (MetalSurfaceCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (MultisamplePropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core10.Enums.ObjectType (ObjectType)
+import {-# SOURCE #-} Vulkan.Core10.FuncPointers (PFN_vkVoidFunction)
+import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (PastPresentationTimingGOOGLE)
+import {-# SOURCE #-} Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceConfigurationAcquireInfoINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (PerformanceConfigurationINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PerformanceCounterDescriptionKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PerformanceCounterKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceMarkerInfoINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceOverrideInfoINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceParameterTypeINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceStreamMarkerInfoINTEL)
+import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_performance_query (PerformanceValueINTEL)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalBufferInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (PhysicalDeviceExternalFenceInfo)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (PhysicalDeviceExternalSemaphoreInfo)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (PhysicalDeviceGroupProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceImageFormatInfo2)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceMemoryProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceMemoryProperties2)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceProperties2)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceSparseImageFormatInfo2)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (PhysicalDeviceSurfaceInfo2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_tooling_info (PhysicalDeviceToolPropertiesEXT)
+import {-# SOURCE #-} Vulkan.Core10.Handles (PhysicalDevice_T)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Pipeline)
+import {-# SOURCE #-} Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
+import {-# SOURCE #-} Vulkan.Core10.Handles (PipelineCache)
+import {-# SOURCE #-} Vulkan.Core10.PipelineCache (PipelineCacheCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableInternalRepresentationKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutablePropertiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableStatisticKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.Handles (PipelineLayout)
+import {-# SOURCE #-} Vulkan.Core10.PipelineLayout (PipelineLayoutCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits)
+import {-# SOURCE #-} Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (PresentInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_surface (PresentModeKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (PrivateDataSlotCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (PrivateDataSlotEXT)
+import {-# SOURCE #-} Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlags)
+import {-# SOURCE #-} Vulkan.Core10.Handles (QueryPool)
+import {-# SOURCE #-} Vulkan.Core10.Query (QueryPoolCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (QueryPoolPerformanceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Core10.Enums.QueryResultFlagBits (QueryResultFlags)
+import {-# SOURCE #-} Vulkan.Core10.Enums.QueryType (QueryType)
+import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (QueueFamilyProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (QueueFamilyProperties2)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Queue_T)
+import {-# SOURCE #-} Vulkan.Extensions.WSITypes (RROutput)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingPipelineCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (RayTracingPipelineCreateInfoNV)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (Rect2D)
+import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (RefreshCycleDurationGOOGLE)
+import {-# SOURCE #-} Vulkan.Core10.Handles (RenderPass)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo)
+import {-# SOURCE #-} Vulkan.Core10.Pass (RenderPassCreateInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (RenderPassCreateInfo2)
+import {-# SOURCE #-} Vulkan.Core10.Enums.Result (Result)
+import {-# SOURCE #-} Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Sampler)
+import {-# SOURCE #-} Vulkan.Core10.Sampler (SamplerCreateInfo)
+import {-# SOURCE #-} Vulkan.Core11.Handles (SamplerYcbcrConversion)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.Handles (Semaphore)
+import {-# SOURCE #-} Vulkan.Core10.QueueSemaphore (SemaphoreCreateInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_fd (SemaphoreGetFdInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_semaphore_win32 (SemaphoreGetWin32HandleInfoKHR)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreSignalInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreWaitInfo)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_shader_info (ShaderInfoTypeAMD)
+import {-# SOURCE #-} Vulkan.Core10.Handles (ShaderModule)
+import {-# SOURCE #-} Vulkan.Core10.Shader (ShaderModuleCreateInfo)
+import {-# SOURCE #-} Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits)
+import {-# SOURCE #-} Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (ShadingRatePaletteNV)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (SparseImageFormatProperties)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (SparseImageFormatProperties2)
+import {-# SOURCE #-} Vulkan.Core10.SparseResourceMemoryManagement (SparseImageMemoryRequirements)
+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (SparseImageMemoryRequirements2)
+import {-# SOURCE #-} Vulkan.Core10.Enums.StencilFaceFlagBits (StencilFaceFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_GGP_stream_descriptor_surface (StreamDescriptorSurfaceCreateInfoGGP)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing (StridedBufferRegionKHR)
+import {-# SOURCE #-} Vulkan.Core10.Queue (SubmitInfo)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassBeginInfo)
+import {-# SOURCE #-} Vulkan.Core10.Enums.SubpassContents (SubpassContents)
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassEndInfo)
+import {-# SOURCE #-} Vulkan.Core10.Image (SubresourceLayout)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCapabilities2EXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (SurfaceCapabilities2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_surface (SurfaceCapabilitiesKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagBitsEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (SurfaceFormat2KHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_surface (SurfaceFormatKHR)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (SurfaceKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (SwapchainKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_calibrated_timestamps (TimeDomainEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_validation_cache (ValidationCacheCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (ValidationCacheEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NN_vi_surface (ViSurfaceCreateInfoNN)
+import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (Viewport)
+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_clip_space_w_scaling (ViewportWScalingNV)
+import {-# SOURCE #-} Vulkan.Extensions.WSITypes (VisualID)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_wayland_surface (WaylandSurfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_win32_surface (Win32SurfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.WSITypes (Wl_display)
+import {-# SOURCE #-} Vulkan.Core10.DescriptorSet (WriteDescriptorSet)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_xcb_surface (XcbSurfaceCreateInfoKHR)
+import {-# SOURCE #-} Vulkan.Extensions.WSITypes (Xcb_connection_t)
+import {-# SOURCE #-} Vulkan.Extensions.WSITypes (Xcb_visualid_t)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_xlib_surface (XlibSurfaceCreateInfoKHR)
+import Vulkan.Zero (Zero(..))
+data InstanceCmds = InstanceCmds
+  { instanceCmdsHandle :: Ptr Instance_T
+  , pVkDestroyInstance :: FunPtr (Ptr Instance_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkEnumeratePhysicalDevices :: FunPtr (Ptr Instance_T -> ("pPhysicalDeviceCount" ::: Ptr Word32) -> ("pPhysicalDevices" ::: Ptr (Ptr PhysicalDevice_T)) -> IO Result)
+  , pVkGetInstanceProcAddr :: FunPtr (Ptr Instance_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction)
+  , pVkGetPhysicalDeviceProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pProperties" ::: Ptr PhysicalDeviceProperties) -> IO ())
+  , pVkGetPhysicalDeviceQueueFamilyProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr QueueFamilyProperties) -> IO ())
+  , pVkGetPhysicalDeviceMemoryProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pMemoryProperties" ::: Ptr PhysicalDeviceMemoryProperties) -> IO ())
+  , pVkGetPhysicalDeviceFeatures :: FunPtr (Ptr PhysicalDevice_T -> ("pFeatures" ::: Ptr PhysicalDeviceFeatures) -> IO ())
+  , pVkGetPhysicalDeviceFormatProperties :: FunPtr (Ptr PhysicalDevice_T -> Format -> ("pFormatProperties" ::: Ptr FormatProperties) -> IO ())
+  , pVkGetPhysicalDeviceImageFormatProperties :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ("pImageFormatProperties" ::: Ptr ImageFormatProperties) -> IO Result)
+  , pVkCreateDevice :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pCreateInfo" ::: Ptr (DeviceCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDevice" ::: Ptr (Ptr Device_T)) -> IO Result)
+  , pVkEnumerateDeviceLayerProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr LayerProperties) -> IO Result)
+  , pVkEnumerateDeviceExtensionProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr ExtensionProperties) -> IO Result)
+  , pVkGetPhysicalDeviceSparseImageFormatProperties :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ("samples" ::: SampleCountFlagBits) -> ImageUsageFlags -> ImageTiling -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr SparseImageFormatProperties) -> IO ())
+  , pVkCreateAndroidSurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr AndroidSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkGetPhysicalDeviceDisplayPropertiesKHR :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPropertiesKHR) -> IO Result)
+  , pVkGetPhysicalDeviceDisplayPlanePropertiesKHR :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPlanePropertiesKHR) -> IO Result)
+  , pVkGetDisplayPlaneSupportedDisplaysKHR :: FunPtr (Ptr PhysicalDevice_T -> ("planeIndex" ::: Word32) -> ("pDisplayCount" ::: Ptr Word32) -> ("pDisplays" ::: Ptr DisplayKHR) -> IO Result)
+  , pVkGetDisplayModePropertiesKHR :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayModePropertiesKHR) -> IO Result)
+  , pVkCreateDisplayModeKHR :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> ("pCreateInfo" ::: Ptr DisplayModeCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMode" ::: Ptr DisplayModeKHR) -> IO Result)
+  , pVkGetDisplayPlaneCapabilitiesKHR :: FunPtr (Ptr PhysicalDevice_T -> DisplayModeKHR -> ("planeIndex" ::: Word32) -> ("pCapabilities" ::: Ptr DisplayPlaneCapabilitiesKHR) -> IO Result)
+  , pVkCreateDisplayPlaneSurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr DisplaySurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkDestroySurfaceKHR :: FunPtr (Ptr Instance_T -> SurfaceKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetPhysicalDeviceSurfaceSupportKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> SurfaceKHR -> ("pSupported" ::: Ptr Bool32) -> IO Result)
+  , pVkGetPhysicalDeviceSurfaceCapabilitiesKHR :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR) -> IO Result)
+  , pVkGetPhysicalDeviceSurfaceFormatsKHR :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceFormatCount" ::: Ptr Word32) -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO Result)
+  , pVkGetPhysicalDeviceSurfacePresentModesKHR :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> ("pPresentModeCount" ::: Ptr Word32) -> ("pPresentModes" ::: Ptr PresentModeKHR) -> IO Result)
+  , pVkCreateViSurfaceNN :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr ViSurfaceCreateInfoNN) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkCreateWaylandSurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr WaylandSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkGetPhysicalDeviceWaylandPresentationSupportKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> Ptr Wl_display -> IO Bool32)
+  , pVkCreateWin32SurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr Win32SurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkGetPhysicalDeviceWin32PresentationSupportKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> IO Bool32)
+  , pVkCreateXlibSurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr XlibSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkGetPhysicalDeviceXlibPresentationSupportKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> ("dpy" ::: Ptr Display) -> VisualID -> IO Bool32)
+  , pVkCreateXcbSurfaceKHR :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr XcbSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkGetPhysicalDeviceXcbPresentationSupportKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> Ptr Xcb_connection_t -> ("visual_id" ::: Xcb_visualid_t) -> IO Bool32)
+  , pVkCreateImagePipeSurfaceFUCHSIA :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr ImagePipeSurfaceCreateInfoFUCHSIA) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkCreateStreamDescriptorSurfaceGGP :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr StreamDescriptorSurfaceCreateInfoGGP) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkCreateDebugReportCallbackEXT :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr DebugReportCallbackCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pCallback" ::: Ptr DebugReportCallbackEXT) -> IO Result)
+  , pVkDestroyDebugReportCallbackEXT :: FunPtr (Ptr Instance_T -> DebugReportCallbackEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkDebugReportMessageEXT :: FunPtr (Ptr Instance_T -> DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> ("object" ::: Word64) -> ("location" ::: CSize) -> ("messageCode" ::: Int32) -> ("pLayerPrefix" ::: Ptr CChar) -> ("pMessage" ::: Ptr CChar) -> IO ())
+  , pVkGetPhysicalDeviceExternalImageFormatPropertiesNV :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ("externalHandleType" ::: ExternalMemoryHandleTypeFlagsNV) -> ("pExternalImageFormatProperties" ::: Ptr ExternalImageFormatPropertiesNV) -> IO Result)
+  , pVkGetPhysicalDeviceFeatures2 :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pFeatures" ::: Ptr (PhysicalDeviceFeatures2 a)) -> IO ())
+  , pVkGetPhysicalDeviceProperties2 :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pProperties" ::: Ptr (PhysicalDeviceProperties2 a)) -> IO ())
+  , pVkGetPhysicalDeviceFormatProperties2 :: forall a . FunPtr (Ptr PhysicalDevice_T -> Format -> ("pFormatProperties" ::: Ptr (FormatProperties2 a)) -> IO ())
+  , pVkGetPhysicalDeviceImageFormatProperties2 :: forall a b . FunPtr (Ptr PhysicalDevice_T -> ("pImageFormatInfo" ::: Ptr (PhysicalDeviceImageFormatInfo2 a)) -> ("pImageFormatProperties" ::: Ptr (ImageFormatProperties2 b)) -> IO Result)
+  , pVkGetPhysicalDeviceQueueFamilyProperties2 :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr (QueueFamilyProperties2 a)) -> IO ())
+  , pVkGetPhysicalDeviceMemoryProperties2 :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pMemoryProperties" ::: Ptr (PhysicalDeviceMemoryProperties2 a)) -> IO ())
+  , pVkGetPhysicalDeviceSparseImageFormatProperties2 :: FunPtr (Ptr PhysicalDevice_T -> ("pFormatInfo" ::: Ptr PhysicalDeviceSparseImageFormatInfo2) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr SparseImageFormatProperties2) -> IO ())
+  , pVkGetPhysicalDeviceExternalBufferProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pExternalBufferInfo" ::: Ptr PhysicalDeviceExternalBufferInfo) -> ("pExternalBufferProperties" ::: Ptr ExternalBufferProperties) -> IO ())
+  , pVkGetPhysicalDeviceExternalSemaphoreProperties :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pExternalSemaphoreInfo" ::: Ptr (PhysicalDeviceExternalSemaphoreInfo a)) -> ("pExternalSemaphoreProperties" ::: Ptr ExternalSemaphoreProperties) -> IO ())
+  , pVkGetPhysicalDeviceExternalFenceProperties :: FunPtr (Ptr PhysicalDevice_T -> ("pExternalFenceInfo" ::: Ptr PhysicalDeviceExternalFenceInfo) -> ("pExternalFenceProperties" ::: Ptr ExternalFenceProperties) -> IO ())
+  , pVkReleaseDisplayEXT :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> IO Result)
+  , pVkAcquireXlibDisplayEXT :: FunPtr (Ptr PhysicalDevice_T -> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result)
+  , pVkGetRandROutputDisplayEXT :: FunPtr (Ptr PhysicalDevice_T -> ("dpy" ::: Ptr Display) -> RROutput -> ("pDisplay" ::: Ptr DisplayKHR) -> IO Result)
+  , pVkGetPhysicalDeviceSurfaceCapabilities2EXT :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilities2EXT) -> IO Result)
+  , pVkEnumeratePhysicalDeviceGroups :: FunPtr (Ptr Instance_T -> ("pPhysicalDeviceGroupCount" ::: Ptr Word32) -> ("pPhysicalDeviceGroupProperties" ::: Ptr PhysicalDeviceGroupProperties) -> IO Result)
+  , pVkGetPhysicalDevicePresentRectanglesKHR :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> ("pRectCount" ::: Ptr Word32) -> ("pRects" ::: Ptr Rect2D) -> IO Result)
+  , pVkCreateIOSSurfaceMVK :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr IOSSurfaceCreateInfoMVK) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkCreateMacOSSurfaceMVK :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr MacOSSurfaceCreateInfoMVK) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkCreateMetalSurfaceEXT :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr MetalSurfaceCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkGetPhysicalDeviceMultisamplePropertiesEXT :: FunPtr (Ptr PhysicalDevice_T -> ("samples" ::: SampleCountFlagBits) -> ("pMultisampleProperties" ::: Ptr MultisamplePropertiesEXT) -> IO ())
+  , pVkGetPhysicalDeviceSurfaceCapabilities2KHR :: forall a b . FunPtr (Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR a)) -> ("pSurfaceCapabilities" ::: Ptr (SurfaceCapabilities2KHR b)) -> IO Result)
+  , pVkGetPhysicalDeviceSurfaceFormats2KHR :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR a)) -> ("pSurfaceFormatCount" ::: Ptr Word32) -> ("pSurfaceFormats" ::: Ptr SurfaceFormat2KHR) -> IO Result)
+  , pVkGetPhysicalDeviceDisplayProperties2KHR :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayProperties2KHR) -> IO Result)
+  , pVkGetPhysicalDeviceDisplayPlaneProperties2KHR :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPlaneProperties2KHR) -> IO Result)
+  , pVkGetDisplayModeProperties2KHR :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayModeProperties2KHR) -> IO Result)
+  , pVkGetDisplayPlaneCapabilities2KHR :: FunPtr (Ptr PhysicalDevice_T -> ("pDisplayPlaneInfo" ::: Ptr DisplayPlaneInfo2KHR) -> ("pCapabilities" ::: Ptr DisplayPlaneCapabilities2KHR) -> IO Result)
+  , pVkGetPhysicalDeviceCalibrateableTimeDomainsEXT :: FunPtr (Ptr PhysicalDevice_T -> ("pTimeDomainCount" ::: Ptr Word32) -> ("pTimeDomains" ::: Ptr TimeDomainEXT) -> IO Result)
+  , pVkCreateDebugUtilsMessengerEXT :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT) -> IO Result)
+  , pVkDestroyDebugUtilsMessengerEXT :: FunPtr (Ptr Instance_T -> DebugUtilsMessengerEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkSubmitDebugUtilsMessageEXT :: FunPtr (Ptr Instance_T -> DebugUtilsMessageSeverityFlagBitsEXT -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT) -> IO ())
+  , pVkGetPhysicalDeviceCooperativeMatrixPropertiesNV :: FunPtr (Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr CooperativeMatrixPropertiesNV) -> IO Result)
+  , pVkGetPhysicalDeviceSurfacePresentModes2EXT :: forall a . FunPtr (Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR a)) -> ("pPresentModeCount" ::: Ptr Word32) -> ("pPresentModes" ::: Ptr PresentModeKHR) -> IO Result)
+  , pVkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR :: FunPtr (Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> ("pCounterCount" ::: Ptr Word32) -> ("pCounters" ::: Ptr PerformanceCounterKHR) -> ("pCounterDescriptions" ::: Ptr PerformanceCounterDescriptionKHR) -> IO Result)
+  , pVkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR :: FunPtr (Ptr PhysicalDevice_T -> ("pPerformanceQueryCreateInfo" ::: Ptr QueryPoolPerformanceCreateInfoKHR) -> ("pNumPasses" ::: Ptr Word32) -> IO ())
+  , pVkCreateHeadlessSurfaceEXT :: FunPtr (Ptr Instance_T -> ("pCreateInfo" ::: Ptr HeadlessSurfaceCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result)
+  , pVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV :: FunPtr (Ptr PhysicalDevice_T -> ("pCombinationCount" ::: Ptr Word32) -> ("pCombinations" ::: Ptr FramebufferMixedSamplesCombinationNV) -> IO Result)
+  , pVkGetPhysicalDeviceToolPropertiesEXT :: FunPtr (Ptr PhysicalDevice_T -> ("pToolCount" ::: Ptr Word32) -> ("pToolProperties" ::: Ptr PhysicalDeviceToolPropertiesEXT) -> IO Result)
+  }
+
+deriving instance Eq InstanceCmds
+deriving instance Show InstanceCmds
+instance Zero InstanceCmds where
+  zero = InstanceCmds
+    nullPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+
+-- | A version of 'getInstanceProcAddr' which can be called
+-- with a null pointer for the instance.
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "vkGetInstanceProcAddr" getInstanceProcAddr' :: Ptr Instance_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
+
+initInstanceCmds :: Ptr Instance_T -> IO InstanceCmds
+initInstanceCmds handle = do
+  vkDestroyInstance <- getInstanceProcAddr' handle (Ptr "vkDestroyInstance"#)
+  vkEnumeratePhysicalDevices <- getInstanceProcAddr' handle (Ptr "vkEnumeratePhysicalDevices"#)
+  vkGetInstanceProcAddr <- getInstanceProcAddr' handle (Ptr "vkGetInstanceProcAddr"#)
+  vkGetPhysicalDeviceProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceProperties"#)
+  vkGetPhysicalDeviceQueueFamilyProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceQueueFamilyProperties"#)
+  vkGetPhysicalDeviceMemoryProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceMemoryProperties"#)
+  vkGetPhysicalDeviceFeatures <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceFeatures"#)
+  vkGetPhysicalDeviceFormatProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceFormatProperties"#)
+  vkGetPhysicalDeviceImageFormatProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceImageFormatProperties"#)
+  vkCreateDevice <- getInstanceProcAddr' handle (Ptr "vkCreateDevice"#)
+  vkEnumerateDeviceLayerProperties <- getInstanceProcAddr' handle (Ptr "vkEnumerateDeviceLayerProperties"#)
+  vkEnumerateDeviceExtensionProperties <- getInstanceProcAddr' handle (Ptr "vkEnumerateDeviceExtensionProperties"#)
+  vkGetPhysicalDeviceSparseImageFormatProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSparseImageFormatProperties"#)
+  vkCreateAndroidSurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateAndroidSurfaceKHR"#)
+  vkGetPhysicalDeviceDisplayPropertiesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceDisplayPropertiesKHR"#)
+  vkGetPhysicalDeviceDisplayPlanePropertiesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"#)
+  vkGetDisplayPlaneSupportedDisplaysKHR <- getInstanceProcAddr' handle (Ptr "vkGetDisplayPlaneSupportedDisplaysKHR"#)
+  vkGetDisplayModePropertiesKHR <- getInstanceProcAddr' handle (Ptr "vkGetDisplayModePropertiesKHR"#)
+  vkCreateDisplayModeKHR <- getInstanceProcAddr' handle (Ptr "vkCreateDisplayModeKHR"#)
+  vkGetDisplayPlaneCapabilitiesKHR <- getInstanceProcAddr' handle (Ptr "vkGetDisplayPlaneCapabilitiesKHR"#)
+  vkCreateDisplayPlaneSurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateDisplayPlaneSurfaceKHR"#)
+  vkDestroySurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkDestroySurfaceKHR"#)
+  vkGetPhysicalDeviceSurfaceSupportKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceSupportKHR"#)
+  vkGetPhysicalDeviceSurfaceCapabilitiesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"#)
+  vkGetPhysicalDeviceSurfaceFormatsKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceFormatsKHR"#)
+  vkGetPhysicalDeviceSurfacePresentModesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfacePresentModesKHR"#)
+  vkCreateViSurfaceNN <- getInstanceProcAddr' handle (Ptr "vkCreateViSurfaceNN"#)
+  vkCreateWaylandSurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateWaylandSurfaceKHR"#)
+  vkGetPhysicalDeviceWaylandPresentationSupportKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceWaylandPresentationSupportKHR"#)
+  vkCreateWin32SurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateWin32SurfaceKHR"#)
+  vkGetPhysicalDeviceWin32PresentationSupportKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceWin32PresentationSupportKHR"#)
+  vkCreateXlibSurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateXlibSurfaceKHR"#)
+  vkGetPhysicalDeviceXlibPresentationSupportKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceXlibPresentationSupportKHR"#)
+  vkCreateXcbSurfaceKHR <- getInstanceProcAddr' handle (Ptr "vkCreateXcbSurfaceKHR"#)
+  vkGetPhysicalDeviceXcbPresentationSupportKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceXcbPresentationSupportKHR"#)
+  vkCreateImagePipeSurfaceFUCHSIA <- getInstanceProcAddr' handle (Ptr "vkCreateImagePipeSurfaceFUCHSIA"#)
+  vkCreateStreamDescriptorSurfaceGGP <- getInstanceProcAddr' handle (Ptr "vkCreateStreamDescriptorSurfaceGGP"#)
+  vkCreateDebugReportCallbackEXT <- getInstanceProcAddr' handle (Ptr "vkCreateDebugReportCallbackEXT"#)
+  vkDestroyDebugReportCallbackEXT <- getInstanceProcAddr' handle (Ptr "vkDestroyDebugReportCallbackEXT"#)
+  vkDebugReportMessageEXT <- getInstanceProcAddr' handle (Ptr "vkDebugReportMessageEXT"#)
+  vkGetPhysicalDeviceExternalImageFormatPropertiesNV <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceExternalImageFormatPropertiesNV"#)
+  vkGetPhysicalDeviceFeatures2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceFeatures2"#)
+  vkGetPhysicalDeviceProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceProperties2"#)
+  vkGetPhysicalDeviceFormatProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceFormatProperties2"#)
+  vkGetPhysicalDeviceImageFormatProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceImageFormatProperties2"#)
+  vkGetPhysicalDeviceQueueFamilyProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceQueueFamilyProperties2"#)
+  vkGetPhysicalDeviceMemoryProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceMemoryProperties2"#)
+  vkGetPhysicalDeviceSparseImageFormatProperties2 <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSparseImageFormatProperties2"#)
+  vkGetPhysicalDeviceExternalBufferProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceExternalBufferProperties"#)
+  vkGetPhysicalDeviceExternalSemaphoreProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceExternalSemaphoreProperties"#)
+  vkGetPhysicalDeviceExternalFenceProperties <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceExternalFenceProperties"#)
+  vkReleaseDisplayEXT <- getInstanceProcAddr' handle (Ptr "vkReleaseDisplayEXT"#)
+  vkAcquireXlibDisplayEXT <- getInstanceProcAddr' handle (Ptr "vkAcquireXlibDisplayEXT"#)
+  vkGetRandROutputDisplayEXT <- getInstanceProcAddr' handle (Ptr "vkGetRandROutputDisplayEXT"#)
+  vkGetPhysicalDeviceSurfaceCapabilities2EXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceCapabilities2EXT"#)
+  vkEnumeratePhysicalDeviceGroups <- getInstanceProcAddr' handle (Ptr "vkEnumeratePhysicalDeviceGroups"#)
+  vkGetPhysicalDevicePresentRectanglesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDevicePresentRectanglesKHR"#)
+  vkCreateIOSSurfaceMVK <- getInstanceProcAddr' handle (Ptr "vkCreateIOSSurfaceMVK"#)
+  vkCreateMacOSSurfaceMVK <- getInstanceProcAddr' handle (Ptr "vkCreateMacOSSurfaceMVK"#)
+  vkCreateMetalSurfaceEXT <- getInstanceProcAddr' handle (Ptr "vkCreateMetalSurfaceEXT"#)
+  vkGetPhysicalDeviceMultisamplePropertiesEXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceMultisamplePropertiesEXT"#)
+  vkGetPhysicalDeviceSurfaceCapabilities2KHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceCapabilities2KHR"#)
+  vkGetPhysicalDeviceSurfaceFormats2KHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfaceFormats2KHR"#)
+  vkGetPhysicalDeviceDisplayProperties2KHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceDisplayProperties2KHR"#)
+  vkGetPhysicalDeviceDisplayPlaneProperties2KHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceDisplayPlaneProperties2KHR"#)
+  vkGetDisplayModeProperties2KHR <- getInstanceProcAddr' handle (Ptr "vkGetDisplayModeProperties2KHR"#)
+  vkGetDisplayPlaneCapabilities2KHR <- getInstanceProcAddr' handle (Ptr "vkGetDisplayPlaneCapabilities2KHR"#)
+  vkGetPhysicalDeviceCalibrateableTimeDomainsEXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"#)
+  vkCreateDebugUtilsMessengerEXT <- getInstanceProcAddr' handle (Ptr "vkCreateDebugUtilsMessengerEXT"#)
+  vkDestroyDebugUtilsMessengerEXT <- getInstanceProcAddr' handle (Ptr "vkDestroyDebugUtilsMessengerEXT"#)
+  vkSubmitDebugUtilsMessageEXT <- getInstanceProcAddr' handle (Ptr "vkSubmitDebugUtilsMessageEXT"#)
+  vkGetPhysicalDeviceCooperativeMatrixPropertiesNV <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV"#)
+  vkGetPhysicalDeviceSurfacePresentModes2EXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSurfacePresentModes2EXT"#)
+  vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR <- getInstanceProcAddr' handle (Ptr "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"#)
+  vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"#)
+  vkCreateHeadlessSurfaceEXT <- getInstanceProcAddr' handle (Ptr "vkCreateHeadlessSurfaceEXT"#)
+  vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"#)
+  vkGetPhysicalDeviceToolPropertiesEXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceToolPropertiesEXT"#)
+  pure $ InstanceCmds handle
+    (castFunPtr @_ @(Ptr Instance_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyInstance)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pPhysicalDeviceCount" ::: Ptr Word32) -> ("pPhysicalDevices" ::: Ptr (Ptr PhysicalDevice_T)) -> IO Result) vkEnumeratePhysicalDevices)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) vkGetInstanceProcAddr)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pProperties" ::: Ptr PhysicalDeviceProperties) -> IO ()) vkGetPhysicalDeviceProperties)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr QueueFamilyProperties) -> IO ()) vkGetPhysicalDeviceQueueFamilyProperties)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pMemoryProperties" ::: Ptr PhysicalDeviceMemoryProperties) -> IO ()) vkGetPhysicalDeviceMemoryProperties)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pFeatures" ::: Ptr PhysicalDeviceFeatures) -> IO ()) vkGetPhysicalDeviceFeatures)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> Format -> ("pFormatProperties" ::: Ptr FormatProperties) -> IO ()) vkGetPhysicalDeviceFormatProperties)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ("pImageFormatProperties" ::: Ptr ImageFormatProperties) -> IO Result) vkGetPhysicalDeviceImageFormatProperties)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pCreateInfo" ::: Ptr (DeviceCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDevice" ::: Ptr (Ptr Device_T)) -> IO Result) vkCreateDevice)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr LayerProperties) -> IO Result) vkEnumerateDeviceLayerProperties)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr ExtensionProperties) -> IO Result) vkEnumerateDeviceExtensionProperties)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> Format -> ImageType -> ("samples" ::: SampleCountFlagBits) -> ImageUsageFlags -> ImageTiling -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr SparseImageFormatProperties) -> IO ()) vkGetPhysicalDeviceSparseImageFormatProperties)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr AndroidSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateAndroidSurfaceKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPropertiesKHR) -> IO Result) vkGetPhysicalDeviceDisplayPropertiesKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPlanePropertiesKHR) -> IO Result) vkGetPhysicalDeviceDisplayPlanePropertiesKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("planeIndex" ::: Word32) -> ("pDisplayCount" ::: Ptr Word32) -> ("pDisplays" ::: Ptr DisplayKHR) -> IO Result) vkGetDisplayPlaneSupportedDisplaysKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> DisplayKHR -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayModePropertiesKHR) -> IO Result) vkGetDisplayModePropertiesKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> DisplayKHR -> ("pCreateInfo" ::: Ptr DisplayModeCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMode" ::: Ptr DisplayModeKHR) -> IO Result) vkCreateDisplayModeKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> DisplayModeKHR -> ("planeIndex" ::: Word32) -> ("pCapabilities" ::: Ptr DisplayPlaneCapabilitiesKHR) -> IO Result) vkGetDisplayPlaneCapabilitiesKHR)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr DisplaySurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateDisplayPlaneSurfaceKHR)
+    (castFunPtr @_ @(Ptr Instance_T -> SurfaceKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroySurfaceKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> SurfaceKHR -> ("pSupported" ::: Ptr Bool32) -> IO Result) vkGetPhysicalDeviceSurfaceSupportKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilitiesKHR) -> IO Result) vkGetPhysicalDeviceSurfaceCapabilitiesKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceFormatCount" ::: Ptr Word32) -> ("pSurfaceFormats" ::: Ptr SurfaceFormatKHR) -> IO Result) vkGetPhysicalDeviceSurfaceFormatsKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> SurfaceKHR -> ("pPresentModeCount" ::: Ptr Word32) -> ("pPresentModes" ::: Ptr PresentModeKHR) -> IO Result) vkGetPhysicalDeviceSurfacePresentModesKHR)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr ViSurfaceCreateInfoNN) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateViSurfaceNN)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr WaylandSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateWaylandSurfaceKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> Ptr Wl_display -> IO Bool32) vkGetPhysicalDeviceWaylandPresentationSupportKHR)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr Win32SurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateWin32SurfaceKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> IO Bool32) vkGetPhysicalDeviceWin32PresentationSupportKHR)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr XlibSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateXlibSurfaceKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> ("dpy" ::: Ptr Display) -> VisualID -> IO Bool32) vkGetPhysicalDeviceXlibPresentationSupportKHR)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr XcbSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateXcbSurfaceKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> Ptr Xcb_connection_t -> ("visual_id" ::: Xcb_visualid_t) -> IO Bool32) vkGetPhysicalDeviceXcbPresentationSupportKHR)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr ImagePipeSurfaceCreateInfoFUCHSIA) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateImagePipeSurfaceFUCHSIA)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr StreamDescriptorSurfaceCreateInfoGGP) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateStreamDescriptorSurfaceGGP)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr DebugReportCallbackCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pCallback" ::: Ptr DebugReportCallbackEXT) -> IO Result) vkCreateDebugReportCallbackEXT)
+    (castFunPtr @_ @(Ptr Instance_T -> DebugReportCallbackEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDebugReportCallbackEXT)
+    (castFunPtr @_ @(Ptr Instance_T -> DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> ("object" ::: Word64) -> ("location" ::: CSize) -> ("messageCode" ::: Int32) -> ("pLayerPrefix" ::: Ptr CChar) -> ("pMessage" ::: Ptr CChar) -> IO ()) vkDebugReportMessageEXT)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ("externalHandleType" ::: ExternalMemoryHandleTypeFlagsNV) -> ("pExternalImageFormatProperties" ::: Ptr ExternalImageFormatPropertiesNV) -> IO Result) vkGetPhysicalDeviceExternalImageFormatPropertiesNV)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pFeatures" ::: Ptr (PhysicalDeviceFeatures2 _)) -> IO ()) vkGetPhysicalDeviceFeatures2)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pProperties" ::: Ptr (PhysicalDeviceProperties2 _)) -> IO ()) vkGetPhysicalDeviceProperties2)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> Format -> ("pFormatProperties" ::: Ptr (FormatProperties2 _)) -> IO ()) vkGetPhysicalDeviceFormatProperties2)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pImageFormatInfo" ::: Ptr (PhysicalDeviceImageFormatInfo2 _)) -> ("pImageFormatProperties" ::: Ptr (ImageFormatProperties2 _)) -> IO Result) vkGetPhysicalDeviceImageFormatProperties2)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr (QueueFamilyProperties2 _)) -> IO ()) vkGetPhysicalDeviceQueueFamilyProperties2)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pMemoryProperties" ::: Ptr (PhysicalDeviceMemoryProperties2 _)) -> IO ()) vkGetPhysicalDeviceMemoryProperties2)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pFormatInfo" ::: Ptr PhysicalDeviceSparseImageFormatInfo2) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr SparseImageFormatProperties2) -> IO ()) vkGetPhysicalDeviceSparseImageFormatProperties2)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pExternalBufferInfo" ::: Ptr PhysicalDeviceExternalBufferInfo) -> ("pExternalBufferProperties" ::: Ptr ExternalBufferProperties) -> IO ()) vkGetPhysicalDeviceExternalBufferProperties)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pExternalSemaphoreInfo" ::: Ptr (PhysicalDeviceExternalSemaphoreInfo _)) -> ("pExternalSemaphoreProperties" ::: Ptr ExternalSemaphoreProperties) -> IO ()) vkGetPhysicalDeviceExternalSemaphoreProperties)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pExternalFenceInfo" ::: Ptr PhysicalDeviceExternalFenceInfo) -> ("pExternalFenceProperties" ::: Ptr ExternalFenceProperties) -> IO ()) vkGetPhysicalDeviceExternalFenceProperties)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> DisplayKHR -> IO Result) vkReleaseDisplayEXT)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("dpy" ::: Ptr Display) -> DisplayKHR -> IO Result) vkAcquireXlibDisplayEXT)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("dpy" ::: Ptr Display) -> RROutput -> ("pDisplay" ::: Ptr DisplayKHR) -> IO Result) vkGetRandROutputDisplayEXT)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> SurfaceKHR -> ("pSurfaceCapabilities" ::: Ptr SurfaceCapabilities2EXT) -> IO Result) vkGetPhysicalDeviceSurfaceCapabilities2EXT)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pPhysicalDeviceGroupCount" ::: Ptr Word32) -> ("pPhysicalDeviceGroupProperties" ::: Ptr PhysicalDeviceGroupProperties) -> IO Result) vkEnumeratePhysicalDeviceGroups)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> SurfaceKHR -> ("pRectCount" ::: Ptr Word32) -> ("pRects" ::: Ptr Rect2D) -> IO Result) vkGetPhysicalDevicePresentRectanglesKHR)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr IOSSurfaceCreateInfoMVK) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateIOSSurfaceMVK)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr MacOSSurfaceCreateInfoMVK) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateMacOSSurfaceMVK)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr MetalSurfaceCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateMetalSurfaceEXT)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("samples" ::: SampleCountFlagBits) -> ("pMultisampleProperties" ::: Ptr MultisamplePropertiesEXT) -> IO ()) vkGetPhysicalDeviceMultisamplePropertiesEXT)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR _)) -> ("pSurfaceCapabilities" ::: Ptr (SurfaceCapabilities2KHR _)) -> IO Result) vkGetPhysicalDeviceSurfaceCapabilities2KHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR _)) -> ("pSurfaceFormatCount" ::: Ptr Word32) -> ("pSurfaceFormats" ::: Ptr SurfaceFormat2KHR) -> IO Result) vkGetPhysicalDeviceSurfaceFormats2KHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayProperties2KHR) -> IO Result) vkGetPhysicalDeviceDisplayProperties2KHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayPlaneProperties2KHR) -> IO Result) vkGetPhysicalDeviceDisplayPlaneProperties2KHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> DisplayKHR -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr DisplayModeProperties2KHR) -> IO Result) vkGetDisplayModeProperties2KHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pDisplayPlaneInfo" ::: Ptr DisplayPlaneInfo2KHR) -> ("pCapabilities" ::: Ptr DisplayPlaneCapabilities2KHR) -> IO Result) vkGetDisplayPlaneCapabilities2KHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pTimeDomainCount" ::: Ptr Word32) -> ("pTimeDomains" ::: Ptr TimeDomainEXT) -> IO Result) vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr DebugUtilsMessengerCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMessenger" ::: Ptr DebugUtilsMessengerEXT) -> IO Result) vkCreateDebugUtilsMessengerEXT)
+    (castFunPtr @_ @(Ptr Instance_T -> DebugUtilsMessengerEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDebugUtilsMessengerEXT)
+    (castFunPtr @_ @(Ptr Instance_T -> DebugUtilsMessageSeverityFlagBitsEXT -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT) -> IO ()) vkSubmitDebugUtilsMessageEXT)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr CooperativeMatrixPropertiesNV) -> IO Result) vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR _)) -> ("pPresentModeCount" ::: Ptr Word32) -> ("pPresentModes" ::: Ptr PresentModeKHR) -> IO Result) vkGetPhysicalDeviceSurfacePresentModes2EXT)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("queueFamilyIndex" ::: Word32) -> ("pCounterCount" ::: Ptr Word32) -> ("pCounters" ::: Ptr PerformanceCounterKHR) -> ("pCounterDescriptions" ::: Ptr PerformanceCounterDescriptionKHR) -> IO Result) vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pPerformanceQueryCreateInfo" ::: Ptr QueryPoolPerformanceCreateInfoKHR) -> ("pNumPasses" ::: Ptr Word32) -> IO ()) vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)
+    (castFunPtr @_ @(Ptr Instance_T -> ("pCreateInfo" ::: Ptr HeadlessSurfaceCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSurface" ::: Ptr SurfaceKHR) -> IO Result) vkCreateHeadlessSurfaceEXT)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pCombinationCount" ::: Ptr Word32) -> ("pCombinations" ::: Ptr FramebufferMixedSamplesCombinationNV) -> IO Result) vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)
+    (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pToolCount" ::: Ptr Word32) -> ("pToolProperties" ::: Ptr PhysicalDeviceToolPropertiesEXT) -> IO Result) vkGetPhysicalDeviceToolPropertiesEXT)
+
+data DeviceCmds = DeviceCmds
+  { deviceCmdsHandle :: Ptr Device_T
+  , pVkGetDeviceProcAddr :: FunPtr (Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction)
+  , pVkDestroyDevice :: FunPtr (Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetDeviceQueue :: FunPtr (Ptr Device_T -> ("queueFamilyIndex" ::: Word32) -> ("queueIndex" ::: Word32) -> ("pQueue" ::: Ptr (Ptr Queue_T)) -> IO ())
+  , pVkQueueSubmit :: forall a . FunPtr (Ptr Queue_T -> ("submitCount" ::: Word32) -> ("pSubmits" ::: Ptr (SubmitInfo a)) -> Fence -> IO Result)
+  , pVkQueueWaitIdle :: FunPtr (Ptr Queue_T -> IO Result)
+  , pVkDeviceWaitIdle :: FunPtr (Ptr Device_T -> IO Result)
+  , pVkAllocateMemory :: forall a . FunPtr (Ptr Device_T -> ("pAllocateInfo" ::: Ptr (MemoryAllocateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMemory" ::: Ptr DeviceMemory) -> IO Result)
+  , pVkFreeMemory :: FunPtr (Ptr Device_T -> DeviceMemory -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkMapMemory :: FunPtr (Ptr Device_T -> DeviceMemory -> ("offset" ::: DeviceSize) -> DeviceSize -> MemoryMapFlags -> ("ppData" ::: Ptr (Ptr ())) -> IO Result)
+  , pVkUnmapMemory :: FunPtr (Ptr Device_T -> DeviceMemory -> IO ())
+  , pVkFlushMappedMemoryRanges :: FunPtr (Ptr Device_T -> ("memoryRangeCount" ::: Word32) -> ("pMemoryRanges" ::: Ptr MappedMemoryRange) -> IO Result)
+  , pVkInvalidateMappedMemoryRanges :: FunPtr (Ptr Device_T -> ("memoryRangeCount" ::: Word32) -> ("pMemoryRanges" ::: Ptr MappedMemoryRange) -> IO Result)
+  , pVkGetDeviceMemoryCommitment :: FunPtr (Ptr Device_T -> DeviceMemory -> ("pCommittedMemoryInBytes" ::: Ptr DeviceSize) -> IO ())
+  , pVkGetBufferMemoryRequirements :: FunPtr (Ptr Device_T -> Buffer -> ("pMemoryRequirements" ::: Ptr MemoryRequirements) -> IO ())
+  , pVkBindBufferMemory :: FunPtr (Ptr Device_T -> Buffer -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> IO Result)
+  , pVkGetImageMemoryRequirements :: FunPtr (Ptr Device_T -> Image -> ("pMemoryRequirements" ::: Ptr MemoryRequirements) -> IO ())
+  , pVkBindImageMemory :: FunPtr (Ptr Device_T -> Image -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> IO Result)
+  , pVkGetImageSparseMemoryRequirements :: FunPtr (Ptr Device_T -> Image -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements) -> IO ())
+  , pVkQueueBindSparse :: forall a . FunPtr (Ptr Queue_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfo" ::: Ptr (BindSparseInfo a)) -> Fence -> IO Result)
+  , pVkCreateFence :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (FenceCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result)
+  , pVkDestroyFence :: FunPtr (Ptr Device_T -> Fence -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkResetFences :: FunPtr (Ptr Device_T -> ("fenceCount" ::: Word32) -> ("pFences" ::: Ptr Fence) -> IO Result)
+  , pVkGetFenceStatus :: FunPtr (Ptr Device_T -> Fence -> IO Result)
+  , pVkWaitForFences :: FunPtr (Ptr Device_T -> ("fenceCount" ::: Word32) -> ("pFences" ::: Ptr Fence) -> ("waitAll" ::: Bool32) -> ("timeout" ::: Word64) -> IO Result)
+  , pVkCreateSemaphore :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (SemaphoreCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSemaphore" ::: Ptr Semaphore) -> IO Result)
+  , pVkDestroySemaphore :: FunPtr (Ptr Device_T -> Semaphore -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCreateEvent :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr EventCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pEvent" ::: Ptr Event) -> IO Result)
+  , pVkDestroyEvent :: FunPtr (Ptr Device_T -> Event -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetEventStatus :: FunPtr (Ptr Device_T -> Event -> IO Result)
+  , pVkSetEvent :: FunPtr (Ptr Device_T -> Event -> IO Result)
+  , pVkResetEvent :: FunPtr (Ptr Device_T -> Event -> IO Result)
+  , pVkCreateQueryPool :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (QueryPoolCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pQueryPool" ::: Ptr QueryPool) -> IO Result)
+  , pVkDestroyQueryPool :: FunPtr (Ptr Device_T -> QueryPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetQueryPoolResults :: FunPtr (Ptr Device_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> IO Result)
+  , pVkResetQueryPool :: FunPtr (Ptr Device_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ())
+  , pVkCreateBuffer :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (BufferCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pBuffer" ::: Ptr Buffer) -> IO Result)
+  , pVkDestroyBuffer :: FunPtr (Ptr Device_T -> Buffer -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCreateBufferView :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr BufferViewCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pView" ::: Ptr BufferView) -> IO Result)
+  , pVkDestroyBufferView :: FunPtr (Ptr Device_T -> BufferView -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCreateImage :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (ImageCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pImage" ::: Ptr Image) -> IO Result)
+  , pVkDestroyImage :: FunPtr (Ptr Device_T -> Image -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetImageSubresourceLayout :: FunPtr (Ptr Device_T -> Image -> ("pSubresource" ::: Ptr ImageSubresource) -> ("pLayout" ::: Ptr SubresourceLayout) -> IO ())
+  , pVkCreateImageView :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (ImageViewCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pView" ::: Ptr ImageView) -> IO Result)
+  , pVkDestroyImageView :: FunPtr (Ptr Device_T -> ImageView -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCreateShaderModule :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (ShaderModuleCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pShaderModule" ::: Ptr ShaderModule) -> IO Result)
+  , pVkDestroyShaderModule :: FunPtr (Ptr Device_T -> ShaderModule -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCreatePipelineCache :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr PipelineCacheCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelineCache" ::: Ptr PipelineCache) -> IO Result)
+  , pVkDestroyPipelineCache :: FunPtr (Ptr Device_T -> PipelineCache -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetPipelineCacheData :: FunPtr (Ptr Device_T -> PipelineCache -> ("pDataSize" ::: Ptr CSize) -> ("pData" ::: Ptr ()) -> IO Result)
+  , pVkMergePipelineCaches :: FunPtr (Ptr Device_T -> ("dstCache" ::: PipelineCache) -> ("srcCacheCount" ::: Word32) -> ("pSrcCaches" ::: Ptr PipelineCache) -> IO Result)
+  , pVkCreateGraphicsPipelines :: forall a . FunPtr (Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (GraphicsPipelineCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result)
+  , pVkCreateComputePipelines :: forall a . FunPtr (Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (ComputePipelineCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result)
+  , pVkDestroyPipeline :: FunPtr (Ptr Device_T -> Pipeline -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCreatePipelineLayout :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr PipelineLayoutCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelineLayout" ::: Ptr PipelineLayout) -> IO Result)
+  , pVkDestroyPipelineLayout :: FunPtr (Ptr Device_T -> PipelineLayout -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCreateSampler :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (SamplerCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSampler" ::: Ptr Sampler) -> IO Result)
+  , pVkDestroySampler :: FunPtr (Ptr Device_T -> Sampler -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCreateDescriptorSetLayout :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorSetLayoutCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSetLayout" ::: Ptr DescriptorSetLayout) -> IO Result)
+  , pVkDestroyDescriptorSetLayout :: FunPtr (Ptr Device_T -> DescriptorSetLayout -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCreateDescriptorPool :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorPoolCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDescriptorPool" ::: Ptr DescriptorPool) -> IO Result)
+  , pVkDestroyDescriptorPool :: FunPtr (Ptr Device_T -> DescriptorPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkResetDescriptorPool :: FunPtr (Ptr Device_T -> DescriptorPool -> DescriptorPoolResetFlags -> IO Result)
+  , pVkAllocateDescriptorSets :: forall a . FunPtr (Ptr Device_T -> ("pAllocateInfo" ::: Ptr (DescriptorSetAllocateInfo a)) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> IO Result)
+  , pVkFreeDescriptorSets :: FunPtr (Ptr Device_T -> DescriptorPool -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> IO Result)
+  , pVkUpdateDescriptorSets :: forall a . FunPtr (Ptr Device_T -> ("descriptorWriteCount" ::: Word32) -> ("pDescriptorWrites" ::: Ptr (WriteDescriptorSet a)) -> ("descriptorCopyCount" ::: Word32) -> ("pDescriptorCopies" ::: Ptr CopyDescriptorSet) -> IO ())
+  , pVkCreateFramebuffer :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (FramebufferCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFramebuffer" ::: Ptr Framebuffer) -> IO Result)
+  , pVkDestroyFramebuffer :: FunPtr (Ptr Device_T -> Framebuffer -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCreateRenderPass :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (RenderPassCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pRenderPass" ::: Ptr RenderPass) -> IO Result)
+  , pVkDestroyRenderPass :: FunPtr (Ptr Device_T -> RenderPass -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetRenderAreaGranularity :: FunPtr (Ptr Device_T -> RenderPass -> ("pGranularity" ::: Ptr Extent2D) -> IO ())
+  , pVkCreateCommandPool :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr CommandPoolCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pCommandPool" ::: Ptr CommandPool) -> IO Result)
+  , pVkDestroyCommandPool :: FunPtr (Ptr Device_T -> CommandPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkResetCommandPool :: FunPtr (Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result)
+  , pVkAllocateCommandBuffers :: FunPtr (Ptr Device_T -> ("pAllocateInfo" ::: Ptr CommandBufferAllocateInfo) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO Result)
+  , pVkFreeCommandBuffers :: FunPtr (Ptr Device_T -> CommandPool -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO ())
+  , pVkBeginCommandBuffer :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pBeginInfo" ::: Ptr (CommandBufferBeginInfo a)) -> IO Result)
+  , pVkEndCommandBuffer :: FunPtr (Ptr CommandBuffer_T -> IO Result)
+  , pVkResetCommandBuffer :: FunPtr (Ptr CommandBuffer_T -> CommandBufferResetFlags -> IO Result)
+  , pVkCmdBindPipeline :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> IO ())
+  , pVkCmdSetViewport :: FunPtr (Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewports" ::: Ptr Viewport) -> IO ())
+  , pVkCmdSetScissor :: FunPtr (Ptr CommandBuffer_T -> ("firstScissor" ::: Word32) -> ("scissorCount" ::: Word32) -> ("pScissors" ::: Ptr Rect2D) -> IO ())
+  , pVkCmdSetLineWidth :: FunPtr (Ptr CommandBuffer_T -> ("lineWidth" ::: CFloat) -> IO ())
+  , pVkCmdSetDepthBias :: FunPtr (Ptr CommandBuffer_T -> ("depthBiasConstantFactor" ::: CFloat) -> ("depthBiasClamp" ::: CFloat) -> ("depthBiasSlopeFactor" ::: CFloat) -> IO ())
+  , pVkCmdSetBlendConstants :: FunPtr (Ptr CommandBuffer_T -> ("blendConstants" ::: Ptr (FixedArray 4 CFloat)) -> IO ())
+  , pVkCmdSetDepthBounds :: FunPtr (Ptr CommandBuffer_T -> ("minDepthBounds" ::: CFloat) -> ("maxDepthBounds" ::: CFloat) -> IO ())
+  , pVkCmdSetStencilCompareMask :: FunPtr (Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("compareMask" ::: Word32) -> IO ())
+  , pVkCmdSetStencilWriteMask :: FunPtr (Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("writeMask" ::: Word32) -> IO ())
+  , pVkCmdSetStencilReference :: FunPtr (Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("reference" ::: Word32) -> IO ())
+  , pVkCmdBindDescriptorSets :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> ("firstSet" ::: Word32) -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> ("dynamicOffsetCount" ::: Word32) -> ("pDynamicOffsets" ::: Ptr Word32) -> IO ())
+  , pVkCmdBindIndexBuffer :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> IndexType -> IO ())
+  , pVkCmdBindVertexBuffers :: FunPtr (Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> IO ())
+  , pVkCmdDraw :: FunPtr (Ptr CommandBuffer_T -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ())
+  , pVkCmdDrawIndexed :: FunPtr (Ptr CommandBuffer_T -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ())
+  , pVkCmdDrawIndirect :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
+  , pVkCmdDrawIndexedIndirect :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
+  , pVkCmdDispatch :: FunPtr (Ptr CommandBuffer_T -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ())
+  , pVkCmdDispatchIndirect :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> IO ())
+  , pVkCmdCopyBuffer :: FunPtr (Ptr CommandBuffer_T -> ("srcBuffer" ::: Buffer) -> ("dstBuffer" ::: Buffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferCopy) -> IO ())
+  , pVkCmdCopyImage :: FunPtr (Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageCopy) -> IO ())
+  , pVkCmdBlitImage :: FunPtr (Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageBlit) -> Filter -> IO ())
+  , pVkCmdCopyBufferToImage :: FunPtr (Ptr CommandBuffer_T -> ("srcBuffer" ::: Buffer) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferImageCopy) -> IO ())
+  , pVkCmdCopyImageToBuffer :: FunPtr (Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstBuffer" ::: Buffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferImageCopy) -> IO ())
+  , pVkCmdUpdateBuffer :: FunPtr (Ptr CommandBuffer_T -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("dataSize" ::: DeviceSize) -> ("pData" ::: Ptr ()) -> IO ())
+  , pVkCmdFillBuffer :: FunPtr (Ptr CommandBuffer_T -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> DeviceSize -> ("data" ::: Word32) -> IO ())
+  , pVkCmdClearColorImage :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> ("pColor" ::: Ptr ClearColorValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr ImageSubresourceRange) -> IO ())
+  , pVkCmdClearDepthStencilImage :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> ("pDepthStencil" ::: Ptr ClearDepthStencilValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr ImageSubresourceRange) -> IO ())
+  , pVkCmdClearAttachments :: FunPtr (Ptr CommandBuffer_T -> ("attachmentCount" ::: Word32) -> ("pAttachments" ::: Ptr ClearAttachment) -> ("rectCount" ::: Word32) -> ("pRects" ::: Ptr ClearRect) -> IO ())
+  , pVkCmdResolveImage :: FunPtr (Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageResolve) -> IO ())
+  , pVkCmdSetEvent :: FunPtr (Ptr CommandBuffer_T -> Event -> ("stageMask" ::: PipelineStageFlags) -> IO ())
+  , pVkCmdResetEvent :: FunPtr (Ptr CommandBuffer_T -> Event -> ("stageMask" ::: PipelineStageFlags) -> IO ())
+  , pVkCmdWaitEvents :: forall a . FunPtr (Ptr CommandBuffer_T -> ("eventCount" ::: Word32) -> ("pEvents" ::: Ptr Event) -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr MemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr BufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr (ImageMemoryBarrier a)) -> IO ())
+  , pVkCmdPipelineBarrier :: forall a . FunPtr (Ptr CommandBuffer_T -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> DependencyFlags -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr MemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr BufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr (ImageMemoryBarrier a)) -> IO ())
+  , pVkCmdBeginQuery :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> IO ())
+  , pVkCmdEndQuery :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> IO ())
+  , pVkCmdBeginConditionalRenderingEXT :: FunPtr (Ptr CommandBuffer_T -> ("pConditionalRenderingBegin" ::: Ptr ConditionalRenderingBeginInfoEXT) -> IO ())
+  , pVkCmdEndConditionalRenderingEXT :: FunPtr (Ptr CommandBuffer_T -> IO ())
+  , pVkCmdResetQueryPool :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ())
+  , pVkCmdWriteTimestamp :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> ("query" ::: Word32) -> IO ())
+  , pVkCmdCopyQueryPoolResults :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> IO ())
+  , pVkCmdPushConstants :: FunPtr (Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("pValues" ::: Ptr ()) -> IO ())
+  , pVkCmdBeginRenderPass :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pRenderPassBegin" ::: Ptr (RenderPassBeginInfo a)) -> SubpassContents -> IO ())
+  , pVkCmdNextSubpass :: FunPtr (Ptr CommandBuffer_T -> SubpassContents -> IO ())
+  , pVkCmdEndRenderPass :: FunPtr (Ptr CommandBuffer_T -> IO ())
+  , pVkCmdExecuteCommands :: FunPtr (Ptr CommandBuffer_T -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO ())
+  , pVkCreateSharedSwapchainsKHR :: forall a . FunPtr (Ptr Device_T -> ("swapchainCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (SwapchainCreateInfoKHR a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSwapchains" ::: Ptr SwapchainKHR) -> IO Result)
+  , pVkCreateSwapchainKHR :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (SwapchainCreateInfoKHR a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSwapchain" ::: Ptr SwapchainKHR) -> IO Result)
+  , pVkDestroySwapchainKHR :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetSwapchainImagesKHR :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("pSwapchainImageCount" ::: Ptr Word32) -> ("pSwapchainImages" ::: Ptr Image) -> IO Result)
+  , pVkAcquireNextImageKHR :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("timeout" ::: Word64) -> Semaphore -> Fence -> ("pImageIndex" ::: Ptr Word32) -> IO Result)
+  , pVkQueuePresentKHR :: forall a . FunPtr (Ptr Queue_T -> ("pPresentInfo" ::: Ptr (PresentInfoKHR a)) -> IO Result)
+  , pVkDebugMarkerSetObjectNameEXT :: FunPtr (Ptr Device_T -> ("pNameInfo" ::: Ptr DebugMarkerObjectNameInfoEXT) -> IO Result)
+  , pVkDebugMarkerSetObjectTagEXT :: FunPtr (Ptr Device_T -> ("pTagInfo" ::: Ptr DebugMarkerObjectTagInfoEXT) -> IO Result)
+  , pVkCmdDebugMarkerBeginEXT :: FunPtr (Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr DebugMarkerMarkerInfoEXT) -> IO ())
+  , pVkCmdDebugMarkerEndEXT :: FunPtr (Ptr CommandBuffer_T -> IO ())
+  , pVkCmdDebugMarkerInsertEXT :: FunPtr (Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr DebugMarkerMarkerInfoEXT) -> IO ())
+  , pVkGetMemoryWin32HandleNV :: FunPtr (Ptr Device_T -> DeviceMemory -> ExternalMemoryHandleTypeFlagsNV -> ("pHandle" ::: Ptr HANDLE) -> IO Result)
+  , pVkCmdExecuteGeneratedCommandsNV :: FunPtr (Ptr CommandBuffer_T -> ("isPreprocessed" ::: Bool32) -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV) -> IO ())
+  , pVkCmdPreprocessGeneratedCommandsNV :: FunPtr (Ptr CommandBuffer_T -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV) -> IO ())
+  , pVkCmdBindPipelineShaderGroupNV :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> ("groupIndex" ::: Word32) -> IO ())
+  , pVkGetGeneratedCommandsMemoryRequirementsNV :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 a)) -> IO ())
+  , pVkCreateIndirectCommandsLayoutNV :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV) -> IO Result)
+  , pVkDestroyIndirectCommandsLayoutNV :: FunPtr (Ptr Device_T -> IndirectCommandsLayoutNV -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkCmdPushDescriptorSetKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> ("set" ::: Word32) -> ("descriptorWriteCount" ::: Word32) -> ("pDescriptorWrites" ::: Ptr (WriteDescriptorSet a)) -> IO ())
+  , pVkTrimCommandPool :: FunPtr (Ptr Device_T -> CommandPool -> CommandPoolTrimFlags -> IO ())
+  , pVkGetMemoryWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr MemoryGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result)
+  , pVkGetMemoryWin32HandlePropertiesKHR :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> HANDLE -> ("pMemoryWin32HandleProperties" ::: Ptr MemoryWin32HandlePropertiesKHR) -> IO Result)
+  , pVkGetMemoryFdKHR :: FunPtr (Ptr Device_T -> ("pGetFdInfo" ::: Ptr MemoryGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result)
+  , pVkGetMemoryFdPropertiesKHR :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("fd" ::: CInt) -> ("pMemoryFdProperties" ::: Ptr MemoryFdPropertiesKHR) -> IO Result)
+  , pVkGetSemaphoreWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr SemaphoreGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result)
+  , pVkImportSemaphoreWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pImportSemaphoreWin32HandleInfo" ::: Ptr ImportSemaphoreWin32HandleInfoKHR) -> IO Result)
+  , pVkGetSemaphoreFdKHR :: FunPtr (Ptr Device_T -> ("pGetFdInfo" ::: Ptr SemaphoreGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result)
+  , pVkImportSemaphoreFdKHR :: FunPtr (Ptr Device_T -> ("pImportSemaphoreFdInfo" ::: Ptr ImportSemaphoreFdInfoKHR) -> IO Result)
+  , pVkGetFenceWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr FenceGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result)
+  , pVkImportFenceWin32HandleKHR :: FunPtr (Ptr Device_T -> ("pImportFenceWin32HandleInfo" ::: Ptr ImportFenceWin32HandleInfoKHR) -> IO Result)
+  , pVkGetFenceFdKHR :: FunPtr (Ptr Device_T -> ("pGetFdInfo" ::: Ptr FenceGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result)
+  , pVkImportFenceFdKHR :: FunPtr (Ptr Device_T -> ("pImportFenceFdInfo" ::: Ptr ImportFenceFdInfoKHR) -> IO Result)
+  , pVkDisplayPowerControlEXT :: FunPtr (Ptr Device_T -> DisplayKHR -> ("pDisplayPowerInfo" ::: Ptr DisplayPowerInfoEXT) -> IO Result)
+  , pVkRegisterDeviceEventEXT :: FunPtr (Ptr Device_T -> ("pDeviceEventInfo" ::: Ptr DeviceEventInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result)
+  , pVkRegisterDisplayEventEXT :: FunPtr (Ptr Device_T -> DisplayKHR -> ("pDisplayEventInfo" ::: Ptr DisplayEventInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result)
+  , pVkGetSwapchainCounterEXT :: FunPtr (Ptr Device_T -> SwapchainKHR -> SurfaceCounterFlagBitsEXT -> ("pCounterValue" ::: Ptr Word64) -> IO Result)
+  , pVkGetDeviceGroupPeerMemoryFeatures :: FunPtr (Ptr Device_T -> ("heapIndex" ::: Word32) -> ("localDeviceIndex" ::: Word32) -> ("remoteDeviceIndex" ::: Word32) -> ("pPeerMemoryFeatures" ::: Ptr PeerMemoryFeatureFlags) -> IO ())
+  , pVkBindBufferMemory2 :: forall a . FunPtr (Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr (BindBufferMemoryInfo a)) -> IO Result)
+  , pVkBindImageMemory2 :: forall a . FunPtr (Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr (BindImageMemoryInfo a)) -> IO Result)
+  , pVkCmdSetDeviceMask :: FunPtr (Ptr CommandBuffer_T -> ("deviceMask" ::: Word32) -> IO ())
+  , pVkGetDeviceGroupPresentCapabilitiesKHR :: FunPtr (Ptr Device_T -> ("pDeviceGroupPresentCapabilities" ::: Ptr DeviceGroupPresentCapabilitiesKHR) -> IO Result)
+  , pVkGetDeviceGroupSurfacePresentModesKHR :: FunPtr (Ptr Device_T -> SurfaceKHR -> ("pModes" ::: Ptr DeviceGroupPresentModeFlagsKHR) -> IO Result)
+  , pVkAcquireNextImage2KHR :: FunPtr (Ptr Device_T -> ("pAcquireInfo" ::: Ptr AcquireNextImageInfoKHR) -> ("pImageIndex" ::: Ptr Word32) -> IO Result)
+  , pVkCmdDispatchBase :: FunPtr (Ptr CommandBuffer_T -> ("baseGroupX" ::: Word32) -> ("baseGroupY" ::: Word32) -> ("baseGroupZ" ::: Word32) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ())
+  , pVkCreateDescriptorUpdateTemplate :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate) -> IO Result)
+  , pVkDestroyDescriptorUpdateTemplate :: FunPtr (Ptr Device_T -> DescriptorUpdateTemplate -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkUpdateDescriptorSetWithTemplate :: FunPtr (Ptr Device_T -> DescriptorSet -> DescriptorUpdateTemplate -> ("pData" ::: Ptr ()) -> IO ())
+  , pVkCmdPushDescriptorSetWithTemplateKHR :: FunPtr (Ptr CommandBuffer_T -> DescriptorUpdateTemplate -> PipelineLayout -> ("set" ::: Word32) -> ("pData" ::: Ptr ()) -> IO ())
+  , pVkSetHdrMetadataEXT :: FunPtr (Ptr Device_T -> ("swapchainCount" ::: Word32) -> ("pSwapchains" ::: Ptr SwapchainKHR) -> ("pMetadata" ::: Ptr HdrMetadataEXT) -> IO ())
+  , pVkGetSwapchainStatusKHR :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result)
+  , pVkGetRefreshCycleDurationGOOGLE :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE) -> IO Result)
+  , pVkGetPastPresentationTimingGOOGLE :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("pPresentationTimingCount" ::: Ptr Word32) -> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE) -> IO Result)
+  , pVkCmdSetViewportWScalingNV :: FunPtr (Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewportWScalings" ::: Ptr ViewportWScalingNV) -> IO ())
+  , pVkCmdSetDiscardRectangleEXT :: FunPtr (Ptr CommandBuffer_T -> ("firstDiscardRectangle" ::: Word32) -> ("discardRectangleCount" ::: Word32) -> ("pDiscardRectangles" ::: Ptr Rect2D) -> IO ())
+  , pVkCmdSetSampleLocationsEXT :: FunPtr (Ptr CommandBuffer_T -> ("pSampleLocationsInfo" ::: Ptr SampleLocationsInfoEXT) -> IO ())
+  , pVkGetBufferMemoryRequirements2 :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr BufferMemoryRequirementsInfo2) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 a)) -> IO ())
+  , pVkGetImageMemoryRequirements2 :: forall a b . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr (ImageMemoryRequirementsInfo2 a)) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 b)) -> IO ())
+  , pVkGetImageSparseMemoryRequirements2 :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr ImageSparseMemoryRequirementsInfo2) -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements2) -> IO ())
+  , pVkCreateSamplerYcbcrConversion :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (SamplerYcbcrConversionCreateInfo a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pYcbcrConversion" ::: Ptr SamplerYcbcrConversion) -> IO Result)
+  , pVkDestroySamplerYcbcrConversion :: FunPtr (Ptr Device_T -> SamplerYcbcrConversion -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetDeviceQueue2 :: FunPtr (Ptr Device_T -> ("pQueueInfo" ::: Ptr DeviceQueueInfo2) -> ("pQueue" ::: Ptr (Ptr Queue_T)) -> IO ())
+  , pVkCreateValidationCacheEXT :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr ValidationCacheCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pValidationCache" ::: Ptr ValidationCacheEXT) -> IO Result)
+  , pVkDestroyValidationCacheEXT :: FunPtr (Ptr Device_T -> ValidationCacheEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetValidationCacheDataEXT :: FunPtr (Ptr Device_T -> ValidationCacheEXT -> ("pDataSize" ::: Ptr CSize) -> ("pData" ::: Ptr ()) -> IO Result)
+  , pVkMergeValidationCachesEXT :: FunPtr (Ptr Device_T -> ("dstCache" ::: ValidationCacheEXT) -> ("srcCacheCount" ::: Word32) -> ("pSrcCaches" ::: Ptr ValidationCacheEXT) -> IO Result)
+  , pVkGetDescriptorSetLayoutSupport :: forall a b . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorSetLayoutCreateInfo a)) -> ("pSupport" ::: Ptr (DescriptorSetLayoutSupport b)) -> IO ())
+  , pVkGetShaderInfoAMD :: FunPtr (Ptr Device_T -> Pipeline -> ShaderStageFlagBits -> ShaderInfoTypeAMD -> ("pInfoSize" ::: Ptr CSize) -> ("pInfo" ::: Ptr ()) -> IO Result)
+  , pVkSetLocalDimmingAMD :: FunPtr (Ptr Device_T -> SwapchainKHR -> ("localDimmingEnable" ::: Bool32) -> IO ())
+  , pVkGetCalibratedTimestampsEXT :: FunPtr (Ptr Device_T -> ("timestampCount" ::: Word32) -> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT) -> ("pTimestamps" ::: Ptr Word64) -> ("pMaxDeviation" ::: Ptr Word64) -> IO Result)
+  , pVkSetDebugUtilsObjectNameEXT :: FunPtr (Ptr Device_T -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result)
+  , pVkSetDebugUtilsObjectTagEXT :: FunPtr (Ptr Device_T -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result)
+  , pVkQueueBeginDebugUtilsLabelEXT :: FunPtr (Ptr Queue_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ())
+  , pVkQueueEndDebugUtilsLabelEXT :: FunPtr (Ptr Queue_T -> IO ())
+  , pVkQueueInsertDebugUtilsLabelEXT :: FunPtr (Ptr Queue_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ())
+  , pVkCmdBeginDebugUtilsLabelEXT :: FunPtr (Ptr CommandBuffer_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ())
+  , pVkCmdEndDebugUtilsLabelEXT :: FunPtr (Ptr CommandBuffer_T -> IO ())
+  , pVkCmdInsertDebugUtilsLabelEXT :: FunPtr (Ptr CommandBuffer_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ())
+  , pVkGetMemoryHostPointerPropertiesEXT :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("pHostPointer" ::: Ptr ()) -> ("pMemoryHostPointerProperties" ::: Ptr MemoryHostPointerPropertiesEXT) -> IO Result)
+  , pVkCmdWriteBufferMarkerAMD :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("marker" ::: Word32) -> IO ())
+  , pVkCreateRenderPass2 :: forall a . FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (RenderPassCreateInfo2 a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pRenderPass" ::: Ptr RenderPass) -> IO Result)
+  , pVkCmdBeginRenderPass2 :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pRenderPassBegin" ::: Ptr (RenderPassBeginInfo a)) -> ("pSubpassBeginInfo" ::: Ptr SubpassBeginInfo) -> IO ())
+  , pVkCmdNextSubpass2 :: FunPtr (Ptr CommandBuffer_T -> ("pSubpassBeginInfo" ::: Ptr SubpassBeginInfo) -> ("pSubpassEndInfo" ::: Ptr SubpassEndInfo) -> IO ())
+  , pVkCmdEndRenderPass2 :: FunPtr (Ptr CommandBuffer_T -> ("pSubpassEndInfo" ::: Ptr SubpassEndInfo) -> IO ())
+  , pVkGetSemaphoreCounterValue :: FunPtr (Ptr Device_T -> Semaphore -> ("pValue" ::: Ptr Word64) -> IO Result)
+  , pVkWaitSemaphores :: FunPtr (Ptr Device_T -> ("pWaitInfo" ::: Ptr SemaphoreWaitInfo) -> ("timeout" ::: Word64) -> IO Result)
+  , pVkSignalSemaphore :: FunPtr (Ptr Device_T -> ("pSignalInfo" ::: Ptr SemaphoreSignalInfo) -> IO Result)
+  , pVkGetAndroidHardwareBufferPropertiesANDROID :: forall a . FunPtr (Ptr Device_T -> Ptr AHardwareBuffer -> ("pProperties" ::: Ptr (AndroidHardwareBufferPropertiesANDROID a)) -> IO Result)
+  , pVkGetMemoryAndroidHardwareBufferANDROID :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr MemoryGetAndroidHardwareBufferInfoANDROID) -> ("pBuffer" ::: Ptr (Ptr AHardwareBuffer)) -> IO Result)
+  , pVkCmdDrawIndirectCount :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
+  , pVkCmdDrawIndexedIndirectCount :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
+  , pVkCmdSetCheckpointNV :: FunPtr (Ptr CommandBuffer_T -> ("pCheckpointMarker" ::: Ptr ()) -> IO ())
+  , pVkGetQueueCheckpointDataNV :: FunPtr (Ptr Queue_T -> ("pCheckpointDataCount" ::: Ptr Word32) -> ("pCheckpointData" ::: Ptr CheckpointDataNV) -> IO ())
+  , pVkCmdBindTransformFeedbackBuffersEXT :: FunPtr (Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> ("pSizes" ::: Ptr DeviceSize) -> IO ())
+  , pVkCmdBeginTransformFeedbackEXT :: FunPtr (Ptr CommandBuffer_T -> ("firstCounterBuffer" ::: Word32) -> ("counterBufferCount" ::: Word32) -> ("pCounterBuffers" ::: Ptr Buffer) -> ("pCounterBufferOffsets" ::: Ptr DeviceSize) -> IO ())
+  , pVkCmdEndTransformFeedbackEXT :: FunPtr (Ptr CommandBuffer_T -> ("firstCounterBuffer" ::: Word32) -> ("counterBufferCount" ::: Word32) -> ("pCounterBuffers" ::: Ptr Buffer) -> ("pCounterBufferOffsets" ::: Ptr DeviceSize) -> IO ())
+  , pVkCmdBeginQueryIndexedEXT :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> ("index" ::: Word32) -> IO ())
+  , pVkCmdEndQueryIndexedEXT :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> ("index" ::: Word32) -> IO ())
+  , pVkCmdDrawIndirectByteCountEXT :: FunPtr (Ptr CommandBuffer_T -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("counterBuffer" ::: Buffer) -> ("counterBufferOffset" ::: DeviceSize) -> ("counterOffset" ::: Word32) -> ("vertexStride" ::: Word32) -> IO ())
+  , pVkCmdSetExclusiveScissorNV :: FunPtr (Ptr CommandBuffer_T -> ("firstExclusiveScissor" ::: Word32) -> ("exclusiveScissorCount" ::: Word32) -> ("pExclusiveScissors" ::: Ptr Rect2D) -> IO ())
+  , pVkCmdBindShadingRateImageNV :: FunPtr (Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ())
+  , pVkCmdSetViewportShadingRatePaletteNV :: FunPtr (Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pShadingRatePalettes" ::: Ptr ShadingRatePaletteNV) -> IO ())
+  , pVkCmdSetCoarseSampleOrderNV :: FunPtr (Ptr CommandBuffer_T -> CoarseSampleOrderTypeNV -> ("customSampleOrderCount" ::: Word32) -> ("pCustomSampleOrders" ::: Ptr CoarseSampleOrderCustomNV) -> IO ())
+  , pVkCmdDrawMeshTasksNV :: FunPtr (Ptr CommandBuffer_T -> ("taskCount" ::: Word32) -> ("firstTask" ::: Word32) -> IO ())
+  , pVkCmdDrawMeshTasksIndirectNV :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
+  , pVkCmdDrawMeshTasksIndirectCountNV :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ())
+  , pVkCompileDeferredNV :: FunPtr (Ptr Device_T -> Pipeline -> ("shader" ::: Word32) -> IO Result)
+  , pVkCreateAccelerationStructureNV :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoNV) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureNV) -> IO Result)
+  , pVkDestroyAccelerationStructureKHR :: FunPtr (Ptr Device_T -> AccelerationStructureKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetAccelerationStructureMemoryRequirementsKHR :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureMemoryRequirementsInfoKHR) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 a)) -> IO ())
+  , pVkGetAccelerationStructureMemoryRequirementsNV :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureMemoryRequirementsInfoNV) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2KHR a)) -> IO ())
+  , pVkBindAccelerationStructureMemoryKHR :: FunPtr (Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr BindAccelerationStructureMemoryInfoKHR) -> IO Result)
+  , pVkCmdCopyAccelerationStructureNV :: FunPtr (Ptr CommandBuffer_T -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> CopyAccelerationStructureModeKHR -> IO ())
+  , pVkCmdCopyAccelerationStructureKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureInfoKHR a)) -> IO ())
+  , pVkCopyAccelerationStructureKHR :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureInfoKHR a)) -> IO Result)
+  , pVkCmdCopyAccelerationStructureToMemoryKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureToMemoryInfoKHR a)) -> IO ())
+  , pVkCopyAccelerationStructureToMemoryKHR :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureToMemoryInfoKHR a)) -> IO Result)
+  , pVkCmdCopyMemoryToAccelerationStructureKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyMemoryToAccelerationStructureInfoKHR a)) -> IO ())
+  , pVkCopyMemoryToAccelerationStructureKHR :: forall a . FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr (CopyMemoryToAccelerationStructureInfoKHR a)) -> IO Result)
+  , pVkCmdWriteAccelerationStructuresPropertiesKHR :: FunPtr (Ptr CommandBuffer_T -> ("accelerationStructureCount" ::: Word32) -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR) -> QueryType -> QueryPool -> ("firstQuery" ::: Word32) -> IO ())
+  , pVkCmdBuildAccelerationStructureNV :: FunPtr (Ptr CommandBuffer_T -> ("pInfo" ::: Ptr AccelerationStructureInfoNV) -> ("instanceData" ::: Buffer) -> ("instanceOffset" ::: DeviceSize) -> ("update" ::: Bool32) -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> ("scratch" ::: Buffer) -> ("scratchOffset" ::: DeviceSize) -> IO ())
+  , pVkWriteAccelerationStructuresPropertiesKHR :: FunPtr (Ptr Device_T -> ("accelerationStructureCount" ::: Word32) -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR) -> QueryType -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> ("stride" ::: CSize) -> IO Result)
+  , pVkCmdTraceRaysKHR :: FunPtr (Ptr CommandBuffer_T -> ("pRaygenShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pMissShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pHitShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pCallableShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> IO ())
+  , pVkCmdTraceRaysNV :: FunPtr (Ptr CommandBuffer_T -> ("raygenShaderBindingTableBuffer" ::: Buffer) -> ("raygenShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingTableBuffer" ::: Buffer) -> ("missShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingStride" ::: DeviceSize) -> ("hitShaderBindingTableBuffer" ::: Buffer) -> ("hitShaderBindingOffset" ::: DeviceSize) -> ("hitShaderBindingStride" ::: DeviceSize) -> ("callableShaderBindingTableBuffer" ::: Buffer) -> ("callableShaderBindingOffset" ::: DeviceSize) -> ("callableShaderBindingStride" ::: DeviceSize) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> IO ())
+  , pVkGetRayTracingShaderGroupHandlesKHR :: FunPtr (Ptr Device_T -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result)
+  , pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR :: FunPtr (Ptr Device_T -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result)
+  , pVkGetAccelerationStructureHandleNV :: FunPtr (Ptr Device_T -> AccelerationStructureKHR -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result)
+  , pVkCreateRayTracingPipelinesNV :: forall a . FunPtr (Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (RayTracingPipelineCreateInfoNV a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result)
+  , pVkCreateRayTracingPipelinesKHR :: forall a . FunPtr (Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (RayTracingPipelineCreateInfoKHR a)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result)
+  , pVkCmdTraceRaysIndirectKHR :: FunPtr (Ptr CommandBuffer_T -> ("pRaygenShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pMissShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pHitShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pCallableShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> Buffer -> ("offset" ::: DeviceSize) -> IO ())
+  , pVkGetDeviceAccelerationStructureCompatibilityKHR :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result)
+  , pVkGetImageViewHandleNVX :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr ImageViewHandleInfoNVX) -> IO Word32)
+  , pVkGetImageViewAddressNVX :: FunPtr (Ptr Device_T -> ImageView -> ("pProperties" ::: Ptr ImageViewAddressPropertiesNVX) -> IO Result)
+  , pVkGetDeviceGroupSurfacePresentModes2EXT :: forall a . FunPtr (Ptr Device_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR a)) -> ("pModes" ::: Ptr DeviceGroupPresentModeFlagsKHR) -> IO Result)
+  , pVkAcquireFullScreenExclusiveModeEXT :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result)
+  , pVkReleaseFullScreenExclusiveModeEXT :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result)
+  , pVkAcquireProfilingLockKHR :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr AcquireProfilingLockInfoKHR) -> IO Result)
+  , pVkReleaseProfilingLockKHR :: FunPtr (Ptr Device_T -> IO ())
+  , pVkGetImageDrmFormatModifierPropertiesEXT :: FunPtr (Ptr Device_T -> Image -> ("pProperties" ::: Ptr ImageDrmFormatModifierPropertiesEXT) -> IO Result)
+  , pVkGetBufferOpaqueCaptureAddress :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr BufferDeviceAddressInfo) -> IO Word64)
+  , pVkGetBufferDeviceAddress :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr BufferDeviceAddressInfo) -> IO DeviceAddress)
+  , pVkInitializePerformanceApiINTEL :: FunPtr (Ptr Device_T -> ("pInitializeInfo" ::: Ptr InitializePerformanceApiInfoINTEL) -> IO Result)
+  , pVkUninitializePerformanceApiINTEL :: FunPtr (Ptr Device_T -> IO ())
+  , pVkCmdSetPerformanceMarkerINTEL :: FunPtr (Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr PerformanceMarkerInfoINTEL) -> IO Result)
+  , pVkCmdSetPerformanceStreamMarkerINTEL :: FunPtr (Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr PerformanceStreamMarkerInfoINTEL) -> IO Result)
+  , pVkCmdSetPerformanceOverrideINTEL :: FunPtr (Ptr CommandBuffer_T -> ("pOverrideInfo" ::: Ptr PerformanceOverrideInfoINTEL) -> IO Result)
+  , pVkAcquirePerformanceConfigurationINTEL :: FunPtr (Ptr Device_T -> ("pAcquireInfo" ::: Ptr PerformanceConfigurationAcquireInfoINTEL) -> ("pConfiguration" ::: Ptr PerformanceConfigurationINTEL) -> IO Result)
+  , pVkReleasePerformanceConfigurationINTEL :: FunPtr (Ptr Device_T -> PerformanceConfigurationINTEL -> IO Result)
+  , pVkQueueSetPerformanceConfigurationINTEL :: FunPtr (Ptr Queue_T -> PerformanceConfigurationINTEL -> IO Result)
+  , pVkGetPerformanceParameterINTEL :: FunPtr (Ptr Device_T -> PerformanceParameterTypeINTEL -> ("pValue" ::: Ptr PerformanceValueINTEL) -> IO Result)
+  , pVkGetDeviceMemoryOpaqueCaptureAddress :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr DeviceMemoryOpaqueCaptureAddressInfo) -> IO Word64)
+  , pVkGetPipelineExecutablePropertiesKHR :: FunPtr (Ptr Device_T -> ("pPipelineInfo" ::: Ptr PipelineInfoKHR) -> ("pExecutableCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr PipelineExecutablePropertiesKHR) -> IO Result)
+  , pVkGetPipelineExecutableStatisticsKHR :: FunPtr (Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pStatisticCount" ::: Ptr Word32) -> ("pStatistics" ::: Ptr PipelineExecutableStatisticKHR) -> IO Result)
+  , pVkGetPipelineExecutableInternalRepresentationsKHR :: FunPtr (Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pInternalRepresentationCount" ::: Ptr Word32) -> ("pInternalRepresentations" ::: Ptr PipelineExecutableInternalRepresentationKHR) -> IO Result)
+  , pVkCmdSetLineStippleEXT :: FunPtr (Ptr CommandBuffer_T -> ("lineStippleFactor" ::: Word32) -> ("lineStipplePattern" ::: Word16) -> IO ())
+  , pVkCreateAccelerationStructureKHR :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result)
+  , pVkCmdBuildAccelerationStructureKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR a)) -> ("ppOffsetInfos" ::: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) -> IO ())
+  , pVkCmdBuildAccelerationStructureIndirectKHR :: forall a . FunPtr (Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR a)) -> ("indirectBuffer" ::: Buffer) -> ("indirectOffset" ::: DeviceSize) -> ("indirectStride" ::: Word32) -> IO ())
+  , pVkBuildAccelerationStructureKHR :: forall a . FunPtr (Ptr Device_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR a)) -> ("ppOffsetInfos" ::: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) -> IO Result)
+  , pVkGetAccelerationStructureDeviceAddressKHR :: FunPtr (Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR) -> IO DeviceAddress)
+  , pVkCreateDeferredOperationKHR :: FunPtr (Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDeferredOperation" ::: Ptr DeferredOperationKHR) -> IO Result)
+  , pVkDestroyDeferredOperationKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkGetDeferredOperationMaxConcurrencyKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Word32)
+  , pVkGetDeferredOperationResultKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Result)
+  , pVkDeferredOperationJoinKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Result)
+  , pVkCreatePrivateDataSlotEXT :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr PrivateDataSlotCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPrivateDataSlot" ::: Ptr PrivateDataSlotEXT) -> IO Result)
+  , pVkDestroyPrivateDataSlotEXT :: FunPtr (Ptr Device_T -> PrivateDataSlotEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ())
+  , pVkSetPrivateDataEXT :: FunPtr (Ptr Device_T -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlotEXT -> ("data" ::: Word64) -> IO Result)
+  , pVkGetPrivateDataEXT :: FunPtr (Ptr Device_T -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlotEXT -> ("pData" ::: Ptr Word64) -> IO ())
+  }
+
+deriving instance Eq DeviceCmds
+deriving instance Show DeviceCmds
+instance Zero DeviceCmds where
+  zero = DeviceCmds
+    nullPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+    nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceProcAddr
+  :: FunPtr (Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) -> Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
+
+initDeviceCmds :: InstanceCmds -> Ptr Device_T -> IO DeviceCmds
+initDeviceCmds instanceCmds handle = do
+  pGetDeviceProcAddr <- castFunPtr @_ @(Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction)
+      <$> getInstanceProcAddr' (instanceCmdsHandle instanceCmds) (GHC.Ptr.Ptr "vkGetDeviceProcAddr"#)
+  let getDeviceProcAddr' = mkVkGetDeviceProcAddr pGetDeviceProcAddr
+  vkGetDeviceProcAddr <- getDeviceProcAddr' handle (Ptr "vkGetDeviceProcAddr"#)
+  vkDestroyDevice <- getDeviceProcAddr' handle (Ptr "vkDestroyDevice"#)
+  vkGetDeviceQueue <- getDeviceProcAddr' handle (Ptr "vkGetDeviceQueue"#)
+  vkQueueSubmit <- getDeviceProcAddr' handle (Ptr "vkQueueSubmit"#)
+  vkQueueWaitIdle <- getDeviceProcAddr' handle (Ptr "vkQueueWaitIdle"#)
+  vkDeviceWaitIdle <- getDeviceProcAddr' handle (Ptr "vkDeviceWaitIdle"#)
+  vkAllocateMemory <- getDeviceProcAddr' handle (Ptr "vkAllocateMemory"#)
+  vkFreeMemory <- getDeviceProcAddr' handle (Ptr "vkFreeMemory"#)
+  vkMapMemory <- getDeviceProcAddr' handle (Ptr "vkMapMemory"#)
+  vkUnmapMemory <- getDeviceProcAddr' handle (Ptr "vkUnmapMemory"#)
+  vkFlushMappedMemoryRanges <- getDeviceProcAddr' handle (Ptr "vkFlushMappedMemoryRanges"#)
+  vkInvalidateMappedMemoryRanges <- getDeviceProcAddr' handle (Ptr "vkInvalidateMappedMemoryRanges"#)
+  vkGetDeviceMemoryCommitment <- getDeviceProcAddr' handle (Ptr "vkGetDeviceMemoryCommitment"#)
+  vkGetBufferMemoryRequirements <- getDeviceProcAddr' handle (Ptr "vkGetBufferMemoryRequirements"#)
+  vkBindBufferMemory <- getDeviceProcAddr' handle (Ptr "vkBindBufferMemory"#)
+  vkGetImageMemoryRequirements <- getDeviceProcAddr' handle (Ptr "vkGetImageMemoryRequirements"#)
+  vkBindImageMemory <- getDeviceProcAddr' handle (Ptr "vkBindImageMemory"#)
+  vkGetImageSparseMemoryRequirements <- getDeviceProcAddr' handle (Ptr "vkGetImageSparseMemoryRequirements"#)
+  vkQueueBindSparse <- getDeviceProcAddr' handle (Ptr "vkQueueBindSparse"#)
+  vkCreateFence <- getDeviceProcAddr' handle (Ptr "vkCreateFence"#)
+  vkDestroyFence <- getDeviceProcAddr' handle (Ptr "vkDestroyFence"#)
+  vkResetFences <- getDeviceProcAddr' handle (Ptr "vkResetFences"#)
+  vkGetFenceStatus <- getDeviceProcAddr' handle (Ptr "vkGetFenceStatus"#)
+  vkWaitForFences <- getDeviceProcAddr' handle (Ptr "vkWaitForFences"#)
+  vkCreateSemaphore <- getDeviceProcAddr' handle (Ptr "vkCreateSemaphore"#)
+  vkDestroySemaphore <- getDeviceProcAddr' handle (Ptr "vkDestroySemaphore"#)
+  vkCreateEvent <- getDeviceProcAddr' handle (Ptr "vkCreateEvent"#)
+  vkDestroyEvent <- getDeviceProcAddr' handle (Ptr "vkDestroyEvent"#)
+  vkGetEventStatus <- getDeviceProcAddr' handle (Ptr "vkGetEventStatus"#)
+  vkSetEvent <- getDeviceProcAddr' handle (Ptr "vkSetEvent"#)
+  vkResetEvent <- getDeviceProcAddr' handle (Ptr "vkResetEvent"#)
+  vkCreateQueryPool <- getDeviceProcAddr' handle (Ptr "vkCreateQueryPool"#)
+  vkDestroyQueryPool <- getDeviceProcAddr' handle (Ptr "vkDestroyQueryPool"#)
+  vkGetQueryPoolResults <- getDeviceProcAddr' handle (Ptr "vkGetQueryPoolResults"#)
+  vkResetQueryPool <- getDeviceProcAddr' handle (Ptr "vkResetQueryPool"#)
+  vkCreateBuffer <- getDeviceProcAddr' handle (Ptr "vkCreateBuffer"#)
+  vkDestroyBuffer <- getDeviceProcAddr' handle (Ptr "vkDestroyBuffer"#)
+  vkCreateBufferView <- getDeviceProcAddr' handle (Ptr "vkCreateBufferView"#)
+  vkDestroyBufferView <- getDeviceProcAddr' handle (Ptr "vkDestroyBufferView"#)
+  vkCreateImage <- getDeviceProcAddr' handle (Ptr "vkCreateImage"#)
+  vkDestroyImage <- getDeviceProcAddr' handle (Ptr "vkDestroyImage"#)
+  vkGetImageSubresourceLayout <- getDeviceProcAddr' handle (Ptr "vkGetImageSubresourceLayout"#)
+  vkCreateImageView <- getDeviceProcAddr' handle (Ptr "vkCreateImageView"#)
+  vkDestroyImageView <- getDeviceProcAddr' handle (Ptr "vkDestroyImageView"#)
+  vkCreateShaderModule <- getDeviceProcAddr' handle (Ptr "vkCreateShaderModule"#)
+  vkDestroyShaderModule <- getDeviceProcAddr' handle (Ptr "vkDestroyShaderModule"#)
+  vkCreatePipelineCache <- getDeviceProcAddr' handle (Ptr "vkCreatePipelineCache"#)
+  vkDestroyPipelineCache <- getDeviceProcAddr' handle (Ptr "vkDestroyPipelineCache"#)
+  vkGetPipelineCacheData <- getDeviceProcAddr' handle (Ptr "vkGetPipelineCacheData"#)
+  vkMergePipelineCaches <- getDeviceProcAddr' handle (Ptr "vkMergePipelineCaches"#)
+  vkCreateGraphicsPipelines <- getDeviceProcAddr' handle (Ptr "vkCreateGraphicsPipelines"#)
+  vkCreateComputePipelines <- getDeviceProcAddr' handle (Ptr "vkCreateComputePipelines"#)
+  vkDestroyPipeline <- getDeviceProcAddr' handle (Ptr "vkDestroyPipeline"#)
+  vkCreatePipelineLayout <- getDeviceProcAddr' handle (Ptr "vkCreatePipelineLayout"#)
+  vkDestroyPipelineLayout <- getDeviceProcAddr' handle (Ptr "vkDestroyPipelineLayout"#)
+  vkCreateSampler <- getDeviceProcAddr' handle (Ptr "vkCreateSampler"#)
+  vkDestroySampler <- getDeviceProcAddr' handle (Ptr "vkDestroySampler"#)
+  vkCreateDescriptorSetLayout <- getDeviceProcAddr' handle (Ptr "vkCreateDescriptorSetLayout"#)
+  vkDestroyDescriptorSetLayout <- getDeviceProcAddr' handle (Ptr "vkDestroyDescriptorSetLayout"#)
+  vkCreateDescriptorPool <- getDeviceProcAddr' handle (Ptr "vkCreateDescriptorPool"#)
+  vkDestroyDescriptorPool <- getDeviceProcAddr' handle (Ptr "vkDestroyDescriptorPool"#)
+  vkResetDescriptorPool <- getDeviceProcAddr' handle (Ptr "vkResetDescriptorPool"#)
+  vkAllocateDescriptorSets <- getDeviceProcAddr' handle (Ptr "vkAllocateDescriptorSets"#)
+  vkFreeDescriptorSets <- getDeviceProcAddr' handle (Ptr "vkFreeDescriptorSets"#)
+  vkUpdateDescriptorSets <- getDeviceProcAddr' handle (Ptr "vkUpdateDescriptorSets"#)
+  vkCreateFramebuffer <- getDeviceProcAddr' handle (Ptr "vkCreateFramebuffer"#)
+  vkDestroyFramebuffer <- getDeviceProcAddr' handle (Ptr "vkDestroyFramebuffer"#)
+  vkCreateRenderPass <- getDeviceProcAddr' handle (Ptr "vkCreateRenderPass"#)
+  vkDestroyRenderPass <- getDeviceProcAddr' handle (Ptr "vkDestroyRenderPass"#)
+  vkGetRenderAreaGranularity <- getDeviceProcAddr' handle (Ptr "vkGetRenderAreaGranularity"#)
+  vkCreateCommandPool <- getDeviceProcAddr' handle (Ptr "vkCreateCommandPool"#)
+  vkDestroyCommandPool <- getDeviceProcAddr' handle (Ptr "vkDestroyCommandPool"#)
+  vkResetCommandPool <- getDeviceProcAddr' handle (Ptr "vkResetCommandPool"#)
+  vkAllocateCommandBuffers <- getDeviceProcAddr' handle (Ptr "vkAllocateCommandBuffers"#)
+  vkFreeCommandBuffers <- getDeviceProcAddr' handle (Ptr "vkFreeCommandBuffers"#)
+  vkBeginCommandBuffer <- getDeviceProcAddr' handle (Ptr "vkBeginCommandBuffer"#)
+  vkEndCommandBuffer <- getDeviceProcAddr' handle (Ptr "vkEndCommandBuffer"#)
+  vkResetCommandBuffer <- getDeviceProcAddr' handle (Ptr "vkResetCommandBuffer"#)
+  vkCmdBindPipeline <- getDeviceProcAddr' handle (Ptr "vkCmdBindPipeline"#)
+  vkCmdSetViewport <- getDeviceProcAddr' handle (Ptr "vkCmdSetViewport"#)
+  vkCmdSetScissor <- getDeviceProcAddr' handle (Ptr "vkCmdSetScissor"#)
+  vkCmdSetLineWidth <- getDeviceProcAddr' handle (Ptr "vkCmdSetLineWidth"#)
+  vkCmdSetDepthBias <- getDeviceProcAddr' handle (Ptr "vkCmdSetDepthBias"#)
+  vkCmdSetBlendConstants <- getDeviceProcAddr' handle (Ptr "vkCmdSetBlendConstants"#)
+  vkCmdSetDepthBounds <- getDeviceProcAddr' handle (Ptr "vkCmdSetDepthBounds"#)
+  vkCmdSetStencilCompareMask <- getDeviceProcAddr' handle (Ptr "vkCmdSetStencilCompareMask"#)
+  vkCmdSetStencilWriteMask <- getDeviceProcAddr' handle (Ptr "vkCmdSetStencilWriteMask"#)
+  vkCmdSetStencilReference <- getDeviceProcAddr' handle (Ptr "vkCmdSetStencilReference"#)
+  vkCmdBindDescriptorSets <- getDeviceProcAddr' handle (Ptr "vkCmdBindDescriptorSets"#)
+  vkCmdBindIndexBuffer <- getDeviceProcAddr' handle (Ptr "vkCmdBindIndexBuffer"#)
+  vkCmdBindVertexBuffers <- getDeviceProcAddr' handle (Ptr "vkCmdBindVertexBuffers"#)
+  vkCmdDraw <- getDeviceProcAddr' handle (Ptr "vkCmdDraw"#)
+  vkCmdDrawIndexed <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndexed"#)
+  vkCmdDrawIndirect <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndirect"#)
+  vkCmdDrawIndexedIndirect <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndexedIndirect"#)
+  vkCmdDispatch <- getDeviceProcAddr' handle (Ptr "vkCmdDispatch"#)
+  vkCmdDispatchIndirect <- getDeviceProcAddr' handle (Ptr "vkCmdDispatchIndirect"#)
+  vkCmdCopyBuffer <- getDeviceProcAddr' handle (Ptr "vkCmdCopyBuffer"#)
+  vkCmdCopyImage <- getDeviceProcAddr' handle (Ptr "vkCmdCopyImage"#)
+  vkCmdBlitImage <- getDeviceProcAddr' handle (Ptr "vkCmdBlitImage"#)
+  vkCmdCopyBufferToImage <- getDeviceProcAddr' handle (Ptr "vkCmdCopyBufferToImage"#)
+  vkCmdCopyImageToBuffer <- getDeviceProcAddr' handle (Ptr "vkCmdCopyImageToBuffer"#)
+  vkCmdUpdateBuffer <- getDeviceProcAddr' handle (Ptr "vkCmdUpdateBuffer"#)
+  vkCmdFillBuffer <- getDeviceProcAddr' handle (Ptr "vkCmdFillBuffer"#)
+  vkCmdClearColorImage <- getDeviceProcAddr' handle (Ptr "vkCmdClearColorImage"#)
+  vkCmdClearDepthStencilImage <- getDeviceProcAddr' handle (Ptr "vkCmdClearDepthStencilImage"#)
+  vkCmdClearAttachments <- getDeviceProcAddr' handle (Ptr "vkCmdClearAttachments"#)
+  vkCmdResolveImage <- getDeviceProcAddr' handle (Ptr "vkCmdResolveImage"#)
+  vkCmdSetEvent <- getDeviceProcAddr' handle (Ptr "vkCmdSetEvent"#)
+  vkCmdResetEvent <- getDeviceProcAddr' handle (Ptr "vkCmdResetEvent"#)
+  vkCmdWaitEvents <- getDeviceProcAddr' handle (Ptr "vkCmdWaitEvents"#)
+  vkCmdPipelineBarrier <- getDeviceProcAddr' handle (Ptr "vkCmdPipelineBarrier"#)
+  vkCmdBeginQuery <- getDeviceProcAddr' handle (Ptr "vkCmdBeginQuery"#)
+  vkCmdEndQuery <- getDeviceProcAddr' handle (Ptr "vkCmdEndQuery"#)
+  vkCmdBeginConditionalRenderingEXT <- getDeviceProcAddr' handle (Ptr "vkCmdBeginConditionalRenderingEXT"#)
+  vkCmdEndConditionalRenderingEXT <- getDeviceProcAddr' handle (Ptr "vkCmdEndConditionalRenderingEXT"#)
+  vkCmdResetQueryPool <- getDeviceProcAddr' handle (Ptr "vkCmdResetQueryPool"#)
+  vkCmdWriteTimestamp <- getDeviceProcAddr' handle (Ptr "vkCmdWriteTimestamp"#)
+  vkCmdCopyQueryPoolResults <- getDeviceProcAddr' handle (Ptr "vkCmdCopyQueryPoolResults"#)
+  vkCmdPushConstants <- getDeviceProcAddr' handle (Ptr "vkCmdPushConstants"#)
+  vkCmdBeginRenderPass <- getDeviceProcAddr' handle (Ptr "vkCmdBeginRenderPass"#)
+  vkCmdNextSubpass <- getDeviceProcAddr' handle (Ptr "vkCmdNextSubpass"#)
+  vkCmdEndRenderPass <- getDeviceProcAddr' handle (Ptr "vkCmdEndRenderPass"#)
+  vkCmdExecuteCommands <- getDeviceProcAddr' handle (Ptr "vkCmdExecuteCommands"#)
+  vkCreateSharedSwapchainsKHR <- getDeviceProcAddr' handle (Ptr "vkCreateSharedSwapchainsKHR"#)
+  vkCreateSwapchainKHR <- getDeviceProcAddr' handle (Ptr "vkCreateSwapchainKHR"#)
+  vkDestroySwapchainKHR <- getDeviceProcAddr' handle (Ptr "vkDestroySwapchainKHR"#)
+  vkGetSwapchainImagesKHR <- getDeviceProcAddr' handle (Ptr "vkGetSwapchainImagesKHR"#)
+  vkAcquireNextImageKHR <- getDeviceProcAddr' handle (Ptr "vkAcquireNextImageKHR"#)
+  vkQueuePresentKHR <- getDeviceProcAddr' handle (Ptr "vkQueuePresentKHR"#)
+  vkDebugMarkerSetObjectNameEXT <- getDeviceProcAddr' handle (Ptr "vkDebugMarkerSetObjectNameEXT"#)
+  vkDebugMarkerSetObjectTagEXT <- getDeviceProcAddr' handle (Ptr "vkDebugMarkerSetObjectTagEXT"#)
+  vkCmdDebugMarkerBeginEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDebugMarkerBeginEXT"#)
+  vkCmdDebugMarkerEndEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDebugMarkerEndEXT"#)
+  vkCmdDebugMarkerInsertEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDebugMarkerInsertEXT"#)
+  vkGetMemoryWin32HandleNV <- getDeviceProcAddr' handle (Ptr "vkGetMemoryWin32HandleNV"#)
+  vkCmdExecuteGeneratedCommandsNV <- getDeviceProcAddr' handle (Ptr "vkCmdExecuteGeneratedCommandsNV"#)
+  vkCmdPreprocessGeneratedCommandsNV <- getDeviceProcAddr' handle (Ptr "vkCmdPreprocessGeneratedCommandsNV"#)
+  vkCmdBindPipelineShaderGroupNV <- getDeviceProcAddr' handle (Ptr "vkCmdBindPipelineShaderGroupNV"#)
+  vkGetGeneratedCommandsMemoryRequirementsNV <- getDeviceProcAddr' handle (Ptr "vkGetGeneratedCommandsMemoryRequirementsNV"#)
+  vkCreateIndirectCommandsLayoutNV <- getDeviceProcAddr' handle (Ptr "vkCreateIndirectCommandsLayoutNV"#)
+  vkDestroyIndirectCommandsLayoutNV <- getDeviceProcAddr' handle (Ptr "vkDestroyIndirectCommandsLayoutNV"#)
+  vkCmdPushDescriptorSetKHR <- getDeviceProcAddr' handle (Ptr "vkCmdPushDescriptorSetKHR"#)
+  vkTrimCommandPool <- getDeviceProcAddr' handle (Ptr "vkTrimCommandPool"#)
+  vkGetMemoryWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkGetMemoryWin32HandleKHR"#)
+  vkGetMemoryWin32HandlePropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkGetMemoryWin32HandlePropertiesKHR"#)
+  vkGetMemoryFdKHR <- getDeviceProcAddr' handle (Ptr "vkGetMemoryFdKHR"#)
+  vkGetMemoryFdPropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkGetMemoryFdPropertiesKHR"#)
+  vkGetSemaphoreWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkGetSemaphoreWin32HandleKHR"#)
+  vkImportSemaphoreWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkImportSemaphoreWin32HandleKHR"#)
+  vkGetSemaphoreFdKHR <- getDeviceProcAddr' handle (Ptr "vkGetSemaphoreFdKHR"#)
+  vkImportSemaphoreFdKHR <- getDeviceProcAddr' handle (Ptr "vkImportSemaphoreFdKHR"#)
+  vkGetFenceWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkGetFenceWin32HandleKHR"#)
+  vkImportFenceWin32HandleKHR <- getDeviceProcAddr' handle (Ptr "vkImportFenceWin32HandleKHR"#)
+  vkGetFenceFdKHR <- getDeviceProcAddr' handle (Ptr "vkGetFenceFdKHR"#)
+  vkImportFenceFdKHR <- getDeviceProcAddr' handle (Ptr "vkImportFenceFdKHR"#)
+  vkDisplayPowerControlEXT <- getDeviceProcAddr' handle (Ptr "vkDisplayPowerControlEXT"#)
+  vkRegisterDeviceEventEXT <- getDeviceProcAddr' handle (Ptr "vkRegisterDeviceEventEXT"#)
+  vkRegisterDisplayEventEXT <- getDeviceProcAddr' handle (Ptr "vkRegisterDisplayEventEXT"#)
+  vkGetSwapchainCounterEXT <- getDeviceProcAddr' handle (Ptr "vkGetSwapchainCounterEXT"#)
+  vkGetDeviceGroupPeerMemoryFeatures <- getDeviceProcAddr' handle (Ptr "vkGetDeviceGroupPeerMemoryFeatures"#)
+  vkBindBufferMemory2 <- getDeviceProcAddr' handle (Ptr "vkBindBufferMemory2"#)
+  vkBindImageMemory2 <- getDeviceProcAddr' handle (Ptr "vkBindImageMemory2"#)
+  vkCmdSetDeviceMask <- getDeviceProcAddr' handle (Ptr "vkCmdSetDeviceMask"#)
+  vkGetDeviceGroupPresentCapabilitiesKHR <- getDeviceProcAddr' handle (Ptr "vkGetDeviceGroupPresentCapabilitiesKHR"#)
+  vkGetDeviceGroupSurfacePresentModesKHR <- getDeviceProcAddr' handle (Ptr "vkGetDeviceGroupSurfacePresentModesKHR"#)
+  vkAcquireNextImage2KHR <- getDeviceProcAddr' handle (Ptr "vkAcquireNextImage2KHR"#)
+  vkCmdDispatchBase <- getDeviceProcAddr' handle (Ptr "vkCmdDispatchBase"#)
+  vkCreateDescriptorUpdateTemplate <- getDeviceProcAddr' handle (Ptr "vkCreateDescriptorUpdateTemplate"#)
+  vkDestroyDescriptorUpdateTemplate <- getDeviceProcAddr' handle (Ptr "vkDestroyDescriptorUpdateTemplate"#)
+  vkUpdateDescriptorSetWithTemplate <- getDeviceProcAddr' handle (Ptr "vkUpdateDescriptorSetWithTemplate"#)
+  vkCmdPushDescriptorSetWithTemplateKHR <- getDeviceProcAddr' handle (Ptr "vkCmdPushDescriptorSetWithTemplateKHR"#)
+  vkSetHdrMetadataEXT <- getDeviceProcAddr' handle (Ptr "vkSetHdrMetadataEXT"#)
+  vkGetSwapchainStatusKHR <- getDeviceProcAddr' handle (Ptr "vkGetSwapchainStatusKHR"#)
+  vkGetRefreshCycleDurationGOOGLE <- getDeviceProcAddr' handle (Ptr "vkGetRefreshCycleDurationGOOGLE"#)
+  vkGetPastPresentationTimingGOOGLE <- getDeviceProcAddr' handle (Ptr "vkGetPastPresentationTimingGOOGLE"#)
+  vkCmdSetViewportWScalingNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetViewportWScalingNV"#)
+  vkCmdSetDiscardRectangleEXT <- getDeviceProcAddr' handle (Ptr "vkCmdSetDiscardRectangleEXT"#)
+  vkCmdSetSampleLocationsEXT <- getDeviceProcAddr' handle (Ptr "vkCmdSetSampleLocationsEXT"#)
+  vkGetBufferMemoryRequirements2 <- getDeviceProcAddr' handle (Ptr "vkGetBufferMemoryRequirements2"#)
+  vkGetImageMemoryRequirements2 <- getDeviceProcAddr' handle (Ptr "vkGetImageMemoryRequirements2"#)
+  vkGetImageSparseMemoryRequirements2 <- getDeviceProcAddr' handle (Ptr "vkGetImageSparseMemoryRequirements2"#)
+  vkCreateSamplerYcbcrConversion <- getDeviceProcAddr' handle (Ptr "vkCreateSamplerYcbcrConversion"#)
+  vkDestroySamplerYcbcrConversion <- getDeviceProcAddr' handle (Ptr "vkDestroySamplerYcbcrConversion"#)
+  vkGetDeviceQueue2 <- getDeviceProcAddr' handle (Ptr "vkGetDeviceQueue2"#)
+  vkCreateValidationCacheEXT <- getDeviceProcAddr' handle (Ptr "vkCreateValidationCacheEXT"#)
+  vkDestroyValidationCacheEXT <- getDeviceProcAddr' handle (Ptr "vkDestroyValidationCacheEXT"#)
+  vkGetValidationCacheDataEXT <- getDeviceProcAddr' handle (Ptr "vkGetValidationCacheDataEXT"#)
+  vkMergeValidationCachesEXT <- getDeviceProcAddr' handle (Ptr "vkMergeValidationCachesEXT"#)
+  vkGetDescriptorSetLayoutSupport <- getDeviceProcAddr' handle (Ptr "vkGetDescriptorSetLayoutSupport"#)
+  vkGetShaderInfoAMD <- getDeviceProcAddr' handle (Ptr "vkGetShaderInfoAMD"#)
+  vkSetLocalDimmingAMD <- getDeviceProcAddr' handle (Ptr "vkSetLocalDimmingAMD"#)
+  vkGetCalibratedTimestampsEXT <- getDeviceProcAddr' handle (Ptr "vkGetCalibratedTimestampsEXT"#)
+  vkSetDebugUtilsObjectNameEXT <- getDeviceProcAddr' handle (Ptr "vkSetDebugUtilsObjectNameEXT"#)
+  vkSetDebugUtilsObjectTagEXT <- getDeviceProcAddr' handle (Ptr "vkSetDebugUtilsObjectTagEXT"#)
+  vkQueueBeginDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkQueueBeginDebugUtilsLabelEXT"#)
+  vkQueueEndDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkQueueEndDebugUtilsLabelEXT"#)
+  vkQueueInsertDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkQueueInsertDebugUtilsLabelEXT"#)
+  vkCmdBeginDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkCmdBeginDebugUtilsLabelEXT"#)
+  vkCmdEndDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkCmdEndDebugUtilsLabelEXT"#)
+  vkCmdInsertDebugUtilsLabelEXT <- getDeviceProcAddr' handle (Ptr "vkCmdInsertDebugUtilsLabelEXT"#)
+  vkGetMemoryHostPointerPropertiesEXT <- getDeviceProcAddr' handle (Ptr "vkGetMemoryHostPointerPropertiesEXT"#)
+  vkCmdWriteBufferMarkerAMD <- getDeviceProcAddr' handle (Ptr "vkCmdWriteBufferMarkerAMD"#)
+  vkCreateRenderPass2 <- getDeviceProcAddr' handle (Ptr "vkCreateRenderPass2"#)
+  vkCmdBeginRenderPass2 <- getDeviceProcAddr' handle (Ptr "vkCmdBeginRenderPass2"#)
+  vkCmdNextSubpass2 <- getDeviceProcAddr' handle (Ptr "vkCmdNextSubpass2"#)
+  vkCmdEndRenderPass2 <- getDeviceProcAddr' handle (Ptr "vkCmdEndRenderPass2"#)
+  vkGetSemaphoreCounterValue <- getDeviceProcAddr' handle (Ptr "vkGetSemaphoreCounterValue"#)
+  vkWaitSemaphores <- getDeviceProcAddr' handle (Ptr "vkWaitSemaphores"#)
+  vkSignalSemaphore <- getDeviceProcAddr' handle (Ptr "vkSignalSemaphore"#)
+  vkGetAndroidHardwareBufferPropertiesANDROID <- getDeviceProcAddr' handle (Ptr "vkGetAndroidHardwareBufferPropertiesANDROID"#)
+  vkGetMemoryAndroidHardwareBufferANDROID <- getDeviceProcAddr' handle (Ptr "vkGetMemoryAndroidHardwareBufferANDROID"#)
+  vkCmdDrawIndirectCount <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndirectCount"#)
+  vkCmdDrawIndexedIndirectCount <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndexedIndirectCount"#)
+  vkCmdSetCheckpointNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetCheckpointNV"#)
+  vkGetQueueCheckpointDataNV <- getDeviceProcAddr' handle (Ptr "vkGetQueueCheckpointDataNV"#)
+  vkCmdBindTransformFeedbackBuffersEXT <- getDeviceProcAddr' handle (Ptr "vkCmdBindTransformFeedbackBuffersEXT"#)
+  vkCmdBeginTransformFeedbackEXT <- getDeviceProcAddr' handle (Ptr "vkCmdBeginTransformFeedbackEXT"#)
+  vkCmdEndTransformFeedbackEXT <- getDeviceProcAddr' handle (Ptr "vkCmdEndTransformFeedbackEXT"#)
+  vkCmdBeginQueryIndexedEXT <- getDeviceProcAddr' handle (Ptr "vkCmdBeginQueryIndexedEXT"#)
+  vkCmdEndQueryIndexedEXT <- getDeviceProcAddr' handle (Ptr "vkCmdEndQueryIndexedEXT"#)
+  vkCmdDrawIndirectByteCountEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndirectByteCountEXT"#)
+  vkCmdSetExclusiveScissorNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetExclusiveScissorNV"#)
+  vkCmdBindShadingRateImageNV <- getDeviceProcAddr' handle (Ptr "vkCmdBindShadingRateImageNV"#)
+  vkCmdSetViewportShadingRatePaletteNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetViewportShadingRatePaletteNV"#)
+  vkCmdSetCoarseSampleOrderNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetCoarseSampleOrderNV"#)
+  vkCmdDrawMeshTasksNV <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMeshTasksNV"#)
+  vkCmdDrawMeshTasksIndirectNV <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMeshTasksIndirectNV"#)
+  vkCmdDrawMeshTasksIndirectCountNV <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMeshTasksIndirectCountNV"#)
+  vkCompileDeferredNV <- getDeviceProcAddr' handle (Ptr "vkCompileDeferredNV"#)
+  vkCreateAccelerationStructureNV <- getDeviceProcAddr' handle (Ptr "vkCreateAccelerationStructureNV"#)
+  vkDestroyAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkDestroyAccelerationStructureKHR"#)
+  vkGetAccelerationStructureMemoryRequirementsKHR <- getDeviceProcAddr' handle (Ptr "vkGetAccelerationStructureMemoryRequirementsKHR"#)
+  vkGetAccelerationStructureMemoryRequirementsNV <- getDeviceProcAddr' handle (Ptr "vkGetAccelerationStructureMemoryRequirementsNV"#)
+  vkBindAccelerationStructureMemoryKHR <- getDeviceProcAddr' handle (Ptr "vkBindAccelerationStructureMemoryKHR"#)
+  vkCmdCopyAccelerationStructureNV <- getDeviceProcAddr' handle (Ptr "vkCmdCopyAccelerationStructureNV"#)
+  vkCmdCopyAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyAccelerationStructureKHR"#)
+  vkCopyAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCopyAccelerationStructureKHR"#)
+  vkCmdCopyAccelerationStructureToMemoryKHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyAccelerationStructureToMemoryKHR"#)
+  vkCopyAccelerationStructureToMemoryKHR <- getDeviceProcAddr' handle (Ptr "vkCopyAccelerationStructureToMemoryKHR"#)
+  vkCmdCopyMemoryToAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyMemoryToAccelerationStructureKHR"#)
+  vkCopyMemoryToAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCopyMemoryToAccelerationStructureKHR"#)
+  vkCmdWriteAccelerationStructuresPropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkCmdWriteAccelerationStructuresPropertiesKHR"#)
+  vkCmdBuildAccelerationStructureNV <- getDeviceProcAddr' handle (Ptr "vkCmdBuildAccelerationStructureNV"#)
+  vkWriteAccelerationStructuresPropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkWriteAccelerationStructuresPropertiesKHR"#)
+  vkCmdTraceRaysKHR <- getDeviceProcAddr' handle (Ptr "vkCmdTraceRaysKHR"#)
+  vkCmdTraceRaysNV <- getDeviceProcAddr' handle (Ptr "vkCmdTraceRaysNV"#)
+  vkGetRayTracingShaderGroupHandlesKHR <- getDeviceProcAddr' handle (Ptr "vkGetRayTracingShaderGroupHandlesKHR"#)
+  vkGetRayTracingCaptureReplayShaderGroupHandlesKHR <- getDeviceProcAddr' handle (Ptr "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"#)
+  vkGetAccelerationStructureHandleNV <- getDeviceProcAddr' handle (Ptr "vkGetAccelerationStructureHandleNV"#)
+  vkCreateRayTracingPipelinesNV <- getDeviceProcAddr' handle (Ptr "vkCreateRayTracingPipelinesNV"#)
+  vkCreateRayTracingPipelinesKHR <- getDeviceProcAddr' handle (Ptr "vkCreateRayTracingPipelinesKHR"#)
+  vkCmdTraceRaysIndirectKHR <- getDeviceProcAddr' handle (Ptr "vkCmdTraceRaysIndirectKHR"#)
+  vkGetDeviceAccelerationStructureCompatibilityKHR <- getDeviceProcAddr' handle (Ptr "vkGetDeviceAccelerationStructureCompatibilityKHR"#)
+  vkGetImageViewHandleNVX <- getDeviceProcAddr' handle (Ptr "vkGetImageViewHandleNVX"#)
+  vkGetImageViewAddressNVX <- getDeviceProcAddr' handle (Ptr "vkGetImageViewAddressNVX"#)
+  vkGetDeviceGroupSurfacePresentModes2EXT <- getDeviceProcAddr' handle (Ptr "vkGetDeviceGroupSurfacePresentModes2EXT"#)
+  vkAcquireFullScreenExclusiveModeEXT <- getDeviceProcAddr' handle (Ptr "vkAcquireFullScreenExclusiveModeEXT"#)
+  vkReleaseFullScreenExclusiveModeEXT <- getDeviceProcAddr' handle (Ptr "vkReleaseFullScreenExclusiveModeEXT"#)
+  vkAcquireProfilingLockKHR <- getDeviceProcAddr' handle (Ptr "vkAcquireProfilingLockKHR"#)
+  vkReleaseProfilingLockKHR <- getDeviceProcAddr' handle (Ptr "vkReleaseProfilingLockKHR"#)
+  vkGetImageDrmFormatModifierPropertiesEXT <- getDeviceProcAddr' handle (Ptr "vkGetImageDrmFormatModifierPropertiesEXT"#)
+  vkGetBufferOpaqueCaptureAddress <- getDeviceProcAddr' handle (Ptr "vkGetBufferOpaqueCaptureAddress"#)
+  vkGetBufferDeviceAddress <- getDeviceProcAddr' handle (Ptr "vkGetBufferDeviceAddress"#)
+  vkInitializePerformanceApiINTEL <- getDeviceProcAddr' handle (Ptr "vkInitializePerformanceApiINTEL"#)
+  vkUninitializePerformanceApiINTEL <- getDeviceProcAddr' handle (Ptr "vkUninitializePerformanceApiINTEL"#)
+  vkCmdSetPerformanceMarkerINTEL <- getDeviceProcAddr' handle (Ptr "vkCmdSetPerformanceMarkerINTEL"#)
+  vkCmdSetPerformanceStreamMarkerINTEL <- getDeviceProcAddr' handle (Ptr "vkCmdSetPerformanceStreamMarkerINTEL"#)
+  vkCmdSetPerformanceOverrideINTEL <- getDeviceProcAddr' handle (Ptr "vkCmdSetPerformanceOverrideINTEL"#)
+  vkAcquirePerformanceConfigurationINTEL <- getDeviceProcAddr' handle (Ptr "vkAcquirePerformanceConfigurationINTEL"#)
+  vkReleasePerformanceConfigurationINTEL <- getDeviceProcAddr' handle (Ptr "vkReleasePerformanceConfigurationINTEL"#)
+  vkQueueSetPerformanceConfigurationINTEL <- getDeviceProcAddr' handle (Ptr "vkQueueSetPerformanceConfigurationINTEL"#)
+  vkGetPerformanceParameterINTEL <- getDeviceProcAddr' handle (Ptr "vkGetPerformanceParameterINTEL"#)
+  vkGetDeviceMemoryOpaqueCaptureAddress <- getDeviceProcAddr' handle (Ptr "vkGetDeviceMemoryOpaqueCaptureAddress"#)
+  vkGetPipelineExecutablePropertiesKHR <- getDeviceProcAddr' handle (Ptr "vkGetPipelineExecutablePropertiesKHR"#)
+  vkGetPipelineExecutableStatisticsKHR <- getDeviceProcAddr' handle (Ptr "vkGetPipelineExecutableStatisticsKHR"#)
+  vkGetPipelineExecutableInternalRepresentationsKHR <- getDeviceProcAddr' handle (Ptr "vkGetPipelineExecutableInternalRepresentationsKHR"#)
+  vkCmdSetLineStippleEXT <- getDeviceProcAddr' handle (Ptr "vkCmdSetLineStippleEXT"#)
+  vkCreateAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCreateAccelerationStructureKHR"#)
+  vkCmdBuildAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkCmdBuildAccelerationStructureKHR"#)
+  vkCmdBuildAccelerationStructureIndirectKHR <- getDeviceProcAddr' handle (Ptr "vkCmdBuildAccelerationStructureIndirectKHR"#)
+  vkBuildAccelerationStructureKHR <- getDeviceProcAddr' handle (Ptr "vkBuildAccelerationStructureKHR"#)
+  vkGetAccelerationStructureDeviceAddressKHR <- getDeviceProcAddr' handle (Ptr "vkGetAccelerationStructureDeviceAddressKHR"#)
+  vkCreateDeferredOperationKHR <- getDeviceProcAddr' handle (Ptr "vkCreateDeferredOperationKHR"#)
+  vkDestroyDeferredOperationKHR <- getDeviceProcAddr' handle (Ptr "vkDestroyDeferredOperationKHR"#)
+  vkGetDeferredOperationMaxConcurrencyKHR <- getDeviceProcAddr' handle (Ptr "vkGetDeferredOperationMaxConcurrencyKHR"#)
+  vkGetDeferredOperationResultKHR <- getDeviceProcAddr' handle (Ptr "vkGetDeferredOperationResultKHR"#)
+  vkDeferredOperationJoinKHR <- getDeviceProcAddr' handle (Ptr "vkDeferredOperationJoinKHR"#)
+  vkCreatePrivateDataSlotEXT <- getDeviceProcAddr' handle (Ptr "vkCreatePrivateDataSlotEXT"#)
+  vkDestroyPrivateDataSlotEXT <- getDeviceProcAddr' handle (Ptr "vkDestroyPrivateDataSlotEXT"#)
+  vkSetPrivateDataEXT <- getDeviceProcAddr' handle (Ptr "vkSetPrivateDataEXT"#)
+  vkGetPrivateDataEXT <- getDeviceProcAddr' handle (Ptr "vkGetPrivateDataEXT"#)
+  pure $ DeviceCmds handle
+    (castFunPtr @_ @(Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) vkGetDeviceProcAddr)
+    (castFunPtr @_ @(Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDevice)
+    (castFunPtr @_ @(Ptr Device_T -> ("queueFamilyIndex" ::: Word32) -> ("queueIndex" ::: Word32) -> ("pQueue" ::: Ptr (Ptr Queue_T)) -> IO ()) vkGetDeviceQueue)
+    (castFunPtr @_ @(Ptr Queue_T -> ("submitCount" ::: Word32) -> ("pSubmits" ::: Ptr (SubmitInfo _)) -> Fence -> IO Result) vkQueueSubmit)
+    (castFunPtr @_ @(Ptr Queue_T -> IO Result) vkQueueWaitIdle)
+    (castFunPtr @_ @(Ptr Device_T -> IO Result) vkDeviceWaitIdle)
+    (castFunPtr @_ @(Ptr Device_T -> ("pAllocateInfo" ::: Ptr (MemoryAllocateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pMemory" ::: Ptr DeviceMemory) -> IO Result) vkAllocateMemory)
+    (castFunPtr @_ @(Ptr Device_T -> DeviceMemory -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkFreeMemory)
+    (castFunPtr @_ @(Ptr Device_T -> DeviceMemory -> ("offset" ::: DeviceSize) -> DeviceSize -> MemoryMapFlags -> ("ppData" ::: Ptr (Ptr ())) -> IO Result) vkMapMemory)
+    (castFunPtr @_ @(Ptr Device_T -> DeviceMemory -> IO ()) vkUnmapMemory)
+    (castFunPtr @_ @(Ptr Device_T -> ("memoryRangeCount" ::: Word32) -> ("pMemoryRanges" ::: Ptr MappedMemoryRange) -> IO Result) vkFlushMappedMemoryRanges)
+    (castFunPtr @_ @(Ptr Device_T -> ("memoryRangeCount" ::: Word32) -> ("pMemoryRanges" ::: Ptr MappedMemoryRange) -> IO Result) vkInvalidateMappedMemoryRanges)
+    (castFunPtr @_ @(Ptr Device_T -> DeviceMemory -> ("pCommittedMemoryInBytes" ::: Ptr DeviceSize) -> IO ()) vkGetDeviceMemoryCommitment)
+    (castFunPtr @_ @(Ptr Device_T -> Buffer -> ("pMemoryRequirements" ::: Ptr MemoryRequirements) -> IO ()) vkGetBufferMemoryRequirements)
+    (castFunPtr @_ @(Ptr Device_T -> Buffer -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> IO Result) vkBindBufferMemory)
+    (castFunPtr @_ @(Ptr Device_T -> Image -> ("pMemoryRequirements" ::: Ptr MemoryRequirements) -> IO ()) vkGetImageMemoryRequirements)
+    (castFunPtr @_ @(Ptr Device_T -> Image -> DeviceMemory -> ("memoryOffset" ::: DeviceSize) -> IO Result) vkBindImageMemory)
+    (castFunPtr @_ @(Ptr Device_T -> Image -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements) -> IO ()) vkGetImageSparseMemoryRequirements)
+    (castFunPtr @_ @(Ptr Queue_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfo" ::: Ptr (BindSparseInfo _)) -> Fence -> IO Result) vkQueueBindSparse)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (FenceCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result) vkCreateFence)
+    (castFunPtr @_ @(Ptr Device_T -> Fence -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyFence)
+    (castFunPtr @_ @(Ptr Device_T -> ("fenceCount" ::: Word32) -> ("pFences" ::: Ptr Fence) -> IO Result) vkResetFences)
+    (castFunPtr @_ @(Ptr Device_T -> Fence -> IO Result) vkGetFenceStatus)
+    (castFunPtr @_ @(Ptr Device_T -> ("fenceCount" ::: Word32) -> ("pFences" ::: Ptr Fence) -> ("waitAll" ::: Bool32) -> ("timeout" ::: Word64) -> IO Result) vkWaitForFences)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (SemaphoreCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSemaphore" ::: Ptr Semaphore) -> IO Result) vkCreateSemaphore)
+    (castFunPtr @_ @(Ptr Device_T -> Semaphore -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroySemaphore)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr EventCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pEvent" ::: Ptr Event) -> IO Result) vkCreateEvent)
+    (castFunPtr @_ @(Ptr Device_T -> Event -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyEvent)
+    (castFunPtr @_ @(Ptr Device_T -> Event -> IO Result) vkGetEventStatus)
+    (castFunPtr @_ @(Ptr Device_T -> Event -> IO Result) vkSetEvent)
+    (castFunPtr @_ @(Ptr Device_T -> Event -> IO Result) vkResetEvent)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (QueryPoolCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pQueryPool" ::: Ptr QueryPool) -> IO Result) vkCreateQueryPool)
+    (castFunPtr @_ @(Ptr Device_T -> QueryPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyQueryPool)
+    (castFunPtr @_ @(Ptr Device_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> IO Result) vkGetQueryPoolResults)
+    (castFunPtr @_ @(Ptr Device_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ()) vkResetQueryPool)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (BufferCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pBuffer" ::: Ptr Buffer) -> IO Result) vkCreateBuffer)
+    (castFunPtr @_ @(Ptr Device_T -> Buffer -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyBuffer)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr BufferViewCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pView" ::: Ptr BufferView) -> IO Result) vkCreateBufferView)
+    (castFunPtr @_ @(Ptr Device_T -> BufferView -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyBufferView)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (ImageCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pImage" ::: Ptr Image) -> IO Result) vkCreateImage)
+    (castFunPtr @_ @(Ptr Device_T -> Image -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyImage)
+    (castFunPtr @_ @(Ptr Device_T -> Image -> ("pSubresource" ::: Ptr ImageSubresource) -> ("pLayout" ::: Ptr SubresourceLayout) -> IO ()) vkGetImageSubresourceLayout)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (ImageViewCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pView" ::: Ptr ImageView) -> IO Result) vkCreateImageView)
+    (castFunPtr @_ @(Ptr Device_T -> ImageView -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyImageView)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (ShaderModuleCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pShaderModule" ::: Ptr ShaderModule) -> IO Result) vkCreateShaderModule)
+    (castFunPtr @_ @(Ptr Device_T -> ShaderModule -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyShaderModule)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr PipelineCacheCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelineCache" ::: Ptr PipelineCache) -> IO Result) vkCreatePipelineCache)
+    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyPipelineCache)
+    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("pDataSize" ::: Ptr CSize) -> ("pData" ::: Ptr ()) -> IO Result) vkGetPipelineCacheData)
+    (castFunPtr @_ @(Ptr Device_T -> ("dstCache" ::: PipelineCache) -> ("srcCacheCount" ::: Word32) -> ("pSrcCaches" ::: Ptr PipelineCache) -> IO Result) vkMergePipelineCaches)
+    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (GraphicsPipelineCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result) vkCreateGraphicsPipelines)
+    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (ComputePipelineCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result) vkCreateComputePipelines)
+    (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyPipeline)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr PipelineLayoutCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelineLayout" ::: Ptr PipelineLayout) -> IO Result) vkCreatePipelineLayout)
+    (castFunPtr @_ @(Ptr Device_T -> PipelineLayout -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyPipelineLayout)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (SamplerCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSampler" ::: Ptr Sampler) -> IO Result) vkCreateSampler)
+    (castFunPtr @_ @(Ptr Device_T -> Sampler -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroySampler)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorSetLayoutCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSetLayout" ::: Ptr DescriptorSetLayout) -> IO Result) vkCreateDescriptorSetLayout)
+    (castFunPtr @_ @(Ptr Device_T -> DescriptorSetLayout -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDescriptorSetLayout)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorPoolCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDescriptorPool" ::: Ptr DescriptorPool) -> IO Result) vkCreateDescriptorPool)
+    (castFunPtr @_ @(Ptr Device_T -> DescriptorPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDescriptorPool)
+    (castFunPtr @_ @(Ptr Device_T -> DescriptorPool -> DescriptorPoolResetFlags -> IO Result) vkResetDescriptorPool)
+    (castFunPtr @_ @(Ptr Device_T -> ("pAllocateInfo" ::: Ptr (DescriptorSetAllocateInfo _)) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> IO Result) vkAllocateDescriptorSets)
+    (castFunPtr @_ @(Ptr Device_T -> DescriptorPool -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> IO Result) vkFreeDescriptorSets)
+    (castFunPtr @_ @(Ptr Device_T -> ("descriptorWriteCount" ::: Word32) -> ("pDescriptorWrites" ::: Ptr (WriteDescriptorSet _)) -> ("descriptorCopyCount" ::: Word32) -> ("pDescriptorCopies" ::: Ptr CopyDescriptorSet) -> IO ()) vkUpdateDescriptorSets)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (FramebufferCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFramebuffer" ::: Ptr Framebuffer) -> IO Result) vkCreateFramebuffer)
+    (castFunPtr @_ @(Ptr Device_T -> Framebuffer -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyFramebuffer)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (RenderPassCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pRenderPass" ::: Ptr RenderPass) -> IO Result) vkCreateRenderPass)
+    (castFunPtr @_ @(Ptr Device_T -> RenderPass -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyRenderPass)
+    (castFunPtr @_ @(Ptr Device_T -> RenderPass -> ("pGranularity" ::: Ptr Extent2D) -> IO ()) vkGetRenderAreaGranularity)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr CommandPoolCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pCommandPool" ::: Ptr CommandPool) -> IO Result) vkCreateCommandPool)
+    (castFunPtr @_ @(Ptr Device_T -> CommandPool -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyCommandPool)
+    (castFunPtr @_ @(Ptr Device_T -> CommandPool -> CommandPoolResetFlags -> IO Result) vkResetCommandPool)
+    (castFunPtr @_ @(Ptr Device_T -> ("pAllocateInfo" ::: Ptr CommandBufferAllocateInfo) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO Result) vkAllocateCommandBuffers)
+    (castFunPtr @_ @(Ptr Device_T -> CommandPool -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO ()) vkFreeCommandBuffers)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pBeginInfo" ::: Ptr (CommandBufferBeginInfo _)) -> IO Result) vkBeginCommandBuffer)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> IO Result) vkEndCommandBuffer)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> CommandBufferResetFlags -> IO Result) vkResetCommandBuffer)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> IO ()) vkCmdBindPipeline)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewports" ::: Ptr Viewport) -> IO ()) vkCmdSetViewport)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstScissor" ::: Word32) -> ("scissorCount" ::: Word32) -> ("pScissors" ::: Ptr Rect2D) -> IO ()) vkCmdSetScissor)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("lineWidth" ::: CFloat) -> IO ()) vkCmdSetLineWidth)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("depthBiasConstantFactor" ::: CFloat) -> ("depthBiasClamp" ::: CFloat) -> ("depthBiasSlopeFactor" ::: CFloat) -> IO ()) vkCmdSetDepthBias)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("blendConstants" ::: Ptr (FixedArray 4 CFloat)) -> IO ()) vkCmdSetBlendConstants)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("minDepthBounds" ::: CFloat) -> ("maxDepthBounds" ::: CFloat) -> IO ()) vkCmdSetDepthBounds)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("compareMask" ::: Word32) -> IO ()) vkCmdSetStencilCompareMask)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("writeMask" ::: Word32) -> IO ()) vkCmdSetStencilWriteMask)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("faceMask" ::: StencilFaceFlags) -> ("reference" ::: Word32) -> IO ()) vkCmdSetStencilReference)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> ("firstSet" ::: Word32) -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr DescriptorSet) -> ("dynamicOffsetCount" ::: Word32) -> ("pDynamicOffsets" ::: Ptr Word32) -> IO ()) vkCmdBindDescriptorSets)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> IndexType -> IO ()) vkCmdBindIndexBuffer)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> IO ()) vkCmdBindVertexBuffers)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ()) vkCmdDraw)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ()) vkCmdDrawIndexed)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndirect)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndexedIndirect)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()) vkCmdDispatch)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> IO ()) vkCmdDispatchIndirect)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcBuffer" ::: Buffer) -> ("dstBuffer" ::: Buffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferCopy) -> IO ()) vkCmdCopyBuffer)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageCopy) -> IO ()) vkCmdCopyImage)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageBlit) -> Filter -> IO ()) vkCmdBlitImage)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcBuffer" ::: Buffer) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferImageCopy) -> IO ()) vkCmdCopyBufferToImage)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstBuffer" ::: Buffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr BufferImageCopy) -> IO ()) vkCmdCopyImageToBuffer)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("dataSize" ::: DeviceSize) -> ("pData" ::: Ptr ()) -> IO ()) vkCmdUpdateBuffer)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> DeviceSize -> ("data" ::: Word32) -> IO ()) vkCmdFillBuffer)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Image -> ImageLayout -> ("pColor" ::: Ptr ClearColorValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr ImageSubresourceRange) -> IO ()) vkCmdClearColorImage)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Image -> ImageLayout -> ("pDepthStencil" ::: Ptr ClearDepthStencilValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr ImageSubresourceRange) -> IO ()) vkCmdClearDepthStencilImage)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("attachmentCount" ::: Word32) -> ("pAttachments" ::: Ptr ClearAttachment) -> ("rectCount" ::: Word32) -> ("pRects" ::: Ptr ClearRect) -> IO ()) vkCmdClearAttachments)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr ImageResolve) -> IO ()) vkCmdResolveImage)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Event -> ("stageMask" ::: PipelineStageFlags) -> IO ()) vkCmdSetEvent)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Event -> ("stageMask" ::: PipelineStageFlags) -> IO ()) vkCmdResetEvent)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("eventCount" ::: Word32) -> ("pEvents" ::: Ptr Event) -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr MemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr BufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr (ImageMemoryBarrier _)) -> IO ()) vkCmdWaitEvents)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> DependencyFlags -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr MemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr BufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr (ImageMemoryBarrier _)) -> IO ()) vkCmdPipelineBarrier)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> IO ()) vkCmdBeginQuery)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> IO ()) vkCmdEndQuery)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pConditionalRenderingBegin" ::: Ptr ConditionalRenderingBeginInfoEXT) -> IO ()) vkCmdBeginConditionalRenderingEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> IO ()) vkCmdEndConditionalRenderingEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ()) vkCmdResetQueryPool)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> ("query" ::: Word32) -> IO ()) vkCmdWriteTimestamp)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> IO ()) vkCmdCopyQueryPoolResults)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("pValues" ::: Ptr ()) -> IO ()) vkCmdPushConstants)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pRenderPassBegin" ::: Ptr (RenderPassBeginInfo _)) -> SubpassContents -> IO ()) vkCmdBeginRenderPass)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> SubpassContents -> IO ()) vkCmdNextSubpass)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> IO ()) vkCmdEndRenderPass)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr (Ptr CommandBuffer_T)) -> IO ()) vkCmdExecuteCommands)
+    (castFunPtr @_ @(Ptr Device_T -> ("swapchainCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (SwapchainCreateInfoKHR _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSwapchains" ::: Ptr SwapchainKHR) -> IO Result) vkCreateSharedSwapchainsKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (SwapchainCreateInfoKHR _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pSwapchain" ::: Ptr SwapchainKHR) -> IO Result) vkCreateSwapchainKHR)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroySwapchainKHR)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("pSwapchainImageCount" ::: Ptr Word32) -> ("pSwapchainImages" ::: Ptr Image) -> IO Result) vkGetSwapchainImagesKHR)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("timeout" ::: Word64) -> Semaphore -> Fence -> ("pImageIndex" ::: Ptr Word32) -> IO Result) vkAcquireNextImageKHR)
+    (castFunPtr @_ @(Ptr Queue_T -> ("pPresentInfo" ::: Ptr (PresentInfoKHR _)) -> IO Result) vkQueuePresentKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pNameInfo" ::: Ptr DebugMarkerObjectNameInfoEXT) -> IO Result) vkDebugMarkerSetObjectNameEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("pTagInfo" ::: Ptr DebugMarkerObjectTagInfoEXT) -> IO Result) vkDebugMarkerSetObjectTagEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr DebugMarkerMarkerInfoEXT) -> IO ()) vkCmdDebugMarkerBeginEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> IO ()) vkCmdDebugMarkerEndEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr DebugMarkerMarkerInfoEXT) -> IO ()) vkCmdDebugMarkerInsertEXT)
+    (castFunPtr @_ @(Ptr Device_T -> DeviceMemory -> ExternalMemoryHandleTypeFlagsNV -> ("pHandle" ::: Ptr HANDLE) -> IO Result) vkGetMemoryWin32HandleNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("isPreprocessed" ::: Bool32) -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV) -> IO ()) vkCmdExecuteGeneratedCommandsNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV) -> IO ()) vkCmdPreprocessGeneratedCommandsNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> ("groupIndex" ::: Word32) -> IO ()) vkCmdBindPipelineShaderGroupNV)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 _)) -> IO ()) vkGetGeneratedCommandsMemoryRequirementsNV)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV) -> IO Result) vkCreateIndirectCommandsLayoutNV)
+    (castFunPtr @_ @(Ptr Device_T -> IndirectCommandsLayoutNV -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyIndirectCommandsLayoutNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> ("set" ::: Word32) -> ("descriptorWriteCount" ::: Word32) -> ("pDescriptorWrites" ::: Ptr (WriteDescriptorSet _)) -> IO ()) vkCmdPushDescriptorSetKHR)
+    (castFunPtr @_ @(Ptr Device_T -> CommandPool -> CommandPoolTrimFlags -> IO ()) vkTrimCommandPool)
+    (castFunPtr @_ @(Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr MemoryGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result) vkGetMemoryWin32HandleKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> HANDLE -> ("pMemoryWin32HandleProperties" ::: Ptr MemoryWin32HandlePropertiesKHR) -> IO Result) vkGetMemoryWin32HandlePropertiesKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pGetFdInfo" ::: Ptr MemoryGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result) vkGetMemoryFdKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("fd" ::: CInt) -> ("pMemoryFdProperties" ::: Ptr MemoryFdPropertiesKHR) -> IO Result) vkGetMemoryFdPropertiesKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr SemaphoreGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result) vkGetSemaphoreWin32HandleKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pImportSemaphoreWin32HandleInfo" ::: Ptr ImportSemaphoreWin32HandleInfoKHR) -> IO Result) vkImportSemaphoreWin32HandleKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pGetFdInfo" ::: Ptr SemaphoreGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result) vkGetSemaphoreFdKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pImportSemaphoreFdInfo" ::: Ptr ImportSemaphoreFdInfoKHR) -> IO Result) vkImportSemaphoreFdKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pGetWin32HandleInfo" ::: Ptr FenceGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO Result) vkGetFenceWin32HandleKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pImportFenceWin32HandleInfo" ::: Ptr ImportFenceWin32HandleInfoKHR) -> IO Result) vkImportFenceWin32HandleKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pGetFdInfo" ::: Ptr FenceGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO Result) vkGetFenceFdKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pImportFenceFdInfo" ::: Ptr ImportFenceFdInfoKHR) -> IO Result) vkImportFenceFdKHR)
+    (castFunPtr @_ @(Ptr Device_T -> DisplayKHR -> ("pDisplayPowerInfo" ::: Ptr DisplayPowerInfoEXT) -> IO Result) vkDisplayPowerControlEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("pDeviceEventInfo" ::: Ptr DeviceEventInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result) vkRegisterDeviceEventEXT)
+    (castFunPtr @_ @(Ptr Device_T -> DisplayKHR -> ("pDisplayEventInfo" ::: Ptr DisplayEventInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pFence" ::: Ptr Fence) -> IO Result) vkRegisterDisplayEventEXT)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> SurfaceCounterFlagBitsEXT -> ("pCounterValue" ::: Ptr Word64) -> IO Result) vkGetSwapchainCounterEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("heapIndex" ::: Word32) -> ("localDeviceIndex" ::: Word32) -> ("remoteDeviceIndex" ::: Word32) -> ("pPeerMemoryFeatures" ::: Ptr PeerMemoryFeatureFlags) -> IO ()) vkGetDeviceGroupPeerMemoryFeatures)
+    (castFunPtr @_ @(Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr (BindBufferMemoryInfo _)) -> IO Result) vkBindBufferMemory2)
+    (castFunPtr @_ @(Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr (BindImageMemoryInfo _)) -> IO Result) vkBindImageMemory2)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("deviceMask" ::: Word32) -> IO ()) vkCmdSetDeviceMask)
+    (castFunPtr @_ @(Ptr Device_T -> ("pDeviceGroupPresentCapabilities" ::: Ptr DeviceGroupPresentCapabilitiesKHR) -> IO Result) vkGetDeviceGroupPresentCapabilitiesKHR)
+    (castFunPtr @_ @(Ptr Device_T -> SurfaceKHR -> ("pModes" ::: Ptr DeviceGroupPresentModeFlagsKHR) -> IO Result) vkGetDeviceGroupSurfacePresentModesKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pAcquireInfo" ::: Ptr AcquireNextImageInfoKHR) -> ("pImageIndex" ::: Ptr Word32) -> IO Result) vkAcquireNextImage2KHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("baseGroupX" ::: Word32) -> ("baseGroupY" ::: Word32) -> ("baseGroupZ" ::: Word32) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()) vkCmdDispatchBase)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr DescriptorUpdateTemplateCreateInfo) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDescriptorUpdateTemplate" ::: Ptr DescriptorUpdateTemplate) -> IO Result) vkCreateDescriptorUpdateTemplate)
+    (castFunPtr @_ @(Ptr Device_T -> DescriptorUpdateTemplate -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDescriptorUpdateTemplate)
+    (castFunPtr @_ @(Ptr Device_T -> DescriptorSet -> DescriptorUpdateTemplate -> ("pData" ::: Ptr ()) -> IO ()) vkUpdateDescriptorSetWithTemplate)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> DescriptorUpdateTemplate -> PipelineLayout -> ("set" ::: Word32) -> ("pData" ::: Ptr ()) -> IO ()) vkCmdPushDescriptorSetWithTemplateKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("swapchainCount" ::: Word32) -> ("pSwapchains" ::: Ptr SwapchainKHR) -> ("pMetadata" ::: Ptr HdrMetadataEXT) -> IO ()) vkSetHdrMetadataEXT)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> IO Result) vkGetSwapchainStatusKHR)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("pDisplayTimingProperties" ::: Ptr RefreshCycleDurationGOOGLE) -> IO Result) vkGetRefreshCycleDurationGOOGLE)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("pPresentationTimingCount" ::: Ptr Word32) -> ("pPresentationTimings" ::: Ptr PastPresentationTimingGOOGLE) -> IO Result) vkGetPastPresentationTimingGOOGLE)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewportWScalings" ::: Ptr ViewportWScalingNV) -> IO ()) vkCmdSetViewportWScalingNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstDiscardRectangle" ::: Word32) -> ("discardRectangleCount" ::: Word32) -> ("pDiscardRectangles" ::: Ptr Rect2D) -> IO ()) vkCmdSetDiscardRectangleEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pSampleLocationsInfo" ::: Ptr SampleLocationsInfoEXT) -> IO ()) vkCmdSetSampleLocationsEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr BufferMemoryRequirementsInfo2) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 _)) -> IO ()) vkGetBufferMemoryRequirements2)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr (ImageMemoryRequirementsInfo2 _)) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 _)) -> IO ()) vkGetImageMemoryRequirements2)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr ImageSparseMemoryRequirementsInfo2) -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements2) -> IO ()) vkGetImageSparseMemoryRequirements2)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (SamplerYcbcrConversionCreateInfo _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pYcbcrConversion" ::: Ptr SamplerYcbcrConversion) -> IO Result) vkCreateSamplerYcbcrConversion)
+    (castFunPtr @_ @(Ptr Device_T -> SamplerYcbcrConversion -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroySamplerYcbcrConversion)
+    (castFunPtr @_ @(Ptr Device_T -> ("pQueueInfo" ::: Ptr DeviceQueueInfo2) -> ("pQueue" ::: Ptr (Ptr Queue_T)) -> IO ()) vkGetDeviceQueue2)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr ValidationCacheCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pValidationCache" ::: Ptr ValidationCacheEXT) -> IO Result) vkCreateValidationCacheEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ValidationCacheEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyValidationCacheEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ValidationCacheEXT -> ("pDataSize" ::: Ptr CSize) -> ("pData" ::: Ptr ()) -> IO Result) vkGetValidationCacheDataEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("dstCache" ::: ValidationCacheEXT) -> ("srcCacheCount" ::: Word32) -> ("pSrcCaches" ::: Ptr ValidationCacheEXT) -> IO Result) vkMergeValidationCachesEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (DescriptorSetLayoutCreateInfo _)) -> ("pSupport" ::: Ptr (DescriptorSetLayoutSupport _)) -> IO ()) vkGetDescriptorSetLayoutSupport)
+    (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ShaderStageFlagBits -> ShaderInfoTypeAMD -> ("pInfoSize" ::: Ptr CSize) -> ("pInfo" ::: Ptr ()) -> IO Result) vkGetShaderInfoAMD)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> ("localDimmingEnable" ::: Bool32) -> IO ()) vkSetLocalDimmingAMD)
+    (castFunPtr @_ @(Ptr Device_T -> ("timestampCount" ::: Word32) -> ("pTimestampInfos" ::: Ptr CalibratedTimestampInfoEXT) -> ("pTimestamps" ::: Ptr Word64) -> ("pMaxDeviation" ::: Ptr Word64) -> IO Result) vkGetCalibratedTimestampsEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("pNameInfo" ::: Ptr DebugUtilsObjectNameInfoEXT) -> IO Result) vkSetDebugUtilsObjectNameEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("pTagInfo" ::: Ptr DebugUtilsObjectTagInfoEXT) -> IO Result) vkSetDebugUtilsObjectTagEXT)
+    (castFunPtr @_ @(Ptr Queue_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ()) vkQueueBeginDebugUtilsLabelEXT)
+    (castFunPtr @_ @(Ptr Queue_T -> IO ()) vkQueueEndDebugUtilsLabelEXT)
+    (castFunPtr @_ @(Ptr Queue_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ()) vkQueueInsertDebugUtilsLabelEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ()) vkCmdBeginDebugUtilsLabelEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> IO ()) vkCmdEndDebugUtilsLabelEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pLabelInfo" ::: Ptr DebugUtilsLabelEXT) -> IO ()) vkCmdInsertDebugUtilsLabelEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> ("pHostPointer" ::: Ptr ()) -> ("pMemoryHostPointerProperties" ::: Ptr MemoryHostPointerPropertiesEXT) -> IO Result) vkGetMemoryHostPointerPropertiesEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> PipelineStageFlagBits -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("marker" ::: Word32) -> IO ()) vkCmdWriteBufferMarkerAMD)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (RenderPassCreateInfo2 _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pRenderPass" ::: Ptr RenderPass) -> IO Result) vkCreateRenderPass2)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pRenderPassBegin" ::: Ptr (RenderPassBeginInfo _)) -> ("pSubpassBeginInfo" ::: Ptr SubpassBeginInfo) -> IO ()) vkCmdBeginRenderPass2)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pSubpassBeginInfo" ::: Ptr SubpassBeginInfo) -> ("pSubpassEndInfo" ::: Ptr SubpassEndInfo) -> IO ()) vkCmdNextSubpass2)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pSubpassEndInfo" ::: Ptr SubpassEndInfo) -> IO ()) vkCmdEndRenderPass2)
+    (castFunPtr @_ @(Ptr Device_T -> Semaphore -> ("pValue" ::: Ptr Word64) -> IO Result) vkGetSemaphoreCounterValue)
+    (castFunPtr @_ @(Ptr Device_T -> ("pWaitInfo" ::: Ptr SemaphoreWaitInfo) -> ("timeout" ::: Word64) -> IO Result) vkWaitSemaphores)
+    (castFunPtr @_ @(Ptr Device_T -> ("pSignalInfo" ::: Ptr SemaphoreSignalInfo) -> IO Result) vkSignalSemaphore)
+    (castFunPtr @_ @(Ptr Device_T -> Ptr AHardwareBuffer -> ("pProperties" ::: Ptr (AndroidHardwareBufferPropertiesANDROID _)) -> IO Result) vkGetAndroidHardwareBufferPropertiesANDROID)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr MemoryGetAndroidHardwareBufferInfoANDROID) -> ("pBuffer" ::: Ptr (Ptr AHardwareBuffer)) -> IO Result) vkGetMemoryAndroidHardwareBufferANDROID)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndirectCount)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndexedIndirectCount)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pCheckpointMarker" ::: Ptr ()) -> IO ()) vkCmdSetCheckpointNV)
+    (castFunPtr @_ @(Ptr Queue_T -> ("pCheckpointDataCount" ::: Ptr Word32) -> ("pCheckpointData" ::: Ptr CheckpointDataNV) -> IO ()) vkGetQueueCheckpointDataNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> ("pSizes" ::: Ptr DeviceSize) -> IO ()) vkCmdBindTransformFeedbackBuffersEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstCounterBuffer" ::: Word32) -> ("counterBufferCount" ::: Word32) -> ("pCounterBuffers" ::: Ptr Buffer) -> ("pCounterBufferOffsets" ::: Ptr DeviceSize) -> IO ()) vkCmdBeginTransformFeedbackEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstCounterBuffer" ::: Word32) -> ("counterBufferCount" ::: Word32) -> ("pCounterBuffers" ::: Ptr Buffer) -> ("pCounterBufferOffsets" ::: Ptr DeviceSize) -> IO ()) vkCmdEndTransformFeedbackEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> ("index" ::: Word32) -> IO ()) vkCmdBeginQueryIndexedEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> QueryPool -> ("query" ::: Word32) -> ("index" ::: Word32) -> IO ()) vkCmdEndQueryIndexedEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("counterBuffer" ::: Buffer) -> ("counterBufferOffset" ::: DeviceSize) -> ("counterOffset" ::: Word32) -> ("vertexStride" ::: Word32) -> IO ()) vkCmdDrawIndirectByteCountEXT)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstExclusiveScissor" ::: Word32) -> ("exclusiveScissorCount" ::: Word32) -> ("pExclusiveScissors" ::: Ptr Rect2D) -> IO ()) vkCmdSetExclusiveScissorNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ()) vkCmdBindShadingRateImageNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pShadingRatePalettes" ::: Ptr ShadingRatePaletteNV) -> IO ()) vkCmdSetViewportShadingRatePaletteNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> CoarseSampleOrderTypeNV -> ("customSampleOrderCount" ::: Word32) -> ("pCustomSampleOrders" ::: Ptr CoarseSampleOrderCustomNV) -> IO ()) vkCmdSetCoarseSampleOrderNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("taskCount" ::: Word32) -> ("firstTask" ::: Word32) -> IO ()) vkCmdDrawMeshTasksNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawMeshTasksIndirectNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawMeshTasksIndirectCountNV)
+    (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ("shader" ::: Word32) -> IO Result) vkCompileDeferredNV)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoNV) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureNV) -> IO Result) vkCreateAccelerationStructureNV)
+    (castFunPtr @_ @(Ptr Device_T -> AccelerationStructureKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyAccelerationStructureKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureMemoryRequirementsInfoKHR) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2 _)) -> IO ()) vkGetAccelerationStructureMemoryRequirementsKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureMemoryRequirementsInfoNV) -> ("pMemoryRequirements" ::: Ptr (MemoryRequirements2KHR _)) -> IO ()) vkGetAccelerationStructureMemoryRequirementsNV)
+    (castFunPtr @_ @(Ptr Device_T -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr BindAccelerationStructureMemoryInfoKHR) -> IO Result) vkBindAccelerationStructureMemoryKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> CopyAccelerationStructureModeKHR -> IO ()) vkCmdCopyAccelerationStructureNV)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureInfoKHR _)) -> IO ()) vkCmdCopyAccelerationStructureKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureInfoKHR _)) -> IO Result) vkCopyAccelerationStructureKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureToMemoryInfoKHR _)) -> IO ()) vkCmdCopyAccelerationStructureToMemoryKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr (CopyAccelerationStructureToMemoryInfoKHR _)) -> IO Result) vkCopyAccelerationStructureToMemoryKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (CopyMemoryToAccelerationStructureInfoKHR _)) -> IO ()) vkCmdCopyMemoryToAccelerationStructureKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr (CopyMemoryToAccelerationStructureInfoKHR _)) -> IO Result) vkCopyMemoryToAccelerationStructureKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("accelerationStructureCount" ::: Word32) -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR) -> QueryType -> QueryPool -> ("firstQuery" ::: Word32) -> IO ()) vkCmdWriteAccelerationStructuresPropertiesKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pInfo" ::: Ptr AccelerationStructureInfoNV) -> ("instanceData" ::: Buffer) -> ("instanceOffset" ::: DeviceSize) -> ("update" ::: Bool32) -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> ("scratch" ::: Buffer) -> ("scratchOffset" ::: DeviceSize) -> IO ()) vkCmdBuildAccelerationStructureNV)
+    (castFunPtr @_ @(Ptr Device_T -> ("accelerationStructureCount" ::: Word32) -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR) -> QueryType -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> ("stride" ::: CSize) -> IO Result) vkWriteAccelerationStructuresPropertiesKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pRaygenShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pMissShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pHitShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pCallableShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> IO ()) vkCmdTraceRaysKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("raygenShaderBindingTableBuffer" ::: Buffer) -> ("raygenShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingTableBuffer" ::: Buffer) -> ("missShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingStride" ::: DeviceSize) -> ("hitShaderBindingTableBuffer" ::: Buffer) -> ("hitShaderBindingOffset" ::: DeviceSize) -> ("hitShaderBindingStride" ::: DeviceSize) -> ("callableShaderBindingTableBuffer" ::: Buffer) -> ("callableShaderBindingOffset" ::: DeviceSize) -> ("callableShaderBindingStride" ::: DeviceSize) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> IO ()) vkCmdTraceRaysNV)
+    (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result) vkGetRayTracingShaderGroupHandlesKHR)
+    (castFunPtr @_ @(Ptr Device_T -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result) vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)
+    (castFunPtr @_ @(Ptr Device_T -> AccelerationStructureKHR -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> IO Result) vkGetAccelerationStructureHandleNV)
+    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (RayTracingPipelineCreateInfoNV _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result) vkCreateRayTracingPipelinesNV)
+    (castFunPtr @_ @(Ptr Device_T -> PipelineCache -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr (RayTracingPipelineCreateInfoKHR _)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPipelines" ::: Ptr Pipeline) -> IO Result) vkCreateRayTracingPipelinesKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pRaygenShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pMissShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pHitShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> ("pCallableShaderBindingTable" ::: Ptr StridedBufferRegionKHR) -> Buffer -> ("offset" ::: DeviceSize) -> IO ()) vkCmdTraceRaysIndirectKHR)
+    (castFunPtr @_ @(Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result) vkGetDeviceAccelerationStructureCompatibilityKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr ImageViewHandleInfoNVX) -> IO Word32) vkGetImageViewHandleNVX)
+    (castFunPtr @_ @(Ptr Device_T -> ImageView -> ("pProperties" ::: Ptr ImageViewAddressPropertiesNVX) -> IO Result) vkGetImageViewAddressNVX)
+    (castFunPtr @_ @(Ptr Device_T -> ("pSurfaceInfo" ::: Ptr (PhysicalDeviceSurfaceInfo2KHR _)) -> ("pModes" ::: Ptr DeviceGroupPresentModeFlagsKHR) -> IO Result) vkGetDeviceGroupSurfacePresentModes2EXT)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> IO Result) vkAcquireFullScreenExclusiveModeEXT)
+    (castFunPtr @_ @(Ptr Device_T -> SwapchainKHR -> IO Result) vkReleaseFullScreenExclusiveModeEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr AcquireProfilingLockInfoKHR) -> IO Result) vkAcquireProfilingLockKHR)
+    (castFunPtr @_ @(Ptr Device_T -> IO ()) vkReleaseProfilingLockKHR)
+    (castFunPtr @_ @(Ptr Device_T -> Image -> ("pProperties" ::: Ptr ImageDrmFormatModifierPropertiesEXT) -> IO Result) vkGetImageDrmFormatModifierPropertiesEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr BufferDeviceAddressInfo) -> IO Word64) vkGetBufferOpaqueCaptureAddress)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr BufferDeviceAddressInfo) -> IO DeviceAddress) vkGetBufferDeviceAddress)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInitializeInfo" ::: Ptr InitializePerformanceApiInfoINTEL) -> IO Result) vkInitializePerformanceApiINTEL)
+    (castFunPtr @_ @(Ptr Device_T -> IO ()) vkUninitializePerformanceApiINTEL)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr PerformanceMarkerInfoINTEL) -> IO Result) vkCmdSetPerformanceMarkerINTEL)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pMarkerInfo" ::: Ptr PerformanceStreamMarkerInfoINTEL) -> IO Result) vkCmdSetPerformanceStreamMarkerINTEL)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pOverrideInfo" ::: Ptr PerformanceOverrideInfoINTEL) -> IO Result) vkCmdSetPerformanceOverrideINTEL)
+    (castFunPtr @_ @(Ptr Device_T -> ("pAcquireInfo" ::: Ptr PerformanceConfigurationAcquireInfoINTEL) -> ("pConfiguration" ::: Ptr PerformanceConfigurationINTEL) -> IO Result) vkAcquirePerformanceConfigurationINTEL)
+    (castFunPtr @_ @(Ptr Device_T -> PerformanceConfigurationINTEL -> IO Result) vkReleasePerformanceConfigurationINTEL)
+    (castFunPtr @_ @(Ptr Queue_T -> PerformanceConfigurationINTEL -> IO Result) vkQueueSetPerformanceConfigurationINTEL)
+    (castFunPtr @_ @(Ptr Device_T -> PerformanceParameterTypeINTEL -> ("pValue" ::: Ptr PerformanceValueINTEL) -> IO Result) vkGetPerformanceParameterINTEL)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr DeviceMemoryOpaqueCaptureAddressInfo) -> IO Word64) vkGetDeviceMemoryOpaqueCaptureAddress)
+    (castFunPtr @_ @(Ptr Device_T -> ("pPipelineInfo" ::: Ptr PipelineInfoKHR) -> ("pExecutableCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr PipelineExecutablePropertiesKHR) -> IO Result) vkGetPipelineExecutablePropertiesKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pStatisticCount" ::: Ptr Word32) -> ("pStatistics" ::: Ptr PipelineExecutableStatisticKHR) -> IO Result) vkGetPipelineExecutableStatisticsKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pInternalRepresentationCount" ::: Ptr Word32) -> ("pInternalRepresentations" ::: Ptr PipelineExecutableInternalRepresentationKHR) -> IO Result) vkGetPipelineExecutableInternalRepresentationsKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("lineStippleFactor" ::: Word32) -> ("lineStipplePattern" ::: Word16) -> IO ()) vkCmdSetLineStippleEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result) vkCreateAccelerationStructureKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR _)) -> ("ppOffsetInfos" ::: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) -> IO ()) vkCmdBuildAccelerationStructureKHR)
+    (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pInfo" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR _)) -> ("indirectBuffer" ::: Buffer) -> ("indirectOffset" ::: DeviceSize) -> ("indirectStride" ::: Word32) -> IO ()) vkCmdBuildAccelerationStructureIndirectKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr (AccelerationStructureBuildGeometryInfoKHR _)) -> ("ppOffsetInfos" ::: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) -> IO Result) vkBuildAccelerationStructureKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR) -> IO DeviceAddress) vkGetAccelerationStructureDeviceAddressKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pDeferredOperation" ::: Ptr DeferredOperationKHR) -> IO Result) vkCreateDeferredOperationKHR)
+    (castFunPtr @_ @(Ptr Device_T -> DeferredOperationKHR -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDeferredOperationKHR)
+    (castFunPtr @_ @(Ptr Device_T -> DeferredOperationKHR -> IO Word32) vkGetDeferredOperationMaxConcurrencyKHR)
+    (castFunPtr @_ @(Ptr Device_T -> DeferredOperationKHR -> IO Result) vkGetDeferredOperationResultKHR)
+    (castFunPtr @_ @(Ptr Device_T -> DeferredOperationKHR -> IO Result) vkDeferredOperationJoinKHR)
+    (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr PrivateDataSlotCreateInfoEXT) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pPrivateDataSlot" ::: Ptr PrivateDataSlotEXT) -> IO Result) vkCreatePrivateDataSlotEXT)
+    (castFunPtr @_ @(Ptr Device_T -> PrivateDataSlotEXT -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyPrivateDataSlotEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlotEXT -> ("data" ::: Word64) -> IO Result) vkSetPrivateDataEXT)
+    (castFunPtr @_ @(Ptr Device_T -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlotEXT -> ("pData" ::: Ptr Word64) -> IO ()) vkGetPrivateDataEXT)
+
diff --git a/src/Vulkan/Dynamic.hs-boot b/src/Vulkan/Dynamic.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Dynamic.hs-boot
@@ -0,0 +1,11 @@
+{-# language CPP #-}
+module Vulkan.Dynamic  ( InstanceCmds
+                       , DeviceCmds
+                       ) where
+
+
+
+data InstanceCmds
+
+data DeviceCmds
+
diff --git a/src/Vulkan/Exception.hs b/src/Vulkan/Exception.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Exception.hs
@@ -0,0 +1,54 @@
+{-# language CPP #-}
+module Vulkan.Exception  (VulkanException(..)) where
+
+import GHC.Exception.Type (Exception(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+-- | This exception is thrown from calls to marshalled Vulkan commands
+-- which return a negative VkResult.
+newtype VulkanException = VulkanException { vulkanExceptionResult :: Result }
+  deriving (Eq, Ord, Read, Show)
+
+instance Exception VulkanException where
+  displayException (VulkanException r) = show r ++ ": " ++ resultString r
+
+-- | A human understandable message for each VkResult
+resultString :: Result -> String
+resultString = \case
+  SUCCESS -> "Command successfully completed"
+  NOT_READY -> "A fence or query has not yet completed"
+  TIMEOUT -> "A wait operation has not completed in the specified time"
+  EVENT_SET -> "An event is signaled"
+  EVENT_RESET -> "An event is unsignaled"
+  INCOMPLETE -> "A return array was too small for the result"
+  ERROR_OUT_OF_HOST_MEMORY -> "A host memory allocation has failed"
+  ERROR_OUT_OF_DEVICE_MEMORY -> "A device memory allocation has failed"
+  ERROR_INITIALIZATION_FAILED -> "Initialization of an object could not be completed for implementation-specific reasons"
+  ERROR_DEVICE_LOST -> "The logical or physical device has been lost"
+  ERROR_MEMORY_MAP_FAILED -> "Mapping of a memory object has failed"
+  ERROR_LAYER_NOT_PRESENT -> "A requested layer is not present or could not be loaded"
+  ERROR_EXTENSION_NOT_PRESENT -> "A requested extension is not supported"
+  ERROR_FEATURE_NOT_PRESENT -> "A requested feature is not supported"
+  ERROR_INCOMPATIBLE_DRIVER -> "The requested version of Vulkan is not supported by the driver or is otherwise incompatible for implementation-specific reasons"
+  ERROR_TOO_MANY_OBJECTS -> "Too many objects of the type have already been created"
+  ERROR_FORMAT_NOT_SUPPORTED -> "A requested format is not supported on this device"
+  ERROR_FRAGMENTED_POOL -> "A pool allocation has failed due to fragmentation of the pool's memory"
+  ERROR_UNKNOWN -> "An unknown error has occurred; either the application has provided invalid input, or an implementation failure has occurred"
+  PIPELINE_COMPILE_REQUIRED_EXT -> "A requested pipeline creation would have required compilation, but the application requested compilation to not be performed"
+  OPERATION_NOT_DEFERRED_KHR -> "A deferred operation was requested and no operations were deferred"
+  OPERATION_DEFERRED_KHR -> "A deferred operation was requested and at least some of the work was deferred"
+  THREAD_DONE_KHR -> "A deferred operation is not complete but there is no work remaining to assign to additional threads"
+  THREAD_IDLE_KHR -> "A deferred operation is not complete but there is currently no work for this thread to do at the time of this call"
+  ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT -> "An operation on a swapchain created with VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT failed as it did not have exlusive full-screen access"
+  ERROR_INVALID_SHADER_NV -> "One or more shaders failed to compile or link"
+  ERROR_INCOMPATIBLE_DISPLAY_KHR -> "The display used by a swapchain does not use the same presentable image layout, or is incompatible in a way that prevents sharing an image"
+  ERROR_OUT_OF_DATE_KHR -> "A surface has changed in such a way that it is no longer compatible with the swapchain, and further presentation requests using the swapchain will fail"
+  SUBOPTIMAL_KHR -> "A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully"
+  ERROR_NATIVE_WINDOW_IN_USE_KHR -> "The requested window is already in use by Vulkan or another API in a manner which prevents it from being used again"
+  ERROR_SURFACE_LOST_KHR -> "A surface is no longer available"
+  ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS -> "A buffer creation or memory allocation failed because the requested address is not available"
+  ERROR_FRAGMENTATION -> "A descriptor pool creation has failed due to fragmentation"
+  ERROR_INVALID_EXTERNAL_HANDLE -> "An external handle is not a valid handle of the specified type"
+  ERROR_OUT_OF_POOL_MEMORY -> "A pool memory allocation has failed"
+  r -> show r
+
diff --git a/src/Vulkan/Extensions.hs b/src/Vulkan/Extensions.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions.hs
@@ -0,0 +1,417 @@
+{-# language CPP #-}
+module Vulkan.Extensions  ( module Vulkan.Extensions.Handles
+                          , module Vulkan.Extensions.VK_AMD_buffer_marker
+                          , module Vulkan.Extensions.VK_AMD_device_coherent_memory
+                          , module Vulkan.Extensions.VK_AMD_display_native_hdr
+                          , module Vulkan.Extensions.VK_AMD_draw_indirect_count
+                          , module Vulkan.Extensions.VK_AMD_gcn_shader
+                          , module Vulkan.Extensions.VK_AMD_gpu_shader_half_float
+                          , module Vulkan.Extensions.VK_AMD_gpu_shader_int16
+                          , module Vulkan.Extensions.VK_AMD_memory_overallocation_behavior
+                          , module Vulkan.Extensions.VK_AMD_mixed_attachment_samples
+                          , module Vulkan.Extensions.VK_AMD_negative_viewport_height
+                          , module Vulkan.Extensions.VK_AMD_pipeline_compiler_control
+                          , module Vulkan.Extensions.VK_AMD_rasterization_order
+                          , module Vulkan.Extensions.VK_AMD_shader_ballot
+                          , module Vulkan.Extensions.VK_AMD_shader_core_properties
+                          , module Vulkan.Extensions.VK_AMD_shader_core_properties2
+                          , module Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter
+                          , module Vulkan.Extensions.VK_AMD_shader_fragment_mask
+                          , module Vulkan.Extensions.VK_AMD_shader_image_load_store_lod
+                          , module Vulkan.Extensions.VK_AMD_shader_info
+                          , module Vulkan.Extensions.VK_AMD_shader_trinary_minmax
+                          , module Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
+                          , module Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
+                          , module Vulkan.Extensions.VK_EXT_acquire_xlib_display
+                          , module Vulkan.Extensions.VK_EXT_astc_decode_mode
+                          , module Vulkan.Extensions.VK_EXT_blend_operation_advanced
+                          , module Vulkan.Extensions.VK_EXT_buffer_device_address
+                          , module Vulkan.Extensions.VK_EXT_calibrated_timestamps
+                          , module Vulkan.Extensions.VK_EXT_conditional_rendering
+                          , module Vulkan.Extensions.VK_EXT_conservative_rasterization
+                          , module Vulkan.Extensions.VK_EXT_custom_border_color
+                          , module Vulkan.Extensions.VK_EXT_debug_marker
+                          , module Vulkan.Extensions.VK_EXT_debug_report
+                          , module Vulkan.Extensions.VK_EXT_debug_utils
+                          , module Vulkan.Extensions.VK_EXT_depth_clip_enable
+                          , module Vulkan.Extensions.VK_EXT_depth_range_unrestricted
+                          , module Vulkan.Extensions.VK_EXT_descriptor_indexing
+                          , module Vulkan.Extensions.VK_EXT_direct_mode_display
+                          , module Vulkan.Extensions.VK_EXT_discard_rectangles
+                          , module Vulkan.Extensions.VK_EXT_display_control
+                          , module Vulkan.Extensions.VK_EXT_display_surface_counter
+                          , module Vulkan.Extensions.VK_EXT_external_memory_dma_buf
+                          , module Vulkan.Extensions.VK_EXT_external_memory_host
+                          , module Vulkan.Extensions.VK_EXT_filter_cubic
+                          , module Vulkan.Extensions.VK_EXT_fragment_density_map
+                          , module Vulkan.Extensions.VK_EXT_fragment_shader_interlock
+                          , module Vulkan.Extensions.VK_EXT_full_screen_exclusive
+                          , module Vulkan.Extensions.VK_EXT_global_priority
+                          , module Vulkan.Extensions.VK_EXT_hdr_metadata
+                          , module Vulkan.Extensions.VK_EXT_headless_surface
+                          , module Vulkan.Extensions.VK_EXT_host_query_reset
+                          , module Vulkan.Extensions.VK_EXT_image_drm_format_modifier
+                          , module Vulkan.Extensions.VK_EXT_index_type_uint8
+                          , module Vulkan.Extensions.VK_EXT_inline_uniform_block
+                          , module Vulkan.Extensions.VK_EXT_line_rasterization
+                          , module Vulkan.Extensions.VK_EXT_memory_budget
+                          , module Vulkan.Extensions.VK_EXT_memory_priority
+                          , module Vulkan.Extensions.VK_EXT_metal_surface
+                          , module Vulkan.Extensions.VK_EXT_pci_bus_info
+                          , module Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control
+                          , module Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
+                          , module Vulkan.Extensions.VK_EXT_post_depth_coverage
+                          , module Vulkan.Extensions.VK_EXT_private_data
+                          , module Vulkan.Extensions.VK_EXT_queue_family_foreign
+                          , module Vulkan.Extensions.VK_EXT_robustness2
+                          , module Vulkan.Extensions.VK_EXT_sample_locations
+                          , module Vulkan.Extensions.VK_EXT_sampler_filter_minmax
+                          , module Vulkan.Extensions.VK_EXT_scalar_block_layout
+                          , module Vulkan.Extensions.VK_EXT_separate_stencil_usage
+                          , module Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation
+                          , module Vulkan.Extensions.VK_EXT_shader_stencil_export
+                          , module Vulkan.Extensions.VK_EXT_shader_subgroup_ballot
+                          , module Vulkan.Extensions.VK_EXT_shader_subgroup_vote
+                          , module Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
+                          , module Vulkan.Extensions.VK_EXT_subgroup_size_control
+                          , module Vulkan.Extensions.VK_EXT_swapchain_colorspace
+                          , module Vulkan.Extensions.VK_EXT_texel_buffer_alignment
+                          , module Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr
+                          , module Vulkan.Extensions.VK_EXT_tooling_info
+                          , module Vulkan.Extensions.VK_EXT_transform_feedback
+                          , module Vulkan.Extensions.VK_EXT_validation_cache
+                          , module Vulkan.Extensions.VK_EXT_validation_features
+                          , module Vulkan.Extensions.VK_EXT_validation_flags
+                          , module Vulkan.Extensions.VK_EXT_vertex_attribute_divisor
+                          , module Vulkan.Extensions.VK_EXT_ycbcr_image_arrays
+                          , module Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface
+                          , module Vulkan.Extensions.VK_GGP_frame_token
+                          , module Vulkan.Extensions.VK_GGP_stream_descriptor_surface
+                          , module Vulkan.Extensions.VK_GOOGLE_decorate_string
+                          , module Vulkan.Extensions.VK_GOOGLE_display_timing
+                          , module Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1
+                          , module Vulkan.Extensions.VK_GOOGLE_user_type
+                          , module Vulkan.Extensions.VK_IMG_filter_cubic
+                          , module Vulkan.Extensions.VK_IMG_format_pvrtc
+                          , module Vulkan.Extensions.VK_INTEL_performance_query
+                          , module Vulkan.Extensions.VK_INTEL_shader_integer_functions2
+                          , module Vulkan.Extensions.VK_KHR_16bit_storage
+                          , module Vulkan.Extensions.VK_KHR_8bit_storage
+                          , module Vulkan.Extensions.VK_KHR_android_surface
+                          , module Vulkan.Extensions.VK_KHR_bind_memory2
+                          , module Vulkan.Extensions.VK_KHR_buffer_device_address
+                          , module Vulkan.Extensions.VK_KHR_create_renderpass2
+                          , module Vulkan.Extensions.VK_KHR_dedicated_allocation
+                          , module Vulkan.Extensions.VK_KHR_deferred_host_operations
+                          , module Vulkan.Extensions.VK_KHR_depth_stencil_resolve
+                          , module Vulkan.Extensions.VK_KHR_descriptor_update_template
+                          , module Vulkan.Extensions.VK_KHR_device_group
+                          , module Vulkan.Extensions.VK_KHR_device_group_creation
+                          , module Vulkan.Extensions.VK_KHR_display
+                          , module Vulkan.Extensions.VK_KHR_display_swapchain
+                          , module Vulkan.Extensions.VK_KHR_draw_indirect_count
+                          , module Vulkan.Extensions.VK_KHR_driver_properties
+                          , module Vulkan.Extensions.VK_KHR_external_fence
+                          , module Vulkan.Extensions.VK_KHR_external_fence_capabilities
+                          , module Vulkan.Extensions.VK_KHR_external_fence_fd
+                          , module Vulkan.Extensions.VK_KHR_external_fence_win32
+                          , module Vulkan.Extensions.VK_KHR_external_memory
+                          , module Vulkan.Extensions.VK_KHR_external_memory_capabilities
+                          , module Vulkan.Extensions.VK_KHR_external_memory_fd
+                          , module Vulkan.Extensions.VK_KHR_external_memory_win32
+                          , module Vulkan.Extensions.VK_KHR_external_semaphore
+                          , module Vulkan.Extensions.VK_KHR_external_semaphore_capabilities
+                          , module Vulkan.Extensions.VK_KHR_external_semaphore_fd
+                          , module Vulkan.Extensions.VK_KHR_external_semaphore_win32
+                          , module Vulkan.Extensions.VK_KHR_get_display_properties2
+                          , module Vulkan.Extensions.VK_KHR_get_memory_requirements2
+                          , module Vulkan.Extensions.VK_KHR_get_physical_device_properties2
+                          , module Vulkan.Extensions.VK_KHR_get_surface_capabilities2
+                          , module Vulkan.Extensions.VK_KHR_image_format_list
+                          , module Vulkan.Extensions.VK_KHR_imageless_framebuffer
+                          , module Vulkan.Extensions.VK_KHR_incremental_present
+                          , module Vulkan.Extensions.VK_KHR_maintenance1
+                          , module Vulkan.Extensions.VK_KHR_maintenance2
+                          , module Vulkan.Extensions.VK_KHR_maintenance3
+                          , module Vulkan.Extensions.VK_KHR_multiview
+                          , module Vulkan.Extensions.VK_KHR_performance_query
+                          , module Vulkan.Extensions.VK_KHR_pipeline_executable_properties
+                          , module Vulkan.Extensions.VK_KHR_pipeline_library
+                          , module Vulkan.Extensions.VK_KHR_push_descriptor
+                          , module Vulkan.Extensions.VK_KHR_ray_tracing
+                          , module Vulkan.Extensions.VK_KHR_relaxed_block_layout
+                          , module Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge
+                          , module Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion
+                          , module Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts
+                          , module Vulkan.Extensions.VK_KHR_shader_atomic_int64
+                          , module Vulkan.Extensions.VK_KHR_shader_clock
+                          , module Vulkan.Extensions.VK_KHR_shader_draw_parameters
+                          , module Vulkan.Extensions.VK_KHR_shader_float16_int8
+                          , module Vulkan.Extensions.VK_KHR_shader_float_controls
+                          , module Vulkan.Extensions.VK_KHR_shader_non_semantic_info
+                          , module Vulkan.Extensions.VK_KHR_shader_subgroup_extended_types
+                          , module Vulkan.Extensions.VK_KHR_shared_presentable_image
+                          , module Vulkan.Extensions.VK_KHR_spirv_1_4
+                          , module Vulkan.Extensions.VK_KHR_storage_buffer_storage_class
+                          , module Vulkan.Extensions.VK_KHR_surface
+                          , module Vulkan.Extensions.VK_KHR_surface_protected_capabilities
+                          , module Vulkan.Extensions.VK_KHR_swapchain
+                          , module Vulkan.Extensions.VK_KHR_swapchain_mutable_format
+                          , module Vulkan.Extensions.VK_KHR_timeline_semaphore
+                          , module Vulkan.Extensions.VK_KHR_uniform_buffer_standard_layout
+                          , module Vulkan.Extensions.VK_KHR_variable_pointers
+                          , module Vulkan.Extensions.VK_KHR_vulkan_memory_model
+                          , module Vulkan.Extensions.VK_KHR_wayland_surface
+                          , module Vulkan.Extensions.VK_KHR_win32_keyed_mutex
+                          , module Vulkan.Extensions.VK_KHR_win32_surface
+                          , module Vulkan.Extensions.VK_KHR_xcb_surface
+                          , module Vulkan.Extensions.VK_KHR_xlib_surface
+                          , module Vulkan.Extensions.VK_MVK_ios_surface
+                          , module Vulkan.Extensions.VK_MVK_macos_surface
+                          , module Vulkan.Extensions.VK_NN_vi_surface
+                          , module Vulkan.Extensions.VK_NVX_image_view_handle
+                          , module Vulkan.Extensions.VK_NVX_multiview_per_view_attributes
+                          , module Vulkan.Extensions.VK_NV_clip_space_w_scaling
+                          , module Vulkan.Extensions.VK_NV_compute_shader_derivatives
+                          , module Vulkan.Extensions.VK_NV_cooperative_matrix
+                          , module Vulkan.Extensions.VK_NV_corner_sampled_image
+                          , module Vulkan.Extensions.VK_NV_coverage_reduction_mode
+                          , module Vulkan.Extensions.VK_NV_dedicated_allocation
+                          , module Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing
+                          , module Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints
+                          , module Vulkan.Extensions.VK_NV_device_diagnostics_config
+                          , module Vulkan.Extensions.VK_NV_device_generated_commands
+                          , module Vulkan.Extensions.VK_NV_external_memory
+                          , module Vulkan.Extensions.VK_NV_external_memory_capabilities
+                          , module Vulkan.Extensions.VK_NV_external_memory_win32
+                          , module Vulkan.Extensions.VK_NV_fill_rectangle
+                          , module Vulkan.Extensions.VK_NV_fragment_coverage_to_color
+                          , module Vulkan.Extensions.VK_NV_fragment_shader_barycentric
+                          , module Vulkan.Extensions.VK_NV_framebuffer_mixed_samples
+                          , module Vulkan.Extensions.VK_NV_geometry_shader_passthrough
+                          , module Vulkan.Extensions.VK_NV_glsl_shader
+                          , module Vulkan.Extensions.VK_NV_mesh_shader
+                          , module Vulkan.Extensions.VK_NV_ray_tracing
+                          , module Vulkan.Extensions.VK_NV_representative_fragment_test
+                          , module Vulkan.Extensions.VK_NV_sample_mask_override_coverage
+                          , module Vulkan.Extensions.VK_NV_scissor_exclusive
+                          , module Vulkan.Extensions.VK_NV_shader_image_footprint
+                          , module Vulkan.Extensions.VK_NV_shader_sm_builtins
+                          , module Vulkan.Extensions.VK_NV_shader_subgroup_partitioned
+                          , module Vulkan.Extensions.VK_NV_shading_rate_image
+                          , module Vulkan.Extensions.VK_NV_viewport_array2
+                          , module Vulkan.Extensions.VK_NV_viewport_swizzle
+                          , module Vulkan.Extensions.VK_NV_win32_keyed_mutex
+                          , module Vulkan.Extensions.VK_QCOM_render_pass_shader_resolve
+                          , module Vulkan.Extensions.VK_QCOM_render_pass_store_ops
+                          , module Vulkan.Extensions.VK_QCOM_render_pass_transform
+                          , module Vulkan.Extensions.WSITypes
+                          ) where
+import Vulkan.Extensions.Handles
+import Vulkan.Extensions.VK_AMD_buffer_marker
+import Vulkan.Extensions.VK_AMD_device_coherent_memory
+import Vulkan.Extensions.VK_AMD_display_native_hdr
+import Vulkan.Extensions.VK_AMD_draw_indirect_count
+import Vulkan.Extensions.VK_AMD_gcn_shader
+import Vulkan.Extensions.VK_AMD_gpu_shader_half_float
+import Vulkan.Extensions.VK_AMD_gpu_shader_int16
+import Vulkan.Extensions.VK_AMD_memory_overallocation_behavior
+import Vulkan.Extensions.VK_AMD_mixed_attachment_samples
+import Vulkan.Extensions.VK_AMD_negative_viewport_height
+import Vulkan.Extensions.VK_AMD_pipeline_compiler_control
+import Vulkan.Extensions.VK_AMD_rasterization_order
+import Vulkan.Extensions.VK_AMD_shader_ballot
+import Vulkan.Extensions.VK_AMD_shader_core_properties
+import Vulkan.Extensions.VK_AMD_shader_core_properties2
+import Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter
+import Vulkan.Extensions.VK_AMD_shader_fragment_mask
+import Vulkan.Extensions.VK_AMD_shader_image_load_store_lod
+import Vulkan.Extensions.VK_AMD_shader_info
+import Vulkan.Extensions.VK_AMD_shader_trinary_minmax
+import Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
+import Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
+import Vulkan.Extensions.VK_EXT_acquire_xlib_display
+import Vulkan.Extensions.VK_EXT_astc_decode_mode
+import Vulkan.Extensions.VK_EXT_blend_operation_advanced
+import Vulkan.Extensions.VK_EXT_buffer_device_address
+import Vulkan.Extensions.VK_EXT_calibrated_timestamps
+import Vulkan.Extensions.VK_EXT_conditional_rendering
+import Vulkan.Extensions.VK_EXT_conservative_rasterization
+import Vulkan.Extensions.VK_EXT_custom_border_color
+import Vulkan.Extensions.VK_EXT_debug_marker
+import Vulkan.Extensions.VK_EXT_debug_report
+import Vulkan.Extensions.VK_EXT_debug_utils
+import Vulkan.Extensions.VK_EXT_depth_clip_enable
+import Vulkan.Extensions.VK_EXT_depth_range_unrestricted
+import Vulkan.Extensions.VK_EXT_descriptor_indexing
+import Vulkan.Extensions.VK_EXT_direct_mode_display
+import Vulkan.Extensions.VK_EXT_discard_rectangles
+import Vulkan.Extensions.VK_EXT_display_control
+import Vulkan.Extensions.VK_EXT_display_surface_counter
+import Vulkan.Extensions.VK_EXT_external_memory_dma_buf
+import Vulkan.Extensions.VK_EXT_external_memory_host
+import Vulkan.Extensions.VK_EXT_filter_cubic
+import Vulkan.Extensions.VK_EXT_fragment_density_map
+import Vulkan.Extensions.VK_EXT_fragment_shader_interlock
+import Vulkan.Extensions.VK_EXT_full_screen_exclusive
+import Vulkan.Extensions.VK_EXT_global_priority
+import Vulkan.Extensions.VK_EXT_hdr_metadata
+import Vulkan.Extensions.VK_EXT_headless_surface
+import Vulkan.Extensions.VK_EXT_host_query_reset
+import Vulkan.Extensions.VK_EXT_image_drm_format_modifier
+import Vulkan.Extensions.VK_EXT_index_type_uint8
+import Vulkan.Extensions.VK_EXT_inline_uniform_block
+import Vulkan.Extensions.VK_EXT_line_rasterization
+import Vulkan.Extensions.VK_EXT_memory_budget
+import Vulkan.Extensions.VK_EXT_memory_priority
+import Vulkan.Extensions.VK_EXT_metal_surface
+import Vulkan.Extensions.VK_EXT_pci_bus_info
+import Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control
+import Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
+import Vulkan.Extensions.VK_EXT_post_depth_coverage
+import Vulkan.Extensions.VK_EXT_private_data
+import Vulkan.Extensions.VK_EXT_queue_family_foreign
+import Vulkan.Extensions.VK_EXT_robustness2
+import Vulkan.Extensions.VK_EXT_sample_locations
+import Vulkan.Extensions.VK_EXT_sampler_filter_minmax
+import Vulkan.Extensions.VK_EXT_scalar_block_layout
+import Vulkan.Extensions.VK_EXT_separate_stencil_usage
+import Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation
+import Vulkan.Extensions.VK_EXT_shader_stencil_export
+import Vulkan.Extensions.VK_EXT_shader_subgroup_ballot
+import Vulkan.Extensions.VK_EXT_shader_subgroup_vote
+import Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
+import Vulkan.Extensions.VK_EXT_subgroup_size_control
+import Vulkan.Extensions.VK_EXT_swapchain_colorspace
+import Vulkan.Extensions.VK_EXT_texel_buffer_alignment
+import Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr
+import Vulkan.Extensions.VK_EXT_tooling_info
+import Vulkan.Extensions.VK_EXT_transform_feedback
+import Vulkan.Extensions.VK_EXT_validation_cache
+import Vulkan.Extensions.VK_EXT_validation_features
+import Vulkan.Extensions.VK_EXT_validation_flags
+import Vulkan.Extensions.VK_EXT_vertex_attribute_divisor
+import Vulkan.Extensions.VK_EXT_ycbcr_image_arrays
+import Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface
+import Vulkan.Extensions.VK_GGP_frame_token
+import Vulkan.Extensions.VK_GGP_stream_descriptor_surface
+import Vulkan.Extensions.VK_GOOGLE_decorate_string
+import Vulkan.Extensions.VK_GOOGLE_display_timing
+import Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1
+import Vulkan.Extensions.VK_GOOGLE_user_type
+import Vulkan.Extensions.VK_IMG_filter_cubic
+import Vulkan.Extensions.VK_IMG_format_pvrtc
+import Vulkan.Extensions.VK_INTEL_performance_query
+import Vulkan.Extensions.VK_INTEL_shader_integer_functions2
+import Vulkan.Extensions.VK_KHR_16bit_storage
+import Vulkan.Extensions.VK_KHR_8bit_storage
+import Vulkan.Extensions.VK_KHR_android_surface
+import Vulkan.Extensions.VK_KHR_bind_memory2
+import Vulkan.Extensions.VK_KHR_buffer_device_address
+import Vulkan.Extensions.VK_KHR_create_renderpass2
+import Vulkan.Extensions.VK_KHR_dedicated_allocation
+import Vulkan.Extensions.VK_KHR_deferred_host_operations
+import Vulkan.Extensions.VK_KHR_depth_stencil_resolve
+import Vulkan.Extensions.VK_KHR_descriptor_update_template
+import Vulkan.Extensions.VK_KHR_device_group
+import Vulkan.Extensions.VK_KHR_device_group_creation
+import Vulkan.Extensions.VK_KHR_display
+import Vulkan.Extensions.VK_KHR_display_swapchain
+import Vulkan.Extensions.VK_KHR_draw_indirect_count
+import Vulkan.Extensions.VK_KHR_driver_properties
+import Vulkan.Extensions.VK_KHR_external_fence
+import Vulkan.Extensions.VK_KHR_external_fence_capabilities
+import Vulkan.Extensions.VK_KHR_external_fence_fd
+import Vulkan.Extensions.VK_KHR_external_fence_win32
+import Vulkan.Extensions.VK_KHR_external_memory
+import Vulkan.Extensions.VK_KHR_external_memory_capabilities
+import Vulkan.Extensions.VK_KHR_external_memory_fd
+import Vulkan.Extensions.VK_KHR_external_memory_win32
+import Vulkan.Extensions.VK_KHR_external_semaphore
+import Vulkan.Extensions.VK_KHR_external_semaphore_capabilities
+import Vulkan.Extensions.VK_KHR_external_semaphore_fd
+import Vulkan.Extensions.VK_KHR_external_semaphore_win32
+import Vulkan.Extensions.VK_KHR_get_display_properties2
+import Vulkan.Extensions.VK_KHR_get_memory_requirements2
+import Vulkan.Extensions.VK_KHR_get_physical_device_properties2
+import Vulkan.Extensions.VK_KHR_get_surface_capabilities2
+import Vulkan.Extensions.VK_KHR_image_format_list
+import Vulkan.Extensions.VK_KHR_imageless_framebuffer
+import Vulkan.Extensions.VK_KHR_incremental_present
+import Vulkan.Extensions.VK_KHR_maintenance1
+import Vulkan.Extensions.VK_KHR_maintenance2
+import Vulkan.Extensions.VK_KHR_maintenance3
+import Vulkan.Extensions.VK_KHR_multiview
+import Vulkan.Extensions.VK_KHR_performance_query
+import Vulkan.Extensions.VK_KHR_pipeline_executable_properties
+import Vulkan.Extensions.VK_KHR_pipeline_library
+import Vulkan.Extensions.VK_KHR_push_descriptor
+import Vulkan.Extensions.VK_KHR_ray_tracing
+import Vulkan.Extensions.VK_KHR_relaxed_block_layout
+import Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge
+import Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion
+import Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts
+import Vulkan.Extensions.VK_KHR_shader_atomic_int64
+import Vulkan.Extensions.VK_KHR_shader_clock
+import Vulkan.Extensions.VK_KHR_shader_draw_parameters
+import Vulkan.Extensions.VK_KHR_shader_float16_int8
+import Vulkan.Extensions.VK_KHR_shader_float_controls
+import Vulkan.Extensions.VK_KHR_shader_non_semantic_info
+import Vulkan.Extensions.VK_KHR_shader_subgroup_extended_types
+import Vulkan.Extensions.VK_KHR_shared_presentable_image
+import Vulkan.Extensions.VK_KHR_spirv_1_4
+import Vulkan.Extensions.VK_KHR_storage_buffer_storage_class
+import Vulkan.Extensions.VK_KHR_surface
+import Vulkan.Extensions.VK_KHR_surface_protected_capabilities
+import Vulkan.Extensions.VK_KHR_swapchain
+import Vulkan.Extensions.VK_KHR_swapchain_mutable_format
+import Vulkan.Extensions.VK_KHR_timeline_semaphore
+import Vulkan.Extensions.VK_KHR_uniform_buffer_standard_layout
+import Vulkan.Extensions.VK_KHR_variable_pointers
+import Vulkan.Extensions.VK_KHR_vulkan_memory_model
+import Vulkan.Extensions.VK_KHR_wayland_surface
+import Vulkan.Extensions.VK_KHR_win32_keyed_mutex
+import Vulkan.Extensions.VK_KHR_win32_surface
+import Vulkan.Extensions.VK_KHR_xcb_surface
+import Vulkan.Extensions.VK_KHR_xlib_surface
+import Vulkan.Extensions.VK_MVK_ios_surface
+import Vulkan.Extensions.VK_MVK_macos_surface
+import Vulkan.Extensions.VK_NN_vi_surface
+import Vulkan.Extensions.VK_NVX_image_view_handle
+import Vulkan.Extensions.VK_NVX_multiview_per_view_attributes
+import Vulkan.Extensions.VK_NV_clip_space_w_scaling
+import Vulkan.Extensions.VK_NV_compute_shader_derivatives
+import Vulkan.Extensions.VK_NV_cooperative_matrix
+import Vulkan.Extensions.VK_NV_corner_sampled_image
+import Vulkan.Extensions.VK_NV_coverage_reduction_mode
+import Vulkan.Extensions.VK_NV_dedicated_allocation
+import Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing
+import Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints
+import Vulkan.Extensions.VK_NV_device_diagnostics_config
+import Vulkan.Extensions.VK_NV_device_generated_commands
+import Vulkan.Extensions.VK_NV_external_memory
+import Vulkan.Extensions.VK_NV_external_memory_capabilities
+import Vulkan.Extensions.VK_NV_external_memory_win32
+import Vulkan.Extensions.VK_NV_fill_rectangle
+import Vulkan.Extensions.VK_NV_fragment_coverage_to_color
+import Vulkan.Extensions.VK_NV_fragment_shader_barycentric
+import Vulkan.Extensions.VK_NV_framebuffer_mixed_samples
+import Vulkan.Extensions.VK_NV_geometry_shader_passthrough
+import Vulkan.Extensions.VK_NV_glsl_shader
+import Vulkan.Extensions.VK_NV_mesh_shader
+import Vulkan.Extensions.VK_NV_ray_tracing
+import Vulkan.Extensions.VK_NV_representative_fragment_test
+import Vulkan.Extensions.VK_NV_sample_mask_override_coverage
+import Vulkan.Extensions.VK_NV_scissor_exclusive
+import Vulkan.Extensions.VK_NV_shader_image_footprint
+import Vulkan.Extensions.VK_NV_shader_sm_builtins
+import Vulkan.Extensions.VK_NV_shader_subgroup_partitioned
+import Vulkan.Extensions.VK_NV_shading_rate_image
+import Vulkan.Extensions.VK_NV_viewport_array2
+import Vulkan.Extensions.VK_NV_viewport_swizzle
+import Vulkan.Extensions.VK_NV_win32_keyed_mutex
+import Vulkan.Extensions.VK_QCOM_render_pass_shader_resolve
+import Vulkan.Extensions.VK_QCOM_render_pass_store_ops
+import Vulkan.Extensions.VK_QCOM_render_pass_transform
+import Vulkan.Extensions.WSITypes
+
diff --git a/src/Vulkan/Extensions/Handles.hs b/src/Vulkan/Extensions/Handles.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/Handles.hs
@@ -0,0 +1,421 @@
+{-# language CPP #-}
+module Vulkan.Extensions.Handles  ( IndirectCommandsLayoutNV(..)
+                                  , ValidationCacheEXT(..)
+                                  , AccelerationStructureKHR(..)
+                                  , PerformanceConfigurationINTEL(..)
+                                  , DeferredOperationKHR(..)
+                                  , PrivateDataSlotEXT(..)
+                                  , DisplayKHR(..)
+                                  , DisplayModeKHR(..)
+                                  , SurfaceKHR(..)
+                                  , SwapchainKHR(..)
+                                  , DebugReportCallbackEXT(..)
+                                  , DebugUtilsMessengerEXT(..)
+                                  , Instance(..)
+                                  , PhysicalDevice(..)
+                                  , Device(..)
+                                  , Queue(..)
+                                  , CommandBuffer(..)
+                                  , DeviceMemory(..)
+                                  , CommandPool(..)
+                                  , Buffer(..)
+                                  , BufferView(..)
+                                  , Image(..)
+                                  , ImageView(..)
+                                  , ShaderModule(..)
+                                  , Pipeline(..)
+                                  , PipelineLayout(..)
+                                  , Sampler(..)
+                                  , DescriptorSet(..)
+                                  , DescriptorSetLayout(..)
+                                  , Fence(..)
+                                  , Semaphore(..)
+                                  , QueryPool(..)
+                                  , Framebuffer(..)
+                                  , RenderPass(..)
+                                  , PipelineCache(..)
+                                  , DescriptorUpdateTemplate(..)
+                                  , SamplerYcbcrConversion(..)
+                                  ) where
+
+import GHC.Show (showParen)
+import Numeric (showHex)
+import Foreign.Storable (Storable)
+import Data.Word (Word64)
+import Vulkan.Core10.APIConstants (HasObjectType(..))
+import Vulkan.Core10.APIConstants (IsHandle)
+import Vulkan.Zero (Zero)
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DEFERRED_OPERATION_KHR))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DISPLAY_KHR))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DISPLAY_MODE_KHR))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_SURFACE_KHR))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_SWAPCHAIN_KHR))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_VALIDATION_CACHE_EXT))
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.Core10.Handles (BufferView(..))
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandPool(..))
+import Vulkan.Core10.Handles (DescriptorSet(..))
+import Vulkan.Core10.Handles (DescriptorSetLayout(..))
+import Vulkan.Core11.Handles (DescriptorUpdateTemplate(..))
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Core10.Handles (DeviceMemory(..))
+import Vulkan.Core10.Handles (Fence(..))
+import Vulkan.Core10.Handles (Framebuffer(..))
+import Vulkan.Core10.Handles (Image(..))
+import Vulkan.Core10.Handles (ImageView(..))
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (Pipeline(..))
+import Vulkan.Core10.Handles (PipelineCache(..))
+import Vulkan.Core10.Handles (PipelineLayout(..))
+import Vulkan.Core10.Handles (QueryPool(..))
+import Vulkan.Core10.Handles (Queue(..))
+import Vulkan.Core10.Handles (RenderPass(..))
+import Vulkan.Core10.Handles (Sampler(..))
+import Vulkan.Core11.Handles (SamplerYcbcrConversion(..))
+import Vulkan.Core10.Handles (Semaphore(..))
+import Vulkan.Core10.Handles (ShaderModule(..))
+-- | VkIndirectCommandsLayoutNV - Opaque handle to an indirect commands
+-- layout object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsMemoryRequirementsInfoNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.createIndirectCommandsLayoutNV',
+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.destroyIndirectCommandsLayoutNV'
+newtype IndirectCommandsLayoutNV = IndirectCommandsLayoutNV Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType IndirectCommandsLayoutNV where
+  objectTypeAndHandle (IndirectCommandsLayoutNV h) = (OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV, h)
+instance Show IndirectCommandsLayoutNV where
+  showsPrec p (IndirectCommandsLayoutNV x) = showParen (p >= 11) (showString "IndirectCommandsLayoutNV 0x" . showHex x)
+
+
+-- | VkValidationCacheEXT - Opaque handle to a validation cache object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.ShaderModuleValidationCacheCreateInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.createValidationCacheEXT',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.destroyValidationCacheEXT',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.getValidationCacheDataEXT',
+-- 'Vulkan.Extensions.VK_EXT_validation_cache.mergeValidationCachesEXT'
+newtype ValidationCacheEXT = ValidationCacheEXT Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType ValidationCacheEXT where
+  objectTypeAndHandle (ValidationCacheEXT h) = (OBJECT_TYPE_VALIDATION_CACHE_EXT, h)
+instance Show ValidationCacheEXT where
+  showsPrec p (ValidationCacheEXT x) = showParen (p >= 11) (showString "ValidationCacheEXT 0x" . showHex x)
+
+
+-- | VkAccelerationStructureKHR - Opaque handle to an acceleration structure
+-- object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureBuildGeometryInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureDeviceAddressInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureMemoryRequirementsInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.BindAccelerationStructureMemoryInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureToMemoryInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.CopyMemoryToAccelerationStructureInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdCopyAccelerationStructureNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdWriteAccelerationStructuresPropertiesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdWriteAccelerationStructuresPropertiesNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.createAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.destroyAccelerationStructureKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.destroyAccelerationStructureNV',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.writeAccelerationStructuresPropertiesKHR'
+newtype AccelerationStructureKHR = AccelerationStructureKHR Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType AccelerationStructureKHR where
+  objectTypeAndHandle (AccelerationStructureKHR h) = (OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR, h)
+instance Show AccelerationStructureKHR where
+  showsPrec p (AccelerationStructureKHR x) = showParen (p >= 11) (showString "AccelerationStructureKHR 0x" . showHex x)
+
+
+-- | VkPerformanceConfigurationINTEL - Device configuration for performance
+-- queries
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.acquirePerformanceConfigurationINTEL',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.queueSetPerformanceConfigurationINTEL',
+-- 'Vulkan.Extensions.VK_INTEL_performance_query.releasePerformanceConfigurationINTEL'
+newtype PerformanceConfigurationINTEL = PerformanceConfigurationINTEL Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType PerformanceConfigurationINTEL where
+  objectTypeAndHandle (PerformanceConfigurationINTEL h) = (OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL, h)
+instance Show PerformanceConfigurationINTEL where
+  showsPrec p (PerformanceConfigurationINTEL x) = showParen (p >= 11) (showString "PerformanceConfigurationINTEL 0x" . showHex x)
+
+
+-- | VkDeferredOperationKHR - A deferred operation
+--
+-- = Description
+--
+-- This handle refers to a tracking structure which manages the execution
+-- state for a deferred command.
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.createDeferredOperationKHR',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.deferredOperationJoinKHR',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.destroyDeferredOperationKHR',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.getDeferredOperationMaxConcurrencyKHR',
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.getDeferredOperationResultKHR'
+newtype DeferredOperationKHR = DeferredOperationKHR Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType DeferredOperationKHR where
+  objectTypeAndHandle (DeferredOperationKHR h) = (OBJECT_TYPE_DEFERRED_OPERATION_KHR, h)
+instance Show DeferredOperationKHR where
+  showsPrec p (DeferredOperationKHR x) = showParen (p >= 11) (showString "DeferredOperationKHR 0x" . showHex x)
+
+
+-- | VkPrivateDataSlotEXT - Opaque handle to a private data slot object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_EXT_private_data.createPrivateDataSlotEXT',
+-- 'Vulkan.Extensions.VK_EXT_private_data.destroyPrivateDataSlotEXT',
+-- 'Vulkan.Extensions.VK_EXT_private_data.getPrivateDataEXT',
+-- 'Vulkan.Extensions.VK_EXT_private_data.setPrivateDataEXT'
+newtype PrivateDataSlotEXT = PrivateDataSlotEXT Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType PrivateDataSlotEXT where
+  objectTypeAndHandle (PrivateDataSlotEXT h) = (OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT, h)
+instance Show PrivateDataSlotEXT where
+  showsPrec p (PrivateDataSlotEXT x) = showParen (p >= 11) (showString "PrivateDataSlotEXT 0x" . showHex x)
+
+
+-- | VkDisplayKHR - Opaque handle to a display object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayPlanePropertiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR',
+-- 'Vulkan.Extensions.VK_EXT_acquire_xlib_display.acquireXlibDisplayEXT',
+-- 'Vulkan.Extensions.VK_KHR_display.createDisplayModeKHR',
+-- 'Vulkan.Extensions.VK_EXT_display_control.displayPowerControlEXT',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.getDisplayModeProperties2KHR',
+-- 'Vulkan.Extensions.VK_KHR_display.getDisplayModePropertiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneSupportedDisplaysKHR',
+-- 'Vulkan.Extensions.VK_EXT_acquire_xlib_display.getRandROutputDisplayEXT',
+-- 'Vulkan.Extensions.VK_EXT_display_control.registerDisplayEventEXT',
+-- 'Vulkan.Extensions.VK_EXT_direct_mode_display.releaseDisplayEXT'
+newtype DisplayKHR = DisplayKHR Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType DisplayKHR where
+  objectTypeAndHandle (DisplayKHR h) = (OBJECT_TYPE_DISPLAY_KHR, h)
+instance Show DisplayKHR where
+  showsPrec p (DisplayKHR x) = showParen (p >= 11) (showString "DisplayKHR 0x" . showHex x)
+
+
+-- | VkDisplayModeKHR - Opaque handle to a display mode object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayModePropertiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_display.DisplaySurfaceCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.createDisplayModeKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneCapabilitiesKHR'
+newtype DisplayModeKHR = DisplayModeKHR Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType DisplayModeKHR where
+  objectTypeAndHandle (DisplayModeKHR h) = (OBJECT_TYPE_DISPLAY_MODE_KHR, h)
+instance Show DisplayModeKHR where
+  showsPrec p (DisplayModeKHR x) = showParen (p >= 11) (showString "DisplayModeKHR 0x" . showHex x)
+
+
+-- | VkSurfaceKHR - Opaque handle to a surface object
+--
+-- = Description
+--
+-- The @VK_KHR_surface@ extension declares the 'SurfaceKHR' object, and
+-- provides a function for destroying 'SurfaceKHR' objects. Separate
+-- platform-specific extensions each provide a function for creating a
+-- 'SurfaceKHR' 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
+--
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_android_surface.createAndroidSurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_display.createDisplayPlaneSurfaceKHR',
+-- 'Vulkan.Extensions.VK_EXT_headless_surface.createHeadlessSurfaceEXT',
+-- 'Vulkan.Extensions.VK_MVK_ios_surface.createIOSSurfaceMVK',
+-- 'Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface.createImagePipeSurfaceFUCHSIA',
+-- 'Vulkan.Extensions.VK_MVK_macos_surface.createMacOSSurfaceMVK',
+-- 'Vulkan.Extensions.VK_EXT_metal_surface.createMetalSurfaceEXT',
+-- 'Vulkan.Extensions.VK_GGP_stream_descriptor_surface.createStreamDescriptorSurfaceGGP',
+-- 'Vulkan.Extensions.VK_NN_vi_surface.createViSurfaceNN',
+-- 'Vulkan.Extensions.VK_KHR_wayland_surface.createWaylandSurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_win32_surface.createWin32SurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_xcb_surface.createXcbSurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_xlib_surface.createXlibSurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.destroySurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getDeviceGroupSurfacePresentModesKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getPhysicalDevicePresentRectanglesKHR',
+-- 'Vulkan.Extensions.VK_EXT_display_surface_counter.getPhysicalDeviceSurfaceCapabilities2EXT',
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceFormatsKHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR'
+newtype SurfaceKHR = SurfaceKHR Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType SurfaceKHR where
+  objectTypeAndHandle (SurfaceKHR h) = (OBJECT_TYPE_SURFACE_KHR, h)
+instance Show SurfaceKHR where
+  showsPrec p (SurfaceKHR x) = showParen (p >= 11) (showString "SurfaceKHR 0x" . showHex x)
+
+
+-- | VkSwapchainKHR - Opaque handle to a swapchain object
+--
+-- = Description
+--
+-- A swapchain is an abstraction for an array of presentable images that
+-- are associated with a surface. The presentable images are represented by
+-- 'Vulkan.Core10.Handles.Image' 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 non-retired
+-- 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
+-- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR', and before it
+-- is presented by 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR'.
+-- This includes transitioning the image layout and rendering commands.
+--
+-- An application /can/ acquire use of a presentable image with
+-- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR'. 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
+-- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR', 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
+--
+-- 'Vulkan.Extensions.VK_KHR_swapchain.AcquireNextImageInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.acquireFullScreenExclusiveModeEXT',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.acquireNextImageKHR',
+-- 'Vulkan.Extensions.VK_KHR_display_swapchain.createSharedSwapchainsKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.destroySwapchainKHR',
+-- 'Vulkan.Extensions.VK_GOOGLE_display_timing.getPastPresentationTimingGOOGLE',
+-- 'Vulkan.Extensions.VK_GOOGLE_display_timing.getRefreshCycleDurationGOOGLE',
+-- 'Vulkan.Extensions.VK_EXT_display_control.getSwapchainCounterEXT',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getSwapchainImagesKHR',
+-- 'Vulkan.Extensions.VK_KHR_shared_presentable_image.getSwapchainStatusKHR',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.releaseFullScreenExclusiveModeEXT',
+-- 'Vulkan.Extensions.VK_EXT_hdr_metadata.setHdrMetadataEXT',
+-- 'Vulkan.Extensions.VK_AMD_display_native_hdr.setLocalDimmingAMD'
+newtype SwapchainKHR = SwapchainKHR Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType SwapchainKHR where
+  objectTypeAndHandle (SwapchainKHR h) = (OBJECT_TYPE_SWAPCHAIN_KHR, h)
+instance Show SwapchainKHR where
+  showsPrec p (SwapchainKHR x) = showParen (p >= 11) (showString "SwapchainKHR 0x" . showHex x)
+
+
+-- | VkDebugReportCallbackEXT - Opaque handle to a debug report callback
+-- object
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_EXT_debug_report.createDebugReportCallbackEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_report.destroyDebugReportCallbackEXT'
+newtype DebugReportCallbackEXT = DebugReportCallbackEXT Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType DebugReportCallbackEXT where
+  objectTypeAndHandle (DebugReportCallbackEXT h) = (OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT, h)
+instance Show DebugReportCallbackEXT where
+  showsPrec p (DebugReportCallbackEXT x) = showParen (p >= 11) (showString "DebugReportCallbackEXT 0x" . showHex x)
+
+
+-- | VkDebugUtilsMessengerEXT - Opaque handle to a debug messenger object
+--
+-- = 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 is not interested in and will only provide desired debug
+-- messages.
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.createDebugUtilsMessengerEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.destroyDebugUtilsMessengerEXT'
+newtype DebugUtilsMessengerEXT = DebugUtilsMessengerEXT Word64
+  deriving newtype (Eq, Ord, Storable, Zero)
+  deriving anyclass (IsHandle)
+instance HasObjectType DebugUtilsMessengerEXT where
+  objectTypeAndHandle (DebugUtilsMessengerEXT h) = (OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, h)
+instance Show DebugUtilsMessengerEXT where
+  showsPrec p (DebugUtilsMessengerEXT x) = showParen (p >= 11) (showString "DebugUtilsMessengerEXT 0x" . showHex x)
+
diff --git a/src/Vulkan/Extensions/Handles.hs-boot b/src/Vulkan/Extensions/Handles.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/Handles.hs-boot
@@ -0,0 +1,52 @@
+{-# language CPP #-}
+module Vulkan.Extensions.Handles  ( AccelerationStructureKHR
+                                  , DebugReportCallbackEXT
+                                  , DebugUtilsMessengerEXT
+                                  , DeferredOperationKHR
+                                  , DisplayKHR
+                                  , DisplayModeKHR
+                                  , IndirectCommandsLayoutNV
+                                  , PerformanceConfigurationINTEL
+                                  , PrivateDataSlotEXT
+                                  , SurfaceKHR
+                                  , SwapchainKHR
+                                  , ValidationCacheEXT
+                                  ) where
+
+
+
+data AccelerationStructureKHR
+
+
+data DebugReportCallbackEXT
+
+
+data DebugUtilsMessengerEXT
+
+
+data DeferredOperationKHR
+
+
+data DisplayKHR
+
+
+data DisplayModeKHR
+
+
+data IndirectCommandsLayoutNV
+
+
+data PerformanceConfigurationINTEL
+
+
+data PrivateDataSlotEXT
+
+
+data SurfaceKHR
+
+
+data SwapchainKHR
+
+
+data ValidationCacheEXT
+
diff --git a/src/Vulkan/Extensions/VK_AMD_buffer_marker.hs b/src/Vulkan/Extensions/VK_AMD_buffer_marker.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_buffer_marker.hs
@@ -0,0 +1,169 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_buffer_marker  ( cmdWriteBufferMarkerAMD
+                                               , AMD_BUFFER_MARKER_SPEC_VERSION
+                                               , pattern AMD_BUFFER_MARKER_SPEC_VERSION
+                                               , AMD_BUFFER_MARKER_EXTENSION_NAME
+                                               , pattern AMD_BUFFER_MARKER_EXTENSION_NAME
+                                               ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdWriteBufferMarkerAMD))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits)
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdWriteBufferMarkerAMD
+  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> Buffer -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlagBits -> Buffer -> DeviceSize -> Word32 -> IO ()
+
+-- | vkCmdWriteBufferMarkerAMD - Execute a pipelined write of a marker value
+-- into a buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pipelineStage@ is one of the
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     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
+--
+-- 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 'cmdWriteBufferMarkerAMD' 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
+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_WRITE_BIT', and the
+-- pipeline stages for identifying the synchronization scope /must/ include
+-- both @pipelineStage@ and
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'.
+--
+-- Note
+--
+-- Similar to 'Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp', 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
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
+--     usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @dstOffset@ /must/ be a multiple of @4@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pipelineStage@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+--     value
+--
+-- -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support transfer, graphics, or compute
+--     operations
+--
+-- -   Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              | Transfer                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
+cmdWriteBufferMarkerAMD :: forall io . MonadIO io => CommandBuffer -> PipelineStageFlagBits -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("marker" ::: Word32) -> io ()
+cmdWriteBufferMarkerAMD commandBuffer pipelineStage dstBuffer dstOffset marker = liftIO $ do
+  let vkCmdWriteBufferMarkerAMDPtr = pVkCmdWriteBufferMarkerAMD (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdWriteBufferMarkerAMDPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWriteBufferMarkerAMD is null" Nothing Nothing
+  let vkCmdWriteBufferMarkerAMD' = mkVkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMDPtr
+  vkCmdWriteBufferMarkerAMD' (commandBufferHandle (commandBuffer)) (pipelineStage) (dstBuffer) (dstOffset) (marker)
+  pure $ ()
+
+
+type AMD_BUFFER_MARKER_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_BUFFER_MARKER_SPEC_VERSION"
+pattern AMD_BUFFER_MARKER_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_BUFFER_MARKER_SPEC_VERSION = 1
+
+
+type AMD_BUFFER_MARKER_EXTENSION_NAME = "VK_AMD_buffer_marker"
+
+-- No documentation found for TopLevel "VK_AMD_BUFFER_MARKER_EXTENSION_NAME"
+pattern AMD_BUFFER_MARKER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_BUFFER_MARKER_EXTENSION_NAME = "VK_AMD_buffer_marker"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs b/src/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs
@@ -0,0 +1,95 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_device_coherent_memory  ( PhysicalDeviceCoherentMemoryFeaturesAMD(..)
+                                                        , AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION
+                                                        , pattern AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION
+                                                        , AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME
+                                                        , pattern AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME
+                                                        ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD))
+-- | VkPhysicalDeviceCoherentMemoryFeaturesAMD - Structure describing whether
+-- device coherent memory can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceCoherentMemoryFeaturesAMD' structure
+-- describe the following features:
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceCoherentMemoryFeaturesAMD = PhysicalDeviceCoherentMemoryFeaturesAMD
+  { -- | @deviceCoherentMemory@ indicates that the implementation supports
+    -- <VkMemoryPropertyFlagBits.html device coherent memory>.
+    deviceCoherentMemory :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceCoherentMemoryFeaturesAMD
+
+instance ToCStruct PhysicalDeviceCoherentMemoryFeaturesAMD where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceCoherentMemoryFeaturesAMD{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (deviceCoherentMemory))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceCoherentMemoryFeaturesAMD where
+  peekCStruct p = do
+    deviceCoherentMemory <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceCoherentMemoryFeaturesAMD
+             (bool32ToBool deviceCoherentMemory)
+
+instance Storable PhysicalDeviceCoherentMemoryFeaturesAMD where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceCoherentMemoryFeaturesAMD where
+  zero = PhysicalDeviceCoherentMemoryFeaturesAMD
+           zero
+
+
+type AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION"
+pattern AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION = 1
+
+
+type AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME = "VK_AMD_device_coherent_memory"
+
+-- No documentation found for TopLevel "VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME"
+pattern AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME = "VK_AMD_device_coherent_memory"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs-boot b/src/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_device_coherent_memory  (PhysicalDeviceCoherentMemoryFeaturesAMD) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceCoherentMemoryFeaturesAMD
+
+instance ToCStruct PhysicalDeviceCoherentMemoryFeaturesAMD
+instance Show PhysicalDeviceCoherentMemoryFeaturesAMD
+
+instance FromCStruct PhysicalDeviceCoherentMemoryFeaturesAMD
+
diff --git a/src/Vulkan/Extensions/VK_AMD_display_native_hdr.hs b/src/Vulkan/Extensions/VK_AMD_display_native_hdr.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_display_native_hdr.hs
@@ -0,0 +1,232 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_display_native_hdr  ( setLocalDimmingAMD
+                                                    , DisplayNativeHdrSurfaceCapabilitiesAMD(..)
+                                                    , SwapchainDisplayNativeHdrCreateInfoAMD(..)
+                                                    , AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION
+                                                    , pattern AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION
+                                                    , AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME
+                                                    , pattern AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME
+                                                    , SwapchainKHR(..)
+                                                    , ColorSpaceKHR(..)
+                                                    ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Bool32(..))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkSetLocalDimmingAMD))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SwapchainKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD))
+import Vulkan.Extensions.VK_KHR_surface (ColorSpaceKHR(..))
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkSetLocalDimmingAMD
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Bool32 -> IO ()) -> Ptr Device_T -> SwapchainKHR -> Bool32 -> IO ()
+
+-- | vkSetLocalDimmingAMD - Set Local Dimming
+--
+-- = Parameters
+--
+-- -   @device@ is the device associated with @swapChain@.
+--
+-- -   @swapChain@ handle to enable local dimming.
+--
+-- -   @localDimmingEnable@ specifies whether local dimming is enabled for
+--     the swapchain.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @swapChain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   Both of @device@, and @swapChain@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Valid Usage
+--
+-- -   It is only valid to call 'setLocalDimmingAMD' if
+--     'DisplayNativeHdrSurfaceCapabilitiesAMD'::@localDimmingSupport@ is
+--     supported
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+setLocalDimmingAMD :: forall io . MonadIO io => Device -> SwapchainKHR -> ("localDimmingEnable" ::: Bool) -> io ()
+setLocalDimmingAMD device swapChain localDimmingEnable = liftIO $ do
+  let vkSetLocalDimmingAMDPtr = pVkSetLocalDimmingAMD (deviceCmds (device :: Device))
+  unless (vkSetLocalDimmingAMDPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkSetLocalDimmingAMD is null" Nothing Nothing
+  let vkSetLocalDimmingAMD' = mkVkSetLocalDimmingAMD vkSetLocalDimmingAMDPtr
+  vkSetLocalDimmingAMD' (deviceHandle (device)) (swapChain) (boolToBool32 (localDimmingEnable))
+  pure $ ()
+
+
+-- | VkDisplayNativeHdrSurfaceCapabilitiesAMD - Structure describing display
+-- native HDR specific capabilities of a surface
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DisplayNativeHdrSurfaceCapabilitiesAMD = DisplayNativeHdrSurfaceCapabilitiesAMD
+  { -- | @localDimmingSupport@ specifies whether the surface supports local
+    -- dimming. If this is 'Vulkan.Core10.BaseType.TRUE',
+    -- 'SwapchainDisplayNativeHdrCreateInfoAMD' /can/ be used to explicitly
+    -- enable or disable local dimming for the surface. Local dimming may also
+    -- be overriden by 'setLocalDimmingAMD' during the lifetime of the
+    -- swapchain.
+    localDimmingSupport :: Bool }
+  deriving (Typeable)
+deriving instance Show DisplayNativeHdrSurfaceCapabilitiesAMD
+
+instance ToCStruct DisplayNativeHdrSurfaceCapabilitiesAMD where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayNativeHdrSurfaceCapabilitiesAMD{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (localDimmingSupport))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct DisplayNativeHdrSurfaceCapabilitiesAMD where
+  peekCStruct p = do
+    localDimmingSupport <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ DisplayNativeHdrSurfaceCapabilitiesAMD
+             (bool32ToBool localDimmingSupport)
+
+instance Storable DisplayNativeHdrSurfaceCapabilitiesAMD where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DisplayNativeHdrSurfaceCapabilitiesAMD where
+  zero = DisplayNativeHdrSurfaceCapabilitiesAMD
+           zero
+
+
+-- | VkSwapchainDisplayNativeHdrCreateInfoAMD - Structure specifying display
+-- native HDR parameters of a newly created swapchain object
+--
+-- = Description
+--
+-- If the @pNext@ chain of
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR' does not
+-- include this structure, the default value for @localDimmingEnable@ is
+-- 'Vulkan.Core10.BaseType.TRUE', meaning local dimming is initially
+-- enabled for the swapchain.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD'
+--
+-- == Valid Usage
+--
+-- -   It is only valid to set @localDimmingEnable@ to
+--     'Vulkan.Core10.BaseType.TRUE' if
+--     'DisplayNativeHdrSurfaceCapabilitiesAMD'::@localDimmingSupport@ is
+--     supported
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SwapchainDisplayNativeHdrCreateInfoAMD = SwapchainDisplayNativeHdrCreateInfoAMD
+  { -- | @localDimmingEnable@ specifies whether local dimming is enabled for the
+    -- swapchain.
+    localDimmingEnable :: Bool }
+  deriving (Typeable)
+deriving instance Show SwapchainDisplayNativeHdrCreateInfoAMD
+
+instance ToCStruct SwapchainDisplayNativeHdrCreateInfoAMD where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SwapchainDisplayNativeHdrCreateInfoAMD{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (localDimmingEnable))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct SwapchainDisplayNativeHdrCreateInfoAMD where
+  peekCStruct p = do
+    localDimmingEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ SwapchainDisplayNativeHdrCreateInfoAMD
+             (bool32ToBool localDimmingEnable)
+
+instance Storable SwapchainDisplayNativeHdrCreateInfoAMD where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SwapchainDisplayNativeHdrCreateInfoAMD where
+  zero = SwapchainDisplayNativeHdrCreateInfoAMD
+           zero
+
+
+type AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION"
+pattern AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION = 1
+
+
+type AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME = "VK_AMD_display_native_hdr"
+
+-- No documentation found for TopLevel "VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME"
+pattern AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME = "VK_AMD_display_native_hdr"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_display_native_hdr.hs-boot b/src/Vulkan/Extensions/VK_AMD_display_native_hdr.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_display_native_hdr.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_display_native_hdr  ( DisplayNativeHdrSurfaceCapabilitiesAMD
+                                                    , SwapchainDisplayNativeHdrCreateInfoAMD
+                                                    ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DisplayNativeHdrSurfaceCapabilitiesAMD
+
+instance ToCStruct DisplayNativeHdrSurfaceCapabilitiesAMD
+instance Show DisplayNativeHdrSurfaceCapabilitiesAMD
+
+instance FromCStruct DisplayNativeHdrSurfaceCapabilitiesAMD
+
+
+data SwapchainDisplayNativeHdrCreateInfoAMD
+
+instance ToCStruct SwapchainDisplayNativeHdrCreateInfoAMD
+instance Show SwapchainDisplayNativeHdrCreateInfoAMD
+
+instance FromCStruct SwapchainDisplayNativeHdrCreateInfoAMD
+
diff --git a/src/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs b/src/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_draw_indirect_count  ( cmdDrawIndirectCountAMD
+                                                     , cmdDrawIndexedIndirectCountAMD
+                                                     , AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION
+                                                     , pattern AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION
+                                                     , AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME
+                                                     , pattern AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME
+                                                     ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count (cmdDrawIndexedIndirectCount)
+import Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count (cmdDrawIndirectCount)
+-- No documentation found for TopLevel "vkCmdDrawIndirectCountAMD"
+cmdDrawIndirectCountAMD = cmdDrawIndirectCount
+
+
+-- No documentation found for TopLevel "vkCmdDrawIndexedIndirectCountAMD"
+cmdDrawIndexedIndirectCountAMD = cmdDrawIndexedIndirectCount
+
+
+type AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION"
+pattern AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION = 2
+
+
+type AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME = "VK_AMD_draw_indirect_count"
+
+-- No documentation found for TopLevel "VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME"
+pattern AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME = "VK_AMD_draw_indirect_count"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_gcn_shader.hs b/src/Vulkan/Extensions/VK_AMD_gcn_shader.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_gcn_shader.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_gcn_shader  ( AMD_GCN_SHADER_SPEC_VERSION
+                                            , pattern AMD_GCN_SHADER_SPEC_VERSION
+                                            , AMD_GCN_SHADER_EXTENSION_NAME
+                                            , pattern AMD_GCN_SHADER_EXTENSION_NAME
+                                            ) where
+
+import Data.String (IsString)
+
+type AMD_GCN_SHADER_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_GCN_SHADER_SPEC_VERSION"
+pattern AMD_GCN_SHADER_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_GCN_SHADER_SPEC_VERSION = 1
+
+
+type AMD_GCN_SHADER_EXTENSION_NAME = "VK_AMD_gcn_shader"
+
+-- No documentation found for TopLevel "VK_AMD_GCN_SHADER_EXTENSION_NAME"
+pattern AMD_GCN_SHADER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_GCN_SHADER_EXTENSION_NAME = "VK_AMD_gcn_shader"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_gpu_shader_half_float.hs b/src/Vulkan/Extensions/VK_AMD_gpu_shader_half_float.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_gpu_shader_half_float.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_gpu_shader_half_float  ( AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION
+                                                       , pattern AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION
+                                                       , AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME
+                                                       , pattern AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME
+                                                       ) where
+
+import Data.String (IsString)
+
+type AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION"
+pattern AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION = 2
+
+
+type AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME = "VK_AMD_gpu_shader_half_float"
+
+-- No documentation found for TopLevel "VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME"
+pattern AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME = "VK_AMD_gpu_shader_half_float"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_gpu_shader_int16.hs b/src/Vulkan/Extensions/VK_AMD_gpu_shader_int16.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_gpu_shader_int16.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_gpu_shader_int16  ( AMD_GPU_SHADER_INT16_SPEC_VERSION
+                                                  , pattern AMD_GPU_SHADER_INT16_SPEC_VERSION
+                                                  , AMD_GPU_SHADER_INT16_EXTENSION_NAME
+                                                  , pattern AMD_GPU_SHADER_INT16_EXTENSION_NAME
+                                                  ) where
+
+import Data.String (IsString)
+
+type AMD_GPU_SHADER_INT16_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_AMD_GPU_SHADER_INT16_SPEC_VERSION"
+pattern AMD_GPU_SHADER_INT16_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_GPU_SHADER_INT16_SPEC_VERSION = 2
+
+
+type AMD_GPU_SHADER_INT16_EXTENSION_NAME = "VK_AMD_gpu_shader_int16"
+
+-- No documentation found for TopLevel "VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME"
+pattern AMD_GPU_SHADER_INT16_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_GPU_SHADER_INT16_EXTENSION_NAME = "VK_AMD_gpu_shader_int16"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs b/src/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs
@@ -0,0 +1,149 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_memory_overallocation_behavior  ( DeviceMemoryOverallocationCreateInfoAMD(..)
+                                                                , MemoryOverallocationBehaviorAMD( MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD
+                                                                                                 , MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD
+                                                                                                 , MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD
+                                                                                                 , ..
+                                                                                                 )
+                                                                , AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION
+                                                                , pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION
+                                                                , AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME
+                                                                , pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME
+                                                                ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD))
+-- | VkDeviceMemoryOverallocationCreateInfoAMD - Specify memory
+-- overallocation behavior for a Vulkan device
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'MemoryOverallocationBehaviorAMD',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceMemoryOverallocationCreateInfoAMD = DeviceMemoryOverallocationCreateInfoAMD
+  { -- | @overallocationBehavior@ /must/ be a valid
+    -- 'MemoryOverallocationBehaviorAMD' value
+    overallocationBehavior :: MemoryOverallocationBehaviorAMD }
+  deriving (Typeable)
+deriving instance Show DeviceMemoryOverallocationCreateInfoAMD
+
+instance ToCStruct DeviceMemoryOverallocationCreateInfoAMD where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceMemoryOverallocationCreateInfoAMD{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr MemoryOverallocationBehaviorAMD)) (overallocationBehavior)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr MemoryOverallocationBehaviorAMD)) (zero)
+    f
+
+instance FromCStruct DeviceMemoryOverallocationCreateInfoAMD where
+  peekCStruct p = do
+    overallocationBehavior <- peek @MemoryOverallocationBehaviorAMD ((p `plusPtr` 16 :: Ptr MemoryOverallocationBehaviorAMD))
+    pure $ DeviceMemoryOverallocationCreateInfoAMD
+             overallocationBehavior
+
+instance Storable DeviceMemoryOverallocationCreateInfoAMD where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceMemoryOverallocationCreateInfoAMD where
+  zero = DeviceMemoryOverallocationCreateInfoAMD
+           zero
+
+
+-- | VkMemoryOverallocationBehaviorAMD - Specify memory overallocation
+-- behavior
+--
+-- = See Also
+--
+-- 'DeviceMemoryOverallocationCreateInfoAMD'
+newtype MemoryOverallocationBehaviorAMD = MemoryOverallocationBehaviorAMD Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD' lets the implementation
+-- decide if overallocation is allowed.
+pattern MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = MemoryOverallocationBehaviorAMD 0
+-- | 'MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD' specifies overallocation is
+-- allowed if platform permits.
+pattern MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = MemoryOverallocationBehaviorAMD 1
+-- | 'MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD' specifies the
+-- application is not allowed to allocate device memory beyond the heap
+-- sizes reported by
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'.
+-- Allocations that are not explicitly made by the application within the
+-- scope of the Vulkan instance are not accounted for.
+pattern MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = MemoryOverallocationBehaviorAMD 2
+{-# complete MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD,
+             MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD,
+             MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD :: MemoryOverallocationBehaviorAMD #-}
+
+instance Show MemoryOverallocationBehaviorAMD where
+  showsPrec p = \case
+    MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD -> showString "MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD"
+    MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD -> showString "MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD"
+    MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD -> showString "MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD"
+    MemoryOverallocationBehaviorAMD x -> showParen (p >= 11) (showString "MemoryOverallocationBehaviorAMD " . showsPrec 11 x)
+
+instance Read MemoryOverallocationBehaviorAMD where
+  readPrec = parens (choose [("MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD", pure MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD)
+                            , ("MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD", pure MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD)
+                            , ("MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD", pure MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "MemoryOverallocationBehaviorAMD")
+                       v <- step readPrec
+                       pure (MemoryOverallocationBehaviorAMD v)))
+
+
+type AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION"
+pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION = 1
+
+
+type AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME = "VK_AMD_memory_overallocation_behavior"
+
+-- No documentation found for TopLevel "VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME"
+pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME = "VK_AMD_memory_overallocation_behavior"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs-boot b/src/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_memory_overallocation_behavior  (DeviceMemoryOverallocationCreateInfoAMD) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DeviceMemoryOverallocationCreateInfoAMD
+
+instance ToCStruct DeviceMemoryOverallocationCreateInfoAMD
+instance Show DeviceMemoryOverallocationCreateInfoAMD
+
+instance FromCStruct DeviceMemoryOverallocationCreateInfoAMD
+
diff --git a/src/Vulkan/Extensions/VK_AMD_mixed_attachment_samples.hs b/src/Vulkan/Extensions/VK_AMD_mixed_attachment_samples.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_mixed_attachment_samples.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_mixed_attachment_samples  ( AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION
+                                                          , pattern AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION
+                                                          , AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME
+                                                          , pattern AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME
+                                                          ) where
+
+import Data.String (IsString)
+
+type AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION"
+pattern AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION = 1
+
+
+type AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME = "VK_AMD_mixed_attachment_samples"
+
+-- No documentation found for TopLevel "VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME"
+pattern AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME = "VK_AMD_mixed_attachment_samples"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_negative_viewport_height.hs b/src/Vulkan/Extensions/VK_AMD_negative_viewport_height.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_negative_viewport_height.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_negative_viewport_height  ( AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION
+                                                          , pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION
+                                                          , AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME
+                                                          , pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME
+                                                          ) where
+
+import Data.String (IsString)
+
+type AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION"
+pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION = 1
+
+
+type AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME = "VK_AMD_negative_viewport_height"
+
+-- No documentation found for TopLevel "VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME"
+pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME = "VK_AMD_negative_viewport_height"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs b/src/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs
@@ -0,0 +1,127 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_pipeline_compiler_control  ( PipelineCompilerControlCreateInfoAMD(..)
+                                                           , PipelineCompilerControlFlagBitsAMD(..)
+                                                           , PipelineCompilerControlFlagsAMD
+                                                           , AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION
+                                                           , pattern AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION
+                                                           , AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME
+                                                           , pattern AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME
+                                                           ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD))
+-- | VkPipelineCompilerControlCreateInfoAMD - Structure used to pass
+-- compilation control flags to a pipeline
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PipelineCompilerControlFlagsAMD',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineCompilerControlCreateInfoAMD = PipelineCompilerControlCreateInfoAMD
+  { -- | @compilerControlFlags@ /must/ be @0@
+    compilerControlFlags :: PipelineCompilerControlFlagsAMD }
+  deriving (Typeable)
+deriving instance Show PipelineCompilerControlCreateInfoAMD
+
+instance ToCStruct PipelineCompilerControlCreateInfoAMD where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineCompilerControlCreateInfoAMD{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineCompilerControlFlagsAMD)) (compilerControlFlags)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct PipelineCompilerControlCreateInfoAMD where
+  peekCStruct p = do
+    compilerControlFlags <- peek @PipelineCompilerControlFlagsAMD ((p `plusPtr` 16 :: Ptr PipelineCompilerControlFlagsAMD))
+    pure $ PipelineCompilerControlCreateInfoAMD
+             compilerControlFlags
+
+instance Storable PipelineCompilerControlCreateInfoAMD where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineCompilerControlCreateInfoAMD where
+  zero = PipelineCompilerControlCreateInfoAMD
+           zero
+
+
+-- | VkPipelineCompilerControlFlagBitsAMD - Enum specifying available
+-- compilation control flags
+--
+-- = See Also
+--
+-- 'PipelineCompilerControlFlagsAMD'
+newtype PipelineCompilerControlFlagBitsAMD = PipelineCompilerControlFlagBitsAMD Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+type PipelineCompilerControlFlagsAMD = PipelineCompilerControlFlagBitsAMD
+
+instance Show PipelineCompilerControlFlagBitsAMD where
+  showsPrec p = \case
+    PipelineCompilerControlFlagBitsAMD x -> showParen (p >= 11) (showString "PipelineCompilerControlFlagBitsAMD 0x" . showHex x)
+
+instance Read PipelineCompilerControlFlagBitsAMD where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineCompilerControlFlagBitsAMD")
+                       v <- step readPrec
+                       pure (PipelineCompilerControlFlagBitsAMD v)))
+
+
+type AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION"
+pattern AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION = 1
+
+
+type AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME = "VK_AMD_pipeline_compiler_control"
+
+-- No documentation found for TopLevel "VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME"
+pattern AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME = "VK_AMD_pipeline_compiler_control"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs-boot b/src/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_pipeline_compiler_control  (PipelineCompilerControlCreateInfoAMD) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PipelineCompilerControlCreateInfoAMD
+
+instance ToCStruct PipelineCompilerControlCreateInfoAMD
+instance Show PipelineCompilerControlCreateInfoAMD
+
+instance FromCStruct PipelineCompilerControlCreateInfoAMD
+
diff --git a/src/Vulkan/Extensions/VK_AMD_rasterization_order.hs b/src/Vulkan/Extensions/VK_AMD_rasterization_order.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_rasterization_order.hs
@@ -0,0 +1,145 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_rasterization_order  ( PipelineRasterizationStateRasterizationOrderAMD(..)
+                                                     , RasterizationOrderAMD( RASTERIZATION_ORDER_STRICT_AMD
+                                                                            , RASTERIZATION_ORDER_RELAXED_AMD
+                                                                            , ..
+                                                                            )
+                                                     , AMD_RASTERIZATION_ORDER_SPEC_VERSION
+                                                     , pattern AMD_RASTERIZATION_ORDER_SPEC_VERSION
+                                                     , AMD_RASTERIZATION_ORDER_EXTENSION_NAME
+                                                     , pattern AMD_RASTERIZATION_ORDER_EXTENSION_NAME
+                                                     ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD))
+-- | VkPipelineRasterizationStateRasterizationOrderAMD - Structure defining
+-- rasterization order for a graphics pipeline
+--
+-- == Valid Usage (Implicit)
+--
+-- If the @VK_AMD_rasterization_order@ device extension is not enabled or
+-- the application does not request a particular rasterization order
+-- through specifying a 'PipelineRasterizationStateRasterizationOrderAMD'
+-- structure then the rasterization order used by the graphics pipeline
+-- defaults to 'RASTERIZATION_ORDER_STRICT_AMD'.
+--
+-- = See Also
+--
+-- 'RasterizationOrderAMD',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineRasterizationStateRasterizationOrderAMD = PipelineRasterizationStateRasterizationOrderAMD
+  { -- | @rasterizationOrder@ /must/ be a valid 'RasterizationOrderAMD' value
+    rasterizationOrder :: RasterizationOrderAMD }
+  deriving (Typeable)
+deriving instance Show PipelineRasterizationStateRasterizationOrderAMD
+
+instance ToCStruct PipelineRasterizationStateRasterizationOrderAMD where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineRasterizationStateRasterizationOrderAMD{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr RasterizationOrderAMD)) (rasterizationOrder)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr RasterizationOrderAMD)) (zero)
+    f
+
+instance FromCStruct PipelineRasterizationStateRasterizationOrderAMD where
+  peekCStruct p = do
+    rasterizationOrder <- peek @RasterizationOrderAMD ((p `plusPtr` 16 :: Ptr RasterizationOrderAMD))
+    pure $ PipelineRasterizationStateRasterizationOrderAMD
+             rasterizationOrder
+
+instance Storable PipelineRasterizationStateRasterizationOrderAMD where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineRasterizationStateRasterizationOrderAMD where
+  zero = PipelineRasterizationStateRasterizationOrderAMD
+           zero
+
+
+-- | VkRasterizationOrderAMD - Specify rasterization order for a graphics
+-- pipeline
+--
+-- = See Also
+--
+-- 'PipelineRasterizationStateRasterizationOrderAMD'
+newtype RasterizationOrderAMD = RasterizationOrderAMD Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'RASTERIZATION_ORDER_STRICT_AMD' specifies that operations for each
+-- primitive in a subpass /must/ occur in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-order primitive order>.
+pattern RASTERIZATION_ORDER_STRICT_AMD = RasterizationOrderAMD 0
+-- | 'RASTERIZATION_ORDER_RELAXED_AMD' specifies that operations for each
+-- primitive in a subpass /may/ not occur in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-order primitive order>.
+pattern RASTERIZATION_ORDER_RELAXED_AMD = RasterizationOrderAMD 1
+{-# complete RASTERIZATION_ORDER_STRICT_AMD,
+             RASTERIZATION_ORDER_RELAXED_AMD :: RasterizationOrderAMD #-}
+
+instance Show RasterizationOrderAMD where
+  showsPrec p = \case
+    RASTERIZATION_ORDER_STRICT_AMD -> showString "RASTERIZATION_ORDER_STRICT_AMD"
+    RASTERIZATION_ORDER_RELAXED_AMD -> showString "RASTERIZATION_ORDER_RELAXED_AMD"
+    RasterizationOrderAMD x -> showParen (p >= 11) (showString "RasterizationOrderAMD " . showsPrec 11 x)
+
+instance Read RasterizationOrderAMD where
+  readPrec = parens (choose [("RASTERIZATION_ORDER_STRICT_AMD", pure RASTERIZATION_ORDER_STRICT_AMD)
+                            , ("RASTERIZATION_ORDER_RELAXED_AMD", pure RASTERIZATION_ORDER_RELAXED_AMD)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "RasterizationOrderAMD")
+                       v <- step readPrec
+                       pure (RasterizationOrderAMD v)))
+
+
+type AMD_RASTERIZATION_ORDER_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION"
+pattern AMD_RASTERIZATION_ORDER_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_RASTERIZATION_ORDER_SPEC_VERSION = 1
+
+
+type AMD_RASTERIZATION_ORDER_EXTENSION_NAME = "VK_AMD_rasterization_order"
+
+-- No documentation found for TopLevel "VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME"
+pattern AMD_RASTERIZATION_ORDER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_RASTERIZATION_ORDER_EXTENSION_NAME = "VK_AMD_rasterization_order"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_rasterization_order.hs-boot b/src/Vulkan/Extensions/VK_AMD_rasterization_order.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_rasterization_order.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_rasterization_order  (PipelineRasterizationStateRasterizationOrderAMD) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PipelineRasterizationStateRasterizationOrderAMD
+
+instance ToCStruct PipelineRasterizationStateRasterizationOrderAMD
+instance Show PipelineRasterizationStateRasterizationOrderAMD
+
+instance FromCStruct PipelineRasterizationStateRasterizationOrderAMD
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_ballot.hs b/src/Vulkan/Extensions/VK_AMD_shader_ballot.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_ballot.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_ballot  ( AMD_SHADER_BALLOT_SPEC_VERSION
+                                               , pattern AMD_SHADER_BALLOT_SPEC_VERSION
+                                               , AMD_SHADER_BALLOT_EXTENSION_NAME
+                                               , pattern AMD_SHADER_BALLOT_EXTENSION_NAME
+                                               ) where
+
+import Data.String (IsString)
+
+type AMD_SHADER_BALLOT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_BALLOT_SPEC_VERSION"
+pattern AMD_SHADER_BALLOT_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_SHADER_BALLOT_SPEC_VERSION = 1
+
+
+type AMD_SHADER_BALLOT_EXTENSION_NAME = "VK_AMD_shader_ballot"
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_BALLOT_EXTENSION_NAME"
+pattern AMD_SHADER_BALLOT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_SHADER_BALLOT_EXTENSION_NAME = "VK_AMD_shader_ballot"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_core_properties.hs b/src/Vulkan/Extensions/VK_AMD_shader_core_properties.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_core_properties.hs
@@ -0,0 +1,198 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_core_properties  ( PhysicalDeviceShaderCorePropertiesAMD(..)
+                                                        , AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION
+                                                        , pattern AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION
+                                                        , AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME
+                                                        , pattern AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME
+                                                        ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD))
+-- | VkPhysicalDeviceShaderCorePropertiesAMD - Structure describing shader
+-- core properties that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceShaderCorePropertiesAMD' structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShaderCorePropertiesAMD' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderCorePropertiesAMD = PhysicalDeviceShaderCorePropertiesAMD
+  { -- | @shaderEngineCount@ is an unsigned integer value indicating the number
+    -- of shader engines found inside the shader core of the physical device.
+    shaderEngineCount :: Word32
+  , -- | @shaderArraysPerEngineCount@ is an unsigned integer value indicating the
+    -- number of shader arrays inside a shader engine. Each shader array has
+    -- its own scan converter, set of compute units, and a render back end
+    -- (color and depth buffers). Shader arrays within a shader engine share
+    -- shader processor input (wave launcher) and shader export (export buffer)
+    -- units. Currently, a shader engine can have one or two shader arrays.
+    shaderArraysPerEngineCount :: Word32
+  , -- | @computeUnitsPerShaderArray@ is an unsigned integer value indicating the
+    -- physical number of compute units within a shader array. The active
+    -- number of compute units in a shader array /may/ be lower. A compute unit
+    -- houses a set of SIMDs along with a sequencer module and a local data
+    -- store.
+    computeUnitsPerShaderArray :: Word32
+  , -- | @simdPerComputeUnit@ is an unsigned integer value indicating the number
+    -- of SIMDs inside a compute unit. Each SIMD processes a single instruction
+    -- at a time.
+    simdPerComputeUnit :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "wavefrontsPerSimd"
+    wavefrontsPerSimd :: Word32
+  , -- | @wavefrontSize@ is an unsigned integer value indicating the maximum size
+    -- of a subgroup.
+    wavefrontSize :: Word32
+  , -- | @sgprsPerSimd@ is an unsigned integer value indicating the number of
+    -- physical Scalar General Purpose Registers (SGPRs) per SIMD.
+    sgprsPerSimd :: Word32
+  , -- | @minSgprAllocation@ is an unsigned integer value indicating the minimum
+    -- number of SGPRs allocated for a wave.
+    minSgprAllocation :: Word32
+  , -- | @maxSgprAllocation@ is an unsigned integer value indicating the maximum
+    -- number of SGPRs allocated for a wave.
+    maxSgprAllocation :: Word32
+  , -- | @sgprAllocationGranularity@ is an unsigned integer value indicating the
+    -- granularity of SGPR allocation for a wave.
+    sgprAllocationGranularity :: Word32
+  , -- | @vgprsPerSimd@ is an unsigned integer value indicating the number of
+    -- physical Vector General Purpose Registers (VGPRs) per SIMD.
+    vgprsPerSimd :: Word32
+  , -- | @minVgprAllocation@ is an unsigned integer value indicating the minimum
+    -- number of VGPRs allocated for a wave.
+    minVgprAllocation :: Word32
+  , -- | @maxVgprAllocation@ is an unsigned integer value indicating the maximum
+    -- number of VGPRs allocated for a wave.
+    maxVgprAllocation :: Word32
+  , -- | @vgprAllocationGranularity@ is an unsigned integer value indicating the
+    -- granularity of VGPR allocation for a wave.
+    vgprAllocationGranularity :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderCorePropertiesAMD
+
+instance ToCStruct PhysicalDeviceShaderCorePropertiesAMD where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderCorePropertiesAMD{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (shaderEngineCount)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (shaderArraysPerEngineCount)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (computeUnitsPerShaderArray)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (simdPerComputeUnit)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (wavefrontsPerSimd)
+    poke ((p `plusPtr` 36 :: Ptr Word32)) (wavefrontSize)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (sgprsPerSimd)
+    poke ((p `plusPtr` 44 :: Ptr Word32)) (minSgprAllocation)
+    poke ((p `plusPtr` 48 :: Ptr Word32)) (maxSgprAllocation)
+    poke ((p `plusPtr` 52 :: Ptr Word32)) (sgprAllocationGranularity)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (vgprsPerSimd)
+    poke ((p `plusPtr` 60 :: Ptr Word32)) (minVgprAllocation)
+    poke ((p `plusPtr` 64 :: Ptr Word32)) (maxVgprAllocation)
+    poke ((p `plusPtr` 68 :: Ptr Word32)) (vgprAllocationGranularity)
+    f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 60 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 68 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceShaderCorePropertiesAMD where
+  peekCStruct p = do
+    shaderEngineCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    shaderArraysPerEngineCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    computeUnitsPerShaderArray <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    simdPerComputeUnit <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    wavefrontsPerSimd <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    wavefrontSize <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
+    sgprsPerSimd <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    minSgprAllocation <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
+    maxSgprAllocation <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    sgprAllocationGranularity <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
+    vgprsPerSimd <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    minVgprAllocation <- peek @Word32 ((p `plusPtr` 60 :: Ptr Word32))
+    maxVgprAllocation <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    vgprAllocationGranularity <- peek @Word32 ((p `plusPtr` 68 :: Ptr Word32))
+    pure $ PhysicalDeviceShaderCorePropertiesAMD
+             shaderEngineCount shaderArraysPerEngineCount computeUnitsPerShaderArray simdPerComputeUnit wavefrontsPerSimd wavefrontSize sgprsPerSimd minSgprAllocation maxSgprAllocation sgprAllocationGranularity vgprsPerSimd minVgprAllocation maxVgprAllocation vgprAllocationGranularity
+
+instance Storable PhysicalDeviceShaderCorePropertiesAMD where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderCorePropertiesAMD where
+  zero = PhysicalDeviceShaderCorePropertiesAMD
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+type AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION"
+pattern AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION = 2
+
+
+type AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME = "VK_AMD_shader_core_properties"
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME"
+pattern AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME = "VK_AMD_shader_core_properties"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_core_properties.hs-boot b/src/Vulkan/Extensions/VK_AMD_shader_core_properties.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_core_properties.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_core_properties  (PhysicalDeviceShaderCorePropertiesAMD) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderCorePropertiesAMD
+
+instance ToCStruct PhysicalDeviceShaderCorePropertiesAMD
+instance Show PhysicalDeviceShaderCorePropertiesAMD
+
+instance FromCStruct PhysicalDeviceShaderCorePropertiesAMD
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs b/src/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs
@@ -0,0 +1,150 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_core_properties2  ( PhysicalDeviceShaderCoreProperties2AMD(..)
+                                                         , ShaderCorePropertiesFlagBitsAMD(..)
+                                                         , ShaderCorePropertiesFlagsAMD
+                                                         , AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION
+                                                         , pattern AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION
+                                                         , AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME
+                                                         , pattern AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME
+                                                         ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD))
+-- | VkPhysicalDeviceShaderCoreProperties2AMD - Structure describing shader
+-- core properties that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceShaderCoreProperties2AMD' structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShaderCoreProperties2AMD' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'ShaderCorePropertiesFlagsAMD',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderCoreProperties2AMD = PhysicalDeviceShaderCoreProperties2AMD
+  { -- | @shaderCoreFeatures@ is a bitmask of 'ShaderCorePropertiesFlagBitsAMD'
+    -- indicating the set of features supported by the shader core.
+    shaderCoreFeatures :: ShaderCorePropertiesFlagsAMD
+  , -- | @activeComputeUnitCount@ is an unsigned integer value indicating the
+    -- number of compute units that have been enabled.
+    activeComputeUnitCount :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderCoreProperties2AMD
+
+instance ToCStruct PhysicalDeviceShaderCoreProperties2AMD where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderCoreProperties2AMD{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ShaderCorePropertiesFlagsAMD)) (shaderCoreFeatures)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (activeComputeUnitCount)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ShaderCorePropertiesFlagsAMD)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceShaderCoreProperties2AMD where
+  peekCStruct p = do
+    shaderCoreFeatures <- peek @ShaderCorePropertiesFlagsAMD ((p `plusPtr` 16 :: Ptr ShaderCorePropertiesFlagsAMD))
+    activeComputeUnitCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pure $ PhysicalDeviceShaderCoreProperties2AMD
+             shaderCoreFeatures activeComputeUnitCount
+
+instance Storable PhysicalDeviceShaderCoreProperties2AMD where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderCoreProperties2AMD where
+  zero = PhysicalDeviceShaderCoreProperties2AMD
+           zero
+           zero
+
+
+-- | VkShaderCorePropertiesFlagBitsAMD - Bitmask specifying shader core
+-- properties
+--
+-- = See Also
+--
+-- 'PhysicalDeviceShaderCoreProperties2AMD', 'ShaderCorePropertiesFlagsAMD'
+newtype ShaderCorePropertiesFlagBitsAMD = ShaderCorePropertiesFlagBitsAMD Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+type ShaderCorePropertiesFlagsAMD = ShaderCorePropertiesFlagBitsAMD
+
+instance Show ShaderCorePropertiesFlagBitsAMD where
+  showsPrec p = \case
+    ShaderCorePropertiesFlagBitsAMD x -> showParen (p >= 11) (showString "ShaderCorePropertiesFlagBitsAMD 0x" . showHex x)
+
+instance Read ShaderCorePropertiesFlagBitsAMD where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ShaderCorePropertiesFlagBitsAMD")
+                       v <- step readPrec
+                       pure (ShaderCorePropertiesFlagBitsAMD v)))
+
+
+type AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION"
+pattern AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION = 1
+
+
+type AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME = "VK_AMD_shader_core_properties2"
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME"
+pattern AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME = "VK_AMD_shader_core_properties2"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs-boot b/src/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_core_properties2  (PhysicalDeviceShaderCoreProperties2AMD) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderCoreProperties2AMD
+
+instance ToCStruct PhysicalDeviceShaderCoreProperties2AMD
+instance Show PhysicalDeviceShaderCoreProperties2AMD
+
+instance FromCStruct PhysicalDeviceShaderCoreProperties2AMD
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_explicit_vertex_parameter.hs b/src/Vulkan/Extensions/VK_AMD_shader_explicit_vertex_parameter.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_explicit_vertex_parameter.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter  ( AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION
+                                                                  , pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION
+                                                                  , AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME
+                                                                  , pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME
+                                                                  ) where
+
+import Data.String (IsString)
+
+type AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION"
+pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION = 1
+
+
+type AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME = "VK_AMD_shader_explicit_vertex_parameter"
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME"
+pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME = "VK_AMD_shader_explicit_vertex_parameter"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_fragment_mask.hs b/src/Vulkan/Extensions/VK_AMD_shader_fragment_mask.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_fragment_mask.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_fragment_mask  ( AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION
+                                                      , pattern AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION
+                                                      , AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME
+                                                      , pattern AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME
+                                                      ) where
+
+import Data.String (IsString)
+
+type AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION"
+pattern AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION = 1
+
+
+type AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME = "VK_AMD_shader_fragment_mask"
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME"
+pattern AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME = "VK_AMD_shader_fragment_mask"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_image_load_store_lod.hs b/src/Vulkan/Extensions/VK_AMD_shader_image_load_store_lod.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_image_load_store_lod.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_image_load_store_lod  ( AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION
+                                                             , pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION
+                                                             , AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME
+                                                             , pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME
+                                                             ) where
+
+import Data.String (IsString)
+
+type AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION"
+pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION = 1
+
+
+type AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME = "VK_AMD_shader_image_load_store_lod"
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME"
+pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME = "VK_AMD_shader_image_load_store_lod"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_info.hs b/src/Vulkan/Extensions/VK_AMD_shader_info.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_info.hs
@@ -0,0 +1,435 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_info  ( getShaderInfoAMD
+                                             , ShaderResourceUsageAMD(..)
+                                             , ShaderStatisticsInfoAMD(..)
+                                             , ShaderInfoTypeAMD( SHADER_INFO_TYPE_STATISTICS_AMD
+                                                                , SHADER_INFO_TYPE_BINARY_AMD
+                                                                , SHADER_INFO_TYPE_DISASSEMBLY_AMD
+                                                                , ..
+                                                                )
+                                             , AMD_SHADER_INFO_SPEC_VERSION
+                                             , pattern AMD_SHADER_INFO_SPEC_VERSION
+                                             , AMD_SHADER_INFO_EXTENSION_NAME
+                                             , pattern AMD_SHADER_INFO_EXTENSION_NAME
+                                             ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.ByteString (packCStringLen)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Foreign.C.Types (CSize(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetShaderInfoAMD))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Pipeline)
+import Vulkan.Core10.Handles (Pipeline(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(..))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetShaderInfoAMD
+  :: FunPtr (Ptr Device_T -> Pipeline -> ShaderStageFlagBits -> ShaderInfoTypeAMD -> Ptr CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> ShaderStageFlagBits -> ShaderInfoTypeAMD -> Ptr CSize -> Ptr () -> IO Result
+
+-- | vkGetShaderInfoAMD - Get information about a shader in a pipeline
+--
+-- = 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
+--
+-- 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 'getShaderInfoAMD' will return
+-- 'Vulkan.Core10.Enums.Result.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
+-- 'Vulkan.Core10.Enums.Result.ERROR_FEATURE_NOT_PRESENT'.
+--
+-- If information is successfully and fully queried, the function will
+-- return 'Vulkan.Core10.Enums.Result.SUCCESS'.
+--
+-- For @infoType@ 'SHADER_INFO_TYPE_STATISTICS_AMD', a
+-- 'ShaderStatisticsInfoAMD' structure 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 @infoType@ 'SHADER_INFO_TYPE_DISASSEMBLY_AMD', @pInfo@ is a pointer
+-- 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
+-- @infoType@ '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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
+--
+-- -   @shaderStage@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value
+--
+-- -   @infoType@ /must/ be a valid 'ShaderInfoTypeAMD' 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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_FEATURE_NOT_PRESENT'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline',
+-- 'ShaderInfoTypeAMD',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'
+getShaderInfoAMD :: forall io . MonadIO io => Device -> Pipeline -> ShaderStageFlagBits -> ShaderInfoTypeAMD -> io (Result, ("info" ::: ByteString))
+getShaderInfoAMD device pipeline shaderStage infoType = liftIO . evalContT $ do
+  let vkGetShaderInfoAMDPtr = pVkGetShaderInfoAMD (deviceCmds (device :: Device))
+  lift $ unless (vkGetShaderInfoAMDPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetShaderInfoAMD is null" Nothing Nothing
+  let vkGetShaderInfoAMD' = mkVkGetShaderInfoAMD vkGetShaderInfoAMDPtr
+  let device' = deviceHandle (device)
+  pPInfoSize <- ContT $ bracket (callocBytes @CSize 8) free
+  r <- lift $ vkGetShaderInfoAMD' device' (pipeline) (shaderStage) (infoType) (pPInfoSize) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pInfoSize <- lift $ peek @CSize pPInfoSize
+  pPInfo <- ContT $ bracket (callocBytes @(()) (fromIntegral (((\(CSize a) -> a) pInfoSize)))) free
+  r' <- lift $ vkGetShaderInfoAMD' device' (pipeline) (shaderStage) (infoType) (pPInfoSize) (pPInfo)
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pInfoSize'' <- lift $ peek @CSize pPInfoSize
+  pInfo' <- lift $ packCStringLen  (castPtr @() @CChar pPInfo, (fromIntegral (((\(CSize a) -> a) pInfoSize''))))
+  pure $ ((r'), pInfo')
+
+
+-- | VkShaderResourceUsageAMD - Resource usage information about a particular
+-- shader within a pipeline
+--
+-- = See Also
+--
+-- 'ShaderStatisticsInfoAMD'
+data ShaderResourceUsageAMD = ShaderResourceUsageAMD
+  { -- | @numUsedVgprs@ is the number of vector instruction general-purpose
+    -- registers used by this shader.
+    numUsedVgprs :: Word32
+  , -- | @numUsedSgprs@ is the number of scalar instruction general-purpose
+    -- registers used by this shader.
+    numUsedSgprs :: Word32
+  , -- | @ldsSizePerLocalWorkGroup@ is the maximum local data store size per work
+    -- group in bytes.
+    ldsSizePerLocalWorkGroup :: Word32
+  , -- | @ldsUsageSizeInBytes@ is the LDS usage size in bytes per work group by
+    -- this shader.
+    ldsUsageSizeInBytes :: Word64
+  , -- | @scratchMemUsageInBytes@ is the scratch memory usage in bytes by this
+    -- shader.
+    scratchMemUsageInBytes :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show ShaderResourceUsageAMD
+
+instance ToCStruct ShaderResourceUsageAMD where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ShaderResourceUsageAMD{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (numUsedVgprs)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (numUsedSgprs)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (ldsSizePerLocalWorkGroup)
+    poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (ldsUsageSizeInBytes))
+    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (scratchMemUsageInBytes))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (zero))
+    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (zero))
+    f
+
+instance FromCStruct ShaderResourceUsageAMD where
+  peekCStruct p = do
+    numUsedVgprs <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    numUsedSgprs <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    ldsSizePerLocalWorkGroup <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    ldsUsageSizeInBytes <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))
+    scratchMemUsageInBytes <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
+    pure $ ShaderResourceUsageAMD
+             numUsedVgprs numUsedSgprs ldsSizePerLocalWorkGroup ((\(CSize a) -> a) ldsUsageSizeInBytes) ((\(CSize a) -> a) scratchMemUsageInBytes)
+
+instance Storable ShaderResourceUsageAMD where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ShaderResourceUsageAMD where
+  zero = ShaderResourceUsageAMD
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkShaderStatisticsInfoAMD - Statistical information about a particular
+-- shader within a pipeline
+--
+-- = 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 'getShaderInfoAMD',
+-- 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
+--
+-- 'ShaderResourceUsageAMD',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'
+data ShaderStatisticsInfoAMD = ShaderStatisticsInfoAMD
+  { -- | @shaderStageMask@ are the combination of logical shader stages contained
+    -- within this shader.
+    shaderStageMask :: ShaderStageFlags
+  , -- | @resourceUsage@ is a 'ShaderResourceUsageAMD' structure describing
+    -- internal physical device resources used by this shader.
+    resourceUsage :: ShaderResourceUsageAMD
+  , -- | @numPhysicalVgprs@ is the maximum number of vector instruction
+    -- general-purpose registers (VGPRs) available to the physical device.
+    numPhysicalVgprs :: Word32
+  , -- | @numPhysicalSgprs@ is the maximum number of scalar instruction
+    -- general-purpose registers (SGPRs) available to the physical device.
+    numPhysicalSgprs :: Word32
+  , -- | @numAvailableVgprs@ is the maximum limit of VGPRs made available to the
+    -- shader compiler.
+    numAvailableVgprs :: Word32
+  , -- | @numAvailableSgprs@ is the maximum limit of SGPRs made available to the
+    -- shader compiler.
+    numAvailableSgprs :: Word32
+  , -- | @computeWorkGroupSize@ is the local workgroup size of this shader in {
+    -- X, Y, Z } dimensions.
+    computeWorkGroupSize :: (Word32, Word32, Word32)
+  }
+  deriving (Typeable)
+deriving instance Show ShaderStatisticsInfoAMD
+
+instance ToCStruct ShaderStatisticsInfoAMD where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ShaderStatisticsInfoAMD{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr ShaderStageFlags)) (shaderStageMask)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr ShaderResourceUsageAMD)) (resourceUsage) . ($ ())
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (numPhysicalVgprs)
+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (numPhysicalSgprs)
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (numAvailableVgprs)
+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (numAvailableSgprs)
+    let pComputeWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 3 Word32)))
+    lift $ case (computeWorkGroupSize) of
+      (e0, e1, e2) -> do
+        poke (pComputeWorkGroupSize' :: Ptr Word32) (e0)
+        poke (pComputeWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
+        poke (pComputeWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr ShaderStageFlags)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr ShaderResourceUsageAMD)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
+    let pComputeWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 3 Word32)))
+    lift $ case ((zero, zero, zero)) of
+      (e0, e1, e2) -> do
+        poke (pComputeWorkGroupSize' :: Ptr Word32) (e0)
+        poke (pComputeWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
+        poke (pComputeWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
+    lift $ f
+
+instance FromCStruct ShaderStatisticsInfoAMD where
+  peekCStruct p = do
+    shaderStageMask <- peek @ShaderStageFlags ((p `plusPtr` 0 :: Ptr ShaderStageFlags))
+    resourceUsage <- peekCStruct @ShaderResourceUsageAMD ((p `plusPtr` 8 :: Ptr ShaderResourceUsageAMD))
+    numPhysicalVgprs <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    numPhysicalSgprs <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
+    numAvailableVgprs <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    numAvailableSgprs <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
+    let pcomputeWorkGroupSize = lowerArrayPtr @Word32 ((p `plusPtr` 56 :: Ptr (FixedArray 3 Word32)))
+    computeWorkGroupSize0 <- peek @Word32 ((pcomputeWorkGroupSize `advancePtrBytes` 0 :: Ptr Word32))
+    computeWorkGroupSize1 <- peek @Word32 ((pcomputeWorkGroupSize `advancePtrBytes` 4 :: Ptr Word32))
+    computeWorkGroupSize2 <- peek @Word32 ((pcomputeWorkGroupSize `advancePtrBytes` 8 :: Ptr Word32))
+    pure $ ShaderStatisticsInfoAMD
+             shaderStageMask resourceUsage numPhysicalVgprs numPhysicalSgprs numAvailableVgprs numAvailableSgprs ((computeWorkGroupSize0, computeWorkGroupSize1, computeWorkGroupSize2))
+
+instance Zero ShaderStatisticsInfoAMD where
+  zero = ShaderStatisticsInfoAMD
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           (zero, zero, zero)
+
+
+-- | VkShaderInfoTypeAMD - Enum specifying which type of shader info to query
+--
+-- = See Also
+--
+-- 'getShaderInfoAMD'
+newtype ShaderInfoTypeAMD = ShaderInfoTypeAMD Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'SHADER_INFO_TYPE_STATISTICS_AMD' specifies that device resources used
+-- by a shader will be queried.
+pattern SHADER_INFO_TYPE_STATISTICS_AMD = ShaderInfoTypeAMD 0
+-- | 'SHADER_INFO_TYPE_BINARY_AMD' specifies that implementation-specific
+-- information will be queried.
+pattern SHADER_INFO_TYPE_BINARY_AMD = ShaderInfoTypeAMD 1
+-- | 'SHADER_INFO_TYPE_DISASSEMBLY_AMD' specifies that human-readable
+-- dissassembly of a shader.
+pattern SHADER_INFO_TYPE_DISASSEMBLY_AMD = ShaderInfoTypeAMD 2
+{-# complete SHADER_INFO_TYPE_STATISTICS_AMD,
+             SHADER_INFO_TYPE_BINARY_AMD,
+             SHADER_INFO_TYPE_DISASSEMBLY_AMD :: ShaderInfoTypeAMD #-}
+
+instance Show ShaderInfoTypeAMD where
+  showsPrec p = \case
+    SHADER_INFO_TYPE_STATISTICS_AMD -> showString "SHADER_INFO_TYPE_STATISTICS_AMD"
+    SHADER_INFO_TYPE_BINARY_AMD -> showString "SHADER_INFO_TYPE_BINARY_AMD"
+    SHADER_INFO_TYPE_DISASSEMBLY_AMD -> showString "SHADER_INFO_TYPE_DISASSEMBLY_AMD"
+    ShaderInfoTypeAMD x -> showParen (p >= 11) (showString "ShaderInfoTypeAMD " . showsPrec 11 x)
+
+instance Read ShaderInfoTypeAMD where
+  readPrec = parens (choose [("SHADER_INFO_TYPE_STATISTICS_AMD", pure SHADER_INFO_TYPE_STATISTICS_AMD)
+                            , ("SHADER_INFO_TYPE_BINARY_AMD", pure SHADER_INFO_TYPE_BINARY_AMD)
+                            , ("SHADER_INFO_TYPE_DISASSEMBLY_AMD", pure SHADER_INFO_TYPE_DISASSEMBLY_AMD)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ShaderInfoTypeAMD")
+                       v <- step readPrec
+                       pure (ShaderInfoTypeAMD v)))
+
+
+type AMD_SHADER_INFO_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_INFO_SPEC_VERSION"
+pattern AMD_SHADER_INFO_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_SHADER_INFO_SPEC_VERSION = 1
+
+
+type AMD_SHADER_INFO_EXTENSION_NAME = "VK_AMD_shader_info"
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_INFO_EXTENSION_NAME"
+pattern AMD_SHADER_INFO_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_SHADER_INFO_EXTENSION_NAME = "VK_AMD_shader_info"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_info.hs-boot b/src/Vulkan/Extensions/VK_AMD_shader_info.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_info.hs-boot
@@ -0,0 +1,27 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_info  ( ShaderResourceUsageAMD
+                                             , ShaderStatisticsInfoAMD
+                                             , ShaderInfoTypeAMD
+                                             ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ShaderResourceUsageAMD
+
+instance ToCStruct ShaderResourceUsageAMD
+instance Show ShaderResourceUsageAMD
+
+instance FromCStruct ShaderResourceUsageAMD
+
+
+data ShaderStatisticsInfoAMD
+
+instance ToCStruct ShaderStatisticsInfoAMD
+instance Show ShaderStatisticsInfoAMD
+
+instance FromCStruct ShaderStatisticsInfoAMD
+
+
+data ShaderInfoTypeAMD
+
diff --git a/src/Vulkan/Extensions/VK_AMD_shader_trinary_minmax.hs b/src/Vulkan/Extensions/VK_AMD_shader_trinary_minmax.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_shader_trinary_minmax.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_shader_trinary_minmax  ( AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION
+                                                       , pattern AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION
+                                                       , AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME
+                                                       , pattern AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME
+                                                       ) where
+
+import Data.String (IsString)
+
+type AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION"
+pattern AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION = 1
+
+
+type AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME = "VK_AMD_shader_trinary_minmax"
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME"
+pattern AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME = "VK_AMD_shader_trinary_minmax"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs b/src/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs
@@ -0,0 +1,93 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_texture_gather_bias_lod  ( TextureLODGatherFormatPropertiesAMD(..)
+                                                         , AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION
+                                                         , pattern AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION
+                                                         , AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME
+                                                         , pattern AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME
+                                                         ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD))
+-- | VkTextureLODGatherFormatPropertiesAMD - Structure informing whether or
+-- not texture gather bias\/LOD functionality is supported for a given
+-- image format and a given physical device.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data TextureLODGatherFormatPropertiesAMD = TextureLODGatherFormatPropertiesAMD
+  { -- | @supportsTextureGatherLODBiasAMD@ tells if the image format can be used
+    -- with texture gather bias\/LOD functions, as introduced by the
+    -- @VK_AMD_texture_gather_bias_lod@ extension. This field is set by the
+    -- implementation. User-specified value is ignored.
+    supportsTextureGatherLODBiasAMD :: Bool }
+  deriving (Typeable)
+deriving instance Show TextureLODGatherFormatPropertiesAMD
+
+instance ToCStruct TextureLODGatherFormatPropertiesAMD where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p TextureLODGatherFormatPropertiesAMD{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (supportsTextureGatherLODBiasAMD))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct TextureLODGatherFormatPropertiesAMD where
+  peekCStruct p = do
+    supportsTextureGatherLODBiasAMD <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ TextureLODGatherFormatPropertiesAMD
+             (bool32ToBool supportsTextureGatherLODBiasAMD)
+
+instance Storable TextureLODGatherFormatPropertiesAMD where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero TextureLODGatherFormatPropertiesAMD where
+  zero = TextureLODGatherFormatPropertiesAMD
+           zero
+
+
+type AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION"
+pattern AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION :: forall a . Integral a => a
+pattern AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION = 1
+
+
+type AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME = "VK_AMD_texture_gather_bias_lod"
+
+-- No documentation found for TopLevel "VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME"
+pattern AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME = "VK_AMD_texture_gather_bias_lod"
+
diff --git a/src/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs-boot b/src/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_AMD_texture_gather_bias_lod  (TextureLODGatherFormatPropertiesAMD) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data TextureLODGatherFormatPropertiesAMD
+
+instance ToCStruct TextureLODGatherFormatPropertiesAMD
+instance Show TextureLODGatherFormatPropertiesAMD
+
+instance FromCStruct TextureLODGatherFormatPropertiesAMD
+
diff --git a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
@@ -0,0 +1,739 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer  ( getAndroidHardwareBufferPropertiesANDROID
+                                                                             , getMemoryAndroidHardwareBufferANDROID
+                                                                             , ImportAndroidHardwareBufferInfoANDROID(..)
+                                                                             , AndroidHardwareBufferUsageANDROID(..)
+                                                                             , AndroidHardwareBufferPropertiesANDROID(..)
+                                                                             , MemoryGetAndroidHardwareBufferInfoANDROID(..)
+                                                                             , AndroidHardwareBufferFormatPropertiesANDROID(..)
+                                                                             , ExternalFormatANDROID(..)
+                                                                             , ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION
+                                                                             , pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION
+                                                                             , ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME
+                                                                             , pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME
+                                                                             , AHardwareBuffer
+                                                                             ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Extensions.WSITypes (AHardwareBuffer)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core11.Enums.ChromaLocation (ChromaLocation)
+import Vulkan.Core10.ImageView (ComponentMapping)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetAndroidHardwareBufferPropertiesANDROID))
+import Vulkan.Dynamic (DeviceCmds(pVkGetMemoryAndroidHardwareBufferANDROID))
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion)
+import Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (AHardwareBuffer)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetAndroidHardwareBufferPropertiesANDROID
+  :: FunPtr (Ptr Device_T -> Ptr AHardwareBuffer -> Ptr (AndroidHardwareBufferPropertiesANDROID a) -> IO Result) -> Ptr Device_T -> Ptr AHardwareBuffer -> Ptr (AndroidHardwareBufferPropertiesANDROID a) -> IO Result
+
+-- | vkGetAndroidHardwareBufferPropertiesANDROID - Get Properties of External
+-- Memory Android Hardware Buffers
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that will be importing @buffer@.
+--
+-- -   @buffer@ is the Android hardware buffer which will be imported.
+--
+-- -   @pProperties@ is a pointer to a
+--     'AndroidHardwareBufferPropertiesANDROID' structure in which the
+--     properties of @buffer@ are returned.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Extensions.VK_KHR_external_memory.ERROR_INVALID_EXTERNAL_HANDLE_KHR'
+--
+-- = See Also
+--
+-- 'AndroidHardwareBufferPropertiesANDROID', 'Vulkan.Core10.Handles.Device'
+getAndroidHardwareBufferPropertiesANDROID :: forall a io . (Extendss AndroidHardwareBufferPropertiesANDROID a, PokeChain a, PeekChain a, MonadIO io) => Device -> Ptr AHardwareBuffer -> io (AndroidHardwareBufferPropertiesANDROID a)
+getAndroidHardwareBufferPropertiesANDROID device buffer = liftIO . evalContT $ do
+  let vkGetAndroidHardwareBufferPropertiesANDROIDPtr = pVkGetAndroidHardwareBufferPropertiesANDROID (deviceCmds (device :: Device))
+  lift $ unless (vkGetAndroidHardwareBufferPropertiesANDROIDPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetAndroidHardwareBufferPropertiesANDROID is null" Nothing Nothing
+  let vkGetAndroidHardwareBufferPropertiesANDROID' = mkVkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROIDPtr
+  pPProperties <- ContT (withZeroCStruct @(AndroidHardwareBufferPropertiesANDROID _))
+  r <- lift $ vkGetAndroidHardwareBufferPropertiesANDROID' (deviceHandle (device)) (buffer) (pPProperties)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pProperties <- lift $ peekCStruct @(AndroidHardwareBufferPropertiesANDROID _) pPProperties
+  pure $ (pProperties)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetMemoryAndroidHardwareBufferANDROID
+  :: FunPtr (Ptr Device_T -> Ptr MemoryGetAndroidHardwareBufferInfoANDROID -> Ptr (Ptr AHardwareBuffer) -> IO Result) -> Ptr Device_T -> Ptr MemoryGetAndroidHardwareBufferInfoANDROID -> Ptr (Ptr AHardwareBuffer) -> IO Result
+
+-- | vkGetMemoryAndroidHardwareBufferANDROID - Get an Android hardware buffer
+-- for a memory object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the device memory being
+--     exported.
+--
+-- -   @pInfo@ is a pointer to a
+--     'MemoryGetAndroidHardwareBufferInfoANDROID' structure containing
+--     parameters of the export operation.
+--
+-- -   @pBuffer@ will return an Android hardware buffer representing the
+--     underlying resources of the device memory object.
+--
+-- = Description
+--
+-- Each call to 'getMemoryAndroidHardwareBufferANDROID' /must/ return an
+-- Android hardware buffer with a new reference acquired in addition to the
+-- reference held by the 'Vulkan.Core10.Handles.DeviceMemory'. 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
+-- 'MemoryGetAndroidHardwareBufferInfoANDROID'::@memory@,
+-- 'getMemoryAndroidHardwareBufferANDROID' /must/ return the same Android
+-- hardware buffer object. If the device memory was created by importing an
+-- Android hardware buffer, 'getMemoryAndroidHardwareBufferANDROID' /must/
+-- return that same Android hardware buffer object.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'MemoryGetAndroidHardwareBufferInfoANDROID'
+getMemoryAndroidHardwareBufferANDROID :: forall io . MonadIO io => Device -> MemoryGetAndroidHardwareBufferInfoANDROID -> io (Ptr AHardwareBuffer)
+getMemoryAndroidHardwareBufferANDROID device info = liftIO . evalContT $ do
+  let vkGetMemoryAndroidHardwareBufferANDROIDPtr = pVkGetMemoryAndroidHardwareBufferANDROID (deviceCmds (device :: Device))
+  lift $ unless (vkGetMemoryAndroidHardwareBufferANDROIDPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetMemoryAndroidHardwareBufferANDROID is null" Nothing Nothing
+  let vkGetMemoryAndroidHardwareBufferANDROID' = mkVkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROIDPtr
+  pInfo <- ContT $ withCStruct (info)
+  pPBuffer <- ContT $ bracket (callocBytes @(Ptr AHardwareBuffer) 8) free
+  r <- lift $ vkGetMemoryAndroidHardwareBufferANDROID' (deviceHandle (device)) pInfo (pPBuffer)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pBuffer <- lift $ peek @(Ptr AHardwareBuffer) pPBuffer
+  pure $ (pBuffer)
+
+
+-- | VkImportAndroidHardwareBufferInfoANDROID - Import memory from an Android
+-- hardware buffer
+--
+-- = Description
+--
+-- If the 'Vulkan.Core10.Memory.allocateMemory' 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
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'
+--
+-- -   If @buffer@ is not @NULL@, it /must/ be a valid Android hardware
+--     buffer object with @AHardwareBuffer_Desc@::@format@ and
+--     @AHardwareBuffer_Desc@::@usage@ compatible with Vulkan as described
+--     in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer Android Hardware Buffers>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID'
+--
+-- -   @buffer@ /must/ be a valid pointer to an
+--     'Vulkan.Extensions.WSITypes.AHardwareBuffer' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImportAndroidHardwareBufferInfoANDROID = ImportAndroidHardwareBufferInfoANDROID
+  { -- | @buffer@ is the Android hardware buffer to import.
+    buffer :: Ptr AHardwareBuffer }
+  deriving (Typeable)
+deriving instance Show ImportAndroidHardwareBufferInfoANDROID
+
+instance ToCStruct ImportAndroidHardwareBufferInfoANDROID where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImportAndroidHardwareBufferInfoANDROID{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr (Ptr AHardwareBuffer))) (buffer)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr (Ptr AHardwareBuffer))) (zero)
+    f
+
+instance FromCStruct ImportAndroidHardwareBufferInfoANDROID where
+  peekCStruct p = do
+    buffer <- peek @(Ptr AHardwareBuffer) ((p `plusPtr` 16 :: Ptr (Ptr AHardwareBuffer)))
+    pure $ ImportAndroidHardwareBufferInfoANDROID
+             buffer
+
+instance Storable ImportAndroidHardwareBufferInfoANDROID where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImportAndroidHardwareBufferInfoANDROID where
+  zero = ImportAndroidHardwareBufferInfoANDROID
+           zero
+
+
+-- | VkAndroidHardwareBufferUsageANDROID - Struct containing Android hardware
+-- buffer usage flags
+--
+-- = Description
+--
+-- The @androidHardwareBufferUsage@ field /must/ include Android hardware
+-- buffer usage flags listed in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'.
+-- 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 does not 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
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2'
+-- are required.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AndroidHardwareBufferUsageANDROID = AndroidHardwareBufferUsageANDROID
+  { -- | @androidHardwareBufferUsage@ returns the Android hardware buffer usage
+    -- flags.
+    androidHardwareBufferUsage :: Word64 }
+  deriving (Typeable)
+deriving instance Show AndroidHardwareBufferUsageANDROID
+
+instance ToCStruct AndroidHardwareBufferUsageANDROID where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AndroidHardwareBufferUsageANDROID{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (androidHardwareBufferUsage)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct AndroidHardwareBufferUsageANDROID where
+  peekCStruct p = do
+    androidHardwareBufferUsage <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
+    pure $ AndroidHardwareBufferUsageANDROID
+             androidHardwareBufferUsage
+
+instance Storable AndroidHardwareBufferUsageANDROID where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AndroidHardwareBufferUsageANDROID where
+  zero = AndroidHardwareBufferUsageANDROID
+           zero
+
+
+-- | VkAndroidHardwareBufferPropertiesANDROID - Properties of External Memory
+-- Android Hardware Buffers
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'AndroidHardwareBufferFormatPropertiesANDROID'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getAndroidHardwareBufferPropertiesANDROID'
+data AndroidHardwareBufferPropertiesANDROID (es :: [Type]) = AndroidHardwareBufferPropertiesANDROID
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @allocationSize@ is the size of the external memory
+    allocationSize :: DeviceSize
+  , -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
+    -- type which the specified Android hardware buffer /can/ be imported as.
+    memoryTypeBits :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (AndroidHardwareBufferPropertiesANDROID es)
+
+instance Extensible AndroidHardwareBufferPropertiesANDROID where
+  extensibleType = STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID
+  setNext x next = x{next = next}
+  getNext AndroidHardwareBufferPropertiesANDROID{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AndroidHardwareBufferPropertiesANDROID e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @AndroidHardwareBufferFormatPropertiesANDROID = Just f
+    | otherwise = Nothing
+
+instance (Extendss AndroidHardwareBufferPropertiesANDROID es, PokeChain es) => ToCStruct (AndroidHardwareBufferPropertiesANDROID es) where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AndroidHardwareBufferPropertiesANDROID{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (allocationSize)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (memoryTypeBits)
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance (Extendss AndroidHardwareBufferPropertiesANDROID es, PeekChain es) => FromCStruct (AndroidHardwareBufferPropertiesANDROID es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    allocationSize <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    memoryTypeBits <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ AndroidHardwareBufferPropertiesANDROID
+             next allocationSize memoryTypeBits
+
+instance es ~ '[] => Zero (AndroidHardwareBufferPropertiesANDROID es) where
+  zero = AndroidHardwareBufferPropertiesANDROID
+           ()
+           zero
+           zero
+
+
+-- | VkMemoryGetAndroidHardwareBufferInfoANDROID - Structure describing an
+-- Android hardware buffer memory export operation
+--
+-- == Valid Usage
+--
+-- -   'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
+--     /must/ have been included in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+--     when @memory@ was created
+--
+-- -   If the @pNext@ chain of the
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' used to allocate @memory@
+--     included a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'
+--     with non-@NULL@ @image@ member, then that @image@ /must/ already be
+--     bound to @memory@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getMemoryAndroidHardwareBufferANDROID'
+data MemoryGetAndroidHardwareBufferInfoANDROID = MemoryGetAndroidHardwareBufferInfoANDROID
+  { -- | @memory@ is the memory object from which the Android hardware buffer
+    -- will be exported.
+    memory :: DeviceMemory }
+  deriving (Typeable)
+deriving instance Show MemoryGetAndroidHardwareBufferInfoANDROID
+
+instance ToCStruct MemoryGetAndroidHardwareBufferInfoANDROID where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryGetAndroidHardwareBufferInfoANDROID{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
+    f
+
+instance FromCStruct MemoryGetAndroidHardwareBufferInfoANDROID where
+  peekCStruct p = do
+    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
+    pure $ MemoryGetAndroidHardwareBufferInfoANDROID
+             memory
+
+instance Storable MemoryGetAndroidHardwareBufferInfoANDROID where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryGetAndroidHardwareBufferInfoANDROID where
+  zero = MemoryGetAndroidHardwareBufferInfoANDROID
+           zero
+
+
+-- | VkAndroidHardwareBufferFormatPropertiesANDROID - Structure describing
+-- the image format properties of an Android hardware buffer
+--
+-- = Description
+--
+-- If the Android hardware buffer has one of the formats listed in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', indicating the Android
+-- hardware buffer /can/ only be used with an external format.
+--
+-- The @formatFeatures@ member /must/ include
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT'
+-- and at least one of
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT'
+-- or
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT',
+-- and /should/ include
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+-- and
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT'.
+--
+-- Note
+--
+-- The @formatFeatures@ member only indicates the features available when
+-- using an
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external-format image>
+-- created from the Android hardware buffer. Images from Android hardware
+-- buffers with a format other than
+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' are subject to the format
+-- capabilities obtained from
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2',
+-- and
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+-- with appropriate parameters. These sets of features are independent of
+-- each other, e.g. the external format will support sampler Y′CBCR
+-- conversion even if the non-external format does not, and writing to
+-- non-external format images is possible but writing to external format
+-- images is not.
+--
+-- Android hardware buffers with the same external format /must/ have the
+-- same support for
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT',
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT',
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT',
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT',
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT',
+-- and
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT'.
+-- in @formatFeatures@. Other format features /may/ differ between Android
+-- hardware buffers that have the same external format. This allows
+-- applications to use the same
+-- 'Vulkan.Core11.Handles.SamplerYcbcrConversion' object (and samplers and
+-- pipelines created from them) for any Android hardware buffers that have
+-- the same external format.
+--
+-- If @format@ is not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', then
+-- the value of @samplerYcbcrConversionComponents@ /must/ be valid when
+-- used as the @components@ member of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
+-- with that format. If @format@ is
+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', all members of
+-- @samplerYcbcrConversionComponents@ /must/ be
+-- 'Vulkan.Core10.Enums.ComponentSwizzle.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 'AndroidHardwareBufferFormatPropertiesANDROID' 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
+-- <https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt 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
+-- <https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt 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)
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ChromaLocation.ChromaLocation',
+-- 'Vulkan.Core10.ImageView.ComponentMapping',
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlags',
+-- 'Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SamplerYcbcrModelConversion',
+-- 'Vulkan.Core11.Enums.SamplerYcbcrRange.SamplerYcbcrRange',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AndroidHardwareBufferFormatPropertiesANDROID = AndroidHardwareBufferFormatPropertiesANDROID
+  { -- | @format@ is the Vulkan format corresponding to the Android hardware
+    -- buffer’s format, or 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' if
+    -- there is not an equivalent Vulkan format.
+    format :: Format
+  , -- | @externalFormat@ is an implementation-defined external format identifier
+    -- for use with 'ExternalFormatANDROID'. It /must/ not be zero.
+    externalFormat :: Word64
+  , -- | @formatFeatures@ describes the capabilities of this external format when
+    -- used with an image bound to memory imported from @buffer@.
+    formatFeatures :: FormatFeatureFlags
+  , -- | @samplerYcbcrConversionComponents@ is the component swizzle that
+    -- /should/ be used in
+    -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'.
+    samplerYcbcrConversionComponents :: ComponentMapping
+  , -- | @suggestedYcbcrModel@ is a suggested color model to use in the
+    -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'.
+    suggestedYcbcrModel :: SamplerYcbcrModelConversion
+  , -- | @suggestedYcbcrRange@ is a suggested numerical value range to use in
+    -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'.
+    suggestedYcbcrRange :: SamplerYcbcrRange
+  , -- | @suggestedXChromaOffset@ is a suggested X chroma offset to use in
+    -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'.
+    suggestedXChromaOffset :: ChromaLocation
+  , -- | @suggestedYChromaOffset@ is a suggested Y chroma offset to use in
+    -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'.
+    suggestedYChromaOffset :: ChromaLocation
+  }
+  deriving (Typeable)
+deriving instance Show AndroidHardwareBufferFormatPropertiesANDROID
+
+instance ToCStruct AndroidHardwareBufferFormatPropertiesANDROID where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AndroidHardwareBufferFormatPropertiesANDROID{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (format)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word64)) (externalFormat)
+    lift $ poke ((p `plusPtr` 32 :: Ptr FormatFeatureFlags)) (formatFeatures)
+    ContT $ pokeCStruct ((p `plusPtr` 36 :: Ptr ComponentMapping)) (samplerYcbcrConversionComponents) . ($ ())
+    lift $ poke ((p `plusPtr` 52 :: Ptr SamplerYcbcrModelConversion)) (suggestedYcbcrModel)
+    lift $ poke ((p `plusPtr` 56 :: Ptr SamplerYcbcrRange)) (suggestedYcbcrRange)
+    lift $ poke ((p `plusPtr` 60 :: Ptr ChromaLocation)) (suggestedXChromaOffset)
+    lift $ poke ((p `plusPtr` 64 :: Ptr ChromaLocation)) (suggestedYChromaOffset)
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr FormatFeatureFlags)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 36 :: Ptr ComponentMapping)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 52 :: Ptr SamplerYcbcrModelConversion)) (zero)
+    lift $ poke ((p `plusPtr` 56 :: Ptr SamplerYcbcrRange)) (zero)
+    lift $ poke ((p `plusPtr` 60 :: Ptr ChromaLocation)) (zero)
+    lift $ poke ((p `plusPtr` 64 :: Ptr ChromaLocation)) (zero)
+    lift $ f
+
+instance FromCStruct AndroidHardwareBufferFormatPropertiesANDROID where
+  peekCStruct p = do
+    format <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
+    externalFormat <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    formatFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 32 :: Ptr FormatFeatureFlags))
+    samplerYcbcrConversionComponents <- peekCStruct @ComponentMapping ((p `plusPtr` 36 :: Ptr ComponentMapping))
+    suggestedYcbcrModel <- peek @SamplerYcbcrModelConversion ((p `plusPtr` 52 :: Ptr SamplerYcbcrModelConversion))
+    suggestedYcbcrRange <- peek @SamplerYcbcrRange ((p `plusPtr` 56 :: Ptr SamplerYcbcrRange))
+    suggestedXChromaOffset <- peek @ChromaLocation ((p `plusPtr` 60 :: Ptr ChromaLocation))
+    suggestedYChromaOffset <- peek @ChromaLocation ((p `plusPtr` 64 :: Ptr ChromaLocation))
+    pure $ AndroidHardwareBufferFormatPropertiesANDROID
+             format externalFormat formatFeatures samplerYcbcrConversionComponents suggestedYcbcrModel suggestedYcbcrRange suggestedXChromaOffset suggestedYChromaOffset
+
+instance Zero AndroidHardwareBufferFormatPropertiesANDROID where
+  zero = AndroidHardwareBufferFormatPropertiesANDROID
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkExternalFormatANDROID - Structure containing an Android hardware
+-- buffer external format
+--
+-- = Description
+--
+-- If @externalFormat@ is zero, the effect is as if the
+-- 'ExternalFormatANDROID' structure was not present. Otherwise, the
+-- @image@ will have the specified external format.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExternalFormatANDROID = ExternalFormatANDROID
+  { -- | @externalFormat@ /must/ be @0@ or a value returned in the
+    -- @externalFormat@ member of
+    -- 'AndroidHardwareBufferFormatPropertiesANDROID' by an earlier call to
+    -- 'getAndroidHardwareBufferPropertiesANDROID'
+    externalFormat :: Word64 }
+  deriving (Typeable)
+deriving instance Show ExternalFormatANDROID
+
+instance ToCStruct ExternalFormatANDROID where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExternalFormatANDROID{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (externalFormat)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct ExternalFormatANDROID where
+  peekCStruct p = do
+    externalFormat <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
+    pure $ ExternalFormatANDROID
+             externalFormat
+
+instance Storable ExternalFormatANDROID where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExternalFormatANDROID where
+  zero = ExternalFormatANDROID
+           zero
+
+
+type ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION"
+pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION :: forall a . Integral a => a
+pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION = 3
+
+
+type ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME = "VK_ANDROID_external_memory_android_hardware_buffer"
+
+-- No documentation found for TopLevel "VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME"
+pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME = "VK_ANDROID_external_memory_android_hardware_buffer"
+
diff --git a/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs-boot
@@ -0,0 +1,64 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer  ( AndroidHardwareBufferFormatPropertiesANDROID
+                                                                             , AndroidHardwareBufferPropertiesANDROID
+                                                                             , AndroidHardwareBufferUsageANDROID
+                                                                             , ExternalFormatANDROID
+                                                                             , ImportAndroidHardwareBufferInfoANDROID
+                                                                             , MemoryGetAndroidHardwareBufferInfoANDROID
+                                                                             ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data AndroidHardwareBufferFormatPropertiesANDROID
+
+instance ToCStruct AndroidHardwareBufferFormatPropertiesANDROID
+instance Show AndroidHardwareBufferFormatPropertiesANDROID
+
+instance FromCStruct AndroidHardwareBufferFormatPropertiesANDROID
+
+
+type role AndroidHardwareBufferPropertiesANDROID nominal
+data AndroidHardwareBufferPropertiesANDROID (es :: [Type])
+
+instance (Extendss AndroidHardwareBufferPropertiesANDROID es, PokeChain es) => ToCStruct (AndroidHardwareBufferPropertiesANDROID es)
+instance Show (Chain es) => Show (AndroidHardwareBufferPropertiesANDROID es)
+
+instance (Extendss AndroidHardwareBufferPropertiesANDROID es, PeekChain es) => FromCStruct (AndroidHardwareBufferPropertiesANDROID es)
+
+
+data AndroidHardwareBufferUsageANDROID
+
+instance ToCStruct AndroidHardwareBufferUsageANDROID
+instance Show AndroidHardwareBufferUsageANDROID
+
+instance FromCStruct AndroidHardwareBufferUsageANDROID
+
+
+data ExternalFormatANDROID
+
+instance ToCStruct ExternalFormatANDROID
+instance Show ExternalFormatANDROID
+
+instance FromCStruct ExternalFormatANDROID
+
+
+data ImportAndroidHardwareBufferInfoANDROID
+
+instance ToCStruct ImportAndroidHardwareBufferInfoANDROID
+instance Show ImportAndroidHardwareBufferInfoANDROID
+
+instance FromCStruct ImportAndroidHardwareBufferInfoANDROID
+
+
+data MemoryGetAndroidHardwareBufferInfoANDROID
+
+instance ToCStruct MemoryGetAndroidHardwareBufferInfoANDROID
+instance Show MemoryGetAndroidHardwareBufferInfoANDROID
+
+instance FromCStruct MemoryGetAndroidHardwareBufferInfoANDROID
+
diff --git a/src/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs b/src/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
@@ -0,0 +1,170 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_acquire_xlib_display  ( acquireXlibDisplayEXT
+                                                      , getRandROutputDisplayEXT
+                                                      , EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION
+                                                      , pattern EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION
+                                                      , EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME
+                                                      , pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME
+                                                      , DisplayKHR(..)
+                                                      , Display
+                                                      , RROutput
+                                                      ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Foreign.Storable (Storable(peek))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Extensions.WSITypes (Display)
+import Vulkan.Extensions.Handles (DisplayKHR)
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+import Vulkan.Dynamic (InstanceCmds(pVkAcquireXlibDisplayEXT))
+import Vulkan.Dynamic (InstanceCmds(pVkGetRandROutputDisplayEXT))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Extensions.WSITypes (RROutput)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (Display)
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+import Vulkan.Extensions.WSITypes (RROutput)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkAcquireXlibDisplayEXT
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Display -> DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Display -> DisplayKHR -> IO Result
+
+-- | vkAcquireXlibDisplayEXT - Acquire access to a VkDisplayKHR using Xlib
+--
+-- = 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
+--
+-- 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 loses
+-- 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
+-- 'Vulkan.Core10.Enums.Result.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.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayKHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+acquireXlibDisplayEXT :: forall io . MonadIO io => PhysicalDevice -> ("dpy" ::: Ptr Display) -> DisplayKHR -> io ()
+acquireXlibDisplayEXT physicalDevice dpy display = liftIO $ do
+  let vkAcquireXlibDisplayEXTPtr = pVkAcquireXlibDisplayEXT (instanceCmds (physicalDevice :: PhysicalDevice))
+  unless (vkAcquireXlibDisplayEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAcquireXlibDisplayEXT is null" Nothing Nothing
+  let vkAcquireXlibDisplayEXT' = mkVkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXTPtr
+  r <- vkAcquireXlibDisplayEXT' (physicalDeviceHandle (physicalDevice)) (dpy) (display)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetRandROutputDisplayEXT
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Display -> RROutput -> Ptr DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Display -> RROutput -> Ptr DisplayKHR -> IO Result
+
+-- | vkGetRandROutputDisplayEXT - Query the VkDisplayKHR corresponding to an
+-- X11 RandR Output
+--
+-- = 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 'Vulkan.Extensions.Handles.DisplayKHR'
+--     handle will be returned here.
+--
+-- = Description
+--
+-- If there is no 'Vulkan.Extensions.Handles.DisplayKHR' corresponding to
+-- @rrOutput@ on @physicalDevice@, 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+-- /must/ be returned in @pDisplay@.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayKHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getRandROutputDisplayEXT :: forall io . MonadIO io => PhysicalDevice -> ("dpy" ::: Ptr Display) -> RROutput -> io (DisplayKHR)
+getRandROutputDisplayEXT physicalDevice dpy rrOutput = liftIO . evalContT $ do
+  let vkGetRandROutputDisplayEXTPtr = pVkGetRandROutputDisplayEXT (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetRandROutputDisplayEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetRandROutputDisplayEXT is null" Nothing Nothing
+  let vkGetRandROutputDisplayEXT' = mkVkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXTPtr
+  pPDisplay <- ContT $ bracket (callocBytes @DisplayKHR 8) free
+  _ <- lift $ vkGetRandROutputDisplayEXT' (physicalDeviceHandle (physicalDevice)) (dpy) (rrOutput) (pPDisplay)
+  pDisplay <- lift $ peek @DisplayKHR pPDisplay
+  pure $ (pDisplay)
+
+
+type EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION"
+pattern EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION = 1
+
+
+type EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_xlib_display"
+
+-- No documentation found for TopLevel "VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME"
+pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_xlib_display"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs b/src/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs
@@ -0,0 +1,211 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_astc_decode_mode  ( ImageViewASTCDecodeModeEXT(..)
+                                                  , PhysicalDeviceASTCDecodeFeaturesEXT(..)
+                                                  , EXT_ASTC_DECODE_MODE_SPEC_VERSION
+                                                  , pattern EXT_ASTC_DECODE_MODE_SPEC_VERSION
+                                                  , EXT_ASTC_DECODE_MODE_EXTENSION_NAME
+                                                  , pattern EXT_ASTC_DECODE_MODE_EXTENSION_NAME
+                                                  ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT))
+-- | VkImageViewASTCDecodeModeEXT - Structure describing the ASTC decode mode
+-- for an image view
+--
+-- == Valid Usage
+--
+-- -   @decodeMode@ /must/ be one of
+--     'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_SFLOAT',
+--     'Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM', or
+--     'Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-astc-decodeModeSharedExponent decodeModeSharedExponent>
+--     feature is not enabled, @decodeMode@ /must/ not be
+--     'Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32'
+--
+-- -   If @decodeMode@ is
+--     'Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM' the image view
+--     /must/ not include blocks using any of the ASTC HDR modes
+--
+-- -   @format@ of the image view /must/ be one of
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_UNORM_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_SRGB_BLOCK',
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_UNORM_BLOCK', or
+--     'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_SRGB_BLOCK'
+--
+-- If @format@ uses sRGB encoding then the @decodeMode@ has no effect.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT'
+--
+-- -   @decodeMode@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImageViewASTCDecodeModeEXT = ImageViewASTCDecodeModeEXT
+  { -- | @decodeMode@ is the intermediate format used to decode ASTC compressed
+    -- formats.
+    decodeMode :: Format }
+  deriving (Typeable)
+deriving instance Show ImageViewASTCDecodeModeEXT
+
+instance ToCStruct ImageViewASTCDecodeModeEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageViewASTCDecodeModeEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Format)) (decodeMode)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
+    f
+
+instance FromCStruct ImageViewASTCDecodeModeEXT where
+  peekCStruct p = do
+    decodeMode <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
+    pure $ ImageViewASTCDecodeModeEXT
+             decodeMode
+
+instance Storable ImageViewASTCDecodeModeEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageViewASTCDecodeModeEXT where
+  zero = ImageViewASTCDecodeModeEXT
+           zero
+
+
+-- | VkPhysicalDeviceASTCDecodeFeaturesEXT - Structure describing ASTC decode
+-- mode features
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceASTCDecodeFeaturesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceASTCDecodeFeaturesEXT' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceASTCDecodeFeaturesEXT' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.createDevice' to enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceASTCDecodeFeaturesEXT = PhysicalDeviceASTCDecodeFeaturesEXT
+  { -- | @decodeModeSharedExponent@ indicates whether the implementation supports
+    -- decoding ASTC compressed formats to
+    -- 'Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32' internal
+    -- precision.
+    decodeModeSharedExponent :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceASTCDecodeFeaturesEXT
+
+instance ToCStruct PhysicalDeviceASTCDecodeFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceASTCDecodeFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (decodeModeSharedExponent))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceASTCDecodeFeaturesEXT where
+  peekCStruct p = do
+    decodeModeSharedExponent <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceASTCDecodeFeaturesEXT
+             (bool32ToBool decodeModeSharedExponent)
+
+instance Storable PhysicalDeviceASTCDecodeFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceASTCDecodeFeaturesEXT where
+  zero = PhysicalDeviceASTCDecodeFeaturesEXT
+           zero
+
+
+type EXT_ASTC_DECODE_MODE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION"
+pattern EXT_ASTC_DECODE_MODE_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_ASTC_DECODE_MODE_SPEC_VERSION = 1
+
+
+type EXT_ASTC_DECODE_MODE_EXTENSION_NAME = "VK_EXT_astc_decode_mode"
+
+-- No documentation found for TopLevel "VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME"
+pattern EXT_ASTC_DECODE_MODE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_ASTC_DECODE_MODE_EXTENSION_NAME = "VK_EXT_astc_decode_mode"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs-boot b/src/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_astc_decode_mode  ( ImageViewASTCDecodeModeEXT
+                                                  , PhysicalDeviceASTCDecodeFeaturesEXT
+                                                  ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ImageViewASTCDecodeModeEXT
+
+instance ToCStruct ImageViewASTCDecodeModeEXT
+instance Show ImageViewASTCDecodeModeEXT
+
+instance FromCStruct ImageViewASTCDecodeModeEXT
+
+
+data PhysicalDeviceASTCDecodeFeaturesEXT
+
+instance ToCStruct PhysicalDeviceASTCDecodeFeaturesEXT
+instance Show PhysicalDeviceASTCDecodeFeaturesEXT
+
+instance FromCStruct PhysicalDeviceASTCDecodeFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs b/src/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs
@@ -0,0 +1,406 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_blend_operation_advanced  ( PhysicalDeviceBlendOperationAdvancedFeaturesEXT(..)
+                                                          , PhysicalDeviceBlendOperationAdvancedPropertiesEXT(..)
+                                                          , PipelineColorBlendAdvancedStateCreateInfoEXT(..)
+                                                          , BlendOverlapEXT( BLEND_OVERLAP_UNCORRELATED_EXT
+                                                                           , BLEND_OVERLAP_DISJOINT_EXT
+                                                                           , BLEND_OVERLAP_CONJOINT_EXT
+                                                                           , ..
+                                                                           )
+                                                          , EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION
+                                                          , pattern EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION
+                                                          , EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME
+                                                          , pattern EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME
+                                                          ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT))
+-- | VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT - Structure describing
+-- advanced blending features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceBlendOperationAdvancedFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceBlendOperationAdvancedFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceBlendOperationAdvancedFeaturesEXT' /can/ also be included
+-- in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- enable the features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceBlendOperationAdvancedFeaturesEXT = PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+  { -- | @advancedBlendCoherentOperations@ specifies whether blending using
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operations>
+    -- is guaranteed to execute atomically and in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-order primitive order>.
+    -- If this is 'Vulkan.Core10.BaseType.TRUE',
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT'
+    -- is treated the same as
+    -- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_READ_BIT',
+    -- and advanced blending needs no additional synchronization over basic
+    -- blending. If this is 'Vulkan.Core10.BaseType.FALSE', then memory
+    -- dependencies are required to guarantee order between two advanced
+    -- blending operations that occur on the same sample.
+    advancedBlendCoherentOperations :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+
+instance ToCStruct PhysicalDeviceBlendOperationAdvancedFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceBlendOperationAdvancedFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (advancedBlendCoherentOperations))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceBlendOperationAdvancedFeaturesEXT where
+  peekCStruct p = do
+    advancedBlendCoherentOperations <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+             (bool32ToBool advancedBlendCoherentOperations)
+
+instance Storable PhysicalDeviceBlendOperationAdvancedFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceBlendOperationAdvancedFeaturesEXT where
+  zero = PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+           zero
+
+
+-- | VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT - Structure
+-- describing advanced blending limits that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceBlendOperationAdvancedPropertiesEXT'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceBlendOperationAdvancedPropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceBlendOperationAdvancedPropertiesEXT = PhysicalDeviceBlendOperationAdvancedPropertiesEXT
+  { -- | @advancedBlendMaxColorAttachments@ is one greater than the highest color
+    -- attachment index that /can/ be used in a subpass, for a pipeline that
+    -- uses an
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>.
+    advancedBlendMaxColorAttachments :: Word32
+  , -- | @advancedBlendIndependentBlend@ specifies whether advanced blend
+    -- operations /can/ vary per-attachment.
+    advancedBlendIndependentBlend :: Bool
+  , -- | @advancedBlendNonPremultipliedSrcColor@ specifies whether the source
+    -- color /can/ be treated as non-premultiplied. If this is
+    -- 'Vulkan.Core10.BaseType.FALSE', then
+    -- 'PipelineColorBlendAdvancedStateCreateInfoEXT'::@srcPremultiplied@
+    -- /must/ be 'Vulkan.Core10.BaseType.TRUE'.
+    advancedBlendNonPremultipliedSrcColor :: Bool
+  , -- | @advancedBlendNonPremultipliedDstColor@ specifies whether the
+    -- destination color /can/ be treated as non-premultiplied. If this is
+    -- 'Vulkan.Core10.BaseType.FALSE', then
+    -- 'PipelineColorBlendAdvancedStateCreateInfoEXT'::@dstPremultiplied@
+    -- /must/ be 'Vulkan.Core10.BaseType.TRUE'.
+    advancedBlendNonPremultipliedDstColor :: Bool
+  , -- | @advancedBlendCorrelatedOverlap@ specifies whether the overlap mode
+    -- /can/ be treated as correlated. If this is
+    -- 'Vulkan.Core10.BaseType.FALSE', then
+    -- 'PipelineColorBlendAdvancedStateCreateInfoEXT'::@blendOverlap@ /must/ be
+    -- 'BLEND_OVERLAP_UNCORRELATED_EXT'.
+    advancedBlendCorrelatedOverlap :: Bool
+  , -- | @advancedBlendAllOperations@ specifies whether all advanced blend
+    -- operation enums are supported. See the valid usage of
+    -- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'.
+    advancedBlendAllOperations :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceBlendOperationAdvancedPropertiesEXT
+
+instance ToCStruct PhysicalDeviceBlendOperationAdvancedPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceBlendOperationAdvancedPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (advancedBlendMaxColorAttachments)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (advancedBlendIndependentBlend))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (advancedBlendNonPremultipliedSrcColor))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (advancedBlendNonPremultipliedDstColor))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (advancedBlendCorrelatedOverlap))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (advancedBlendAllOperations))
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceBlendOperationAdvancedPropertiesEXT where
+  peekCStruct p = do
+    advancedBlendMaxColorAttachments <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    advancedBlendIndependentBlend <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    advancedBlendNonPremultipliedSrcColor <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    advancedBlendNonPremultipliedDstColor <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    advancedBlendCorrelatedOverlap <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    advancedBlendAllOperations <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    pure $ PhysicalDeviceBlendOperationAdvancedPropertiesEXT
+             advancedBlendMaxColorAttachments (bool32ToBool advancedBlendIndependentBlend) (bool32ToBool advancedBlendNonPremultipliedSrcColor) (bool32ToBool advancedBlendNonPremultipliedDstColor) (bool32ToBool advancedBlendCorrelatedOverlap) (bool32ToBool advancedBlendAllOperations)
+
+instance Storable PhysicalDeviceBlendOperationAdvancedPropertiesEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceBlendOperationAdvancedPropertiesEXT where
+  zero = PhysicalDeviceBlendOperationAdvancedPropertiesEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineColorBlendAdvancedStateCreateInfoEXT - Structure specifying
+-- parameters that affect advanced blend operations
+--
+-- = Description
+--
+-- If this structure is not present, @srcPremultiplied@ and
+-- @dstPremultiplied@ are both considered to be
+-- 'Vulkan.Core10.BaseType.TRUE', and @blendOverlap@ is considered to be
+-- 'BLEND_OVERLAP_UNCORRELATED_EXT'.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-advancedBlendNonPremultipliedSrcColor non-premultiplied source color>
+--     property is not supported, @srcPremultiplied@ /must/ be
+--     'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-advancedBlendNonPremultipliedDstColor non-premultiplied destination color>
+--     property is not supported, @dstPremultiplied@ /must/ be
+--     'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-advancedBlendCorrelatedOverlap correlated overlap>
+--     property is not supported, @blendOverlap@ /must/ be
+--     'BLEND_OVERLAP_UNCORRELATED_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT'
+--
+-- -   @blendOverlap@ /must/ be a valid 'BlendOverlapEXT' value
+--
+-- = See Also
+--
+-- 'BlendOverlapEXT', 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineColorBlendAdvancedStateCreateInfoEXT = PipelineColorBlendAdvancedStateCreateInfoEXT
+  { -- | @srcPremultiplied@ specifies whether the source color of the blend
+    -- operation is treated as premultiplied.
+    srcPremultiplied :: Bool
+  , -- | @dstPremultiplied@ specifies whether the destination color of the blend
+    -- operation is treated as premultiplied.
+    dstPremultiplied :: Bool
+  , -- | @blendOverlap@ is a 'BlendOverlapEXT' value specifying how the source
+    -- and destination sample’s coverage is correlated.
+    blendOverlap :: BlendOverlapEXT
+  }
+  deriving (Typeable)
+deriving instance Show PipelineColorBlendAdvancedStateCreateInfoEXT
+
+instance ToCStruct PipelineColorBlendAdvancedStateCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineColorBlendAdvancedStateCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (srcPremultiplied))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (dstPremultiplied))
+    poke ((p `plusPtr` 24 :: Ptr BlendOverlapEXT)) (blendOverlap)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr BlendOverlapEXT)) (zero)
+    f
+
+instance FromCStruct PipelineColorBlendAdvancedStateCreateInfoEXT where
+  peekCStruct p = do
+    srcPremultiplied <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    dstPremultiplied <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    blendOverlap <- peek @BlendOverlapEXT ((p `plusPtr` 24 :: Ptr BlendOverlapEXT))
+    pure $ PipelineColorBlendAdvancedStateCreateInfoEXT
+             (bool32ToBool srcPremultiplied) (bool32ToBool dstPremultiplied) blendOverlap
+
+instance Storable PipelineColorBlendAdvancedStateCreateInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineColorBlendAdvancedStateCreateInfoEXT where
+  zero = PipelineColorBlendAdvancedStateCreateInfoEXT
+           zero
+           zero
+           zero
+
+
+-- | VkBlendOverlapEXT - Enumerant specifying the blend overlap parameter
+--
+-- = Description
+--
+-- \'
+--
+-- +-----------------------------------+--------------------------------------------------------------------------------------+
+-- | Overlap Mode                      | Weighting Equations                                                                  |
+-- +===================================+======================================================================================+
+-- | 'BLEND_OVERLAP_UNCORRELATED_EXT'  | \[                                              \begin{aligned}                      |
+-- |                                   |                                                 p_0(A_s,A_d) & = A_sA_d \\           |
+-- |                                   |                                                 p_1(A_s,A_d) & = A_s(1-A_d) \\       |
+-- |                                   |                                                 p_2(A_s,A_d) & = A_d(1-A_s) \\       |
+-- |                                   |                                               \end{aligned}\]                        |
+-- +-----------------------------------+--------------------------------------------------------------------------------------+
+-- | 'BLEND_OVERLAP_CONJOINT_EXT'      | \[                                              \begin{aligned}                      |
+-- |                                   |                                                 p_0(A_s,A_d) & = min(A_s,A_d) \\     |
+-- |                                   |                                                 p_1(A_s,A_d) & = max(A_s-A_d,0) \\   |
+-- |                                   |                                                 p_2(A_s,A_d) & = max(A_d-A_s,0) \\   |
+-- |                                   |                                               \end{aligned}\]                        |
+-- +-----------------------------------+--------------------------------------------------------------------------------------+
+-- | 'BLEND_OVERLAP_DISJOINT_EXT'      | \[                                              \begin{aligned}                      |
+-- |                                   |                                                 p_0(A_s,A_d) & = max(A_s+A_d-1,0) \\ |
+-- |                                   |                                                 p_1(A_s,A_d) & = min(A_s,1-A_d) \\   |
+-- |                                   |                                                 p_2(A_s,A_d) & = min(A_d,1-A_s) \\   |
+-- |                                   |                                               \end{aligned}\]                        |
+-- +-----------------------------------+--------------------------------------------------------------------------------------+
+--
+-- Advanced Blend Overlap Modes
+--
+-- = See Also
+--
+-- 'PipelineColorBlendAdvancedStateCreateInfoEXT'
+newtype BlendOverlapEXT = BlendOverlapEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'BLEND_OVERLAP_UNCORRELATED_EXT' specifies that there is no correlation
+-- between the source and destination coverage.
+pattern BLEND_OVERLAP_UNCORRELATED_EXT = BlendOverlapEXT 0
+-- | 'BLEND_OVERLAP_DISJOINT_EXT' specifies that the source and destination
+-- coverage are considered to have minimal overlap.
+pattern BLEND_OVERLAP_DISJOINT_EXT = BlendOverlapEXT 1
+-- | 'BLEND_OVERLAP_CONJOINT_EXT' specifies that the source and destination
+-- coverage are considered to have maximal overlap.
+pattern BLEND_OVERLAP_CONJOINT_EXT = BlendOverlapEXT 2
+{-# complete BLEND_OVERLAP_UNCORRELATED_EXT,
+             BLEND_OVERLAP_DISJOINT_EXT,
+             BLEND_OVERLAP_CONJOINT_EXT :: BlendOverlapEXT #-}
+
+instance Show BlendOverlapEXT where
+  showsPrec p = \case
+    BLEND_OVERLAP_UNCORRELATED_EXT -> showString "BLEND_OVERLAP_UNCORRELATED_EXT"
+    BLEND_OVERLAP_DISJOINT_EXT -> showString "BLEND_OVERLAP_DISJOINT_EXT"
+    BLEND_OVERLAP_CONJOINT_EXT -> showString "BLEND_OVERLAP_CONJOINT_EXT"
+    BlendOverlapEXT x -> showParen (p >= 11) (showString "BlendOverlapEXT " . showsPrec 11 x)
+
+instance Read BlendOverlapEXT where
+  readPrec = parens (choose [("BLEND_OVERLAP_UNCORRELATED_EXT", pure BLEND_OVERLAP_UNCORRELATED_EXT)
+                            , ("BLEND_OVERLAP_DISJOINT_EXT", pure BLEND_OVERLAP_DISJOINT_EXT)
+                            , ("BLEND_OVERLAP_CONJOINT_EXT", pure BLEND_OVERLAP_CONJOINT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "BlendOverlapEXT")
+                       v <- step readPrec
+                       pure (BlendOverlapEXT v)))
+
+
+type EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION"
+pattern EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION = 2
+
+
+type EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME = "VK_EXT_blend_operation_advanced"
+
+-- No documentation found for TopLevel "VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME"
+pattern EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME = "VK_EXT_blend_operation_advanced"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs-boot b/src/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_blend_operation_advanced  ( PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+                                                          , PhysicalDeviceBlendOperationAdvancedPropertiesEXT
+                                                          , PipelineColorBlendAdvancedStateCreateInfoEXT
+                                                          ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+
+instance ToCStruct PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+instance Show PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+
+instance FromCStruct PhysicalDeviceBlendOperationAdvancedFeaturesEXT
+
+
+data PhysicalDeviceBlendOperationAdvancedPropertiesEXT
+
+instance ToCStruct PhysicalDeviceBlendOperationAdvancedPropertiesEXT
+instance Show PhysicalDeviceBlendOperationAdvancedPropertiesEXT
+
+instance FromCStruct PhysicalDeviceBlendOperationAdvancedPropertiesEXT
+
+
+data PipelineColorBlendAdvancedStateCreateInfoEXT
+
+instance ToCStruct PipelineColorBlendAdvancedStateCreateInfoEXT
+instance Show PipelineColorBlendAdvancedStateCreateInfoEXT
+
+instance FromCStruct PipelineColorBlendAdvancedStateCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs b/src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs
@@ -0,0 +1,250 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_buffer_device_address  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT
+                                                       , pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT
+                                                       , pattern BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT
+                                                       , pattern BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT
+                                                       , pattern ERROR_INVALID_DEVICE_ADDRESS_EXT
+                                                       , getBufferDeviceAddressEXT
+                                                       , PhysicalDeviceBufferDeviceAddressFeaturesEXT(..)
+                                                       , BufferDeviceAddressCreateInfoEXT(..)
+                                                       , PhysicalDeviceBufferAddressFeaturesEXT
+                                                       , BufferDeviceAddressInfoEXT
+                                                       , EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION
+                                                       , pattern EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION
+                                                       , EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
+                                                       , pattern EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
+                                                       ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (getBufferDeviceAddress)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferDeviceAddressInfo)
+import Vulkan.Core10.BaseType (DeviceAddress)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
+import Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlagBits(BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT))
+import Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
+import Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlagBits(BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT))
+import Vulkan.Core10.Enums.Result (Result(ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT"
+pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO
+
+
+-- No documentation found for TopLevel "VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT"
+pattern BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT = BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
+
+
+-- No documentation found for TopLevel "VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT"
+pattern BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
+
+
+-- No documentation found for TopLevel "VK_ERROR_INVALID_DEVICE_ADDRESS_EXT"
+pattern ERROR_INVALID_DEVICE_ADDRESS_EXT = ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
+
+
+-- No documentation found for TopLevel "vkGetBufferDeviceAddressEXT"
+getBufferDeviceAddressEXT = getBufferDeviceAddress
+
+
+-- | VkPhysicalDeviceBufferDeviceAddressFeaturesEXT - Structure describing
+-- buffer address features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceBufferDeviceAddressFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceBufferDeviceAddressFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceBufferDeviceAddressFeaturesEXT' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- Note
+--
+-- The 'PhysicalDeviceBufferDeviceAddressFeaturesEXT' structure has the
+-- same members as the
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures'
+-- structure, but the functionality indicated by the members is expressed
+-- differently. The features indicated by the
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures'
+-- structure requires additional flags to be passed at memory allocation
+-- time, and the capture and replay mechanism is built around opaque
+-- capture addresses for buffer and memory objects.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceBufferDeviceAddressFeaturesEXT = PhysicalDeviceBufferDeviceAddressFeaturesEXT
+  { -- | @bufferDeviceAddress@ indicates that the implementation supports
+    -- accessing buffer memory in shaders as storage buffers via an address
+    -- queried from 'getBufferDeviceAddressEXT'.
+    bufferDeviceAddress :: Bool
+  , -- | @bufferDeviceAddressCaptureReplay@ indicates that the implementation
+    -- supports saving and reusing buffer addresses, e.g. for trace capture and
+    -- replay.
+    bufferDeviceAddressCaptureReplay :: Bool
+  , -- | @bufferDeviceAddressMultiDevice@ indicates that the implementation
+    -- supports the @bufferDeviceAddress@ feature for logical devices created
+    -- with multiple physical devices. If this feature is not supported, buffer
+    -- addresses /must/ not be queried on a logical device created with more
+    -- than one physical device.
+    bufferDeviceAddressMultiDevice :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceBufferDeviceAddressFeaturesEXT
+
+instance ToCStruct PhysicalDeviceBufferDeviceAddressFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceBufferDeviceAddressFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddress))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressCaptureReplay))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (bufferDeviceAddressMultiDevice))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceBufferDeviceAddressFeaturesEXT where
+  peekCStruct p = do
+    bufferDeviceAddress <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    bufferDeviceAddressCaptureReplay <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    bufferDeviceAddressMultiDevice <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PhysicalDeviceBufferDeviceAddressFeaturesEXT
+             (bool32ToBool bufferDeviceAddress) (bool32ToBool bufferDeviceAddressCaptureReplay) (bool32ToBool bufferDeviceAddressMultiDevice)
+
+instance Storable PhysicalDeviceBufferDeviceAddressFeaturesEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceBufferDeviceAddressFeaturesEXT where
+  zero = PhysicalDeviceBufferDeviceAddressFeaturesEXT
+           zero
+           zero
+           zero
+
+
+-- | VkBufferDeviceAddressCreateInfoEXT - Request a specific address for a
+-- buffer
+--
+-- = Description
+--
+-- If @deviceAddress@ is zero, no specific address is requested.
+--
+-- If @deviceAddress@ is not zero, then it /must/ be an address retrieved
+-- from an identically created buffer on the same implementation. The
+-- buffer /must/ also be bound to an identically created
+-- 'Vulkan.Core10.Handles.DeviceMemory' object.
+--
+-- If this structure is not present, it is as if @deviceAddress@ is zero.
+--
+-- Apps /should/ avoid creating buffers with app-provided addresses and
+-- implementation-provided addresses in the same process, to reduce the
+-- likelihood of 'ERROR_INVALID_DEVICE_ADDRESS_EXT' errors.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceAddress',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data BufferDeviceAddressCreateInfoEXT = BufferDeviceAddressCreateInfoEXT
+  { -- | @deviceAddress@ is the device address requested for the buffer.
+    deviceAddress :: DeviceAddress }
+  deriving (Typeable)
+deriving instance Show BufferDeviceAddressCreateInfoEXT
+
+instance ToCStruct BufferDeviceAddressCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BufferDeviceAddressCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceAddress)) (deviceAddress)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceAddress)) (zero)
+    f
+
+instance FromCStruct BufferDeviceAddressCreateInfoEXT where
+  peekCStruct p = do
+    deviceAddress <- peek @DeviceAddress ((p `plusPtr` 16 :: Ptr DeviceAddress))
+    pure $ BufferDeviceAddressCreateInfoEXT
+             deviceAddress
+
+instance Storable BufferDeviceAddressCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BufferDeviceAddressCreateInfoEXT where
+  zero = BufferDeviceAddressCreateInfoEXT
+           zero
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceBufferAddressFeaturesEXT"
+type PhysicalDeviceBufferAddressFeaturesEXT = PhysicalDeviceBufferDeviceAddressFeaturesEXT
+
+
+-- No documentation found for TopLevel "VkBufferDeviceAddressInfoEXT"
+type BufferDeviceAddressInfoEXT = BufferDeviceAddressInfo
+
+
+type EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION"
+pattern EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION = 2
+
+
+type EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME = "VK_EXT_buffer_device_address"
+
+-- No documentation found for TopLevel "VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME"
+pattern EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME = "VK_EXT_buffer_device_address"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs-boot b/src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_buffer_device_address  ( BufferDeviceAddressCreateInfoEXT
+                                                       , PhysicalDeviceBufferDeviceAddressFeaturesEXT
+                                                       ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data BufferDeviceAddressCreateInfoEXT
+
+instance ToCStruct BufferDeviceAddressCreateInfoEXT
+instance Show BufferDeviceAddressCreateInfoEXT
+
+instance FromCStruct BufferDeviceAddressCreateInfoEXT
+
+
+data PhysicalDeviceBufferDeviceAddressFeaturesEXT
+
+instance ToCStruct PhysicalDeviceBufferDeviceAddressFeaturesEXT
+instance Show PhysicalDeviceBufferDeviceAddressFeaturesEXT
+
+instance FromCStruct PhysicalDeviceBufferDeviceAddressFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs b/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs
@@ -0,0 +1,380 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_calibrated_timestamps  ( getPhysicalDeviceCalibrateableTimeDomainsEXT
+                                                       , getCalibratedTimestampsEXT
+                                                       , CalibratedTimestampInfoEXT(..)
+                                                       , TimeDomainEXT( TIME_DOMAIN_DEVICE_EXT
+                                                                      , TIME_DOMAIN_CLOCK_MONOTONIC_EXT
+                                                                      , TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT
+                                                                      , TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT
+                                                                      , ..
+                                                                      )
+                                                       , EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION
+                                                       , pattern EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION
+                                                       , EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME
+                                                       , pattern EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME
+                                                       ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetCalibratedTimestampsEXT))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceCalibrateableTimeDomainsEXT))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceCalibrateableTimeDomainsEXT
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr TimeDomainEXT -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr TimeDomainEXT -> IO Result
+
+-- | vkGetPhysicalDeviceCalibrateableTimeDomainsEXT - Query calibrateable
+-- time domains
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the set
+--     of calibrateable time domains.
+--
+-- -   @pTimeDomainCount@ is a pointer to an integer related to the number
+--     of calibrateable time domains available or queried, as described
+--     below.
+--
+-- -   @pTimeDomains@ is either @NULL@ or a pointer to an array of
+--     'TimeDomainEXT' values, indicating the supported calibrateable time
+--     domains.
+--
+-- = Description
+--
+-- If @pTimeDomains@ is @NULL@, then the number of calibrateable time
+-- domains supported for the given @physicalDevice@ is returned in
+-- @pTimeDomainCount@. Otherwise, @pTimeDomainCount@ /must/ point to a
+-- variable set by the user to the number of elements in the @pTimeDomains@
+-- array, and on return the variable is overwritten with the number of
+-- values actually written to @pTimeDomains@. If the value of
+-- @pTimeDomainCount@ is less than the number of calibrateable time domains
+-- supported, at most @pTimeDomainCount@ values will be written to
+-- @pTimeDomains@. If @pTimeDomainCount@ is smaller than the number of
+-- calibrateable time domains supported for the given @physicalDevice@,
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.SUCCESS' to indicate that not all the
+-- available values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pTimeDomainCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pTimeDomainCount@ is not @0@, and
+--     @pTimeDomains@ is not @NULL@, @pTimeDomains@ /must/ be a valid
+--     pointer to an array of @pTimeDomainCount@ 'TimeDomainEXT' values
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'TimeDomainEXT'
+getPhysicalDeviceCalibrateableTimeDomainsEXT :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("timeDomains" ::: Vector TimeDomainEXT))
+getPhysicalDeviceCalibrateableTimeDomainsEXT physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceCalibrateableTimeDomainsEXTPtr = pVkGetPhysicalDeviceCalibrateableTimeDomainsEXT (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceCalibrateableTimeDomainsEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceCalibrateableTimeDomainsEXT is null" Nothing Nothing
+  let vkGetPhysicalDeviceCalibrateableTimeDomainsEXT' = mkVkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXTPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPTimeDomainCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceCalibrateableTimeDomainsEXT' physicalDevice' (pPTimeDomainCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pTimeDomainCount <- lift $ peek @Word32 pPTimeDomainCount
+  pPTimeDomains <- ContT $ bracket (callocBytes @TimeDomainEXT ((fromIntegral (pTimeDomainCount)) * 4)) free
+  r' <- lift $ vkGetPhysicalDeviceCalibrateableTimeDomainsEXT' physicalDevice' (pPTimeDomainCount) (pPTimeDomains)
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pTimeDomainCount' <- lift $ peek @Word32 pPTimeDomainCount
+  pTimeDomains' <- lift $ generateM (fromIntegral (pTimeDomainCount')) (\i -> peek @TimeDomainEXT ((pPTimeDomains `advancePtrBytes` (4 * (i)) :: Ptr TimeDomainEXT)))
+  pure $ ((r'), pTimeDomains')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetCalibratedTimestampsEXT
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr CalibratedTimestampInfoEXT -> Ptr Word64 -> Ptr Word64 -> IO Result) -> Ptr Device_T -> Word32 -> Ptr CalibratedTimestampInfoEXT -> Ptr Word64 -> Ptr Word64 -> IO Result
+
+-- | vkGetCalibratedTimestampsEXT - Query calibrated timestamps
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device used to perform the query.
+--
+-- -   @timestampCount@ is the number of timestamps to query.
+--
+-- -   @pTimestampInfos@ is a pointer to an array of @timestampCount@
+--     'CalibratedTimestampInfoEXT' structures, describing the time domains
+--     the calibrated timestamps should be captured from.
+--
+-- -   @pTimestamps@ is a pointer to an array of @timestampCount@ 64-bit
+--     unsigned integer values in which the requested calibrated timestamp
+--     values are returned.
+--
+-- -   @pMaxDeviation@ is a pointer to a 64-bit unsigned integer value in
+--     which the strictly positive maximum deviation, in nanoseconds, of
+--     the calibrated timestamp values is returned.
+--
+-- = Description
+--
+-- Note
+--
+-- The maximum deviation /may/ vary between calls to
+-- 'getCalibratedTimestampsEXT' even for the same set of time domains due
+-- to implementation and platform specific reasons. It is the application’s
+-- responsibility to assess whether the returned maximum deviation makes
+-- the timestamp values suitable for any particular purpose and /can/
+-- choose to re-issue the timestamp calibration call pursuing a lower
+-- devation value.
+--
+-- Calibrated timestamp values /can/ be extrapolated to estimate future
+-- coinciding timestamp values, however, depending on the nature of the
+-- time domains and other properties of the platform extrapolating values
+-- over a sufficiently long period of time /may/ no longer be accurate
+-- enough to fit any particular purpose so applications are expected to
+-- re-calibrate the timestamps on a regular basis.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'CalibratedTimestampInfoEXT', 'Vulkan.Core10.Handles.Device'
+getCalibratedTimestampsEXT :: forall io . MonadIO io => Device -> ("timestampInfos" ::: Vector CalibratedTimestampInfoEXT) -> io (("timestamps" ::: Vector Word64), ("maxDeviation" ::: Word64))
+getCalibratedTimestampsEXT device timestampInfos = liftIO . evalContT $ do
+  let vkGetCalibratedTimestampsEXTPtr = pVkGetCalibratedTimestampsEXT (deviceCmds (device :: Device))
+  lift $ unless (vkGetCalibratedTimestampsEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetCalibratedTimestampsEXT is null" Nothing Nothing
+  let vkGetCalibratedTimestampsEXT' = mkVkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXTPtr
+  pPTimestampInfos <- ContT $ allocaBytesAligned @CalibratedTimestampInfoEXT ((Data.Vector.length (timestampInfos)) * 24) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPTimestampInfos `plusPtr` (24 * (i)) :: Ptr CalibratedTimestampInfoEXT) (e) . ($ ())) (timestampInfos)
+  pPTimestamps <- ContT $ bracket (callocBytes @Word64 ((fromIntegral ((fromIntegral (Data.Vector.length $ (timestampInfos)) :: Word32))) * 8)) free
+  pPMaxDeviation <- ContT $ bracket (callocBytes @Word64 8) free
+  r <- lift $ vkGetCalibratedTimestampsEXT' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (timestampInfos)) :: Word32)) (pPTimestampInfos) (pPTimestamps) (pPMaxDeviation)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pTimestamps <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (timestampInfos)) :: Word32))) (\i -> peek @Word64 ((pPTimestamps `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+  pMaxDeviation <- lift $ peek @Word64 pPMaxDeviation
+  pure $ (pTimestamps, pMaxDeviation)
+
+
+-- | VkCalibratedTimestampInfoEXT - Structure specifying the input parameters
+-- of a calibrated timestamp query
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'TimeDomainEXT',
+-- 'getCalibratedTimestampsEXT'
+data CalibratedTimestampInfoEXT = CalibratedTimestampInfoEXT
+  { -- | @timeDomain@ /must/ be a valid 'TimeDomainEXT' value
+    timeDomain :: TimeDomainEXT }
+  deriving (Typeable)
+deriving instance Show CalibratedTimestampInfoEXT
+
+instance ToCStruct CalibratedTimestampInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CalibratedTimestampInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr TimeDomainEXT)) (timeDomain)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr TimeDomainEXT)) (zero)
+    f
+
+instance FromCStruct CalibratedTimestampInfoEXT where
+  peekCStruct p = do
+    timeDomain <- peek @TimeDomainEXT ((p `plusPtr` 16 :: Ptr TimeDomainEXT))
+    pure $ CalibratedTimestampInfoEXT
+             timeDomain
+
+instance Storable CalibratedTimestampInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero CalibratedTimestampInfoEXT where
+  zero = CalibratedTimestampInfoEXT
+           zero
+
+
+-- | VkTimeDomainEXT - Supported time domains
+--
+-- = Description
+--
+-- > struct timespec tv;
+-- > clock_gettime(CLOCK_MONOTONIC, &tv);
+-- > return tv.tv_nsec + tv.tv_sec*1000000000ull;
+--
+-- > struct timespec tv;
+-- > clock_gettime(CLOCK_MONOTONIC_RAW, &tv);
+-- > return tv.tv_nsec + tv.tv_sec*1000000000ull;
+--
+-- > LARGE_INTEGER counter;
+-- > QueryPerformanceCounter(&counter);
+-- > return counter.QuadPart;
+--
+-- = See Also
+--
+-- 'CalibratedTimestampInfoEXT',
+-- 'getPhysicalDeviceCalibrateableTimeDomainsEXT'
+newtype TimeDomainEXT = TimeDomainEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'TIME_DOMAIN_DEVICE_EXT' specifies the device time domain. Timestamp
+-- values in this time domain use the same units and are comparable with
+-- device timestamp values captured using
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp' and are defined
+-- to be incrementing according to the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-timestampPeriod timestampPeriod>
+-- of the device.
+pattern TIME_DOMAIN_DEVICE_EXT = TimeDomainEXT 0
+-- | 'TIME_DOMAIN_CLOCK_MONOTONIC_EXT' specifies the CLOCK_MONOTONIC time
+-- domain available on POSIX platforms. Timestamp values in this time
+-- domain are in units of nanoseconds and are comparable with platform
+-- timestamp values captured using the POSIX clock_gettime API as computed
+-- by this example:
+pattern TIME_DOMAIN_CLOCK_MONOTONIC_EXT = TimeDomainEXT 1
+-- | 'TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT' specifies the CLOCK_MONOTONIC_RAW
+-- time domain available on POSIX platforms. Timestamp values in this time
+-- domain are in units of nanoseconds and are comparable with platform
+-- timestamp values captured using the POSIX clock_gettime API as computed
+-- by this example:
+pattern TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = TimeDomainEXT 2
+-- | 'TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT' specifies the performance
+-- counter (QPC) time domain available on Windows. Timestamp values in this
+-- time domain are in the same units as those provided by the Windows
+-- QueryPerformanceCounter API and are comparable with platform timestamp
+-- values captured using that API as computed by this example:
+pattern TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = TimeDomainEXT 3
+{-# complete TIME_DOMAIN_DEVICE_EXT,
+             TIME_DOMAIN_CLOCK_MONOTONIC_EXT,
+             TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT,
+             TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT :: TimeDomainEXT #-}
+
+instance Show TimeDomainEXT where
+  showsPrec p = \case
+    TIME_DOMAIN_DEVICE_EXT -> showString "TIME_DOMAIN_DEVICE_EXT"
+    TIME_DOMAIN_CLOCK_MONOTONIC_EXT -> showString "TIME_DOMAIN_CLOCK_MONOTONIC_EXT"
+    TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT -> showString "TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT"
+    TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT -> showString "TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT"
+    TimeDomainEXT x -> showParen (p >= 11) (showString "TimeDomainEXT " . showsPrec 11 x)
+
+instance Read TimeDomainEXT where
+  readPrec = parens (choose [("TIME_DOMAIN_DEVICE_EXT", pure TIME_DOMAIN_DEVICE_EXT)
+                            , ("TIME_DOMAIN_CLOCK_MONOTONIC_EXT", pure TIME_DOMAIN_CLOCK_MONOTONIC_EXT)
+                            , ("TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT", pure TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT)
+                            , ("TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT", pure TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "TimeDomainEXT")
+                       v <- step readPrec
+                       pure (TimeDomainEXT v)))
+
+
+type EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION"
+pattern EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION = 1
+
+
+type EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME = "VK_EXT_calibrated_timestamps"
+
+-- No documentation found for TopLevel "VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME"
+pattern EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME = "VK_EXT_calibrated_timestamps"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs-boot b/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs-boot
@@ -0,0 +1,18 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_calibrated_timestamps  ( CalibratedTimestampInfoEXT
+                                                       , TimeDomainEXT
+                                                       ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data CalibratedTimestampInfoEXT
+
+instance ToCStruct CalibratedTimestampInfoEXT
+instance Show CalibratedTimestampInfoEXT
+
+instance FromCStruct CalibratedTimestampInfoEXT
+
+
+data TimeDomainEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs b/src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs
@@ -0,0 +1,505 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_conditional_rendering  ( cmdBeginConditionalRenderingEXT
+                                                       , cmdUseConditionalRenderingEXT
+                                                       , cmdEndConditionalRenderingEXT
+                                                       , ConditionalRenderingBeginInfoEXT(..)
+                                                       , CommandBufferInheritanceConditionalRenderingInfoEXT(..)
+                                                       , PhysicalDeviceConditionalRenderingFeaturesEXT(..)
+                                                       , ConditionalRenderingFlagBitsEXT( CONDITIONAL_RENDERING_INVERTED_BIT_EXT
+                                                                                        , ..
+                                                                                        )
+                                                       , ConditionalRenderingFlagsEXT
+                                                       , EXT_CONDITIONAL_RENDERING_SPEC_VERSION
+                                                       , pattern EXT_CONDITIONAL_RENDERING_SPEC_VERSION
+                                                       , EXT_CONDITIONAL_RENDERING_EXTENSION_NAME
+                                                       , pattern EXT_CONDITIONAL_RENDERING_EXTENSION_NAME
+                                                       ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBeginConditionalRenderingEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdEndConditionalRenderingEXT))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBeginConditionalRenderingEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr ConditionalRenderingBeginInfoEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr ConditionalRenderingBeginInfoEXT -> IO ()
+
+-- | vkCmdBeginConditionalRenderingEXT - Define the beginning of a
+-- conditional rendering block
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which this command will
+--     be recorded.
+--
+-- -   @pConditionalRenderingBegin@ is a pointer to a
+--     'ConditionalRenderingBeginInfoEXT' structure specifying parameters
+--     of conditional rendering.
+--
+-- == Valid Usage
+--
+-- -   Conditional rendering /must/ not already be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pConditionalRenderingBegin@ /must/ be a valid pointer to a valid
+--     'ConditionalRenderingBeginInfoEXT' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'ConditionalRenderingBeginInfoEXT'
+cmdBeginConditionalRenderingEXT :: forall io . MonadIO io => CommandBuffer -> ConditionalRenderingBeginInfoEXT -> io ()
+cmdBeginConditionalRenderingEXT commandBuffer conditionalRenderingBegin = liftIO . evalContT $ do
+  let vkCmdBeginConditionalRenderingEXTPtr = pVkCmdBeginConditionalRenderingEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBeginConditionalRenderingEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginConditionalRenderingEXT is null" Nothing Nothing
+  let vkCmdBeginConditionalRenderingEXT' = mkVkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXTPtr
+  pConditionalRenderingBegin <- ContT $ withCStruct (conditionalRenderingBegin)
+  lift $ vkCmdBeginConditionalRenderingEXT' (commandBufferHandle (commandBuffer)) pConditionalRenderingBegin
+  pure $ ()
+
+-- | This function will call the supplied action between calls to
+-- 'cmdBeginConditionalRenderingEXT' and 'cmdEndConditionalRenderingEXT'
+--
+-- Note that 'cmdEndConditionalRenderingEXT' is *not* called if an
+-- exception is thrown by the inner action.
+cmdUseConditionalRenderingEXT :: forall io r . MonadIO io => CommandBuffer -> ConditionalRenderingBeginInfoEXT -> io r -> io r
+cmdUseConditionalRenderingEXT commandBuffer pConditionalRenderingBegin a =
+  (cmdBeginConditionalRenderingEXT commandBuffer pConditionalRenderingBegin) *> a <* (cmdEndConditionalRenderingEXT commandBuffer)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdEndConditionalRenderingEXT
+  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()
+
+-- | vkCmdEndConditionalRenderingEXT - Define the end of a conditional
+-- rendering block
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which this command will
+--     be recorded.
+--
+-- = Description
+--
+-- Once ended, conditional rendering becomes inactive.
+--
+-- == Valid Usage
+--
+-- -   Conditional rendering /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active>
+--
+-- -   If conditional rendering was made
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active>
+--     outside of a render pass instance, it /must/ not be ended inside a
+--     render pass instance
+--
+-- -   If conditional rendering was made
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active>
+--     within a subpass it /must/ be ended in the same subpass
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdEndConditionalRenderingEXT :: forall io . MonadIO io => CommandBuffer -> io ()
+cmdEndConditionalRenderingEXT commandBuffer = liftIO $ do
+  let vkCmdEndConditionalRenderingEXTPtr = pVkCmdEndConditionalRenderingEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdEndConditionalRenderingEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndConditionalRenderingEXT is null" Nothing Nothing
+  let vkCmdEndConditionalRenderingEXT' = mkVkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXTPtr
+  vkCmdEndConditionalRenderingEXT' (commandBufferHandle (commandBuffer))
+  pure $ ()
+
+
+-- | VkConditionalRenderingBeginInfoEXT - Structure specifying conditional
+-- rendering begin info
+--
+-- = Description
+--
+-- If the 32-bit value at @offset@ in @buffer@ memory is zero, then the
+-- rendering commands are discarded, otherwise they are executed as normal.
+-- If the value of the predicate in buffer memory changes while conditional
+-- rendering is active, the rendering commands /may/ be discarded in an
+-- implementation-dependent way. Some implementations may latch the value
+-- of the predicate upon beginning conditional rendering while others may
+-- read it before every rendering command.
+--
+-- == Valid Usage
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @buffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT'
+--     bit set
+--
+-- -   @offset@ /must/ be less than the size of @buffer@ by at least 32
+--     bits
+--
+-- -   @offset@ /must/ be a multiple of 4
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'ConditionalRenderingFlagBitsEXT' values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'ConditionalRenderingFlagsEXT',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdBeginConditionalRenderingEXT'
+data ConditionalRenderingBeginInfoEXT = ConditionalRenderingBeginInfoEXT
+  { -- | @buffer@ is a buffer containing the predicate for conditional rendering.
+    buffer :: Buffer
+  , -- | @offset@ is the byte offset into @buffer@ where the predicate is
+    -- located.
+    offset :: DeviceSize
+  , -- | @flags@ is a bitmask of 'ConditionalRenderingFlagsEXT' specifying the
+    -- behavior of conditional rendering.
+    flags :: ConditionalRenderingFlagsEXT
+  }
+  deriving (Typeable)
+deriving instance Show ConditionalRenderingBeginInfoEXT
+
+instance ToCStruct ConditionalRenderingBeginInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ConditionalRenderingBeginInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Buffer)) (buffer)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (offset)
+    poke ((p `plusPtr` 32 :: Ptr ConditionalRenderingFlagsEXT)) (flags)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct ConditionalRenderingBeginInfoEXT where
+  peekCStruct p = do
+    buffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
+    offset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    flags <- peek @ConditionalRenderingFlagsEXT ((p `plusPtr` 32 :: Ptr ConditionalRenderingFlagsEXT))
+    pure $ ConditionalRenderingBeginInfoEXT
+             buffer offset flags
+
+instance Storable ConditionalRenderingBeginInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ConditionalRenderingBeginInfoEXT where
+  zero = ConditionalRenderingBeginInfoEXT
+           zero
+           zero
+           zero
+
+
+-- | VkCommandBufferInheritanceConditionalRenderingInfoEXT - Structure
+-- specifying command buffer inheritance info
+--
+-- = Description
+--
+-- If this structure is not present, the behavior is as if
+-- @conditionalRenderingEnable@ is 'Vulkan.Core10.BaseType.FALSE'.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedConditionalRendering inherited conditional rendering>
+--     feature is not enabled, @conditionalRenderingEnable@ /must/ be
+--     'Vulkan.Core10.BaseType.FALSE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data CommandBufferInheritanceConditionalRenderingInfoEXT = CommandBufferInheritanceConditionalRenderingInfoEXT
+  { -- | @conditionalRenderingEnable@ specifies whether the command buffer /can/
+    -- be executed while conditional rendering is active in the primary command
+    -- buffer. If this is 'Vulkan.Core10.BaseType.TRUE', then this command
+    -- buffer /can/ be executed whether the primary command buffer has active
+    -- conditional rendering or not. If this is 'Vulkan.Core10.BaseType.FALSE',
+    -- then the primary command buffer /must/ not have conditional rendering
+    -- active.
+    conditionalRenderingEnable :: Bool }
+  deriving (Typeable)
+deriving instance Show CommandBufferInheritanceConditionalRenderingInfoEXT
+
+instance ToCStruct CommandBufferInheritanceConditionalRenderingInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CommandBufferInheritanceConditionalRenderingInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (conditionalRenderingEnable))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct CommandBufferInheritanceConditionalRenderingInfoEXT where
+  peekCStruct p = do
+    conditionalRenderingEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ CommandBufferInheritanceConditionalRenderingInfoEXT
+             (bool32ToBool conditionalRenderingEnable)
+
+instance Storable CommandBufferInheritanceConditionalRenderingInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero CommandBufferInheritanceConditionalRenderingInfoEXT where
+  zero = CommandBufferInheritanceConditionalRenderingInfoEXT
+           zero
+
+
+-- | VkPhysicalDeviceConditionalRenderingFeaturesEXT - Structure describing
+-- if a secondary command buffer can be executed if conditional rendering
+-- is active in the primary command buffer
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceConditionalRenderingFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating the implementation-dependent
+-- behavior. 'PhysicalDeviceConditionalRenderingFeaturesEXT' /can/ also be
+-- included in @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- enable the features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceConditionalRenderingFeaturesEXT = PhysicalDeviceConditionalRenderingFeaturesEXT
+  { -- | @conditionalRendering@ specifies whether conditional rendering is
+    -- supported.
+    conditionalRendering :: Bool
+  , -- | @inheritedConditionalRendering@ specifies whether a secondary command
+    -- buffer /can/ be executed while conditional rendering is active in the
+    -- primary command buffer.
+    inheritedConditionalRendering :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceConditionalRenderingFeaturesEXT
+
+instance ToCStruct PhysicalDeviceConditionalRenderingFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceConditionalRenderingFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (conditionalRendering))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (inheritedConditionalRendering))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceConditionalRenderingFeaturesEXT where
+  peekCStruct p = do
+    conditionalRendering <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    inheritedConditionalRendering <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceConditionalRenderingFeaturesEXT
+             (bool32ToBool conditionalRendering) (bool32ToBool inheritedConditionalRendering)
+
+instance Storable PhysicalDeviceConditionalRenderingFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceConditionalRenderingFeaturesEXT where
+  zero = PhysicalDeviceConditionalRenderingFeaturesEXT
+           zero
+           zero
+
+
+-- | VkConditionalRenderingFlagBitsEXT - Specify the behavior of conditional
+-- rendering
+--
+-- = See Also
+--
+-- 'ConditionalRenderingFlagsEXT'
+newtype ConditionalRenderingFlagBitsEXT = ConditionalRenderingFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'CONDITIONAL_RENDERING_INVERTED_BIT_EXT' specifies the condition used to
+-- determine whether to discard rendering commands or not. That is, if the
+-- 32-bit predicate read from @buffer@ memory at @offset@ is zero, the
+-- rendering commands are not discarded, and if non zero, then they are
+-- discarded.
+pattern CONDITIONAL_RENDERING_INVERTED_BIT_EXT = ConditionalRenderingFlagBitsEXT 0x00000001
+
+type ConditionalRenderingFlagsEXT = ConditionalRenderingFlagBitsEXT
+
+instance Show ConditionalRenderingFlagBitsEXT where
+  showsPrec p = \case
+    CONDITIONAL_RENDERING_INVERTED_BIT_EXT -> showString "CONDITIONAL_RENDERING_INVERTED_BIT_EXT"
+    ConditionalRenderingFlagBitsEXT x -> showParen (p >= 11) (showString "ConditionalRenderingFlagBitsEXT 0x" . showHex x)
+
+instance Read ConditionalRenderingFlagBitsEXT where
+  readPrec = parens (choose [("CONDITIONAL_RENDERING_INVERTED_BIT_EXT", pure CONDITIONAL_RENDERING_INVERTED_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ConditionalRenderingFlagBitsEXT")
+                       v <- step readPrec
+                       pure (ConditionalRenderingFlagBitsEXT v)))
+
+
+type EXT_CONDITIONAL_RENDERING_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION"
+pattern EXT_CONDITIONAL_RENDERING_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_CONDITIONAL_RENDERING_SPEC_VERSION = 2
+
+
+type EXT_CONDITIONAL_RENDERING_EXTENSION_NAME = "VK_EXT_conditional_rendering"
+
+-- No documentation found for TopLevel "VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME"
+pattern EXT_CONDITIONAL_RENDERING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_CONDITIONAL_RENDERING_EXTENSION_NAME = "VK_EXT_conditional_rendering"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs-boot b/src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_conditional_rendering  ( CommandBufferInheritanceConditionalRenderingInfoEXT
+                                                       , ConditionalRenderingBeginInfoEXT
+                                                       , PhysicalDeviceConditionalRenderingFeaturesEXT
+                                                       ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data CommandBufferInheritanceConditionalRenderingInfoEXT
+
+instance ToCStruct CommandBufferInheritanceConditionalRenderingInfoEXT
+instance Show CommandBufferInheritanceConditionalRenderingInfoEXT
+
+instance FromCStruct CommandBufferInheritanceConditionalRenderingInfoEXT
+
+
+data ConditionalRenderingBeginInfoEXT
+
+instance ToCStruct ConditionalRenderingBeginInfoEXT
+instance Show ConditionalRenderingBeginInfoEXT
+
+instance FromCStruct ConditionalRenderingBeginInfoEXT
+
+
+data PhysicalDeviceConditionalRenderingFeaturesEXT
+
+instance ToCStruct PhysicalDeviceConditionalRenderingFeaturesEXT
+instance Show PhysicalDeviceConditionalRenderingFeaturesEXT
+
+instance FromCStruct PhysicalDeviceConditionalRenderingFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs b/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
@@ -0,0 +1,361 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_conservative_rasterization  ( PhysicalDeviceConservativeRasterizationPropertiesEXT(..)
+                                                            , PipelineRasterizationConservativeStateCreateInfoEXT(..)
+                                                            , PipelineRasterizationConservativeStateCreateFlagsEXT(..)
+                                                            , ConservativeRasterizationModeEXT( CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
+                                                                                              , CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
+                                                                                              , CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT
+                                                                                              , ..
+                                                                                              )
+                                                            , EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION
+                                                            , pattern EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION
+                                                            , EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME
+                                                            , pattern EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME
+                                                            ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT))
+-- | VkPhysicalDeviceConservativeRasterizationPropertiesEXT - Structure
+-- describing conservative raster properties that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the
+-- 'PhysicalDeviceConservativeRasterizationPropertiesEXT' structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceConservativeRasterizationPropertiesEXT' structure
+-- is included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits and properties.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceConservativeRasterizationPropertiesEXT = PhysicalDeviceConservativeRasterizationPropertiesEXT
+  { -- | @primitiveOverestimationSize@ is the size in pixels the generating
+    -- primitive is increased at each of its edges during conservative
+    -- rasterization overestimation mode. Even with a size of 0.0, conservative
+    -- rasterization overestimation rules still apply and if any part of the
+    -- pixel rectangle is covered by the generating primitive, fragments are
+    -- generated for the entire pixel. However implementations /may/ make the
+    -- pixel coverage area even more conservative by increasing the size of the
+    -- generating primitive.
+    primitiveOverestimationSize :: Float
+  , -- | @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.
+    maxExtraPrimitiveOverestimationSize :: Float
+  , -- | @extraPrimitiveOverestimationSizeGranularity@ is the granularity of
+    -- extra overestimation that can be specified in the pipeline state between
+    -- 0.0 and @maxExtraPrimitiveOverestimationSize@ inclusive. A value of 0.0
+    -- means the implementation can use the smallest representable non-zero
+    -- value in the screen space pixel fixed-point grid.
+    extraPrimitiveOverestimationSizeGranularity :: Float
+  , -- | @primitiveUnderestimation@ is true if the implementation supports the
+    -- 'CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT' conservative
+    -- rasterization mode in addition to
+    -- 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT'. Otherwise the
+    -- implementation only supports
+    -- 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT'.
+    primitiveUnderestimation :: Bool
+  , -- | @conservativePointAndLineRasterization@ is true if the implementation
+    -- supports conservative rasterization of point and line primitives as well
+    -- as triangle primitives. Otherwise the implementation only supports
+    -- triangle primitives.
+    conservativePointAndLineRasterization :: Bool
+  , -- | @degenerateTrianglesRasterized@ is false if the implementation culls
+    -- primitives generated from triangles that become zero area after they are
+    -- quantized to the fixed-point rasterization pixel grid.
+    -- @degenerateTrianglesRasterized@ is true if these primitives are not
+    -- culled and the provoking vertex attributes and depth value are used for
+    -- the fragments. The primitive area calculation is done on the primitive
+    -- generated from the clipped triangle if applicable. Zero area primitives
+    -- are backfacing and the application /can/ enable backface culling if
+    -- desired.
+    degenerateTrianglesRasterized :: Bool
+  , -- | @degenerateLinesRasterized@ is false if the implementation culls lines
+    -- that become zero length after they are quantized to the fixed-point
+    -- rasterization pixel grid. @degenerateLinesRasterized@ is true if zero
+    -- length lines are not culled and the provoking vertex attributes and
+    -- depth value are used for the fragments.
+    degenerateLinesRasterized :: Bool
+  , -- | @fullyCoveredFragmentShaderInputVariable@ is true if the implementation
+    -- supports the SPIR-V builtin fragment shader input variable
+    -- @FullyCoveredEXT@ which specifies that conservative rasterization is
+    -- enabled and the fragment area is fully covered by the generating
+    -- primitive.
+    fullyCoveredFragmentShaderInputVariable :: Bool
+  , -- | @conservativeRasterizationPostDepthCoverage@ is true if the
+    -- implementation supports conservative rasterization with the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-earlytest-postdepthcoverage PostDepthCoverage>
+    -- execution mode enabled. When supported the
+    -- 'Vulkan.Core10.BaseType.SampleMask' built-in input variable will reflect
+    -- the coverage after the early per-fragment depth and stencil tests are
+    -- applied even when conservative rasterization is enabled. Otherwise
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-earlytest-postdepthcoverage PostDepthCoverage>
+    -- execution mode /must/ not be used when conservative rasterization is
+    -- enabled.
+    conservativeRasterizationPostDepthCoverage :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceConservativeRasterizationPropertiesEXT
+
+instance ToCStruct PhysicalDeviceConservativeRasterizationPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceConservativeRasterizationPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (primitiveOverestimationSize))
+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxExtraPrimitiveOverestimationSize))
+    poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (extraPrimitiveOverestimationSizeGranularity))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (primitiveUnderestimation))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (conservativePointAndLineRasterization))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (degenerateTrianglesRasterized))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (degenerateLinesRasterized))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (fullyCoveredFragmentShaderInputVariable))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (conservativeRasterizationPostDepthCoverage))
+    f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceConservativeRasterizationPropertiesEXT where
+  peekCStruct p = do
+    primitiveOverestimationSize <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
+    maxExtraPrimitiveOverestimationSize <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))
+    extraPrimitiveOverestimationSizeGranularity <- peek @CFloat ((p `plusPtr` 24 :: Ptr CFloat))
+    primitiveUnderestimation <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    conservativePointAndLineRasterization <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    degenerateTrianglesRasterized <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    degenerateLinesRasterized <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    fullyCoveredFragmentShaderInputVariable <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    conservativeRasterizationPostDepthCoverage <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    pure $ PhysicalDeviceConservativeRasterizationPropertiesEXT
+             ((\(CFloat a) -> a) primitiveOverestimationSize) ((\(CFloat a) -> a) maxExtraPrimitiveOverestimationSize) ((\(CFloat a) -> a) extraPrimitiveOverestimationSizeGranularity) (bool32ToBool primitiveUnderestimation) (bool32ToBool conservativePointAndLineRasterization) (bool32ToBool degenerateTrianglesRasterized) (bool32ToBool degenerateLinesRasterized) (bool32ToBool fullyCoveredFragmentShaderInputVariable) (bool32ToBool conservativeRasterizationPostDepthCoverage)
+
+instance Storable PhysicalDeviceConservativeRasterizationPropertiesEXT where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceConservativeRasterizationPropertiesEXT where
+  zero = PhysicalDeviceConservativeRasterizationPropertiesEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineRasterizationConservativeStateCreateInfoEXT - Structure
+-- specifying conservative raster state
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'ConservativeRasterizationModeEXT',
+-- 'PipelineRasterizationConservativeStateCreateFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineRasterizationConservativeStateCreateInfoEXT = PipelineRasterizationConservativeStateCreateInfoEXT
+  { -- | @flags@ /must/ be @0@
+    flags :: PipelineRasterizationConservativeStateCreateFlagsEXT
+  , -- | @conservativeRasterizationMode@ /must/ be a valid
+    -- 'ConservativeRasterizationModeEXT' value
+    conservativeRasterizationMode :: ConservativeRasterizationModeEXT
+  , -- | @extraPrimitiveOverestimationSize@ /must/ be in the range of @0.0@ to
+    -- 'PhysicalDeviceConservativeRasterizationPropertiesEXT'::@maxExtraPrimitiveOverestimationSize@
+    -- inclusive
+    extraPrimitiveOverestimationSize :: Float
+  }
+  deriving (Typeable)
+deriving instance Show PipelineRasterizationConservativeStateCreateInfoEXT
+
+instance ToCStruct PipelineRasterizationConservativeStateCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineRasterizationConservativeStateCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationConservativeStateCreateFlagsEXT)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr ConservativeRasterizationModeEXT)) (conservativeRasterizationMode)
+    poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (extraPrimitiveOverestimationSize))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr ConservativeRasterizationModeEXT)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (zero))
+    f
+
+instance FromCStruct PipelineRasterizationConservativeStateCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @PipelineRasterizationConservativeStateCreateFlagsEXT ((p `plusPtr` 16 :: Ptr PipelineRasterizationConservativeStateCreateFlagsEXT))
+    conservativeRasterizationMode <- peek @ConservativeRasterizationModeEXT ((p `plusPtr` 20 :: Ptr ConservativeRasterizationModeEXT))
+    extraPrimitiveOverestimationSize <- peek @CFloat ((p `plusPtr` 24 :: Ptr CFloat))
+    pure $ PipelineRasterizationConservativeStateCreateInfoEXT
+             flags conservativeRasterizationMode ((\(CFloat a) -> a) extraPrimitiveOverestimationSize)
+
+instance Storable PipelineRasterizationConservativeStateCreateInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineRasterizationConservativeStateCreateInfoEXT where
+  zero = PipelineRasterizationConservativeStateCreateInfoEXT
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineRasterizationConservativeStateCreateFlagsEXT - Reserved for
+-- future use
+--
+-- = Description
+--
+-- 'PipelineRasterizationConservativeStateCreateFlagsEXT' is a bitmask type
+-- for setting a mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'PipelineRasterizationConservativeStateCreateInfoEXT'
+newtype PipelineRasterizationConservativeStateCreateFlagsEXT = PipelineRasterizationConservativeStateCreateFlagsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineRasterizationConservativeStateCreateFlagsEXT where
+  showsPrec p = \case
+    PipelineRasterizationConservativeStateCreateFlagsEXT x -> showParen (p >= 11) (showString "PipelineRasterizationConservativeStateCreateFlagsEXT 0x" . showHex x)
+
+instance Read PipelineRasterizationConservativeStateCreateFlagsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineRasterizationConservativeStateCreateFlagsEXT")
+                       v <- step readPrec
+                       pure (PipelineRasterizationConservativeStateCreateFlagsEXT v)))
+
+
+-- | VkConservativeRasterizationModeEXT - Specify the conservative
+-- rasterization mode
+--
+-- = See Also
+--
+-- 'PipelineRasterizationConservativeStateCreateInfoEXT'
+newtype ConservativeRasterizationModeEXT = ConservativeRasterizationModeEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT' specifies that
+-- conservative rasterization is disabled and rasterization proceeds as
+-- normal.
+pattern CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = ConservativeRasterizationModeEXT 0
+-- | 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT' specifies that
+-- conservative rasterization is enabled in overestimation mode.
+pattern CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = ConservativeRasterizationModeEXT 1
+-- | 'CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT' specifies that
+-- conservative rasterization is enabled in underestimation mode.
+pattern CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = ConservativeRasterizationModeEXT 2
+{-# complete CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT,
+             CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT,
+             CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT :: ConservativeRasterizationModeEXT #-}
+
+instance Show ConservativeRasterizationModeEXT where
+  showsPrec p = \case
+    CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT -> showString "CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT"
+    CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT -> showString "CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT"
+    CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT -> showString "CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT"
+    ConservativeRasterizationModeEXT x -> showParen (p >= 11) (showString "ConservativeRasterizationModeEXT " . showsPrec 11 x)
+
+instance Read ConservativeRasterizationModeEXT where
+  readPrec = parens (choose [("CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", pure CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT)
+                            , ("CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT", pure CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT)
+                            , ("CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT", pure CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ConservativeRasterizationModeEXT")
+                       v <- step readPrec
+                       pure (ConservativeRasterizationModeEXT v)))
+
+
+type EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION"
+pattern EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION = 1
+
+
+type EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_conservative_rasterization"
+
+-- No documentation found for TopLevel "VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME"
+pattern EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_conservative_rasterization"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs-boot b/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_conservative_rasterization  ( PhysicalDeviceConservativeRasterizationPropertiesEXT
+                                                            , PipelineRasterizationConservativeStateCreateInfoEXT
+                                                            ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceConservativeRasterizationPropertiesEXT
+
+instance ToCStruct PhysicalDeviceConservativeRasterizationPropertiesEXT
+instance Show PhysicalDeviceConservativeRasterizationPropertiesEXT
+
+instance FromCStruct PhysicalDeviceConservativeRasterizationPropertiesEXT
+
+
+data PipelineRasterizationConservativeStateCreateInfoEXT
+
+instance ToCStruct PipelineRasterizationConservativeStateCreateInfoEXT
+instance Show PipelineRasterizationConservativeStateCreateInfoEXT
+
+instance FromCStruct PipelineRasterizationConservativeStateCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs b/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs
@@ -0,0 +1,248 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_custom_border_color  ( SamplerCustomBorderColorCreateInfoEXT(..)
+                                                     , PhysicalDeviceCustomBorderColorPropertiesEXT(..)
+                                                     , PhysicalDeviceCustomBorderColorFeaturesEXT(..)
+                                                     , EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION
+                                                     , pattern EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION
+                                                     , EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME
+                                                     , pattern EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME
+                                                     ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.SharedTypes (ClearColorValue)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT))
+-- | VkSamplerCustomBorderColorCreateInfoEXT - Structure specifying custom
+-- border color
+--
+-- == Valid Usage
+--
+-- -   If provided @format@ is not
+--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' then the
+--     'Vulkan.Core10.Sampler.SamplerCreateInfo'::@borderColor@ type /must/
+--     match the sampled type of the provided @format@, as shown in the
+--     /SPIR-V Sampled Type/ column of the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-numericformat>
+--     table
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-customBorderColorWithoutFormat customBorderColorWithoutFormat>
+--     feature is not enabled then @format@ /must/ not be
+--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
+--
+-- -   If the sampler is used to sample an image view of
+--     'Vulkan.Core10.Enums.Format.FORMAT_B4G4R4A4_UNORM_PACK16' format
+--     then @format@ /must/ not be
+--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT'
+--
+-- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.ClearColorValue',
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SamplerCustomBorderColorCreateInfoEXT = SamplerCustomBorderColorCreateInfoEXT
+  { -- | @customBorderColor@ is a 'Vulkan.Core10.SharedTypes.ClearColorValue'
+    -- representing the desired custom sampler border color.
+    customBorderColor :: ClearColorValue
+  , -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' representing the
+    -- format of the sampled image view(s). This field may be
+    -- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' if the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-customBorderColorWithoutFormat customBorderColorWithoutFormat>
+    -- feature is enabled.
+    format :: Format
+  }
+  deriving (Typeable)
+deriving instance Show SamplerCustomBorderColorCreateInfoEXT
+
+instance ToCStruct SamplerCustomBorderColorCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SamplerCustomBorderColorCreateInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ClearColorValue)) (customBorderColor) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr Format)) (format)
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ClearColorValue)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr Format)) (zero)
+    lift $ f
+
+instance Zero SamplerCustomBorderColorCreateInfoEXT where
+  zero = SamplerCustomBorderColorCreateInfoEXT
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceCustomBorderColorPropertiesEXT - Structure describing
+-- whether custom border colors can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceCustomBorderColorPropertiesEXT'
+-- structure describe the following features:
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceCustomBorderColorPropertiesEXT = PhysicalDeviceCustomBorderColorPropertiesEXT
+  { -- | @maxCustomBorderColorSamplers@ indicates the maximum number of samplers
+    -- with custom border colors which /can/ simultaneously exist on a device.
+    maxCustomBorderColorSamplers :: Word32 }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceCustomBorderColorPropertiesEXT
+
+instance ToCStruct PhysicalDeviceCustomBorderColorPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceCustomBorderColorPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxCustomBorderColorSamplers)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceCustomBorderColorPropertiesEXT where
+  peekCStruct p = do
+    maxCustomBorderColorSamplers <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ PhysicalDeviceCustomBorderColorPropertiesEXT
+             maxCustomBorderColorSamplers
+
+instance Storable PhysicalDeviceCustomBorderColorPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceCustomBorderColorPropertiesEXT where
+  zero = PhysicalDeviceCustomBorderColorPropertiesEXT
+           zero
+
+
+-- | VkPhysicalDeviceCustomBorderColorFeaturesEXT - Structure describing
+-- whether custom border colors can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceCustomBorderColorFeaturesEXT'
+-- structure describe the following features:
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceCustomBorderColorFeaturesEXT = PhysicalDeviceCustomBorderColorFeaturesEXT
+  { -- | @customBorderColors@ indicates that the implementation supports
+    -- providing a @borderColor@ value with one of the following values at
+    -- sampler creation time:
+    --
+    -- -   'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT'
+    customBorderColors :: Bool
+  , -- | @customBorderColorWithoutFormat@ indicates that explicit formats are not
+    -- required for custom border colors and the value of the @format@ member
+    -- of the 'SamplerCustomBorderColorCreateInfoEXT' structure /may/ be
+    -- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'. If this feature bit is
+    -- not set, applications /must/ provide the
+    -- 'Vulkan.Core10.Enums.Format.Format' of the image view(s) being sampled
+    -- by this sampler in the @format@ member of the
+    -- 'SamplerCustomBorderColorCreateInfoEXT' structure.
+    customBorderColorWithoutFormat :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceCustomBorderColorFeaturesEXT
+
+instance ToCStruct PhysicalDeviceCustomBorderColorFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceCustomBorderColorFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (customBorderColors))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (customBorderColorWithoutFormat))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceCustomBorderColorFeaturesEXT where
+  peekCStruct p = do
+    customBorderColors <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    customBorderColorWithoutFormat <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceCustomBorderColorFeaturesEXT
+             (bool32ToBool customBorderColors) (bool32ToBool customBorderColorWithoutFormat)
+
+instance Storable PhysicalDeviceCustomBorderColorFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceCustomBorderColorFeaturesEXT where
+  zero = PhysicalDeviceCustomBorderColorFeaturesEXT
+           zero
+           zero
+
+
+type EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION = 12
+
+-- No documentation found for TopLevel "VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION"
+pattern EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION = 12
+
+
+type EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME = "VK_EXT_custom_border_color"
+
+-- No documentation found for TopLevel "VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME"
+pattern EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME = "VK_EXT_custom_border_color"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs-boot b/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_custom_border_color.hs-boot
@@ -0,0 +1,30 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_custom_border_color  ( PhysicalDeviceCustomBorderColorFeaturesEXT
+                                                     , PhysicalDeviceCustomBorderColorPropertiesEXT
+                                                     , SamplerCustomBorderColorCreateInfoEXT
+                                                     ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceCustomBorderColorFeaturesEXT
+
+instance ToCStruct PhysicalDeviceCustomBorderColorFeaturesEXT
+instance Show PhysicalDeviceCustomBorderColorFeaturesEXT
+
+instance FromCStruct PhysicalDeviceCustomBorderColorFeaturesEXT
+
+
+data PhysicalDeviceCustomBorderColorPropertiesEXT
+
+instance ToCStruct PhysicalDeviceCustomBorderColorPropertiesEXT
+instance Show PhysicalDeviceCustomBorderColorPropertiesEXT
+
+instance FromCStruct PhysicalDeviceCustomBorderColorPropertiesEXT
+
+
+data SamplerCustomBorderColorCreateInfoEXT
+
+instance ToCStruct SamplerCustomBorderColorCreateInfoEXT
+instance Show SamplerCustomBorderColorCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_marker.hs b/src/Vulkan/Extensions/VK_EXT_debug_marker.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_debug_marker.hs
@@ -0,0 +1,603 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_debug_marker  ( debugMarkerSetObjectNameEXT
+                                              , debugMarkerSetObjectTagEXT
+                                              , cmdDebugMarkerBeginEXT
+                                              , cmdDebugMarkerEndEXT
+                                              , cmdDebugMarkerInsertEXT
+                                              , DebugMarkerObjectNameInfoEXT(..)
+                                              , DebugMarkerObjectTagInfoEXT(..)
+                                              , DebugMarkerMarkerInfoEXT(..)
+                                              , EXT_DEBUG_MARKER_SPEC_VERSION
+                                              , pattern EXT_DEBUG_MARKER_SPEC_VERSION
+                                              , EXT_DEBUG_MARKER_EXTENSION_NAME
+                                              , pattern EXT_DEBUG_MARKER_EXTENSION_NAME
+                                              , DebugReportObjectTypeEXT(..)
+                                              ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.ByteString (packCString)
+import Data.ByteString (useAsCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word64)
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDebugMarkerBeginEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDebugMarkerEndEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDebugMarkerInsertEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkDebugMarkerSetObjectNameEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkDebugMarkerSetObjectTagEXT))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDebugMarkerSetObjectNameEXT
+  :: FunPtr (Ptr Device_T -> Ptr DebugMarkerObjectNameInfoEXT -> IO Result) -> Ptr Device_T -> Ptr DebugMarkerObjectNameInfoEXT -> IO Result
+
+-- | vkDebugMarkerSetObjectNameEXT - Give a user-friendly name to an object
+--
+-- = Parameters
+--
+-- -   @device@ is the device that created the object.
+--
+-- -   @pNameInfo@ is a pointer to a 'DebugMarkerObjectNameInfoEXT'
+--     structure specifying the parameters of the name to set on the
+--     object.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pNameInfo@ /must/ be a valid pointer to a valid
+--     'DebugMarkerObjectNameInfoEXT' structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pNameInfo->object@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'DebugMarkerObjectNameInfoEXT', 'Vulkan.Core10.Handles.Device'
+debugMarkerSetObjectNameEXT :: forall io . MonadIO io => Device -> DebugMarkerObjectNameInfoEXT -> io ()
+debugMarkerSetObjectNameEXT device nameInfo = liftIO . evalContT $ do
+  let vkDebugMarkerSetObjectNameEXTPtr = pVkDebugMarkerSetObjectNameEXT (deviceCmds (device :: Device))
+  lift $ unless (vkDebugMarkerSetObjectNameEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDebugMarkerSetObjectNameEXT is null" Nothing Nothing
+  let vkDebugMarkerSetObjectNameEXT' = mkVkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXTPtr
+  pNameInfo <- ContT $ withCStruct (nameInfo)
+  r <- lift $ vkDebugMarkerSetObjectNameEXT' (deviceHandle (device)) pNameInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDebugMarkerSetObjectTagEXT
+  :: FunPtr (Ptr Device_T -> Ptr DebugMarkerObjectTagInfoEXT -> IO Result) -> Ptr Device_T -> Ptr DebugMarkerObjectTagInfoEXT -> IO Result
+
+-- | vkDebugMarkerSetObjectTagEXT - Attach arbitrary data to an object
+--
+-- = Parameters
+--
+-- -   @device@ is the device that created the object.
+--
+-- -   @pTagInfo@ is a pointer to a 'DebugMarkerObjectTagInfoEXT' structure
+--     specifying the parameters of the tag to attach to the object.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pTagInfo@ /must/ be a valid pointer to a valid
+--     'DebugMarkerObjectTagInfoEXT' structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pTagInfo->object@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'DebugMarkerObjectTagInfoEXT', 'Vulkan.Core10.Handles.Device'
+debugMarkerSetObjectTagEXT :: forall io . MonadIO io => Device -> DebugMarkerObjectTagInfoEXT -> io ()
+debugMarkerSetObjectTagEXT device tagInfo = liftIO . evalContT $ do
+  let vkDebugMarkerSetObjectTagEXTPtr = pVkDebugMarkerSetObjectTagEXT (deviceCmds (device :: Device))
+  lift $ unless (vkDebugMarkerSetObjectTagEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDebugMarkerSetObjectTagEXT is null" Nothing Nothing
+  let vkDebugMarkerSetObjectTagEXT' = mkVkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXTPtr
+  pTagInfo <- ContT $ withCStruct (tagInfo)
+  r <- lift $ vkDebugMarkerSetObjectTagEXT' (deviceHandle (device)) pTagInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDebugMarkerBeginEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr DebugMarkerMarkerInfoEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr DebugMarkerMarkerInfoEXT -> IO ()
+
+-- | vkCmdDebugMarkerBeginEXT - Open a command buffer marker region
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @pMarkerInfo@ is a pointer to a 'DebugMarkerMarkerInfoEXT' structure
+--     specifying the parameters of the marker region to open.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
+--     'DebugMarkerMarkerInfoEXT' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'DebugMarkerMarkerInfoEXT'
+cmdDebugMarkerBeginEXT :: forall io . MonadIO io => CommandBuffer -> DebugMarkerMarkerInfoEXT -> io ()
+cmdDebugMarkerBeginEXT commandBuffer markerInfo = liftIO . evalContT $ do
+  let vkCmdDebugMarkerBeginEXTPtr = pVkCmdDebugMarkerBeginEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdDebugMarkerBeginEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDebugMarkerBeginEXT is null" Nothing Nothing
+  let vkCmdDebugMarkerBeginEXT' = mkVkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXTPtr
+  pMarkerInfo <- ContT $ withCStruct (markerInfo)
+  lift $ vkCmdDebugMarkerBeginEXT' (commandBufferHandle (commandBuffer)) pMarkerInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDebugMarkerEndEXT
+  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()
+
+-- | vkCmdDebugMarkerEndEXT - Close a command buffer marker region
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- = 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
+-- 'cmdDebugMarkerBeginEXT' and 'cmdDebugMarkerEndEXT' /must/ be matched
+-- and balanced.
+--
+-- == Valid Usage
+--
+-- -   There /must/ be an outstanding 'cmdDebugMarkerBeginEXT' command
+--     prior to the 'cmdDebugMarkerEndEXT' on the queue that
+--     @commandBuffer@ is submitted to
+--
+-- -   If @commandBuffer@ is a secondary command buffer, there /must/ be an
+--     outstanding 'cmdDebugMarkerBeginEXT' command recorded to
+--     @commandBuffer@ that has not previously been ended by a call to
+--     'cmdDebugMarkerEndEXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdDebugMarkerEndEXT :: forall io . MonadIO io => CommandBuffer -> io ()
+cmdDebugMarkerEndEXT commandBuffer = liftIO $ do
+  let vkCmdDebugMarkerEndEXTPtr = pVkCmdDebugMarkerEndEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDebugMarkerEndEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDebugMarkerEndEXT is null" Nothing Nothing
+  let vkCmdDebugMarkerEndEXT' = mkVkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXTPtr
+  vkCmdDebugMarkerEndEXT' (commandBufferHandle (commandBuffer))
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDebugMarkerInsertEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr DebugMarkerMarkerInfoEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr DebugMarkerMarkerInfoEXT -> IO ()
+
+-- | vkCmdDebugMarkerInsertEXT - Insert a marker label into a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @pMarkerInfo@ is a pointer to a 'DebugMarkerMarkerInfoEXT' structure
+--     specifying the parameters of the marker to insert.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
+--     'DebugMarkerMarkerInfoEXT' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'DebugMarkerMarkerInfoEXT'
+cmdDebugMarkerInsertEXT :: forall io . MonadIO io => CommandBuffer -> DebugMarkerMarkerInfoEXT -> io ()
+cmdDebugMarkerInsertEXT commandBuffer markerInfo = liftIO . evalContT $ do
+  let vkCmdDebugMarkerInsertEXTPtr = pVkCmdDebugMarkerInsertEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdDebugMarkerInsertEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDebugMarkerInsertEXT is null" Nothing Nothing
+  let vkCmdDebugMarkerInsertEXT' = mkVkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXTPtr
+  pMarkerInfo <- ContT $ withCStruct (markerInfo)
+  lift $ vkCmdDebugMarkerInsertEXT' (commandBufferHandle (commandBuffer)) pMarkerInfo
+  pure $ ()
+
+
+-- | VkDebugMarkerObjectNameInfoEXT - Specify parameters of a name to give to
+-- an object
+--
+-- = Description
+--
+-- Applications /may/ change the name associated with an object simply by
+-- calling 'debugMarkerSetObjectNameEXT' again with a new string. To remove
+-- a previously set name, @pObjectName@ /should/ be set to an empty string.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'debugMarkerSetObjectNameEXT'
+data DebugMarkerObjectNameInfoEXT = DebugMarkerObjectNameInfoEXT
+  { -- | @objectType@ /must/ be a valid
+    -- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT' value
+    objectType :: DebugReportObjectTypeEXT
+  , -- | @object@ /must/ be a Vulkan object of the type associated with
+    -- @objectType@ as defined in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types>
+    object :: Word64
+  , -- | @pObjectName@ /must/ be a null-terminated UTF-8 string
+    objectName :: ByteString
+  }
+  deriving (Typeable)
+deriving instance Show DebugMarkerObjectNameInfoEXT
+
+instance ToCStruct DebugMarkerObjectNameInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DebugMarkerObjectNameInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT)) (objectType)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word64)) (object)
+    pObjectName'' <- ContT $ useAsCString (objectName)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pObjectName''
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    pObjectName'' <- ContT $ useAsCString (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pObjectName''
+    lift $ f
+
+instance FromCStruct DebugMarkerObjectNameInfoEXT where
+  peekCStruct p = do
+    objectType <- peek @DebugReportObjectTypeEXT ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT))
+    object <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    pObjectName <- packCString =<< peek ((p `plusPtr` 32 :: Ptr (Ptr CChar)))
+    pure $ DebugMarkerObjectNameInfoEXT
+             objectType object pObjectName
+
+instance Zero DebugMarkerObjectNameInfoEXT where
+  zero = DebugMarkerObjectNameInfoEXT
+           zero
+           zero
+           mempty
+
+
+-- | VkDebugMarkerObjectTagInfoEXT - Specify parameters of a tag to attach to
+-- an object
+--
+-- = 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 (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'debugMarkerSetObjectTagEXT'
+data DebugMarkerObjectTagInfoEXT = DebugMarkerObjectTagInfoEXT
+  { -- | @objectType@ /must/ be a valid
+    -- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT' value
+    objectType :: DebugReportObjectTypeEXT
+  , -- | @object@ /must/ be a Vulkan object of the type associated with
+    -- @objectType@ as defined in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types>
+    object :: Word64
+  , -- | @tagName@ is a numerical identifier of the tag.
+    tagName :: Word64
+  , -- | @tagSize@ /must/ be greater than @0@
+    tagSize :: Word64
+  , -- | @pTag@ /must/ be a valid pointer to an array of @tagSize@ bytes
+    tag :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show DebugMarkerObjectTagInfoEXT
+
+instance ToCStruct DebugMarkerObjectTagInfoEXT where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DebugMarkerObjectTagInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT)) (objectType)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (object)
+    poke ((p `plusPtr` 32 :: Ptr Word64)) (tagName)
+    poke ((p `plusPtr` 40 :: Ptr CSize)) (CSize (tagSize))
+    poke ((p `plusPtr` 48 :: Ptr (Ptr ()))) (tag)
+    f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr CSize)) (CSize (zero))
+    poke ((p `plusPtr` 48 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct DebugMarkerObjectTagInfoEXT where
+  peekCStruct p = do
+    objectType <- peek @DebugReportObjectTypeEXT ((p `plusPtr` 16 :: Ptr DebugReportObjectTypeEXT))
+    object <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    tagName <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))
+    tagSize <- peek @CSize ((p `plusPtr` 40 :: Ptr CSize))
+    pTag <- peek @(Ptr ()) ((p `plusPtr` 48 :: Ptr (Ptr ())))
+    pure $ DebugMarkerObjectTagInfoEXT
+             objectType object tagName ((\(CSize a) -> a) tagSize) pTag
+
+instance Storable DebugMarkerObjectTagInfoEXT where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DebugMarkerObjectTagInfoEXT where
+  zero = DebugMarkerObjectTagInfoEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDebugMarkerMarkerInfoEXT - Specify parameters of a command buffer
+-- marker region
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdDebugMarkerBeginEXT', 'cmdDebugMarkerInsertEXT'
+data DebugMarkerMarkerInfoEXT = DebugMarkerMarkerInfoEXT
+  { -- | @pMarkerName@ /must/ be a null-terminated UTF-8 string
+    markerName :: ByteString
+  , -- | @color@ is an /optional/ RGBA color value that can be associated with
+    -- the marker. A particular implementation /may/ choose to ignore this
+    -- color value. The values contain RGBA values in order, in the range 0.0
+    -- to 1.0. If all elements in @color@ are set to 0.0 then it is ignored.
+    color :: (Float, Float, Float, Float)
+  }
+  deriving (Typeable)
+deriving instance Show DebugMarkerMarkerInfoEXT
+
+instance ToCStruct DebugMarkerMarkerInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DebugMarkerMarkerInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pMarkerName'' <- ContT $ useAsCString (markerName)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pMarkerName''
+    let pColor' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 4 CFloat)))
+    lift $ case (color) of
+      (e0, e1, e2, e3) -> do
+        poke (pColor' :: Ptr CFloat) (CFloat (e0))
+        poke (pColor' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+        poke (pColor' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
+        poke (pColor' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pMarkerName'' <- ContT $ useAsCString (mempty)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pMarkerName''
+    lift $ f
+
+instance FromCStruct DebugMarkerMarkerInfoEXT where
+  peekCStruct p = do
+    pMarkerName <- packCString =<< peek ((p `plusPtr` 16 :: Ptr (Ptr CChar)))
+    let pcolor = lowerArrayPtr @CFloat ((p `plusPtr` 24 :: Ptr (FixedArray 4 CFloat)))
+    color0 <- peek @CFloat ((pcolor `advancePtrBytes` 0 :: Ptr CFloat))
+    color1 <- peek @CFloat ((pcolor `advancePtrBytes` 4 :: Ptr CFloat))
+    color2 <- peek @CFloat ((pcolor `advancePtrBytes` 8 :: Ptr CFloat))
+    color3 <- peek @CFloat ((pcolor `advancePtrBytes` 12 :: Ptr CFloat))
+    pure $ DebugMarkerMarkerInfoEXT
+             pMarkerName ((((\(CFloat a) -> a) color0), ((\(CFloat a) -> a) color1), ((\(CFloat a) -> a) color2), ((\(CFloat a) -> a) color3)))
+
+instance Zero DebugMarkerMarkerInfoEXT where
+  zero = DebugMarkerMarkerInfoEXT
+           mempty
+           (zero, zero, zero, zero)
+
+
+type EXT_DEBUG_MARKER_SPEC_VERSION = 4
+
+-- No documentation found for TopLevel "VK_EXT_DEBUG_MARKER_SPEC_VERSION"
+pattern EXT_DEBUG_MARKER_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_DEBUG_MARKER_SPEC_VERSION = 4
+
+
+type EXT_DEBUG_MARKER_EXTENSION_NAME = "VK_EXT_debug_marker"
+
+-- No documentation found for TopLevel "VK_EXT_DEBUG_MARKER_EXTENSION_NAME"
+pattern EXT_DEBUG_MARKER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_DEBUG_MARKER_EXTENSION_NAME = "VK_EXT_debug_marker"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_marker.hs-boot b/src/Vulkan/Extensions/VK_EXT_debug_marker.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_debug_marker.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_debug_marker  ( DebugMarkerMarkerInfoEXT
+                                              , DebugMarkerObjectNameInfoEXT
+                                              , DebugMarkerObjectTagInfoEXT
+                                              ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DebugMarkerMarkerInfoEXT
+
+instance ToCStruct DebugMarkerMarkerInfoEXT
+instance Show DebugMarkerMarkerInfoEXT
+
+instance FromCStruct DebugMarkerMarkerInfoEXT
+
+
+data DebugMarkerObjectNameInfoEXT
+
+instance ToCStruct DebugMarkerObjectNameInfoEXT
+instance Show DebugMarkerObjectNameInfoEXT
+
+instance FromCStruct DebugMarkerObjectNameInfoEXT
+
+
+data DebugMarkerObjectTagInfoEXT
+
+instance ToCStruct DebugMarkerObjectTagInfoEXT
+instance Show DebugMarkerObjectTagInfoEXT
+
+instance FromCStruct DebugMarkerObjectTagInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_report.hs b/src/Vulkan/Extensions/VK_EXT_debug_report.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_debug_report.hs
@@ -0,0 +1,862 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_debug_report  ( createDebugReportCallbackEXT
+                                              , withDebugReportCallbackEXT
+                                              , destroyDebugReportCallbackEXT
+                                              , debugReportMessageEXT
+                                              , pattern STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT
+                                              , DebugReportCallbackCreateInfoEXT(..)
+                                              , DebugReportFlagBitsEXT( DEBUG_REPORT_INFORMATION_BIT_EXT
+                                                                      , DEBUG_REPORT_WARNING_BIT_EXT
+                                                                      , DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT
+                                                                      , DEBUG_REPORT_ERROR_BIT_EXT
+                                                                      , DEBUG_REPORT_DEBUG_BIT_EXT
+                                                                      , ..
+                                                                      )
+                                              , DebugReportFlagsEXT
+                                              , DebugReportObjectTypeEXT( DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT
+                                                                        , DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT
+                                                                        , ..
+                                                                        )
+                                              , PFN_vkDebugReportCallbackEXT
+                                              , FN_vkDebugReportCallbackEXT
+                                              , EXT_DEBUG_REPORT_SPEC_VERSION
+                                              , pattern EXT_DEBUG_REPORT_SPEC_VERSION
+                                              , EXT_DEBUG_REPORT_EXTENSION_NAME
+                                              , pattern EXT_DEBUG_REPORT_EXTENSION_NAME
+                                              , DebugReportCallbackEXT(..)
+                                              ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.ByteString (useAsCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Foreign.C.Types (CChar(..))
+import Foreign.C.Types (CSize(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Extensions.Handles (DebugReportCallbackEXT)
+import Vulkan.Extensions.Handles (DebugReportCallbackEXT(..))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateDebugReportCallbackEXT))
+import Vulkan.Dynamic (InstanceCmds(pVkDebugReportMessageEXT))
+import Vulkan.Dynamic (InstanceCmds(pVkDestroyDebugReportCallbackEXT))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (DebugReportCallbackEXT(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateDebugReportCallbackEXT
+  :: FunPtr (Ptr Instance_T -> Ptr DebugReportCallbackCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr DebugReportCallbackEXT -> IO Result) -> Ptr Instance_T -> Ptr DebugReportCallbackCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr DebugReportCallbackEXT -> IO Result
+
+-- | vkCreateDebugReportCallbackEXT - Create a debug report callback object
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance the callback will be logged on.
+--
+-- -   @pCreateInfo@ is a pointer to a 'DebugReportCallbackCreateInfoEXT'
+--     structure defining the conditions under which this callback will be
+--     called.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pCallback@ is a pointer to a
+--     'Vulkan.Extensions.Handles.DebugReportCallbackEXT' handle in which
+--     the created object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'DebugReportCallbackCreateInfoEXT' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pCallback@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.DebugReportCallbackEXT' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'DebugReportCallbackCreateInfoEXT',
+-- 'Vulkan.Extensions.Handles.DebugReportCallbackEXT',
+-- 'Vulkan.Core10.Handles.Instance'
+createDebugReportCallbackEXT :: forall io . MonadIO io => Instance -> DebugReportCallbackCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DebugReportCallbackEXT)
+createDebugReportCallbackEXT instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateDebugReportCallbackEXTPtr = pVkCreateDebugReportCallbackEXT (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateDebugReportCallbackEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateDebugReportCallbackEXT is null" Nothing Nothing
+  let vkCreateDebugReportCallbackEXT' = mkVkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXTPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPCallback <- ContT $ bracket (callocBytes @DebugReportCallbackEXT 8) free
+  r <- lift $ vkCreateDebugReportCallbackEXT' (instanceHandle (instance')) pCreateInfo pAllocator (pPCallback)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pCallback <- lift $ peek @DebugReportCallbackEXT pPCallback
+  pure $ (pCallback)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createDebugReportCallbackEXT' and 'destroyDebugReportCallbackEXT'
+--
+-- To ensure that 'destroyDebugReportCallbackEXT' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withDebugReportCallbackEXT :: forall io r . MonadIO io => Instance -> DebugReportCallbackCreateInfoEXT -> Maybe AllocationCallbacks -> (io (DebugReportCallbackEXT) -> ((DebugReportCallbackEXT) -> io ()) -> r) -> r
+withDebugReportCallbackEXT instance' pCreateInfo pAllocator b =
+  b (createDebugReportCallbackEXT instance' pCreateInfo pAllocator)
+    (\(o0) -> destroyDebugReportCallbackEXT instance' o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyDebugReportCallbackEXT
+  :: FunPtr (Ptr Instance_T -> DebugReportCallbackEXT -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> DebugReportCallbackEXT -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyDebugReportCallbackEXT - Destroy a debug report callback object
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance where the callback was created.
+--
+-- -   @callback@ is the 'Vulkan.Extensions.Handles.DebugReportCallbackEXT'
+--     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 'destroyDebugReportCallbackEXT' /must/ not be called when a
+--     callback is active.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @callback@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @callback@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   If @callback@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @callback@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.DebugReportCallbackEXT' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @callback@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @instance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @callback@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Extensions.Handles.DebugReportCallbackEXT',
+-- 'Vulkan.Core10.Handles.Instance'
+destroyDebugReportCallbackEXT :: forall io . MonadIO io => Instance -> DebugReportCallbackEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyDebugReportCallbackEXT instance' callback allocator = liftIO . evalContT $ do
+  let vkDestroyDebugReportCallbackEXTPtr = pVkDestroyDebugReportCallbackEXT (instanceCmds (instance' :: Instance))
+  lift $ unless (vkDestroyDebugReportCallbackEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyDebugReportCallbackEXT is null" Nothing Nothing
+  let vkDestroyDebugReportCallbackEXT' = mkVkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXTPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyDebugReportCallbackEXT' (instanceHandle (instance')) (callback) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDebugReportMessageEXT
+  :: FunPtr (Ptr Instance_T -> DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> Word64 -> CSize -> Int32 -> Ptr CChar -> Ptr CChar -> IO ()) -> Ptr Instance_T -> DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> Word64 -> CSize -> Int32 -> Ptr CChar -> Ptr CChar -> IO ()
+
+-- | vkDebugReportMessageEXT - Inject a message into a debug stream
+--
+-- = Parameters
+--
+-- -   @instance@ is the debug stream’s 'Vulkan.Core10.Handles.Instance'.
+--
+-- -   @flags@ specifies the 'DebugReportFlagBitsEXT' classification of
+--     this event\/message.
+--
+-- -   @objectType@ is a 'DebugReportObjectTypeEXT' 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. @object@ /can/
+--     be 'Vulkan.Core10.APIConstants.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
+--
+-- 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
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @objectType@ is not 'DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT' and
+--     @object@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @object@
+--     /must/ be a Vulkan object of the corresponding type associated with
+--     @objectType@ as defined in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @flags@ /must/ be a valid combination of 'DebugReportFlagBitsEXT'
+--     values
+--
+-- -   @flags@ /must/ not be @0@
+--
+-- -   @objectType@ /must/ be a valid 'DebugReportObjectTypeEXT' value
+--
+-- -   @pLayerPrefix@ /must/ be a null-terminated UTF-8 string
+--
+-- -   @pMessage@ /must/ be a null-terminated UTF-8 string
+--
+-- = See Also
+--
+-- 'DebugReportFlagsEXT', 'DebugReportObjectTypeEXT',
+-- 'Vulkan.Core10.Handles.Instance'
+debugReportMessageEXT :: forall io . MonadIO io => Instance -> DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> ("object" ::: Word64) -> ("location" ::: Word64) -> ("messageCode" ::: Int32) -> ("layerPrefix" ::: ByteString) -> ("message" ::: ByteString) -> io ()
+debugReportMessageEXT instance' flags objectType object location messageCode layerPrefix message = liftIO . evalContT $ do
+  let vkDebugReportMessageEXTPtr = pVkDebugReportMessageEXT (instanceCmds (instance' :: Instance))
+  lift $ unless (vkDebugReportMessageEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDebugReportMessageEXT is null" Nothing Nothing
+  let vkDebugReportMessageEXT' = mkVkDebugReportMessageEXT vkDebugReportMessageEXTPtr
+  pLayerPrefix <- ContT $ useAsCString (layerPrefix)
+  pMessage <- ContT $ useAsCString (message)
+  lift $ vkDebugReportMessageEXT' (instanceHandle (instance')) (flags) (objectType) (object) (CSize (location)) (messageCode) pLayerPrefix pMessage
+  pure $ ()
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
+
+
+-- | VkDebugReportCallbackCreateInfoEXT - Structure specifying parameters of
+-- a newly created debug report callback
+--
+-- = Description
+--
+-- For each 'Vulkan.Extensions.Handles.DebugReportCallbackEXT' that is
+-- created the 'DebugReportCallbackCreateInfoEXT'::@flags@ determine when
+-- that 'DebugReportCallbackCreateInfoEXT'::@pfnCallback@ is called. When
+-- an event happens, the implementation will do a bitwise AND of the
+-- event’s 'DebugReportFlagBitsEXT' flags to each
+-- 'Vulkan.Extensions.Handles.DebugReportCallbackEXT' 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
+-- 'Vulkan.Extensions.Handles.DebugReportCallbackEXT' 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 (Implicit)
+--
+-- = See Also
+--
+-- 'PFN_vkDebugReportCallbackEXT', 'DebugReportFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createDebugReportCallbackEXT'
+data DebugReportCallbackCreateInfoEXT = DebugReportCallbackCreateInfoEXT
+  { -- | @flags@ /must/ be a valid combination of 'DebugReportFlagBitsEXT' values
+    flags :: DebugReportFlagsEXT
+  , -- | @pfnCallback@ /must/ be a valid 'PFN_vkDebugReportCallbackEXT' value
+    pfnCallback :: PFN_vkDebugReportCallbackEXT
+  , -- | @pUserData@ is user data to be passed to the callback.
+    userData :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show DebugReportCallbackCreateInfoEXT
+
+instance ToCStruct DebugReportCallbackCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DebugReportCallbackCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DebugReportFlagsEXT)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr PFN_vkDebugReportCallbackEXT)) (pfnCallback)
+    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (userData)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr PFN_vkDebugReportCallbackEXT)) (zero)
+    f
+
+instance FromCStruct DebugReportCallbackCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @DebugReportFlagsEXT ((p `plusPtr` 16 :: Ptr DebugReportFlagsEXT))
+    pfnCallback <- peek @PFN_vkDebugReportCallbackEXT ((p `plusPtr` 24 :: Ptr PFN_vkDebugReportCallbackEXT))
+    pUserData <- peek @(Ptr ()) ((p `plusPtr` 32 :: Ptr (Ptr ())))
+    pure $ DebugReportCallbackCreateInfoEXT
+             flags pfnCallback pUserData
+
+instance Storable DebugReportCallbackCreateInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DebugReportCallbackCreateInfoEXT where
+  zero = DebugReportCallbackCreateInfoEXT
+           zero
+           zero
+           zero
+
+
+-- | VkDebugReportFlagBitsEXT - Bitmask specifying events which cause a debug
+-- report callback
+--
+-- = See Also
+--
+-- 'DebugReportFlagsEXT'
+newtype DebugReportFlagBitsEXT = DebugReportFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'DEBUG_REPORT_INFORMATION_BIT_EXT' specifies an informational message
+-- such as resource details that may be handy when debugging an
+-- application.
+pattern DEBUG_REPORT_INFORMATION_BIT_EXT = DebugReportFlagBitsEXT 0x00000001
+-- | '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 DEBUG_REPORT_WARNING_BIT_EXT = DebugReportFlagBitsEXT 0x00000002
+-- | 'DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT' specifies a potentially
+-- non-optimal use of Vulkan, e.g. using
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage' when setting
+-- 'Vulkan.Core10.Pass.AttachmentDescription'::@loadOp@ to
+-- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' would
+-- have worked.
+pattern DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = DebugReportFlagBitsEXT 0x00000004
+-- | 'DEBUG_REPORT_ERROR_BIT_EXT' specifies that the application has violated
+-- a valid usage condition of the specification.
+pattern DEBUG_REPORT_ERROR_BIT_EXT = DebugReportFlagBitsEXT 0x00000008
+-- | 'DEBUG_REPORT_DEBUG_BIT_EXT' specifies diagnostic information from the
+-- implementation and layers.
+pattern DEBUG_REPORT_DEBUG_BIT_EXT = DebugReportFlagBitsEXT 0x00000010
+
+type DebugReportFlagsEXT = DebugReportFlagBitsEXT
+
+instance Show DebugReportFlagBitsEXT where
+  showsPrec p = \case
+    DEBUG_REPORT_INFORMATION_BIT_EXT -> showString "DEBUG_REPORT_INFORMATION_BIT_EXT"
+    DEBUG_REPORT_WARNING_BIT_EXT -> showString "DEBUG_REPORT_WARNING_BIT_EXT"
+    DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT -> showString "DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT"
+    DEBUG_REPORT_ERROR_BIT_EXT -> showString "DEBUG_REPORT_ERROR_BIT_EXT"
+    DEBUG_REPORT_DEBUG_BIT_EXT -> showString "DEBUG_REPORT_DEBUG_BIT_EXT"
+    DebugReportFlagBitsEXT x -> showParen (p >= 11) (showString "DebugReportFlagBitsEXT 0x" . showHex x)
+
+instance Read DebugReportFlagBitsEXT where
+  readPrec = parens (choose [("DEBUG_REPORT_INFORMATION_BIT_EXT", pure DEBUG_REPORT_INFORMATION_BIT_EXT)
+                            , ("DEBUG_REPORT_WARNING_BIT_EXT", pure DEBUG_REPORT_WARNING_BIT_EXT)
+                            , ("DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT", pure DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT)
+                            , ("DEBUG_REPORT_ERROR_BIT_EXT", pure DEBUG_REPORT_ERROR_BIT_EXT)
+                            , ("DEBUG_REPORT_DEBUG_BIT_EXT", pure DEBUG_REPORT_DEBUG_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DebugReportFlagBitsEXT")
+                       v <- step readPrec
+                       pure (DebugReportFlagBitsEXT v)))
+
+
+-- | VkDebugReportObjectTypeEXT - Specify the type of an object handle
+--
+-- = Description
+--
+-- \'
+--
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DebugReportObjectTypeEXT'                                | Vulkan Handle Type                                 |
+-- +===========================================================+====================================================+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT'                    | Unknown\/Undefined Handle                          |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT'                   | 'Vulkan.Core10.Handles.Instance'                   |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT'            | 'Vulkan.Core10.Handles.PhysicalDevice'             |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT'                     | 'Vulkan.Core10.Handles.Device'                     |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT'                      | 'Vulkan.Core10.Handles.Queue'                      |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT'                  | 'Vulkan.Core10.Handles.Semaphore'                  |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT'             | 'Vulkan.Core10.Handles.CommandBuffer'              |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT'                      | 'Vulkan.Core10.Handles.Fence'                      |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT'              | 'Vulkan.Core10.Handles.DeviceMemory'               |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT'                     | 'Vulkan.Core10.Handles.Buffer'                     |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT'                      | 'Vulkan.Core10.Handles.Image'                      |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT'                      | 'Vulkan.Core10.Handles.Event'                      |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT'                 | 'Vulkan.Core10.Handles.QueryPool'                  |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT'                | 'Vulkan.Core10.Handles.BufferView'                 |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT'                 | 'Vulkan.Core10.Handles.ImageView'                  |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT'              | 'Vulkan.Core10.Handles.ShaderModule'               |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT'             | 'Vulkan.Core10.Handles.PipelineCache'              |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT'            | 'Vulkan.Core10.Handles.PipelineLayout'             |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT'                | 'Vulkan.Core10.Handles.RenderPass'                 |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT'                   | 'Vulkan.Core10.Handles.Pipeline'                   |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT'      | 'Vulkan.Core10.Handles.DescriptorSetLayout'        |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT'                    | 'Vulkan.Core10.Handles.Sampler'                    |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT'            | 'Vulkan.Core10.Handles.DescriptorPool'             |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT'             | 'Vulkan.Core10.Handles.DescriptorSet'              |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT'                | 'Vulkan.Core10.Handles.Framebuffer'                |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT'               | 'Vulkan.Core10.Handles.CommandPool'                |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT'                | 'Vulkan.Extensions.Handles.SurfaceKHR'             |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT'              | 'Vulkan.Extensions.Handles.SwapchainKHR'           |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT'  | 'Vulkan.Extensions.Handles.DebugReportCallbackEXT' |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT'                | 'Vulkan.Extensions.Handles.DisplayKHR'             |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT'           | 'Vulkan.Extensions.Handles.DisplayModeKHR'         |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+-- | 'DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT' | 'Vulkan.Core11.Handles.DescriptorUpdateTemplate'   |
+-- +-----------------------------------------------------------+----------------------------------------------------+
+--
+-- 'DebugReportObjectTypeEXT' and Vulkan Handle Relationship
+--
+-- Note
+--
+-- The primary expected use of
+-- 'Vulkan.Core10.Enums.Result.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
+--
+-- 'Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerObjectNameInfoEXT',
+-- 'Vulkan.Extensions.VK_EXT_debug_marker.DebugMarkerObjectTagInfoEXT',
+-- 'debugReportMessageEXT'
+newtype DebugReportObjectTypeEXT = DebugReportObjectTypeEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = DebugReportObjectTypeEXT 0
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = DebugReportObjectTypeEXT 1
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = DebugReportObjectTypeEXT 2
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = DebugReportObjectTypeEXT 3
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = DebugReportObjectTypeEXT 4
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = DebugReportObjectTypeEXT 5
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = DebugReportObjectTypeEXT 6
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = DebugReportObjectTypeEXT 7
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = DebugReportObjectTypeEXT 8
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = DebugReportObjectTypeEXT 9
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = DebugReportObjectTypeEXT 10
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = DebugReportObjectTypeEXT 11
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = DebugReportObjectTypeEXT 12
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = DebugReportObjectTypeEXT 13
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = DebugReportObjectTypeEXT 14
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = DebugReportObjectTypeEXT 15
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = DebugReportObjectTypeEXT 16
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = DebugReportObjectTypeEXT 17
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = DebugReportObjectTypeEXT 18
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = DebugReportObjectTypeEXT 19
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = DebugReportObjectTypeEXT 20
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = DebugReportObjectTypeEXT 21
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = DebugReportObjectTypeEXT 22
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = DebugReportObjectTypeEXT 23
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = DebugReportObjectTypeEXT 24
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = DebugReportObjectTypeEXT 25
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = DebugReportObjectTypeEXT 26
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = DebugReportObjectTypeEXT 27
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = DebugReportObjectTypeEXT 28
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = DebugReportObjectTypeEXT 29
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = DebugReportObjectTypeEXT 30
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = DebugReportObjectTypeEXT 33
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = DebugReportObjectTypeEXT 1000156000
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT = DebugReportObjectTypeEXT 1000165000
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = DebugReportObjectTypeEXT 1000085000
+{-# complete DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT,
+             DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT :: DebugReportObjectTypeEXT #-}
+
+instance Show DebugReportObjectTypeEXT where
+  showsPrec p = \case
+    DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT"
+    DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT -> showString "DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT"
+    DebugReportObjectTypeEXT x -> showParen (p >= 11) (showString "DebugReportObjectTypeEXT " . showsPrec 11 x)
+
+instance Read DebugReportObjectTypeEXT where
+  readPrec = parens (choose [("DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT", pure DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT", pure DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT", pure DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT", pure DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT", pure DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT", pure DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT", pure DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT", pure DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT", pure DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT", pure DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT", pure DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT", pure DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT", pure DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT", pure DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT)
+                            , ("DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT", pure DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DebugReportObjectTypeEXT")
+                       v <- step readPrec
+                       pure (DebugReportObjectTypeEXT v)))
+
+
+type FN_vkDebugReportCallbackEXT = DebugReportFlagsEXT -> DebugReportObjectTypeEXT -> ("object" ::: Word64) -> ("location" ::: CSize) -> ("messageCode" ::: Int32) -> ("pLayerPrefix" ::: Ptr CChar) -> ("pMessage" ::: Ptr CChar) -> ("pUserData" ::: Ptr ()) -> IO Bool32
+-- | PFN_vkDebugReportCallbackEXT - Application-defined debug report callback
+-- function
+--
+-- = Parameters
+--
+-- -   @flags@ specifies the 'DebugReportFlagBitsEXT' that triggered this
+--     callback.
+--
+-- -   @objectType@ is a 'DebugReportObjectTypeEXT' 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 'DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT', @object@ is undefined.
+--
+-- -   @location@ is a component (layer, driver, loader) defined value
+--     specifying 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
+--     'Vulkan.Extensions.Handles.DebugReportCallbackEXT' was created.
+--
+-- = Description
+--
+-- The callback /must/ not call 'destroyDebugReportCallbackEXT'.
+--
+-- The callback returns a 'Vulkan.Core10.BaseType.Bool32', which is
+-- interpreted in a layer-specified manner. The application /should/ always
+-- return 'Vulkan.Core10.BaseType.FALSE'. The 'Vulkan.Core10.BaseType.TRUE'
+-- value is reserved for use in layer development.
+--
+-- @object@ /must/ be a Vulkan object or
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE'. If @objectType@ is not
+-- 'DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT' and @object@ is not
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', @object@ /must/ be a Vulkan
+-- object of the corresponding type associated with @objectType@ as defined
+-- in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types>.
+--
+-- = See Also
+--
+-- 'DebugReportCallbackCreateInfoEXT'
+type PFN_vkDebugReportCallbackEXT = FunPtr FN_vkDebugReportCallbackEXT
+
+
+type EXT_DEBUG_REPORT_SPEC_VERSION = 9
+
+-- No documentation found for TopLevel "VK_EXT_DEBUG_REPORT_SPEC_VERSION"
+pattern EXT_DEBUG_REPORT_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_DEBUG_REPORT_SPEC_VERSION = 9
+
+
+type EXT_DEBUG_REPORT_EXTENSION_NAME = "VK_EXT_debug_report"
+
+-- No documentation found for TopLevel "VK_EXT_DEBUG_REPORT_EXTENSION_NAME"
+pattern EXT_DEBUG_REPORT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_DEBUG_REPORT_EXTENSION_NAME = "VK_EXT_debug_report"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_report.hs-boot b/src/Vulkan/Extensions/VK_EXT_debug_report.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_debug_report.hs-boot
@@ -0,0 +1,25 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_debug_report  ( DebugReportCallbackCreateInfoEXT
+                                              , DebugReportFlagBitsEXT
+                                              , DebugReportFlagsEXT
+                                              , DebugReportObjectTypeEXT
+                                              ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DebugReportCallbackCreateInfoEXT
+
+instance ToCStruct DebugReportCallbackCreateInfoEXT
+instance Show DebugReportCallbackCreateInfoEXT
+
+instance FromCStruct DebugReportCallbackCreateInfoEXT
+
+
+data DebugReportFlagBitsEXT
+
+type DebugReportFlagsEXT = DebugReportFlagBitsEXT
+
+
+data DebugReportObjectTypeEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_utils.hs b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs
@@ -0,0 +1,1533 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_debug_utils  ( setDebugUtilsObjectNameEXT
+                                             , setDebugUtilsObjectTagEXT
+                                             , queueBeginDebugUtilsLabelEXT
+                                             , queueEndDebugUtilsLabelEXT
+                                             , queueInsertDebugUtilsLabelEXT
+                                             , cmdBeginDebugUtilsLabelEXT
+                                             , cmdUseDebugUtilsLabelEXT
+                                             , cmdEndDebugUtilsLabelEXT
+                                             , cmdInsertDebugUtilsLabelEXT
+                                             , createDebugUtilsMessengerEXT
+                                             , withDebugUtilsMessengerEXT
+                                             , destroyDebugUtilsMessengerEXT
+                                             , submitDebugUtilsMessageEXT
+                                             , DebugUtilsObjectNameInfoEXT(..)
+                                             , DebugUtilsObjectTagInfoEXT(..)
+                                             , DebugUtilsLabelEXT(..)
+                                             , DebugUtilsMessengerCreateInfoEXT(..)
+                                             , DebugUtilsMessengerCallbackDataEXT(..)
+                                             , DebugUtilsMessengerCreateFlagsEXT(..)
+                                             , DebugUtilsMessengerCallbackDataFlagsEXT(..)
+                                             , DebugUtilsMessageSeverityFlagBitsEXT( DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT
+                                                                                   , DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT
+                                                                                   , DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT
+                                                                                   , DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT
+                                                                                   , ..
+                                                                                   )
+                                             , DebugUtilsMessageSeverityFlagsEXT
+                                             , DebugUtilsMessageTypeFlagBitsEXT( DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT
+                                                                               , DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT
+                                                                               , DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT
+                                                                               , ..
+                                                                               )
+                                             , DebugUtilsMessageTypeFlagsEXT
+                                             , PFN_vkDebugUtilsMessengerCallbackEXT
+                                             , FN_vkDebugUtilsMessengerCallbackEXT
+                                             , EXT_DEBUG_UTILS_SPEC_VERSION
+                                             , pattern EXT_DEBUG_UTILS_SPEC_VERSION
+                                             , EXT_DEBUG_UTILS_EXTENSION_NAME
+                                             , pattern EXT_DEBUG_UTILS_EXTENSION_NAME
+                                             , DebugUtilsMessengerEXT(..)
+                                             ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (maybePeek)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.ByteString (packCString)
+import Data.ByteString (useAsCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Extensions.Handles (DebugUtilsMessengerEXT)
+import Vulkan.Extensions.Handles (DebugUtilsMessengerEXT(..))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBeginDebugUtilsLabelEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdEndDebugUtilsLabelEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdInsertDebugUtilsLabelEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkQueueBeginDebugUtilsLabelEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkQueueEndDebugUtilsLabelEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkQueueInsertDebugUtilsLabelEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkSetDebugUtilsObjectNameEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkSetDebugUtilsObjectTagEXT))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateDebugUtilsMessengerEXT))
+import Vulkan.Dynamic (InstanceCmds(pVkDestroyDebugUtilsMessengerEXT))
+import Vulkan.Dynamic (InstanceCmds(pVkSubmitDebugUtilsMessageEXT))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Enums.ObjectType (ObjectType)
+import Vulkan.Core10.Handles (Queue)
+import Vulkan.Core10.Handles (Queue(..))
+import Vulkan.Core10.Handles (Queue_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (DebugUtilsMessengerEXT(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkSetDebugUtilsObjectNameEXT
+  :: FunPtr (Ptr Device_T -> Ptr DebugUtilsObjectNameInfoEXT -> IO Result) -> Ptr Device_T -> Ptr DebugUtilsObjectNameInfoEXT -> IO Result
+
+-- | vkSetDebugUtilsObjectNameEXT - Give a user-friendly name to an object
+--
+-- = Parameters
+--
+-- -   @device@ is the device that created the object.
+--
+-- -   @pNameInfo@ is a pointer to a 'DebugUtilsObjectNameInfoEXT'
+--     structure specifying parameters of the name to set on the object.
+--
+-- == Valid Usage
+--
+-- -   @pNameInfo->objectType@ /must/ not be
+--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
+--
+-- -   @pNameInfo->objectHandle@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pNameInfo@ /must/ be a valid pointer to a valid
+--     'DebugUtilsObjectNameInfoEXT' structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pNameInfo->objectHandle@ /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'DebugUtilsObjectNameInfoEXT', 'Vulkan.Core10.Handles.Device'
+setDebugUtilsObjectNameEXT :: forall io . MonadIO io => Device -> DebugUtilsObjectNameInfoEXT -> io ()
+setDebugUtilsObjectNameEXT device nameInfo = liftIO . evalContT $ do
+  let vkSetDebugUtilsObjectNameEXTPtr = pVkSetDebugUtilsObjectNameEXT (deviceCmds (device :: Device))
+  lift $ unless (vkSetDebugUtilsObjectNameEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkSetDebugUtilsObjectNameEXT is null" Nothing Nothing
+  let vkSetDebugUtilsObjectNameEXT' = mkVkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXTPtr
+  pNameInfo <- ContT $ withCStruct (nameInfo)
+  r <- lift $ vkSetDebugUtilsObjectNameEXT' (deviceHandle (device)) pNameInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkSetDebugUtilsObjectTagEXT
+  :: FunPtr (Ptr Device_T -> Ptr DebugUtilsObjectTagInfoEXT -> IO Result) -> Ptr Device_T -> Ptr DebugUtilsObjectTagInfoEXT -> IO Result
+
+-- | vkSetDebugUtilsObjectTagEXT - Attach arbitrary data to an object
+--
+-- = Parameters
+--
+-- -   @device@ is the device that created the object.
+--
+-- -   @pTagInfo@ is a pointer to a 'DebugUtilsObjectTagInfoEXT' structure
+--     specifying parameters of the tag to attach to the object.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pTagInfo@ /must/ be a valid pointer to a valid
+--     'DebugUtilsObjectTagInfoEXT' structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pTagInfo->objectHandle@ /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'DebugUtilsObjectTagInfoEXT', 'Vulkan.Core10.Handles.Device'
+setDebugUtilsObjectTagEXT :: forall io . MonadIO io => Device -> DebugUtilsObjectTagInfoEXT -> io ()
+setDebugUtilsObjectTagEXT device tagInfo = liftIO . evalContT $ do
+  let vkSetDebugUtilsObjectTagEXTPtr = pVkSetDebugUtilsObjectTagEXT (deviceCmds (device :: Device))
+  lift $ unless (vkSetDebugUtilsObjectTagEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkSetDebugUtilsObjectTagEXT is null" Nothing Nothing
+  let vkSetDebugUtilsObjectTagEXT' = mkVkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXTPtr
+  pTagInfo <- ContT $ withCStruct (tagInfo)
+  r <- lift $ vkSetDebugUtilsObjectTagEXT' (deviceHandle (device)) pTagInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkQueueBeginDebugUtilsLabelEXT
+  :: FunPtr (Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()
+
+-- | vkQueueBeginDebugUtilsLabelEXT - Open a queue debug label region
+--
+-- = Parameters
+--
+-- -   @queue@ is the queue in which to start a debug label region.
+--
+-- -   @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure
+--     specifying parameters of the label region to open.
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'DebugUtilsLabelEXT', 'Vulkan.Core10.Handles.Queue'
+queueBeginDebugUtilsLabelEXT :: forall io . MonadIO io => Queue -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
+queueBeginDebugUtilsLabelEXT queue labelInfo = liftIO . evalContT $ do
+  let vkQueueBeginDebugUtilsLabelEXTPtr = pVkQueueBeginDebugUtilsLabelEXT (deviceCmds (queue :: Queue))
+  lift $ unless (vkQueueBeginDebugUtilsLabelEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkQueueBeginDebugUtilsLabelEXT is null" Nothing Nothing
+  let vkQueueBeginDebugUtilsLabelEXT' = mkVkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXTPtr
+  pLabelInfo <- ContT $ withCStruct (labelInfo)
+  lift $ vkQueueBeginDebugUtilsLabelEXT' (queueHandle (queue)) pLabelInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkQueueEndDebugUtilsLabelEXT
+  :: FunPtr (Ptr Queue_T -> IO ()) -> Ptr Queue_T -> IO ()
+
+-- | vkQueueEndDebugUtilsLabelEXT - Close a queue debug label region
+--
+-- = Parameters
+--
+-- -   @queue@ is the queue in which a debug label region should be closed.
+--
+-- = Description
+--
+-- The calls to 'queueBeginDebugUtilsLabelEXT' and
+-- 'queueEndDebugUtilsLabelEXT' /must/ be matched and balanced.
+--
+-- == Valid Usage
+--
+-- -   There /must/ be an outstanding 'queueBeginDebugUtilsLabelEXT'
+--     command prior to the 'queueEndDebugUtilsLabelEXT' on the queue
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Queue'
+queueEndDebugUtilsLabelEXT :: forall io . MonadIO io => Queue -> io ()
+queueEndDebugUtilsLabelEXT queue = liftIO $ do
+  let vkQueueEndDebugUtilsLabelEXTPtr = pVkQueueEndDebugUtilsLabelEXT (deviceCmds (queue :: Queue))
+  unless (vkQueueEndDebugUtilsLabelEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkQueueEndDebugUtilsLabelEXT is null" Nothing Nothing
+  let vkQueueEndDebugUtilsLabelEXT' = mkVkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXTPtr
+  vkQueueEndDebugUtilsLabelEXT' (queueHandle (queue))
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkQueueInsertDebugUtilsLabelEXT
+  :: FunPtr (Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr Queue_T -> Ptr DebugUtilsLabelEXT -> IO ()
+
+-- | vkQueueInsertDebugUtilsLabelEXT - Insert a label into a queue
+--
+-- = Parameters
+--
+-- -   @queue@ is the queue into which a debug label will be inserted.
+--
+-- -   @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure
+--     specifying parameters of the label to insert.
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'DebugUtilsLabelEXT', 'Vulkan.Core10.Handles.Queue'
+queueInsertDebugUtilsLabelEXT :: forall io . MonadIO io => Queue -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
+queueInsertDebugUtilsLabelEXT queue labelInfo = liftIO . evalContT $ do
+  let vkQueueInsertDebugUtilsLabelEXTPtr = pVkQueueInsertDebugUtilsLabelEXT (deviceCmds (queue :: Queue))
+  lift $ unless (vkQueueInsertDebugUtilsLabelEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkQueueInsertDebugUtilsLabelEXT is null" Nothing Nothing
+  let vkQueueInsertDebugUtilsLabelEXT' = mkVkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXTPtr
+  pLabelInfo <- ContT $ withCStruct (labelInfo)
+  lift $ vkQueueInsertDebugUtilsLabelEXT' (queueHandle (queue)) pLabelInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBeginDebugUtilsLabelEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()
+
+-- | vkCmdBeginDebugUtilsLabelEXT - Open a command buffer debug label region
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure
+--     specifying parameters of the label region to open.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pLabelInfo@ /must/ be a valid pointer to a valid
+--     'DebugUtilsLabelEXT' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'DebugUtilsLabelEXT'
+cmdBeginDebugUtilsLabelEXT :: forall io . MonadIO io => CommandBuffer -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
+cmdBeginDebugUtilsLabelEXT commandBuffer labelInfo = liftIO . evalContT $ do
+  let vkCmdBeginDebugUtilsLabelEXTPtr = pVkCmdBeginDebugUtilsLabelEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBeginDebugUtilsLabelEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginDebugUtilsLabelEXT is null" Nothing Nothing
+  let vkCmdBeginDebugUtilsLabelEXT' = mkVkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXTPtr
+  pLabelInfo <- ContT $ withCStruct (labelInfo)
+  lift $ vkCmdBeginDebugUtilsLabelEXT' (commandBufferHandle (commandBuffer)) pLabelInfo
+  pure $ ()
+
+-- | This function will call the supplied action between calls to
+-- 'cmdBeginDebugUtilsLabelEXT' and 'cmdEndDebugUtilsLabelEXT'
+--
+-- Note that 'cmdEndDebugUtilsLabelEXT' is *not* called if an exception is
+-- thrown by the inner action.
+cmdUseDebugUtilsLabelEXT :: forall io r . MonadIO io => CommandBuffer -> DebugUtilsLabelEXT -> io r -> io r
+cmdUseDebugUtilsLabelEXT commandBuffer pLabelInfo a =
+  (cmdBeginDebugUtilsLabelEXT commandBuffer pLabelInfo) *> a <* (cmdEndDebugUtilsLabelEXT commandBuffer)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdEndDebugUtilsLabelEXT
+  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()
+
+-- | vkCmdEndDebugUtilsLabelEXT - Close a command buffer label region
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- = 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
+-- 'cmdBeginDebugUtilsLabelEXT' and 'cmdEndDebugUtilsLabelEXT' /must/ be
+-- matched and balanced.
+--
+-- == Valid Usage
+--
+-- -   There /must/ be an outstanding 'cmdBeginDebugUtilsLabelEXT' command
+--     prior to the 'cmdEndDebugUtilsLabelEXT' on the queue that
+--     @commandBuffer@ is submitted to
+--
+-- -   If @commandBuffer@ is a secondary command buffer, there /must/ be an
+--     outstanding 'cmdBeginDebugUtilsLabelEXT' command recorded to
+--     @commandBuffer@ that has not previously been ended by a call to
+--     'cmdEndDebugUtilsLabelEXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdEndDebugUtilsLabelEXT :: forall io . MonadIO io => CommandBuffer -> io ()
+cmdEndDebugUtilsLabelEXT commandBuffer = liftIO $ do
+  let vkCmdEndDebugUtilsLabelEXTPtr = pVkCmdEndDebugUtilsLabelEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdEndDebugUtilsLabelEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndDebugUtilsLabelEXT is null" Nothing Nothing
+  let vkCmdEndDebugUtilsLabelEXT' = mkVkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXTPtr
+  vkCmdEndDebugUtilsLabelEXT' (commandBufferHandle (commandBuffer))
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdInsertDebugUtilsLabelEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr DebugUtilsLabelEXT -> IO ()
+
+-- | vkCmdInsertDebugUtilsLabelEXT - Insert a label into a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @pInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure specifying
+--     parameters of the label to insert.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pLabelInfo@ /must/ be a valid pointer to a valid
+--     'DebugUtilsLabelEXT' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'DebugUtilsLabelEXT'
+cmdInsertDebugUtilsLabelEXT :: forall io . MonadIO io => CommandBuffer -> ("labelInfo" ::: DebugUtilsLabelEXT) -> io ()
+cmdInsertDebugUtilsLabelEXT commandBuffer labelInfo = liftIO . evalContT $ do
+  let vkCmdInsertDebugUtilsLabelEXTPtr = pVkCmdInsertDebugUtilsLabelEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdInsertDebugUtilsLabelEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdInsertDebugUtilsLabelEXT is null" Nothing Nothing
+  let vkCmdInsertDebugUtilsLabelEXT' = mkVkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXTPtr
+  pLabelInfo <- ContT $ withCStruct (labelInfo)
+  lift $ vkCmdInsertDebugUtilsLabelEXT' (commandBufferHandle (commandBuffer)) pLabelInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateDebugUtilsMessengerEXT
+  :: FunPtr (Ptr Instance_T -> Ptr DebugUtilsMessengerCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr DebugUtilsMessengerEXT -> IO Result) -> Ptr Instance_T -> Ptr DebugUtilsMessengerCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr DebugUtilsMessengerEXT -> IO Result
+
+-- | vkCreateDebugUtilsMessengerEXT - Create a debug messenger object
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance the messenger will be used with.
+--
+-- -   @pCreateInfo@ is a pointer to a 'DebugUtilsMessengerCreateInfoEXT'
+--     structure containing the callback pointer, as well as defining
+--     conditions under which this messenger will trigger the callback.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pMessenger@ is a pointer to a
+--     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' handle in which
+--     the created object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'DebugUtilsMessengerCreateInfoEXT' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pMessenger@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- The application /must/ ensure that 'createDebugUtilsMessengerEXT' is not
+-- executed in parallel with any Vulkan command that is also called with
+-- @instance@ or child of @instance@ as the dispatchable argument.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'DebugUtilsMessengerCreateInfoEXT',
+-- 'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT',
+-- 'Vulkan.Core10.Handles.Instance'
+createDebugUtilsMessengerEXT :: forall io . MonadIO io => Instance -> DebugUtilsMessengerCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DebugUtilsMessengerEXT)
+createDebugUtilsMessengerEXT instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateDebugUtilsMessengerEXTPtr = pVkCreateDebugUtilsMessengerEXT (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateDebugUtilsMessengerEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateDebugUtilsMessengerEXT is null" Nothing Nothing
+  let vkCreateDebugUtilsMessengerEXT' = mkVkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXTPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPMessenger <- ContT $ bracket (callocBytes @DebugUtilsMessengerEXT 8) free
+  r <- lift $ vkCreateDebugUtilsMessengerEXT' (instanceHandle (instance')) pCreateInfo pAllocator (pPMessenger)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pMessenger <- lift $ peek @DebugUtilsMessengerEXT pPMessenger
+  pure $ (pMessenger)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createDebugUtilsMessengerEXT' and 'destroyDebugUtilsMessengerEXT'
+--
+-- To ensure that 'destroyDebugUtilsMessengerEXT' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withDebugUtilsMessengerEXT :: forall io r . MonadIO io => Instance -> DebugUtilsMessengerCreateInfoEXT -> Maybe AllocationCallbacks -> (io (DebugUtilsMessengerEXT) -> ((DebugUtilsMessengerEXT) -> io ()) -> r) -> r
+withDebugUtilsMessengerEXT instance' pCreateInfo pAllocator b =
+  b (createDebugUtilsMessengerEXT instance' pCreateInfo pAllocator)
+    (\(o0) -> destroyDebugUtilsMessengerEXT instance' o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyDebugUtilsMessengerEXT
+  :: FunPtr (Ptr Instance_T -> DebugUtilsMessengerEXT -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> DebugUtilsMessengerEXT -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyDebugUtilsMessengerEXT - Destroy a debug messenger object
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance where the callback was created.
+--
+-- -   @messenger@ is the
+--     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' 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
+--     'destroyDebugUtilsMessengerEXT' /must/ not be called when a callback
+--     is active.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @messenger@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @messenger@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   If @messenger@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @messenger@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @messenger@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @instance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @messenger@ /must/ be externally synchronized
+--
+-- The application /must/ ensure that 'destroyDebugUtilsMessengerEXT' is
+-- not executed in parallel with any Vulkan command that is also called
+-- with @instance@ or child of @instance@ as the dispatchable argument.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT',
+-- 'Vulkan.Core10.Handles.Instance'
+destroyDebugUtilsMessengerEXT :: forall io . MonadIO io => Instance -> DebugUtilsMessengerEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyDebugUtilsMessengerEXT instance' messenger allocator = liftIO . evalContT $ do
+  let vkDestroyDebugUtilsMessengerEXTPtr = pVkDestroyDebugUtilsMessengerEXT (instanceCmds (instance' :: Instance))
+  lift $ unless (vkDestroyDebugUtilsMessengerEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyDebugUtilsMessengerEXT is null" Nothing Nothing
+  let vkDestroyDebugUtilsMessengerEXT' = mkVkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXTPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyDebugUtilsMessengerEXT' (instanceHandle (instance')) (messenger) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkSubmitDebugUtilsMessageEXT
+  :: FunPtr (Ptr Instance_T -> DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageTypeFlagsEXT -> Ptr DebugUtilsMessengerCallbackDataEXT -> IO ()) -> Ptr Instance_T -> DebugUtilsMessageSeverityFlagBitsEXT -> DebugUtilsMessageTypeFlagsEXT -> Ptr DebugUtilsMessengerCallbackDataEXT -> IO ()
+
+-- | vkSubmitDebugUtilsMessageEXT - Inject a message into a debug stream
+--
+-- = Parameters
+--
+-- -   @instance@ is the debug stream’s 'Vulkan.Core10.Handles.Instance'.
+--
+-- -   @messageSeverity@ is the 'DebugUtilsMessageSeverityFlagBitsEXT'
+--     severity of this event\/message.
+--
+-- -   @messageTypes@ is a bitmask of 'DebugUtilsMessageTypeFlagBitsEXT'
+--     specifying which type of event(s) to identify with this message.
+--
+-- -   @pCallbackData@ contains all the callback related data in the
+--     'DebugUtilsMessengerCallbackDataEXT' structure.
+--
+-- = 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
+--
+-- -   The @objectType@ member of each element of @pCallbackData->pObjects@
+--     /must/ not be 'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @messageSeverity@ /must/ be a valid
+--     'DebugUtilsMessageSeverityFlagBitsEXT' value
+--
+-- -   @messageTypes@ /must/ be a valid combination of
+--     'DebugUtilsMessageTypeFlagBitsEXT' values
+--
+-- -   @messageTypes@ /must/ not be @0@
+--
+-- -   @pCallbackData@ /must/ be a valid pointer to a valid
+--     'DebugUtilsMessengerCallbackDataEXT' structure
+--
+-- = See Also
+--
+-- 'DebugUtilsMessageSeverityFlagBitsEXT', 'DebugUtilsMessageTypeFlagsEXT',
+-- 'DebugUtilsMessengerCallbackDataEXT', 'Vulkan.Core10.Handles.Instance'
+submitDebugUtilsMessageEXT :: forall io . MonadIO io => Instance -> DebugUtilsMessageSeverityFlagBitsEXT -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> DebugUtilsMessengerCallbackDataEXT -> io ()
+submitDebugUtilsMessageEXT instance' messageSeverity messageTypes callbackData = liftIO . evalContT $ do
+  let vkSubmitDebugUtilsMessageEXTPtr = pVkSubmitDebugUtilsMessageEXT (instanceCmds (instance' :: Instance))
+  lift $ unless (vkSubmitDebugUtilsMessageEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkSubmitDebugUtilsMessageEXT is null" Nothing Nothing
+  let vkSubmitDebugUtilsMessageEXT' = mkVkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXTPtr
+  pCallbackData <- ContT $ withCStruct (callbackData)
+  lift $ vkSubmitDebugUtilsMessageEXT' (instanceHandle (instance')) (messageSeverity) (messageTypes) pCallbackData
+  pure $ ()
+
+
+-- | VkDebugUtilsObjectNameInfoEXT - Specify parameters of a name to give to
+-- an object
+--
+-- = Description
+--
+-- Applications /may/ change the name associated with an object simply by
+-- calling 'setDebugUtilsObjectNameEXT' again with a new string. If
+-- @pObjectName@ is either @NULL@ or an empty string, then any previously
+-- set name is removed.
+--
+-- == Valid Usage
+--
+-- -   If @objectType@ is
+--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN', @objectHandle@
+--     /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @objectType@ is not
+--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN', @objectHandle@
+--     /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a valid Vulkan
+--     handle of the type associated with @objectType@ as defined in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-types VkObjectType and Vulkan Handle Relationship>
+--     table
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @objectType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ObjectType.ObjectType' value
+--
+-- -   If @pObjectName@ is not @NULL@, @pObjectName@ /must/ be a
+--     null-terminated UTF-8 string
+--
+-- = See Also
+--
+-- 'DebugUtilsMessengerCallbackDataEXT',
+-- 'Vulkan.Core10.Enums.ObjectType.ObjectType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'setDebugUtilsObjectNameEXT'
+data DebugUtilsObjectNameInfoEXT = DebugUtilsObjectNameInfoEXT
+  { -- | @objectType@ is a 'Vulkan.Core10.Enums.ObjectType.ObjectType' specifying
+    -- the type of the object to be named.
+    objectType :: ObjectType
+  , -- | @objectHandle@ is the object to be named.
+    objectHandle :: Word64
+  , -- | @pObjectName@ is either @NULL@ or a null-terminated UTF-8 string
+    -- specifying the name to apply to @objectHandle@.
+    objectName :: Maybe ByteString
+  }
+  deriving (Typeable)
+deriving instance Show DebugUtilsObjectNameInfoEXT
+
+instance ToCStruct DebugUtilsObjectNameInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DebugUtilsObjectNameInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr ObjectType)) (objectType)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word64)) (objectHandle)
+    pObjectName'' <- case (objectName) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ useAsCString (j)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pObjectName''
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ObjectType)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct DebugUtilsObjectNameInfoEXT where
+  peekCStruct p = do
+    objectType <- peek @ObjectType ((p `plusPtr` 16 :: Ptr ObjectType))
+    objectHandle <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    pObjectName <- peek @(Ptr CChar) ((p `plusPtr` 32 :: Ptr (Ptr CChar)))
+    pObjectName' <- maybePeek (\j -> packCString  (j)) pObjectName
+    pure $ DebugUtilsObjectNameInfoEXT
+             objectType objectHandle pObjectName'
+
+instance Zero DebugUtilsObjectNameInfoEXT where
+  zero = DebugUtilsObjectNameInfoEXT
+           zero
+           zero
+           Nothing
+
+
+-- | VkDebugUtilsObjectTagInfoEXT - Specify parameters of a tag to attach to
+-- an object
+--
+-- = 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 (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ObjectType.ObjectType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'setDebugUtilsObjectTagEXT'
+data DebugUtilsObjectTagInfoEXT = DebugUtilsObjectTagInfoEXT
+  { -- | @objectType@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.ObjectType.ObjectType' value
+    objectType :: ObjectType
+  , -- | @objectHandle@ /must/ be a valid Vulkan handle of the type associated
+    -- with @objectType@ as defined in the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-types VkObjectType and Vulkan Handle Relationship>
+    -- table
+    objectHandle :: Word64
+  , -- | @tagName@ is a numerical identifier of the tag.
+    tagName :: Word64
+  , -- | @tagSize@ /must/ be greater than @0@
+    tagSize :: Word64
+  , -- | @pTag@ /must/ be a valid pointer to an array of @tagSize@ bytes
+    tag :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show DebugUtilsObjectTagInfoEXT
+
+instance ToCStruct DebugUtilsObjectTagInfoEXT where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DebugUtilsObjectTagInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ObjectType)) (objectType)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (objectHandle)
+    poke ((p `plusPtr` 32 :: Ptr Word64)) (tagName)
+    poke ((p `plusPtr` 40 :: Ptr CSize)) (CSize (tagSize))
+    poke ((p `plusPtr` 48 :: Ptr (Ptr ()))) (tag)
+    f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ObjectType)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr CSize)) (CSize (zero))
+    poke ((p `plusPtr` 48 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct DebugUtilsObjectTagInfoEXT where
+  peekCStruct p = do
+    objectType <- peek @ObjectType ((p `plusPtr` 16 :: Ptr ObjectType))
+    objectHandle <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    tagName <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))
+    tagSize <- peek @CSize ((p `plusPtr` 40 :: Ptr CSize))
+    pTag <- peek @(Ptr ()) ((p `plusPtr` 48 :: Ptr (Ptr ())))
+    pure $ DebugUtilsObjectTagInfoEXT
+             objectType objectHandle tagName ((\(CSize a) -> a) tagSize) pTag
+
+instance Storable DebugUtilsObjectTagInfoEXT where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DebugUtilsObjectTagInfoEXT where
+  zero = DebugUtilsObjectTagInfoEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDebugUtilsLabelEXT - Specify parameters of a label region
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DebugUtilsMessengerCallbackDataEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdBeginDebugUtilsLabelEXT', 'cmdInsertDebugUtilsLabelEXT',
+-- 'queueBeginDebugUtilsLabelEXT', 'queueInsertDebugUtilsLabelEXT'
+data DebugUtilsLabelEXT = DebugUtilsLabelEXT
+  { -- | @pLabelName@ /must/ be a null-terminated UTF-8 string
+    labelName :: ByteString
+  , -- | @color@ is an optional RGBA color value that can be associated with the
+    -- label. A particular implementation /may/ choose to ignore this color
+    -- value. The values contain RGBA values in order, in the range 0.0 to 1.0.
+    -- If all elements in @color@ are set to 0.0 then it is ignored.
+    color :: (Float, Float, Float, Float)
+  }
+  deriving (Typeable)
+deriving instance Show DebugUtilsLabelEXT
+
+instance ToCStruct DebugUtilsLabelEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DebugUtilsLabelEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pLabelName'' <- ContT $ useAsCString (labelName)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pLabelName''
+    let pColor' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 4 CFloat)))
+    lift $ case (color) of
+      (e0, e1, e2, e3) -> do
+        poke (pColor' :: Ptr CFloat) (CFloat (e0))
+        poke (pColor' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+        poke (pColor' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))
+        poke (pColor' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pLabelName'' <- ContT $ useAsCString (mempty)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pLabelName''
+    lift $ f
+
+instance FromCStruct DebugUtilsLabelEXT where
+  peekCStruct p = do
+    pLabelName <- packCString =<< peek ((p `plusPtr` 16 :: Ptr (Ptr CChar)))
+    let pcolor = lowerArrayPtr @CFloat ((p `plusPtr` 24 :: Ptr (FixedArray 4 CFloat)))
+    color0 <- peek @CFloat ((pcolor `advancePtrBytes` 0 :: Ptr CFloat))
+    color1 <- peek @CFloat ((pcolor `advancePtrBytes` 4 :: Ptr CFloat))
+    color2 <- peek @CFloat ((pcolor `advancePtrBytes` 8 :: Ptr CFloat))
+    color3 <- peek @CFloat ((pcolor `advancePtrBytes` 12 :: Ptr CFloat))
+    pure $ DebugUtilsLabelEXT
+             pLabelName ((((\(CFloat a) -> a) color0), ((\(CFloat a) -> a) color1), ((\(CFloat a) -> a) color2), ((\(CFloat a) -> a) color3)))
+
+instance Zero DebugUtilsLabelEXT where
+  zero = DebugUtilsLabelEXT
+           mempty
+           (zero, zero, zero, zero)
+
+
+-- | VkDebugUtilsMessengerCreateInfoEXT - Structure specifying parameters of
+-- a newly created debug messenger
+--
+-- = Description
+--
+-- For each 'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' that is
+-- created the 'DebugUtilsMessengerCreateInfoEXT'::@messageSeverity@ and
+-- 'DebugUtilsMessengerCreateInfoEXT'::@messageType@ determine when that
+-- 'DebugUtilsMessengerCreateInfoEXT'::@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
+--     'DebugUtilsMessageSeverityFlagBitsEXT' with the @messageSeverity@
+--     provided during creation of the
+--     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' object.
+--
+--     1.  If the value is 0, the message is skipped.
+--
+-- 2.  The implementation will perform bitwise AND of the event’s
+--     'DebugUtilsMessageTypeFlagBitsEXT' with the @messageType@ provided
+--     during the creation of the
+--     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' 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
+-- 'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' 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 (Implicit)
+--
+-- = See Also
+--
+-- 'PFN_vkDebugUtilsMessengerCallbackEXT',
+-- 'DebugUtilsMessageSeverityFlagsEXT', 'DebugUtilsMessageTypeFlagsEXT',
+-- 'DebugUtilsMessengerCreateFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createDebugUtilsMessengerEXT'
+data DebugUtilsMessengerCreateInfoEXT = DebugUtilsMessengerCreateInfoEXT
+  { -- | @flags@ /must/ be @0@
+    flags :: DebugUtilsMessengerCreateFlagsEXT
+  , -- | @messageSeverity@ /must/ not be @0@
+    messageSeverity :: DebugUtilsMessageSeverityFlagsEXT
+  , -- | @messageType@ /must/ not be @0@
+    messageType :: DebugUtilsMessageTypeFlagsEXT
+  , -- | @pfnUserCallback@ /must/ be a valid
+    -- 'PFN_vkDebugUtilsMessengerCallbackEXT' value
+    pfnUserCallback :: PFN_vkDebugUtilsMessengerCallbackEXT
+  , -- | @pUserData@ is user data to be passed to the callback.
+    userData :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show DebugUtilsMessengerCreateInfoEXT
+
+instance ToCStruct DebugUtilsMessengerCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DebugUtilsMessengerCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DebugUtilsMessengerCreateFlagsEXT)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr DebugUtilsMessageSeverityFlagsEXT)) (messageSeverity)
+    poke ((p `plusPtr` 24 :: Ptr DebugUtilsMessageTypeFlagsEXT)) (messageType)
+    poke ((p `plusPtr` 32 :: Ptr PFN_vkDebugUtilsMessengerCallbackEXT)) (pfnUserCallback)
+    poke ((p `plusPtr` 40 :: Ptr (Ptr ()))) (userData)
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr DebugUtilsMessageSeverityFlagsEXT)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DebugUtilsMessageTypeFlagsEXT)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr PFN_vkDebugUtilsMessengerCallbackEXT)) (zero)
+    f
+
+instance FromCStruct DebugUtilsMessengerCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @DebugUtilsMessengerCreateFlagsEXT ((p `plusPtr` 16 :: Ptr DebugUtilsMessengerCreateFlagsEXT))
+    messageSeverity <- peek @DebugUtilsMessageSeverityFlagsEXT ((p `plusPtr` 20 :: Ptr DebugUtilsMessageSeverityFlagsEXT))
+    messageType <- peek @DebugUtilsMessageTypeFlagsEXT ((p `plusPtr` 24 :: Ptr DebugUtilsMessageTypeFlagsEXT))
+    pfnUserCallback <- peek @PFN_vkDebugUtilsMessengerCallbackEXT ((p `plusPtr` 32 :: Ptr PFN_vkDebugUtilsMessengerCallbackEXT))
+    pUserData <- peek @(Ptr ()) ((p `plusPtr` 40 :: Ptr (Ptr ())))
+    pure $ DebugUtilsMessengerCreateInfoEXT
+             flags messageSeverity messageType pfnUserCallback pUserData
+
+instance Storable DebugUtilsMessengerCreateInfoEXT where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DebugUtilsMessengerCreateInfoEXT where
+  zero = DebugUtilsMessengerCreateInfoEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDebugUtilsMessengerCallbackDataEXT - Structure specifying parameters
+-- returned to the callback
+--
+-- = 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
+-- 'Vulkan.Core10.Handles.Queue' 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
+-- 'Vulkan.Core10.Handles.CommandBuffer' 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
+--     'Vulkan.Core10.Enums.StructureType.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
+--
+-- -   If @queueLabelCount@ is not @0@, @pQueueLabels@ /must/ be a valid
+--     pointer to an array of @queueLabelCount@ valid 'DebugUtilsLabelEXT'
+--     structures
+--
+-- -   If @cmdBufLabelCount@ is not @0@, @pCmdBufLabels@ /must/ be a valid
+--     pointer to an array of @cmdBufLabelCount@ valid 'DebugUtilsLabelEXT'
+--     structures
+--
+-- -   If @objectCount@ is not @0@, @pObjects@ /must/ be a valid pointer to
+--     an array of @objectCount@ valid 'DebugUtilsObjectNameInfoEXT'
+--     structures
+--
+-- = See Also
+--
+-- 'DebugUtilsLabelEXT', 'DebugUtilsMessengerCallbackDataFlagsEXT',
+-- 'DebugUtilsObjectNameInfoEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'submitDebugUtilsMessageEXT'
+data DebugUtilsMessengerCallbackDataEXT = DebugUtilsMessengerCallbackDataEXT
+  { -- | @flags@ is @0@ and is reserved for future use.
+    flags :: DebugUtilsMessengerCallbackDataFlagsEXT
+  , -- | @pMessageIdName@ is a null-terminated string that identifies the
+    -- particular message ID that is associated with the provided message. If
+    -- the message corresponds to a validation layer message, then this string
+    -- may contain the portion of the Vulkan specification that is believed to
+    -- have been violated.
+    messageIdName :: Maybe ByteString
+  , -- | @messageIdNumber@ is the ID number of the triggering message. If the
+    -- message corresponds to a validation layer message, then this number is
+    -- related to the internal number associated with the message being
+    -- triggered.
+    messageIdNumber :: Int32
+  , -- | @pMessage@ is a null-terminated string detailing the trigger conditions.
+    message :: ByteString
+  , -- | @pQueueLabels@ is @NULL@ or a pointer to an array of
+    -- 'DebugUtilsLabelEXT' active in the current 'Vulkan.Core10.Handles.Queue'
+    -- at the time the callback was triggered. Refer to
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-queue-labels Queue Labels>
+    -- for more information.
+    queueLabels :: Vector DebugUtilsLabelEXT
+  , -- | @pCmdBufLabels@ is @NULL@ or a pointer to an array of
+    -- 'DebugUtilsLabelEXT' active in the current
+    -- 'Vulkan.Core10.Handles.CommandBuffer' at the time the callback was
+    -- triggered. Refer to
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-command-buffer-labels Command Buffer Labels>
+    -- for more information.
+    cmdBufLabels :: Vector DebugUtilsLabelEXT
+  , -- | @pObjects@ is a pointer to an array of 'DebugUtilsObjectNameInfoEXT'
+    -- objects related to the detected issue. The array is roughly in order or
+    -- importance, but the 0th element is always guaranteed to be the most
+    -- important object for this message.
+    objects :: Vector DebugUtilsObjectNameInfoEXT
+  }
+  deriving (Typeable)
+deriving instance Show DebugUtilsMessengerCallbackDataEXT
+
+instance ToCStruct DebugUtilsMessengerCallbackDataEXT where
+  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DebugUtilsMessengerCallbackDataEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT)) (flags)
+    pMessageIdName'' <- case (messageIdName) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ useAsCString (j)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr CChar))) pMessageIdName''
+    lift $ poke ((p `plusPtr` 32 :: Ptr Int32)) (messageIdNumber)
+    pMessage'' <- ContT $ useAsCString (message)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr CChar))) pMessage''
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueLabels)) :: Word32))
+    pPQueueLabels' <- ContT $ allocaBytesAligned @DebugUtilsLabelEXT ((Data.Vector.length (queueLabels)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPQueueLabels' `plusPtr` (40 * (i)) :: Ptr DebugUtilsLabelEXT) (e) . ($ ())) (queueLabels)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DebugUtilsLabelEXT))) (pPQueueLabels')
+    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (cmdBufLabels)) :: Word32))
+    pPCmdBufLabels' <- ContT $ allocaBytesAligned @DebugUtilsLabelEXT ((Data.Vector.length (cmdBufLabels)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCmdBufLabels' `plusPtr` (40 * (i)) :: Ptr DebugUtilsLabelEXT) (e) . ($ ())) (cmdBufLabels)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr DebugUtilsLabelEXT))) (pPCmdBufLabels')
+    lift $ poke ((p `plusPtr` 80 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (objects)) :: Word32))
+    pPObjects' <- ContT $ allocaBytesAligned @DebugUtilsObjectNameInfoEXT ((Data.Vector.length (objects)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPObjects' `plusPtr` (40 * (i)) :: Ptr DebugUtilsObjectNameInfoEXT) (e) . ($ ())) (objects)
+    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr DebugUtilsObjectNameInfoEXT))) (pPObjects')
+    lift $ f
+  cStructSize = 96
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pMessage'' <- ContT $ useAsCString (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr CChar))) pMessage''
+    pPQueueLabels' <- ContT $ allocaBytesAligned @DebugUtilsLabelEXT ((Data.Vector.length (mempty)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPQueueLabels' `plusPtr` (40 * (i)) :: Ptr DebugUtilsLabelEXT) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DebugUtilsLabelEXT))) (pPQueueLabels')
+    pPCmdBufLabels' <- ContT $ allocaBytesAligned @DebugUtilsLabelEXT ((Data.Vector.length (mempty)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCmdBufLabels' `plusPtr` (40 * (i)) :: Ptr DebugUtilsLabelEXT) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr DebugUtilsLabelEXT))) (pPCmdBufLabels')
+    pPObjects' <- ContT $ allocaBytesAligned @DebugUtilsObjectNameInfoEXT ((Data.Vector.length (mempty)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPObjects' `plusPtr` (40 * (i)) :: Ptr DebugUtilsObjectNameInfoEXT) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr DebugUtilsObjectNameInfoEXT))) (pPObjects')
+    lift $ f
+
+instance FromCStruct DebugUtilsMessengerCallbackDataEXT where
+  peekCStruct p = do
+    flags <- peek @DebugUtilsMessengerCallbackDataFlagsEXT ((p `plusPtr` 16 :: Ptr DebugUtilsMessengerCallbackDataFlagsEXT))
+    pMessageIdName <- peek @(Ptr CChar) ((p `plusPtr` 24 :: Ptr (Ptr CChar)))
+    pMessageIdName' <- maybePeek (\j -> packCString  (j)) pMessageIdName
+    messageIdNumber <- peek @Int32 ((p `plusPtr` 32 :: Ptr Int32))
+    pMessage <- packCString =<< peek ((p `plusPtr` 40 :: Ptr (Ptr CChar)))
+    queueLabelCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pQueueLabels <- peek @(Ptr DebugUtilsLabelEXT) ((p `plusPtr` 56 :: Ptr (Ptr DebugUtilsLabelEXT)))
+    pQueueLabels' <- generateM (fromIntegral queueLabelCount) (\i -> peekCStruct @DebugUtilsLabelEXT ((pQueueLabels `advancePtrBytes` (40 * (i)) :: Ptr DebugUtilsLabelEXT)))
+    cmdBufLabelCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    pCmdBufLabels <- peek @(Ptr DebugUtilsLabelEXT) ((p `plusPtr` 72 :: Ptr (Ptr DebugUtilsLabelEXT)))
+    pCmdBufLabels' <- generateM (fromIntegral cmdBufLabelCount) (\i -> peekCStruct @DebugUtilsLabelEXT ((pCmdBufLabels `advancePtrBytes` (40 * (i)) :: Ptr DebugUtilsLabelEXT)))
+    objectCount <- peek @Word32 ((p `plusPtr` 80 :: Ptr Word32))
+    pObjects <- peek @(Ptr DebugUtilsObjectNameInfoEXT) ((p `plusPtr` 88 :: Ptr (Ptr DebugUtilsObjectNameInfoEXT)))
+    pObjects' <- generateM (fromIntegral objectCount) (\i -> peekCStruct @DebugUtilsObjectNameInfoEXT ((pObjects `advancePtrBytes` (40 * (i)) :: Ptr DebugUtilsObjectNameInfoEXT)))
+    pure $ DebugUtilsMessengerCallbackDataEXT
+             flags pMessageIdName' messageIdNumber pMessage pQueueLabels' pCmdBufLabels' pObjects'
+
+instance Zero DebugUtilsMessengerCallbackDataEXT where
+  zero = DebugUtilsMessengerCallbackDataEXT
+           zero
+           Nothing
+           zero
+           mempty
+           mempty
+           mempty
+           mempty
+
+
+-- No documentation found for TopLevel "VkDebugUtilsMessengerCreateFlagsEXT"
+newtype DebugUtilsMessengerCreateFlagsEXT = DebugUtilsMessengerCreateFlagsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show DebugUtilsMessengerCreateFlagsEXT where
+  showsPrec p = \case
+    DebugUtilsMessengerCreateFlagsEXT x -> showParen (p >= 11) (showString "DebugUtilsMessengerCreateFlagsEXT 0x" . showHex x)
+
+instance Read DebugUtilsMessengerCreateFlagsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DebugUtilsMessengerCreateFlagsEXT")
+                       v <- step readPrec
+                       pure (DebugUtilsMessengerCreateFlagsEXT v)))
+
+
+-- No documentation found for TopLevel "VkDebugUtilsMessengerCallbackDataFlagsEXT"
+newtype DebugUtilsMessengerCallbackDataFlagsEXT = DebugUtilsMessengerCallbackDataFlagsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show DebugUtilsMessengerCallbackDataFlagsEXT where
+  showsPrec p = \case
+    DebugUtilsMessengerCallbackDataFlagsEXT x -> showParen (p >= 11) (showString "DebugUtilsMessengerCallbackDataFlagsEXT 0x" . showHex x)
+
+instance Read DebugUtilsMessengerCallbackDataFlagsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DebugUtilsMessengerCallbackDataFlagsEXT")
+                       v <- step readPrec
+                       pure (DebugUtilsMessengerCallbackDataFlagsEXT v)))
+
+
+-- | VkDebugUtilsMessageSeverityFlagBitsEXT - Bitmask specifying which
+-- severities of events cause a debug messenger callback
+--
+-- = See Also
+--
+-- 'DebugUtilsMessageSeverityFlagsEXT', 'submitDebugUtilsMessageEXT'
+newtype DebugUtilsMessageSeverityFlagBitsEXT = DebugUtilsMessageSeverityFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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 DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = DebugUtilsMessageSeverityFlagBitsEXT 0x00000001
+-- | 'DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT' specifies an informational
+-- message such as resource details that may be handy when debugging an
+-- application.
+pattern DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = DebugUtilsMessageSeverityFlagBitsEXT 0x00000010
+-- | '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 DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = DebugUtilsMessageSeverityFlagBitsEXT 0x00000100
+-- | 'DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT' specifies that the
+-- application has violated a valid usage condition of the specification.
+pattern DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = DebugUtilsMessageSeverityFlagBitsEXT 0x00001000
+
+type DebugUtilsMessageSeverityFlagsEXT = DebugUtilsMessageSeverityFlagBitsEXT
+
+instance Show DebugUtilsMessageSeverityFlagBitsEXT where
+  showsPrec p = \case
+    DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT"
+    DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT"
+    DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT"
+    DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT"
+    DebugUtilsMessageSeverityFlagBitsEXT x -> showParen (p >= 11) (showString "DebugUtilsMessageSeverityFlagBitsEXT 0x" . showHex x)
+
+instance Read DebugUtilsMessageSeverityFlagBitsEXT where
+  readPrec = parens (choose [("DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT", pure DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT)
+                            , ("DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT", pure DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT)
+                            , ("DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT", pure DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT)
+                            , ("DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT", pure DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DebugUtilsMessageSeverityFlagBitsEXT")
+                       v <- step readPrec
+                       pure (DebugUtilsMessageSeverityFlagBitsEXT v)))
+
+
+-- | VkDebugUtilsMessageTypeFlagBitsEXT - Bitmask specifying which types of
+-- events cause a debug messenger callback
+--
+-- = See Also
+--
+-- 'DebugUtilsMessageTypeFlagsEXT'
+newtype DebugUtilsMessageTypeFlagBitsEXT = DebugUtilsMessageTypeFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT' specifies that some general
+-- event has occurred. This is typically a non-specification,
+-- non-performance event.
+pattern DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = DebugUtilsMessageTypeFlagBitsEXT 0x00000001
+-- | 'DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT' specifies that something
+-- has occurred during validation against the Vulkan specification that may
+-- indicate invalid behavior.
+pattern DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = DebugUtilsMessageTypeFlagBitsEXT 0x00000002
+-- | 'DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT' specifies a potentially
+-- non-optimal use of Vulkan, e.g. using
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearColorImage' when setting
+-- 'Vulkan.Core10.Pass.AttachmentDescription'::@loadOp@ to
+-- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' would
+-- have worked.
+pattern DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = DebugUtilsMessageTypeFlagBitsEXT 0x00000004
+
+type DebugUtilsMessageTypeFlagsEXT = DebugUtilsMessageTypeFlagBitsEXT
+
+instance Show DebugUtilsMessageTypeFlagBitsEXT where
+  showsPrec p = \case
+    DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT"
+    DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT"
+    DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT -> showString "DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT"
+    DebugUtilsMessageTypeFlagBitsEXT x -> showParen (p >= 11) (showString "DebugUtilsMessageTypeFlagBitsEXT 0x" . showHex x)
+
+instance Read DebugUtilsMessageTypeFlagBitsEXT where
+  readPrec = parens (choose [("DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT", pure DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT)
+                            , ("DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT", pure DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT)
+                            , ("DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT", pure DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DebugUtilsMessageTypeFlagBitsEXT")
+                       v <- step readPrec
+                       pure (DebugUtilsMessageTypeFlagBitsEXT v)))
+
+
+type FN_vkDebugUtilsMessengerCallbackEXT = DebugUtilsMessageSeverityFlagBitsEXT -> ("messageTypes" ::: DebugUtilsMessageTypeFlagsEXT) -> ("pCallbackData" ::: Ptr DebugUtilsMessengerCallbackDataEXT) -> ("pUserData" ::: Ptr ()) -> IO Bool32
+-- | PFN_vkDebugUtilsMessengerCallbackEXT - Application-defined debug
+-- messenger callback function
+--
+-- = Parameters
+--
+-- -   @messageSeverity@ specifies the
+--     'DebugUtilsMessageSeverityFlagBitsEXT' that triggered this callback.
+--
+-- -   @messageTypes@ is a bitmask of 'DebugUtilsMessageTypeFlagBitsEXT'
+--     specifying which type of event(s) triggered this callback.
+--
+-- -   @pCallbackData@ contains all the callback related data in the
+--     'DebugUtilsMessengerCallbackDataEXT' structure.
+--
+-- -   @pUserData@ is the user data provided when the
+--     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' was created.
+--
+-- = Description
+--
+-- The callback /must/ not call 'destroyDebugUtilsMessengerEXT'.
+--
+-- The callback returns a 'Vulkan.Core10.BaseType.Bool32', which is
+-- interpreted in a layer-specified manner. The application /should/ always
+-- return 'Vulkan.Core10.BaseType.FALSE'. The 'Vulkan.Core10.BaseType.TRUE'
+-- value is reserved for use in layer development.
+--
+-- = See Also
+--
+-- 'DebugUtilsMessengerCreateInfoEXT'
+type PFN_vkDebugUtilsMessengerCallbackEXT = FunPtr FN_vkDebugUtilsMessengerCallbackEXT
+
+
+type EXT_DEBUG_UTILS_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_DEBUG_UTILS_SPEC_VERSION"
+pattern EXT_DEBUG_UTILS_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_DEBUG_UTILS_SPEC_VERSION = 2
+
+
+type EXT_DEBUG_UTILS_EXTENSION_NAME = "VK_EXT_debug_utils"
+
+-- No documentation found for TopLevel "VK_EXT_DEBUG_UTILS_EXTENSION_NAME"
+pattern EXT_DEBUG_UTILS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_DEBUG_UTILS_EXTENSION_NAME = "VK_EXT_debug_utils"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_debug_utils.hs-boot
@@ -0,0 +1,64 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_debug_utils  ( DebugUtilsLabelEXT
+                                             , DebugUtilsMessengerCallbackDataEXT
+                                             , DebugUtilsMessengerCreateInfoEXT
+                                             , DebugUtilsObjectNameInfoEXT
+                                             , DebugUtilsObjectTagInfoEXT
+                                             , DebugUtilsMessageSeverityFlagBitsEXT
+                                             , DebugUtilsMessageSeverityFlagsEXT
+                                             , DebugUtilsMessageTypeFlagBitsEXT
+                                             , DebugUtilsMessageTypeFlagsEXT
+                                             ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DebugUtilsLabelEXT
+
+instance ToCStruct DebugUtilsLabelEXT
+instance Show DebugUtilsLabelEXT
+
+instance FromCStruct DebugUtilsLabelEXT
+
+
+data DebugUtilsMessengerCallbackDataEXT
+
+instance ToCStruct DebugUtilsMessengerCallbackDataEXT
+instance Show DebugUtilsMessengerCallbackDataEXT
+
+instance FromCStruct DebugUtilsMessengerCallbackDataEXT
+
+
+data DebugUtilsMessengerCreateInfoEXT
+
+instance ToCStruct DebugUtilsMessengerCreateInfoEXT
+instance Show DebugUtilsMessengerCreateInfoEXT
+
+instance FromCStruct DebugUtilsMessengerCreateInfoEXT
+
+
+data DebugUtilsObjectNameInfoEXT
+
+instance ToCStruct DebugUtilsObjectNameInfoEXT
+instance Show DebugUtilsObjectNameInfoEXT
+
+instance FromCStruct DebugUtilsObjectNameInfoEXT
+
+
+data DebugUtilsObjectTagInfoEXT
+
+instance ToCStruct DebugUtilsObjectTagInfoEXT
+instance Show DebugUtilsObjectTagInfoEXT
+
+instance FromCStruct DebugUtilsObjectTagInfoEXT
+
+
+data DebugUtilsMessageSeverityFlagBitsEXT
+
+type DebugUtilsMessageSeverityFlagsEXT = DebugUtilsMessageSeverityFlagBitsEXT
+
+
+data DebugUtilsMessageTypeFlagBitsEXT
+
+type DebugUtilsMessageTypeFlagsEXT = DebugUtilsMessageTypeFlagBitsEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs b/src/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs
@@ -0,0 +1,211 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_depth_clip_enable  ( PhysicalDeviceDepthClipEnableFeaturesEXT(..)
+                                                   , PipelineRasterizationDepthClipStateCreateInfoEXT(..)
+                                                   , PipelineRasterizationDepthClipStateCreateFlagsEXT(..)
+                                                   , EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION
+                                                   , pattern EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION
+                                                   , EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME
+                                                   , pattern EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME
+                                                   ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT))
+-- | VkPhysicalDeviceDepthClipEnableFeaturesEXT - Structure indicating
+-- support for explicit enable of depth clip
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceDepthClipEnableFeaturesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceDepthClipEnableFeaturesEXT' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceDepthClipEnableFeaturesEXT' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable this
+-- feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDepthClipEnableFeaturesEXT = PhysicalDeviceDepthClipEnableFeaturesEXT
+  { -- | @depthClipEnable@ indicates that the implementation supports setting the
+    -- depth clipping operation explicitly via the
+    -- 'PipelineRasterizationDepthClipStateCreateInfoEXT' pipeline state.
+    -- Otherwise depth clipping is only enabled when
+    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@depthClampEnable@
+    -- is set to 'Vulkan.Core10.BaseType.FALSE'.
+    depthClipEnable :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceDepthClipEnableFeaturesEXT
+
+instance ToCStruct PhysicalDeviceDepthClipEnableFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDepthClipEnableFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (depthClipEnable))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceDepthClipEnableFeaturesEXT where
+  peekCStruct p = do
+    depthClipEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceDepthClipEnableFeaturesEXT
+             (bool32ToBool depthClipEnable)
+
+instance Storable PhysicalDeviceDepthClipEnableFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDepthClipEnableFeaturesEXT where
+  zero = PhysicalDeviceDepthClipEnableFeaturesEXT
+           zero
+
+
+-- | VkPipelineRasterizationDepthClipStateCreateInfoEXT - Structure
+-- specifying depth clipping state
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'PipelineRasterizationDepthClipStateCreateFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineRasterizationDepthClipStateCreateInfoEXT = PipelineRasterizationDepthClipStateCreateInfoEXT
+  { -- | @flags@ /must/ be @0@
+    flags :: PipelineRasterizationDepthClipStateCreateFlagsEXT
+  , -- | @depthClipEnable@ controls whether depth clipping is enabled as
+    -- described in
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>.
+    depthClipEnable :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PipelineRasterizationDepthClipStateCreateInfoEXT
+
+instance ToCStruct PipelineRasterizationDepthClipStateCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineRasterizationDepthClipStateCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationDepthClipStateCreateFlagsEXT)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthClipEnable))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PipelineRasterizationDepthClipStateCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @PipelineRasterizationDepthClipStateCreateFlagsEXT ((p `plusPtr` 16 :: Ptr PipelineRasterizationDepthClipStateCreateFlagsEXT))
+    depthClipEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PipelineRasterizationDepthClipStateCreateInfoEXT
+             flags (bool32ToBool depthClipEnable)
+
+instance Storable PipelineRasterizationDepthClipStateCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineRasterizationDepthClipStateCreateInfoEXT where
+  zero = PipelineRasterizationDepthClipStateCreateInfoEXT
+           zero
+           zero
+
+
+-- | VkPipelineRasterizationDepthClipStateCreateFlagsEXT - Reserved for
+-- future use
+--
+-- = Description
+--
+-- 'PipelineRasterizationDepthClipStateCreateFlagsEXT' is a bitmask type
+-- for setting a mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'PipelineRasterizationDepthClipStateCreateInfoEXT'
+newtype PipelineRasterizationDepthClipStateCreateFlagsEXT = PipelineRasterizationDepthClipStateCreateFlagsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineRasterizationDepthClipStateCreateFlagsEXT where
+  showsPrec p = \case
+    PipelineRasterizationDepthClipStateCreateFlagsEXT x -> showParen (p >= 11) (showString "PipelineRasterizationDepthClipStateCreateFlagsEXT 0x" . showHex x)
+
+instance Read PipelineRasterizationDepthClipStateCreateFlagsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineRasterizationDepthClipStateCreateFlagsEXT")
+                       v <- step readPrec
+                       pure (PipelineRasterizationDepthClipStateCreateFlagsEXT v)))
+
+
+type EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION"
+pattern EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION = 1
+
+
+type EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME = "VK_EXT_depth_clip_enable"
+
+-- No documentation found for TopLevel "VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME"
+pattern EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME = "VK_EXT_depth_clip_enable"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs-boot b/src/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_depth_clip_enable  ( PhysicalDeviceDepthClipEnableFeaturesEXT
+                                                   , PipelineRasterizationDepthClipStateCreateInfoEXT
+                                                   ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceDepthClipEnableFeaturesEXT
+
+instance ToCStruct PhysicalDeviceDepthClipEnableFeaturesEXT
+instance Show PhysicalDeviceDepthClipEnableFeaturesEXT
+
+instance FromCStruct PhysicalDeviceDepthClipEnableFeaturesEXT
+
+
+data PipelineRasterizationDepthClipStateCreateInfoEXT
+
+instance ToCStruct PipelineRasterizationDepthClipStateCreateInfoEXT
+instance Show PipelineRasterizationDepthClipStateCreateInfoEXT
+
+instance FromCStruct PipelineRasterizationDepthClipStateCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_depth_range_unrestricted.hs b/src/Vulkan/Extensions/VK_EXT_depth_range_unrestricted.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_depth_range_unrestricted.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_depth_range_unrestricted  ( EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION
+                                                          , pattern EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION
+                                                          , EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME
+                                                          , pattern EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME
+                                                          ) where
+
+import Data.String (IsString)
+
+type EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION"
+pattern EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION = 1
+
+
+type EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME = "VK_EXT_depth_range_unrestricted"
+
+-- No documentation found for TopLevel "VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME"
+pattern EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME = "VK_EXT_depth_range_unrestricted"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs b/src/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs
@@ -0,0 +1,141 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_descriptor_indexing  ( pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT
+                                                     , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT
+                                                     , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT
+                                                     , pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT
+                                                     , pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT
+                                                     , pattern DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
+                                                     , pattern DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT
+                                                     , pattern DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT
+                                                     , pattern DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT
+                                                     , pattern DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT
+                                                     , pattern DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
+                                                     , pattern ERROR_FRAGMENTATION_EXT
+                                                     , DescriptorBindingFlagsEXT
+                                                     , DescriptorBindingFlagBitsEXT
+                                                     , PhysicalDeviceDescriptorIndexingFeaturesEXT
+                                                     , PhysicalDeviceDescriptorIndexingPropertiesEXT
+                                                     , DescriptorSetLayoutBindingFlagsCreateInfoEXT
+                                                     , DescriptorSetVariableDescriptorCountAllocateInfoEXT
+                                                     , DescriptorSetVariableDescriptorCountLayoutSupportEXT
+                                                     , EXT_DESCRIPTOR_INDEXING_SPEC_VERSION
+                                                     , pattern EXT_DESCRIPTOR_INDEXING_SPEC_VERSION
+                                                     , EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME
+                                                     , pattern EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME
+                                                     ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits)
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
+import Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetLayoutBindingFlagsCreateInfo)
+import Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountAllocateInfo)
+import Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (DescriptorSetVariableDescriptorCountLayoutSupport)
+import Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
+import Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingProperties)
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits(DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT))
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits(DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT))
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits(DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT))
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlags)
+import Vulkan.Core12.Enums.DescriptorBindingFlagBits (DescriptorBindingFlagBits(DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT))
+import Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits (DescriptorPoolCreateFlags)
+import Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits (DescriptorPoolCreateFlagBits(DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT))
+import Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits (DescriptorSetLayoutCreateFlags)
+import Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits (DescriptorSetLayoutCreateFlagBits(DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT))
+import Vulkan.Core10.Enums.Result (Result(ERROR_FRAGMENTATION))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT
+
+
+-- No documentation found for TopLevel "VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT"
+pattern DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+
+
+-- No documentation found for TopLevel "VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT"
+pattern DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT
+
+
+-- No documentation found for TopLevel "VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT"
+pattern DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT
+
+
+-- No documentation found for TopLevel "VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT"
+pattern DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
+
+
+-- No documentation found for TopLevel "VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT"
+pattern DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT
+
+
+-- No documentation found for TopLevel "VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT"
+pattern DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
+
+
+-- No documentation found for TopLevel "VK_ERROR_FRAGMENTATION_EXT"
+pattern ERROR_FRAGMENTATION_EXT = ERROR_FRAGMENTATION
+
+
+-- No documentation found for TopLevel "VkDescriptorBindingFlagsEXT"
+type DescriptorBindingFlagsEXT = DescriptorBindingFlags
+
+
+-- No documentation found for TopLevel "VkDescriptorBindingFlagBitsEXT"
+type DescriptorBindingFlagBitsEXT = DescriptorBindingFlagBits
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceDescriptorIndexingFeaturesEXT"
+type PhysicalDeviceDescriptorIndexingFeaturesEXT = PhysicalDeviceDescriptorIndexingFeatures
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceDescriptorIndexingPropertiesEXT"
+type PhysicalDeviceDescriptorIndexingPropertiesEXT = PhysicalDeviceDescriptorIndexingProperties
+
+
+-- No documentation found for TopLevel "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT"
+type DescriptorSetLayoutBindingFlagsCreateInfoEXT = DescriptorSetLayoutBindingFlagsCreateInfo
+
+
+-- No documentation found for TopLevel "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT"
+type DescriptorSetVariableDescriptorCountAllocateInfoEXT = DescriptorSetVariableDescriptorCountAllocateInfo
+
+
+-- No documentation found for TopLevel "VkDescriptorSetVariableDescriptorCountLayoutSupportEXT"
+type DescriptorSetVariableDescriptorCountLayoutSupportEXT = DescriptorSetVariableDescriptorCountLayoutSupport
+
+
+type EXT_DESCRIPTOR_INDEXING_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION"
+pattern EXT_DESCRIPTOR_INDEXING_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_DESCRIPTOR_INDEXING_SPEC_VERSION = 2
+
+
+type EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME = "VK_EXT_descriptor_indexing"
+
+-- No documentation found for TopLevel "VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME"
+pattern EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME = "VK_EXT_descriptor_indexing"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_direct_mode_display.hs b/src/Vulkan/Extensions/VK_EXT_direct_mode_display.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_direct_mode_display.hs
@@ -0,0 +1,76 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_direct_mode_display  ( releaseDisplayEXT
+                                                     , EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION
+                                                     , pattern EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION
+                                                     , EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME
+                                                     , pattern EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME
+                                                     , DisplayKHR(..)
+                                                     ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Vulkan.Extensions.Handles (DisplayKHR)
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+import Vulkan.Dynamic (InstanceCmds(pVkReleaseDisplayEXT))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkReleaseDisplayEXT
+  :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> DisplayKHR -> IO Result
+
+-- | vkReleaseDisplayEXT - Release access to an acquired VkDisplayKHR
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ The physical device the display is on.
+--
+-- -   @display@ The display to release control of.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayKHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+releaseDisplayEXT :: forall io . MonadIO io => PhysicalDevice -> DisplayKHR -> io ()
+releaseDisplayEXT physicalDevice display = liftIO $ do
+  let vkReleaseDisplayEXTPtr = pVkReleaseDisplayEXT (instanceCmds (physicalDevice :: PhysicalDevice))
+  unless (vkReleaseDisplayEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkReleaseDisplayEXT is null" Nothing Nothing
+  let vkReleaseDisplayEXT' = mkVkReleaseDisplayEXT vkReleaseDisplayEXTPtr
+  _ <- vkReleaseDisplayEXT' (physicalDeviceHandle (physicalDevice)) (display)
+  pure $ ()
+
+
+type EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION"
+pattern EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION = 1
+
+
+type EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME = "VK_EXT_direct_mode_display"
+
+-- No documentation found for TopLevel "VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME"
+pattern EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME = "VK_EXT_direct_mode_display"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_discard_rectangles.hs b/src/Vulkan/Extensions/VK_EXT_discard_rectangles.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_discard_rectangles.hs
@@ -0,0 +1,404 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_discard_rectangles  ( cmdSetDiscardRectangleEXT
+                                                    , PhysicalDeviceDiscardRectanglePropertiesEXT(..)
+                                                    , PipelineDiscardRectangleStateCreateInfoEXT(..)
+                                                    , PipelineDiscardRectangleStateCreateFlagsEXT(..)
+                                                    , DiscardRectangleModeEXT( DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT
+                                                                             , DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT
+                                                                             , ..
+                                                                             )
+                                                    , EXT_DISCARD_RECTANGLES_SPEC_VERSION
+                                                    , pattern EXT_DISCARD_RECTANGLES_SPEC_VERSION
+                                                    , EXT_DISCARD_RECTANGLES_EXTENSION_NAME
+                                                    , pattern EXT_DISCARD_RECTANGLES_EXTENSION_NAME
+                                                    ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetDiscardRectangleEXT))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.CommandBufferBuilding (Rect2D)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetDiscardRectangleEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()
+
+-- | vkCmdSetDiscardRectangleEXT - Set discard rectangles dynamically
+--
+-- = 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
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures specifying
+--     discard rectangles.
+--
+-- = Description
+--
+-- The discard rectangle taken from element i of @pDiscardRectangles@
+-- replace the current state for the discard rectangle at index
+-- @firstDiscardRectangle@ + i, for i in [0, @discardRectangleCount@).
+--
+-- This command sets the state for a given draw when the graphics pipeline
+-- is created with
+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DISCARD_RECTANGLE_EXT'
+-- set in
+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.
+--
+-- == Valid Usage
+--
+-- -   The sum of @firstDiscardRectangle@ and @discardRectangleCount@
+--     /must/ be less than or equal to
+--     'PhysicalDeviceDiscardRectanglePropertiesEXT'::@maxDiscardRectangles@
+--
+-- -   The @x@ and @y@ member of @offset@ in each
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' element of
+--     @pDiscardRectangles@ /must/ be greater than or equal to @0@
+--
+-- -   Evaluation of (@offset.x@ + @extent.width@) in each
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' element of
+--     @pDiscardRectangles@ /must/ not cause a signed integer addition
+--     overflow
+--
+-- -   Evaluation of (@offset.y@ + @extent.height@) in each
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' element of
+--     @pDiscardRectangles@ /must/ not cause a signed integer addition
+--     overflow
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pDiscardRectangles@ /must/ be a valid pointer to an array of
+--     @discardRectangleCount@ 'Vulkan.Core10.CommandBufferBuilding.Rect2D'
+--     structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   @discardRectangleCount@ /must/ be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D'
+cmdSetDiscardRectangleEXT :: forall io . MonadIO io => CommandBuffer -> ("firstDiscardRectangle" ::: Word32) -> ("discardRectangles" ::: Vector Rect2D) -> io ()
+cmdSetDiscardRectangleEXT commandBuffer firstDiscardRectangle discardRectangles = liftIO . evalContT $ do
+  let vkCmdSetDiscardRectangleEXTPtr = pVkCmdSetDiscardRectangleEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetDiscardRectangleEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDiscardRectangleEXT is null" Nothing Nothing
+  let vkCmdSetDiscardRectangleEXT' = mkVkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXTPtr
+  pPDiscardRectangles <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (discardRectangles)) * 16) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDiscardRectangles `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (discardRectangles)
+  lift $ vkCmdSetDiscardRectangleEXT' (commandBufferHandle (commandBuffer)) (firstDiscardRectangle) ((fromIntegral (Data.Vector.length $ (discardRectangles)) :: Word32)) (pPDiscardRectangles)
+  pure $ ()
+
+
+-- | VkPhysicalDeviceDiscardRectanglePropertiesEXT - Structure describing
+-- discard rectangle limits that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceDiscardRectanglePropertiesEXT'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceDiscardRectanglePropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDiscardRectanglePropertiesEXT = PhysicalDeviceDiscardRectanglePropertiesEXT
+  { -- | @maxDiscardRectangles@ is the maximum number of active discard
+    -- rectangles that /can/ be specified.
+    maxDiscardRectangles :: Word32 }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceDiscardRectanglePropertiesEXT
+
+instance ToCStruct PhysicalDeviceDiscardRectanglePropertiesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDiscardRectanglePropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxDiscardRectangles)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceDiscardRectanglePropertiesEXT where
+  peekCStruct p = do
+    maxDiscardRectangles <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ PhysicalDeviceDiscardRectanglePropertiesEXT
+             maxDiscardRectangles
+
+instance Storable PhysicalDeviceDiscardRectanglePropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDiscardRectanglePropertiesEXT where
+  zero = PhysicalDeviceDiscardRectanglePropertiesEXT
+           zero
+
+
+-- | VkPipelineDiscardRectangleStateCreateInfoEXT - Structure specifying
+-- discard rectangle
+--
+-- = Description
+--
+-- If the
+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DISCARD_RECTANGLE_EXT'
+-- dynamic state is enabled for a pipeline, the @pDiscardRectangles@ member
+-- is ignored.
+--
+-- When this structure is included in the @pNext@ chain of
+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo', it defines
+-- parameters of the discard rectangle test. If this structure is not
+-- included in the @pNext@ chain, it is equivalent to specifying this
+-- structure with a @discardRectangleCount@ of @0@.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DiscardRectangleModeEXT',
+-- 'PipelineDiscardRectangleStateCreateFlagsEXT',
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineDiscardRectangleStateCreateInfoEXT = PipelineDiscardRectangleStateCreateInfoEXT
+  { -- | @flags@ /must/ be @0@
+    flags :: PipelineDiscardRectangleStateCreateFlagsEXT
+  , -- | @discardRectangleMode@ /must/ be a valid 'DiscardRectangleModeEXT' value
+    discardRectangleMode :: DiscardRectangleModeEXT
+  , -- | @discardRectangleCount@ /must/ be less than or equal to
+    -- 'PhysicalDeviceDiscardRectanglePropertiesEXT'::@maxDiscardRectangles@
+    discardRectangleCount :: Word32
+  , -- | @pDiscardRectangles@ is a pointer to an array of
+    -- 'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures defining discard
+    -- rectangles.
+    discardRectangles :: Vector Rect2D
+  }
+  deriving (Typeable)
+deriving instance Show PipelineDiscardRectangleStateCreateInfoEXT
+
+instance ToCStruct PipelineDiscardRectangleStateCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineDiscardRectangleStateCreateInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDiscardRectangleStateCreateFlagsEXT)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr DiscardRectangleModeEXT)) (discardRectangleMode)
+    let pDiscardRectanglesLength = Data.Vector.length $ (discardRectangles)
+    discardRectangleCount'' <- lift $ if (discardRectangleCount) == 0
+      then pure $ fromIntegral pDiscardRectanglesLength
+      else do
+        unless (fromIntegral pDiscardRectanglesLength == (discardRectangleCount) || pDiscardRectanglesLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pDiscardRectangles must be empty or have 'discardRectangleCount' elements" Nothing Nothing
+        pure (discardRectangleCount)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (discardRectangleCount'')
+    pDiscardRectangles'' <- if Data.Vector.null (discardRectangles)
+      then pure nullPtr
+      else do
+        pPDiscardRectangles <- ContT $ allocaBytesAligned @Rect2D (((Data.Vector.length (discardRectangles))) * 16) 4
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPDiscardRectangles `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) ((discardRectangles))
+        pure $ pPDiscardRectangles
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Rect2D))) pDiscardRectangles''
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr DiscardRectangleModeEXT)) (zero)
+    f
+
+instance FromCStruct PipelineDiscardRectangleStateCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @PipelineDiscardRectangleStateCreateFlagsEXT ((p `plusPtr` 16 :: Ptr PipelineDiscardRectangleStateCreateFlagsEXT))
+    discardRectangleMode <- peek @DiscardRectangleModeEXT ((p `plusPtr` 20 :: Ptr DiscardRectangleModeEXT))
+    discardRectangleCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pDiscardRectangles <- peek @(Ptr Rect2D) ((p `plusPtr` 32 :: Ptr (Ptr Rect2D)))
+    let pDiscardRectanglesLength = if pDiscardRectangles == nullPtr then 0 else (fromIntegral discardRectangleCount)
+    pDiscardRectangles' <- generateM pDiscardRectanglesLength (\i -> peekCStruct @Rect2D ((pDiscardRectangles `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
+    pure $ PipelineDiscardRectangleStateCreateInfoEXT
+             flags discardRectangleMode discardRectangleCount pDiscardRectangles'
+
+instance Zero PipelineDiscardRectangleStateCreateInfoEXT where
+  zero = PipelineDiscardRectangleStateCreateInfoEXT
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkPipelineDiscardRectangleStateCreateFlagsEXT - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineDiscardRectangleStateCreateFlagsEXT' is a bitmask type for
+-- setting a mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'PipelineDiscardRectangleStateCreateInfoEXT'
+newtype PipelineDiscardRectangleStateCreateFlagsEXT = PipelineDiscardRectangleStateCreateFlagsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineDiscardRectangleStateCreateFlagsEXT where
+  showsPrec p = \case
+    PipelineDiscardRectangleStateCreateFlagsEXT x -> showParen (p >= 11) (showString "PipelineDiscardRectangleStateCreateFlagsEXT 0x" . showHex x)
+
+instance Read PipelineDiscardRectangleStateCreateFlagsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineDiscardRectangleStateCreateFlagsEXT")
+                       v <- step readPrec
+                       pure (PipelineDiscardRectangleStateCreateFlagsEXT v)))
+
+
+-- | VkDiscardRectangleModeEXT - Specify the discard rectangle mode
+--
+-- = See Also
+--
+-- 'PipelineDiscardRectangleStateCreateInfoEXT'
+newtype DiscardRectangleModeEXT = DiscardRectangleModeEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT' specifies that the discard
+-- rectangle test is inclusive.
+pattern DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = DiscardRectangleModeEXT 0
+-- | 'DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT' specifies that the discard
+-- rectangle test is exclusive.
+pattern DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = DiscardRectangleModeEXT 1
+{-# complete DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT,
+             DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT :: DiscardRectangleModeEXT #-}
+
+instance Show DiscardRectangleModeEXT where
+  showsPrec p = \case
+    DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT -> showString "DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT"
+    DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT -> showString "DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT"
+    DiscardRectangleModeEXT x -> showParen (p >= 11) (showString "DiscardRectangleModeEXT " . showsPrec 11 x)
+
+instance Read DiscardRectangleModeEXT where
+  readPrec = parens (choose [("DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT", pure DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT)
+                            , ("DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT", pure DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DiscardRectangleModeEXT")
+                       v <- step readPrec
+                       pure (DiscardRectangleModeEXT v)))
+
+
+type EXT_DISCARD_RECTANGLES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION"
+pattern EXT_DISCARD_RECTANGLES_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_DISCARD_RECTANGLES_SPEC_VERSION = 1
+
+
+type EXT_DISCARD_RECTANGLES_EXTENSION_NAME = "VK_EXT_discard_rectangles"
+
+-- No documentation found for TopLevel "VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME"
+pattern EXT_DISCARD_RECTANGLES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_DISCARD_RECTANGLES_EXTENSION_NAME = "VK_EXT_discard_rectangles"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_discard_rectangles.hs-boot b/src/Vulkan/Extensions/VK_EXT_discard_rectangles.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_discard_rectangles.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_discard_rectangles  ( PhysicalDeviceDiscardRectanglePropertiesEXT
+                                                    , PipelineDiscardRectangleStateCreateInfoEXT
+                                                    ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceDiscardRectanglePropertiesEXT
+
+instance ToCStruct PhysicalDeviceDiscardRectanglePropertiesEXT
+instance Show PhysicalDeviceDiscardRectanglePropertiesEXT
+
+instance FromCStruct PhysicalDeviceDiscardRectanglePropertiesEXT
+
+
+data PipelineDiscardRectangleStateCreateInfoEXT
+
+instance ToCStruct PipelineDiscardRectangleStateCreateInfoEXT
+instance Show PipelineDiscardRectangleStateCreateInfoEXT
+
+instance FromCStruct PipelineDiscardRectangleStateCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_display_control.hs b/src/Vulkan/Extensions/VK_EXT_display_control.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_display_control.hs
@@ -0,0 +1,684 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_display_control  ( displayPowerControlEXT
+                                                 , registerDeviceEventEXT
+                                                 , registerDisplayEventEXT
+                                                 , getSwapchainCounterEXT
+                                                 , DisplayPowerInfoEXT(..)
+                                                 , DeviceEventInfoEXT(..)
+                                                 , DisplayEventInfoEXT(..)
+                                                 , SwapchainCounterCreateInfoEXT(..)
+                                                 , DisplayPowerStateEXT( DISPLAY_POWER_STATE_OFF_EXT
+                                                                       , DISPLAY_POWER_STATE_SUSPEND_EXT
+                                                                       , DISPLAY_POWER_STATE_ON_EXT
+                                                                       , ..
+                                                                       )
+                                                 , DeviceEventTypeEXT( DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT
+                                                                     , ..
+                                                                     )
+                                                 , DisplayEventTypeEXT( DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT
+                                                                      , ..
+                                                                      )
+                                                 , EXT_DISPLAY_CONTROL_SPEC_VERSION
+                                                 , pattern EXT_DISPLAY_CONTROL_SPEC_VERSION
+                                                 , EXT_DISPLAY_CONTROL_EXTENSION_NAME
+                                                 , pattern EXT_DISPLAY_CONTROL_EXTENSION_NAME
+                                                 , DisplayKHR(..)
+                                                 , SwapchainKHR(..)
+                                                 , SurfaceCounterFlagBitsEXT(..)
+                                                 , SurfaceCounterFlagsEXT
+                                                 ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkDisplayPowerControlEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkGetSwapchainCounterEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkRegisterDeviceEventEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkRegisterDisplayEventEXT))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Extensions.Handles (DisplayKHR)
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+import Vulkan.Core10.Handles (Fence)
+import Vulkan.Core10.Handles (Fence(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagBitsEXT)
+import Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagBitsEXT(..))
+import Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagsEXT)
+import Vulkan.Extensions.Handles (SwapchainKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+import Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagBitsEXT(..))
+import Vulkan.Extensions.VK_EXT_display_surface_counter (SurfaceCounterFlagsEXT)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDisplayPowerControlEXT
+  :: FunPtr (Ptr Device_T -> DisplayKHR -> Ptr DisplayPowerInfoEXT -> IO Result) -> Ptr Device_T -> DisplayKHR -> Ptr DisplayPowerInfoEXT -> IO Result
+
+-- | vkDisplayPowerControlEXT - Set the power state of a display
+--
+-- = Parameters
+--
+-- -   @device@ is a logical device associated with @display@.
+--
+-- -   @display@ is the display whose power state is modified.
+--
+-- -   @pDisplayPowerInfo@ is a 'DisplayPowerInfoEXT' structure specifying
+--     the new power state of @display@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'
+--     handle
+--
+-- -   @pDisplayPowerInfo@ /must/ be a valid pointer to a valid
+--     'DisplayPowerInfoEXT' structure
+--
+-- -   Both of @device@, and @display@ /must/ have been created, allocated,
+--     or retrieved from the same 'Vulkan.Core10.Handles.PhysicalDevice'
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Extensions.Handles.DisplayKHR',
+-- 'DisplayPowerInfoEXT'
+displayPowerControlEXT :: forall io . MonadIO io => Device -> DisplayKHR -> DisplayPowerInfoEXT -> io ()
+displayPowerControlEXT device display displayPowerInfo = liftIO . evalContT $ do
+  let vkDisplayPowerControlEXTPtr = pVkDisplayPowerControlEXT (deviceCmds (device :: Device))
+  lift $ unless (vkDisplayPowerControlEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDisplayPowerControlEXT is null" Nothing Nothing
+  let vkDisplayPowerControlEXT' = mkVkDisplayPowerControlEXT vkDisplayPowerControlEXTPtr
+  pDisplayPowerInfo <- ContT $ withCStruct (displayPowerInfo)
+  _ <- lift $ vkDisplayPowerControlEXT' (deviceHandle (device)) (display) pDisplayPowerInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkRegisterDeviceEventEXT
+  :: FunPtr (Ptr Device_T -> Ptr DeviceEventInfoEXT -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result) -> Ptr Device_T -> Ptr DeviceEventInfoEXT -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result
+
+-- | vkRegisterDeviceEventEXT - Signal a fence when a device event occurs
+--
+-- = Parameters
+--
+-- -   @device@ is a logical device on which the event /may/ occur.
+--
+-- -   @pDeviceEventInfo@ is a pointer to a 'DeviceEventInfoEXT' structure
+--     describing the event of interest to the application.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pFence@ is a pointer to a handle in which the resulting fence
+--     object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pDeviceEventInfo@ /must/ be a valid pointer to a valid
+--     'DeviceEventInfoEXT' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pFence@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Fence' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'DeviceEventInfoEXT',
+-- 'Vulkan.Core10.Handles.Fence'
+registerDeviceEventEXT :: forall io . MonadIO io => Device -> DeviceEventInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Fence)
+registerDeviceEventEXT device deviceEventInfo allocator = liftIO . evalContT $ do
+  let vkRegisterDeviceEventEXTPtr = pVkRegisterDeviceEventEXT (deviceCmds (device :: Device))
+  lift $ unless (vkRegisterDeviceEventEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkRegisterDeviceEventEXT is null" Nothing Nothing
+  let vkRegisterDeviceEventEXT' = mkVkRegisterDeviceEventEXT vkRegisterDeviceEventEXTPtr
+  pDeviceEventInfo <- ContT $ withCStruct (deviceEventInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPFence <- ContT $ bracket (callocBytes @Fence 8) free
+  _ <- lift $ vkRegisterDeviceEventEXT' (deviceHandle (device)) pDeviceEventInfo pAllocator (pPFence)
+  pFence <- lift $ peek @Fence pPFence
+  pure $ (pFence)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkRegisterDisplayEventEXT
+  :: FunPtr (Ptr Device_T -> DisplayKHR -> Ptr DisplayEventInfoEXT -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result) -> Ptr Device_T -> DisplayKHR -> Ptr DisplayEventInfoEXT -> Ptr AllocationCallbacks -> Ptr Fence -> IO Result
+
+-- | vkRegisterDisplayEventEXT - Signal a fence when a display event occurs
+--
+-- = Parameters
+--
+-- -   @device@ is a logical device associated with @display@
+--
+-- -   @display@ is the display on which the event /may/ occur.
+--
+-- -   @pDisplayEventInfo@ is a pointer to a 'DisplayEventInfoEXT'
+--     structure describing the event of interest to the application.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pFence@ is a pointer to a handle in which the resulting fence
+--     object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'
+--     handle
+--
+-- -   @pDisplayEventInfo@ /must/ be a valid pointer to a valid
+--     'DisplayEventInfoEXT' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pFence@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.Handles.Fence' handle
+--
+-- -   Both of @device@, and @display@ /must/ have been created, allocated,
+--     or retrieved from the same 'Vulkan.Core10.Handles.PhysicalDevice'
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'DisplayEventInfoEXT',
+-- 'Vulkan.Extensions.Handles.DisplayKHR', 'Vulkan.Core10.Handles.Fence'
+registerDisplayEventEXT :: forall io . MonadIO io => Device -> DisplayKHR -> DisplayEventInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Fence)
+registerDisplayEventEXT device display displayEventInfo allocator = liftIO . evalContT $ do
+  let vkRegisterDisplayEventEXTPtr = pVkRegisterDisplayEventEXT (deviceCmds (device :: Device))
+  lift $ unless (vkRegisterDisplayEventEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkRegisterDisplayEventEXT is null" Nothing Nothing
+  let vkRegisterDisplayEventEXT' = mkVkRegisterDisplayEventEXT vkRegisterDisplayEventEXTPtr
+  pDisplayEventInfo <- ContT $ withCStruct (displayEventInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPFence <- ContT $ bracket (callocBytes @Fence 8) free
+  _ <- lift $ vkRegisterDisplayEventEXT' (deviceHandle (device)) (display) pDisplayEventInfo pAllocator (pPFence)
+  pFence <- lift $ peek @Fence pPFence
+  pure $ (pFence)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetSwapchainCounterEXT
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> SurfaceCounterFlagBitsEXT -> Ptr Word64 -> IO Result) -> Ptr Device_T -> SwapchainKHR -> SurfaceCounterFlagBitsEXT -> Ptr Word64 -> IO Result
+
+-- | vkGetSwapchainCounterEXT - Query the current value of a surface counter
+--
+-- = Parameters
+--
+-- -   @device@ is the 'Vulkan.Core10.Handles.Device' 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
+--
+-- If a counter is not available because the swapchain is out of date, the
+-- implementation /may/ return
+-- 'Vulkan.Core10.Enums.Result.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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   @counter@ /must/ be a valid
+--     'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagBitsEXT'
+--     value
+--
+-- -   @pCounterValue@ /must/ be a valid pointer to a @uint64_t@ value
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagBitsEXT',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+getSwapchainCounterEXT :: forall io . MonadIO io => Device -> SwapchainKHR -> SurfaceCounterFlagBitsEXT -> io (("counterValue" ::: Word64))
+getSwapchainCounterEXT device swapchain counter = liftIO . evalContT $ do
+  let vkGetSwapchainCounterEXTPtr = pVkGetSwapchainCounterEXT (deviceCmds (device :: Device))
+  lift $ unless (vkGetSwapchainCounterEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetSwapchainCounterEXT is null" Nothing Nothing
+  let vkGetSwapchainCounterEXT' = mkVkGetSwapchainCounterEXT vkGetSwapchainCounterEXTPtr
+  pPCounterValue <- ContT $ bracket (callocBytes @Word64 8) free
+  r <- lift $ vkGetSwapchainCounterEXT' (deviceHandle (device)) (swapchain) (counter) (pPCounterValue)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pCounterValue <- lift $ peek @Word64 pPCounterValue
+  pure $ (pCounterValue)
+
+
+-- | VkDisplayPowerInfoEXT - Describe the power state of a display
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DisplayPowerStateEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'displayPowerControlEXT'
+data DisplayPowerInfoEXT = DisplayPowerInfoEXT
+  { -- | @powerState@ /must/ be a valid 'DisplayPowerStateEXT' value
+    powerState :: DisplayPowerStateEXT }
+  deriving (Typeable)
+deriving instance Show DisplayPowerInfoEXT
+
+instance ToCStruct DisplayPowerInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayPowerInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DisplayPowerStateEXT)) (powerState)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DisplayPowerStateEXT)) (zero)
+    f
+
+instance FromCStruct DisplayPowerInfoEXT where
+  peekCStruct p = do
+    powerState <- peek @DisplayPowerStateEXT ((p `plusPtr` 16 :: Ptr DisplayPowerStateEXT))
+    pure $ DisplayPowerInfoEXT
+             powerState
+
+instance Storable DisplayPowerInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DisplayPowerInfoEXT where
+  zero = DisplayPowerInfoEXT
+           zero
+
+
+-- | VkDeviceEventInfoEXT - Describe a device event to create
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DeviceEventTypeEXT', 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'registerDeviceEventEXT'
+data DeviceEventInfoEXT = DeviceEventInfoEXT
+  { -- | @deviceEvent@ /must/ be a valid 'DeviceEventTypeEXT' value
+    deviceEvent :: DeviceEventTypeEXT }
+  deriving (Typeable)
+deriving instance Show DeviceEventInfoEXT
+
+instance ToCStruct DeviceEventInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceEventInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceEventTypeEXT)) (deviceEvent)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceEventTypeEXT)) (zero)
+    f
+
+instance FromCStruct DeviceEventInfoEXT where
+  peekCStruct p = do
+    deviceEvent <- peek @DeviceEventTypeEXT ((p `plusPtr` 16 :: Ptr DeviceEventTypeEXT))
+    pure $ DeviceEventInfoEXT
+             deviceEvent
+
+instance Storable DeviceEventInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceEventInfoEXT where
+  zero = DeviceEventInfoEXT
+           zero
+
+
+-- | VkDisplayEventInfoEXT - Describe a display event to create
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DisplayEventTypeEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'registerDisplayEventEXT'
+data DisplayEventInfoEXT = DisplayEventInfoEXT
+  { -- | @displayEvent@ /must/ be a valid 'DisplayEventTypeEXT' value
+    displayEvent :: DisplayEventTypeEXT }
+  deriving (Typeable)
+deriving instance Show DisplayEventInfoEXT
+
+instance ToCStruct DisplayEventInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayEventInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DisplayEventTypeEXT)) (displayEvent)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DisplayEventTypeEXT)) (zero)
+    f
+
+instance FromCStruct DisplayEventInfoEXT where
+  peekCStruct p = do
+    displayEvent <- peek @DisplayEventTypeEXT ((p `plusPtr` 16 :: Ptr DisplayEventTypeEXT))
+    pure $ DisplayEventInfoEXT
+             displayEvent
+
+instance Storable DisplayEventInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DisplayEventInfoEXT where
+  zero = DisplayEventInfoEXT
+           zero
+
+
+-- | VkSwapchainCounterCreateInfoEXT - Specify the surface counters desired
+--
+-- == Valid Usage
+--
+-- -   The bits in @surfaceCounters@ /must/ be supported by
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'::@surface@,
+--     as reported by
+--     'Vulkan.Extensions.VK_EXT_display_surface_counter.getPhysicalDeviceSurfaceCapabilities2EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT'
+--
+-- -   @surfaceCounters@ /must/ be a valid combination of
+--     'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagBitsEXT'
+--     values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagsEXT'
+data SwapchainCounterCreateInfoEXT = SwapchainCounterCreateInfoEXT
+  { -- | @surfaceCounters@ is a bitmask of
+    -- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagBitsEXT'
+    -- specifying surface counters to enable for the swapchain.
+    surfaceCounters :: SurfaceCounterFlagsEXT }
+  deriving (Typeable)
+deriving instance Show SwapchainCounterCreateInfoEXT
+
+instance ToCStruct SwapchainCounterCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SwapchainCounterCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SurfaceCounterFlagsEXT)) (surfaceCounters)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct SwapchainCounterCreateInfoEXT where
+  peekCStruct p = do
+    surfaceCounters <- peek @SurfaceCounterFlagsEXT ((p `plusPtr` 16 :: Ptr SurfaceCounterFlagsEXT))
+    pure $ SwapchainCounterCreateInfoEXT
+             surfaceCounters
+
+instance Storable SwapchainCounterCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SwapchainCounterCreateInfoEXT where
+  zero = SwapchainCounterCreateInfoEXT
+           zero
+
+
+-- | VkDisplayPowerStateEXT - Possible power states for a display
+--
+-- = See Also
+--
+-- 'DisplayPowerInfoEXT'
+newtype DisplayPowerStateEXT = DisplayPowerStateEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'DISPLAY_POWER_STATE_OFF_EXT' specifies that the display is powered
+-- down.
+pattern DISPLAY_POWER_STATE_OFF_EXT = DisplayPowerStateEXT 0
+-- | '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
+-- 'DISPLAY_POWER_STATE_ON_EXT' more quickly than if it were in
+-- 'DISPLAY_POWER_STATE_OFF_EXT'. This state /may/ be the same as
+-- 'DISPLAY_POWER_STATE_OFF_EXT'.
+pattern DISPLAY_POWER_STATE_SUSPEND_EXT = DisplayPowerStateEXT 1
+-- | 'DISPLAY_POWER_STATE_ON_EXT' specifies that the display is powered on.
+pattern DISPLAY_POWER_STATE_ON_EXT = DisplayPowerStateEXT 2
+{-# complete DISPLAY_POWER_STATE_OFF_EXT,
+             DISPLAY_POWER_STATE_SUSPEND_EXT,
+             DISPLAY_POWER_STATE_ON_EXT :: DisplayPowerStateEXT #-}
+
+instance Show DisplayPowerStateEXT where
+  showsPrec p = \case
+    DISPLAY_POWER_STATE_OFF_EXT -> showString "DISPLAY_POWER_STATE_OFF_EXT"
+    DISPLAY_POWER_STATE_SUSPEND_EXT -> showString "DISPLAY_POWER_STATE_SUSPEND_EXT"
+    DISPLAY_POWER_STATE_ON_EXT -> showString "DISPLAY_POWER_STATE_ON_EXT"
+    DisplayPowerStateEXT x -> showParen (p >= 11) (showString "DisplayPowerStateEXT " . showsPrec 11 x)
+
+instance Read DisplayPowerStateEXT where
+  readPrec = parens (choose [("DISPLAY_POWER_STATE_OFF_EXT", pure DISPLAY_POWER_STATE_OFF_EXT)
+                            , ("DISPLAY_POWER_STATE_SUSPEND_EXT", pure DISPLAY_POWER_STATE_SUSPEND_EXT)
+                            , ("DISPLAY_POWER_STATE_ON_EXT", pure DISPLAY_POWER_STATE_ON_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DisplayPowerStateEXT")
+                       v <- step readPrec
+                       pure (DisplayPowerStateEXT v)))
+
+
+-- | VkDeviceEventTypeEXT - Events that can occur on a device object
+--
+-- = See Also
+--
+-- 'DeviceEventInfoEXT'
+newtype DeviceEventTypeEXT = DeviceEventTypeEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | '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 DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = DeviceEventTypeEXT 0
+{-# complete DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT :: DeviceEventTypeEXT #-}
+
+instance Show DeviceEventTypeEXT where
+  showsPrec p = \case
+    DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT -> showString "DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT"
+    DeviceEventTypeEXT x -> showParen (p >= 11) (showString "DeviceEventTypeEXT " . showsPrec 11 x)
+
+instance Read DeviceEventTypeEXT where
+  readPrec = parens (choose [("DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT", pure DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DeviceEventTypeEXT")
+                       v <- step readPrec
+                       pure (DeviceEventTypeEXT v)))
+
+
+-- | VkDisplayEventTypeEXT - Events that can occur on a display object
+--
+-- = See Also
+--
+-- 'DisplayEventInfoEXT'
+newtype DisplayEventTypeEXT = DisplayEventTypeEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | '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 DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = DisplayEventTypeEXT 0
+{-# complete DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT :: DisplayEventTypeEXT #-}
+
+instance Show DisplayEventTypeEXT where
+  showsPrec p = \case
+    DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT -> showString "DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT"
+    DisplayEventTypeEXT x -> showParen (p >= 11) (showString "DisplayEventTypeEXT " . showsPrec 11 x)
+
+instance Read DisplayEventTypeEXT where
+  readPrec = parens (choose [("DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT", pure DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DisplayEventTypeEXT")
+                       v <- step readPrec
+                       pure (DisplayEventTypeEXT v)))
+
+
+type EXT_DISPLAY_CONTROL_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_DISPLAY_CONTROL_SPEC_VERSION"
+pattern EXT_DISPLAY_CONTROL_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_DISPLAY_CONTROL_SPEC_VERSION = 1
+
+
+type EXT_DISPLAY_CONTROL_EXTENSION_NAME = "VK_EXT_display_control"
+
+-- No documentation found for TopLevel "VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME"
+pattern EXT_DISPLAY_CONTROL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_DISPLAY_CONTROL_EXTENSION_NAME = "VK_EXT_display_control"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_display_control.hs-boot b/src/Vulkan/Extensions/VK_EXT_display_control.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_display_control.hs-boot
@@ -0,0 +1,41 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_display_control  ( DeviceEventInfoEXT
+                                                 , DisplayEventInfoEXT
+                                                 , DisplayPowerInfoEXT
+                                                 , SwapchainCounterCreateInfoEXT
+                                                 ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DeviceEventInfoEXT
+
+instance ToCStruct DeviceEventInfoEXT
+instance Show DeviceEventInfoEXT
+
+instance FromCStruct DeviceEventInfoEXT
+
+
+data DisplayEventInfoEXT
+
+instance ToCStruct DisplayEventInfoEXT
+instance Show DisplayEventInfoEXT
+
+instance FromCStruct DisplayEventInfoEXT
+
+
+data DisplayPowerInfoEXT
+
+instance ToCStruct DisplayPowerInfoEXT
+instance Show DisplayPowerInfoEXT
+
+instance FromCStruct DisplayPowerInfoEXT
+
+
+data SwapchainCounterCreateInfoEXT
+
+instance ToCStruct SwapchainCounterCreateInfoEXT
+instance Show SwapchainCounterCreateInfoEXT
+
+instance FromCStruct SwapchainCounterCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs b/src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs
@@ -0,0 +1,316 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_display_surface_counter  ( getPhysicalDeviceSurfaceCapabilities2EXT
+                                                         , pattern STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT
+                                                         , SurfaceCapabilities2EXT(..)
+                                                         , SurfaceCounterFlagBitsEXT( SURFACE_COUNTER_VBLANK_EXT
+                                                                                    , ..
+                                                                                    )
+                                                         , SurfaceCounterFlagsEXT
+                                                         , EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION
+                                                         , pattern EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION
+                                                         , EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME
+                                                         , pattern EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME
+                                                         , SurfaceKHR(..)
+                                                         , CompositeAlphaFlagBitsKHR(..)
+                                                         , CompositeAlphaFlagsKHR
+                                                         , SurfaceTransformFlagBitsKHR(..)
+                                                         , SurfaceTransformFlagsKHR
+                                                         ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Extensions.VK_KHR_surface (CompositeAlphaFlagsKHR)
+import Vulkan.Core10.SharedTypes (Extent2D)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceCapabilities2EXT))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR)
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagsKHR)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.VK_KHR_surface (CompositeAlphaFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (CompositeAlphaFlagsKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagsKHR)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSurfaceCapabilities2EXT
+  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr SurfaceCapabilities2EXT -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr SurfaceCapabilities2EXT -> IO Result
+
+-- | vkGetPhysicalDeviceSurfaceCapabilities2EXT - Query surface capabilities
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @surface@ is the surface that will be associated with the swapchain.
+--
+-- -   @pSurfaceCapabilities@ is a pointer to a 'SurfaceCapabilities2EXT'
+--     structure in which the capabilities are returned.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceSurfaceCapabilities2EXT' behaves similarly to
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
+-- 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
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle
+--
+-- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a
+--     'SurfaceCapabilities2EXT' structure
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'SurfaceCapabilities2EXT',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+getPhysicalDeviceSurfaceCapabilities2EXT :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (SurfaceCapabilities2EXT)
+getPhysicalDeviceSurfaceCapabilities2EXT physicalDevice surface = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSurfaceCapabilities2EXTPtr = pVkGetPhysicalDeviceSurfaceCapabilities2EXT (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSurfaceCapabilities2EXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSurfaceCapabilities2EXT is null" Nothing Nothing
+  let vkGetPhysicalDeviceSurfaceCapabilities2EXT' = mkVkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXTPtr
+  pPSurfaceCapabilities <- ContT (withZeroCStruct @SurfaceCapabilities2EXT)
+  r <- lift $ vkGetPhysicalDeviceSurfaceCapabilities2EXT' (physicalDeviceHandle (physicalDevice)) (surface) (pPSurfaceCapabilities)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurfaceCapabilities <- lift $ peekCStruct @SurfaceCapabilities2EXT pPSurfaceCapabilities
+  pure $ (pSurfaceCapabilities)
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT"
+pattern STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT
+
+
+-- | VkSurfaceCapabilities2EXT - Structure describing capabilities of a
+-- surface
+--
+-- = Members
+--
+-- All members of 'SurfaceCapabilities2EXT' are identical to the
+-- corresponding members of
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' where one
+-- exists. The remaining members are:
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_surface.CompositeAlphaFlagsKHR',
+-- 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'SurfaceCounterFlagsEXT',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagsKHR',
+-- 'getPhysicalDeviceSurfaceCapabilities2EXT'
+data SurfaceCapabilities2EXT = SurfaceCapabilities2EXT
+  { -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "minImageCount"
+    minImageCount :: Word32
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "maxImageCount"
+    maxImageCount :: Word32
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "currentExtent"
+    currentExtent :: Extent2D
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "minImageExtent"
+    minImageExtent :: Extent2D
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "maxImageExtent"
+    maxImageExtent :: Extent2D
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "maxImageArrayLayers"
+    maxImageArrayLayers :: Word32
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "supportedTransforms"
+    supportedTransforms :: SurfaceTransformFlagsKHR
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "currentTransform"
+    currentTransform :: SurfaceTransformFlagBitsKHR
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "supportedCompositeAlpha"
+    supportedCompositeAlpha :: CompositeAlphaFlagsKHR
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "supportedUsageFlags"
+    supportedUsageFlags :: ImageUsageFlags
+  , -- | @supportedSurfaceCounters@ /must/ not include
+    -- 'SURFACE_COUNTER_VBLANK_EXT' unless the surface queried is a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#wsi-display-surfaces display surface>
+    supportedSurfaceCounters :: SurfaceCounterFlagsEXT
+  }
+  deriving (Typeable)
+deriving instance Show SurfaceCapabilities2EXT
+
+instance ToCStruct SurfaceCapabilities2EXT where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfaceCapabilities2EXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (minImageCount)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (maxImageCount)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (currentExtent) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Extent2D)) (minImageExtent) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr Extent2D)) (maxImageExtent) . ($ ())
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (maxImageArrayLayers)
+    lift $ poke ((p `plusPtr` 52 :: Ptr SurfaceTransformFlagsKHR)) (supportedTransforms)
+    lift $ poke ((p `plusPtr` 56 :: Ptr SurfaceTransformFlagBitsKHR)) (currentTransform)
+    lift $ poke ((p `plusPtr` 60 :: Ptr CompositeAlphaFlagsKHR)) (supportedCompositeAlpha)
+    lift $ poke ((p `plusPtr` 64 :: Ptr ImageUsageFlags)) (supportedUsageFlags)
+    lift $ poke ((p `plusPtr` 68 :: Ptr SurfaceCounterFlagsEXT)) (supportedSurfaceCounters)
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Extent2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 56 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
+    lift $ f
+
+instance FromCStruct SurfaceCapabilities2EXT where
+  peekCStruct p = do
+    minImageCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxImageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    currentExtent <- peekCStruct @Extent2D ((p `plusPtr` 24 :: Ptr Extent2D))
+    minImageExtent <- peekCStruct @Extent2D ((p `plusPtr` 32 :: Ptr Extent2D))
+    maxImageExtent <- peekCStruct @Extent2D ((p `plusPtr` 40 :: Ptr Extent2D))
+    maxImageArrayLayers <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    supportedTransforms <- peek @SurfaceTransformFlagsKHR ((p `plusPtr` 52 :: Ptr SurfaceTransformFlagsKHR))
+    currentTransform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 56 :: Ptr SurfaceTransformFlagBitsKHR))
+    supportedCompositeAlpha <- peek @CompositeAlphaFlagsKHR ((p `plusPtr` 60 :: Ptr CompositeAlphaFlagsKHR))
+    supportedUsageFlags <- peek @ImageUsageFlags ((p `plusPtr` 64 :: Ptr ImageUsageFlags))
+    supportedSurfaceCounters <- peek @SurfaceCounterFlagsEXT ((p `plusPtr` 68 :: Ptr SurfaceCounterFlagsEXT))
+    pure $ SurfaceCapabilities2EXT
+             minImageCount maxImageCount currentExtent minImageExtent maxImageExtent maxImageArrayLayers supportedTransforms currentTransform supportedCompositeAlpha supportedUsageFlags supportedSurfaceCounters
+
+instance Zero SurfaceCapabilities2EXT where
+  zero = SurfaceCapabilities2EXT
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkSurfaceCounterFlagBitsEXT - Surface-relative counter types
+--
+-- = See Also
+--
+-- 'SurfaceCounterFlagsEXT',
+-- 'Vulkan.Extensions.VK_EXT_display_control.getSwapchainCounterEXT'
+newtype SurfaceCounterFlagBitsEXT = SurfaceCounterFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SURFACE_COUNTER_VBLANK_EXT' specifies a counter incrementing once every
+-- time a vertical blanking period occurs on the display associated with
+-- the surface.
+pattern SURFACE_COUNTER_VBLANK_EXT = SurfaceCounterFlagBitsEXT 0x00000001
+
+type SurfaceCounterFlagsEXT = SurfaceCounterFlagBitsEXT
+
+instance Show SurfaceCounterFlagBitsEXT where
+  showsPrec p = \case
+    SURFACE_COUNTER_VBLANK_EXT -> showString "SURFACE_COUNTER_VBLANK_EXT"
+    SurfaceCounterFlagBitsEXT x -> showParen (p >= 11) (showString "SurfaceCounterFlagBitsEXT 0x" . showHex x)
+
+instance Read SurfaceCounterFlagBitsEXT where
+  readPrec = parens (choose [("SURFACE_COUNTER_VBLANK_EXT", pure SURFACE_COUNTER_VBLANK_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SurfaceCounterFlagBitsEXT")
+                       v <- step readPrec
+                       pure (SurfaceCounterFlagBitsEXT v)))
+
+
+type EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION"
+pattern EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION = 1
+
+
+type EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME = "VK_EXT_display_surface_counter"
+
+-- No documentation found for TopLevel "VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME"
+pattern EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME = "VK_EXT_display_surface_counter"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs-boot b/src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs-boot
@@ -0,0 +1,21 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_display_surface_counter  ( SurfaceCapabilities2EXT
+                                                         , SurfaceCounterFlagBitsEXT
+                                                         , SurfaceCounterFlagsEXT
+                                                         ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data SurfaceCapabilities2EXT
+
+instance ToCStruct SurfaceCapabilities2EXT
+instance Show SurfaceCapabilities2EXT
+
+instance FromCStruct SurfaceCapabilities2EXT
+
+
+data SurfaceCounterFlagBitsEXT
+
+type SurfaceCounterFlagsEXT = SurfaceCounterFlagBitsEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_external_memory_dma_buf.hs b/src/Vulkan/Extensions/VK_EXT_external_memory_dma_buf.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_external_memory_dma_buf.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_external_memory_dma_buf  ( EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION
+                                                         , pattern EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION
+                                                         , EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME
+                                                         , pattern EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME
+                                                         ) where
+
+import Data.String (IsString)
+
+type EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION"
+pattern EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION = 1
+
+
+type EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME = "VK_EXT_external_memory_dma_buf"
+
+-- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME"
+pattern EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME = "VK_EXT_external_memory_dma_buf"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs b/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs
@@ -0,0 +1,375 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_external_memory_host  ( getMemoryHostPointerPropertiesEXT
+                                                      , ImportMemoryHostPointerInfoEXT(..)
+                                                      , MemoryHostPointerPropertiesEXT(..)
+                                                      , PhysicalDeviceExternalMemoryHostPropertiesEXT(..)
+                                                      , EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION
+                                                      , pattern EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION
+                                                      , EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME
+                                                      , pattern EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME
+                                                      ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetMemoryHostPointerPropertiesEXT))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetMemoryHostPointerPropertiesEXT
+  :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> Ptr () -> Ptr MemoryHostPointerPropertiesEXT -> IO Result) -> Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> Ptr () -> Ptr MemoryHostPointerPropertiesEXT -> IO Result
+
+-- | vkGetMemoryHostPointerPropertiesEXT - Get properties of external memory
+-- host pointer
+--
+-- = 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.
+--
+-- -   @pMemoryHostPointerProperties@ is a pointer to a
+--     'MemoryHostPointerPropertiesEXT' structure in which the host pointer
+--     properties are returned.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT'
+--     or
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT'
+--
+-- -   @pHostPointer@ /must/ be a pointer aligned to an integer multiple of
+--     'PhysicalDeviceExternalMemoryHostPropertiesEXT'::@minImportedHostPointerAlignment@
+--
+-- -   If @handleType@ is
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT',
+--     @pHostPointer@ /must/ be a pointer to host memory
+--
+-- -   If @handleType@ is
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT',
+--     @pHostPointer@ /must/ be a pointer to host mapped foreign memory
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+--     value
+--
+-- -   @pMemoryHostPointerProperties@ /must/ be a valid pointer to a
+--     'MemoryHostPointerPropertiesEXT' structure
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'MemoryHostPointerPropertiesEXT'
+getMemoryHostPointerPropertiesEXT :: forall io . MonadIO io => Device -> ExternalMemoryHandleTypeFlagBits -> ("hostPointer" ::: Ptr ()) -> io (MemoryHostPointerPropertiesEXT)
+getMemoryHostPointerPropertiesEXT device handleType hostPointer = liftIO . evalContT $ do
+  let vkGetMemoryHostPointerPropertiesEXTPtr = pVkGetMemoryHostPointerPropertiesEXT (deviceCmds (device :: Device))
+  lift $ unless (vkGetMemoryHostPointerPropertiesEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetMemoryHostPointerPropertiesEXT is null" Nothing Nothing
+  let vkGetMemoryHostPointerPropertiesEXT' = mkVkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXTPtr
+  pPMemoryHostPointerProperties <- ContT (withZeroCStruct @MemoryHostPointerPropertiesEXT)
+  r <- lift $ vkGetMemoryHostPointerPropertiesEXT' (deviceHandle (device)) (handleType) (hostPointer) (pPMemoryHostPointerProperties)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pMemoryHostPointerProperties <- lift $ peekCStruct @MemoryHostPointerPropertiesEXT pPMemoryHostPointerProperties
+  pure $ (pMemoryHostPointerProperties)
+
+
+-- | VkImportMemoryHostPointerInfoEXT - import memory from a host pointer
+--
+-- = 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#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
+-- 'Vulkan.Extensions.VK_KHR_external_memory.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
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalMemoryProperties'
+--
+-- -   If @handleType@ is not @0@, it /must/ be
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT'
+--     or
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT'
+--
+-- -   @pHostPointer@ /must/ be a pointer aligned to an integer multiple of
+--     'PhysicalDeviceExternalMemoryHostPropertiesEXT'::@minImportedHostPointerAlignment@
+--
+-- -   If @handleType@ is
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT',
+--     @pHostPointer@ /must/ be a pointer to @allocationSize@ number of
+--     bytes of host memory, where @allocationSize@ is the member of the
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' structure this structure
+--     is chained to
+--
+-- -   If @handleType@ is
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT',
+--     @pHostPointer@ /must/ be a pointer to @allocationSize@ number of
+--     bytes of host mapped foreign memory, where @allocationSize@ is the
+--     member of the 'Vulkan.Core10.Memory.MemoryAllocateInfo' structure
+--     this structure is chained to
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT'
+--
+-- -   @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImportMemoryHostPointerInfoEXT = ImportMemoryHostPointerInfoEXT
+  { -- | @handleType@ specifies the handle type.
+    handleType :: ExternalMemoryHandleTypeFlagBits
+  , -- | @pHostPointer@ is the host pointer to import from.
+    hostPointer :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show ImportMemoryHostPointerInfoEXT
+
+instance ToCStruct ImportMemoryHostPointerInfoEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImportMemoryHostPointerInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (hostPointer)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct ImportMemoryHostPointerInfoEXT where
+  peekCStruct p = do
+    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits))
+    pHostPointer <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
+    pure $ ImportMemoryHostPointerInfoEXT
+             handleType pHostPointer
+
+instance Storable ImportMemoryHostPointerInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImportMemoryHostPointerInfoEXT where
+  zero = ImportMemoryHostPointerInfoEXT
+           zero
+           zero
+
+
+-- | VkMemoryHostPointerPropertiesEXT - Properties of external memory host
+-- pointer
+--
+-- = Description
+--
+-- The value returned by @memoryTypeBits@ /must/ only include bits that
+-- identify memory types which are host visible.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getMemoryHostPointerPropertiesEXT'
+data MemoryHostPointerPropertiesEXT = MemoryHostPointerPropertiesEXT
+  { -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
+    -- type which the specified host pointer /can/ be imported as.
+    memoryTypeBits :: Word32 }
+  deriving (Typeable)
+deriving instance Show MemoryHostPointerPropertiesEXT
+
+instance ToCStruct MemoryHostPointerPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryHostPointerPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (memoryTypeBits)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct MemoryHostPointerPropertiesEXT where
+  peekCStruct p = do
+    memoryTypeBits <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ MemoryHostPointerPropertiesEXT
+             memoryTypeBits
+
+instance Storable MemoryHostPointerPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryHostPointerPropertiesEXT where
+  zero = MemoryHostPointerPropertiesEXT
+           zero
+
+
+-- | VkPhysicalDeviceExternalMemoryHostPropertiesEXT - Structure describing
+-- external memory host pointer limits that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceExternalMemoryHostPropertiesEXT'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceExternalMemoryHostPropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceExternalMemoryHostPropertiesEXT = PhysicalDeviceExternalMemoryHostPropertiesEXT
+  { -- | @minImportedHostPointerAlignment@ is the minimum /required/ alignment,
+    -- in bytes, for the base address and size of host pointers that /can/ be
+    -- imported to a Vulkan memory object.
+    minImportedHostPointerAlignment :: DeviceSize }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceExternalMemoryHostPropertiesEXT
+
+instance ToCStruct PhysicalDeviceExternalMemoryHostPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceExternalMemoryHostPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (minImportedHostPointerAlignment)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceExternalMemoryHostPropertiesEXT where
+  peekCStruct p = do
+    minImportedHostPointerAlignment <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    pure $ PhysicalDeviceExternalMemoryHostPropertiesEXT
+             minImportedHostPointerAlignment
+
+instance Storable PhysicalDeviceExternalMemoryHostPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceExternalMemoryHostPropertiesEXT where
+  zero = PhysicalDeviceExternalMemoryHostPropertiesEXT
+           zero
+
+
+type EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION"
+pattern EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION = 1
+
+
+type EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME = "VK_EXT_external_memory_host"
+
+-- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME"
+pattern EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME = "VK_EXT_external_memory_host"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs-boot b/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_external_memory_host.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_external_memory_host  ( ImportMemoryHostPointerInfoEXT
+                                                      , MemoryHostPointerPropertiesEXT
+                                                      , PhysicalDeviceExternalMemoryHostPropertiesEXT
+                                                      ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ImportMemoryHostPointerInfoEXT
+
+instance ToCStruct ImportMemoryHostPointerInfoEXT
+instance Show ImportMemoryHostPointerInfoEXT
+
+instance FromCStruct ImportMemoryHostPointerInfoEXT
+
+
+data MemoryHostPointerPropertiesEXT
+
+instance ToCStruct MemoryHostPointerPropertiesEXT
+instance Show MemoryHostPointerPropertiesEXT
+
+instance FromCStruct MemoryHostPointerPropertiesEXT
+
+
+data PhysicalDeviceExternalMemoryHostPropertiesEXT
+
+instance ToCStruct PhysicalDeviceExternalMemoryHostPropertiesEXT
+instance Show PhysicalDeviceExternalMemoryHostPropertiesEXT
+
+instance FromCStruct PhysicalDeviceExternalMemoryHostPropertiesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_filter_cubic.hs b/src/Vulkan/Extensions/VK_EXT_filter_cubic.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_filter_cubic.hs
@@ -0,0 +1,178 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_filter_cubic  ( pattern FILTER_CUBIC_EXT
+                                              , pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
+                                              , PhysicalDeviceImageViewImageFormatInfoEXT(..)
+                                              , FilterCubicImageViewImageFormatPropertiesEXT(..)
+                                              , EXT_FILTER_CUBIC_SPEC_VERSION
+                                              , pattern EXT_FILTER_CUBIC_SPEC_VERSION
+                                              , EXT_FILTER_CUBIC_EXTENSION_NAME
+                                              , pattern EXT_FILTER_CUBIC_EXTENSION_NAME
+                                              ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageViewType (ImageViewType)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.Filter (Filter(FILTER_CUBIC_IMG))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT))
+-- No documentation found for TopLevel "VK_FILTER_CUBIC_EXT"
+pattern FILTER_CUBIC_EXT = FILTER_CUBIC_IMG
+
+
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT"
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
+
+
+-- | VkPhysicalDeviceImageViewImageFormatInfoEXT - Structure for providing
+-- image view type
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceImageViewImageFormatInfoEXT = PhysicalDeviceImageViewImageFormatInfoEXT
+  { -- | @imageViewType@ /must/ be a valid
+    -- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' value
+    imageViewType :: ImageViewType }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceImageViewImageFormatInfoEXT
+
+instance ToCStruct PhysicalDeviceImageViewImageFormatInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceImageViewImageFormatInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageViewType)) (imageViewType)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageViewType)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceImageViewImageFormatInfoEXT where
+  peekCStruct p = do
+    imageViewType <- peek @ImageViewType ((p `plusPtr` 16 :: Ptr ImageViewType))
+    pure $ PhysicalDeviceImageViewImageFormatInfoEXT
+             imageViewType
+
+instance Storable PhysicalDeviceImageViewImageFormatInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceImageViewImageFormatInfoEXT where
+  zero = PhysicalDeviceImageViewImageFormatInfoEXT
+           zero
+
+
+-- | VkFilterCubicImageViewImageFormatPropertiesEXT - Structure for querying
+-- cubic filtering capabilities of an image view type
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT'
+--
+-- == Valid Usage
+--
+-- -   If the @pNext@ chain of the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2'
+--     structure includes a 'FilterCubicImageViewImageFormatPropertiesEXT'
+--     structure, the @pNext@ chain of the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
+--     structure /must/ include a
+--     'PhysicalDeviceImageViewImageFormatInfoEXT' structure with an
+--     @imageViewType@ that is compatible with @imageType@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data FilterCubicImageViewImageFormatPropertiesEXT = FilterCubicImageViewImageFormatPropertiesEXT
+  { -- | @filterCubic@ tells if image format, image type and image view type
+    -- /can/ be used with cubic filtering. This field is set by the
+    -- implementation. User-specified value is ignored.
+    filterCubic :: Bool
+  , -- | @filterCubicMinmax@ tells if image format, image type and image view
+    -- type /can/ be used with cubic filtering and minmax filtering. This field
+    -- is set by the implementation. User-specified value is ignored.
+    filterCubicMinmax :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show FilterCubicImageViewImageFormatPropertiesEXT
+
+instance ToCStruct FilterCubicImageViewImageFormatPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p FilterCubicImageViewImageFormatPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (filterCubic))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (filterCubicMinmax))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct FilterCubicImageViewImageFormatPropertiesEXT where
+  peekCStruct p = do
+    filterCubic <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    filterCubicMinmax <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ FilterCubicImageViewImageFormatPropertiesEXT
+             (bool32ToBool filterCubic) (bool32ToBool filterCubicMinmax)
+
+instance Storable FilterCubicImageViewImageFormatPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero FilterCubicImageViewImageFormatPropertiesEXT where
+  zero = FilterCubicImageViewImageFormatPropertiesEXT
+           zero
+           zero
+
+
+type EXT_FILTER_CUBIC_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_EXT_FILTER_CUBIC_SPEC_VERSION"
+pattern EXT_FILTER_CUBIC_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_FILTER_CUBIC_SPEC_VERSION = 3
+
+
+type EXT_FILTER_CUBIC_EXTENSION_NAME = "VK_EXT_filter_cubic"
+
+-- No documentation found for TopLevel "VK_EXT_FILTER_CUBIC_EXTENSION_NAME"
+pattern EXT_FILTER_CUBIC_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_FILTER_CUBIC_EXTENSION_NAME = "VK_EXT_filter_cubic"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_filter_cubic.hs-boot b/src/Vulkan/Extensions/VK_EXT_filter_cubic.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_filter_cubic.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_filter_cubic  ( FilterCubicImageViewImageFormatPropertiesEXT
+                                              , PhysicalDeviceImageViewImageFormatInfoEXT
+                                              ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data FilterCubicImageViewImageFormatPropertiesEXT
+
+instance ToCStruct FilterCubicImageViewImageFormatPropertiesEXT
+instance Show FilterCubicImageViewImageFormatPropertiesEXT
+
+instance FromCStruct FilterCubicImageViewImageFormatPropertiesEXT
+
+
+data PhysicalDeviceImageViewImageFormatInfoEXT
+
+instance ToCStruct PhysicalDeviceImageViewImageFormatInfoEXT
+instance Show PhysicalDeviceImageViewImageFormatInfoEXT
+
+instance FromCStruct PhysicalDeviceImageViewImageFormatInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_fragment_density_map.hs b/src/Vulkan/Extensions/VK_EXT_fragment_density_map.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_fragment_density_map.hs
@@ -0,0 +1,310 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_fragment_density_map  ( PhysicalDeviceFragmentDensityMapFeaturesEXT(..)
+                                                      , PhysicalDeviceFragmentDensityMapPropertiesEXT(..)
+                                                      , RenderPassFragmentDensityMapCreateInfoEXT(..)
+                                                      , EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION
+                                                      , pattern EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION
+                                                      , EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME
+                                                      , pattern EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME
+                                                      ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.Pass (AttachmentReference)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.SharedTypes (Extent2D)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT))
+-- | VkPhysicalDeviceFragmentDensityMapFeaturesEXT - Structure describing
+-- fragment density map features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceFragmentDensityMapFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceFragmentDensityMapFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceFragmentDensityMapFeaturesEXT' /can/ also be included in
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceFragmentDensityMapFeaturesEXT = PhysicalDeviceFragmentDensityMapFeaturesEXT
+  { -- | @fragmentDensityMap@ specifies whether the implementation supports
+    -- render passes with a fragment density map attachment. If this feature is
+    -- not enabled and the @pNext@ chain of
+    -- 'Vulkan.Core10.Pass.RenderPassCreateInfo' includes a
+    -- 'RenderPassFragmentDensityMapCreateInfoEXT' structure,
+    -- @fragmentDensityMapAttachment@ /must/ be
+    -- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'.
+    fragmentDensityMap :: Bool
+  , -- | @fragmentDensityMapDynamic@ specifies whether the implementation
+    -- supports dynamic fragment density map image views. If this feature is
+    -- not enabled,
+    -- 'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT'
+    -- /must/ not be included in
+    -- 'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@flags@.
+    fragmentDensityMapDynamic :: Bool
+  , -- | @fragmentDensityMapNonSubsampledImages@ specifies whether the
+    -- implementation supports regular non-subsampled image attachments with
+    -- fragment density map render passes. If this feature is not enabled,
+    -- render passes with a
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>
+    -- /must/ only have
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-subsamplesampler subsampled attachments>
+    -- bound.
+    fragmentDensityMapNonSubsampledImages :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceFragmentDensityMapFeaturesEXT
+
+instance ToCStruct PhysicalDeviceFragmentDensityMapFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceFragmentDensityMapFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (fragmentDensityMap))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (fragmentDensityMapDynamic))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (fragmentDensityMapNonSubsampledImages))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceFragmentDensityMapFeaturesEXT where
+  peekCStruct p = do
+    fragmentDensityMap <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    fragmentDensityMapDynamic <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    fragmentDensityMapNonSubsampledImages <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PhysicalDeviceFragmentDensityMapFeaturesEXT
+             (bool32ToBool fragmentDensityMap) (bool32ToBool fragmentDensityMapDynamic) (bool32ToBool fragmentDensityMapNonSubsampledImages)
+
+instance Storable PhysicalDeviceFragmentDensityMapFeaturesEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceFragmentDensityMapFeaturesEXT where
+  zero = PhysicalDeviceFragmentDensityMapFeaturesEXT
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceFragmentDensityMapPropertiesEXT - Structure describing
+-- fragment density map properties that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceFragmentDensityMapPropertiesEXT'
+-- structure describe the following implementation-dependent limits:
+--
+-- == Valid Usage (Implicit)
+--
+-- If the 'PhysicalDeviceFragmentDensityMapPropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits and properties.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceFragmentDensityMapPropertiesEXT = PhysicalDeviceFragmentDensityMapPropertiesEXT
+  { -- | @minFragmentDensityTexelSize@ is the minimum
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-fragment-density-texel-size fragment density texel size>.
+    minFragmentDensityTexelSize :: Extent2D
+  , -- | @maxFragmentDensityTexelSize@ is the maximum fragment density texel
+    -- size.
+    maxFragmentDensityTexelSize :: Extent2D
+  , -- | @fragmentDensityInvocations@ specifies whether the implementation /may/
+    -- invoke additional fragment shader invocations for each covered sample.
+    fragmentDensityInvocations :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceFragmentDensityMapPropertiesEXT
+
+instance ToCStruct PhysicalDeviceFragmentDensityMapPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceFragmentDensityMapPropertiesEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (minFragmentDensityTexelSize) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (maxFragmentDensityTexelSize) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (fragmentDensityInvocations))
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance FromCStruct PhysicalDeviceFragmentDensityMapPropertiesEXT where
+  peekCStruct p = do
+    minFragmentDensityTexelSize <- peekCStruct @Extent2D ((p `plusPtr` 16 :: Ptr Extent2D))
+    maxFragmentDensityTexelSize <- peekCStruct @Extent2D ((p `plusPtr` 24 :: Ptr Extent2D))
+    fragmentDensityInvocations <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    pure $ PhysicalDeviceFragmentDensityMapPropertiesEXT
+             minFragmentDensityTexelSize maxFragmentDensityTexelSize (bool32ToBool fragmentDensityInvocations)
+
+instance Zero PhysicalDeviceFragmentDensityMapPropertiesEXT where
+  zero = PhysicalDeviceFragmentDensityMapPropertiesEXT
+           zero
+           zero
+           zero
+
+
+-- | VkRenderPassFragmentDensityMapCreateInfoEXT - Structure containing
+-- fragment density map attachment for render pass
+--
+-- = Description
+--
+-- The fragment density map attachment is read at an
+-- implementation-dependent time either by the host during
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass' if the
+-- attachment’s image view was not created with @flags@ containing
+-- 'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT',
+-- or by the device when drawing commands in the renderpass execute
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'.
+--
+-- If this structure is not present, it is as if
+-- @fragmentDensityMapAttachment@ was given as
+-- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'.
+--
+-- == Valid Usage
+--
+-- -   If @fragmentDensityMapAttachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
+--     @fragmentDensityMapAttachment@ /must/ be less than
+--     'Vulkan.Core10.Pass.RenderPassCreateInfo'::@attachmentCount@
+--
+-- -   If @fragmentDensityMapAttachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
+--     @fragmentDensityMapAttachment@ /must/ not be an element of
+--     'Vulkan.Core10.Pass.SubpassDescription'::@pInputAttachments@,
+--     'Vulkan.Core10.Pass.SubpassDescription'::@pColorAttachments@,
+--     'Vulkan.Core10.Pass.SubpassDescription'::@pResolveAttachments@,
+--     'Vulkan.Core10.Pass.SubpassDescription'::@pDepthStencilAttachment@,
+--     or 'Vulkan.Core10.Pass.SubpassDescription'::@pPreserveAttachments@
+--     for any subpass
+--
+-- -   If @fragmentDensityMapAttachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@ /must/ be
+--     equal to
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT',
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- -   If @fragmentDensityMapAttachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
+--     @fragmentDensityMapAttachment@ /must/ reference an attachment with a
+--     @loadOp@ equal to
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_LOAD' or
+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_DONT_CARE'
+--
+-- -   If @fragmentDensityMapAttachment@ is not
+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED',
+--     @fragmentDensityMapAttachment@ /must/ reference an attachment with a
+--     @storeOp@ equal to
+--     'Vulkan.Core10.Enums.AttachmentStoreOp.ATTACHMENT_STORE_OP_DONT_CARE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT'
+--
+-- -   @fragmentDensityMapAttachment@ /must/ be a valid
+--     'Vulkan.Core10.Pass.AttachmentReference' structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pass.AttachmentReference',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data RenderPassFragmentDensityMapCreateInfoEXT = RenderPassFragmentDensityMapCreateInfoEXT
+  { -- | @fragmentDensityMapAttachment@ is the fragment density map to use for
+    -- the render pass.
+    fragmentDensityMapAttachment :: AttachmentReference }
+  deriving (Typeable)
+deriving instance Show RenderPassFragmentDensityMapCreateInfoEXT
+
+instance ToCStruct RenderPassFragmentDensityMapCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RenderPassFragmentDensityMapCreateInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr AttachmentReference)) (fragmentDensityMapAttachment) . ($ ())
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr AttachmentReference)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct RenderPassFragmentDensityMapCreateInfoEXT where
+  peekCStruct p = do
+    fragmentDensityMapAttachment <- peekCStruct @AttachmentReference ((p `plusPtr` 16 :: Ptr AttachmentReference))
+    pure $ RenderPassFragmentDensityMapCreateInfoEXT
+             fragmentDensityMapAttachment
+
+instance Zero RenderPassFragmentDensityMapCreateInfoEXT where
+  zero = RenderPassFragmentDensityMapCreateInfoEXT
+           zero
+
+
+type EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION"
+pattern EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION = 1
+
+
+type EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME = "VK_EXT_fragment_density_map"
+
+-- No documentation found for TopLevel "VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME"
+pattern EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME = "VK_EXT_fragment_density_map"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_fragment_density_map.hs-boot b/src/Vulkan/Extensions/VK_EXT_fragment_density_map.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_fragment_density_map.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_fragment_density_map  ( PhysicalDeviceFragmentDensityMapFeaturesEXT
+                                                      , PhysicalDeviceFragmentDensityMapPropertiesEXT
+                                                      , RenderPassFragmentDensityMapCreateInfoEXT
+                                                      ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceFragmentDensityMapFeaturesEXT
+
+instance ToCStruct PhysicalDeviceFragmentDensityMapFeaturesEXT
+instance Show PhysicalDeviceFragmentDensityMapFeaturesEXT
+
+instance FromCStruct PhysicalDeviceFragmentDensityMapFeaturesEXT
+
+
+data PhysicalDeviceFragmentDensityMapPropertiesEXT
+
+instance ToCStruct PhysicalDeviceFragmentDensityMapPropertiesEXT
+instance Show PhysicalDeviceFragmentDensityMapPropertiesEXT
+
+instance FromCStruct PhysicalDeviceFragmentDensityMapPropertiesEXT
+
+
+data RenderPassFragmentDensityMapCreateInfoEXT
+
+instance ToCStruct RenderPassFragmentDensityMapCreateInfoEXT
+instance Show RenderPassFragmentDensityMapCreateInfoEXT
+
+instance FromCStruct RenderPassFragmentDensityMapCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs b/src/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs
@@ -0,0 +1,121 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_fragment_shader_interlock  ( PhysicalDeviceFragmentShaderInterlockFeaturesEXT(..)
+                                                           , EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION
+                                                           , pattern EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION
+                                                           , EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME
+                                                           , pattern EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME
+                                                           ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT))
+-- | VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT - Structure
+-- describing fragment shader interlock features that can be supported by
+-- an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceFragmentShaderInterlockFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceFragmentShaderInterlockFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceFragmentShaderInterlockFeaturesEXT' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceFragmentShaderInterlockFeaturesEXT = PhysicalDeviceFragmentShaderInterlockFeaturesEXT
+  { -- | @fragmentShaderSampleInterlock@ indicates that the implementation
+    -- supports the @FragmentShaderSampleInterlockEXT@ SPIR-V capability.
+    fragmentShaderSampleInterlock :: Bool
+  , -- | @fragmentShaderPixelInterlock@ indicates that the implementation
+    -- supports the @FragmentShaderPixelInterlockEXT@ SPIR-V capability.
+    fragmentShaderPixelInterlock :: Bool
+  , -- | @fragmentShaderShadingRateInterlock@ indicates that the implementation
+    -- supports the @FragmentShaderShadingRateInterlockEXT@ SPIR-V capability.
+    fragmentShaderShadingRateInterlock :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceFragmentShaderInterlockFeaturesEXT
+
+instance ToCStruct PhysicalDeviceFragmentShaderInterlockFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceFragmentShaderInterlockFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (fragmentShaderSampleInterlock))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (fragmentShaderPixelInterlock))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (fragmentShaderShadingRateInterlock))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceFragmentShaderInterlockFeaturesEXT where
+  peekCStruct p = do
+    fragmentShaderSampleInterlock <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    fragmentShaderPixelInterlock <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    fragmentShaderShadingRateInterlock <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PhysicalDeviceFragmentShaderInterlockFeaturesEXT
+             (bool32ToBool fragmentShaderSampleInterlock) (bool32ToBool fragmentShaderPixelInterlock) (bool32ToBool fragmentShaderShadingRateInterlock)
+
+instance Storable PhysicalDeviceFragmentShaderInterlockFeaturesEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceFragmentShaderInterlockFeaturesEXT where
+  zero = PhysicalDeviceFragmentShaderInterlockFeaturesEXT
+           zero
+           zero
+           zero
+
+
+type EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION"
+pattern EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION = 1
+
+
+type EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME = "VK_EXT_fragment_shader_interlock"
+
+-- No documentation found for TopLevel "VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME"
+pattern EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME = "VK_EXT_fragment_shader_interlock"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs-boot b/src/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_fragment_shader_interlock  (PhysicalDeviceFragmentShaderInterlockFeaturesEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceFragmentShaderInterlockFeaturesEXT
+
+instance ToCStruct PhysicalDeviceFragmentShaderInterlockFeaturesEXT
+instance Show PhysicalDeviceFragmentShaderInterlockFeaturesEXT
+
+instance FromCStruct PhysicalDeviceFragmentShaderInterlockFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs b/src/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs
@@ -0,0 +1,640 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_full_screen_exclusive  ( getPhysicalDeviceSurfacePresentModes2EXT
+                                                       , getDeviceGroupSurfacePresentModes2EXT
+                                                       , acquireFullScreenExclusiveModeEXT
+                                                       , releaseFullScreenExclusiveModeEXT
+                                                       , SurfaceFullScreenExclusiveInfoEXT(..)
+                                                       , SurfaceFullScreenExclusiveWin32InfoEXT(..)
+                                                       , SurfaceCapabilitiesFullScreenExclusiveEXT(..)
+                                                       , FullScreenExclusiveEXT( FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT
+                                                                               , FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT
+                                                                               , FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT
+                                                                               , FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
+                                                                               , ..
+                                                                               )
+                                                       , EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION
+                                                       , pattern EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION
+                                                       , EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME
+                                                       , pattern EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME
+                                                       , SurfaceKHR(..)
+                                                       , SwapchainKHR(..)
+                                                       , PhysicalDeviceSurfaceInfo2KHR(..)
+                                                       , PresentModeKHR(..)
+                                                       , DeviceGroupPresentModeFlagBitsKHR(..)
+                                                       , DeviceGroupPresentModeFlagsKHR
+                                                       , HMONITOR
+                                                       ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkAcquireFullScreenExclusiveModeEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceGroupSurfacePresentModes2EXT))
+import Vulkan.Dynamic (DeviceCmds(pVkReleaseFullScreenExclusiveModeEXT))
+import Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagsKHR)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Extensions.WSITypes (HMONITOR)
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfacePresentModes2EXT))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (PhysicalDeviceSurfaceInfo2KHR)
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR)
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SwapchainKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagsKHR)
+import Vulkan.Extensions.WSITypes (HMONITOR)
+import Vulkan.Extensions.VK_KHR_get_surface_capabilities2 (PhysicalDeviceSurfaceInfo2KHR(..))
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR(..))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSurfacePresentModes2EXT
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr Word32 -> Ptr PresentModeKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr Word32 -> Ptr PresentModeKHR -> IO Result
+
+-- | vkGetPhysicalDeviceSurfacePresentModes2EXT - Query supported
+-- presentation modes
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @pSurfaceInfo@ is a pointer to a
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'
+--     structure describing the surface and other fixed parameters that
+--     would be consumed by
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @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
+--     'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' values, indicating
+--     the supported presentation modes.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceSurfacePresentModes2EXT' behaves similarly to
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR',
+-- with the ability to specify extended inputs via chained input
+-- structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'
+--     structure
+--
+-- -   @pPresentModeCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pPresentModeCount@ is not @0@, and
+--     @pPresentModes@ is not @NULL@, @pPresentModes@ /must/ be a valid
+--     pointer to an array of @pPresentModeCount@
+--     'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' values
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR'
+getPhysicalDeviceSurfacePresentModes2EXT :: forall a io . (Extendss PhysicalDeviceSurfaceInfo2KHR a, PokeChain a, MonadIO io) => PhysicalDevice -> PhysicalDeviceSurfaceInfo2KHR a -> io (Result, ("presentModes" ::: Vector PresentModeKHR))
+getPhysicalDeviceSurfacePresentModes2EXT physicalDevice surfaceInfo = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSurfacePresentModes2EXTPtr = pVkGetPhysicalDeviceSurfacePresentModes2EXT (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSurfacePresentModes2EXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSurfacePresentModes2EXT is null" Nothing Nothing
+  let vkGetPhysicalDeviceSurfacePresentModes2EXT' = mkVkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXTPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pSurfaceInfo <- ContT $ withCStruct (surfaceInfo)
+  pPPresentModeCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceSurfacePresentModes2EXT' physicalDevice' pSurfaceInfo (pPPresentModeCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPresentModeCount <- lift $ peek @Word32 pPPresentModeCount
+  pPPresentModes <- ContT $ bracket (callocBytes @PresentModeKHR ((fromIntegral (pPresentModeCount)) * 4)) free
+  r' <- lift $ vkGetPhysicalDeviceSurfacePresentModes2EXT' physicalDevice' pSurfaceInfo (pPPresentModeCount) (pPPresentModes)
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPresentModeCount' <- lift $ peek @Word32 pPPresentModeCount
+  pPresentModes' <- lift $ generateM (fromIntegral (pPresentModeCount')) (\i -> peek @PresentModeKHR ((pPPresentModes `advancePtrBytes` (4 * (i)) :: Ptr PresentModeKHR)))
+  pure $ ((r'), pPresentModes')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceGroupSurfacePresentModes2EXT
+  :: FunPtr (Ptr Device_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr DeviceGroupPresentModeFlagsKHR -> IO Result) -> Ptr Device_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr DeviceGroupPresentModeFlagsKHR -> IO Result
+
+-- | vkGetDeviceGroupSurfacePresentModes2EXT - Query device group present
+-- capabilities for a surface
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device.
+--
+-- -   @pSurfaceInfo@ is a pointer to a
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'
+--     structure describing the surface and other fixed parameters that
+--     would be consumed by
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @pModes@ is a pointer to a
+--     'Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupPresentModeFlagsKHR'
+--     in which the supported device group present modes for the surface
+--     are returned.
+--
+-- = Description
+--
+-- 'getDeviceGroupSurfacePresentModes2EXT' behaves similarly to
+-- 'Vulkan.Extensions.VK_KHR_swapchain.getDeviceGroupSurfacePresentModesKHR',
+-- with the ability to specify extended inputs via chained input
+-- structures.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.DeviceGroupPresentModeFlagsKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'
+getDeviceGroupSurfacePresentModes2EXT :: forall a io . (Extendss PhysicalDeviceSurfaceInfo2KHR a, PokeChain a, MonadIO io) => Device -> PhysicalDeviceSurfaceInfo2KHR a -> io (("modes" ::: DeviceGroupPresentModeFlagsKHR))
+getDeviceGroupSurfacePresentModes2EXT device surfaceInfo = liftIO . evalContT $ do
+  let vkGetDeviceGroupSurfacePresentModes2EXTPtr = pVkGetDeviceGroupSurfacePresentModes2EXT (deviceCmds (device :: Device))
+  lift $ unless (vkGetDeviceGroupSurfacePresentModes2EXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceGroupSurfacePresentModes2EXT is null" Nothing Nothing
+  let vkGetDeviceGroupSurfacePresentModes2EXT' = mkVkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXTPtr
+  pSurfaceInfo <- ContT $ withCStruct (surfaceInfo)
+  pPModes <- ContT $ bracket (callocBytes @DeviceGroupPresentModeFlagsKHR 4) free
+  r <- lift $ vkGetDeviceGroupSurfacePresentModes2EXT' (deviceHandle (device)) pSurfaceInfo (pPModes)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pModes <- lift $ peek @DeviceGroupPresentModeFlagsKHR pPModes
+  pure $ (pModes)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkAcquireFullScreenExclusiveModeEXT
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result) -> Ptr Device_T -> SwapchainKHR -> IO Result
+
+-- | vkAcquireFullScreenExclusiveModeEXT - Acquire full-screen exclusive mode
+-- for a swapchain
+--
+-- = Parameters
+--
+-- -   @device@ is the device associated with @swapchain@.
+--
+-- -   @swapchain@ is the swapchain to acquire exclusive full-screen access
+--     for.
+--
+-- == Valid Usage
+--
+-- -   @swapchain@ /must/ not be in the retired state
+--
+-- -   @swapchain@ /must/ be a swapchain created with a
+--     'SurfaceFullScreenExclusiveInfoEXT' structure, with
+--     @fullScreenExclusive@ set to
+--     'FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT'
+--
+-- -   @swapchain@ /must/ not currently have exclusive full-screen access
+--
+-- A return value of 'Vulkan.Core10.Enums.Result.SUCCESS' indicates that
+-- the @swapchain@ successfully acquired exclusive full-screen access. The
+-- swapchain will retain this exclusivity until either the application
+-- releases exclusive full-screen access with
+-- 'releaseFullScreenExclusiveModeEXT', destroys the swapchain, or if any
+-- of the swapchain commands return
+-- 'Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
+-- indicating that the mode was lost because of platform-specific changes.
+--
+-- If the swapchain was unable to acquire exclusive full-screen access to
+-- the display then
+-- 'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED' is returned. An
+-- application /can/ attempt to acquire exclusive full-screen access again
+-- for the same swapchain even if this command fails, or if
+-- 'Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
+-- has been returned by a swapchain command.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Extensions.Handles.SwapchainKHR'
+acquireFullScreenExclusiveModeEXT :: forall io . MonadIO io => Device -> SwapchainKHR -> io ()
+acquireFullScreenExclusiveModeEXT device swapchain = liftIO $ do
+  let vkAcquireFullScreenExclusiveModeEXTPtr = pVkAcquireFullScreenExclusiveModeEXT (deviceCmds (device :: Device))
+  unless (vkAcquireFullScreenExclusiveModeEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAcquireFullScreenExclusiveModeEXT is null" Nothing Nothing
+  let vkAcquireFullScreenExclusiveModeEXT' = mkVkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXTPtr
+  r <- vkAcquireFullScreenExclusiveModeEXT' (deviceHandle (device)) (swapchain)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkReleaseFullScreenExclusiveModeEXT
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result) -> Ptr Device_T -> SwapchainKHR -> IO Result
+
+-- | vkReleaseFullScreenExclusiveModeEXT - Release full-screen exclusive mode
+-- from a swapchain
+--
+-- = Parameters
+--
+-- -   @device@ is the device associated with @swapchain@.
+--
+-- -   @swapchain@ is the swapchain to release exclusive full-screen access
+--     from.
+--
+-- = Description
+--
+-- Note
+--
+-- Applications will not be able to present to @swapchain@ after this call
+-- until exclusive full-screen access is reacquired. This is usually useful
+-- to handle when an application is minimised or otherwise intends to stop
+-- presenting for a time.
+--
+-- == Valid Usage
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Extensions.Handles.SwapchainKHR'
+releaseFullScreenExclusiveModeEXT :: forall io . MonadIO io => Device -> SwapchainKHR -> io ()
+releaseFullScreenExclusiveModeEXT device swapchain = liftIO $ do
+  let vkReleaseFullScreenExclusiveModeEXTPtr = pVkReleaseFullScreenExclusiveModeEXT (deviceCmds (device :: Device))
+  unless (vkReleaseFullScreenExclusiveModeEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkReleaseFullScreenExclusiveModeEXT is null" Nothing Nothing
+  let vkReleaseFullScreenExclusiveModeEXT' = mkVkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXTPtr
+  r <- vkReleaseFullScreenExclusiveModeEXT' (deviceHandle (device)) (swapchain)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkSurfaceFullScreenExclusiveInfoEXT - Structure specifying the preferred
+-- full-screen transition behavior
+--
+-- = Description
+--
+-- If this structure is not present, @fullScreenExclusive@ is considered to
+-- be 'FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'FullScreenExclusiveEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SurfaceFullScreenExclusiveInfoEXT = SurfaceFullScreenExclusiveInfoEXT
+  { -- | @fullScreenExclusive@ /must/ be a valid 'FullScreenExclusiveEXT' value
+    fullScreenExclusive :: FullScreenExclusiveEXT }
+  deriving (Typeable)
+deriving instance Show SurfaceFullScreenExclusiveInfoEXT
+
+instance ToCStruct SurfaceFullScreenExclusiveInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfaceFullScreenExclusiveInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr FullScreenExclusiveEXT)) (fullScreenExclusive)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr FullScreenExclusiveEXT)) (zero)
+    f
+
+instance FromCStruct SurfaceFullScreenExclusiveInfoEXT where
+  peekCStruct p = do
+    fullScreenExclusive <- peek @FullScreenExclusiveEXT ((p `plusPtr` 16 :: Ptr FullScreenExclusiveEXT))
+    pure $ SurfaceFullScreenExclusiveInfoEXT
+             fullScreenExclusive
+
+instance Storable SurfaceFullScreenExclusiveInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SurfaceFullScreenExclusiveInfoEXT where
+  zero = SurfaceFullScreenExclusiveInfoEXT
+           zero
+
+
+-- | VkSurfaceFullScreenExclusiveWin32InfoEXT - Structure specifying
+-- additional creation parameters specific to Win32 fullscreen exclusive
+-- mode
+--
+-- = Description
+--
+-- Note
+--
+-- If @hmonitor@ is invalidated (e.g. the monitor is unplugged) during the
+-- lifetime of a swapchain created with this structure, operations on that
+-- swapchain will return
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'.
+--
+-- Note
+--
+-- It is the responsibility of the application to change the display
+-- settings of the targeted Win32 display using the appropriate platform
+-- APIs. Such changes /may/ alter the surface capabilities reported for the
+-- created surface.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SurfaceFullScreenExclusiveWin32InfoEXT = SurfaceFullScreenExclusiveWin32InfoEXT
+  { -- | @hmonitor@ /must/ be a valid 'Vulkan.Extensions.WSITypes.HMONITOR'
+    hmonitor :: HMONITOR }
+  deriving (Typeable)
+deriving instance Show SurfaceFullScreenExclusiveWin32InfoEXT
+
+instance ToCStruct SurfaceFullScreenExclusiveWin32InfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfaceFullScreenExclusiveWin32InfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr HMONITOR)) (hmonitor)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr HMONITOR)) (zero)
+    f
+
+instance FromCStruct SurfaceFullScreenExclusiveWin32InfoEXT where
+  peekCStruct p = do
+    hmonitor <- peek @HMONITOR ((p `plusPtr` 16 :: Ptr HMONITOR))
+    pure $ SurfaceFullScreenExclusiveWin32InfoEXT
+             hmonitor
+
+instance Storable SurfaceFullScreenExclusiveWin32InfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SurfaceFullScreenExclusiveWin32InfoEXT where
+  zero = SurfaceFullScreenExclusiveWin32InfoEXT
+           zero
+
+
+-- | VkSurfaceCapabilitiesFullScreenExclusiveEXT - Structure describing full
+-- screen exclusive capabilities of a surface
+--
+-- = Description
+--
+-- This structure /can/ be included in the @pNext@ chain of
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR'
+-- to determine support for exclusive full-screen access. If
+-- @fullScreenExclusiveSupported@ is 'Vulkan.Core10.BaseType.FALSE', it
+-- indicates that exclusive full-screen access is not obtainable for this
+-- surface.
+--
+-- Applications /must/ not attempt to create swapchains with
+-- 'FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT' set if
+-- @fullScreenExclusiveSupported@ is 'Vulkan.Core10.BaseType.FALSE'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SurfaceCapabilitiesFullScreenExclusiveEXT = SurfaceCapabilitiesFullScreenExclusiveEXT
+  { -- No documentation found for Nested "VkSurfaceCapabilitiesFullScreenExclusiveEXT" "fullScreenExclusiveSupported"
+    fullScreenExclusiveSupported :: Bool }
+  deriving (Typeable)
+deriving instance Show SurfaceCapabilitiesFullScreenExclusiveEXT
+
+instance ToCStruct SurfaceCapabilitiesFullScreenExclusiveEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfaceCapabilitiesFullScreenExclusiveEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (fullScreenExclusiveSupported))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct SurfaceCapabilitiesFullScreenExclusiveEXT where
+  peekCStruct p = do
+    fullScreenExclusiveSupported <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ SurfaceCapabilitiesFullScreenExclusiveEXT
+             (bool32ToBool fullScreenExclusiveSupported)
+
+instance Storable SurfaceCapabilitiesFullScreenExclusiveEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SurfaceCapabilitiesFullScreenExclusiveEXT where
+  zero = SurfaceCapabilitiesFullScreenExclusiveEXT
+           zero
+
+
+-- | VkFullScreenExclusiveEXT - Hint values an application can specify
+-- affecting full-screen transition behavior
+--
+-- = See Also
+--
+-- 'SurfaceFullScreenExclusiveInfoEXT'
+newtype FullScreenExclusiveEXT = FullScreenExclusiveEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT' indicates the implementation
+-- /should/ determine the appropriate full-screen method by whatever means
+-- it deems appropriate.
+pattern FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = FullScreenExclusiveEXT 0
+-- | 'FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT' indicates the implementation /may/
+-- use full-screen exclusive mechanisms when available. Such mechanisms
+-- /may/ result in better performance and\/or the availability of different
+-- presentation capabilities, but /may/ require a more disruptive
+-- transition during swapchain initialization, first presentation and\/or
+-- destruction.
+pattern FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = FullScreenExclusiveEXT 1
+-- | 'FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT' indicates the implementation
+-- /should/ avoid using full-screen mechanisms which rely on disruptive
+-- transitions.
+pattern FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = FullScreenExclusiveEXT 2
+-- | 'FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT' indicates the
+-- application will manage full-screen exclusive mode by using the
+-- 'acquireFullScreenExclusiveModeEXT' and
+-- 'releaseFullScreenExclusiveModeEXT' commands.
+pattern FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = FullScreenExclusiveEXT 3
+{-# complete FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT,
+             FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT,
+             FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT,
+             FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT :: FullScreenExclusiveEXT #-}
+
+instance Show FullScreenExclusiveEXT where
+  showsPrec p = \case
+    FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT -> showString "FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT"
+    FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT -> showString "FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT"
+    FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT -> showString "FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT"
+    FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT -> showString "FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT"
+    FullScreenExclusiveEXT x -> showParen (p >= 11) (showString "FullScreenExclusiveEXT " . showsPrec 11 x)
+
+instance Read FullScreenExclusiveEXT where
+  readPrec = parens (choose [("FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT", pure FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT)
+                            , ("FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT", pure FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT)
+                            , ("FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT", pure FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT)
+                            , ("FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT", pure FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "FullScreenExclusiveEXT")
+                       v <- step readPrec
+                       pure (FullScreenExclusiveEXT v)))
+
+
+type EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION = 4
+
+-- No documentation found for TopLevel "VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION"
+pattern EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION = 4
+
+
+type EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME = "VK_EXT_full_screen_exclusive"
+
+-- No documentation found for TopLevel "VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME"
+pattern EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME = "VK_EXT_full_screen_exclusive"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs-boot b/src/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_full_screen_exclusive  ( SurfaceCapabilitiesFullScreenExclusiveEXT
+                                                       , SurfaceFullScreenExclusiveInfoEXT
+                                                       , SurfaceFullScreenExclusiveWin32InfoEXT
+                                                       ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data SurfaceCapabilitiesFullScreenExclusiveEXT
+
+instance ToCStruct SurfaceCapabilitiesFullScreenExclusiveEXT
+instance Show SurfaceCapabilitiesFullScreenExclusiveEXT
+
+instance FromCStruct SurfaceCapabilitiesFullScreenExclusiveEXT
+
+
+data SurfaceFullScreenExclusiveInfoEXT
+
+instance ToCStruct SurfaceFullScreenExclusiveInfoEXT
+instance Show SurfaceFullScreenExclusiveInfoEXT
+
+instance FromCStruct SurfaceFullScreenExclusiveInfoEXT
+
+
+data SurfaceFullScreenExclusiveWin32InfoEXT
+
+instance ToCStruct SurfaceFullScreenExclusiveWin32InfoEXT
+instance Show SurfaceFullScreenExclusiveWin32InfoEXT
+
+instance FromCStruct SurfaceFullScreenExclusiveWin32InfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_global_priority.hs b/src/Vulkan/Extensions/VK_EXT_global_priority.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_global_priority.hs
@@ -0,0 +1,161 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_global_priority  ( DeviceQueueGlobalPriorityCreateInfoEXT(..)
+                                                 , QueueGlobalPriorityEXT( QUEUE_GLOBAL_PRIORITY_LOW_EXT
+                                                                         , QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT
+                                                                         , QUEUE_GLOBAL_PRIORITY_HIGH_EXT
+                                                                         , QUEUE_GLOBAL_PRIORITY_REALTIME_EXT
+                                                                         , ..
+                                                                         )
+                                                 , EXT_GLOBAL_PRIORITY_SPEC_VERSION
+                                                 , pattern EXT_GLOBAL_PRIORITY_SPEC_VERSION
+                                                 , EXT_GLOBAL_PRIORITY_EXTENSION_NAME
+                                                 , pattern EXT_GLOBAL_PRIORITY_EXTENSION_NAME
+                                                 ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT))
+-- | VkDeviceQueueGlobalPriorityCreateInfoEXT - Specify a system wide
+-- priority
+--
+-- = Description
+--
+-- A queue created without specifying
+-- 'DeviceQueueGlobalPriorityCreateInfoEXT' will default to
+-- 'QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'QueueGlobalPriorityEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceQueueGlobalPriorityCreateInfoEXT = DeviceQueueGlobalPriorityCreateInfoEXT
+  { -- | @globalPriority@ /must/ be a valid 'QueueGlobalPriorityEXT' value
+    globalPriority :: QueueGlobalPriorityEXT }
+  deriving (Typeable)
+deriving instance Show DeviceQueueGlobalPriorityCreateInfoEXT
+
+instance ToCStruct DeviceQueueGlobalPriorityCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceQueueGlobalPriorityCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr QueueGlobalPriorityEXT)) (globalPriority)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr QueueGlobalPriorityEXT)) (zero)
+    f
+
+instance FromCStruct DeviceQueueGlobalPriorityCreateInfoEXT where
+  peekCStruct p = do
+    globalPriority <- peek @QueueGlobalPriorityEXT ((p `plusPtr` 16 :: Ptr QueueGlobalPriorityEXT))
+    pure $ DeviceQueueGlobalPriorityCreateInfoEXT
+             globalPriority
+
+instance Storable DeviceQueueGlobalPriorityCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceQueueGlobalPriorityCreateInfoEXT where
+  zero = DeviceQueueGlobalPriorityCreateInfoEXT
+           zero
+
+
+-- | VkQueueGlobalPriorityEXT - Values specifying a system-wide queue
+-- priority
+--
+-- = Description
+--
+-- Priority values are sorted in ascending order. A comparison operation on
+-- the enum values can be used to determine the priority order.
+--
+-- = See Also
+--
+-- 'DeviceQueueGlobalPriorityCreateInfoEXT'
+newtype QueueGlobalPriorityEXT = QueueGlobalPriorityEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+-- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
+
+-- | 'QUEUE_GLOBAL_PRIORITY_LOW_EXT' is below the system default. Useful for
+-- non-interactive tasks.
+pattern QUEUE_GLOBAL_PRIORITY_LOW_EXT = QueueGlobalPriorityEXT 128
+-- | 'QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT' is the system default priority.
+pattern QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = QueueGlobalPriorityEXT 256
+-- | 'QUEUE_GLOBAL_PRIORITY_HIGH_EXT' is above the system default.
+pattern QUEUE_GLOBAL_PRIORITY_HIGH_EXT = QueueGlobalPriorityEXT 512
+-- | 'QUEUE_GLOBAL_PRIORITY_REALTIME_EXT' is the highest priority. Useful for
+-- critical tasks.
+pattern QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = QueueGlobalPriorityEXT 1024
+{-# complete QUEUE_GLOBAL_PRIORITY_LOW_EXT,
+             QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT,
+             QUEUE_GLOBAL_PRIORITY_HIGH_EXT,
+             QUEUE_GLOBAL_PRIORITY_REALTIME_EXT :: QueueGlobalPriorityEXT #-}
+
+instance Show QueueGlobalPriorityEXT where
+  showsPrec p = \case
+    QUEUE_GLOBAL_PRIORITY_LOW_EXT -> showString "QUEUE_GLOBAL_PRIORITY_LOW_EXT"
+    QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT -> showString "QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT"
+    QUEUE_GLOBAL_PRIORITY_HIGH_EXT -> showString "QUEUE_GLOBAL_PRIORITY_HIGH_EXT"
+    QUEUE_GLOBAL_PRIORITY_REALTIME_EXT -> showString "QUEUE_GLOBAL_PRIORITY_REALTIME_EXT"
+    QueueGlobalPriorityEXT x -> showParen (p >= 11) (showString "QueueGlobalPriorityEXT " . showsPrec 11 x)
+
+instance Read QueueGlobalPriorityEXT where
+  readPrec = parens (choose [("QUEUE_GLOBAL_PRIORITY_LOW_EXT", pure QUEUE_GLOBAL_PRIORITY_LOW_EXT)
+                            , ("QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT", pure QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT)
+                            , ("QUEUE_GLOBAL_PRIORITY_HIGH_EXT", pure QUEUE_GLOBAL_PRIORITY_HIGH_EXT)
+                            , ("QUEUE_GLOBAL_PRIORITY_REALTIME_EXT", pure QUEUE_GLOBAL_PRIORITY_REALTIME_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "QueueGlobalPriorityEXT")
+                       v <- step readPrec
+                       pure (QueueGlobalPriorityEXT v)))
+
+
+type EXT_GLOBAL_PRIORITY_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION"
+pattern EXT_GLOBAL_PRIORITY_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_GLOBAL_PRIORITY_SPEC_VERSION = 2
+
+
+type EXT_GLOBAL_PRIORITY_EXTENSION_NAME = "VK_EXT_global_priority"
+
+-- No documentation found for TopLevel "VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME"
+pattern EXT_GLOBAL_PRIORITY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_GLOBAL_PRIORITY_EXTENSION_NAME = "VK_EXT_global_priority"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_global_priority.hs-boot b/src/Vulkan/Extensions/VK_EXT_global_priority.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_global_priority.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_global_priority  (DeviceQueueGlobalPriorityCreateInfoEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DeviceQueueGlobalPriorityCreateInfoEXT
+
+instance ToCStruct DeviceQueueGlobalPriorityCreateInfoEXT
+instance Show DeviceQueueGlobalPriorityCreateInfoEXT
+
+instance FromCStruct DeviceQueueGlobalPriorityCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs b/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
@@ -0,0 +1,265 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_hdr_metadata  ( setHdrMetadataEXT
+                                              , XYColorEXT(..)
+                                              , HdrMetadataEXT(..)
+                                              , EXT_HDR_METADATA_SPEC_VERSION
+                                              , pattern EXT_HDR_METADATA_SPEC_VERSION
+                                              , EXT_HDR_METADATA_EXTENSION_NAME
+                                              , pattern EXT_HDR_METADATA_EXTENSION_NAME
+                                              , SwapchainKHR(..)
+                                              ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkSetHdrMetadataEXT))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SwapchainKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_HDR_METADATA_EXT))
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkSetHdrMetadataEXT
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr SwapchainKHR -> Ptr HdrMetadataEXT -> IO ()) -> Ptr Device_T -> Word32 -> Ptr SwapchainKHR -> Ptr HdrMetadataEXT -> IO ()
+
+-- | vkSetHdrMetadataEXT - function to set Hdr metadata
+--
+-- = 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 an array of @swapchainCount@
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handles.
+--
+-- -   @pMetadata@ is a pointer to an array of @swapchainCount@
+--     'HdrMetadataEXT' structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pSwapchains@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ valid 'Vulkan.Extensions.Handles.SwapchainKHR'
+--     handles
+--
+-- -   @pMetadata@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ valid 'HdrMetadataEXT' 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
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'HdrMetadataEXT',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+setHdrMetadataEXT :: forall io . MonadIO io => Device -> ("swapchains" ::: Vector SwapchainKHR) -> ("metadata" ::: Vector HdrMetadataEXT) -> io ()
+setHdrMetadataEXT device swapchains metadata = liftIO . evalContT $ do
+  let vkSetHdrMetadataEXTPtr = pVkSetHdrMetadataEXT (deviceCmds (device :: Device))
+  lift $ unless (vkSetHdrMetadataEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkSetHdrMetadataEXT is null" Nothing Nothing
+  let vkSetHdrMetadataEXT' = mkVkSetHdrMetadataEXT vkSetHdrMetadataEXTPtr
+  let pSwapchainsLength = Data.Vector.length $ (swapchains)
+  lift $ unless ((Data.Vector.length $ (metadata)) == pSwapchainsLength) $
+    throwIO $ IOError Nothing InvalidArgument "" "pMetadata and pSwapchains must have the same length" Nothing Nothing
+  pPSwapchains <- ContT $ allocaBytesAligned @SwapchainKHR ((Data.Vector.length (swapchains)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPSwapchains `plusPtr` (8 * (i)) :: Ptr SwapchainKHR) (e)) (swapchains)
+  pPMetadata <- ContT $ allocaBytesAligned @HdrMetadataEXT ((Data.Vector.length (metadata)) * 64) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMetadata `plusPtr` (64 * (i)) :: Ptr HdrMetadataEXT) (e) . ($ ())) (metadata)
+  lift $ vkSetHdrMetadataEXT' (deviceHandle (device)) ((fromIntegral pSwapchainsLength :: Word32)) (pPSwapchains) (pPMetadata)
+  pure $ ()
+
+
+-- | VkXYColorEXT - structure to specify X,Y chromaticity coordinates
+--
+-- = See Also
+--
+-- 'HdrMetadataEXT'
+data XYColorEXT = XYColorEXT
+  { -- No documentation found for Nested "VkXYColorEXT" "x"
+    x :: Float
+  , -- No documentation found for Nested "VkXYColorEXT" "y"
+    y :: Float
+  }
+  deriving (Typeable)
+deriving instance Show XYColorEXT
+
+instance ToCStruct XYColorEXT where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p XYColorEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (x))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (y))
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
+    f
+
+instance FromCStruct XYColorEXT where
+  peekCStruct p = do
+    x <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
+    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
+    pure $ XYColorEXT
+             ((\(CFloat a) -> a) x) ((\(CFloat a) -> a) y)
+
+instance Storable XYColorEXT where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero XYColorEXT where
+  zero = XYColorEXT
+           zero
+           zero
+
+
+-- | VkHdrMetadataEXT - structure to specify Hdr metadata
+--
+-- == Valid Usage (Implicit)
+--
+-- Note
+--
+-- The validity and use of this data is outside the scope of Vulkan.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'XYColorEXT',
+-- 'setHdrMetadataEXT'
+data HdrMetadataEXT = HdrMetadataEXT
+  { -- | @displayPrimaryRed@ is the mastering display’s red primary in
+    -- chromaticity coordinates
+    displayPrimaryRed :: XYColorEXT
+  , -- | @displayPrimaryGreen@ is the mastering display’s green primary in
+    -- chromaticity coordinates
+    displayPrimaryGreen :: XYColorEXT
+  , -- | @displayPrimaryBlue@ is the mastering display’s blue primary in
+    -- chromaticity coordinates
+    displayPrimaryBlue :: XYColorEXT
+  , -- | @whitePoint@ is the mastering display’s white-point in chromaticity
+    -- coordinates
+    whitePoint :: XYColorEXT
+  , -- | @maxLuminance@ is the maximum luminance of the mastering display in nits
+    maxLuminance :: Float
+  , -- | @minLuminance@ is the minimum luminance of the mastering display in nits
+    minLuminance :: Float
+  , -- | @maxContentLightLevel@ is content’s maximum luminance in nits
+    maxContentLightLevel :: Float
+  , -- | @maxFrameAverageLightLevel@ is the maximum frame average light level in
+    -- nits
+    maxFrameAverageLightLevel :: Float
+  }
+  deriving (Typeable)
+deriving instance Show HdrMetadataEXT
+
+instance ToCStruct HdrMetadataEXT where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p HdrMetadataEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_HDR_METADATA_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr XYColorEXT)) (displayPrimaryRed) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr XYColorEXT)) (displayPrimaryGreen) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr XYColorEXT)) (displayPrimaryBlue) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr XYColorEXT)) (whitePoint) . ($ ())
+    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (maxLuminance))
+    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (minLuminance))
+    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (maxContentLightLevel))
+    lift $ poke ((p `plusPtr` 60 :: Ptr CFloat)) (CFloat (maxFrameAverageLightLevel))
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_HDR_METADATA_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr XYColorEXT)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr XYColorEXT)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr XYColorEXT)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr XYColorEXT)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 60 :: Ptr CFloat)) (CFloat (zero))
+    lift $ f
+
+instance FromCStruct HdrMetadataEXT where
+  peekCStruct p = do
+    displayPrimaryRed <- peekCStruct @XYColorEXT ((p `plusPtr` 16 :: Ptr XYColorEXT))
+    displayPrimaryGreen <- peekCStruct @XYColorEXT ((p `plusPtr` 24 :: Ptr XYColorEXT))
+    displayPrimaryBlue <- peekCStruct @XYColorEXT ((p `plusPtr` 32 :: Ptr XYColorEXT))
+    whitePoint <- peekCStruct @XYColorEXT ((p `plusPtr` 40 :: Ptr XYColorEXT))
+    maxLuminance <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat))
+    minLuminance <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))
+    maxContentLightLevel <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat))
+    maxFrameAverageLightLevel <- peek @CFloat ((p `plusPtr` 60 :: Ptr CFloat))
+    pure $ HdrMetadataEXT
+             displayPrimaryRed displayPrimaryGreen displayPrimaryBlue whitePoint ((\(CFloat a) -> a) maxLuminance) ((\(CFloat a) -> a) minLuminance) ((\(CFloat a) -> a) maxContentLightLevel) ((\(CFloat a) -> a) maxFrameAverageLightLevel)
+
+instance Zero HdrMetadataEXT where
+  zero = HdrMetadataEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+type EXT_HDR_METADATA_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_HDR_METADATA_SPEC_VERSION"
+pattern EXT_HDR_METADATA_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_HDR_METADATA_SPEC_VERSION = 2
+
+
+type EXT_HDR_METADATA_EXTENSION_NAME = "VK_EXT_hdr_metadata"
+
+-- No documentation found for TopLevel "VK_EXT_HDR_METADATA_EXTENSION_NAME"
+pattern EXT_HDR_METADATA_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_HDR_METADATA_EXTENSION_NAME = "VK_EXT_hdr_metadata"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs-boot b/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_hdr_metadata  ( HdrMetadataEXT
+                                              , XYColorEXT
+                                              ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data HdrMetadataEXT
+
+instance ToCStruct HdrMetadataEXT
+instance Show HdrMetadataEXT
+
+instance FromCStruct HdrMetadataEXT
+
+
+data XYColorEXT
+
+instance ToCStruct XYColorEXT
+instance Show XYColorEXT
+
+instance FromCStruct XYColorEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_headless_surface.hs b/src/Vulkan/Extensions/VK_EXT_headless_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_headless_surface.hs
@@ -0,0 +1,224 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_headless_surface  ( createHeadlessSurfaceEXT
+                                                  , HeadlessSurfaceCreateInfoEXT(..)
+                                                  , HeadlessSurfaceCreateFlagsEXT(..)
+                                                  , EXT_HEADLESS_SURFACE_SPEC_VERSION
+                                                  , pattern EXT_HEADLESS_SURFACE_SPEC_VERSION
+                                                  , EXT_HEADLESS_SURFACE_EXTENSION_NAME
+                                                  , pattern EXT_HEADLESS_SURFACE_EXTENSION_NAME
+                                                  , SurfaceKHR(..)
+                                                  ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateHeadlessSurfaceEXT))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateHeadlessSurfaceEXT
+  :: FunPtr (Ptr Instance_T -> Ptr HeadlessSurfaceCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr HeadlessSurfaceCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateHeadlessSurfaceEXT - Create a headless
+-- 'Vulkan.Extensions.Handles.SurfaceKHR' object
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to a 'HeadlessSurfaceCreateInfoEXT'
+--     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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'HeadlessSurfaceCreateInfoEXT' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'HeadlessSurfaceCreateInfoEXT', 'Vulkan.Core10.Handles.Instance',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+createHeadlessSurfaceEXT :: forall io . MonadIO io => Instance -> HeadlessSurfaceCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createHeadlessSurfaceEXT instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateHeadlessSurfaceEXTPtr = pVkCreateHeadlessSurfaceEXT (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateHeadlessSurfaceEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateHeadlessSurfaceEXT is null" Nothing Nothing
+  let vkCreateHeadlessSurfaceEXT' = mkVkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXTPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateHeadlessSurfaceEXT' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+-- | VkHeadlessSurfaceCreateInfoEXT - Structure specifying parameters of a
+-- newly created headless surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'HeadlessSurfaceCreateFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createHeadlessSurfaceEXT'
+data HeadlessSurfaceCreateInfoEXT = HeadlessSurfaceCreateInfoEXT
+  { -- | @flags@ /must/ be @0@
+    flags :: HeadlessSurfaceCreateFlagsEXT }
+  deriving (Typeable)
+deriving instance Show HeadlessSurfaceCreateInfoEXT
+
+instance ToCStruct HeadlessSurfaceCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p HeadlessSurfaceCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr HeadlessSurfaceCreateFlagsEXT)) (flags)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct HeadlessSurfaceCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @HeadlessSurfaceCreateFlagsEXT ((p `plusPtr` 16 :: Ptr HeadlessSurfaceCreateFlagsEXT))
+    pure $ HeadlessSurfaceCreateInfoEXT
+             flags
+
+instance Storable HeadlessSurfaceCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero HeadlessSurfaceCreateInfoEXT where
+  zero = HeadlessSurfaceCreateInfoEXT
+           zero
+
+
+-- No documentation found for TopLevel "VkHeadlessSurfaceCreateFlagsEXT"
+newtype HeadlessSurfaceCreateFlagsEXT = HeadlessSurfaceCreateFlagsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show HeadlessSurfaceCreateFlagsEXT where
+  showsPrec p = \case
+    HeadlessSurfaceCreateFlagsEXT x -> showParen (p >= 11) (showString "HeadlessSurfaceCreateFlagsEXT 0x" . showHex x)
+
+instance Read HeadlessSurfaceCreateFlagsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "HeadlessSurfaceCreateFlagsEXT")
+                       v <- step readPrec
+                       pure (HeadlessSurfaceCreateFlagsEXT v)))
+
+
+type EXT_HEADLESS_SURFACE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_HEADLESS_SURFACE_SPEC_VERSION"
+pattern EXT_HEADLESS_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_HEADLESS_SURFACE_SPEC_VERSION = 1
+
+
+type EXT_HEADLESS_SURFACE_EXTENSION_NAME = "VK_EXT_headless_surface"
+
+-- No documentation found for TopLevel "VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME"
+pattern EXT_HEADLESS_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_HEADLESS_SURFACE_EXTENSION_NAME = "VK_EXT_headless_surface"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_headless_surface.hs-boot b/src/Vulkan/Extensions/VK_EXT_headless_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_headless_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_headless_surface  (HeadlessSurfaceCreateInfoEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data HeadlessSurfaceCreateInfoEXT
+
+instance ToCStruct HeadlessSurfaceCreateInfoEXT
+instance Show HeadlessSurfaceCreateInfoEXT
+
+instance FromCStruct HeadlessSurfaceCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_host_query_reset.hs b/src/Vulkan/Extensions/VK_EXT_host_query_reset.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_host_query_reset.hs
@@ -0,0 +1,39 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_host_query_reset  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT
+                                                  , resetQueryPoolEXT
+                                                  , PhysicalDeviceHostQueryResetFeaturesEXT
+                                                  , EXT_HOST_QUERY_RESET_SPEC_VERSION
+                                                  , pattern EXT_HOST_QUERY_RESET_SPEC_VERSION
+                                                  , EXT_HOST_QUERY_RESET_EXTENSION_NAME
+                                                  , pattern EXT_HOST_QUERY_RESET_EXTENSION_NAME
+                                                  ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (resetQueryPool)
+import Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES
+
+
+-- No documentation found for TopLevel "vkResetQueryPoolEXT"
+resetQueryPoolEXT = resetQueryPool
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceHostQueryResetFeaturesEXT"
+type PhysicalDeviceHostQueryResetFeaturesEXT = PhysicalDeviceHostQueryResetFeatures
+
+
+type EXT_HOST_QUERY_RESET_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_HOST_QUERY_RESET_SPEC_VERSION"
+pattern EXT_HOST_QUERY_RESET_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_HOST_QUERY_RESET_SPEC_VERSION = 1
+
+
+type EXT_HOST_QUERY_RESET_EXTENSION_NAME = "VK_EXT_host_query_reset"
+
+-- No documentation found for TopLevel "VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME"
+pattern EXT_HOST_QUERY_RESET_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_HOST_QUERY_RESET_EXTENSION_NAME = "VK_EXT_host_query_reset"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs b/src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs
@@ -0,0 +1,659 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_image_drm_format_modifier  ( getImageDrmFormatModifierPropertiesEXT
+                                                           , DrmFormatModifierPropertiesListEXT(..)
+                                                           , DrmFormatModifierPropertiesEXT(..)
+                                                           , PhysicalDeviceImageDrmFormatModifierInfoEXT(..)
+                                                           , ImageDrmFormatModifierListCreateInfoEXT(..)
+                                                           , ImageDrmFormatModifierExplicitCreateInfoEXT(..)
+                                                           , ImageDrmFormatModifierPropertiesEXT(..)
+                                                           , EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION
+                                                           , pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION
+                                                           , EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME
+                                                           , pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME
+                                                           ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetImageDrmFormatModifierPropertiesEXT))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.Handles (Image(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SharingMode (SharingMode)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Core10.Image (SubresourceLayout)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetImageDrmFormatModifierPropertiesEXT
+  :: FunPtr (Ptr Device_T -> Image -> Ptr ImageDrmFormatModifierPropertiesEXT -> IO Result) -> Ptr Device_T -> Image -> Ptr ImageDrmFormatModifierPropertiesEXT -> IO Result
+
+-- | vkGetImageDrmFormatModifierPropertiesEXT - Returns an image’s DRM format
+-- modifier
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the image.
+--
+-- -   @image@ is the queried image.
+--
+-- -   @pProperties@ will return properties of the image’s /DRM format
+--     modifier/.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Image',
+-- 'ImageDrmFormatModifierPropertiesEXT'
+getImageDrmFormatModifierPropertiesEXT :: forall io . MonadIO io => Device -> Image -> io (ImageDrmFormatModifierPropertiesEXT)
+getImageDrmFormatModifierPropertiesEXT device image = liftIO . evalContT $ do
+  let vkGetImageDrmFormatModifierPropertiesEXTPtr = pVkGetImageDrmFormatModifierPropertiesEXT (deviceCmds (device :: Device))
+  lift $ unless (vkGetImageDrmFormatModifierPropertiesEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetImageDrmFormatModifierPropertiesEXT is null" Nothing Nothing
+  let vkGetImageDrmFormatModifierPropertiesEXT' = mkVkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXTPtr
+  pPProperties <- ContT (withZeroCStruct @ImageDrmFormatModifierPropertiesEXT)
+  _ <- lift $ vkGetImageDrmFormatModifierPropertiesEXT' (deviceHandle (device)) (image) (pPProperties)
+  pProperties <- lift $ peekCStruct @ImageDrmFormatModifierPropertiesEXT pPProperties
+  pure $ (pProperties)
+
+
+-- | VkDrmFormatModifierPropertiesListEXT - Structure specifying the list of
+-- DRM format modifiers supported for a format
+--
+-- = Description
+--
+-- If @pDrmFormatModifierProperties@ is @NULL@, then the function returns
+-- in @drmFormatModifierCount@ the number of modifiers compatible with the
+-- queried @format@. Otherwise, the application /must/ set
+-- @drmFormatModifierCount@ to the length of the array
+-- @pDrmFormatModifierProperties@; the function will write at most
+-- @drmFormatModifierCount@ elements to the array, and will return in
+-- @drmFormatModifierCount@ the number of elements written.
+--
+-- Among the elements in array @pDrmFormatModifierProperties@, each
+-- returned @drmFormatModifier@ /must/ be unique.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DrmFormatModifierPropertiesEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DrmFormatModifierPropertiesListEXT = DrmFormatModifierPropertiesListEXT
+  { -- | @drmFormatModifierCount@ is an inout parameter related to the number of
+    -- modifiers compatible with the @format@, as described below.
+    drmFormatModifierCount :: Word32
+  , -- | @pDrmFormatModifierProperties@ is either @NULL@ or an array of
+    -- 'DrmFormatModifierPropertiesEXT' structures.
+    drmFormatModifierProperties :: Ptr DrmFormatModifierPropertiesEXT
+  }
+  deriving (Typeable)
+deriving instance Show DrmFormatModifierPropertiesListEXT
+
+instance ToCStruct DrmFormatModifierPropertiesListEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DrmFormatModifierPropertiesListEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (drmFormatModifierCount)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr DrmFormatModifierPropertiesEXT))) (drmFormatModifierProperties)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct DrmFormatModifierPropertiesListEXT where
+  peekCStruct p = do
+    drmFormatModifierCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pDrmFormatModifierProperties <- peek @(Ptr DrmFormatModifierPropertiesEXT) ((p `plusPtr` 24 :: Ptr (Ptr DrmFormatModifierPropertiesEXT)))
+    pure $ DrmFormatModifierPropertiesListEXT
+             drmFormatModifierCount pDrmFormatModifierProperties
+
+instance Storable DrmFormatModifierPropertiesListEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DrmFormatModifierPropertiesListEXT where
+  zero = DrmFormatModifierPropertiesListEXT
+           zero
+           zero
+
+
+-- | VkDrmFormatModifierPropertiesEXT - Structure specifying properties of a
+-- format when combined with a DRM format modifier
+--
+-- = Description
+--
+-- The returned @drmFormatModifierTilingFeatures@ /must/ contain at least
+-- one bit.
+--
+-- The implementation /must/ not return @DRM_FORMAT_MOD_INVALID@ in
+-- @drmFormatModifier@.
+--
+-- An image’s /memory planecount/ (as returned by
+-- @drmFormatModifierPlaneCount@) is distinct from its /format planecount/
+-- (in the sense of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>
+-- Y′CBCR formats). In
+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags', each
+-- @VK_IMAGE_ASPECT_MEMORY_PLANE@//i/_BIT_EXT represents a _memory plane/
+-- and each @VK_IMAGE_ASPECT_PLANE@//i/_BIT a _format plane/.
+--
+-- An image’s set of /format planes/ is an ordered partition of the image’s
+-- __content__ into separable groups of format channels. The ordered
+-- partition is encoded in the name of each
+-- 'Vulkan.Core10.Enums.Format.Format'. For example,
+-- 'Vulkan.Core10.Enums.Format.FORMAT_G8_B8R8_2PLANE_420_UNORM' contains
+-- two /format planes/; the first plane contains the green channel and the
+-- second plane contains the blue channel and red channel. If the format
+-- name does not contain @PLANE@, then the format contains a single plane;
+-- for example, 'Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM'. Some
+-- commands, such as
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', do not
+-- operate on all format channels in the image, but instead operate only on
+-- the /format planes/ explicitly chosen by the application and operate on
+-- each /format plane/ independently.
+--
+-- An image’s set of /memory planes/ is an ordered partition of the image’s
+-- __memory__ rather than the image’s __content__. Each /memory plane/ is a
+-- contiguous range of memory. The union of an image’s /memory planes/ is
+-- not necessarily contiguous.
+--
+-- If an image is
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource linear>,
+-- then the partition is the same for /memory planes/ and for /format
+-- planes/. Therefore, if the returned @drmFormatModifier@ is
+-- @DRM_FORMAT_MOD_LINEAR@, then @drmFormatModifierPlaneCount@ /must/ equal
+-- the /format planecount/, and @drmFormatModifierTilingFeatures@ /must/ be
+-- identical to the
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.FormatProperties2'::@linearTilingFeatures@
+-- returned in the same @pNext@ chain.
+--
+-- If an image is
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-linear-resource non-linear>,
+-- then the partition of the image’s __memory__ into /memory planes/ is
+-- implementation-specific and /may/ be unrelated to the partition of the
+-- image’s __content__ into /format planes/. For example, consider an image
+-- whose @format@ is
+-- 'Vulkan.Core10.Enums.Format.FORMAT_G8_B8_R8_3PLANE_420_UNORM', @tiling@
+-- is
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
+-- whose @drmFormatModifier@ is not @DRM_FORMAT_MOD_LINEAR@, and @flags@
+-- lacks
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'. The
+-- image has 3 /format planes/, and commands such
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage' act on each
+-- /format plane/ independently as if the data of each /format plane/ were
+-- separable from the data of the other planes. In a straightforward
+-- implementation, the implementation /may/ store the image’s content in 3
+-- adjacent /memory planes/ where each /memory plane/ corresponds exactly
+-- to a /format plane/. However, the implementation /may/ also store the
+-- image’s content in a single /memory plane/ where all format channels are
+-- combined using an implementation-private block-compressed format; or the
+-- implementation /may/ store the image’s content in a collection of 7
+-- adjacent /memory planes/ using an implementation-private sharding
+-- technique. Because the image is non-linear and non-disjoint, the
+-- implementation has much freedom when choosing the image’s placement in
+-- memory.
+--
+-- The /memory planecount/ applies to function parameters and structures
+-- only when the API specifies an explicit requirement on
+-- @drmFormatModifierPlaneCount@. In all other cases, the /memory
+-- planecount/ is ignored.
+--
+-- = See Also
+--
+-- 'DrmFormatModifierPropertiesListEXT',
+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlags'
+data DrmFormatModifierPropertiesEXT = DrmFormatModifierPropertiesEXT
+  { -- | @drmFormatModifier@ is a /Linux DRM format modifier/.
+    drmFormatModifier :: Word64
+  , -- | @drmFormatModifierPlaneCount@ is the number of /memory planes/ in any
+    -- image created with @format@ and @drmFormatModifier@. An image’s /memory
+    -- planecount/ is distinct from its /format planecount/, as explained
+    -- below.
+    drmFormatModifierPlaneCount :: Word32
+  , -- | @drmFormatModifierTilingFeatures@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits' that
+    -- are supported by any image created with @format@ and
+    -- @drmFormatModifier@.
+    drmFormatModifierTilingFeatures :: FormatFeatureFlags
+  }
+  deriving (Typeable)
+deriving instance Show DrmFormatModifierPropertiesEXT
+
+instance ToCStruct DrmFormatModifierPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DrmFormatModifierPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word64)) (drmFormatModifier)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (drmFormatModifierPlaneCount)
+    poke ((p `plusPtr` 12 :: Ptr FormatFeatureFlags)) (drmFormatModifierTilingFeatures)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr FormatFeatureFlags)) (zero)
+    f
+
+instance FromCStruct DrmFormatModifierPropertiesEXT where
+  peekCStruct p = do
+    drmFormatModifier <- peek @Word64 ((p `plusPtr` 0 :: Ptr Word64))
+    drmFormatModifierPlaneCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    drmFormatModifierTilingFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 12 :: Ptr FormatFeatureFlags))
+    pure $ DrmFormatModifierPropertiesEXT
+             drmFormatModifier drmFormatModifierPlaneCount drmFormatModifierTilingFeatures
+
+instance Storable DrmFormatModifierPropertiesEXT where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DrmFormatModifierPropertiesEXT where
+  zero = DrmFormatModifierPropertiesEXT
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceImageDrmFormatModifierInfoEXT - Structure specifying a
+-- DRM format modifier as image creation parameter
+--
+-- = Description
+--
+-- If the @drmFormatModifier@ is incompatible with the parameters specified
+-- in
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
+-- and its @pNext@ chain, then
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+-- returns 'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'. The
+-- implementation /must/ support the query of any @drmFormatModifier@,
+-- including unknown and invalid modifier values.
+--
+-- == Valid Usage
+--
+-- -   If @sharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', then
+--     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
+--     @queueFamilyIndexCount@ @uint32_t@ values
+--
+-- -   If @sharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', then
+--     @queueFamilyIndexCount@ /must/ be greater than @1@
+--
+-- -   If @sharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', each
+--     element of @pQueueFamilyIndices@ /must/ be unique and /must/ be less
+--     than the @pQueueFamilyPropertyCount@ returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'
+--     for the @physicalDevice@ that was used to create @device@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT'
+--
+-- -   @sharingMode@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SharingMode.SharingMode' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.SharingMode.SharingMode',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceImageDrmFormatModifierInfoEXT = PhysicalDeviceImageDrmFormatModifierInfoEXT
+  { -- | @drmFormatModifier@ is the image’s /Linux DRM format modifier/,
+    -- corresponding to
+    -- 'ImageDrmFormatModifierExplicitCreateInfoEXT'::@modifier@ or to
+    -- 'ImageDrmFormatModifierListCreateInfoEXT'::@pModifiers@.
+    drmFormatModifier :: Word64
+  , -- | @sharingMode@ specifies how the image will be accessed by multiple queue
+    -- families.
+    sharingMode :: SharingMode
+  , -- | @pQueueFamilyIndices@ is a list of queue families that will access the
+    -- image (ignored if @sharingMode@ is not
+    -- 'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT').
+    queueFamilyIndices :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceImageDrmFormatModifierInfoEXT
+
+instance ToCStruct PhysicalDeviceImageDrmFormatModifierInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceImageDrmFormatModifierInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word64)) (drmFormatModifier)
+    lift $ poke ((p `plusPtr` 24 :: Ptr SharingMode)) (sharingMode)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueFamilyIndices)) :: Word32))
+    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (queueFamilyIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (queueFamilyIndices)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr SharingMode)) (zero)
+    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
+    lift $ f
+
+instance FromCStruct PhysicalDeviceImageDrmFormatModifierInfoEXT where
+  peekCStruct p = do
+    drmFormatModifier <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
+    sharingMode <- peek @SharingMode ((p `plusPtr` 24 :: Ptr SharingMode))
+    queueFamilyIndexCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    pQueueFamilyIndices <- peek @(Ptr Word32) ((p `plusPtr` 32 :: Ptr (Ptr Word32)))
+    pQueueFamilyIndices' <- generateM (fromIntegral queueFamilyIndexCount) (\i -> peek @Word32 ((pQueueFamilyIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ PhysicalDeviceImageDrmFormatModifierInfoEXT
+             drmFormatModifier sharingMode pQueueFamilyIndices'
+
+instance Zero PhysicalDeviceImageDrmFormatModifierInfoEXT where
+  zero = PhysicalDeviceImageDrmFormatModifierInfoEXT
+           zero
+           zero
+           mempty
+
+
+-- | VkImageDrmFormatModifierListCreateInfoEXT - Specify that an image must
+-- be created with a DRM format modifier from the provided list
+--
+-- == Valid Usage
+--
+-- -   Each /modifier/ in @pDrmFormatModifiers@ /must/ be compatible with
+--     the parameters in 'Vulkan.Core10.Image.ImageCreateInfo' and its
+--     @pNext@ chain, as determined by querying
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
+--     extended with 'PhysicalDeviceImageDrmFormatModifierInfoEXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT'
+--
+-- -   @pDrmFormatModifiers@ /must/ be a valid pointer to an array of
+--     @drmFormatModifierCount@ @uint64_t@ values
+--
+-- -   @drmFormatModifierCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImageDrmFormatModifierListCreateInfoEXT = ImageDrmFormatModifierListCreateInfoEXT
+  { -- | @pDrmFormatModifiers@ is a pointer to an array of /Linux DRM format
+    -- modifiers/.
+    drmFormatModifiers :: Vector Word64 }
+  deriving (Typeable)
+deriving instance Show ImageDrmFormatModifierListCreateInfoEXT
+
+instance ToCStruct ImageDrmFormatModifierListCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageDrmFormatModifierListCreateInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (drmFormatModifiers)) :: Word32))
+    pPDrmFormatModifiers' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (drmFormatModifiers)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDrmFormatModifiers' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (drmFormatModifiers)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word64))) (pPDrmFormatModifiers')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPDrmFormatModifiers' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDrmFormatModifiers' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word64))) (pPDrmFormatModifiers')
+    lift $ f
+
+instance FromCStruct ImageDrmFormatModifierListCreateInfoEXT where
+  peekCStruct p = do
+    drmFormatModifierCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pDrmFormatModifiers <- peek @(Ptr Word64) ((p `plusPtr` 24 :: Ptr (Ptr Word64)))
+    pDrmFormatModifiers' <- generateM (fromIntegral drmFormatModifierCount) (\i -> peek @Word64 ((pDrmFormatModifiers `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    pure $ ImageDrmFormatModifierListCreateInfoEXT
+             pDrmFormatModifiers'
+
+instance Zero ImageDrmFormatModifierListCreateInfoEXT where
+  zero = ImageDrmFormatModifierListCreateInfoEXT
+           mempty
+
+
+-- | VkImageDrmFormatModifierExplicitCreateInfoEXT - Specify that an image be
+-- created with the provided DRM format modifier and explicit memory layout
+--
+-- = Description
+--
+-- The @i@th member of @pPlaneLayouts@ describes the layout of the image’s
+-- @i@th /memory plane/ (that is,
+-- @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@). In each element of
+-- @pPlaneLayouts@, the implementation /must/ ignore @size@. The
+-- implementation calculates the size of each plane, which the application
+-- /can/ query with 'Vulkan.Core10.Image.getImageSubresourceLayout'.
+--
+-- When creating an image with
+-- 'ImageDrmFormatModifierExplicitCreateInfoEXT', it is the application’s
+-- responsibility to satisfy all valid usage requirements. However, the
+-- implementation /must/ validate that the provided @pPlaneLayouts@, when
+-- combined with the provided @drmFormatModifier@ and other creation
+-- parameters in 'Vulkan.Core10.Image.ImageCreateInfo' and its @pNext@
+-- chain, produce a valid image. (This validation is necessarily
+-- implementation-dependent and outside the scope of Vulkan, and therefore
+-- not described by valid usage requirements). If this validation fails,
+-- then 'Vulkan.Core10.Image.createImage' returns
+-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT'.
+--
+-- == Valid Usage
+--
+-- -   @drmFormatModifier@ /must/ be compatible with the parameters in
+--     'Vulkan.Core10.Image.ImageCreateInfo' and its @pNext@ chain, as
+--     determined by querying
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
+--     extended with 'PhysicalDeviceImageDrmFormatModifierInfoEXT'
+--
+-- -   @drmFormatModifierPlaneCount@ /must/ be equal to the
+--     'DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
+--     associated with 'Vulkan.Core10.Image.ImageCreateInfo'::@format@ and
+--     @drmFormatModifier@, as found by querying
+--     'DrmFormatModifierPropertiesListEXT'
+--
+-- -   For each element of @pPlaneLayouts@, @size@ /must/ be 0
+--
+-- -   For each element of @pPlaneLayouts@, @arrayPitch@ /must/ be 0 if
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@arrayLayers@ is 1
+--
+-- -   For each element of @pPlaneLayouts@, @depthPitch@ /must/ be 0 if
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@extent.depth@ is 1
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT'
+--
+-- -   If @drmFormatModifierPlaneCount@ is not @0@, @pPlaneLayouts@ /must/
+--     be a valid pointer to an array of @drmFormatModifierPlaneCount@
+--     'Vulkan.Core10.Image.SubresourceLayout' structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Core10.Image.SubresourceLayout'
+data ImageDrmFormatModifierExplicitCreateInfoEXT = ImageDrmFormatModifierExplicitCreateInfoEXT
+  { -- | @drmFormatModifier@ is the /Linux DRM format modifier/ with which the
+    -- image will be created.
+    drmFormatModifier :: Word64
+  , -- | @pPlaneLayouts@ is a pointer to an array of
+    -- 'Vulkan.Core10.Image.SubresourceLayout' structures describing the
+    -- image’s /memory planes/.
+    planeLayouts :: Vector SubresourceLayout
+  }
+  deriving (Typeable)
+deriving instance Show ImageDrmFormatModifierExplicitCreateInfoEXT
+
+instance ToCStruct ImageDrmFormatModifierExplicitCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageDrmFormatModifierExplicitCreateInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word64)) (drmFormatModifier)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (planeLayouts)) :: Word32))
+    pPPlaneLayouts' <- ContT $ allocaBytesAligned @SubresourceLayout ((Data.Vector.length (planeLayouts)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPlaneLayouts' `plusPtr` (40 * (i)) :: Ptr SubresourceLayout) (e) . ($ ())) (planeLayouts)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SubresourceLayout))) (pPPlaneLayouts')
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
+    pPPlaneLayouts' <- ContT $ allocaBytesAligned @SubresourceLayout ((Data.Vector.length (mempty)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPlaneLayouts' `plusPtr` (40 * (i)) :: Ptr SubresourceLayout) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SubresourceLayout))) (pPPlaneLayouts')
+    lift $ f
+
+instance FromCStruct ImageDrmFormatModifierExplicitCreateInfoEXT where
+  peekCStruct p = do
+    drmFormatModifier <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
+    drmFormatModifierPlaneCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pPlaneLayouts <- peek @(Ptr SubresourceLayout) ((p `plusPtr` 32 :: Ptr (Ptr SubresourceLayout)))
+    pPlaneLayouts' <- generateM (fromIntegral drmFormatModifierPlaneCount) (\i -> peekCStruct @SubresourceLayout ((pPlaneLayouts `advancePtrBytes` (40 * (i)) :: Ptr SubresourceLayout)))
+    pure $ ImageDrmFormatModifierExplicitCreateInfoEXT
+             drmFormatModifier pPlaneLayouts'
+
+instance Zero ImageDrmFormatModifierExplicitCreateInfoEXT where
+  zero = ImageDrmFormatModifierExplicitCreateInfoEXT
+           zero
+           mempty
+
+
+-- | VkImageDrmFormatModifierPropertiesEXT - Properties of an image’s Linux
+-- DRM format modifier
+--
+-- = Description
+--
+-- If the @image@ was created with
+-- 'ImageDrmFormatModifierListCreateInfoEXT', then the returned
+-- @drmFormatModifier@ /must/ belong to the list of modifiers provided at
+-- time of image creation in
+-- 'ImageDrmFormatModifierListCreateInfoEXT'::@pDrmFormatModifiers@. If the
+-- @image@ was created with 'ImageDrmFormatModifierExplicitCreateInfoEXT',
+-- then the returned @drmFormatModifier@ /must/ be the modifier provided at
+-- time of image creation in
+-- 'ImageDrmFormatModifierExplicitCreateInfoEXT'::@drmFormatModifier@.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getImageDrmFormatModifierPropertiesEXT'
+data ImageDrmFormatModifierPropertiesEXT = ImageDrmFormatModifierPropertiesEXT
+  { -- | @drmFormatModifier@ returns the image’s
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-drm-format-modifier Linux DRM format modifier>.
+    drmFormatModifier :: Word64 }
+  deriving (Typeable)
+deriving instance Show ImageDrmFormatModifierPropertiesEXT
+
+instance ToCStruct ImageDrmFormatModifierPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageDrmFormatModifierPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (drmFormatModifier)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct ImageDrmFormatModifierPropertiesEXT where
+  peekCStruct p = do
+    drmFormatModifier <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
+    pure $ ImageDrmFormatModifierPropertiesEXT
+             drmFormatModifier
+
+instance Storable ImageDrmFormatModifierPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageDrmFormatModifierPropertiesEXT where
+  zero = ImageDrmFormatModifierPropertiesEXT
+           zero
+
+
+type EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION"
+pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION = 1
+
+
+type EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME = "VK_EXT_image_drm_format_modifier"
+
+-- No documentation found for TopLevel "VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME"
+pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME = "VK_EXT_image_drm_format_modifier"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs-boot b/src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs-boot
@@ -0,0 +1,59 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_image_drm_format_modifier  ( DrmFormatModifierPropertiesEXT
+                                                           , DrmFormatModifierPropertiesListEXT
+                                                           , ImageDrmFormatModifierExplicitCreateInfoEXT
+                                                           , ImageDrmFormatModifierListCreateInfoEXT
+                                                           , ImageDrmFormatModifierPropertiesEXT
+                                                           , PhysicalDeviceImageDrmFormatModifierInfoEXT
+                                                           ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DrmFormatModifierPropertiesEXT
+
+instance ToCStruct DrmFormatModifierPropertiesEXT
+instance Show DrmFormatModifierPropertiesEXT
+
+instance FromCStruct DrmFormatModifierPropertiesEXT
+
+
+data DrmFormatModifierPropertiesListEXT
+
+instance ToCStruct DrmFormatModifierPropertiesListEXT
+instance Show DrmFormatModifierPropertiesListEXT
+
+instance FromCStruct DrmFormatModifierPropertiesListEXT
+
+
+data ImageDrmFormatModifierExplicitCreateInfoEXT
+
+instance ToCStruct ImageDrmFormatModifierExplicitCreateInfoEXT
+instance Show ImageDrmFormatModifierExplicitCreateInfoEXT
+
+instance FromCStruct ImageDrmFormatModifierExplicitCreateInfoEXT
+
+
+data ImageDrmFormatModifierListCreateInfoEXT
+
+instance ToCStruct ImageDrmFormatModifierListCreateInfoEXT
+instance Show ImageDrmFormatModifierListCreateInfoEXT
+
+instance FromCStruct ImageDrmFormatModifierListCreateInfoEXT
+
+
+data ImageDrmFormatModifierPropertiesEXT
+
+instance ToCStruct ImageDrmFormatModifierPropertiesEXT
+instance Show ImageDrmFormatModifierPropertiesEXT
+
+instance FromCStruct ImageDrmFormatModifierPropertiesEXT
+
+
+data PhysicalDeviceImageDrmFormatModifierInfoEXT
+
+instance ToCStruct PhysicalDeviceImageDrmFormatModifierInfoEXT
+instance Show PhysicalDeviceImageDrmFormatModifierInfoEXT
+
+instance FromCStruct PhysicalDeviceImageDrmFormatModifierInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_index_type_uint8.hs b/src/Vulkan/Extensions/VK_EXT_index_type_uint8.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_index_type_uint8.hs
@@ -0,0 +1,106 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_index_type_uint8  ( PhysicalDeviceIndexTypeUint8FeaturesEXT(..)
+                                                  , EXT_INDEX_TYPE_UINT8_SPEC_VERSION
+                                                  , pattern EXT_INDEX_TYPE_UINT8_SPEC_VERSION
+                                                  , EXT_INDEX_TYPE_UINT8_EXTENSION_NAME
+                                                  , pattern EXT_INDEX_TYPE_UINT8_EXTENSION_NAME
+                                                  ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT))
+-- | VkPhysicalDeviceIndexTypeUint8FeaturesEXT - Structure describing whether
+-- uint8 index type can be used
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceIndexTypeUint8FeaturesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceIndexTypeUint8FeaturesEXT' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceIndexTypeUint8FeaturesEXT' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceIndexTypeUint8FeaturesEXT = PhysicalDeviceIndexTypeUint8FeaturesEXT
+  { -- | @indexTypeUint8@ indicates that
+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT' can be used with
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'.
+    indexTypeUint8 :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceIndexTypeUint8FeaturesEXT
+
+instance ToCStruct PhysicalDeviceIndexTypeUint8FeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceIndexTypeUint8FeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (indexTypeUint8))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceIndexTypeUint8FeaturesEXT where
+  peekCStruct p = do
+    indexTypeUint8 <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceIndexTypeUint8FeaturesEXT
+             (bool32ToBool indexTypeUint8)
+
+instance Storable PhysicalDeviceIndexTypeUint8FeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceIndexTypeUint8FeaturesEXT where
+  zero = PhysicalDeviceIndexTypeUint8FeaturesEXT
+           zero
+
+
+type EXT_INDEX_TYPE_UINT8_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION"
+pattern EXT_INDEX_TYPE_UINT8_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_INDEX_TYPE_UINT8_SPEC_VERSION = 1
+
+
+type EXT_INDEX_TYPE_UINT8_EXTENSION_NAME = "VK_EXT_index_type_uint8"
+
+-- No documentation found for TopLevel "VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME"
+pattern EXT_INDEX_TYPE_UINT8_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_INDEX_TYPE_UINT8_EXTENSION_NAME = "VK_EXT_index_type_uint8"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_index_type_uint8.hs-boot b/src/Vulkan/Extensions/VK_EXT_index_type_uint8.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_index_type_uint8.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_index_type_uint8  (PhysicalDeviceIndexTypeUint8FeaturesEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceIndexTypeUint8FeaturesEXT
+
+instance ToCStruct PhysicalDeviceIndexTypeUint8FeaturesEXT
+instance Show PhysicalDeviceIndexTypeUint8FeaturesEXT
+
+instance FromCStruct PhysicalDeviceIndexTypeUint8FeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs b/src/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs
@@ -0,0 +1,329 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_inline_uniform_block  ( PhysicalDeviceInlineUniformBlockFeaturesEXT(..)
+                                                      , PhysicalDeviceInlineUniformBlockPropertiesEXT(..)
+                                                      , WriteDescriptorSetInlineUniformBlockEXT(..)
+                                                      , DescriptorPoolInlineUniformBlockCreateInfoEXT(..)
+                                                      , EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION
+                                                      , pattern EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION
+                                                      , EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME
+                                                      , pattern EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME
+                                                      ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT))
+-- | VkPhysicalDeviceInlineUniformBlockFeaturesEXT - Structure describing
+-- inline uniform block features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceInlineUniformBlockFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceInlineUniformBlockFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceInlineUniformBlockFeaturesEXT' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceInlineUniformBlockFeaturesEXT = PhysicalDeviceInlineUniformBlockFeaturesEXT
+  { -- | @inlineUniformBlock@ indicates whether the implementation supports
+    -- inline uniform block descriptors. If this feature is not enabled,
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- /must/ not be used.
+    inlineUniformBlock :: Bool
+  , -- | @descriptorBindingInlineUniformBlockUpdateAfterBind@ indicates whether
+    -- the implementation supports updating inline uniform block descriptors
+    -- after a set is bound. If this feature is not enabled,
+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
+    -- /must/ not be used with
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'.
+    descriptorBindingInlineUniformBlockUpdateAfterBind :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceInlineUniformBlockFeaturesEXT
+
+instance ToCStruct PhysicalDeviceInlineUniformBlockFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceInlineUniformBlockFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (inlineUniformBlock))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (descriptorBindingInlineUniformBlockUpdateAfterBind))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceInlineUniformBlockFeaturesEXT where
+  peekCStruct p = do
+    inlineUniformBlock <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    descriptorBindingInlineUniformBlockUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceInlineUniformBlockFeaturesEXT
+             (bool32ToBool inlineUniformBlock) (bool32ToBool descriptorBindingInlineUniformBlockUpdateAfterBind)
+
+instance Storable PhysicalDeviceInlineUniformBlockFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceInlineUniformBlockFeaturesEXT where
+  zero = PhysicalDeviceInlineUniformBlockFeaturesEXT
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceInlineUniformBlockPropertiesEXT - Structure describing
+-- inline uniform block properties that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceInlineUniformBlockPropertiesEXT'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceInlineUniformBlockPropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceInlineUniformBlockPropertiesEXT = PhysicalDeviceInlineUniformBlockPropertiesEXT
+  { -- | @maxInlineUniformBlockSize@ is the maximum size in bytes of an
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inlineuniformblock inline uniform block>
+    -- binding.
+    maxInlineUniformBlockSize :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceInlineUniformBlockPropertiesEXT" "maxPerStageDescriptorInlineUniformBlocks"
+    maxPerStageDescriptorInlineUniformBlocks :: Word32
+  , -- | @maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks@ is similar to
+    -- @maxPerStageDescriptorInlineUniformBlocks@ but counts descriptor
+    -- bindings from descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks :: Word32
+  , -- | @maxDescriptorSetInlineUniformBlocks@ is the maximum number of inline
+    -- uniform block bindings that /can/ be included in descriptor bindings in
+    -- a pipeline layout across all pipeline shader stages and descriptor set
+    -- numbers. Descriptor bindings with a descriptor type of
+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'
+    -- count against this limit. Only descriptor bindings in descriptor set
+    -- layouts created without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set count against this limit.
+    maxDescriptorSetInlineUniformBlocks :: Word32
+  , -- | @maxDescriptorSetUpdateAfterBindInlineUniformBlocks@ is similar to
+    -- @maxDescriptorSetInlineUniformBlocks@ but counts descriptor bindings
+    -- from descriptor sets created with or without the
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
+    -- bit set.
+    maxDescriptorSetUpdateAfterBindInlineUniformBlocks :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceInlineUniformBlockPropertiesEXT
+
+instance ToCStruct PhysicalDeviceInlineUniformBlockPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceInlineUniformBlockPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxInlineUniformBlockSize)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxPerStageDescriptorInlineUniformBlocks)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (maxDescriptorSetInlineUniformBlocks)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (maxDescriptorSetUpdateAfterBindInlineUniformBlocks)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceInlineUniformBlockPropertiesEXT where
+  peekCStruct p = do
+    maxInlineUniformBlockSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxPerStageDescriptorInlineUniformBlocks <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    maxDescriptorSetInlineUniformBlocks <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    maxDescriptorSetUpdateAfterBindInlineUniformBlocks <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pure $ PhysicalDeviceInlineUniformBlockPropertiesEXT
+             maxInlineUniformBlockSize maxPerStageDescriptorInlineUniformBlocks maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks maxDescriptorSetInlineUniformBlocks maxDescriptorSetUpdateAfterBindInlineUniformBlocks
+
+instance Storable PhysicalDeviceInlineUniformBlockPropertiesEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceInlineUniformBlockPropertiesEXT where
+  zero = PhysicalDeviceInlineUniformBlockPropertiesEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkWriteDescriptorSetInlineUniformBlockEXT - Structure specifying inline
+-- uniform block data
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data WriteDescriptorSetInlineUniformBlockEXT = WriteDescriptorSetInlineUniformBlockEXT
+  { -- | @dataSize@ /must/ be greater than @0@
+    dataSize :: Word32
+  , -- | @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
+    data' :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show WriteDescriptorSetInlineUniformBlockEXT
+
+instance ToCStruct WriteDescriptorSetInlineUniformBlockEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p WriteDescriptorSetInlineUniformBlockEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (dataSize)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (data')
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct WriteDescriptorSetInlineUniformBlockEXT where
+  peekCStruct p = do
+    dataSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pData <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
+    pure $ WriteDescriptorSetInlineUniformBlockEXT
+             dataSize pData
+
+instance Storable WriteDescriptorSetInlineUniformBlockEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero WriteDescriptorSetInlineUniformBlockEXT where
+  zero = WriteDescriptorSetInlineUniformBlockEXT
+           zero
+           zero
+
+
+-- | VkDescriptorPoolInlineUniformBlockCreateInfoEXT - Structure specifying
+-- the maximum number of inline uniform block bindings of a newly created
+-- descriptor pool
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DescriptorPoolInlineUniformBlockCreateInfoEXT = DescriptorPoolInlineUniformBlockCreateInfoEXT
+  { -- | @maxInlineUniformBlockBindings@ is the number of inline uniform block
+    -- bindings to allocate.
+    maxInlineUniformBlockBindings :: Word32 }
+  deriving (Typeable)
+deriving instance Show DescriptorPoolInlineUniformBlockCreateInfoEXT
+
+instance ToCStruct DescriptorPoolInlineUniformBlockCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DescriptorPoolInlineUniformBlockCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxInlineUniformBlockBindings)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DescriptorPoolInlineUniformBlockCreateInfoEXT where
+  peekCStruct p = do
+    maxInlineUniformBlockBindings <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ DescriptorPoolInlineUniformBlockCreateInfoEXT
+             maxInlineUniformBlockBindings
+
+instance Storable DescriptorPoolInlineUniformBlockCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DescriptorPoolInlineUniformBlockCreateInfoEXT where
+  zero = DescriptorPoolInlineUniformBlockCreateInfoEXT
+           zero
+
+
+type EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION"
+pattern EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION = 1
+
+
+type EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME = "VK_EXT_inline_uniform_block"
+
+-- No documentation found for TopLevel "VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME"
+pattern EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME = "VK_EXT_inline_uniform_block"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs-boot b/src/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs-boot
@@ -0,0 +1,41 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_inline_uniform_block  ( DescriptorPoolInlineUniformBlockCreateInfoEXT
+                                                      , PhysicalDeviceInlineUniformBlockFeaturesEXT
+                                                      , PhysicalDeviceInlineUniformBlockPropertiesEXT
+                                                      , WriteDescriptorSetInlineUniformBlockEXT
+                                                      ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DescriptorPoolInlineUniformBlockCreateInfoEXT
+
+instance ToCStruct DescriptorPoolInlineUniformBlockCreateInfoEXT
+instance Show DescriptorPoolInlineUniformBlockCreateInfoEXT
+
+instance FromCStruct DescriptorPoolInlineUniformBlockCreateInfoEXT
+
+
+data PhysicalDeviceInlineUniformBlockFeaturesEXT
+
+instance ToCStruct PhysicalDeviceInlineUniformBlockFeaturesEXT
+instance Show PhysicalDeviceInlineUniformBlockFeaturesEXT
+
+instance FromCStruct PhysicalDeviceInlineUniformBlockFeaturesEXT
+
+
+data PhysicalDeviceInlineUniformBlockPropertiesEXT
+
+instance ToCStruct PhysicalDeviceInlineUniformBlockPropertiesEXT
+instance Show PhysicalDeviceInlineUniformBlockPropertiesEXT
+
+instance FromCStruct PhysicalDeviceInlineUniformBlockPropertiesEXT
+
+
+data WriteDescriptorSetInlineUniformBlockEXT
+
+instance ToCStruct WriteDescriptorSetInlineUniformBlockEXT
+instance Show WriteDescriptorSetInlineUniformBlockEXT
+
+instance FromCStruct WriteDescriptorSetInlineUniformBlockEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_line_rasterization.hs b/src/Vulkan/Extensions/VK_EXT_line_rasterization.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_line_rasterization.hs
@@ -0,0 +1,482 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_line_rasterization  ( cmdSetLineStippleEXT
+                                                    , PhysicalDeviceLineRasterizationFeaturesEXT(..)
+                                                    , PhysicalDeviceLineRasterizationPropertiesEXT(..)
+                                                    , PipelineRasterizationLineStateCreateInfoEXT(..)
+                                                    , LineRasterizationModeEXT( LINE_RASTERIZATION_MODE_DEFAULT_EXT
+                                                                              , LINE_RASTERIZATION_MODE_RECTANGULAR_EXT
+                                                                              , LINE_RASTERIZATION_MODE_BRESENHAM_EXT
+                                                                              , LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT
+                                                                              , ..
+                                                                              )
+                                                    , EXT_LINE_RASTERIZATION_SPEC_VERSION
+                                                    , pattern EXT_LINE_RASTERIZATION_SPEC_VERSION
+                                                    , EXT_LINE_RASTERIZATION_EXTENSION_NAME
+                                                    , pattern EXT_LINE_RASTERIZATION_EXTENSION_NAME
+                                                    ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word16)
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetLineStippleEXT))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetLineStippleEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word16 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word16 -> IO ()
+
+-- | vkCmdSetLineStippleEXT - Set the dynamic line width state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @lineStippleFactor@ is the repeat factor used in stippled line
+--     rasterization.
+--
+-- -   @lineStipplePattern@ is the bit pattern used in stippled line
+--     rasterization.
+--
+-- == Valid Usage
+--
+-- -   @lineStippleFactor@ /must/ be in the range [1,256]
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdSetLineStippleEXT :: forall io . MonadIO io => CommandBuffer -> ("lineStippleFactor" ::: Word32) -> ("lineStipplePattern" ::: Word16) -> io ()
+cmdSetLineStippleEXT commandBuffer lineStippleFactor lineStipplePattern = liftIO $ do
+  let vkCmdSetLineStippleEXTPtr = pVkCmdSetLineStippleEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdSetLineStippleEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetLineStippleEXT is null" Nothing Nothing
+  let vkCmdSetLineStippleEXT' = mkVkCmdSetLineStippleEXT vkCmdSetLineStippleEXTPtr
+  vkCmdSetLineStippleEXT' (commandBufferHandle (commandBuffer)) (lineStippleFactor) (lineStipplePattern)
+  pure $ ()
+
+
+-- | VkPhysicalDeviceLineRasterizationFeaturesEXT - Structure describing the
+-- line rasterization features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceLineRasterizationFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceLineRasterizationFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceLineRasterizationFeaturesEXT' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- the feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceLineRasterizationFeaturesEXT = PhysicalDeviceLineRasterizationFeaturesEXT
+  { -- | @rectangularLines@ indicates whether the implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines rectangular line rasterization>.
+    rectangularLines :: Bool
+  , -- | @bresenhamLines@ indicates whether the implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-bresenham Bresenham-style line rasterization>.
+    bresenhamLines :: Bool
+  , -- | @smoothLines@ indicates whether the implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-smooth smooth line rasterization>.
+    smoothLines :: Bool
+  , -- | @stippledRectangularLines@ indicates whether the implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>
+    -- with 'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT' lines, or with
+    -- 'LINE_RASTERIZATION_MODE_DEFAULT_EXT' lines if
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@strictLines@
+    -- is 'Vulkan.Core10.BaseType.TRUE'.
+    stippledRectangularLines :: Bool
+  , -- | @stippledBresenhamLines@ indicates whether the implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>
+    -- with 'LINE_RASTERIZATION_MODE_BRESENHAM_EXT' lines.
+    stippledBresenhamLines :: Bool
+  , -- | @stippledSmoothLines@ indicates whether the implementation supports
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>
+    -- with 'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT' lines.
+    stippledSmoothLines :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceLineRasterizationFeaturesEXT
+
+instance ToCStruct PhysicalDeviceLineRasterizationFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceLineRasterizationFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (rectangularLines))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (bresenhamLines))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (smoothLines))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (stippledRectangularLines))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (stippledBresenhamLines))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (stippledSmoothLines))
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceLineRasterizationFeaturesEXT where
+  peekCStruct p = do
+    rectangularLines <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    bresenhamLines <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    smoothLines <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    stippledRectangularLines <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    stippledBresenhamLines <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    stippledSmoothLines <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    pure $ PhysicalDeviceLineRasterizationFeaturesEXT
+             (bool32ToBool rectangularLines) (bool32ToBool bresenhamLines) (bool32ToBool smoothLines) (bool32ToBool stippledRectangularLines) (bool32ToBool stippledBresenhamLines) (bool32ToBool stippledSmoothLines)
+
+instance Storable PhysicalDeviceLineRasterizationFeaturesEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceLineRasterizationFeaturesEXT where
+  zero = PhysicalDeviceLineRasterizationFeaturesEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceLineRasterizationPropertiesEXT - Structure describing
+-- line rasterization properties supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceLineRasterizationPropertiesEXT'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceLineRasterizationPropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceLineRasterizationPropertiesEXT = PhysicalDeviceLineRasterizationPropertiesEXT
+  { -- | @lineSubPixelPrecisionBits@ is the number of bits of subpixel precision
+    -- in framebuffer coordinates xf and yf when rasterizing
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines line segments>.
+    lineSubPixelPrecisionBits :: Word32 }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceLineRasterizationPropertiesEXT
+
+instance ToCStruct PhysicalDeviceLineRasterizationPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceLineRasterizationPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (lineSubPixelPrecisionBits)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceLineRasterizationPropertiesEXT where
+  peekCStruct p = do
+    lineSubPixelPrecisionBits <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ PhysicalDeviceLineRasterizationPropertiesEXT
+             lineSubPixelPrecisionBits
+
+instance Storable PhysicalDeviceLineRasterizationPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceLineRasterizationPropertiesEXT where
+  zero = PhysicalDeviceLineRasterizationPropertiesEXT
+           zero
+
+
+-- | VkPipelineRasterizationLineStateCreateInfoEXT - Structure specifying
+-- parameters of a newly created pipeline line rasterization state
+--
+-- == Valid Usage
+--
+-- -   If @lineRasterizationMode@ is
+--     'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT', then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rectangularLines rectangularLines>
+--     feature /must/ be enabled
+--
+-- -   If @lineRasterizationMode@ is
+--     'LINE_RASTERIZATION_MODE_BRESENHAM_EXT', then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bresenhamLines bresenhamLines>
+--     feature /must/ be enabled
+--
+-- -   If @lineRasterizationMode@ is
+--     'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT', then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bresenhamLines smoothLines>
+--     feature /must/ be enabled
+--
+-- -   If @stippledLineEnable@ is 'Vulkan.Core10.BaseType.TRUE' and
+--     @lineRasterizationMode@ is
+--     'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT', then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>
+--     feature /must/ be enabled
+--
+-- -   If @stippledLineEnable@ is 'Vulkan.Core10.BaseType.TRUE' and
+--     @lineRasterizationMode@ is 'LINE_RASTERIZATION_MODE_BRESENHAM_EXT',
+--     then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
+--     feature /must/ be enabled
+--
+-- -   If @stippledLineEnable@ is 'Vulkan.Core10.BaseType.TRUE' and
+--     @lineRasterizationMode@ is
+--     'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT', then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
+--     feature /must/ be enabled
+--
+-- -   If @stippledLineEnable@ is 'Vulkan.Core10.BaseType.TRUE' and
+--     @lineRasterizationMode@ is 'LINE_RASTERIZATION_MODE_DEFAULT_EXT',
+--     then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>
+--     feature /must/ be enabled and
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@strictLines@
+--     /must/ be 'Vulkan.Core10.BaseType.TRUE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT'
+--
+-- -   @lineRasterizationMode@ /must/ be a valid 'LineRasterizationModeEXT'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'LineRasterizationModeEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineRasterizationLineStateCreateInfoEXT = PipelineRasterizationLineStateCreateInfoEXT
+  { -- | @lineRasterizationMode@ is a 'LineRasterizationModeEXT' value selecting
+    -- the style of line rasterization.
+    lineRasterizationMode :: LineRasterizationModeEXT
+  , -- | @stippledLineEnable@ enables
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>.
+    stippledLineEnable :: Bool
+  , -- | @lineStippleFactor@ is the repeat factor used in stippled line
+    -- rasterization.
+    lineStippleFactor :: Word32
+  , -- | @lineStipplePattern@ is the bit pattern used in stippled line
+    -- rasterization.
+    lineStipplePattern :: Word16
+  }
+  deriving (Typeable)
+deriving instance Show PipelineRasterizationLineStateCreateInfoEXT
+
+instance ToCStruct PipelineRasterizationLineStateCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineRasterizationLineStateCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr LineRasterizationModeEXT)) (lineRasterizationMode)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (stippledLineEnable))
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (lineStippleFactor)
+    poke ((p `plusPtr` 28 :: Ptr Word16)) (lineStipplePattern)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr LineRasterizationModeEXT)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PipelineRasterizationLineStateCreateInfoEXT where
+  peekCStruct p = do
+    lineRasterizationMode <- peek @LineRasterizationModeEXT ((p `plusPtr` 16 :: Ptr LineRasterizationModeEXT))
+    stippledLineEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    lineStippleFactor <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    lineStipplePattern <- peek @Word16 ((p `plusPtr` 28 :: Ptr Word16))
+    pure $ PipelineRasterizationLineStateCreateInfoEXT
+             lineRasterizationMode (bool32ToBool stippledLineEnable) lineStippleFactor lineStipplePattern
+
+instance Storable PipelineRasterizationLineStateCreateInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineRasterizationLineStateCreateInfoEXT where
+  zero = PipelineRasterizationLineStateCreateInfoEXT
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkLineRasterizationModeEXT - Line rasterization modes
+--
+-- = See Also
+--
+-- 'PipelineRasterizationLineStateCreateInfoEXT'
+newtype LineRasterizationModeEXT = LineRasterizationModeEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'LINE_RASTERIZATION_MODE_DEFAULT_EXT' is equivalent to
+-- 'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT' if
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@strictLines@
+-- is 'Vulkan.Core10.BaseType.TRUE', otherwise lines are drawn as
+-- non-@strictLines@ parallelograms. Both of these modes are defined in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-basic Basic Line Segment Rasterization>.
+pattern LINE_RASTERIZATION_MODE_DEFAULT_EXT = LineRasterizationModeEXT 0
+-- | 'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT' specifies lines drawn as if
+-- they were rectangles extruded from the line
+pattern LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = LineRasterizationModeEXT 1
+-- | 'LINE_RASTERIZATION_MODE_BRESENHAM_EXT' specifies lines drawn by
+-- determining which pixel diamonds the line intersects and exits, as
+-- defined in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-bresenham Bresenham Line Segment Rasterization>.
+pattern LINE_RASTERIZATION_MODE_BRESENHAM_EXT = LineRasterizationModeEXT 2
+-- | 'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT' specifies lines drawn
+-- if they were rectangles extruded from the line, with alpha falloff, as
+-- defined in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-smooth Smooth Lines>.
+pattern LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = LineRasterizationModeEXT 3
+{-# complete LINE_RASTERIZATION_MODE_DEFAULT_EXT,
+             LINE_RASTERIZATION_MODE_RECTANGULAR_EXT,
+             LINE_RASTERIZATION_MODE_BRESENHAM_EXT,
+             LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT :: LineRasterizationModeEXT #-}
+
+instance Show LineRasterizationModeEXT where
+  showsPrec p = \case
+    LINE_RASTERIZATION_MODE_DEFAULT_EXT -> showString "LINE_RASTERIZATION_MODE_DEFAULT_EXT"
+    LINE_RASTERIZATION_MODE_RECTANGULAR_EXT -> showString "LINE_RASTERIZATION_MODE_RECTANGULAR_EXT"
+    LINE_RASTERIZATION_MODE_BRESENHAM_EXT -> showString "LINE_RASTERIZATION_MODE_BRESENHAM_EXT"
+    LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT -> showString "LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT"
+    LineRasterizationModeEXT x -> showParen (p >= 11) (showString "LineRasterizationModeEXT " . showsPrec 11 x)
+
+instance Read LineRasterizationModeEXT where
+  readPrec = parens (choose [("LINE_RASTERIZATION_MODE_DEFAULT_EXT", pure LINE_RASTERIZATION_MODE_DEFAULT_EXT)
+                            , ("LINE_RASTERIZATION_MODE_RECTANGULAR_EXT", pure LINE_RASTERIZATION_MODE_RECTANGULAR_EXT)
+                            , ("LINE_RASTERIZATION_MODE_BRESENHAM_EXT", pure LINE_RASTERIZATION_MODE_BRESENHAM_EXT)
+                            , ("LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT", pure LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "LineRasterizationModeEXT")
+                       v <- step readPrec
+                       pure (LineRasterizationModeEXT v)))
+
+
+type EXT_LINE_RASTERIZATION_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_LINE_RASTERIZATION_SPEC_VERSION"
+pattern EXT_LINE_RASTERIZATION_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_LINE_RASTERIZATION_SPEC_VERSION = 1
+
+
+type EXT_LINE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_line_rasterization"
+
+-- No documentation found for TopLevel "VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME"
+pattern EXT_LINE_RASTERIZATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_LINE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_line_rasterization"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_line_rasterization.hs-boot b/src/Vulkan/Extensions/VK_EXT_line_rasterization.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_line_rasterization.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_line_rasterization  ( PhysicalDeviceLineRasterizationFeaturesEXT
+                                                    , PhysicalDeviceLineRasterizationPropertiesEXT
+                                                    , PipelineRasterizationLineStateCreateInfoEXT
+                                                    ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceLineRasterizationFeaturesEXT
+
+instance ToCStruct PhysicalDeviceLineRasterizationFeaturesEXT
+instance Show PhysicalDeviceLineRasterizationFeaturesEXT
+
+instance FromCStruct PhysicalDeviceLineRasterizationFeaturesEXT
+
+
+data PhysicalDeviceLineRasterizationPropertiesEXT
+
+instance ToCStruct PhysicalDeviceLineRasterizationPropertiesEXT
+instance Show PhysicalDeviceLineRasterizationPropertiesEXT
+
+instance FromCStruct PhysicalDeviceLineRasterizationPropertiesEXT
+
+
+data PipelineRasterizationLineStateCreateInfoEXT
+
+instance ToCStruct PipelineRasterizationLineStateCreateInfoEXT
+instance Show PipelineRasterizationLineStateCreateInfoEXT
+
+instance FromCStruct PipelineRasterizationLineStateCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_memory_budget.hs b/src/Vulkan/Extensions/VK_EXT_memory_budget.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_memory_budget.hs
@@ -0,0 +1,135 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_memory_budget  ( PhysicalDeviceMemoryBudgetPropertiesEXT(..)
+                                               , EXT_MEMORY_BUDGET_SPEC_VERSION
+                                               , pattern EXT_MEMORY_BUDGET_SPEC_VERSION
+                                               , EXT_MEMORY_BUDGET_EXTENSION_NAME
+                                               , pattern EXT_MEMORY_BUDGET_EXTENSION_NAME
+                                               ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Monad (unless)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.APIConstants (MAX_MEMORY_HEAPS)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.APIConstants (pattern MAX_MEMORY_HEAPS)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT))
+-- | VkPhysicalDeviceMemoryBudgetPropertiesEXT - Structure specifying
+-- physical device memory budget and usage
+--
+-- = Description
+--
+-- The values returned in this structure are not invariant. The
+-- @heapBudget@ and @heapUsage@ values /must/ be zero for array elements
+-- greater than or equal to
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryHeapCount@.
+-- The @heapBudget@ value /must/ be non-zero for array elements less than
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryHeapCount@.
+-- The @heapBudget@ value /must/ be less than or equal to
+-- 'Vulkan.Core10.DeviceInitialization.MemoryHeap'::@size@ for each heap.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceMemoryBudgetPropertiesEXT = PhysicalDeviceMemoryBudgetPropertiesEXT
+  { -- | @heapBudget@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS'
+    -- 'Vulkan.Core10.BaseType.DeviceSize' values in which memory budgets are
+    -- returned, with one element for each memory heap. A heap’s budget is a
+    -- rough estimate of how much memory the process /can/ allocate from that
+    -- heap before allocations /may/ fail or cause performance degradation. The
+    -- budget includes any currently allocated device memory.
+    heapBudget :: Vector DeviceSize
+  , -- | @heapUsage@ is an array of 'Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS'
+    -- 'Vulkan.Core10.BaseType.DeviceSize' values in which memory usages are
+    -- returned, with one element for each memory heap. A heap’s usage is an
+    -- estimate of how much memory the process is currently using in that heap.
+    heapUsage :: Vector DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceMemoryBudgetPropertiesEXT
+
+instance ToCStruct PhysicalDeviceMemoryBudgetPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 272 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMemoryBudgetPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    unless ((Data.Vector.length $ (heapBudget)) <= MAX_MEMORY_HEAPS) $
+      throwIO $ IOError Nothing InvalidArgument "" "heapBudget is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (heapBudget)
+    unless ((Data.Vector.length $ (heapUsage)) <= MAX_MEMORY_HEAPS) $
+      throwIO $ IOError Nothing InvalidArgument "" "heapUsage is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 144 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (heapUsage)
+    f
+  cStructSize = 272
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_HEAPS) $
+      throwIO $ IOError Nothing InvalidArgument "" "heapBudget is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (mempty)
+    unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_HEAPS) $
+      throwIO $ IOError Nothing InvalidArgument "" "heapUsage is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 144 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (mempty)
+    f
+
+instance FromCStruct PhysicalDeviceMemoryBudgetPropertiesEXT where
+  peekCStruct p = do
+    heapBudget <- generateM (MAX_MEMORY_HEAPS) (\i -> peek @DeviceSize (((lowerArrayPtr @DeviceSize ((p `plusPtr` 16 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `advancePtrBytes` (8 * (i)) :: Ptr DeviceSize)))
+    heapUsage <- generateM (MAX_MEMORY_HEAPS) (\i -> peek @DeviceSize (((lowerArrayPtr @DeviceSize ((p `plusPtr` 144 :: Ptr (FixedArray MAX_MEMORY_HEAPS DeviceSize)))) `advancePtrBytes` (8 * (i)) :: Ptr DeviceSize)))
+    pure $ PhysicalDeviceMemoryBudgetPropertiesEXT
+             heapBudget heapUsage
+
+instance Storable PhysicalDeviceMemoryBudgetPropertiesEXT where
+  sizeOf ~_ = 272
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceMemoryBudgetPropertiesEXT where
+  zero = PhysicalDeviceMemoryBudgetPropertiesEXT
+           mempty
+           mempty
+
+
+type EXT_MEMORY_BUDGET_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_MEMORY_BUDGET_SPEC_VERSION"
+pattern EXT_MEMORY_BUDGET_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_MEMORY_BUDGET_SPEC_VERSION = 1
+
+
+type EXT_MEMORY_BUDGET_EXTENSION_NAME = "VK_EXT_memory_budget"
+
+-- No documentation found for TopLevel "VK_EXT_MEMORY_BUDGET_EXTENSION_NAME"
+pattern EXT_MEMORY_BUDGET_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_MEMORY_BUDGET_EXTENSION_NAME = "VK_EXT_memory_budget"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_memory_budget.hs-boot b/src/Vulkan/Extensions/VK_EXT_memory_budget.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_memory_budget.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_memory_budget  (PhysicalDeviceMemoryBudgetPropertiesEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceMemoryBudgetPropertiesEXT
+
+instance ToCStruct PhysicalDeviceMemoryBudgetPropertiesEXT
+instance Show PhysicalDeviceMemoryBudgetPropertiesEXT
+
+instance FromCStruct PhysicalDeviceMemoryBudgetPropertiesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_memory_priority.hs b/src/Vulkan/Extensions/VK_EXT_memory_priority.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_memory_priority.hs
@@ -0,0 +1,163 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_memory_priority  ( PhysicalDeviceMemoryPriorityFeaturesEXT(..)
+                                                 , MemoryPriorityAllocateInfoEXT(..)
+                                                 , EXT_MEMORY_PRIORITY_SPEC_VERSION
+                                                 , pattern EXT_MEMORY_PRIORITY_SPEC_VERSION
+                                                 , EXT_MEMORY_PRIORITY_EXTENSION_NAME
+                                                 , pattern EXT_MEMORY_PRIORITY_EXTENSION_NAME
+                                                 ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT))
+-- | VkPhysicalDeviceMemoryPriorityFeaturesEXT - Structure describing memory
+-- priority features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceMemoryPriorityFeaturesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceMemoryPriorityFeaturesEXT' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceMemoryPriorityFeaturesEXT' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceMemoryPriorityFeaturesEXT = PhysicalDeviceMemoryPriorityFeaturesEXT
+  { -- | @memoryPriority@ indicates that the implementation supports memory
+    -- priorities specified at memory allocation time via
+    -- 'MemoryPriorityAllocateInfoEXT'.
+    memoryPriority :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceMemoryPriorityFeaturesEXT
+
+instance ToCStruct PhysicalDeviceMemoryPriorityFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMemoryPriorityFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (memoryPriority))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceMemoryPriorityFeaturesEXT where
+  peekCStruct p = do
+    memoryPriority <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceMemoryPriorityFeaturesEXT
+             (bool32ToBool memoryPriority)
+
+instance Storable PhysicalDeviceMemoryPriorityFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceMemoryPriorityFeaturesEXT where
+  zero = PhysicalDeviceMemoryPriorityFeaturesEXT
+           zero
+
+
+-- | VkMemoryPriorityAllocateInfoEXT - Specify a memory allocation priority
+--
+-- = Description
+--
+-- Memory allocations with higher priority /may/ be more likely to stay in
+-- device-local memory when the system is under memory pressure.
+--
+-- If this structure is not included, it is as if the @priority@ value were
+-- @0.5@.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data MemoryPriorityAllocateInfoEXT = MemoryPriorityAllocateInfoEXT
+  { -- | @priority@ /must/ be between @0@ and @1@, inclusive
+    priority :: Float }
+  deriving (Typeable)
+deriving instance Show MemoryPriorityAllocateInfoEXT
+
+instance ToCStruct MemoryPriorityAllocateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryPriorityAllocateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (priority))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))
+    f
+
+instance FromCStruct MemoryPriorityAllocateInfoEXT where
+  peekCStruct p = do
+    priority <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
+    pure $ MemoryPriorityAllocateInfoEXT
+             ((\(CFloat a) -> a) priority)
+
+instance Storable MemoryPriorityAllocateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryPriorityAllocateInfoEXT where
+  zero = MemoryPriorityAllocateInfoEXT
+           zero
+
+
+type EXT_MEMORY_PRIORITY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_MEMORY_PRIORITY_SPEC_VERSION"
+pattern EXT_MEMORY_PRIORITY_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_MEMORY_PRIORITY_SPEC_VERSION = 1
+
+
+type EXT_MEMORY_PRIORITY_EXTENSION_NAME = "VK_EXT_memory_priority"
+
+-- No documentation found for TopLevel "VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME"
+pattern EXT_MEMORY_PRIORITY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_MEMORY_PRIORITY_EXTENSION_NAME = "VK_EXT_memory_priority"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_memory_priority.hs-boot b/src/Vulkan/Extensions/VK_EXT_memory_priority.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_memory_priority.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_memory_priority  ( MemoryPriorityAllocateInfoEXT
+                                                 , PhysicalDeviceMemoryPriorityFeaturesEXT
+                                                 ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data MemoryPriorityAllocateInfoEXT
+
+instance ToCStruct MemoryPriorityAllocateInfoEXT
+instance Show MemoryPriorityAllocateInfoEXT
+
+instance FromCStruct MemoryPriorityAllocateInfoEXT
+
+
+data PhysicalDeviceMemoryPriorityFeaturesEXT
+
+instance ToCStruct PhysicalDeviceMemoryPriorityFeaturesEXT
+instance Show PhysicalDeviceMemoryPriorityFeaturesEXT
+
+instance FromCStruct PhysicalDeviceMemoryPriorityFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_metal_surface.hs b/src/Vulkan/Extensions/VK_EXT_metal_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_metal_surface.hs
@@ -0,0 +1,236 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_metal_surface  ( createMetalSurfaceEXT
+                                               , MetalSurfaceCreateInfoEXT(..)
+                                               , MetalSurfaceCreateFlagsEXT(..)
+                                               , EXT_METAL_SURFACE_SPEC_VERSION
+                                               , pattern EXT_METAL_SURFACE_SPEC_VERSION
+                                               , EXT_METAL_SURFACE_EXTENSION_NAME
+                                               , pattern EXT_METAL_SURFACE_EXTENSION_NAME
+                                               , SurfaceKHR(..)
+                                               , CAMetalLayer
+                                               ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Extensions.WSITypes (CAMetalLayer)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateMetalSurfaceEXT))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (CAMetalLayer)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateMetalSurfaceEXT
+  :: FunPtr (Ptr Instance_T -> Ptr MetalSurfaceCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr MetalSurfaceCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateMetalSurfaceEXT - Create a VkSurfaceKHR object for CAMetalLayer
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance with which to associate the surface.
+--
+-- -   @pCreateInfo@ is a pointer to a 'MetalSurfaceCreateInfoEXT'
+--     structure specifying 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'MetalSurfaceCreateInfoEXT' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance', 'MetalSurfaceCreateInfoEXT',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+createMetalSurfaceEXT :: forall io . MonadIO io => Instance -> MetalSurfaceCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createMetalSurfaceEXT instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateMetalSurfaceEXTPtr = pVkCreateMetalSurfaceEXT (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateMetalSurfaceEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateMetalSurfaceEXT is null" Nothing Nothing
+  let vkCreateMetalSurfaceEXT' = mkVkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXTPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateMetalSurfaceEXT' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+-- | VkMetalSurfaceCreateInfoEXT - Structure specifying parameters of a newly
+-- created Metal surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'MetalSurfaceCreateFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createMetalSurfaceEXT'
+data MetalSurfaceCreateInfoEXT = MetalSurfaceCreateInfoEXT
+  { -- | @flags@ /must/ be @0@
+    flags :: MetalSurfaceCreateFlagsEXT
+  , -- | @pLayer@ is a reference to a 'Vulkan.Extensions.WSITypes.CAMetalLayer'
+    -- object representing a renderable surface.
+    layer :: Ptr CAMetalLayer
+  }
+  deriving (Typeable)
+deriving instance Show MetalSurfaceCreateInfoEXT
+
+instance ToCStruct MetalSurfaceCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MetalSurfaceCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr MetalSurfaceCreateFlagsEXT)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr CAMetalLayer))) (layer)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr CAMetalLayer))) (zero)
+    f
+
+instance FromCStruct MetalSurfaceCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @MetalSurfaceCreateFlagsEXT ((p `plusPtr` 16 :: Ptr MetalSurfaceCreateFlagsEXT))
+    pLayer <- peek @(Ptr CAMetalLayer) ((p `plusPtr` 24 :: Ptr (Ptr CAMetalLayer)))
+    pure $ MetalSurfaceCreateInfoEXT
+             flags pLayer
+
+instance Storable MetalSurfaceCreateInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MetalSurfaceCreateInfoEXT where
+  zero = MetalSurfaceCreateInfoEXT
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkMetalSurfaceCreateFlagsEXT"
+newtype MetalSurfaceCreateFlagsEXT = MetalSurfaceCreateFlagsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show MetalSurfaceCreateFlagsEXT where
+  showsPrec p = \case
+    MetalSurfaceCreateFlagsEXT x -> showParen (p >= 11) (showString "MetalSurfaceCreateFlagsEXT 0x" . showHex x)
+
+instance Read MetalSurfaceCreateFlagsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "MetalSurfaceCreateFlagsEXT")
+                       v <- step readPrec
+                       pure (MetalSurfaceCreateFlagsEXT v)))
+
+
+type EXT_METAL_SURFACE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_METAL_SURFACE_SPEC_VERSION"
+pattern EXT_METAL_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_METAL_SURFACE_SPEC_VERSION = 1
+
+
+type EXT_METAL_SURFACE_EXTENSION_NAME = "VK_EXT_metal_surface"
+
+-- No documentation found for TopLevel "VK_EXT_METAL_SURFACE_EXTENSION_NAME"
+pattern EXT_METAL_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_METAL_SURFACE_EXTENSION_NAME = "VK_EXT_metal_surface"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_metal_surface.hs-boot b/src/Vulkan/Extensions/VK_EXT_metal_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_metal_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_metal_surface  (MetalSurfaceCreateInfoEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data MetalSurfaceCreateInfoEXT
+
+instance ToCStruct MetalSurfaceCreateInfoEXT
+instance Show MetalSurfaceCreateInfoEXT
+
+instance FromCStruct MetalSurfaceCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_pci_bus_info.hs b/src/Vulkan/Extensions/VK_EXT_pci_bus_info.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_pci_bus_info.hs
@@ -0,0 +1,105 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_pci_bus_info  ( PhysicalDevicePCIBusInfoPropertiesEXT(..)
+                                              , EXT_PCI_BUS_INFO_SPEC_VERSION
+                                              , pattern EXT_PCI_BUS_INFO_SPEC_VERSION
+                                              , EXT_PCI_BUS_INFO_EXTENSION_NAME
+                                              , pattern EXT_PCI_BUS_INFO_EXTENSION_NAME
+                                              ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT))
+-- | VkPhysicalDevicePCIBusInfoPropertiesEXT - Structure containing PCI bus
+-- information of a physical device
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePCIBusInfoPropertiesEXT = PhysicalDevicePCIBusInfoPropertiesEXT
+  { -- | @pciDomain@ is the PCI bus domain.
+    pciDomain :: Word32
+  , -- | @pciBus@ is the PCI bus identifier.
+    pciBus :: Word32
+  , -- | @pciDevice@ is the PCI device identifier.
+    pciDevice :: Word32
+  , -- | @pciFunction@ is the PCI device function identifier.
+    pciFunction :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDevicePCIBusInfoPropertiesEXT
+
+instance ToCStruct PhysicalDevicePCIBusInfoPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePCIBusInfoPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (pciDomain)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (pciBus)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (pciDevice)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (pciFunction)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDevicePCIBusInfoPropertiesEXT where
+  peekCStruct p = do
+    pciDomain <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pciBus <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pciDevice <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pciFunction <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    pure $ PhysicalDevicePCIBusInfoPropertiesEXT
+             pciDomain pciBus pciDevice pciFunction
+
+instance Storable PhysicalDevicePCIBusInfoPropertiesEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePCIBusInfoPropertiesEXT where
+  zero = PhysicalDevicePCIBusInfoPropertiesEXT
+           zero
+           zero
+           zero
+           zero
+
+
+type EXT_PCI_BUS_INFO_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_PCI_BUS_INFO_SPEC_VERSION"
+pattern EXT_PCI_BUS_INFO_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_PCI_BUS_INFO_SPEC_VERSION = 2
+
+
+type EXT_PCI_BUS_INFO_EXTENSION_NAME = "VK_EXT_pci_bus_info"
+
+-- No documentation found for TopLevel "VK_EXT_PCI_BUS_INFO_EXTENSION_NAME"
+pattern EXT_PCI_BUS_INFO_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_PCI_BUS_INFO_EXTENSION_NAME = "VK_EXT_pci_bus_info"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_pci_bus_info.hs-boot b/src/Vulkan/Extensions/VK_EXT_pci_bus_info.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_pci_bus_info.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_pci_bus_info  (PhysicalDevicePCIBusInfoPropertiesEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDevicePCIBusInfoPropertiesEXT
+
+instance ToCStruct PhysicalDevicePCIBusInfoPropertiesEXT
+instance Show PhysicalDevicePCIBusInfoPropertiesEXT
+
+instance FromCStruct PhysicalDevicePCIBusInfoPropertiesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs b/src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs
@@ -0,0 +1,124 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control  ( pattern ERROR_PIPELINE_COMPILE_REQUIRED_EXT
+                                                                 , PhysicalDevicePipelineCreationCacheControlFeaturesEXT(..)
+                                                                 , EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION
+                                                                 , pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION
+                                                                 , EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME
+                                                                 , pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME
+                                                                 ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.Result (Result(PIPELINE_COMPILE_REQUIRED_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT))
+-- No documentation found for TopLevel "VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT"
+pattern ERROR_PIPELINE_COMPILE_REQUIRED_EXT = PIPELINE_COMPILE_REQUIRED_EXT
+
+
+-- | VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT - Structure
+-- describing whether pipeline cache control can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the
+-- 'PhysicalDevicePipelineCreationCacheControlFeaturesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDevicePipelineCreationCacheControlFeaturesEXT' structure
+-- is included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDevicePipelineCreationCacheControlFeaturesEXT' /can/ also be
+-- used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePipelineCreationCacheControlFeaturesEXT = PhysicalDevicePipelineCreationCacheControlFeaturesEXT
+  { -- | @pipelineCreationCacheControl@ indicates that the implementation
+    -- supports:
+    --
+    -- -   The following /can/ be used in @Vk*PipelineCreateInfo@::@flags@:
+    --
+    --     -   'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
+    --
+    --     -   'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
+    --
+    -- -   The following /can/ be used in
+    --     'Vulkan.Core10.PipelineCache.PipelineCacheCreateInfo'::@flags@:
+    --
+    --     -   'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT'
+    pipelineCreationCacheControl :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDevicePipelineCreationCacheControlFeaturesEXT
+
+instance ToCStruct PhysicalDevicePipelineCreationCacheControlFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePipelineCreationCacheControlFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (pipelineCreationCacheControl))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevicePipelineCreationCacheControlFeaturesEXT where
+  peekCStruct p = do
+    pipelineCreationCacheControl <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDevicePipelineCreationCacheControlFeaturesEXT
+             (bool32ToBool pipelineCreationCacheControl)
+
+instance Storable PhysicalDevicePipelineCreationCacheControlFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePipelineCreationCacheControlFeaturesEXT where
+  zero = PhysicalDevicePipelineCreationCacheControlFeaturesEXT
+           zero
+
+
+type EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION"
+pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION = 3
+
+
+type EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME = "VK_EXT_pipeline_creation_cache_control"
+
+-- No documentation found for TopLevel "VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME"
+pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME = "VK_EXT_pipeline_creation_cache_control"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs-boot b/src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control  (PhysicalDevicePipelineCreationCacheControlFeaturesEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDevicePipelineCreationCacheControlFeaturesEXT
+
+instance ToCStruct PhysicalDevicePipelineCreationCacheControlFeaturesEXT
+instance Show PhysicalDevicePipelineCreationCacheControlFeaturesEXT
+
+instance FromCStruct PhysicalDevicePipelineCreationCacheControlFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs b/src/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs
@@ -0,0 +1,325 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_pipeline_creation_feedback  ( PipelineCreationFeedbackEXT(..)
+                                                            , PipelineCreationFeedbackCreateInfoEXT(..)
+                                                            , PipelineCreationFeedbackFlagBitsEXT( PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT
+                                                                                                 , PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT
+                                                                                                 , PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT
+                                                                                                 , ..
+                                                                                                 )
+                                                            , PipelineCreationFeedbackFlagsEXT
+                                                            , EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION
+                                                            , pattern EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION
+                                                            , EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME
+                                                            , pattern EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME
+                                                            ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT))
+-- | VkPipelineCreationFeedbackEXT - Feedback about the creation of a
+-- pipeline or pipeline stage
+--
+-- = Description
+--
+-- If the 'PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT' is not set in @flags@,
+-- an implementation /must/ not set any other bits in @flags@, and all
+-- other 'PipelineCreationFeedbackEXT' data members are undefined.
+--
+-- = See Also
+--
+-- 'PipelineCreationFeedbackCreateInfoEXT',
+-- 'PipelineCreationFeedbackFlagBitsEXT',
+-- 'PipelineCreationFeedbackFlagsEXT'
+data PipelineCreationFeedbackEXT = PipelineCreationFeedbackEXT
+  { -- | @flags@ is a bitmask of 'PipelineCreationFeedbackFlagBitsEXT' providing
+    -- feedback about the creation of a pipeline or of a pipeline stage.
+    flags :: PipelineCreationFeedbackFlagsEXT
+  , -- | @duration@ is the duration spent creating a pipeline or pipeline stage
+    -- in nanoseconds.
+    duration :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show PipelineCreationFeedbackEXT
+
+instance ToCStruct PipelineCreationFeedbackEXT where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineCreationFeedbackEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr PipelineCreationFeedbackFlagsEXT)) (flags)
+    poke ((p `plusPtr` 8 :: Ptr Word64)) (duration)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr PipelineCreationFeedbackFlagsEXT)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct PipelineCreationFeedbackEXT where
+  peekCStruct p = do
+    flags <- peek @PipelineCreationFeedbackFlagsEXT ((p `plusPtr` 0 :: Ptr PipelineCreationFeedbackFlagsEXT))
+    duration <- peek @Word64 ((p `plusPtr` 8 :: Ptr Word64))
+    pure $ PipelineCreationFeedbackEXT
+             flags duration
+
+instance Storable PipelineCreationFeedbackEXT where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineCreationFeedbackEXT where
+  zero = PipelineCreationFeedbackEXT
+           zero
+           zero
+
+
+-- | VkPipelineCreationFeedbackCreateInfoEXT - Request for feedback about the
+-- creation of a pipeline
+--
+-- = Description
+--
+-- An implementation /should/ write pipeline creation feedback to
+-- @pPipelineCreationFeedback@ and /may/ write pipeline stage creation
+-- feedback to @pPipelineStageCreationFeedbacks@. An implementation /must/
+-- set or clear the 'PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT' in
+-- 'PipelineCreationFeedbackEXT'::@flags@ for @pPipelineCreationFeedback@
+-- and every element of @pPipelineStageCreationFeedbacks@.
+--
+-- Note
+--
+-- One common scenario for an implementation to skip per-stage feedback is
+-- when 'PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT'
+-- is set in @pPipelineCreationFeedback@.
+--
+-- When chained to
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV', or
+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo', the @i@ element of
+-- @pPipelineStageCreationFeedbacks@ corresponds to the @i@ element of
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR'::@pStages@,
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@pStages@,
+-- or 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pStages@. When
+-- chained to 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo', the first
+-- element of @pPipelineStageCreationFeedbacks@ corresponds to
+-- 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo'::@stage@.
+--
+-- == Valid Usage
+--
+-- -   When chained to 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
+--     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
+--     /must/ equal
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@stageCount@
+--
+-- -   When chained to 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
+--     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
+--     /must/ equal 1
+--
+-- -   When chained to
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
+--     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
+--     /must/ equal
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR'::@stageCount@
+--
+-- -   When chained to
+--     'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
+--     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
+--     /must/ equal
+--     'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@stageCount@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT'
+--
+-- -   @pPipelineCreationFeedback@ /must/ be a valid pointer to a
+--     'PipelineCreationFeedbackEXT' structure
+--
+-- -   @pPipelineStageCreationFeedbacks@ /must/ be a valid pointer to an
+--     array of @pipelineStageCreationFeedbackCount@
+--     'PipelineCreationFeedbackEXT' structures
+--
+-- -   @pipelineStageCreationFeedbackCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
+-- 'PipelineCreationFeedbackEXT',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineCreationFeedbackCreateInfoEXT = PipelineCreationFeedbackCreateInfoEXT
+  { -- | @pPipelineCreationFeedback@ is a pointer to a
+    -- 'PipelineCreationFeedbackEXT' structure.
+    pipelineCreationFeedback :: Ptr PipelineCreationFeedbackEXT
+  , -- | @pipelineStageCreationFeedbackCount@ is the number of elements in
+    -- @pPipelineStageCreationFeedbacks@.
+    pipelineStageCreationFeedbackCount :: Word32
+  , -- | @pPipelineStageCreationFeedbacks@ is a pointer to an array of
+    -- @pipelineStageCreationFeedbackCount@ 'PipelineCreationFeedbackEXT'
+    -- structures.
+    pipelineStageCreationFeedbacks :: Ptr PipelineCreationFeedbackEXT
+  }
+  deriving (Typeable)
+deriving instance Show PipelineCreationFeedbackCreateInfoEXT
+
+instance ToCStruct PipelineCreationFeedbackCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineCreationFeedbackCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (pipelineCreationFeedback)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (pipelineStageCreationFeedbackCount)
+    poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (pipelineStageCreationFeedbacks)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (zero)
+    f
+
+instance FromCStruct PipelineCreationFeedbackCreateInfoEXT where
+  peekCStruct p = do
+    pPipelineCreationFeedback <- peek @(Ptr PipelineCreationFeedbackEXT) ((p `plusPtr` 16 :: Ptr (Ptr PipelineCreationFeedbackEXT)))
+    pipelineStageCreationFeedbackCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pPipelineStageCreationFeedbacks <- peek @(Ptr PipelineCreationFeedbackEXT) ((p `plusPtr` 32 :: Ptr (Ptr PipelineCreationFeedbackEXT)))
+    pure $ PipelineCreationFeedbackCreateInfoEXT
+             pPipelineCreationFeedback pipelineStageCreationFeedbackCount pPipelineStageCreationFeedbacks
+
+instance Storable PipelineCreationFeedbackCreateInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineCreationFeedbackCreateInfoEXT where
+  zero = PipelineCreationFeedbackCreateInfoEXT
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineCreationFeedbackFlagBitsEXT - Bitmask specifying pipeline or
+-- pipeline stage creation feedback
+--
+-- = See Also
+--
+-- 'PipelineCreationFeedbackCreateInfoEXT', 'PipelineCreationFeedbackEXT',
+-- 'PipelineCreationFeedbackFlagsEXT'
+newtype PipelineCreationFeedbackFlagBitsEXT = PipelineCreationFeedbackFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT' indicates that the feedback
+-- information is valid.
+pattern PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = PipelineCreationFeedbackFlagBitsEXT 0x00000001
+-- | 'PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT'
+-- indicates that a readily usable pipeline or pipeline stage was found in
+-- the @pipelineCache@ specified by the application in the pipeline
+-- creation command.
+--
+-- An implementation /should/ set the
+-- 'PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT' bit
+-- if it was able to avoid the large majority of pipeline or pipeline stage
+-- creation work by using the @pipelineCache@ parameter of
+-- 'Vulkan.Core10.Pipeline.createGraphicsPipelines',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.createRayTracingPipelinesKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV', or
+-- 'Vulkan.Core10.Pipeline.createComputePipelines'. When an implementation
+-- sets this bit for the entire pipeline, it /may/ leave it unset for any
+-- stage.
+--
+-- Note
+--
+-- Implementations are encouraged to provide a meaningful signal to
+-- applications using this bit. The intention is to communicate to the
+-- application that the pipeline or pipeline stage was created \"as fast as
+-- it gets\" using the pipeline cache provided by the application. If an
+-- implementation uses an internal cache, it is discouraged from setting
+-- this bit as the feedback would be unactionable.
+pattern PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = PipelineCreationFeedbackFlagBitsEXT 0x00000002
+-- | 'PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT'
+-- indicates that the base pipeline specified by the @basePipelineHandle@
+-- or @basePipelineIndex@ member of the @Vk*PipelineCreateInfo@ structure
+-- was used to accelerate the creation of the pipeline.
+--
+-- An implementation /should/ set the
+-- 'PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT' bit if
+-- it was able to avoid a significant amount of work by using the base
+-- pipeline.
+--
+-- Note
+--
+-- While \"significant amount of work\" is subjective, implementations are
+-- encouraged to provide a meaningful signal to applications using this
+-- bit. For example, a 1% reduction in duration may not warrant setting
+-- this bit, while a 50% reduction would.
+pattern PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = PipelineCreationFeedbackFlagBitsEXT 0x00000004
+
+type PipelineCreationFeedbackFlagsEXT = PipelineCreationFeedbackFlagBitsEXT
+
+instance Show PipelineCreationFeedbackFlagBitsEXT where
+  showsPrec p = \case
+    PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT -> showString "PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT"
+    PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT -> showString "PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT"
+    PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT -> showString "PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT"
+    PipelineCreationFeedbackFlagBitsEXT x -> showParen (p >= 11) (showString "PipelineCreationFeedbackFlagBitsEXT 0x" . showHex x)
+
+instance Read PipelineCreationFeedbackFlagBitsEXT where
+  readPrec = parens (choose [("PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT", pure PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT)
+                            , ("PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT", pure PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT)
+                            , ("PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT", pure PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineCreationFeedbackFlagBitsEXT")
+                       v <- step readPrec
+                       pure (PipelineCreationFeedbackFlagBitsEXT v)))
+
+
+type EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION"
+pattern EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION = 1
+
+
+type EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME = "VK_EXT_pipeline_creation_feedback"
+
+-- No documentation found for TopLevel "VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME"
+pattern EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME = "VK_EXT_pipeline_creation_feedback"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs-boot b/src/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_pipeline_creation_feedback  ( PipelineCreationFeedbackCreateInfoEXT
+                                                            , PipelineCreationFeedbackEXT
+                                                            ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PipelineCreationFeedbackCreateInfoEXT
+
+instance ToCStruct PipelineCreationFeedbackCreateInfoEXT
+instance Show PipelineCreationFeedbackCreateInfoEXT
+
+instance FromCStruct PipelineCreationFeedbackCreateInfoEXT
+
+
+data PipelineCreationFeedbackEXT
+
+instance ToCStruct PipelineCreationFeedbackEXT
+instance Show PipelineCreationFeedbackEXT
+
+instance FromCStruct PipelineCreationFeedbackEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_post_depth_coverage.hs b/src/Vulkan/Extensions/VK_EXT_post_depth_coverage.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_post_depth_coverage.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_post_depth_coverage  ( EXT_POST_DEPTH_COVERAGE_SPEC_VERSION
+                                                     , pattern EXT_POST_DEPTH_COVERAGE_SPEC_VERSION
+                                                     , EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME
+                                                     , pattern EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME
+                                                     ) where
+
+import Data.String (IsString)
+
+type EXT_POST_DEPTH_COVERAGE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION"
+pattern EXT_POST_DEPTH_COVERAGE_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_POST_DEPTH_COVERAGE_SPEC_VERSION = 1
+
+
+type EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME = "VK_EXT_post_depth_coverage"
+
+-- No documentation found for TopLevel "VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME"
+pattern EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME = "VK_EXT_post_depth_coverage"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_private_data.hs b/src/Vulkan/Extensions/VK_EXT_private_data.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_private_data.hs
@@ -0,0 +1,512 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_private_data  ( createPrivateDataSlotEXT
+                                              , withPrivateDataSlotEXT
+                                              , destroyPrivateDataSlotEXT
+                                              , setPrivateDataEXT
+                                              , getPrivateDataEXT
+                                              , DevicePrivateDataCreateInfoEXT(..)
+                                              , PrivateDataSlotCreateInfoEXT(..)
+                                              , PhysicalDevicePrivateDataFeaturesEXT(..)
+                                              , PrivateDataSlotCreateFlagBitsEXT(..)
+                                              , PrivateDataSlotCreateFlagsEXT
+                                              , EXT_PRIVATE_DATA_SPEC_VERSION
+                                              , pattern EXT_PRIVATE_DATA_SPEC_VERSION
+                                              , EXT_PRIVATE_DATA_EXTENSION_NAME
+                                              , pattern EXT_PRIVATE_DATA_EXTENSION_NAME
+                                              , PrivateDataSlotEXT(..)
+                                              ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreatePrivateDataSlotEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyPrivateDataSlotEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkGetPrivateDataEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkSetPrivateDataEXT))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ObjectType (ObjectType)
+import Vulkan.Core10.Enums.ObjectType (ObjectType(..))
+import Vulkan.Extensions.Handles (PrivateDataSlotEXT)
+import Vulkan.Extensions.Handles (PrivateDataSlotEXT(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (PrivateDataSlotEXT(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreatePrivateDataSlotEXT
+  :: FunPtr (Ptr Device_T -> Ptr PrivateDataSlotCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr PrivateDataSlotEXT -> IO Result) -> Ptr Device_T -> Ptr PrivateDataSlotCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr PrivateDataSlotEXT -> IO Result
+
+-- | vkCreatePrivateDataSlotEXT - Create a slot for private data storage
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device associated with the creation of the
+--     object(s) holding the private data slot.
+--
+-- -   @pCreateInfo@ is a pointer to a 'PrivateDataSlotCreateInfoEXT'
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pPrivateDataSlot@ is a pointer to a
+--     'Vulkan.Extensions.Handles.PrivateDataSlotEXT' handle in which the
+--     resulting private data slot is returned
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'PrivateDataSlotCreateInfoEXT' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pPrivateDataSlot@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.PrivateDataSlotEXT' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'PrivateDataSlotCreateInfoEXT',
+-- 'Vulkan.Extensions.Handles.PrivateDataSlotEXT'
+createPrivateDataSlotEXT :: forall io . MonadIO io => Device -> PrivateDataSlotCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (PrivateDataSlotEXT)
+createPrivateDataSlotEXT device createInfo allocator = liftIO . evalContT $ do
+  let vkCreatePrivateDataSlotEXTPtr = pVkCreatePrivateDataSlotEXT (deviceCmds (device :: Device))
+  lift $ unless (vkCreatePrivateDataSlotEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreatePrivateDataSlotEXT is null" Nothing Nothing
+  let vkCreatePrivateDataSlotEXT' = mkVkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXTPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPPrivateDataSlot <- ContT $ bracket (callocBytes @PrivateDataSlotEXT 8) free
+  r <- lift $ vkCreatePrivateDataSlotEXT' (deviceHandle (device)) pCreateInfo pAllocator (pPPrivateDataSlot)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPrivateDataSlot <- lift $ peek @PrivateDataSlotEXT pPPrivateDataSlot
+  pure $ (pPrivateDataSlot)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createPrivateDataSlotEXT' and 'destroyPrivateDataSlotEXT'
+--
+-- To ensure that 'destroyPrivateDataSlotEXT' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withPrivateDataSlotEXT :: forall io r . MonadIO io => Device -> PrivateDataSlotCreateInfoEXT -> Maybe AllocationCallbacks -> (io (PrivateDataSlotEXT) -> ((PrivateDataSlotEXT) -> io ()) -> r) -> r
+withPrivateDataSlotEXT device pCreateInfo pAllocator b =
+  b (createPrivateDataSlotEXT device pCreateInfo pAllocator)
+    (\(o0) -> destroyPrivateDataSlotEXT device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyPrivateDataSlotEXT
+  :: FunPtr (Ptr Device_T -> PrivateDataSlotEXT -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> PrivateDataSlotEXT -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyPrivateDataSlotEXT - Destroy a private data slot
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device associated with the creation of the
+--     object(s) holding the private data slot.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @privateDataSlot@ is the private data slot to destroy.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Extensions.Handles.PrivateDataSlotEXT'
+destroyPrivateDataSlotEXT :: forall io . MonadIO io => Device -> PrivateDataSlotEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyPrivateDataSlotEXT device privateDataSlot allocator = liftIO . evalContT $ do
+  let vkDestroyPrivateDataSlotEXTPtr = pVkDestroyPrivateDataSlotEXT (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyPrivateDataSlotEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyPrivateDataSlotEXT is null" Nothing Nothing
+  let vkDestroyPrivateDataSlotEXT' = mkVkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXTPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyPrivateDataSlotEXT' (deviceHandle (device)) (privateDataSlot) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkSetPrivateDataEXT
+  :: FunPtr (Ptr Device_T -> ObjectType -> Word64 -> PrivateDataSlotEXT -> Word64 -> IO Result) -> Ptr Device_T -> ObjectType -> Word64 -> PrivateDataSlotEXT -> Word64 -> IO Result
+
+-- | vkSetPrivateDataEXT - Associate data with a Vulkan object
+--
+-- = Parameters
+--
+-- -   @device@ is the device that created the object.
+--
+-- -   @objectType@ is a 'Vulkan.Core10.Enums.ObjectType.ObjectType'
+--     specifying the type of object to associate data with.
+--
+-- -   @objectHandle@ is a handle to the object to associate data with.
+--
+-- -   @privateDataSlot@ is a handle to a
+--     'Vulkan.Extensions.Handles.PrivateDataSlotEXT' specifying location
+--     of private data storage.
+--
+-- -   @data@ is user defined data to associate the object with. This data
+--     will be stored at @privateDataSlot@.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core10.Enums.ObjectType.ObjectType',
+-- 'Vulkan.Extensions.Handles.PrivateDataSlotEXT'
+setPrivateDataEXT :: forall io . MonadIO io => Device -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlotEXT -> ("data" ::: Word64) -> io ()
+setPrivateDataEXT device objectType objectHandle privateDataSlot data' = liftIO $ do
+  let vkSetPrivateDataEXTPtr = pVkSetPrivateDataEXT (deviceCmds (device :: Device))
+  unless (vkSetPrivateDataEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkSetPrivateDataEXT is null" Nothing Nothing
+  let vkSetPrivateDataEXT' = mkVkSetPrivateDataEXT vkSetPrivateDataEXTPtr
+  r <- vkSetPrivateDataEXT' (deviceHandle (device)) (objectType) (objectHandle) (privateDataSlot) (data')
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPrivateDataEXT
+  :: FunPtr (Ptr Device_T -> ObjectType -> Word64 -> PrivateDataSlotEXT -> Ptr Word64 -> IO ()) -> Ptr Device_T -> ObjectType -> Word64 -> PrivateDataSlotEXT -> Ptr Word64 -> IO ()
+
+-- | vkGetPrivateDataEXT - Retrieve data associated with a Vulkan object
+--
+-- = Parameters
+--
+-- -   @device@ is the device that created the object
+--
+-- -   @objectType@ is a 'Vulkan.Core10.Enums.ObjectType.ObjectType'
+--     specifying the type of object data is associated with.
+--
+-- -   @objectHandle@ is a handle to the object data is associated with.
+--
+-- -   @privateDataSlot@ is a handle to a
+--     'Vulkan.Extensions.Handles.PrivateDataSlotEXT' specifying location
+--     of private data pointer storage.
+--
+-- -   @pData@ is a pointer to specify where user data is returned. @0@
+--     will be written in the absence of a previous call to
+--     'setPrivateDataEXT' using the object specified by @objectHandle@.
+--
+-- = Description
+--
+-- Note
+--
+-- Due to platform details on Android, implementations might not be able to
+-- reliably return @0@ from calls to 'getPrivateDataEXT' for
+-- 'Vulkan.Extensions.Handles.SwapchainKHR' objects on which
+-- 'setPrivateDataEXT' has not previously been called. This erratum is
+-- exclusive to the Android platform and objects of type
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core10.Enums.ObjectType.ObjectType',
+-- 'Vulkan.Extensions.Handles.PrivateDataSlotEXT'
+getPrivateDataEXT :: forall io . MonadIO io => Device -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlotEXT -> io (("data" ::: Word64))
+getPrivateDataEXT device objectType objectHandle privateDataSlot = liftIO . evalContT $ do
+  let vkGetPrivateDataEXTPtr = pVkGetPrivateDataEXT (deviceCmds (device :: Device))
+  lift $ unless (vkGetPrivateDataEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPrivateDataEXT is null" Nothing Nothing
+  let vkGetPrivateDataEXT' = mkVkGetPrivateDataEXT vkGetPrivateDataEXTPtr
+  pPData <- ContT $ bracket (callocBytes @Word64 8) free
+  lift $ vkGetPrivateDataEXT' (deviceHandle (device)) (objectType) (objectHandle) (privateDataSlot) (pPData)
+  pData <- lift $ peek @Word64 pPData
+  pure $ (pData)
+
+
+-- | VkDevicePrivateDataCreateInfoEXT - Reserve private data slots
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DevicePrivateDataCreateInfoEXT = DevicePrivateDataCreateInfoEXT
+  { -- | @privateDataSlotRequestCount@ is the amount of slots to reserve.
+    privateDataSlotRequestCount :: Word32 }
+  deriving (Typeable)
+deriving instance Show DevicePrivateDataCreateInfoEXT
+
+instance ToCStruct DevicePrivateDataCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DevicePrivateDataCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (privateDataSlotRequestCount)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DevicePrivateDataCreateInfoEXT where
+  peekCStruct p = do
+    privateDataSlotRequestCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ DevicePrivateDataCreateInfoEXT
+             privateDataSlotRequestCount
+
+instance Storable DevicePrivateDataCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DevicePrivateDataCreateInfoEXT where
+  zero = DevicePrivateDataCreateInfoEXT
+           zero
+
+
+-- | VkPrivateDataSlotCreateInfoEXT - Structure specifying the parameters of
+-- private data slot construction
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PrivateDataSlotCreateFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createPrivateDataSlotEXT'
+data PrivateDataSlotCreateInfoEXT = PrivateDataSlotCreateInfoEXT
+  { -- | @flags@ /must/ be @0@
+    flags :: PrivateDataSlotCreateFlagsEXT }
+  deriving (Typeable)
+deriving instance Show PrivateDataSlotCreateInfoEXT
+
+instance ToCStruct PrivateDataSlotCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PrivateDataSlotCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PrivateDataSlotCreateFlagsEXT)) (flags)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PrivateDataSlotCreateFlagsEXT)) (zero)
+    f
+
+instance FromCStruct PrivateDataSlotCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @PrivateDataSlotCreateFlagsEXT ((p `plusPtr` 16 :: Ptr PrivateDataSlotCreateFlagsEXT))
+    pure $ PrivateDataSlotCreateInfoEXT
+             flags
+
+instance Storable PrivateDataSlotCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PrivateDataSlotCreateInfoEXT where
+  zero = PrivateDataSlotCreateInfoEXT
+           zero
+
+
+-- | VkPhysicalDevicePrivateDataFeaturesEXT - Structure specifying physical
+-- device support
+--
+-- = Members
+--
+-- The members of the 'PhysicalDevicePrivateDataFeaturesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDevicePrivateDataFeaturesEXT' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDevicePrivateDataFeaturesEXT' /can/ also be used in the @pNext@
+-- chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePrivateDataFeaturesEXT = PhysicalDevicePrivateDataFeaturesEXT
+  { -- | @privateData@ indicates whether the implementation supports private
+    -- data. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#private-data Private Data>.
+    privateData :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDevicePrivateDataFeaturesEXT
+
+instance ToCStruct PhysicalDevicePrivateDataFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePrivateDataFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (privateData))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevicePrivateDataFeaturesEXT where
+  peekCStruct p = do
+    privateData <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDevicePrivateDataFeaturesEXT
+             (bool32ToBool privateData)
+
+instance Storable PhysicalDevicePrivateDataFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePrivateDataFeaturesEXT where
+  zero = PhysicalDevicePrivateDataFeaturesEXT
+           zero
+
+
+-- | VkPrivateDataSlotCreateFlagBitsEXT - Bitmask specifying additional
+-- parameters for private data slot creation
+--
+-- = See Also
+--
+-- 'PrivateDataSlotCreateFlagsEXT'
+newtype PrivateDataSlotCreateFlagBitsEXT = PrivateDataSlotCreateFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+type PrivateDataSlotCreateFlagsEXT = PrivateDataSlotCreateFlagBitsEXT
+
+instance Show PrivateDataSlotCreateFlagBitsEXT where
+  showsPrec p = \case
+    PrivateDataSlotCreateFlagBitsEXT x -> showParen (p >= 11) (showString "PrivateDataSlotCreateFlagBitsEXT 0x" . showHex x)
+
+instance Read PrivateDataSlotCreateFlagBitsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PrivateDataSlotCreateFlagBitsEXT")
+                       v <- step readPrec
+                       pure (PrivateDataSlotCreateFlagBitsEXT v)))
+
+
+type EXT_PRIVATE_DATA_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_PRIVATE_DATA_SPEC_VERSION"
+pattern EXT_PRIVATE_DATA_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_PRIVATE_DATA_SPEC_VERSION = 1
+
+
+type EXT_PRIVATE_DATA_EXTENSION_NAME = "VK_EXT_private_data"
+
+-- No documentation found for TopLevel "VK_EXT_PRIVATE_DATA_EXTENSION_NAME"
+pattern EXT_PRIVATE_DATA_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_PRIVATE_DATA_EXTENSION_NAME = "VK_EXT_private_data"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_private_data.hs-boot b/src/Vulkan/Extensions/VK_EXT_private_data.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_private_data.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_private_data  ( DevicePrivateDataCreateInfoEXT
+                                              , PhysicalDevicePrivateDataFeaturesEXT
+                                              , PrivateDataSlotCreateInfoEXT
+                                              ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DevicePrivateDataCreateInfoEXT
+
+instance ToCStruct DevicePrivateDataCreateInfoEXT
+instance Show DevicePrivateDataCreateInfoEXT
+
+instance FromCStruct DevicePrivateDataCreateInfoEXT
+
+
+data PhysicalDevicePrivateDataFeaturesEXT
+
+instance ToCStruct PhysicalDevicePrivateDataFeaturesEXT
+instance Show PhysicalDevicePrivateDataFeaturesEXT
+
+instance FromCStruct PhysicalDevicePrivateDataFeaturesEXT
+
+
+data PrivateDataSlotCreateInfoEXT
+
+instance ToCStruct PrivateDataSlotCreateInfoEXT
+instance Show PrivateDataSlotCreateInfoEXT
+
+instance FromCStruct PrivateDataSlotCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_queue_family_foreign.hs b/src/Vulkan/Extensions/VK_EXT_queue_family_foreign.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_queue_family_foreign.hs
@@ -0,0 +1,25 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_queue_family_foreign  ( EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION
+                                                      , pattern EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION
+                                                      , EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME
+                                                      , pattern EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME
+                                                      , QUEUE_FAMILY_FOREIGN_EXT
+                                                      , pattern QUEUE_FAMILY_FOREIGN_EXT
+                                                      ) where
+
+import Data.String (IsString)
+import Vulkan.Core10.APIConstants (QUEUE_FAMILY_FOREIGN_EXT)
+import Vulkan.Core10.APIConstants (pattern QUEUE_FAMILY_FOREIGN_EXT)
+type EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION"
+pattern EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION = 1
+
+
+type EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME = "VK_EXT_queue_family_foreign"
+
+-- No documentation found for TopLevel "VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME"
+pattern EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME = "VK_EXT_queue_family_foreign"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_robustness2.hs b/src/Vulkan/Extensions/VK_EXT_robustness2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_robustness2.hs
@@ -0,0 +1,223 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_robustness2  ( PhysicalDeviceRobustness2FeaturesEXT(..)
+                                             , PhysicalDeviceRobustness2PropertiesEXT(..)
+                                             , EXT_ROBUSTNESS_2_SPEC_VERSION
+                                             , pattern EXT_ROBUSTNESS_2_SPEC_VERSION
+                                             , EXT_ROBUSTNESS_2_EXTENSION_NAME
+                                             , pattern EXT_ROBUSTNESS_2_EXTENSION_NAME
+                                             ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT))
+-- | VkPhysicalDeviceRobustness2FeaturesEXT - Structure describing the
+-- out-of-bounds behavior for an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceRobustness2FeaturesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- -   @robustBufferAccess2@ indicates whether buffer accesses are tightly
+--     bounds-checked against the range of the descriptor. Uniform buffers
+--     /must/ be bounds-checked to the range of the descriptor, where the
+--     range is rounded up to a multiple of
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>.
+--     Storage buffers /must/ be bounds-checked to the range of the
+--     descriptor, where the range is rounded up to a multiple of
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>.
+--     Out of bounds buffer loads will return zero values, and formatted
+--     loads will have (0,0,1) values inserted for missing G, B, or A
+--     components based on the format.
+--
+-- -   @robustImageAccess2@ indicates whether image accesses are tightly
+--     bounds-checked against the dimensions of the image view. Out of
+--     bounds image loads will return zero values, with (0,0,1) values
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-conversion-to-rgba inserted for missing G, B, or A components>
+--     based on the format.
+--
+-- -   @nullDescriptor@ indicates whether descriptors /can/ be written with
+--     a 'Vulkan.Core10.APIConstants.NULL_HANDLE' resource or view, which
+--     are considered valid to access and act as if the descriptor were
+--     bound to nothing.
+--
+-- If the 'PhysicalDeviceRobustness2FeaturesEXT' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+--
+-- == Valid Usage
+--
+-- -   If @robustBufferAccess2@ is enabled then
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
+--     /must/ also be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceRobustness2FeaturesEXT = PhysicalDeviceRobustness2FeaturesEXT
+  { -- No documentation found for Nested "VkPhysicalDeviceRobustness2FeaturesEXT" "robustBufferAccess2"
+    robustBufferAccess2 :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRobustness2FeaturesEXT" "robustImageAccess2"
+    robustImageAccess2 :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRobustness2FeaturesEXT" "nullDescriptor"
+    nullDescriptor :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceRobustness2FeaturesEXT
+
+instance ToCStruct PhysicalDeviceRobustness2FeaturesEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceRobustness2FeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (robustBufferAccess2))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (robustImageAccess2))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (nullDescriptor))
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceRobustness2FeaturesEXT where
+  peekCStruct p = do
+    robustBufferAccess2 <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    robustImageAccess2 <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    nullDescriptor <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    pure $ PhysicalDeviceRobustness2FeaturesEXT
+             (bool32ToBool robustBufferAccess2) (bool32ToBool robustImageAccess2) (bool32ToBool nullDescriptor)
+
+instance Storable PhysicalDeviceRobustness2FeaturesEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceRobustness2FeaturesEXT where
+  zero = PhysicalDeviceRobustness2FeaturesEXT
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceRobustness2PropertiesEXT - Structure describing robust
+-- buffer access properties supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceRobustness2PropertiesEXT' structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceRobustness2PropertiesEXT' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceRobustness2PropertiesEXT = PhysicalDeviceRobustness2PropertiesEXT
+  { -- | @robustStorageBufferAccessSizeAlignment@ is the number of bytes that the
+    -- range of a storage buffer descriptor is rounded up to when used for
+    -- bounds-checking when
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    -- is enabled. This value is either 1 or 4.
+    robustStorageBufferAccessSizeAlignment :: DeviceSize
+  , -- | @robustUniformBufferAccessSizeAlignment@ is the number of bytes that the
+    -- range of a uniform buffer descriptor is rounded up to when used for
+    -- bounds-checking when
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
+    -- is enabled. This value is a power of two in the range [1, 256].
+    robustUniformBufferAccessSizeAlignment :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceRobustness2PropertiesEXT
+
+instance ToCStruct PhysicalDeviceRobustness2PropertiesEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceRobustness2PropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (robustStorageBufferAccessSizeAlignment)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (robustUniformBufferAccessSizeAlignment)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceRobustness2PropertiesEXT where
+  peekCStruct p = do
+    robustStorageBufferAccessSizeAlignment <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    robustUniformBufferAccessSizeAlignment <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    pure $ PhysicalDeviceRobustness2PropertiesEXT
+             robustStorageBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment
+
+instance Storable PhysicalDeviceRobustness2PropertiesEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceRobustness2PropertiesEXT where
+  zero = PhysicalDeviceRobustness2PropertiesEXT
+           zero
+           zero
+
+
+type EXT_ROBUSTNESS_2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_ROBUSTNESS_2_SPEC_VERSION"
+pattern EXT_ROBUSTNESS_2_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_ROBUSTNESS_2_SPEC_VERSION = 1
+
+
+type EXT_ROBUSTNESS_2_EXTENSION_NAME = "VK_EXT_robustness2"
+
+-- No documentation found for TopLevel "VK_EXT_ROBUSTNESS_2_EXTENSION_NAME"
+pattern EXT_ROBUSTNESS_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_ROBUSTNESS_2_EXTENSION_NAME = "VK_EXT_robustness2"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_robustness2.hs-boot b/src/Vulkan/Extensions/VK_EXT_robustness2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_robustness2.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_robustness2  ( PhysicalDeviceRobustness2FeaturesEXT
+                                             , PhysicalDeviceRobustness2PropertiesEXT
+                                             ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceRobustness2FeaturesEXT
+
+instance ToCStruct PhysicalDeviceRobustness2FeaturesEXT
+instance Show PhysicalDeviceRobustness2FeaturesEXT
+
+instance FromCStruct PhysicalDeviceRobustness2FeaturesEXT
+
+
+data PhysicalDeviceRobustness2PropertiesEXT
+
+instance ToCStruct PhysicalDeviceRobustness2PropertiesEXT
+instance Show PhysicalDeviceRobustness2PropertiesEXT
+
+instance FromCStruct PhysicalDeviceRobustness2PropertiesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_sample_locations.hs b/src/Vulkan/Extensions/VK_EXT_sample_locations.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_sample_locations.hs
@@ -0,0 +1,781 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_sample_locations  ( cmdSetSampleLocationsEXT
+                                                  , getPhysicalDeviceMultisamplePropertiesEXT
+                                                  , SampleLocationEXT(..)
+                                                  , SampleLocationsInfoEXT(..)
+                                                  , AttachmentSampleLocationsEXT(..)
+                                                  , SubpassSampleLocationsEXT(..)
+                                                  , RenderPassSampleLocationsBeginInfoEXT(..)
+                                                  , PipelineSampleLocationsStateCreateInfoEXT(..)
+                                                  , PhysicalDeviceSampleLocationsPropertiesEXT(..)
+                                                  , MultisamplePropertiesEXT(..)
+                                                  , EXT_SAMPLE_LOCATIONS_SPEC_VERSION
+                                                  , pattern EXT_SAMPLE_LOCATIONS_SPEC_VERSION
+                                                  , EXT_SAMPLE_LOCATIONS_EXTENSION_NAME
+                                                  , pattern EXT_SAMPLE_LOCATIONS_EXTENSION_NAME
+                                                  ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetSampleLocationsEXT))
+import Vulkan.Core10.SharedTypes (Extent2D)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceMultisamplePropertiesEXT))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits(..))
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetSampleLocationsEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr SampleLocationsInfoEXT -> IO ()) -> Ptr CommandBuffer_T -> Ptr SampleLocationsInfoEXT -> IO ()
+
+-- | vkCmdSetSampleLocationsEXT - Set the dynamic sample locations state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pSampleLocationsInfo@ is the sample locations state to set.
+--
+-- == Valid Usage
+--
+-- -   The @sampleLocationsPerPixel@ member of @pSampleLocationsInfo@
+--     /must/ equal the @rasterizationSamples@ member of the
+--     'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'
+--     structure the bound graphics pipeline has been created with
+--
+-- -   If
+--     'PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
+--     is 'Vulkan.Core10.BaseType.FALSE' then the current render pass
+--     /must/ have been begun by specifying a
+--     'RenderPassSampleLocationsBeginInfoEXT' structure whose
+--     @pPostSubpassSampleLocations@ member contains an element with a
+--     @subpassIndex@ matching the current subpass index and the
+--     @sampleLocationsInfo@ member of that element /must/ match the sample
+--     locations state pointed to by @pSampleLocationsInfo@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pSampleLocationsInfo@ /must/ be a valid pointer to a valid
+--     'SampleLocationsInfoEXT' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'SampleLocationsInfoEXT'
+cmdSetSampleLocationsEXT :: forall io . MonadIO io => CommandBuffer -> SampleLocationsInfoEXT -> io ()
+cmdSetSampleLocationsEXT commandBuffer sampleLocationsInfo = liftIO . evalContT $ do
+  let vkCmdSetSampleLocationsEXTPtr = pVkCmdSetSampleLocationsEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetSampleLocationsEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetSampleLocationsEXT is null" Nothing Nothing
+  let vkCmdSetSampleLocationsEXT' = mkVkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXTPtr
+  pSampleLocationsInfo <- ContT $ withCStruct (sampleLocationsInfo)
+  lift $ vkCmdSetSampleLocationsEXT' (commandBufferHandle (commandBuffer)) pSampleLocationsInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceMultisamplePropertiesEXT
+  :: FunPtr (Ptr PhysicalDevice_T -> SampleCountFlagBits -> Ptr MultisamplePropertiesEXT -> IO ()) -> Ptr PhysicalDevice_T -> SampleCountFlagBits -> Ptr MultisamplePropertiesEXT -> IO ()
+
+-- | vkGetPhysicalDeviceMultisamplePropertiesEXT - Report sample count
+-- specific multisampling capabilities of a physical device
+--
+-- = 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
+--     'MultisamplePropertiesEXT' structure in which information about the
+--     additional multisampling capabilities specific to the sample count
+--     is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'MultisamplePropertiesEXT', 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'
+getPhysicalDeviceMultisamplePropertiesEXT :: forall io . MonadIO io => PhysicalDevice -> ("samples" ::: SampleCountFlagBits) -> io (MultisamplePropertiesEXT)
+getPhysicalDeviceMultisamplePropertiesEXT physicalDevice samples = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceMultisamplePropertiesEXTPtr = pVkGetPhysicalDeviceMultisamplePropertiesEXT (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceMultisamplePropertiesEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceMultisamplePropertiesEXT is null" Nothing Nothing
+  let vkGetPhysicalDeviceMultisamplePropertiesEXT' = mkVkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXTPtr
+  pPMultisampleProperties <- ContT (withZeroCStruct @MultisamplePropertiesEXT)
+  lift $ vkGetPhysicalDeviceMultisamplePropertiesEXT' (physicalDeviceHandle (physicalDevice)) (samples) (pPMultisampleProperties)
+  pMultisampleProperties <- lift $ peekCStruct @MultisamplePropertiesEXT pPMultisampleProperties
+  pure $ (pMultisampleProperties)
+
+
+-- | VkSampleLocationEXT - Structure specifying the coordinates of a sample
+-- location
+--
+-- = 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 'SampleLocationEXT' structure are always
+-- clamped to the implementation-dependent sample location coordinate range
+-- [@sampleLocationCoordinateRange@[0],@sampleLocationCoordinateRange@[1]]
+-- that /can/ be queried by adding a
+-- 'PhysicalDeviceSampleLocationsPropertiesEXT' structure to the @pNext@
+-- chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'.
+--
+-- = See Also
+--
+-- 'SampleLocationsInfoEXT'
+data SampleLocationEXT = SampleLocationEXT
+  { -- | @x@ is the horizontal coordinate of the sample’s location.
+    x :: Float
+  , -- | @y@ is the vertical coordinate of the sample’s location.
+    y :: Float
+  }
+  deriving (Typeable)
+deriving instance Show SampleLocationEXT
+
+instance ToCStruct SampleLocationEXT where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SampleLocationEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (x))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (y))
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
+    f
+
+instance FromCStruct SampleLocationEXT where
+  peekCStruct p = do
+    x <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
+    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
+    pure $ SampleLocationEXT
+             ((\(CFloat a) -> a) x) ((\(CFloat a) -> a) y)
+
+instance Storable SampleLocationEXT where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SampleLocationEXT where
+  zero = SampleLocationEXT
+           zero
+           zero
+
+
+-- | VkSampleLocationsInfoEXT - Structure specifying a set of sample
+-- locations
+--
+-- = 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
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.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].
+--
+-- If the render pass has a fragment density map, the implementation will
+-- choose the sample locations for the fragment and the contents of
+-- @pSampleLocations@ /may/ be ignored.
+--
+-- == Valid Usage
+--
+-- -   @sampleLocationsPerPixel@ /must/ be a bit value that is set in
+--     'PhysicalDeviceSampleLocationsPropertiesEXT'::@sampleLocationSampleCounts@
+--
+-- -   @sampleLocationsCount@ /must/ equal @sampleLocationsPerPixel@ ×
+--     @sampleLocationGridSize.width@ × @sampleLocationGridSize.height@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT'
+--
+-- -   If @sampleLocationsPerPixel@ is not @0@, @sampleLocationsPerPixel@
+--     /must/ be a valid
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
+--
+-- -   If @sampleLocationsCount@ is not @0@, @pSampleLocations@ /must/ be a
+--     valid pointer to an array of @sampleLocationsCount@
+--     'SampleLocationEXT' structures
+--
+-- = See Also
+--
+-- 'AttachmentSampleLocationsEXT', 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'PipelineSampleLocationsStateCreateInfoEXT',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
+-- 'SampleLocationEXT', 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'SubpassSampleLocationsEXT', 'cmdSetSampleLocationsEXT'
+data SampleLocationsInfoEXT = SampleLocationsInfoEXT
+  { -- | @sampleLocationsPerPixel@ is a
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' specifying
+    -- the number of sample locations per pixel.
+    sampleLocationsPerPixel :: SampleCountFlagBits
+  , -- | @sampleLocationGridSize@ is the size of the sample location grid to
+    -- select custom sample locations for.
+    sampleLocationGridSize :: Extent2D
+  , -- | @pSampleLocations@ is a pointer to an array of @sampleLocationsCount@
+    -- 'SampleLocationEXT' structures.
+    sampleLocations :: Vector SampleLocationEXT
+  }
+  deriving (Typeable)
+deriving instance Show SampleLocationsInfoEXT
+
+instance ToCStruct SampleLocationsInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SampleLocationsInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr SampleCountFlagBits)) (sampleLocationsPerPixel)
+    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (sampleLocationGridSize) . ($ ())
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (sampleLocations)) :: Word32))
+    pPSampleLocations' <- ContT $ allocaBytesAligned @SampleLocationEXT ((Data.Vector.length (sampleLocations)) * 8) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSampleLocations' `plusPtr` (8 * (i)) :: Ptr SampleLocationEXT) (e) . ($ ())) (sampleLocations)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SampleLocationEXT))) (pPSampleLocations')
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (zero) . ($ ())
+    pPSampleLocations' <- ContT $ allocaBytesAligned @SampleLocationEXT ((Data.Vector.length (mempty)) * 8) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSampleLocations' `plusPtr` (8 * (i)) :: Ptr SampleLocationEXT) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SampleLocationEXT))) (pPSampleLocations')
+    lift $ f
+
+instance FromCStruct SampleLocationsInfoEXT where
+  peekCStruct p = do
+    sampleLocationsPerPixel <- peek @SampleCountFlagBits ((p `plusPtr` 16 :: Ptr SampleCountFlagBits))
+    sampleLocationGridSize <- peekCStruct @Extent2D ((p `plusPtr` 20 :: Ptr Extent2D))
+    sampleLocationsCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    pSampleLocations <- peek @(Ptr SampleLocationEXT) ((p `plusPtr` 32 :: Ptr (Ptr SampleLocationEXT)))
+    pSampleLocations' <- generateM (fromIntegral sampleLocationsCount) (\i -> peekCStruct @SampleLocationEXT ((pSampleLocations `advancePtrBytes` (8 * (i)) :: Ptr SampleLocationEXT)))
+    pure $ SampleLocationsInfoEXT
+             sampleLocationsPerPixel sampleLocationGridSize pSampleLocations'
+
+instance Zero SampleLocationsInfoEXT where
+  zero = SampleLocationsInfoEXT
+           zero
+           zero
+           mempty
+
+
+-- | VkAttachmentSampleLocationsEXT - Structure specifying the sample
+-- locations state to use in the initial layout transition of attachments
+--
+-- = Description
+--
+-- If the image referenced by the framebuffer attachment at index
+-- @attachmentIndex@ was not created with
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+-- then the values specified in @sampleLocationsInfo@ are ignored.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'RenderPassSampleLocationsBeginInfoEXT', 'SampleLocationsInfoEXT'
+data AttachmentSampleLocationsEXT = AttachmentSampleLocationsEXT
+  { -- | @attachmentIndex@ /must/ be less than the @attachmentCount@ specified in
+    -- 'Vulkan.Core10.Pass.RenderPassCreateInfo' the render pass specified by
+    -- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderPass@
+    -- was created with
+    attachmentIndex :: Word32
+  , -- | @sampleLocationsInfo@ /must/ be a valid 'SampleLocationsInfoEXT'
+    -- structure
+    sampleLocationsInfo :: SampleLocationsInfoEXT
+  }
+  deriving (Typeable)
+deriving instance Show AttachmentSampleLocationsEXT
+
+instance ToCStruct AttachmentSampleLocationsEXT where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AttachmentSampleLocationsEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (attachmentIndex)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT)) (sampleLocationsInfo) . ($ ())
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct AttachmentSampleLocationsEXT where
+  peekCStruct p = do
+    attachmentIndex <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    sampleLocationsInfo <- peekCStruct @SampleLocationsInfoEXT ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT))
+    pure $ AttachmentSampleLocationsEXT
+             attachmentIndex sampleLocationsInfo
+
+instance Zero AttachmentSampleLocationsEXT where
+  zero = AttachmentSampleLocationsEXT
+           zero
+           zero
+
+
+-- | VkSubpassSampleLocationsEXT - Structure specifying the sample locations
+-- state to use for layout transitions of attachments performed after a
+-- given subpass
+--
+-- = Description
+--
+-- If the image referenced by the depth\/stencil attachment used in the
+-- subpass identified by @subpassIndex@ was not created with
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+-- or if the subpass does not use a depth\/stencil attachment, and
+-- 'PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
+-- is 'Vulkan.Core10.BaseType.TRUE' then the values specified in
+-- @sampleLocationsInfo@ are ignored.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'RenderPassSampleLocationsBeginInfoEXT', 'SampleLocationsInfoEXT'
+data SubpassSampleLocationsEXT = SubpassSampleLocationsEXT
+  { -- | @subpassIndex@ /must/ be less than the @subpassCount@ specified in
+    -- 'Vulkan.Core10.Pass.RenderPassCreateInfo' the render pass specified by
+    -- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderPass@
+    -- was created with
+    subpassIndex :: Word32
+  , -- | @sampleLocationsInfo@ /must/ be a valid 'SampleLocationsInfoEXT'
+    -- structure
+    sampleLocationsInfo :: SampleLocationsInfoEXT
+  }
+  deriving (Typeable)
+deriving instance Show SubpassSampleLocationsEXT
+
+instance ToCStruct SubpassSampleLocationsEXT where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SubpassSampleLocationsEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (subpassIndex)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT)) (sampleLocationsInfo) . ($ ())
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct SubpassSampleLocationsEXT where
+  peekCStruct p = do
+    subpassIndex <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    sampleLocationsInfo <- peekCStruct @SampleLocationsInfoEXT ((p `plusPtr` 8 :: Ptr SampleLocationsInfoEXT))
+    pure $ SubpassSampleLocationsEXT
+             subpassIndex sampleLocationsInfo
+
+instance Zero SubpassSampleLocationsEXT where
+  zero = SubpassSampleLocationsEXT
+           zero
+           zero
+
+
+-- | VkRenderPassSampleLocationsBeginInfoEXT - Structure specifying sample
+-- locations to use for the layout transition of custom sample locations
+-- compatible depth\/stencil attachments
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.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
+--     'AttachmentSampleLocationsEXT' structures
+--
+-- -   If @postSubpassSampleLocationsCount@ is not @0@,
+--     @pPostSubpassSampleLocations@ /must/ be a valid pointer to an array
+--     of @postSubpassSampleLocationsCount@ valid
+--     'SubpassSampleLocationsEXT' structures
+--
+-- = See Also
+--
+-- 'AttachmentSampleLocationsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'SubpassSampleLocationsEXT'
+data RenderPassSampleLocationsBeginInfoEXT = RenderPassSampleLocationsBeginInfoEXT
+  { -- | @pAttachmentInitialSampleLocations@ is a pointer to an array of
+    -- @attachmentInitialSampleLocationsCount@ 'AttachmentSampleLocationsEXT'
+    -- structures specifying the attachment indices and their corresponding
+    -- sample location state. Each element of
+    -- @pAttachmentInitialSampleLocations@ /can/ specify the sample location
+    -- state to use in the automatic layout transition performed to transition
+    -- a depth\/stencil attachment from the initial layout of the attachment to
+    -- the image layout specified for the attachment in the first subpass using
+    -- it.
+    attachmentInitialSampleLocations :: Vector AttachmentSampleLocationsEXT
+  , -- | @pPostSubpassSampleLocations@ is a pointer to an array of
+    -- @postSubpassSampleLocationsCount@ 'SubpassSampleLocationsEXT' structures
+    -- specifying the subpass indices and their corresponding sample location
+    -- state. Each element of @pPostSubpassSampleLocations@ /can/ specify the
+    -- sample location state to use in the automatic layout transition
+    -- performed to transition the depth\/stencil attachment used by the
+    -- specified subpass to the image layout specified in a dependent subpass
+    -- or to the final layout of the attachment in case the specified subpass
+    -- is the last subpass using that attachment. In addition, if
+    -- 'PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
+    -- is 'Vulkan.Core10.BaseType.FALSE', each element of
+    -- @pPostSubpassSampleLocations@ /must/ specify the sample location state
+    -- that matches the sample locations used by all pipelines that will be
+    -- bound to a command buffer during the specified subpass. If
+    -- @variableSampleLocations@ is 'Vulkan.Core10.BaseType.TRUE', the sample
+    -- locations used for rasterization do not depend on
+    -- @pPostSubpassSampleLocations@.
+    postSubpassSampleLocations :: Vector SubpassSampleLocationsEXT
+  }
+  deriving (Typeable)
+deriving instance Show RenderPassSampleLocationsBeginInfoEXT
+
+instance ToCStruct RenderPassSampleLocationsBeginInfoEXT where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RenderPassSampleLocationsBeginInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachmentInitialSampleLocations)) :: Word32))
+    pPAttachmentInitialSampleLocations' <- ContT $ allocaBytesAligned @AttachmentSampleLocationsEXT ((Data.Vector.length (attachmentInitialSampleLocations)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachmentInitialSampleLocations' `plusPtr` (48 * (i)) :: Ptr AttachmentSampleLocationsEXT) (e) . ($ ())) (attachmentInitialSampleLocations)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AttachmentSampleLocationsEXT))) (pPAttachmentInitialSampleLocations')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (postSubpassSampleLocations)) :: Word32))
+    pPPostSubpassSampleLocations' <- ContT $ allocaBytesAligned @SubpassSampleLocationsEXT ((Data.Vector.length (postSubpassSampleLocations)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPostSubpassSampleLocations' `plusPtr` (48 * (i)) :: Ptr SubpassSampleLocationsEXT) (e) . ($ ())) (postSubpassSampleLocations)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SubpassSampleLocationsEXT))) (pPPostSubpassSampleLocations')
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPAttachmentInitialSampleLocations' <- ContT $ allocaBytesAligned @AttachmentSampleLocationsEXT ((Data.Vector.length (mempty)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachmentInitialSampleLocations' `plusPtr` (48 * (i)) :: Ptr AttachmentSampleLocationsEXT) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AttachmentSampleLocationsEXT))) (pPAttachmentInitialSampleLocations')
+    pPPostSubpassSampleLocations' <- ContT $ allocaBytesAligned @SubpassSampleLocationsEXT ((Data.Vector.length (mempty)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPPostSubpassSampleLocations' `plusPtr` (48 * (i)) :: Ptr SubpassSampleLocationsEXT) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SubpassSampleLocationsEXT))) (pPPostSubpassSampleLocations')
+    lift $ f
+
+instance FromCStruct RenderPassSampleLocationsBeginInfoEXT where
+  peekCStruct p = do
+    attachmentInitialSampleLocationsCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pAttachmentInitialSampleLocations <- peek @(Ptr AttachmentSampleLocationsEXT) ((p `plusPtr` 24 :: Ptr (Ptr AttachmentSampleLocationsEXT)))
+    pAttachmentInitialSampleLocations' <- generateM (fromIntegral attachmentInitialSampleLocationsCount) (\i -> peekCStruct @AttachmentSampleLocationsEXT ((pAttachmentInitialSampleLocations `advancePtrBytes` (48 * (i)) :: Ptr AttachmentSampleLocationsEXT)))
+    postSubpassSampleLocationsCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pPostSubpassSampleLocations <- peek @(Ptr SubpassSampleLocationsEXT) ((p `plusPtr` 40 :: Ptr (Ptr SubpassSampleLocationsEXT)))
+    pPostSubpassSampleLocations' <- generateM (fromIntegral postSubpassSampleLocationsCount) (\i -> peekCStruct @SubpassSampleLocationsEXT ((pPostSubpassSampleLocations `advancePtrBytes` (48 * (i)) :: Ptr SubpassSampleLocationsEXT)))
+    pure $ RenderPassSampleLocationsBeginInfoEXT
+             pAttachmentInitialSampleLocations' pPostSubpassSampleLocations'
+
+instance Zero RenderPassSampleLocationsBeginInfoEXT where
+  zero = RenderPassSampleLocationsBeginInfoEXT
+           mempty
+           mempty
+
+
+-- | VkPipelineSampleLocationsStateCreateInfoEXT - Structure specifying
+-- sample locations for a pipeline
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'SampleLocationsInfoEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineSampleLocationsStateCreateInfoEXT = PipelineSampleLocationsStateCreateInfoEXT
+  { -- | @sampleLocationsEnable@ controls whether custom sample locations are
+    -- used. If @sampleLocationsEnable@ is 'Vulkan.Core10.BaseType.FALSE', the
+    -- default sample locations are used and the values specified in
+    -- @sampleLocationsInfo@ are ignored.
+    sampleLocationsEnable :: Bool
+  , -- | @sampleLocationsInfo@ /must/ be a valid 'SampleLocationsInfoEXT'
+    -- structure
+    sampleLocationsInfo :: SampleLocationsInfoEXT
+  }
+  deriving (Typeable)
+deriving instance Show PipelineSampleLocationsStateCreateInfoEXT
+
+instance ToCStruct PipelineSampleLocationsStateCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineSampleLocationsStateCreateInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (sampleLocationsEnable))
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr SampleLocationsInfoEXT)) (sampleLocationsInfo) . ($ ())
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr SampleLocationsInfoEXT)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct PipelineSampleLocationsStateCreateInfoEXT where
+  peekCStruct p = do
+    sampleLocationsEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    sampleLocationsInfo <- peekCStruct @SampleLocationsInfoEXT ((p `plusPtr` 24 :: Ptr SampleLocationsInfoEXT))
+    pure $ PipelineSampleLocationsStateCreateInfoEXT
+             (bool32ToBool sampleLocationsEnable) sampleLocationsInfo
+
+instance Zero PipelineSampleLocationsStateCreateInfoEXT where
+  zero = PipelineSampleLocationsStateCreateInfoEXT
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceSampleLocationsPropertiesEXT - Structure describing
+-- sample location limits that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceSampleLocationsPropertiesEXT'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceSampleLocationsPropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceSampleLocationsPropertiesEXT = PhysicalDeviceSampleLocationsPropertiesEXT
+  { -- | @sampleLocationSampleCounts@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating
+    -- the sample counts supporting custom sample locations.
+    sampleLocationSampleCounts :: SampleCountFlags
+  , -- | @maxSampleLocationGridSize@ is the maximum size of the pixel grid in
+    -- which sample locations /can/ vary that is supported for all sample
+    -- counts in @sampleLocationSampleCounts@.
+    maxSampleLocationGridSize :: Extent2D
+  , -- | @sampleLocationCoordinateRange@[2] is the range of supported sample
+    -- location coordinates.
+    sampleLocationCoordinateRange :: (Float, Float)
+  , -- | @sampleLocationSubPixelBits@ is the number of bits of subpixel precision
+    -- for sample locations.
+    sampleLocationSubPixelBits :: Word32
+  , -- | @variableSampleLocations@ specifies whether the sample locations used by
+    -- all pipelines that will be bound to a command buffer during a subpass
+    -- /must/ match. If set to 'Vulkan.Core10.BaseType.TRUE', the
+    -- implementation supports variable sample locations in a subpass. If set
+    -- to 'Vulkan.Core10.BaseType.FALSE', then the sample locations /must/ stay
+    -- constant in each subpass.
+    variableSampleLocations :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceSampleLocationsPropertiesEXT
+
+instance ToCStruct PhysicalDeviceSampleLocationsPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSampleLocationsPropertiesEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr SampleCountFlags)) (sampleLocationSampleCounts)
+    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (maxSampleLocationGridSize) . ($ ())
+    let pSampleLocationCoordinateRange' = lowerArrayPtr ((p `plusPtr` 28 :: Ptr (FixedArray 2 CFloat)))
+    lift $ case (sampleLocationCoordinateRange) of
+      (e0, e1) -> do
+        poke (pSampleLocationCoordinateRange' :: Ptr CFloat) (CFloat (e0))
+        poke (pSampleLocationCoordinateRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (sampleLocationSubPixelBits)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (variableSampleLocations))
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr SampleCountFlags)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (zero) . ($ ())
+    let pSampleLocationCoordinateRange' = lowerArrayPtr ((p `plusPtr` 28 :: Ptr (FixedArray 2 CFloat)))
+    lift $ case ((zero, zero)) of
+      (e0, e1) -> do
+        poke (pSampleLocationCoordinateRange' :: Ptr CFloat) (CFloat (e0))
+        poke (pSampleLocationCoordinateRange' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))
+    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance FromCStruct PhysicalDeviceSampleLocationsPropertiesEXT where
+  peekCStruct p = do
+    sampleLocationSampleCounts <- peek @SampleCountFlags ((p `plusPtr` 16 :: Ptr SampleCountFlags))
+    maxSampleLocationGridSize <- peekCStruct @Extent2D ((p `plusPtr` 20 :: Ptr Extent2D))
+    let psampleLocationCoordinateRange = lowerArrayPtr @CFloat ((p `plusPtr` 28 :: Ptr (FixedArray 2 CFloat)))
+    sampleLocationCoordinateRange0 <- peek @CFloat ((psampleLocationCoordinateRange `advancePtrBytes` 0 :: Ptr CFloat))
+    sampleLocationCoordinateRange1 <- peek @CFloat ((psampleLocationCoordinateRange `advancePtrBytes` 4 :: Ptr CFloat))
+    sampleLocationSubPixelBits <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
+    variableSampleLocations <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    pure $ PhysicalDeviceSampleLocationsPropertiesEXT
+             sampleLocationSampleCounts maxSampleLocationGridSize ((((\(CFloat a) -> a) sampleLocationCoordinateRange0), ((\(CFloat a) -> a) sampleLocationCoordinateRange1))) sampleLocationSubPixelBits (bool32ToBool variableSampleLocations)
+
+instance Zero PhysicalDeviceSampleLocationsPropertiesEXT where
+  zero = PhysicalDeviceSampleLocationsPropertiesEXT
+           zero
+           zero
+           (zero, zero)
+           zero
+           zero
+
+
+-- | VkMultisamplePropertiesEXT - Structure returning information about
+-- sample count specific additional multisampling capabilities
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceMultisamplePropertiesEXT'
+data MultisamplePropertiesEXT = MultisamplePropertiesEXT
+  { -- | @maxSampleLocationGridSize@ is the maximum size of the pixel grid in
+    -- which sample locations /can/ vary.
+    maxSampleLocationGridSize :: Extent2D }
+  deriving (Typeable)
+deriving instance Show MultisamplePropertiesEXT
+
+instance ToCStruct MultisamplePropertiesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MultisamplePropertiesEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (maxSampleLocationGridSize) . ($ ())
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct MultisamplePropertiesEXT where
+  peekCStruct p = do
+    maxSampleLocationGridSize <- peekCStruct @Extent2D ((p `plusPtr` 16 :: Ptr Extent2D))
+    pure $ MultisamplePropertiesEXT
+             maxSampleLocationGridSize
+
+instance Zero MultisamplePropertiesEXT where
+  zero = MultisamplePropertiesEXT
+           zero
+
+
+type EXT_SAMPLE_LOCATIONS_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION"
+pattern EXT_SAMPLE_LOCATIONS_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SAMPLE_LOCATIONS_SPEC_VERSION = 1
+
+
+type EXT_SAMPLE_LOCATIONS_EXTENSION_NAME = "VK_EXT_sample_locations"
+
+-- No documentation found for TopLevel "VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME"
+pattern EXT_SAMPLE_LOCATIONS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SAMPLE_LOCATIONS_EXTENSION_NAME = "VK_EXT_sample_locations"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_sample_locations.hs-boot b/src/Vulkan/Extensions/VK_EXT_sample_locations.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_sample_locations.hs-boot
@@ -0,0 +1,77 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_sample_locations  ( AttachmentSampleLocationsEXT
+                                                  , MultisamplePropertiesEXT
+                                                  , PhysicalDeviceSampleLocationsPropertiesEXT
+                                                  , PipelineSampleLocationsStateCreateInfoEXT
+                                                  , RenderPassSampleLocationsBeginInfoEXT
+                                                  , SampleLocationEXT
+                                                  , SampleLocationsInfoEXT
+                                                  , SubpassSampleLocationsEXT
+                                                  ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data AttachmentSampleLocationsEXT
+
+instance ToCStruct AttachmentSampleLocationsEXT
+instance Show AttachmentSampleLocationsEXT
+
+instance FromCStruct AttachmentSampleLocationsEXT
+
+
+data MultisamplePropertiesEXT
+
+instance ToCStruct MultisamplePropertiesEXT
+instance Show MultisamplePropertiesEXT
+
+instance FromCStruct MultisamplePropertiesEXT
+
+
+data PhysicalDeviceSampleLocationsPropertiesEXT
+
+instance ToCStruct PhysicalDeviceSampleLocationsPropertiesEXT
+instance Show PhysicalDeviceSampleLocationsPropertiesEXT
+
+instance FromCStruct PhysicalDeviceSampleLocationsPropertiesEXT
+
+
+data PipelineSampleLocationsStateCreateInfoEXT
+
+instance ToCStruct PipelineSampleLocationsStateCreateInfoEXT
+instance Show PipelineSampleLocationsStateCreateInfoEXT
+
+instance FromCStruct PipelineSampleLocationsStateCreateInfoEXT
+
+
+data RenderPassSampleLocationsBeginInfoEXT
+
+instance ToCStruct RenderPassSampleLocationsBeginInfoEXT
+instance Show RenderPassSampleLocationsBeginInfoEXT
+
+instance FromCStruct RenderPassSampleLocationsBeginInfoEXT
+
+
+data SampleLocationEXT
+
+instance ToCStruct SampleLocationEXT
+instance Show SampleLocationEXT
+
+instance FromCStruct SampleLocationEXT
+
+
+data SampleLocationsInfoEXT
+
+instance ToCStruct SampleLocationsInfoEXT
+instance Show SampleLocationsInfoEXT
+
+instance FromCStruct SampleLocationsInfoEXT
+
+
+data SubpassSampleLocationsEXT
+
+instance ToCStruct SubpassSampleLocationsEXT
+instance Show SubpassSampleLocationsEXT
+
+instance FromCStruct SubpassSampleLocationsEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs b/src/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs
@@ -0,0 +1,76 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_sampler_filter_minmax  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT
+                                                       , pattern STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT
+                                                       , pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT
+                                                       , pattern SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT
+                                                       , pattern SAMPLER_REDUCTION_MODE_MIN_EXT
+                                                       , pattern SAMPLER_REDUCTION_MODE_MAX_EXT
+                                                       , SamplerReductionModeEXT
+                                                       , PhysicalDeviceSamplerFilterMinmaxPropertiesEXT
+                                                       , SamplerReductionModeCreateInfoEXT
+                                                       , EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION
+                                                       , pattern EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION
+                                                       , EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME
+                                                       , pattern EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME
+                                                       ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (PhysicalDeviceSamplerFilterMinmaxProperties)
+import Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode)
+import Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax (SamplerReductionModeCreateInfo)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT))
+import Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode(SAMPLER_REDUCTION_MODE_MAX))
+import Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode(SAMPLER_REDUCTION_MODE_MIN))
+import Vulkan.Core12.Enums.SamplerReductionMode (SamplerReductionMode(SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT"
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT
+
+
+-- No documentation found for TopLevel "VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT"
+pattern SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
+
+
+-- No documentation found for TopLevel "VK_SAMPLER_REDUCTION_MODE_MIN_EXT"
+pattern SAMPLER_REDUCTION_MODE_MIN_EXT = SAMPLER_REDUCTION_MODE_MIN
+
+
+-- No documentation found for TopLevel "VK_SAMPLER_REDUCTION_MODE_MAX_EXT"
+pattern SAMPLER_REDUCTION_MODE_MAX_EXT = SAMPLER_REDUCTION_MODE_MAX
+
+
+-- No documentation found for TopLevel "VkSamplerReductionModeEXT"
+type SamplerReductionModeEXT = SamplerReductionMode
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT"
+type PhysicalDeviceSamplerFilterMinmaxPropertiesEXT = PhysicalDeviceSamplerFilterMinmaxProperties
+
+
+-- No documentation found for TopLevel "VkSamplerReductionModeCreateInfoEXT"
+type SamplerReductionModeCreateInfoEXT = SamplerReductionModeCreateInfo
+
+
+type EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION"
+pattern EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION = 2
+
+
+type EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME = "VK_EXT_sampler_filter_minmax"
+
+-- No documentation found for TopLevel "VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME"
+pattern EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME = "VK_EXT_sampler_filter_minmax"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_scalar_block_layout.hs b/src/Vulkan/Extensions/VK_EXT_scalar_block_layout.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_scalar_block_layout.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_scalar_block_layout  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT
+                                                     , PhysicalDeviceScalarBlockLayoutFeaturesEXT
+                                                     , EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION
+                                                     , pattern EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION
+                                                     , EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME
+                                                     , pattern EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME
+                                                     ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT = STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceScalarBlockLayoutFeaturesEXT"
+type PhysicalDeviceScalarBlockLayoutFeaturesEXT = PhysicalDeviceScalarBlockLayoutFeatures
+
+
+type EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION"
+pattern EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION = 1
+
+
+type EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME = "VK_EXT_scalar_block_layout"
+
+-- No documentation found for TopLevel "VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME"
+pattern EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME = "VK_EXT_scalar_block_layout"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_separate_stencil_usage.hs b/src/Vulkan/Extensions/VK_EXT_separate_stencil_usage.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_separate_stencil_usage.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_separate_stencil_usage  ( pattern STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT
+                                                        , ImageStencilUsageCreateInfoEXT
+                                                        , EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION
+                                                        , pattern EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION
+                                                        , EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME
+                                                        , pattern EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME
+                                                        ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage (ImageStencilUsageCreateInfo)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT"
+pattern STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VkImageStencilUsageCreateInfoEXT"
+type ImageStencilUsageCreateInfoEXT = ImageStencilUsageCreateInfo
+
+
+type EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION"
+pattern EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION = 1
+
+
+type EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME = "VK_EXT_separate_stencil_usage"
+
+-- No documentation found for TopLevel "VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME"
+pattern EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME = "VK_EXT_separate_stencil_usage"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs b/src/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs
@@ -0,0 +1,107 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation  ( PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(..)
+                                                                    , EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION
+                                                                    , pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION
+                                                                    , EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME
+                                                                    , pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME
+                                                                    ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT))
+-- | VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT - Structure
+-- describing the shader demote to helper invocations features that can be
+-- supported by an implementation
+--
+-- = Members
+--
+-- The members of the
+-- 'PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT'
+-- structure is included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable the feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+  { -- | @shaderDemoteToHelperInvocation@ indicates whether the implementation
+    -- supports the SPIR-V @DemoteToHelperInvocationEXT@ capability.
+    shaderDemoteToHelperInvocation :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+
+instance ToCStruct PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderDemoteToHelperInvocation))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT where
+  peekCStruct p = do
+    shaderDemoteToHelperInvocation <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+             (bool32ToBool shaderDemoteToHelperInvocation)
+
+instance Storable PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT where
+  zero = PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+           zero
+
+
+type EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION"
+pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION = 1
+
+
+type EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME = "VK_EXT_shader_demote_to_helper_invocation"
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME"
+pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME = "VK_EXT_shader_demote_to_helper_invocation"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs-boot b/src/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation  (PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+
+instance ToCStruct PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+instance Show PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+
+instance FromCStruct PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_shader_stencil_export.hs b/src/Vulkan/Extensions/VK_EXT_shader_stencil_export.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_shader_stencil_export.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_shader_stencil_export  ( EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION
+                                                       , pattern EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION
+                                                       , EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME
+                                                       , pattern EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME
+                                                       ) where
+
+import Data.String (IsString)
+
+type EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION"
+pattern EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION = 1
+
+
+type EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME = "VK_EXT_shader_stencil_export"
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME"
+pattern EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME = "VK_EXT_shader_stencil_export"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_shader_subgroup_ballot.hs b/src/Vulkan/Extensions/VK_EXT_shader_subgroup_ballot.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_shader_subgroup_ballot.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_shader_subgroup_ballot  ( EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION
+                                                        , pattern EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION
+                                                        , EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME
+                                                        , pattern EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME
+                                                        ) where
+
+import Data.String (IsString)
+
+type EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION"
+pattern EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION = 1
+
+
+type EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME = "VK_EXT_shader_subgroup_ballot"
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME"
+pattern EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME = "VK_EXT_shader_subgroup_ballot"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_shader_subgroup_vote.hs b/src/Vulkan/Extensions/VK_EXT_shader_subgroup_vote.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_shader_subgroup_vote.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_shader_subgroup_vote  ( EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION
+                                                      , pattern EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION
+                                                      , EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME
+                                                      , pattern EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME
+                                                      ) where
+
+import Data.String (IsString)
+
+type EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION"
+pattern EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION = 1
+
+
+type EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME = "VK_EXT_shader_subgroup_vote"
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME"
+pattern EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME = "VK_EXT_shader_subgroup_vote"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_shader_viewport_index_layer.hs b/src/Vulkan/Extensions/VK_EXT_shader_viewport_index_layer.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_shader_viewport_index_layer.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_shader_viewport_index_layer  ( EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION
+                                                             , pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION
+                                                             , EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME
+                                                             , pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME
+                                                             ) where
+
+import Data.String (IsString)
+
+type EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION"
+pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION = 1
+
+
+type EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME = "VK_EXT_shader_viewport_index_layer"
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME"
+pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME = "VK_EXT_shader_viewport_index_layer"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs b/src/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs
@@ -0,0 +1,298 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_subgroup_size_control  ( PhysicalDeviceSubgroupSizeControlFeaturesEXT(..)
+                                                       , PhysicalDeviceSubgroupSizeControlPropertiesEXT(..)
+                                                       , PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(..)
+                                                       , EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION
+                                                       , pattern EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION
+                                                       , EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME
+                                                       , pattern EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME
+                                                       ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT))
+-- | VkPhysicalDeviceSubgroupSizeControlFeaturesEXT - Structure describing
+-- the subgroup size control features that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceSubgroupSizeControlFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceSubgroupSizeControlFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceSubgroupSizeControlFeaturesEXT' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- the feature.
+--
+-- Note
+--
+-- The 'PhysicalDeviceSubgroupSizeControlFeaturesEXT' structure was added
+-- in version 2 of the @VK_EXT_subgroup_size_control@ extension. Version 1
+-- implementations of this extension will not fill out the features
+-- structure but applications may assume that both @subgroupSizeControl@
+-- and @computeFullSubgroups@ are supported if the extension is supported.
+-- (See also the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-requirements Feature Requirements>
+-- section.) Applications are advised to add a
+-- 'PhysicalDeviceSubgroupSizeControlFeaturesEXT' structure to the @pNext@
+-- chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the features
+-- regardless of the version of the extension supported by the
+-- implementation. If the implementation only supports version 1, it will
+-- safely ignore the 'PhysicalDeviceSubgroupSizeControlFeaturesEXT'
+-- structure.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeaturesEXT
+  { -- | @subgroupSizeControl@ indicates whether the implementation supports
+    -- controlling shader subgroup sizes via the
+    -- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'
+    -- flag and the 'PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'
+    -- structure.
+    subgroupSizeControl :: Bool
+  , -- | @computeFullSubgroups@ indicates whether the implementation supports
+    -- requiring full subgroups in compute shaders via the
+    -- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'
+    -- flag.
+    computeFullSubgroups :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceSubgroupSizeControlFeaturesEXT
+
+instance ToCStruct PhysicalDeviceSubgroupSizeControlFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSubgroupSizeControlFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (subgroupSizeControl))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (computeFullSubgroups))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceSubgroupSizeControlFeaturesEXT where
+  peekCStruct p = do
+    subgroupSizeControl <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    computeFullSubgroups <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceSubgroupSizeControlFeaturesEXT
+             (bool32ToBool subgroupSizeControl) (bool32ToBool computeFullSubgroups)
+
+instance Storable PhysicalDeviceSubgroupSizeControlFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceSubgroupSizeControlFeaturesEXT where
+  zero = PhysicalDeviceSubgroupSizeControlFeaturesEXT
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceSubgroupSizeControlPropertiesEXT - Structure describing
+-- the control subgroup size properties of an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceSubgroupSizeControlPropertiesEXT'
+-- structure describe the following properties:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceSubgroupSizeControlPropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- If
+-- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties'::@supportedOperations@
+-- includes
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroup-quad >,
+-- @minSubgroupSize@ /must/ be greater than or equal to 4.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlPropertiesEXT
+  { -- | @minSubgroupSize@ is the minimum subgroup size supported by this device.
+    -- @minSubgroupSize@ is at least one if any of the physical device’s queues
+    -- support 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'. @minSubgroupSize@
+    -- is a power-of-two. @minSubgroupSize@ is less than or equal to
+    -- @maxSubgroupSize@. @minSubgroupSize@ is less than or equal to
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>.
+    minSubgroupSize :: Word32
+  , -- | @maxSubgroupSize@ is the maximum subgroup size supported by this device.
+    -- @maxSubgroupSize@ is at least one if any of the physical device’s queues
+    -- support 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'. @maxSubgroupSize@
+    -- is a power-of-two. @maxSubgroupSize@ is greater than or equal to
+    -- @minSubgroupSize@. @maxSubgroupSize@ is greater than or equal to
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>.
+    maxSubgroupSize :: Word32
+  , -- | @maxComputeWorkgroupSubgroups@ is the maximum number of subgroups
+    -- supported by the implementation within a workgroup.
+    maxComputeWorkgroupSubgroups :: Word32
+  , -- | @requiredSubgroupSizeStages@ is a bitfield of what shader stages support
+    -- having a required subgroup size specified.
+    requiredSubgroupSizeStages :: ShaderStageFlags
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceSubgroupSizeControlPropertiesEXT
+
+instance ToCStruct PhysicalDeviceSubgroupSizeControlPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSubgroupSizeControlPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (minSubgroupSize)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxSubgroupSize)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxComputeWorkgroupSubgroups)
+    poke ((p `plusPtr` 28 :: Ptr ShaderStageFlags)) (requiredSubgroupSizeStages)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr ShaderStageFlags)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceSubgroupSizeControlPropertiesEXT where
+  peekCStruct p = do
+    minSubgroupSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxSubgroupSize <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    maxComputeWorkgroupSubgroups <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    requiredSubgroupSizeStages <- peek @ShaderStageFlags ((p `plusPtr` 28 :: Ptr ShaderStageFlags))
+    pure $ PhysicalDeviceSubgroupSizeControlPropertiesEXT
+             minSubgroupSize maxSubgroupSize maxComputeWorkgroupSubgroups requiredSubgroupSizeStages
+
+instance Storable PhysicalDeviceSubgroupSizeControlPropertiesEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceSubgroupSizeControlPropertiesEXT where
+  zero = PhysicalDeviceSubgroupSizeControlPropertiesEXT
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT - Structure
+-- specifying the required subgroup size of a newly created pipeline shader
+-- stage
+--
+-- == Valid Usage
+--
+-- = Description
+--
+-- If a 'PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo', it specifies
+-- that the pipeline shader stage being compiled has a required subgroup
+-- size.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+  { -- | @requiredSubgroupSize@ /must/ be less than or equal to
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size maxSubgroupSize>
+    requiredSubgroupSize :: Word32 }
+  deriving (Typeable)
+deriving instance Show PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+
+instance ToCStruct PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (requiredSubgroupSize)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT where
+  peekCStruct p = do
+    requiredSubgroupSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+             requiredSubgroupSize
+
+instance Storable PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT where
+  zero = PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+           zero
+
+
+type EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION"
+pattern EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION = 2
+
+
+type EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME = "VK_EXT_subgroup_size_control"
+
+-- No documentation found for TopLevel "VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME"
+pattern EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME = "VK_EXT_subgroup_size_control"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs-boot b/src/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_subgroup_size_control  ( PhysicalDeviceSubgroupSizeControlFeaturesEXT
+                                                       , PhysicalDeviceSubgroupSizeControlPropertiesEXT
+                                                       , PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+                                                       ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceSubgroupSizeControlFeaturesEXT
+
+instance ToCStruct PhysicalDeviceSubgroupSizeControlFeaturesEXT
+instance Show PhysicalDeviceSubgroupSizeControlFeaturesEXT
+
+instance FromCStruct PhysicalDeviceSubgroupSizeControlFeaturesEXT
+
+
+data PhysicalDeviceSubgroupSizeControlPropertiesEXT
+
+instance ToCStruct PhysicalDeviceSubgroupSizeControlPropertiesEXT
+instance Show PhysicalDeviceSubgroupSizeControlPropertiesEXT
+
+instance FromCStruct PhysicalDeviceSubgroupSizeControlPropertiesEXT
+
+
+data PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+
+instance ToCStruct PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+instance Show PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+
+instance FromCStruct PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs b/src/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs
@@ -0,0 +1,29 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_swapchain_colorspace  ( pattern COLOR_SPACE_DCI_P3_LINEAR_EXT
+                                                      , EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION
+                                                      , pattern EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION
+                                                      , EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME
+                                                      , pattern EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME
+                                                      , ColorSpaceKHR(..)
+                                                      ) where
+
+import Data.String (IsString)
+import Vulkan.Extensions.VK_KHR_surface (ColorSpaceKHR(COLOR_SPACE_DISPLAY_P3_LINEAR_EXT))
+import Vulkan.Extensions.VK_KHR_surface (ColorSpaceKHR(..))
+-- No documentation found for TopLevel "VK_COLOR_SPACE_DCI_P3_LINEAR_EXT"
+pattern COLOR_SPACE_DCI_P3_LINEAR_EXT = COLOR_SPACE_DISPLAY_P3_LINEAR_EXT
+
+
+type EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION = 4
+
+-- No documentation found for TopLevel "VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION"
+pattern EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION = 4
+
+
+type EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME = "VK_EXT_swapchain_colorspace"
+
+-- No documentation found for TopLevel "VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME"
+pattern EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME = "VK_EXT_swapchain_colorspace"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs b/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs
@@ -0,0 +1,209 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_texel_buffer_alignment  ( PhysicalDeviceTexelBufferAlignmentFeaturesEXT(..)
+                                                        , PhysicalDeviceTexelBufferAlignmentPropertiesEXT(..)
+                                                        , EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION
+                                                        , pattern EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION
+                                                        , EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME
+                                                        , pattern EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME
+                                                        ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT))
+-- | VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT - Structure describing
+-- the texel buffer alignment features that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceTexelBufferAlignmentFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceTexelBufferAlignmentFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceTexelBufferAlignmentFeaturesEXT' /can/ also be included
+-- in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- enable the feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceTexelBufferAlignmentFeaturesEXT = PhysicalDeviceTexelBufferAlignmentFeaturesEXT
+  { -- | @texelBufferAlignment@ indicates whether the implementation uses more
+    -- specific alignment requirements advertised in
+    -- 'PhysicalDeviceTexelBufferAlignmentPropertiesEXT' rather than
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minTexelBufferOffsetAlignment@.
+    texelBufferAlignment :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceTexelBufferAlignmentFeaturesEXT
+
+instance ToCStruct PhysicalDeviceTexelBufferAlignmentFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceTexelBufferAlignmentFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (texelBufferAlignment))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceTexelBufferAlignmentFeaturesEXT where
+  peekCStruct p = do
+    texelBufferAlignment <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceTexelBufferAlignmentFeaturesEXT
+             (bool32ToBool texelBufferAlignment)
+
+instance Storable PhysicalDeviceTexelBufferAlignmentFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceTexelBufferAlignmentFeaturesEXT where
+  zero = PhysicalDeviceTexelBufferAlignmentFeaturesEXT
+           zero
+
+
+-- | VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT - Structure describing
+-- the texel buffer alignment requirements supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceTexelBufferAlignmentPropertiesEXT'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceTexelBufferAlignmentPropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- If the single texel alignment property is
+-- 'Vulkan.Core10.BaseType.FALSE', then the buffer view’s offset /must/ be
+-- aligned to the corresponding byte alignment value. If the single texel
+-- alignment property is 'Vulkan.Core10.BaseType.TRUE', then the buffer
+-- view’s offset /must/ be aligned to the lesser of the corresponding byte
+-- alignment value or the size of a single texel, based on
+-- 'Vulkan.Core10.BufferView.BufferViewCreateInfo'::@format@. If the size
+-- of a single texel is a multiple of three bytes, then the size of a
+-- single component of the format is used instead.
+--
+-- These limits /must/ not advertise a larger alignment than the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-required required>
+-- maximum minimum value of
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minTexelBufferOffsetAlignment@,
+-- for any format that supports use as a texel buffer.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceTexelBufferAlignmentPropertiesEXT = PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+  { -- | @storageTexelBufferOffsetAlignmentBytes@ is a byte alignment that is
+    -- sufficient for a storage texel buffer of any format.
+    storageTexelBufferOffsetAlignmentBytes :: DeviceSize
+  , -- | @storageTexelBufferOffsetSingleTexelAlignment@ indicates whether single
+    -- texel alignment is sufficient for a storage texel buffer of any format.
+    storageTexelBufferOffsetSingleTexelAlignment :: Bool
+  , -- | @uniformTexelBufferOffsetAlignmentBytes@ is a byte alignment that is
+    -- sufficient for a uniform texel buffer of any format.
+    uniformTexelBufferOffsetAlignmentBytes :: DeviceSize
+  , -- | @uniformTexelBufferOffsetSingleTexelAlignment@ indicates whether single
+    -- texel alignment is sufficient for a uniform texel buffer of any format.
+    uniformTexelBufferOffsetSingleTexelAlignment :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+
+instance ToCStruct PhysicalDeviceTexelBufferAlignmentPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceTexelBufferAlignmentPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (storageTexelBufferOffsetAlignmentBytes)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (storageTexelBufferOffsetSingleTexelAlignment))
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (uniformTexelBufferOffsetAlignmentBytes)
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (uniformTexelBufferOffsetSingleTexelAlignment))
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceTexelBufferAlignmentPropertiesEXT where
+  peekCStruct p = do
+    storageTexelBufferOffsetAlignmentBytes <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    storageTexelBufferOffsetSingleTexelAlignment <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    uniformTexelBufferOffsetAlignmentBytes <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
+    uniformTexelBufferOffsetSingleTexelAlignment <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    pure $ PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+             storageTexelBufferOffsetAlignmentBytes (bool32ToBool storageTexelBufferOffsetSingleTexelAlignment) uniformTexelBufferOffsetAlignmentBytes (bool32ToBool uniformTexelBufferOffsetSingleTexelAlignment)
+
+instance Storable PhysicalDeviceTexelBufferAlignmentPropertiesEXT where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceTexelBufferAlignmentPropertiesEXT where
+  zero = PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+           zero
+           zero
+           zero
+           zero
+
+
+type EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION"
+pattern EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION = 1
+
+
+type EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME = "VK_EXT_texel_buffer_alignment"
+
+-- No documentation found for TopLevel "VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME"
+pattern EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME = "VK_EXT_texel_buffer_alignment"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs-boot b/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_texel_buffer_alignment  ( PhysicalDeviceTexelBufferAlignmentFeaturesEXT
+                                                        , PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+                                                        ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceTexelBufferAlignmentFeaturesEXT
+
+instance ToCStruct PhysicalDeviceTexelBufferAlignmentFeaturesEXT
+instance Show PhysicalDeviceTexelBufferAlignmentFeaturesEXT
+
+instance FromCStruct PhysicalDeviceTexelBufferAlignmentFeaturesEXT
+
+
+data PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+
+instance ToCStruct PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+instance Show PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+
+instance FromCStruct PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs b/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs
@@ -0,0 +1,147 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr  ( PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(..)
+                                                              , EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION
+                                                              , pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION
+                                                              , EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME
+                                                              , pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME
+                                                              ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT))
+-- | VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT - Structure
+-- describing ASTC HDR features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.createDevice' to
+-- enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+  { -- | @textureCompressionASTC_HDR@ indicates whether all of the ASTC HDR
+    -- compressed texture formats are supported. If this feature is enabled,
+    -- then the
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'
+    -- and
+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+    -- features /must/ be supported in @optimalTilingFeatures@ for the
+    -- following formats:
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT'
+    --
+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT'
+    --
+    -- To query for additional properties, or if the feature is not enabled,
+    -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'
+    -- and
+    -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties'
+    -- /can/ be used to check for supported properties of individual formats as
+    -- normal.
+    textureCompressionASTC_HDR :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+
+instance ToCStruct PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (textureCompressionASTC_HDR))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT where
+  peekCStruct p = do
+    textureCompressionASTC_HDR <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+             (bool32ToBool textureCompressionASTC_HDR)
+
+instance Storable PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT where
+  zero = PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+           zero
+
+
+type EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION"
+pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION = 1
+
+
+type EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME = "VK_EXT_texture_compression_astc_hdr"
+
+-- No documentation found for TopLevel "VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME"
+pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME = "VK_EXT_texture_compression_astc_hdr"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs-boot b/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr  (PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+
+instance ToCStruct PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+instance Show PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+
+instance FromCStruct PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_tooling_info.hs b/src/Vulkan/Extensions/VK_EXT_tooling_info.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_tooling_info.hs
@@ -0,0 +1,321 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_tooling_info  ( getPhysicalDeviceToolPropertiesEXT
+                                              , PhysicalDeviceToolPropertiesEXT(..)
+                                              , ToolPurposeFlagBitsEXT( TOOL_PURPOSE_VALIDATION_BIT_EXT
+                                                                      , TOOL_PURPOSE_PROFILING_BIT_EXT
+                                                                      , TOOL_PURPOSE_TRACING_BIT_EXT
+                                                                      , TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT
+                                                                      , TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT
+                                                                      , TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT
+                                                                      , TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT
+                                                                      , ..
+                                                                      )
+                                              , ToolPurposeFlagsEXT
+                                              , EXT_TOOLING_INFO_SPEC_VERSION
+                                              , pattern EXT_TOOLING_INFO_SPEC_VERSION
+                                              , EXT_TOOLING_INFO_EXTENSION_NAME
+                                              , pattern EXT_TOOLING_INFO_EXTENSION_NAME
+                                              ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.ByteString (packCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceToolPropertiesEXT))
+import Vulkan.Core10.APIConstants (MAX_DESCRIPTION_SIZE)
+import Vulkan.Core10.APIConstants (MAX_EXTENSION_NAME_SIZE)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceToolPropertiesEXT
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr PhysicalDeviceToolPropertiesEXT -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr PhysicalDeviceToolPropertiesEXT -> IO Result
+
+-- | vkGetPhysicalDeviceToolPropertiesEXT - Reports properties of tools
+-- active on the specified physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the physical device to query for
+--     active tools.
+--
+-- -   @pToolCount@ is a pointer to an integer describing the number of
+--     tools active on @physicalDevice@.
+--
+-- -   @pToolProperties@ is either @NULL@ or a pointer to an array of
+--     'PhysicalDeviceToolPropertiesEXT' structures.
+--
+-- = Description
+--
+-- If @pToolProperties@ is @NULL@, then the number of tools currently
+-- active on @physicalDevice@ is returned in @pToolCount@. Otherwise,
+-- @pToolCount@ /must/ point to a variable set by the user to the number of
+-- elements in the @pToolProperties@ array, and on return the variable is
+-- overwritten with the number of structures actually written to
+-- @pToolProperties@. If @pToolCount@ is less than the number of currently
+-- active tools, at most @pToolCount@ structures will be written.
+--
+-- The count and properties of active tools /may/ change in response to
+-- events outside the scope of the specification. An application /should/
+-- assume these properties might change at any given time.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pToolCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pToolCount@ is not @0@, and
+--     @pToolProperties@ is not @NULL@, @pToolProperties@ /must/ be a valid
+--     pointer to an array of @pToolCount@
+--     'PhysicalDeviceToolPropertiesEXT' structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'PhysicalDeviceToolPropertiesEXT'
+getPhysicalDeviceToolPropertiesEXT :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("toolProperties" ::: Vector PhysicalDeviceToolPropertiesEXT))
+getPhysicalDeviceToolPropertiesEXT physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceToolPropertiesEXTPtr = pVkGetPhysicalDeviceToolPropertiesEXT (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceToolPropertiesEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceToolPropertiesEXT is null" Nothing Nothing
+  let vkGetPhysicalDeviceToolPropertiesEXT' = mkVkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXTPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPToolCount <- ContT $ bracket (callocBytes @Word32 4) free
+  _ <- lift $ vkGetPhysicalDeviceToolPropertiesEXT' physicalDevice' (pPToolCount) (nullPtr)
+  pToolCount <- lift $ peek @Word32 pPToolCount
+  pPToolProperties <- ContT $ bracket (callocBytes @PhysicalDeviceToolPropertiesEXT ((fromIntegral (pToolCount)) * 1048)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPToolProperties `advancePtrBytes` (i * 1048) :: Ptr PhysicalDeviceToolPropertiesEXT) . ($ ())) [0..(fromIntegral (pToolCount)) - 1]
+  r <- lift $ vkGetPhysicalDeviceToolPropertiesEXT' physicalDevice' (pPToolCount) ((pPToolProperties))
+  pToolCount' <- lift $ peek @Word32 pPToolCount
+  pToolProperties' <- lift $ generateM (fromIntegral (pToolCount')) (\i -> peekCStruct @PhysicalDeviceToolPropertiesEXT (((pPToolProperties) `advancePtrBytes` (1048 * (i)) :: Ptr PhysicalDeviceToolPropertiesEXT)))
+  pure $ (r, pToolProperties')
+
+
+-- | VkPhysicalDeviceToolPropertiesEXT - Structure providing information
+-- about an active tool
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'ToolPurposeFlagsEXT', 'getPhysicalDeviceToolPropertiesEXT'
+data PhysicalDeviceToolPropertiesEXT = PhysicalDeviceToolPropertiesEXT
+  { -- | @name@ is a null-terminated UTF-8 string containing the name of the
+    -- tool.
+    name :: ByteString
+  , -- | @version@ is a null-terminated UTF-8 string containing the version of
+    -- the tool.
+    version :: ByteString
+  , -- | @purposes@ is a bitmask of 'ToolPurposeFlagBitsEXT' which is populated
+    -- with purposes supported by the tool.
+    purposes :: ToolPurposeFlagsEXT
+  , -- | @description@ is a null-terminated UTF-8 string containing a description
+    -- of the tool.
+    description :: ByteString
+  , -- | @layer@ is a null-terminated UTF-8 string that contains the name of the
+    -- layer implementing the tool, if the tool is implemented in a layer -
+    -- otherwise it /may/ be an empty string.
+    layer :: ByteString
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceToolPropertiesEXT
+
+instance ToCStruct PhysicalDeviceToolPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 1048 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceToolPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (name)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (version)
+    poke ((p `plusPtr` 528 :: Ptr ToolPurposeFlagsEXT)) (purposes)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 788 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (layer)
+    f
+  cStructSize = 1048
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (mempty)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (mempty)
+    poke ((p `plusPtr` 528 :: Ptr ToolPurposeFlagsEXT)) (zero)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 788 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))) (mempty)
+    f
+
+instance FromCStruct PhysicalDeviceToolPropertiesEXT where
+  peekCStruct p = do
+    name <- packCString (lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))))
+    version <- packCString (lowerArrayPtr ((p `plusPtr` 272 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))))
+    purposes <- peek @ToolPurposeFlagsEXT ((p `plusPtr` 528 :: Ptr ToolPurposeFlagsEXT))
+    description <- packCString (lowerArrayPtr ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    layer <- packCString (lowerArrayPtr ((p `plusPtr` 788 :: Ptr (FixedArray MAX_EXTENSION_NAME_SIZE CChar))))
+    pure $ PhysicalDeviceToolPropertiesEXT
+             name version purposes description layer
+
+instance Storable PhysicalDeviceToolPropertiesEXT where
+  sizeOf ~_ = 1048
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceToolPropertiesEXT where
+  zero = PhysicalDeviceToolPropertiesEXT
+           mempty
+           mempty
+           zero
+           mempty
+           mempty
+
+
+-- | VkToolPurposeFlagBitsEXT - Bitmask specifying the purposes of an active
+-- tool
+--
+-- = See Also
+--
+-- 'ToolPurposeFlagsEXT'
+newtype ToolPurposeFlagBitsEXT = ToolPurposeFlagBitsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'TOOL_PURPOSE_VALIDATION_BIT_EXT' specifies that the tool provides
+-- validation of API usage.
+pattern TOOL_PURPOSE_VALIDATION_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000001
+-- | 'TOOL_PURPOSE_PROFILING_BIT_EXT' specifies that the tool provides
+-- profiling of API usage.
+pattern TOOL_PURPOSE_PROFILING_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000002
+-- | 'TOOL_PURPOSE_TRACING_BIT_EXT' specifies that the tool is capturing data
+-- about the application’s API usage, including anything from simple
+-- logging to capturing data for later replay.
+pattern TOOL_PURPOSE_TRACING_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000004
+-- | 'TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT' specifies that the tool
+-- provides additional API features\/extensions on top of the underlying
+-- implementation.
+pattern TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000008
+-- | 'TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT' specifies that the tool
+-- modifies the API features\/limits\/extensions presented to the
+-- application.
+pattern TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000010
+-- | 'TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT' specifies that the tool consumes
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-debug-markers debug markers>
+-- or
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-debug-annotation object debug annotation>,
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-queue-labels queue labels>,
+-- or
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-command-buffer-labels command buffer labels>
+pattern TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000040
+-- | 'TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT' specifies that the tool reports
+-- additional information to the application via callbacks specified by
+-- 'Vulkan.Extensions.VK_EXT_debug_report.createDebugReportCallbackEXT' or
+-- 'Vulkan.Extensions.VK_EXT_debug_utils.createDebugUtilsMessengerEXT'
+pattern TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = ToolPurposeFlagBitsEXT 0x00000020
+
+type ToolPurposeFlagsEXT = ToolPurposeFlagBitsEXT
+
+instance Show ToolPurposeFlagBitsEXT where
+  showsPrec p = \case
+    TOOL_PURPOSE_VALIDATION_BIT_EXT -> showString "TOOL_PURPOSE_VALIDATION_BIT_EXT"
+    TOOL_PURPOSE_PROFILING_BIT_EXT -> showString "TOOL_PURPOSE_PROFILING_BIT_EXT"
+    TOOL_PURPOSE_TRACING_BIT_EXT -> showString "TOOL_PURPOSE_TRACING_BIT_EXT"
+    TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT -> showString "TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT"
+    TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT -> showString "TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT"
+    TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT -> showString "TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT"
+    TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT -> showString "TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT"
+    ToolPurposeFlagBitsEXT x -> showParen (p >= 11) (showString "ToolPurposeFlagBitsEXT 0x" . showHex x)
+
+instance Read ToolPurposeFlagBitsEXT where
+  readPrec = parens (choose [("TOOL_PURPOSE_VALIDATION_BIT_EXT", pure TOOL_PURPOSE_VALIDATION_BIT_EXT)
+                            , ("TOOL_PURPOSE_PROFILING_BIT_EXT", pure TOOL_PURPOSE_PROFILING_BIT_EXT)
+                            , ("TOOL_PURPOSE_TRACING_BIT_EXT", pure TOOL_PURPOSE_TRACING_BIT_EXT)
+                            , ("TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT", pure TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT)
+                            , ("TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT", pure TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT)
+                            , ("TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT", pure TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT)
+                            , ("TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT", pure TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ToolPurposeFlagBitsEXT")
+                       v <- step readPrec
+                       pure (ToolPurposeFlagBitsEXT v)))
+
+
+type EXT_TOOLING_INFO_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_TOOLING_INFO_SPEC_VERSION"
+pattern EXT_TOOLING_INFO_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_TOOLING_INFO_SPEC_VERSION = 1
+
+
+type EXT_TOOLING_INFO_EXTENSION_NAME = "VK_EXT_tooling_info"
+
+-- No documentation found for TopLevel "VK_EXT_TOOLING_INFO_EXTENSION_NAME"
+pattern EXT_TOOLING_INFO_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_TOOLING_INFO_EXTENSION_NAME = "VK_EXT_tooling_info"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_tooling_info.hs-boot b/src/Vulkan/Extensions/VK_EXT_tooling_info.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_tooling_info.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_tooling_info  (PhysicalDeviceToolPropertiesEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceToolPropertiesEXT
+
+instance ToCStruct PhysicalDeviceToolPropertiesEXT
+instance Show PhysicalDeviceToolPropertiesEXT
+
+instance FromCStruct PhysicalDeviceToolPropertiesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs
@@ -0,0 +1,1468 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_transform_feedback  ( cmdBindTransformFeedbackBuffersEXT
+                                                    , cmdBeginTransformFeedbackEXT
+                                                    , cmdUseTransformFeedbackEXT
+                                                    , cmdEndTransformFeedbackEXT
+                                                    , cmdBeginQueryIndexedEXT
+                                                    , cmdUseQueryIndexedEXT
+                                                    , cmdEndQueryIndexedEXT
+                                                    , cmdDrawIndirectByteCountEXT
+                                                    , PhysicalDeviceTransformFeedbackFeaturesEXT(..)
+                                                    , PhysicalDeviceTransformFeedbackPropertiesEXT(..)
+                                                    , PipelineRasterizationStateStreamCreateInfoEXT(..)
+                                                    , PipelineRasterizationStateStreamCreateFlagsEXT(..)
+                                                    , EXT_TRANSFORM_FEEDBACK_SPEC_VERSION
+                                                    , pattern EXT_TRANSFORM_FEEDBACK_SPEC_VERSION
+                                                    , EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME
+                                                    , pattern EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME
+                                                    ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBeginQueryIndexedEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBeginTransformFeedbackEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBindTransformFeedbackBuffersEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawIndirectByteCountEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdEndQueryIndexedEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdEndTransformFeedbackEXT))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlagBits(..))
+import Vulkan.Core10.Enums.QueryControlFlagBits (QueryControlFlags)
+import Vulkan.Core10.Handles (QueryPool)
+import Vulkan.Core10.Handles (QueryPool(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBindTransformFeedbackBuffersEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> Ptr DeviceSize -> IO ()
+
+-- | vkCmdBindTransformFeedbackBuffersEXT - Bind transform feedback buffers
+-- to a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @firstBinding@ is the index of the first transform feedback binding
+--     whose state is updated by the command.
+--
+-- -   @bindingCount@ is the number of transform feedback 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.
+--
+-- -   @pSizes@ is an optional array of buffer sizes, specifying the
+--     maximum number of bytes to capture to the corresponding transform
+--     feedback buffer. If @pSizes@ is @NULL@, or the value of the @pSizes@
+--     array element is 'Vulkan.Core10.APIConstants.WHOLE_SIZE', then the
+--     maximum bytes captured will be the size of the corresponding buffer
+--     minus the buffer offset.
+--
+-- = Description
+--
+-- The values taken from elements i of @pBuffers@, @pOffsets@ and @pSizes@
+-- replace the current state for the transform feedback binding
+-- @firstBinding@ + i, for i in [0, @bindingCount@). The transform feedback
+-- binding is updated to start at the offset indicated by @pOffsets@[i]
+-- from the start of the buffer @pBuffers@[i].
+--
+-- == Valid Usage
+--
+-- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@
+--     /must/ be enabled
+--
+-- -   @firstBinding@ /must/ be less than
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
+--
+-- -   The sum of @firstBinding@ and @bindingCount@ /must/ be less than or
+--     equal to
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
+--
+-- -   All elements of @pOffsets@ /must/ be less than the size of the
+--     corresponding element in @pBuffers@
+--
+-- -   All elements of @pOffsets@ /must/ be a multiple of 4
+--
+-- -   All elements of @pBuffers@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT'
+--     flag
+--
+-- -   If the optional @pSize@ array is specified, each element of @pSizes@
+--     /must/ either be 'Vulkan.Core10.APIConstants.WHOLE_SIZE', or be less
+--     than or equal to
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBufferSize@
+--
+-- -   All elements of @pSizes@ /must/ be less than or equal to the size of
+--     the corresponding buffer in @pBuffers@
+--
+-- -   All elements of @pOffsets@ plus @pSizes@, where the @pSizes@,
+--     element is not 'Vulkan.Core10.APIConstants.WHOLE_SIZE', /must/ be
+--     less than or equal to the size of the corresponding element in
+--     @pBuffers@
+--
+-- -   Each element of @pBuffers@ that is non-sparse /must/ be bound
+--     completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   Transform feedback /must/ not be active when the
+--     'cmdBindTransformFeedbackBuffersEXT' command is recorded
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@
+--     valid 'Vulkan.Core10.Handles.Buffer' handles
+--
+-- -   @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@
+--     'Vulkan.Core10.BaseType.DeviceSize' values
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   @bindingCount@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and the elements of @pBuffers@ /must/ have
+--     been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdBindTransformFeedbackBuffersEXT :: forall io . MonadIO io => CommandBuffer -> ("firstBinding" ::: Word32) -> ("buffers" ::: Vector Buffer) -> ("offsets" ::: Vector DeviceSize) -> ("sizes" ::: Vector DeviceSize) -> io ()
+cmdBindTransformFeedbackBuffersEXT commandBuffer firstBinding buffers offsets sizes = liftIO . evalContT $ do
+  let vkCmdBindTransformFeedbackBuffersEXTPtr = pVkCmdBindTransformFeedbackBuffersEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBindTransformFeedbackBuffersEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindTransformFeedbackBuffersEXT is null" Nothing Nothing
+  let vkCmdBindTransformFeedbackBuffersEXT' = mkVkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXTPtr
+  let pBuffersLength = Data.Vector.length $ (buffers)
+  lift $ unless ((Data.Vector.length $ (offsets)) == pBuffersLength) $
+    throwIO $ IOError Nothing InvalidArgument "" "pOffsets and pBuffers must have the same length" Nothing Nothing
+  let pSizesLength = Data.Vector.length $ (sizes)
+  lift $ unless (fromIntegral pSizesLength == pBuffersLength || pSizesLength == 0) $
+    throwIO $ IOError Nothing InvalidArgument "" "pSizes and pBuffers must have the same length" Nothing Nothing
+  pPBuffers <- ContT $ allocaBytesAligned @Buffer ((Data.Vector.length (buffers)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (buffers)
+  pPOffsets <- ContT $ allocaBytesAligned @DeviceSize ((Data.Vector.length (offsets)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (offsets)
+  pSizes <- if Data.Vector.null (sizes)
+    then pure nullPtr
+    else do
+      pPSizes <- ContT $ allocaBytesAligned @DeviceSize (((Data.Vector.length (sizes))) * 8) 8
+      lift $ Data.Vector.imapM_ (\i e -> poke (pPSizes `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) ((sizes))
+      pure $ pPSizes
+  lift $ vkCmdBindTransformFeedbackBuffersEXT' (commandBufferHandle (commandBuffer)) (firstBinding) ((fromIntegral pBuffersLength :: Word32)) (pPBuffers) (pPOffsets) pSizes
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBeginTransformFeedbackEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()
+
+-- | vkCmdBeginTransformFeedbackEXT - Make transform feedback active in the
+-- command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @firstCounterBuffer@ is the index of the first transform feedback
+--     buffer corresponding to @pCounterBuffers@[0] and
+--     @pCounterBufferOffsets@[0].
+--
+-- -   @counterBufferCount@ is the size of the @pCounterBuffers@ and
+--     @pCounterBufferOffsets@ arrays.
+--
+-- -   @pCounterBuffers@ is an optional array of buffer handles to the
+--     counter buffers which contain a 4 byte integer value representing
+--     the byte offset from the start of the corresponding transform
+--     feedback buffer from where to start capturing vertex data. If the
+--     byte offset stored to the counter buffer location was done using
+--     'cmdEndTransformFeedbackEXT' it can be used to resume transform
+--     feedback from the previous location. If @pCounterBuffers@ is @NULL@,
+--     then transform feedback will start capturing vertex data to byte
+--     offset zero in all bound transform feedback buffers. For each
+--     element of @pCounterBuffers@ that is
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', transform feedback will
+--     start capturing vertex data to byte zero in the corresponding bound
+--     transform feedback buffer.
+--
+-- -   @pCounterBufferOffsets@ is an optional array of offsets within each
+--     of the @pCounterBuffers@ where the counter values were previously
+--     written. The location in each counter buffer at these offsets /must/
+--     be large enough to contain 4 bytes of data. This data is the number
+--     of bytes captured by the previous transform feedback to this buffer.
+--     If @pCounterBufferOffsets@ is @NULL@, then it is assumed the offsets
+--     are zero.
+--
+-- = Description
+--
+-- The active transform feedback buffers will capture primitives emitted
+-- from the corresponding @XfbBuffer@ in the bound graphics pipeline. Any
+-- @XfbBuffer@ emitted that does not output to an active transform feedback
+-- buffer will not be captured.
+--
+-- == Valid Usage
+--
+-- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@
+--     /must/ be enabled
+--
+-- -   Transform feedback /must/ not be active
+--
+-- -   @firstCounterBuffer@ /must/ be less than
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
+--
+-- -   The sum of @firstCounterBuffer@ and @counterBufferCount@ /must/ be
+--     less than or equal to
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
+--
+-- -   If @counterBufferCount@ is not @0@, and @pCounterBuffers@ is not
+--     @NULL@, @pCounterBuffers@ /must/ be a valid pointer to an array of
+--     @counterBufferCount@ 'Vulkan.Core10.Handles.Buffer' handles that are
+--     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   For each buffer handle in the array, if it is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ reference a
+--     buffer large enough to hold 4 bytes at the corresponding offset from
+--     the @pCounterBufferOffsets@ array
+--
+-- -   If @pCounterBuffer@ is @NULL@, then @pCounterBufferOffsets@ /must/
+--     also be @NULL@
+--
+-- -   For each buffer handle in the @pCounterBuffers@ array that is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ have been created
+--     with a @usage@ value containing
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT'
+--
+-- -   Transform feedback /must/ not be made active in a render pass
+--     instance with multiview enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   If @counterBufferCount@ is not @0@, and @pCounterBufferOffsets@ is
+--     not @NULL@, @pCounterBufferOffsets@ /must/ be a valid pointer to an
+--     array of @counterBufferCount@ 'Vulkan.Core10.BaseType.DeviceSize'
+--     values
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   Both of @commandBuffer@, and the elements of @pCounterBuffers@ that
+--     are valid handles of non-ignored parameters /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdBeginTransformFeedbackEXT :: forall io . MonadIO io => CommandBuffer -> ("firstCounterBuffer" ::: Word32) -> ("counterBuffers" ::: Vector Buffer) -> ("counterBufferOffsets" ::: Vector DeviceSize) -> io ()
+cmdBeginTransformFeedbackEXT commandBuffer firstCounterBuffer counterBuffers counterBufferOffsets = liftIO . evalContT $ do
+  let vkCmdBeginTransformFeedbackEXTPtr = pVkCmdBeginTransformFeedbackEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBeginTransformFeedbackEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginTransformFeedbackEXT is null" Nothing Nothing
+  let vkCmdBeginTransformFeedbackEXT' = mkVkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXTPtr
+  let pCounterBuffersLength = Data.Vector.length $ (counterBuffers)
+  let pCounterBufferOffsetsLength = Data.Vector.length $ (counterBufferOffsets)
+  lift $ unless (fromIntegral pCounterBufferOffsetsLength == pCounterBuffersLength || pCounterBufferOffsetsLength == 0) $
+    throwIO $ IOError Nothing InvalidArgument "" "pCounterBufferOffsets and pCounterBuffers must have the same length" Nothing Nothing
+  pPCounterBuffers <- ContT $ allocaBytesAligned @Buffer ((Data.Vector.length (counterBuffers)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (counterBuffers)
+  pCounterBufferOffsets <- if Data.Vector.null (counterBufferOffsets)
+    then pure nullPtr
+    else do
+      pPCounterBufferOffsets <- ContT $ allocaBytesAligned @DeviceSize (((Data.Vector.length (counterBufferOffsets))) * 8) 8
+      lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterBufferOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) ((counterBufferOffsets))
+      pure $ pPCounterBufferOffsets
+  lift $ vkCmdBeginTransformFeedbackEXT' (commandBufferHandle (commandBuffer)) (firstCounterBuffer) ((fromIntegral pCounterBuffersLength :: Word32)) (pPCounterBuffers) pCounterBufferOffsets
+  pure $ ()
+
+-- | This function will call the supplied action between calls to
+-- 'cmdBeginTransformFeedbackEXT' and 'cmdEndTransformFeedbackEXT'
+--
+-- Note that 'cmdEndTransformFeedbackEXT' is *not* called if an exception
+-- is thrown by the inner action.
+cmdUseTransformFeedbackEXT :: forall io r . MonadIO io => CommandBuffer -> Word32 -> Vector Buffer -> Vector DeviceSize -> io r -> io r
+cmdUseTransformFeedbackEXT commandBuffer firstCounterBuffer pCounterBuffers pCounterBufferOffsets a =
+  (cmdBeginTransformFeedbackEXT commandBuffer firstCounterBuffer pCounterBuffers pCounterBufferOffsets) *> a <* (cmdEndTransformFeedbackEXT commandBuffer firstCounterBuffer pCounterBuffers pCounterBufferOffsets)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdEndTransformFeedbackEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()
+
+-- | vkCmdEndTransformFeedbackEXT - Make transform feedback inactive in the
+-- command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @firstCounterBuffer@ is the index of the first transform feedback
+--     buffer corresponding to @pCounterBuffers@[0] and
+--     @pCounterBufferOffsets@[0].
+--
+-- -   @counterBufferCount@ is the size of the @pCounterBuffers@ and
+--     @pCounterBufferOffsets@ arrays.
+--
+-- -   @pCounterBuffers@ is an optional array of buffer handles to the
+--     counter buffers used to record the current byte positions of each
+--     transform feedback buffer where the next vertex output data would be
+--     captured. This /can/ be used by a subsequent
+--     'cmdBeginTransformFeedbackEXT' call to resume transform feedback
+--     capture from this position. It can also be used by
+--     'cmdDrawIndirectByteCountEXT' to determine the vertex count of the
+--     draw call.
+--
+-- -   @pCounterBufferOffsets@ is an optional array of offsets within each
+--     of the @pCounterBuffers@ where the counter values can be written.
+--     The location in each counter buffer at these offsets /must/ be large
+--     enough to contain 4 bytes of data. The data stored at this location
+--     is the byte offset from the start of the transform feedback buffer
+--     binding where the next vertex data would be written. If
+--     @pCounterBufferOffsets@ is @NULL@, then it is assumed the offsets
+--     are zero.
+--
+-- == Valid Usage
+--
+-- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@
+--     /must/ be enabled
+--
+-- -   Transform feedback /must/ be active
+--
+-- -   @firstCounterBuffer@ /must/ be less than
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
+--
+-- -   The sum of @firstCounterBuffer@ and @counterBufferCount@ /must/ be
+--     less than or equal to
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@
+--
+-- -   If @counterBufferCount@ is not @0@, and @pCounterBuffers@ is not
+--     @NULL@, @pCounterBuffers@ /must/ be a valid pointer to an array of
+--     @counterBufferCount@ 'Vulkan.Core10.Handles.Buffer' handles that are
+--     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   For each buffer handle in the array, if it is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ reference a
+--     buffer large enough to hold 4 bytes at the corresponding offset from
+--     the @pCounterBufferOffsets@ array
+--
+-- -   If @pCounterBuffer@ is @NULL@, then @pCounterBufferOffsets@ /must/
+--     also be @NULL@
+--
+-- -   For each buffer handle in the @pCounterBuffers@ array that is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ have been created
+--     with a @usage@ value containing
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   If @counterBufferCount@ is not @0@, and @pCounterBufferOffsets@ is
+--     not @NULL@, @pCounterBufferOffsets@ /must/ be a valid pointer to an
+--     array of @counterBufferCount@ 'Vulkan.Core10.BaseType.DeviceSize'
+--     values
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   Both of @commandBuffer@, and the elements of @pCounterBuffers@ that
+--     are valid handles of non-ignored parameters /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdEndTransformFeedbackEXT :: forall io . MonadIO io => CommandBuffer -> ("firstCounterBuffer" ::: Word32) -> ("counterBuffers" ::: Vector Buffer) -> ("counterBufferOffsets" ::: Vector DeviceSize) -> io ()
+cmdEndTransformFeedbackEXT commandBuffer firstCounterBuffer counterBuffers counterBufferOffsets = liftIO . evalContT $ do
+  let vkCmdEndTransformFeedbackEXTPtr = pVkCmdEndTransformFeedbackEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdEndTransformFeedbackEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndTransformFeedbackEXT is null" Nothing Nothing
+  let vkCmdEndTransformFeedbackEXT' = mkVkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXTPtr
+  let pCounterBuffersLength = Data.Vector.length $ (counterBuffers)
+  let pCounterBufferOffsetsLength = Data.Vector.length $ (counterBufferOffsets)
+  lift $ unless (fromIntegral pCounterBufferOffsetsLength == pCounterBuffersLength || pCounterBufferOffsetsLength == 0) $
+    throwIO $ IOError Nothing InvalidArgument "" "pCounterBufferOffsets and pCounterBuffers must have the same length" Nothing Nothing
+  pPCounterBuffers <- ContT $ allocaBytesAligned @Buffer ((Data.Vector.length (counterBuffers)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (counterBuffers)
+  pCounterBufferOffsets <- if Data.Vector.null (counterBufferOffsets)
+    then pure nullPtr
+    else do
+      pPCounterBufferOffsets <- ContT $ allocaBytesAligned @DeviceSize (((Data.Vector.length (counterBufferOffsets))) * 8) 8
+      lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterBufferOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) ((counterBufferOffsets))
+      pure $ pPCounterBufferOffsets
+  lift $ vkCmdEndTransformFeedbackEXT' (commandBufferHandle (commandBuffer)) (firstCounterBuffer) ((fromIntegral pCounterBuffersLength :: Word32)) (pPCounterBuffers) pCounterBufferOffsets
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBeginQueryIndexedEXT
+  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> Word32 -> IO ()
+
+-- | vkCmdBeginQueryIndexedEXT - Begin an indexed query
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which this command will
+--     be recorded.
+--
+-- -   @queryPool@ is the query pool that will manage the results of the
+--     query.
+--
+-- -   @query@ is the query index within the query pool that will contain
+--     the results.
+--
+-- -   @flags@ is a bitmask of
+--     'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'
+--     specifying constraints on the types of queries that /can/ be
+--     performed.
+--
+-- -   @index@ is the query type specific index. When the query type is
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     the index represents the vertex stream.
+--
+-- = Description
+--
+-- The 'cmdBeginQueryIndexedEXT' command operates the same as the
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery' command, except that
+-- it also accepts a query type specific @index@ parameter.
+--
+-- == Valid Usage
+--
+-- -   @queryPool@ /must/ have been created with a @queryType@ that differs
+--     from that of any queries that are
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
+--     within @commandBuffer@
+--
+-- -   All queries used by the command /must/ be unavailable
+--
+-- -   The @queryType@ used to create @queryPool@ /must/ not be
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries>
+--     feature is not enabled, or the @queryType@ used to create
+--     @queryPool@ was not
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', @flags@ /must/
+--     not contain
+--     'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'
+--
+-- -   @query@ /must/ be less than the number of queries in @queryPool@
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', the
+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and
+--     any of the @pipelineStatistics@ indicate graphics operations, the
+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and
+--     any of the @pipelineStatistics@ indicate compute operations, the
+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If called within a render pass instance, the sum of @query@ and the
+--     number of bits set in the current subpass’s view mask /must/ be less
+--     than or equal to the number of queries in @queryPool@
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     the @index@ parameter /must/ be less than
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackStreams@
+--
+-- -   If the @queryType@ used to create @queryPool@ was not
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     the @index@ /must/ be zero
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     then
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackQueries@
+--     /must/ be supported
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#profiling-lock profiling lock>
+--     /must/ have been held before
+--     'Vulkan.Core10.CommandBuffer.beginCommandBuffer' was called on
+--     @commandBuffer@
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and
+--     one of the counters used to create @queryPool@ was
+--     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',
+--     the query begin /must/ be the first recorded command in
+--     @commandBuffer@
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and
+--     one of the counters used to create @queryPool@ was
+--     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',
+--     the begin command /must/ not be recorded within a render pass
+--     instance
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and
+--     another query pool with a @queryType@
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' has
+--     been used within @commandBuffer@, its parent primary command buffer
+--     or secondary command buffer recorded within the same parent primary
+--     command buffer as @commandBuffer@, the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-features-performanceCounterMultipleQueryPools performanceCounterMultipleQueryPools>
+--     feature /must/ be enabled
+--
+-- -   If @queryPool@ was created with a @queryType@ of
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
+--     this command /must/ not be recorded in a command buffer that, either
+--     directly or through secondary command buffers, also contains a
+--     'Vulkan.Core10.CommandBufferBuilding.cmdResetQueryPool' command
+--     affecting the same query
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'
+--     values
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlags',
+-- 'Vulkan.Core10.Handles.QueryPool'
+cmdBeginQueryIndexedEXT :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> ("index" ::: Word32) -> io ()
+cmdBeginQueryIndexedEXT commandBuffer queryPool query flags index = liftIO $ do
+  let vkCmdBeginQueryIndexedEXTPtr = pVkCmdBeginQueryIndexedEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdBeginQueryIndexedEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginQueryIndexedEXT is null" Nothing Nothing
+  let vkCmdBeginQueryIndexedEXT' = mkVkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXTPtr
+  vkCmdBeginQueryIndexedEXT' (commandBufferHandle (commandBuffer)) (queryPool) (query) (flags) (index)
+  pure $ ()
+
+-- | This function will call the supplied action between calls to
+-- 'cmdBeginQueryIndexedEXT' and 'cmdEndQueryIndexedEXT'
+--
+-- Note that 'cmdEndQueryIndexedEXT' is *not* called if an exception is
+-- thrown by the inner action.
+cmdUseQueryIndexedEXT :: forall io r . MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> Word32 -> io r -> io r
+cmdUseQueryIndexedEXT commandBuffer queryPool query flags index a =
+  (cmdBeginQueryIndexedEXT commandBuffer queryPool query flags index) *> a <* (cmdEndQueryIndexedEXT commandBuffer queryPool query index)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdEndQueryIndexedEXT
+  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdEndQueryIndexedEXT - Ends a query
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which this command will
+--     be recorded.
+--
+-- -   @queryPool@ is the query pool that is managing the results of the
+--     query.
+--
+-- -   @query@ is the query index within the query pool where the result is
+--     stored.
+--
+-- -   @index@ is the query type specific index.
+--
+-- = Description
+--
+-- The 'cmdEndQueryIndexedEXT' command operates the same as the
+-- 'Vulkan.Core10.CommandBufferBuilding.cmdEndQuery' command, except that
+-- it also accepts a query type specific @index@ parameter.
+--
+-- == Valid Usage
+--
+-- -   All queries used by the command /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>
+--
+-- -   @query@ /must/ be less than the number of queries in @queryPool@
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If 'cmdEndQueryIndexedEXT' is called within a render pass instance,
+--     the sum of @query@ and the number of bits set in the current
+--     subpass’s view mask /must/ be less than or equal to the number of
+--     queries in @queryPool@
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     the @index@ parameter /must/ be less than
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackStreams@
+--
+-- -   If the @queryType@ used to create @queryPool@ was not
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     the @index@ /must/ be zero
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+--     @index@ /must/ equal the @index@ used to begin the query
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'
+cmdEndQueryIndexedEXT :: forall io . MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> ("index" ::: Word32) -> io ()
+cmdEndQueryIndexedEXT commandBuffer queryPool query index = liftIO $ do
+  let vkCmdEndQueryIndexedEXTPtr = pVkCmdEndQueryIndexedEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdEndQueryIndexedEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndQueryIndexedEXT is null" Nothing Nothing
+  let vkCmdEndQueryIndexedEXT' = mkVkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXTPtr
+  vkCmdEndQueryIndexedEXT' (commandBufferHandle (commandBuffer)) (queryPool) (query) (index)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawIndirectByteCountEXT
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDrawIndirectByteCountEXT - Draw primitives where the vertex count
+-- is derived from the counter byte value in the counter buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @instanceCount@ is the number of instances to draw.
+--
+-- -   @firstInstance@ is the instance ID of the first instance to draw.
+--
+-- -   @counterBuffer@ is the buffer handle from where the byte count is
+--     read.
+--
+-- -   @counterBufferOffset@ is the offset into the buffer used to read the
+--     byte count, which is used to calculate the vertex count for this
+--     draw call.
+--
+-- -   @counterOffset@ is subtracted from the byte count read from the
+--     @counterBuffer@ at the @counterBufferOffset@
+--
+-- -   @vertexStride@ is the stride in bytes between each element of the
+--     vertex data that is used to calculate the vertex count from the
+--     counter value. This value is typically the same value that was used
+--     in the graphics pipeline state when the transform feedback was
+--     captured as the @XfbStride@.
+--
+-- = Description
+--
+-- When the command is executed, primitives are assembled in the same way
+-- as done with 'Vulkan.Core10.CommandBufferBuilding.cmdDraw' except the
+-- @vertexCount@ is calculated based on the byte count read from
+-- @counterBuffer@ at offset @counterBufferOffset@. The assembled
+-- primitives execute the bound graphics pipeline.
+--
+-- The effective @vertexCount@ is calculated as follows:
+--
+-- > const uint32_t * counterBufferPtr = (const uint8_t *)counterBuffer.address + counterBufferOffset;
+-- > vertexCount = floor(max(0, (*counterBufferPtr - counterOffset)) / vertexStride);
+--
+-- The effective @firstVertex@ is zero.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   The current render pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   Image subresources used as attachments in the current render pass
+--     /must/ not be accessed in any way other than as an attachment by
+--     this command
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   If the bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers
+--     bound
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   For a given vertex buffer binding, any attribute data fetched /must/
+--     be entirely contained within the corresponding vertex buffer
+--     binding, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
+--
+-- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@
+--     /must/ be enabled
+--
+-- -   The implementation /must/ support
+--     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackDraw@
+--
+-- -   @vertexStride@ /must/ be greater than 0 and less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTransformFeedbackBufferDataStride@
+--
+-- -   @counterBuffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @counterBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   Both of @commandBuffer@, and @counterBuffer@ /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdDrawIndirectByteCountEXT :: forall io . MonadIO io => CommandBuffer -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("counterBuffer" ::: Buffer) -> ("counterBufferOffset" ::: DeviceSize) -> ("counterOffset" ::: Word32) -> ("vertexStride" ::: Word32) -> io ()
+cmdDrawIndirectByteCountEXT commandBuffer instanceCount firstInstance counterBuffer counterBufferOffset counterOffset vertexStride = liftIO $ do
+  let vkCmdDrawIndirectByteCountEXTPtr = pVkCmdDrawIndirectByteCountEXT (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDrawIndirectByteCountEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndirectByteCountEXT is null" Nothing Nothing
+  let vkCmdDrawIndirectByteCountEXT' = mkVkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXTPtr
+  vkCmdDrawIndirectByteCountEXT' (commandBufferHandle (commandBuffer)) (instanceCount) (firstInstance) (counterBuffer) (counterBufferOffset) (counterOffset) (vertexStride)
+  pure $ ()
+
+
+-- | VkPhysicalDeviceTransformFeedbackFeaturesEXT - Structure describing
+-- transform feedback features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceTransformFeedbackFeaturesEXT'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceTransformFeedbackFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceTransformFeedbackFeaturesEXT' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceTransformFeedbackFeaturesEXT = PhysicalDeviceTransformFeedbackFeaturesEXT
+  { -- | @transformFeedback@ indicates whether the implementation supports
+    -- transform feedback and shader modules /can/ declare the
+    -- @TransformFeedback@ capability.
+    transformFeedback :: Bool
+  , -- | @geometryStreams@ indicates whether the implementation supports the
+    -- @GeometryStreams@ SPIR-V capability.
+    geometryStreams :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceTransformFeedbackFeaturesEXT
+
+instance ToCStruct PhysicalDeviceTransformFeedbackFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceTransformFeedbackFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (transformFeedback))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (geometryStreams))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceTransformFeedbackFeaturesEXT where
+  peekCStruct p = do
+    transformFeedback <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    geometryStreams <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceTransformFeedbackFeaturesEXT
+             (bool32ToBool transformFeedback) (bool32ToBool geometryStreams)
+
+instance Storable PhysicalDeviceTransformFeedbackFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceTransformFeedbackFeaturesEXT where
+  zero = PhysicalDeviceTransformFeedbackFeaturesEXT
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceTransformFeedbackPropertiesEXT - Structure describing
+-- transform feedback properties that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceTransformFeedbackPropertiesEXT'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceTransformFeedbackPropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits and properties.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceTransformFeedbackPropertiesEXT = PhysicalDeviceTransformFeedbackPropertiesEXT
+  { -- | @maxTransformFeedbackStreams@ is the maximum number of vertex streams
+    -- that can be output from geometry shaders declared with the
+    -- @GeometryStreams@ capability. If the implementation does not support
+    -- 'PhysicalDeviceTransformFeedbackFeaturesEXT'::@geometryStreams@ then
+    -- @maxTransformFeedbackStreams@ /must/ be set to @1@.
+    maxTransformFeedbackStreams :: Word32
+  , -- | @maxTransformFeedbackBuffers@ is the maximum number of transform
+    -- feedback buffers that can be bound for capturing shader outputs from the
+    -- last vertex processing stage.
+    maxTransformFeedbackBuffers :: Word32
+  , -- | @maxTransformFeedbackBufferSize@ is the maximum size that can be
+    -- specified when binding a buffer for transform feedback in
+    -- 'cmdBindTransformFeedbackBuffersEXT'.
+    maxTransformFeedbackBufferSize :: DeviceSize
+  , -- | @maxTransformFeedbackStreamDataSize@ is the maximum amount of data in
+    -- bytes for each vertex that captured to one or more transform feedback
+    -- buffers associated with a specific vertex stream.
+    maxTransformFeedbackStreamDataSize :: Word32
+  , -- | @maxTransformFeedbackBufferDataSize@ is the maximum amount of data in
+    -- bytes for each vertex that can be captured to a specific transform
+    -- feedback buffer.
+    maxTransformFeedbackBufferDataSize :: Word32
+  , -- | @maxTransformFeedbackBufferDataStride@ is the maximum stride between
+    -- each capture of vertex data to the buffer.
+    maxTransformFeedbackBufferDataStride :: Word32
+  , -- | @transformFeedbackQueries@ is true if the implementation supports the
+    -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'
+    -- query type. @transformFeedbackQueries@ is false if queries of this type
+    -- /cannot/ be created.
+    transformFeedbackQueries :: Bool
+  , -- | @transformFeedbackStreamsLinesTriangles@ is true if the implementation
+    -- supports the geometry shader @OpExecutionMode@ of @OutputLineStrip@ and
+    -- @OutputTriangleStrip@ in addition to @OutputPoints@ when more than one
+    -- vertex stream is output. If @transformFeedbackStreamsLinesTriangles@ is
+    -- false the implementation only supports an @OpExecutionMode@ of
+    -- @OutputPoints@ when more than one vertex stream is output from the
+    -- geometry shader.
+    transformFeedbackStreamsLinesTriangles :: Bool
+  , -- | @transformFeedbackRasterizationStreamSelect@ is true if the
+    -- implementation supports the @GeometryStreams@ SPIR-V capability and the
+    -- application can use 'PipelineRasterizationStateStreamCreateInfoEXT' to
+    -- modify which vertex stream output is used for rasterization. Otherwise
+    -- vertex stream @0@ /must/ always be used for rasterization.
+    transformFeedbackRasterizationStreamSelect :: Bool
+  , -- | @transformFeedbackDraw@ is true if the implementation supports the
+    -- 'cmdDrawIndirectByteCountEXT' function otherwise the function /must/ not
+    -- be called.
+    transformFeedbackDraw :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceTransformFeedbackPropertiesEXT
+
+instance ToCStruct PhysicalDeviceTransformFeedbackPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceTransformFeedbackPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxTransformFeedbackStreams)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxTransformFeedbackBuffers)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (maxTransformFeedbackBufferSize)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (maxTransformFeedbackStreamDataSize)
+    poke ((p `plusPtr` 36 :: Ptr Word32)) (maxTransformFeedbackBufferDataSize)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (maxTransformFeedbackBufferDataStride)
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (transformFeedbackQueries))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (transformFeedbackStreamsLinesTriangles))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (transformFeedbackRasterizationStreamSelect))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (transformFeedbackDraw))
+    f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceTransformFeedbackPropertiesEXT where
+  peekCStruct p = do
+    maxTransformFeedbackStreams <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxTransformFeedbackBuffers <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    maxTransformFeedbackBufferSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    maxTransformFeedbackStreamDataSize <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    maxTransformFeedbackBufferDataSize <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
+    maxTransformFeedbackBufferDataStride <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    transformFeedbackQueries <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    transformFeedbackStreamsLinesTriangles <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    transformFeedbackRasterizationStreamSelect <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))
+    transformFeedbackDraw <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))
+    pure $ PhysicalDeviceTransformFeedbackPropertiesEXT
+             maxTransformFeedbackStreams maxTransformFeedbackBuffers maxTransformFeedbackBufferSize maxTransformFeedbackStreamDataSize maxTransformFeedbackBufferDataSize maxTransformFeedbackBufferDataStride (bool32ToBool transformFeedbackQueries) (bool32ToBool transformFeedbackStreamsLinesTriangles) (bool32ToBool transformFeedbackRasterizationStreamSelect) (bool32ToBool transformFeedbackDraw)
+
+instance Storable PhysicalDeviceTransformFeedbackPropertiesEXT where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceTransformFeedbackPropertiesEXT where
+  zero = PhysicalDeviceTransformFeedbackPropertiesEXT
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineRasterizationStateStreamCreateInfoEXT - Structure defining the
+-- geometry stream used for rasterization
+--
+-- = Description
+--
+-- If this structure is not present, @rasterizationStream@ is assumed to be
+-- zero.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PipelineRasterizationStateStreamCreateFlagsEXT',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineRasterizationStateStreamCreateInfoEXT = PipelineRasterizationStateStreamCreateInfoEXT
+  { -- | @flags@ /must/ be @0@
+    flags :: PipelineRasterizationStateStreamCreateFlagsEXT
+  , -- | @rasterizationStream@ /must/ be zero if
+    -- 'PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackRasterizationStreamSelect@
+    -- is 'Vulkan.Core10.BaseType.FALSE'
+    rasterizationStream :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PipelineRasterizationStateStreamCreateInfoEXT
+
+instance ToCStruct PipelineRasterizationStateStreamCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineRasterizationStateStreamCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateStreamCreateFlagsEXT)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (rasterizationStream)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PipelineRasterizationStateStreamCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @PipelineRasterizationStateStreamCreateFlagsEXT ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateStreamCreateFlagsEXT))
+    rasterizationStream <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pure $ PipelineRasterizationStateStreamCreateInfoEXT
+             flags rasterizationStream
+
+instance Storable PipelineRasterizationStateStreamCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineRasterizationStateStreamCreateInfoEXT where
+  zero = PipelineRasterizationStateStreamCreateInfoEXT
+           zero
+           zero
+
+
+-- | VkPipelineRasterizationStateStreamCreateFlagsEXT - Reserved for future
+-- use
+--
+-- = Description
+--
+-- 'PipelineRasterizationStateStreamCreateFlagsEXT' is a bitmask type for
+-- setting a mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'PipelineRasterizationStateStreamCreateInfoEXT'
+newtype PipelineRasterizationStateStreamCreateFlagsEXT = PipelineRasterizationStateStreamCreateFlagsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineRasterizationStateStreamCreateFlagsEXT where
+  showsPrec p = \case
+    PipelineRasterizationStateStreamCreateFlagsEXT x -> showParen (p >= 11) (showString "PipelineRasterizationStateStreamCreateFlagsEXT 0x" . showHex x)
+
+instance Read PipelineRasterizationStateStreamCreateFlagsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineRasterizationStateStreamCreateFlagsEXT")
+                       v <- step readPrec
+                       pure (PipelineRasterizationStateStreamCreateFlagsEXT v)))
+
+
+type EXT_TRANSFORM_FEEDBACK_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION"
+pattern EXT_TRANSFORM_FEEDBACK_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_TRANSFORM_FEEDBACK_SPEC_VERSION = 1
+
+
+type EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME = "VK_EXT_transform_feedback"
+
+-- No documentation found for TopLevel "VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME"
+pattern EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME = "VK_EXT_transform_feedback"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs-boot b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_transform_feedback  ( PhysicalDeviceTransformFeedbackFeaturesEXT
+                                                    , PhysicalDeviceTransformFeedbackPropertiesEXT
+                                                    , PipelineRasterizationStateStreamCreateInfoEXT
+                                                    ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceTransformFeedbackFeaturesEXT
+
+instance ToCStruct PhysicalDeviceTransformFeedbackFeaturesEXT
+instance Show PhysicalDeviceTransformFeedbackFeaturesEXT
+
+instance FromCStruct PhysicalDeviceTransformFeedbackFeaturesEXT
+
+
+data PhysicalDeviceTransformFeedbackPropertiesEXT
+
+instance ToCStruct PhysicalDeviceTransformFeedbackPropertiesEXT
+instance Show PhysicalDeviceTransformFeedbackPropertiesEXT
+
+instance FromCStruct PhysicalDeviceTransformFeedbackPropertiesEXT
+
+
+data PipelineRasterizationStateStreamCreateInfoEXT
+
+instance ToCStruct PipelineRasterizationStateStreamCreateInfoEXT
+instance Show PipelineRasterizationStateStreamCreateInfoEXT
+
+instance FromCStruct PipelineRasterizationStateStreamCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_validation_cache.hs b/src/Vulkan/Extensions/VK_EXT_validation_cache.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_validation_cache.hs
@@ -0,0 +1,700 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_validation_cache  ( createValidationCacheEXT
+                                                  , withValidationCacheEXT
+                                                  , destroyValidationCacheEXT
+                                                  , getValidationCacheDataEXT
+                                                  , mergeValidationCachesEXT
+                                                  , ValidationCacheCreateInfoEXT(..)
+                                                  , ShaderModuleValidationCacheCreateInfoEXT(..)
+                                                  , ValidationCacheCreateFlagsEXT(..)
+                                                  , ValidationCacheHeaderVersionEXT( VALIDATION_CACHE_HEADER_VERSION_ONE_EXT
+                                                                                   , ..
+                                                                                   )
+                                                  , EXT_VALIDATION_CACHE_SPEC_VERSION
+                                                  , pattern EXT_VALIDATION_CACHE_SPEC_VERSION
+                                                  , EXT_VALIDATION_CACHE_EXTENSION_NAME
+                                                  , pattern EXT_VALIDATION_CACHE_EXTENSION_NAME
+                                                  , ValidationCacheEXT(..)
+                                                  ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.ByteString (packCStringLen)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Foreign.C.Types (CSize(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateValidationCacheEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyValidationCacheEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkGetValidationCacheDataEXT))
+import Vulkan.Dynamic (DeviceCmds(pVkMergeValidationCachesEXT))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Extensions.Handles (ValidationCacheEXT)
+import Vulkan.Extensions.Handles (ValidationCacheEXT(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (ValidationCacheEXT(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateValidationCacheEXT
+  :: FunPtr (Ptr Device_T -> Ptr ValidationCacheCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr ValidationCacheEXT -> IO Result) -> Ptr Device_T -> Ptr ValidationCacheCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr ValidationCacheEXT -> IO Result
+
+-- | vkCreateValidationCacheEXT - Creates a new validation cache
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the validation cache
+--     object.
+--
+-- -   @pCreateInfo@ is a pointer to a 'ValidationCacheCreateInfoEXT'
+--     structure containing the initial parameters for the validation cache
+--     object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pValidationCache@ is a pointer to a
+--     'Vulkan.Extensions.Handles.ValidationCacheEXT' handle in which the
+--     resulting validation cache object is returned.
+--
+-- = 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
+-- 'getValidationCacheDataEXT'. 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
+-- 'Vulkan.Core10.Shader.createShaderModule' command by adding this object
+-- to the 'Vulkan.Core10.Shader.ShaderModuleCreateInfo' structure’s @pNext@
+-- chain. If a 'ShaderModuleValidationCacheCreateInfoEXT' object is
+-- included in the 'Vulkan.Core10.Shader.ShaderModuleCreateInfo'::@pNext@
+-- chain, and its @validationCache@ field is not
+-- 'Vulkan.Core10.APIConstants.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
+-- 'Vulkan.Core10.Shader.createShaderModule' command.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'ValidationCacheCreateInfoEXT' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pValidationCache@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.ValidationCacheEXT' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'ValidationCacheCreateInfoEXT',
+-- 'Vulkan.Extensions.Handles.ValidationCacheEXT'
+createValidationCacheEXT :: forall io . MonadIO io => Device -> ValidationCacheCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io (ValidationCacheEXT)
+createValidationCacheEXT device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateValidationCacheEXTPtr = pVkCreateValidationCacheEXT (deviceCmds (device :: Device))
+  lift $ unless (vkCreateValidationCacheEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateValidationCacheEXT is null" Nothing Nothing
+  let vkCreateValidationCacheEXT' = mkVkCreateValidationCacheEXT vkCreateValidationCacheEXTPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPValidationCache <- ContT $ bracket (callocBytes @ValidationCacheEXT 8) free
+  r <- lift $ vkCreateValidationCacheEXT' (deviceHandle (device)) pCreateInfo pAllocator (pPValidationCache)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pValidationCache <- lift $ peek @ValidationCacheEXT pPValidationCache
+  pure $ (pValidationCache)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createValidationCacheEXT' and 'destroyValidationCacheEXT'
+--
+-- To ensure that 'destroyValidationCacheEXT' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withValidationCacheEXT :: forall io r . MonadIO io => Device -> ValidationCacheCreateInfoEXT -> Maybe AllocationCallbacks -> (io (ValidationCacheEXT) -> ((ValidationCacheEXT) -> io ()) -> r) -> r
+withValidationCacheEXT device pCreateInfo pAllocator b =
+  b (createValidationCacheEXT device pCreateInfo pAllocator)
+    (\(o0) -> destroyValidationCacheEXT device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyValidationCacheEXT
+  :: FunPtr (Ptr Device_T -> ValidationCacheEXT -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> ValidationCacheEXT -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyValidationCacheEXT - Destroy a validation cache object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @validationCache@ was created, a compatible set of
+--     callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @validationCache@ was created, @pAllocator@ /must/ be
+--     @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @validationCache@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @validationCache@ /must/
+--     be a valid 'Vulkan.Extensions.Handles.ValidationCacheEXT' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @validationCache@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @validationCache@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Extensions.Handles.ValidationCacheEXT'
+destroyValidationCacheEXT :: forall io . MonadIO io => Device -> ValidationCacheEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyValidationCacheEXT device validationCache allocator = liftIO . evalContT $ do
+  let vkDestroyValidationCacheEXTPtr = pVkDestroyValidationCacheEXT (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyValidationCacheEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyValidationCacheEXT is null" Nothing Nothing
+  let vkDestroyValidationCacheEXT' = mkVkDestroyValidationCacheEXT vkDestroyValidationCacheEXTPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyValidationCacheEXT' (deviceHandle (device)) (validationCache) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetValidationCacheDataEXT
+  :: FunPtr (Ptr Device_T -> ValidationCacheEXT -> Ptr CSize -> Ptr () -> IO Result) -> Ptr Device_T -> ValidationCacheEXT -> Ptr CSize -> Ptr () -> IO Result
+
+-- | vkGetValidationCacheDataEXT - Get the data store from a validation cache
+--
+-- = 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
+--
+-- 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 'getValidationCacheDataEXT' will return
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE'. Any data written to @pData@ is
+-- valid and /can/ be provided as the @pInitialData@ member of the
+-- 'ValidationCacheCreateInfoEXT' structure passed to
+-- 'createValidationCacheEXT'.
+--
+-- Two calls to 'getValidationCacheDataEXT' 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:
+--
+-- +--------+----------------------------------------+--------------------------------------------------+
+-- | Offset | Size                                   | Meaning                                          |
+-- +========+========================================+==================================================+
+-- | 0      | 4                                      | length in bytes of the entire validation cache   |
+-- |        |                                        | header written as a stream of bytes, with the    |
+-- |        |                                        | least significant byte first                     |
+-- +--------+----------------------------------------+--------------------------------------------------+
+-- | 4      | 4                                      | a 'ValidationCacheHeaderVersionEXT' value        |
+-- |        |                                        | written as a stream of bytes, with the least     |
+-- |        |                                        | significant byte first                           |
+-- +--------+----------------------------------------+--------------------------------------------------+
+-- | 8      | 'Vulkan.Core10.APIConstants.UUID_SIZE' | a layer commit ID expressed as a UUID, which     |
+-- |        |                                        | uniquely identifies the version of the           |
+-- |        |                                        | validation layers used to generate these         |
+-- |        |                                        | validation results                               |
+-- +--------+----------------------------------------+--------------------------------------------------+
+--
+-- Layout for validation cache header version
+-- '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 'ValidationCacheHeaderVersionEXT'. 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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @validationCache@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.ValidationCacheEXT' 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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Extensions.Handles.ValidationCacheEXT'
+getValidationCacheDataEXT :: forall io . MonadIO io => Device -> ValidationCacheEXT -> io (Result, ("data" ::: ByteString))
+getValidationCacheDataEXT device validationCache = liftIO . evalContT $ do
+  let vkGetValidationCacheDataEXTPtr = pVkGetValidationCacheDataEXT (deviceCmds (device :: Device))
+  lift $ unless (vkGetValidationCacheDataEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetValidationCacheDataEXT is null" Nothing Nothing
+  let vkGetValidationCacheDataEXT' = mkVkGetValidationCacheDataEXT vkGetValidationCacheDataEXTPtr
+  let device' = deviceHandle (device)
+  pPDataSize <- ContT $ bracket (callocBytes @CSize 8) free
+  r <- lift $ vkGetValidationCacheDataEXT' device' (validationCache) (pPDataSize) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pDataSize <- lift $ peek @CSize pPDataSize
+  pPData <- ContT $ bracket (callocBytes @(()) (fromIntegral (((\(CSize a) -> a) pDataSize)))) free
+  r' <- lift $ vkGetValidationCacheDataEXT' device' (validationCache) (pPDataSize) (pPData)
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pDataSize'' <- lift $ peek @CSize pPDataSize
+  pData' <- lift $ packCStringLen  (castPtr @() @CChar pPData, (fromIntegral (((\(CSize a) -> a) pDataSize''))))
+  pure $ ((r'), pData')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkMergeValidationCachesEXT
+  :: FunPtr (Ptr Device_T -> ValidationCacheEXT -> Word32 -> Ptr ValidationCacheEXT -> IO Result) -> Ptr Device_T -> ValidationCacheEXT -> Word32 -> Ptr ValidationCacheEXT -> IO Result
+
+-- | vkMergeValidationCachesEXT - Combine the data stores of validation
+-- caches
+--
+-- = 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 a pointer to an array of validation cache handles,
+--     which will be merged into @dstCache@. The previous contents of
+--     @dstCache@ are included after the merge.
+--
+-- = 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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @dstCache@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.ValidationCacheEXT' handle
+--
+-- -   @pSrcCaches@ /must/ be a valid pointer to an array of
+--     @srcCacheCount@ valid 'Vulkan.Extensions.Handles.ValidationCacheEXT'
+--     handles
+--
+-- -   @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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Extensions.Handles.ValidationCacheEXT'
+mergeValidationCachesEXT :: forall io . MonadIO io => Device -> ("dstCache" ::: ValidationCacheEXT) -> ("srcCaches" ::: Vector ValidationCacheEXT) -> io ()
+mergeValidationCachesEXT device dstCache srcCaches = liftIO . evalContT $ do
+  let vkMergeValidationCachesEXTPtr = pVkMergeValidationCachesEXT (deviceCmds (device :: Device))
+  lift $ unless (vkMergeValidationCachesEXTPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkMergeValidationCachesEXT is null" Nothing Nothing
+  let vkMergeValidationCachesEXT' = mkVkMergeValidationCachesEXT vkMergeValidationCachesEXTPtr
+  pPSrcCaches <- ContT $ allocaBytesAligned @ValidationCacheEXT ((Data.Vector.length (srcCaches)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPSrcCaches `plusPtr` (8 * (i)) :: Ptr ValidationCacheEXT) (e)) (srcCaches)
+  r <- lift $ vkMergeValidationCachesEXT' (deviceHandle (device)) (dstCache) ((fromIntegral (Data.Vector.length $ (srcCaches)) :: Word32)) (pPSrcCaches)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkValidationCacheCreateInfoEXT - Structure specifying parameters of a
+-- newly created validation cache
+--
+-- == Valid Usage
+--
+-- -   If @initialDataSize@ is not @0@, it /must/ be equal to the size of
+--     @pInitialData@, as returned by 'getValidationCacheDataEXT' when
+--     @pInitialData@ was originally retrieved
+--
+-- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ have been
+--     retrieved from a previous call to 'getValidationCacheDataEXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.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
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'ValidationCacheCreateFlagsEXT', 'createValidationCacheEXT'
+data ValidationCacheCreateInfoEXT = ValidationCacheCreateInfoEXT
+  { -- | @flags@ is reserved for future use.
+    flags :: ValidationCacheCreateFlagsEXT
+  , -- | @initialDataSize@ is the number of bytes in @pInitialData@. If
+    -- @initialDataSize@ is zero, the validation cache will initially be empty.
+    initialDataSize :: Word64
+  , -- | @pInitialData@ is a pointer to previously retrieved validation cache
+    -- data. If the validation cache data is incompatible (as defined below)
+    -- with the device, the validation cache will be initially empty. If
+    -- @initialDataSize@ is zero, @pInitialData@ is ignored.
+    initialData :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show ValidationCacheCreateInfoEXT
+
+instance ToCStruct ValidationCacheCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ValidationCacheCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ValidationCacheCreateFlagsEXT)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (initialDataSize))
+    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (initialData)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 32 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct ValidationCacheCreateInfoEXT where
+  peekCStruct p = do
+    flags <- peek @ValidationCacheCreateFlagsEXT ((p `plusPtr` 16 :: Ptr ValidationCacheCreateFlagsEXT))
+    initialDataSize <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
+    pInitialData <- peek @(Ptr ()) ((p `plusPtr` 32 :: Ptr (Ptr ())))
+    pure $ ValidationCacheCreateInfoEXT
+             flags ((\(CSize a) -> a) initialDataSize) pInitialData
+
+instance Storable ValidationCacheCreateInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ValidationCacheCreateInfoEXT where
+  zero = ValidationCacheCreateInfoEXT
+           zero
+           zero
+           zero
+
+
+-- | VkShaderModuleValidationCacheCreateInfoEXT - Specify validation cache to
+-- use during shader module creation
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.Handles.ValidationCacheEXT'
+data ShaderModuleValidationCacheCreateInfoEXT = ShaderModuleValidationCacheCreateInfoEXT
+  { -- | @validationCache@ /must/ be a valid
+    -- 'Vulkan.Extensions.Handles.ValidationCacheEXT' handle
+    validationCache :: ValidationCacheEXT }
+  deriving (Typeable)
+deriving instance Show ShaderModuleValidationCacheCreateInfoEXT
+
+instance ToCStruct ShaderModuleValidationCacheCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ShaderModuleValidationCacheCreateInfoEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ValidationCacheEXT)) (validationCache)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ValidationCacheEXT)) (zero)
+    f
+
+instance FromCStruct ShaderModuleValidationCacheCreateInfoEXT where
+  peekCStruct p = do
+    validationCache <- peek @ValidationCacheEXT ((p `plusPtr` 16 :: Ptr ValidationCacheEXT))
+    pure $ ShaderModuleValidationCacheCreateInfoEXT
+             validationCache
+
+instance Storable ShaderModuleValidationCacheCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ShaderModuleValidationCacheCreateInfoEXT where
+  zero = ShaderModuleValidationCacheCreateInfoEXT
+           zero
+
+
+-- | VkValidationCacheCreateFlagsEXT - Reserved for future use
+--
+-- = Description
+--
+-- 'ValidationCacheCreateFlagsEXT' is a bitmask type for setting a mask,
+-- but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'ValidationCacheCreateInfoEXT'
+newtype ValidationCacheCreateFlagsEXT = ValidationCacheCreateFlagsEXT Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show ValidationCacheCreateFlagsEXT where
+  showsPrec p = \case
+    ValidationCacheCreateFlagsEXT x -> showParen (p >= 11) (showString "ValidationCacheCreateFlagsEXT 0x" . showHex x)
+
+instance Read ValidationCacheCreateFlagsEXT where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ValidationCacheCreateFlagsEXT")
+                       v <- step readPrec
+                       pure (ValidationCacheCreateFlagsEXT v)))
+
+
+-- | VkValidationCacheHeaderVersionEXT - Encode validation cache version
+--
+-- = See Also
+--
+-- 'createValidationCacheEXT', 'getValidationCacheDataEXT'
+newtype ValidationCacheHeaderVersionEXT = ValidationCacheHeaderVersionEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+-- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
+
+-- | 'VALIDATION_CACHE_HEADER_VERSION_ONE_EXT' specifies version one of the
+-- validation cache.
+pattern VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = ValidationCacheHeaderVersionEXT 1
+{-# complete VALIDATION_CACHE_HEADER_VERSION_ONE_EXT :: ValidationCacheHeaderVersionEXT #-}
+
+instance Show ValidationCacheHeaderVersionEXT where
+  showsPrec p = \case
+    VALIDATION_CACHE_HEADER_VERSION_ONE_EXT -> showString "VALIDATION_CACHE_HEADER_VERSION_ONE_EXT"
+    ValidationCacheHeaderVersionEXT x -> showParen (p >= 11) (showString "ValidationCacheHeaderVersionEXT " . showsPrec 11 x)
+
+instance Read ValidationCacheHeaderVersionEXT where
+  readPrec = parens (choose [("VALIDATION_CACHE_HEADER_VERSION_ONE_EXT", pure VALIDATION_CACHE_HEADER_VERSION_ONE_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ValidationCacheHeaderVersionEXT")
+                       v <- step readPrec
+                       pure (ValidationCacheHeaderVersionEXT v)))
+
+
+type EXT_VALIDATION_CACHE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_VALIDATION_CACHE_SPEC_VERSION"
+pattern EXT_VALIDATION_CACHE_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_VALIDATION_CACHE_SPEC_VERSION = 1
+
+
+type EXT_VALIDATION_CACHE_EXTENSION_NAME = "VK_EXT_validation_cache"
+
+-- No documentation found for TopLevel "VK_EXT_VALIDATION_CACHE_EXTENSION_NAME"
+pattern EXT_VALIDATION_CACHE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_VALIDATION_CACHE_EXTENSION_NAME = "VK_EXT_validation_cache"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_validation_cache.hs-boot b/src/Vulkan/Extensions/VK_EXT_validation_cache.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_validation_cache.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_validation_cache  ( ShaderModuleValidationCacheCreateInfoEXT
+                                                  , ValidationCacheCreateInfoEXT
+                                                  ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ShaderModuleValidationCacheCreateInfoEXT
+
+instance ToCStruct ShaderModuleValidationCacheCreateInfoEXT
+instance Show ShaderModuleValidationCacheCreateInfoEXT
+
+instance FromCStruct ShaderModuleValidationCacheCreateInfoEXT
+
+
+data ValidationCacheCreateInfoEXT
+
+instance ToCStruct ValidationCacheCreateInfoEXT
+instance Show ValidationCacheCreateInfoEXT
+
+instance FromCStruct ValidationCacheCreateInfoEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_validation_features.hs b/src/Vulkan/Extensions/VK_EXT_validation_features.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_validation_features.hs
@@ -0,0 +1,289 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_validation_features  ( ValidationFeaturesEXT(..)
+                                                     , ValidationFeatureEnableEXT( VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT
+                                                                                 , VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT
+                                                                                 , VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT
+                                                                                 , VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT
+                                                                                 , ..
+                                                                                 )
+                                                     , ValidationFeatureDisableEXT( VALIDATION_FEATURE_DISABLE_ALL_EXT
+                                                                                  , VALIDATION_FEATURE_DISABLE_SHADERS_EXT
+                                                                                  , VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT
+                                                                                  , VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT
+                                                                                  , VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT
+                                                                                  , VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT
+                                                                                  , VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT
+                                                                                  , ..
+                                                                                  )
+                                                     , EXT_VALIDATION_FEATURES_SPEC_VERSION
+                                                     , pattern EXT_VALIDATION_FEATURES_SPEC_VERSION
+                                                     , EXT_VALIDATION_FEATURES_EXTENSION_NAME
+                                                     , pattern EXT_VALIDATION_FEATURES_EXTENSION_NAME
+                                                     ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_VALIDATION_FEATURES_EXT))
+-- | VkValidationFeaturesEXT - Specify validation features to enable or
+-- disable for a Vulkan instance
+--
+-- == Valid Usage
+--
+-- -   If the @pEnabledValidationFeatures@ array contains
+--     'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT',
+--     then it /must/ also contain
+--     'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT'
+--
+-- -   If the @pEnabledValidationFeatures@ array contains
+--     'VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT', then it /must/ not
+--     contain 'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_VALIDATION_FEATURES_EXT'
+--
+-- -   If @enabledValidationFeatureCount@ is not @0@,
+--     @pEnabledValidationFeatures@ /must/ be a valid pointer to an array
+--     of @enabledValidationFeatureCount@ valid
+--     'ValidationFeatureEnableEXT' values
+--
+-- -   If @disabledValidationFeatureCount@ is not @0@,
+--     @pDisabledValidationFeatures@ /must/ be a valid pointer to an array
+--     of @disabledValidationFeatureCount@ valid
+--     'ValidationFeatureDisableEXT' values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'ValidationFeatureDisableEXT', 'ValidationFeatureEnableEXT'
+data ValidationFeaturesEXT = ValidationFeaturesEXT
+  { -- | @pEnabledValidationFeatures@ is a pointer to an array of
+    -- 'ValidationFeatureEnableEXT' values specifying the validation features
+    -- to be enabled.
+    enabledValidationFeatures :: Vector ValidationFeatureEnableEXT
+  , -- | @pDisabledValidationFeatures@ is a pointer to an array of
+    -- 'ValidationFeatureDisableEXT' values specifying the validation features
+    -- to be disabled.
+    disabledValidationFeatures :: Vector ValidationFeatureDisableEXT
+  }
+  deriving (Typeable)
+deriving instance Show ValidationFeaturesEXT
+
+instance ToCStruct ValidationFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ValidationFeaturesEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_FEATURES_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledValidationFeatures)) :: Word32))
+    pPEnabledValidationFeatures' <- ContT $ allocaBytesAligned @ValidationFeatureEnableEXT ((Data.Vector.length (enabledValidationFeatures)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPEnabledValidationFeatures' `plusPtr` (4 * (i)) :: Ptr ValidationFeatureEnableEXT) (e)) (enabledValidationFeatures)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ValidationFeatureEnableEXT))) (pPEnabledValidationFeatures')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (disabledValidationFeatures)) :: Word32))
+    pPDisabledValidationFeatures' <- ContT $ allocaBytesAligned @ValidationFeatureDisableEXT ((Data.Vector.length (disabledValidationFeatures)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDisabledValidationFeatures' `plusPtr` (4 * (i)) :: Ptr ValidationFeatureDisableEXT) (e)) (disabledValidationFeatures)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr ValidationFeatureDisableEXT))) (pPDisabledValidationFeatures')
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_FEATURES_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPEnabledValidationFeatures' <- ContT $ allocaBytesAligned @ValidationFeatureEnableEXT ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPEnabledValidationFeatures' `plusPtr` (4 * (i)) :: Ptr ValidationFeatureEnableEXT) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ValidationFeatureEnableEXT))) (pPEnabledValidationFeatures')
+    pPDisabledValidationFeatures' <- ContT $ allocaBytesAligned @ValidationFeatureDisableEXT ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDisabledValidationFeatures' `plusPtr` (4 * (i)) :: Ptr ValidationFeatureDisableEXT) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr ValidationFeatureDisableEXT))) (pPDisabledValidationFeatures')
+    lift $ f
+
+instance FromCStruct ValidationFeaturesEXT where
+  peekCStruct p = do
+    enabledValidationFeatureCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pEnabledValidationFeatures <- peek @(Ptr ValidationFeatureEnableEXT) ((p `plusPtr` 24 :: Ptr (Ptr ValidationFeatureEnableEXT)))
+    pEnabledValidationFeatures' <- generateM (fromIntegral enabledValidationFeatureCount) (\i -> peek @ValidationFeatureEnableEXT ((pEnabledValidationFeatures `advancePtrBytes` (4 * (i)) :: Ptr ValidationFeatureEnableEXT)))
+    disabledValidationFeatureCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pDisabledValidationFeatures <- peek @(Ptr ValidationFeatureDisableEXT) ((p `plusPtr` 40 :: Ptr (Ptr ValidationFeatureDisableEXT)))
+    pDisabledValidationFeatures' <- generateM (fromIntegral disabledValidationFeatureCount) (\i -> peek @ValidationFeatureDisableEXT ((pDisabledValidationFeatures `advancePtrBytes` (4 * (i)) :: Ptr ValidationFeatureDisableEXT)))
+    pure $ ValidationFeaturesEXT
+             pEnabledValidationFeatures' pDisabledValidationFeatures'
+
+instance Zero ValidationFeaturesEXT where
+  zero = ValidationFeaturesEXT
+           mempty
+           mempty
+
+
+-- | VkValidationFeatureEnableEXT - Specify validation features to enable
+--
+-- = See Also
+--
+-- 'ValidationFeaturesEXT'
+newtype ValidationFeatureEnableEXT = ValidationFeatureEnableEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT' specifies that GPU-assisted
+-- validation is enabled. Activating this feature instruments shader
+-- programs to generate additional diagnostic data. This feature is
+-- disabled by default.
+pattern VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = ValidationFeatureEnableEXT 0
+-- | 'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT'
+-- specifies that the validation layers reserve a descriptor set binding
+-- slot for their own use. The layer reports a value for
+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxBoundDescriptorSets@
+-- that is one less than the value reported by the device. If the device
+-- supports the binding of only one descriptor set, the validation layer
+-- does not perform GPU-assisted validation. This feature is disabled by
+-- default.
+pattern VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = ValidationFeatureEnableEXT 1
+-- | 'VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT' specifies that Vulkan
+-- best-practices validation is enabled. Activating this feature enables
+-- the output of warnings related to common misuse of the API, but which
+-- are not explicitly prohibited by the specification. This feature is
+-- disabled by default.
+pattern VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = ValidationFeatureEnableEXT 2
+-- | 'VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT' specifies that the layers
+-- will process @debugPrintfEXT@ operations in shaders and send the
+-- resulting output to the debug callback. This feature is disabled by
+-- default.
+pattern VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = ValidationFeatureEnableEXT 3
+{-# complete VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT,
+             VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT,
+             VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT,
+             VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT :: ValidationFeatureEnableEXT #-}
+
+instance Show ValidationFeatureEnableEXT where
+  showsPrec p = \case
+    VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT -> showString "VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT"
+    VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT -> showString "VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT"
+    VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT -> showString "VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT"
+    VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT -> showString "VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT"
+    ValidationFeatureEnableEXT x -> showParen (p >= 11) (showString "ValidationFeatureEnableEXT " . showsPrec 11 x)
+
+instance Read ValidationFeatureEnableEXT where
+  readPrec = parens (choose [("VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT", pure VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT)
+                            , ("VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT", pure VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT)
+                            , ("VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT", pure VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT)
+                            , ("VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT", pure VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ValidationFeatureEnableEXT")
+                       v <- step readPrec
+                       pure (ValidationFeatureEnableEXT v)))
+
+
+-- | VkValidationFeatureDisableEXT - Specify validation features to disable
+--
+-- = See Also
+--
+-- 'ValidationFeaturesEXT'
+newtype ValidationFeatureDisableEXT = ValidationFeatureDisableEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'VALIDATION_FEATURE_DISABLE_ALL_EXT' specifies that all validation
+-- checks are disabled.
+pattern VALIDATION_FEATURE_DISABLE_ALL_EXT = ValidationFeatureDisableEXT 0
+-- | 'VALIDATION_FEATURE_DISABLE_SHADERS_EXT' specifies that shader
+-- validation is disabled. This feature is enabled by default.
+pattern VALIDATION_FEATURE_DISABLE_SHADERS_EXT = ValidationFeatureDisableEXT 1
+-- | 'VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT' specifies that thread
+-- safety validation is disabled. This feature is enabled by default.
+pattern VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = ValidationFeatureDisableEXT 2
+-- | 'VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT' specifies that stateless
+-- parameter validation is disabled. This feature is enabled by default.
+pattern VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = ValidationFeatureDisableEXT 3
+-- | 'VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT' specifies that object
+-- lifetime validation is disabled. This feature is enabled by default.
+pattern VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = ValidationFeatureDisableEXT 4
+-- | 'VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT' specifies that core
+-- validation checks are disabled. This feature is enabled by default. If
+-- this feature is disabled, the shader validation and GPU-assisted
+-- validation features are also disabled.
+pattern VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = ValidationFeatureDisableEXT 5
+-- | 'VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT' specifies that
+-- protection against duplicate non-dispatchable object handles is
+-- disabled. This feature is enabled by default.
+pattern VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = ValidationFeatureDisableEXT 6
+{-# complete VALIDATION_FEATURE_DISABLE_ALL_EXT,
+             VALIDATION_FEATURE_DISABLE_SHADERS_EXT,
+             VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT,
+             VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT,
+             VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT,
+             VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT,
+             VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT :: ValidationFeatureDisableEXT #-}
+
+instance Show ValidationFeatureDisableEXT where
+  showsPrec p = \case
+    VALIDATION_FEATURE_DISABLE_ALL_EXT -> showString "VALIDATION_FEATURE_DISABLE_ALL_EXT"
+    VALIDATION_FEATURE_DISABLE_SHADERS_EXT -> showString "VALIDATION_FEATURE_DISABLE_SHADERS_EXT"
+    VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT -> showString "VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT"
+    VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT -> showString "VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT"
+    VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT -> showString "VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT"
+    VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT -> showString "VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT"
+    VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT -> showString "VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT"
+    ValidationFeatureDisableEXT x -> showParen (p >= 11) (showString "ValidationFeatureDisableEXT " . showsPrec 11 x)
+
+instance Read ValidationFeatureDisableEXT where
+  readPrec = parens (choose [("VALIDATION_FEATURE_DISABLE_ALL_EXT", pure VALIDATION_FEATURE_DISABLE_ALL_EXT)
+                            , ("VALIDATION_FEATURE_DISABLE_SHADERS_EXT", pure VALIDATION_FEATURE_DISABLE_SHADERS_EXT)
+                            , ("VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", pure VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT)
+                            , ("VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", pure VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT)
+                            , ("VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", pure VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT)
+                            , ("VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT", pure VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT)
+                            , ("VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", pure VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ValidationFeatureDisableEXT")
+                       v <- step readPrec
+                       pure (ValidationFeatureDisableEXT v)))
+
+
+type EXT_VALIDATION_FEATURES_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_EXT_VALIDATION_FEATURES_SPEC_VERSION"
+pattern EXT_VALIDATION_FEATURES_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_VALIDATION_FEATURES_SPEC_VERSION = 3
+
+
+type EXT_VALIDATION_FEATURES_EXTENSION_NAME = "VK_EXT_validation_features"
+
+-- No documentation found for TopLevel "VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME"
+pattern EXT_VALIDATION_FEATURES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_VALIDATION_FEATURES_EXTENSION_NAME = "VK_EXT_validation_features"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_validation_features.hs-boot b/src/Vulkan/Extensions/VK_EXT_validation_features.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_validation_features.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_validation_features  (ValidationFeaturesEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ValidationFeaturesEXT
+
+instance ToCStruct ValidationFeaturesEXT
+instance Show ValidationFeaturesEXT
+
+instance FromCStruct ValidationFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_validation_flags.hs b/src/Vulkan/Extensions/VK_EXT_validation_flags.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_validation_flags.hs
@@ -0,0 +1,145 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_validation_flags  ( ValidationFlagsEXT(..)
+                                                  , ValidationCheckEXT( VALIDATION_CHECK_ALL_EXT
+                                                                      , VALIDATION_CHECK_SHADERS_EXT
+                                                                      , ..
+                                                                      )
+                                                  , EXT_VALIDATION_FLAGS_SPEC_VERSION
+                                                  , pattern EXT_VALIDATION_FLAGS_SPEC_VERSION
+                                                  , EXT_VALIDATION_FLAGS_EXTENSION_NAME
+                                                  , pattern EXT_VALIDATION_FLAGS_EXTENSION_NAME
+                                                  ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_VALIDATION_FLAGS_EXT))
+-- | VkValidationFlagsEXT - Specify validation checks to disable for a Vulkan
+-- instance
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'ValidationCheckEXT'
+data ValidationFlagsEXT = ValidationFlagsEXT
+  { -- | @pDisabledValidationChecks@ /must/ be a valid pointer to an array of
+    -- @disabledValidationCheckCount@ valid 'ValidationCheckEXT' values
+    disabledValidationChecks :: Vector ValidationCheckEXT }
+  deriving (Typeable)
+deriving instance Show ValidationFlagsEXT
+
+instance ToCStruct ValidationFlagsEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ValidationFlagsEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_FLAGS_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (disabledValidationChecks)) :: Word32))
+    pPDisabledValidationChecks' <- ContT $ allocaBytesAligned @ValidationCheckEXT ((Data.Vector.length (disabledValidationChecks)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDisabledValidationChecks' `plusPtr` (4 * (i)) :: Ptr ValidationCheckEXT) (e)) (disabledValidationChecks)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ValidationCheckEXT))) (pPDisabledValidationChecks')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VALIDATION_FLAGS_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPDisabledValidationChecks' <- ContT $ allocaBytesAligned @ValidationCheckEXT ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDisabledValidationChecks' `plusPtr` (4 * (i)) :: Ptr ValidationCheckEXT) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ValidationCheckEXT))) (pPDisabledValidationChecks')
+    lift $ f
+
+instance FromCStruct ValidationFlagsEXT where
+  peekCStruct p = do
+    disabledValidationCheckCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pDisabledValidationChecks <- peek @(Ptr ValidationCheckEXT) ((p `plusPtr` 24 :: Ptr (Ptr ValidationCheckEXT)))
+    pDisabledValidationChecks' <- generateM (fromIntegral disabledValidationCheckCount) (\i -> peek @ValidationCheckEXT ((pDisabledValidationChecks `advancePtrBytes` (4 * (i)) :: Ptr ValidationCheckEXT)))
+    pure $ ValidationFlagsEXT
+             pDisabledValidationChecks'
+
+instance Zero ValidationFlagsEXT where
+  zero = ValidationFlagsEXT
+           mempty
+
+
+-- | VkValidationCheckEXT - Specify validation checks to disable
+--
+-- = See Also
+--
+-- 'ValidationFlagsEXT'
+newtype ValidationCheckEXT = ValidationCheckEXT Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'VALIDATION_CHECK_ALL_EXT' specifies that all validation checks are
+-- disabled.
+pattern VALIDATION_CHECK_ALL_EXT = ValidationCheckEXT 0
+-- | 'VALIDATION_CHECK_SHADERS_EXT' specifies that shader validation is
+-- disabled.
+pattern VALIDATION_CHECK_SHADERS_EXT = ValidationCheckEXT 1
+{-# complete VALIDATION_CHECK_ALL_EXT,
+             VALIDATION_CHECK_SHADERS_EXT :: ValidationCheckEXT #-}
+
+instance Show ValidationCheckEXT where
+  showsPrec p = \case
+    VALIDATION_CHECK_ALL_EXT -> showString "VALIDATION_CHECK_ALL_EXT"
+    VALIDATION_CHECK_SHADERS_EXT -> showString "VALIDATION_CHECK_SHADERS_EXT"
+    ValidationCheckEXT x -> showParen (p >= 11) (showString "ValidationCheckEXT " . showsPrec 11 x)
+
+instance Read ValidationCheckEXT where
+  readPrec = parens (choose [("VALIDATION_CHECK_ALL_EXT", pure VALIDATION_CHECK_ALL_EXT)
+                            , ("VALIDATION_CHECK_SHADERS_EXT", pure VALIDATION_CHECK_SHADERS_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ValidationCheckEXT")
+                       v <- step readPrec
+                       pure (ValidationCheckEXT v)))
+
+
+type EXT_VALIDATION_FLAGS_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_EXT_VALIDATION_FLAGS_SPEC_VERSION"
+pattern EXT_VALIDATION_FLAGS_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_VALIDATION_FLAGS_SPEC_VERSION = 2
+
+
+type EXT_VALIDATION_FLAGS_EXTENSION_NAME = "VK_EXT_validation_flags"
+
+-- No documentation found for TopLevel "VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME"
+pattern EXT_VALIDATION_FLAGS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_VALIDATION_FLAGS_EXTENSION_NAME = "VK_EXT_validation_flags"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_validation_flags.hs-boot b/src/Vulkan/Extensions/VK_EXT_validation_flags.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_validation_flags.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_validation_flags  (ValidationFlagsEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ValidationFlagsEXT
+
+instance ToCStruct ValidationFlagsEXT
+instance Show ValidationFlagsEXT
+
+instance FromCStruct ValidationFlagsEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs b/src/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs
@@ -0,0 +1,315 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_vertex_attribute_divisor  ( VertexInputBindingDivisorDescriptionEXT(..)
+                                                          , PipelineVertexInputDivisorStateCreateInfoEXT(..)
+                                                          , PhysicalDeviceVertexAttributeDivisorPropertiesEXT(..)
+                                                          , PhysicalDeviceVertexAttributeDivisorFeaturesEXT(..)
+                                                          , EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION
+                                                          , pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION
+                                                          , EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME
+                                                          , pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME
+                                                          ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT))
+-- | VkVertexInputBindingDivisorDescriptionEXT - Structure specifying a
+-- divisor used in instanced rendering
+--
+-- = 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
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@
+--
+-- -   If the @vertexAttributeInstanceRateZeroDivisor@ feature is not
+--     enabled, @divisor@ /must/ not be @0@
+--
+-- -   If the @vertexAttributeInstanceRateDivisor@ feature is not enabled,
+--     @divisor@ /must/ be @1@
+--
+-- -   @divisor@ /must/ be a value between @0@ and
+--     'PhysicalDeviceVertexAttributeDivisorPropertiesEXT'::@maxVertexAttribDivisor@,
+--     inclusive
+--
+-- -   'Vulkan.Core10.Pipeline.VertexInputBindingDescription'::@inputRate@
+--     /must/ be of type
+--     'Vulkan.Core10.Enums.VertexInputRate.VERTEX_INPUT_RATE_INSTANCE' for
+--     this @binding@
+--
+-- = See Also
+--
+-- 'PipelineVertexInputDivisorStateCreateInfoEXT'
+data VertexInputBindingDivisorDescriptionEXT = VertexInputBindingDivisorDescriptionEXT
+  { -- | @binding@ is the binding number for which the divisor is specified.
+    binding :: Word32
+  , -- | @divisor@ is the number of successive instances that will use the same
+    -- value of the vertex attribute when instanced rendering is enabled. For
+    -- example, if the divisor is N, the same vertex attribute will be applied
+    -- to N successive instances before moving on to the next vertex attribute.
+    -- The maximum value of divisor is implementation dependent and can be
+    -- queried using
+    -- 'PhysicalDeviceVertexAttributeDivisorPropertiesEXT'::@maxVertexAttribDivisor@.
+    -- A value of @0@ /can/ be used for the divisor if the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-vertexAttributeInstanceRateZeroDivisor vertexAttributeInstanceRateZeroDivisor>
+    -- feature is enabled. In this case, the same vertex attribute will be
+    -- applied to all instances.
+    divisor :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show VertexInputBindingDivisorDescriptionEXT
+
+instance ToCStruct VertexInputBindingDivisorDescriptionEXT where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p VertexInputBindingDivisorDescriptionEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (binding)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (divisor)
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct VertexInputBindingDivisorDescriptionEXT where
+  peekCStruct p = do
+    binding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    divisor <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    pure $ VertexInputBindingDivisorDescriptionEXT
+             binding divisor
+
+instance Storable VertexInputBindingDivisorDescriptionEXT where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero VertexInputBindingDivisorDescriptionEXT where
+  zero = VertexInputBindingDivisorDescriptionEXT
+           zero
+           zero
+
+
+-- | VkPipelineVertexInputDivisorStateCreateInfoEXT - Structure specifying
+-- vertex attributes assignment during instanced rendering
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'VertexInputBindingDivisorDescriptionEXT'
+data PipelineVertexInputDivisorStateCreateInfoEXT = PipelineVertexInputDivisorStateCreateInfoEXT
+  { -- | @pVertexBindingDivisors@ /must/ be a valid pointer to an array of
+    -- @vertexBindingDivisorCount@ 'VertexInputBindingDivisorDescriptionEXT'
+    -- structures
+    vertexBindingDivisors :: Vector VertexInputBindingDivisorDescriptionEXT }
+  deriving (Typeable)
+deriving instance Show PipelineVertexInputDivisorStateCreateInfoEXT
+
+instance ToCStruct PipelineVertexInputDivisorStateCreateInfoEXT where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineVertexInputDivisorStateCreateInfoEXT{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexBindingDivisors)) :: Word32))
+    pPVertexBindingDivisors' <- ContT $ allocaBytesAligned @VertexInputBindingDivisorDescriptionEXT ((Data.Vector.length (vertexBindingDivisors)) * 8) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDivisors' `plusPtr` (8 * (i)) :: Ptr VertexInputBindingDivisorDescriptionEXT) (e) . ($ ())) (vertexBindingDivisors)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDivisorDescriptionEXT))) (pPVertexBindingDivisors')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPVertexBindingDivisors' <- ContT $ allocaBytesAligned @VertexInputBindingDivisorDescriptionEXT ((Data.Vector.length (mempty)) * 8) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDivisors' `plusPtr` (8 * (i)) :: Ptr VertexInputBindingDivisorDescriptionEXT) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDivisorDescriptionEXT))) (pPVertexBindingDivisors')
+    lift $ f
+
+instance FromCStruct PipelineVertexInputDivisorStateCreateInfoEXT where
+  peekCStruct p = do
+    vertexBindingDivisorCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pVertexBindingDivisors <- peek @(Ptr VertexInputBindingDivisorDescriptionEXT) ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDivisorDescriptionEXT)))
+    pVertexBindingDivisors' <- generateM (fromIntegral vertexBindingDivisorCount) (\i -> peekCStruct @VertexInputBindingDivisorDescriptionEXT ((pVertexBindingDivisors `advancePtrBytes` (8 * (i)) :: Ptr VertexInputBindingDivisorDescriptionEXT)))
+    pure $ PipelineVertexInputDivisorStateCreateInfoEXT
+             pVertexBindingDivisors'
+
+instance Zero PipelineVertexInputDivisorStateCreateInfoEXT where
+  zero = PipelineVertexInputDivisorStateCreateInfoEXT
+           mempty
+
+
+-- | VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT - Structure
+-- describing max value of vertex attribute divisor that can be supported
+-- by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceVertexAttributeDivisorPropertiesEXT'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceVertexAttributeDivisorPropertiesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceVertexAttributeDivisorPropertiesEXT = PhysicalDeviceVertexAttributeDivisorPropertiesEXT
+  { -- | @maxVertexAttribDivisor@ is the maximum value of the number of instances
+    -- that will repeat the value of vertex attribute data when instanced
+    -- rendering is enabled.
+    maxVertexAttribDivisor :: Word32 }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceVertexAttributeDivisorPropertiesEXT
+
+instance ToCStruct PhysicalDeviceVertexAttributeDivisorPropertiesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceVertexAttributeDivisorPropertiesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxVertexAttribDivisor)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceVertexAttributeDivisorPropertiesEXT where
+  peekCStruct p = do
+    maxVertexAttribDivisor <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ PhysicalDeviceVertexAttributeDivisorPropertiesEXT
+             maxVertexAttribDivisor
+
+instance Storable PhysicalDeviceVertexAttributeDivisorPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceVertexAttributeDivisorPropertiesEXT where
+  zero = PhysicalDeviceVertexAttributeDivisorPropertiesEXT
+           zero
+
+
+-- | VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT - Structure describing
+-- if fetching of vertex attribute may be repeated for instanced rendering
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceVertexAttributeDivisorFeaturesEXT' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating the implementation-dependent
+-- behavior. 'PhysicalDeviceVertexAttributeDivisorFeaturesEXT' /can/ also
+-- be included in @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable the feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceVertexAttributeDivisorFeaturesEXT = PhysicalDeviceVertexAttributeDivisorFeaturesEXT
+  { -- | @vertexAttributeInstanceRateDivisor@ specifies whether vertex attribute
+    -- fetching may be repeated in case of instanced rendering.
+    vertexAttributeInstanceRateDivisor :: Bool
+  , -- | @vertexAttributeInstanceRateZeroDivisor@ specifies whether a zero value
+    -- for 'VertexInputBindingDivisorDescriptionEXT'::@divisor@ is supported.
+    vertexAttributeInstanceRateZeroDivisor :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceVertexAttributeDivisorFeaturesEXT
+
+instance ToCStruct PhysicalDeviceVertexAttributeDivisorFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceVertexAttributeDivisorFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (vertexAttributeInstanceRateDivisor))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (vertexAttributeInstanceRateZeroDivisor))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceVertexAttributeDivisorFeaturesEXT where
+  peekCStruct p = do
+    vertexAttributeInstanceRateDivisor <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    vertexAttributeInstanceRateZeroDivisor <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceVertexAttributeDivisorFeaturesEXT
+             (bool32ToBool vertexAttributeInstanceRateDivisor) (bool32ToBool vertexAttributeInstanceRateZeroDivisor)
+
+instance Storable PhysicalDeviceVertexAttributeDivisorFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceVertexAttributeDivisorFeaturesEXT where
+  zero = PhysicalDeviceVertexAttributeDivisorFeaturesEXT
+           zero
+           zero
+
+
+type EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION"
+pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION = 3
+
+
+type EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME = "VK_EXT_vertex_attribute_divisor"
+
+-- No documentation found for TopLevel "VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME"
+pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME = "VK_EXT_vertex_attribute_divisor"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs-boot b/src/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs-boot
@@ -0,0 +1,41 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_vertex_attribute_divisor  ( PhysicalDeviceVertexAttributeDivisorFeaturesEXT
+                                                          , PhysicalDeviceVertexAttributeDivisorPropertiesEXT
+                                                          , PipelineVertexInputDivisorStateCreateInfoEXT
+                                                          , VertexInputBindingDivisorDescriptionEXT
+                                                          ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceVertexAttributeDivisorFeaturesEXT
+
+instance ToCStruct PhysicalDeviceVertexAttributeDivisorFeaturesEXT
+instance Show PhysicalDeviceVertexAttributeDivisorFeaturesEXT
+
+instance FromCStruct PhysicalDeviceVertexAttributeDivisorFeaturesEXT
+
+
+data PhysicalDeviceVertexAttributeDivisorPropertiesEXT
+
+instance ToCStruct PhysicalDeviceVertexAttributeDivisorPropertiesEXT
+instance Show PhysicalDeviceVertexAttributeDivisorPropertiesEXT
+
+instance FromCStruct PhysicalDeviceVertexAttributeDivisorPropertiesEXT
+
+
+data PipelineVertexInputDivisorStateCreateInfoEXT
+
+instance ToCStruct PipelineVertexInputDivisorStateCreateInfoEXT
+instance Show PipelineVertexInputDivisorStateCreateInfoEXT
+
+instance FromCStruct PipelineVertexInputDivisorStateCreateInfoEXT
+
+
+data VertexInputBindingDivisorDescriptionEXT
+
+instance ToCStruct VertexInputBindingDivisorDescriptionEXT
+instance Show VertexInputBindingDivisorDescriptionEXT
+
+instance FromCStruct VertexInputBindingDivisorDescriptionEXT
+
diff --git a/src/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs b/src/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs
@@ -0,0 +1,108 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_ycbcr_image_arrays  ( PhysicalDeviceYcbcrImageArraysFeaturesEXT(..)
+                                                    , EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION
+                                                    , pattern EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION
+                                                    , EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME
+                                                    , pattern EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME
+                                                    ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT))
+-- | VkPhysicalDeviceYcbcrImageArraysFeaturesEXT - Structure describing
+-- extended Y’CbCr image creation features that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceYcbcrImageArraysFeaturesEXT' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceYcbcrImageArraysFeaturesEXT' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceYcbcrImageArraysFeaturesEXT' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceYcbcrImageArraysFeaturesEXT = PhysicalDeviceYcbcrImageArraysFeaturesEXT
+  { -- | @ycbcrImageArrays@ indicates that the implementation supports creating
+    -- images with a format that requires
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion Y′CBCR conversion>
+    -- and has multiple array layers.
+    ycbcrImageArrays :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceYcbcrImageArraysFeaturesEXT
+
+instance ToCStruct PhysicalDeviceYcbcrImageArraysFeaturesEXT where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceYcbcrImageArraysFeaturesEXT{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (ycbcrImageArrays))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceYcbcrImageArraysFeaturesEXT where
+  peekCStruct p = do
+    ycbcrImageArrays <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceYcbcrImageArraysFeaturesEXT
+             (bool32ToBool ycbcrImageArrays)
+
+instance Storable PhysicalDeviceYcbcrImageArraysFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceYcbcrImageArraysFeaturesEXT where
+  zero = PhysicalDeviceYcbcrImageArraysFeaturesEXT
+           zero
+
+
+type EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION"
+pattern EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION :: forall a . Integral a => a
+pattern EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION = 1
+
+
+type EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME = "VK_EXT_ycbcr_image_arrays"
+
+-- No documentation found for TopLevel "VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME"
+pattern EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME = "VK_EXT_ycbcr_image_arrays"
+
diff --git a/src/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs-boot b/src/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_EXT_ycbcr_image_arrays  (PhysicalDeviceYcbcrImageArraysFeaturesEXT) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceYcbcrImageArraysFeaturesEXT
+
+instance ToCStruct PhysicalDeviceYcbcrImageArraysFeaturesEXT
+instance Show PhysicalDeviceYcbcrImageArraysFeaturesEXT
+
+instance FromCStruct PhysicalDeviceYcbcrImageArraysFeaturesEXT
+
diff --git a/src/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs b/src/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs
@@ -0,0 +1,234 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface  ( createImagePipeSurfaceFUCHSIA
+                                                       , ImagePipeSurfaceCreateInfoFUCHSIA(..)
+                                                       , ImagePipeSurfaceCreateFlagsFUCHSIA(..)
+                                                       , FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION
+                                                       , pattern FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION
+                                                       , FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME
+                                                       , pattern FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME
+                                                       , SurfaceKHR(..)
+                                                       , Zx_handle_t
+                                                       ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateImagePipeSurfaceFUCHSIA))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Extensions.WSITypes (Zx_handle_t)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.WSITypes (Zx_handle_t)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateImagePipeSurfaceFUCHSIA
+  :: FunPtr (Ptr Instance_T -> Ptr ImagePipeSurfaceCreateInfoFUCHSIA -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr ImagePipeSurfaceCreateInfoFUCHSIA -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateImagePipeSurfaceFUCHSIA - Create a
+-- 'Vulkan.Extensions.Handles.SurfaceKHR' object for a Fuchsia ImagePipe
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance to associate with the surface.
+--
+-- -   @pCreateInfo@ is a pointer to a 'ImagePipeSurfaceCreateInfoFUCHSIA'
+--     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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'ImagePipeSurfaceCreateInfoFUCHSIA' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'ImagePipeSurfaceCreateInfoFUCHSIA', 'Vulkan.Core10.Handles.Instance',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+createImagePipeSurfaceFUCHSIA :: forall io . MonadIO io => Instance -> ImagePipeSurfaceCreateInfoFUCHSIA -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createImagePipeSurfaceFUCHSIA instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateImagePipeSurfaceFUCHSIAPtr = pVkCreateImagePipeSurfaceFUCHSIA (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateImagePipeSurfaceFUCHSIAPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateImagePipeSurfaceFUCHSIA is null" Nothing Nothing
+  let vkCreateImagePipeSurfaceFUCHSIA' = mkVkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIAPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateImagePipeSurfaceFUCHSIA' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+-- | VkImagePipeSurfaceCreateInfoFUCHSIA - Structure specifying parameters of
+-- a newly created ImagePipe surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'ImagePipeSurfaceCreateFlagsFUCHSIA',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createImagePipeSurfaceFUCHSIA'
+data ImagePipeSurfaceCreateInfoFUCHSIA = ImagePipeSurfaceCreateInfoFUCHSIA
+  { -- | @flags@ /must/ be @0@
+    flags :: ImagePipeSurfaceCreateFlagsFUCHSIA
+  , -- | @imagePipeHandle@ /must/ be a valid @zx_handle_t@
+    imagePipeHandle :: Zx_handle_t
+  }
+  deriving (Typeable)
+deriving instance Show ImagePipeSurfaceCreateInfoFUCHSIA
+
+instance ToCStruct ImagePipeSurfaceCreateInfoFUCHSIA where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImagePipeSurfaceCreateInfoFUCHSIA{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImagePipeSurfaceCreateFlagsFUCHSIA)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr Zx_handle_t)) (imagePipeHandle)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr Zx_handle_t)) (zero)
+    f
+
+instance FromCStruct ImagePipeSurfaceCreateInfoFUCHSIA where
+  peekCStruct p = do
+    flags <- peek @ImagePipeSurfaceCreateFlagsFUCHSIA ((p `plusPtr` 16 :: Ptr ImagePipeSurfaceCreateFlagsFUCHSIA))
+    imagePipeHandle <- peek @Zx_handle_t ((p `plusPtr` 20 :: Ptr Zx_handle_t))
+    pure $ ImagePipeSurfaceCreateInfoFUCHSIA
+             flags imagePipeHandle
+
+instance Storable ImagePipeSurfaceCreateInfoFUCHSIA where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImagePipeSurfaceCreateInfoFUCHSIA where
+  zero = ImagePipeSurfaceCreateInfoFUCHSIA
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkImagePipeSurfaceCreateFlagsFUCHSIA"
+newtype ImagePipeSurfaceCreateFlagsFUCHSIA = ImagePipeSurfaceCreateFlagsFUCHSIA Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show ImagePipeSurfaceCreateFlagsFUCHSIA where
+  showsPrec p = \case
+    ImagePipeSurfaceCreateFlagsFUCHSIA x -> showParen (p >= 11) (showString "ImagePipeSurfaceCreateFlagsFUCHSIA 0x" . showHex x)
+
+instance Read ImagePipeSurfaceCreateFlagsFUCHSIA where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ImagePipeSurfaceCreateFlagsFUCHSIA")
+                       v <- step readPrec
+                       pure (ImagePipeSurfaceCreateFlagsFUCHSIA v)))
+
+
+type FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION"
+pattern FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION = 1
+
+
+type FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME = "VK_FUCHSIA_imagepipe_surface"
+
+-- No documentation found for TopLevel "VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME"
+pattern FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME = "VK_FUCHSIA_imagepipe_surface"
+
diff --git a/src/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs-boot b/src/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface  (ImagePipeSurfaceCreateInfoFUCHSIA) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ImagePipeSurfaceCreateInfoFUCHSIA
+
+instance ToCStruct ImagePipeSurfaceCreateInfoFUCHSIA
+instance Show ImagePipeSurfaceCreateInfoFUCHSIA
+
+instance FromCStruct ImagePipeSurfaceCreateInfoFUCHSIA
+
diff --git a/src/Vulkan/Extensions/VK_GGP_frame_token.hs b/src/Vulkan/Extensions/VK_GGP_frame_token.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_GGP_frame_token.hs
@@ -0,0 +1,88 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_GGP_frame_token  ( PresentFrameTokenGGP(..)
+                                             , GGP_FRAME_TOKEN_SPEC_VERSION
+                                             , pattern GGP_FRAME_TOKEN_SPEC_VERSION
+                                             , GGP_FRAME_TOKEN_EXTENSION_NAME
+                                             , pattern GGP_FRAME_TOKEN_EXTENSION_NAME
+                                             , GgpFrameToken
+                                             ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Extensions.WSITypes (GgpFrameToken)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP))
+import Vulkan.Extensions.WSITypes (GgpFrameToken)
+-- | VkPresentFrameTokenGGP - The Google Games Platform frame token
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PresentFrameTokenGGP = PresentFrameTokenGGP
+  { -- | @frameToken@ /must/ be a valid
+    -- 'Vulkan.Extensions.WSITypes.GgpFrameToken'
+    frameToken :: GgpFrameToken }
+  deriving (Typeable)
+deriving instance Show PresentFrameTokenGGP
+
+instance ToCStruct PresentFrameTokenGGP where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PresentFrameTokenGGP{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr GgpFrameToken)) (frameToken)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr GgpFrameToken)) (zero)
+    f
+
+instance FromCStruct PresentFrameTokenGGP where
+  peekCStruct p = do
+    frameToken <- peek @GgpFrameToken ((p `plusPtr` 16 :: Ptr GgpFrameToken))
+    pure $ PresentFrameTokenGGP
+             frameToken
+
+instance Storable PresentFrameTokenGGP where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PresentFrameTokenGGP where
+  zero = PresentFrameTokenGGP
+           zero
+
+
+type GGP_FRAME_TOKEN_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_GGP_FRAME_TOKEN_SPEC_VERSION"
+pattern GGP_FRAME_TOKEN_SPEC_VERSION :: forall a . Integral a => a
+pattern GGP_FRAME_TOKEN_SPEC_VERSION = 1
+
+
+type GGP_FRAME_TOKEN_EXTENSION_NAME = "VK_GGP_frame_token"
+
+-- No documentation found for TopLevel "VK_GGP_FRAME_TOKEN_EXTENSION_NAME"
+pattern GGP_FRAME_TOKEN_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern GGP_FRAME_TOKEN_EXTENSION_NAME = "VK_GGP_frame_token"
+
diff --git a/src/Vulkan/Extensions/VK_GGP_frame_token.hs-boot b/src/Vulkan/Extensions/VK_GGP_frame_token.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_GGP_frame_token.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_GGP_frame_token  (PresentFrameTokenGGP) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PresentFrameTokenGGP
+
+instance ToCStruct PresentFrameTokenGGP
+instance Show PresentFrameTokenGGP
+
+instance FromCStruct PresentFrameTokenGGP
+
diff --git a/src/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs b/src/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs
@@ -0,0 +1,239 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_GGP_stream_descriptor_surface  ( createStreamDescriptorSurfaceGGP
+                                                           , StreamDescriptorSurfaceCreateInfoGGP(..)
+                                                           , StreamDescriptorSurfaceCreateFlagsGGP(..)
+                                                           , GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION
+                                                           , pattern GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION
+                                                           , GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME
+                                                           , pattern GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME
+                                                           , SurfaceKHR(..)
+                                                           , GgpStreamDescriptor
+                                                           ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Extensions.WSITypes (GgpStreamDescriptor)
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateStreamDescriptorSurfaceGGP))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (GgpStreamDescriptor)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateStreamDescriptorSurfaceGGP
+  :: FunPtr (Ptr Instance_T -> Ptr StreamDescriptorSurfaceCreateInfoGGP -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr StreamDescriptorSurfaceCreateInfoGGP -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateStreamDescriptorSurfaceGGP - Create a
+-- 'Vulkan.Extensions.Handles.SurfaceKHR' object for a Google Games
+-- Platform stream
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance to associate with the surface.
+--
+-- -   @pCreateInfo@ is a pointer to a
+--     'StreamDescriptorSurfaceCreateInfoGGP' structure containing
+--     parameters that affect 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'StreamDescriptorSurfaceCreateInfoGGP' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance',
+-- 'StreamDescriptorSurfaceCreateInfoGGP',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+createStreamDescriptorSurfaceGGP :: forall io . MonadIO io => Instance -> StreamDescriptorSurfaceCreateInfoGGP -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createStreamDescriptorSurfaceGGP instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateStreamDescriptorSurfaceGGPPtr = pVkCreateStreamDescriptorSurfaceGGP (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateStreamDescriptorSurfaceGGPPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateStreamDescriptorSurfaceGGP is null" Nothing Nothing
+  let vkCreateStreamDescriptorSurfaceGGP' = mkVkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGPPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateStreamDescriptorSurfaceGGP' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+-- | VkStreamDescriptorSurfaceCreateInfoGGP - Structure specifying parameters
+-- of a newly created Google Games Platform stream surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'StreamDescriptorSurfaceCreateFlagsGGP',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createStreamDescriptorSurfaceGGP'
+data StreamDescriptorSurfaceCreateInfoGGP = StreamDescriptorSurfaceCreateInfoGGP
+  { -- | @flags@ /must/ be @0@
+    flags :: StreamDescriptorSurfaceCreateFlagsGGP
+  , -- | @streamDescriptor@ /must/ be a valid
+    -- 'Vulkan.Extensions.WSITypes.GgpStreamDescriptor'
+    streamDescriptor :: GgpStreamDescriptor
+  }
+  deriving (Typeable)
+deriving instance Show StreamDescriptorSurfaceCreateInfoGGP
+
+instance ToCStruct StreamDescriptorSurfaceCreateInfoGGP where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p StreamDescriptorSurfaceCreateInfoGGP{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr StreamDescriptorSurfaceCreateFlagsGGP)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr GgpStreamDescriptor)) (streamDescriptor)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr GgpStreamDescriptor)) (zero)
+    f
+
+instance FromCStruct StreamDescriptorSurfaceCreateInfoGGP where
+  peekCStruct p = do
+    flags <- peek @StreamDescriptorSurfaceCreateFlagsGGP ((p `plusPtr` 16 :: Ptr StreamDescriptorSurfaceCreateFlagsGGP))
+    streamDescriptor <- peek @GgpStreamDescriptor ((p `plusPtr` 20 :: Ptr GgpStreamDescriptor))
+    pure $ StreamDescriptorSurfaceCreateInfoGGP
+             flags streamDescriptor
+
+instance Storable StreamDescriptorSurfaceCreateInfoGGP where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero StreamDescriptorSurfaceCreateInfoGGP where
+  zero = StreamDescriptorSurfaceCreateInfoGGP
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkStreamDescriptorSurfaceCreateFlagsGGP"
+newtype StreamDescriptorSurfaceCreateFlagsGGP = StreamDescriptorSurfaceCreateFlagsGGP Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show StreamDescriptorSurfaceCreateFlagsGGP where
+  showsPrec p = \case
+    StreamDescriptorSurfaceCreateFlagsGGP x -> showParen (p >= 11) (showString "StreamDescriptorSurfaceCreateFlagsGGP 0x" . showHex x)
+
+instance Read StreamDescriptorSurfaceCreateFlagsGGP where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "StreamDescriptorSurfaceCreateFlagsGGP")
+                       v <- step readPrec
+                       pure (StreamDescriptorSurfaceCreateFlagsGGP v)))
+
+
+type GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION"
+pattern GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION = 1
+
+
+type GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME = "VK_GGP_stream_descriptor_surface"
+
+-- No documentation found for TopLevel "VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME"
+pattern GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME = "VK_GGP_stream_descriptor_surface"
+
diff --git a/src/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs-boot b/src/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_GGP_stream_descriptor_surface  (StreamDescriptorSurfaceCreateInfoGGP) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data StreamDescriptorSurfaceCreateInfoGGP
+
+instance ToCStruct StreamDescriptorSurfaceCreateInfoGGP
+instance Show StreamDescriptorSurfaceCreateInfoGGP
+
+instance FromCStruct StreamDescriptorSurfaceCreateInfoGGP
+
diff --git a/src/Vulkan/Extensions/VK_GOOGLE_decorate_string.hs b/src/Vulkan/Extensions/VK_GOOGLE_decorate_string.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_GOOGLE_decorate_string.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_GOOGLE_decorate_string  ( GOOGLE_DECORATE_STRING_SPEC_VERSION
+                                                    , pattern GOOGLE_DECORATE_STRING_SPEC_VERSION
+                                                    , GOOGLE_DECORATE_STRING_EXTENSION_NAME
+                                                    , pattern GOOGLE_DECORATE_STRING_EXTENSION_NAME
+                                                    ) where
+
+import Data.String (IsString)
+
+type GOOGLE_DECORATE_STRING_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_GOOGLE_DECORATE_STRING_SPEC_VERSION"
+pattern GOOGLE_DECORATE_STRING_SPEC_VERSION :: forall a . Integral a => a
+pattern GOOGLE_DECORATE_STRING_SPEC_VERSION = 1
+
+
+type GOOGLE_DECORATE_STRING_EXTENSION_NAME = "VK_GOOGLE_decorate_string"
+
+-- No documentation found for TopLevel "VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME"
+pattern GOOGLE_DECORATE_STRING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern GOOGLE_DECORATE_STRING_EXTENSION_NAME = "VK_GOOGLE_decorate_string"
+
diff --git a/src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs b/src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
@@ -0,0 +1,533 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_GOOGLE_display_timing  ( getRefreshCycleDurationGOOGLE
+                                                   , getPastPresentationTimingGOOGLE
+                                                   , RefreshCycleDurationGOOGLE(..)
+                                                   , PastPresentationTimingGOOGLE(..)
+                                                   , PresentTimesInfoGOOGLE(..)
+                                                   , PresentTimeGOOGLE(..)
+                                                   , GOOGLE_DISPLAY_TIMING_SPEC_VERSION
+                                                   , pattern GOOGLE_DISPLAY_TIMING_SPEC_VERSION
+                                                   , GOOGLE_DISPLAY_TIMING_EXTENSION_NAME
+                                                   , pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME
+                                                   , SwapchainKHR(..)
+                                                   ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetPastPresentationTimingGOOGLE))
+import Vulkan.Dynamic (DeviceCmds(pVkGetRefreshCycleDurationGOOGLE))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SwapchainKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetRefreshCycleDurationGOOGLE
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Ptr RefreshCycleDurationGOOGLE -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Ptr RefreshCycleDurationGOOGLE -> IO Result
+
+-- | vkGetRefreshCycleDurationGOOGLE - Obtain the RC duration of the PE’s
+-- display
+--
+-- = Parameters
+--
+-- -   @device@ is the device associated with @swapchain@.
+--
+-- -   @swapchain@ is the swapchain to obtain the refresh duration for.
+--
+-- -   @pDisplayTimingProperties@ is a pointer to a
+--     'RefreshCycleDurationGOOGLE' structure.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   @pDisplayTimingProperties@ /must/ be a valid pointer to a
+--     'RefreshCycleDurationGOOGLE' structure
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'RefreshCycleDurationGOOGLE',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+getRefreshCycleDurationGOOGLE :: forall io . MonadIO io => Device -> SwapchainKHR -> io (("displayTimingProperties" ::: RefreshCycleDurationGOOGLE))
+getRefreshCycleDurationGOOGLE device swapchain = liftIO . evalContT $ do
+  let vkGetRefreshCycleDurationGOOGLEPtr = pVkGetRefreshCycleDurationGOOGLE (deviceCmds (device :: Device))
+  lift $ unless (vkGetRefreshCycleDurationGOOGLEPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetRefreshCycleDurationGOOGLE is null" Nothing Nothing
+  let vkGetRefreshCycleDurationGOOGLE' = mkVkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLEPtr
+  pPDisplayTimingProperties <- ContT (withZeroCStruct @RefreshCycleDurationGOOGLE)
+  r <- lift $ vkGetRefreshCycleDurationGOOGLE' (deviceHandle (device)) (swapchain) (pPDisplayTimingProperties)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pDisplayTimingProperties <- lift $ peekCStruct @RefreshCycleDurationGOOGLE pPDisplayTimingProperties
+  pure $ (pDisplayTimingProperties)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPastPresentationTimingGOOGLE
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Ptr Word32 -> Ptr PastPresentationTimingGOOGLE -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Ptr Word32 -> Ptr PastPresentationTimingGOOGLE -> IO Result
+
+-- | vkGetPastPresentationTimingGOOGLE - Obtain timing of a
+-- previously-presented image
+--
+-- = 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 'PastPresentationTimingGOOGLE' structures to query, as
+--     described below.
+--
+-- -   @pPresentationTimings@ is either @NULL@ or a pointer to an array of
+--     'PastPresentationTimingGOOGLE' structures.
+--
+-- = 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@,
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.SUCCESS' to indicate that not all the
+-- available values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' 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@
+--     'PastPresentationTimingGOOGLE' structures
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'PastPresentationTimingGOOGLE',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+getPastPresentationTimingGOOGLE :: forall io . MonadIO io => Device -> SwapchainKHR -> io (Result, ("presentationTimings" ::: Vector PastPresentationTimingGOOGLE))
+getPastPresentationTimingGOOGLE device swapchain = liftIO . evalContT $ do
+  let vkGetPastPresentationTimingGOOGLEPtr = pVkGetPastPresentationTimingGOOGLE (deviceCmds (device :: Device))
+  lift $ unless (vkGetPastPresentationTimingGOOGLEPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPastPresentationTimingGOOGLE is null" Nothing Nothing
+  let vkGetPastPresentationTimingGOOGLE' = mkVkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLEPtr
+  let device' = deviceHandle (device)
+  pPPresentationTimingCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPastPresentationTimingGOOGLE' device' (swapchain) (pPPresentationTimingCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPresentationTimingCount <- lift $ peek @Word32 pPPresentationTimingCount
+  pPPresentationTimings <- ContT $ bracket (callocBytes @PastPresentationTimingGOOGLE ((fromIntegral (pPresentationTimingCount)) * 40)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPPresentationTimings `advancePtrBytes` (i * 40) :: Ptr PastPresentationTimingGOOGLE) . ($ ())) [0..(fromIntegral (pPresentationTimingCount)) - 1]
+  r' <- lift $ vkGetPastPresentationTimingGOOGLE' device' (swapchain) (pPPresentationTimingCount) ((pPPresentationTimings))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPresentationTimingCount' <- lift $ peek @Word32 pPPresentationTimingCount
+  pPresentationTimings' <- lift $ generateM (fromIntegral (pPresentationTimingCount')) (\i -> peekCStruct @PastPresentationTimingGOOGLE (((pPPresentationTimings) `advancePtrBytes` (40 * (i)) :: Ptr PastPresentationTimingGOOGLE)))
+  pure $ ((r'), pPresentationTimings')
+
+
+-- | VkRefreshCycleDurationGOOGLE - Structure containing the RC duration of a
+-- display
+--
+-- = See Also
+--
+-- 'getRefreshCycleDurationGOOGLE'
+data RefreshCycleDurationGOOGLE = RefreshCycleDurationGOOGLE
+  { -- | @refreshDuration@ is the number of nanoseconds from the start of one
+    -- refresh cycle to the next.
+    refreshDuration :: Word64 }
+  deriving (Typeable)
+deriving instance Show RefreshCycleDurationGOOGLE
+
+instance ToCStruct RefreshCycleDurationGOOGLE where
+  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RefreshCycleDurationGOOGLE{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word64)) (refreshDuration)
+    f
+  cStructSize = 8
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct RefreshCycleDurationGOOGLE where
+  peekCStruct p = do
+    refreshDuration <- peek @Word64 ((p `plusPtr` 0 :: Ptr Word64))
+    pure $ RefreshCycleDurationGOOGLE
+             refreshDuration
+
+instance Storable RefreshCycleDurationGOOGLE where
+  sizeOf ~_ = 8
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero RefreshCycleDurationGOOGLE where
+  zero = RefreshCycleDurationGOOGLE
+           zero
+
+
+-- | VkPastPresentationTimingGOOGLE - Structure containing timing information
+-- about a previously-presented image
+--
+-- = Description
+--
+-- The results for a given @swapchain@ and @presentID@ are only returned
+-- once from 'getPastPresentationTimingGOOGLE'.
+--
+-- The application /can/ use the 'PastPresentationTimingGOOGLE' 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
+--
+-- 'getPastPresentationTimingGOOGLE'
+data PastPresentationTimingGOOGLE = PastPresentationTimingGOOGLE
+  { -- | @presentID@ is an application-provided value that was given to a
+    -- previous 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR' command
+    -- via 'PresentTimeGOOGLE'::@presentID@ (see below). It /can/ be used to
+    -- uniquely identify a previous present with the
+    -- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR' command.
+    presentID :: Word32
+  , -- | @desiredPresentTime@ is an application-provided value that was given to
+    -- a previous 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR' command
+    -- via 'PresentTimeGOOGLE'::@desiredPresentTime@. If non-zero, it was used
+    -- by the application to indicate that an image not be presented any sooner
+    -- than @desiredPresentTime@.
+    desiredPresentTime :: Word64
+  , -- | @actualPresentTime@ is the time when the image of the @swapchain@ was
+    -- actually displayed.
+    actualPresentTime :: Word64
+  , -- | @earliestPresentTime@ is the time when the image of the @swapchain@
+    -- could have been displayed. This /may/ differ from @actualPresentTime@ if
+    -- the application requested that the image be presented no sooner than
+    -- 'PresentTimeGOOGLE'::@desiredPresentTime@.
+    earliestPresentTime :: Word64
+  , -- | @presentMargin@ is an indication of how early the
+    -- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR' command was
+    -- processed compared to how soon it needed to be processed, and still be
+    -- presented at @earliestPresentTime@.
+    presentMargin :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show PastPresentationTimingGOOGLE
+
+instance ToCStruct PastPresentationTimingGOOGLE where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PastPresentationTimingGOOGLE{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (presentID)
+    poke ((p `plusPtr` 8 :: Ptr Word64)) (desiredPresentTime)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (actualPresentTime)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (earliestPresentTime)
+    poke ((p `plusPtr` 32 :: Ptr Word64)) (presentMargin)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct PastPresentationTimingGOOGLE where
+  peekCStruct p = do
+    presentID <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    desiredPresentTime <- peek @Word64 ((p `plusPtr` 8 :: Ptr Word64))
+    actualPresentTime <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
+    earliestPresentTime <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    presentMargin <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))
+    pure $ PastPresentationTimingGOOGLE
+             presentID desiredPresentTime actualPresentTime earliestPresentTime presentMargin
+
+instance Storable PastPresentationTimingGOOGLE where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PastPresentationTimingGOOGLE where
+  zero = PastPresentationTimingGOOGLE
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPresentTimesInfoGOOGLE - The earliest time each image should be
+-- presented
+--
+-- == Valid Usage
+--
+-- -   @swapchainCount@ /must/ be the same value as
+--     'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@swapchainCount@,
+--     where 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' is
+--     included in the @pNext@ chain of this 'PresentTimesInfoGOOGLE'
+--     structure
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE'
+--
+-- -   If @pTimes@ is not @NULL@, @pTimes@ /must/ be a valid pointer to an
+--     array of @swapchainCount@ 'PresentTimeGOOGLE' structures
+--
+-- -   @swapchainCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'PresentTimeGOOGLE', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PresentTimesInfoGOOGLE = PresentTimesInfoGOOGLE
+  { -- | @swapchainCount@ is the number of swapchains being presented to by this
+    -- command.
+    swapchainCount :: Word32
+  , -- | @pTimes@ is @NULL@ or a pointer to an array of 'PresentTimeGOOGLE'
+    -- elements with @swapchainCount@ entries. If not @NULL@, each element of
+    -- @pTimes@ contains the earliest time to present the image corresponding
+    -- to the entry in the
+    -- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@pImageIndices@
+    -- array.
+    times :: Vector PresentTimeGOOGLE
+  }
+  deriving (Typeable)
+deriving instance Show PresentTimesInfoGOOGLE
+
+instance ToCStruct PresentTimesInfoGOOGLE where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PresentTimesInfoGOOGLE{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    let pTimesLength = Data.Vector.length $ (times)
+    swapchainCount'' <- lift $ if (swapchainCount) == 0
+      then pure $ fromIntegral pTimesLength
+      else do
+        unless (fromIntegral pTimesLength == (swapchainCount) || pTimesLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pTimes must be empty or have 'swapchainCount' elements" Nothing Nothing
+        pure (swapchainCount)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (swapchainCount'')
+    pTimes'' <- if Data.Vector.null (times)
+      then pure nullPtr
+      else do
+        pPTimes <- ContT $ allocaBytesAligned @PresentTimeGOOGLE (((Data.Vector.length (times))) * 16) 8
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPTimes `plusPtr` (16 * (i)) :: Ptr PresentTimeGOOGLE) (e) . ($ ())) ((times))
+        pure $ pPTimes
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr PresentTimeGOOGLE))) pTimes''
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct PresentTimesInfoGOOGLE where
+  peekCStruct p = do
+    swapchainCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pTimes <- peek @(Ptr PresentTimeGOOGLE) ((p `plusPtr` 24 :: Ptr (Ptr PresentTimeGOOGLE)))
+    let pTimesLength = if pTimes == nullPtr then 0 else (fromIntegral swapchainCount)
+    pTimes' <- generateM pTimesLength (\i -> peekCStruct @PresentTimeGOOGLE ((pTimes `advancePtrBytes` (16 * (i)) :: Ptr PresentTimeGOOGLE)))
+    pure $ PresentTimesInfoGOOGLE
+             swapchainCount pTimes'
+
+instance Zero PresentTimesInfoGOOGLE where
+  zero = PresentTimesInfoGOOGLE
+           zero
+           mempty
+
+
+-- | VkPresentTimeGOOGLE - The earliest time image should be presented
+--
+-- = See Also
+--
+-- 'PresentTimesInfoGOOGLE'
+data PresentTimeGOOGLE = PresentTimeGOOGLE
+  { -- | @presentID@ is an application-provided identification value, that /can/
+    -- be used with the results of 'getPastPresentationTimingGOOGLE', in order
+    -- to uniquely identify this present. In order to be useful to the
+    -- application, it /should/ be unique within some period of time that is
+    -- meaningful to the application.
+    presentID :: Word32
+  , -- | @desiredPresentTime@ specifies that the image given /should/ not be
+    -- displayed to the user any earlier than this time. @desiredPresentTime@
+    -- is a time in nanoseconds, relative to a monotonically-increasing clock
+    -- (e.g. @CLOCK_MONOTONIC@ (see clock_gettime(2)) on Android and Linux). A
+    -- value of zero specifies that the presentation engine /may/ display the
+    -- image at any time. This is useful when the application desires to
+    -- provide @presentID@, but does not need a specific @desiredPresentTime@.
+    desiredPresentTime :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show PresentTimeGOOGLE
+
+instance ToCStruct PresentTimeGOOGLE where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PresentTimeGOOGLE{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (presentID)
+    poke ((p `plusPtr` 8 :: Ptr Word64)) (desiredPresentTime)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct PresentTimeGOOGLE where
+  peekCStruct p = do
+    presentID <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    desiredPresentTime <- peek @Word64 ((p `plusPtr` 8 :: Ptr Word64))
+    pure $ PresentTimeGOOGLE
+             presentID desiredPresentTime
+
+instance Storable PresentTimeGOOGLE where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PresentTimeGOOGLE where
+  zero = PresentTimeGOOGLE
+           zero
+           zero
+
+
+type GOOGLE_DISPLAY_TIMING_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION"
+pattern GOOGLE_DISPLAY_TIMING_SPEC_VERSION :: forall a . Integral a => a
+pattern GOOGLE_DISPLAY_TIMING_SPEC_VERSION = 1
+
+
+type GOOGLE_DISPLAY_TIMING_EXTENSION_NAME = "VK_GOOGLE_display_timing"
+
+-- No documentation found for TopLevel "VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME"
+pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME = "VK_GOOGLE_display_timing"
+
diff --git a/src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs-boot b/src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs-boot
@@ -0,0 +1,41 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_GOOGLE_display_timing  ( PastPresentationTimingGOOGLE
+                                                   , PresentTimeGOOGLE
+                                                   , PresentTimesInfoGOOGLE
+                                                   , RefreshCycleDurationGOOGLE
+                                                   ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PastPresentationTimingGOOGLE
+
+instance ToCStruct PastPresentationTimingGOOGLE
+instance Show PastPresentationTimingGOOGLE
+
+instance FromCStruct PastPresentationTimingGOOGLE
+
+
+data PresentTimeGOOGLE
+
+instance ToCStruct PresentTimeGOOGLE
+instance Show PresentTimeGOOGLE
+
+instance FromCStruct PresentTimeGOOGLE
+
+
+data PresentTimesInfoGOOGLE
+
+instance ToCStruct PresentTimesInfoGOOGLE
+instance Show PresentTimesInfoGOOGLE
+
+instance FromCStruct PresentTimesInfoGOOGLE
+
+
+data RefreshCycleDurationGOOGLE
+
+instance ToCStruct RefreshCycleDurationGOOGLE
+instance Show RefreshCycleDurationGOOGLE
+
+instance FromCStruct RefreshCycleDurationGOOGLE
+
diff --git a/src/Vulkan/Extensions/VK_GOOGLE_hlsl_functionality1.hs b/src/Vulkan/Extensions/VK_GOOGLE_hlsl_functionality1.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_GOOGLE_hlsl_functionality1.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1  ( GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION
+                                                        , pattern GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION
+                                                        , GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME
+                                                        , pattern GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME
+                                                        ) where
+
+import Data.String (IsString)
+
+type GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION"
+pattern GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION :: forall a . Integral a => a
+pattern GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION = 1
+
+
+type GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME = "VK_GOOGLE_hlsl_functionality1"
+
+-- No documentation found for TopLevel "VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME"
+pattern GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME = "VK_GOOGLE_hlsl_functionality1"
+
diff --git a/src/Vulkan/Extensions/VK_GOOGLE_user_type.hs b/src/Vulkan/Extensions/VK_GOOGLE_user_type.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_GOOGLE_user_type.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_GOOGLE_user_type  ( GOOGLE_USER_TYPE_SPEC_VERSION
+                                              , pattern GOOGLE_USER_TYPE_SPEC_VERSION
+                                              , GOOGLE_USER_TYPE_EXTENSION_NAME
+                                              , pattern GOOGLE_USER_TYPE_EXTENSION_NAME
+                                              ) where
+
+import Data.String (IsString)
+
+type GOOGLE_USER_TYPE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_GOOGLE_USER_TYPE_SPEC_VERSION"
+pattern GOOGLE_USER_TYPE_SPEC_VERSION :: forall a . Integral a => a
+pattern GOOGLE_USER_TYPE_SPEC_VERSION = 1
+
+
+type GOOGLE_USER_TYPE_EXTENSION_NAME = "VK_GOOGLE_user_type"
+
+-- No documentation found for TopLevel "VK_GOOGLE_USER_TYPE_EXTENSION_NAME"
+pattern GOOGLE_USER_TYPE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern GOOGLE_USER_TYPE_EXTENSION_NAME = "VK_GOOGLE_user_type"
+
diff --git a/src/Vulkan/Extensions/VK_IMG_filter_cubic.hs b/src/Vulkan/Extensions/VK_IMG_filter_cubic.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_IMG_filter_cubic.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_IMG_filter_cubic  ( IMG_FILTER_CUBIC_SPEC_VERSION
+                                              , pattern IMG_FILTER_CUBIC_SPEC_VERSION
+                                              , IMG_FILTER_CUBIC_EXTENSION_NAME
+                                              , pattern IMG_FILTER_CUBIC_EXTENSION_NAME
+                                              ) where
+
+import Data.String (IsString)
+
+type IMG_FILTER_CUBIC_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_IMG_FILTER_CUBIC_SPEC_VERSION"
+pattern IMG_FILTER_CUBIC_SPEC_VERSION :: forall a . Integral a => a
+pattern IMG_FILTER_CUBIC_SPEC_VERSION = 1
+
+
+type IMG_FILTER_CUBIC_EXTENSION_NAME = "VK_IMG_filter_cubic"
+
+-- No documentation found for TopLevel "VK_IMG_FILTER_CUBIC_EXTENSION_NAME"
+pattern IMG_FILTER_CUBIC_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern IMG_FILTER_CUBIC_EXTENSION_NAME = "VK_IMG_filter_cubic"
+
diff --git a/src/Vulkan/Extensions/VK_IMG_format_pvrtc.hs b/src/Vulkan/Extensions/VK_IMG_format_pvrtc.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_IMG_format_pvrtc.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_IMG_format_pvrtc  ( IMG_FORMAT_PVRTC_SPEC_VERSION
+                                              , pattern IMG_FORMAT_PVRTC_SPEC_VERSION
+                                              , IMG_FORMAT_PVRTC_EXTENSION_NAME
+                                              , pattern IMG_FORMAT_PVRTC_EXTENSION_NAME
+                                              ) where
+
+import Data.String (IsString)
+
+type IMG_FORMAT_PVRTC_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_IMG_FORMAT_PVRTC_SPEC_VERSION"
+pattern IMG_FORMAT_PVRTC_SPEC_VERSION :: forall a . Integral a => a
+pattern IMG_FORMAT_PVRTC_SPEC_VERSION = 1
+
+
+type IMG_FORMAT_PVRTC_EXTENSION_NAME = "VK_IMG_format_pvrtc"
+
+-- No documentation found for TopLevel "VK_IMG_FORMAT_PVRTC_EXTENSION_NAME"
+pattern IMG_FORMAT_PVRTC_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern IMG_FORMAT_PVRTC_EXTENSION_NAME = "VK_IMG_format_pvrtc"
+
diff --git a/src/Vulkan/Extensions/VK_INTEL_performance_query.hs b/src/Vulkan/Extensions/VK_INTEL_performance_query.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_INTEL_performance_query.hs
@@ -0,0 +1,1232 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_INTEL_performance_query  ( initializePerformanceApiINTEL
+                                                     , uninitializePerformanceApiINTEL
+                                                     , cmdSetPerformanceMarkerINTEL
+                                                     , cmdSetPerformanceStreamMarkerINTEL
+                                                     , cmdSetPerformanceOverrideINTEL
+                                                     , acquirePerformanceConfigurationINTEL
+                                                     , releasePerformanceConfigurationINTEL
+                                                     , queueSetPerformanceConfigurationINTEL
+                                                     , getPerformanceParameterINTEL
+                                                     , pattern STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL
+                                                     , PerformanceValueINTEL(..)
+                                                     , InitializePerformanceApiInfoINTEL(..)
+                                                     , QueryPoolPerformanceQueryCreateInfoINTEL(..)
+                                                     , PerformanceMarkerInfoINTEL(..)
+                                                     , PerformanceStreamMarkerInfoINTEL(..)
+                                                     , PerformanceOverrideInfoINTEL(..)
+                                                     , PerformanceConfigurationAcquireInfoINTEL(..)
+                                                     , PerformanceValueDataINTEL(..)
+                                                     , peekPerformanceValueDataINTEL
+                                                     , PerformanceConfigurationTypeINTEL( PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL
+                                                                                        , ..
+                                                                                        )
+                                                     , QueryPoolSamplingModeINTEL( QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL
+                                                                                 , ..
+                                                                                 )
+                                                     , PerformanceOverrideTypeINTEL( PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL
+                                                                                   , PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL
+                                                                                   , ..
+                                                                                   )
+                                                     , PerformanceParameterTypeINTEL( PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL
+                                                                                    , PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL
+                                                                                    , ..
+                                                                                    )
+                                                     , PerformanceValueTypeINTEL( PERFORMANCE_VALUE_TYPE_UINT32_INTEL
+                                                                                , PERFORMANCE_VALUE_TYPE_UINT64_INTEL
+                                                                                , PERFORMANCE_VALUE_TYPE_FLOAT_INTEL
+                                                                                , PERFORMANCE_VALUE_TYPE_BOOL_INTEL
+                                                                                , PERFORMANCE_VALUE_TYPE_STRING_INTEL
+                                                                                , ..
+                                                                                )
+                                                     , QueryPoolCreateInfoINTEL
+                                                     , INTEL_PERFORMANCE_QUERY_SPEC_VERSION
+                                                     , pattern INTEL_PERFORMANCE_QUERY_SPEC_VERSION
+                                                     , INTEL_PERFORMANCE_QUERY_EXTENSION_NAME
+                                                     , pattern INTEL_PERFORMANCE_QUERY_EXTENSION_NAME
+                                                     , PerformanceConfigurationINTEL(..)
+                                                     ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.ByteString (packCString)
+import Data.ByteString (useAsCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.Trans.Cont (runContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkAcquirePerformanceConfigurationINTEL))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetPerformanceMarkerINTEL))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetPerformanceOverrideINTEL))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetPerformanceStreamMarkerINTEL))
+import Vulkan.Dynamic (DeviceCmds(pVkGetPerformanceParameterINTEL))
+import Vulkan.Dynamic (DeviceCmds(pVkInitializePerformanceApiINTEL))
+import Vulkan.Dynamic (DeviceCmds(pVkQueueSetPerformanceConfigurationINTEL))
+import Vulkan.Dynamic (DeviceCmds(pVkReleasePerformanceConfigurationINTEL))
+import Vulkan.Dynamic (DeviceCmds(pVkUninitializePerformanceApiINTEL))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Extensions.Handles (PerformanceConfigurationINTEL)
+import Vulkan.Extensions.Handles (PerformanceConfigurationINTEL(..))
+import Vulkan.Core10.Handles (Queue)
+import Vulkan.Core10.Handles (Queue(..))
+import Vulkan.Core10.Handles (Queue_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (PerformanceConfigurationINTEL(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkInitializePerformanceApiINTEL
+  :: FunPtr (Ptr Device_T -> Ptr InitializePerformanceApiInfoINTEL -> IO Result) -> Ptr Device_T -> Ptr InitializePerformanceApiInfoINTEL -> IO Result
+
+-- | vkInitializePerformanceApiINTEL - Initialize a device for performance
+-- queries
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device used for the queries.
+--
+-- -   @pInitializeInfo@ is a pointer to a
+--     'InitializePerformanceApiInfoINTEL' structure specifying
+--     initialization parameters.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'InitializePerformanceApiInfoINTEL'
+initializePerformanceApiINTEL :: forall io . MonadIO io => Device -> ("initializeInfo" ::: InitializePerformanceApiInfoINTEL) -> io ()
+initializePerformanceApiINTEL device initializeInfo = liftIO . evalContT $ do
+  let vkInitializePerformanceApiINTELPtr = pVkInitializePerformanceApiINTEL (deviceCmds (device :: Device))
+  lift $ unless (vkInitializePerformanceApiINTELPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkInitializePerformanceApiINTEL is null" Nothing Nothing
+  let vkInitializePerformanceApiINTEL' = mkVkInitializePerformanceApiINTEL vkInitializePerformanceApiINTELPtr
+  pInitializeInfo <- ContT $ withCStruct (initializeInfo)
+  r <- lift $ vkInitializePerformanceApiINTEL' (deviceHandle (device)) pInitializeInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkUninitializePerformanceApiINTEL
+  :: FunPtr (Ptr Device_T -> IO ()) -> Ptr Device_T -> IO ()
+
+-- | vkUninitializePerformanceApiINTEL - Uninitialize a device for
+-- performance queries
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device used for the queries.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device'
+uninitializePerformanceApiINTEL :: forall io . MonadIO io => Device -> io ()
+uninitializePerformanceApiINTEL device = liftIO $ do
+  let vkUninitializePerformanceApiINTELPtr = pVkUninitializePerformanceApiINTEL (deviceCmds (device :: Device))
+  unless (vkUninitializePerformanceApiINTELPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkUninitializePerformanceApiINTEL is null" Nothing Nothing
+  let vkUninitializePerformanceApiINTEL' = mkVkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTELPtr
+  vkUninitializePerformanceApiINTEL' (deviceHandle (device))
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetPerformanceMarkerINTEL
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr PerformanceMarkerInfoINTEL -> IO Result) -> Ptr CommandBuffer_T -> Ptr PerformanceMarkerInfoINTEL -> IO Result
+
+-- | vkCmdSetPerformanceMarkerINTEL - Markers
+--
+-- = Parameters
+--
+-- The last marker set onto a command buffer before the end of a query will
+-- be part of the query result.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
+--     'PerformanceMarkerInfoINTEL' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, compute, or transfer
+--     operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Transfer                                                                                                              |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'PerformanceMarkerInfoINTEL'
+cmdSetPerformanceMarkerINTEL :: forall io . MonadIO io => CommandBuffer -> PerformanceMarkerInfoINTEL -> io ()
+cmdSetPerformanceMarkerINTEL commandBuffer markerInfo = liftIO . evalContT $ do
+  let vkCmdSetPerformanceMarkerINTELPtr = pVkCmdSetPerformanceMarkerINTEL (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetPerformanceMarkerINTELPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetPerformanceMarkerINTEL is null" Nothing Nothing
+  let vkCmdSetPerformanceMarkerINTEL' = mkVkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTELPtr
+  pMarkerInfo <- ContT $ withCStruct (markerInfo)
+  r <- lift $ vkCmdSetPerformanceMarkerINTEL' (commandBufferHandle (commandBuffer)) pMarkerInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetPerformanceStreamMarkerINTEL
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr PerformanceStreamMarkerInfoINTEL -> IO Result) -> Ptr CommandBuffer_T -> Ptr PerformanceStreamMarkerInfoINTEL -> IO Result
+
+-- | vkCmdSetPerformanceStreamMarkerINTEL - Markers
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
+--     'PerformanceStreamMarkerInfoINTEL' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, compute, or transfer
+--     operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Transfer                                                                                                              |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'PerformanceStreamMarkerInfoINTEL'
+cmdSetPerformanceStreamMarkerINTEL :: forall io . MonadIO io => CommandBuffer -> PerformanceStreamMarkerInfoINTEL -> io ()
+cmdSetPerformanceStreamMarkerINTEL commandBuffer markerInfo = liftIO . evalContT $ do
+  let vkCmdSetPerformanceStreamMarkerINTELPtr = pVkCmdSetPerformanceStreamMarkerINTEL (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetPerformanceStreamMarkerINTELPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetPerformanceStreamMarkerINTEL is null" Nothing Nothing
+  let vkCmdSetPerformanceStreamMarkerINTEL' = mkVkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTELPtr
+  pMarkerInfo <- ContT $ withCStruct (markerInfo)
+  r <- lift $ vkCmdSetPerformanceStreamMarkerINTEL' (commandBufferHandle (commandBuffer)) pMarkerInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetPerformanceOverrideINTEL
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr PerformanceOverrideInfoINTEL -> IO Result) -> Ptr CommandBuffer_T -> Ptr PerformanceOverrideInfoINTEL -> IO Result
+
+-- | vkCmdSetPerformanceOverrideINTEL - Performance override settings
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer where the override takes
+--     place.
+--
+-- -   @pOverrideInfo@ is a pointer to a 'PerformanceOverrideInfoINTEL'
+--     structure selecting the parameter to override.
+--
+-- == Valid Usage
+--
+-- -   @pOverrideInfo@ /must/ not be used with a
+--     'PerformanceOverrideTypeINTEL' that is not reported available by
+--     'getPerformanceParameterINTEL'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pOverrideInfo@ /must/ be a valid pointer to a valid
+--     'PerformanceOverrideInfoINTEL' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, compute, or transfer
+--     operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Transfer                                                                                                              |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'PerformanceOverrideInfoINTEL'
+cmdSetPerformanceOverrideINTEL :: forall io . MonadIO io => CommandBuffer -> PerformanceOverrideInfoINTEL -> io ()
+cmdSetPerformanceOverrideINTEL commandBuffer overrideInfo = liftIO . evalContT $ do
+  let vkCmdSetPerformanceOverrideINTELPtr = pVkCmdSetPerformanceOverrideINTEL (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetPerformanceOverrideINTELPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetPerformanceOverrideINTEL is null" Nothing Nothing
+  let vkCmdSetPerformanceOverrideINTEL' = mkVkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTELPtr
+  pOverrideInfo <- ContT $ withCStruct (overrideInfo)
+  r <- lift $ vkCmdSetPerformanceOverrideINTEL' (commandBufferHandle (commandBuffer)) pOverrideInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkAcquirePerformanceConfigurationINTEL
+  :: FunPtr (Ptr Device_T -> Ptr PerformanceConfigurationAcquireInfoINTEL -> Ptr PerformanceConfigurationINTEL -> IO Result) -> Ptr Device_T -> Ptr PerformanceConfigurationAcquireInfoINTEL -> Ptr PerformanceConfigurationINTEL -> IO Result
+
+-- | vkAcquirePerformanceConfigurationINTEL - Acquire the performance query
+-- capability
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that the performance query commands
+--     will be submitted to.
+--
+-- -   @pAcquireInfo@ is a pointer to a
+--     'PerformanceConfigurationAcquireInfoINTEL' structure, specifying the
+--     performance configuration to acquire.
+--
+-- -   @pConfiguration@ is a pointer to a
+--     'Vulkan.Extensions.Handles.PerformanceConfigurationINTEL' handle in
+--     which the resulting configuration object is returned.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'PerformanceConfigurationAcquireInfoINTEL',
+-- 'Vulkan.Extensions.Handles.PerformanceConfigurationINTEL'
+acquirePerformanceConfigurationINTEL :: forall io . MonadIO io => Device -> PerformanceConfigurationAcquireInfoINTEL -> io (PerformanceConfigurationINTEL)
+acquirePerformanceConfigurationINTEL device acquireInfo = liftIO . evalContT $ do
+  let vkAcquirePerformanceConfigurationINTELPtr = pVkAcquirePerformanceConfigurationINTEL (deviceCmds (device :: Device))
+  lift $ unless (vkAcquirePerformanceConfigurationINTELPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAcquirePerformanceConfigurationINTEL is null" Nothing Nothing
+  let vkAcquirePerformanceConfigurationINTEL' = mkVkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTELPtr
+  pAcquireInfo <- ContT $ withCStruct (acquireInfo)
+  pPConfiguration <- ContT $ bracket (callocBytes @PerformanceConfigurationINTEL 8) free
+  r <- lift $ vkAcquirePerformanceConfigurationINTEL' (deviceHandle (device)) pAcquireInfo (pPConfiguration)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pConfiguration <- lift $ peek @PerformanceConfigurationINTEL pPConfiguration
+  pure $ (pConfiguration)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkReleasePerformanceConfigurationINTEL
+  :: FunPtr (Ptr Device_T -> PerformanceConfigurationINTEL -> IO Result) -> Ptr Device_T -> PerformanceConfigurationINTEL -> IO Result
+
+-- | vkReleasePerformanceConfigurationINTEL - Release a configuration to
+-- capture performance data
+--
+-- = Parameters
+--
+-- -   @device@ is the device associated to the configuration object to
+--     release.
+--
+-- -   @configuration@ is the configuration object to release.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Extensions.Handles.PerformanceConfigurationINTEL'
+releasePerformanceConfigurationINTEL :: forall io . MonadIO io => Device -> PerformanceConfigurationINTEL -> io ()
+releasePerformanceConfigurationINTEL device configuration = liftIO $ do
+  let vkReleasePerformanceConfigurationINTELPtr = pVkReleasePerformanceConfigurationINTEL (deviceCmds (device :: Device))
+  unless (vkReleasePerformanceConfigurationINTELPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkReleasePerformanceConfigurationINTEL is null" Nothing Nothing
+  let vkReleasePerformanceConfigurationINTEL' = mkVkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTELPtr
+  r <- vkReleasePerformanceConfigurationINTEL' (deviceHandle (device)) (configuration)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkQueueSetPerformanceConfigurationINTEL
+  :: FunPtr (Ptr Queue_T -> PerformanceConfigurationINTEL -> IO Result) -> Ptr Queue_T -> PerformanceConfigurationINTEL -> IO Result
+
+-- | vkQueueSetPerformanceConfigurationINTEL - Set a performance query
+--
+-- = Parameters
+--
+-- -   @queue@ is the queue on which the configuration will be used.
+--
+-- -   @configuration@ is the configuration to use.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle
+--
+-- -   @configuration@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.PerformanceConfigurationINTEL' handle
+--
+-- -   Both of @configuration@, and @queue@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.PerformanceConfigurationINTEL',
+-- 'Vulkan.Core10.Handles.Queue'
+queueSetPerformanceConfigurationINTEL :: forall io . MonadIO io => Queue -> PerformanceConfigurationINTEL -> io ()
+queueSetPerformanceConfigurationINTEL queue configuration = liftIO $ do
+  let vkQueueSetPerformanceConfigurationINTELPtr = pVkQueueSetPerformanceConfigurationINTEL (deviceCmds (queue :: Queue))
+  unless (vkQueueSetPerformanceConfigurationINTELPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkQueueSetPerformanceConfigurationINTEL is null" Nothing Nothing
+  let vkQueueSetPerformanceConfigurationINTEL' = mkVkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTELPtr
+  r <- vkQueueSetPerformanceConfigurationINTEL' (queueHandle (queue)) (configuration)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPerformanceParameterINTEL
+  :: FunPtr (Ptr Device_T -> PerformanceParameterTypeINTEL -> Ptr PerformanceValueINTEL -> IO Result) -> Ptr Device_T -> PerformanceParameterTypeINTEL -> Ptr PerformanceValueINTEL -> IO Result
+
+-- | vkGetPerformanceParameterINTEL - Query performance capabilities of the
+-- device
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device to query.
+--
+-- -   @parameter@ is the parameter to query.
+--
+-- -   @pValue@ is a pointer to a 'PerformanceValueINTEL' structure in
+--     which the type and value of the parameter are returned.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'PerformanceParameterTypeINTEL',
+-- 'PerformanceValueINTEL'
+getPerformanceParameterINTEL :: forall io . MonadIO io => Device -> PerformanceParameterTypeINTEL -> io (PerformanceValueINTEL)
+getPerformanceParameterINTEL device parameter = liftIO . evalContT $ do
+  let vkGetPerformanceParameterINTELPtr = pVkGetPerformanceParameterINTEL (deviceCmds (device :: Device))
+  lift $ unless (vkGetPerformanceParameterINTELPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPerformanceParameterINTEL is null" Nothing Nothing
+  let vkGetPerformanceParameterINTEL' = mkVkGetPerformanceParameterINTEL vkGetPerformanceParameterINTELPtr
+  pPValue <- ContT (withZeroCStruct @PerformanceValueINTEL)
+  r <- lift $ vkGetPerformanceParameterINTEL' (deviceHandle (device)) (parameter) (pPValue)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pValue <- lift $ peekCStruct @PerformanceValueINTEL pPValue
+  pure $ (pValue)
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL"
+pattern STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL
+
+
+-- | VkPerformanceValueINTEL - Container for value and types of parameters
+-- that can be queried
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PerformanceValueDataINTEL', 'PerformanceValueTypeINTEL',
+-- 'getPerformanceParameterINTEL'
+data PerformanceValueINTEL = PerformanceValueINTEL
+  { -- | @type@ /must/ be a valid 'PerformanceValueTypeINTEL' value
+    type' :: PerformanceValueTypeINTEL
+  , -- | @data@ /must/ be a valid 'PerformanceValueDataINTEL' union
+    data' :: PerformanceValueDataINTEL
+  }
+  deriving (Typeable)
+deriving instance Show PerformanceValueINTEL
+
+instance ToCStruct PerformanceValueINTEL where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PerformanceValueINTEL{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr PerformanceValueTypeINTEL)) (type')
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr PerformanceValueDataINTEL)) (data') . ($ ())
+    lift $ f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr PerformanceValueTypeINTEL)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr PerformanceValueDataINTEL)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct PerformanceValueINTEL where
+  peekCStruct p = do
+    type' <- peek @PerformanceValueTypeINTEL ((p `plusPtr` 0 :: Ptr PerformanceValueTypeINTEL))
+    data' <- peekPerformanceValueDataINTEL type' ((p `plusPtr` 8 :: Ptr PerformanceValueDataINTEL))
+    pure $ PerformanceValueINTEL
+             type' data'
+
+instance Zero PerformanceValueINTEL where
+  zero = PerformanceValueINTEL
+           zero
+           zero
+
+
+-- | VkInitializePerformanceApiInfoINTEL - Structure specifying parameters of
+-- initialize of the device
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'initializePerformanceApiINTEL'
+data InitializePerformanceApiInfoINTEL = InitializePerformanceApiInfoINTEL
+  { -- | @pUserData@ is a pointer for application data.
+    userData :: Ptr () }
+  deriving (Typeable)
+deriving instance Show InitializePerformanceApiInfoINTEL
+
+instance ToCStruct InitializePerformanceApiInfoINTEL where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p InitializePerformanceApiInfoINTEL{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr (Ptr ()))) (userData)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct InitializePerformanceApiInfoINTEL where
+  peekCStruct p = do
+    pUserData <- peek @(Ptr ()) ((p `plusPtr` 16 :: Ptr (Ptr ())))
+    pure $ InitializePerformanceApiInfoINTEL
+             pUserData
+
+instance Storable InitializePerformanceApiInfoINTEL where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero InitializePerformanceApiInfoINTEL where
+  zero = InitializePerformanceApiInfoINTEL
+           zero
+
+
+-- | VkQueryPoolPerformanceQueryCreateInfoINTEL - Structure specifying
+-- parameters to create a pool of performance queries
+--
+-- = Members
+--
+-- To create a pool for Intel performance queries, set
+-- 'Vulkan.Core10.Query.QueryPoolCreateInfo'::@queryType@ to
+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_INTEL' and
+-- add a 'QueryPoolPerformanceQueryCreateInfoINTEL' structure to the
+-- @pNext@ chain of the 'Vulkan.Core10.Query.QueryPoolCreateInfo'
+-- structure.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'QueryPoolSamplingModeINTEL',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data QueryPoolPerformanceQueryCreateInfoINTEL = QueryPoolPerformanceQueryCreateInfoINTEL
+  { -- | @performanceCountersSampling@ /must/ be a valid
+    -- 'QueryPoolSamplingModeINTEL' value
+    performanceCountersSampling :: QueryPoolSamplingModeINTEL }
+  deriving (Typeable)
+deriving instance Show QueryPoolPerformanceQueryCreateInfoINTEL
+
+instance ToCStruct QueryPoolPerformanceQueryCreateInfoINTEL where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p QueryPoolPerformanceQueryCreateInfoINTEL{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr QueryPoolSamplingModeINTEL)) (performanceCountersSampling)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr QueryPoolSamplingModeINTEL)) (zero)
+    f
+
+instance FromCStruct QueryPoolPerformanceQueryCreateInfoINTEL where
+  peekCStruct p = do
+    performanceCountersSampling <- peek @QueryPoolSamplingModeINTEL ((p `plusPtr` 16 :: Ptr QueryPoolSamplingModeINTEL))
+    pure $ QueryPoolPerformanceQueryCreateInfoINTEL
+             performanceCountersSampling
+
+instance Storable QueryPoolPerformanceQueryCreateInfoINTEL where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero QueryPoolPerformanceQueryCreateInfoINTEL where
+  zero = QueryPoolPerformanceQueryCreateInfoINTEL
+           zero
+
+
+-- | VkPerformanceMarkerInfoINTEL - Structure specifying performance markers
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdSetPerformanceMarkerINTEL'
+data PerformanceMarkerInfoINTEL = PerformanceMarkerInfoINTEL
+  { -- | @marker@ is the marker value that will be recorded into the opaque query
+    -- results.
+    marker :: Word64 }
+  deriving (Typeable)
+deriving instance Show PerformanceMarkerInfoINTEL
+
+instance ToCStruct PerformanceMarkerInfoINTEL where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PerformanceMarkerInfoINTEL{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (marker)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct PerformanceMarkerInfoINTEL where
+  peekCStruct p = do
+    marker <- peek @Word64 ((p `plusPtr` 16 :: Ptr Word64))
+    pure $ PerformanceMarkerInfoINTEL
+             marker
+
+instance Storable PerformanceMarkerInfoINTEL where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PerformanceMarkerInfoINTEL where
+  zero = PerformanceMarkerInfoINTEL
+           zero
+
+
+-- | VkPerformanceStreamMarkerInfoINTEL - Structure specifying stream
+-- performance markers
+--
+-- == Valid Usage
+--
+-- -   The value written by the application into @marker@ /must/ only used
+--     the valid bits as reported by 'getPerformanceParameterINTEL' with
+--     the 'PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdSetPerformanceStreamMarkerINTEL'
+data PerformanceStreamMarkerInfoINTEL = PerformanceStreamMarkerInfoINTEL
+  { -- | @marker@ is the marker value that will be recorded into the reports
+    -- consumed by an external application.
+    marker :: Word32 }
+  deriving (Typeable)
+deriving instance Show PerformanceStreamMarkerInfoINTEL
+
+instance ToCStruct PerformanceStreamMarkerInfoINTEL where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PerformanceStreamMarkerInfoINTEL{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (marker)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PerformanceStreamMarkerInfoINTEL where
+  peekCStruct p = do
+    marker <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ PerformanceStreamMarkerInfoINTEL
+             marker
+
+instance Storable PerformanceStreamMarkerInfoINTEL where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PerformanceStreamMarkerInfoINTEL where
+  zero = PerformanceStreamMarkerInfoINTEL
+           zero
+
+
+-- | VkPerformanceOverrideInfoINTEL - Performance override info
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'PerformanceOverrideTypeINTEL',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdSetPerformanceOverrideINTEL'
+data PerformanceOverrideInfoINTEL = PerformanceOverrideInfoINTEL
+  { -- | @type@ /must/ be a valid 'PerformanceOverrideTypeINTEL' value
+    type' :: PerformanceOverrideTypeINTEL
+  , -- | @enable@ defines whether the override is enabled.
+    enable :: Bool
+  , -- | @parameter@ is a potential required parameter for the override.
+    parameter :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show PerformanceOverrideInfoINTEL
+
+instance ToCStruct PerformanceOverrideInfoINTEL where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PerformanceOverrideInfoINTEL{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PerformanceOverrideTypeINTEL)) (type')
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (enable))
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (parameter)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PerformanceOverrideTypeINTEL)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct PerformanceOverrideInfoINTEL where
+  peekCStruct p = do
+    type' <- peek @PerformanceOverrideTypeINTEL ((p `plusPtr` 16 :: Ptr PerformanceOverrideTypeINTEL))
+    enable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    parameter <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    pure $ PerformanceOverrideInfoINTEL
+             type' (bool32ToBool enable) parameter
+
+instance Storable PerformanceOverrideInfoINTEL where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PerformanceOverrideInfoINTEL where
+  zero = PerformanceOverrideInfoINTEL
+           zero
+           zero
+           zero
+
+
+-- | VkPerformanceConfigurationAcquireInfoINTEL - Acquire a configuration to
+-- capture performance data
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PerformanceConfigurationTypeINTEL',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'acquirePerformanceConfigurationINTEL'
+data PerformanceConfigurationAcquireInfoINTEL = PerformanceConfigurationAcquireInfoINTEL
+  { -- | @type@ /must/ be a valid 'PerformanceConfigurationTypeINTEL' value
+    type' :: PerformanceConfigurationTypeINTEL }
+  deriving (Typeable)
+deriving instance Show PerformanceConfigurationAcquireInfoINTEL
+
+instance ToCStruct PerformanceConfigurationAcquireInfoINTEL where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PerformanceConfigurationAcquireInfoINTEL{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PerformanceConfigurationTypeINTEL)) (type')
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PerformanceConfigurationTypeINTEL)) (zero)
+    f
+
+instance FromCStruct PerformanceConfigurationAcquireInfoINTEL where
+  peekCStruct p = do
+    type' <- peek @PerformanceConfigurationTypeINTEL ((p `plusPtr` 16 :: Ptr PerformanceConfigurationTypeINTEL))
+    pure $ PerformanceConfigurationAcquireInfoINTEL
+             type'
+
+instance Storable PerformanceConfigurationAcquireInfoINTEL where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PerformanceConfigurationAcquireInfoINTEL where
+  zero = PerformanceConfigurationAcquireInfoINTEL
+           zero
+
+
+data PerformanceValueDataINTEL
+  = Value32 Word32
+  | Value64 Word64
+  | ValueFloat Float
+  | ValueBool Bool
+  | ValueString ByteString
+  deriving (Show)
+
+instance ToCStruct PerformanceValueDataINTEL where
+  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct :: Ptr PerformanceValueDataINTEL -> PerformanceValueDataINTEL -> IO a -> IO a
+  pokeCStruct p = (. const) . runContT .  \case
+    Value32 v -> lift $ poke (castPtr @_ @Word32 p) (v)
+    Value64 v -> lift $ poke (castPtr @_ @Word64 p) (v)
+    ValueFloat v -> lift $ poke (castPtr @_ @CFloat p) (CFloat (v))
+    ValueBool v -> lift $ poke (castPtr @_ @Bool32 p) (boolToBool32 (v))
+    ValueString v -> do
+      valueString <- ContT $ useAsCString (v)
+      lift $ poke (castPtr @_ @(Ptr CChar) p) valueString
+  pokeZeroCStruct :: Ptr PerformanceValueDataINTEL -> IO b -> IO b
+  pokeZeroCStruct _ f = f
+  cStructSize = 8
+  cStructAlignment = 8
+
+instance Zero PerformanceValueDataINTEL where
+  zero = Value64 zero
+
+peekPerformanceValueDataINTEL :: PerformanceValueTypeINTEL -> Ptr PerformanceValueDataINTEL -> IO PerformanceValueDataINTEL
+peekPerformanceValueDataINTEL tag p = case tag of
+  PERFORMANCE_VALUE_TYPE_UINT32_INTEL -> Value32 <$> (peek @Word32 (castPtr @_ @Word32 p))
+  PERFORMANCE_VALUE_TYPE_UINT64_INTEL -> Value64 <$> (peek @Word64 (castPtr @_ @Word64 p))
+  PERFORMANCE_VALUE_TYPE_FLOAT_INTEL -> ValueFloat <$> (do
+    valueFloat <- peek @CFloat (castPtr @_ @CFloat p)
+    pure $ (\(CFloat a) -> a) valueFloat)
+  PERFORMANCE_VALUE_TYPE_BOOL_INTEL -> ValueBool <$> (do
+    valueBool <- peek @Bool32 (castPtr @_ @Bool32 p)
+    pure $ bool32ToBool valueBool)
+  PERFORMANCE_VALUE_TYPE_STRING_INTEL -> ValueString <$> (packCString =<< peek (castPtr @_ @(Ptr CChar) p))
+
+
+-- | VkPerformanceConfigurationTypeINTEL - Type of performance configuration
+--
+-- = See Also
+--
+-- 'PerformanceConfigurationAcquireInfoINTEL'
+newtype PerformanceConfigurationTypeINTEL = PerformanceConfigurationTypeINTEL Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkPerformanceConfigurationTypeINTEL" "VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL"
+pattern PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = PerformanceConfigurationTypeINTEL 0
+{-# complete PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL :: PerformanceConfigurationTypeINTEL #-}
+
+instance Show PerformanceConfigurationTypeINTEL where
+  showsPrec p = \case
+    PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL -> showString "PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL"
+    PerformanceConfigurationTypeINTEL x -> showParen (p >= 11) (showString "PerformanceConfigurationTypeINTEL " . showsPrec 11 x)
+
+instance Read PerformanceConfigurationTypeINTEL where
+  readPrec = parens (choose [("PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL", pure PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PerformanceConfigurationTypeINTEL")
+                       v <- step readPrec
+                       pure (PerformanceConfigurationTypeINTEL v)))
+
+
+-- | VkQueryPoolSamplingModeINTEL - Enum specifying how performance queries
+-- should be captured
+--
+-- = See Also
+--
+-- 'QueryPoolPerformanceQueryCreateInfoINTEL'
+newtype QueryPoolSamplingModeINTEL = QueryPoolSamplingModeINTEL Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL' is the default mode in which the
+-- application calls 'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery'
+-- and 'Vulkan.Core10.CommandBufferBuilding.cmdEndQuery' to record
+-- performance data.
+pattern QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = QueryPoolSamplingModeINTEL 0
+{-# complete QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL :: QueryPoolSamplingModeINTEL #-}
+
+instance Show QueryPoolSamplingModeINTEL where
+  showsPrec p = \case
+    QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL -> showString "QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL"
+    QueryPoolSamplingModeINTEL x -> showParen (p >= 11) (showString "QueryPoolSamplingModeINTEL " . showsPrec 11 x)
+
+instance Read QueryPoolSamplingModeINTEL where
+  readPrec = parens (choose [("QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL", pure QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "QueryPoolSamplingModeINTEL")
+                       v <- step readPrec
+                       pure (QueryPoolSamplingModeINTEL v)))
+
+
+-- | VkPerformanceOverrideTypeINTEL - Performance override type
+--
+-- = See Also
+--
+-- 'PerformanceOverrideInfoINTEL'
+newtype PerformanceOverrideTypeINTEL = PerformanceOverrideTypeINTEL Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL' turns all rendering
+-- operations into noop.
+pattern PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = PerformanceOverrideTypeINTEL 0
+-- | 'PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL' stalls the stream of
+-- commands until all previously emitted commands have completed and all
+-- caches been flushed and invalidated.
+pattern PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = PerformanceOverrideTypeINTEL 1
+{-# complete PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL,
+             PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL :: PerformanceOverrideTypeINTEL #-}
+
+instance Show PerformanceOverrideTypeINTEL where
+  showsPrec p = \case
+    PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL -> showString "PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL"
+    PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL -> showString "PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL"
+    PerformanceOverrideTypeINTEL x -> showParen (p >= 11) (showString "PerformanceOverrideTypeINTEL " . showsPrec 11 x)
+
+instance Read PerformanceOverrideTypeINTEL where
+  readPrec = parens (choose [("PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL", pure PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL)
+                            , ("PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL", pure PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PerformanceOverrideTypeINTEL")
+                       v <- step readPrec
+                       pure (PerformanceOverrideTypeINTEL v)))
+
+
+-- | VkPerformanceParameterTypeINTEL - Parameters that can be queried
+--
+-- = See Also
+--
+-- 'getPerformanceParameterINTEL'
+newtype PerformanceParameterTypeINTEL = PerformanceParameterTypeINTEL Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL' has a boolean
+-- result which tells whether hardware counters can be captured.
+pattern PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL = PerformanceParameterTypeINTEL 0
+-- | 'PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL' has a 32
+-- bits integer result which tells how many bits can be written into the
+-- 'PerformanceValueINTEL' value.
+pattern PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL = PerformanceParameterTypeINTEL 1
+{-# complete PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL,
+             PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL :: PerformanceParameterTypeINTEL #-}
+
+instance Show PerformanceParameterTypeINTEL where
+  showsPrec p = \case
+    PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL -> showString "PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL"
+    PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL -> showString "PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL"
+    PerformanceParameterTypeINTEL x -> showParen (p >= 11) (showString "PerformanceParameterTypeINTEL " . showsPrec 11 x)
+
+instance Read PerformanceParameterTypeINTEL where
+  readPrec = parens (choose [("PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL", pure PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL)
+                            , ("PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL", pure PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PerformanceParameterTypeINTEL")
+                       v <- step readPrec
+                       pure (PerformanceParameterTypeINTEL v)))
+
+
+-- | VkPerformanceValueTypeINTEL - Type of the parameters that can be queried
+--
+-- = See Also
+--
+-- 'PerformanceValueINTEL'
+newtype PerformanceValueTypeINTEL = PerformanceValueTypeINTEL Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkPerformanceValueTypeINTEL" "VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL"
+pattern PERFORMANCE_VALUE_TYPE_UINT32_INTEL = PerformanceValueTypeINTEL 0
+-- No documentation found for Nested "VkPerformanceValueTypeINTEL" "VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL"
+pattern PERFORMANCE_VALUE_TYPE_UINT64_INTEL = PerformanceValueTypeINTEL 1
+-- No documentation found for Nested "VkPerformanceValueTypeINTEL" "VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL"
+pattern PERFORMANCE_VALUE_TYPE_FLOAT_INTEL = PerformanceValueTypeINTEL 2
+-- No documentation found for Nested "VkPerformanceValueTypeINTEL" "VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL"
+pattern PERFORMANCE_VALUE_TYPE_BOOL_INTEL = PerformanceValueTypeINTEL 3
+-- No documentation found for Nested "VkPerformanceValueTypeINTEL" "VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL"
+pattern PERFORMANCE_VALUE_TYPE_STRING_INTEL = PerformanceValueTypeINTEL 4
+{-# complete PERFORMANCE_VALUE_TYPE_UINT32_INTEL,
+             PERFORMANCE_VALUE_TYPE_UINT64_INTEL,
+             PERFORMANCE_VALUE_TYPE_FLOAT_INTEL,
+             PERFORMANCE_VALUE_TYPE_BOOL_INTEL,
+             PERFORMANCE_VALUE_TYPE_STRING_INTEL :: PerformanceValueTypeINTEL #-}
+
+instance Show PerformanceValueTypeINTEL where
+  showsPrec p = \case
+    PERFORMANCE_VALUE_TYPE_UINT32_INTEL -> showString "PERFORMANCE_VALUE_TYPE_UINT32_INTEL"
+    PERFORMANCE_VALUE_TYPE_UINT64_INTEL -> showString "PERFORMANCE_VALUE_TYPE_UINT64_INTEL"
+    PERFORMANCE_VALUE_TYPE_FLOAT_INTEL -> showString "PERFORMANCE_VALUE_TYPE_FLOAT_INTEL"
+    PERFORMANCE_VALUE_TYPE_BOOL_INTEL -> showString "PERFORMANCE_VALUE_TYPE_BOOL_INTEL"
+    PERFORMANCE_VALUE_TYPE_STRING_INTEL -> showString "PERFORMANCE_VALUE_TYPE_STRING_INTEL"
+    PerformanceValueTypeINTEL x -> showParen (p >= 11) (showString "PerformanceValueTypeINTEL " . showsPrec 11 x)
+
+instance Read PerformanceValueTypeINTEL where
+  readPrec = parens (choose [("PERFORMANCE_VALUE_TYPE_UINT32_INTEL", pure PERFORMANCE_VALUE_TYPE_UINT32_INTEL)
+                            , ("PERFORMANCE_VALUE_TYPE_UINT64_INTEL", pure PERFORMANCE_VALUE_TYPE_UINT64_INTEL)
+                            , ("PERFORMANCE_VALUE_TYPE_FLOAT_INTEL", pure PERFORMANCE_VALUE_TYPE_FLOAT_INTEL)
+                            , ("PERFORMANCE_VALUE_TYPE_BOOL_INTEL", pure PERFORMANCE_VALUE_TYPE_BOOL_INTEL)
+                            , ("PERFORMANCE_VALUE_TYPE_STRING_INTEL", pure PERFORMANCE_VALUE_TYPE_STRING_INTEL)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PerformanceValueTypeINTEL")
+                       v <- step readPrec
+                       pure (PerformanceValueTypeINTEL v)))
+
+
+-- No documentation found for TopLevel "VkQueryPoolCreateInfoINTEL"
+type QueryPoolCreateInfoINTEL = QueryPoolPerformanceQueryCreateInfoINTEL
+
+
+type INTEL_PERFORMANCE_QUERY_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION"
+pattern INTEL_PERFORMANCE_QUERY_SPEC_VERSION :: forall a . Integral a => a
+pattern INTEL_PERFORMANCE_QUERY_SPEC_VERSION = 2
+
+
+type INTEL_PERFORMANCE_QUERY_EXTENSION_NAME = "VK_INTEL_performance_query"
+
+-- No documentation found for TopLevel "VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME"
+pattern INTEL_PERFORMANCE_QUERY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern INTEL_PERFORMANCE_QUERY_EXTENSION_NAME = "VK_INTEL_performance_query"
+
diff --git a/src/Vulkan/Extensions/VK_INTEL_performance_query.hs-boot b/src/Vulkan/Extensions/VK_INTEL_performance_query.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_INTEL_performance_query.hs-boot
@@ -0,0 +1,72 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_INTEL_performance_query  ( InitializePerformanceApiInfoINTEL
+                                                     , PerformanceConfigurationAcquireInfoINTEL
+                                                     , PerformanceMarkerInfoINTEL
+                                                     , PerformanceOverrideInfoINTEL
+                                                     , PerformanceStreamMarkerInfoINTEL
+                                                     , PerformanceValueINTEL
+                                                     , QueryPoolPerformanceQueryCreateInfoINTEL
+                                                     , PerformanceParameterTypeINTEL
+                                                     ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data InitializePerformanceApiInfoINTEL
+
+instance ToCStruct InitializePerformanceApiInfoINTEL
+instance Show InitializePerformanceApiInfoINTEL
+
+instance FromCStruct InitializePerformanceApiInfoINTEL
+
+
+data PerformanceConfigurationAcquireInfoINTEL
+
+instance ToCStruct PerformanceConfigurationAcquireInfoINTEL
+instance Show PerformanceConfigurationAcquireInfoINTEL
+
+instance FromCStruct PerformanceConfigurationAcquireInfoINTEL
+
+
+data PerformanceMarkerInfoINTEL
+
+instance ToCStruct PerformanceMarkerInfoINTEL
+instance Show PerformanceMarkerInfoINTEL
+
+instance FromCStruct PerformanceMarkerInfoINTEL
+
+
+data PerformanceOverrideInfoINTEL
+
+instance ToCStruct PerformanceOverrideInfoINTEL
+instance Show PerformanceOverrideInfoINTEL
+
+instance FromCStruct PerformanceOverrideInfoINTEL
+
+
+data PerformanceStreamMarkerInfoINTEL
+
+instance ToCStruct PerformanceStreamMarkerInfoINTEL
+instance Show PerformanceStreamMarkerInfoINTEL
+
+instance FromCStruct PerformanceStreamMarkerInfoINTEL
+
+
+data PerformanceValueINTEL
+
+instance ToCStruct PerformanceValueINTEL
+instance Show PerformanceValueINTEL
+
+instance FromCStruct PerformanceValueINTEL
+
+
+data QueryPoolPerformanceQueryCreateInfoINTEL
+
+instance ToCStruct QueryPoolPerformanceQueryCreateInfoINTEL
+instance Show QueryPoolPerformanceQueryCreateInfoINTEL
+
+instance FromCStruct QueryPoolPerformanceQueryCreateInfoINTEL
+
+
+data PerformanceParameterTypeINTEL
+
diff --git a/src/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs b/src/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs
@@ -0,0 +1,106 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_INTEL_shader_integer_functions2  ( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(..)
+                                                             , INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION
+                                                             , pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION
+                                                             , INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME
+                                                             , pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME
+                                                             ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL))
+-- | VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL - Structure
+-- describing shader integer functions that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+  { -- | @shaderIntegerFunctions2@ indicates that the implementation supports the
+    -- @ShaderIntegerFunctions2INTEL@ SPIR-V capability.
+    shaderIntegerFunctions2 :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+
+instance ToCStruct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderIntegerFunctions2))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL where
+  peekCStruct p = do
+    shaderIntegerFunctions2 <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+             (bool32ToBool shaderIntegerFunctions2)
+
+instance Storable PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL where
+  zero = PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+           zero
+
+
+type INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION"
+pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION :: forall a . Integral a => a
+pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION = 1
+
+
+type INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME = "VK_INTEL_shader_integer_functions2"
+
+-- No documentation found for TopLevel "VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME"
+pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME = "VK_INTEL_shader_integer_functions2"
+
diff --git a/src/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs-boot b/src/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_INTEL_shader_integer_functions2  (PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+
+instance ToCStruct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+instance Show PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+
+instance FromCStruct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+
diff --git a/src/Vulkan/Extensions/VK_KHR_16bit_storage.hs b/src/Vulkan/Extensions/VK_KHR_16bit_storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_16bit_storage.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_16bit_storage  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR
+                                               , PhysicalDevice16BitStorageFeaturesKHR
+                                               , KHR_16BIT_STORAGE_SPEC_VERSION
+                                               , pattern KHR_16BIT_STORAGE_SPEC_VERSION
+                                               , KHR_16BIT_STORAGE_EXTENSION_NAME
+                                               , pattern KHR_16BIT_STORAGE_EXTENSION_NAME
+                                               ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage (PhysicalDevice16BitStorageFeatures)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES
+
+
+-- No documentation found for TopLevel "VkPhysicalDevice16BitStorageFeaturesKHR"
+type PhysicalDevice16BitStorageFeaturesKHR = PhysicalDevice16BitStorageFeatures
+
+
+type KHR_16BIT_STORAGE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_16BIT_STORAGE_SPEC_VERSION"
+pattern KHR_16BIT_STORAGE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_16BIT_STORAGE_SPEC_VERSION = 1
+
+
+type KHR_16BIT_STORAGE_EXTENSION_NAME = "VK_KHR_16bit_storage"
+
+-- No documentation found for TopLevel "VK_KHR_16BIT_STORAGE_EXTENSION_NAME"
+pattern KHR_16BIT_STORAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_16BIT_STORAGE_EXTENSION_NAME = "VK_KHR_16bit_storage"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_8bit_storage.hs b/src/Vulkan/Extensions/VK_KHR_8bit_storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_8bit_storage.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_8bit_storage  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR
+                                              , PhysicalDevice8BitStorageFeaturesKHR
+                                              , KHR_8BIT_STORAGE_SPEC_VERSION
+                                              , pattern KHR_8BIT_STORAGE_SPEC_VERSION
+                                              , KHR_8BIT_STORAGE_EXTENSION_NAME
+                                              , pattern KHR_8BIT_STORAGE_EXTENSION_NAME
+                                              ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage (PhysicalDevice8BitStorageFeatures)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES
+
+
+-- No documentation found for TopLevel "VkPhysicalDevice8BitStorageFeaturesKHR"
+type PhysicalDevice8BitStorageFeaturesKHR = PhysicalDevice8BitStorageFeatures
+
+
+type KHR_8BIT_STORAGE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_8BIT_STORAGE_SPEC_VERSION"
+pattern KHR_8BIT_STORAGE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_8BIT_STORAGE_SPEC_VERSION = 1
+
+
+type KHR_8BIT_STORAGE_EXTENSION_NAME = "VK_KHR_8bit_storage"
+
+-- No documentation found for TopLevel "VK_KHR_8BIT_STORAGE_EXTENSION_NAME"
+pattern KHR_8BIT_STORAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_8BIT_STORAGE_EXTENSION_NAME = "VK_KHR_8bit_storage"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_android_surface.hs b/src/Vulkan/Extensions/VK_KHR_android_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_android_surface.hs
@@ -0,0 +1,265 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_android_surface  ( createAndroidSurfaceKHR
+                                                 , AndroidSurfaceCreateInfoKHR(..)
+                                                 , AndroidSurfaceCreateFlagsKHR(..)
+                                                 , KHR_ANDROID_SURFACE_SPEC_VERSION
+                                                 , pattern KHR_ANDROID_SURFACE_SPEC_VERSION
+                                                 , KHR_ANDROID_SURFACE_EXTENSION_NAME
+                                                 , pattern KHR_ANDROID_SURFACE_EXTENSION_NAME
+                                                 , SurfaceKHR(..)
+                                                 , ANativeWindow
+                                                 ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Extensions.WSITypes (ANativeWindow)
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateAndroidSurfaceKHR))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (ANativeWindow)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateAndroidSurfaceKHR
+  :: FunPtr (Ptr Instance_T -> Ptr AndroidSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr AndroidSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateAndroidSurfaceKHR - Create a
+-- 'Vulkan.Extensions.Handles.SurfaceKHR' object for an Android native
+-- window
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to a 'AndroidSurfaceCreateInfoKHR'
+--     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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- = Description
+--
+-- During the lifetime of a surface created using a particular
+-- 'Vulkan.Extensions.WSITypes.ANativeWindow' handle any attempts to create
+-- another surface for the same 'Vulkan.Extensions.WSITypes.ANativeWindow'
+-- and any attempts to connect to the same
+-- 'Vulkan.Extensions.WSITypes.ANativeWindow' through other platform
+-- mechanisms will fail.
+--
+-- Note
+--
+-- In particular, only one 'Vulkan.Extensions.Handles.SurfaceKHR' /can/
+-- exist at a time for a given window. Similarly, a native window /cannot/
+-- be used by both a 'Vulkan.Extensions.Handles.SurfaceKHR' and
+-- @EGLSurface@ simultaneously.
+--
+-- If successful, 'createAndroidSurfaceKHR' increments the
+-- 'Vulkan.Extensions.WSITypes.ANativeWindow'’s reference count, and
+-- 'Vulkan.Extensions.VK_KHR_surface.destroySurfaceKHR' 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 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'AndroidSurfaceCreateInfoKHR' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'AndroidSurfaceCreateInfoKHR', 'Vulkan.Core10.Handles.Instance',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+createAndroidSurfaceKHR :: forall io . MonadIO io => Instance -> AndroidSurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createAndroidSurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateAndroidSurfaceKHRPtr = pVkCreateAndroidSurfaceKHR (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateAndroidSurfaceKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateAndroidSurfaceKHR is null" Nothing Nothing
+  let vkCreateAndroidSurfaceKHR' = mkVkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHRPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateAndroidSurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+-- | VkAndroidSurfaceCreateInfoKHR - Structure specifying parameters of a
+-- newly created Android surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'AndroidSurfaceCreateFlagsKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createAndroidSurfaceKHR'
+data AndroidSurfaceCreateInfoKHR = AndroidSurfaceCreateInfoKHR
+  { -- | @flags@ /must/ be @0@
+    flags :: AndroidSurfaceCreateFlagsKHR
+  , -- | @window@ /must/ point to a valid Android
+    -- 'Vulkan.Extensions.WSITypes.ANativeWindow'
+    window :: Ptr ANativeWindow
+  }
+  deriving (Typeable)
+deriving instance Show AndroidSurfaceCreateInfoKHR
+
+instance ToCStruct AndroidSurfaceCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AndroidSurfaceCreateInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AndroidSurfaceCreateFlagsKHR)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ANativeWindow))) (window)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ANativeWindow))) (zero)
+    f
+
+instance FromCStruct AndroidSurfaceCreateInfoKHR where
+  peekCStruct p = do
+    flags <- peek @AndroidSurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr AndroidSurfaceCreateFlagsKHR))
+    window <- peek @(Ptr ANativeWindow) ((p `plusPtr` 24 :: Ptr (Ptr ANativeWindow)))
+    pure $ AndroidSurfaceCreateInfoKHR
+             flags window
+
+instance Storable AndroidSurfaceCreateInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AndroidSurfaceCreateInfoKHR where
+  zero = AndroidSurfaceCreateInfoKHR
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkAndroidSurfaceCreateFlagsKHR"
+newtype AndroidSurfaceCreateFlagsKHR = AndroidSurfaceCreateFlagsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show AndroidSurfaceCreateFlagsKHR where
+  showsPrec p = \case
+    AndroidSurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "AndroidSurfaceCreateFlagsKHR 0x" . showHex x)
+
+instance Read AndroidSurfaceCreateFlagsKHR where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "AndroidSurfaceCreateFlagsKHR")
+                       v <- step readPrec
+                       pure (AndroidSurfaceCreateFlagsKHR v)))
+
+
+type KHR_ANDROID_SURFACE_SPEC_VERSION = 6
+
+-- No documentation found for TopLevel "VK_KHR_ANDROID_SURFACE_SPEC_VERSION"
+pattern KHR_ANDROID_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_ANDROID_SURFACE_SPEC_VERSION = 6
+
+
+type KHR_ANDROID_SURFACE_EXTENSION_NAME = "VK_KHR_android_surface"
+
+-- No documentation found for TopLevel "VK_KHR_ANDROID_SURFACE_EXTENSION_NAME"
+pattern KHR_ANDROID_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_ANDROID_SURFACE_EXTENSION_NAME = "VK_KHR_android_surface"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_android_surface.hs-boot b/src/Vulkan/Extensions/VK_KHR_android_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_android_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_android_surface  (AndroidSurfaceCreateInfoKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data AndroidSurfaceCreateInfoKHR
+
+instance ToCStruct AndroidSurfaceCreateInfoKHR
+instance Show AndroidSurfaceCreateInfoKHR
+
+instance FromCStruct AndroidSurfaceCreateInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_bind_memory2.hs b/src/Vulkan/Extensions/VK_KHR_bind_memory2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_bind_memory2.hs
@@ -0,0 +1,64 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_bind_memory2  ( pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR
+                                              , pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR
+                                              , pattern IMAGE_CREATE_ALIAS_BIT_KHR
+                                              , bindBufferMemory2KHR
+                                              , bindImageMemory2KHR
+                                              , BindBufferMemoryInfoKHR
+                                              , BindImageMemoryInfoKHR
+                                              , KHR_BIND_MEMORY_2_SPEC_VERSION
+                                              , pattern KHR_BIND_MEMORY_2_SPEC_VERSION
+                                              , KHR_BIND_MEMORY_2_EXTENSION_NAME
+                                              , pattern KHR_BIND_MEMORY_2_EXTENSION_NAME
+                                              ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (bindBufferMemory2)
+import Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (bindImageMemory2)
+import Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindBufferMemoryInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2 (BindImageMemoryInfo)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_ALIAS_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR"
+pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR"
+pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO
+
+
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_ALIAS_BIT_KHR"
+pattern IMAGE_CREATE_ALIAS_BIT_KHR = IMAGE_CREATE_ALIAS_BIT
+
+
+-- No documentation found for TopLevel "vkBindBufferMemory2KHR"
+bindBufferMemory2KHR = bindBufferMemory2
+
+
+-- No documentation found for TopLevel "vkBindImageMemory2KHR"
+bindImageMemory2KHR = bindImageMemory2
+
+
+-- No documentation found for TopLevel "VkBindBufferMemoryInfoKHR"
+type BindBufferMemoryInfoKHR = BindBufferMemoryInfo
+
+
+-- No documentation found for TopLevel "VkBindImageMemoryInfoKHR"
+type BindImageMemoryInfoKHR = BindImageMemoryInfo
+
+
+type KHR_BIND_MEMORY_2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_BIND_MEMORY_2_SPEC_VERSION"
+pattern KHR_BIND_MEMORY_2_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_BIND_MEMORY_2_SPEC_VERSION = 1
+
+
+type KHR_BIND_MEMORY_2_EXTENSION_NAME = "VK_KHR_bind_memory2"
+
+-- No documentation found for TopLevel "VK_KHR_BIND_MEMORY_2_EXTENSION_NAME"
+pattern KHR_BIND_MEMORY_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_BIND_MEMORY_2_EXTENSION_NAME = "VK_KHR_bind_memory2"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_buffer_device_address.hs b/src/Vulkan/Extensions/VK_KHR_buffer_device_address.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_buffer_device_address.hs
@@ -0,0 +1,133 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_buffer_device_address  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR
+                                                       , pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR
+                                                       , pattern STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR
+                                                       , pattern STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR
+                                                       , pattern STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR
+                                                       , pattern BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR
+                                                       , pattern BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
+                                                       , pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR
+                                                       , pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
+                                                       , pattern ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR
+                                                       , getBufferOpaqueCaptureAddressKHR
+                                                       , getBufferDeviceAddressKHR
+                                                       , getDeviceMemoryOpaqueCaptureAddressKHR
+                                                       , PhysicalDeviceBufferDeviceAddressFeaturesKHR
+                                                       , BufferDeviceAddressInfoKHR
+                                                       , BufferOpaqueCaptureAddressCreateInfoKHR
+                                                       , MemoryOpaqueCaptureAddressAllocateInfoKHR
+                                                       , DeviceMemoryOpaqueCaptureAddressInfoKHR
+                                                       , KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION
+                                                       , pattern KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION
+                                                       , KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
+                                                       , pattern KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME
+                                                       ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (getBufferDeviceAddress)
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (getBufferOpaqueCaptureAddress)
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (getDeviceMemoryOpaqueCaptureAddress)
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferDeviceAddressInfo)
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (BufferOpaqueCaptureAddressCreateInfo)
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (DeviceMemoryOpaqueCaptureAddressInfo)
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (MemoryOpaqueCaptureAddressAllocateInfo)
+import Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeatures)
+import Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlags)
+import Vulkan.Core10.Enums.BufferCreateFlagBits (BufferCreateFlagBits(BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT))
+import Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
+import Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlagBits(BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT))
+import Vulkan.Core10.Enums.Result (Result(ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS))
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT))
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR"
+pattern STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR = STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR = STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR"
+pattern STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR"
+pattern STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO
+
+
+-- No documentation found for TopLevel "VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR"
+pattern BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
+
+
+-- No documentation found for TopLevel "VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR"
+pattern BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
+
+
+-- No documentation found for TopLevel "VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR"
+pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR = MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT
+
+
+-- No documentation found for TopLevel "VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR"
+pattern MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
+
+
+-- No documentation found for TopLevel "VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR"
+pattern ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
+
+
+-- No documentation found for TopLevel "vkGetBufferOpaqueCaptureAddressKHR"
+getBufferOpaqueCaptureAddressKHR = getBufferOpaqueCaptureAddress
+
+
+-- No documentation found for TopLevel "vkGetBufferDeviceAddressKHR"
+getBufferDeviceAddressKHR = getBufferDeviceAddress
+
+
+-- No documentation found for TopLevel "vkGetDeviceMemoryOpaqueCaptureAddressKHR"
+getDeviceMemoryOpaqueCaptureAddressKHR = getDeviceMemoryOpaqueCaptureAddress
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceBufferDeviceAddressFeaturesKHR"
+type PhysicalDeviceBufferDeviceAddressFeaturesKHR = PhysicalDeviceBufferDeviceAddressFeatures
+
+
+-- No documentation found for TopLevel "VkBufferDeviceAddressInfoKHR"
+type BufferDeviceAddressInfoKHR = BufferDeviceAddressInfo
+
+
+-- No documentation found for TopLevel "VkBufferOpaqueCaptureAddressCreateInfoKHR"
+type BufferOpaqueCaptureAddressCreateInfoKHR = BufferOpaqueCaptureAddressCreateInfo
+
+
+-- No documentation found for TopLevel "VkMemoryOpaqueCaptureAddressAllocateInfoKHR"
+type MemoryOpaqueCaptureAddressAllocateInfoKHR = MemoryOpaqueCaptureAddressAllocateInfo
+
+
+-- No documentation found for TopLevel "VkDeviceMemoryOpaqueCaptureAddressInfoKHR"
+type DeviceMemoryOpaqueCaptureAddressInfoKHR = DeviceMemoryOpaqueCaptureAddressInfo
+
+
+type KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION"
+pattern KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION = 1
+
+
+type KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME = "VK_KHR_buffer_device_address"
+
+-- No documentation found for TopLevel "VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME"
+pattern KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME = "VK_KHR_buffer_device_address"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_create_renderpass2.hs b/src/Vulkan/Extensions/VK_KHR_create_renderpass2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_create_renderpass2.hs
@@ -0,0 +1,129 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_create_renderpass2  ( pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR
+                                                    , pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR
+                                                    , pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR
+                                                    , pattern STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR
+                                                    , pattern STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR
+                                                    , pattern STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR
+                                                    , pattern STRUCTURE_TYPE_SUBPASS_END_INFO_KHR
+                                                    , createRenderPass2KHR
+                                                    , cmdBeginRenderPass2KHR
+                                                    , cmdNextSubpass2KHR
+                                                    , cmdEndRenderPass2KHR
+                                                    , AttachmentDescription2KHR
+                                                    , AttachmentReference2KHR
+                                                    , SubpassDescription2KHR
+                                                    , SubpassDependency2KHR
+                                                    , RenderPassCreateInfo2KHR
+                                                    , SubpassBeginInfoKHR
+                                                    , SubpassEndInfoKHR
+                                                    , KHR_CREATE_RENDERPASS_2_SPEC_VERSION
+                                                    , pattern KHR_CREATE_RENDERPASS_2_SPEC_VERSION
+                                                    , KHR_CREATE_RENDERPASS_2_EXTENSION_NAME
+                                                    , pattern KHR_CREATE_RENDERPASS_2_EXTENSION_NAME
+                                                    ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (cmdBeginRenderPass2)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (cmdEndRenderPass2)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (cmdNextSubpass2)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (createRenderPass2)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentDescription2)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentReference2)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (RenderPassCreateInfo2)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassBeginInfo)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassDependency2)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassDescription2)
+import Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (SubpassEndInfo)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_BEGIN_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_END_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR"
+pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR = STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR"
+pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR = STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR"
+pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR = STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR"
+pattern STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR = STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR"
+pattern STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR = STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR"
+pattern STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR = STRUCTURE_TYPE_SUBPASS_BEGIN_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR"
+pattern STRUCTURE_TYPE_SUBPASS_END_INFO_KHR = STRUCTURE_TYPE_SUBPASS_END_INFO
+
+
+-- No documentation found for TopLevel "vkCreateRenderPass2KHR"
+createRenderPass2KHR = createRenderPass2
+
+
+-- No documentation found for TopLevel "vkCmdBeginRenderPass2KHR"
+cmdBeginRenderPass2KHR = cmdBeginRenderPass2
+
+
+-- No documentation found for TopLevel "vkCmdNextSubpass2KHR"
+cmdNextSubpass2KHR = cmdNextSubpass2
+
+
+-- No documentation found for TopLevel "vkCmdEndRenderPass2KHR"
+cmdEndRenderPass2KHR = cmdEndRenderPass2
+
+
+-- No documentation found for TopLevel "VkAttachmentDescription2KHR"
+type AttachmentDescription2KHR = AttachmentDescription2
+
+
+-- No documentation found for TopLevel "VkAttachmentReference2KHR"
+type AttachmentReference2KHR = AttachmentReference2
+
+
+-- No documentation found for TopLevel "VkSubpassDescription2KHR"
+type SubpassDescription2KHR = SubpassDescription2
+
+
+-- No documentation found for TopLevel "VkSubpassDependency2KHR"
+type SubpassDependency2KHR = SubpassDependency2
+
+
+-- No documentation found for TopLevel "VkRenderPassCreateInfo2KHR"
+type RenderPassCreateInfo2KHR = RenderPassCreateInfo2
+
+
+-- No documentation found for TopLevel "VkSubpassBeginInfoKHR"
+type SubpassBeginInfoKHR = SubpassBeginInfo
+
+
+-- No documentation found for TopLevel "VkSubpassEndInfoKHR"
+type SubpassEndInfoKHR = SubpassEndInfo
+
+
+type KHR_CREATE_RENDERPASS_2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION"
+pattern KHR_CREATE_RENDERPASS_2_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_CREATE_RENDERPASS_2_SPEC_VERSION = 1
+
+
+type KHR_CREATE_RENDERPASS_2_EXTENSION_NAME = "VK_KHR_create_renderpass2"
+
+-- No documentation found for TopLevel "VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME"
+pattern KHR_CREATE_RENDERPASS_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_CREATE_RENDERPASS_2_EXTENSION_NAME = "VK_KHR_create_renderpass2"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_dedicated_allocation.hs b/src/Vulkan/Extensions/VK_KHR_dedicated_allocation.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_dedicated_allocation.hs
@@ -0,0 +1,45 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_dedicated_allocation  ( pattern STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR
+                                                      , pattern STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR
+                                                      , MemoryDedicatedRequirementsKHR
+                                                      , MemoryDedicatedAllocateInfoKHR
+                                                      , KHR_DEDICATED_ALLOCATION_SPEC_VERSION
+                                                      , pattern KHR_DEDICATED_ALLOCATION_SPEC_VERSION
+                                                      , KHR_DEDICATED_ALLOCATION_EXTENSION_NAME
+                                                      , pattern KHR_DEDICATED_ALLOCATION_EXTENSION_NAME
+                                                      ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedAllocateInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation (MemoryDedicatedRequirements)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR"
+pattern STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR"
+pattern STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO
+
+
+-- No documentation found for TopLevel "VkMemoryDedicatedRequirementsKHR"
+type MemoryDedicatedRequirementsKHR = MemoryDedicatedRequirements
+
+
+-- No documentation found for TopLevel "VkMemoryDedicatedAllocateInfoKHR"
+type MemoryDedicatedAllocateInfoKHR = MemoryDedicatedAllocateInfo
+
+
+type KHR_DEDICATED_ALLOCATION_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION"
+pattern KHR_DEDICATED_ALLOCATION_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_DEDICATED_ALLOCATION_SPEC_VERSION = 3
+
+
+type KHR_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_KHR_dedicated_allocation"
+
+-- No documentation found for TopLevel "VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME"
+pattern KHR_DEDICATED_ALLOCATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_KHR_dedicated_allocation"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs b/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs
@@ -0,0 +1,538 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_deferred_host_operations  ( createDeferredOperationKHR
+                                                          , withDeferredOperationKHR
+                                                          , destroyDeferredOperationKHR
+                                                          , getDeferredOperationMaxConcurrencyKHR
+                                                          , getDeferredOperationResultKHR
+                                                          , deferredOperationJoinKHR
+                                                          , DeferredOperationInfoKHR(..)
+                                                          , KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION
+                                                          , pattern KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION
+                                                          , KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME
+                                                          , pattern KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME
+                                                          , DeferredOperationKHR(..)
+                                                          ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Extensions.Handles (DeferredOperationKHR)
+import Vulkan.Extensions.Handles (DeferredOperationKHR(..))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateDeferredOperationKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkDeferredOperationJoinKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyDeferredOperationKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeferredOperationMaxConcurrencyKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeferredOperationResultKHR))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (DeferredOperationKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateDeferredOperationKHR
+  :: FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> Ptr DeferredOperationKHR -> IO Result) -> Ptr Device_T -> Ptr AllocationCallbacks -> Ptr DeferredOperationKHR -> IO Result
+
+-- | vkCreateDeferredOperationKHR - Create a deferred operation handle
+--
+-- = Parameters
+--
+-- -   @device@ is the device which owns @operation@.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pDeferredOperation@ is a pointer to a handle in which the created
+--     'Vulkan.Extensions.Handles.DeferredOperationKHR' is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pDeferredOperation@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.DeferredOperationKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
+-- 'Vulkan.Core10.Handles.Device'
+createDeferredOperationKHR :: forall io . MonadIO io => Device -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DeferredOperationKHR)
+createDeferredOperationKHR device allocator = liftIO . evalContT $ do
+  let vkCreateDeferredOperationKHRPtr = pVkCreateDeferredOperationKHR (deviceCmds (device :: Device))
+  lift $ unless (vkCreateDeferredOperationKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateDeferredOperationKHR is null" Nothing Nothing
+  let vkCreateDeferredOperationKHR' = mkVkCreateDeferredOperationKHR vkCreateDeferredOperationKHRPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPDeferredOperation <- ContT $ bracket (callocBytes @DeferredOperationKHR 8) free
+  r <- lift $ vkCreateDeferredOperationKHR' (deviceHandle (device)) pAllocator (pPDeferredOperation)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pDeferredOperation <- lift $ peek @DeferredOperationKHR pPDeferredOperation
+  pure $ (pDeferredOperation)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createDeferredOperationKHR' and 'destroyDeferredOperationKHR'
+--
+-- To ensure that 'destroyDeferredOperationKHR' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withDeferredOperationKHR :: forall io r . MonadIO io => Device -> Maybe AllocationCallbacks -> (io (DeferredOperationKHR) -> ((DeferredOperationKHR) -> io ()) -> r) -> r
+withDeferredOperationKHR device pAllocator b =
+  b (createDeferredOperationKHR device pAllocator)
+    (\(o0) -> destroyDeferredOperationKHR device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyDeferredOperationKHR
+  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> DeferredOperationKHR -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyDeferredOperationKHR - Destroy a deferred operation handle
+--
+-- = Parameters
+--
+-- -   @device@ is the device which owns @operation@.
+--
+-- -   @operation@ is the completed operation to be destroyed.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @operation@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @operation@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- -   @operation@ /must/ be completed
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @operation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @operation@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.DeferredOperationKHR' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @operation@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @operation@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
+-- 'Vulkan.Core10.Handles.Device'
+destroyDeferredOperationKHR :: forall io . MonadIO io => Device -> DeferredOperationKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyDeferredOperationKHR device operation allocator = liftIO . evalContT $ do
+  let vkDestroyDeferredOperationKHRPtr = pVkDestroyDeferredOperationKHR (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyDeferredOperationKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyDeferredOperationKHR is null" Nothing Nothing
+  let vkDestroyDeferredOperationKHR' = mkVkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHRPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyDeferredOperationKHR' (deviceHandle (device)) (operation) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeferredOperationMaxConcurrencyKHR
+  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Word32) -> Ptr Device_T -> DeferredOperationKHR -> IO Word32
+
+-- | vkGetDeferredOperationMaxConcurrencyKHR - Query the maximum concurrency
+-- on a deferred operation
+--
+-- = Parameters
+--
+-- -   @device@ is the device which owns @operation@.
+--
+-- -   @operation@ is the deferred operation to be queried.
+--
+-- = Description
+--
+-- The returned value is the maximum number of threads that can usefully
+-- execute a deferred operation concurrently, reported for the state of the
+-- deferred operation at the point this command is called. This value is
+-- intended to be used to better schedule work onto available threads.
+-- Applications /can/ join any number of threads to the deferred operation
+-- and expect it to eventually complete, though excessive joins /may/
+-- return 'Vulkan.Core10.Enums.Result.THREAD_IDLE_KHR' immediately,
+-- performing no useful work.
+--
+-- If the deferred operation is currently joined to any threads, the value
+-- returned by this command /may/ immediately be out of date.
+--
+-- Implementations /must/ not return zero.
+--
+-- Implementations /may/ return 232-1 to indicate that the maximum
+-- concurrency is unknown and cannot be easily derived. Implementations
+-- /may/ return values larger than the maximum concurrency available on the
+-- host CPU. In these situations, an application /should/ clamp the return
+-- value rather than oversubscribing the machine.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
+-- 'Vulkan.Core10.Handles.Device'
+getDeferredOperationMaxConcurrencyKHR :: forall io . MonadIO io => Device -> DeferredOperationKHR -> io (Word32)
+getDeferredOperationMaxConcurrencyKHR device operation = liftIO $ do
+  let vkGetDeferredOperationMaxConcurrencyKHRPtr = pVkGetDeferredOperationMaxConcurrencyKHR (deviceCmds (device :: Device))
+  unless (vkGetDeferredOperationMaxConcurrencyKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeferredOperationMaxConcurrencyKHR is null" Nothing Nothing
+  let vkGetDeferredOperationMaxConcurrencyKHR' = mkVkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHRPtr
+  r <- vkGetDeferredOperationMaxConcurrencyKHR' (deviceHandle (device)) (operation)
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeferredOperationResultKHR
+  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> IO Result
+
+-- | vkGetDeferredOperationResultKHR - Query the result of a deferred
+-- operation
+--
+-- = Parameters
+--
+-- -   @device@ is the device which owns @operation@.
+--
+-- -   @operation@ is the operation whose deferred result is being queried.
+--
+-- = Description
+--
+-- If the deferred operation is pending, 'getDeferredOperationResultKHR'
+-- returns 'Vulkan.Core10.Enums.Result.NOT_READY'. Otherwise, it returns
+-- the result of the deferred operation. This value /must/ be one of the
+-- 'Vulkan.Core10.Enums.Result.Result' values which could have been
+-- returned by the original command if the operation had not been deferred.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.NOT_READY'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
+-- 'Vulkan.Core10.Handles.Device'
+getDeferredOperationResultKHR :: forall io . MonadIO io => Device -> DeferredOperationKHR -> io (Result)
+getDeferredOperationResultKHR device operation = liftIO $ do
+  let vkGetDeferredOperationResultKHRPtr = pVkGetDeferredOperationResultKHR (deviceCmds (device :: Device))
+  unless (vkGetDeferredOperationResultKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeferredOperationResultKHR is null" Nothing Nothing
+  let vkGetDeferredOperationResultKHR' = mkVkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHRPtr
+  r <- vkGetDeferredOperationResultKHR' (deviceHandle (device)) (operation)
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDeferredOperationJoinKHR
+  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> IO Result
+
+-- | vkDeferredOperationJoinKHR - Assign a thread to a deferred operation
+--
+-- = Parameters
+--
+-- -   @device@ is the device which owns @operation@.
+--
+-- -   @operation@ is the deferred operation that the calling thread should
+--     work on.
+--
+-- = Description
+--
+-- The 'deferredOperationJoinKHR' command will execute a portion of the
+-- deferred operation on the calling thread.
+--
+-- The return value will be one of the following:
+--
+-- -   A return value of 'Vulkan.Core10.Enums.Result.SUCCESS' indicates
+--     that @operation@ is complete. The application /should/ use
+--     'getDeferredOperationResultKHR' to retrieve the result of
+--     @operation@.
+--
+-- -   A return value of 'Vulkan.Core10.Enums.Result.THREAD_DONE_KHR'
+--     indicates that the deferred operation is not complete, but there is
+--     no work remaining to assign to threads. Future calls to
+--     'deferredOperationJoinKHR' are not necessary and will simply harm
+--     performance. This situation /may/ occur when other threads executing
+--     'deferredOperationJoinKHR' are about to complete @operation@, and
+--     the implementation is unable to partition the workload any further.
+--
+-- -   A return value of 'Vulkan.Core10.Enums.Result.THREAD_IDLE_KHR'
+--     indicates that the deferred operation is not complete, and there is
+--     no work for the thread to do at the time of the call. This situation
+--     /may/ occur if the operation encounters a temporary reduction in
+--     parallelism. By returning
+--     'Vulkan.Core10.Enums.Result.THREAD_IDLE_KHR', the implementation is
+--     signaling that it expects that more opportunities for parallelism
+--     will emerge as execution progresses, and that future calls to
+--     'deferredOperationJoinKHR' /can/ be beneficial. In the meantime, the
+--     application /can/ perform other work on the calling thread.
+--
+-- Implementations /must/ guarantee forward progress by enforcing the
+-- following invariants:
+--
+-- 1.  If only one thread has invoked 'deferredOperationJoinKHR' on a given
+--     operation, that thread /must/ execute the operation to completion
+--     and return 'Vulkan.Core10.Enums.Result.SUCCESS'.
+--
+-- 2.  If multiple threads have concurrently invoked
+--     'deferredOperationJoinKHR' on the same operation, then at least one
+--     of them /must/ complete the operation and return
+--     'Vulkan.Core10.Enums.Result.SUCCESS'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @operation@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.DeferredOperationKHR' handle
+--
+-- -   @operation@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.THREAD_DONE_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.THREAD_IDLE_KHR'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
+-- 'Vulkan.Core10.Handles.Device'
+deferredOperationJoinKHR :: forall io . MonadIO io => Device -> DeferredOperationKHR -> io (Result)
+deferredOperationJoinKHR device operation = liftIO $ do
+  let vkDeferredOperationJoinKHRPtr = pVkDeferredOperationJoinKHR (deviceCmds (device :: Device))
+  unless (vkDeferredOperationJoinKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDeferredOperationJoinKHR is null" Nothing Nothing
+  let vkDeferredOperationJoinKHR' = mkVkDeferredOperationJoinKHR vkDeferredOperationJoinKHRPtr
+  r <- vkDeferredOperationJoinKHR' (deviceHandle (device)) (operation)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+-- | VkDeferredOperationInfoKHR - Deferred operation request
+--
+-- = Description
+--
+-- The application /can/ request deferral of an operation by adding this
+-- structure to the argument list of a command or by providing this in the
+-- @pNext@ chain of a relevant structure for an operation when the
+-- corresponding command is invoked. If this structure is not present, no
+-- deferral is requested. If @operationHandle@ is
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', no deferral is requested and
+-- the command proceeds as if no 'DeferredOperationInfoKHR' structure was
+-- provided.
+--
+-- When an application requests an operation deferral, the implementation
+-- /may/ defer the operation. When deferral is requested and the
+-- implementation defers any operation, the implementation /must/ return
+-- 'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR' as the success code
+-- if no errors occurred. When deferral is requested, the implementation
+-- /should/ defer the operation when the workload is significant, however
+-- if the implementation chooses not to defer any of the requested
+-- operations and instead executes all of them immediately, the
+-- implementation /must/ return
+-- 'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR' as the success
+-- code if no errors occurred.
+--
+-- A deferred operation is created /complete/ with an initial result value
+-- of 'Vulkan.Core10.Enums.Result.SUCCESS'. The deferred operation becomes
+-- /pending/ when an operation has been successfully deferred with that
+-- @operationHandle@.
+--
+-- A deferred operation is considered pending until the deferred operation
+-- completes. A pending deferred operation becomes /complete/ when it has
+-- been fully executed by one or more threads. Pending deferred operations
+-- will never complete until they are /joined/ by an application thread,
+-- using 'deferredOperationJoinKHR'. Applications /can/ join multiple
+-- threads to the same deferred operation, enabling concurrent execution of
+-- subtasks within that operation.
+--
+-- The application /can/ query the status of a
+-- 'Vulkan.Extensions.Handles.DeferredOperationKHR' using the
+-- 'getDeferredOperationMaxConcurrencyKHR' or
+-- 'getDeferredOperationResultKHR' commands.
+--
+-- From the perspective of other commands - parameters to the original
+-- command that are externally synchronized /must/ not be accessed before
+-- the deferred operation completes, and the result of the deferred
+-- operation (e.g. object creation) are not considered complete until the
+-- deferred operation completes.
+--
+-- If the deferred operation is one which creates an object (for example, a
+-- pipeline object), the implementation /must/ allocate that object as it
+-- normally would, and return a valid handle to the application. This
+-- object is a /pending/ object, and /must/ not be used by the application
+-- until the deferred operation is completed (unless otherwise specified by
+-- the deferral extension). When the deferred operation is complete, the
+-- application /should/ call 'getDeferredOperationResultKHR' to obtain the
+-- result of the operation. If 'getDeferredOperationResultKHR' indicates
+-- failure, the application /must/ destroy the pending object using an
+-- appropriate command, so that the implementation has an opportunity to
+-- recover the handle. The application /must/ not perform this destruction
+-- until the deferred operation is complete. Construction of the pending
+-- object uses the same allocator which would have been used if the
+-- operation had not been deferred.
+--
+-- == Valid Usage
+--
+-- -   Any previous deferred operation that was associated with
+--     @operationHandle@ /must/ be complete
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeferredOperationInfoKHR = DeferredOperationInfoKHR
+  { -- | @operationHandle@ is a handle to a tracking object to associate with the
+    -- deferred operation.
+    operationHandle :: DeferredOperationKHR }
+  deriving (Typeable)
+deriving instance Show DeferredOperationInfoKHR
+
+instance ToCStruct DeferredOperationInfoKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeferredOperationInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeferredOperationKHR)) (operationHandle)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeferredOperationKHR)) (zero)
+    f
+
+instance FromCStruct DeferredOperationInfoKHR where
+  peekCStruct p = do
+    operationHandle <- peek @DeferredOperationKHR ((p `plusPtr` 16 :: Ptr DeferredOperationKHR))
+    pure $ DeferredOperationInfoKHR
+             operationHandle
+
+instance Storable DeferredOperationInfoKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeferredOperationInfoKHR where
+  zero = DeferredOperationInfoKHR
+           zero
+
+
+type KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION"
+pattern KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION = 2
+
+
+type KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME = "VK_KHR_deferred_host_operations"
+
+-- No documentation found for TopLevel "VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME"
+pattern KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME = "VK_KHR_deferred_host_operations"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs-boot b/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_deferred_host_operations  (DeferredOperationInfoKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DeferredOperationInfoKHR
+
+instance ToCStruct DeferredOperationInfoKHR
+instance Show DeferredOperationInfoKHR
+
+instance FromCStruct DeferredOperationInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_depth_stencil_resolve.hs b/src/Vulkan/Extensions/VK_KHR_depth_stencil_resolve.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_depth_stencil_resolve.hs
@@ -0,0 +1,92 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_depth_stencil_resolve  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR
+                                                       , pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR
+                                                       , pattern RESOLVE_MODE_NONE_KHR
+                                                       , pattern RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR
+                                                       , pattern RESOLVE_MODE_AVERAGE_BIT_KHR
+                                                       , pattern RESOLVE_MODE_MIN_BIT_KHR
+                                                       , pattern RESOLVE_MODE_MAX_BIT_KHR
+                                                       , ResolveModeFlagsKHR
+                                                       , ResolveModeFlagBitsKHR
+                                                       , PhysicalDeviceDepthStencilResolvePropertiesKHR
+                                                       , SubpassDescriptionDepthStencilResolveKHR
+                                                       , KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION
+                                                       , pattern KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION
+                                                       , KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME
+                                                       , pattern KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME
+                                                       ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (PhysicalDeviceDepthStencilResolveProperties)
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits)
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
+import Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve (SubpassDescriptionDepthStencilResolve)
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(RESOLVE_MODE_AVERAGE_BIT))
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(RESOLVE_MODE_MAX_BIT))
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(RESOLVE_MODE_MIN_BIT))
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(RESOLVE_MODE_NONE))
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlags)
+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits(RESOLVE_MODE_SAMPLE_ZERO_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR"
+pattern STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR = STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE
+
+
+-- No documentation found for TopLevel "VK_RESOLVE_MODE_NONE_KHR"
+pattern RESOLVE_MODE_NONE_KHR = RESOLVE_MODE_NONE
+
+
+-- No documentation found for TopLevel "VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR"
+pattern RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR = RESOLVE_MODE_SAMPLE_ZERO_BIT
+
+
+-- No documentation found for TopLevel "VK_RESOLVE_MODE_AVERAGE_BIT_KHR"
+pattern RESOLVE_MODE_AVERAGE_BIT_KHR = RESOLVE_MODE_AVERAGE_BIT
+
+
+-- No documentation found for TopLevel "VK_RESOLVE_MODE_MIN_BIT_KHR"
+pattern RESOLVE_MODE_MIN_BIT_KHR = RESOLVE_MODE_MIN_BIT
+
+
+-- No documentation found for TopLevel "VK_RESOLVE_MODE_MAX_BIT_KHR"
+pattern RESOLVE_MODE_MAX_BIT_KHR = RESOLVE_MODE_MAX_BIT
+
+
+-- No documentation found for TopLevel "VkResolveModeFlagsKHR"
+type ResolveModeFlagsKHR = ResolveModeFlags
+
+
+-- No documentation found for TopLevel "VkResolveModeFlagBitsKHR"
+type ResolveModeFlagBitsKHR = ResolveModeFlagBits
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceDepthStencilResolvePropertiesKHR"
+type PhysicalDeviceDepthStencilResolvePropertiesKHR = PhysicalDeviceDepthStencilResolveProperties
+
+
+-- No documentation found for TopLevel "VkSubpassDescriptionDepthStencilResolveKHR"
+type SubpassDescriptionDepthStencilResolveKHR = SubpassDescriptionDepthStencilResolve
+
+
+type KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION"
+pattern KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION = 1
+
+
+type KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME = "VK_KHR_depth_stencil_resolve"
+
+-- No documentation found for TopLevel "VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME"
+pattern KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME = "VK_KHR_depth_stencil_resolve"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_descriptor_update_template.hs b/src/Vulkan/Extensions/VK_KHR_descriptor_update_template.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_descriptor_update_template.hs
@@ -0,0 +1,97 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_descriptor_update_template  ( pattern STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR
+                                                            , pattern OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR
+                                                            , pattern DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR
+                                                            , pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT
+                                                            , createDescriptorUpdateTemplateKHR
+                                                            , destroyDescriptorUpdateTemplateKHR
+                                                            , updateDescriptorSetWithTemplateKHR
+                                                            , DescriptorUpdateTemplateCreateFlagsKHR
+                                                            , DescriptorUpdateTemplateKHR
+                                                            , DescriptorUpdateTemplateTypeKHR
+                                                            , DescriptorUpdateTemplateEntryKHR
+                                                            , DescriptorUpdateTemplateCreateInfoKHR
+                                                            , KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION
+                                                            , pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION
+                                                            , KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME
+                                                            , pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME
+                                                            , cmdPushDescriptorSetWithTemplateKHR
+                                                            , DebugReportObjectTypeEXT(..)
+                                                            ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (createDescriptorUpdateTemplate)
+import Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (destroyDescriptorUpdateTemplate)
+import Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (updateDescriptorSetWithTemplate)
+import Vulkan.Core11.Handles (DescriptorUpdateTemplate)
+import Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags (DescriptorUpdateTemplateCreateFlags)
+import Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateCreateInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template (DescriptorUpdateTemplateEntry)
+import Vulkan.Core11.Enums.DescriptorUpdateTemplateType (DescriptorUpdateTemplateType)
+import Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT))
+import Vulkan.Core11.Enums.DescriptorUpdateTemplateType (DescriptorUpdateTemplateType(DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO))
+import Vulkan.Extensions.VK_KHR_push_descriptor (cmdPushDescriptorSetWithTemplateKHR)
+import Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR"
+pattern OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE
+
+
+-- No documentation found for TopLevel "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR"
+pattern DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET
+
+
+-- No documentation found for TopLevel "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT
+
+
+-- No documentation found for TopLevel "vkCreateDescriptorUpdateTemplateKHR"
+createDescriptorUpdateTemplateKHR = createDescriptorUpdateTemplate
+
+
+-- No documentation found for TopLevel "vkDestroyDescriptorUpdateTemplateKHR"
+destroyDescriptorUpdateTemplateKHR = destroyDescriptorUpdateTemplate
+
+
+-- No documentation found for TopLevel "vkUpdateDescriptorSetWithTemplateKHR"
+updateDescriptorSetWithTemplateKHR = updateDescriptorSetWithTemplate
+
+
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateCreateFlagsKHR"
+type DescriptorUpdateTemplateCreateFlagsKHR = DescriptorUpdateTemplateCreateFlags
+
+
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateKHR"
+type DescriptorUpdateTemplateKHR = DescriptorUpdateTemplate
+
+
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateTypeKHR"
+type DescriptorUpdateTemplateTypeKHR = DescriptorUpdateTemplateType
+
+
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateEntryKHR"
+type DescriptorUpdateTemplateEntryKHR = DescriptorUpdateTemplateEntry
+
+
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateCreateInfoKHR"
+type DescriptorUpdateTemplateCreateInfoKHR = DescriptorUpdateTemplateCreateInfo
+
+
+type KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION"
+pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION = 1
+
+
+type KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME = "VK_KHR_descriptor_update_template"
+
+-- No documentation found for TopLevel "VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME"
+pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME = "VK_KHR_descriptor_update_template"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_device_group.hs b/src/Vulkan/Extensions/VK_KHR_device_group.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_device_group.hs
@@ -0,0 +1,241 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_device_group  ( pattern STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR
+                                              , pattern STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR
+                                              , pattern STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR
+                                              , pattern STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR
+                                              , pattern STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR
+                                              , pattern PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR
+                                              , pattern PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR
+                                              , pattern PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR
+                                              , pattern PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR
+                                              , pattern MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR
+                                              , pattern PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR
+                                              , pattern PIPELINE_CREATE_DISPATCH_BASE_KHR
+                                              , pattern DEPENDENCY_DEVICE_GROUP_BIT_KHR
+                                              , pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR
+                                              , pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR
+                                              , pattern IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
+                                              , getDeviceGroupPeerMemoryFeaturesKHR
+                                              , cmdSetDeviceMaskKHR
+                                              , cmdDispatchBaseKHR
+                                              , PeerMemoryFeatureFlagsKHR
+                                              , MemoryAllocateFlagsKHR
+                                              , PeerMemoryFeatureFlagBitsKHR
+                                              , MemoryAllocateFlagBitsKHR
+                                              , MemoryAllocateFlagsInfoKHR
+                                              , BindBufferMemoryDeviceGroupInfoKHR
+                                              , BindImageMemoryDeviceGroupInfoKHR
+                                              , DeviceGroupRenderPassBeginInfoKHR
+                                              , DeviceGroupCommandBufferBeginInfoKHR
+                                              , DeviceGroupSubmitInfoKHR
+                                              , DeviceGroupBindSparseInfoKHR
+                                              , KHR_DEVICE_GROUP_SPEC_VERSION
+                                              , pattern KHR_DEVICE_GROUP_SPEC_VERSION
+                                              , KHR_DEVICE_GROUP_EXTENSION_NAME
+                                              , pattern KHR_DEVICE_GROUP_EXTENSION_NAME
+                                              , SurfaceKHR(..)
+                                              , SwapchainKHR(..)
+                                              , DeviceGroupPresentCapabilitiesKHR(..)
+                                              , ImageSwapchainCreateInfoKHR(..)
+                                              , BindImageMemorySwapchainInfoKHR(..)
+                                              , AcquireNextImageInfoKHR(..)
+                                              , DeviceGroupPresentInfoKHR(..)
+                                              , DeviceGroupSwapchainCreateInfoKHR(..)
+                                              , getDeviceGroupPresentCapabilitiesKHR
+                                              , getDeviceGroupSurfacePresentModesKHR
+                                              , acquireNextImage2KHR
+                                              , getPhysicalDevicePresentRectanglesKHR
+                                              , DeviceGroupPresentModeFlagBitsKHR(..)
+                                              , DeviceGroupPresentModeFlagsKHR
+                                              , SwapchainCreateFlagBitsKHR(..)
+                                              , SwapchainCreateFlagsKHR
+                                              ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group (cmdDispatchBase)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group (cmdSetDeviceMask)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group (getDeviceGroupPeerMemoryFeatures)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindBufferMemoryDeviceGroupInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindImageMemoryDeviceGroupInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupBindSparseInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupCommandBufferBeginInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupRenderPassBeginInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupSubmitInfo)
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits)
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group (MemoryAllocateFlagsInfo)
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits)
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(DEPENDENCY_DEVICE_GROUP_BIT))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT))
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlags)
+import Vulkan.Core11.Enums.MemoryAllocateFlagBits (MemoryAllocateFlagBits(MEMORY_ALLOCATE_DEVICE_MASK_BIT))
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(PEER_MEMORY_FEATURE_COPY_DST_BIT))
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(PEER_MEMORY_FEATURE_COPY_SRC_BIT))
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(PEER_MEMORY_FEATURE_GENERIC_DST_BIT))
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlags)
+import Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits (PeerMemoryFeatureFlagBits(PEER_MEMORY_FEATURE_GENERIC_SRC_BIT))
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group (pattern PIPELINE_CREATE_DISPATCH_BASE)
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO))
+import Vulkan.Extensions.VK_KHR_swapchain (acquireNextImage2KHR)
+import Vulkan.Extensions.VK_KHR_swapchain (getDeviceGroupPresentCapabilitiesKHR)
+import Vulkan.Extensions.VK_KHR_swapchain (getDeviceGroupSurfacePresentModesKHR)
+import Vulkan.Extensions.VK_KHR_swapchain (getPhysicalDevicePresentRectanglesKHR)
+import Vulkan.Extensions.VK_KHR_swapchain (AcquireNextImageInfoKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (BindImageMemorySwapchainInfoKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentCapabilitiesKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentInfoKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupPresentModeFlagsKHR)
+import Vulkan.Extensions.VK_KHR_swapchain (DeviceGroupSwapchainCreateInfoKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (ImageSwapchainCreateInfoKHR(..))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagsKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR"
+pattern STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO
+
+
+-- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR"
+pattern PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR = PEER_MEMORY_FEATURE_COPY_SRC_BIT
+
+
+-- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR"
+pattern PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR = PEER_MEMORY_FEATURE_COPY_DST_BIT
+
+
+-- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR"
+pattern PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR = PEER_MEMORY_FEATURE_GENERIC_SRC_BIT
+
+
+-- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR"
+pattern PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR = PEER_MEMORY_FEATURE_GENERIC_DST_BIT
+
+
+-- No documentation found for TopLevel "VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR"
+pattern MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = MEMORY_ALLOCATE_DEVICE_MASK_BIT
+
+
+-- No documentation found for TopLevel "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR"
+pattern PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT
+
+
+-- No documentation found for TopLevel "VK_PIPELINE_CREATE_DISPATCH_BASE_KHR"
+pattern PIPELINE_CREATE_DISPATCH_BASE_KHR = PIPELINE_CREATE_DISPATCH_BASE
+
+
+-- No documentation found for TopLevel "VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR"
+pattern DEPENDENCY_DEVICE_GROUP_BIT_KHR = DEPENDENCY_DEVICE_GROUP_BIT
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR"
+pattern STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR"
+pattern STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO
+
+
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"
+pattern IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT
+
+
+-- No documentation found for TopLevel "vkGetDeviceGroupPeerMemoryFeaturesKHR"
+getDeviceGroupPeerMemoryFeaturesKHR = getDeviceGroupPeerMemoryFeatures
+
+
+-- No documentation found for TopLevel "vkCmdSetDeviceMaskKHR"
+cmdSetDeviceMaskKHR = cmdSetDeviceMask
+
+
+-- No documentation found for TopLevel "vkCmdDispatchBaseKHR"
+cmdDispatchBaseKHR = cmdDispatchBase
+
+
+-- No documentation found for TopLevel "VkPeerMemoryFeatureFlagsKHR"
+type PeerMemoryFeatureFlagsKHR = PeerMemoryFeatureFlags
+
+
+-- No documentation found for TopLevel "VkMemoryAllocateFlagsKHR"
+type MemoryAllocateFlagsKHR = MemoryAllocateFlags
+
+
+-- No documentation found for TopLevel "VkPeerMemoryFeatureFlagBitsKHR"
+type PeerMemoryFeatureFlagBitsKHR = PeerMemoryFeatureFlagBits
+
+
+-- No documentation found for TopLevel "VkMemoryAllocateFlagBitsKHR"
+type MemoryAllocateFlagBitsKHR = MemoryAllocateFlagBits
+
+
+-- No documentation found for TopLevel "VkMemoryAllocateFlagsInfoKHR"
+type MemoryAllocateFlagsInfoKHR = MemoryAllocateFlagsInfo
+
+
+-- No documentation found for TopLevel "VkBindBufferMemoryDeviceGroupInfoKHR"
+type BindBufferMemoryDeviceGroupInfoKHR = BindBufferMemoryDeviceGroupInfo
+
+
+-- No documentation found for TopLevel "VkBindImageMemoryDeviceGroupInfoKHR"
+type BindImageMemoryDeviceGroupInfoKHR = BindImageMemoryDeviceGroupInfo
+
+
+-- No documentation found for TopLevel "VkDeviceGroupRenderPassBeginInfoKHR"
+type DeviceGroupRenderPassBeginInfoKHR = DeviceGroupRenderPassBeginInfo
+
+
+-- No documentation found for TopLevel "VkDeviceGroupCommandBufferBeginInfoKHR"
+type DeviceGroupCommandBufferBeginInfoKHR = DeviceGroupCommandBufferBeginInfo
+
+
+-- No documentation found for TopLevel "VkDeviceGroupSubmitInfoKHR"
+type DeviceGroupSubmitInfoKHR = DeviceGroupSubmitInfo
+
+
+-- No documentation found for TopLevel "VkDeviceGroupBindSparseInfoKHR"
+type DeviceGroupBindSparseInfoKHR = DeviceGroupBindSparseInfo
+
+
+type KHR_DEVICE_GROUP_SPEC_VERSION = 4
+
+-- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_SPEC_VERSION"
+pattern KHR_DEVICE_GROUP_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_DEVICE_GROUP_SPEC_VERSION = 4
+
+
+type KHR_DEVICE_GROUP_EXTENSION_NAME = "VK_KHR_device_group"
+
+-- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_EXTENSION_NAME"
+pattern KHR_DEVICE_GROUP_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_DEVICE_GROUP_EXTENSION_NAME = "VK_KHR_device_group"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_device_group_creation.hs b/src/Vulkan/Extensions/VK_KHR_device_group_creation.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_device_group_creation.hs
@@ -0,0 +1,64 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_device_group_creation  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR
+                                                       , pattern STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR
+                                                       , pattern MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR
+                                                       , enumeratePhysicalDeviceGroupsKHR
+                                                       , pattern MAX_DEVICE_GROUP_SIZE_KHR
+                                                       , PhysicalDeviceGroupPropertiesKHR
+                                                       , DeviceGroupDeviceCreateInfoKHR
+                                                       , KHR_DEVICE_GROUP_CREATION_SPEC_VERSION
+                                                       , pattern KHR_DEVICE_GROUP_CREATION_SPEC_VERSION
+                                                       , KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME
+                                                       , pattern KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME
+                                                       ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (enumeratePhysicalDeviceGroups)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (DeviceGroupDeviceCreateInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (PhysicalDeviceGroupProperties)
+import Vulkan.Core10.APIConstants (pattern MAX_DEVICE_GROUP_SIZE)
+import Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlags)
+import Vulkan.Core10.Enums.MemoryHeapFlagBits (MemoryHeapFlagBits(MEMORY_HEAP_MULTI_INSTANCE_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR"
+pattern MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = MEMORY_HEAP_MULTI_INSTANCE_BIT
+
+
+-- No documentation found for TopLevel "vkEnumeratePhysicalDeviceGroupsKHR"
+enumeratePhysicalDeviceGroupsKHR = enumeratePhysicalDeviceGroups
+
+
+-- No documentation found for TopLevel "VK_MAX_DEVICE_GROUP_SIZE_KHR"
+pattern MAX_DEVICE_GROUP_SIZE_KHR = MAX_DEVICE_GROUP_SIZE
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceGroupPropertiesKHR"
+type PhysicalDeviceGroupPropertiesKHR = PhysicalDeviceGroupProperties
+
+
+-- No documentation found for TopLevel "VkDeviceGroupDeviceCreateInfoKHR"
+type DeviceGroupDeviceCreateInfoKHR = DeviceGroupDeviceCreateInfo
+
+
+type KHR_DEVICE_GROUP_CREATION_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION"
+pattern KHR_DEVICE_GROUP_CREATION_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_DEVICE_GROUP_CREATION_SPEC_VERSION = 1
+
+
+type KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME = "VK_KHR_device_group_creation"
+
+-- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME"
+pattern KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME = "VK_KHR_device_group_creation"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_display.hs b/src/Vulkan/Extensions/VK_KHR_display.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_display.hs
@@ -0,0 +1,1413 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_display  ( getPhysicalDeviceDisplayPropertiesKHR
+                                         , getPhysicalDeviceDisplayPlanePropertiesKHR
+                                         , getDisplayPlaneSupportedDisplaysKHR
+                                         , getDisplayModePropertiesKHR
+                                         , createDisplayModeKHR
+                                         , getDisplayPlaneCapabilitiesKHR
+                                         , createDisplayPlaneSurfaceKHR
+                                         , DisplayPropertiesKHR(..)
+                                         , DisplayPlanePropertiesKHR(..)
+                                         , DisplayModeParametersKHR(..)
+                                         , DisplayModePropertiesKHR(..)
+                                         , DisplayModeCreateInfoKHR(..)
+                                         , DisplayPlaneCapabilitiesKHR(..)
+                                         , DisplaySurfaceCreateInfoKHR(..)
+                                         , DisplayModeCreateFlagsKHR(..)
+                                         , DisplaySurfaceCreateFlagsKHR(..)
+                                         , DisplayPlaneAlphaFlagBitsKHR( DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR
+                                                                       , DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR
+                                                                       , DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR
+                                                                       , DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR
+                                                                       , ..
+                                                                       )
+                                         , DisplayPlaneAlphaFlagsKHR
+                                         , KHR_DISPLAY_SPEC_VERSION
+                                         , pattern KHR_DISPLAY_SPEC_VERSION
+                                         , KHR_DISPLAY_EXTENSION_NAME
+                                         , pattern KHR_DISPLAY_EXTENSION_NAME
+                                         , DisplayKHR(..)
+                                         , DisplayModeKHR(..)
+                                         , SurfaceKHR(..)
+                                         , SurfaceTransformFlagBitsKHR(..)
+                                         , SurfaceTransformFlagsKHR
+                                         ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.ByteString (packCString)
+import Data.ByteString (useAsCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Extensions.Handles (DisplayKHR)
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+import Vulkan.Extensions.Handles (DisplayModeKHR)
+import Vulkan.Extensions.Handles (DisplayModeKHR(..))
+import Vulkan.Core10.SharedTypes (Extent2D)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateDisplayModeKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateDisplayPlaneSurfaceKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetDisplayModePropertiesKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetDisplayPlaneCapabilitiesKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetDisplayPlaneSupportedDisplaysKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceDisplayPlanePropertiesKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceDisplayPropertiesKHR))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.SharedTypes (Offset2D)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR)
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagsKHR)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+import Vulkan.Extensions.Handles (DisplayModeKHR(..))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagsKHR)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceDisplayPropertiesKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPropertiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPropertiesKHR -> IO Result
+
+-- | vkGetPhysicalDeviceDisplayPropertiesKHR - Query information about the
+-- available displays
+--
+-- = 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
+--     'DisplayPropertiesKHR' structures.
+--
+-- = 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@,
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.SUCCESS' to indicate that not all the
+-- available values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' 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@ 'DisplayPropertiesKHR' structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'DisplayPropertiesKHR', 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceDisplayPropertiesKHR :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector DisplayPropertiesKHR))
+getPhysicalDeviceDisplayPropertiesKHR physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceDisplayPropertiesKHRPtr = pVkGetPhysicalDeviceDisplayPropertiesKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceDisplayPropertiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceDisplayPropertiesKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceDisplayPropertiesKHR' = mkVkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceDisplayPropertiesKHR' physicalDevice' (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @DisplayPropertiesKHR ((fromIntegral (pPropertyCount)) * 48)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 48) :: Ptr DisplayPropertiesKHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkGetPhysicalDeviceDisplayPropertiesKHR' physicalDevice' (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayPropertiesKHR (((pPProperties) `advancePtrBytes` (48 * (i)) :: Ptr DisplayPropertiesKHR)))
+  pure $ ((r'), pProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceDisplayPlanePropertiesKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPlanePropertiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPlanePropertiesKHR -> IO Result
+
+-- | vkGetPhysicalDeviceDisplayPlanePropertiesKHR - Query the plane
+-- properties
+--
+-- = 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
+--     'DisplayPlanePropertiesKHR' structures.
+--
+-- = 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
+--     'Vulkan.Core10.Handles.PhysicalDevice' 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@ 'DisplayPlanePropertiesKHR'
+--     structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'DisplayPlanePropertiesKHR', 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceDisplayPlanePropertiesKHR :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector DisplayPlanePropertiesKHR))
+getPhysicalDeviceDisplayPlanePropertiesKHR physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceDisplayPlanePropertiesKHRPtr = pVkGetPhysicalDeviceDisplayPlanePropertiesKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceDisplayPlanePropertiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceDisplayPlanePropertiesKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceDisplayPlanePropertiesKHR' = mkVkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceDisplayPlanePropertiesKHR' physicalDevice' (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @DisplayPlanePropertiesKHR ((fromIntegral (pPropertyCount)) * 16)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 16) :: Ptr DisplayPlanePropertiesKHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkGetPhysicalDeviceDisplayPlanePropertiesKHR' physicalDevice' (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayPlanePropertiesKHR (((pPProperties) `advancePtrBytes` (16 * (i)) :: Ptr DisplayPlanePropertiesKHR)))
+  pure $ ((r'), pProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDisplayPlaneSupportedDisplaysKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Word32 -> Ptr DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Word32 -> Ptr DisplayKHR -> IO Result
+
+-- | vkGetDisplayPlaneSupportedDisplaysKHR - Query the list of displays a
+-- plane supports
+--
+-- = 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
+--     'Vulkan.Extensions.Handles.DisplayKHR' handles.
+--
+-- = 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@, 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be
+-- returned instead of 'Vulkan.Core10.Enums.Result.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
+--     'getPhysicalDeviceDisplayPlanePropertiesKHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' 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@ 'Vulkan.Extensions.Handles.DisplayKHR'
+--     handles
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayKHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getDisplayPlaneSupportedDisplaysKHR :: forall io . MonadIO io => PhysicalDevice -> ("planeIndex" ::: Word32) -> io (Result, ("displays" ::: Vector DisplayKHR))
+getDisplayPlaneSupportedDisplaysKHR physicalDevice planeIndex = liftIO . evalContT $ do
+  let vkGetDisplayPlaneSupportedDisplaysKHRPtr = pVkGetDisplayPlaneSupportedDisplaysKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetDisplayPlaneSupportedDisplaysKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDisplayPlaneSupportedDisplaysKHR is null" Nothing Nothing
+  let vkGetDisplayPlaneSupportedDisplaysKHR' = mkVkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPDisplayCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetDisplayPlaneSupportedDisplaysKHR' physicalDevice' (planeIndex) (pPDisplayCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pDisplayCount <- lift $ peek @Word32 pPDisplayCount
+  pPDisplays <- ContT $ bracket (callocBytes @DisplayKHR ((fromIntegral (pDisplayCount)) * 8)) free
+  r' <- lift $ vkGetDisplayPlaneSupportedDisplaysKHR' physicalDevice' (planeIndex) (pPDisplayCount) (pPDisplays)
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pDisplayCount' <- lift $ peek @Word32 pPDisplayCount
+  pDisplays' <- lift $ generateM (fromIntegral (pDisplayCount')) (\i -> peek @DisplayKHR ((pPDisplays `advancePtrBytes` (8 * (i)) :: Ptr DisplayKHR)))
+  pure $ ((r'), pDisplays')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDisplayModePropertiesKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> Ptr Word32 -> Ptr DisplayModePropertiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> DisplayKHR -> Ptr Word32 -> Ptr DisplayModePropertiesKHR -> IO Result
+
+-- | vkGetDisplayModePropertiesKHR - Query the set of mode properties
+-- supported by the display
+--
+-- = 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
+--     'DisplayModePropertiesKHR' structures.
+--
+-- = 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@, 'Vulkan.Core10.Enums.Result.INCOMPLETE'
+-- will be returned instead of 'Vulkan.Core10.Enums.Result.SUCCESS' to
+-- indicate that not all the available values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'
+--     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@ 'DisplayModePropertiesKHR'
+--     structures
+--
+-- -   @display@ /must/ have been created, allocated, or retrieved from
+--     @physicalDevice@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayKHR', 'DisplayModePropertiesKHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getDisplayModePropertiesKHR :: forall io . MonadIO io => PhysicalDevice -> DisplayKHR -> io (Result, ("properties" ::: Vector DisplayModePropertiesKHR))
+getDisplayModePropertiesKHR physicalDevice display = liftIO . evalContT $ do
+  let vkGetDisplayModePropertiesKHRPtr = pVkGetDisplayModePropertiesKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetDisplayModePropertiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDisplayModePropertiesKHR is null" Nothing Nothing
+  let vkGetDisplayModePropertiesKHR' = mkVkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetDisplayModePropertiesKHR' physicalDevice' (display) (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @DisplayModePropertiesKHR ((fromIntegral (pPropertyCount)) * 24)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 24) :: Ptr DisplayModePropertiesKHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkGetDisplayModePropertiesKHR' physicalDevice' (display) (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayModePropertiesKHR (((pPProperties) `advancePtrBytes` (24 * (i)) :: Ptr DisplayModePropertiesKHR)))
+  pure $ ((r'), pProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateDisplayModeKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> Ptr DisplayModeCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr DisplayModeKHR -> IO Result) -> Ptr PhysicalDevice_T -> DisplayKHR -> Ptr DisplayModeCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr DisplayModeKHR -> IO Result
+
+-- | vkCreateDisplayModeKHR - Create a display mode
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device associated with @display@.
+--
+-- -   @display@ is the display to create an additional mode for.
+--
+-- -   @pCreateInfo@ is a 'DisplayModeCreateInfoKHR' 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pMode@ returns the handle of the mode created.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'
+--     handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'DisplayModeCreateInfoKHR' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pMode@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.DisplayModeKHR' handle
+--
+-- -   @display@ /must/ have been created, allocated, or retrieved from
+--     @physicalDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @display@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Extensions.Handles.DisplayKHR', 'DisplayModeCreateInfoKHR',
+-- 'Vulkan.Extensions.Handles.DisplayModeKHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+createDisplayModeKHR :: forall io . MonadIO io => PhysicalDevice -> DisplayKHR -> DisplayModeCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (DisplayModeKHR)
+createDisplayModeKHR physicalDevice display createInfo allocator = liftIO . evalContT $ do
+  let vkCreateDisplayModeKHRPtr = pVkCreateDisplayModeKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkCreateDisplayModeKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateDisplayModeKHR is null" Nothing Nothing
+  let vkCreateDisplayModeKHR' = mkVkCreateDisplayModeKHR vkCreateDisplayModeKHRPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPMode <- ContT $ bracket (callocBytes @DisplayModeKHR 8) free
+  r <- lift $ vkCreateDisplayModeKHR' (physicalDeviceHandle (physicalDevice)) (display) pCreateInfo pAllocator (pPMode)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pMode <- lift $ peek @DisplayModeKHR pPMode
+  pure $ (pMode)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDisplayPlaneCapabilitiesKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> DisplayModeKHR -> Word32 -> Ptr DisplayPlaneCapabilitiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> DisplayModeKHR -> Word32 -> Ptr DisplayPlaneCapabilitiesKHR -> IO Result
+
+-- | vkGetDisplayPlaneCapabilitiesKHR - Query capabilities of a mode and
+-- plane combination
+--
+-- = 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 'DisplayPlaneCapabilitiesKHR'
+--     structure in which the capabilities are returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @mode@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayModeKHR'
+--     handle
+--
+-- -   @pCapabilities@ /must/ be a valid pointer to a
+--     'DisplayPlaneCapabilitiesKHR' structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @mode@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayModeKHR',
+-- 'DisplayPlaneCapabilitiesKHR', 'Vulkan.Core10.Handles.PhysicalDevice'
+getDisplayPlaneCapabilitiesKHR :: forall io . MonadIO io => PhysicalDevice -> DisplayModeKHR -> ("planeIndex" ::: Word32) -> io (DisplayPlaneCapabilitiesKHR)
+getDisplayPlaneCapabilitiesKHR physicalDevice mode planeIndex = liftIO . evalContT $ do
+  let vkGetDisplayPlaneCapabilitiesKHRPtr = pVkGetDisplayPlaneCapabilitiesKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetDisplayPlaneCapabilitiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDisplayPlaneCapabilitiesKHR is null" Nothing Nothing
+  let vkGetDisplayPlaneCapabilitiesKHR' = mkVkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHRPtr
+  pPCapabilities <- ContT (withZeroCStruct @DisplayPlaneCapabilitiesKHR)
+  r <- lift $ vkGetDisplayPlaneCapabilitiesKHR' (physicalDeviceHandle (physicalDevice)) (mode) (planeIndex) (pPCapabilities)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pCapabilities <- lift $ peekCStruct @DisplayPlaneCapabilitiesKHR pPCapabilities
+  pure $ (pCapabilities)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateDisplayPlaneSurfaceKHR
+  :: FunPtr (Ptr Instance_T -> Ptr DisplaySurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr DisplaySurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateDisplayPlaneSurfaceKHR - Create a
+-- 'Vulkan.Extensions.Handles.SurfaceKHR' structure representing a display
+-- plane and mode
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance corresponding to the physical device the
+--     targeted display is on.
+--
+-- -   @pCreateInfo@ is a pointer to a 'DisplaySurfaceCreateInfoKHR'
+--     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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'DisplaySurfaceCreateInfoKHR' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'DisplaySurfaceCreateInfoKHR', 'Vulkan.Core10.Handles.Instance',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+createDisplayPlaneSurfaceKHR :: forall io . MonadIO io => Instance -> DisplaySurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createDisplayPlaneSurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateDisplayPlaneSurfaceKHRPtr = pVkCreateDisplayPlaneSurfaceKHR (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateDisplayPlaneSurfaceKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateDisplayPlaneSurfaceKHR is null" Nothing Nothing
+  let vkCreateDisplayPlaneSurfaceKHR' = mkVkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHRPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateDisplayPlaneSurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+-- | VkDisplayPropertiesKHR - Structure describing an available display
+-- device
+--
+-- = Description
+--
+-- Note
+--
+-- For devices which have no natural value to return here, implementations
+-- /should/ return the maximum resolution supported.
+--
+-- 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
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Extensions.Handles.DisplayKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayProperties2KHR',
+-- 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagsKHR',
+-- 'getPhysicalDeviceDisplayPropertiesKHR'
+data DisplayPropertiesKHR = DisplayPropertiesKHR
+  { -- | @display@ is a handle that is used to refer to the display described
+    -- here. This handle will be valid for the lifetime of the Vulkan instance.
+    display :: DisplayKHR
+  , -- | @displayName@ is a pointer to a null-terminated UTF-8 string containing
+    -- the name of the display. Generally, this will be the name provided by
+    -- the display’s EDID. It /can/ be @NULL@ if no suitable name is available.
+    -- If not @NULL@, the memory it points to /must/ remain accessible as long
+    -- as @display@ is valid.
+    displayName :: ByteString
+  , -- | @physicalDimensions@ describes the physical width and height of the
+    -- visible portion of the display, in millimeters.
+    physicalDimensions :: Extent2D
+  , -- | @physicalResolution@ describes the physical, native, or preferred
+    -- resolution of the display.
+    physicalResolution :: Extent2D
+  , -- | @supportedTransforms@ is a bitmask of
+    -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR'
+    -- describing which transforms are supported by this display.
+    supportedTransforms :: SurfaceTransformFlagsKHR
+  , -- | @planeReorderPossible@ tells whether the planes on this display /can/
+    -- have their z order changed. If this is 'Vulkan.Core10.BaseType.TRUE',
+    -- the application /can/ re-arrange the planes on this display in any order
+    -- relative to each other.
+    planeReorderPossible :: Bool
+  , -- | @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.
+    persistentContent :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show DisplayPropertiesKHR
+
+instance ToCStruct DisplayPropertiesKHR where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayPropertiesKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr DisplayKHR)) (display)
+    displayName'' <- ContT $ useAsCString (displayName)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr CChar))) displayName''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (physicalDimensions) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (physicalResolution) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr SurfaceTransformFlagsKHR)) (supportedTransforms)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (planeReorderPossible))
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (persistentContent))
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr DisplayKHR)) (zero)
+    displayName'' <- ContT $ useAsCString (mempty)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr CChar))) displayName''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance FromCStruct DisplayPropertiesKHR where
+  peekCStruct p = do
+    display <- peek @DisplayKHR ((p `plusPtr` 0 :: Ptr DisplayKHR))
+    displayName <- packCString =<< peek ((p `plusPtr` 8 :: Ptr (Ptr CChar)))
+    physicalDimensions <- peekCStruct @Extent2D ((p `plusPtr` 16 :: Ptr Extent2D))
+    physicalResolution <- peekCStruct @Extent2D ((p `plusPtr` 24 :: Ptr Extent2D))
+    supportedTransforms <- peek @SurfaceTransformFlagsKHR ((p `plusPtr` 32 :: Ptr SurfaceTransformFlagsKHR))
+    planeReorderPossible <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    persistentContent <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    pure $ DisplayPropertiesKHR
+             display displayName physicalDimensions physicalResolution supportedTransforms (bool32ToBool planeReorderPossible) (bool32ToBool persistentContent)
+
+instance Zero DisplayPropertiesKHR where
+  zero = DisplayPropertiesKHR
+           zero
+           mempty
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDisplayPlanePropertiesKHR - Structure describing display plane
+-- properties
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneProperties2KHR',
+-- 'getPhysicalDeviceDisplayPlanePropertiesKHR'
+data DisplayPlanePropertiesKHR = DisplayPlanePropertiesKHR
+  { -- | @currentDisplay@ is the handle of the display the plane is currently
+    -- associated with. If the plane is not currently attached to any displays,
+    -- this will be 'Vulkan.Core10.APIConstants.NULL_HANDLE'.
+    currentDisplay :: DisplayKHR
+  , -- | @currentStackIndex@ is the current z-order of the plane. This will be
+    -- between 0 and the value returned by
+    -- 'getPhysicalDeviceDisplayPlanePropertiesKHR' in @pPropertyCount@.
+    currentStackIndex :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DisplayPlanePropertiesKHR
+
+instance ToCStruct DisplayPlanePropertiesKHR where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayPlanePropertiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr DisplayKHR)) (currentDisplay)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (currentStackIndex)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr DisplayKHR)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DisplayPlanePropertiesKHR where
+  peekCStruct p = do
+    currentDisplay <- peek @DisplayKHR ((p `plusPtr` 0 :: Ptr DisplayKHR))
+    currentStackIndex <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pure $ DisplayPlanePropertiesKHR
+             currentDisplay currentStackIndex
+
+instance Storable DisplayPlanePropertiesKHR where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DisplayPlanePropertiesKHR where
+  zero = DisplayPlanePropertiesKHR
+           zero
+           zero
+
+
+-- | VkDisplayModeParametersKHR - Structure describing display parameters
+-- associated with a display mode
+--
+-- = Description
+--
+-- Note
+--
+-- For example, a 60Hz display mode would report a @refreshRate@ of 60,000.
+--
+-- == Valid Usage
+--
+-- -   The @width@ member of @visibleRegion@ /must/ be greater than @0@
+--
+-- -   The @height@ member of @visibleRegion@ /must/ be greater than @0@
+--
+-- -   @refreshRate@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'DisplayModeCreateInfoKHR', 'DisplayModePropertiesKHR',
+-- 'Vulkan.Core10.SharedTypes.Extent2D'
+data DisplayModeParametersKHR = DisplayModeParametersKHR
+  { -- | @visibleRegion@ is the 2D extents of the visible region.
+    visibleRegion :: Extent2D
+  , -- | @refreshRate@ is a @uint32_t@ that is the number of times the display is
+    -- refreshed each second multiplied by 1000.
+    refreshRate :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DisplayModeParametersKHR
+
+instance ToCStruct DisplayModeParametersKHR where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayModeParametersKHR{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent2D)) (visibleRegion) . ($ ())
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (refreshRate)
+    lift $ f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance FromCStruct DisplayModeParametersKHR where
+  peekCStruct p = do
+    visibleRegion <- peekCStruct @Extent2D ((p `plusPtr` 0 :: Ptr Extent2D))
+    refreshRate <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pure $ DisplayModeParametersKHR
+             visibleRegion refreshRate
+
+instance Zero DisplayModeParametersKHR where
+  zero = DisplayModeParametersKHR
+           zero
+           zero
+
+
+-- | VkDisplayModePropertiesKHR - Structure describing display mode
+-- properties
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayModeKHR', 'DisplayModeParametersKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayModeProperties2KHR',
+-- 'getDisplayModePropertiesKHR'
+data DisplayModePropertiesKHR = DisplayModePropertiesKHR
+  { -- | @displayMode@ is a handle to the display mode described in this
+    -- structure. This handle will be valid for the lifetime of the Vulkan
+    -- instance.
+    displayMode :: DisplayModeKHR
+  , -- | @parameters@ is a 'DisplayModeParametersKHR' structure describing the
+    -- display parameters associated with @displayMode@.
+    parameters :: DisplayModeParametersKHR
+  }
+  deriving (Typeable)
+deriving instance Show DisplayModePropertiesKHR
+
+instance ToCStruct DisplayModePropertiesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayModePropertiesKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr DisplayModeKHR)) (displayMode)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr DisplayModeParametersKHR)) (parameters) . ($ ())
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr DisplayModeKHR)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr DisplayModeParametersKHR)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct DisplayModePropertiesKHR where
+  peekCStruct p = do
+    displayMode <- peek @DisplayModeKHR ((p `plusPtr` 0 :: Ptr DisplayModeKHR))
+    parameters <- peekCStruct @DisplayModeParametersKHR ((p `plusPtr` 8 :: Ptr DisplayModeParametersKHR))
+    pure $ DisplayModePropertiesKHR
+             displayMode parameters
+
+instance Zero DisplayModePropertiesKHR where
+  zero = DisplayModePropertiesKHR
+           zero
+           zero
+
+
+-- | VkDisplayModeCreateInfoKHR - Structure specifying parameters of a newly
+-- created display mode object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DisplayModeCreateFlagsKHR', 'DisplayModeParametersKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createDisplayModeKHR'
+data DisplayModeCreateInfoKHR = DisplayModeCreateInfoKHR
+  { -- | @flags@ /must/ be @0@
+    flags :: DisplayModeCreateFlagsKHR
+  , -- | @parameters@ /must/ be a valid 'DisplayModeParametersKHR' structure
+    parameters :: DisplayModeParametersKHR
+  }
+  deriving (Typeable)
+deriving instance Show DisplayModeCreateInfoKHR
+
+instance ToCStruct DisplayModeCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayModeCreateInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DisplayModeCreateFlagsKHR)) (flags)
+    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr DisplayModeParametersKHR)) (parameters) . ($ ())
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr DisplayModeParametersKHR)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct DisplayModeCreateInfoKHR where
+  peekCStruct p = do
+    flags <- peek @DisplayModeCreateFlagsKHR ((p `plusPtr` 16 :: Ptr DisplayModeCreateFlagsKHR))
+    parameters <- peekCStruct @DisplayModeParametersKHR ((p `plusPtr` 20 :: Ptr DisplayModeParametersKHR))
+    pure $ DisplayModeCreateInfoKHR
+             flags parameters
+
+instance Zero DisplayModeCreateInfoKHR where
+  zero = DisplayModeCreateInfoKHR
+           zero
+           zero
+
+
+-- | VkDisplayPlaneCapabilitiesKHR - Structure describing capabilities of a
+-- mode and plane combination
+--
+-- = 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 'DisplayPlaneCapabilitiesKHR' are guaranteed to be
+-- supported. Presentation requests specifying unsupported combinations
+-- /may/ fail.
+--
+-- = See Also
+--
+-- 'DisplayPlaneAlphaFlagsKHR',
+-- 'Vulkan.Extensions.VK_KHR_get_display_properties2.DisplayPlaneCapabilities2KHR',
+-- 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.SharedTypes.Offset2D', 'getDisplayPlaneCapabilitiesKHR'
+data DisplayPlaneCapabilitiesKHR = DisplayPlaneCapabilitiesKHR
+  { -- | @supportedAlpha@ is a bitmask of 'DisplayPlaneAlphaFlagBitsKHR'
+    -- describing the supported alpha blending modes.
+    supportedAlpha :: DisplayPlaneAlphaFlagsKHR
+  , -- | @minSrcPosition@ is the minimum source rectangle offset supported by
+    -- this plane using the specified mode.
+    minSrcPosition :: Offset2D
+  , -- | @maxSrcPosition@ is the maximum source rectangle offset supported by
+    -- this plane using the specified mode. The @x@ and @y@ components of
+    -- @maxSrcPosition@ /must/ each be greater than or equal to the @x@ and @y@
+    -- components of @minSrcPosition@, respectively.
+    maxSrcPosition :: Offset2D
+  , -- | @minSrcExtent@ is the minimum source rectangle size supported by this
+    -- plane using the specified mode.
+    minSrcExtent :: Extent2D
+  , -- | @maxSrcExtent@ is the maximum source rectangle size supported by this
+    -- plane using the specified mode.
+    maxSrcExtent :: Extent2D
+  , -- | @minDstPosition@, @maxDstPosition@, @minDstExtent@, @maxDstExtent@ all
+    -- have similar semantics to their corresponding @*Src*@ equivalents, but
+    -- apply to the output region within the mode rather than the input region
+    -- within the source image. Unlike the @*Src*@ offsets, @minDstPosition@
+    -- and @maxDstPosition@ /may/ contain negative values.
+    minDstPosition :: Offset2D
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "maxDstPosition"
+    maxDstPosition :: Offset2D
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "minDstExtent"
+    minDstExtent :: Extent2D
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "maxDstExtent"
+    maxDstExtent :: Extent2D
+  }
+  deriving (Typeable)
+deriving instance Show DisplayPlaneCapabilitiesKHR
+
+instance ToCStruct DisplayPlaneCapabilitiesKHR where
+  withCStruct x f = allocaBytesAligned 68 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayPlaneCapabilitiesKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr DisplayPlaneAlphaFlagsKHR)) (supportedAlpha)
+    ContT $ pokeCStruct ((p `plusPtr` 4 :: Ptr Offset2D)) (minSrcPosition) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Offset2D)) (maxSrcPosition) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (minSrcExtent) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr Extent2D)) (maxSrcExtent) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 36 :: Ptr Offset2D)) (minDstPosition) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset2D)) (maxDstPosition) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 52 :: Ptr Extent2D)) (minDstExtent) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Extent2D)) (maxDstExtent) . ($ ())
+    lift $ f
+  cStructSize = 68
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 4 :: Ptr Offset2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Offset2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Extent2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr Extent2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 36 :: Ptr Offset2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 52 :: Ptr Extent2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct DisplayPlaneCapabilitiesKHR where
+  peekCStruct p = do
+    supportedAlpha <- peek @DisplayPlaneAlphaFlagsKHR ((p `plusPtr` 0 :: Ptr DisplayPlaneAlphaFlagsKHR))
+    minSrcPosition <- peekCStruct @Offset2D ((p `plusPtr` 4 :: Ptr Offset2D))
+    maxSrcPosition <- peekCStruct @Offset2D ((p `plusPtr` 12 :: Ptr Offset2D))
+    minSrcExtent <- peekCStruct @Extent2D ((p `plusPtr` 20 :: Ptr Extent2D))
+    maxSrcExtent <- peekCStruct @Extent2D ((p `plusPtr` 28 :: Ptr Extent2D))
+    minDstPosition <- peekCStruct @Offset2D ((p `plusPtr` 36 :: Ptr Offset2D))
+    maxDstPosition <- peekCStruct @Offset2D ((p `plusPtr` 44 :: Ptr Offset2D))
+    minDstExtent <- peekCStruct @Extent2D ((p `plusPtr` 52 :: Ptr Extent2D))
+    maxDstExtent <- peekCStruct @Extent2D ((p `plusPtr` 60 :: Ptr Extent2D))
+    pure $ DisplayPlaneCapabilitiesKHR
+             supportedAlpha minSrcPosition maxSrcPosition minSrcExtent maxSrcExtent minDstPosition maxDstPosition minDstExtent maxDstExtent
+
+instance Zero DisplayPlaneCapabilitiesKHR where
+  zero = DisplayPlaneCapabilitiesKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDisplaySurfaceCreateInfoKHR - Structure specifying parameters of a
+-- newly created display plane surface object
+--
+-- = 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
+--     'getPhysicalDeviceDisplayPlanePropertiesKHR'
+--
+-- -   If the @planeReorderPossible@ member of the 'DisplayPropertiesKHR'
+--     structure returned by 'getPhysicalDeviceDisplayPropertiesKHR' for
+--     the display corresponding to @displayMode@ is
+--     'Vulkan.Core10.BaseType.TRUE' then @planeStackIndex@ /must/ be less
+--     than the number of display planes supported by the device as
+--     determined by calling 'getPhysicalDeviceDisplayPlanePropertiesKHR';
+--     otherwise @planeStackIndex@ /must/ equal the @currentStackIndex@
+--     member of 'DisplayPlanePropertiesKHR' returned by
+--     'getPhysicalDeviceDisplayPlanePropertiesKHR' for the display plane
+--     corresponding to @displayMode@
+--
+-- -   If @alphaMode@ is 'DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR' then
+--     @globalAlpha@ /must/ be between @0@ and @1@, inclusive
+--
+-- -   @alphaMode@ /must/ be @0@ or one of the bits present in the
+--     @supportedAlpha@ member of 'DisplayPlaneCapabilitiesKHR' returned by
+--     'getDisplayPlaneCapabilitiesKHR' for the display plane corresponding
+--     to @displayMode@
+--
+-- -   The @width@ and @height@ members of @imageExtent@ /must/ be less
+--     than the @maxImageDimensions2D@ member of
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @displayMode@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.DisplayModeKHR' handle
+--
+-- -   @transform@ /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' value
+--
+-- -   @alphaMode@ /must/ be a valid 'DisplayPlaneAlphaFlagBitsKHR' value
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayModeKHR',
+-- 'DisplayPlaneAlphaFlagBitsKHR', 'DisplaySurfaceCreateFlagsKHR',
+-- 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR',
+-- 'createDisplayPlaneSurfaceKHR'
+data DisplaySurfaceCreateInfoKHR = DisplaySurfaceCreateInfoKHR
+  { -- | @flags@ is reserved for future use, and /must/ be zero.
+    flags :: DisplaySurfaceCreateFlagsKHR
+  , -- | @displayMode@ is a 'Vulkan.Extensions.Handles.DisplayModeKHR' handle
+    -- specifying the mode to use when displaying this surface.
+    displayMode :: DisplayModeKHR
+  , -- | @planeIndex@ is the plane on which this surface appears.
+    planeIndex :: Word32
+  , -- | @planeStackIndex@ is the z-order of the plane.
+    planeStackIndex :: Word32
+  , -- | @transform@ is a
+    -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' value
+    -- specifying the transformation to apply to images as part of the scanout
+    -- operation.
+    transform :: SurfaceTransformFlagBitsKHR
+  , -- | @globalAlpha@ is the global alpha value. This value is ignored if
+    -- @alphaMode@ is not 'DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR'.
+    globalAlpha :: Float
+  , -- | @alphaMode@ is a 'DisplayPlaneAlphaFlagBitsKHR' value specifying the
+    -- type of alpha blending to use.
+    alphaMode :: DisplayPlaneAlphaFlagBitsKHR
+  , -- | @imageExtent@ The size of the presentable images to use with the
+    -- surface.
+    imageExtent :: Extent2D
+  }
+  deriving (Typeable)
+deriving instance Show DisplaySurfaceCreateInfoKHR
+
+instance ToCStruct DisplaySurfaceCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplaySurfaceCreateInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DisplaySurfaceCreateFlagsKHR)) (flags)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DisplayModeKHR)) (displayMode)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (planeIndex)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (planeStackIndex)
+    lift $ poke ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR)) (transform)
+    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (globalAlpha))
+    lift $ poke ((p `plusPtr` 48 :: Ptr DisplayPlaneAlphaFlagBitsKHR)) (alphaMode)
+    ContT $ pokeCStruct ((p `plusPtr` 52 :: Ptr Extent2D)) (imageExtent) . ($ ())
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DisplayModeKHR)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
+    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))
+    lift $ poke ((p `plusPtr` 48 :: Ptr DisplayPlaneAlphaFlagBitsKHR)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 52 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct DisplaySurfaceCreateInfoKHR where
+  peekCStruct p = do
+    flags <- peek @DisplaySurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr DisplaySurfaceCreateFlagsKHR))
+    displayMode <- peek @DisplayModeKHR ((p `plusPtr` 24 :: Ptr DisplayModeKHR))
+    planeIndex <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    planeStackIndex <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
+    transform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR))
+    globalAlpha <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))
+    alphaMode <- peek @DisplayPlaneAlphaFlagBitsKHR ((p `plusPtr` 48 :: Ptr DisplayPlaneAlphaFlagBitsKHR))
+    imageExtent <- peekCStruct @Extent2D ((p `plusPtr` 52 :: Ptr Extent2D))
+    pure $ DisplaySurfaceCreateInfoKHR
+             flags displayMode planeIndex planeStackIndex transform ((\(CFloat a) -> a) globalAlpha) alphaMode imageExtent
+
+instance Zero DisplaySurfaceCreateInfoKHR where
+  zero = DisplaySurfaceCreateInfoKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDisplayModeCreateFlagsKHR - Reserved for future use
+--
+-- = Description
+--
+-- 'DisplayModeCreateFlagsKHR' is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'DisplayModeCreateInfoKHR'
+newtype DisplayModeCreateFlagsKHR = DisplayModeCreateFlagsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show DisplayModeCreateFlagsKHR where
+  showsPrec p = \case
+    DisplayModeCreateFlagsKHR x -> showParen (p >= 11) (showString "DisplayModeCreateFlagsKHR 0x" . showHex x)
+
+instance Read DisplayModeCreateFlagsKHR where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DisplayModeCreateFlagsKHR")
+                       v <- step readPrec
+                       pure (DisplayModeCreateFlagsKHR v)))
+
+
+-- | VkDisplaySurfaceCreateFlagsKHR - Reserved for future use
+--
+-- = Description
+--
+-- 'DisplaySurfaceCreateFlagsKHR' is a bitmask type for setting a mask, but
+-- is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'DisplaySurfaceCreateInfoKHR'
+newtype DisplaySurfaceCreateFlagsKHR = DisplaySurfaceCreateFlagsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show DisplaySurfaceCreateFlagsKHR where
+  showsPrec p = \case
+    DisplaySurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "DisplaySurfaceCreateFlagsKHR 0x" . showHex x)
+
+instance Read DisplaySurfaceCreateFlagsKHR where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DisplaySurfaceCreateFlagsKHR")
+                       v <- step readPrec
+                       pure (DisplaySurfaceCreateFlagsKHR v)))
+
+
+-- | VkDisplayPlaneAlphaFlagBitsKHR - Alpha blending type
+--
+-- = See Also
+--
+-- 'DisplayPlaneAlphaFlagsKHR', 'DisplaySurfaceCreateInfoKHR'
+newtype DisplayPlaneAlphaFlagBitsKHR = DisplayPlaneAlphaFlagBitsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR' specifies that the source image
+-- will be treated as opaque.
+pattern DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = DisplayPlaneAlphaFlagBitsKHR 0x00000001
+-- | '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 DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = DisplayPlaneAlphaFlagBitsKHR 0x00000002
+-- | '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 DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = DisplayPlaneAlphaFlagBitsKHR 0x00000004
+-- | 'DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR' is equivalent to
+-- '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 DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = DisplayPlaneAlphaFlagBitsKHR 0x00000008
+
+type DisplayPlaneAlphaFlagsKHR = DisplayPlaneAlphaFlagBitsKHR
+
+instance Show DisplayPlaneAlphaFlagBitsKHR where
+  showsPrec p = \case
+    DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR -> showString "DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR"
+    DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR -> showString "DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR"
+    DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR -> showString "DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR"
+    DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR -> showString "DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR"
+    DisplayPlaneAlphaFlagBitsKHR x -> showParen (p >= 11) (showString "DisplayPlaneAlphaFlagBitsKHR 0x" . showHex x)
+
+instance Read DisplayPlaneAlphaFlagBitsKHR where
+  readPrec = parens (choose [("DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR", pure DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR)
+                            , ("DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR", pure DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR)
+                            , ("DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR", pure DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR)
+                            , ("DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR", pure DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DisplayPlaneAlphaFlagBitsKHR")
+                       v <- step readPrec
+                       pure (DisplayPlaneAlphaFlagBitsKHR v)))
+
+
+type KHR_DISPLAY_SPEC_VERSION = 23
+
+-- No documentation found for TopLevel "VK_KHR_DISPLAY_SPEC_VERSION"
+pattern KHR_DISPLAY_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_DISPLAY_SPEC_VERSION = 23
+
+
+type KHR_DISPLAY_EXTENSION_NAME = "VK_KHR_display"
+
+-- No documentation found for TopLevel "VK_KHR_DISPLAY_EXTENSION_NAME"
+pattern KHR_DISPLAY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_DISPLAY_EXTENSION_NAME = "VK_KHR_display"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_display.hs-boot b/src/Vulkan/Extensions/VK_KHR_display.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_display.hs-boot
@@ -0,0 +1,68 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_display  ( DisplayModeCreateInfoKHR
+                                         , DisplayModeParametersKHR
+                                         , DisplayModePropertiesKHR
+                                         , DisplayPlaneCapabilitiesKHR
+                                         , DisplayPlanePropertiesKHR
+                                         , DisplayPropertiesKHR
+                                         , DisplaySurfaceCreateInfoKHR
+                                         ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DisplayModeCreateInfoKHR
+
+instance ToCStruct DisplayModeCreateInfoKHR
+instance Show DisplayModeCreateInfoKHR
+
+instance FromCStruct DisplayModeCreateInfoKHR
+
+
+data DisplayModeParametersKHR
+
+instance ToCStruct DisplayModeParametersKHR
+instance Show DisplayModeParametersKHR
+
+instance FromCStruct DisplayModeParametersKHR
+
+
+data DisplayModePropertiesKHR
+
+instance ToCStruct DisplayModePropertiesKHR
+instance Show DisplayModePropertiesKHR
+
+instance FromCStruct DisplayModePropertiesKHR
+
+
+data DisplayPlaneCapabilitiesKHR
+
+instance ToCStruct DisplayPlaneCapabilitiesKHR
+instance Show DisplayPlaneCapabilitiesKHR
+
+instance FromCStruct DisplayPlaneCapabilitiesKHR
+
+
+data DisplayPlanePropertiesKHR
+
+instance ToCStruct DisplayPlanePropertiesKHR
+instance Show DisplayPlanePropertiesKHR
+
+instance FromCStruct DisplayPlanePropertiesKHR
+
+
+data DisplayPropertiesKHR
+
+instance ToCStruct DisplayPropertiesKHR
+instance Show DisplayPropertiesKHR
+
+instance FromCStruct DisplayPropertiesKHR
+
+
+data DisplaySurfaceCreateInfoKHR
+
+instance ToCStruct DisplaySurfaceCreateInfoKHR
+instance Show DisplaySurfaceCreateInfoKHR
+
+instance FromCStruct DisplaySurfaceCreateInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_display_swapchain.hs b/src/Vulkan/Extensions/VK_KHR_display_swapchain.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_display_swapchain.hs
@@ -0,0 +1,316 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_display_swapchain  ( createSharedSwapchainsKHR
+                                                   , DisplayPresentInfoKHR(..)
+                                                   , KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION
+                                                   , pattern KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION
+                                                   , KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME
+                                                   , pattern KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME
+                                                   , SurfaceKHR(..)
+                                                   , SwapchainKHR(..)
+                                                   , SwapchainCreateInfoKHR(..)
+                                                   , PresentModeKHR(..)
+                                                   , ColorSpaceKHR(..)
+                                                   , CompositeAlphaFlagBitsKHR(..)
+                                                   , CompositeAlphaFlagsKHR
+                                                   , SurfaceTransformFlagBitsKHR(..)
+                                                   , SurfaceTransformFlagsKHR
+                                                   , SwapchainCreateFlagBitsKHR(..)
+                                                   , SwapchainCreateFlagsKHR
+                                                   ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateSharedSwapchainsKHR))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.CommandBufferBuilding (Rect2D)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateInfoKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.VK_KHR_surface (ColorSpaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (CompositeAlphaFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (CompositeAlphaFlagsKHR)
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR(..))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagsKHR)
+import Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagsKHR)
+import Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateInfoKHR(..))
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateSharedSwapchainsKHR
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (SwapchainCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr SwapchainKHR -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (SwapchainCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr SwapchainKHR -> IO Result
+
+-- | vkCreateSharedSwapchainsKHR - Create multiple swapchains that share
+-- presentable images
+--
+-- = 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
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
+--     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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSwapchains@ is a pointer to an array of
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handles in which the
+--     created swapchain objects will be returned.
+--
+-- = Description
+--
+-- 'createSharedSwapchainsKHR' is similar to
+-- 'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR', except that it
+-- takes an array of
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR' 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
+-- 'Vulkan.Core10.Enums.Result.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
+-- 'Vulkan.Core10.Enums.ImageLayout.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 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfos@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ valid
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
+--     structures
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSwapchains@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ 'Vulkan.Extensions.Handles.SwapchainKHR' 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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DISPLAY_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+createSharedSwapchainsKHR :: forall io . MonadIO io => Device -> ("createInfos" ::: Vector (SomeStruct SwapchainCreateInfoKHR)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (("swapchains" ::: Vector SwapchainKHR))
+createSharedSwapchainsKHR device createInfos allocator = liftIO . evalContT $ do
+  let vkCreateSharedSwapchainsKHRPtr = pVkCreateSharedSwapchainsKHR (deviceCmds (device :: Device))
+  lift $ unless (vkCreateSharedSwapchainsKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateSharedSwapchainsKHR is null" Nothing Nothing
+  let vkCreateSharedSwapchainsKHR' = mkVkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHRPtr
+  pPCreateInfos <- ContT $ allocaBytesAligned @(SwapchainCreateInfoKHR _) ((Data.Vector.length (createInfos)) * 104) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (104 * (i)) :: Ptr (SwapchainCreateInfoKHR _))) (e) . ($ ())) (createInfos)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSwapchains <- ContT $ bracket (callocBytes @SwapchainKHR ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
+  r <- lift $ vkCreateSharedSwapchainsKHR' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (pPCreateInfos) pAllocator (pPSwapchains)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSwapchains <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @SwapchainKHR ((pPSwapchains `advancePtrBytes` (8 * (i)) :: Ptr SwapchainKHR)))
+  pure $ (pSwapchains)
+
+
+-- | VkDisplayPresentInfoKHR - Structure describing parameters of a queue
+-- presentation to a swapchain
+--
+-- = 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
+--     'Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR' structure
+--     returned by
+--     'Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPropertiesKHR'
+--     for the display the present operation targets then @persistent@
+--     /must/ be 'Vulkan.Core10.BaseType.FALSE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DisplayPresentInfoKHR = DisplayPresentInfoKHR
+  { -- | @srcRect@ is a rectangular region of pixels to present. It /must/ be a
+    -- subset of the image being presented. If 'DisplayPresentInfoKHR' is not
+    -- specified, this region will be assumed to be the entire presentable
+    -- image.
+    srcRect :: Rect2D
+  , -- | @dstRect@ is a rectangular region within the visible region of the
+    -- swapchain’s display mode. If 'DisplayPresentInfoKHR' is not specified,
+    -- this region will be assumed to be the entire visible region of the
+    -- visible region of the swapchain’s mode. If the specified rectangle is a
+    -- subset of the display mode’s visible region, content from display planes
+    -- below the swapchain’s plane will be visible outside the rectangle. If
+    -- there are no planes below the swapchain’s, the area outside the
+    -- specified rectangle will be black. If portions of the specified
+    -- rectangle are outside of the display’s visible region, pixels mapping
+    -- only to those portions of the rectangle will be discarded.
+    dstRect :: Rect2D
+  , -- | @persistent@: If this is 'Vulkan.Core10.BaseType.TRUE', the display
+    -- engine will enable buffered mode on displays that support it. This
+    -- allows the display engine to stop sending content to the display until a
+    -- new image is presented. The display will instead maintain a copy of the
+    -- last presented image. This allows less power to be used, but /may/
+    -- increase presentation latency. If 'DisplayPresentInfoKHR' is not
+    -- specified, persistent mode will not be used.
+    persistent :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show DisplayPresentInfoKHR
+
+instance ToCStruct DisplayPresentInfoKHR where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayPresentInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Rect2D)) (srcRect) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (dstRect) . ($ ())
+    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (persistent))
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Rect2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance FromCStruct DisplayPresentInfoKHR where
+  peekCStruct p = do
+    srcRect <- peekCStruct @Rect2D ((p `plusPtr` 16 :: Ptr Rect2D))
+    dstRect <- peekCStruct @Rect2D ((p `plusPtr` 32 :: Ptr Rect2D))
+    persistent <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    pure $ DisplayPresentInfoKHR
+             srcRect dstRect (bool32ToBool persistent)
+
+instance Zero DisplayPresentInfoKHR where
+  zero = DisplayPresentInfoKHR
+           zero
+           zero
+           zero
+
+
+type KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION = 10
+
+-- No documentation found for TopLevel "VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION"
+pattern KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION = 10
+
+
+type KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME = "VK_KHR_display_swapchain"
+
+-- No documentation found for TopLevel "VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME"
+pattern KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME = "VK_KHR_display_swapchain"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_display_swapchain.hs-boot b/src/Vulkan/Extensions/VK_KHR_display_swapchain.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_display_swapchain.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_display_swapchain  (DisplayPresentInfoKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DisplayPresentInfoKHR
+
+instance ToCStruct DisplayPresentInfoKHR
+instance Show DisplayPresentInfoKHR
+
+instance FromCStruct DisplayPresentInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_draw_indirect_count.hs b/src/Vulkan/Extensions/VK_KHR_draw_indirect_count.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_draw_indirect_count.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_draw_indirect_count  ( cmdDrawIndirectCountKHR
+                                                     , cmdDrawIndexedIndirectCountKHR
+                                                     , KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION
+                                                     , pattern KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION
+                                                     , KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME
+                                                     , pattern KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME
+                                                     ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count (cmdDrawIndexedIndirectCount)
+import Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count (cmdDrawIndirectCount)
+-- No documentation found for TopLevel "vkCmdDrawIndirectCountKHR"
+cmdDrawIndirectCountKHR = cmdDrawIndirectCount
+
+
+-- No documentation found for TopLevel "vkCmdDrawIndexedIndirectCountKHR"
+cmdDrawIndexedIndirectCountKHR = cmdDrawIndexedIndirectCount
+
+
+type KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION"
+pattern KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION = 1
+
+
+type KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME = "VK_KHR_draw_indirect_count"
+
+-- No documentation found for TopLevel "VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME"
+pattern KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME = "VK_KHR_draw_indirect_count"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_driver_properties.hs b/src/Vulkan/Extensions/VK_KHR_driver_properties.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_driver_properties.hs
@@ -0,0 +1,129 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_driver_properties  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR
+                                                   , pattern DRIVER_ID_AMD_PROPRIETARY_KHR
+                                                   , pattern DRIVER_ID_AMD_OPEN_SOURCE_KHR
+                                                   , pattern DRIVER_ID_MESA_RADV_KHR
+                                                   , pattern DRIVER_ID_NVIDIA_PROPRIETARY_KHR
+                                                   , pattern DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR
+                                                   , pattern DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR
+                                                   , pattern DRIVER_ID_IMAGINATION_PROPRIETARY_KHR
+                                                   , pattern DRIVER_ID_QUALCOMM_PROPRIETARY_KHR
+                                                   , pattern DRIVER_ID_ARM_PROPRIETARY_KHR
+                                                   , pattern DRIVER_ID_GOOGLE_SWIFTSHADER_KHR
+                                                   , pattern DRIVER_ID_GGP_PROPRIETARY_KHR
+                                                   , pattern DRIVER_ID_BROADCOM_PROPRIETARY_KHR
+                                                   , pattern MAX_DRIVER_NAME_SIZE_KHR
+                                                   , pattern MAX_DRIVER_INFO_SIZE_KHR
+                                                   , DriverIdKHR
+                                                   , ConformanceVersionKHR
+                                                   , PhysicalDeviceDriverPropertiesKHR
+                                                   , KHR_DRIVER_PROPERTIES_SPEC_VERSION
+                                                   , pattern KHR_DRIVER_PROPERTIES_SPEC_VERSION
+                                                   , KHR_DRIVER_PROPERTIES_EXTENSION_NAME
+                                                   , pattern KHR_DRIVER_PROPERTIES_EXTENSION_NAME
+                                                   ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (ConformanceVersion)
+import Vulkan.Core12.Enums.DriverId (DriverId)
+import Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties)
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_AMD_OPEN_SOURCE))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_AMD_PROPRIETARY))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_ARM_PROPRIETARY))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_BROADCOM_PROPRIETARY))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_GGP_PROPRIETARY))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_GOOGLE_SWIFTSHADER))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_IMAGINATION_PROPRIETARY))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_INTEL_OPEN_SOURCE_MESA))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_INTEL_PROPRIETARY_WINDOWS))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_MESA_RADV))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_NVIDIA_PROPRIETARY))
+import Vulkan.Core12.Enums.DriverId (DriverId(DRIVER_ID_QUALCOMM_PROPRIETARY))
+import Vulkan.Core10.APIConstants (pattern MAX_DRIVER_INFO_SIZE)
+import Vulkan.Core10.APIConstants (pattern MAX_DRIVER_NAME_SIZE)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_AMD_PROPRIETARY_KHR"
+pattern DRIVER_ID_AMD_PROPRIETARY_KHR = DRIVER_ID_AMD_PROPRIETARY
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR"
+pattern DRIVER_ID_AMD_OPEN_SOURCE_KHR = DRIVER_ID_AMD_OPEN_SOURCE
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_MESA_RADV_KHR"
+pattern DRIVER_ID_MESA_RADV_KHR = DRIVER_ID_MESA_RADV
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR"
+pattern DRIVER_ID_NVIDIA_PROPRIETARY_KHR = DRIVER_ID_NVIDIA_PROPRIETARY
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR"
+pattern DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR = DRIVER_ID_INTEL_PROPRIETARY_WINDOWS
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR"
+pattern DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR"
+pattern DRIVER_ID_IMAGINATION_PROPRIETARY_KHR = DRIVER_ID_IMAGINATION_PROPRIETARY
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR"
+pattern DRIVER_ID_QUALCOMM_PROPRIETARY_KHR = DRIVER_ID_QUALCOMM_PROPRIETARY
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_ARM_PROPRIETARY_KHR"
+pattern DRIVER_ID_ARM_PROPRIETARY_KHR = DRIVER_ID_ARM_PROPRIETARY
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR"
+pattern DRIVER_ID_GOOGLE_SWIFTSHADER_KHR = DRIVER_ID_GOOGLE_SWIFTSHADER
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_GGP_PROPRIETARY_KHR"
+pattern DRIVER_ID_GGP_PROPRIETARY_KHR = DRIVER_ID_GGP_PROPRIETARY
+
+
+-- No documentation found for TopLevel "VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR"
+pattern DRIVER_ID_BROADCOM_PROPRIETARY_KHR = DRIVER_ID_BROADCOM_PROPRIETARY
+
+
+-- No documentation found for TopLevel "VK_MAX_DRIVER_NAME_SIZE_KHR"
+pattern MAX_DRIVER_NAME_SIZE_KHR = MAX_DRIVER_NAME_SIZE
+
+
+-- No documentation found for TopLevel "VK_MAX_DRIVER_INFO_SIZE_KHR"
+pattern MAX_DRIVER_INFO_SIZE_KHR = MAX_DRIVER_INFO_SIZE
+
+
+-- No documentation found for TopLevel "VkDriverIdKHR"
+type DriverIdKHR = DriverId
+
+
+-- No documentation found for TopLevel "VkConformanceVersionKHR"
+type ConformanceVersionKHR = ConformanceVersion
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceDriverPropertiesKHR"
+type PhysicalDeviceDriverPropertiesKHR = PhysicalDeviceDriverProperties
+
+
+type KHR_DRIVER_PROPERTIES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION"
+pattern KHR_DRIVER_PROPERTIES_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_DRIVER_PROPERTIES_SPEC_VERSION = 1
+
+
+type KHR_DRIVER_PROPERTIES_EXTENSION_NAME = "VK_KHR_driver_properties"
+
+-- No documentation found for TopLevel "VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME"
+pattern KHR_DRIVER_PROPERTIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_DRIVER_PROPERTIES_EXTENSION_NAME = "VK_KHR_driver_properties"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_fence.hs b/src/Vulkan/Extensions/VK_KHR_external_fence.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_fence.hs
@@ -0,0 +1,52 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_fence  ( pattern STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR
+                                                , pattern FENCE_IMPORT_TEMPORARY_BIT_KHR
+                                                , FenceImportFlagsKHR
+                                                , FenceImportFlagBitsKHR
+                                                , ExportFenceCreateInfoKHR
+                                                , KHR_EXTERNAL_FENCE_SPEC_VERSION
+                                                , pattern KHR_EXTERNAL_FENCE_SPEC_VERSION
+                                                , KHR_EXTERNAL_FENCE_EXTENSION_NAME
+                                                , pattern KHR_EXTERNAL_FENCE_EXTENSION_NAME
+                                                ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_fence (ExportFenceCreateInfo)
+import Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlagBits)
+import Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
+import Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
+import Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlagBits(FENCE_IMPORT_TEMPORARY_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_FENCE_IMPORT_TEMPORARY_BIT_KHR"
+pattern FENCE_IMPORT_TEMPORARY_BIT_KHR = FENCE_IMPORT_TEMPORARY_BIT
+
+
+-- No documentation found for TopLevel "VkFenceImportFlagsKHR"
+type FenceImportFlagsKHR = FenceImportFlags
+
+
+-- No documentation found for TopLevel "VkFenceImportFlagBitsKHR"
+type FenceImportFlagBitsKHR = FenceImportFlagBits
+
+
+-- No documentation found for TopLevel "VkExportFenceCreateInfoKHR"
+type ExportFenceCreateInfoKHR = ExportFenceCreateInfo
+
+
+type KHR_EXTERNAL_FENCE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_SPEC_VERSION"
+pattern KHR_EXTERNAL_FENCE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_FENCE_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_FENCE_EXTENSION_NAME = "VK_KHR_external_fence"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME"
+pattern KHR_EXTERNAL_FENCE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_FENCE_EXTENSION_NAME = "VK_KHR_external_fence"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_fence_capabilities.hs b/src/Vulkan/Extensions/VK_KHR_external_fence_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_fence_capabilities.hs
@@ -0,0 +1,123 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_fence_capabilities  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR
+                                                             , pattern STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR
+                                                             , pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR
+                                                             , pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR
+                                                             , pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR
+                                                             , pattern EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR
+                                                             , pattern EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR
+                                                             , pattern EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR
+                                                             , getPhysicalDeviceExternalFencePropertiesKHR
+                                                             , ExternalFenceHandleTypeFlagsKHR
+                                                             , ExternalFenceFeatureFlagsKHR
+                                                             , ExternalFenceHandleTypeFlagBitsKHR
+                                                             , ExternalFenceFeatureFlagBitsKHR
+                                                             , PhysicalDeviceExternalFenceInfoKHR
+                                                             , ExternalFencePropertiesKHR
+                                                             , KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION
+                                                             , pattern KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION
+                                                             , KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME
+                                                             , pattern KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME
+                                                             , PhysicalDeviceIDPropertiesKHR
+                                                             , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR
+                                                             , pattern LUID_SIZE_KHR
+                                                             ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (getPhysicalDeviceExternalFenceProperties)
+import Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlagBits)
+import Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlags)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (ExternalFenceProperties)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities (PhysicalDeviceExternalFenceInfo)
+import Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlags)
+import Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlagBits(EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT))
+import Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlags)
+import Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits (ExternalFenceFeatureFlagBits(EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT))
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits(EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT))
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits(EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT))
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits(EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT))
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits(EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO))
+import Vulkan.Extensions.VK_KHR_external_memory_capabilities (PhysicalDeviceIDPropertiesKHR)
+import Vulkan.Extensions.VK_KHR_external_memory_capabilities (pattern LUID_SIZE_KHR)
+import Vulkan.Extensions.VK_KHR_external_memory_capabilities (pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR)
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"
+pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"
+pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"
+pattern EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR"
+pattern EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR"
+pattern EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR"
+pattern EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT
+
+
+-- No documentation found for TopLevel "vkGetPhysicalDeviceExternalFencePropertiesKHR"
+getPhysicalDeviceExternalFencePropertiesKHR = getPhysicalDeviceExternalFenceProperties
+
+
+-- No documentation found for TopLevel "VkExternalFenceHandleTypeFlagsKHR"
+type ExternalFenceHandleTypeFlagsKHR = ExternalFenceHandleTypeFlags
+
+
+-- No documentation found for TopLevel "VkExternalFenceFeatureFlagsKHR"
+type ExternalFenceFeatureFlagsKHR = ExternalFenceFeatureFlags
+
+
+-- No documentation found for TopLevel "VkExternalFenceHandleTypeFlagBitsKHR"
+type ExternalFenceHandleTypeFlagBitsKHR = ExternalFenceHandleTypeFlagBits
+
+
+-- No documentation found for TopLevel "VkExternalFenceFeatureFlagBitsKHR"
+type ExternalFenceFeatureFlagBitsKHR = ExternalFenceFeatureFlagBits
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalFenceInfoKHR"
+type PhysicalDeviceExternalFenceInfoKHR = PhysicalDeviceExternalFenceInfo
+
+
+-- No documentation found for TopLevel "VkExternalFencePropertiesKHR"
+type ExternalFencePropertiesKHR = ExternalFenceProperties
+
+
+type KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION"
+pattern KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_fence_capabilities"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME"
+pattern KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_fence_capabilities"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_fence_fd.hs b/src/Vulkan/Extensions/VK_KHR_external_fence_fd.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_fence_fd.hs
@@ -0,0 +1,427 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_fence_fd  ( getFenceFdKHR
+                                                   , importFenceFdKHR
+                                                   , ImportFenceFdInfoKHR(..)
+                                                   , FenceGetFdInfoKHR(..)
+                                                   , KHR_EXTERNAL_FENCE_FD_SPEC_VERSION
+                                                   , pattern KHR_EXTERNAL_FENCE_FD_SPEC_VERSION
+                                                   , KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME
+                                                   , pattern KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME
+                                                   ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Foreign.C.Types (CInt(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CInt)
+import Foreign.C.Types (CInt(CInt))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetFenceFdKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkImportFenceFdKHR))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits)
+import Vulkan.Core10.Handles (Fence)
+import Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetFenceFdKHR
+  :: FunPtr (Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result) -> Ptr Device_T -> Ptr FenceGetFdInfoKHR -> Ptr CInt -> IO Result
+
+-- | vkGetFenceFdKHR - Get a POSIX file descriptor handle for a fence
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the fence being
+--     exported.
+--
+-- -   @pGetFdInfo@ is a pointer to a 'FenceGetFdInfoKHR' structure
+--     containing parameters of the export operation.
+--
+-- -   @pFd@ will return the file descriptor representing the fence
+--     payload.
+--
+-- = Description
+--
+-- Each call to 'getFenceFdKHR' /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
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT'
+-- and the fence is signaled at the time 'getFenceFdKHR' 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence State>.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'FenceGetFdInfoKHR'
+getFenceFdKHR :: forall io . MonadIO io => Device -> FenceGetFdInfoKHR -> io (("fd" ::: Int32))
+getFenceFdKHR device getFdInfo = liftIO . evalContT $ do
+  let vkGetFenceFdKHRPtr = pVkGetFenceFdKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetFenceFdKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetFenceFdKHR is null" Nothing Nothing
+  let vkGetFenceFdKHR' = mkVkGetFenceFdKHR vkGetFenceFdKHRPtr
+  pGetFdInfo <- ContT $ withCStruct (getFdInfo)
+  pPFd <- ContT $ bracket (callocBytes @CInt 4) free
+  r <- lift $ vkGetFenceFdKHR' (deviceHandle (device)) pGetFdInfo (pPFd)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pFd <- lift $ peek @CInt pPFd
+  pure $ (((\(CInt a) -> a) pFd))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkImportFenceFdKHR
+  :: FunPtr (Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result) -> Ptr Device_T -> Ptr ImportFenceFdInfoKHR -> IO Result
+
+-- | vkImportFenceFdKHR - Import a fence from a POSIX file descriptor
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the fence.
+--
+-- -   @pImportFenceFdInfo@ is a pointer to a 'ImportFenceFdInfoKHR'
+--     structure specifying the fence and import parameters.
+--
+-- = 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.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'ImportFenceFdInfoKHR'
+importFenceFdKHR :: forall io . MonadIO io => Device -> ImportFenceFdInfoKHR -> io ()
+importFenceFdKHR device importFenceFdInfo = liftIO . evalContT $ do
+  let vkImportFenceFdKHRPtr = pVkImportFenceFdKHR (deviceCmds (device :: Device))
+  lift $ unless (vkImportFenceFdKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkImportFenceFdKHR is null" Nothing Nothing
+  let vkImportFenceFdKHR' = mkVkImportFenceFdKHR vkImportFenceFdKHRPtr
+  pImportFenceFdInfo <- ContT $ withCStruct (importFenceFdInfo)
+  r <- lift $ vkImportFenceFdKHR' (deviceHandle (device)) pImportFenceFdInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkImportFenceFdInfoKHR - (None)
+--
+-- = Description
+--
+-- The handle types supported by @handleType@ are:
+--
+-- +------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+-- | Handle Type                                                                                    | Transference         | Permanence Supported  |
+-- +================================================================================================+======================+=======================+
+-- | 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT' | Reference            | Temporary,Permanent   |
+-- +------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+-- | 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT'   | Copy                 | Temporary             |
+-- +------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+--
+-- Handle Types Supported by 'ImportFenceFdInfoKHR'
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be a value included in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fence-handletypes-fd Handle Types Supported by >
+--     table
+--
+-- -   @fd@ /must/ obey any requirements listed for @handleType@ in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility external fence handle types compatibility>
+--
+-- If @handleType@ is
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.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 'Vulkan.Core10.Handles.Fence' 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 does not need to be waited for. It is consistent
+-- with the option for implementations to return a @-1@ file descriptor
+-- when exporting a
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT'
+-- from a 'Vulkan.Core10.Handles.Fence' which is signaled.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @fence@ /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits' values
+--
+-- -   @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+--     value
+--
+-- == Host Synchronization
+--
+-- -   Host access to @fence@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits',
+-- 'Vulkan.Core10.Handles.Fence',
+-- 'Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'importFenceFdKHR'
+data ImportFenceFdInfoKHR = ImportFenceFdInfoKHR
+  { -- | @fence@ is the fence into which the payload will be imported.
+    fence :: Fence
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits' specifying
+    -- additional parameters for the fence payload import operation.
+    flags :: FenceImportFlags
+  , -- | @handleType@ specifies the type of @fd@.
+    handleType :: ExternalFenceHandleTypeFlagBits
+  , -- | @fd@ is the external handle to import.
+    fd :: Int32
+  }
+  deriving (Typeable)
+deriving instance Show ImportFenceFdInfoKHR
+
+instance ToCStruct ImportFenceFdInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImportFenceFdInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Fence)) (fence)
+    poke ((p `plusPtr` 24 :: Ptr FenceImportFlags)) (flags)
+    poke ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits)) (handleType)
+    poke ((p `plusPtr` 32 :: Ptr CInt)) (CInt (fd))
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Fence)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr CInt)) (CInt (zero))
+    f
+
+instance FromCStruct ImportFenceFdInfoKHR where
+  peekCStruct p = do
+    fence <- peek @Fence ((p `plusPtr` 16 :: Ptr Fence))
+    flags <- peek @FenceImportFlags ((p `plusPtr` 24 :: Ptr FenceImportFlags))
+    handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits))
+    fd <- peek @CInt ((p `plusPtr` 32 :: Ptr CInt))
+    pure $ ImportFenceFdInfoKHR
+             fence flags handleType ((\(CInt a) -> a) fd)
+
+instance Storable ImportFenceFdInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImportFenceFdInfoKHR where
+  zero = ImportFenceFdInfoKHR
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkFenceGetFdInfoKHR - Structure describing a POSIX FD fence export
+-- operation
+--
+-- = Description
+--
+-- The properties of the file descriptor returned depend on the value of
+-- @handleType@. See
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+-- for a description of the properties of the defined external fence handle
+-- types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'::@handleTypes@
+--     when @fence@’s current payload was created
+--
+-- -   If @handleType@ refers to a handle type with copy payload
+--     transference semantics, @fence@ /must/ be signaled, or have an
+--     associated
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation>
+--     pending execution
+--
+-- -   @fence@ /must/ not currently have its payload replaced by an
+--     imported payload as described below in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence Payloads>
+--     unless that imported payload’s handle type was included in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties'::@exportFromImportedHandleTypes@
+--     for @handleType@
+--
+-- -   @handleType@ /must/ be defined as a POSIX file descriptor handle
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @fence@ /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits',
+-- 'Vulkan.Core10.Handles.Fence',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'getFenceFdKHR'
+data FenceGetFdInfoKHR = FenceGetFdInfoKHR
+  { -- | @fence@ is the fence from which state will be exported.
+    fence :: Fence
+  , -- | @handleType@ is the type of handle requested.
+    handleType :: ExternalFenceHandleTypeFlagBits
+  }
+  deriving (Typeable)
+deriving instance Show FenceGetFdInfoKHR
+
+instance ToCStruct FenceGetFdInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p FenceGetFdInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Fence)) (fence)
+    poke ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits)) (handleType)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Fence)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits)) (zero)
+    f
+
+instance FromCStruct FenceGetFdInfoKHR where
+  peekCStruct p = do
+    fence <- peek @Fence ((p `plusPtr` 16 :: Ptr Fence))
+    handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits))
+    pure $ FenceGetFdInfoKHR
+             fence handleType
+
+instance Storable FenceGetFdInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero FenceGetFdInfoKHR where
+  zero = FenceGetFdInfoKHR
+           zero
+           zero
+
+
+type KHR_EXTERNAL_FENCE_FD_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION"
+pattern KHR_EXTERNAL_FENCE_FD_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_FENCE_FD_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME = "VK_KHR_external_fence_fd"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME"
+pattern KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME = "VK_KHR_external_fence_fd"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_fence_fd.hs-boot b/src/Vulkan/Extensions/VK_KHR_external_fence_fd.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_fence_fd.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_fence_fd  ( FenceGetFdInfoKHR
+                                                   , ImportFenceFdInfoKHR
+                                                   ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data FenceGetFdInfoKHR
+
+instance ToCStruct FenceGetFdInfoKHR
+instance Show FenceGetFdInfoKHR
+
+instance FromCStruct FenceGetFdInfoKHR
+
+
+data ImportFenceFdInfoKHR
+
+instance ToCStruct ImportFenceFdInfoKHR
+instance Show ImportFenceFdInfoKHR
+
+instance FromCStruct ImportFenceFdInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs b/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
@@ -0,0 +1,537 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_fence_win32  ( getFenceWin32HandleKHR
+                                                      , importFenceWin32HandleKHR
+                                                      , ImportFenceWin32HandleInfoKHR(..)
+                                                      , ExportFenceWin32HandleInfoKHR(..)
+                                                      , FenceGetWin32HandleInfoKHR(..)
+                                                      , KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION
+                                                      , pattern KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION
+                                                      , KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME
+                                                      , pattern KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME
+                                                      , HANDLE
+                                                      , DWORD
+                                                      , LPCWSTR
+                                                      , SECURITY_ATTRIBUTES
+                                                      ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Extensions.WSITypes (DWORD)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetFenceWin32HandleKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkImportFenceWin32HandleKHR))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits (ExternalFenceHandleTypeFlagBits)
+import Vulkan.Core10.Handles (Fence)
+import Vulkan.Core11.Enums.FenceImportFlagBits (FenceImportFlags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Extensions.WSITypes (HANDLE)
+import Vulkan.Extensions.WSITypes (LPCWSTR)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (DWORD)
+import Vulkan.Extensions.WSITypes (HANDLE)
+import Vulkan.Extensions.WSITypes (LPCWSTR)
+import Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetFenceWin32HandleKHR
+  :: FunPtr (Ptr Device_T -> Ptr FenceGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result) -> Ptr Device_T -> Ptr FenceGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result
+
+-- | vkGetFenceWin32HandleKHR - Get a Windows HANDLE for a fence
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the fence being
+--     exported.
+--
+-- -   @pGetWin32HandleInfo@ is a pointer to a 'FenceGetWin32HandleInfoKHR'
+--     structure containing parameters of the export operation.
+--
+-- -   @pHandle@ will return the Windows handle representing the fence
+--     state.
+--
+-- = Description
+--
+-- For handle types defined as NT handles, the handles returned by
+-- 'getFenceWin32HandleKHR' 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence Payloads>.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'FenceGetWin32HandleInfoKHR'
+getFenceWin32HandleKHR :: forall io . MonadIO io => Device -> FenceGetWin32HandleInfoKHR -> io (HANDLE)
+getFenceWin32HandleKHR device getWin32HandleInfo = liftIO . evalContT $ do
+  let vkGetFenceWin32HandleKHRPtr = pVkGetFenceWin32HandleKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetFenceWin32HandleKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetFenceWin32HandleKHR is null" Nothing Nothing
+  let vkGetFenceWin32HandleKHR' = mkVkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHRPtr
+  pGetWin32HandleInfo <- ContT $ withCStruct (getWin32HandleInfo)
+  pPHandle <- ContT $ bracket (callocBytes @HANDLE 8) free
+  r <- lift $ vkGetFenceWin32HandleKHR' (deviceHandle (device)) pGetWin32HandleInfo (pPHandle)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pHandle <- lift $ peek @HANDLE pPHandle
+  pure $ (pHandle)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkImportFenceWin32HandleKHR
+  :: FunPtr (Ptr Device_T -> Ptr ImportFenceWin32HandleInfoKHR -> IO Result) -> Ptr Device_T -> Ptr ImportFenceWin32HandleInfoKHR -> IO Result
+
+-- | vkImportFenceWin32HandleKHR - Import a fence from a Windows HANDLE
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the fence.
+--
+-- -   @pImportFenceWin32HandleInfo@ is a pointer to a
+--     'ImportFenceWin32HandleInfoKHR' structure specifying the fence and
+--     import parameters.
+--
+-- = 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.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'ImportFenceWin32HandleInfoKHR'
+importFenceWin32HandleKHR :: forall io . MonadIO io => Device -> ImportFenceWin32HandleInfoKHR -> io ()
+importFenceWin32HandleKHR device importFenceWin32HandleInfo = liftIO . evalContT $ do
+  let vkImportFenceWin32HandleKHRPtr = pVkImportFenceWin32HandleKHR (deviceCmds (device :: Device))
+  lift $ unless (vkImportFenceWin32HandleKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkImportFenceWin32HandleKHR is null" Nothing Nothing
+  let vkImportFenceWin32HandleKHR' = mkVkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHRPtr
+  pImportFenceWin32HandleInfo <- ContT $ withCStruct (importFenceWin32HandleInfo)
+  r <- lift $ vkImportFenceWin32HandleKHR' (deviceHandle (device)) pImportFenceWin32HandleInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkImportFenceWin32HandleInfoKHR - (None)
+--
+-- = Description
+--
+-- The handle types supported by @handleType@ are:
+--
+-- +-------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+-- | Handle Type                                                                                           | Transference         | Permanence Supported  |
+-- +=======================================================================================================+======================+=======================+
+-- | 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT'     | Reference            | Temporary,Permanent   |
+-- +-------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+-- | 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' | Reference            | Temporary,Permanent   |
+-- +-------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+--
+-- Handle Types Supported by 'ImportFenceWin32HandleInfoKHR'
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be a value included in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fence-handletypes-win32 Handle Types Supported by >
+--     table
+--
+-- -   If @handleType@ is not
+--     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT',
+--     @name@ /must/ be @NULL@
+--
+-- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/
+--     name a valid synchronization primitive of the type specified by
+--     @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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility external fence handle types compatibility>
+--
+-- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for
+--     @handleType@ in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility external fence handle types compatibility>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @fence@ /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits' values
+--
+-- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+--     value
+--
+-- == Host Synchronization
+--
+-- -   Host access to @fence@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits',
+-- 'Vulkan.Core10.Handles.Fence',
+-- 'Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'importFenceWin32HandleKHR'
+data ImportFenceWin32HandleInfoKHR = ImportFenceWin32HandleInfoKHR
+  { -- | @fence@ is the fence into which the state will be imported.
+    fence :: Fence
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits' specifying
+    -- additional parameters for the fence payload import operation.
+    flags :: FenceImportFlags
+  , -- | @handleType@ specifies the type of @handle@.
+    handleType :: ExternalFenceHandleTypeFlagBits
+  , -- | @handle@ is the external handle to import, or @NULL@.
+    handle :: HANDLE
+  , -- | @name@ is a null-terminated UTF-16 string naming the underlying
+    -- synchronization primitive to import, or @NULL@.
+    name :: LPCWSTR
+  }
+  deriving (Typeable)
+deriving instance Show ImportFenceWin32HandleInfoKHR
+
+instance ToCStruct ImportFenceWin32HandleInfoKHR where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImportFenceWin32HandleInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Fence)) (fence)
+    poke ((p `plusPtr` 24 :: Ptr FenceImportFlags)) (flags)
+    poke ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits)) (handleType)
+    poke ((p `plusPtr` 32 :: Ptr HANDLE)) (handle)
+    poke ((p `plusPtr` 40 :: Ptr LPCWSTR)) (name)
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Fence)) (zero)
+    f
+
+instance FromCStruct ImportFenceWin32HandleInfoKHR where
+  peekCStruct p = do
+    fence <- peek @Fence ((p `plusPtr` 16 :: Ptr Fence))
+    flags <- peek @FenceImportFlags ((p `plusPtr` 24 :: Ptr FenceImportFlags))
+    handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 28 :: Ptr ExternalFenceHandleTypeFlagBits))
+    handle <- peek @HANDLE ((p `plusPtr` 32 :: Ptr HANDLE))
+    name <- peek @LPCWSTR ((p `plusPtr` 40 :: Ptr LPCWSTR))
+    pure $ ImportFenceWin32HandleInfoKHR
+             fence flags handleType handle name
+
+instance Storable ImportFenceWin32HandleInfoKHR where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImportFenceWin32HandleInfoKHR where
+  zero = ImportFenceWin32HandleInfoKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkExportFenceWin32HandleInfoKHR - Structure specifying additional
+-- attributes of Windows handles exported from a fence
+--
+-- = Description
+--
+-- If
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'
+-- is not present in the same @pNext@ chain, this structure is ignored.
+--
+-- If
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'
+-- is present in the @pNext@ chain of 'Vulkan.Core10.Fence.FenceCreateInfo'
+-- with a Windows @handleType@, but either 'ExportFenceWin32HandleInfoKHR'
+-- is not present in the @pNext@ chain, or if it is but @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:
+--
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
+--
+-- [1]
+--     <https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights>
+--
+-- == Valid Usage
+--
+-- -   If
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'::@handleTypes@
+--     does not include
+--     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT',
+--     a 'ExportFenceWin32HandleInfoKHR' structure /must/ not be included
+--     in the @pNext@ chain of 'Vulkan.Core10.Fence.FenceCreateInfo'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR'
+--
+-- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
+--     pointer to a valid 'Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExportFenceWin32HandleInfoKHR = ExportFenceWin32HandleInfoKHR
+  { -- | @pAttributes@ is a pointer to a Windows
+    -- 'Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' structure specifying
+    -- security attributes of the handle.
+    attributes :: Ptr SECURITY_ATTRIBUTES
+  , -- | @dwAccess@ is a 'Vulkan.Extensions.WSITypes.DWORD' specifying access
+    -- rights of the handle.
+    dwAccess :: DWORD
+  , -- | @name@ is a null-terminated UTF-16 string to associate with the
+    -- underlying synchronization primitive referenced by NT handles exported
+    -- from the created fence.
+    name :: LPCWSTR
+  }
+  deriving (Typeable)
+deriving instance Show ExportFenceWin32HandleInfoKHR
+
+instance ToCStruct ExportFenceWin32HandleInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExportFenceWin32HandleInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES))) (attributes)
+    poke ((p `plusPtr` 24 :: Ptr DWORD)) (dwAccess)
+    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (name)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr DWORD)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (zero)
+    f
+
+instance FromCStruct ExportFenceWin32HandleInfoKHR where
+  peekCStruct p = do
+    pAttributes <- peek @(Ptr SECURITY_ATTRIBUTES) ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES)))
+    dwAccess <- peek @DWORD ((p `plusPtr` 24 :: Ptr DWORD))
+    name <- peek @LPCWSTR ((p `plusPtr` 32 :: Ptr LPCWSTR))
+    pure $ ExportFenceWin32HandleInfoKHR
+             pAttributes dwAccess name
+
+instance Storable ExportFenceWin32HandleInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExportFenceWin32HandleInfoKHR where
+  zero = ExportFenceWin32HandleInfoKHR
+           zero
+           zero
+           zero
+
+
+-- | VkFenceGetWin32HandleInfoKHR - Structure describing a Win32 handle fence
+-- export operation
+--
+-- = Description
+--
+-- The properties of the handle returned depend on the value of
+-- @handleType@. See
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+-- for a description of the properties of the defined external fence handle
+-- types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'::@handleTypes@
+--     when the @fence@’s current payload was created
+--
+-- -   If @handleType@ is defined as an NT handle, 'getFenceWin32HandleKHR'
+--     /must/ be called no more than once for each valid unique combination
+--     of @fence@ and @handleType@
+--
+-- -   @fence@ /must/ not currently have its payload replaced by an
+--     imported payload as described below in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence Payloads>
+--     unless that imported payload’s handle type was included in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties'::@exportFromImportedHandleTypes@
+--     for @handleType@
+--
+-- -   If @handleType@ refers to a handle type with copy payload
+--     transference semantics, @fence@ /must/ be signaled, or have an
+--     associated
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation>
+--     pending execution
+--
+-- -   @handleType@ /must/ be defined as an NT handle or a global share
+--     handle
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @fence@ /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits',
+-- 'Vulkan.Core10.Handles.Fence',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getFenceWin32HandleKHR'
+data FenceGetWin32HandleInfoKHR = FenceGetWin32HandleInfoKHR
+  { -- | @fence@ is the fence from which state will be exported.
+    fence :: Fence
+  , -- | @handleType@ is the type of handle requested.
+    handleType :: ExternalFenceHandleTypeFlagBits
+  }
+  deriving (Typeable)
+deriving instance Show FenceGetWin32HandleInfoKHR
+
+instance ToCStruct FenceGetWin32HandleInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p FenceGetWin32HandleInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Fence)) (fence)
+    poke ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits)) (handleType)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Fence)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits)) (zero)
+    f
+
+instance FromCStruct FenceGetWin32HandleInfoKHR where
+  peekCStruct p = do
+    fence <- peek @Fence ((p `plusPtr` 16 :: Ptr Fence))
+    handleType <- peek @ExternalFenceHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalFenceHandleTypeFlagBits))
+    pure $ FenceGetWin32HandleInfoKHR
+             fence handleType
+
+instance Storable FenceGetWin32HandleInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero FenceGetWin32HandleInfoKHR where
+  zero = FenceGetWin32HandleInfoKHR
+           zero
+           zero
+
+
+type KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION"
+pattern KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME = "VK_KHR_external_fence_win32"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME"
+pattern KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME = "VK_KHR_external_fence_win32"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs-boot b/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_fence_win32  ( ExportFenceWin32HandleInfoKHR
+                                                      , FenceGetWin32HandleInfoKHR
+                                                      , ImportFenceWin32HandleInfoKHR
+                                                      ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExportFenceWin32HandleInfoKHR
+
+instance ToCStruct ExportFenceWin32HandleInfoKHR
+instance Show ExportFenceWin32HandleInfoKHR
+
+instance FromCStruct ExportFenceWin32HandleInfoKHR
+
+
+data FenceGetWin32HandleInfoKHR
+
+instance ToCStruct FenceGetWin32HandleInfoKHR
+instance Show FenceGetWin32HandleInfoKHR
+
+instance FromCStruct FenceGetWin32HandleInfoKHR
+
+
+data ImportFenceWin32HandleInfoKHR
+
+instance ToCStruct ImportFenceWin32HandleInfoKHR
+instance Show ImportFenceWin32HandleInfoKHR
+
+instance FromCStruct ImportFenceWin32HandleInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory.hs b/src/Vulkan/Extensions/VK_KHR_external_memory.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory.hs
@@ -0,0 +1,69 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_memory  ( pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR
+                                                 , pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR
+                                                 , pattern STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR
+                                                 , pattern ERROR_INVALID_EXTERNAL_HANDLE_KHR
+                                                 , pattern QUEUE_FAMILY_EXTERNAL_KHR
+                                                 , ExternalMemoryImageCreateInfoKHR
+                                                 , ExternalMemoryBufferCreateInfoKHR
+                                                 , ExportMemoryAllocateInfoKHR
+                                                 , KHR_EXTERNAL_MEMORY_SPEC_VERSION
+                                                 , pattern KHR_EXTERNAL_MEMORY_SPEC_VERSION
+                                                 , KHR_EXTERNAL_MEMORY_EXTENSION_NAME
+                                                 , pattern KHR_EXTERNAL_MEMORY_EXTENSION_NAME
+                                                 ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExportMemoryAllocateInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryBufferCreateInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory (ExternalMemoryImageCreateInfo)
+import Vulkan.Core10.Enums.Result (Result(ERROR_INVALID_EXTERNAL_HANDLE))
+import Vulkan.Core10.APIConstants (pattern QUEUE_FAMILY_EXTERNAL)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR"
+pattern STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO
+
+
+-- No documentation found for TopLevel "VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR"
+pattern ERROR_INVALID_EXTERNAL_HANDLE_KHR = ERROR_INVALID_EXTERNAL_HANDLE
+
+
+-- No documentation found for TopLevel "VK_QUEUE_FAMILY_EXTERNAL_KHR"
+pattern QUEUE_FAMILY_EXTERNAL_KHR = QUEUE_FAMILY_EXTERNAL
+
+
+-- No documentation found for TopLevel "VkExternalMemoryImageCreateInfoKHR"
+type ExternalMemoryImageCreateInfoKHR = ExternalMemoryImageCreateInfo
+
+
+-- No documentation found for TopLevel "VkExternalMemoryBufferCreateInfoKHR"
+type ExternalMemoryBufferCreateInfoKHR = ExternalMemoryBufferCreateInfo
+
+
+-- No documentation found for TopLevel "VkExportMemoryAllocateInfoKHR"
+type ExportMemoryAllocateInfoKHR = ExportMemoryAllocateInfo
+
+
+type KHR_EXTERNAL_MEMORY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION"
+pattern KHR_EXTERNAL_MEMORY_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_MEMORY_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_MEMORY_EXTENSION_NAME = "VK_KHR_external_memory"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME"
+pattern KHR_EXTERNAL_MEMORY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_MEMORY_EXTENSION_NAME = "VK_KHR_external_memory"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs b/src/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs
@@ -0,0 +1,193 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_memory_capabilities  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR
+                                                              , pattern STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR
+                                                              , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR
+                                                              , pattern STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR
+                                                              , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR
+                                                              , pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR
+                                                              , pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR
+                                                              , pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR
+                                                              , pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR
+                                                              , pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR
+                                                              , pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR
+                                                              , pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR
+                                                              , pattern EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR
+                                                              , pattern EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR
+                                                              , pattern EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR
+                                                              , getPhysicalDeviceExternalBufferPropertiesKHR
+                                                              , pattern LUID_SIZE_KHR
+                                                              , ExternalMemoryHandleTypeFlagsKHR
+                                                              , ExternalMemoryFeatureFlagsKHR
+                                                              , ExternalMemoryHandleTypeFlagBitsKHR
+                                                              , ExternalMemoryFeatureFlagBitsKHR
+                                                              , ExternalMemoryPropertiesKHR
+                                                              , PhysicalDeviceExternalImageFormatInfoKHR
+                                                              , ExternalImageFormatPropertiesKHR
+                                                              , PhysicalDeviceExternalBufferInfoKHR
+                                                              , ExternalBufferPropertiesKHR
+                                                              , PhysicalDeviceIDPropertiesKHR
+                                                              , KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION
+                                                              , pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION
+                                                              , KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
+                                                              , pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
+                                                              ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (getPhysicalDeviceExternalBufferProperties)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalBufferProperties)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalImageFormatProperties)
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlagBits)
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (ExternalMemoryProperties)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalBufferInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceExternalImageFormatInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities (PhysicalDeviceIDProperties)
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlagBits(EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT))
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlagBits(EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT))
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlags)
+import Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits (ExternalMemoryFeatureFlagBits(EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT))
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT))
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT))
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT))
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT))
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT))
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT))
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT))
+import Vulkan.Core10.APIConstants (pattern LUID_SIZE)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR"
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR"
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR"
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR"
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR"
+pattern EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR"
+pattern EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR"
+pattern EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT
+
+
+-- No documentation found for TopLevel "vkGetPhysicalDeviceExternalBufferPropertiesKHR"
+getPhysicalDeviceExternalBufferPropertiesKHR = getPhysicalDeviceExternalBufferProperties
+
+
+-- No documentation found for TopLevel "VK_LUID_SIZE_KHR"
+pattern LUID_SIZE_KHR = LUID_SIZE
+
+
+-- No documentation found for TopLevel "VkExternalMemoryHandleTypeFlagsKHR"
+type ExternalMemoryHandleTypeFlagsKHR = ExternalMemoryHandleTypeFlags
+
+
+-- No documentation found for TopLevel "VkExternalMemoryFeatureFlagsKHR"
+type ExternalMemoryFeatureFlagsKHR = ExternalMemoryFeatureFlags
+
+
+-- No documentation found for TopLevel "VkExternalMemoryHandleTypeFlagBitsKHR"
+type ExternalMemoryHandleTypeFlagBitsKHR = ExternalMemoryHandleTypeFlagBits
+
+
+-- No documentation found for TopLevel "VkExternalMemoryFeatureFlagBitsKHR"
+type ExternalMemoryFeatureFlagBitsKHR = ExternalMemoryFeatureFlagBits
+
+
+-- No documentation found for TopLevel "VkExternalMemoryPropertiesKHR"
+type ExternalMemoryPropertiesKHR = ExternalMemoryProperties
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalImageFormatInfoKHR"
+type PhysicalDeviceExternalImageFormatInfoKHR = PhysicalDeviceExternalImageFormatInfo
+
+
+-- No documentation found for TopLevel "VkExternalImageFormatPropertiesKHR"
+type ExternalImageFormatPropertiesKHR = ExternalImageFormatProperties
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalBufferInfoKHR"
+type PhysicalDeviceExternalBufferInfoKHR = PhysicalDeviceExternalBufferInfo
+
+
+-- No documentation found for TopLevel "VkExternalBufferPropertiesKHR"
+type ExternalBufferPropertiesKHR = ExternalBufferProperties
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceIDPropertiesKHR"
+type PhysicalDeviceIDPropertiesKHR = PhysicalDeviceIDProperties
+
+
+type KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION"
+pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_memory_capabilities"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME"
+pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_memory_capabilities"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs b/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
@@ -0,0 +1,405 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_memory_fd  ( getMemoryFdKHR
+                                                    , getMemoryFdPropertiesKHR
+                                                    , ImportMemoryFdInfoKHR(..)
+                                                    , MemoryFdPropertiesKHR(..)
+                                                    , MemoryGetFdInfoKHR(..)
+                                                    , KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION
+                                                    , pattern KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION
+                                                    , KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME
+                                                    , pattern KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME
+                                                    ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Foreign.C.Types (CInt(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CInt)
+import Foreign.C.Types (CInt(CInt))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetMemoryFdKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetMemoryFdPropertiesKHR))
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetMemoryFdKHR
+  :: FunPtr (Ptr Device_T -> Ptr MemoryGetFdInfoKHR -> Ptr CInt -> IO Result) -> Ptr Device_T -> Ptr MemoryGetFdInfoKHR -> Ptr CInt -> IO Result
+
+-- | vkGetMemoryFdKHR - Get a POSIX file descriptor for a memory object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the device memory being
+--     exported.
+--
+-- -   @pGetFdInfo@ is a pointer to a 'MemoryGetFdInfoKHR' structure
+--     containing parameters of the export operation.
+--
+-- -   @pFd@ will return a file descriptor representing the underlying
+--     resources of the device memory object.
+--
+-- = Description
+--
+-- Each call to 'getMemoryFdKHR' /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.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'MemoryGetFdInfoKHR'
+getMemoryFdKHR :: forall io . MonadIO io => Device -> MemoryGetFdInfoKHR -> io (("fd" ::: Int32))
+getMemoryFdKHR device getFdInfo = liftIO . evalContT $ do
+  let vkGetMemoryFdKHRPtr = pVkGetMemoryFdKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetMemoryFdKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetMemoryFdKHR is null" Nothing Nothing
+  let vkGetMemoryFdKHR' = mkVkGetMemoryFdKHR vkGetMemoryFdKHRPtr
+  pGetFdInfo <- ContT $ withCStruct (getFdInfo)
+  pPFd <- ContT $ bracket (callocBytes @CInt 4) free
+  r <- lift $ vkGetMemoryFdKHR' (deviceHandle (device)) pGetFdInfo (pPFd)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pFd <- lift $ peek @CInt pPFd
+  pure $ (((\(CInt a) -> a) pFd))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetMemoryFdPropertiesKHR
+  :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> CInt -> Ptr MemoryFdPropertiesKHR -> IO Result) -> Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> CInt -> Ptr MemoryFdPropertiesKHR -> IO Result
+
+-- | vkGetMemoryFdPropertiesKHR - Get Properties of External Memory File
+-- Descriptors
+--
+-- = 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@ is a pointer to a 'MemoryFdPropertiesKHR'
+--     structure in which the properties of the handle @fd@ are returned.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'MemoryFdPropertiesKHR'
+getMemoryFdPropertiesKHR :: forall io . MonadIO io => Device -> ExternalMemoryHandleTypeFlagBits -> ("fd" ::: Int32) -> io (MemoryFdPropertiesKHR)
+getMemoryFdPropertiesKHR device handleType fd = liftIO . evalContT $ do
+  let vkGetMemoryFdPropertiesKHRPtr = pVkGetMemoryFdPropertiesKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetMemoryFdPropertiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetMemoryFdPropertiesKHR is null" Nothing Nothing
+  let vkGetMemoryFdPropertiesKHR' = mkVkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHRPtr
+  pPMemoryFdProperties <- ContT (withZeroCStruct @MemoryFdPropertiesKHR)
+  r <- lift $ vkGetMemoryFdPropertiesKHR' (deviceHandle (device)) (handleType) (CInt (fd)) (pPMemoryFdProperties)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pMemoryFdProperties <- lift $ peekCStruct @MemoryFdPropertiesKHR pPMemoryFdProperties
+  pure $ (pMemoryFdProperties)
+
+
+-- | VkImportMemoryFdInfoKHR - import memory created on the same physical
+-- device from a file descriptor
+--
+-- = 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
+-- 'Vulkan.Core10.Handles.DeviceMemory' object.
+--
+-- == Valid Usage
+--
+-- -   If @handleType@ is not @0@, it /must/ be supported for import, as
+--     reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'
+--
+-- -   The memory from which @fd@ was exported /must/ have been created on
+--     the same underlying physical device as @device@
+--
+-- -   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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility>
+--
+-- -   @fd@ /must/ obey any requirements listed for @handleType@ in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility external memory handle types compatibility>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR'
+--
+-- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImportMemoryFdInfoKHR = ImportMemoryFdInfoKHR
+  { -- | @handleType@ specifies the handle type of @fd@.
+    handleType :: ExternalMemoryHandleTypeFlagBits
+  , -- | @fd@ is the external handle to import.
+    fd :: Int32
+  }
+  deriving (Typeable)
+deriving instance Show ImportMemoryFdInfoKHR
+
+instance ToCStruct ImportMemoryFdInfoKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImportMemoryFdInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
+    poke ((p `plusPtr` 20 :: Ptr CInt)) (CInt (fd))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr CInt)) (CInt (zero))
+    f
+
+instance FromCStruct ImportMemoryFdInfoKHR where
+  peekCStruct p = do
+    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits))
+    fd <- peek @CInt ((p `plusPtr` 20 :: Ptr CInt))
+    pure $ ImportMemoryFdInfoKHR
+             handleType ((\(CInt a) -> a) fd)
+
+instance Storable ImportMemoryFdInfoKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImportMemoryFdInfoKHR where
+  zero = ImportMemoryFdInfoKHR
+           zero
+           zero
+
+
+-- | VkMemoryFdPropertiesKHR - Properties of External Memory File Descriptors
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getMemoryFdPropertiesKHR'
+data MemoryFdPropertiesKHR = MemoryFdPropertiesKHR
+  { -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
+    -- type which the specified file descriptor /can/ be imported as.
+    memoryTypeBits :: Word32 }
+  deriving (Typeable)
+deriving instance Show MemoryFdPropertiesKHR
+
+instance ToCStruct MemoryFdPropertiesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryFdPropertiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (memoryTypeBits)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct MemoryFdPropertiesKHR where
+  peekCStruct p = do
+    memoryTypeBits <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ MemoryFdPropertiesKHR
+             memoryTypeBits
+
+instance Storable MemoryFdPropertiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryFdPropertiesKHR where
+  zero = MemoryFdPropertiesKHR
+           zero
+
+
+-- | VkMemoryGetFdInfoKHR - Structure describing a POSIX FD semaphore export
+-- operation
+--
+-- = Description
+--
+-- The properties of the file descriptor exported depend on the value of
+-- @handleType@. See
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+-- for a description of the properties of the defined external memory
+-- handle types.
+--
+-- Note
+--
+-- The size of the exported file /may/ be larger than the size requested by
+-- 'Vulkan.Core10.Memory.MemoryAllocateInfo'::allocationSize. If
+-- @handleType@ is
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT',
+-- then the application /can/ query the file’s actual size with
+-- <man:lseek(2) lseek(2)>.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'getMemoryFdKHR'
+data MemoryGetFdInfoKHR = MemoryGetFdInfoKHR
+  { -- | @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory' handle
+    memory :: DeviceMemory
+  , -- | @handleType@ /must/ be a valid
+    -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+    -- value
+    handleType :: ExternalMemoryHandleTypeFlagBits
+  }
+  deriving (Typeable)
+deriving instance Show MemoryGetFdInfoKHR
+
+instance ToCStruct MemoryGetFdInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryGetFdInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
+    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (zero)
+    f
+
+instance FromCStruct MemoryGetFdInfoKHR where
+  peekCStruct p = do
+    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
+    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits))
+    pure $ MemoryGetFdInfoKHR
+             memory handleType
+
+instance Storable MemoryGetFdInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryGetFdInfoKHR where
+  zero = MemoryGetFdInfoKHR
+           zero
+           zero
+
+
+type KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION"
+pattern KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME = "VK_KHR_external_memory_fd"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME"
+pattern KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME = "VK_KHR_external_memory_fd"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs-boot b/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_memory_fd  ( ImportMemoryFdInfoKHR
+                                                    , MemoryFdPropertiesKHR
+                                                    , MemoryGetFdInfoKHR
+                                                    ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ImportMemoryFdInfoKHR
+
+instance ToCStruct ImportMemoryFdInfoKHR
+instance Show ImportMemoryFdInfoKHR
+
+instance FromCStruct ImportMemoryFdInfoKHR
+
+
+data MemoryFdPropertiesKHR
+
+instance ToCStruct MemoryFdPropertiesKHR
+instance Show MemoryFdPropertiesKHR
+
+instance FromCStruct MemoryFdPropertiesKHR
+
+
+data MemoryGetFdInfoKHR
+
+instance ToCStruct MemoryGetFdInfoKHR
+instance Show MemoryGetFdInfoKHR
+
+instance FromCStruct MemoryGetFdInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs b/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
@@ -0,0 +1,567 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_memory_win32  ( getMemoryWin32HandleKHR
+                                                       , getMemoryWin32HandlePropertiesKHR
+                                                       , ImportMemoryWin32HandleInfoKHR(..)
+                                                       , ExportMemoryWin32HandleInfoKHR(..)
+                                                       , MemoryWin32HandlePropertiesKHR(..)
+                                                       , MemoryGetWin32HandleInfoKHR(..)
+                                                       , KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION
+                                                       , pattern KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION
+                                                       , KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME
+                                                       , pattern KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME
+                                                       , HANDLE
+                                                       , DWORD
+                                                       , LPCWSTR
+                                                       , SECURITY_ATTRIBUTES
+                                                       ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Extensions.WSITypes (DWORD)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetMemoryWin32HandleKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetMemoryWin32HandlePropertiesKHR))
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits)
+import Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlagBits(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Extensions.WSITypes (HANDLE)
+import Vulkan.Extensions.WSITypes (LPCWSTR)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (DWORD)
+import Vulkan.Extensions.WSITypes (HANDLE)
+import Vulkan.Extensions.WSITypes (LPCWSTR)
+import Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetMemoryWin32HandleKHR
+  :: FunPtr (Ptr Device_T -> Ptr MemoryGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result) -> Ptr Device_T -> Ptr MemoryGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result
+
+-- | vkGetMemoryWin32HandleKHR - Get a Windows HANDLE for a memory object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the device memory being
+--     exported.
+--
+-- -   @pGetWin32HandleInfo@ is a pointer to a
+--     'MemoryGetWin32HandleInfoKHR' structure containing parameters of the
+--     export operation.
+--
+-- -   @pHandle@ will return the Windows handle representing the underlying
+--     resources of the device memory object.
+--
+-- = Description
+--
+-- For handle types defined as NT handles, the handles returned by
+-- 'getMemoryWin32HandleKHR' 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.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'MemoryGetWin32HandleInfoKHR'
+getMemoryWin32HandleKHR :: forall io . MonadIO io => Device -> MemoryGetWin32HandleInfoKHR -> io (HANDLE)
+getMemoryWin32HandleKHR device getWin32HandleInfo = liftIO . evalContT $ do
+  let vkGetMemoryWin32HandleKHRPtr = pVkGetMemoryWin32HandleKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetMemoryWin32HandleKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetMemoryWin32HandleKHR is null" Nothing Nothing
+  let vkGetMemoryWin32HandleKHR' = mkVkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHRPtr
+  pGetWin32HandleInfo <- ContT $ withCStruct (getWin32HandleInfo)
+  pPHandle <- ContT $ bracket (callocBytes @HANDLE 8) free
+  r <- lift $ vkGetMemoryWin32HandleKHR' (deviceHandle (device)) pGetWin32HandleInfo (pPHandle)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pHandle <- lift $ peek @HANDLE pPHandle
+  pure $ (pHandle)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetMemoryWin32HandlePropertiesKHR
+  :: FunPtr (Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> HANDLE -> Ptr MemoryWin32HandlePropertiesKHR -> IO Result) -> Ptr Device_T -> ExternalMemoryHandleTypeFlagBits -> HANDLE -> Ptr MemoryWin32HandlePropertiesKHR -> IO Result
+
+-- | vkGetMemoryWin32HandlePropertiesKHR - Get Properties of External Memory
+-- Win32 Handles
+--
+-- = 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@.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'MemoryWin32HandlePropertiesKHR'
+getMemoryWin32HandlePropertiesKHR :: forall io . MonadIO io => Device -> ExternalMemoryHandleTypeFlagBits -> HANDLE -> io (MemoryWin32HandlePropertiesKHR)
+getMemoryWin32HandlePropertiesKHR device handleType handle = liftIO . evalContT $ do
+  let vkGetMemoryWin32HandlePropertiesKHRPtr = pVkGetMemoryWin32HandlePropertiesKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetMemoryWin32HandlePropertiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetMemoryWin32HandlePropertiesKHR is null" Nothing Nothing
+  let vkGetMemoryWin32HandlePropertiesKHR' = mkVkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHRPtr
+  pPMemoryWin32HandleProperties <- ContT (withZeroCStruct @MemoryWin32HandlePropertiesKHR)
+  r <- lift $ vkGetMemoryWin32HandlePropertiesKHR' (deviceHandle (device)) (handleType) (handle) (pPMemoryWin32HandleProperties)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pMemoryWin32HandleProperties <- lift $ peekCStruct @MemoryWin32HandlePropertiesKHR pPMemoryWin32HandleProperties
+  pure $ (pMemoryWin32HandleProperties)
+
+
+-- | VkImportMemoryWin32HandleInfoKHR - import Win32 memory created on the
+-- same physical device
+--
+-- = 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
+-- 'Vulkan.Core10.Handles.DeviceMemory' object.
+--
+-- == Valid Usage
+--
+-- -   If @handleType@ is not @0@, it /must/ be supported for import, as
+--     reported by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties'
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties'
+--
+-- -   The memory from which @handle@ was exported, or the memory named by
+--     @name@ /must/ have been created on the same underlying physical
+--     device as @device@
+--
+-- -   If @handleType@ is not @0@, it /must/ be defined as an NT handle or
+--     a global share handle
+--
+-- -   If @handleType@ is not
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
+--     or
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT',
+--     @name@ /must/ be @NULL@
+--
+-- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/
+--     name a valid memory resource of the type specified by @handleType@
+--
+-- -   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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility external memory handle types compatibility>
+--
+-- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for
+--     @handleType@ in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility external memory handle types compatibility>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR'
+--
+-- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImportMemoryWin32HandleInfoKHR = ImportMemoryWin32HandleInfoKHR
+  { -- | @handleType@ specifies the type of @handle@ or @name@.
+    handleType :: ExternalMemoryHandleTypeFlagBits
+  , -- | @handle@ is the external handle to import, or @NULL@.
+    handle :: HANDLE
+  , -- | @name@ is a null-terminated UTF-16 string naming the underlying memory
+    -- resource to import, or @NULL@.
+    name :: LPCWSTR
+  }
+  deriving (Typeable)
+deriving instance Show ImportMemoryWin32HandleInfoKHR
+
+instance ToCStruct ImportMemoryWin32HandleInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImportMemoryWin32HandleInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
+    poke ((p `plusPtr` 24 :: Ptr HANDLE)) (handle)
+    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (name)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct ImportMemoryWin32HandleInfoKHR where
+  peekCStruct p = do
+    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagBits))
+    handle <- peek @HANDLE ((p `plusPtr` 24 :: Ptr HANDLE))
+    name <- peek @LPCWSTR ((p `plusPtr` 32 :: Ptr LPCWSTR))
+    pure $ ImportMemoryWin32HandleInfoKHR
+             handleType handle name
+
+instance Storable ImportMemoryWin32HandleInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImportMemoryWin32HandleInfoKHR where
+  zero = ImportMemoryWin32HandleInfoKHR
+           zero
+           zero
+           zero
+
+
+-- | VkExportMemoryWin32HandleInfoKHR - Structure specifying additional
+-- attributes of Windows handles exported from a memory
+--
+-- = Description
+--
+-- If
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
+-- is not present in the same @pNext@ chain, this structure is ignored.
+--
+-- If
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'
+-- is present in the @pNext@ chain of
+-- 'Vulkan.Core10.Memory.MemoryAllocateInfo' with a Windows @handleType@,
+-- but either 'ExportMemoryWin32HandleInfoKHR' is not present in the
+-- @pNext@ chain, or if it is but @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 used depend
+-- on the handle type.
+--
+-- For handles of the following types:
+--
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT'
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT'
+--
+-- The implementation /must/ ensure the access rights allow read and write
+-- access to the memory.
+--
+-- For handles of the following types:
+--
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT'
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT'
+--
+-- The access rights /must/ be:
+--
+-- @GENERIC_ALL@
+--
+-- [1]
+--     <https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights>
+--
+-- == Valid Usage
+--
+-- -   If
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+--     does not include
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',
+--     or
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT',
+--     a 'ExportMemoryWin32HandleInfoKHR' structure /must/ not be included
+--     in the @pNext@ chain of 'Vulkan.Core10.Memory.MemoryAllocateInfo'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR'
+--
+-- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
+--     pointer to a valid 'Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExportMemoryWin32HandleInfoKHR = ExportMemoryWin32HandleInfoKHR
+  { -- | @pAttributes@ is a pointer to a Windows
+    -- 'Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' structure specifying
+    -- security attributes of the handle.
+    attributes :: Ptr SECURITY_ATTRIBUTES
+  , -- | @dwAccess@ is a 'Vulkan.Extensions.WSITypes.DWORD' specifying access
+    -- rights of the handle.
+    dwAccess :: DWORD
+  , -- | @name@ is a null-terminated UTF-16 string to associate with the
+    -- underlying resource referenced by NT handles exported from the created
+    -- memory.
+    name :: LPCWSTR
+  }
+  deriving (Typeable)
+deriving instance Show ExportMemoryWin32HandleInfoKHR
+
+instance ToCStruct ExportMemoryWin32HandleInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExportMemoryWin32HandleInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES))) (attributes)
+    poke ((p `plusPtr` 24 :: Ptr DWORD)) (dwAccess)
+    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (name)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr DWORD)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (zero)
+    f
+
+instance FromCStruct ExportMemoryWin32HandleInfoKHR where
+  peekCStruct p = do
+    pAttributes <- peek @(Ptr SECURITY_ATTRIBUTES) ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES)))
+    dwAccess <- peek @DWORD ((p `plusPtr` 24 :: Ptr DWORD))
+    name <- peek @LPCWSTR ((p `plusPtr` 32 :: Ptr LPCWSTR))
+    pure $ ExportMemoryWin32HandleInfoKHR
+             pAttributes dwAccess name
+
+instance Storable ExportMemoryWin32HandleInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExportMemoryWin32HandleInfoKHR where
+  zero = ExportMemoryWin32HandleInfoKHR
+           zero
+           zero
+           zero
+
+
+-- | VkMemoryWin32HandlePropertiesKHR - Properties of External Memory Windows
+-- Handles
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getMemoryWin32HandlePropertiesKHR'
+data MemoryWin32HandlePropertiesKHR = MemoryWin32HandlePropertiesKHR
+  { -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
+    -- type which the specified windows handle /can/ be imported as.
+    memoryTypeBits :: Word32 }
+  deriving (Typeable)
+deriving instance Show MemoryWin32HandlePropertiesKHR
+
+instance ToCStruct MemoryWin32HandlePropertiesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryWin32HandlePropertiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (memoryTypeBits)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct MemoryWin32HandlePropertiesKHR where
+  peekCStruct p = do
+    memoryTypeBits <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ MemoryWin32HandlePropertiesKHR
+             memoryTypeBits
+
+instance Storable MemoryWin32HandlePropertiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryWin32HandlePropertiesKHR where
+  zero = MemoryWin32HandlePropertiesKHR
+           zero
+
+
+-- | VkMemoryGetWin32HandleInfoKHR - Structure describing a Win32 handle
+-- semaphore export operation
+--
+-- = Description
+--
+-- The properties of the handle returned depend on the value of
+-- @handleType@. See
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+-- for a description of the properties of the defined external memory
+-- handle types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
+--     when @memory@ was created
+--
+-- -   If @handleType@ is defined as an NT handle,
+--     'getMemoryWin32HandleKHR' /must/ be called no more than once for
+--     each valid unique combination of @memory@ and @handleType@
+--
+-- -   @handleType@ /must/ be defined as an NT handle or a global share
+--     handle
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getMemoryWin32HandleKHR'
+data MemoryGetWin32HandleInfoKHR = MemoryGetWin32HandleInfoKHR
+  { -- | @memory@ is the memory object from which the handle will be exported.
+    memory :: DeviceMemory
+  , -- | @handleType@ is the type of handle requested.
+    handleType :: ExternalMemoryHandleTypeFlagBits
+  }
+  deriving (Typeable)
+deriving instance Show MemoryGetWin32HandleInfoKHR
+
+instance ToCStruct MemoryGetWin32HandleInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MemoryGetWin32HandleInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (memory)
+    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (handleType)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceMemory)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits)) (zero)
+    f
+
+instance FromCStruct MemoryGetWin32HandleInfoKHR where
+  peekCStruct p = do
+    memory <- peek @DeviceMemory ((p `plusPtr` 16 :: Ptr DeviceMemory))
+    handleType <- peek @ExternalMemoryHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalMemoryHandleTypeFlagBits))
+    pure $ MemoryGetWin32HandleInfoKHR
+             memory handleType
+
+instance Storable MemoryGetWin32HandleInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MemoryGetWin32HandleInfoKHR where
+  zero = MemoryGetWin32HandleInfoKHR
+           zero
+           zero
+
+
+type KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION"
+pattern KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_KHR_external_memory_win32"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME"
+pattern KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_KHR_external_memory_win32"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs-boot b/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs-boot
@@ -0,0 +1,41 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_memory_win32  ( ExportMemoryWin32HandleInfoKHR
+                                                       , ImportMemoryWin32HandleInfoKHR
+                                                       , MemoryGetWin32HandleInfoKHR
+                                                       , MemoryWin32HandlePropertiesKHR
+                                                       ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExportMemoryWin32HandleInfoKHR
+
+instance ToCStruct ExportMemoryWin32HandleInfoKHR
+instance Show ExportMemoryWin32HandleInfoKHR
+
+instance FromCStruct ExportMemoryWin32HandleInfoKHR
+
+
+data ImportMemoryWin32HandleInfoKHR
+
+instance ToCStruct ImportMemoryWin32HandleInfoKHR
+instance Show ImportMemoryWin32HandleInfoKHR
+
+instance FromCStruct ImportMemoryWin32HandleInfoKHR
+
+
+data MemoryGetWin32HandleInfoKHR
+
+instance ToCStruct MemoryGetWin32HandleInfoKHR
+instance Show MemoryGetWin32HandleInfoKHR
+
+instance FromCStruct MemoryGetWin32HandleInfoKHR
+
+
+data MemoryWin32HandlePropertiesKHR
+
+instance ToCStruct MemoryWin32HandlePropertiesKHR
+instance Show MemoryWin32HandlePropertiesKHR
+
+instance FromCStruct MemoryWin32HandlePropertiesKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_semaphore.hs b/src/Vulkan/Extensions/VK_KHR_external_semaphore.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_semaphore.hs
@@ -0,0 +1,52 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_semaphore  ( pattern STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR
+                                                    , pattern SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR
+                                                    , SemaphoreImportFlagsKHR
+                                                    , SemaphoreImportFlagBitsKHR
+                                                    , ExportSemaphoreCreateInfoKHR
+                                                    , KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION
+                                                    , pattern KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION
+                                                    , KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME
+                                                    , pattern KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME
+                                                    ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore (ExportSemaphoreCreateInfo)
+import Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlagBits)
+import Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlags)
+import Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlags)
+import Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlagBits(SEMAPHORE_IMPORT_TEMPORARY_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR"
+pattern SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = SEMAPHORE_IMPORT_TEMPORARY_BIT
+
+
+-- No documentation found for TopLevel "VkSemaphoreImportFlagsKHR"
+type SemaphoreImportFlagsKHR = SemaphoreImportFlags
+
+
+-- No documentation found for TopLevel "VkSemaphoreImportFlagBitsKHR"
+type SemaphoreImportFlagBitsKHR = SemaphoreImportFlagBits
+
+
+-- No documentation found for TopLevel "VkExportSemaphoreCreateInfoKHR"
+type ExportSemaphoreCreateInfoKHR = ExportSemaphoreCreateInfo
+
+
+type KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION"
+pattern KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME = "VK_KHR_external_semaphore"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME"
+pattern KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME = "VK_KHR_external_semaphore"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_semaphore_capabilities.hs b/src/Vulkan/Extensions/VK_KHR_external_semaphore_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_semaphore_capabilities.hs
@@ -0,0 +1,130 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_semaphore_capabilities  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR
+                                                                 , pattern STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR
+                                                                 , pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR
+                                                                 , pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR
+                                                                 , pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR
+                                                                 , pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR
+                                                                 , pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR
+                                                                 , pattern EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR
+                                                                 , pattern EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR
+                                                                 , getPhysicalDeviceExternalSemaphorePropertiesKHR
+                                                                 , ExternalSemaphoreHandleTypeFlagsKHR
+                                                                 , ExternalSemaphoreFeatureFlagsKHR
+                                                                 , ExternalSemaphoreHandleTypeFlagBitsKHR
+                                                                 , ExternalSemaphoreFeatureFlagBitsKHR
+                                                                 , PhysicalDeviceExternalSemaphoreInfoKHR
+                                                                 , ExternalSemaphorePropertiesKHR
+                                                                 , KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION
+                                                                 , pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION
+                                                                 , KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME
+                                                                 , pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME
+                                                                 , PhysicalDeviceIDPropertiesKHR
+                                                                 , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR
+                                                                 , pattern LUID_SIZE_KHR
+                                                                 ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (getPhysicalDeviceExternalSemaphoreProperties)
+import Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlagBits)
+import Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlags)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (ExternalSemaphoreProperties)
+import Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities (PhysicalDeviceExternalSemaphoreInfo)
+import Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlags)
+import Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlagBits(EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT))
+import Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlags)
+import Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits (ExternalSemaphoreFeatureFlagBits(EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT))
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT))
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT))
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT))
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT))
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits(EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO))
+import Vulkan.Extensions.VK_KHR_external_memory_capabilities (PhysicalDeviceIDPropertiesKHR)
+import Vulkan.Extensions.VK_KHR_external_memory_capabilities (pattern LUID_SIZE_KHR)
+import Vulkan.Extensions.VK_KHR_external_memory_capabilities (pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR)
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"
+pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"
+pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"
+pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR"
+pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR"
+pattern EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR"
+pattern EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT
+
+
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR"
+pattern EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT
+
+
+-- No documentation found for TopLevel "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"
+getPhysicalDeviceExternalSemaphorePropertiesKHR = getPhysicalDeviceExternalSemaphoreProperties
+
+
+-- No documentation found for TopLevel "VkExternalSemaphoreHandleTypeFlagsKHR"
+type ExternalSemaphoreHandleTypeFlagsKHR = ExternalSemaphoreHandleTypeFlags
+
+
+-- No documentation found for TopLevel "VkExternalSemaphoreFeatureFlagsKHR"
+type ExternalSemaphoreFeatureFlagsKHR = ExternalSemaphoreFeatureFlags
+
+
+-- No documentation found for TopLevel "VkExternalSemaphoreHandleTypeFlagBitsKHR"
+type ExternalSemaphoreHandleTypeFlagBitsKHR = ExternalSemaphoreHandleTypeFlagBits
+
+
+-- No documentation found for TopLevel "VkExternalSemaphoreFeatureFlagBitsKHR"
+type ExternalSemaphoreFeatureFlagBitsKHR = ExternalSemaphoreFeatureFlagBits
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalSemaphoreInfoKHR"
+type PhysicalDeviceExternalSemaphoreInfoKHR = PhysicalDeviceExternalSemaphoreInfo
+
+
+-- No documentation found for TopLevel "VkExternalSemaphorePropertiesKHR"
+type ExternalSemaphorePropertiesKHR = ExternalSemaphoreProperties
+
+
+type KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION"
+pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_semaphore_capabilities"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME"
+pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_semaphore_capabilities"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs b/src/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs
@@ -0,0 +1,446 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_semaphore_fd  ( getSemaphoreFdKHR
+                                                       , importSemaphoreFdKHR
+                                                       , ImportSemaphoreFdInfoKHR(..)
+                                                       , SemaphoreGetFdInfoKHR(..)
+                                                       , KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION
+                                                       , pattern KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION
+                                                       , KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME
+                                                       , pattern KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME
+                                                       ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Foreign.C.Types (CInt(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CInt)
+import Foreign.C.Types (CInt(CInt))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetSemaphoreFdKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkImportSemaphoreFdKHR))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Handles (Semaphore)
+import Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetSemaphoreFdKHR
+  :: FunPtr (Ptr Device_T -> Ptr SemaphoreGetFdInfoKHR -> Ptr CInt -> IO Result) -> Ptr Device_T -> Ptr SemaphoreGetFdInfoKHR -> Ptr CInt -> IO Result
+
+-- | vkGetSemaphoreFdKHR - Get a POSIX file descriptor handle for a semaphore
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the semaphore being
+--     exported.
+--
+-- -   @pGetFdInfo@ is a pointer to a 'SemaphoreGetFdInfoKHR' structure
+--     containing parameters of the export operation.
+--
+-- -   @pFd@ will return the file descriptor representing the semaphore
+--     payload.
+--
+-- = Description
+--
+-- Each call to 'getSemaphoreFdKHR' /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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore State>.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'SemaphoreGetFdInfoKHR'
+getSemaphoreFdKHR :: forall io . MonadIO io => Device -> SemaphoreGetFdInfoKHR -> io (("fd" ::: Int32))
+getSemaphoreFdKHR device getFdInfo = liftIO . evalContT $ do
+  let vkGetSemaphoreFdKHRPtr = pVkGetSemaphoreFdKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetSemaphoreFdKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetSemaphoreFdKHR is null" Nothing Nothing
+  let vkGetSemaphoreFdKHR' = mkVkGetSemaphoreFdKHR vkGetSemaphoreFdKHRPtr
+  pGetFdInfo <- ContT $ withCStruct (getFdInfo)
+  pPFd <- ContT $ bracket (callocBytes @CInt 4) free
+  r <- lift $ vkGetSemaphoreFdKHR' (deviceHandle (device)) pGetFdInfo (pPFd)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pFd <- lift $ peek @CInt pPFd
+  pure $ (((\(CInt a) -> a) pFd))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkImportSemaphoreFdKHR
+  :: FunPtr (Ptr Device_T -> Ptr ImportSemaphoreFdInfoKHR -> IO Result) -> Ptr Device_T -> Ptr ImportSemaphoreFdInfoKHR -> IO Result
+
+-- | vkImportSemaphoreFdKHR - Import a semaphore from a POSIX file descriptor
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the semaphore.
+--
+-- -   @pImportSemaphoreFdInfo@ is a pointer to a
+--     'ImportSemaphoreFdInfoKHR' structure specifying the semaphore and
+--     import parameters.
+--
+-- = 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.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'ImportSemaphoreFdInfoKHR'
+importSemaphoreFdKHR :: forall io . MonadIO io => Device -> ImportSemaphoreFdInfoKHR -> io ()
+importSemaphoreFdKHR device importSemaphoreFdInfo = liftIO . evalContT $ do
+  let vkImportSemaphoreFdKHRPtr = pVkImportSemaphoreFdKHR (deviceCmds (device :: Device))
+  lift $ unless (vkImportSemaphoreFdKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkImportSemaphoreFdKHR is null" Nothing Nothing
+  let vkImportSemaphoreFdKHR' = mkVkImportSemaphoreFdKHR vkImportSemaphoreFdKHRPtr
+  pImportSemaphoreFdInfo <- ContT $ withCStruct (importSemaphoreFdInfo)
+  r <- lift $ vkImportSemaphoreFdKHR' (deviceHandle (device)) pImportSemaphoreFdInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkImportSemaphoreFdInfoKHR - Structure specifying POSIX file descriptor
+-- to import to a semaphore
+--
+-- = Description
+--
+-- The handle types supported by @handleType@ are:
+--
+-- +--------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+-- | Handle Type                                                                                            | Transference         | Permanence Supported  |
+-- +========================================================================================================+======================+=======================+
+-- | 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT' | Reference            | Temporary,Permanent   |
+-- +--------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+-- | 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT'   | Copy                 | Temporary             |
+-- +--------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+--
+-- Handle Types Supported by 'ImportSemaphoreFdInfoKHR'
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be a value included in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphore-handletypes-fd Handle Types Supported by >
+--     table
+--
+-- -   @fd@ /must/ obey any requirements listed for @handleType@ in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility external semaphore handle types compatibility>
+--
+-- -   If @handleType@ is
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT',
+--     the 'Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo'::@flags@
+--     field /must/ match that of the semaphore from which @fd@ was
+--     exported
+--
+-- -   If @handleType@ is
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT',
+--     the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@
+--     field /must/ match that of the semaphore from which @fd@ was
+--     exported
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SEMAPHORE_IMPORT_TEMPORARY_BIT',
+--     the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@
+--     field of the semaphore from which @fd@ was exported /must/ not be
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'
+--     handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits'
+--     values
+--
+-- -   @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+--     value
+--
+-- == Host Synchronization
+--
+-- -   Host access to @semaphore@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits',
+-- 'Vulkan.Core10.Handles.Semaphore',
+-- 'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'importSemaphoreFdKHR'
+data ImportSemaphoreFdInfoKHR = ImportSemaphoreFdInfoKHR
+  { -- | @semaphore@ is the semaphore into which the payload will be imported.
+    semaphore :: Semaphore
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits'
+    -- specifying additional parameters for the semaphore payload import
+    -- operation.
+    flags :: SemaphoreImportFlags
+  , -- | @handleType@ specifies the type of @fd@.
+    handleType :: ExternalSemaphoreHandleTypeFlagBits
+  , -- | @fd@ is the external handle to import.
+    fd :: Int32
+  }
+  deriving (Typeable)
+deriving instance Show ImportSemaphoreFdInfoKHR
+
+instance ToCStruct ImportSemaphoreFdInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImportSemaphoreFdInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (semaphore)
+    poke ((p `plusPtr` 24 :: Ptr SemaphoreImportFlags)) (flags)
+    poke ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (handleType)
+    poke ((p `plusPtr` 32 :: Ptr CInt)) (CInt (fd))
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr CInt)) (CInt (zero))
+    f
+
+instance FromCStruct ImportSemaphoreFdInfoKHR where
+  peekCStruct p = do
+    semaphore <- peek @Semaphore ((p `plusPtr` 16 :: Ptr Semaphore))
+    flags <- peek @SemaphoreImportFlags ((p `plusPtr` 24 :: Ptr SemaphoreImportFlags))
+    handleType <- peek @ExternalSemaphoreHandleTypeFlagBits ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits))
+    fd <- peek @CInt ((p `plusPtr` 32 :: Ptr CInt))
+    pure $ ImportSemaphoreFdInfoKHR
+             semaphore flags handleType ((\(CInt a) -> a) fd)
+
+instance Storable ImportSemaphoreFdInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImportSemaphoreFdInfoKHR where
+  zero = ImportSemaphoreFdInfoKHR
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkSemaphoreGetFdInfoKHR - Structure describing a POSIX FD semaphore
+-- export operation
+--
+-- = Description
+--
+-- The properties of the file descriptor returned depend on the value of
+-- @handleType@. See
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+-- for a description of the properties of the defined external semaphore
+-- handle types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'::@handleTypes@
+--     when @semaphore@’s current payload was created
+--
+-- -   @semaphore@ /must/ not currently have its payload replaced by an
+--     imported payload as described below in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>
+--     unless that imported payload’s handle type was included in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties'::@exportFromImportedHandleTypes@
+--     for @handleType@
+--
+-- -   If @handleType@ refers to a handle type with copy payload
+--     transference semantics, as defined below in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>,
+--     there /must/ be no queue waiting on @semaphore@
+--
+-- -   If @handleType@ refers to a handle type with copy payload
+--     transference semantics, @semaphore@ /must/ be signaled, or have an
+--     associated
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
+--     pending execution
+--
+-- -   @handleType@ /must/ be defined as a POSIX file descriptor handle
+--
+-- -   If @handleType@ refers to a handle type with copy payload
+--     transference semantics, @semaphore@ /must/ have been created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
+--
+-- -   If @handleType@ refers to a handle type with copy payload
+--     transference semantics, @semaphore@ /must/ have an associated
+--     semaphore signal operation that has been submitted for execution and
+--     any semaphore signal operations on which it depends (if any) /must/
+--     have also been submitted for execution
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'
+--     handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits',
+-- 'Vulkan.Core10.Handles.Semaphore',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'getSemaphoreFdKHR'
+data SemaphoreGetFdInfoKHR = SemaphoreGetFdInfoKHR
+  { -- | @semaphore@ is the semaphore from which state will be exported.
+    semaphore :: Semaphore
+  , -- | @handleType@ is the type of handle requested.
+    handleType :: ExternalSemaphoreHandleTypeFlagBits
+  }
+  deriving (Typeable)
+deriving instance Show SemaphoreGetFdInfoKHR
+
+instance ToCStruct SemaphoreGetFdInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SemaphoreGetFdInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (semaphore)
+    poke ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (handleType)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (zero)
+    f
+
+instance FromCStruct SemaphoreGetFdInfoKHR where
+  peekCStruct p = do
+    semaphore <- peek @Semaphore ((p `plusPtr` 16 :: Ptr Semaphore))
+    handleType <- peek @ExternalSemaphoreHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits))
+    pure $ SemaphoreGetFdInfoKHR
+             semaphore handleType
+
+instance Storable SemaphoreGetFdInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SemaphoreGetFdInfoKHR where
+  zero = SemaphoreGetFdInfoKHR
+           zero
+           zero
+
+
+type KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION"
+pattern KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME = "VK_KHR_external_semaphore_fd"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME"
+pattern KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME = "VK_KHR_external_semaphore_fd"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs-boot b/src/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_semaphore_fd  ( ImportSemaphoreFdInfoKHR
+                                                       , SemaphoreGetFdInfoKHR
+                                                       ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ImportSemaphoreFdInfoKHR
+
+instance ToCStruct ImportSemaphoreFdInfoKHR
+instance Show ImportSemaphoreFdInfoKHR
+
+instance FromCStruct ImportSemaphoreFdInfoKHR
+
+
+data SemaphoreGetFdInfoKHR
+
+instance ToCStruct SemaphoreGetFdInfoKHR
+instance Show SemaphoreGetFdInfoKHR
+
+instance FromCStruct SemaphoreGetFdInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs b/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
@@ -0,0 +1,743 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_semaphore_win32  ( getSemaphoreWin32HandleKHR
+                                                          , importSemaphoreWin32HandleKHR
+                                                          , ImportSemaphoreWin32HandleInfoKHR(..)
+                                                          , ExportSemaphoreWin32HandleInfoKHR(..)
+                                                          , D3D12FenceSubmitInfoKHR(..)
+                                                          , SemaphoreGetWin32HandleInfoKHR(..)
+                                                          , KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION
+                                                          , pattern KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION
+                                                          , KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME
+                                                          , pattern KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME
+                                                          , HANDLE
+                                                          , DWORD
+                                                          , LPCWSTR
+                                                          , SECURITY_ATTRIBUTES
+                                                          ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Extensions.WSITypes (DWORD)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetSemaphoreWin32HandleKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkImportSemaphoreWin32HandleKHR))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlagBits)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Extensions.WSITypes (HANDLE)
+import Vulkan.Extensions.WSITypes (LPCWSTR)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
+import Vulkan.Core10.Handles (Semaphore)
+import Vulkan.Core11.Enums.SemaphoreImportFlagBits (SemaphoreImportFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (DWORD)
+import Vulkan.Extensions.WSITypes (HANDLE)
+import Vulkan.Extensions.WSITypes (LPCWSTR)
+import Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetSemaphoreWin32HandleKHR
+  :: FunPtr (Ptr Device_T -> Ptr SemaphoreGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result) -> Ptr Device_T -> Ptr SemaphoreGetWin32HandleInfoKHR -> Ptr HANDLE -> IO Result
+
+-- | vkGetSemaphoreWin32HandleKHR - Get a Windows HANDLE for a semaphore
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the semaphore being
+--     exported.
+--
+-- -   @pGetWin32HandleInfo@ is a pointer to a
+--     'SemaphoreGetWin32HandleInfoKHR' structure containing parameters of
+--     the export operation.
+--
+-- -   @pHandle@ will return the Windows handle representing the semaphore
+--     state.
+--
+-- = Description
+--
+-- For handle types defined as NT handles, the handles returned by
+-- 'getSemaphoreWin32HandleKHR' 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'SemaphoreGetWin32HandleInfoKHR'
+getSemaphoreWin32HandleKHR :: forall io . MonadIO io => Device -> SemaphoreGetWin32HandleInfoKHR -> io (HANDLE)
+getSemaphoreWin32HandleKHR device getWin32HandleInfo = liftIO . evalContT $ do
+  let vkGetSemaphoreWin32HandleKHRPtr = pVkGetSemaphoreWin32HandleKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetSemaphoreWin32HandleKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetSemaphoreWin32HandleKHR is null" Nothing Nothing
+  let vkGetSemaphoreWin32HandleKHR' = mkVkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHRPtr
+  pGetWin32HandleInfo <- ContT $ withCStruct (getWin32HandleInfo)
+  pPHandle <- ContT $ bracket (callocBytes @HANDLE 8) free
+  r <- lift $ vkGetSemaphoreWin32HandleKHR' (deviceHandle (device)) pGetWin32HandleInfo (pPHandle)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pHandle <- lift $ peek @HANDLE pPHandle
+  pure $ (pHandle)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkImportSemaphoreWin32HandleKHR
+  :: FunPtr (Ptr Device_T -> Ptr ImportSemaphoreWin32HandleInfoKHR -> IO Result) -> Ptr Device_T -> Ptr ImportSemaphoreWin32HandleInfoKHR -> IO Result
+
+-- | vkImportSemaphoreWin32HandleKHR - Import a semaphore from a Windows
+-- HANDLE
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that created the semaphore.
+--
+-- -   @pImportSemaphoreWin32HandleInfo@ is a pointer to a
+--     'ImportSemaphoreWin32HandleInfoKHR' structure specifying the
+--     semaphore and import parameters.
+--
+-- = 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.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_EXTERNAL_HANDLE'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'ImportSemaphoreWin32HandleInfoKHR'
+importSemaphoreWin32HandleKHR :: forall io . MonadIO io => Device -> ImportSemaphoreWin32HandleInfoKHR -> io ()
+importSemaphoreWin32HandleKHR device importSemaphoreWin32HandleInfo = liftIO . evalContT $ do
+  let vkImportSemaphoreWin32HandleKHRPtr = pVkImportSemaphoreWin32HandleKHR (deviceCmds (device :: Device))
+  lift $ unless (vkImportSemaphoreWin32HandleKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkImportSemaphoreWin32HandleKHR is null" Nothing Nothing
+  let vkImportSemaphoreWin32HandleKHR' = mkVkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHRPtr
+  pImportSemaphoreWin32HandleInfo <- ContT $ withCStruct (importSemaphoreWin32HandleInfo)
+  r <- lift $ vkImportSemaphoreWin32HandleKHR' (deviceHandle (device)) pImportSemaphoreWin32HandleInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+-- | VkImportSemaphoreWin32HandleInfoKHR - Structure specifying Windows
+-- handle to import to a semaphore
+--
+-- = Description
+--
+-- The handle types supported by @handleType@ are:
+--
+-- +---------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+-- | Handle Type                                                                                                   | Transference         | Permanence Supported  |
+-- +===============================================================================================================+======================+=======================+
+-- | 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'     | Reference            | Temporary,Permanent   |
+-- +---------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+-- | 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT' | Reference            | Temporary,Permanent   |
+-- +---------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+-- | 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT'      | Reference            | Temporary,Permanent   |
+-- +---------------------------------------------------------------------------------------------------------------+----------------------+-----------------------+
+--
+-- Handle Types Supported by 'ImportSemaphoreWin32HandleInfoKHR'
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be a value included in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphore-handletypes-win32 Handle Types Supported by >
+--     table
+--
+-- -   If @handleType@ is not
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
+--     or
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT',
+--     @name@ /must/ be @NULL@
+--
+-- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/
+--     name a valid synchronization primitive of the type specified by
+--     @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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility external semaphore handle types compatibility>
+--
+-- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for
+--     @handleType@ in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility external semaphore handle types compatibility>
+--
+-- -   If @handleType@ is
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
+--     or
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT',
+--     the 'Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo'::@flags@
+--     field /must/ match that of the semaphore from which @handle@ or
+--     @name@ was exported
+--
+-- -   If @handleType@ is
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
+--     or
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT',
+--     the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@
+--     field /must/ match that of the semaphore from which @handle@ or
+--     @name@ was exported
+--
+-- -   If @flags@ contains
+--     'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SEMAPHORE_IMPORT_TEMPORARY_BIT',
+--     the
+--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@
+--     field of the semaphore from which @handle@ or @name@ was exported
+--     /must/ not be
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'
+--     handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits'
+--     values
+--
+-- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+--     value
+--
+-- == Host Synchronization
+--
+-- -   Host access to @semaphore@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits',
+-- 'Vulkan.Core10.Handles.Semaphore',
+-- 'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'importSemaphoreWin32HandleKHR'
+data ImportSemaphoreWin32HandleInfoKHR = ImportSemaphoreWin32HandleInfoKHR
+  { -- | @semaphore@ is the semaphore into which the payload will be imported.
+    semaphore :: Semaphore
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits'
+    -- specifying additional parameters for the semaphore payload import
+    -- operation.
+    flags :: SemaphoreImportFlags
+  , -- | @handleType@ specifies the type of @handle@.
+    handleType :: ExternalSemaphoreHandleTypeFlagBits
+  , -- | @handle@ is the external handle to import, or @NULL@.
+    handle :: HANDLE
+  , -- | @name@ is a null-terminated UTF-16 string naming the underlying
+    -- synchronization primitive to import, or @NULL@.
+    name :: LPCWSTR
+  }
+  deriving (Typeable)
+deriving instance Show ImportSemaphoreWin32HandleInfoKHR
+
+instance ToCStruct ImportSemaphoreWin32HandleInfoKHR where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImportSemaphoreWin32HandleInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (semaphore)
+    poke ((p `plusPtr` 24 :: Ptr SemaphoreImportFlags)) (flags)
+    poke ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (handleType)
+    poke ((p `plusPtr` 32 :: Ptr HANDLE)) (handle)
+    poke ((p `plusPtr` 40 :: Ptr LPCWSTR)) (name)
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
+    f
+
+instance FromCStruct ImportSemaphoreWin32HandleInfoKHR where
+  peekCStruct p = do
+    semaphore <- peek @Semaphore ((p `plusPtr` 16 :: Ptr Semaphore))
+    flags <- peek @SemaphoreImportFlags ((p `plusPtr` 24 :: Ptr SemaphoreImportFlags))
+    handleType <- peek @ExternalSemaphoreHandleTypeFlagBits ((p `plusPtr` 28 :: Ptr ExternalSemaphoreHandleTypeFlagBits))
+    handle <- peek @HANDLE ((p `plusPtr` 32 :: Ptr HANDLE))
+    name <- peek @LPCWSTR ((p `plusPtr` 40 :: Ptr LPCWSTR))
+    pure $ ImportSemaphoreWin32HandleInfoKHR
+             semaphore flags handleType handle name
+
+instance Storable ImportSemaphoreWin32HandleInfoKHR where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImportSemaphoreWin32HandleInfoKHR where
+  zero = ImportSemaphoreWin32HandleInfoKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkExportSemaphoreWin32HandleInfoKHR - Structure specifying additional
+-- attributes of Windows handles exported from a semaphore
+--
+-- = Description
+--
+-- If
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'
+-- is not present in the same @pNext@ chain, this structure is ignored.
+--
+-- If
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'
+-- is present in the @pNext@ chain of
+-- 'Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo' with a Windows
+-- @handleType@, but either 'ExportSemaphoreWin32HandleInfoKHR' is not
+-- present in the @pNext@ chain, or if it is but @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 used depend on the handle type.
+--
+-- For handles of the following types:
+--
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
+--
+-- The implementation /must/ ensure the access rights allow both signal and
+-- wait operations on the semaphore.
+--
+-- For handles of the following types:
+--
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT'
+--
+-- The access rights /must/ be:
+--
+-- @GENERIC_ALL@
+--
+-- [1]
+--     <https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights>
+--
+-- == Valid Usage
+--
+-- -   If
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'::@handleTypes@
+--     does not include
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'
+--     or
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT',
+--     'ExportSemaphoreWin32HandleInfoKHR' /must/ not be included in the
+--     @pNext@ chain of 'Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR'
+--
+-- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
+--     pointer to a valid 'Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExportSemaphoreWin32HandleInfoKHR = ExportSemaphoreWin32HandleInfoKHR
+  { -- | @pAttributes@ is a pointer to a Windows
+    -- 'Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' structure specifying
+    -- security attributes of the handle.
+    attributes :: Ptr SECURITY_ATTRIBUTES
+  , -- | @dwAccess@ is a 'Vulkan.Extensions.WSITypes.DWORD' specifying access
+    -- rights of the handle.
+    dwAccess :: DWORD
+  , -- | @name@ is a null-terminated UTF-16 string to associate with the
+    -- underlying synchronization primitive referenced by NT handles exported
+    -- from the created semaphore.
+    name :: LPCWSTR
+  }
+  deriving (Typeable)
+deriving instance Show ExportSemaphoreWin32HandleInfoKHR
+
+instance ToCStruct ExportSemaphoreWin32HandleInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExportSemaphoreWin32HandleInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES))) (attributes)
+    poke ((p `plusPtr` 24 :: Ptr DWORD)) (dwAccess)
+    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (name)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr DWORD)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr LPCWSTR)) (zero)
+    f
+
+instance FromCStruct ExportSemaphoreWin32HandleInfoKHR where
+  peekCStruct p = do
+    pAttributes <- peek @(Ptr SECURITY_ATTRIBUTES) ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES)))
+    dwAccess <- peek @DWORD ((p `plusPtr` 24 :: Ptr DWORD))
+    name <- peek @LPCWSTR ((p `plusPtr` 32 :: Ptr LPCWSTR))
+    pure $ ExportSemaphoreWin32HandleInfoKHR
+             pAttributes dwAccess name
+
+instance Storable ExportSemaphoreWin32HandleInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExportSemaphoreWin32HandleInfoKHR where
+  zero = ExportSemaphoreWin32HandleInfoKHR
+           zero
+           zero
+           zero
+
+
+-- | VkD3D12FenceSubmitInfoKHR - Structure specifying values for Direct3D 12
+-- fence-backed semaphores
+--
+-- = Description
+--
+-- If the semaphore in 'Vulkan.Core10.Queue.SubmitInfo'::@pWaitSemaphores@
+-- or 'Vulkan.Core10.Queue.SubmitInfo'::@pSignalSemaphores@ corresponding
+-- to an entry in @pWaitSemaphoreValues@ or @pSignalSemaphoreValues@
+-- respectively does not currently have a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-payloads payload>
+-- referring to a Direct3D 12 fence, the implementation /must/ ignore the
+-- value in the @pWaitSemaphoreValues@ or @pSignalSemaphoreValues@ entry.
+--
+-- Note
+--
+-- As the introduction of the external semaphore handle type
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT'
+-- predates that of timeline semaphores, support for importing semaphore
+-- payloads from external handles of that type into semaphores created
+-- (implicitly or explicitly) with a
+-- 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+-- 'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY' is preserved
+-- for backwards compatibility. However, applications /should/ prefer
+-- importing such handle types into semaphores created with a
+-- 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+-- 'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE', and use the
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo'
+-- structure instead of the 'D3D12FenceSubmitInfoKHR' structure to specify
+-- the values to use when waiting for and signaling such semaphores.
+--
+-- == Valid Usage
+--
+-- -   @waitSemaphoreValuesCount@ /must/ be the same value as
+--     'Vulkan.Core10.Queue.SubmitInfo'::@waitSemaphoreCount@, where
+--     'Vulkan.Core10.Queue.SubmitInfo' is in the @pNext@ chain of this
+--     'D3D12FenceSubmitInfoKHR' structure
+--
+-- -   @signalSemaphoreValuesCount@ /must/ be the same value as
+--     'Vulkan.Core10.Queue.SubmitInfo'::@signalSemaphoreCount@, where
+--     'Vulkan.Core10.Queue.SubmitInfo' is in the @pNext@ chain of this
+--     'D3D12FenceSubmitInfoKHR' structure
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR'
+--
+-- -   If @waitSemaphoreValuesCount@ is not @0@, and @pWaitSemaphoreValues@
+--     is not @NULL@, @pWaitSemaphoreValues@ /must/ be a valid pointer to
+--     an array of @waitSemaphoreValuesCount@ @uint64_t@ values
+--
+-- -   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
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data D3D12FenceSubmitInfoKHR = D3D12FenceSubmitInfoKHR
+  { -- | @waitSemaphoreValuesCount@ is the number of semaphore wait values
+    -- specified in @pWaitSemaphoreValues@.
+    waitSemaphoreValuesCount :: Word32
+  , -- | @pWaitSemaphoreValues@ is a pointer to an array of
+    -- @waitSemaphoreValuesCount@ values for the corresponding semaphores in
+    -- 'Vulkan.Core10.Queue.SubmitInfo'::@pWaitSemaphores@ to wait for.
+    waitSemaphoreValues :: Vector Word64
+  , -- | @signalSemaphoreValuesCount@ is the number of semaphore signal values
+    -- specified in @pSignalSemaphoreValues@.
+    signalSemaphoreValuesCount :: Word32
+  , -- | @pSignalSemaphoreValues@ is a pointer to an array of
+    -- @signalSemaphoreValuesCount@ values for the corresponding semaphores in
+    -- 'Vulkan.Core10.Queue.SubmitInfo'::@pSignalSemaphores@ to set when
+    -- signaled.
+    signalSemaphoreValues :: Vector Word64
+  }
+  deriving (Typeable)
+deriving instance Show D3D12FenceSubmitInfoKHR
+
+instance ToCStruct D3D12FenceSubmitInfoKHR where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p D3D12FenceSubmitInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    let pWaitSemaphoreValuesLength = Data.Vector.length $ (waitSemaphoreValues)
+    waitSemaphoreValuesCount'' <- lift $ if (waitSemaphoreValuesCount) == 0
+      then pure $ fromIntegral pWaitSemaphoreValuesLength
+      else do
+        unless (fromIntegral pWaitSemaphoreValuesLength == (waitSemaphoreValuesCount) || pWaitSemaphoreValuesLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pWaitSemaphoreValues must be empty or have 'waitSemaphoreValuesCount' elements" Nothing Nothing
+        pure (waitSemaphoreValuesCount)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (waitSemaphoreValuesCount'')
+    pWaitSemaphoreValues'' <- if Data.Vector.null (waitSemaphoreValues)
+      then pure nullPtr
+      else do
+        pPWaitSemaphoreValues <- ContT $ allocaBytesAligned @Word64 (((Data.Vector.length (waitSemaphoreValues))) * 8) 8
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphoreValues `plusPtr` (8 * (i)) :: Ptr Word64) (e)) ((waitSemaphoreValues))
+        pure $ pPWaitSemaphoreValues
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word64))) pWaitSemaphoreValues''
+    let pSignalSemaphoreValuesLength = Data.Vector.length $ (signalSemaphoreValues)
+    signalSemaphoreValuesCount'' <- lift $ if (signalSemaphoreValuesCount) == 0
+      then pure $ fromIntegral pSignalSemaphoreValuesLength
+      else do
+        unless (fromIntegral pSignalSemaphoreValuesLength == (signalSemaphoreValuesCount) || pSignalSemaphoreValuesLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pSignalSemaphoreValues must be empty or have 'signalSemaphoreValuesCount' elements" Nothing Nothing
+        pure (signalSemaphoreValuesCount)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (signalSemaphoreValuesCount'')
+    pSignalSemaphoreValues'' <- if Data.Vector.null (signalSemaphoreValues)
+      then pure nullPtr
+      else do
+        pPSignalSemaphoreValues <- ContT $ allocaBytesAligned @Word64 (((Data.Vector.length (signalSemaphoreValues))) * 8) 8
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPSignalSemaphoreValues `plusPtr` (8 * (i)) :: Ptr Word64) (e)) ((signalSemaphoreValues))
+        pure $ pPSignalSemaphoreValues
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word64))) pSignalSemaphoreValues''
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct D3D12FenceSubmitInfoKHR where
+  peekCStruct p = do
+    waitSemaphoreValuesCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pWaitSemaphoreValues <- peek @(Ptr Word64) ((p `plusPtr` 24 :: Ptr (Ptr Word64)))
+    let pWaitSemaphoreValuesLength = if pWaitSemaphoreValues == nullPtr then 0 else (fromIntegral waitSemaphoreValuesCount)
+    pWaitSemaphoreValues' <- generateM pWaitSemaphoreValuesLength (\i -> peek @Word64 ((pWaitSemaphoreValues `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    signalSemaphoreValuesCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pSignalSemaphoreValues <- peek @(Ptr Word64) ((p `plusPtr` 40 :: Ptr (Ptr Word64)))
+    let pSignalSemaphoreValuesLength = if pSignalSemaphoreValues == nullPtr then 0 else (fromIntegral signalSemaphoreValuesCount)
+    pSignalSemaphoreValues' <- generateM pSignalSemaphoreValuesLength (\i -> peek @Word64 ((pSignalSemaphoreValues `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    pure $ D3D12FenceSubmitInfoKHR
+             waitSemaphoreValuesCount pWaitSemaphoreValues' signalSemaphoreValuesCount pSignalSemaphoreValues'
+
+instance Zero D3D12FenceSubmitInfoKHR where
+  zero = D3D12FenceSubmitInfoKHR
+           zero
+           mempty
+           zero
+           mempty
+
+
+-- | VkSemaphoreGetWin32HandleInfoKHR - Structure describing a Win32 handle
+-- semaphore export operation
+--
+-- = Description
+--
+-- The properties of the handle returned depend on the value of
+-- @handleType@. See
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+-- for a description of the properties of the defined external semaphore
+-- handle types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'::@handleTypes@
+--     when the @semaphore@’s current payload was created
+--
+-- -   If @handleType@ is defined as an NT handle,
+--     'getSemaphoreWin32HandleKHR' /must/ be called no more than once for
+--     each valid unique combination of @semaphore@ and @handleType@
+--
+-- -   @semaphore@ /must/ not currently have its payload replaced by an
+--     imported payload as described below in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>
+--     unless that imported payload’s handle type was included in
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties'::@exportFromImportedHandleTypes@
+--     for @handleType@
+--
+-- -   If @handleType@ refers to a handle type with copy payload
+--     transference semantics, as defined below in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>,
+--     there /must/ be no queue waiting on @semaphore@
+--
+-- -   If @handleType@ refers to a handle type with copy payload
+--     transference semantics, @semaphore@ /must/ be signaled, or have an
+--     associated
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
+--     pending execution
+--
+-- -   @handleType@ /must/ be defined as an NT handle or a global share
+--     handle
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'
+--     handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits',
+-- 'Vulkan.Core10.Handles.Semaphore',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getSemaphoreWin32HandleKHR'
+data SemaphoreGetWin32HandleInfoKHR = SemaphoreGetWin32HandleInfoKHR
+  { -- | @semaphore@ is the semaphore from which state will be exported.
+    semaphore :: Semaphore
+  , -- | @handleType@ is the type of handle requested.
+    handleType :: ExternalSemaphoreHandleTypeFlagBits
+  }
+  deriving (Typeable)
+deriving instance Show SemaphoreGetWin32HandleInfoKHR
+
+instance ToCStruct SemaphoreGetWin32HandleInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SemaphoreGetWin32HandleInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (semaphore)
+    poke ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (handleType)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Semaphore)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits)) (zero)
+    f
+
+instance FromCStruct SemaphoreGetWin32HandleInfoKHR where
+  peekCStruct p = do
+    semaphore <- peek @Semaphore ((p `plusPtr` 16 :: Ptr Semaphore))
+    handleType <- peek @ExternalSemaphoreHandleTypeFlagBits ((p `plusPtr` 24 :: Ptr ExternalSemaphoreHandleTypeFlagBits))
+    pure $ SemaphoreGetWin32HandleInfoKHR
+             semaphore handleType
+
+instance Storable SemaphoreGetWin32HandleInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SemaphoreGetWin32HandleInfoKHR where
+  zero = SemaphoreGetWin32HandleInfoKHR
+           zero
+           zero
+
+
+type KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION"
+pattern KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION = 1
+
+
+type KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME = "VK_KHR_external_semaphore_win32"
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME"
+pattern KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME = "VK_KHR_external_semaphore_win32"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs-boot b/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs-boot
@@ -0,0 +1,41 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_external_semaphore_win32  ( D3D12FenceSubmitInfoKHR
+                                                          , ExportSemaphoreWin32HandleInfoKHR
+                                                          , ImportSemaphoreWin32HandleInfoKHR
+                                                          , SemaphoreGetWin32HandleInfoKHR
+                                                          ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data D3D12FenceSubmitInfoKHR
+
+instance ToCStruct D3D12FenceSubmitInfoKHR
+instance Show D3D12FenceSubmitInfoKHR
+
+instance FromCStruct D3D12FenceSubmitInfoKHR
+
+
+data ExportSemaphoreWin32HandleInfoKHR
+
+instance ToCStruct ExportSemaphoreWin32HandleInfoKHR
+instance Show ExportSemaphoreWin32HandleInfoKHR
+
+instance FromCStruct ExportSemaphoreWin32HandleInfoKHR
+
+
+data ImportSemaphoreWin32HandleInfoKHR
+
+instance ToCStruct ImportSemaphoreWin32HandleInfoKHR
+instance Show ImportSemaphoreWin32HandleInfoKHR
+
+instance FromCStruct ImportSemaphoreWin32HandleInfoKHR
+
+
+data SemaphoreGetWin32HandleInfoKHR
+
+instance ToCStruct SemaphoreGetWin32HandleInfoKHR
+instance Show SemaphoreGetWin32HandleInfoKHR
+
+instance FromCStruct SemaphoreGetWin32HandleInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs b/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs
@@ -0,0 +1,658 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_get_display_properties2  ( getPhysicalDeviceDisplayProperties2KHR
+                                                         , getPhysicalDeviceDisplayPlaneProperties2KHR
+                                                         , getDisplayModeProperties2KHR
+                                                         , getDisplayPlaneCapabilities2KHR
+                                                         , DisplayProperties2KHR(..)
+                                                         , DisplayPlaneProperties2KHR(..)
+                                                         , DisplayModeProperties2KHR(..)
+                                                         , DisplayPlaneInfo2KHR(..)
+                                                         , DisplayPlaneCapabilities2KHR(..)
+                                                         , KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION
+                                                         , pattern KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION
+                                                         , KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME
+                                                         , pattern KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME
+                                                         , DisplayKHR(..)
+                                                         , DisplayModeKHR(..)
+                                                         , DisplayPropertiesKHR(..)
+                                                         , DisplayPlanePropertiesKHR(..)
+                                                         , DisplayModeParametersKHR(..)
+                                                         , DisplayModePropertiesKHR(..)
+                                                         , DisplayPlaneCapabilitiesKHR(..)
+                                                         , DisplayPlaneAlphaFlagBitsKHR(..)
+                                                         , DisplayPlaneAlphaFlagsKHR
+                                                         , SurfaceTransformFlagBitsKHR(..)
+                                                         , SurfaceTransformFlagsKHR
+                                                         ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Extensions.Handles (DisplayKHR)
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+import Vulkan.Extensions.Handles (DisplayModeKHR)
+import Vulkan.Extensions.VK_KHR_display (DisplayModePropertiesKHR)
+import Vulkan.Extensions.VK_KHR_display (DisplayPlaneCapabilitiesKHR)
+import Vulkan.Extensions.VK_KHR_display (DisplayPlanePropertiesKHR)
+import Vulkan.Extensions.VK_KHR_display (DisplayPropertiesKHR)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkGetDisplayModeProperties2KHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetDisplayPlaneCapabilities2KHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceDisplayPlaneProperties2KHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceDisplayProperties2KHR))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (DisplayKHR(..))
+import Vulkan.Extensions.Handles (DisplayModeKHR(..))
+import Vulkan.Extensions.VK_KHR_display (DisplayModeParametersKHR(..))
+import Vulkan.Extensions.VK_KHR_display (DisplayModePropertiesKHR(..))
+import Vulkan.Extensions.VK_KHR_display (DisplayPlaneAlphaFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_display (DisplayPlaneAlphaFlagsKHR)
+import Vulkan.Extensions.VK_KHR_display (DisplayPlaneCapabilitiesKHR(..))
+import Vulkan.Extensions.VK_KHR_display (DisplayPlanePropertiesKHR(..))
+import Vulkan.Extensions.VK_KHR_display (DisplayPropertiesKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagsKHR)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceDisplayProperties2KHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayProperties2KHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayProperties2KHR -> IO Result
+
+-- | vkGetPhysicalDeviceDisplayProperties2KHR - Query information about the
+-- available displays
+--
+-- = 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
+--     'DisplayProperties2KHR' structures.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceDisplayProperties2KHR' behaves similarly to
+-- 'Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPropertiesKHR',
+-- with the ability to return extended information via chained output
+-- structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' 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@ 'DisplayProperties2KHR' structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'DisplayProperties2KHR', 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceDisplayProperties2KHR :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector DisplayProperties2KHR))
+getPhysicalDeviceDisplayProperties2KHR physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceDisplayProperties2KHRPtr = pVkGetPhysicalDeviceDisplayProperties2KHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceDisplayProperties2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceDisplayProperties2KHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceDisplayProperties2KHR' = mkVkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceDisplayProperties2KHR' physicalDevice' (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @DisplayProperties2KHR ((fromIntegral (pPropertyCount)) * 64)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 64) :: Ptr DisplayProperties2KHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkGetPhysicalDeviceDisplayProperties2KHR' physicalDevice' (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayProperties2KHR (((pPProperties) `advancePtrBytes` (64 * (i)) :: Ptr DisplayProperties2KHR)))
+  pure $ ((r'), pProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceDisplayPlaneProperties2KHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPlaneProperties2KHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr DisplayPlaneProperties2KHR -> IO Result
+
+-- | vkGetPhysicalDeviceDisplayPlaneProperties2KHR - Query information about
+-- the available display planes.
+--
+-- = 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
+--     'DisplayPlaneProperties2KHR' structures.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceDisplayPlaneProperties2KHR' behaves similarly to
+-- 'Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPlanePropertiesKHR',
+-- with the ability to return extended information via chained output
+-- structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' 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@ 'DisplayPlaneProperties2KHR'
+--     structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'DisplayPlaneProperties2KHR', 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceDisplayPlaneProperties2KHR :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector DisplayPlaneProperties2KHR))
+getPhysicalDeviceDisplayPlaneProperties2KHR physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceDisplayPlaneProperties2KHRPtr = pVkGetPhysicalDeviceDisplayPlaneProperties2KHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceDisplayPlaneProperties2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceDisplayPlaneProperties2KHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceDisplayPlaneProperties2KHR' = mkVkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceDisplayPlaneProperties2KHR' physicalDevice' (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @DisplayPlaneProperties2KHR ((fromIntegral (pPropertyCount)) * 32)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 32) :: Ptr DisplayPlaneProperties2KHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkGetPhysicalDeviceDisplayPlaneProperties2KHR' physicalDevice' (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayPlaneProperties2KHR (((pPProperties) `advancePtrBytes` (32 * (i)) :: Ptr DisplayPlaneProperties2KHR)))
+  pure $ ((r'), pProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDisplayModeProperties2KHR
+  :: FunPtr (Ptr PhysicalDevice_T -> DisplayKHR -> Ptr Word32 -> Ptr DisplayModeProperties2KHR -> IO Result) -> Ptr PhysicalDevice_T -> DisplayKHR -> Ptr Word32 -> Ptr DisplayModeProperties2KHR -> IO Result
+
+-- | vkGetDisplayModeProperties2KHR - Query information about the available
+-- display modes.
+--
+-- = 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
+--     'DisplayModeProperties2KHR' structures.
+--
+-- = Description
+--
+-- 'getDisplayModeProperties2KHR' behaves similarly to
+-- 'Vulkan.Extensions.VK_KHR_display.getDisplayModePropertiesKHR', with the
+-- ability to return extended information via chained output structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'
+--     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@ 'DisplayModeProperties2KHR'
+--     structures
+--
+-- -   @display@ /must/ have been created, allocated, or retrieved from
+--     @physicalDevice@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayKHR', 'DisplayModeProperties2KHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getDisplayModeProperties2KHR :: forall io . MonadIO io => PhysicalDevice -> DisplayKHR -> io (Result, ("properties" ::: Vector DisplayModeProperties2KHR))
+getDisplayModeProperties2KHR physicalDevice display = liftIO . evalContT $ do
+  let vkGetDisplayModeProperties2KHRPtr = pVkGetDisplayModeProperties2KHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetDisplayModeProperties2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDisplayModeProperties2KHR is null" Nothing Nothing
+  let vkGetDisplayModeProperties2KHR' = mkVkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetDisplayModeProperties2KHR' physicalDevice' (display) (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @DisplayModeProperties2KHR ((fromIntegral (pPropertyCount)) * 40)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 40) :: Ptr DisplayModeProperties2KHR) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkGetDisplayModeProperties2KHR' physicalDevice' (display) (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @DisplayModeProperties2KHR (((pPProperties) `advancePtrBytes` (40 * (i)) :: Ptr DisplayModeProperties2KHR)))
+  pure $ ((r'), pProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDisplayPlaneCapabilities2KHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr DisplayPlaneInfo2KHR -> Ptr DisplayPlaneCapabilities2KHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr DisplayPlaneInfo2KHR -> Ptr DisplayPlaneCapabilities2KHR -> IO Result
+
+-- | vkGetDisplayPlaneCapabilities2KHR - Query capabilities of a mode and
+-- plane combination
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device associated with
+--     @pDisplayPlaneInfo@.
+--
+-- -   @pDisplayPlaneInfo@ is a pointer to a 'DisplayPlaneInfo2KHR'
+--     structure describing the plane and mode.
+--
+-- -   @pCapabilities@ is a pointer to a 'DisplayPlaneCapabilities2KHR'
+--     structure in which the capabilities are returned.
+--
+-- = Description
+--
+-- 'getDisplayPlaneCapabilities2KHR' behaves similarly to
+-- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneCapabilitiesKHR', with
+-- the ability to specify extended inputs via chained input structures, and
+-- to return extended information via chained output structures.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'DisplayPlaneCapabilities2KHR', 'DisplayPlaneInfo2KHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getDisplayPlaneCapabilities2KHR :: forall io . MonadIO io => PhysicalDevice -> DisplayPlaneInfo2KHR -> io (DisplayPlaneCapabilities2KHR)
+getDisplayPlaneCapabilities2KHR physicalDevice displayPlaneInfo = liftIO . evalContT $ do
+  let vkGetDisplayPlaneCapabilities2KHRPtr = pVkGetDisplayPlaneCapabilities2KHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetDisplayPlaneCapabilities2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDisplayPlaneCapabilities2KHR is null" Nothing Nothing
+  let vkGetDisplayPlaneCapabilities2KHR' = mkVkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHRPtr
+  pDisplayPlaneInfo <- ContT $ withCStruct (displayPlaneInfo)
+  pPCapabilities <- ContT (withZeroCStruct @DisplayPlaneCapabilities2KHR)
+  r <- lift $ vkGetDisplayPlaneCapabilities2KHR' (physicalDeviceHandle (physicalDevice)) pDisplayPlaneInfo (pPCapabilities)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pCapabilities <- lift $ peekCStruct @DisplayPlaneCapabilities2KHR pPCapabilities
+  pure $ (pCapabilities)
+
+
+-- | VkDisplayProperties2KHR - Structure describing an available display
+-- device
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceDisplayProperties2KHR'
+data DisplayProperties2KHR = DisplayProperties2KHR
+  { -- | @displayProperties@ is a
+    -- 'Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR' structure.
+    displayProperties :: DisplayPropertiesKHR }
+  deriving (Typeable)
+deriving instance Show DisplayProperties2KHR
+
+instance ToCStruct DisplayProperties2KHR where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayProperties2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPropertiesKHR)) (displayProperties) . ($ ())
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPropertiesKHR)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct DisplayProperties2KHR where
+  peekCStruct p = do
+    displayProperties <- peekCStruct @DisplayPropertiesKHR ((p `plusPtr` 16 :: Ptr DisplayPropertiesKHR))
+    pure $ DisplayProperties2KHR
+             displayProperties
+
+instance Zero DisplayProperties2KHR where
+  zero = DisplayProperties2KHR
+           zero
+
+
+-- | VkDisplayPlaneProperties2KHR - Structure describing an available display
+-- plane
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayPlanePropertiesKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceDisplayPlaneProperties2KHR'
+data DisplayPlaneProperties2KHR = DisplayPlaneProperties2KHR
+  { -- | @displayPlaneProperties@ is a
+    -- 'Vulkan.Extensions.VK_KHR_display.DisplayPlanePropertiesKHR' structure.
+    displayPlaneProperties :: DisplayPlanePropertiesKHR }
+  deriving (Typeable)
+deriving instance Show DisplayPlaneProperties2KHR
+
+instance ToCStruct DisplayPlaneProperties2KHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayPlaneProperties2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPlanePropertiesKHR)) (displayPlaneProperties) . ($ ())
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPlanePropertiesKHR)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct DisplayPlaneProperties2KHR where
+  peekCStruct p = do
+    displayPlaneProperties <- peekCStruct @DisplayPlanePropertiesKHR ((p `plusPtr` 16 :: Ptr DisplayPlanePropertiesKHR))
+    pure $ DisplayPlaneProperties2KHR
+             displayPlaneProperties
+
+instance Zero DisplayPlaneProperties2KHR where
+  zero = DisplayPlaneProperties2KHR
+           zero
+
+
+-- | VkDisplayModeProperties2KHR - Structure describing an available display
+-- mode
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayModePropertiesKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getDisplayModeProperties2KHR'
+data DisplayModeProperties2KHR = DisplayModeProperties2KHR
+  { -- | @displayModeProperties@ is a
+    -- 'Vulkan.Extensions.VK_KHR_display.DisplayModePropertiesKHR' structure.
+    displayModeProperties :: DisplayModePropertiesKHR }
+  deriving (Typeable)
+deriving instance Show DisplayModeProperties2KHR
+
+instance ToCStruct DisplayModeProperties2KHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayModeProperties2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayModePropertiesKHR)) (displayModeProperties) . ($ ())
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayModePropertiesKHR)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct DisplayModeProperties2KHR where
+  peekCStruct p = do
+    displayModeProperties <- peekCStruct @DisplayModePropertiesKHR ((p `plusPtr` 16 :: Ptr DisplayModePropertiesKHR))
+    pure $ DisplayModeProperties2KHR
+             displayModeProperties
+
+instance Zero DisplayModeProperties2KHR where
+  zero = DisplayModeProperties2KHR
+           zero
+
+
+-- | VkDisplayPlaneInfo2KHR - Structure defining the intended configuration
+-- of a display plane
+--
+-- = Description
+--
+-- Note
+--
+-- This parameter also implicitly specifies a display.
+--
+-- -   @planeIndex@ is the plane which the application intends to use with
+--     the display.
+--
+-- The members of 'DisplayPlaneInfo2KHR' correspond to the arguments to
+-- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneCapabilitiesKHR', with
+-- @sType@ and @pNext@ added for extensibility.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @mode@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayModeKHR'
+--     handle
+--
+-- == Host Synchronization
+--
+-- -   Host access to @mode@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.DisplayModeKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getDisplayPlaneCapabilities2KHR'
+data DisplayPlaneInfo2KHR = DisplayPlaneInfo2KHR
+  { -- | @mode@ is the display mode the application intends to program when using
+    -- the specified plane.
+    mode :: DisplayModeKHR
+  , -- No documentation found for Nested "VkDisplayPlaneInfo2KHR" "planeIndex"
+    planeIndex :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DisplayPlaneInfo2KHR
+
+instance ToCStruct DisplayPlaneInfo2KHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayPlaneInfo2KHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DisplayModeKHR)) (mode)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (planeIndex)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DisplayModeKHR)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DisplayPlaneInfo2KHR where
+  peekCStruct p = do
+    mode <- peek @DisplayModeKHR ((p `plusPtr` 16 :: Ptr DisplayModeKHR))
+    planeIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ DisplayPlaneInfo2KHR
+             mode planeIndex
+
+instance Storable DisplayPlaneInfo2KHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DisplayPlaneInfo2KHR where
+  zero = DisplayPlaneInfo2KHR
+           zero
+           zero
+
+
+-- | VkDisplayPlaneCapabilities2KHR - Structure describing the capabilities
+-- of a mode and plane combination
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_KHR_display.DisplayPlaneCapabilitiesKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getDisplayPlaneCapabilities2KHR'
+data DisplayPlaneCapabilities2KHR = DisplayPlaneCapabilities2KHR
+  { -- | @capabilities@ is a
+    -- 'Vulkan.Extensions.VK_KHR_display.DisplayPlaneCapabilitiesKHR'
+    -- structure.
+    capabilities :: DisplayPlaneCapabilitiesKHR }
+  deriving (Typeable)
+deriving instance Show DisplayPlaneCapabilities2KHR
+
+instance ToCStruct DisplayPlaneCapabilities2KHR where
+  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DisplayPlaneCapabilities2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPlaneCapabilitiesKHR)) (capabilities) . ($ ())
+    lift $ f
+  cStructSize = 88
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DisplayPlaneCapabilitiesKHR)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct DisplayPlaneCapabilities2KHR where
+  peekCStruct p = do
+    capabilities <- peekCStruct @DisplayPlaneCapabilitiesKHR ((p `plusPtr` 16 :: Ptr DisplayPlaneCapabilitiesKHR))
+    pure $ DisplayPlaneCapabilities2KHR
+             capabilities
+
+instance Zero DisplayPlaneCapabilities2KHR where
+  zero = DisplayPlaneCapabilities2KHR
+           zero
+
+
+type KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION"
+pattern KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION = 1
+
+
+type KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME = "VK_KHR_get_display_properties2"
+
+-- No documentation found for TopLevel "VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME"
+pattern KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME = "VK_KHR_get_display_properties2"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs-boot b/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs-boot
@@ -0,0 +1,50 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_get_display_properties2  ( DisplayModeProperties2KHR
+                                                         , DisplayPlaneCapabilities2KHR
+                                                         , DisplayPlaneInfo2KHR
+                                                         , DisplayPlaneProperties2KHR
+                                                         , DisplayProperties2KHR
+                                                         ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DisplayModeProperties2KHR
+
+instance ToCStruct DisplayModeProperties2KHR
+instance Show DisplayModeProperties2KHR
+
+instance FromCStruct DisplayModeProperties2KHR
+
+
+data DisplayPlaneCapabilities2KHR
+
+instance ToCStruct DisplayPlaneCapabilities2KHR
+instance Show DisplayPlaneCapabilities2KHR
+
+instance FromCStruct DisplayPlaneCapabilities2KHR
+
+
+data DisplayPlaneInfo2KHR
+
+instance ToCStruct DisplayPlaneInfo2KHR
+instance Show DisplayPlaneInfo2KHR
+
+instance FromCStruct DisplayPlaneInfo2KHR
+
+
+data DisplayPlaneProperties2KHR
+
+instance ToCStruct DisplayPlaneProperties2KHR
+instance Show DisplayPlaneProperties2KHR
+
+instance FromCStruct DisplayPlaneProperties2KHR
+
+
+data DisplayProperties2KHR
+
+instance ToCStruct DisplayProperties2KHR
+instance Show DisplayProperties2KHR
+
+instance FromCStruct DisplayProperties2KHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_get_memory_requirements2.hs b/src/Vulkan/Extensions/VK_KHR_get_memory_requirements2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_get_memory_requirements2.hs
@@ -0,0 +1,93 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_get_memory_requirements2  ( pattern STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR
+                                                          , pattern STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR
+                                                          , pattern STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR
+                                                          , pattern STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR
+                                                          , pattern STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR
+                                                          , getBufferMemoryRequirements2KHR
+                                                          , getImageMemoryRequirements2KHR
+                                                          , getImageSparseMemoryRequirements2KHR
+                                                          , BufferMemoryRequirementsInfo2KHR
+                                                          , ImageMemoryRequirementsInfo2KHR
+                                                          , ImageSparseMemoryRequirementsInfo2KHR
+                                                          , SparseImageMemoryRequirements2KHR
+                                                          , KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION
+                                                          , pattern KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION
+                                                          , KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME
+                                                          , pattern KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME
+                                                          ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (getBufferMemoryRequirements2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (getImageMemoryRequirements2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (getImageSparseMemoryRequirements2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (BufferMemoryRequirementsInfo2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageMemoryRequirementsInfo2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (ImageSparseMemoryRequirementsInfo2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (SparseImageMemoryRequirements2)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR"
+pattern STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR"
+pattern STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR"
+pattern STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR"
+pattern STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR"
+pattern STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2
+
+
+-- No documentation found for TopLevel "vkGetBufferMemoryRequirements2KHR"
+getBufferMemoryRequirements2KHR = getBufferMemoryRequirements2
+
+
+-- No documentation found for TopLevel "vkGetImageMemoryRequirements2KHR"
+getImageMemoryRequirements2KHR = getImageMemoryRequirements2
+
+
+-- No documentation found for TopLevel "vkGetImageSparseMemoryRequirements2KHR"
+getImageSparseMemoryRequirements2KHR = getImageSparseMemoryRequirements2
+
+
+-- No documentation found for TopLevel "VkBufferMemoryRequirementsInfo2KHR"
+type BufferMemoryRequirementsInfo2KHR = BufferMemoryRequirementsInfo2
+
+
+-- No documentation found for TopLevel "VkImageMemoryRequirementsInfo2KHR"
+type ImageMemoryRequirementsInfo2KHR = ImageMemoryRequirementsInfo2
+
+
+-- No documentation found for TopLevel "VkImageSparseMemoryRequirementsInfo2KHR"
+type ImageSparseMemoryRequirementsInfo2KHR = ImageSparseMemoryRequirementsInfo2
+
+
+-- No documentation found for TopLevel "VkSparseImageMemoryRequirements2KHR"
+type SparseImageMemoryRequirements2KHR = SparseImageMemoryRequirements2
+
+
+type KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION"
+pattern KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION = 1
+
+
+type KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME = "VK_KHR_get_memory_requirements2"
+
+-- No documentation found for TopLevel "VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME"
+pattern KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME = "VK_KHR_get_memory_requirements2"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_get_physical_device_properties2.hs b/src/Vulkan/Extensions/VK_KHR_get_physical_device_properties2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_get_physical_device_properties2.hs
@@ -0,0 +1,171 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_get_physical_device_properties2  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR
+                                                                 , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR
+                                                                 , pattern STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR
+                                                                 , pattern STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR
+                                                                 , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR
+                                                                 , pattern STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR
+                                                                 , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR
+                                                                 , pattern STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR
+                                                                 , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR
+                                                                 , getPhysicalDeviceFeatures2KHR
+                                                                 , getPhysicalDeviceProperties2KHR
+                                                                 , getPhysicalDeviceFormatProperties2KHR
+                                                                 , getPhysicalDeviceImageFormatProperties2KHR
+                                                                 , getPhysicalDeviceQueueFamilyProperties2KHR
+                                                                 , getPhysicalDeviceMemoryProperties2KHR
+                                                                 , getPhysicalDeviceSparseImageFormatProperties2KHR
+                                                                 , PhysicalDeviceFeatures2KHR
+                                                                 , PhysicalDeviceProperties2KHR
+                                                                 , FormatProperties2KHR
+                                                                 , ImageFormatProperties2KHR
+                                                                 , PhysicalDeviceImageFormatInfo2KHR
+                                                                 , QueueFamilyProperties2KHR
+                                                                 , PhysicalDeviceMemoryProperties2KHR
+                                                                 , SparseImageFormatProperties2KHR
+                                                                 , PhysicalDeviceSparseImageFormatInfo2KHR
+                                                                 , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION
+                                                                 , pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION
+                                                                 , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                                                                 , pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+                                                                 ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceFeatures2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceFormatProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceImageFormatProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceMemoryProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceQueueFamilyProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (getPhysicalDeviceSparseImageFormatProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (FormatProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (ImageFormatProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceImageFormatInfo2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceMemoryProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceSparseImageFormatInfo2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (QueueFamilyProperties2)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (SparseImageFormatProperties2)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FORMAT_PROPERTIES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR"
+pattern STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = STRUCTURE_TYPE_FORMAT_PROPERTIES_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR"
+pattern STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR"
+pattern STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR"
+pattern STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2
+
+
+-- No documentation found for TopLevel "vkGetPhysicalDeviceFeatures2KHR"
+getPhysicalDeviceFeatures2KHR = getPhysicalDeviceFeatures2
+
+
+-- No documentation found for TopLevel "vkGetPhysicalDeviceProperties2KHR"
+getPhysicalDeviceProperties2KHR = getPhysicalDeviceProperties2
+
+
+-- No documentation found for TopLevel "vkGetPhysicalDeviceFormatProperties2KHR"
+getPhysicalDeviceFormatProperties2KHR = getPhysicalDeviceFormatProperties2
+
+
+-- No documentation found for TopLevel "vkGetPhysicalDeviceImageFormatProperties2KHR"
+getPhysicalDeviceImageFormatProperties2KHR = getPhysicalDeviceImageFormatProperties2
+
+
+-- No documentation found for TopLevel "vkGetPhysicalDeviceQueueFamilyProperties2KHR"
+getPhysicalDeviceQueueFamilyProperties2KHR = getPhysicalDeviceQueueFamilyProperties2
+
+
+-- No documentation found for TopLevel "vkGetPhysicalDeviceMemoryProperties2KHR"
+getPhysicalDeviceMemoryProperties2KHR = getPhysicalDeviceMemoryProperties2
+
+
+-- No documentation found for TopLevel "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"
+getPhysicalDeviceSparseImageFormatProperties2KHR = getPhysicalDeviceSparseImageFormatProperties2
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceFeatures2KHR"
+type PhysicalDeviceFeatures2KHR = PhysicalDeviceFeatures2
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceProperties2KHR"
+type PhysicalDeviceProperties2KHR = PhysicalDeviceProperties2
+
+
+-- No documentation found for TopLevel "VkFormatProperties2KHR"
+type FormatProperties2KHR = FormatProperties2
+
+
+-- No documentation found for TopLevel "VkImageFormatProperties2KHR"
+type ImageFormatProperties2KHR = ImageFormatProperties2
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceImageFormatInfo2KHR"
+type PhysicalDeviceImageFormatInfo2KHR = PhysicalDeviceImageFormatInfo2
+
+
+-- No documentation found for TopLevel "VkQueueFamilyProperties2KHR"
+type QueueFamilyProperties2KHR = QueueFamilyProperties2
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceMemoryProperties2KHR"
+type PhysicalDeviceMemoryProperties2KHR = PhysicalDeviceMemoryProperties2
+
+
+-- No documentation found for TopLevel "VkSparseImageFormatProperties2KHR"
+type SparseImageFormatProperties2KHR = SparseImageFormatProperties2
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceSparseImageFormatInfo2KHR"
+type PhysicalDeviceSparseImageFormatInfo2KHR = PhysicalDeviceSparseImageFormatInfo2
+
+
+type KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION"
+pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION = 2
+
+
+type KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME = "VK_KHR_get_physical_device_properties2"
+
+-- No documentation found for TopLevel "VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME"
+pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME = "VK_KHR_get_physical_device_properties2"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs b/src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
@@ -0,0 +1,537 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_get_surface_capabilities2  ( getPhysicalDeviceSurfaceCapabilities2KHR
+                                                           , getPhysicalDeviceSurfaceFormats2KHR
+                                                           , PhysicalDeviceSurfaceInfo2KHR(..)
+                                                           , SurfaceCapabilities2KHR(..)
+                                                           , SurfaceFormat2KHR(..)
+                                                           , KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION
+                                                           , pattern KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION
+                                                           , KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME
+                                                           , pattern KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME
+                                                           , SurfaceKHR(..)
+                                                           , SurfaceCapabilitiesKHR(..)
+                                                           , SurfaceFormatKHR(..)
+                                                           , ColorSpaceKHR(..)
+                                                           , CompositeAlphaFlagBitsKHR(..)
+                                                           , CompositeAlphaFlagsKHR
+                                                           , SurfaceTransformFlagBitsKHR(..)
+                                                           , SurfaceTransformFlagsKHR
+                                                           ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_display_native_hdr (DisplayNativeHdrSurfaceCapabilitiesAMD)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceCapabilities2KHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceFormats2KHR))
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shared_presentable_image (SharedPresentSurfaceCapabilitiesKHR)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceCapabilitiesFullScreenExclusiveEXT)
+import Vulkan.Extensions.VK_KHR_surface (SurfaceCapabilitiesKHR)
+import Vulkan.Extensions.VK_KHR_surface (SurfaceFormatKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveWin32InfoEXT)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_surface_protected_capabilities (SurfaceProtectedCapabilitiesKHR)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.VK_KHR_surface (ColorSpaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (CompositeAlphaFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (CompositeAlphaFlagsKHR)
+import Vulkan.Extensions.VK_KHR_surface (SurfaceCapabilitiesKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceFormatKHR(..))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagsKHR)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSurfaceCapabilities2KHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr (SurfaceCapabilities2KHR b) -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr (SurfaceCapabilities2KHR b) -> IO Result
+
+-- | vkGetPhysicalDeviceSurfaceCapabilities2KHR - Reports capabilities of a
+-- surface on a physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @pSurfaceInfo@ is a pointer to a 'PhysicalDeviceSurfaceInfo2KHR'
+--     structure describing the surface and other fixed parameters that
+--     would be consumed by
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @pSurfaceCapabilities@ is a pointer to a 'SurfaceCapabilities2KHR'
+--     structure in which the capabilities are returned.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceSurfaceCapabilities2KHR' behaves similarly to
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
+-- with the ability to specify extended inputs via chained input
+-- structures, and to return extended information via chained output
+-- structures.
+--
+-- == Valid Usage
+--
+-- -   If a
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT'
+--     structure is included in the @pNext@ chain of
+--     @pSurfaceCapabilities@, a
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
+--     structure /must/ be included in the @pNext@ chain of @pSurfaceInfo@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid
+--     'PhysicalDeviceSurfaceInfo2KHR' structure
+--
+-- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a
+--     'SurfaceCapabilities2KHR' structure
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceSurfaceInfo2KHR',
+-- 'SurfaceCapabilities2KHR'
+getPhysicalDeviceSurfaceCapabilities2KHR :: forall a b io . (Extendss PhysicalDeviceSurfaceInfo2KHR a, Extendss SurfaceCapabilities2KHR b, PokeChain a, PokeChain b, PeekChain b, MonadIO io) => PhysicalDevice -> PhysicalDeviceSurfaceInfo2KHR a -> io (SurfaceCapabilities2KHR b)
+getPhysicalDeviceSurfaceCapabilities2KHR physicalDevice surfaceInfo = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSurfaceCapabilities2KHRPtr = pVkGetPhysicalDeviceSurfaceCapabilities2KHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSurfaceCapabilities2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSurfaceCapabilities2KHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceSurfaceCapabilities2KHR' = mkVkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHRPtr
+  pSurfaceInfo <- ContT $ withCStruct (surfaceInfo)
+  pPSurfaceCapabilities <- ContT (withZeroCStruct @(SurfaceCapabilities2KHR _))
+  r <- lift $ vkGetPhysicalDeviceSurfaceCapabilities2KHR' (physicalDeviceHandle (physicalDevice)) pSurfaceInfo (pPSurfaceCapabilities)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurfaceCapabilities <- lift $ peekCStruct @(SurfaceCapabilities2KHR _) pPSurfaceCapabilities
+  pure $ (pSurfaceCapabilities)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSurfaceFormats2KHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr Word32 -> Ptr SurfaceFormat2KHR -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (PhysicalDeviceSurfaceInfo2KHR a) -> Ptr Word32 -> Ptr SurfaceFormat2KHR -> IO Result
+
+-- | vkGetPhysicalDeviceSurfaceFormats2KHR - Query color formats supported by
+-- surface
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @pSurfaceInfo@ is a pointer to a 'PhysicalDeviceSurfaceInfo2KHR'
+--     structure describing the surface and other fixed parameters that
+--     would be consumed by
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @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
+--     'SurfaceFormat2KHR' structures.
+--
+-- = Description
+--
+-- 'getPhysicalDeviceSurfaceFormats2KHR' behaves similarly to
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceFormatsKHR',
+-- with the ability to be extended via @pNext@ chains.
+--
+-- If @pSurfaceFormats@ is @NULL@, then the number of format tuples
+-- supported for the given @surface@ is returned in @pSurfaceFormatCount@.
+-- 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@,
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.SUCCESS' to indicate that not all the
+-- available values were returned.
+--
+-- == Valid Usage
+--
+-- -   @pSurfaceInfo->surface@ /must/ be supported by @physicalDevice@, as
+--     reported by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR'
+--     or an equivalent platform-specific mechanism
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid
+--     'PhysicalDeviceSurfaceInfo2KHR' 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@ 'SurfaceFormat2KHR'
+--     structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceSurfaceInfo2KHR',
+-- 'SurfaceFormat2KHR'
+getPhysicalDeviceSurfaceFormats2KHR :: forall a io . (Extendss PhysicalDeviceSurfaceInfo2KHR a, PokeChain a, MonadIO io) => PhysicalDevice -> PhysicalDeviceSurfaceInfo2KHR a -> io (Result, ("surfaceFormats" ::: Vector SurfaceFormat2KHR))
+getPhysicalDeviceSurfaceFormats2KHR physicalDevice surfaceInfo = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSurfaceFormats2KHRPtr = pVkGetPhysicalDeviceSurfaceFormats2KHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSurfaceFormats2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSurfaceFormats2KHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceSurfaceFormats2KHR' = mkVkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pSurfaceInfo <- ContT $ withCStruct (surfaceInfo)
+  pPSurfaceFormatCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceSurfaceFormats2KHR' physicalDevice' pSurfaceInfo (pPSurfaceFormatCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurfaceFormatCount <- lift $ peek @Word32 pPSurfaceFormatCount
+  pPSurfaceFormats <- ContT $ bracket (callocBytes @SurfaceFormat2KHR ((fromIntegral (pSurfaceFormatCount)) * 24)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPSurfaceFormats `advancePtrBytes` (i * 24) :: Ptr SurfaceFormat2KHR) . ($ ())) [0..(fromIntegral (pSurfaceFormatCount)) - 1]
+  r' <- lift $ vkGetPhysicalDeviceSurfaceFormats2KHR' physicalDevice' pSurfaceInfo (pPSurfaceFormatCount) ((pPSurfaceFormats))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pSurfaceFormatCount' <- lift $ peek @Word32 pPSurfaceFormatCount
+  pSurfaceFormats' <- lift $ generateM (fromIntegral (pSurfaceFormatCount')) (\i -> peekCStruct @SurfaceFormat2KHR (((pPSurfaceFormats) `advancePtrBytes` (24 * (i)) :: Ptr SurfaceFormat2KHR)))
+  pure $ ((r'), pSurfaceFormats')
+
+
+-- | VkPhysicalDeviceSurfaceInfo2KHR - Structure specifying a surface and
+-- related swapchain creation parameters
+--
+-- = Description
+--
+-- The members of 'PhysicalDeviceSurfaceInfo2KHR' correspond to the
+-- arguments to
+-- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
+-- with @sType@ and @pNext@ added for extensibility.
+--
+-- Additional capabilities of a surface /may/ be available to swapchains
+-- created with different full-screen exclusive settings - particularly if
+-- exclusive full-screen access is application controlled. These additional
+-- capabilities /can/ be queried by adding a
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT'
+-- structure to the @pNext@ chain of this structure when used to query
+-- surface properties. Additionally, for Win32 surfaces with application
+-- controlled exclusive full-screen access, chaining a
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
+-- structure /may/ also report additional surface capabilities. These
+-- additional capabilities only apply to swapchains created with the same
+-- parameters included in the @pNext@ chain of
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'.
+--
+-- == Valid Usage
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT'
+--     structure with its @fullScreenExclusive@ member set to
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT',
+--     and @surface@ was created using
+--     'Vulkan.Extensions.VK_KHR_win32_surface.createWin32SurfaceKHR', a
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
+--     structure /must/ be included in the @pNext@ chain
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT'
+--     or
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.getDeviceGroupSurfacePresentModes2EXT',
+-- 'getPhysicalDeviceSurfaceCapabilities2KHR',
+-- 'getPhysicalDeviceSurfaceFormats2KHR',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.getPhysicalDeviceSurfacePresentModes2EXT'
+data PhysicalDeviceSurfaceInfo2KHR (es :: [Type]) = PhysicalDeviceSurfaceInfo2KHR
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @surface@ is the surface that will be associated with the swapchain.
+    surface :: SurfaceKHR
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PhysicalDeviceSurfaceInfo2KHR es)
+
+instance Extensible PhysicalDeviceSurfaceInfo2KHR where
+  extensibleType = STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR
+  setNext x next = x{next = next}
+  getNext PhysicalDeviceSurfaceInfo2KHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceSurfaceInfo2KHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @SurfaceFullScreenExclusiveWin32InfoEXT = Just f
+    | Just Refl <- eqT @e @SurfaceFullScreenExclusiveInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss PhysicalDeviceSurfaceInfo2KHR es, PokeChain es) => ToCStruct (PhysicalDeviceSurfaceInfo2KHR es) where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceSurfaceInfo2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr SurfaceKHR)) (surface)
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr SurfaceKHR)) (zero)
+    lift $ f
+
+instance (Extendss PhysicalDeviceSurfaceInfo2KHR es, PeekChain es) => FromCStruct (PhysicalDeviceSurfaceInfo2KHR es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    surface <- peek @SurfaceKHR ((p `plusPtr` 16 :: Ptr SurfaceKHR))
+    pure $ PhysicalDeviceSurfaceInfo2KHR
+             next surface
+
+instance es ~ '[] => Zero (PhysicalDeviceSurfaceInfo2KHR es) where
+  zero = PhysicalDeviceSurfaceInfo2KHR
+           ()
+           zero
+
+
+-- | VkSurfaceCapabilities2KHR - Structure describing capabilities of a
+-- surface
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_AMD_display_native_hdr.DisplayNativeHdrSurfaceCapabilitiesAMD',
+--     'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR',
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT',
+--     or
+--     'Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR',
+-- 'getPhysicalDeviceSurfaceCapabilities2KHR'
+data SurfaceCapabilities2KHR (es :: [Type]) = SurfaceCapabilities2KHR
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @surfaceCapabilities@ is a
+    -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure
+    -- describing the capabilities of the specified surface.
+    surfaceCapabilities :: SurfaceCapabilitiesKHR
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (SurfaceCapabilities2KHR es)
+
+instance Extensible SurfaceCapabilities2KHR where
+  extensibleType = STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR
+  setNext x next = x{next = next}
+  getNext SurfaceCapabilities2KHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SurfaceCapabilities2KHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @SurfaceCapabilitiesFullScreenExclusiveEXT = Just f
+    | Just Refl <- eqT @e @SurfaceProtectedCapabilitiesKHR = Just f
+    | Just Refl <- eqT @e @SharedPresentSurfaceCapabilitiesKHR = Just f
+    | Just Refl <- eqT @e @DisplayNativeHdrSurfaceCapabilitiesAMD = Just f
+    | otherwise = Nothing
+
+instance (Extendss SurfaceCapabilities2KHR es, PokeChain es) => ToCStruct (SurfaceCapabilities2KHR es) where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfaceCapabilities2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SurfaceCapabilitiesKHR)) (surfaceCapabilities) . ($ ())
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SurfaceCapabilitiesKHR)) (zero) . ($ ())
+    lift $ f
+
+instance (Extendss SurfaceCapabilities2KHR es, PeekChain es) => FromCStruct (SurfaceCapabilities2KHR es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    surfaceCapabilities <- peekCStruct @SurfaceCapabilitiesKHR ((p `plusPtr` 16 :: Ptr SurfaceCapabilitiesKHR))
+    pure $ SurfaceCapabilities2KHR
+             next surfaceCapabilities
+
+instance es ~ '[] => Zero (SurfaceCapabilities2KHR es) where
+  zero = SurfaceCapabilities2KHR
+           ()
+           zero
+
+
+-- | VkSurfaceFormat2KHR - Structure describing a supported swapchain format
+-- tuple
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR',
+-- 'getPhysicalDeviceSurfaceFormats2KHR'
+data SurfaceFormat2KHR = SurfaceFormat2KHR
+  { -- | @surfaceFormat@ is a 'Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR'
+    -- structure describing a format-color space pair that is compatible with
+    -- the specified surface.
+    surfaceFormat :: SurfaceFormatKHR }
+  deriving (Typeable)
+deriving instance Show SurfaceFormat2KHR
+
+instance ToCStruct SurfaceFormat2KHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfaceFormat2KHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SurfaceFormatKHR)) (surfaceFormat) . ($ ())
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr SurfaceFormatKHR)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct SurfaceFormat2KHR where
+  peekCStruct p = do
+    surfaceFormat <- peekCStruct @SurfaceFormatKHR ((p `plusPtr` 16 :: Ptr SurfaceFormatKHR))
+    pure $ SurfaceFormat2KHR
+             surfaceFormat
+
+instance Zero SurfaceFormat2KHR where
+  zero = SurfaceFormat2KHR
+           zero
+
+
+type KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION"
+pattern KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION = 1
+
+
+type KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME = "VK_KHR_get_surface_capabilities2"
+
+-- No documentation found for TopLevel "VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME"
+pattern KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME = "VK_KHR_get_surface_capabilities2"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs-boot b/src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs-boot
@@ -0,0 +1,38 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_get_surface_capabilities2  ( PhysicalDeviceSurfaceInfo2KHR
+                                                           , SurfaceCapabilities2KHR
+                                                           , SurfaceFormat2KHR
+                                                           ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+type role PhysicalDeviceSurfaceInfo2KHR nominal
+data PhysicalDeviceSurfaceInfo2KHR (es :: [Type])
+
+instance (Extendss PhysicalDeviceSurfaceInfo2KHR es, PokeChain es) => ToCStruct (PhysicalDeviceSurfaceInfo2KHR es)
+instance Show (Chain es) => Show (PhysicalDeviceSurfaceInfo2KHR es)
+
+instance (Extendss PhysicalDeviceSurfaceInfo2KHR es, PeekChain es) => FromCStruct (PhysicalDeviceSurfaceInfo2KHR es)
+
+
+type role SurfaceCapabilities2KHR nominal
+data SurfaceCapabilities2KHR (es :: [Type])
+
+instance (Extendss SurfaceCapabilities2KHR es, PokeChain es) => ToCStruct (SurfaceCapabilities2KHR es)
+instance Show (Chain es) => Show (SurfaceCapabilities2KHR es)
+
+instance (Extendss SurfaceCapabilities2KHR es, PeekChain es) => FromCStruct (SurfaceCapabilities2KHR es)
+
+
+data SurfaceFormat2KHR
+
+instance ToCStruct SurfaceFormat2KHR
+instance Show SurfaceFormat2KHR
+
+instance FromCStruct SurfaceFormat2KHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_image_format_list.hs b/src/Vulkan/Extensions/VK_KHR_image_format_list.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_image_format_list.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_image_format_list  ( pattern STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR
+                                                   , ImageFormatListCreateInfoKHR
+                                                   , KHR_IMAGE_FORMAT_LIST_SPEC_VERSION
+                                                   , pattern KHR_IMAGE_FORMAT_LIST_SPEC_VERSION
+                                                   , KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME
+                                                   , pattern KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME
+                                                   ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_image_format_list (ImageFormatListCreateInfo)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VkImageFormatListCreateInfoKHR"
+type ImageFormatListCreateInfoKHR = ImageFormatListCreateInfo
+
+
+type KHR_IMAGE_FORMAT_LIST_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION"
+pattern KHR_IMAGE_FORMAT_LIST_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_IMAGE_FORMAT_LIST_SPEC_VERSION = 1
+
+
+type KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME = "VK_KHR_image_format_list"
+
+-- No documentation found for TopLevel "VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME"
+pattern KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME = "VK_KHR_image_format_list"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_imageless_framebuffer.hs b/src/Vulkan/Extensions/VK_KHR_imageless_framebuffer.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_imageless_framebuffer.hs
@@ -0,0 +1,76 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_imageless_framebuffer  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR
+                                                       , pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR
+                                                       , pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR
+                                                       , pattern STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR
+                                                       , pattern FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR
+                                                       , PhysicalDeviceImagelessFramebufferFeaturesKHR
+                                                       , FramebufferAttachmentsCreateInfoKHR
+                                                       , FramebufferAttachmentImageInfoKHR
+                                                       , RenderPassAttachmentBeginInfoKHR
+                                                       , KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION
+                                                       , pattern KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION
+                                                       , KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME
+                                                       , pattern KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME
+                                                       ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (FramebufferAttachmentImageInfo)
+import Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (FramebufferAttachmentsCreateInfo)
+import Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (PhysicalDeviceImagelessFramebufferFeatures)
+import Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (RenderPassAttachmentBeginInfo)
+import Vulkan.Core10.Enums.FramebufferCreateFlagBits (FramebufferCreateFlags)
+import Vulkan.Core10.Enums.FramebufferCreateFlagBits (FramebufferCreateFlagBits(FRAMEBUFFER_CREATE_IMAGELESS_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR = STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR"
+pattern STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR = STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR"
+pattern STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR = STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO
+
+
+-- No documentation found for TopLevel "VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR"
+pattern FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR = FRAMEBUFFER_CREATE_IMAGELESS_BIT
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceImagelessFramebufferFeaturesKHR"
+type PhysicalDeviceImagelessFramebufferFeaturesKHR = PhysicalDeviceImagelessFramebufferFeatures
+
+
+-- No documentation found for TopLevel "VkFramebufferAttachmentsCreateInfoKHR"
+type FramebufferAttachmentsCreateInfoKHR = FramebufferAttachmentsCreateInfo
+
+
+-- No documentation found for TopLevel "VkFramebufferAttachmentImageInfoKHR"
+type FramebufferAttachmentImageInfoKHR = FramebufferAttachmentImageInfo
+
+
+-- No documentation found for TopLevel "VkRenderPassAttachmentBeginInfoKHR"
+type RenderPassAttachmentBeginInfoKHR = RenderPassAttachmentBeginInfo
+
+
+type KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION"
+pattern KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION = 1
+
+
+type KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME = "VK_KHR_imageless_framebuffer"
+
+-- No documentation found for TopLevel "VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME"
+pattern KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME = "VK_KHR_imageless_framebuffer"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_incremental_present.hs b/src/Vulkan/Extensions/VK_KHR_incremental_present.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_incremental_present.hs
@@ -0,0 +1,268 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_incremental_present  ( PresentRegionsKHR(..)
+                                                     , PresentRegionKHR(..)
+                                                     , RectLayerKHR(..)
+                                                     , KHR_INCREMENTAL_PRESENT_SPEC_VERSION
+                                                     , pattern KHR_INCREMENTAL_PRESENT_SPEC_VERSION
+                                                     , KHR_INCREMENTAL_PRESENT_EXTENSION_NAME
+                                                     , pattern KHR_INCREMENTAL_PRESENT_EXTENSION_NAME
+                                                     ) where
+
+import Control.Monad (unless)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.SharedTypes (Extent2D)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.SharedTypes (Offset2D)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRESENT_REGIONS_KHR))
+-- | VkPresentRegionsKHR - Structure hint of rectangular regions changed by
+-- vkQueuePresentKHR
+--
+-- == Valid Usage
+--
+-- -   @swapchainCount@ /must/ be the same value as
+--     'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@swapchainCount@,
+--     where 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' is
+--     included in the @pNext@ chain of this 'PresentRegionsKHR' structure
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_REGIONS_KHR'
+--
+-- -   If @pRegions@ is not @NULL@, @pRegions@ /must/ be a valid pointer to
+--     an array of @swapchainCount@ valid 'PresentRegionKHR' structures
+--
+-- -   @swapchainCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'PresentRegionKHR', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PresentRegionsKHR = PresentRegionsKHR
+  { -- | @swapchainCount@ is the number of swapchains being presented to by this
+    -- command.
+    swapchainCount :: Word32
+  , -- | @pRegions@ is @NULL@ or a pointer to an array of 'PresentRegionKHR'
+    -- elements with @swapchainCount@ entries. If not @NULL@, each element of
+    -- @pRegions@ contains the region that has changed since the last present
+    -- to the swapchain in the corresponding entry in the
+    -- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@pSwapchains@
+    -- array.
+    regions :: Vector PresentRegionKHR
+  }
+  deriving (Typeable)
+deriving instance Show PresentRegionsKHR
+
+instance ToCStruct PresentRegionsKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PresentRegionsKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_REGIONS_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    let pRegionsLength = Data.Vector.length $ (regions)
+    swapchainCount'' <- lift $ if (swapchainCount) == 0
+      then pure $ fromIntegral pRegionsLength
+      else do
+        unless (fromIntegral pRegionsLength == (swapchainCount) || pRegionsLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pRegions must be empty or have 'swapchainCount' elements" Nothing Nothing
+        pure (swapchainCount)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (swapchainCount'')
+    pRegions'' <- if Data.Vector.null (regions)
+      then pure nullPtr
+      else do
+        pPRegions <- ContT $ allocaBytesAligned @PresentRegionKHR (((Data.Vector.length (regions))) * 16) 8
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (16 * (i)) :: Ptr PresentRegionKHR) (e) . ($ ())) ((regions))
+        pure $ pPRegions
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr PresentRegionKHR))) pRegions''
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_REGIONS_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct PresentRegionsKHR where
+  peekCStruct p = do
+    swapchainCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pRegions <- peek @(Ptr PresentRegionKHR) ((p `plusPtr` 24 :: Ptr (Ptr PresentRegionKHR)))
+    let pRegionsLength = if pRegions == nullPtr then 0 else (fromIntegral swapchainCount)
+    pRegions' <- generateM pRegionsLength (\i -> peekCStruct @PresentRegionKHR ((pRegions `advancePtrBytes` (16 * (i)) :: Ptr PresentRegionKHR)))
+    pure $ PresentRegionsKHR
+             swapchainCount pRegions'
+
+instance Zero PresentRegionsKHR where
+  zero = PresentRegionsKHR
+           zero
+           mempty
+
+
+-- | VkPresentRegionKHR - Structure containing rectangular region changed by
+-- vkQueuePresentKHR for a given VkImage
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @rectangleCount@ is not @0@, and @pRectangles@ is not @NULL@,
+--     @pRectangles@ /must/ be a valid pointer to an array of
+--     @rectangleCount@ valid 'RectLayerKHR' structures
+--
+-- = See Also
+--
+-- 'PresentRegionsKHR', 'RectLayerKHR'
+data PresentRegionKHR = PresentRegionKHR
+  { -- | @rectangleCount@ is the number of rectangles in @pRectangles@, or zero
+    -- if the entire image has changed and should be presented.
+    rectangleCount :: Word32
+  , -- | @pRectangles@ is either @NULL@ or a pointer to an array of
+    -- 'RectLayerKHR' structures. The 'RectLayerKHR' structure is the
+    -- framebuffer coordinates, plus layer, of a portion of a presentable image
+    -- that has changed and /must/ be presented. If non-@NULL@, each entry in
+    -- @pRectangles@ is a rectangle of the given image that has changed since
+    -- the last image was presented to the given swapchain.
+    rectangles :: Vector RectLayerKHR
+  }
+  deriving (Typeable)
+deriving instance Show PresentRegionKHR
+
+instance ToCStruct PresentRegionKHR where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PresentRegionKHR{..} f = evalContT $ do
+    let pRectanglesLength = Data.Vector.length $ (rectangles)
+    rectangleCount'' <- lift $ if (rectangleCount) == 0
+      then pure $ fromIntegral pRectanglesLength
+      else do
+        unless (fromIntegral pRectanglesLength == (rectangleCount) || pRectanglesLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pRectangles must be empty or have 'rectangleCount' elements" Nothing Nothing
+        pure (rectangleCount)
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (rectangleCount'')
+    pRectangles'' <- if Data.Vector.null (rectangles)
+      then pure nullPtr
+      else do
+        pPRectangles <- ContT $ allocaBytesAligned @RectLayerKHR (((Data.Vector.length (rectangles))) * 20) 4
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRectangles `plusPtr` (20 * (i)) :: Ptr RectLayerKHR) (e) . ($ ())) ((rectangles))
+        pure $ pPRectangles
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr RectLayerKHR))) pRectangles''
+    lift $ f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct _ f = f
+
+instance FromCStruct PresentRegionKHR where
+  peekCStruct p = do
+    rectangleCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    pRectangles <- peek @(Ptr RectLayerKHR) ((p `plusPtr` 8 :: Ptr (Ptr RectLayerKHR)))
+    let pRectanglesLength = if pRectangles == nullPtr then 0 else (fromIntegral rectangleCount)
+    pRectangles' <- generateM pRectanglesLength (\i -> peekCStruct @RectLayerKHR ((pRectangles `advancePtrBytes` (20 * (i)) :: Ptr RectLayerKHR)))
+    pure $ PresentRegionKHR
+             rectangleCount pRectangles'
+
+instance Zero PresentRegionKHR where
+  zero = PresentRegionKHR
+           zero
+           mempty
+
+
+-- | VkRectLayerKHR - Structure containing a rectangle, including layer,
+-- changed by vkQueuePresentKHR for a given VkImage
+--
+-- == Valid Usage
+--
+-- -   The sum of @offset@ and @extent@ /must/ be no greater than the
+--     @imageExtent@ member of the
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
+--     structure passed to
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'
+--
+-- -   @layer@ /must/ be less than the @imageArrayLayers@ member of the
+--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
+--     structure passed to
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'
+--
+-- Some platforms allow the size of a surface to change, and then scale the
+-- pixels of the image to fit the surface. 'RectLayerKHR' specifies pixels
+-- of the swapchain’s image(s), which will be constant for the life of the
+-- swapchain.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.SharedTypes.Offset2D', 'PresentRegionKHR'
+data RectLayerKHR = RectLayerKHR
+  { -- | @offset@ is the origin of the rectangle, in pixels.
+    offset :: Offset2D
+  , -- | @extent@ is the size of the rectangle, in pixels.
+    extent :: Extent2D
+  , -- | @layer@ is the layer of the image. For images with only one layer, the
+    -- value of @layer@ /must/ be 0.
+    layer :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show RectLayerKHR
+
+instance ToCStruct RectLayerKHR where
+  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RectLayerKHR{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Offset2D)) (offset) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (extent) . ($ ())
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (layer)
+    lift $ f
+  cStructSize = 20
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Offset2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance FromCStruct RectLayerKHR where
+  peekCStruct p = do
+    offset <- peekCStruct @Offset2D ((p `plusPtr` 0 :: Ptr Offset2D))
+    extent <- peekCStruct @Extent2D ((p `plusPtr` 8 :: Ptr Extent2D))
+    layer <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ RectLayerKHR
+             offset extent layer
+
+instance Zero RectLayerKHR where
+  zero = RectLayerKHR
+           zero
+           zero
+           zero
+
+
+type KHR_INCREMENTAL_PRESENT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION"
+pattern KHR_INCREMENTAL_PRESENT_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_INCREMENTAL_PRESENT_SPEC_VERSION = 1
+
+
+type KHR_INCREMENTAL_PRESENT_EXTENSION_NAME = "VK_KHR_incremental_present"
+
+-- No documentation found for TopLevel "VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME"
+pattern KHR_INCREMENTAL_PRESENT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_INCREMENTAL_PRESENT_EXTENSION_NAME = "VK_KHR_incremental_present"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_incremental_present.hs-boot b/src/Vulkan/Extensions/VK_KHR_incremental_present.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_incremental_present.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_incremental_present  ( PresentRegionKHR
+                                                     , PresentRegionsKHR
+                                                     , RectLayerKHR
+                                                     ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PresentRegionKHR
+
+instance ToCStruct PresentRegionKHR
+instance Show PresentRegionKHR
+
+instance FromCStruct PresentRegionKHR
+
+
+data PresentRegionsKHR
+
+instance ToCStruct PresentRegionsKHR
+instance Show PresentRegionsKHR
+
+instance FromCStruct PresentRegionsKHR
+
+
+data RectLayerKHR
+
+instance ToCStruct RectLayerKHR
+instance Show RectLayerKHR
+
+instance FromCStruct RectLayerKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_maintenance1.hs b/src/Vulkan/Extensions/VK_KHR_maintenance1.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_maintenance1.hs
@@ -0,0 +1,60 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_maintenance1  ( pattern ERROR_OUT_OF_POOL_MEMORY_KHR
+                                              , pattern FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
+                                              , pattern FORMAT_FEATURE_TRANSFER_DST_BIT_KHR
+                                              , pattern IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR
+                                              , trimCommandPoolKHR
+                                              , CommandPoolTrimFlagsKHR
+                                              , KHR_MAINTENANCE1_SPEC_VERSION
+                                              , pattern KHR_MAINTENANCE1_SPEC_VERSION
+                                              , KHR_MAINTENANCE1_EXTENSION_NAME
+                                              , pattern KHR_MAINTENANCE1_EXTENSION_NAME
+                                              ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance1 (trimCommandPool)
+import Vulkan.Core11.Enums.CommandPoolTrimFlags (CommandPoolTrimFlags)
+import Vulkan.Core10.Enums.Result (Result(ERROR_OUT_OF_POOL_MEMORY))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_TRANSFER_DST_BIT))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_TRANSFER_SRC_BIT))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT))
+-- No documentation found for TopLevel "VK_ERROR_OUT_OF_POOL_MEMORY_KHR"
+pattern ERROR_OUT_OF_POOL_MEMORY_KHR = ERROR_OUT_OF_POOL_MEMORY
+
+
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR"
+pattern FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = FORMAT_FEATURE_TRANSFER_SRC_BIT
+
+
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR"
+pattern FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = FORMAT_FEATURE_TRANSFER_DST_BIT
+
+
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR"
+pattern IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT
+
+
+-- No documentation found for TopLevel "vkTrimCommandPoolKHR"
+trimCommandPoolKHR = trimCommandPool
+
+
+-- No documentation found for TopLevel "VkCommandPoolTrimFlagsKHR"
+type CommandPoolTrimFlagsKHR = CommandPoolTrimFlags
+
+
+type KHR_MAINTENANCE1_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE1_SPEC_VERSION"
+pattern KHR_MAINTENANCE1_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_MAINTENANCE1_SPEC_VERSION = 2
+
+
+type KHR_MAINTENANCE1_EXTENSION_NAME = "VK_KHR_maintenance1"
+
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE1_EXTENSION_NAME"
+pattern KHR_MAINTENANCE1_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_MAINTENANCE1_EXTENSION_NAME = "VK_KHR_maintenance1"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_maintenance2.hs b/src/Vulkan/Extensions/VK_KHR_maintenance2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_maintenance2.hs
@@ -0,0 +1,137 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_maintenance2  ( pattern IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR
+                                              , pattern IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR
+                                              , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR
+                                              , pattern STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR
+                                              , pattern STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR
+                                              , pattern STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR
+                                              , pattern IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR
+                                              , pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR
+                                              , pattern POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR
+                                              , pattern POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR
+                                              , pattern TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR
+                                              , pattern TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR
+                                              , PointClippingBehaviorKHR
+                                              , TessellationDomainOriginKHR
+                                              , InputAttachmentAspectReferenceKHR
+                                              , RenderPassInputAttachmentAspectCreateInfoKHR
+                                              , PhysicalDevicePointClippingPropertiesKHR
+                                              , ImageViewUsageCreateInfoKHR
+                                              , PipelineTessellationDomainOriginStateCreateInfoKHR
+                                              , KHR_MAINTENANCE2_SPEC_VERSION
+                                              , pattern KHR_MAINTENANCE2_SPEC_VERSION
+                                              , KHR_MAINTENANCE2_EXTENSION_NAME
+                                              , pattern KHR_MAINTENANCE2_EXTENSION_NAME
+                                              ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (ImageViewUsageCreateInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (InputAttachmentAspectReference)
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PhysicalDevicePointClippingProperties)
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PipelineTessellationDomainOriginStateCreateInfo)
+import Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior)
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (RenderPassInputAttachmentAspectCreateInfo)
+import Vulkan.Core11.Enums.TessellationDomainOrigin (TessellationDomainOrigin)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_EXTENDED_USAGE_BIT))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL))
+import Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior(POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES))
+import Vulkan.Core11.Enums.PointClippingBehavior (PointClippingBehavior(POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO))
+import Vulkan.Core11.Enums.TessellationDomainOrigin (TessellationDomainOrigin(TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT))
+import Vulkan.Core11.Enums.TessellationDomainOrigin (TessellationDomainOrigin(TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT))
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR"
+pattern IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT
+
+
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR"
+pattern IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = IMAGE_CREATE_EXTENDED_USAGE_BIT
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = 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 IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+
+
+-- No documentation found for TopLevel "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR"
+pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+
+
+-- No documentation found for TopLevel "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR"
+pattern POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
+
+
+-- No documentation found for TopLevel "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR"
+pattern POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
+
+
+-- No documentation found for TopLevel "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR"
+pattern TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT
+
+
+-- No documentation found for TopLevel "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR"
+pattern TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT
+
+
+-- No documentation found for TopLevel "VkPointClippingBehaviorKHR"
+type PointClippingBehaviorKHR = PointClippingBehavior
+
+
+-- No documentation found for TopLevel "VkTessellationDomainOriginKHR"
+type TessellationDomainOriginKHR = TessellationDomainOrigin
+
+
+-- No documentation found for TopLevel "VkInputAttachmentAspectReferenceKHR"
+type InputAttachmentAspectReferenceKHR = InputAttachmentAspectReference
+
+
+-- No documentation found for TopLevel "VkRenderPassInputAttachmentAspectCreateInfoKHR"
+type RenderPassInputAttachmentAspectCreateInfoKHR = RenderPassInputAttachmentAspectCreateInfo
+
+
+-- No documentation found for TopLevel "VkPhysicalDevicePointClippingPropertiesKHR"
+type PhysicalDevicePointClippingPropertiesKHR = PhysicalDevicePointClippingProperties
+
+
+-- No documentation found for TopLevel "VkImageViewUsageCreateInfoKHR"
+type ImageViewUsageCreateInfoKHR = ImageViewUsageCreateInfo
+
+
+-- No documentation found for TopLevel "VkPipelineTessellationDomainOriginStateCreateInfoKHR"
+type PipelineTessellationDomainOriginStateCreateInfoKHR = PipelineTessellationDomainOriginStateCreateInfo
+
+
+type KHR_MAINTENANCE2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE2_SPEC_VERSION"
+pattern KHR_MAINTENANCE2_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_MAINTENANCE2_SPEC_VERSION = 1
+
+
+type KHR_MAINTENANCE2_EXTENSION_NAME = "VK_KHR_maintenance2"
+
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE2_EXTENSION_NAME"
+pattern KHR_MAINTENANCE2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_MAINTENANCE2_EXTENSION_NAME = "VK_KHR_maintenance2"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_maintenance3.hs b/src/Vulkan/Extensions/VK_KHR_maintenance3.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_maintenance3.hs
@@ -0,0 +1,51 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_maintenance3  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR
+                                              , pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR
+                                              , getDescriptorSetLayoutSupportKHR
+                                              , PhysicalDeviceMaintenance3PropertiesKHR
+                                              , DescriptorSetLayoutSupportKHR
+                                              , KHR_MAINTENANCE3_SPEC_VERSION
+                                              , pattern KHR_MAINTENANCE3_SPEC_VERSION
+                                              , KHR_MAINTENANCE3_EXTENSION_NAME
+                                              , pattern KHR_MAINTENANCE3_EXTENSION_NAME
+                                              ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (getDescriptorSetLayoutSupport)
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (DescriptorSetLayoutSupport)
+import Vulkan.Core11.Promoted_From_VK_KHR_maintenance3 (PhysicalDeviceMaintenance3Properties)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR"
+pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT
+
+
+-- No documentation found for TopLevel "vkGetDescriptorSetLayoutSupportKHR"
+getDescriptorSetLayoutSupportKHR = getDescriptorSetLayoutSupport
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceMaintenance3PropertiesKHR"
+type PhysicalDeviceMaintenance3PropertiesKHR = PhysicalDeviceMaintenance3Properties
+
+
+-- No documentation found for TopLevel "VkDescriptorSetLayoutSupportKHR"
+type DescriptorSetLayoutSupportKHR = DescriptorSetLayoutSupport
+
+
+type KHR_MAINTENANCE3_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE3_SPEC_VERSION"
+pattern KHR_MAINTENANCE3_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_MAINTENANCE3_SPEC_VERSION = 1
+
+
+type KHR_MAINTENANCE3_EXTENSION_NAME = "VK_KHR_maintenance3"
+
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE3_EXTENSION_NAME"
+pattern KHR_MAINTENANCE3_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_MAINTENANCE3_EXTENSION_NAME = "VK_KHR_maintenance3"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_multiview.hs b/src/Vulkan/Extensions/VK_KHR_multiview.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_multiview.hs
@@ -0,0 +1,64 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_multiview  ( pattern STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR
+                                           , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR
+                                           , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR
+                                           , pattern DEPENDENCY_VIEW_LOCAL_BIT_KHR
+                                           , PhysicalDeviceMultiviewFeaturesKHR
+                                           , PhysicalDeviceMultiviewPropertiesKHR
+                                           , RenderPassMultiviewCreateInfoKHR
+                                           , KHR_MULTIVIEW_SPEC_VERSION
+                                           , pattern KHR_MULTIVIEW_SPEC_VERSION
+                                           , KHR_MULTIVIEW_EXTENSION_NAME
+                                           , pattern KHR_MULTIVIEW_EXTENSION_NAME
+                                           ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
+import Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewProperties)
+import Vulkan.Core11.Promoted_From_VK_KHR_multiview (RenderPassMultiviewCreateInfo)
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
+import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlagBits(DEPENDENCY_VIEW_LOCAL_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR"
+pattern DEPENDENCY_VIEW_LOCAL_BIT_KHR = DEPENDENCY_VIEW_LOCAL_BIT
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceMultiviewFeaturesKHR"
+type PhysicalDeviceMultiviewFeaturesKHR = PhysicalDeviceMultiviewFeatures
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceMultiviewPropertiesKHR"
+type PhysicalDeviceMultiviewPropertiesKHR = PhysicalDeviceMultiviewProperties
+
+
+-- No documentation found for TopLevel "VkRenderPassMultiviewCreateInfoKHR"
+type RenderPassMultiviewCreateInfoKHR = RenderPassMultiviewCreateInfo
+
+
+type KHR_MULTIVIEW_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_MULTIVIEW_SPEC_VERSION"
+pattern KHR_MULTIVIEW_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_MULTIVIEW_SPEC_VERSION = 1
+
+
+type KHR_MULTIVIEW_EXTENSION_NAME = "VK_KHR_multiview"
+
+-- No documentation found for TopLevel "VK_KHR_MULTIVIEW_EXTENSION_NAME"
+pattern KHR_MULTIVIEW_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_MULTIVIEW_EXTENSION_NAME = "VK_KHR_multiview"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_performance_query.hs b/src/Vulkan/Extensions/VK_KHR_performance_query.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_performance_query.hs
@@ -0,0 +1,1138 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_performance_query  ( enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR
+                                                   , getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
+                                                   , acquireProfilingLockKHR
+                                                   , releaseProfilingLockKHR
+                                                   , PhysicalDevicePerformanceQueryFeaturesKHR(..)
+                                                   , PhysicalDevicePerformanceQueryPropertiesKHR(..)
+                                                   , PerformanceCounterKHR(..)
+                                                   , PerformanceCounterDescriptionKHR(..)
+                                                   , QueryPoolPerformanceCreateInfoKHR(..)
+                                                   , AcquireProfilingLockInfoKHR(..)
+                                                   , PerformanceQuerySubmitInfoKHR(..)
+                                                   , PerformanceCounterResultKHR(..)
+                                                   , PerformanceCounterScopeKHR( PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR
+                                                                               , PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR
+                                                                               , PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR
+                                                                               , ..
+                                                                               )
+                                                   , PerformanceCounterUnitKHR( PERFORMANCE_COUNTER_UNIT_GENERIC_KHR
+                                                                              , PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR
+                                                                              , PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR
+                                                                              , PERFORMANCE_COUNTER_UNIT_BYTES_KHR
+                                                                              , PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR
+                                                                              , PERFORMANCE_COUNTER_UNIT_KELVIN_KHR
+                                                                              , PERFORMANCE_COUNTER_UNIT_WATTS_KHR
+                                                                              , PERFORMANCE_COUNTER_UNIT_VOLTS_KHR
+                                                                              , PERFORMANCE_COUNTER_UNIT_AMPS_KHR
+                                                                              , PERFORMANCE_COUNTER_UNIT_HERTZ_KHR
+                                                                              , PERFORMANCE_COUNTER_UNIT_CYCLES_KHR
+                                                                              , ..
+                                                                              )
+                                                   , PerformanceCounterStorageKHR( PERFORMANCE_COUNTER_STORAGE_INT32_KHR
+                                                                                 , PERFORMANCE_COUNTER_STORAGE_INT64_KHR
+                                                                                 , PERFORMANCE_COUNTER_STORAGE_UINT32_KHR
+                                                                                 , PERFORMANCE_COUNTER_STORAGE_UINT64_KHR
+                                                                                 , PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR
+                                                                                 , PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR
+                                                                                 , ..
+                                                                                 )
+                                                   , PerformanceCounterDescriptionFlagBitsKHR( PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR
+                                                                                             , PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR
+                                                                                             , ..
+                                                                                             )
+                                                   , PerformanceCounterDescriptionFlagsKHR
+                                                   , AcquireProfilingLockFlagBitsKHR(..)
+                                                   , AcquireProfilingLockFlagsKHR
+                                                   , KHR_PERFORMANCE_QUERY_SPEC_VERSION
+                                                   , pattern KHR_PERFORMANCE_QUERY_SPEC_VERSION
+                                                   , KHR_PERFORMANCE_QUERY_EXTENSION_NAME
+                                                   , pattern KHR_PERFORMANCE_QUERY_EXTENSION_NAME
+                                                   ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.ByteString (packCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.Trans.Cont (runContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CDouble)
+import Foreign.C.Types (CDouble(CDouble))
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Data.Int (Int64)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Word (Word8)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Utils (peekByteStringFromSizedVectorPtr)
+import Vulkan.CStruct.Utils (pokeFixedLengthByteString)
+import Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkAcquireProfilingLockKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkReleaseProfilingLockKHR))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR))
+import Vulkan.Core10.APIConstants (MAX_DESCRIPTION_SIZE)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Core10.APIConstants (UUID_SIZE)
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Word32 -> Ptr PerformanceCounterKHR -> Ptr PerformanceCounterDescriptionKHR -> IO Result) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Word32 -> Ptr PerformanceCounterKHR -> Ptr PerformanceCounterDescriptionKHR -> IO Result
+
+-- | vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR -
+-- Reports properties of the performance query counters available on a
+-- queue family of a device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the physical device whose queue
+--     family performance query counter properties will be queried.
+--
+-- -   @queueFamilyIndex@ is the index into the queue family of the
+--     physical device we want to get properties for.
+--
+-- -   @pCounterCount@ is a pointer to an integer related to the number of
+--     counters available or queried, as described below.
+--
+-- -   @pCounters@ is either @NULL@ or a pointer to an array of
+--     'PerformanceCounterKHR' structures.
+--
+-- -   @pCounterDescriptions@ is either @NULL@ or a pointer to an array of
+--     'PerformanceCounterDescriptionKHR' structures.
+--
+-- = Description
+--
+-- If @pCounters@ is @NULL@ and @pCounterDescriptions@ is @NULL@, then the
+-- number of counters available is returned in @pCounterCount@. Otherwise,
+-- @pCounterCount@ /must/ point to a variable set by the user to the number
+-- of elements in the @pCounters@, @pCounterDescriptions@, or both arrays
+-- and on return the variable is overwritten with the number of structures
+-- actually written out. If @pCounterCount@ is less than the number of
+-- counters available, at most @pCounterCount@ structures will be written
+-- and 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.SUCCESS'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pCounterCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pCounterCount@ is not @0@, and
+--     @pCounters@ is not @NULL@, @pCounters@ /must/ be a valid pointer to
+--     an array of @pCounterCount@ 'PerformanceCounterKHR' structures
+--
+-- -   If the value referenced by @pCounterCount@ is not @0@, and
+--     @pCounterDescriptions@ is not @NULL@, @pCounterDescriptions@ /must/
+--     be a valid pointer to an array of @pCounterCount@
+--     'PerformanceCounterDescriptionKHR' structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+-- = See Also
+--
+-- 'PerformanceCounterDescriptionKHR', 'PerformanceCounterKHR',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> io (Result, ("counters" ::: Vector PerformanceCounterKHR), ("counterDescriptions" ::: Vector PerformanceCounterDescriptionKHR))
+enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR physicalDevice queueFamilyIndex = liftIO . evalContT $ do
+  let vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHRPtr = pVkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR is null" Nothing Nothing
+  let vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR' = mkVkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPCounterCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR' physicalDevice' (queueFamilyIndex) (pPCounterCount) (nullPtr) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pCounterCount <- lift $ peek @Word32 pPCounterCount
+  pPCounters <- ContT $ bracket (callocBytes @PerformanceCounterKHR ((fromIntegral (pCounterCount)) * 48)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPCounters `advancePtrBytes` (i * 48) :: Ptr PerformanceCounterKHR) . ($ ())) [0..(fromIntegral (pCounterCount)) - 1]
+  pPCounterDescriptions <- ContT $ bracket (callocBytes @PerformanceCounterDescriptionKHR ((fromIntegral (pCounterCount)) * 792)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPCounterDescriptions `advancePtrBytes` (i * 792) :: Ptr PerformanceCounterDescriptionKHR) . ($ ())) [0..(fromIntegral (pCounterCount)) - 1]
+  r' <- lift $ vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR' physicalDevice' (queueFamilyIndex) (pPCounterCount) ((pPCounters)) ((pPCounterDescriptions))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pCounterCount' <- lift $ peek @Word32 pPCounterCount
+  let x33 = pCounterCount'
+  pCounters' <- lift $ generateM (fromIntegral x33) (\i -> peekCStruct @PerformanceCounterKHR (((pPCounters) `advancePtrBytes` (48 * (i)) :: Ptr PerformanceCounterKHR)))
+  pCounterDescriptions' <- lift $ generateM (fromIntegral x33) (\i -> peekCStruct @PerformanceCounterDescriptionKHR (((pPCounterDescriptions) `advancePtrBytes` (792 * (i)) :: Ptr PerformanceCounterDescriptionKHR)))
+  pure $ ((r'), pCounters', pCounterDescriptions')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr QueryPoolPerformanceCreateInfoKHR -> Ptr Word32 -> IO ()) -> Ptr PhysicalDevice_T -> Ptr QueryPoolPerformanceCreateInfoKHR -> Ptr Word32 -> IO ()
+
+-- | vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR - Reports the
+-- number of passes require for a performance query pool type
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the physical device whose queue
+--     family performance query counter properties will be queried.
+--
+-- -   @pPerformanceQueryCreateInfo@ is a pointer to a
+--     'QueryPoolPerformanceCreateInfoKHR' of the performance query that is
+--     to be created.
+--
+-- -   @pNumPasses@ is a pointer to an integer related to the number of
+--     passes required to query the performance query pool, as described
+--     below.
+--
+-- = Description
+--
+-- The @pPerformanceQueryCreateInfo@ member
+-- 'QueryPoolPerformanceCreateInfoKHR'::@queueFamilyIndex@ /must/ be a
+-- queue family of @physicalDevice@. The number of passes required to
+-- capture the counters specified in the @pPerformanceQueryCreateInfo@
+-- member 'QueryPoolPerformanceCreateInfoKHR'::@pCounters@ is returned in
+-- @pNumPasses@.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'QueryPoolPerformanceCreateInfoKHR'
+getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR :: forall io . MonadIO io => PhysicalDevice -> ("performanceQueryCreateInfo" ::: QueryPoolPerformanceCreateInfoKHR) -> io (("numPasses" ::: Word32))
+getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR physicalDevice performanceQueryCreateInfo = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHRPtr = pVkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR' = mkVkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHRPtr
+  pPerformanceQueryCreateInfo <- ContT $ withCStruct (performanceQueryCreateInfo)
+  pPNumPasses <- ContT $ bracket (callocBytes @Word32 4) free
+  lift $ vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR' (physicalDeviceHandle (physicalDevice)) pPerformanceQueryCreateInfo (pPNumPasses)
+  pNumPasses <- lift $ peek @Word32 pPNumPasses
+  pure $ (pNumPasses)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkAcquireProfilingLockKHR
+  :: FunPtr (Ptr Device_T -> Ptr AcquireProfilingLockInfoKHR -> IO Result) -> Ptr Device_T -> Ptr AcquireProfilingLockInfoKHR -> IO Result
+
+-- | vkAcquireProfilingLockKHR - Acquires the profiling lock
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device to profile.
+--
+-- -   @pInfo@ is a pointer to a 'AcquireProfilingLockInfoKHR' structure
+--     which contains information about how the profiling is to be
+--     acquired.
+--
+-- = Description
+--
+-- Implementations /may/ allow multiple actors to hold the profiling lock
+-- concurrently.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.TIMEOUT'
+--
+-- = See Also
+--
+-- 'AcquireProfilingLockInfoKHR', 'Vulkan.Core10.Handles.Device'
+acquireProfilingLockKHR :: forall io . MonadIO io => Device -> AcquireProfilingLockInfoKHR -> io ()
+acquireProfilingLockKHR device info = liftIO . evalContT $ do
+  let vkAcquireProfilingLockKHRPtr = pVkAcquireProfilingLockKHR (deviceCmds (device :: Device))
+  lift $ unless (vkAcquireProfilingLockKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAcquireProfilingLockKHR is null" Nothing Nothing
+  let vkAcquireProfilingLockKHR' = mkVkAcquireProfilingLockKHR vkAcquireProfilingLockKHRPtr
+  pInfo <- ContT $ withCStruct (info)
+  r <- lift $ vkAcquireProfilingLockKHR' (deviceHandle (device)) pInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkReleaseProfilingLockKHR
+  :: FunPtr (Ptr Device_T -> IO ()) -> Ptr Device_T -> IO ()
+
+-- | vkReleaseProfilingLockKHR - Releases the profiling lock
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device to cease profiling on.
+--
+-- == Valid Usage
+--
+-- -   The profiling lock of @device@ /must/ have been held via a previous
+--     successful call to 'acquireProfilingLockKHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device'
+releaseProfilingLockKHR :: forall io . MonadIO io => Device -> io ()
+releaseProfilingLockKHR device = liftIO $ do
+  let vkReleaseProfilingLockKHRPtr = pVkReleaseProfilingLockKHR (deviceCmds (device :: Device))
+  unless (vkReleaseProfilingLockKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkReleaseProfilingLockKHR is null" Nothing Nothing
+  let vkReleaseProfilingLockKHR' = mkVkReleaseProfilingLockKHR vkReleaseProfilingLockKHRPtr
+  vkReleaseProfilingLockKHR' (deviceHandle (device))
+  pure $ ()
+
+
+-- | VkPhysicalDevicePerformanceQueryFeaturesKHR - Structure describing
+-- performance query support for an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDevicePerformanceQueryFeaturesKHR' structure
+-- describe the following implementation-dependent features:
+--
+-- == Valid Usage (Implicit)
+--
+-- To query supported performance counter query pool features, call
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2'
+-- with a 'PhysicalDevicePerformanceQueryFeaturesKHR' structure included in
+-- the @pNext@ chain of its @pFeatures@ parameter. The
+-- 'PhysicalDevicePerformanceQueryFeaturesKHR' structure /can/ also be
+-- included in the @pNext@ chain of a
+-- 'Vulkan.Core10.Device.DeviceCreateInfo' structure, in which case it
+-- controls which additional features are enabled in the device.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePerformanceQueryFeaturesKHR = PhysicalDevicePerformanceQueryFeaturesKHR
+  { -- | @performanceCounterQueryPools@ is 'Vulkan.Core10.BaseType.TRUE' if the
+    -- physical device supports performance counter query pools.
+    performanceCounterQueryPools :: Bool
+  , -- | @performanceCounterMultipleQueryPools@ is
+    -- 'Vulkan.Core10.BaseType.TRUE'\` if the physical device supports using
+    -- multiple performance query pools in a primary command buffer and
+    -- secondary command buffers executed within it.
+    performanceCounterMultipleQueryPools :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDevicePerformanceQueryFeaturesKHR
+
+instance ToCStruct PhysicalDevicePerformanceQueryFeaturesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePerformanceQueryFeaturesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (performanceCounterQueryPools))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (performanceCounterMultipleQueryPools))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevicePerformanceQueryFeaturesKHR where
+  peekCStruct p = do
+    performanceCounterQueryPools <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    performanceCounterMultipleQueryPools <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDevicePerformanceQueryFeaturesKHR
+             (bool32ToBool performanceCounterQueryPools) (bool32ToBool performanceCounterMultipleQueryPools)
+
+instance Storable PhysicalDevicePerformanceQueryFeaturesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePerformanceQueryFeaturesKHR where
+  zero = PhysicalDevicePerformanceQueryFeaturesKHR
+           zero
+           zero
+
+
+-- | VkPhysicalDevicePerformanceQueryPropertiesKHR - Structure describing
+-- performance query properties for an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDevicePerformanceQueryPropertiesKHR'
+-- structure describe the following implementation-dependent properties:
+--
+-- == Valid Usage (Implicit)
+--
+-- If the 'PhysicalDevicePerformanceQueryPropertiesKHR' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent properties.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePerformanceQueryPropertiesKHR = PhysicalDevicePerformanceQueryPropertiesKHR
+  { -- | @allowCommandBufferQueryCopies@ is 'Vulkan.Core10.BaseType.TRUE' if the
+    -- performance query pools are allowed to be used with
+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults'.
+    allowCommandBufferQueryCopies :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDevicePerformanceQueryPropertiesKHR
+
+instance ToCStruct PhysicalDevicePerformanceQueryPropertiesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePerformanceQueryPropertiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (allowCommandBufferQueryCopies))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevicePerformanceQueryPropertiesKHR where
+  peekCStruct p = do
+    allowCommandBufferQueryCopies <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDevicePerformanceQueryPropertiesKHR
+             (bool32ToBool allowCommandBufferQueryCopies)
+
+instance Storable PhysicalDevicePerformanceQueryPropertiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePerformanceQueryPropertiesKHR where
+  zero = PhysicalDevicePerformanceQueryPropertiesKHR
+           zero
+
+
+-- | VkPerformanceCounterKHR - Structure providing information about a
+-- counter
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PerformanceCounterScopeKHR', 'PerformanceCounterStorageKHR',
+-- 'PerformanceCounterUnitKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR'
+data PerformanceCounterKHR = PerformanceCounterKHR
+  { -- | @unit@ is a 'PerformanceCounterUnitKHR' specifying the unit that the
+    -- counter data will record.
+    unit :: PerformanceCounterUnitKHR
+  , -- | @scope@ is a 'PerformanceCounterScopeKHR' specifying the scope that the
+    -- counter belongs to.
+    scope :: PerformanceCounterScopeKHR
+  , -- | @storage@ is a 'PerformanceCounterStorageKHR' specifying the storage
+    -- type that the counter’s data uses.
+    storage :: PerformanceCounterStorageKHR
+  , -- | @uuid@ is an array of size 'Vulkan.Core10.APIConstants.UUID_SIZE',
+    -- containing 8-bit values that represent a universally unique identifier
+    -- for the counter of the physical device.
+    uuid :: ByteString
+  }
+  deriving (Typeable)
+deriving instance Show PerformanceCounterKHR
+
+instance ToCStruct PerformanceCounterKHR where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PerformanceCounterKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PerformanceCounterUnitKHR)) (unit)
+    poke ((p `plusPtr` 20 :: Ptr PerformanceCounterScopeKHR)) (scope)
+    poke ((p `plusPtr` 24 :: Ptr PerformanceCounterStorageKHR)) (storage)
+    pokeFixedLengthByteString ((p `plusPtr` 28 :: Ptr (FixedArray UUID_SIZE Word8))) (uuid)
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PerformanceCounterUnitKHR)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr PerformanceCounterScopeKHR)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr PerformanceCounterStorageKHR)) (zero)
+    pokeFixedLengthByteString ((p `plusPtr` 28 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)
+    f
+
+instance FromCStruct PerformanceCounterKHR where
+  peekCStruct p = do
+    unit <- peek @PerformanceCounterUnitKHR ((p `plusPtr` 16 :: Ptr PerformanceCounterUnitKHR))
+    scope <- peek @PerformanceCounterScopeKHR ((p `plusPtr` 20 :: Ptr PerformanceCounterScopeKHR))
+    storage <- peek @PerformanceCounterStorageKHR ((p `plusPtr` 24 :: Ptr PerformanceCounterStorageKHR))
+    uuid <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 28 :: Ptr (FixedArray UUID_SIZE Word8)))
+    pure $ PerformanceCounterKHR
+             unit scope storage uuid
+
+instance Storable PerformanceCounterKHR where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PerformanceCounterKHR where
+  zero = PerformanceCounterKHR
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkPerformanceCounterDescriptionKHR - Structure providing more detailed
+-- information about a counter
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PerformanceCounterDescriptionFlagsKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR'
+data PerformanceCounterDescriptionKHR = PerformanceCounterDescriptionKHR
+  { -- | @flags@ is a bitmask of 'PerformanceCounterDescriptionFlagBitsKHR'
+    -- indicating the usage behavior for the counter.
+    flags :: PerformanceCounterDescriptionFlagsKHR
+  , -- | @name@ is an array of size
+    -- 'Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE', containing a
+    -- null-terminated UTF-8 string specifying the name of the counter.
+    name :: ByteString
+  , -- | @category@ is an array of size
+    -- 'Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE', containing a
+    -- null-terminated UTF-8 string specifying the category of the counter.
+    category :: ByteString
+  , -- | @description@ is an array of size
+    -- 'Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE', containing a
+    -- null-terminated UTF-8 string specifying the description of the counter.
+    description :: ByteString
+  }
+  deriving (Typeable)
+deriving instance Show PerformanceCounterDescriptionKHR
+
+instance ToCStruct PerformanceCounterDescriptionKHR where
+  withCStruct x f = allocaBytesAligned 792 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PerformanceCounterDescriptionKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PerformanceCounterDescriptionFlagsKHR)) (flags)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (name)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (category)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
+    f
+  cStructSize = 792
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    f
+
+instance FromCStruct PerformanceCounterDescriptionKHR where
+  peekCStruct p = do
+    flags <- peek @PerformanceCounterDescriptionFlagsKHR ((p `plusPtr` 16 :: Ptr PerformanceCounterDescriptionFlagsKHR))
+    name <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    category <- packCString (lowerArrayPtr ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    description <- packCString (lowerArrayPtr ((p `plusPtr` 532 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    pure $ PerformanceCounterDescriptionKHR
+             flags name category description
+
+instance Storable PerformanceCounterDescriptionKHR where
+  sizeOf ~_ = 792
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PerformanceCounterDescriptionKHR where
+  zero = PerformanceCounterDescriptionKHR
+           zero
+           mempty
+           mempty
+           mempty
+
+
+-- | VkQueryPoolPerformanceCreateInfoKHR - Structure specifying parameters of
+-- a newly created performance query pool
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be a valid queue family index of the
+--     device
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-features-performanceCounterQueryPools performanceCounterQueryPools>
+--     feature /must/ be enabled
+--
+-- -   Each element of @pCounterIndices@ /must/ be in the range of counters
+--     reported by
+--     'enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR' for
+--     the queue family specified in @queueFamilyIndex@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR'
+--
+-- -   @pCounterIndices@ /must/ be a valid pointer to an array of
+--     @counterIndexCount@ @uint32_t@ values
+--
+-- -   @counterIndexCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'
+data QueryPoolPerformanceCreateInfoKHR = QueryPoolPerformanceCreateInfoKHR
+  { -- | @queueFamilyIndex@ is the queue family index to create this performance
+    -- query pool for.
+    queueFamilyIndex :: Word32
+  , -- | @pCounterIndices@ is the array of indices into the
+    -- 'enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR'::@pCounters@
+    -- to enable in this performance query pool.
+    counterIndices :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show QueryPoolPerformanceCreateInfoKHR
+
+instance ToCStruct QueryPoolPerformanceCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p QueryPoolPerformanceCreateInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (queueFamilyIndex)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (counterIndices)) :: Word32))
+    pPCounterIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (counterIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (counterIndices)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPCounterIndices')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    pPCounterIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPCounterIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPCounterIndices')
+    lift $ f
+
+instance FromCStruct QueryPoolPerformanceCreateInfoKHR where
+  peekCStruct p = do
+    queueFamilyIndex <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    counterIndexCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pCounterIndices <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
+    pCounterIndices' <- generateM (fromIntegral counterIndexCount) (\i -> peek @Word32 ((pCounterIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ QueryPoolPerformanceCreateInfoKHR
+             queueFamilyIndex pCounterIndices'
+
+instance Zero QueryPoolPerformanceCreateInfoKHR where
+  zero = QueryPoolPerformanceCreateInfoKHR
+           zero
+           mempty
+
+
+-- | VkAcquireProfilingLockInfoKHR - Structure specifying parameters to
+-- acquire the profiling lock
+--
+-- == Valid Usage (Implicit)
+--
+-- If @timeout@ is 0, 'acquireProfilingLockKHR' will not block while
+-- attempting to acquire the profling lock. If @timeout@ is @UINT64_MAX@,
+-- the function will not return until the profiling lock was acquired.
+--
+-- = See Also
+--
+-- 'AcquireProfilingLockFlagsKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'acquireProfilingLockKHR'
+data AcquireProfilingLockInfoKHR = AcquireProfilingLockInfoKHR
+  { -- | @flags@ /must/ be @0@
+    flags :: AcquireProfilingLockFlagsKHR
+  , -- | @timeout@ indicates how long the function waits, in nanoseconds, if the
+    -- profiling lock is not available.
+    timeout :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show AcquireProfilingLockInfoKHR
+
+instance ToCStruct AcquireProfilingLockInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AcquireProfilingLockInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AcquireProfilingLockFlagsKHR)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (timeout)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    f
+
+instance FromCStruct AcquireProfilingLockInfoKHR where
+  peekCStruct p = do
+    flags <- peek @AcquireProfilingLockFlagsKHR ((p `plusPtr` 16 :: Ptr AcquireProfilingLockFlagsKHR))
+    timeout <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    pure $ AcquireProfilingLockInfoKHR
+             flags timeout
+
+instance Storable AcquireProfilingLockInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AcquireProfilingLockInfoKHR where
+  zero = AcquireProfilingLockInfoKHR
+           zero
+           zero
+
+
+-- | VkPerformanceQuerySubmitInfoKHR - Structure indicating which counter
+-- pass index is active for performance queries
+--
+-- = Description
+--
+-- If the 'Vulkan.Core10.Queue.SubmitInfo'::@pNext@ chain does not include
+-- this structure, the batch defaults to use counter pass index 0.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PerformanceQuerySubmitInfoKHR = PerformanceQuerySubmitInfoKHR
+  { -- | @counterPassIndex@ /must/ be less than the number of counter passes
+    -- required by any queries within the batch. The required number of counter
+    -- passes for a performance query is obtained by calling
+    -- 'getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'
+    counterPassIndex :: Word32 }
+  deriving (Typeable)
+deriving instance Show PerformanceQuerySubmitInfoKHR
+
+instance ToCStruct PerformanceQuerySubmitInfoKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PerformanceQuerySubmitInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (counterPassIndex)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PerformanceQuerySubmitInfoKHR where
+  peekCStruct p = do
+    counterPassIndex <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ PerformanceQuerySubmitInfoKHR
+             counterPassIndex
+
+instance Storable PerformanceQuerySubmitInfoKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PerformanceQuerySubmitInfoKHR where
+  zero = PerformanceQuerySubmitInfoKHR
+           zero
+
+
+data PerformanceCounterResultKHR
+  = Int32Counter Int32
+  | Int64Counter Int64
+  | Uint32Counter Word32
+  | Uint64Counter Word64
+  | Float32Counter Float
+  | Float64Counter Double
+  deriving (Show)
+
+instance ToCStruct PerformanceCounterResultKHR where
+  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct :: Ptr PerformanceCounterResultKHR -> PerformanceCounterResultKHR -> IO a -> IO a
+  pokeCStruct p = (. const) . runContT .  \case
+    Int32Counter v -> lift $ poke (castPtr @_ @Int32 p) (v)
+    Int64Counter v -> lift $ poke (castPtr @_ @Int64 p) (v)
+    Uint32Counter v -> lift $ poke (castPtr @_ @Word32 p) (v)
+    Uint64Counter v -> lift $ poke (castPtr @_ @Word64 p) (v)
+    Float32Counter v -> lift $ poke (castPtr @_ @CFloat p) (CFloat (v))
+    Float64Counter v -> lift $ poke (castPtr @_ @CDouble p) (CDouble (v))
+  pokeZeroCStruct :: Ptr PerformanceCounterResultKHR -> IO b -> IO b
+  pokeZeroCStruct _ f = f
+  cStructSize = 8
+  cStructAlignment = 8
+
+instance Zero PerformanceCounterResultKHR where
+  zero = Int64Counter zero
+
+
+-- | VkPerformanceCounterScopeKHR - Supported counter scope types
+--
+-- = See Also
+--
+-- 'PerformanceCounterKHR'
+newtype PerformanceCounterScopeKHR = PerformanceCounterScopeKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR' - the performance counter
+-- scope is a single complete command buffer.
+pattern PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR = PerformanceCounterScopeKHR 0
+-- | 'PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR' - the performance counter
+-- scope is zero or more complete render passes. The performance query
+-- containing the performance counter /must/ begin and end outside a render
+-- pass instance.
+pattern PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR = PerformanceCounterScopeKHR 1
+-- | 'PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR' - the performance counter scope
+-- is zero or more commands.
+pattern PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR = PerformanceCounterScopeKHR 2
+{-# complete PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR,
+             PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR,
+             PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR :: PerformanceCounterScopeKHR #-}
+
+instance Show PerformanceCounterScopeKHR where
+  showsPrec p = \case
+    PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR -> showString "PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR"
+    PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR -> showString "PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR"
+    PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR -> showString "PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR"
+    PerformanceCounterScopeKHR x -> showParen (p >= 11) (showString "PerformanceCounterScopeKHR " . showsPrec 11 x)
+
+instance Read PerformanceCounterScopeKHR where
+  readPrec = parens (choose [("PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR", pure PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR)
+                            , ("PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR", pure PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR)
+                            , ("PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR", pure PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PerformanceCounterScopeKHR")
+                       v <- step readPrec
+                       pure (PerformanceCounterScopeKHR v)))
+
+
+-- | VkPerformanceCounterUnitKHR - Supported counter unit types
+--
+-- = See Also
+--
+-- 'PerformanceCounterKHR'
+newtype PerformanceCounterUnitKHR = PerformanceCounterUnitKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'PERFORMANCE_COUNTER_UNIT_GENERIC_KHR' - the performance counter unit is
+-- a generic data point.
+pattern PERFORMANCE_COUNTER_UNIT_GENERIC_KHR = PerformanceCounterUnitKHR 0
+-- | 'PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR' - the performance counter unit
+-- is a percentage (%).
+pattern PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR = PerformanceCounterUnitKHR 1
+-- | 'PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR' - the performance counter
+-- unit is a value of nanoseconds (ns).
+pattern PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR = PerformanceCounterUnitKHR 2
+-- | 'PERFORMANCE_COUNTER_UNIT_BYTES_KHR' - the performance counter unit is a
+-- value of bytes.
+pattern PERFORMANCE_COUNTER_UNIT_BYTES_KHR = PerformanceCounterUnitKHR 3
+-- | 'PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR' - the performance
+-- counter unit is a value of bytes\/s.
+pattern PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR = PerformanceCounterUnitKHR 4
+-- | 'PERFORMANCE_COUNTER_UNIT_KELVIN_KHR' - the performance counter unit is
+-- a temperature reported in Kelvin.
+pattern PERFORMANCE_COUNTER_UNIT_KELVIN_KHR = PerformanceCounterUnitKHR 5
+-- | 'PERFORMANCE_COUNTER_UNIT_WATTS_KHR' - the performance counter unit is a
+-- value of watts (W).
+pattern PERFORMANCE_COUNTER_UNIT_WATTS_KHR = PerformanceCounterUnitKHR 6
+-- | 'PERFORMANCE_COUNTER_UNIT_VOLTS_KHR' - the performance counter unit is a
+-- value of volts (V).
+pattern PERFORMANCE_COUNTER_UNIT_VOLTS_KHR = PerformanceCounterUnitKHR 7
+-- | 'PERFORMANCE_COUNTER_UNIT_AMPS_KHR' - the performance counter unit is a
+-- value of amps (A).
+pattern PERFORMANCE_COUNTER_UNIT_AMPS_KHR = PerformanceCounterUnitKHR 8
+-- | 'PERFORMANCE_COUNTER_UNIT_HERTZ_KHR' - the performance counter unit is a
+-- value of hertz (Hz).
+pattern PERFORMANCE_COUNTER_UNIT_HERTZ_KHR = PerformanceCounterUnitKHR 9
+-- | 'PERFORMANCE_COUNTER_UNIT_CYCLES_KHR' - the performance counter unit is
+-- a value of cycles.
+pattern PERFORMANCE_COUNTER_UNIT_CYCLES_KHR = PerformanceCounterUnitKHR 10
+{-# complete PERFORMANCE_COUNTER_UNIT_GENERIC_KHR,
+             PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR,
+             PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR,
+             PERFORMANCE_COUNTER_UNIT_BYTES_KHR,
+             PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR,
+             PERFORMANCE_COUNTER_UNIT_KELVIN_KHR,
+             PERFORMANCE_COUNTER_UNIT_WATTS_KHR,
+             PERFORMANCE_COUNTER_UNIT_VOLTS_KHR,
+             PERFORMANCE_COUNTER_UNIT_AMPS_KHR,
+             PERFORMANCE_COUNTER_UNIT_HERTZ_KHR,
+             PERFORMANCE_COUNTER_UNIT_CYCLES_KHR :: PerformanceCounterUnitKHR #-}
+
+instance Show PerformanceCounterUnitKHR where
+  showsPrec p = \case
+    PERFORMANCE_COUNTER_UNIT_GENERIC_KHR -> showString "PERFORMANCE_COUNTER_UNIT_GENERIC_KHR"
+    PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR -> showString "PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR"
+    PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR -> showString "PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR"
+    PERFORMANCE_COUNTER_UNIT_BYTES_KHR -> showString "PERFORMANCE_COUNTER_UNIT_BYTES_KHR"
+    PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR -> showString "PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR"
+    PERFORMANCE_COUNTER_UNIT_KELVIN_KHR -> showString "PERFORMANCE_COUNTER_UNIT_KELVIN_KHR"
+    PERFORMANCE_COUNTER_UNIT_WATTS_KHR -> showString "PERFORMANCE_COUNTER_UNIT_WATTS_KHR"
+    PERFORMANCE_COUNTER_UNIT_VOLTS_KHR -> showString "PERFORMANCE_COUNTER_UNIT_VOLTS_KHR"
+    PERFORMANCE_COUNTER_UNIT_AMPS_KHR -> showString "PERFORMANCE_COUNTER_UNIT_AMPS_KHR"
+    PERFORMANCE_COUNTER_UNIT_HERTZ_KHR -> showString "PERFORMANCE_COUNTER_UNIT_HERTZ_KHR"
+    PERFORMANCE_COUNTER_UNIT_CYCLES_KHR -> showString "PERFORMANCE_COUNTER_UNIT_CYCLES_KHR"
+    PerformanceCounterUnitKHR x -> showParen (p >= 11) (showString "PerformanceCounterUnitKHR " . showsPrec 11 x)
+
+instance Read PerformanceCounterUnitKHR where
+  readPrec = parens (choose [("PERFORMANCE_COUNTER_UNIT_GENERIC_KHR", pure PERFORMANCE_COUNTER_UNIT_GENERIC_KHR)
+                            , ("PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR", pure PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR)
+                            , ("PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR", pure PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR)
+                            , ("PERFORMANCE_COUNTER_UNIT_BYTES_KHR", pure PERFORMANCE_COUNTER_UNIT_BYTES_KHR)
+                            , ("PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR", pure PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR)
+                            , ("PERFORMANCE_COUNTER_UNIT_KELVIN_KHR", pure PERFORMANCE_COUNTER_UNIT_KELVIN_KHR)
+                            , ("PERFORMANCE_COUNTER_UNIT_WATTS_KHR", pure PERFORMANCE_COUNTER_UNIT_WATTS_KHR)
+                            , ("PERFORMANCE_COUNTER_UNIT_VOLTS_KHR", pure PERFORMANCE_COUNTER_UNIT_VOLTS_KHR)
+                            , ("PERFORMANCE_COUNTER_UNIT_AMPS_KHR", pure PERFORMANCE_COUNTER_UNIT_AMPS_KHR)
+                            , ("PERFORMANCE_COUNTER_UNIT_HERTZ_KHR", pure PERFORMANCE_COUNTER_UNIT_HERTZ_KHR)
+                            , ("PERFORMANCE_COUNTER_UNIT_CYCLES_KHR", pure PERFORMANCE_COUNTER_UNIT_CYCLES_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PerformanceCounterUnitKHR")
+                       v <- step readPrec
+                       pure (PerformanceCounterUnitKHR v)))
+
+
+-- | VkPerformanceCounterStorageKHR - Supported counter storage types
+--
+-- = See Also
+--
+-- 'PerformanceCounterKHR'
+newtype PerformanceCounterStorageKHR = PerformanceCounterStorageKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'PERFORMANCE_COUNTER_STORAGE_INT32_KHR' - the performance counter
+-- storage is a 32-bit signed integer.
+pattern PERFORMANCE_COUNTER_STORAGE_INT32_KHR = PerformanceCounterStorageKHR 0
+-- | 'PERFORMANCE_COUNTER_STORAGE_INT64_KHR' - the performance counter
+-- storage is a 64-bit signed integer.
+pattern PERFORMANCE_COUNTER_STORAGE_INT64_KHR = PerformanceCounterStorageKHR 1
+-- | 'PERFORMANCE_COUNTER_STORAGE_UINT32_KHR' - the performance counter
+-- storage is a 32-bit unsigned integer.
+pattern PERFORMANCE_COUNTER_STORAGE_UINT32_KHR = PerformanceCounterStorageKHR 2
+-- | 'PERFORMANCE_COUNTER_STORAGE_UINT64_KHR' - the performance counter
+-- storage is a 64-bit unsigned integer.
+pattern PERFORMANCE_COUNTER_STORAGE_UINT64_KHR = PerformanceCounterStorageKHR 3
+-- | 'PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR' - the performance counter
+-- storage is a 32-bit floating-point.
+pattern PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR = PerformanceCounterStorageKHR 4
+-- | 'PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR' - the performance counter
+-- storage is a 64-bit floating-point.
+pattern PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR = PerformanceCounterStorageKHR 5
+{-# complete PERFORMANCE_COUNTER_STORAGE_INT32_KHR,
+             PERFORMANCE_COUNTER_STORAGE_INT64_KHR,
+             PERFORMANCE_COUNTER_STORAGE_UINT32_KHR,
+             PERFORMANCE_COUNTER_STORAGE_UINT64_KHR,
+             PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR,
+             PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR :: PerformanceCounterStorageKHR #-}
+
+instance Show PerformanceCounterStorageKHR where
+  showsPrec p = \case
+    PERFORMANCE_COUNTER_STORAGE_INT32_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_INT32_KHR"
+    PERFORMANCE_COUNTER_STORAGE_INT64_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_INT64_KHR"
+    PERFORMANCE_COUNTER_STORAGE_UINT32_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_UINT32_KHR"
+    PERFORMANCE_COUNTER_STORAGE_UINT64_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_UINT64_KHR"
+    PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR"
+    PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR -> showString "PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR"
+    PerformanceCounterStorageKHR x -> showParen (p >= 11) (showString "PerformanceCounterStorageKHR " . showsPrec 11 x)
+
+instance Read PerformanceCounterStorageKHR where
+  readPrec = parens (choose [("PERFORMANCE_COUNTER_STORAGE_INT32_KHR", pure PERFORMANCE_COUNTER_STORAGE_INT32_KHR)
+                            , ("PERFORMANCE_COUNTER_STORAGE_INT64_KHR", pure PERFORMANCE_COUNTER_STORAGE_INT64_KHR)
+                            , ("PERFORMANCE_COUNTER_STORAGE_UINT32_KHR", pure PERFORMANCE_COUNTER_STORAGE_UINT32_KHR)
+                            , ("PERFORMANCE_COUNTER_STORAGE_UINT64_KHR", pure PERFORMANCE_COUNTER_STORAGE_UINT64_KHR)
+                            , ("PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR", pure PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR)
+                            , ("PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR", pure PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PerformanceCounterStorageKHR")
+                       v <- step readPrec
+                       pure (PerformanceCounterStorageKHR v)))
+
+
+-- | VkPerformanceCounterDescriptionFlagBitsKHR - Bitmask specifying usage
+-- behavior for a counter
+--
+-- = See Also
+--
+-- 'PerformanceCounterDescriptionFlagsKHR'
+newtype PerformanceCounterDescriptionFlagBitsKHR = PerformanceCounterDescriptionFlagBitsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR' specifies
+-- that recording the counter /may/ have a noticeable performance impact.
+pattern PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR = PerformanceCounterDescriptionFlagBitsKHR 0x00000001
+-- | 'PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR' specifies
+-- that concurrently recording the counter while other submitted command
+-- buffers are running /may/ impact the accuracy of the recording.
+pattern PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR = PerformanceCounterDescriptionFlagBitsKHR 0x00000002
+
+type PerformanceCounterDescriptionFlagsKHR = PerformanceCounterDescriptionFlagBitsKHR
+
+instance Show PerformanceCounterDescriptionFlagBitsKHR where
+  showsPrec p = \case
+    PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR -> showString "PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR"
+    PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR -> showString "PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR"
+    PerformanceCounterDescriptionFlagBitsKHR x -> showParen (p >= 11) (showString "PerformanceCounterDescriptionFlagBitsKHR 0x" . showHex x)
+
+instance Read PerformanceCounterDescriptionFlagBitsKHR where
+  readPrec = parens (choose [("PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR", pure PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR)
+                            , ("PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR", pure PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PerformanceCounterDescriptionFlagBitsKHR")
+                       v <- step readPrec
+                       pure (PerformanceCounterDescriptionFlagBitsKHR v)))
+
+
+-- | VkAcquireProfilingLockFlagBitsKHR - Reserved for future use
+--
+-- = See Also
+--
+-- 'AcquireProfilingLockFlagsKHR'
+newtype AcquireProfilingLockFlagBitsKHR = AcquireProfilingLockFlagBitsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+type AcquireProfilingLockFlagsKHR = AcquireProfilingLockFlagBitsKHR
+
+instance Show AcquireProfilingLockFlagBitsKHR where
+  showsPrec p = \case
+    AcquireProfilingLockFlagBitsKHR x -> showParen (p >= 11) (showString "AcquireProfilingLockFlagBitsKHR 0x" . showHex x)
+
+instance Read AcquireProfilingLockFlagBitsKHR where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "AcquireProfilingLockFlagBitsKHR")
+                       v <- step readPrec
+                       pure (AcquireProfilingLockFlagBitsKHR v)))
+
+
+type KHR_PERFORMANCE_QUERY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION"
+pattern KHR_PERFORMANCE_QUERY_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_PERFORMANCE_QUERY_SPEC_VERSION = 1
+
+
+type KHR_PERFORMANCE_QUERY_EXTENSION_NAME = "VK_KHR_performance_query"
+
+-- No documentation found for TopLevel "VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME"
+pattern KHR_PERFORMANCE_QUERY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_PERFORMANCE_QUERY_EXTENSION_NAME = "VK_KHR_performance_query"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_performance_query.hs-boot b/src/Vulkan/Extensions/VK_KHR_performance_query.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_performance_query.hs-boot
@@ -0,0 +1,68 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_performance_query  ( AcquireProfilingLockInfoKHR
+                                                   , PerformanceCounterDescriptionKHR
+                                                   , PerformanceCounterKHR
+                                                   , PerformanceQuerySubmitInfoKHR
+                                                   , PhysicalDevicePerformanceQueryFeaturesKHR
+                                                   , PhysicalDevicePerformanceQueryPropertiesKHR
+                                                   , QueryPoolPerformanceCreateInfoKHR
+                                                   ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data AcquireProfilingLockInfoKHR
+
+instance ToCStruct AcquireProfilingLockInfoKHR
+instance Show AcquireProfilingLockInfoKHR
+
+instance FromCStruct AcquireProfilingLockInfoKHR
+
+
+data PerformanceCounterDescriptionKHR
+
+instance ToCStruct PerformanceCounterDescriptionKHR
+instance Show PerformanceCounterDescriptionKHR
+
+instance FromCStruct PerformanceCounterDescriptionKHR
+
+
+data PerformanceCounterKHR
+
+instance ToCStruct PerformanceCounterKHR
+instance Show PerformanceCounterKHR
+
+instance FromCStruct PerformanceCounterKHR
+
+
+data PerformanceQuerySubmitInfoKHR
+
+instance ToCStruct PerformanceQuerySubmitInfoKHR
+instance Show PerformanceQuerySubmitInfoKHR
+
+instance FromCStruct PerformanceQuerySubmitInfoKHR
+
+
+data PhysicalDevicePerformanceQueryFeaturesKHR
+
+instance ToCStruct PhysicalDevicePerformanceQueryFeaturesKHR
+instance Show PhysicalDevicePerformanceQueryFeaturesKHR
+
+instance FromCStruct PhysicalDevicePerformanceQueryFeaturesKHR
+
+
+data PhysicalDevicePerformanceQueryPropertiesKHR
+
+instance ToCStruct PhysicalDevicePerformanceQueryPropertiesKHR
+instance Show PhysicalDevicePerformanceQueryPropertiesKHR
+
+instance FromCStruct PhysicalDevicePerformanceQueryPropertiesKHR
+
+
+data QueryPoolPerformanceCreateInfoKHR
+
+instance ToCStruct QueryPoolPerformanceCreateInfoKHR
+instance Show QueryPoolPerformanceCreateInfoKHR
+
+instance FromCStruct QueryPoolPerformanceCreateInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs b/src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs
@@ -0,0 +1,942 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_pipeline_executable_properties  ( getPipelineExecutablePropertiesKHR
+                                                                , getPipelineExecutableStatisticsKHR
+                                                                , getPipelineExecutableInternalRepresentationsKHR
+                                                                , PhysicalDevicePipelineExecutablePropertiesFeaturesKHR(..)
+                                                                , PipelineInfoKHR(..)
+                                                                , PipelineExecutablePropertiesKHR(..)
+                                                                , PipelineExecutableInfoKHR(..)
+                                                                , PipelineExecutableStatisticKHR(..)
+                                                                , PipelineExecutableInternalRepresentationKHR(..)
+                                                                , PipelineExecutableStatisticValueKHR(..)
+                                                                , peekPipelineExecutableStatisticValueKHR
+                                                                , PipelineExecutableStatisticFormatKHR( PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR
+                                                                                                      , PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR
+                                                                                                      , PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR
+                                                                                                      , PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR
+                                                                                                      , ..
+                                                                                                      )
+                                                                , KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION
+                                                                , pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION
+                                                                , KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME
+                                                                , pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME
+                                                                ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.ByteString (packCString)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.Trans.Cont (runContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CDouble)
+import Foreign.C.Types (CDouble(CDouble))
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Data.Int (Int64)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Utils (pokeFixedLengthNullTerminatedByteString)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetPipelineExecutableInternalRepresentationsKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetPipelineExecutablePropertiesKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetPipelineExecutableStatisticsKHR))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.APIConstants (MAX_DESCRIPTION_SIZE)
+import Vulkan.Core10.Handles (Pipeline)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPipelineExecutablePropertiesKHR
+  :: FunPtr (Ptr Device_T -> Ptr PipelineInfoKHR -> Ptr Word32 -> Ptr PipelineExecutablePropertiesKHR -> IO Result) -> Ptr Device_T -> Ptr PipelineInfoKHR -> Ptr Word32 -> Ptr PipelineExecutablePropertiesKHR -> IO Result
+
+-- | vkGetPipelineExecutablePropertiesKHR - Get the executables associated
+-- with a pipeline
+--
+-- = Parameters
+--
+-- -   @device@ is the device that created the pipeline.
+--
+-- -   @pPipelineInfo@ describes the pipeline being queried.
+--
+-- -   @pExecutableCount@ is a pointer to an integer related to the number
+--     of pipeline executables available or queried, as described below.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     'PipelineExecutablePropertiesKHR' structures.
+--
+-- = Description
+--
+-- If @pProperties@ is @NULL@, then the number of executables associated
+-- with the pipeline is returned in @pExecutableCount@. Otherwise,
+-- @pExecutableCount@ /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 @pExecutableCount@ is less than the number of
+-- executables associated with the pipeline, at most @pExecutableCount@
+-- structures will be written and 'getPipelineExecutablePropertiesKHR' will
+-- return 'Vulkan.Core10.Enums.Result.INCOMPLETE'.
+--
+-- == Valid Usage
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo>
+--     /must/ be enabled
+--
+-- -   @pipeline@ member of @pPipelineInfo@ /must/ have been created with
+--     @device@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pPipelineInfo@ /must/ be a valid pointer to a valid
+--     'PipelineInfoKHR' structure
+--
+-- -   @pExecutableCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pExecutableCount@ is not @0@, and
+--     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer
+--     to an array of @pExecutableCount@ 'PipelineExecutablePropertiesKHR'
+--     structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'PipelineExecutablePropertiesKHR',
+-- 'PipelineInfoKHR'
+getPipelineExecutablePropertiesKHR :: forall io . MonadIO io => Device -> PipelineInfoKHR -> io (Result, ("properties" ::: Vector PipelineExecutablePropertiesKHR))
+getPipelineExecutablePropertiesKHR device pipelineInfo = liftIO . evalContT $ do
+  let vkGetPipelineExecutablePropertiesKHRPtr = pVkGetPipelineExecutablePropertiesKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetPipelineExecutablePropertiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPipelineExecutablePropertiesKHR is null" Nothing Nothing
+  let vkGetPipelineExecutablePropertiesKHR' = mkVkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHRPtr
+  let device' = deviceHandle (device)
+  pPipelineInfo <- ContT $ withCStruct (pipelineInfo)
+  pPExecutableCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPipelineExecutablePropertiesKHR' device' pPipelineInfo (pPExecutableCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pExecutableCount <- lift $ peek @Word32 pPExecutableCount
+  pPProperties <- ContT $ bracket (callocBytes @PipelineExecutablePropertiesKHR ((fromIntegral (pExecutableCount)) * 536)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 536) :: Ptr PipelineExecutablePropertiesKHR) . ($ ())) [0..(fromIntegral (pExecutableCount)) - 1]
+  r' <- lift $ vkGetPipelineExecutablePropertiesKHR' device' pPipelineInfo (pPExecutableCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pExecutableCount' <- lift $ peek @Word32 pPExecutableCount
+  pProperties' <- lift $ generateM (fromIntegral (pExecutableCount')) (\i -> peekCStruct @PipelineExecutablePropertiesKHR (((pPProperties) `advancePtrBytes` (536 * (i)) :: Ptr PipelineExecutablePropertiesKHR)))
+  pure $ ((r'), pProperties')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPipelineExecutableStatisticsKHR
+  :: FunPtr (Ptr Device_T -> Ptr PipelineExecutableInfoKHR -> Ptr Word32 -> Ptr PipelineExecutableStatisticKHR -> IO Result) -> Ptr Device_T -> Ptr PipelineExecutableInfoKHR -> Ptr Word32 -> Ptr PipelineExecutableStatisticKHR -> IO Result
+
+-- | vkGetPipelineExecutableStatisticsKHR - Get compile time statistics
+-- associated with a pipeline executable
+--
+-- = Parameters
+--
+-- -   @device@ is the device that created the pipeline.
+--
+-- -   @pExecutableInfo@ describes the pipeline executable being queried.
+--
+-- -   @pStatisticCount@ is a pointer to an integer related to the number
+--     of statistics available or queried, as described below.
+--
+-- -   @pStatistics@ is either @NULL@ or a pointer to an array of
+--     'PipelineExecutableStatisticKHR' structures.
+--
+-- = Description
+--
+-- If @pStatistics@ is @NULL@, then the number of statistics associated
+-- with the pipeline executable is returned in @pStatisticCount@.
+-- Otherwise, @pStatisticCount@ /must/ point to a variable set by the user
+-- to the number of elements in the @pStatistics@ array, and on return the
+-- variable is overwritten with the number of structures actually written
+-- to @pStatistics@. If @pStatisticCount@ is less than the number of
+-- statistics associated with the pipeline executable, at most
+-- @pStatisticCount@ structures will be written and
+-- 'getPipelineExecutableStatisticsKHR' will return
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE'.
+--
+-- == Valid Usage
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo>
+--     /must/ be enabled
+--
+-- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with
+--     @device@
+--
+-- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR'
+--     set in the @flags@ field of
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' or
+--     'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pExecutableInfo@ /must/ be a valid pointer to a valid
+--     'PipelineExecutableInfoKHR' structure
+--
+-- -   @pStatisticCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pStatisticCount@ is not @0@, and
+--     @pStatistics@ is not @NULL@, @pStatistics@ /must/ be a valid pointer
+--     to an array of @pStatisticCount@ 'PipelineExecutableStatisticKHR'
+--     structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'PipelineExecutableInfoKHR',
+-- 'PipelineExecutableStatisticKHR'
+getPipelineExecutableStatisticsKHR :: forall io . MonadIO io => Device -> PipelineExecutableInfoKHR -> io (Result, ("statistics" ::: Vector PipelineExecutableStatisticKHR))
+getPipelineExecutableStatisticsKHR device executableInfo = liftIO . evalContT $ do
+  let vkGetPipelineExecutableStatisticsKHRPtr = pVkGetPipelineExecutableStatisticsKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetPipelineExecutableStatisticsKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPipelineExecutableStatisticsKHR is null" Nothing Nothing
+  let vkGetPipelineExecutableStatisticsKHR' = mkVkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHRPtr
+  let device' = deviceHandle (device)
+  pExecutableInfo <- ContT $ withCStruct (executableInfo)
+  pPStatisticCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPipelineExecutableStatisticsKHR' device' pExecutableInfo (pPStatisticCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pStatisticCount <- lift $ peek @Word32 pPStatisticCount
+  pPStatistics <- ContT $ bracket (callocBytes @PipelineExecutableStatisticKHR ((fromIntegral (pStatisticCount)) * 544)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPStatistics `advancePtrBytes` (i * 544) :: Ptr PipelineExecutableStatisticKHR) . ($ ())) [0..(fromIntegral (pStatisticCount)) - 1]
+  r' <- lift $ vkGetPipelineExecutableStatisticsKHR' device' pExecutableInfo (pPStatisticCount) ((pPStatistics))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pStatisticCount' <- lift $ peek @Word32 pPStatisticCount
+  pStatistics' <- lift $ generateM (fromIntegral (pStatisticCount')) (\i -> peekCStruct @PipelineExecutableStatisticKHR (((pPStatistics) `advancePtrBytes` (544 * (i)) :: Ptr PipelineExecutableStatisticKHR)))
+  pure $ ((r'), pStatistics')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPipelineExecutableInternalRepresentationsKHR
+  :: FunPtr (Ptr Device_T -> Ptr PipelineExecutableInfoKHR -> Ptr Word32 -> Ptr PipelineExecutableInternalRepresentationKHR -> IO Result) -> Ptr Device_T -> Ptr PipelineExecutableInfoKHR -> Ptr Word32 -> Ptr PipelineExecutableInternalRepresentationKHR -> IO Result
+
+-- | vkGetPipelineExecutableInternalRepresentationsKHR - Get internal
+-- representations of the pipeline executable
+--
+-- = Parameters
+--
+-- -   @device@ is the device that created the pipeline.
+--
+-- -   @pExecutableInfo@ describes the pipeline executable being queried.
+--
+-- -   @pInternalRepresentationCount@ is a pointer to an integer related to
+--     the number of internal representations available or queried, as
+--     described below.
+--
+-- -   @pInternalRepresentations@ is either @NULL@ or a pointer to an array
+--     of 'PipelineExecutableInternalRepresentationKHR' structures.
+--
+-- = Description
+--
+-- If @pInternalRepresentations@ is @NULL@, then the number of internal
+-- representations associated with the pipeline executable is returned in
+-- @pInternalRepresentationCount@. Otherwise,
+-- @pInternalRepresentationCount@ /must/ point to a variable set by the
+-- user to the number of elements in the @pInternalRepresentations@ array,
+-- and on return the variable is overwritten with the number of structures
+-- actually written to @pInternalRepresentations@. If
+-- @pInternalRepresentationCount@ is less than the number of internal
+-- representations associated with the pipeline executable, at most
+-- @pInternalRepresentationCount@ structures will be written and
+-- 'getPipelineExecutableInternalRepresentationsKHR' will return
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE'.
+--
+-- While the details of the internal representations remain implementation
+-- dependent, the implementation /should/ order the internal
+-- representations in the order in which they occur in the compile pipeline
+-- with the final shader assembly (if any) last.
+--
+-- == Valid Usage
+--
+-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo>
+--     /must/ be enabled
+--
+-- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with
+--     @device@
+--
+-- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR'
+--     set in the @flags@ field of
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' or
+--     'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pExecutableInfo@ /must/ be a valid pointer to a valid
+--     'PipelineExecutableInfoKHR' structure
+--
+-- -   @pInternalRepresentationCount@ /must/ be a valid pointer to a
+--     @uint32_t@ value
+--
+-- -   If the value referenced by @pInternalRepresentationCount@ is not
+--     @0@, and @pInternalRepresentations@ is not @NULL@,
+--     @pInternalRepresentations@ /must/ be a valid pointer to an array of
+--     @pInternalRepresentationCount@
+--     'PipelineExecutableInternalRepresentationKHR' structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'PipelineExecutableInfoKHR',
+-- 'PipelineExecutableInternalRepresentationKHR'
+getPipelineExecutableInternalRepresentationsKHR :: forall io . MonadIO io => Device -> PipelineExecutableInfoKHR -> io (Result, ("internalRepresentations" ::: Vector PipelineExecutableInternalRepresentationKHR))
+getPipelineExecutableInternalRepresentationsKHR device executableInfo = liftIO . evalContT $ do
+  let vkGetPipelineExecutableInternalRepresentationsKHRPtr = pVkGetPipelineExecutableInternalRepresentationsKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetPipelineExecutableInternalRepresentationsKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPipelineExecutableInternalRepresentationsKHR is null" Nothing Nothing
+  let vkGetPipelineExecutableInternalRepresentationsKHR' = mkVkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHRPtr
+  let device' = deviceHandle (device)
+  pExecutableInfo <- ContT $ withCStruct (executableInfo)
+  pPInternalRepresentationCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPipelineExecutableInternalRepresentationsKHR' device' pExecutableInfo (pPInternalRepresentationCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pInternalRepresentationCount <- lift $ peek @Word32 pPInternalRepresentationCount
+  pPInternalRepresentations <- ContT $ bracket (callocBytes @PipelineExecutableInternalRepresentationKHR ((fromIntegral (pInternalRepresentationCount)) * 552)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPInternalRepresentations `advancePtrBytes` (i * 552) :: Ptr PipelineExecutableInternalRepresentationKHR) . ($ ())) [0..(fromIntegral (pInternalRepresentationCount)) - 1]
+  r' <- lift $ vkGetPipelineExecutableInternalRepresentationsKHR' device' pExecutableInfo (pPInternalRepresentationCount) ((pPInternalRepresentations))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pInternalRepresentationCount' <- lift $ peek @Word32 pPInternalRepresentationCount
+  pInternalRepresentations' <- lift $ generateM (fromIntegral (pInternalRepresentationCount')) (\i -> peekCStruct @PipelineExecutableInternalRepresentationKHR (((pPInternalRepresentations) `advancePtrBytes` (552 * (i)) :: Ptr PipelineExecutableInternalRepresentationKHR)))
+  pure $ ((r'), pInternalRepresentations')
+
+
+-- | VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR - Structure
+-- describing whether pipeline executable properties are available
+--
+-- = Members
+--
+-- The members of the
+-- 'PhysicalDevicePipelineExecutablePropertiesFeaturesKHR' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDevicePipelineExecutablePropertiesFeaturesKHR' structure
+-- is included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDevicePipelineExecutablePropertiesFeaturesKHR' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+  { -- | @pipelineExecutableInfo@ indicates that the implementation supports
+    -- reporting properties and statistics about the executables associated
+    -- with a compiled pipeline.
+    pipelineExecutableInfo :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+
+instance ToCStruct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePipelineExecutablePropertiesFeaturesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (pipelineExecutableInfo))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR where
+  peekCStruct p = do
+    pipelineExecutableInfo <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+             (bool32ToBool pipelineExecutableInfo)
+
+instance Storable PhysicalDevicePipelineExecutablePropertiesFeaturesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePipelineExecutablePropertiesFeaturesKHR where
+  zero = PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+           zero
+
+
+-- | VkPipelineInfoKHR - Structure describing a pipeline
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPipelineExecutablePropertiesKHR'
+data PipelineInfoKHR = PipelineInfoKHR
+  { -- | @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
+    pipeline :: Pipeline }
+  deriving (Typeable)
+deriving instance Show PipelineInfoKHR
+
+instance ToCStruct PipelineInfoKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Pipeline)) (pipeline)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Pipeline)) (zero)
+    f
+
+instance FromCStruct PipelineInfoKHR where
+  peekCStruct p = do
+    pipeline <- peek @Pipeline ((p `plusPtr` 16 :: Ptr Pipeline))
+    pure $ PipelineInfoKHR
+             pipeline
+
+instance Storable PipelineInfoKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineInfoKHR where
+  zero = PipelineInfoKHR
+           zero
+
+
+-- | VkPipelineExecutablePropertiesKHR - Structure describing a pipeline
+-- executable
+--
+-- = Description
+--
+-- The @stages@ field /may/ be zero or it /may/ contain one or more bits
+-- describing the stages principally used to compile this pipeline. Not all
+-- implementations have a 1:1 mapping between shader stages and pipeline
+-- executables and some implementations /may/ reduce a given shader stage
+-- to fixed function hardware programming such that no executable is
+-- available. No guarantees are provided about the mapping between shader
+-- stages and pipeline executables and @stages@ /should/ be considered a
+-- best effort hint. Because the application /cannot/ rely on the @stages@
+-- field to provide an exact description, @name@ and @description@ provide
+-- a human readable name and description which more accurately describes
+-- the given pipeline executable.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPipelineExecutablePropertiesKHR'
+data PipelineExecutablePropertiesKHR = PipelineExecutablePropertiesKHR
+  { -- | @stages@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' indicating
+    -- which shader stages (if any) were principally used as inputs to compile
+    -- this pipeline executable.
+    stages :: ShaderStageFlags
+  , -- | @name@ is an array of 'Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE'
+    -- @char@ containing a null-terminated UTF-8 string which is a short human
+    -- readable name for this executable.
+    name :: ByteString
+  , -- | @description@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@ containing a
+    -- null-terminated UTF-8 string which is a human readable description for
+    -- this executable.
+    description :: ByteString
+  , -- | @subgroupSize@ is the subgroup size with which this executable is
+    -- dispatched.
+    subgroupSize :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PipelineExecutablePropertiesKHR
+
+instance ToCStruct PipelineExecutablePropertiesKHR where
+  withCStruct x f = allocaBytesAligned 536 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineExecutablePropertiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ShaderStageFlags)) (stages)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (name)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
+    poke ((p `plusPtr` 532 :: Ptr Word32)) (subgroupSize)
+    f
+  cStructSize = 536
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ShaderStageFlags)) (zero)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    poke ((p `plusPtr` 532 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PipelineExecutablePropertiesKHR where
+  peekCStruct p = do
+    stages <- peek @ShaderStageFlags ((p `plusPtr` 16 :: Ptr ShaderStageFlags))
+    name <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    description <- packCString (lowerArrayPtr ((p `plusPtr` 276 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    subgroupSize <- peek @Word32 ((p `plusPtr` 532 :: Ptr Word32))
+    pure $ PipelineExecutablePropertiesKHR
+             stages name description subgroupSize
+
+instance Storable PipelineExecutablePropertiesKHR where
+  sizeOf ~_ = 536
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineExecutablePropertiesKHR where
+  zero = PipelineExecutablePropertiesKHR
+           zero
+           mempty
+           mempty
+           zero
+
+
+-- | VkPipelineExecutableInfoKHR - Structure describing a pipeline executable
+-- to query for associated statistics or internal representations
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPipelineExecutableInternalRepresentationsKHR',
+-- 'getPipelineExecutableStatisticsKHR'
+data PipelineExecutableInfoKHR = PipelineExecutableInfoKHR
+  { -- | @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
+    pipeline :: Pipeline
+  , -- | @executableIndex@ /must/ be less than the number of executables
+    -- associated with @pipeline@ as returned in the @pExecutableCount@
+    -- parameter of 'getPipelineExecutablePropertiesKHR'
+    executableIndex :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PipelineExecutableInfoKHR
+
+instance ToCStruct PipelineExecutableInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineExecutableInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Pipeline)) (pipeline)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (executableIndex)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Pipeline)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PipelineExecutableInfoKHR where
+  peekCStruct p = do
+    pipeline <- peek @Pipeline ((p `plusPtr` 16 :: Ptr Pipeline))
+    executableIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ PipelineExecutableInfoKHR
+             pipeline executableIndex
+
+instance Storable PipelineExecutableInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineExecutableInfoKHR where
+  zero = PipelineExecutableInfoKHR
+           zero
+           zero
+
+
+-- | VkPipelineExecutableStatisticKHR - Structure describing a compile-time
+-- pipeline executable statistic
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PipelineExecutableStatisticFormatKHR',
+-- 'PipelineExecutableStatisticValueKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPipelineExecutableStatisticsKHR'
+data PipelineExecutableStatisticKHR = PipelineExecutableStatisticKHR
+  { -- | @name@ is an array of 'Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE'
+    -- @char@ containing a null-terminated UTF-8 string which is a short human
+    -- readable name for this statistic.
+    name :: ByteString
+  , -- | @description@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@ containing a
+    -- null-terminated UTF-8 string which is a human readable description for
+    -- this statistic.
+    description :: ByteString
+  , -- | @format@ is a 'PipelineExecutableStatisticFormatKHR' value specifying
+    -- the format of the data found in @value@.
+    format :: PipelineExecutableStatisticFormatKHR
+  , -- | @value@ is the value of this statistic.
+    value :: PipelineExecutableStatisticValueKHR
+  }
+  deriving (Typeable)
+deriving instance Show PipelineExecutableStatisticKHR
+
+instance ToCStruct PipelineExecutableStatisticKHR where
+  withCStruct x f = allocaBytesAligned 544 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineExecutableStatisticKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (name)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
+    lift $ poke ((p `plusPtr` 528 :: Ptr PipelineExecutableStatisticFormatKHR)) (format)
+    ContT $ pokeCStruct ((p `plusPtr` 536 :: Ptr PipelineExecutableStatisticValueKHR)) (value) . ($ ())
+    lift $ f
+  cStructSize = 544
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    lift $ poke ((p `plusPtr` 528 :: Ptr PipelineExecutableStatisticFormatKHR)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 536 :: Ptr PipelineExecutableStatisticValueKHR)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct PipelineExecutableStatisticKHR where
+  peekCStruct p = do
+    name <- packCString (lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    description <- packCString (lowerArrayPtr ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    format <- peek @PipelineExecutableStatisticFormatKHR ((p `plusPtr` 528 :: Ptr PipelineExecutableStatisticFormatKHR))
+    value <- peekPipelineExecutableStatisticValueKHR format ((p `plusPtr` 536 :: Ptr PipelineExecutableStatisticValueKHR))
+    pure $ PipelineExecutableStatisticKHR
+             name description format value
+
+instance Zero PipelineExecutableStatisticKHR where
+  zero = PipelineExecutableStatisticKHR
+           mempty
+           mempty
+           zero
+           zero
+
+
+-- | VkPipelineExecutableInternalRepresentationKHR - Structure describing the
+-- textual form of a pipeline executable internal representation
+--
+-- = Description
+--
+-- If @pData@ is @NULL@, then the size, in bytes, of the internal
+-- representation data is returned in @dataSize@. Otherwise, @dataSize@
+-- must be the size of the buffer, in bytes, pointed to by @pData@ and on
+-- return @dataSize@ is overwritten with the number of bytes of data
+-- actually written to @pData@ including any trailing null character. If
+-- @dataSize@ is less than the size, in bytes, of the internal
+-- representation data, at most @dataSize@ bytes of data will be written to
+-- @pData@ and 'getPipelineExecutableInternalRepresentationsKHR' will
+-- return 'Vulkan.Core10.Enums.Result.INCOMPLETE'. If @isText@ is
+-- 'Vulkan.Core10.BaseType.TRUE' and @pData@ is not @NULL@ and @dataSize@
+-- is not zero, the last byte written to @pData@ will be a null character.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPipelineExecutableInternalRepresentationsKHR'
+data PipelineExecutableInternalRepresentationKHR = PipelineExecutableInternalRepresentationKHR
+  { -- | @name@ is an array of 'Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE'
+    -- @char@ containing a null-terminated UTF-8 string which is a short human
+    -- readable name for this internal representation.
+    name :: ByteString
+  , -- | @description@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_DESCRIPTION_SIZE' @char@ containing a
+    -- null-terminated UTF-8 string which is a human readable description for
+    -- this internal representation.
+    description :: ByteString
+  , -- | @isText@ specifies whether the returned data is text or opaque data. If
+    -- @isText@ is 'Vulkan.Core10.BaseType.TRUE' then the data returned in
+    -- @pData@ is text and is guaranteed to be a null-terminated UTF-8 string.
+    isText :: Bool
+  , -- | @dataSize@ is an integer related to the size, in bytes, of the internal
+    -- representation data, as described below.
+    dataSize :: Word64
+  , -- | @pData@ is either @NULL@ or a pointer to an block of data into which the
+    -- implementation will write the textual form of the internal
+    -- representation.
+    data' :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show PipelineExecutableInternalRepresentationKHR
+
+instance ToCStruct PipelineExecutableInternalRepresentationKHR where
+  withCStruct x f = allocaBytesAligned 552 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineExecutableInternalRepresentationKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (name)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (description)
+    poke ((p `plusPtr` 528 :: Ptr Bool32)) (boolToBool32 (isText))
+    poke ((p `plusPtr` 536 :: Ptr CSize)) (CSize (dataSize))
+    poke ((p `plusPtr` 544 :: Ptr (Ptr ()))) (data')
+    f
+  cStructSize = 552
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))) (mempty)
+    poke ((p `plusPtr` 528 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PipelineExecutableInternalRepresentationKHR where
+  peekCStruct p = do
+    name <- packCString (lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    description <- packCString (lowerArrayPtr ((p `plusPtr` 272 :: Ptr (FixedArray MAX_DESCRIPTION_SIZE CChar))))
+    isText <- peek @Bool32 ((p `plusPtr` 528 :: Ptr Bool32))
+    dataSize <- peek @CSize ((p `plusPtr` 536 :: Ptr CSize))
+    pData <- peek @(Ptr ()) ((p `plusPtr` 544 :: Ptr (Ptr ())))
+    pure $ PipelineExecutableInternalRepresentationKHR
+             name description (bool32ToBool isText) ((\(CSize a) -> a) dataSize) pData
+
+instance Storable PipelineExecutableInternalRepresentationKHR where
+  sizeOf ~_ = 552
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineExecutableInternalRepresentationKHR where
+  zero = PipelineExecutableInternalRepresentationKHR
+           mempty
+           mempty
+           zero
+           zero
+           zero
+
+
+data PipelineExecutableStatisticValueKHR
+  = B32 Bool
+  | I64 Int64
+  | U64 Word64
+  | F64 Double
+  deriving (Show)
+
+instance ToCStruct PipelineExecutableStatisticValueKHR where
+  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct :: Ptr PipelineExecutableStatisticValueKHR -> PipelineExecutableStatisticValueKHR -> IO a -> IO a
+  pokeCStruct p = (. const) . runContT .  \case
+    B32 v -> lift $ poke (castPtr @_ @Bool32 p) (boolToBool32 (v))
+    I64 v -> lift $ poke (castPtr @_ @Int64 p) (v)
+    U64 v -> lift $ poke (castPtr @_ @Word64 p) (v)
+    F64 v -> lift $ poke (castPtr @_ @CDouble p) (CDouble (v))
+  pokeZeroCStruct :: Ptr PipelineExecutableStatisticValueKHR -> IO b -> IO b
+  pokeZeroCStruct _ f = f
+  cStructSize = 8
+  cStructAlignment = 8
+
+instance Zero PipelineExecutableStatisticValueKHR where
+  zero = I64 zero
+
+peekPipelineExecutableStatisticValueKHR :: PipelineExecutableStatisticFormatKHR -> Ptr PipelineExecutableStatisticValueKHR -> IO PipelineExecutableStatisticValueKHR
+peekPipelineExecutableStatisticValueKHR tag p = case tag of
+  PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR -> B32 <$> (do
+    b32 <- peek @Bool32 (castPtr @_ @Bool32 p)
+    pure $ bool32ToBool b32)
+  PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR -> I64 <$> (peek @Int64 (castPtr @_ @Int64 p))
+  PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR -> U64 <$> (peek @Word64 (castPtr @_ @Word64 p))
+  PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR -> F64 <$> (do
+    f64 <- peek @CDouble (castPtr @_ @CDouble p)
+    pure $ (\(CDouble a) -> a) f64)
+
+
+-- | VkPipelineExecutableStatisticFormatKHR - Enum describing a pipeline
+-- executable statistic
+--
+-- = See Also
+--
+-- 'PipelineExecutableStatisticKHR'
+newtype PipelineExecutableStatisticFormatKHR = PipelineExecutableStatisticFormatKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR' specifies that the
+-- statistic is returned as a 32-bit boolean value which /must/ be either
+-- 'Vulkan.Core10.BaseType.TRUE' or 'Vulkan.Core10.BaseType.FALSE' and
+-- /should/ be read from the @b32@ field of
+-- 'PipelineExecutableStatisticValueKHR'.
+pattern PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = PipelineExecutableStatisticFormatKHR 0
+-- | 'PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR' specifies that the
+-- statistic is returned as a signed 64-bit integer and /should/ be read
+-- from the @i64@ field of 'PipelineExecutableStatisticValueKHR'.
+pattern PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = PipelineExecutableStatisticFormatKHR 1
+-- | 'PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR' specifies that the
+-- statistic is returned as an unsigned 64-bit integer and /should/ be read
+-- from the @u64@ field of 'PipelineExecutableStatisticValueKHR'.
+pattern PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = PipelineExecutableStatisticFormatKHR 2
+-- | 'PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR' specifies that the
+-- statistic is returned as a 64-bit floating-point value and /should/ be
+-- read from the @f64@ field of 'PipelineExecutableStatisticValueKHR'.
+pattern PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = PipelineExecutableStatisticFormatKHR 3
+{-# complete PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR,
+             PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR,
+             PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR,
+             PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR :: PipelineExecutableStatisticFormatKHR #-}
+
+instance Show PipelineExecutableStatisticFormatKHR where
+  showsPrec p = \case
+    PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR -> showString "PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR"
+    PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR -> showString "PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR"
+    PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR -> showString "PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR"
+    PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR -> showString "PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR"
+    PipelineExecutableStatisticFormatKHR x -> showParen (p >= 11) (showString "PipelineExecutableStatisticFormatKHR " . showsPrec 11 x)
+
+instance Read PipelineExecutableStatisticFormatKHR where
+  readPrec = parens (choose [("PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR", pure PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR)
+                            , ("PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR", pure PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR)
+                            , ("PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR", pure PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR)
+                            , ("PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR", pure PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineExecutableStatisticFormatKHR")
+                       v <- step readPrec
+                       pure (PipelineExecutableStatisticFormatKHR v)))
+
+
+type KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION"
+pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION = 1
+
+
+type KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME = "VK_KHR_pipeline_executable_properties"
+
+-- No documentation found for TopLevel "VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME"
+pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME = "VK_KHR_pipeline_executable_properties"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs-boot b/src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs-boot
@@ -0,0 +1,59 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_pipeline_executable_properties  ( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+                                                                , PipelineExecutableInfoKHR
+                                                                , PipelineExecutableInternalRepresentationKHR
+                                                                , PipelineExecutablePropertiesKHR
+                                                                , PipelineExecutableStatisticKHR
+                                                                , PipelineInfoKHR
+                                                                ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+
+instance ToCStruct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+instance Show PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+
+instance FromCStruct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+
+
+data PipelineExecutableInfoKHR
+
+instance ToCStruct PipelineExecutableInfoKHR
+instance Show PipelineExecutableInfoKHR
+
+instance FromCStruct PipelineExecutableInfoKHR
+
+
+data PipelineExecutableInternalRepresentationKHR
+
+instance ToCStruct PipelineExecutableInternalRepresentationKHR
+instance Show PipelineExecutableInternalRepresentationKHR
+
+instance FromCStruct PipelineExecutableInternalRepresentationKHR
+
+
+data PipelineExecutablePropertiesKHR
+
+instance ToCStruct PipelineExecutablePropertiesKHR
+instance Show PipelineExecutablePropertiesKHR
+
+instance FromCStruct PipelineExecutablePropertiesKHR
+
+
+data PipelineExecutableStatisticKHR
+
+instance ToCStruct PipelineExecutableStatisticKHR
+instance Show PipelineExecutableStatisticKHR
+
+instance FromCStruct PipelineExecutableStatisticKHR
+
+
+data PipelineInfoKHR
+
+instance ToCStruct PipelineInfoKHR
+instance Show PipelineInfoKHR
+
+instance FromCStruct PipelineInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs b/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs
@@ -0,0 +1,111 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_pipeline_library  ( PipelineLibraryCreateInfoKHR(..)
+                                                  , KHR_PIPELINE_LIBRARY_SPEC_VERSION
+                                                  , pattern KHR_PIPELINE_LIBRARY_SPEC_VERSION
+                                                  , KHR_PIPELINE_LIBRARY_EXTENSION_NAME
+                                                  , pattern KHR_PIPELINE_LIBRARY_EXTENSION_NAME
+                                                  ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Pipeline)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR))
+-- | VkPipelineLibraryCreateInfoKHR - Structure specifying pipeline libraries
+-- to use when creating a pipeline
+--
+-- == Valid Usage
+--
+-- -   Each element of @pLibraries@ /must/ have been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   If @libraryCount@ is not @0@, @pLibraries@ /must/ be a valid pointer
+--     to an array of @libraryCount@ valid 'Vulkan.Core10.Handles.Pipeline'
+--     handles
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineLibraryCreateInfoKHR = PipelineLibraryCreateInfoKHR
+  { -- | @pLibraries@ is an array of pipeline libraries to use when creating a
+    -- pipeline.
+    libraries :: Vector Pipeline }
+  deriving (Typeable)
+deriving instance Show PipelineLibraryCreateInfoKHR
+
+instance ToCStruct PipelineLibraryCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineLibraryCreateInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (libraries)) :: Word32))
+    pPLibraries' <- ContT $ allocaBytesAligned @Pipeline ((Data.Vector.length (libraries)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPLibraries' `plusPtr` (8 * (i)) :: Ptr Pipeline) (e)) (libraries)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Pipeline))) (pPLibraries')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPLibraries' <- ContT $ allocaBytesAligned @Pipeline ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPLibraries' `plusPtr` (8 * (i)) :: Ptr Pipeline) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Pipeline))) (pPLibraries')
+    lift $ f
+
+instance FromCStruct PipelineLibraryCreateInfoKHR where
+  peekCStruct p = do
+    libraryCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pLibraries <- peek @(Ptr Pipeline) ((p `plusPtr` 24 :: Ptr (Ptr Pipeline)))
+    pLibraries' <- generateM (fromIntegral libraryCount) (\i -> peek @Pipeline ((pLibraries `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
+    pure $ PipelineLibraryCreateInfoKHR
+             pLibraries'
+
+instance Zero PipelineLibraryCreateInfoKHR where
+  zero = PipelineLibraryCreateInfoKHR
+           mempty
+
+
+type KHR_PIPELINE_LIBRARY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION"
+pattern KHR_PIPELINE_LIBRARY_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_PIPELINE_LIBRARY_SPEC_VERSION = 1
+
+
+type KHR_PIPELINE_LIBRARY_EXTENSION_NAME = "VK_KHR_pipeline_library"
+
+-- No documentation found for TopLevel "VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME"
+pattern KHR_PIPELINE_LIBRARY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_PIPELINE_LIBRARY_EXTENSION_NAME = "VK_KHR_pipeline_library"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs-boot b/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_pipeline_library.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_pipeline_library  (PipelineLibraryCreateInfoKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PipelineLibraryCreateInfoKHR
+
+instance ToCStruct PipelineLibraryCreateInfoKHR
+instance Show PipelineLibraryCreateInfoKHR
+
+instance FromCStruct PipelineLibraryCreateInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_push_descriptor.hs b/src/Vulkan/Extensions/VK_KHR_push_descriptor.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_push_descriptor.hs
@@ -0,0 +1,438 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_push_descriptor  ( cmdPushDescriptorSetKHR
+                                                 , cmdPushDescriptorSetWithTemplateKHR
+                                                 , PhysicalDevicePushDescriptorPropertiesKHR(..)
+                                                 , KHR_PUSH_DESCRIPTOR_SPEC_VERSION
+                                                 , pattern KHR_PUSH_DESCRIPTOR_SPEC_VERSION
+                                                 , KHR_PUSH_DESCRIPTOR_EXTENSION_NAME
+                                                 , pattern KHR_PUSH_DESCRIPTOR_EXTENSION_NAME
+                                                 ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Core11.Handles (DescriptorUpdateTemplate)
+import Vulkan.Core11.Handles (DescriptorUpdateTemplate(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdPushDescriptorSetKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdPushDescriptorSetWithTemplateKHR))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
+import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint(..))
+import Vulkan.Core10.Handles (PipelineLayout)
+import Vulkan.Core10.Handles (PipelineLayout(..))
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Core10.DescriptorSet (WriteDescriptorSet)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdPushDescriptorSetKHR
+  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr (WriteDescriptorSet a) -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr (WriteDescriptorSet a) -> IO ()
+
+-- | vkCmdPushDescriptorSetKHR - Pushes descriptor updates into a command
+-- buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer that the descriptors will be
+--     recorded in.
+--
+-- -   @pipelineBindPoint@ is a
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' 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 'Vulkan.Core10.Handles.PipelineLayout' 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
+--     'Vulkan.Core10.DescriptorSet.WriteDescriptorSet' structures
+--     describing the descriptors to be updated.
+--
+-- = 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 are
+-- undefined. 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
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>.
+-- When the set is disturbed or push descriptors with a different
+-- descriptor set layout are set, all push descriptors are undefined.
+--
+-- Push descriptors that are
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-staticuse statically used>
+-- by a pipeline /must/ not be undefined 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 (the immutable samplers are pushed,
+-- rather than the samplers in @pDescriptorWrites@). Push descriptors that
+-- are not statically used /can/ remain undefined.
+--
+-- Push descriptors do not use dynamic offsets. Instead, the corresponding
+-- non-dynamic descriptor types /can/ be used and the @offset@ member of
+-- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' /can/ be changed each
+-- time the descriptor is written.
+--
+-- Each element of @pDescriptorWrites@ is interpreted as in
+-- 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet', except the @dstSet@
+-- member is ignored.
+--
+-- To push an immutable sampler, use a
+-- 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet' with @dstBinding@ and
+-- @dstArrayElement@ selecting the immutable sampler’s binding. If the
+-- descriptor type is
+-- 'Vulkan.Core10.Enums.DescriptorType.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
+-- 'Vulkan.Core10.Enums.DescriptorType.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 'Vulkan.Core10.Handles.CommandPool'’s queue family
+--
+-- -   @set@ /must/ be less than
+--     'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'::@setLayoutCount@
+--     provided when @layout@ was created
+--
+-- -   @set@ /must/ be the unique set number in the pipeline layout that
+--     uses a descriptor set layout that was created with
+--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--
+-- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'
+--     handle
+--
+-- -   @pDescriptorWrites@ /must/ be a valid pointer to an array of
+--     @descriptorWriteCount@ valid
+--     'Vulkan.Core10.DescriptorSet.WriteDescriptorSet' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   @descriptorWriteCount@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and @layout@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
+-- 'Vulkan.Core10.Handles.PipelineLayout',
+-- 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet'
+cmdPushDescriptorSetKHR :: forall io . MonadIO io => CommandBuffer -> PipelineBindPoint -> PipelineLayout -> ("set" ::: Word32) -> ("descriptorWrites" ::: Vector (SomeStruct WriteDescriptorSet)) -> io ()
+cmdPushDescriptorSetKHR commandBuffer pipelineBindPoint layout set descriptorWrites = liftIO . evalContT $ do
+  let vkCmdPushDescriptorSetKHRPtr = pVkCmdPushDescriptorSetKHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdPushDescriptorSetKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPushDescriptorSetKHR is null" Nothing Nothing
+  let vkCmdPushDescriptorSetKHR' = mkVkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHRPtr
+  pPDescriptorWrites <- ContT $ allocaBytesAligned @(WriteDescriptorSet _) ((Data.Vector.length (descriptorWrites)) * 64) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPDescriptorWrites `plusPtr` (64 * (i)) :: Ptr (WriteDescriptorSet _))) (e) . ($ ())) (descriptorWrites)
+  lift $ vkCmdPushDescriptorSetKHR' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (layout) (set) ((fromIntegral (Data.Vector.length $ (descriptorWrites)) :: Word32)) (pPDescriptorWrites)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdPushDescriptorSetWithTemplateKHR
+  :: FunPtr (Ptr CommandBuffer_T -> DescriptorUpdateTemplate -> PipelineLayout -> Word32 -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> DescriptorUpdateTemplate -> PipelineLayout -> Word32 -> Ptr () -> IO ()
+
+-- | vkCmdPushDescriptorSetWithTemplateKHR - Pushes descriptor updates into a
+-- command buffer using a descriptor update template
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer that the descriptors will be
+--     recorded in.
+--
+-- -   @descriptorUpdateTemplate@ is a descriptor update template defining
+--     how to interpret the descriptor information in @pData@.
+--
+-- -   @layout@ is a 'Vulkan.Core10.Handles.PipelineLayout' 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@ is a pointer to memory containing descriptors for the
+--     templated update.
+--
+-- == Valid Usage
+--
+-- -   The @pipelineBindPoint@ specified during the creation of the
+--     descriptor update template /must/ be supported by the
+--     @commandBuffer@’s parent 'Vulkan.Core10.Handles.CommandPool'’s queue
+--     family
+--
+-- -   @pData@ /must/ be a valid pointer to a memory containing one or more
+--     valid instances of
+--     'Vulkan.Core10.DescriptorSet.DescriptorImageInfo',
+--     'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo', or
+--     'Vulkan.Core10.Handles.BufferView' in a layout defined by
+--     @descriptorUpdateTemplate@ when it was created with
+--     'Vulkan.Extensions.VK_KHR_descriptor_update_template.createDescriptorUpdateTemplateKHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @descriptorUpdateTemplate@ /must/ be a valid
+--     'Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle
+--
+-- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   Each of @commandBuffer@, @descriptorUpdateTemplate@, and @layout@
+--     /must/ have been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- __API example.__
+--
+-- > 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 a 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
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core11.Handles.DescriptorUpdateTemplate',
+-- 'Vulkan.Core10.Handles.PipelineLayout'
+cmdPushDescriptorSetWithTemplateKHR :: forall io . MonadIO io => CommandBuffer -> DescriptorUpdateTemplate -> PipelineLayout -> ("set" ::: Word32) -> ("data" ::: Ptr ()) -> io ()
+cmdPushDescriptorSetWithTemplateKHR commandBuffer descriptorUpdateTemplate layout set data' = liftIO $ do
+  let vkCmdPushDescriptorSetWithTemplateKHRPtr = pVkCmdPushDescriptorSetWithTemplateKHR (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdPushDescriptorSetWithTemplateKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPushDescriptorSetWithTemplateKHR is null" Nothing Nothing
+  let vkCmdPushDescriptorSetWithTemplateKHR' = mkVkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHRPtr
+  vkCmdPushDescriptorSetWithTemplateKHR' (commandBufferHandle (commandBuffer)) (descriptorUpdateTemplate) (layout) (set) (data')
+  pure $ ()
+
+
+-- | VkPhysicalDevicePushDescriptorPropertiesKHR - Structure describing push
+-- descriptor limits that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDevicePushDescriptorPropertiesKHR' structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDevicePushDescriptorPropertiesKHR' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDevicePushDescriptorPropertiesKHR = PhysicalDevicePushDescriptorPropertiesKHR
+  { -- | @maxPushDescriptors@ is the maximum number of descriptors that /can/ be
+    -- used in a descriptor set created with
+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'
+    -- set.
+    maxPushDescriptors :: Word32 }
+  deriving (Typeable)
+deriving instance Show PhysicalDevicePushDescriptorPropertiesKHR
+
+instance ToCStruct PhysicalDevicePushDescriptorPropertiesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDevicePushDescriptorPropertiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxPushDescriptors)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDevicePushDescriptorPropertiesKHR where
+  peekCStruct p = do
+    maxPushDescriptors <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pure $ PhysicalDevicePushDescriptorPropertiesKHR
+             maxPushDescriptors
+
+instance Storable PhysicalDevicePushDescriptorPropertiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDevicePushDescriptorPropertiesKHR where
+  zero = PhysicalDevicePushDescriptorPropertiesKHR
+           zero
+
+
+type KHR_PUSH_DESCRIPTOR_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION"
+pattern KHR_PUSH_DESCRIPTOR_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_PUSH_DESCRIPTOR_SPEC_VERSION = 2
+
+
+type KHR_PUSH_DESCRIPTOR_EXTENSION_NAME = "VK_KHR_push_descriptor"
+
+-- No documentation found for TopLevel "VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME"
+pattern KHR_PUSH_DESCRIPTOR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_PUSH_DESCRIPTOR_EXTENSION_NAME = "VK_KHR_push_descriptor"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_push_descriptor.hs-boot b/src/Vulkan/Extensions/VK_KHR_push_descriptor.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_push_descriptor.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_push_descriptor  (PhysicalDevicePushDescriptorPropertiesKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDevicePushDescriptorPropertiesKHR
+
+instance ToCStruct PhysicalDevicePushDescriptorPropertiesKHR
+instance Show PhysicalDevicePushDescriptorPropertiesKHR
+
+instance FromCStruct PhysicalDevicePushDescriptorPropertiesKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_ray_tracing.hs b/src/Vulkan/Extensions/VK_KHR_ray_tracing.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_ray_tracing.hs
@@ -0,0 +1,6272 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_ray_tracing  ( destroyAccelerationStructureKHR
+                                             , getAccelerationStructureMemoryRequirementsKHR
+                                             , bindAccelerationStructureMemoryKHR
+                                             , cmdCopyAccelerationStructureKHR
+                                             , copyAccelerationStructureKHR
+                                             , cmdCopyAccelerationStructureToMemoryKHR
+                                             , copyAccelerationStructureToMemoryKHR
+                                             , cmdCopyMemoryToAccelerationStructureKHR
+                                             , copyMemoryToAccelerationStructureKHR
+                                             , cmdWriteAccelerationStructuresPropertiesKHR
+                                             , writeAccelerationStructuresPropertiesKHR
+                                             , cmdTraceRaysKHR
+                                             , getRayTracingShaderGroupHandlesKHR
+                                             , getRayTracingCaptureReplayShaderGroupHandlesKHR
+                                             , createRayTracingPipelinesKHR
+                                             , cmdTraceRaysIndirectKHR
+                                             , getDeviceAccelerationStructureCompatibilityKHR
+                                             , createAccelerationStructureKHR
+                                             , withAccelerationStructureKHR
+                                             , cmdBuildAccelerationStructureKHR
+                                             , cmdBuildAccelerationStructureIndirectKHR
+                                             , buildAccelerationStructureKHR
+                                             , getAccelerationStructureDeviceAddressKHR
+                                             , RayTracingShaderGroupCreateInfoKHR(..)
+                                             , RayTracingPipelineCreateInfoKHR(..)
+                                             , BindAccelerationStructureMemoryInfoKHR(..)
+                                             , WriteDescriptorSetAccelerationStructureKHR(..)
+                                             , AccelerationStructureMemoryRequirementsInfoKHR(..)
+                                             , PhysicalDeviceRayTracingFeaturesKHR(..)
+                                             , PhysicalDeviceRayTracingPropertiesKHR(..)
+                                             , StridedBufferRegionKHR(..)
+                                             , TraceRaysIndirectCommandKHR(..)
+                                             , AccelerationStructureGeometryTrianglesDataKHR(..)
+                                             , AccelerationStructureGeometryAabbsDataKHR(..)
+                                             , AccelerationStructureGeometryInstancesDataKHR(..)
+                                             , AccelerationStructureGeometryKHR(..)
+                                             , AccelerationStructureBuildGeometryInfoKHR(..)
+                                             , AccelerationStructureBuildOffsetInfoKHR(..)
+                                             , AccelerationStructureCreateGeometryTypeInfoKHR(..)
+                                             , AccelerationStructureCreateInfoKHR(..)
+                                             , AabbPositionsKHR(..)
+                                             , TransformMatrixKHR(..)
+                                             , AccelerationStructureInstanceKHR(..)
+                                             , AccelerationStructureDeviceAddressInfoKHR(..)
+                                             , AccelerationStructureVersionKHR(..)
+                                             , CopyAccelerationStructureInfoKHR(..)
+                                             , CopyAccelerationStructureToMemoryInfoKHR(..)
+                                             , CopyMemoryToAccelerationStructureInfoKHR(..)
+                                             , RayTracingPipelineInterfaceCreateInfoKHR(..)
+                                             , DeviceOrHostAddressKHR(..)
+                                             , DeviceOrHostAddressConstKHR(..)
+                                             , AccelerationStructureGeometryDataKHR(..)
+                                             , GeometryInstanceFlagBitsKHR( GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR
+                                                                          , GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR
+                                                                          , GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR
+                                                                          , GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR
+                                                                          , ..
+                                                                          )
+                                             , GeometryInstanceFlagsKHR
+                                             , GeometryFlagBitsKHR( GEOMETRY_OPAQUE_BIT_KHR
+                                                                  , GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR
+                                                                  , ..
+                                                                  )
+                                             , GeometryFlagsKHR
+                                             , BuildAccelerationStructureFlagBitsKHR( BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR
+                                                                                    , BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR
+                                                                                    , BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR
+                                                                                    , BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR
+                                                                                    , BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR
+                                                                                    , ..
+                                                                                    )
+                                             , BuildAccelerationStructureFlagsKHR
+                                             , CopyAccelerationStructureModeKHR( COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR
+                                                                               , COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR
+                                                                               , COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR
+                                                                               , COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR
+                                                                               , ..
+                                                                               )
+                                             , AccelerationStructureTypeKHR( ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
+                                                                           , ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
+                                                                           , ..
+                                                                           )
+                                             , GeometryTypeKHR( GEOMETRY_TYPE_TRIANGLES_KHR
+                                                              , GEOMETRY_TYPE_AABBS_KHR
+                                                              , GEOMETRY_TYPE_INSTANCES_KHR
+                                                              , ..
+                                                              )
+                                             , AccelerationStructureMemoryRequirementsTypeKHR( ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR
+                                                                                             , ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR
+                                                                                             , ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR
+                                                                                             , ..
+                                                                                             )
+                                             , AccelerationStructureBuildTypeKHR( ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR
+                                                                                , ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR
+                                                                                , ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
+                                                                                , ..
+                                                                                )
+                                             , RayTracingShaderGroupTypeKHR( RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR
+                                                                           , RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR
+                                                                           , RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR
+                                                                           , ..
+                                                                           )
+                                             , KHR_RAY_TRACING_SPEC_VERSION
+                                             , pattern KHR_RAY_TRACING_SPEC_VERSION
+                                             , KHR_RAY_TRACING_EXTENSION_NAME
+                                             , pattern KHR_RAY_TRACING_EXTENSION_NAME
+                                             , AccelerationStructureKHR(..)
+                                             , PipelineLibraryCreateInfoKHR(..)
+                                             , DebugReportObjectTypeEXT(..)
+                                             , SHADER_UNUSED_KHR
+                                             , pattern SHADER_UNUSED_KHR
+                                             ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Bits ((.&.))
+import Data.Bits ((.|.))
+import Data.Bits (shiftL)
+import Data.Bits (shiftR)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (maybePeek)
+import Foreign.Marshal.Utils (with)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import qualified Data.ByteString (length)
+import Data.ByteString (packCStringLen)
+import Data.ByteString.Unsafe (unsafeUseAsCString)
+import Data.Coerce (coerce)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.Trans.Cont (runContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Foreign.C.Types (CSize(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Word (Word8)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.ByteString (ByteString)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.CStruct.Extends (peekSomeCStruct)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Extensions.Handles (AccelerationStructureKHR)
+import Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_deferred_host_operations (DeferredOperationInfoKHR)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Core10.BaseType (DeviceAddress)
+import Vulkan.Dynamic (DeviceCmds(pVkBindAccelerationStructureMemoryKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkBuildAccelerationStructureKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBuildAccelerationStructureIndirectKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBuildAccelerationStructureKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyAccelerationStructureKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyAccelerationStructureToMemoryKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyMemoryToAccelerationStructureKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdTraceRaysIndirectKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdTraceRaysKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdWriteAccelerationStructuresPropertiesKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCopyAccelerationStructureKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCopyAccelerationStructureToMemoryKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCopyMemoryToAccelerationStructureKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateAccelerationStructureKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateRayTracingPipelinesKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyAccelerationStructureKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetAccelerationStructureDeviceAddressKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetAccelerationStructureMemoryRequirementsKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceAccelerationStructureCompatibilityKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetRayTracingShaderGroupHandlesKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkWriteAccelerationStructuresPropertiesKHR))
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.IndexType (IndexType)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (Pipeline)
+import Vulkan.Core10.Handles (Pipeline(..))
+import Vulkan.Core10.Handles (PipelineCache)
+import Vulkan.Core10.Handles (PipelineCache(..))
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfoEXT)
+import Vulkan.Core10.Handles (PipelineLayout)
+import Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR)
+import Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Core10.Handles (QueryPool)
+import Vulkan.Core10.Handles (QueryPool(..))
+import Vulkan.Core10.Enums.QueryType (QueryType)
+import Vulkan.Core10.Enums.QueryType (QueryType(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.BaseType (Bool32(FALSE))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Core10.APIConstants (pattern UUID_SIZE)
+import Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
+import Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
+import Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR(..))
+import Vulkan.Core10.APIConstants (SHADER_UNUSED_KHR)
+import Vulkan.Core10.APIConstants (pattern SHADER_UNUSED_KHR)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyAccelerationStructureKHR
+  :: FunPtr (Ptr Device_T -> AccelerationStructureKHR -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> AccelerationStructureKHR -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyAccelerationStructureKHR - Destroy an acceleration structure
+-- object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that destroys the buffer.
+--
+-- -   @accelerationStructure@ is the acceleration structure to destroy.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @accelerationStructure@ /must/
+--     have completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @accelerationStructure@ was created, a compatible set
+--     of callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @accelerationStructure@ was created, @pAllocator@
+--     /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @accelerationStructure@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @accelerationStructure@
+--     /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @accelerationStructure@ is a valid handle, it /must/ have been
+--     created, allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @accelerationStructure@ /must/ be externally
+--     synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device'
+destroyAccelerationStructureKHR :: forall io . MonadIO io => Device -> AccelerationStructureKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyAccelerationStructureKHR device accelerationStructure allocator = liftIO . evalContT $ do
+  let vkDestroyAccelerationStructureKHRPtr = pVkDestroyAccelerationStructureKHR (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyAccelerationStructureKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyAccelerationStructureKHR is null" Nothing Nothing
+  let vkDestroyAccelerationStructureKHR' = mkVkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHRPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyAccelerationStructureKHR' (deviceHandle (device)) (accelerationStructure) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetAccelerationStructureMemoryRequirementsKHR
+  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoKHR -> Ptr (MemoryRequirements2 a) -> IO ()) -> Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoKHR -> Ptr (MemoryRequirements2 a) -> IO ()
+
+-- | vkGetAccelerationStructureMemoryRequirementsKHR - Get acceleration
+-- structure memory requirements
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device on which the acceleration structure
+--     was created.
+--
+-- -   @pInfo@ specifies the acceleration structure to get memory
+--     requirements for.
+--
+-- -   @pMemoryRequirements@ returns the requested acceleration structure
+--     memory requirements.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'AccelerationStructureMemoryRequirementsInfoKHR',
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
+getAccelerationStructureMemoryRequirementsKHR :: forall a io . (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io) => Device -> AccelerationStructureMemoryRequirementsInfoKHR -> io (MemoryRequirements2 a)
+getAccelerationStructureMemoryRequirementsKHR device info = liftIO . evalContT $ do
+  let vkGetAccelerationStructureMemoryRequirementsKHRPtr = pVkGetAccelerationStructureMemoryRequirementsKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetAccelerationStructureMemoryRequirementsKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetAccelerationStructureMemoryRequirementsKHR is null" Nothing Nothing
+  let vkGetAccelerationStructureMemoryRequirementsKHR' = mkVkGetAccelerationStructureMemoryRequirementsKHR vkGetAccelerationStructureMemoryRequirementsKHRPtr
+  pInfo <- ContT $ withCStruct (info)
+  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))
+  lift $ vkGetAccelerationStructureMemoryRequirementsKHR' (deviceHandle (device)) pInfo (pPMemoryRequirements)
+  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements
+  pure $ (pMemoryRequirements)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkBindAccelerationStructureMemoryKHR
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr BindAccelerationStructureMemoryInfoKHR -> IO Result) -> Ptr Device_T -> Word32 -> Ptr BindAccelerationStructureMemoryInfoKHR -> IO Result
+
+-- | vkBindAccelerationStructureMemoryKHR - Bind acceleration structure
+-- memory
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the acceleration structures
+--     and memory.
+--
+-- -   @bindInfoCount@ is the number of elements in @pBindInfos@.
+--
+-- -   @pBindInfos@ is a pointer to an array of
+--     'BindAccelerationStructureMemoryInfoKHR' structures describing
+--     acceleration structures and memory to bind.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'BindAccelerationStructureMemoryInfoKHR', 'Vulkan.Core10.Handles.Device'
+bindAccelerationStructureMemoryKHR :: forall io . MonadIO io => Device -> ("bindInfos" ::: Vector BindAccelerationStructureMemoryInfoKHR) -> io ()
+bindAccelerationStructureMemoryKHR device bindInfos = liftIO . evalContT $ do
+  let vkBindAccelerationStructureMemoryKHRPtr = pVkBindAccelerationStructureMemoryKHR (deviceCmds (device :: Device))
+  lift $ unless (vkBindAccelerationStructureMemoryKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBindAccelerationStructureMemoryKHR is null" Nothing Nothing
+  let vkBindAccelerationStructureMemoryKHR' = mkVkBindAccelerationStructureMemoryKHR vkBindAccelerationStructureMemoryKHRPtr
+  pPBindInfos <- ContT $ allocaBytesAligned @BindAccelerationStructureMemoryInfoKHR ((Data.Vector.length (bindInfos)) * 56) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindInfos `plusPtr` (56 * (i)) :: Ptr BindAccelerationStructureMemoryInfoKHR) (e) . ($ ())) (bindInfos)
+  r <- lift $ vkBindAccelerationStructureMemoryKHR' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (bindInfos)) :: Word32)) (pPBindInfos)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyAccelerationStructureKHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (CopyAccelerationStructureInfoKHR a) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (CopyAccelerationStructureInfoKHR a) -> IO ()
+
+-- | vkCmdCopyAccelerationStructureKHR - Copy an acceleration structure
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pInfo@ is a pointer to a 'CopyAccelerationStructureInfoKHR'
+--     structure defining the copy operation.
+--
+-- == Valid Usage
+--
+-- -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects
+--     referenced by this command /must/ be bound to device memory
+--
+-- -   The
+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+--     structure /must/ not be included in the @pNext@ chain of the
+--     'CopyAccelerationStructureInfoKHR' structure
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'CopyAccelerationStructureInfoKHR' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'CopyAccelerationStructureInfoKHR'
+cmdCopyAccelerationStructureKHR :: forall a io . (Extendss CopyAccelerationStructureInfoKHR a, PokeChain a, MonadIO io) => CommandBuffer -> CopyAccelerationStructureInfoKHR a -> io ()
+cmdCopyAccelerationStructureKHR commandBuffer info = liftIO . evalContT $ do
+  let vkCmdCopyAccelerationStructureKHRPtr = pVkCmdCopyAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyAccelerationStructureKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyAccelerationStructureKHR is null" Nothing Nothing
+  let vkCmdCopyAccelerationStructureKHR' = mkVkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHRPtr
+  pInfo <- ContT $ withCStruct (info)
+  lift $ vkCmdCopyAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) pInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCopyAccelerationStructureKHR
+  :: FunPtr (Ptr Device_T -> Ptr (CopyAccelerationStructureInfoKHR a) -> IO Result) -> Ptr Device_T -> Ptr (CopyAccelerationStructureInfoKHR a) -> IO Result
+
+-- | vkCopyAccelerationStructureKHR - Copy an acceleration structure on the
+-- host
+--
+-- = Parameters
+--
+-- This command fulfills the same task as 'cmdCopyAccelerationStructureKHR'
+-- but executed by the host.
+--
+-- = Description
+--
+-- -   @device@ is the device which owns the acceleration structures.
+--
+-- -   @pInfo@ is a pointer to a 'CopyAccelerationStructureInfoKHR'
+--     structure defining the copy operation.
+--
+-- If the
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+-- structure is included in the @pNext@ chain of the
+-- 'CopyAccelerationStructureInfoKHR' structure, the operation of this
+-- command is /deferred/, as defined in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>
+-- chapter.
+--
+-- == Valid Usage
+--
+-- -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects
+--     referenced by this command /must/ be bound to host-visible memory
+--
+-- -   the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'CopyAccelerationStructureInfoKHR' structure
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'CopyAccelerationStructureInfoKHR', 'Vulkan.Core10.Handles.Device'
+copyAccelerationStructureKHR :: forall a io . (Extendss CopyAccelerationStructureInfoKHR a, PokeChain a, MonadIO io) => Device -> CopyAccelerationStructureInfoKHR a -> io (Result)
+copyAccelerationStructureKHR device info = liftIO . evalContT $ do
+  let vkCopyAccelerationStructureKHRPtr = pVkCopyAccelerationStructureKHR (deviceCmds (device :: Device))
+  lift $ unless (vkCopyAccelerationStructureKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCopyAccelerationStructureKHR is null" Nothing Nothing
+  let vkCopyAccelerationStructureKHR' = mkVkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHRPtr
+  pInfo <- ContT $ withCStruct (info)
+  r <- lift $ vkCopyAccelerationStructureKHR' (deviceHandle (device)) pInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyAccelerationStructureToMemoryKHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (CopyAccelerationStructureToMemoryInfoKHR a) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (CopyAccelerationStructureToMemoryInfoKHR a) -> IO ()
+
+-- | vkCmdCopyAccelerationStructureToMemoryKHR - Copy an acceleration
+-- structure to device memory
+--
+-- = Parameters
+--
+-- This command produces the same results as
+-- 'copyAccelerationStructureToMemoryKHR', but writes its result to a
+-- device address, and is executed on the device rather than the host. The
+-- output /may/ not necessarily be bit-for-bit identical, but it can be
+-- equally used by either 'cmdCopyMemoryToAccelerationStructureKHR' or
+-- 'copyMemoryToAccelerationStructureKHR'.
+--
+-- = Description
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pInfo@ is an a pointer to a
+--     'CopyAccelerationStructureToMemoryInfoKHR' structure defining the
+--     copy operation.
+--
+-- The defined header structure for the serialized data consists of:
+--
+-- -   'Vulkan.Core10.APIConstants.UUID_SIZE' bytes of data matching
+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@
+--
+-- -   'Vulkan.Core10.APIConstants.UUID_SIZE' bytes of data identifying the
+--     compatibility for comparison using
+--     'getDeviceAccelerationStructureCompatibilityKHR'
+--
+-- -   A 64-bit integer of the total size matching the value queried using
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
+--
+-- -   A 64-bit integer of the deserialized size to be passed in to
+--     'AccelerationStructureCreateInfoKHR'::@compactedSize@
+--
+-- -   A 64-bit integer of the count of the number of acceleration
+--     structure handles following. This will be zero for a bottom-level
+--     acceleration structure.
+--
+-- The corresponding handles matching the values returned by
+-- 'getAccelerationStructureDeviceAddressKHR' or
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'
+-- are tightly packed in the buffer following the count. The application is
+-- expected to store a mapping between those handles and the original
+-- application-generated bottom-level acceleration structures to provide
+-- when deserializing.
+--
+-- == Valid Usage
+--
+-- -   All 'DeviceOrHostAddressConstKHR' referenced by this command /must/
+--     contain valid device addresses for a buffer bound to device memory.
+--     If the buffer is non-sparse then it /must/ be bound completely and
+--     contiguously to a single VkDeviceMemory object
+--
+-- -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects
+--     referenced by this command /must/ be bound to device memory
+--
+-- -   The
+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+--     structure /must/ not be included in the @pNext@ chain of the
+--     'CopyAccelerationStructureToMemoryInfoKHR' structure
+--
+-- -   @mode@ /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'CopyAccelerationStructureToMemoryInfoKHR' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'CopyAccelerationStructureToMemoryInfoKHR'
+cmdCopyAccelerationStructureToMemoryKHR :: forall a io . (Extendss CopyAccelerationStructureToMemoryInfoKHR a, PokeChain a, MonadIO io) => CommandBuffer -> CopyAccelerationStructureToMemoryInfoKHR a -> io ()
+cmdCopyAccelerationStructureToMemoryKHR commandBuffer info = liftIO . evalContT $ do
+  let vkCmdCopyAccelerationStructureToMemoryKHRPtr = pVkCmdCopyAccelerationStructureToMemoryKHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyAccelerationStructureToMemoryKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyAccelerationStructureToMemoryKHR is null" Nothing Nothing
+  let vkCmdCopyAccelerationStructureToMemoryKHR' = mkVkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHRPtr
+  pInfo <- ContT $ withCStruct (info)
+  lift $ vkCmdCopyAccelerationStructureToMemoryKHR' (commandBufferHandle (commandBuffer)) pInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCopyAccelerationStructureToMemoryKHR
+  :: FunPtr (Ptr Device_T -> Ptr (CopyAccelerationStructureToMemoryInfoKHR a) -> IO Result) -> Ptr Device_T -> Ptr (CopyAccelerationStructureToMemoryInfoKHR a) -> IO Result
+
+-- | vkCopyAccelerationStructureToMemoryKHR - Serialize an acceleration
+-- structure on the host
+--
+-- = Parameters
+--
+-- This command fulfills the same task as
+-- 'cmdCopyAccelerationStructureToMemoryKHR' but executed by the host.
+--
+-- = Description
+--
+-- This command produces the same results as
+-- 'cmdCopyAccelerationStructureToMemoryKHR', but writes its result
+-- directly to a host pointer, and is executed on the host rather than the
+-- device. The output /may/ not necessarily be bit-for-bit identical, but
+-- it can be equally used by either
+-- 'cmdCopyMemoryToAccelerationStructureKHR' or
+-- 'copyMemoryToAccelerationStructureKHR'.
+--
+-- -   @device@ is the device which owns @pInfo->src@.
+--
+-- -   @pInfo@ is a pointer to a 'CopyAccelerationStructureToMemoryInfoKHR'
+--     structure defining the copy operation.
+--
+-- If the
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+-- structure is included in the @pNext@ chain of the
+-- 'CopyAccelerationStructureToMemoryInfoKHR' structure, the operation of
+-- this command is /deferred/, as defined in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations>
+-- chapter.
+--
+-- == Valid Usage
+--
+-- -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects
+--     referenced by this command /must/ be bound to host-visible memory
+--
+-- -   All 'DeviceOrHostAddressKHR' referenced by this command /must/
+--     contain valid host pointers
+--
+-- -   the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'CopyAccelerationStructureToMemoryInfoKHR' structure
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'CopyAccelerationStructureToMemoryInfoKHR',
+-- 'Vulkan.Core10.Handles.Device'
+copyAccelerationStructureToMemoryKHR :: forall a io . (Extendss CopyAccelerationStructureToMemoryInfoKHR a, PokeChain a, MonadIO io) => Device -> CopyAccelerationStructureToMemoryInfoKHR a -> io (Result)
+copyAccelerationStructureToMemoryKHR device info = liftIO . evalContT $ do
+  let vkCopyAccelerationStructureToMemoryKHRPtr = pVkCopyAccelerationStructureToMemoryKHR (deviceCmds (device :: Device))
+  lift $ unless (vkCopyAccelerationStructureToMemoryKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCopyAccelerationStructureToMemoryKHR is null" Nothing Nothing
+  let vkCopyAccelerationStructureToMemoryKHR' = mkVkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHRPtr
+  pInfo <- ContT $ withCStruct (info)
+  r <- lift $ vkCopyAccelerationStructureToMemoryKHR' (deviceHandle (device)) pInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyMemoryToAccelerationStructureKHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (CopyMemoryToAccelerationStructureInfoKHR a) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (CopyMemoryToAccelerationStructureInfoKHR a) -> IO ()
+
+-- | vkCmdCopyMemoryToAccelerationStructureKHR - Copy device memory to an
+-- acceleration structure
+--
+-- = Parameters
+--
+-- This command can accept acceleration structures produced by either
+-- 'cmdCopyAccelerationStructureToMemoryKHR' or
+-- 'copyAccelerationStructureToMemoryKHR'.
+--
+-- = Description
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pInfo@ is a pointer to a 'CopyMemoryToAccelerationStructureInfoKHR'
+--     structure defining the copy operation.
+--
+-- The structure provided as input to deserialize is as described in
+-- 'cmdCopyAccelerationStructureToMemoryKHR', with any acceleration
+-- structure handles filled in with the newly-queried handles to bottom
+-- level acceleration structures created before deserialization. These do
+-- not need to be built at deserialize time, but /must/ be created.
+--
+-- == Valid Usage
+--
+-- -   All 'DeviceOrHostAddressKHR' referenced by this command /must/
+--     contain valid device addresses for a buffer bound to device memory.
+--     If the buffer is non-sparse then it /must/ be bound completely and
+--     contiguously to a single VkDeviceMemory object
+--
+-- -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects
+--     referenced by this command /must/ be bound to device memory
+--
+-- -   The
+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+--     structure /must/ not be included in the @pNext@ chain of the
+--     'CopyMemoryToAccelerationStructureInfoKHR' structure
+--
+-- -   @mode@ /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR'
+--
+-- -   The data in @pInfo->src@ /must/ have a format compatible with the
+--     destination physical device as returned by
+--     'getDeviceAccelerationStructureCompatibilityKHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'CopyMemoryToAccelerationStructureInfoKHR' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'CopyMemoryToAccelerationStructureInfoKHR'
+cmdCopyMemoryToAccelerationStructureKHR :: forall a io . (Extendss CopyMemoryToAccelerationStructureInfoKHR a, PokeChain a, MonadIO io) => CommandBuffer -> CopyMemoryToAccelerationStructureInfoKHR a -> io ()
+cmdCopyMemoryToAccelerationStructureKHR commandBuffer info = liftIO . evalContT $ do
+  let vkCmdCopyMemoryToAccelerationStructureKHRPtr = pVkCmdCopyMemoryToAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdCopyMemoryToAccelerationStructureKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyMemoryToAccelerationStructureKHR is null" Nothing Nothing
+  let vkCmdCopyMemoryToAccelerationStructureKHR' = mkVkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHRPtr
+  pInfo <- ContT $ withCStruct (info)
+  lift $ vkCmdCopyMemoryToAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) pInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCopyMemoryToAccelerationStructureKHR
+  :: FunPtr (Ptr Device_T -> Ptr (CopyMemoryToAccelerationStructureInfoKHR a) -> IO Result) -> Ptr Device_T -> Ptr (CopyMemoryToAccelerationStructureInfoKHR a) -> IO Result
+
+-- | vkCopyMemoryToAccelerationStructureKHR - Deserialize an acceleration
+-- structure on the host
+--
+-- = Parameters
+--
+-- This command fulfills the same task as
+-- 'cmdCopyMemoryToAccelerationStructureKHR' but is executed by the host.
+--
+-- = Description
+--
+-- This command can accept acceleration structures produced by either
+-- 'cmdCopyAccelerationStructureToMemoryKHR' or
+-- 'copyAccelerationStructureToMemoryKHR'.
+--
+-- -   @device@ is the device which owns @pInfo->dst@.
+--
+-- -   @pInfo@ is a pointer to a 'CopyMemoryToAccelerationStructureInfoKHR'
+--     structure defining the copy operation.
+--
+-- If the
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+-- structure is included in the @pNext@ chain of the
+-- 'CopyMemoryToAccelerationStructureInfoKHR' structure, the operation of
+-- this command is /deferred/, as defined in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>
+-- chapter.
+--
+-- == Valid Usage
+--
+-- -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects
+--     referenced by this command /must/ be bound to host-visible memory
+--
+-- -   All 'DeviceOrHostAddressConstKHR' referenced by this command /must/
+--     contain valid host pointers
+--
+-- -   the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'CopyMemoryToAccelerationStructureInfoKHR' structure
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'CopyMemoryToAccelerationStructureInfoKHR',
+-- 'Vulkan.Core10.Handles.Device'
+copyMemoryToAccelerationStructureKHR :: forall a io . (Extendss CopyMemoryToAccelerationStructureInfoKHR a, PokeChain a, MonadIO io) => Device -> CopyMemoryToAccelerationStructureInfoKHR a -> io (Result)
+copyMemoryToAccelerationStructureKHR device info = liftIO . evalContT $ do
+  let vkCopyMemoryToAccelerationStructureKHRPtr = pVkCopyMemoryToAccelerationStructureKHR (deviceCmds (device :: Device))
+  lift $ unless (vkCopyMemoryToAccelerationStructureKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCopyMemoryToAccelerationStructureKHR is null" Nothing Nothing
+  let vkCopyMemoryToAccelerationStructureKHR' = mkVkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHRPtr
+  pInfo <- ContT $ withCStruct (info)
+  r <- lift $ vkCopyMemoryToAccelerationStructureKHR' (deviceHandle (device)) pInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdWriteAccelerationStructuresPropertiesKHR
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> QueryPool -> Word32 -> IO ()
+
+-- | vkCmdWriteAccelerationStructuresPropertiesKHR - Write acceleration
+-- structure result parameters to query results.
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @accelerationStructureCount@ is the count of acceleration structures
+--     for which to query the property.
+--
+-- -   @pAccelerationStructures@ is a pointer to an array of existing
+--     previously built acceleration structures.
+--
+-- -   @queryType@ is a 'Vulkan.Core10.Enums.QueryType.QueryType' value
+--     specifying the type of queries managed by the pool.
+--
+-- -   @queryPool@ is the query pool that will manage the results of the
+--     query.
+--
+-- -   @firstQuery@ is the first query index within the query pool that
+--     will contain the @accelerationStructureCount@ number of results.
+--
+-- == Valid Usage
+--
+-- -   @queryPool@ /must/ have been created with a @queryType@ matching
+--     @queryType@
+--
+-- -   The queries identified by @queryPool@ and @firstQuery@ /must/ be
+--     /unavailable/
+--
+-- -   All acceleration structures in @accelerationStructures@ /must/ have
+--     been built with
+--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if
+--     @queryType@ is
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
+--
+-- -   @queryType@ /must/ be
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
+--     or
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pAccelerationStructures@ /must/ be a valid pointer to an array of
+--     @accelerationStructureCount@ valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles
+--
+-- -   @queryType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.QueryType.QueryType' value
+--
+-- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @accelerationStructureCount@ /must/ be greater than @0@
+--
+-- -   Each of @commandBuffer@, @queryPool@, and the elements of
+--     @pAccelerationStructures@ /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Handles.QueryPool',
+-- 'Vulkan.Core10.Enums.QueryType.QueryType'
+cmdWriteAccelerationStructuresPropertiesKHR :: forall io . MonadIO io => CommandBuffer -> ("accelerationStructures" ::: Vector AccelerationStructureKHR) -> QueryType -> QueryPool -> ("firstQuery" ::: Word32) -> io ()
+cmdWriteAccelerationStructuresPropertiesKHR commandBuffer accelerationStructures queryType queryPool firstQuery = liftIO . evalContT $ do
+  let vkCmdWriteAccelerationStructuresPropertiesKHRPtr = pVkCmdWriteAccelerationStructuresPropertiesKHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdWriteAccelerationStructuresPropertiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWriteAccelerationStructuresPropertiesKHR is null" Nothing Nothing
+  let vkCmdWriteAccelerationStructuresPropertiesKHR' = mkVkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHRPtr
+  pPAccelerationStructures <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)
+  lift $ vkCmdWriteAccelerationStructuresPropertiesKHR' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32)) (pPAccelerationStructures) (queryType) (queryPool) (firstQuery)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkWriteAccelerationStructuresPropertiesKHR
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> CSize -> Ptr () -> CSize -> IO Result) -> Ptr Device_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> CSize -> Ptr () -> CSize -> IO Result
+
+-- | vkWriteAccelerationStructuresPropertiesKHR - Query acceleration
+-- structure meta-data on the host
+--
+-- = Parameters
+--
+-- This command fulfills the same task as
+-- 'cmdWriteAccelerationStructuresPropertiesKHR' but executed by the host.
+--
+-- = Description
+--
+-- -   @device@ is the device which owns the acceleration structures in
+--     @pAccelerationStructures@.
+--
+-- -   @accelerationStructureCount@ is the count of acceleration structures
+--     for which to query the property.
+--
+-- -   @pAccelerationStructures@ points to an array of existing previously
+--     built acceleration structures.
+--
+-- -   @queryType@ is a 'Vulkan.Core10.Enums.QueryType.QueryType' value
+--     specifying the property to be queried.
+--
+-- -   @dataSize@ is the size in bytes of the buffer pointed to by @pData@.
+--
+-- -   @pData@ is a pointer to a user-allocated buffer where the results
+--     will be written.
+--
+-- -   @stride@ is the stride in bytes between results for individual
+--     queries within @pData@.
+--
+-- == Valid Usage
+--
+-- -   If @queryType@ is
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',
+--     then @stride@ /must/ be a multiple of the size of
+--     'Vulkan.Core10.BaseType.DeviceSize'
+--
+-- -   If @queryType@ is
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',
+--     then @data@ /must/ point to a 'Vulkan.Core10.BaseType.DeviceSize'
+--
+-- -   If @queryType@ is
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',
+--     then @stride@ /must/ be a multiple of the size of
+--     'Vulkan.Core10.BaseType.DeviceSize'
+--
+-- -   If @queryType@ is
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',
+--     then @data@ /must/ point to a 'Vulkan.Core10.BaseType.DeviceSize'
+--
+-- -   @dataSize@ /must/ be greater than or equal to
+--     @accelerationStructureCount@*@stride@
+--
+-- -   The acceleration structures referenced by @pAccelerationStructures@
+--     /must/ be bound to host-visible memory
+--
+-- -   All acceleration structures in @accelerationStructures@ /must/ have
+--     been built with
+--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if
+--     @queryType@ is
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
+--
+-- -   @queryType@ /must/ be
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
+--     or
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
+--
+-- -   the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pAccelerationStructures@ /must/ be a valid pointer to an array of
+--     @accelerationStructureCount@ valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles
+--
+-- -   @queryType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.QueryType.QueryType' value
+--
+-- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
+--
+-- -   @accelerationStructureCount@ /must/ be greater than @0@
+--
+-- -   @dataSize@ /must/ be greater than @0@
+--
+-- -   Each element of @pAccelerationStructures@ /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core10.Enums.QueryType.QueryType'
+writeAccelerationStructuresPropertiesKHR :: forall io . MonadIO io => Device -> ("accelerationStructures" ::: Vector AccelerationStructureKHR) -> QueryType -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> ("stride" ::: Word64) -> io ()
+writeAccelerationStructuresPropertiesKHR device accelerationStructures queryType dataSize data' stride = liftIO . evalContT $ do
+  let vkWriteAccelerationStructuresPropertiesKHRPtr = pVkWriteAccelerationStructuresPropertiesKHR (deviceCmds (device :: Device))
+  lift $ unless (vkWriteAccelerationStructuresPropertiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkWriteAccelerationStructuresPropertiesKHR is null" Nothing Nothing
+  let vkWriteAccelerationStructuresPropertiesKHR' = mkVkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHRPtr
+  pPAccelerationStructures <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8
+  lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)
+  r <- lift $ vkWriteAccelerationStructuresPropertiesKHR' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32)) (pPAccelerationStructures) (queryType) (CSize (dataSize)) (data') (CSize (stride))
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdTraceRaysKHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Word32 -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdTraceRaysKHR - Initialize a ray tracing dispatch
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pRaygenShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds
+--     the shader binding table data for the ray generation shader stage.
+--
+-- -   @pMissShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds
+--     the shader binding table data for the miss shader stage.
+--
+-- -   @pHitShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds
+--     the shader binding table data for the hit shader stage.
+--
+-- -   @pCallableShaderBindingTable@ is a 'StridedBufferRegionKHR' that
+--     holds the shader binding table data for the callable shader stage.
+--
+-- -   @width@ is the width of the ray trace query dimensions.
+--
+-- -   @height@ is height of the ray trace query dimensions.
+--
+-- -   @depth@ is depth of the ray trace query dimensions.
+--
+-- = Description
+--
+-- When the command is executed, a ray generation group of @width@ ×
+-- @height@ × @depth@ rays is assembled.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   Any shader group handle referenced by this call /must/ have been
+--     queried from the currently bound ray tracing shader pipeline
+--
+-- -   This command /must/ not cause a shader call instruction to be
+--     executed from a shader invocation with a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth>
+--     greater than the value of @maxRecursionDepth@ used to create the
+--     bound ray tracing pipeline
+--
+-- -   If @pRayGenShaderBindingTable->buffer@ is non-sparse then it /must/
+--     be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   The @offset@ member of @pRayGenShaderBindingTable@ /must/ be less
+--     than the size of the @pRayGenShaderBindingTable->buffer@
+--
+-- -   @pRayGenShaderBindingTable->offset@ /must/ be a multiple of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
+--
+-- -   @pRayGenShaderBindingTable->offset@ +
+--     @pRayGenShaderBindingTable->size@ /must/ be less than or equal to
+--     the size of @pRayGenShaderBindingTable->buffer@
+--
+-- -   The @size@ member of @pRayGenShaderBindingTable@ /must/ be equal to
+--     its @stride@ member
+--
+-- -   If @pMissShaderBindingTable->buffer@ is non-sparse then it /must/ be
+--     bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   The @offset@ member of @pMissShaderBindingTable@ /must/ be less than
+--     the size of @pMissShaderBindingTable->buffer@
+--
+-- -   The @offset@ member of @pMissShaderBindingTable@ /must/ be a
+--     multiple of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
+--
+-- -   @pMissShaderBindingTable->offset@ + @pMissShaderBindingTable->size@
+--     /must/ be less than or equal to the size of
+--     @pMissShaderBindingTable->buffer@
+--
+-- -   The @stride@ member of @pMissShaderBindingTable@ /must/ be a
+--     multiple of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
+--
+-- -   The @stride@ member of @pMissShaderBindingTable@ /must/ be less than
+--     or equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
+--
+-- -   If @pHitShaderBindingTable->buffer@ is non-sparse then it /must/ be
+--     bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   The @offset@ member of @pHitShaderBindingTable@ /must/ be less than
+--     the size of @pHitShaderBindingTable->buffer@
+--
+-- -   The @offset@ member of @pHitShaderBindingTable@ /must/ be a multiple
+--     of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
+--
+-- -   @pHitShaderBindingTable->offset@ + @pHitShaderBindingTable->size@
+--     /must/ be less than or equal to the size of
+--     @pHitShaderBindingTable->buffer@
+--
+-- -   The @stride@ member of @pHitShaderBindingTable@ /must/ be a multiple
+--     of 'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
+--
+-- -   The @stride@ member of @pHitShaderBindingTable@ /must/ be less than
+--     or equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
+--
+-- -   If @pCallableShaderBindingTable->buffer@ is non-sparse then it
+--     /must/ be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   The @offset@ member of @pCallableShaderBindingTable@ /must/ be less
+--     than the size of @pCallableShaderBindingTable->buffer@
+--
+-- -   The @offset@ member of @pCallableShaderBindingTable@ /must/ be a
+--     multiple of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
+--
+-- -   @pCallableShaderBindingTable->offset@ +
+--     @pCallableShaderBindingTable->size@ /must/ be less than or equal to
+--     the size of @pCallableShaderBindingTable->buffer@
+--
+-- -   The @stride@ member of @pCallableShaderBindingTable@ /must/ be a
+--     multiple of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
+--
+-- -   The @stride@ member of @pCallableShaderBindingTable@ /must/ be less
+--     than or equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',
+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',
+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',
+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR',
+--     the shader group handle identified by @pMissShaderBindingTable@
+--     /must/ contain a valid miss shader
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',
+--     entries in @pHitShaderBindingTable@ accessed as a result of this
+--     command in order to execute an any hit shader /must/ not be set to
+--     zero
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',
+--     entries in @pHitShaderBindingTable@ accessed as a result of this
+--     command in order to execute a closest hit shader /must/ not be set
+--     to zero
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',
+--     entries in @pHitShaderBindingTable@ accessed as a result of this
+--     command in order to execute an intersection shader /must/ not be set
+--     to zero
+--
+-- -   If @commandBuffer@ is a protected command buffer, any resource
+--     written to by the 'Vulkan.Core10.Handles.Pipeline' object bound to
+--     the pipeline bind point used by this command /must/ not be an
+--     unprotected resource
+--
+-- -   If @commandBuffer@ is a protected command buffer, pipeline stages
+--     other than the framebuffer-space and compute stages in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point /must/ not write to any resource
+--
+-- -   @width@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
+--
+-- -   @height@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
+--
+-- -   @depth@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pRaygenShaderBindingTable@ /must/ be a valid pointer to a valid
+--     'StridedBufferRegionKHR' structure
+--
+-- -   @pMissShaderBindingTable@ /must/ be a valid pointer to a valid
+--     'StridedBufferRegionKHR' structure
+--
+-- -   @pHitShaderBindingTable@ /must/ be a valid pointer to a valid
+--     'StridedBufferRegionKHR' structure
+--
+-- -   @pCallableShaderBindingTable@ /must/ be a valid pointer to a valid
+--     'StridedBufferRegionKHR' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'StridedBufferRegionKHR'
+cmdTraceRaysKHR :: forall io . MonadIO io => CommandBuffer -> ("raygenShaderBindingTable" ::: StridedBufferRegionKHR) -> ("missShaderBindingTable" ::: StridedBufferRegionKHR) -> ("hitShaderBindingTable" ::: StridedBufferRegionKHR) -> ("callableShaderBindingTable" ::: StridedBufferRegionKHR) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> io ()
+cmdTraceRaysKHR commandBuffer raygenShaderBindingTable missShaderBindingTable hitShaderBindingTable callableShaderBindingTable width height depth = liftIO . evalContT $ do
+  let vkCmdTraceRaysKHRPtr = pVkCmdTraceRaysKHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdTraceRaysKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdTraceRaysKHR is null" Nothing Nothing
+  let vkCmdTraceRaysKHR' = mkVkCmdTraceRaysKHR vkCmdTraceRaysKHRPtr
+  pRaygenShaderBindingTable <- ContT $ withCStruct (raygenShaderBindingTable)
+  pMissShaderBindingTable <- ContT $ withCStruct (missShaderBindingTable)
+  pHitShaderBindingTable <- ContT $ withCStruct (hitShaderBindingTable)
+  pCallableShaderBindingTable <- ContT $ withCStruct (callableShaderBindingTable)
+  lift $ vkCmdTraceRaysKHR' (commandBufferHandle (commandBuffer)) pRaygenShaderBindingTable pMissShaderBindingTable pHitShaderBindingTable pCallableShaderBindingTable (width) (height) (depth)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetRayTracingShaderGroupHandlesKHR
+  :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result
+
+-- | vkGetRayTracingShaderGroupHandlesKHR - Query ray tracing pipeline shader
+-- group handles
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device containing the ray tracing pipeline.
+--
+-- -   @pipeline@ is the ray tracing pipeline object containing the
+--     shaders.
+--
+-- -   @firstGroup@ is the index of the first group to retrieve a handle
+--     for from the 'RayTracingPipelineCreateInfoKHR'::@pGroups@ or
+--     'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@pGroups@
+--     array.
+--
+-- -   @groupCount@ is the number of shader handles to retrieve.
+--
+-- -   @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.
+--
+-- == Valid Usage
+--
+-- -   The sum of @firstGroup@ and @groupCount@ /must/ be less than the
+--     number of shader groups in @pipeline@
+--
+-- -   @dataSize@ /must/ be at least
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@ ×
+--     @groupCount@
+--
+-- -   @pipeline@ /must/ have not been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
+--
+-- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
+--
+-- -   @dataSize@ /must/ be greater than @0@
+--
+-- -   @pipeline@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'
+getRayTracingShaderGroupHandlesKHR :: forall io . MonadIO io => Device -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> io ()
+getRayTracingShaderGroupHandlesKHR device pipeline firstGroup groupCount dataSize data' = liftIO $ do
+  let vkGetRayTracingShaderGroupHandlesKHRPtr = pVkGetRayTracingShaderGroupHandlesKHR (deviceCmds (device :: Device))
+  unless (vkGetRayTracingShaderGroupHandlesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetRayTracingShaderGroupHandlesKHR is null" Nothing Nothing
+  let vkGetRayTracingShaderGroupHandlesKHR' = mkVkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHRPtr
+  r <- vkGetRayTracingShaderGroupHandlesKHR' (deviceHandle (device)) (pipeline) (firstGroup) (groupCount) (CSize (dataSize)) (data')
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR
+  :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result
+
+-- | vkGetRayTracingCaptureReplayShaderGroupHandlesKHR - Query ray tracing
+-- capture replay pipeline shader group handles
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device containing the ray tracing pipeline.
+--
+-- -   @pipeline@ is the ray tracing pipeline object containing the
+--     shaders.
+--
+-- -   @firstGroup@ is the index of the first group to retrieve a handle
+--     for from the 'RayTracingPipelineCreateInfoKHR'::@pGroups@ array.
+--
+-- -   @groupCount@ is the number of shader handles to retrieve.
+--
+-- -   @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.
+--
+-- == Valid Usage
+--
+-- -   The sum of @firstGroup@ and @groupCount@ /must/ be less than the
+--     number of shader groups in @pipeline@
+--
+-- -   @dataSize@ /must/ be at least
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleCaptureReplaySize@
+--     × @groupCount@
+--
+-- -   'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@
+--     /must/ be enabled to call this function
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
+--
+-- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
+--
+-- -   @dataSize@ /must/ be greater than @0@
+--
+-- -   @pipeline@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'
+getRayTracingCaptureReplayShaderGroupHandlesKHR :: forall io . MonadIO io => Device -> Pipeline -> ("firstGroup" ::: Word32) -> ("groupCount" ::: Word32) -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> io ()
+getRayTracingCaptureReplayShaderGroupHandlesKHR device pipeline firstGroup groupCount dataSize data' = liftIO $ do
+  let vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr = pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR (deviceCmds (device :: Device))
+  unless (vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetRayTracingCaptureReplayShaderGroupHandlesKHR is null" Nothing Nothing
+  let vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' = mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr
+  r <- vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' (deviceHandle (device)) (pipeline) (firstGroup) (groupCount) (CSize (dataSize)) (data')
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateRayTracingPipelinesKHR
+  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (RayTracingPipelineCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (RayTracingPipelineCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
+
+-- | vkCreateRayTracingPipelinesKHR - Creates a new ray tracing pipeline
+-- object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the ray tracing
+--     pipelines.
+--
+-- -   @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     indicating that pipeline caching is disabled, or the handle of a
+--     valid
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>
+--     object, in which case use of that cache is enabled for the duration
+--     of the command.
+--
+-- -   @createInfoCount@ is the length of the @pCreateInfos@ and
+--     @pPipelines@ arrays.
+--
+-- -   @pCreateInfos@ is a pointer to an array of
+--     'RayTracingPipelineCreateInfoKHR' structures.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pPipelines@ is a pointer to an array in which the resulting ray
+--     tracing pipeline objects are returned.
+--
+-- = Description
+--
+-- The 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'
+-- error is returned if the implementation is unable to re-use the shader
+-- group handles provided in
+-- 'RayTracingShaderGroupCreateInfoKHR'::@pShaderGroupCaptureReplayHandle@
+-- when
+-- 'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@
+-- is enabled.
+--
+-- == Valid Usage
+--
+-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and the @basePipelineIndex@ member of that same element is not
+--     @-1@, @basePipelineIndex@ /must/ be less than the index into
+--     @pCreateInfos@ that corresponds to that element
+--
+-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, the base pipeline /must/ have been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
+--     flag set
+--
+-- -   If @pipelineCache@ was created with
+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
+--     host access to @pipelineCache@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pipelineCache@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineCache' handle
+--
+-- -   @pCreateInfos@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ valid 'RayTracingPipelineCreateInfoKHR' structures
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pPipelines@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles
+--
+-- -   @createInfoCount@ /must/ be greater than @0@
+--
+-- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Handles.PipelineCache', 'RayTracingPipelineCreateInfoKHR'
+createRayTracingPipelinesKHR :: forall io . MonadIO io => Device -> PipelineCache -> ("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, ("pipelines" ::: Vector Pipeline))
+createRayTracingPipelinesKHR device pipelineCache createInfos allocator = liftIO . evalContT $ do
+  let vkCreateRayTracingPipelinesKHRPtr = pVkCreateRayTracingPipelinesKHR (deviceCmds (device :: Device))
+  lift $ unless (vkCreateRayTracingPipelinesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateRayTracingPipelinesKHR is null" Nothing Nothing
+  let vkCreateRayTracingPipelinesKHR' = mkVkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHRPtr
+  pPCreateInfos <- ContT $ allocaBytesAligned @(RayTracingPipelineCreateInfoKHR _) ((Data.Vector.length (createInfos)) * 120) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (120 * (i)) :: Ptr (RayTracingPipelineCreateInfoKHR _))) (e) . ($ ())) (createInfos)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
+  r <- lift $ vkCreateRayTracingPipelinesKHR' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (pPCreateInfos) pAllocator (pPPipelines)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
+  pure $ (r, pPipelines)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdTraceRaysIndirectKHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Buffer -> DeviceSize -> IO ()
+
+-- | vkCmdTraceRaysIndirectKHR - Initialize an indirect ray tracing dispatch
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pRaygenShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds
+--     the shader binding table data for the ray generation shader stage.
+--
+-- -   @pMissShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds
+--     the shader binding table data for the miss shader stage.
+--
+-- -   @pHitShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds
+--     the shader binding table data for the hit shader stage.
+--
+-- -   @pCallableShaderBindingTable@ is a 'StridedBufferRegionKHR' that
+--     holds the shader binding table data for the callable shader stage.
+--
+-- -   @buffer@ is the buffer containing the trace ray parameters.
+--
+-- -   @offset@ is the byte offset into @buffer@ where parameters begin.
+--
+-- = Description
+--
+-- 'cmdTraceRaysIndirectKHR' behaves similarly to 'cmdTraceRaysKHR' except
+-- that the ray trace query dimensions are read by the device from @buffer@
+-- during execution. The parameters of trace ray are encoded in the
+-- 'TraceRaysIndirectCommandKHR' structure located at @offset@ bytes in
+-- @buffer@.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   Any shader group handle referenced by this call /must/ have been
+--     queried from the currently bound ray tracing shader pipeline
+--
+-- -   This command /must/ not cause a shader call instruction to be
+--     executed from a shader invocation with a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth>
+--     greater than the value of @maxRecursionDepth@ used to create the
+--     bound ray tracing pipeline
+--
+-- -   If @pRayGenShaderBindingTable->buffer@ is non-sparse then it /must/
+--     be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   The @offset@ member of @pRayGenShaderBindingTable@ /must/ be less
+--     than the size of the @pRayGenShaderBindingTable->buffer@
+--
+-- -   @pRayGenShaderBindingTable->offset@ /must/ be a multiple of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
+--
+-- -   @pRayGenShaderBindingTable->offset@ +
+--     @pRayGenShaderBindingTable->size@ /must/ be less than or equal to
+--     the size of @pRayGenShaderBindingTable->buffer@
+--
+-- -   The @size@ member of @pRayGenShaderBindingTable@ /must/ be equal to
+--     its @stride@ member
+--
+-- -   If @pMissShaderBindingTable->buffer@ is non-sparse then it /must/ be
+--     bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   The @offset@ member of @pMissShaderBindingTable@ /must/ be less than
+--     the size of @pMissShaderBindingTable->buffer@
+--
+-- -   The @offset@ member of @pMissShaderBindingTable@ /must/ be a
+--     multiple of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
+--
+-- -   @pMissShaderBindingTable->offset@ + @pMissShaderBindingTable->size@
+--     /must/ be less than or equal to the size of
+--     @pMissShaderBindingTable->buffer@
+--
+-- -   The @stride@ member of @pMissShaderBindingTable@ /must/ be a
+--     multiple of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
+--
+-- -   The @stride@ member of @pMissShaderBindingTable@ /must/ be less than
+--     or equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
+--
+-- -   If @pHitShaderBindingTable->buffer@ is non-sparse then it /must/ be
+--     bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   The @offset@ member of @pHitShaderBindingTable@ /must/ be less than
+--     the size of @pHitShaderBindingTable->buffer@
+--
+-- -   The @offset@ member of @pHitShaderBindingTable@ /must/ be a multiple
+--     of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
+--
+-- -   @pHitShaderBindingTable->offset@ + @pHitShaderBindingTable->size@
+--     /must/ be less than or equal to the size of
+--     @pHitShaderBindingTable->buffer@
+--
+-- -   The @stride@ member of @pHitShaderBindingTable@ /must/ be a multiple
+--     of 'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
+--
+-- -   The @stride@ member of @pHitShaderBindingTable@ /must/ be less than
+--     or equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
+--
+-- -   If @pCallableShaderBindingTable->buffer@ is non-sparse then it
+--     /must/ be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   The @offset@ member of @pCallableShaderBindingTable@ /must/ be less
+--     than the size of @pCallableShaderBindingTable->buffer@
+--
+-- -   The @offset@ member of @pCallableShaderBindingTable@ /must/ be a
+--     multiple of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@
+--
+-- -   @pCallableShaderBindingTable->offset@ +
+--     @pCallableShaderBindingTable->size@ /must/ be less than or equal to
+--     the size of @pCallableShaderBindingTable->buffer@
+--
+-- -   The @stride@ member of @pCallableShaderBindingTable@ /must/ be a
+--     multiple of
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@
+--
+-- -   The @stride@ member of @pCallableShaderBindingTable@ /must/ be less
+--     than or equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',
+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',
+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',
+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR',
+--     the shader group handle identified by @pMissShaderBindingTable@
+--     /must/ contain a valid miss shader
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',
+--     entries in @pHitShaderBindingTable@ accessed as a result of this
+--     command in order to execute an any hit shader /must/ not be set to
+--     zero
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',
+--     entries in @pHitShaderBindingTable@ accessed as a result of this
+--     command in order to execute a closest hit shader /must/ not be set
+--     to zero
+--
+-- -   If the currently bound ray tracing pipeline was created with @flags@
+--     that included
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',
+--     entries in @pHitShaderBindingTable@ accessed as a result of this
+--     command in order to execute an intersection shader /must/ not be set
+--     to zero
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @buffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   (@offset@ + @sizeof@('TraceRaysIndirectCommandKHR')) /must/ be less
+--     than or equal to the size of @buffer@
+--
+-- -   the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-indirecttraceray ::rayTracingIndirectTraceRays>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pRaygenShaderBindingTable@ /must/ be a valid pointer to a valid
+--     'StridedBufferRegionKHR' structure
+--
+-- -   @pMissShaderBindingTable@ /must/ be a valid pointer to a valid
+--     'StridedBufferRegionKHR' structure
+--
+-- -   @pHitShaderBindingTable@ /must/ be a valid pointer to a valid
+--     'StridedBufferRegionKHR' structure
+--
+-- -   @pCallableShaderBindingTable@ /must/ be a valid pointer to a valid
+--     'StridedBufferRegionKHR' structure
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize', 'StridedBufferRegionKHR'
+cmdTraceRaysIndirectKHR :: forall io . MonadIO io => CommandBuffer -> ("raygenShaderBindingTable" ::: StridedBufferRegionKHR) -> ("missShaderBindingTable" ::: StridedBufferRegionKHR) -> ("hitShaderBindingTable" ::: StridedBufferRegionKHR) -> ("callableShaderBindingTable" ::: StridedBufferRegionKHR) -> Buffer -> ("offset" ::: DeviceSize) -> io ()
+cmdTraceRaysIndirectKHR commandBuffer raygenShaderBindingTable missShaderBindingTable hitShaderBindingTable callableShaderBindingTable buffer offset = liftIO . evalContT $ do
+  let vkCmdTraceRaysIndirectKHRPtr = pVkCmdTraceRaysIndirectKHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdTraceRaysIndirectKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdTraceRaysIndirectKHR is null" Nothing Nothing
+  let vkCmdTraceRaysIndirectKHR' = mkVkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHRPtr
+  pRaygenShaderBindingTable <- ContT $ withCStruct (raygenShaderBindingTable)
+  pMissShaderBindingTable <- ContT $ withCStruct (missShaderBindingTable)
+  pHitShaderBindingTable <- ContT $ withCStruct (hitShaderBindingTable)
+  pCallableShaderBindingTable <- ContT $ withCStruct (callableShaderBindingTable)
+  lift $ vkCmdTraceRaysIndirectKHR' (commandBufferHandle (commandBuffer)) pRaygenShaderBindingTable pMissShaderBindingTable pHitShaderBindingTable pCallableShaderBindingTable (buffer) (offset)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceAccelerationStructureCompatibilityKHR
+  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result
+
+-- | vkGetDeviceAccelerationStructureCompatibilityKHR - Check if a serialized
+-- acceleration structure is compatible with the current device
+--
+-- = Parameters
+--
+-- -   @device@ is the device to check the version against.
+--
+-- -   @version@ points to the 'AccelerationStructureVersionKHR' version
+--     information to check against the device.
+--
+-- = Description
+--
+-- This possible return values for
+-- 'getDeviceAccelerationStructureCompatibilityKHR' are:
+--
+-- -   'Vulkan.Core10.Enums.Result.SUCCESS' is returned if an acceleration
+--     structure serialized with @version@ as the version information is
+--     compatible with @device@.
+--
+-- -   'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_VERSION_KHR' is
+--     returned if an acceleration structure serialized with @version@ as
+--     the version information is not compatible with @device@.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @version@ /must/ be a valid pointer to a valid
+--     'AccelerationStructureVersionKHR' structure
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_VERSION_KHR'
+--
+-- = See Also
+--
+-- 'AccelerationStructureVersionKHR', 'Vulkan.Core10.Handles.Device'
+getDeviceAccelerationStructureCompatibilityKHR :: forall io . MonadIO io => Device -> AccelerationStructureVersionKHR -> io ()
+getDeviceAccelerationStructureCompatibilityKHR device version = liftIO . evalContT $ do
+  let vkGetDeviceAccelerationStructureCompatibilityKHRPtr = pVkGetDeviceAccelerationStructureCompatibilityKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetDeviceAccelerationStructureCompatibilityKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceAccelerationStructureCompatibilityKHR is null" Nothing Nothing
+  let vkGetDeviceAccelerationStructureCompatibilityKHR' = mkVkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHRPtr
+  version' <- ContT $ withCStruct (version)
+  r <- lift $ vkGetDeviceAccelerationStructureCompatibilityKHR' (deviceHandle (device)) version'
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateAccelerationStructureKHR
+  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result
+
+-- | vkCreateAccelerationStructureKHR - Create a new acceleration structure
+-- object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the buffer object.
+--
+-- -   @pCreateInfo@ is a pointer to a 'AccelerationStructureCreateInfoKHR'
+--     structure containing parameters affecting creation of the
+--     acceleration structure.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pAccelerationStructure@ is a pointer to a
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle in which
+--     the resulting acceleration structure object is returned.
+--
+-- = Description
+--
+-- Similar to other objects in Vulkan, the acceleration structure creation
+-- merely creates an object with a specific “shape”. The type and quantity
+-- of geometry that can be built into an acceleration structure is
+-- determined by the parameters of 'AccelerationStructureCreateInfoKHR'.
+--
+-- Populating the data in the object after allocating and binding memory is
+-- done with commands such as 'cmdBuildAccelerationStructureKHR',
+-- 'buildAccelerationStructureKHR', 'cmdCopyAccelerationStructureKHR', and
+-- 'copyAccelerationStructureKHR'.
+--
+-- The input buffers passed to acceleration structure build commands will
+-- be referenced by the implementation for the duration of the command.
+-- After the command completes, the acceleration structure /may/ hold a
+-- reference to any acceleration structure specified by an active instance
+-- contained therein. Apart from this referencing, acceleration structures
+-- /must/ be fully self-contained. The application /may/ re-use or free any
+-- memory which was used by the command as an input or as scratch without
+-- affecting the results of ray traversal.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>
+--     or
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
+--     feature /must/ be enabled
+--
+-- -   If 'AccelerationStructureCreateInfoKHR'::@deviceAddress@ is not
+--     zero, the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-ascapturereplay rayTracingAccelerationStructureCaptureReplay>
+--     feature /must/ be enabled
+--
+-- -   If @device@ was created with multiple physical devices, then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'AccelerationStructureCreateInfoKHR' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pAccelerationStructure@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
+--
+-- = See Also
+--
+-- 'AccelerationStructureCreateInfoKHR',
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device'
+createAccelerationStructureKHR :: forall io . MonadIO io => Device -> AccelerationStructureCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (AccelerationStructureKHR)
+createAccelerationStructureKHR device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateAccelerationStructureKHRPtr = pVkCreateAccelerationStructureKHR (deviceCmds (device :: Device))
+  lift $ unless (vkCreateAccelerationStructureKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateAccelerationStructureKHR is null" Nothing Nothing
+  let vkCreateAccelerationStructureKHR' = mkVkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHRPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPAccelerationStructure <- ContT $ bracket (callocBytes @AccelerationStructureKHR 8) free
+  r <- lift $ vkCreateAccelerationStructureKHR' (deviceHandle (device)) pCreateInfo pAllocator (pPAccelerationStructure)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pAccelerationStructure <- lift $ peek @AccelerationStructureKHR pPAccelerationStructure
+  pure $ (pAccelerationStructure)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createAccelerationStructureKHR' and 'destroyAccelerationStructureKHR'
+--
+-- To ensure that 'destroyAccelerationStructureKHR' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withAccelerationStructureKHR :: forall io r . MonadIO io => Device -> AccelerationStructureCreateInfoKHR -> Maybe AllocationCallbacks -> (io (AccelerationStructureKHR) -> ((AccelerationStructureKHR) -> io ()) -> r) -> r
+withAccelerationStructureKHR device pCreateInfo pAllocator b =
+  b (createAccelerationStructureKHR device pCreateInfo pAllocator)
+    (\(o0) -> destroyAccelerationStructureKHR device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBuildAccelerationStructureKHR
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO ()
+
+-- | vkCmdBuildAccelerationStructureKHR - Build an acceleration structure
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @infoCount@ is the number of acceleration structures to build. It
+--     specifies the number of the @pInfos@ structures and @ppOffsetInfos@
+--     pointers that /must/ be provided.
+--
+-- -   @pInfos@ is an array of @infoCount@
+--     'AccelerationStructureBuildGeometryInfoKHR' structures defining the
+--     geometry used to build each acceleration structure.
+--
+-- -   @ppOffsetInfos@ is an array of @infoCount@ pointers to arrays of
+--     'AccelerationStructureBuildOffsetInfoKHR' structures. Each
+--     @ppOffsetInfos@[i] is an array of @pInfos@[i].@geometryCount@
+--     'AccelerationStructureBuildOffsetInfoKHR' structures defining
+--     dynamic offsets to the addresses where geometry data is stored, as
+--     defined by @pInfos@[i].
+--
+-- = Description
+--
+-- The 'cmdBuildAccelerationStructureKHR' command provides the ability to
+-- initiate multiple acceleration structures builds, however there is no
+-- ordering or synchronization implied between any of the individual
+-- acceleration structure builds.
+--
+-- Note
+--
+-- This means that an application /cannot/ build a top-level acceleration
+-- structure in the same 'cmdBuildAccelerationStructureKHR' call as the
+-- associated bottom-level or instance acceleration structures are being
+-- built. There also /cannot/ be any memory aliasing between any
+-- acceleration structure memories or scratch memories being used by any of
+-- the builds.
+--
+-- == Valid Usage
+--
+-- -   Each element of @ppOffsetInfos@[i] /must/ be a valid pointer to an
+--     array of @pInfos@[i].@geometryCount@
+--     'AccelerationStructureBuildOffsetInfoKHR' structures
+--
+-- -   Each @pInfos@[i].@srcAccelerationStructure@ /must/ not refer to the
+--     same acceleration structure as any
+--     @pInfos@[i].@dstAccelerationStructure@ that is provided to the same
+--     build command unless it is identical for an update
+--
+-- -   For each @pInfos@[i], @dstAccelerationStructure@ /must/ have been
+--     created with compatible 'AccelerationStructureCreateInfoKHR' where
+--     'AccelerationStructureCreateInfoKHR'::@type@ and
+--     'AccelerationStructureCreateInfoKHR'::@flags@ are identical to
+--     'AccelerationStructureBuildGeometryInfoKHR'::@type@ and
+--     'AccelerationStructureBuildGeometryInfoKHR'::@flags@ respectively,
+--     'AccelerationStructureBuildGeometryInfoKHR'::@geometryCount@ for
+--     @dstAccelerationStructure@ are greater than or equal to the build
+--     size, and each geometry in
+--     'AccelerationStructureBuildGeometryInfoKHR'::@ppGeometries@ for
+--     @dstAccelerationStructure@ has greater than or equal to the number
+--     of vertices, indices, and AABBs,
+--     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@ is
+--     both 0 or both non-zero, and all other parameters are the same
+--
+-- -   For each @pInfos@[i], if @update@ is 'Vulkan.Core10.BaseType.TRUE',
+--     then objects that were previously active for that acceleration
+--     structure /must/ not be made inactive as per
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>
+--
+-- -   For each @pInfos@[i], if @update@ is 'Vulkan.Core10.BaseType.TRUE',
+--     then objects that were previously inactive for that acceleration
+--     structure /must/ not be made active as per
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>
+--
+-- -   Any acceleration structure instance in any top level build in this
+--     command /must/ not reference any bottom level acceleration structure
+--     built by this command
+--
+-- -   There /must/ not be any
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
+--     between the scratch memories that are provided in all the
+--     @pInfos@[i].@scratchData@ memories for the acceleration structure
+--     builds
+--
+-- -   There /must/ not be any
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
+--     between memory bound to any top level, bottom level, or instance
+--     acceleration structure accessed by this command
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.FALSE', all addresses between
+--     @pInfos@[i].@scratchData@ and @pInfos@[i].@scratchData@ + N - 1
+--     /must/ be in the buffer device address range of the same buffer,
+--     where N is given by the @size@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'getAccelerationStructureMemoryRequirementsKHR' with
+--     'AccelerationStructureMemoryRequirementsInfoKHR'::@accelerationStructure@
+--     set to @pInfos@[i].@dstAccelerationStructure@ and
+--     'AccelerationStructureMemoryRequirementsInfoKHR'::@type@ set to
+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR'
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.TRUE', all addresses between
+--     @pInfos@[i].@scratchData@ and @pInfos@[i].@scratchData@ + N - 1
+--     /must/ be in the buffer device address range of the same buffer,
+--     where N is given by the @size@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'getAccelerationStructureMemoryRequirementsKHR' with
+--     'AccelerationStructureMemoryRequirementsInfoKHR'::@accelerationStructure@
+--     set to @pInfos@[i].@dstAccelerationStructure@ and
+--     'AccelerationStructureMemoryRequirementsInfoKHR'::@type@ set to
+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR'
+--
+-- -   The buffer from which the buffer device address
+--     @pInfos@[i].@scratchData@ is queried /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_RAY_TRACING_BIT_KHR'
+--     usage flag
+--
+-- -   All 'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR'
+--     referenced by this command /must/ contain valid device addresses for
+--     a buffer bound to device memory. If the buffer is non-sparse then it
+--     /must/ be bound completely and contiguously to a single
+--     VkDeviceMemory object
+--
+-- -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects
+--     referenced by this command /must/ be bound to device memory
+--
+-- -   The
+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+--     structure /must/ not be included in the @pNext@ chain of any of the
+--     provided 'AccelerationStructureBuildGeometryInfoKHR' structures
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pInfos@ /must/ be a valid pointer to an array of @infoCount@ valid
+--     'AccelerationStructureBuildGeometryInfoKHR' structures
+--
+-- -   @ppOffsetInfos@ /must/ be a valid pointer to an array of @infoCount@
+--     'AccelerationStructureBuildOffsetInfoKHR' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   @infoCount@ /must/ be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'AccelerationStructureBuildGeometryInfoKHR',
+-- 'AccelerationStructureBuildOffsetInfoKHR',
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdBuildAccelerationStructureKHR :: forall io . MonadIO io => CommandBuffer -> ("infos" ::: Vector (SomeStruct AccelerationStructureBuildGeometryInfoKHR)) -> ("offsetInfos" ::: Vector AccelerationStructureBuildOffsetInfoKHR) -> io ()
+cmdBuildAccelerationStructureKHR commandBuffer infos offsetInfos = liftIO . evalContT $ do
+  let vkCmdBuildAccelerationStructureKHRPtr = pVkCmdBuildAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBuildAccelerationStructureKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBuildAccelerationStructureKHR is null" Nothing Nothing
+  let vkCmdBuildAccelerationStructureKHR' = mkVkCmdBuildAccelerationStructureKHR vkCmdBuildAccelerationStructureKHRPtr
+  let pInfosLength = Data.Vector.length $ (infos)
+  lift $ unless ((Data.Vector.length $ (offsetInfos)) == pInfosLength) $
+    throwIO $ IOError Nothing InvalidArgument "" "ppOffsetInfos and pInfos must have the same length" Nothing Nothing
+  pPInfos <- ContT $ allocaBytesAligned @(AccelerationStructureBuildGeometryInfoKHR _) ((Data.Vector.length (infos)) * 72) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPInfos `plusPtr` (72 * (i)) :: Ptr (AccelerationStructureBuildGeometryInfoKHR _))) (e) . ($ ())) (infos)
+  pPpOffsetInfos <- ContT $ allocaBytesAligned @(Ptr AccelerationStructureBuildOffsetInfoKHR) ((Data.Vector.length (offsetInfos)) * 8) 8
+  Data.Vector.imapM_ (\i e -> do
+    ppOffsetInfos <- ContT $ withCStruct (e)
+    lift $ poke (pPpOffsetInfos `plusPtr` (8 * (i)) :: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) ppOffsetInfos) (offsetInfos)
+  lift $ vkCmdBuildAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) ((fromIntegral pInfosLength :: Word32)) (pPInfos) (pPpOffsetInfos)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBuildAccelerationStructureIndirectKHR
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Buffer -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Buffer -> DeviceSize -> Word32 -> IO ()
+
+-- | vkCmdBuildAccelerationStructureIndirectKHR - Build an acceleration
+-- structure with some parameters provided on the device
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pInfo@ is a pointer to a
+--     'AccelerationStructureBuildGeometryInfoKHR' structure defining the
+--     geometry used to build the acceleration structure.
+--
+-- -   @indirectBuffer@ is the 'Vulkan.Core10.Handles.Buffer' containing
+--     @pInfo->geometryCount@ 'AccelerationStructureBuildOffsetInfoKHR'
+--     structures defining dynamic offsets to the addresses where geometry
+--     data is stored, as defined by @pInfo@.
+--
+-- -   @indirectOffset@ is the byte offset into @indirectBuffer@ where
+--     offset parameters begin.
+--
+-- -   @stride@ is the byte stride between successive sets of offset
+--     parameters.
+--
+-- == Valid Usage
+--
+-- -   All 'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR'
+--     referenced by this command /must/ contain valid device addresses for
+--     a buffer bound to device memory. If the buffer is non-sparse then it
+--     /must/ be bound completely and contiguously to a single
+--     VkDeviceMemory object
+--
+-- -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects
+--     referenced by this command /must/ be bound to device memory
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-indirectasbuild ::rayTracingIndirectAccelerationStructureBuild>
+--     feature /must/ be enabled
+--
+-- -   The
+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+--     structure /must/ not be included in the @pNext@ chain of any of the
+--     provided 'AccelerationStructureBuildGeometryInfoKHR' structures
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'AccelerationStructureBuildGeometryInfoKHR' structure
+--
+-- -   @indirectBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Both of @commandBuffer@, and @indirectBuffer@ /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'AccelerationStructureBuildGeometryInfoKHR',
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdBuildAccelerationStructureIndirectKHR :: forall a io . (Extendss AccelerationStructureBuildGeometryInfoKHR a, PokeChain a, MonadIO io) => CommandBuffer -> AccelerationStructureBuildGeometryInfoKHR a -> ("indirectBuffer" ::: Buffer) -> ("indirectOffset" ::: DeviceSize) -> ("indirectStride" ::: Word32) -> io ()
+cmdBuildAccelerationStructureIndirectKHR commandBuffer info indirectBuffer indirectOffset indirectStride = liftIO . evalContT $ do
+  let vkCmdBuildAccelerationStructureIndirectKHRPtr = pVkCmdBuildAccelerationStructureIndirectKHR (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBuildAccelerationStructureIndirectKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBuildAccelerationStructureIndirectKHR is null" Nothing Nothing
+  let vkCmdBuildAccelerationStructureIndirectKHR' = mkVkCmdBuildAccelerationStructureIndirectKHR vkCmdBuildAccelerationStructureIndirectKHRPtr
+  pInfo <- ContT $ withCStruct (info)
+  lift $ vkCmdBuildAccelerationStructureIndirectKHR' (commandBufferHandle (commandBuffer)) pInfo (indirectBuffer) (indirectOffset) (indirectStride)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkBuildAccelerationStructureKHR
+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (AccelerationStructureBuildGeometryInfoKHR a) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO Result
+
+-- | vkBuildAccelerationStructureKHR - Build an acceleration structure on the
+-- host
+--
+-- = Parameters
+--
+-- This command fulfills the same task as
+-- 'cmdBuildAccelerationStructureKHR' but executed by the host.
+--
+-- = Description
+--
+-- -   @device@ is the 'Vulkan.Core10.Handles.Device' for which the
+--     acceleration structures are being built.
+--
+-- -   @infoCount@ is the number of acceleration structures to build. It
+--     specifies the number of the @pInfos@ structures and @ppOffsetInfos@
+--     pointers that /must/ be provided.
+--
+-- -   @pInfos@ is a pointer to an array of @infoCount@
+--     'AccelerationStructureBuildGeometryInfoKHR' structures defining the
+--     geometry used to build each acceleration structure.
+--
+-- -   @ppOffsetInfos@ is an array of @infoCount@ pointers to arrays of
+--     'AccelerationStructureBuildOffsetInfoKHR' structures. Each
+--     @ppOffsetInfos@[i] is an array of @pInfos@[i].@geometryCount@
+--     'AccelerationStructureBuildOffsetInfoKHR' structures defining
+--     dynamic offsets to the addresses where geometry data is stored, as
+--     defined by @pInfos@[i].
+--
+-- The 'buildAccelerationStructureKHR' command provides the ability to
+-- initiate multiple acceleration structures builds, however there is no
+-- ordering or synchronization implied between any of the individual
+-- acceleration structure builds.
+--
+-- Note
+--
+-- This means that an application /cannot/ build a top-level acceleration
+-- structure in the same 'buildAccelerationStructureKHR' call as the
+-- associated bottom-level or instance acceleration structures are being
+-- built. There also /cannot/ be any memory aliasing between any
+-- acceleration structure memories or scratch memories being used by any of
+-- the builds.
+--
+-- If the
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+-- structure is included in the @pNext@ chain of any
+-- 'AccelerationStructureBuildGeometryInfoKHR' structure, the operation of
+-- this command is /deferred/, as defined in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>
+-- chapter.
+--
+-- == Valid Usage
+--
+-- -   Each element of @ppOffsetInfos@[i] /must/ be a valid pointer to an
+--     array of @pInfos@[i].@geometryCount@
+--     'AccelerationStructureBuildOffsetInfoKHR' structures
+--
+-- -   Each @pInfos@[i].@srcAccelerationStructure@ /must/ not refer to the
+--     same acceleration structure as any
+--     @pInfos@[i].@dstAccelerationStructure@ that is provided to the same
+--     build command unless it is identical for an update
+--
+-- -   For each @pInfos@[i], @dstAccelerationStructure@ /must/ have been
+--     created with compatible 'AccelerationStructureCreateInfoKHR' where
+--     'AccelerationStructureCreateInfoKHR'::@type@ and
+--     'AccelerationStructureCreateInfoKHR'::@flags@ are identical to
+--     'AccelerationStructureBuildGeometryInfoKHR'::@type@ and
+--     'AccelerationStructureBuildGeometryInfoKHR'::@flags@ respectively,
+--     'AccelerationStructureBuildGeometryInfoKHR'::@geometryCount@ for
+--     @dstAccelerationStructure@ are greater than or equal to the build
+--     size, and each geometry in
+--     'AccelerationStructureBuildGeometryInfoKHR'::@ppGeometries@ for
+--     @dstAccelerationStructure@ has greater than or equal to the number
+--     of vertices, indices, and AABBs,
+--     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@ is
+--     both 0 or both non-zero, and all other parameters are the same
+--
+-- -   For each @pInfos@[i], if @update@ is 'Vulkan.Core10.BaseType.TRUE',
+--     then objects that were previously active for that acceleration
+--     structure /must/ not be made inactive as per
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>
+--
+-- -   For each @pInfos@[i], if @update@ is 'Vulkan.Core10.BaseType.TRUE',
+--     then objects that were previously inactive for that acceleration
+--     structure /must/ not be made active as per
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>
+--
+-- -   Any acceleration structure instance in any top level build in this
+--     command /must/ not reference any bottom level acceleration structure
+--     built by this command
+--
+-- -   There /must/ not be any
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
+--     between the scratch memories that are provided in all the
+--     @pInfos@[i].@scratchData@ memories for the acceleration structure
+--     builds
+--
+-- -   There /must/ not be any
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
+--     between memory bound to any top level, bottom level, or instance
+--     acceleration structure accessed by this command
+--
+-- -   All 'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR'
+--     referenced by this command /must/ contain valid host addresses
+--
+-- -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects
+--     referenced by this command /must/ be bound to host-visible memory
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pInfos@ /must/ be a valid pointer to an array of @infoCount@ valid
+--     'AccelerationStructureBuildGeometryInfoKHR' structures
+--
+-- -   @ppOffsetInfos@ /must/ be a valid pointer to an array of @infoCount@
+--     'AccelerationStructureBuildOffsetInfoKHR' structures
+--
+-- -   @infoCount@ /must/ be greater than @0@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'AccelerationStructureBuildGeometryInfoKHR',
+-- 'AccelerationStructureBuildOffsetInfoKHR',
+-- 'Vulkan.Core10.Handles.Device'
+buildAccelerationStructureKHR :: forall io . MonadIO io => Device -> ("infos" ::: Vector (SomeStruct AccelerationStructureBuildGeometryInfoKHR)) -> ("offsetInfos" ::: Vector AccelerationStructureBuildOffsetInfoKHR) -> io (Result)
+buildAccelerationStructureKHR device infos offsetInfos = liftIO . evalContT $ do
+  let vkBuildAccelerationStructureKHRPtr = pVkBuildAccelerationStructureKHR (deviceCmds (device :: Device))
+  lift $ unless (vkBuildAccelerationStructureKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBuildAccelerationStructureKHR is null" Nothing Nothing
+  let vkBuildAccelerationStructureKHR' = mkVkBuildAccelerationStructureKHR vkBuildAccelerationStructureKHRPtr
+  let pInfosLength = Data.Vector.length $ (infos)
+  lift $ unless ((Data.Vector.length $ (offsetInfos)) == pInfosLength) $
+    throwIO $ IOError Nothing InvalidArgument "" "ppOffsetInfos and pInfos must have the same length" Nothing Nothing
+  pPInfos <- ContT $ allocaBytesAligned @(AccelerationStructureBuildGeometryInfoKHR _) ((Data.Vector.length (infos)) * 72) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPInfos `plusPtr` (72 * (i)) :: Ptr (AccelerationStructureBuildGeometryInfoKHR _))) (e) . ($ ())) (infos)
+  pPpOffsetInfos <- ContT $ allocaBytesAligned @(Ptr AccelerationStructureBuildOffsetInfoKHR) ((Data.Vector.length (offsetInfos)) * 8) 8
+  Data.Vector.imapM_ (\i e -> do
+    ppOffsetInfos <- ContT $ withCStruct (e)
+    lift $ poke (pPpOffsetInfos `plusPtr` (8 * (i)) :: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) ppOffsetInfos) (offsetInfos)
+  r <- lift $ vkBuildAccelerationStructureKHR' (deviceHandle (device)) ((fromIntegral pInfosLength :: Word32)) (pPInfos) (pPpOffsetInfos)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetAccelerationStructureDeviceAddressKHR
+  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureDeviceAddressInfoKHR -> IO DeviceAddress) -> Ptr Device_T -> Ptr AccelerationStructureDeviceAddressInfoKHR -> IO DeviceAddress
+
+-- | vkGetAccelerationStructureDeviceAddressKHR - Query an address of a
+-- acceleration structure
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that the accelerationStructure was
+--     created on.
+--
+-- -   @pInfo@ is a pointer to a
+--     'AccelerationStructureDeviceAddressInfoKHR' structure specifying the
+--     acceleration structure to retrieve an address for.
+--
+-- = Description
+--
+-- The 64-bit return value is an address of the acceleration structure,
+-- which can be used for device and shader operations that involve
+-- acceleration structures, such as ray traversal and acceleration
+-- structure building.
+--
+-- If the acceleration structure was created with a non-zero value of
+-- 'AccelerationStructureCreateInfoKHR'::@deviceAddress@ the return value
+-- will be the same address.
+--
+-- == Valid Usage
+--
+-- -   If @device@ was created with multiple physical devices, then the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'AccelerationStructureDeviceAddressInfoKHR' structure
+--
+-- = See Also
+--
+-- 'AccelerationStructureDeviceAddressInfoKHR',
+-- 'Vulkan.Core10.Handles.Device'
+getAccelerationStructureDeviceAddressKHR :: forall io . MonadIO io => Device -> AccelerationStructureDeviceAddressInfoKHR -> io (DeviceAddress)
+getAccelerationStructureDeviceAddressKHR device info = liftIO . evalContT $ do
+  let vkGetAccelerationStructureDeviceAddressKHRPtr = pVkGetAccelerationStructureDeviceAddressKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetAccelerationStructureDeviceAddressKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetAccelerationStructureDeviceAddressKHR is null" Nothing Nothing
+  let vkGetAccelerationStructureDeviceAddressKHR' = mkVkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHRPtr
+  pInfo <- ContT $ withCStruct (info)
+  r <- lift $ vkGetAccelerationStructureDeviceAddressKHR' (deviceHandle (device)) pInfo
+  pure $ (r)
+
+
+-- | VkRayTracingShaderGroupCreateInfoKHR - Structure specifying shaders in a
+-- shader group
+--
+-- == Valid Usage
+--
+-- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then
+--     @generalShader@ /must/ be a valid index into
+--     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader
+--     of
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR',
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MISS_BIT_KHR',
+--     or
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CALLABLE_BIT_KHR'
+--
+-- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then
+--     @closestHitShader@, @anyHitShader@, and @intersectionShader@ /must/
+--     be 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'
+--
+-- -   If @type@ is
+--     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' then
+--     @intersectionShader@ /must/ be a valid index into
+--     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader
+--     of
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_INTERSECTION_BIT_KHR'
+--
+-- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR'
+--     then @intersectionShader@ /must/ be
+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'
+--
+-- -   @closestHitShader@ /must/ be either
+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' or a valid index into
+--     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader
+--     of
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CLOSEST_HIT_BIT_KHR'
+--
+-- -   @anyHitShader@ /must/ be either
+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' or a valid index into
+--     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader
+--     of
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ANY_HIT_BIT_KHR'
+--
+-- -   If
+--     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplayMixed@
+--     is 'Vulkan.Core10.BaseType.FALSE' then
+--     @pShaderGroupCaptureReplayHandle@ /must/ not be provided if it has
+--     not been provided on a previous call to ray tracing pipeline
+--     creation
+--
+-- -   If
+--     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplayMixed@
+--     is 'Vulkan.Core10.BaseType.FALSE' then the caller /must/ guarantee
+--     that no ray tracing pipeline creation commands with
+--     @pShaderGroupCaptureReplayHandle@ provided execute simultaneously
+--     with ray tracing pipeline creation commands without
+--     @pShaderGroupCaptureReplayHandle@ provided
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @type@ /must/ be a valid 'RayTracingShaderGroupTypeKHR' value
+--
+-- = See Also
+--
+-- 'RayTracingPipelineCreateInfoKHR', 'RayTracingShaderGroupTypeKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data RayTracingShaderGroupCreateInfoKHR = RayTracingShaderGroupCreateInfoKHR
+  { -- | @type@ is the type of hit group specified in this structure.
+    type' :: RayTracingShaderGroupTypeKHR
+  , -- | @generalShader@ is the index of the ray generation, miss, or callable
+    -- shader from 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if
+    -- the shader group has @type@ of
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR', and
+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.
+    generalShader :: Word32
+  , -- | @closestHitShader@ is the optional index of the closest hit shader from
+    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader
+    -- group has @type@ of
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and
+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.
+    closestHitShader :: Word32
+  , -- | @anyHitShader@ is the optional index of the any-hit shader from
+    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader
+    -- group has @type@ of
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and
+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.
+    anyHitShader :: Word32
+  , -- | @intersectionShader@ is the index of the intersection shader from
+    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader
+    -- group has @type@ of
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and
+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.
+    intersectionShader :: Word32
+  , -- | @pShaderGroupCaptureReplayHandle@ is an optional pointer to replay
+    -- information for this shader group. Ignored if
+    -- 'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@
+    -- is 'Vulkan.Core10.BaseType.FALSE'.
+    shaderGroupCaptureReplayHandle :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show RayTracingShaderGroupCreateInfoKHR
+
+instance ToCStruct RayTracingShaderGroupCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RayTracingShaderGroupCreateInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (type')
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (generalShader)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (closestHitShader)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (anyHitShader)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (intersectionShader)
+    poke ((p `plusPtr` 40 :: Ptr (Ptr ()))) (shaderGroupCaptureReplayHandle)
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct RayTracingShaderGroupCreateInfoKHR where
+  peekCStruct p = do
+    type' <- peek @RayTracingShaderGroupTypeKHR ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR))
+    generalShader <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    closestHitShader <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    anyHitShader <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    intersectionShader <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pShaderGroupCaptureReplayHandle <- peek @(Ptr ()) ((p `plusPtr` 40 :: Ptr (Ptr ())))
+    pure $ RayTracingShaderGroupCreateInfoKHR
+             type' generalShader closestHitShader anyHitShader intersectionShader pShaderGroupCaptureReplayHandle
+
+instance Storable RayTracingShaderGroupCreateInfoKHR where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero RayTracingShaderGroupCreateInfoKHR where
+  zero = RayTracingShaderGroupCreateInfoKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkRayTracingPipelineCreateInfoKHR - Structure specifying parameters of a
+-- newly created ray tracing pipeline
+--
+-- = Description
+--
+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
+-- described in more detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
+--
+-- When
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+-- is specified, this pipeline defines a /pipeline library/ which /cannot/
+-- be bound as a ray tracing pipeline directly. Instead, pipeline libraries
+-- define common shaders and shader groups which /can/ be included in
+-- future pipeline creation.
+--
+-- If pipeline libraries are included in @libraries@, shaders defined in
+-- those libraries are treated as if they were defined as additional
+-- entries in @pStages@, appended in the order they appear in the
+-- @pLibraries@ array and in the @pStages@ array when those libraries were
+-- defined.
+--
+-- When referencing shader groups in order to obtain a shader group handle,
+-- groups defined in those libraries are treated as if they were defined as
+-- additional entries in @pGroups@, appended in the order they appear in
+-- the @pLibraries@ array and in the @pGroups@ array when those libraries
+-- were defined. The shaders these groups reference are set when the
+-- pipeline library is created, referencing those specified in the pipeline
+-- library, not in the pipeline that includes it.
+--
+-- If the
+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+-- structure is included in the @pNext@ chain of
+-- 'RayTracingPipelineCreateInfoKHR', the operation of this pipeline
+-- creation is /deferred/, as defined in the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>
+-- chapter.
+--
+-- == Valid Usage
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is @-1@, @basePipelineHandle@ /must/
+--     be a valid handle to a ray tracing 'Vulkan.Core10.Handles.Pipeline'
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be a valid index into the calling command’s @pCreateInfos@ parameter
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is not @-1@, @basePipelineHandle@
+--     /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be @-1@
+--
+-- -   The @stage@ member of at least one element of @pStages@ /must/ be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR'
+--
+-- -   The shader code for the entry points identified by @pStages@, and
+--     the rest of the state identified by this structure /must/ adhere to
+--     the pipeline linking rules described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>
+--     chapter
+--
+-- -   @layout@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
+--     with all shaders specified in @pStages@
+--
+-- -   The number of resources in @layout@ accessible to each shader stage
+--     that is used by the pipeline /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
+--
+-- -   @maxRecursionDepth@ /must/ be less than or equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxRecursionDepth@
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR',
+--     @pLibraryInterface@ /must/ not be @NULL@
+--
+-- -   If the @libraryCount@ member of @libraries@ is greater than @0@,
+--     @pLibraryInterface@ /must/ not be @NULL@
+--
+-- -   Each element of the @pLibraries@ member of @libraries@ /must/ have
+--     been created with the value of @maxRecursionDepth@ equal to that in
+--     this pipeline
+--
+-- -   Each element of the @pLibraries@ member of @libraries@ /must/ have
+--     been created with a @layout@ that is compatible with the @layout@ in
+--     this pipeline
+--
+-- -   Each element of the @pLibraries@ member of @libraries@ /must/ have
+--     been created with values of the @maxPayloadSize@,
+--     @maxAttributeSize@, and @maxCallableSize@ members of
+--     @pLibraryInterface@ equal to those in this pipeline
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',
+--     for any element of @pGroups@ with a @type@ of
+--     'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or
+--     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', the
+--     @anyHitShader@ of that element /must/ not be
+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'
+--
+-- -   If @flags@ includes
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',
+--     for any element of @pGroups@ with a @type@ of
+--     'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or
+--     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', the
+--     @closestHitShader@ of that element /must/ not be
+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPrimitiveCulling rayTracingPrimitiveCulling>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPrimitiveCulling rayTracingPrimitiveCulling>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
+--
+-- -   If @libraries.libraryCount@ is zero, then @stageCount@ /must/ not be
+--     zero
+--
+-- -   If @libraries.libraryCount@ is zero, then @groupCount@ /must/ not be
+--     zero
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+--     or
+--     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+--     values
+--
+-- -   If @stageCount@ is not @0@, @pStages@ /must/ be a valid pointer to
+--     an array of @stageCount@ valid
+--     'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures
+--
+-- -   If @groupCount@ is not @0@, @pGroups@ /must/ be a valid pointer to
+--     an array of @groupCount@ valid 'RayTracingShaderGroupCreateInfoKHR'
+--     structures
+--
+-- -   @libraries@ /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
+--     structure
+--
+-- -   If @pLibraryInterface@ is not @NULL@, @pLibraryInterface@ /must/ be
+--     a valid pointer to a valid
+--     'RayTracingPipelineInterfaceCreateInfoKHR' structure
+--
+-- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'
+--     handle
+--
+-- -   Both of @basePipelineHandle@, and @layout@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
+-- 'Vulkan.Core10.Handles.PipelineLayout',
+-- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',
+-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
+-- 'RayTracingPipelineInterfaceCreateInfoKHR',
+-- 'RayTracingShaderGroupCreateInfoKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createRayTracingPipelinesKHR'
+data RayTracingPipelineCreateInfoKHR (es :: [Type]) = RayTracingPipelineCreateInfoKHR
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+    -- specifying how the pipeline will be generated.
+    flags :: PipelineCreateFlags
+  , -- | @pStages@ is a pointer to an array of @stageCount@
+    -- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures
+    -- describing the set of the shader stages to be included in the ray
+    -- tracing pipeline.
+    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
+  , -- | @pGroups@ is a pointer to an array of @groupCount@
+    -- 'RayTracingShaderGroupCreateInfoKHR' structures describing the set of
+    -- the shader stages to be included in each shader group in the ray tracing
+    -- pipeline.
+    groups :: Vector RayTracingShaderGroupCreateInfoKHR
+  , -- | @maxRecursionDepth@ is the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth maximum recursion depth>
+    -- of shaders executed by this pipeline.
+    maxRecursionDepth :: Word32
+  , -- | @libraries@ is a
+    -- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
+    -- structure defining pipeline libraries to include.
+    libraries :: PipelineLibraryCreateInfoKHR
+  , -- | @pLibraryInterface@ is a pointer to a
+    -- 'RayTracingPipelineInterfaceCreateInfoKHR' structure defining additional
+    -- information when using pipeline libraries.
+    libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR
+  , -- | @layout@ is the description of binding locations used by both the
+    -- pipeline and descriptor sets used with the pipeline.
+    layout :: PipelineLayout
+  , -- | @basePipelineHandle@ is a pipeline to derive from.
+    basePipelineHandle :: Pipeline
+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
+    -- as a pipeline to derive from.
+    basePipelineIndex :: Int32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (RayTracingPipelineCreateInfoKHR es)
+
+instance Extensible RayTracingPipelineCreateInfoKHR where
+  extensibleType = STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR
+  setNext x next = x{next = next}
+  getNext RayTracingPipelineCreateInfoKHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RayTracingPipelineCreateInfoKHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f
+    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss RayTracingPipelineCreateInfoKHR es, PokeChain es) => ToCStruct (RayTracingPipelineCreateInfoKHR es) where
+  withCStruct x f = allocaBytesAligned 120 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RayTracingPipelineCreateInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))
+    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (groups)) :: Word32))
+    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoKHR ((Data.Vector.length (groups)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (e) . ($ ())) (groups)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (pPGroups')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (maxRecursionDepth)
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR)) (libraries) . ($ ())
+    pLibraryInterface'' <- case (libraryInterface) of
+      Nothing -> pure nullPtr
+      Just j -> ContT $ withCStruct (j)
+    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR))) pLibraryInterface''
+    lift $ poke ((p `plusPtr` 96 :: Ptr PipelineLayout)) (layout)
+    lift $ poke ((p `plusPtr` 104 :: Ptr Pipeline)) (basePipelineHandle)
+    lift $ poke ((p `plusPtr` 112 :: Ptr Int32)) (basePipelineIndex)
+    lift $ f
+  cStructSize = 120
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (mempty)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
+    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoKHR ((Data.Vector.length (mempty)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (pPGroups')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 96 :: Ptr PipelineLayout)) (zero)
+    lift $ poke ((p `plusPtr` 112 :: Ptr Int32)) (zero)
+    lift $ f
+
+instance (Extendss RayTracingPipelineCreateInfoKHR es, PeekChain es) => FromCStruct (RayTracingPipelineCreateInfoKHR es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
+    stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo a))))
+    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
+    groupCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pGroups <- peek @(Ptr RayTracingShaderGroupCreateInfoKHR) ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR)))
+    pGroups' <- generateM (fromIntegral groupCount) (\i -> peekCStruct @RayTracingShaderGroupCreateInfoKHR ((pGroups `advancePtrBytes` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR)))
+    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    libraries <- peekCStruct @PipelineLibraryCreateInfoKHR ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR))
+    pLibraryInterface <- peek @(Ptr RayTracingPipelineInterfaceCreateInfoKHR) ((p `plusPtr` 88 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR)))
+    pLibraryInterface' <- maybePeek (\j -> peekCStruct @RayTracingPipelineInterfaceCreateInfoKHR (j)) pLibraryInterface
+    layout <- peek @PipelineLayout ((p `plusPtr` 96 :: Ptr PipelineLayout))
+    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 104 :: Ptr Pipeline))
+    basePipelineIndex <- peek @Int32 ((p `plusPtr` 112 :: Ptr Int32))
+    pure $ RayTracingPipelineCreateInfoKHR
+             next flags pStages' pGroups' maxRecursionDepth libraries pLibraryInterface' layout basePipelineHandle basePipelineIndex
+
+instance es ~ '[] => Zero (RayTracingPipelineCreateInfoKHR es) where
+  zero = RayTracingPipelineCreateInfoKHR
+           ()
+           zero
+           mempty
+           mempty
+           zero
+           zero
+           Nothing
+           zero
+           zero
+           zero
+
+
+-- | VkBindAccelerationStructureMemoryInfoKHR - Structure specifying
+-- acceleration structure memory binding
+--
+-- == Valid Usage
+--
+-- -   @accelerationStructure@ /must/ not already be backed by a memory
+--     object
+--
+-- -   @memoryOffset@ /must/ be less than the size of @memory@
+--
+-- -   @memory@ /must/ have been allocated using one of the memory types
+--     allowed in the @memoryTypeBits@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'getAccelerationStructureMemoryRequirementsKHR' with
+--     @accelerationStructure@ and @type@ of
+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR'
+--
+-- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@
+--     member of the 'Vulkan.Core10.MemoryManagement.MemoryRequirements'
+--     structure returned from a call to
+--     'getAccelerationStructureMemoryRequirementsKHR' with
+--     @accelerationStructure@ and @type@ of
+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR'
+--
+-- -   The @size@ member of the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'getAccelerationStructureMemoryRequirementsKHR' with
+--     @accelerationStructure@ and @type@ of
+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR' /must/
+--     be less than or equal to the size of @memory@ minus @memoryOffset@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @accelerationStructure@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
+--     handle
+--
+-- -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid
+--     pointer to an array of @deviceIndexCount@ @uint32_t@ values
+--
+-- -   Both of @accelerationStructure@, and @memory@ /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'bindAccelerationStructureMemoryKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.bindAccelerationStructureMemoryNV'
+data BindAccelerationStructureMemoryInfoKHR = BindAccelerationStructureMemoryInfoKHR
+  { -- | @accelerationStructure@ is the acceleration structure to be attached to
+    -- memory.
+    accelerationStructure :: AccelerationStructureKHR
+  , -- | @memory@ is a 'Vulkan.Core10.Handles.DeviceMemory' object describing the
+    -- device memory to attach.
+    memory :: DeviceMemory
+  , -- | @memoryOffset@ is the start offset of the region of memory that is to be
+    -- bound to the acceleration structure. The number of bytes returned in the
+    -- 'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ member in
+    -- @memory@, starting from @memoryOffset@ bytes, will be bound to the
+    -- specified acceleration structure.
+    memoryOffset :: DeviceSize
+  , -- | @pDeviceIndices@ is a pointer to an array of device indices.
+    deviceIndices :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show BindAccelerationStructureMemoryInfoKHR
+
+instance ToCStruct BindAccelerationStructureMemoryInfoKHR where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindAccelerationStructureMemoryInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (accelerationStructure)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (memory)
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (memoryOffset)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceIndices)) :: Word32))
+    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (deviceIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (deviceIndices)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPDeviceIndices')
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPDeviceIndices')
+    lift $ f
+
+instance FromCStruct BindAccelerationStructureMemoryInfoKHR where
+  peekCStruct p = do
+    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))
+    memory <- peek @DeviceMemory ((p `plusPtr` 24 :: Ptr DeviceMemory))
+    memoryOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
+    deviceIndexCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    pDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 48 :: Ptr (Ptr Word32)))
+    pDeviceIndices' <- generateM (fromIntegral deviceIndexCount) (\i -> peek @Word32 ((pDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ BindAccelerationStructureMemoryInfoKHR
+             accelerationStructure memory memoryOffset pDeviceIndices'
+
+instance Zero BindAccelerationStructureMemoryInfoKHR where
+  zero = BindAccelerationStructureMemoryInfoKHR
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkWriteDescriptorSetAccelerationStructureKHR - Structure specifying
+-- acceleration structure descriptor info
+--
+-- == Valid Usage
+--
+-- -   @accelerationStructureCount@ /must/ be equal to @descriptorCount@ in
+--     the extended structure
+--
+-- -   Each acceleration structure in @pAccelerationStructures@ /must/ have
+--     been created with 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR'
+--
+-- -   @pAccelerationStructures@ /must/ be a valid pointer to an array of
+--     @accelerationStructureCount@ valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles
+--
+-- -   @accelerationStructureCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data WriteDescriptorSetAccelerationStructureKHR = WriteDescriptorSetAccelerationStructureKHR
+  { -- | @pAccelerationStructures@ are the acceleration structures to update.
+    accelerationStructures :: Vector AccelerationStructureKHR }
+  deriving (Typeable)
+deriving instance Show WriteDescriptorSetAccelerationStructureKHR
+
+instance ToCStruct WriteDescriptorSetAccelerationStructureKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p WriteDescriptorSetAccelerationStructureKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32))
+    pPAccelerationStructures' <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures' `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR))) (pPAccelerationStructures')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPAccelerationStructures' <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures' `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR))) (pPAccelerationStructures')
+    lift $ f
+
+instance FromCStruct WriteDescriptorSetAccelerationStructureKHR where
+  peekCStruct p = do
+    accelerationStructureCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pAccelerationStructures <- peek @(Ptr AccelerationStructureKHR) ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR)))
+    pAccelerationStructures' <- generateM (fromIntegral accelerationStructureCount) (\i -> peek @AccelerationStructureKHR ((pAccelerationStructures `advancePtrBytes` (8 * (i)) :: Ptr AccelerationStructureKHR)))
+    pure $ WriteDescriptorSetAccelerationStructureKHR
+             pAccelerationStructures'
+
+instance Zero WriteDescriptorSetAccelerationStructureKHR where
+  zero = WriteDescriptorSetAccelerationStructureKHR
+           mempty
+
+
+-- | VkAccelerationStructureMemoryRequirementsInfoKHR - Structure specifying
+-- acceleration to query for memory requirements
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'AccelerationStructureBuildTypeKHR',
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'AccelerationStructureMemoryRequirementsTypeKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getAccelerationStructureMemoryRequirementsKHR'
+data AccelerationStructureMemoryRequirementsInfoKHR = AccelerationStructureMemoryRequirementsInfoKHR
+  { -- | @type@ /must/ be a valid
+    -- 'AccelerationStructureMemoryRequirementsTypeKHR' value
+    type' :: AccelerationStructureMemoryRequirementsTypeKHR
+  , -- | @buildType@ /must/ be a valid 'AccelerationStructureBuildTypeKHR' value
+    buildType :: AccelerationStructureBuildTypeKHR
+  , -- | @accelerationStructure@ /must/ be a valid
+    -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+    accelerationStructure :: AccelerationStructureKHR
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureMemoryRequirementsInfoKHR
+
+instance ToCStruct AccelerationStructureMemoryRequirementsInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureMemoryRequirementsInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR)) (type')
+    poke ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR)) (buildType)
+    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (accelerationStructure)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (zero)
+    f
+
+instance FromCStruct AccelerationStructureMemoryRequirementsInfoKHR where
+  peekCStruct p = do
+    type' <- peek @AccelerationStructureMemoryRequirementsTypeKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR))
+    buildType <- peek @AccelerationStructureBuildTypeKHR ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR))
+    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR))
+    pure $ AccelerationStructureMemoryRequirementsInfoKHR
+             type' buildType accelerationStructure
+
+instance Storable AccelerationStructureMemoryRequirementsInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AccelerationStructureMemoryRequirementsInfoKHR where
+  zero = AccelerationStructureMemoryRequirementsInfoKHR
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceRayTracingFeaturesKHR - Structure describing the ray
+-- tracing features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceRayTracingFeaturesKHR' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- -   @rayTracing@ indicates whether the implementation supports ray
+--     tracing functionality. See
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing Ray Tracing>.
+--
+-- -   @rayTracingShaderGroupHandleCaptureReplay@ indicates whether the
+--     implementation supports saving and reusing shader group handles,
+--     e.g. for trace capture and replay.
+--
+-- -   @rayTracingShaderGroupHandleCaptureReplayMixed@ indicates whether
+--     the implementation supports reuse of shader group handles being
+--     arbitrarily mixed with creation of non-reused shader group handles.
+--     If this is 'Vulkan.Core10.BaseType.FALSE', all reused shader group
+--     handles /must/ be specified before any non-reused handles /may/ be
+--     created.
+--
+-- -   @rayTracingAccelerationStructureCaptureReplay@ indicates whether the
+--     implementation supports saving and reusing acceleration structure
+--     device addresses, e.g. for trace capture and replay.
+--
+-- -   @rayTracingIndirectTraceRays@ indicates whether the implementation
+--     supports indirect trace ray commands, e.g.
+--     'cmdTraceRaysIndirectKHR'.
+--
+-- -   @rayTracingIndirectAccelerationStructureBuild@ indicates whether the
+--     implementation supports indirect acceleration structure build
+--     commands, e.g. 'cmdBuildAccelerationStructureIndirectKHR'.
+--
+-- -   @rayTracingHostAccelerationStructureCommands@ indicates whether the
+--     implementation supports host side acceleration structure commands,
+--     e.g. 'buildAccelerationStructureKHR',
+--     'copyAccelerationStructureKHR',
+--     'copyAccelerationStructureToMemoryKHR',
+--     'copyMemoryToAccelerationStructureKHR',
+--     'writeAccelerationStructuresPropertiesKHR'.
+--
+-- -   @rayQuery@ indicates whether the implementation supports ray query
+--     (@OpRayQueryProceedKHR@) functionality.
+--
+-- -   @rayTracingPrimitiveCulling@ indicates whether the implementation
+--     supports
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-traversal-culling-primitive primitive culling during ray traversal>.
+--
+-- If the 'PhysicalDeviceRayTracingFeaturesKHR' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceRayTracingFeaturesKHR' /can/ also be used in the @pNext@
+-- chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the features.
+--
+-- == Valid Usage
+--
+-- -   If @rayTracingShaderGroupHandleCaptureReplayMixed@ is
+--     'Vulkan.Core10.BaseType.TRUE',
+--     @rayTracingShaderGroupHandleCaptureReplay@ /must/ also be
+--     'Vulkan.Core10.BaseType.TRUE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceRayTracingFeaturesKHR = PhysicalDeviceRayTracingFeaturesKHR
+  { -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracing"
+    rayTracing :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingShaderGroupHandleCaptureReplay"
+    rayTracingShaderGroupHandleCaptureReplay :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingShaderGroupHandleCaptureReplayMixed"
+    rayTracingShaderGroupHandleCaptureReplayMixed :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingAccelerationStructureCaptureReplay"
+    rayTracingAccelerationStructureCaptureReplay :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingIndirectTraceRays"
+    rayTracingIndirectTraceRays :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingIndirectAccelerationStructureBuild"
+    rayTracingIndirectAccelerationStructureBuild :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingHostAccelerationStructureCommands"
+    rayTracingHostAccelerationStructureCommands :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayQuery"
+    rayQuery :: Bool
+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingPrimitiveCulling"
+    rayTracingPrimitiveCulling :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceRayTracingFeaturesKHR
+
+instance ToCStruct PhysicalDeviceRayTracingFeaturesKHR where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceRayTracingFeaturesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (rayTracing))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (rayTracingShaderGroupHandleCaptureReplay))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (rayTracingShaderGroupHandleCaptureReplayMixed))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (rayTracingAccelerationStructureCaptureReplay))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (rayTracingIndirectTraceRays))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (rayTracingIndirectAccelerationStructureBuild))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (rayTracingHostAccelerationStructureCommands))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (rayQuery))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (rayTracingPrimitiveCulling))
+    f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceRayTracingFeaturesKHR where
+  peekCStruct p = do
+    rayTracing <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    rayTracingShaderGroupHandleCaptureReplay <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    rayTracingShaderGroupHandleCaptureReplayMixed <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    rayTracingAccelerationStructureCaptureReplay <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
+    rayTracingIndirectTraceRays <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    rayTracingIndirectAccelerationStructureBuild <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    rayTracingHostAccelerationStructureCommands <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))
+    rayQuery <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))
+    rayTracingPrimitiveCulling <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))
+    pure $ PhysicalDeviceRayTracingFeaturesKHR
+             (bool32ToBool rayTracing) (bool32ToBool rayTracingShaderGroupHandleCaptureReplay) (bool32ToBool rayTracingShaderGroupHandleCaptureReplayMixed) (bool32ToBool rayTracingAccelerationStructureCaptureReplay) (bool32ToBool rayTracingIndirectTraceRays) (bool32ToBool rayTracingIndirectAccelerationStructureBuild) (bool32ToBool rayTracingHostAccelerationStructureCommands) (bool32ToBool rayQuery) (bool32ToBool rayTracingPrimitiveCulling)
+
+instance Storable PhysicalDeviceRayTracingFeaturesKHR where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceRayTracingFeaturesKHR where
+  zero = PhysicalDeviceRayTracingFeaturesKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceRayTracingPropertiesKHR - Properties of the physical
+-- device for ray tracing
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceRayTracingPropertiesKHR' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- Limits specified by this structure /must/ match those specified with the
+-- same name in
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceRayTracingPropertiesKHR = PhysicalDeviceRayTracingPropertiesKHR
+  { -- | @shaderGroupHandleSize@ size in bytes of the shader header.
+    shaderGroupHandleSize :: Word32
+  , -- | @maxRecursionDepth@ is the maximum number of levels of recursion allowed
+    -- in a trace command.
+    maxRecursionDepth :: Word32
+  , -- | @maxShaderGroupStride@ is the maximum stride in bytes allowed between
+    -- shader groups in the SBT.
+    maxShaderGroupStride :: Word32
+  , -- | @shaderGroupBaseAlignment@ is the required alignment in bytes for the
+    -- base of the SBTs.
+    shaderGroupBaseAlignment :: Word32
+  , -- | @maxGeometryCount@ is the maximum number of geometries in the bottom
+    -- level acceleration structure.
+    maxGeometryCount :: Word64
+  , -- | @maxInstanceCount@ is the maximum number of instances in the top level
+    -- acceleration structure.
+    maxInstanceCount :: Word64
+  , -- | @maxPrimitiveCount@ is the maximum number of triangles or AABBs in all
+    -- geometries in the bottom level acceleration structure.
+    maxPrimitiveCount :: Word64
+  , -- | @maxDescriptorSetAccelerationStructures@ is the maximum number of
+    -- acceleration structure descriptors that are allowed in a descriptor set.
+    maxDescriptorSetAccelerationStructures :: Word32
+  , -- | @shaderGroupHandleCaptureReplaySize@ is the number of bytes for the
+    -- information required to do capture and replay for shader group handles.
+    shaderGroupHandleCaptureReplaySize :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceRayTracingPropertiesKHR
+
+instance ToCStruct PhysicalDeviceRayTracingPropertiesKHR where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceRayTracingPropertiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (shaderGroupHandleSize)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxRecursionDepth)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxShaderGroupStride)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (shaderGroupBaseAlignment)
+    poke ((p `plusPtr` 32 :: Ptr Word64)) (maxGeometryCount)
+    poke ((p `plusPtr` 40 :: Ptr Word64)) (maxInstanceCount)
+    poke ((p `plusPtr` 48 :: Ptr Word64)) (maxPrimitiveCount)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (maxDescriptorSetAccelerationStructures)
+    poke ((p `plusPtr` 60 :: Ptr Word32)) (shaderGroupHandleCaptureReplaySize)
+    f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 60 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceRayTracingPropertiesKHR where
+  peekCStruct p = do
+    shaderGroupHandleSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    maxShaderGroupStride <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    shaderGroupBaseAlignment <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    maxGeometryCount <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))
+    maxInstanceCount <- peek @Word64 ((p `plusPtr` 40 :: Ptr Word64))
+    maxPrimitiveCount <- peek @Word64 ((p `plusPtr` 48 :: Ptr Word64))
+    maxDescriptorSetAccelerationStructures <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    shaderGroupHandleCaptureReplaySize <- peek @Word32 ((p `plusPtr` 60 :: Ptr Word32))
+    pure $ PhysicalDeviceRayTracingPropertiesKHR
+             shaderGroupHandleSize maxRecursionDepth maxShaderGroupStride shaderGroupBaseAlignment maxGeometryCount maxInstanceCount maxPrimitiveCount maxDescriptorSetAccelerationStructures shaderGroupHandleCaptureReplaySize
+
+instance Storable PhysicalDeviceRayTracingPropertiesKHR where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceRayTracingPropertiesKHR where
+  zero = PhysicalDeviceRayTracingPropertiesKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkStridedBufferRegionKHR - Structure specifying a region of a VkBuffer
+-- with a stride
+--
+-- == Valid Usage
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @size@
+--     plus @offset@ /must/ be less than or equal to the size of @buffer@
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @stride@ /must/ be less than the size of @buffer@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'cmdTraceRaysIndirectKHR', 'cmdTraceRaysKHR'
+data StridedBufferRegionKHR = StridedBufferRegionKHR
+  { -- | @buffer@ is the buffer containing this region.
+    buffer :: Buffer
+  , -- | @offset@ is the byte offset in @buffer@ at which the region starts.
+    offset :: DeviceSize
+  , -- | @stride@ is the byte stride between consecutive elements.
+    stride :: DeviceSize
+  , -- | @size@ is the size in bytes of the region starting at @offset@.
+    size :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show StridedBufferRegionKHR
+
+instance ToCStruct StridedBufferRegionKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p StridedBufferRegionKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Buffer)) (buffer)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (offset)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (stride)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (size)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct StridedBufferRegionKHR where
+  peekCStruct p = do
+    buffer <- peek @Buffer ((p `plusPtr` 0 :: Ptr Buffer))
+    offset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
+    stride <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    size <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    pure $ StridedBufferRegionKHR
+             buffer offset stride size
+
+instance Storable StridedBufferRegionKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero StridedBufferRegionKHR where
+  zero = StridedBufferRegionKHR
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkTraceRaysIndirectCommandKHR - Structure specifying the parameters of
+-- an indirect trace ray command
+--
+-- = Description
+--
+-- The members of 'TraceRaysIndirectCommandKHR' have the same meaning as
+-- the similarly named parameters of 'cmdTraceRaysKHR'.
+--
+-- == Valid Usage
+--
+-- = See Also
+--
+-- No cross-references are available
+data TraceRaysIndirectCommandKHR = TraceRaysIndirectCommandKHR
+  { -- | @width@ /must/ be less than or equal to
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
+    width :: Word32
+  , -- | @height@ /must/ be less than or equal to
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
+    height :: Word32
+  , -- | @depth@ /must/ be less than or equal to
+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
+    depth :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show TraceRaysIndirectCommandKHR
+
+instance ToCStruct TraceRaysIndirectCommandKHR where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p TraceRaysIndirectCommandKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (width)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (height)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (depth)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct TraceRaysIndirectCommandKHR where
+  peekCStruct p = do
+    width <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    height <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    depth <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pure $ TraceRaysIndirectCommandKHR
+             width height depth
+
+instance Storable TraceRaysIndirectCommandKHR where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero TraceRaysIndirectCommandKHR where
+  zero = TraceRaysIndirectCommandKHR
+           zero
+           zero
+           zero
+
+
+-- | VkAccelerationStructureGeometryTrianglesDataKHR - Structure specifying a
+-- triangle geometry in a bottom-level acceleration structure
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
+--     value
+--
+-- -   @vertexData@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
+--
+-- -   @indexType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.IndexType.IndexType' value
+--
+-- -   If @indexData@ is not @0@, @indexData@ /must/ be a valid
+--     'DeviceOrHostAddressConstKHR' union
+--
+-- -   If @transformData@ is not @0@, @transformData@ /must/ be a valid
+--     'DeviceOrHostAddressConstKHR' union
+--
+-- = See Also
+--
+-- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.IndexType.IndexType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AccelerationStructureGeometryTrianglesDataKHR = AccelerationStructureGeometryTrianglesDataKHR
+  { -- | @vertexFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of each vertex
+    -- element.
+    vertexFormat :: Format
+  , -- | @vertexData@ is a device or host address to memory containing vertex
+    -- data for this geometry.
+    vertexData :: DeviceOrHostAddressConstKHR
+  , -- | @vertexStride@ is the stride in bytes between each vertex.
+    vertexStride :: DeviceSize
+  , -- | @indexType@ is the 'Vulkan.Core10.Enums.IndexType.IndexType' of each
+    -- index element.
+    indexType :: IndexType
+  , -- | @indexData@ is the device or host address to memory containing index
+    -- data for this geometry.
+    indexData :: DeviceOrHostAddressConstKHR
+  , -- | @transformData@ is a device or host address to memory containing an
+    -- optional reference to a 'TransformMatrixKHR' structure defining a
+    -- transformation that should be applied to vertices in this geometry.
+    transformData :: DeviceOrHostAddressConstKHR
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureGeometryTrianglesDataKHR
+
+instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureGeometryTrianglesDataKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (vertexFormat)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (vertexData) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (vertexStride)
+    lift $ poke ((p `plusPtr` 40 :: Ptr IndexType)) (indexType)
+    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr DeviceOrHostAddressConstKHR)) (indexData) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr DeviceOrHostAddressConstKHR)) (transformData) . ($ ())
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr IndexType)) (zero)
+    lift $ f
+
+instance Zero AccelerationStructureGeometryTrianglesDataKHR where
+  zero = AccelerationStructureGeometryTrianglesDataKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkAccelerationStructureGeometryAabbsDataKHR - Structure specifying
+-- axis-aligned bounding box geometry in a bottom-level acceleration
+-- structure
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AccelerationStructureGeometryAabbsDataKHR = AccelerationStructureGeometryAabbsDataKHR
+  { -- | @data@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
+    data' :: DeviceOrHostAddressConstKHR
+  , -- | @stride@ /must/ be a multiple of @8@
+    stride :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureGeometryAabbsDataKHR
+
+instance ToCStruct AccelerationStructureGeometryAabbsDataKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureGeometryAabbsDataKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (data') . ($ ())
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (stride)
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    lift $ f
+
+instance Zero AccelerationStructureGeometryAabbsDataKHR where
+  zero = AccelerationStructureGeometryAabbsDataKHR
+           zero
+           zero
+
+
+-- | VkAccelerationStructureGeometryInstancesDataKHR - Structure specifying a
+-- geometry consisting of instances of other acceleration structures
+--
+-- == Valid Usage
+--
+-- -   @data@ /must/ be aligned to @16@ bytes
+--
+-- -   If @arrayOfPointers@ is true, each pointer /must/ be aligned to @16@
+--     bytes
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @data@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
+--
+-- = See Also
+--
+-- 'AccelerationStructureGeometryDataKHR', 'Vulkan.Core10.BaseType.Bool32',
+-- 'DeviceOrHostAddressConstKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AccelerationStructureGeometryInstancesDataKHR = AccelerationStructureGeometryInstancesDataKHR
+  { -- | @arrayOfPointers@ specifies whether @data@ is used as an array of
+    -- addresses or just an array.
+    arrayOfPointers :: Bool
+  , -- | @data@ is either the address of an array of device or host addresses
+    -- referencing individual 'AccelerationStructureInstanceKHR' structures if
+    -- @arrayOfPointers@ is 'Vulkan.Core10.BaseType.TRUE', or the address of an
+    -- array of 'AccelerationStructureInstanceKHR' structures.
+    data' :: DeviceOrHostAddressConstKHR
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureGeometryInstancesDataKHR
+
+instance ToCStruct AccelerationStructureGeometryInstancesDataKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureGeometryInstancesDataKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (arrayOfPointers))
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (data') . ($ ())
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
+    lift $ f
+
+instance Zero AccelerationStructureGeometryInstancesDataKHR where
+  zero = AccelerationStructureGeometryInstancesDataKHR
+           zero
+           zero
+
+
+-- | VkAccelerationStructureGeometryKHR - Structure specifying geometries to
+-- be built into an acceleration structure
+--
+-- == Valid Usage
+--
+-- -   If @geometryType@ is 'GEOMETRY_TYPE_AABBS_KHR', the @aabbs@ member
+--     of @geometry@ /must/ be a valid
+--     'AccelerationStructureGeometryAabbsDataKHR' structure
+--
+-- -   If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', the @triangles@
+--     member of @geometry@ /must/ be a valid
+--     'AccelerationStructureGeometryTrianglesDataKHR' structure
+--
+-- -   If @geometryType@ is 'GEOMETRY_TYPE_INSTANCES_KHR', the @instances@
+--     member of @geometry@ /must/ be a valid
+--     'AccelerationStructureGeometryInstancesDataKHR' structure
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @geometryType@ /must/ be a valid 'GeometryTypeKHR' value
+--
+-- -   @geometry@ /must/ be a valid 'AccelerationStructureGeometryDataKHR'
+--     union
+--
+-- -   @flags@ /must/ be a valid combination of 'GeometryFlagBitsKHR'
+--     values
+--
+-- = See Also
+--
+-- 'AccelerationStructureBuildGeometryInfoKHR',
+-- 'AccelerationStructureGeometryDataKHR', 'GeometryFlagsKHR',
+-- 'GeometryTypeKHR', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AccelerationStructureGeometryKHR = AccelerationStructureGeometryKHR
+  { -- | @geometryType@ describes which type of geometry this
+    -- 'AccelerationStructureGeometryKHR' refers to.
+    geometryType :: GeometryTypeKHR
+  , -- | @geometry@ is a 'AccelerationStructureGeometryDataKHR' union describing
+    -- the geometry data for the relevant geometry type.
+    geometry :: AccelerationStructureGeometryDataKHR
+  , -- | @flags@ is a bitmask of 'GeometryFlagBitsKHR' values describing
+    -- additional properties of how the geometry should be built.
+    flags :: GeometryFlagsKHR
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureGeometryKHR
+
+instance ToCStruct AccelerationStructureGeometryKHR where
+  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureGeometryKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (geometryType)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureGeometryDataKHR)) (geometry) . ($ ())
+    lift $ poke ((p `plusPtr` 88 :: Ptr GeometryFlagsKHR)) (flags)
+    lift $ f
+  cStructSize = 96
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureGeometryDataKHR)) (zero) . ($ ())
+    lift $ f
+
+instance Zero AccelerationStructureGeometryKHR where
+  zero = AccelerationStructureGeometryKHR
+           zero
+           zero
+           zero
+
+
+-- | VkAccelerationStructureBuildGeometryInfoKHR - Structure specifying the
+-- geometry data used to build an acceleration structure
+--
+-- = Description
+--
+-- Note
+--
+-- Elements of @ppGeometries@ are accessed as follows, based on
+-- @geometryArrayOfPointers@:
+--
+-- > if (geometryArrayOfPointers) {
+-- >     use *(ppGeometries[i]);
+-- > } else {
+-- >     use (*ppGeometries)[i];
+-- > }
+--
+-- == Valid Usage
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.TRUE',
+--     @srcAccelerationStructure@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.TRUE',
+--     @srcAccelerationStructure@ /must/ have been built before with
+--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' set in
+--     'AccelerationStructureBuildGeometryInfoKHR'::@flags@
+--
+-- -   @scratchData@ /must/ have been created with
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_RAY_TRACING_BIT_KHR'
+--     usage flag
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.TRUE', the
+--     @srcAccelerationStructure@ and @dstAccelerationStructure@ objects
+--     /must/ either be the same object or not have any
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @type@ /must/ be a valid 'AccelerationStructureTypeKHR' value
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'BuildAccelerationStructureFlagBitsKHR' values
+--
+-- -   If @srcAccelerationStructure@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @srcAccelerationStructure@
+--     /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   @dstAccelerationStructure@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   @scratchData@ /must/ be a valid 'DeviceOrHostAddressKHR' union
+--
+-- -   Both of @dstAccelerationStructure@, and @srcAccelerationStructure@
+--     that are valid handles of non-ignored parameters /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'AccelerationStructureGeometryKHR',
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'AccelerationStructureTypeKHR', 'Vulkan.Core10.BaseType.Bool32',
+-- 'BuildAccelerationStructureFlagsKHR', 'DeviceOrHostAddressKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'buildAccelerationStructureKHR',
+-- 'cmdBuildAccelerationStructureIndirectKHR',
+-- 'cmdBuildAccelerationStructureKHR'
+data AccelerationStructureBuildGeometryInfoKHR (es :: [Type]) = AccelerationStructureBuildGeometryInfoKHR
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @type@ is a 'AccelerationStructureTypeKHR' value specifying the type of
+    -- acceleration structure being built.
+    type' :: AccelerationStructureTypeKHR
+  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsKHR'
+    -- specifying additional parameters of the acceleration structure.
+    flags :: BuildAccelerationStructureFlagsKHR
+  , -- | @update@ specifies whether to update @dstAccelerationStructure@ with the
+    -- data in @srcAccelerationStructure@ or not.
+    update :: Bool
+  , -- | @srcAccelerationStructure@ points to an existing acceleration structure
+    -- that is to be used to update the @dst@ acceleration structure when
+    -- @update@ is 'Vulkan.Core10.BaseType.TRUE'.
+    srcAccelerationStructure :: AccelerationStructureKHR
+  , -- | @dstAccelerationStructure@ points to the target acceleration structure
+    -- for the build.
+    dstAccelerationStructure :: AccelerationStructureKHR
+  , -- | @ppGeometries@ is either a pointer to an array of pointers to
+    -- 'AccelerationStructureGeometryKHR' structures if
+    -- @geometryArrayOfPointers@ is 'Vulkan.Core10.BaseType.TRUE', or a pointer
+    -- to a pointer to an array of 'AccelerationStructureGeometryKHR'
+    -- structures if it is 'Vulkan.Core10.BaseType.FALSE'. Each element of the
+    -- array describes the data used to build each acceleration structure
+    -- geometry.
+    geometries :: Vector AccelerationStructureGeometryKHR
+  , -- | @scratchData@ is the device or host address to memory that will be used
+    -- as scratch memory for the build.
+    scratchData :: DeviceOrHostAddressKHR
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (AccelerationStructureBuildGeometryInfoKHR es)
+
+instance Extensible AccelerationStructureBuildGeometryInfoKHR where
+  extensibleType = STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR
+  setNext x next = x{next = next}
+  getNext AccelerationStructureBuildGeometryInfoKHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AccelerationStructureBuildGeometryInfoKHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f
+    | otherwise = Nothing
+
+instance (Extendss AccelerationStructureBuildGeometryInfoKHR es, PokeChain es) => ToCStruct (AccelerationStructureBuildGeometryInfoKHR es) where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureBuildGeometryInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeKHR)) (type')
+    lift $ poke ((p `plusPtr` 20 :: Ptr BuildAccelerationStructureFlagsKHR)) (flags)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (update))
+    lift $ poke ((p `plusPtr` 32 :: Ptr AccelerationStructureKHR)) (srcAccelerationStructure)
+    lift $ poke ((p `plusPtr` 40 :: Ptr AccelerationStructureKHR)) (dstAccelerationStructure)
+    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (FALSE)
+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (geometries)) :: Word32))
+    pPpGeometries' <- ContT $ allocaBytesAligned @AccelerationStructureGeometryKHR ((Data.Vector.length (geometries)) * 96) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPpGeometries' `plusPtr` (96 * (i)) :: Ptr AccelerationStructureGeometryKHR) (e) . ($ ())) (geometries)
+    ppGeometries'' <- ContT $ with (pPpGeometries')
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr AccelerationStructureGeometryKHR)))) ppGeometries''
+    ContT $ pokeCStruct ((p `plusPtr` 64 :: Ptr DeviceOrHostAddressKHR)) (scratchData) . ($ ())
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeKHR)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 40 :: Ptr AccelerationStructureKHR)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 64 :: Ptr DeviceOrHostAddressKHR)) (zero) . ($ ())
+    lift $ f
+
+instance es ~ '[] => Zero (AccelerationStructureBuildGeometryInfoKHR es) where
+  zero = AccelerationStructureBuildGeometryInfoKHR
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           mempty
+           zero
+
+
+-- | VkAccelerationStructureBuildOffsetInfoKHR - Structure specifying build
+-- offsets and counts for acceleration structure builds
+--
+-- = Description
+--
+-- The primitive count and primitive offset are interpreted differently
+-- depending on the 'GeometryTypeKHR' used:
+--
+-- -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR',
+--     @primitiveCount@ is the number of triangles to be built, where each
+--     triangle is treated as 3 vertices.
+--
+--     -   If the geometry uses indices, @primitiveCount@ × 3 indices are
+--         consumed from
+--         'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@,
+--         starting at an offset of @primitiveOffset@. The value of
+--         @firstVertex@ is added to the index values before fetching
+--         vertices.
+--
+--     -   If the geometry does not use indices, @primitiveCount@ × 3
+--         vertices are consumed from
+--         'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@,
+--         starting at an offset of @primitiveOffset@ +
+--         'AccelerationStructureGeometryTrianglesDataKHR'::@vertexStride@
+--         × @firstVertex@.
+--
+--     -   A single 'TransformMatrixKHR' structure is consumed from
+--         'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@,
+--         at an offset of @transformOffset@. This transformation matrix is
+--         used by all triangles.
+--
+-- -   For geometries of type 'GEOMETRY_TYPE_AABBS_KHR', @primitiveCount@
+--     is the number of axis-aligned bounding boxes. @primitiveCount@
+--     'AabbPositionsKHR' structures are consumed from
+--     'AccelerationStructureGeometryAabbsDataKHR'::@data@, starting at an
+--     offset of @primitiveOffset@.
+--
+-- -   For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR',
+--     @primitiveCount@ is the number of acceleration structures.
+--     @primitiveCount@ 'AccelerationStructureInstanceKHR' structures are
+--     consumed from
+--     'AccelerationStructureGeometryInstancesDataKHR'::@data@, starting at
+--     an offset of @primitiveOffset@.
+--
+-- == Valid Usage
+--
+-- -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', if the
+--     geometry uses indices, the offset @primitiveOffset@ from
+--     'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@ /must/
+--     be a multiple of the element size of
+--     'AccelerationStructureGeometryTrianglesDataKHR'::@indexType@
+--
+-- -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', if the
+--     geometry doesn’t use indices, the offset @primitiveOffset@ from
+--     'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@ /must/
+--     be a multiple of the component size of
+--     'AccelerationStructureGeometryTrianglesDataKHR'::@vertexType@
+--
+-- -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', the offset
+--     @transformOffset@ from
+--     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@
+--     /must/ be a multiple of 16
+--
+-- -   For geometries of type 'GEOMETRY_TYPE_AABBS_KHR', the offset
+--     @primitiveOffset@ from
+--     'AccelerationStructureGeometryAabbsDataKHR'::@data@ /must/ be a
+--     multiple of 8
+--
+-- -   For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR', the offset
+--     @primitiveOffset@ from
+--     'AccelerationStructureGeometryInstancesDataKHR'::@data@ /must/ be a
+--     multiple of 16 \/\/ TODO - Almost certainly should be more here
+--
+-- = See Also
+--
+-- 'buildAccelerationStructureKHR', 'cmdBuildAccelerationStructureKHR'
+data AccelerationStructureBuildOffsetInfoKHR = AccelerationStructureBuildOffsetInfoKHR
+  { -- | @primitiveCount@ defines the number of primitives for a corresponding
+    -- acceleration structure geometry.
+    primitiveCount :: Word32
+  , -- | @primitiveOffset@ defines an offset in bytes into the memory where
+    -- primitive data is defined.
+    primitiveOffset :: Word32
+  , -- | @firstVertex@ is the index of the first vertex to build from for
+    -- triangle geometry.
+    firstVertex :: Word32
+  , -- | @transformOffset@ defines an offset in bytes into the memory where a
+    -- transform matrix is defined.
+    transformOffset :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureBuildOffsetInfoKHR
+
+instance ToCStruct AccelerationStructureBuildOffsetInfoKHR where
+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureBuildOffsetInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (primitiveCount)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (primitiveOffset)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (firstVertex)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (transformOffset)
+    f
+  cStructSize = 16
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct AccelerationStructureBuildOffsetInfoKHR where
+  peekCStruct p = do
+    primitiveCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    primitiveOffset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    firstVertex <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    transformOffset <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    pure $ AccelerationStructureBuildOffsetInfoKHR
+             primitiveCount primitiveOffset firstVertex transformOffset
+
+instance Storable AccelerationStructureBuildOffsetInfoKHR where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AccelerationStructureBuildOffsetInfoKHR where
+  zero = AccelerationStructureBuildOffsetInfoKHR
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkAccelerationStructureCreateGeometryTypeInfoKHR - Structure specifying
+-- the shape of geometries that will be built into an acceleration
+-- structure
+--
+-- = Description
+--
+-- When @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR':
+--
+-- -   if @indexType@ is
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then this
+--     structure describes a set of triangles.
+--
+-- -   if @indexType@ is not
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then this
+--     structure describes a set of indexed triangles.
+--
+-- == Valid Usage
+--
+-- -   If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', @vertexFormat@
+--     /must/ support the
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
+--     in
+--     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
+--     as returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'
+--
+-- -   If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', @indexType@
+--     /must/ be 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @geometryType@ /must/ be a valid 'GeometryTypeKHR' value
+--
+-- -   @indexType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.IndexType.IndexType' value
+--
+-- -   If @vertexFormat@ is not @0@, @vertexFormat@ /must/ be a valid
+--     'Vulkan.Core10.Enums.Format.Format' value
+--
+-- = See Also
+--
+-- 'AccelerationStructureCreateInfoKHR', 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.Format.Format', 'GeometryTypeKHR',
+-- 'Vulkan.Core10.Enums.IndexType.IndexType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data AccelerationStructureCreateGeometryTypeInfoKHR = AccelerationStructureCreateGeometryTypeInfoKHR
+  { -- | @geometryType@ is a 'GeometryTypeKHR' that describes the type of an
+    -- acceleration structure geometry.
+    geometryType :: GeometryTypeKHR
+  , -- | @maxPrimitiveCount@ describes the maximum number of primitives that
+    -- /can/ be built into an acceleration structure geometry.
+    maxPrimitiveCount :: Word32
+  , -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' that
+    -- describes the index type used to build this geometry when @geometryType@
+    -- is 'GEOMETRY_TYPE_TRIANGLES_KHR'.
+    indexType :: IndexType
+  , -- | @maxVertexCount@ describes the maximum vertex count that /can/ be used
+    -- to build an acceleration structure geometry when @geometryType@ is
+    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.
+    maxVertexCount :: Word32
+  , -- | @vertexFormat@ is a 'Vulkan.Core10.Enums.Format.Format' that describes
+    -- the vertex format used to build this geometry when @geometryType@ is
+    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.
+    vertexFormat :: Format
+  , -- | @allowsTransforms@ indicates whether transform data /can/ be used by
+    -- this acceleration structure or not, when @geometryType@ is
+    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.
+    allowsTransforms :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureCreateGeometryTypeInfoKHR
+
+instance ToCStruct AccelerationStructureCreateGeometryTypeInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureCreateGeometryTypeInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (geometryType)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxPrimitiveCount)
+    poke ((p `plusPtr` 24 :: Ptr IndexType)) (indexType)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (maxVertexCount)
+    poke ((p `plusPtr` 32 :: Ptr Format)) (vertexFormat)
+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (allowsTransforms))
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr IndexType)) (zero)
+    f
+
+instance FromCStruct AccelerationStructureCreateGeometryTypeInfoKHR where
+  peekCStruct p = do
+    geometryType <- peek @GeometryTypeKHR ((p `plusPtr` 16 :: Ptr GeometryTypeKHR))
+    maxPrimitiveCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    indexType <- peek @IndexType ((p `plusPtr` 24 :: Ptr IndexType))
+    maxVertexCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    vertexFormat <- peek @Format ((p `plusPtr` 32 :: Ptr Format))
+    allowsTransforms <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
+    pure $ AccelerationStructureCreateGeometryTypeInfoKHR
+             geometryType maxPrimitiveCount indexType maxVertexCount vertexFormat (bool32ToBool allowsTransforms)
+
+instance Storable AccelerationStructureCreateGeometryTypeInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AccelerationStructureCreateGeometryTypeInfoKHR where
+  zero = AccelerationStructureCreateGeometryTypeInfoKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkAccelerationStructureCreateInfoKHR - Structure specifying the
+-- parameters of a newly created acceleration structure object
+--
+-- = Description
+--
+-- If @deviceAddress@ is zero, no specific address is requested.
+--
+-- If @deviceAddress@ is not zero, @deviceAddress@ /must/ be an address
+-- retrieved from an identically created acceleration structure on the same
+-- implementation. The acceleration structure /must/ also be bound to an
+-- identically created 'Vulkan.Core10.Handles.DeviceMemory' object.
+--
+-- Apps /should/ avoid creating acceleration structures with app-provided
+-- addresses and implementation-provided addresses in the same process, to
+-- reduce the likelihood of
+-- 'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
+-- errors.
+--
+-- == Valid Usage
+--
+-- -   If @compactedSize@ is not @0@ then @maxGeometryCount@ /must/ be @0@
+--
+-- -   If @compactedSize@ is @0@ then @maxGeometryCount@ /must/ not be @0@
+--
+-- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' then
+--     @maxGeometryCount@ /must/ be less than or equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxGeometryCount@
+--
+-- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' then the
+--     @maxPrimitiveCount@ member of each element of the @pGeometryInfos@
+--     array /must/ be less than or equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxInstanceCount@
+--
+-- -   The total number of triangles in all geometries /must/ be less than
+--     or equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxPrimitiveCount@
+--
+-- -   The total number of AABBs in all geometries /must/ be less than or
+--     equal to
+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxPrimitiveCount@
+--
+-- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' and
+--     @compactedSize@ is @0@, @maxGeometryCount@ /must/ be @1@
+--
+-- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' and
+--     @compactedSize@ is @0@, the @geometryType@ member of elements of
+--     @pGeometryInfos@ /must/ be 'GEOMETRY_TYPE_INSTANCES_KHR'
+--
+-- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' and
+--     @compactedSize@ is @0@, the @geometryType@ member of elements of
+--     @pGeometryInfos@ /must/ not be 'GEOMETRY_TYPE_INSTANCES_KHR'
+--
+-- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' then the
+--     @geometryType@ member of each geometry in @pGeometryInfos@ /must/ be
+--     the same
+--
+-- -   If @flags@ has the
+--     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR' bit set,
+--     then it /must/ not have the
+--     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR' bit set
+--
+-- -   If @deviceAddress@ is not @0@,
+--     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingAccelerationStructureCaptureReplay@
+--     /must/ be 'Vulkan.Core10.BaseType.TRUE'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @type@ /must/ be a valid 'AccelerationStructureTypeKHR' value
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'BuildAccelerationStructureFlagBitsKHR' values
+--
+-- -   If @maxGeometryCount@ is not @0@, @pGeometryInfos@ /must/ be a valid
+--     pointer to an array of @maxGeometryCount@ valid
+--     'AccelerationStructureCreateGeometryTypeInfoKHR' structures
+--
+-- = See Also
+--
+-- 'AccelerationStructureCreateGeometryTypeInfoKHR',
+-- 'AccelerationStructureTypeKHR', 'BuildAccelerationStructureFlagsKHR',
+-- 'Vulkan.Core10.BaseType.DeviceAddress',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createAccelerationStructureKHR'
+data AccelerationStructureCreateInfoKHR = AccelerationStructureCreateInfoKHR
+  { -- | @compactedSize@ is the size from the result of
+    -- 'cmdWriteAccelerationStructuresPropertiesKHR' if this acceleration
+    -- structure is going to be the target of a compacting copy.
+    compactedSize :: DeviceSize
+  , -- | @type@ is a 'AccelerationStructureTypeKHR' value specifying the type of
+    -- acceleration structure that will be created.
+    type' :: AccelerationStructureTypeKHR
+  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsKHR'
+    -- specifying additional parameters of the acceleration structure.
+    flags :: BuildAccelerationStructureFlagsKHR
+  , -- | @pGeometryInfos@ is an array of @maxGeometryCount@
+    -- 'AccelerationStructureCreateGeometryTypeInfoKHR' structures, which
+    -- describe the maximum size and format of the data that will be built into
+    -- the acceleration structure.
+    geometryInfos :: Vector AccelerationStructureCreateGeometryTypeInfoKHR
+  , -- | @deviceAddress@ is the device address requested for the acceleration
+    -- structure if the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-ascapturereplay rayTracingAccelerationStructureCaptureReplay>
+    -- feature is being used.
+    deviceAddress :: DeviceAddress
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureCreateInfoKHR
+
+instance ToCStruct AccelerationStructureCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureCreateInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (compactedSize)
+    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR)) (type')
+    lift $ poke ((p `plusPtr` 28 :: Ptr BuildAccelerationStructureFlagsKHR)) (flags)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (geometryInfos)) :: Word32))
+    pPGeometryInfos' <- ContT $ allocaBytesAligned @AccelerationStructureCreateGeometryTypeInfoKHR ((Data.Vector.length (geometryInfos)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometryInfos' `plusPtr` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR) (e) . ($ ())) (geometryInfos)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR))) (pPGeometryInfos')
+    lift $ poke ((p `plusPtr` 48 :: Ptr DeviceAddress)) (deviceAddress)
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR)) (zero)
+    pPGeometryInfos' <- ContT $ allocaBytesAligned @AccelerationStructureCreateGeometryTypeInfoKHR ((Data.Vector.length (mempty)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometryInfos' `plusPtr` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR))) (pPGeometryInfos')
+    lift $ f
+
+instance FromCStruct AccelerationStructureCreateInfoKHR where
+  peekCStruct p = do
+    compactedSize <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    type' <- peek @AccelerationStructureTypeKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR))
+    flags <- peek @BuildAccelerationStructureFlagsKHR ((p `plusPtr` 28 :: Ptr BuildAccelerationStructureFlagsKHR))
+    maxGeometryCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pGeometryInfos <- peek @(Ptr AccelerationStructureCreateGeometryTypeInfoKHR) ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR)))
+    pGeometryInfos' <- generateM (fromIntegral maxGeometryCount) (\i -> peekCStruct @AccelerationStructureCreateGeometryTypeInfoKHR ((pGeometryInfos `advancePtrBytes` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR)))
+    deviceAddress <- peek @DeviceAddress ((p `plusPtr` 48 :: Ptr DeviceAddress))
+    pure $ AccelerationStructureCreateInfoKHR
+             compactedSize type' flags pGeometryInfos' deviceAddress
+
+instance Zero AccelerationStructureCreateInfoKHR where
+  zero = AccelerationStructureCreateInfoKHR
+           zero
+           zero
+           zero
+           mempty
+           zero
+
+
+-- | VkAabbPositionsKHR - Structure specifying two opposing corners of an
+-- axis-aligned bounding box
+--
+-- == Valid Usage
+--
+-- = See Also
+--
+-- No cross-references are available
+data AabbPositionsKHR = AabbPositionsKHR
+  { -- | @minX@ /must/ be less than or equal to @maxX@
+    minX :: Float
+  , -- | @minY@ /must/ be less than or equal to @maxY@
+    minY :: Float
+  , -- | @minZ@ /must/ be less than or equal to @maxZ@
+    minZ :: Float
+  , -- | @maxX@ is the x position of the other opposing corner of a bounding box.
+    maxX :: Float
+  , -- | @maxY@ is the y position of the other opposing corner of a bounding box.
+    maxY :: Float
+  , -- | @maxZ@ is the z position of the other opposing corner of a bounding box.
+    maxZ :: Float
+  }
+  deriving (Typeable)
+deriving instance Show AabbPositionsKHR
+
+instance ToCStruct AabbPositionsKHR where
+  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AabbPositionsKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (minX))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (minY))
+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (minZ))
+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (maxX))
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (maxY))
+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxZ))
+    f
+  cStructSize = 24
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))
+    f
+
+instance FromCStruct AabbPositionsKHR where
+  peekCStruct p = do
+    minX <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
+    minY <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
+    minZ <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))
+    maxX <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))
+    maxY <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))
+    maxZ <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))
+    pure $ AabbPositionsKHR
+             ((\(CFloat a) -> a) minX) ((\(CFloat a) -> a) minY) ((\(CFloat a) -> a) minZ) ((\(CFloat a) -> a) maxX) ((\(CFloat a) -> a) maxY) ((\(CFloat a) -> a) maxZ)
+
+instance Storable AabbPositionsKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AabbPositionsKHR where
+  zero = AabbPositionsKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkTransformMatrixKHR - Structure specifying a 3x4 affine transformation
+-- matrix
+--
+-- = See Also
+--
+-- 'AccelerationStructureInstanceKHR'
+data TransformMatrixKHR = TransformMatrixKHR
+  { -- | @matrix@ is a 3x4 row-major affine transformation matrix.
+    matrix :: ((Float, Float, Float, Float), (Float, Float, Float, Float), (Float, Float, Float, Float)) }
+  deriving (Typeable)
+deriving instance Show TransformMatrixKHR
+
+instance ToCStruct TransformMatrixKHR where
+  withCStruct x f = allocaBytesAligned 48 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p TransformMatrixKHR{..} f = do
+    let pMatrix' = lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))
+    case (matrix) of
+      (e0, e1, e2) -> do
+        let pMatrix0 = lowerArrayPtr (pMatrix' :: Ptr (FixedArray 4 CFloat))
+        case (e0) of
+          (e0', e1', e2', e3) -> do
+            poke (pMatrix0 :: Ptr CFloat) (CFloat (e0'))
+            poke (pMatrix0 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
+            poke (pMatrix0 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
+            poke (pMatrix0 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+        let pMatrix1 = lowerArrayPtr (pMatrix' `plusPtr` 16 :: Ptr (FixedArray 4 CFloat))
+        case (e1) of
+          (e0', e1', e2', e3) -> do
+            poke (pMatrix1 :: Ptr CFloat) (CFloat (e0'))
+            poke (pMatrix1 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
+            poke (pMatrix1 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
+            poke (pMatrix1 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+        let pMatrix2 = lowerArrayPtr (pMatrix' `plusPtr` 32 :: Ptr (FixedArray 4 CFloat))
+        case (e2) of
+          (e0', e1', e2', e3) -> do
+            poke (pMatrix2 :: Ptr CFloat) (CFloat (e0'))
+            poke (pMatrix2 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
+            poke (pMatrix2 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
+            poke (pMatrix2 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+        pure $ ()
+    f
+  cStructSize = 48
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    let pMatrix' = lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))
+    case (((zero, zero, zero, zero), (zero, zero, zero, zero), (zero, zero, zero, zero))) of
+      (e0, e1, e2) -> do
+        let pMatrix0 = lowerArrayPtr (pMatrix' :: Ptr (FixedArray 4 CFloat))
+        case (e0) of
+          (e0', e1', e2', e3) -> do
+            poke (pMatrix0 :: Ptr CFloat) (CFloat (e0'))
+            poke (pMatrix0 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
+            poke (pMatrix0 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
+            poke (pMatrix0 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+        let pMatrix1 = lowerArrayPtr (pMatrix' `plusPtr` 16 :: Ptr (FixedArray 4 CFloat))
+        case (e1) of
+          (e0', e1', e2', e3) -> do
+            poke (pMatrix1 :: Ptr CFloat) (CFloat (e0'))
+            poke (pMatrix1 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
+            poke (pMatrix1 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
+            poke (pMatrix1 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+        let pMatrix2 = lowerArrayPtr (pMatrix' `plusPtr` 32 :: Ptr (FixedArray 4 CFloat))
+        case (e2) of
+          (e0', e1', e2', e3) -> do
+            poke (pMatrix2 :: Ptr CFloat) (CFloat (e0'))
+            poke (pMatrix2 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))
+            poke (pMatrix2 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))
+            poke (pMatrix2 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))
+        pure $ ()
+    f
+
+instance FromCStruct TransformMatrixKHR where
+  peekCStruct p = do
+    let pmatrix = lowerArrayPtr @(FixedArray 4 CFloat) ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))
+    let pmatrix0 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 0 :: Ptr (FixedArray 4 CFloat)))
+    matrix00 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 0 :: Ptr CFloat))
+    matrix01 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 4 :: Ptr CFloat))
+    matrix02 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 8 :: Ptr CFloat))
+    matrix03 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 12 :: Ptr CFloat))
+    let pmatrix1 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 16 :: Ptr (FixedArray 4 CFloat)))
+    matrix10 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 0 :: Ptr CFloat))
+    matrix11 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 4 :: Ptr CFloat))
+    matrix12 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 8 :: Ptr CFloat))
+    matrix13 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 12 :: Ptr CFloat))
+    let pmatrix2 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 32 :: Ptr (FixedArray 4 CFloat)))
+    matrix20 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 0 :: Ptr CFloat))
+    matrix21 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 4 :: Ptr CFloat))
+    matrix22 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 8 :: Ptr CFloat))
+    matrix23 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 12 :: Ptr CFloat))
+    pure $ TransformMatrixKHR
+             ((((((\(CFloat a) -> a) matrix00), ((\(CFloat a) -> a) matrix01), ((\(CFloat a) -> a) matrix02), ((\(CFloat a) -> a) matrix03))), ((((\(CFloat a) -> a) matrix10), ((\(CFloat a) -> a) matrix11), ((\(CFloat a) -> a) matrix12), ((\(CFloat a) -> a) matrix13))), ((((\(CFloat a) -> a) matrix20), ((\(CFloat a) -> a) matrix21), ((\(CFloat a) -> a) matrix22), ((\(CFloat a) -> a) matrix23)))))
+
+instance Storable TransformMatrixKHR where
+  sizeOf ~_ = 48
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero TransformMatrixKHR where
+  zero = TransformMatrixKHR
+           ((zero, zero, zero, zero), (zero, zero, zero, zero), (zero, zero, zero, zero))
+
+
+-- | VkAccelerationStructureInstanceKHR - Structure specifying a single
+-- acceleration structure instance for building into an acceleration
+-- structure geometry
+--
+-- = Description
+--
+-- The C language spec does not define the ordering of bit-fields, but in
+-- practice, this struct produces the correct layout with existing
+-- compilers. The intended bit pattern is for the following:
+--
+-- If a compiler produces code that diverges from that pattern,
+-- applications /must/ employ another method to set values according to the
+-- correct bit pattern.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'GeometryInstanceFlagsKHR', 'TransformMatrixKHR'
+data AccelerationStructureInstanceKHR = AccelerationStructureInstanceKHR
+  { -- | @transform@ is a 'TransformMatrixKHR' structure describing a
+    -- transformation to be applied to the acceleration structure.
+    transform :: TransformMatrixKHR
+  , -- | @instanceCustomIndex@ and @mask@ occupy the same memory as if a single
+    -- @int32_t@ was specified in their place
+    --
+    -- -   @instanceCustomIndex@ occupies the 24 least significant bits of that
+    --     memory
+    --
+    -- -   @mask@ occupies the 8 most significant bits of that memory
+    instanceCustomIndex :: Word32
+  , -- | @mask@ is an 8-bit visibility mask for the geometry. The instance /may/
+    -- only be hit if @rayMask & instance.mask != 0@
+    mask :: Word32
+  , -- | @instanceShaderBindingTableRecordOffset@ and @flags@ occupy the same
+    -- memory as if a single @int32_t@ was specified in their place
+    --
+    -- -   @instanceShaderBindingTableRecordOffset@ occupies the 24 least
+    --     significant bits of that memory
+    --
+    -- -   @flags@ occupies the 8 most significant bits of that memory
+    instanceShaderBindingTableRecordOffset :: Word32
+  , -- | @flags@ /must/ be a valid combination of 'GeometryInstanceFlagBitsKHR'
+    -- values
+    flags :: GeometryInstanceFlagsKHR
+  , -- | @accelerationStructureReference@ is either:
+    --
+    -- -   a device address containing the value obtained from
+    --     'getAccelerationStructureDeviceAddressKHR' or
+    --     'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'
+    --     (used by device operations which reference acceleration structures)
+    --     or,
+    --
+    -- -   a 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object (used
+    --     by host operations which reference acceleration structures).
+    accelerationStructureReference :: Word64
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureInstanceKHR
+
+instance ToCStruct AccelerationStructureInstanceKHR where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureInstanceKHR{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (transform) . ($ ())
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (((coerce @_ @Word32 (mask)) `shiftL` 24) .|. (instanceCustomIndex))
+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (((coerce @_ @Word32 (flags)) `shiftL` 24) .|. (instanceShaderBindingTableRecordOffset))
+    lift $ poke ((p `plusPtr` 56 :: Ptr Word64)) (accelerationStructureReference)
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 56 :: Ptr Word64)) (zero)
+    lift $ f
+
+instance FromCStruct AccelerationStructureInstanceKHR where
+  peekCStruct p = do
+    transform <- peekCStruct @TransformMatrixKHR ((p `plusPtr` 0 :: Ptr TransformMatrixKHR))
+    instanceCustomIndex <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    let instanceCustomIndex' = ((instanceCustomIndex .&. coerce @Word32 0xffffff))
+    mask <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    let mask' = ((((mask `shiftR` 24)) .&. coerce @Word32 0xff))
+    instanceShaderBindingTableRecordOffset <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
+    let instanceShaderBindingTableRecordOffset' = ((instanceShaderBindingTableRecordOffset .&. coerce @Word32 0xffffff))
+    flags <- peek @GeometryInstanceFlagsKHR ((p `plusPtr` 52 :: Ptr GeometryInstanceFlagsKHR))
+    let flags' = ((((flags `shiftR` 24)) .&. coerce @Word32 0xff))
+    accelerationStructureReference <- peek @Word64 ((p `plusPtr` 56 :: Ptr Word64))
+    pure $ AccelerationStructureInstanceKHR
+             transform instanceCustomIndex' mask' instanceShaderBindingTableRecordOffset' flags' accelerationStructureReference
+
+instance Zero AccelerationStructureInstanceKHR where
+  zero = AccelerationStructureInstanceKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkAccelerationStructureDeviceAddressInfoKHR - Structure specifying the
+-- acceleration structure to query an address for
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getAccelerationStructureDeviceAddressKHR'
+data AccelerationStructureDeviceAddressInfoKHR = AccelerationStructureDeviceAddressInfoKHR
+  { -- | @accelerationStructure@ /must/ be a valid
+    -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+    accelerationStructure :: AccelerationStructureKHR }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureDeviceAddressInfoKHR
+
+instance ToCStruct AccelerationStructureDeviceAddressInfoKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureDeviceAddressInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (accelerationStructure)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)
+    f
+
+instance FromCStruct AccelerationStructureDeviceAddressInfoKHR where
+  peekCStruct p = do
+    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))
+    pure $ AccelerationStructureDeviceAddressInfoKHR
+             accelerationStructure
+
+instance Storable AccelerationStructureDeviceAddressInfoKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AccelerationStructureDeviceAddressInfoKHR where
+  zero = AccelerationStructureDeviceAddressInfoKHR
+           zero
+
+
+-- | VkAccelerationStructureVersionKHR - Acceleration structure version
+-- information
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getDeviceAccelerationStructureCompatibilityKHR'
+data AccelerationStructureVersionKHR = AccelerationStructureVersionKHR
+  { -- | @versionData@ /must/ be a valid pointer to an array of @2@*VK_UUID_SIZE
+    -- @uint8_t@ values
+    versionData :: ByteString }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureVersionKHR
+
+instance ToCStruct AccelerationStructureVersionKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureVersionKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ unless (Data.ByteString.length (versionData) == 2 * UUID_SIZE) $
+      throwIO $ IOError Nothing InvalidArgument "" "AccelerationStructureVersionKHR::versionData must be 2*VK_UUID_SIZE bytes" Nothing Nothing
+    versionData'' <- fmap (castPtr @CChar @Word8) . ContT $ unsafeUseAsCString (versionData)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr Word8))) versionData''
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct AccelerationStructureVersionKHR where
+  peekCStruct p = do
+    versionData <- peek @(Ptr Word8) ((p `plusPtr` 16 :: Ptr (Ptr Word8)))
+    versionData' <- packCStringLen (castPtr @Word8 @CChar versionData, 2 * UUID_SIZE)
+    pure $ AccelerationStructureVersionKHR
+             versionData'
+
+instance Zero AccelerationStructureVersionKHR where
+  zero = AccelerationStructureVersionKHR
+           mempty
+
+
+-- | VkCopyAccelerationStructureInfoKHR - Parameters for copying an
+-- acceleration structure
+--
+-- == Valid Usage
+--
+-- -   @mode@ /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' or
+--     'COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR'
+--
+-- -   @src@ /must/ have been built with
+--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if @mode@ is
+--     'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @src@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   @dst@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value
+--
+-- -   Both of @dst@, and @src@ /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'CopyAccelerationStructureModeKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdCopyAccelerationStructureKHR', 'copyAccelerationStructureKHR'
+data CopyAccelerationStructureInfoKHR (es :: [Type]) = CopyAccelerationStructureInfoKHR
+  { -- No documentation found for Nested "VkCopyAccelerationStructureInfoKHR" "pNext"
+    next :: Chain es
+  , -- | @src@ is the source acceleration structure for the copy.
+    src :: AccelerationStructureKHR
+  , -- | @dst@ is the target acceleration structure for the copy.
+    dst :: AccelerationStructureKHR
+  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value that specifies
+    -- additional operations to perform during the copy.
+    mode :: CopyAccelerationStructureModeKHR
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (CopyAccelerationStructureInfoKHR es)
+
+instance Extensible CopyAccelerationStructureInfoKHR where
+  extensibleType = STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR
+  setNext x next = x{next = next}
+  getNext CopyAccelerationStructureInfoKHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CopyAccelerationStructureInfoKHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f
+    | otherwise = Nothing
+
+instance (Extendss CopyAccelerationStructureInfoKHR es, PokeChain es) => ToCStruct (CopyAccelerationStructureInfoKHR es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CopyAccelerationStructureInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (src)
+    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (dst)
+    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (mode)
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (zero)
+    lift $ f
+
+instance (Extendss CopyAccelerationStructureInfoKHR es, PeekChain es) => FromCStruct (CopyAccelerationStructureInfoKHR es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    src <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))
+    dst <- peek @AccelerationStructureKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR))
+    mode <- peek @CopyAccelerationStructureModeKHR ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR))
+    pure $ CopyAccelerationStructureInfoKHR
+             next src dst mode
+
+instance es ~ '[] => Zero (CopyAccelerationStructureInfoKHR es) where
+  zero = CopyAccelerationStructureInfoKHR
+           ()
+           zero
+           zero
+           zero
+
+
+-- | VkCopyAccelerationStructureToMemoryInfoKHR - Parameters for serializing
+-- an acceleration structure
+--
+-- == Valid Usage
+--
+-- -   The memory pointed to by @dst@ /must/ be at least as large as the
+--     serialization size of @src@, as reported by
+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
+--
+-- -   @mode@ /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @src@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   @dst@ /must/ be a valid 'DeviceOrHostAddressKHR' union
+--
+-- -   @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'CopyAccelerationStructureModeKHR', 'DeviceOrHostAddressKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdCopyAccelerationStructureToMemoryKHR',
+-- 'copyAccelerationStructureToMemoryKHR'
+data CopyAccelerationStructureToMemoryInfoKHR (es :: [Type]) = CopyAccelerationStructureToMemoryInfoKHR
+  { -- No documentation found for Nested "VkCopyAccelerationStructureToMemoryInfoKHR" "pNext"
+    next :: Chain es
+  , -- | @src@ is the source acceleration structure for the copy
+    src :: AccelerationStructureKHR
+  , -- | @dst@ is the device or host address to memory which is the target for
+    -- the copy
+    dst :: DeviceOrHostAddressKHR
+  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value that specifies
+    -- additional operations to perform during the copy.
+    mode :: CopyAccelerationStructureModeKHR
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (CopyAccelerationStructureToMemoryInfoKHR es)
+
+instance Extensible CopyAccelerationStructureToMemoryInfoKHR where
+  extensibleType = STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR
+  setNext x next = x{next = next}
+  getNext CopyAccelerationStructureToMemoryInfoKHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CopyAccelerationStructureToMemoryInfoKHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f
+    | otherwise = Nothing
+
+instance (Extendss CopyAccelerationStructureToMemoryInfoKHR es, PokeChain es) => ToCStruct (CopyAccelerationStructureToMemoryInfoKHR es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CopyAccelerationStructureToMemoryInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (src)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressKHR)) (dst) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (mode)
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressKHR)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (zero)
+    lift $ f
+
+instance es ~ '[] => Zero (CopyAccelerationStructureToMemoryInfoKHR es) where
+  zero = CopyAccelerationStructureToMemoryInfoKHR
+           ()
+           zero
+           zero
+           zero
+
+
+-- | VkCopyMemoryToAccelerationStructureInfoKHR - Parameters for
+-- deserializing an acceleration structure
+--
+-- == Valid Usage
+--
+-- -   @mode@ /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR'
+--
+-- -   The data in @pInfo->src@ /must/ have a format compatible with the
+--     destination physical device as returned by
+--     'getDeviceAccelerationStructureCompatibilityKHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @src@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union
+--
+-- -   @dst@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'CopyAccelerationStructureModeKHR', 'DeviceOrHostAddressConstKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdCopyMemoryToAccelerationStructureKHR',
+-- 'copyMemoryToAccelerationStructureKHR'
+data CopyMemoryToAccelerationStructureInfoKHR (es :: [Type]) = CopyMemoryToAccelerationStructureInfoKHR
+  { -- No documentation found for Nested "VkCopyMemoryToAccelerationStructureInfoKHR" "pNext"
+    next :: Chain es
+  , -- | @src@ is the device or host address to memory containing the source data
+    -- for the copy.
+    src :: DeviceOrHostAddressConstKHR
+  , -- | @dst@ is the target acceleration structure for the copy.
+    dst :: AccelerationStructureKHR
+  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value that specifies
+    -- additional operations to perform during the copy.
+    mode :: CopyAccelerationStructureModeKHR
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (CopyMemoryToAccelerationStructureInfoKHR es)
+
+instance Extensible CopyMemoryToAccelerationStructureInfoKHR where
+  extensibleType = STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR
+  setNext x next = x{next = next}
+  getNext CopyMemoryToAccelerationStructureInfoKHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CopyMemoryToAccelerationStructureInfoKHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f
+    | otherwise = Nothing
+
+instance (Extendss CopyMemoryToAccelerationStructureInfoKHR es, PokeChain es) => ToCStruct (CopyMemoryToAccelerationStructureInfoKHR es) where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CopyMemoryToAccelerationStructureInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (src) . ($ ())
+    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (dst)
+    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (mode)
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (zero)
+    lift $ f
+
+instance es ~ '[] => Zero (CopyMemoryToAccelerationStructureInfoKHR es) where
+  zero = CopyMemoryToAccelerationStructureInfoKHR
+           ()
+           zero
+           zero
+           zero
+
+
+-- | VkRayTracingPipelineInterfaceCreateInfoKHR - Structure specifying
+-- additional interface information when using libraries
+--
+-- = Description
+--
+-- @maxPayloadSize@ is calculated as the maximum number of bytes used by
+-- any block declared in the @RayPayloadKHR@ or @IncomingRayPayloadKHR@
+-- storage classes. @maxAttributeSize@ is calculated as the maximum number
+-- of bytes used by any block declared in the @HitAttributeKHR@ storage
+-- class. @maxCallableSize@ is calculated as the maximum number of bytes
+-- used by any block declred in the @CallableDataKHR@ or
+-- @IncomingCallableDataKHR@. As variables in these storage classes do not
+-- have explicit offsets, the size should be calculated as if each variable
+-- has a
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-alignment-requirements scalar alignment>
+-- equal to the largest scalar alignment of any of the block’s members.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'RayTracingPipelineCreateInfoKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data RayTracingPipelineInterfaceCreateInfoKHR = RayTracingPipelineInterfaceCreateInfoKHR
+  { -- | @maxPayloadSize@ is the maximum payload size in bytes used by any shader
+    -- in the pipeline.
+    maxPayloadSize :: Word32
+  , -- | @maxAttributeSize@ is the maximum attribute structure size in bytes used
+    -- by any shader in the pipeline.
+    maxAttributeSize :: Word32
+  , -- | @maxCallableSize@ is the maximum callable data size in bytes used by any
+    -- shader in the pipeline.
+    maxCallableSize :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show RayTracingPipelineInterfaceCreateInfoKHR
+
+instance ToCStruct RayTracingPipelineInterfaceCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RayTracingPipelineInterfaceCreateInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxPayloadSize)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxAttributeSize)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxCallableSize)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct RayTracingPipelineInterfaceCreateInfoKHR where
+  peekCStruct p = do
+    maxPayloadSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxAttributeSize <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    maxCallableSize <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ RayTracingPipelineInterfaceCreateInfoKHR
+             maxPayloadSize maxAttributeSize maxCallableSize
+
+instance Storable RayTracingPipelineInterfaceCreateInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero RayTracingPipelineInterfaceCreateInfoKHR where
+  zero = RayTracingPipelineInterfaceCreateInfoKHR
+           zero
+           zero
+           zero
+
+
+data DeviceOrHostAddressKHR
+  = DeviceAddress DeviceAddress
+  | HostAddress (Ptr ())
+  deriving (Show)
+
+instance ToCStruct DeviceOrHostAddressKHR where
+  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct :: Ptr DeviceOrHostAddressKHR -> DeviceOrHostAddressKHR -> IO a -> IO a
+  pokeCStruct p = (. const) . runContT .  \case
+    DeviceAddress v -> lift $ poke (castPtr @_ @DeviceAddress p) (v)
+    HostAddress v -> lift $ poke (castPtr @_ @(Ptr ()) p) (v)
+  pokeZeroCStruct :: Ptr DeviceOrHostAddressKHR -> IO b -> IO b
+  pokeZeroCStruct _ f = f
+  cStructSize = 8
+  cStructAlignment = 8
+
+instance Zero DeviceOrHostAddressKHR where
+  zero = DeviceAddress zero
+
+
+data DeviceOrHostAddressConstKHR
+  = DeviceAddressConst DeviceAddress
+  | HostAddressConst (Ptr ())
+  deriving (Show)
+
+instance ToCStruct DeviceOrHostAddressConstKHR where
+  withCStruct x f = allocaBytesAligned 8 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct :: Ptr DeviceOrHostAddressConstKHR -> DeviceOrHostAddressConstKHR -> IO a -> IO a
+  pokeCStruct p = (. const) . runContT .  \case
+    DeviceAddressConst v -> lift $ poke (castPtr @_ @DeviceAddress p) (v)
+    HostAddressConst v -> lift $ poke (castPtr @_ @(Ptr ()) p) (v)
+  pokeZeroCStruct :: Ptr DeviceOrHostAddressConstKHR -> IO b -> IO b
+  pokeZeroCStruct _ f = f
+  cStructSize = 8
+  cStructAlignment = 8
+
+instance Zero DeviceOrHostAddressConstKHR where
+  zero = DeviceAddressConst zero
+
+
+data AccelerationStructureGeometryDataKHR
+  = Triangles AccelerationStructureGeometryTrianglesDataKHR
+  | Aabbs AccelerationStructureGeometryAabbsDataKHR
+  | Instances AccelerationStructureGeometryInstancesDataKHR
+  deriving (Show)
+
+instance ToCStruct AccelerationStructureGeometryDataKHR where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct :: Ptr AccelerationStructureGeometryDataKHR -> AccelerationStructureGeometryDataKHR -> IO a -> IO a
+  pokeCStruct p = (. const) . runContT .  \case
+    Triangles v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryTrianglesDataKHR p) (v) . ($ ())
+    Aabbs v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryAabbsDataKHR p) (v) . ($ ())
+    Instances v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryInstancesDataKHR p) (v) . ($ ())
+  pokeZeroCStruct :: Ptr AccelerationStructureGeometryDataKHR -> IO b -> IO b
+  pokeZeroCStruct _ f = f
+  cStructSize = 64
+  cStructAlignment = 8
+
+instance Zero AccelerationStructureGeometryDataKHR where
+  zero = Triangles zero
+
+
+-- | VkGeometryInstanceFlagBitsKHR - Instance flag bits
+--
+-- = Description
+--
+-- 'GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR' and
+-- 'GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR' /must/ not be used in the same
+-- flag.
+--
+-- = See Also
+--
+-- 'GeometryInstanceFlagsKHR'
+newtype GeometryInstanceFlagBitsKHR = GeometryInstanceFlagBitsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR' disables face
+-- culling for this instance.
+pattern GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR = GeometryInstanceFlagBitsKHR 0x00000001
+-- | 'GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR' indicates
+-- that the front face of the triangle for culling purposes is the face
+-- that is counter clockwise in object space relative to the ray origin.
+-- Because the facing is determined in object space, an instance transform
+-- matrix does not change the winding, but a geometry transform does.
+pattern GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = GeometryInstanceFlagBitsKHR 0x00000002
+-- | 'GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR' causes this instance to act as
+-- though 'GEOMETRY_OPAQUE_BIT_KHR' were specified on all geometries
+-- referenced by this instance. This behavior /can/ be overridden by the
+-- SPIR-V @NoOpaqueKHR@ ray flag.
+pattern GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR = GeometryInstanceFlagBitsKHR 0x00000004
+-- | 'GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR' causes this instance to act
+-- as though 'GEOMETRY_OPAQUE_BIT_KHR' were not specified on all geometries
+-- referenced by this instance. This behavior /can/ be overridden by the
+-- SPIR-V @OpaqueKHR@ ray flag.
+pattern GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR = GeometryInstanceFlagBitsKHR 0x00000008
+
+type GeometryInstanceFlagsKHR = GeometryInstanceFlagBitsKHR
+
+instance Show GeometryInstanceFlagBitsKHR where
+  showsPrec p = \case
+    GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR -> showString "GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR"
+    GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR -> showString "GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR"
+    GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR -> showString "GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR"
+    GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR -> showString "GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR"
+    GeometryInstanceFlagBitsKHR x -> showParen (p >= 11) (showString "GeometryInstanceFlagBitsKHR 0x" . showHex x)
+
+instance Read GeometryInstanceFlagBitsKHR where
+  readPrec = parens (choose [("GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR", pure GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR)
+                            , ("GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR", pure GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR)
+                            , ("GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR", pure GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR)
+                            , ("GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR", pure GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "GeometryInstanceFlagBitsKHR")
+                       v <- step readPrec
+                       pure (GeometryInstanceFlagBitsKHR v)))
+
+
+-- | VkGeometryFlagBitsKHR - Bitmask specifying additional parameters for a
+-- geometry
+--
+-- = See Also
+--
+-- 'GeometryFlagsKHR'
+newtype GeometryFlagBitsKHR = GeometryFlagBitsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'GEOMETRY_OPAQUE_BIT_KHR' indicates that this geometry does not invoke
+-- the any-hit shaders even if present in a hit group.
+pattern GEOMETRY_OPAQUE_BIT_KHR = GeometryFlagBitsKHR 0x00000001
+-- | 'GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR' indicates that the
+-- implementation /must/ only call the any-hit shader a single time for
+-- each primitive in this geometry. If this bit is absent an implementation
+-- /may/ invoke the any-hit shader more than once for this geometry.
+pattern GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = GeometryFlagBitsKHR 0x00000002
+
+type GeometryFlagsKHR = GeometryFlagBitsKHR
+
+instance Show GeometryFlagBitsKHR where
+  showsPrec p = \case
+    GEOMETRY_OPAQUE_BIT_KHR -> showString "GEOMETRY_OPAQUE_BIT_KHR"
+    GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR -> showString "GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR"
+    GeometryFlagBitsKHR x -> showParen (p >= 11) (showString "GeometryFlagBitsKHR 0x" . showHex x)
+
+instance Read GeometryFlagBitsKHR where
+  readPrec = parens (choose [("GEOMETRY_OPAQUE_BIT_KHR", pure GEOMETRY_OPAQUE_BIT_KHR)
+                            , ("GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR", pure GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "GeometryFlagBitsKHR")
+                       v <- step readPrec
+                       pure (GeometryFlagBitsKHR v)))
+
+
+-- | VkBuildAccelerationStructureFlagBitsKHR - Bitmask specifying additional
+-- parameters for acceleration structure builds
+--
+-- = Description
+--
+-- Note
+--
+-- 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' and
+-- 'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' /may/ take more
+-- time and memory than a normal build, and so /should/ only be used when
+-- those features are needed.
+--
+-- = See Also
+--
+-- 'BuildAccelerationStructureFlagsKHR'
+newtype BuildAccelerationStructureFlagBitsKHR = BuildAccelerationStructureFlagBitsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' indicates that the
+-- specified acceleration structure /can/ be updated with @update@ of
+-- 'Vulkan.Core10.BaseType.TRUE' in 'cmdBuildAccelerationStructureKHR' or
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV' .
+pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000001
+-- | 'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' indicates that
+-- the specified acceleration structure /can/ act as the source for a copy
+-- acceleration structure command with @mode@ of
+-- 'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' to produce a compacted
+-- acceleration structure.
+pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000002
+-- | 'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR' indicates that
+-- the given acceleration structure build /should/ prioritize trace
+-- performance over build time.
+pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000004
+-- | 'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR' indicates that
+-- the given acceleration structure build /should/ prioritize build time
+-- over trace performance.
+pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000008
+-- | 'BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR' indicates that this
+-- acceleration structure /should/ minimize the size of the scratch memory
+-- and the final result build, potentially at the expense of build time or
+-- trace performance.
+pattern BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000010
+
+type BuildAccelerationStructureFlagsKHR = BuildAccelerationStructureFlagBitsKHR
+
+instance Show BuildAccelerationStructureFlagBitsKHR where
+  showsPrec p = \case
+    BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR -> showString "BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR"
+    BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR -> showString "BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR"
+    BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR -> showString "BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR"
+    BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR -> showString "BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR"
+    BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR -> showString "BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR"
+    BuildAccelerationStructureFlagBitsKHR x -> showParen (p >= 11) (showString "BuildAccelerationStructureFlagBitsKHR 0x" . showHex x)
+
+instance Read BuildAccelerationStructureFlagBitsKHR where
+  readPrec = parens (choose [("BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR", pure BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR)
+                            , ("BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR", pure BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR)
+                            , ("BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR", pure BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR)
+                            , ("BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR", pure BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR)
+                            , ("BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR", pure BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "BuildAccelerationStructureFlagBitsKHR")
+                       v <- step readPrec
+                       pure (BuildAccelerationStructureFlagBitsKHR v)))
+
+
+-- | VkCopyAccelerationStructureModeKHR - Acceleration structure copy mode
+--
+-- = See Also
+--
+-- 'CopyAccelerationStructureInfoKHR',
+-- 'CopyAccelerationStructureToMemoryInfoKHR',
+-- 'CopyMemoryToAccelerationStructureInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdCopyAccelerationStructureNV'
+newtype CopyAccelerationStructureModeKHR = CopyAccelerationStructureModeKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR' creates a direct copy of
+-- the acceleration structure specified in @src@ into the one specified by
+-- @dst@. The @dst@ acceleration structure /must/ have been created with
+-- the same parameters as @src@.
+pattern COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR = CopyAccelerationStructureModeKHR 0
+-- | 'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' creates a more compact
+-- version of an acceleration structure @src@ into @dst@. The acceleration
+-- structure @dst@ /must/ have been created with a @compactedSize@
+-- corresponding to the one returned by
+-- 'cmdWriteAccelerationStructuresPropertiesKHR' after the build of the
+-- acceleration structure specified by @src@.
+pattern COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR = CopyAccelerationStructureModeKHR 1
+-- | 'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR' serializes the
+-- acceleration structure to a semi-opaque format which can be reloaded on
+-- a compatible implementation.
+pattern COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR = CopyAccelerationStructureModeKHR 2
+-- | 'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR' deserializes the
+-- semi-opaque serialization format in the buffer to the acceleration
+-- structure.
+pattern COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = CopyAccelerationStructureModeKHR 3
+{-# complete COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR,
+             COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR,
+             COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
+             COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR :: CopyAccelerationStructureModeKHR #-}
+
+instance Show CopyAccelerationStructureModeKHR where
+  showsPrec p = \case
+    COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR -> showString "COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR"
+    COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR -> showString "COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR"
+    COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR -> showString "COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR"
+    COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR -> showString "COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR"
+    CopyAccelerationStructureModeKHR x -> showParen (p >= 11) (showString "CopyAccelerationStructureModeKHR " . showsPrec 11 x)
+
+instance Read CopyAccelerationStructureModeKHR where
+  readPrec = parens (choose [("COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR", pure COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR)
+                            , ("COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR", pure COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR)
+                            , ("COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR", pure COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR)
+                            , ("COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR", pure COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CopyAccelerationStructureModeKHR")
+                       v <- step readPrec
+                       pure (CopyAccelerationStructureModeKHR v)))
+
+
+-- | VkAccelerationStructureTypeKHR - Type of acceleration structure
+--
+-- = See Also
+--
+-- 'AccelerationStructureBuildGeometryInfoKHR',
+-- 'AccelerationStructureCreateInfoKHR'
+newtype AccelerationStructureTypeKHR = AccelerationStructureTypeKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' is a top-level acceleration
+-- structure containing instance data referring to bottom-level
+-- acceleration structures.
+pattern ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = AccelerationStructureTypeKHR 0
+-- | 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' is a bottom-level
+-- acceleration structure containing the AABBs or geometry to be
+-- intersected.
+pattern ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = AccelerationStructureTypeKHR 1
+{-# complete ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR,
+             ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR :: AccelerationStructureTypeKHR #-}
+
+instance Show AccelerationStructureTypeKHR where
+  showsPrec p = \case
+    ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR -> showString "ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR"
+    ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR -> showString "ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR"
+    AccelerationStructureTypeKHR x -> showParen (p >= 11) (showString "AccelerationStructureTypeKHR " . showsPrec 11 x)
+
+instance Read AccelerationStructureTypeKHR where
+  readPrec = parens (choose [("ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR", pure ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR)
+                            , ("ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR", pure ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "AccelerationStructureTypeKHR")
+                       v <- step readPrec
+                       pure (AccelerationStructureTypeKHR v)))
+
+
+-- | VkGeometryTypeKHR - Enum specifying which type of geometry is provided
+--
+-- = See Also
+--
+-- 'AccelerationStructureCreateGeometryTypeInfoKHR',
+-- 'AccelerationStructureGeometryKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryNV'
+newtype GeometryTypeKHR = GeometryTypeKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'GEOMETRY_TYPE_TRIANGLES_KHR' specifies a geometry type consisting of
+-- triangles.
+pattern GEOMETRY_TYPE_TRIANGLES_KHR = GeometryTypeKHR 0
+-- | 'GEOMETRY_TYPE_AABBS_KHR' specifies a geometry type consisting of
+-- axis-aligned bounding boxes.
+pattern GEOMETRY_TYPE_AABBS_KHR = GeometryTypeKHR 1
+-- | 'GEOMETRY_TYPE_INSTANCES_KHR' specifies a geometry type consisting of
+-- acceleration structure instances.
+pattern GEOMETRY_TYPE_INSTANCES_KHR = GeometryTypeKHR 1000150000
+{-# complete GEOMETRY_TYPE_TRIANGLES_KHR,
+             GEOMETRY_TYPE_AABBS_KHR,
+             GEOMETRY_TYPE_INSTANCES_KHR :: GeometryTypeKHR #-}
+
+instance Show GeometryTypeKHR where
+  showsPrec p = \case
+    GEOMETRY_TYPE_TRIANGLES_KHR -> showString "GEOMETRY_TYPE_TRIANGLES_KHR"
+    GEOMETRY_TYPE_AABBS_KHR -> showString "GEOMETRY_TYPE_AABBS_KHR"
+    GEOMETRY_TYPE_INSTANCES_KHR -> showString "GEOMETRY_TYPE_INSTANCES_KHR"
+    GeometryTypeKHR x -> showParen (p >= 11) (showString "GeometryTypeKHR " . showsPrec 11 x)
+
+instance Read GeometryTypeKHR where
+  readPrec = parens (choose [("GEOMETRY_TYPE_TRIANGLES_KHR", pure GEOMETRY_TYPE_TRIANGLES_KHR)
+                            , ("GEOMETRY_TYPE_AABBS_KHR", pure GEOMETRY_TYPE_AABBS_KHR)
+                            , ("GEOMETRY_TYPE_INSTANCES_KHR", pure GEOMETRY_TYPE_INSTANCES_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "GeometryTypeKHR")
+                       v <- step readPrec
+                       pure (GeometryTypeKHR v)))
+
+
+-- | VkAccelerationStructureMemoryRequirementsTypeKHR - Acceleration
+-- structure memory requirement type
+--
+-- = See Also
+--
+-- 'AccelerationStructureMemoryRequirementsInfoKHR'
+newtype AccelerationStructureMemoryRequirementsTypeKHR = AccelerationStructureMemoryRequirementsTypeKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR' requests
+-- the memory requirement for the
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' backing store.
+pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR = AccelerationStructureMemoryRequirementsTypeKHR 0
+-- | 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR'
+-- requests the memory requirement for scratch space during the initial
+-- build.
+pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR = AccelerationStructureMemoryRequirementsTypeKHR 1
+-- | 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR'
+-- requests the memory requirement for scratch space during an update.
+pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR = AccelerationStructureMemoryRequirementsTypeKHR 2
+{-# complete ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR,
+             ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR,
+             ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR :: AccelerationStructureMemoryRequirementsTypeKHR #-}
+
+instance Show AccelerationStructureMemoryRequirementsTypeKHR where
+  showsPrec p = \case
+    ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR -> showString "ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR"
+    ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR -> showString "ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR"
+    ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR -> showString "ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR"
+    AccelerationStructureMemoryRequirementsTypeKHR x -> showParen (p >= 11) (showString "AccelerationStructureMemoryRequirementsTypeKHR " . showsPrec 11 x)
+
+instance Read AccelerationStructureMemoryRequirementsTypeKHR where
+  readPrec = parens (choose [("ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR", pure ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR)
+                            , ("ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR", pure ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR)
+                            , ("ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR", pure ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "AccelerationStructureMemoryRequirementsTypeKHR")
+                       v <- step readPrec
+                       pure (AccelerationStructureMemoryRequirementsTypeKHR v)))
+
+
+-- | VkAccelerationStructureBuildTypeKHR - Acceleration structure build type
+--
+-- = See Also
+--
+-- 'AccelerationStructureMemoryRequirementsInfoKHR'
+newtype AccelerationStructureBuildTypeKHR = AccelerationStructureBuildTypeKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR' requests the memory
+-- requirement for operations performed by the host.
+pattern ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = AccelerationStructureBuildTypeKHR 0
+-- | 'ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR' requests the memory
+-- requirement for operations performed by the device.
+pattern ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = AccelerationStructureBuildTypeKHR 1
+-- | 'ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR' requests the
+-- memory requirement for operations performed by either the host, or the
+-- device.
+pattern ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = AccelerationStructureBuildTypeKHR 2
+{-# complete ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR,
+             ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
+             ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR :: AccelerationStructureBuildTypeKHR #-}
+
+instance Show AccelerationStructureBuildTypeKHR where
+  showsPrec p = \case
+    ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR -> showString "ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR"
+    ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR -> showString "ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR"
+    ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR -> showString "ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR"
+    AccelerationStructureBuildTypeKHR x -> showParen (p >= 11) (showString "AccelerationStructureBuildTypeKHR " . showsPrec 11 x)
+
+instance Read AccelerationStructureBuildTypeKHR where
+  readPrec = parens (choose [("ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR", pure ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR)
+                            , ("ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR", pure ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
+                            , ("ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR", pure ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "AccelerationStructureBuildTypeKHR")
+                       v <- step readPrec
+                       pure (AccelerationStructureBuildTypeKHR v)))
+
+
+-- | VkRayTracingShaderGroupTypeKHR - Shader group types
+--
+-- = Description
+--
+-- Note
+--
+-- For current group types, the hit group type could be inferred from the
+-- presence or absence of the intersection shader, but we provide the type
+-- explicitly for future hit groups that do not have that property.
+--
+-- = See Also
+--
+-- 'RayTracingShaderGroupCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingShaderGroupCreateInfoNV'
+newtype RayTracingShaderGroupTypeKHR = RayTracingShaderGroupTypeKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' indicates a shader group
+-- with a single
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MISS_BIT_KHR', or
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CALLABLE_BIT_KHR'
+-- shader in it.
+pattern RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = RayTracingShaderGroupTypeKHR 0
+-- | 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' specifies a
+-- shader group that only hits triangles and /must/ not contain an
+-- intersection shader, only closest hit and any-hit shaders.
+pattern RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = RayTracingShaderGroupTypeKHR 1
+-- | 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' specifies a
+-- shader group that only intersects with custom geometry and /must/
+-- contain an intersection shader and /may/ contain closest hit and any-hit
+-- shaders.
+pattern RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = RayTracingShaderGroupTypeKHR 2
+{-# complete RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR,
+             RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR,
+             RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR :: RayTracingShaderGroupTypeKHR #-}
+
+instance Show RayTracingShaderGroupTypeKHR where
+  showsPrec p = \case
+    RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR -> showString "RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR"
+    RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR -> showString "RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR"
+    RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR -> showString "RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR"
+    RayTracingShaderGroupTypeKHR x -> showParen (p >= 11) (showString "RayTracingShaderGroupTypeKHR " . showsPrec 11 x)
+
+instance Read RayTracingShaderGroupTypeKHR where
+  readPrec = parens (choose [("RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR", pure RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR)
+                            , ("RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR", pure RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR)
+                            , ("RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR", pure RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "RayTracingShaderGroupTypeKHR")
+                       v <- step readPrec
+                       pure (RayTracingShaderGroupTypeKHR v)))
+
+
+type KHR_RAY_TRACING_SPEC_VERSION = 8
+
+-- No documentation found for TopLevel "VK_KHR_RAY_TRACING_SPEC_VERSION"
+pattern KHR_RAY_TRACING_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_RAY_TRACING_SPEC_VERSION = 8
+
+
+type KHR_RAY_TRACING_EXTENSION_NAME = "VK_KHR_ray_tracing"
+
+-- No documentation found for TopLevel "VK_KHR_RAY_TRACING_EXTENSION_NAME"
+pattern KHR_RAY_TRACING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_RAY_TRACING_EXTENSION_NAME = "VK_KHR_ray_tracing"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_ray_tracing.hs-boot b/src/Vulkan/Extensions/VK_KHR_ray_tracing.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_ray_tracing.hs-boot
@@ -0,0 +1,275 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_ray_tracing  ( AabbPositionsKHR
+                                             , AccelerationStructureBuildGeometryInfoKHR
+                                             , AccelerationStructureBuildOffsetInfoKHR
+                                             , AccelerationStructureCreateGeometryTypeInfoKHR
+                                             , AccelerationStructureCreateInfoKHR
+                                             , AccelerationStructureDeviceAddressInfoKHR
+                                             , AccelerationStructureGeometryAabbsDataKHR
+                                             , AccelerationStructureGeometryInstancesDataKHR
+                                             , AccelerationStructureGeometryKHR
+                                             , AccelerationStructureGeometryTrianglesDataKHR
+                                             , AccelerationStructureInstanceKHR
+                                             , AccelerationStructureMemoryRequirementsInfoKHR
+                                             , AccelerationStructureVersionKHR
+                                             , BindAccelerationStructureMemoryInfoKHR
+                                             , CopyAccelerationStructureInfoKHR
+                                             , CopyAccelerationStructureToMemoryInfoKHR
+                                             , CopyMemoryToAccelerationStructureInfoKHR
+                                             , PhysicalDeviceRayTracingFeaturesKHR
+                                             , PhysicalDeviceRayTracingPropertiesKHR
+                                             , RayTracingPipelineCreateInfoKHR
+                                             , RayTracingPipelineInterfaceCreateInfoKHR
+                                             , RayTracingShaderGroupCreateInfoKHR
+                                             , StridedBufferRegionKHR
+                                             , TraceRaysIndirectCommandKHR
+                                             , TransformMatrixKHR
+                                             , WriteDescriptorSetAccelerationStructureKHR
+                                             , CopyAccelerationStructureModeKHR
+                                             , GeometryFlagBitsKHR
+                                             , GeometryFlagsKHR
+                                             , GeometryInstanceFlagBitsKHR
+                                             , GeometryInstanceFlagsKHR
+                                             , BuildAccelerationStructureFlagBitsKHR
+                                             , BuildAccelerationStructureFlagsKHR
+                                             , AccelerationStructureTypeKHR
+                                             , GeometryTypeKHR
+                                             , RayTracingShaderGroupTypeKHR
+                                             , AccelerationStructureMemoryRequirementsTypeKHR
+                                             ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data AabbPositionsKHR
+
+instance ToCStruct AabbPositionsKHR
+instance Show AabbPositionsKHR
+
+instance FromCStruct AabbPositionsKHR
+
+
+type role AccelerationStructureBuildGeometryInfoKHR nominal
+data AccelerationStructureBuildGeometryInfoKHR (es :: [Type])
+
+instance (Extendss AccelerationStructureBuildGeometryInfoKHR es, PokeChain es) => ToCStruct (AccelerationStructureBuildGeometryInfoKHR es)
+instance Show (Chain es) => Show (AccelerationStructureBuildGeometryInfoKHR es)
+
+
+data AccelerationStructureBuildOffsetInfoKHR
+
+instance ToCStruct AccelerationStructureBuildOffsetInfoKHR
+instance Show AccelerationStructureBuildOffsetInfoKHR
+
+instance FromCStruct AccelerationStructureBuildOffsetInfoKHR
+
+
+data AccelerationStructureCreateGeometryTypeInfoKHR
+
+instance ToCStruct AccelerationStructureCreateGeometryTypeInfoKHR
+instance Show AccelerationStructureCreateGeometryTypeInfoKHR
+
+instance FromCStruct AccelerationStructureCreateGeometryTypeInfoKHR
+
+
+data AccelerationStructureCreateInfoKHR
+
+instance ToCStruct AccelerationStructureCreateInfoKHR
+instance Show AccelerationStructureCreateInfoKHR
+
+instance FromCStruct AccelerationStructureCreateInfoKHR
+
+
+data AccelerationStructureDeviceAddressInfoKHR
+
+instance ToCStruct AccelerationStructureDeviceAddressInfoKHR
+instance Show AccelerationStructureDeviceAddressInfoKHR
+
+instance FromCStruct AccelerationStructureDeviceAddressInfoKHR
+
+
+data AccelerationStructureGeometryAabbsDataKHR
+
+instance ToCStruct AccelerationStructureGeometryAabbsDataKHR
+instance Show AccelerationStructureGeometryAabbsDataKHR
+
+
+data AccelerationStructureGeometryInstancesDataKHR
+
+instance ToCStruct AccelerationStructureGeometryInstancesDataKHR
+instance Show AccelerationStructureGeometryInstancesDataKHR
+
+
+data AccelerationStructureGeometryKHR
+
+instance ToCStruct AccelerationStructureGeometryKHR
+instance Show AccelerationStructureGeometryKHR
+
+
+data AccelerationStructureGeometryTrianglesDataKHR
+
+instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR
+instance Show AccelerationStructureGeometryTrianglesDataKHR
+
+
+data AccelerationStructureInstanceKHR
+
+instance ToCStruct AccelerationStructureInstanceKHR
+instance Show AccelerationStructureInstanceKHR
+
+instance FromCStruct AccelerationStructureInstanceKHR
+
+
+data AccelerationStructureMemoryRequirementsInfoKHR
+
+instance ToCStruct AccelerationStructureMemoryRequirementsInfoKHR
+instance Show AccelerationStructureMemoryRequirementsInfoKHR
+
+instance FromCStruct AccelerationStructureMemoryRequirementsInfoKHR
+
+
+data AccelerationStructureVersionKHR
+
+instance ToCStruct AccelerationStructureVersionKHR
+instance Show AccelerationStructureVersionKHR
+
+instance FromCStruct AccelerationStructureVersionKHR
+
+
+data BindAccelerationStructureMemoryInfoKHR
+
+instance ToCStruct BindAccelerationStructureMemoryInfoKHR
+instance Show BindAccelerationStructureMemoryInfoKHR
+
+instance FromCStruct BindAccelerationStructureMemoryInfoKHR
+
+
+type role CopyAccelerationStructureInfoKHR nominal
+data CopyAccelerationStructureInfoKHR (es :: [Type])
+
+instance (Extendss CopyAccelerationStructureInfoKHR es, PokeChain es) => ToCStruct (CopyAccelerationStructureInfoKHR es)
+instance Show (Chain es) => Show (CopyAccelerationStructureInfoKHR es)
+
+instance (Extendss CopyAccelerationStructureInfoKHR es, PeekChain es) => FromCStruct (CopyAccelerationStructureInfoKHR es)
+
+
+type role CopyAccelerationStructureToMemoryInfoKHR nominal
+data CopyAccelerationStructureToMemoryInfoKHR (es :: [Type])
+
+instance (Extendss CopyAccelerationStructureToMemoryInfoKHR es, PokeChain es) => ToCStruct (CopyAccelerationStructureToMemoryInfoKHR es)
+instance Show (Chain es) => Show (CopyAccelerationStructureToMemoryInfoKHR es)
+
+
+type role CopyMemoryToAccelerationStructureInfoKHR nominal
+data CopyMemoryToAccelerationStructureInfoKHR (es :: [Type])
+
+instance (Extendss CopyMemoryToAccelerationStructureInfoKHR es, PokeChain es) => ToCStruct (CopyMemoryToAccelerationStructureInfoKHR es)
+instance Show (Chain es) => Show (CopyMemoryToAccelerationStructureInfoKHR es)
+
+
+data PhysicalDeviceRayTracingFeaturesKHR
+
+instance ToCStruct PhysicalDeviceRayTracingFeaturesKHR
+instance Show PhysicalDeviceRayTracingFeaturesKHR
+
+instance FromCStruct PhysicalDeviceRayTracingFeaturesKHR
+
+
+data PhysicalDeviceRayTracingPropertiesKHR
+
+instance ToCStruct PhysicalDeviceRayTracingPropertiesKHR
+instance Show PhysicalDeviceRayTracingPropertiesKHR
+
+instance FromCStruct PhysicalDeviceRayTracingPropertiesKHR
+
+
+type role RayTracingPipelineCreateInfoKHR nominal
+data RayTracingPipelineCreateInfoKHR (es :: [Type])
+
+instance (Extendss RayTracingPipelineCreateInfoKHR es, PokeChain es) => ToCStruct (RayTracingPipelineCreateInfoKHR es)
+instance Show (Chain es) => Show (RayTracingPipelineCreateInfoKHR es)
+
+instance (Extendss RayTracingPipelineCreateInfoKHR es, PeekChain es) => FromCStruct (RayTracingPipelineCreateInfoKHR es)
+
+
+data RayTracingPipelineInterfaceCreateInfoKHR
+
+instance ToCStruct RayTracingPipelineInterfaceCreateInfoKHR
+instance Show RayTracingPipelineInterfaceCreateInfoKHR
+
+instance FromCStruct RayTracingPipelineInterfaceCreateInfoKHR
+
+
+data RayTracingShaderGroupCreateInfoKHR
+
+instance ToCStruct RayTracingShaderGroupCreateInfoKHR
+instance Show RayTracingShaderGroupCreateInfoKHR
+
+instance FromCStruct RayTracingShaderGroupCreateInfoKHR
+
+
+data StridedBufferRegionKHR
+
+instance ToCStruct StridedBufferRegionKHR
+instance Show StridedBufferRegionKHR
+
+instance FromCStruct StridedBufferRegionKHR
+
+
+data TraceRaysIndirectCommandKHR
+
+instance ToCStruct TraceRaysIndirectCommandKHR
+instance Show TraceRaysIndirectCommandKHR
+
+instance FromCStruct TraceRaysIndirectCommandKHR
+
+
+data TransformMatrixKHR
+
+instance ToCStruct TransformMatrixKHR
+instance Show TransformMatrixKHR
+
+instance FromCStruct TransformMatrixKHR
+
+
+data WriteDescriptorSetAccelerationStructureKHR
+
+instance ToCStruct WriteDescriptorSetAccelerationStructureKHR
+instance Show WriteDescriptorSetAccelerationStructureKHR
+
+instance FromCStruct WriteDescriptorSetAccelerationStructureKHR
+
+
+data CopyAccelerationStructureModeKHR
+
+
+data GeometryFlagBitsKHR
+
+type GeometryFlagsKHR = GeometryFlagBitsKHR
+
+
+data GeometryInstanceFlagBitsKHR
+
+type GeometryInstanceFlagsKHR = GeometryInstanceFlagBitsKHR
+
+
+data BuildAccelerationStructureFlagBitsKHR
+
+type BuildAccelerationStructureFlagsKHR = BuildAccelerationStructureFlagBitsKHR
+
+
+data AccelerationStructureTypeKHR
+
+
+data GeometryTypeKHR
+
+
+data RayTracingShaderGroupTypeKHR
+
+
+data AccelerationStructureMemoryRequirementsTypeKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_relaxed_block_layout.hs b/src/Vulkan/Extensions/VK_KHR_relaxed_block_layout.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_relaxed_block_layout.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_relaxed_block_layout  ( KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION
+                                                      , pattern KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION
+                                                      , KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME
+                                                      , pattern KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME
+                                                      ) where
+
+import Data.String (IsString)
+
+type KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION"
+pattern KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION = 1
+
+
+type KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME = "VK_KHR_relaxed_block_layout"
+
+-- No documentation found for TopLevel "VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME"
+pattern KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME = "VK_KHR_relaxed_block_layout"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_sampler_mirror_clamp_to_edge.hs b/src/Vulkan/Extensions/VK_KHR_sampler_mirror_clamp_to_edge.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_sampler_mirror_clamp_to_edge.hs
@@ -0,0 +1,27 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge  ( pattern SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR
+                                                              , KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION
+                                                              , pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION
+                                                              , KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME
+                                                              , pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME
+                                                              ) where
+
+import Data.String (IsString)
+import Vulkan.Core10.Enums.SamplerAddressMode (SamplerAddressMode(SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE))
+-- No documentation found for TopLevel "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR"
+pattern SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR = SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
+
+
+type KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION"
+pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION = 3
+
+
+type KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME = "VK_KHR_sampler_mirror_clamp_to_edge"
+
+-- No documentation found for TopLevel "VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME"
+pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME = "VK_KHR_sampler_mirror_clamp_to_edge"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs b/src/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs
@@ -0,0 +1,478 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion  ( pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR
+                                                          , pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR
+                                                          , pattern STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR
+                                                          , pattern STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR
+                                                          , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR
+                                                          , pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR
+                                                          , pattern DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT
+                                                          , pattern OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR
+                                                          , pattern FORMAT_G8B8G8R8_422_UNORM_KHR
+                                                          , pattern FORMAT_B8G8R8G8_422_UNORM_KHR
+                                                          , pattern FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR
+                                                          , pattern FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR
+                                                          , pattern FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR
+                                                          , pattern FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR
+                                                          , pattern FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR
+                                                          , pattern FORMAT_R10X6_UNORM_PACK16_KHR
+                                                          , pattern FORMAT_R10X6G10X6_UNORM_2PACK16_KHR
+                                                          , pattern FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR
+                                                          , pattern FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR
+                                                          , pattern FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR
+                                                          , pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR
+                                                          , pattern FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR
+                                                          , pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR
+                                                          , pattern FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR
+                                                          , pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR
+                                                          , pattern FORMAT_R12X4_UNORM_PACK16_KHR
+                                                          , pattern FORMAT_R12X4G12X4_UNORM_2PACK16_KHR
+                                                          , pattern FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR
+                                                          , pattern FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR
+                                                          , pattern FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR
+                                                          , pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR
+                                                          , pattern FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR
+                                                          , pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR
+                                                          , pattern FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR
+                                                          , pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR
+                                                          , pattern FORMAT_G16B16G16R16_422_UNORM_KHR
+                                                          , pattern FORMAT_B16G16R16G16_422_UNORM_KHR
+                                                          , pattern FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR
+                                                          , pattern FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR
+                                                          , pattern FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR
+                                                          , pattern FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR
+                                                          , pattern FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR
+                                                          , pattern IMAGE_ASPECT_PLANE_0_BIT_KHR
+                                                          , pattern IMAGE_ASPECT_PLANE_1_BIT_KHR
+                                                          , pattern IMAGE_ASPECT_PLANE_2_BIT_KHR
+                                                          , pattern IMAGE_CREATE_DISJOINT_BIT_KHR
+                                                          , pattern FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR
+                                                          , pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR
+                                                          , pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR
+                                                          , pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR
+                                                          , pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR
+                                                          , pattern FORMAT_FEATURE_DISJOINT_BIT_KHR
+                                                          , pattern FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR
+                                                          , pattern SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR
+                                                          , pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR
+                                                          , pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR
+                                                          , pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR
+                                                          , pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR
+                                                          , pattern SAMPLER_YCBCR_RANGE_ITU_FULL_KHR
+                                                          , pattern SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR
+                                                          , pattern CHROMA_LOCATION_COSITED_EVEN_KHR
+                                                          , pattern CHROMA_LOCATION_MIDPOINT_KHR
+                                                          , createSamplerYcbcrConversionKHR
+                                                          , destroySamplerYcbcrConversionKHR
+                                                          , SamplerYcbcrConversionKHR
+                                                          , SamplerYcbcrModelConversionKHR
+                                                          , SamplerYcbcrRangeKHR
+                                                          , ChromaLocationKHR
+                                                          , SamplerYcbcrConversionInfoKHR
+                                                          , SamplerYcbcrConversionCreateInfoKHR
+                                                          , BindImagePlaneMemoryInfoKHR
+                                                          , ImagePlaneMemoryRequirementsInfoKHR
+                                                          , PhysicalDeviceSamplerYcbcrConversionFeaturesKHR
+                                                          , SamplerYcbcrConversionImageFormatPropertiesKHR
+                                                          , KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION
+                                                          , pattern KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION
+                                                          , KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME
+                                                          , pattern KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME
+                                                          , DebugReportObjectTypeEXT(..)
+                                                          ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (createSamplerYcbcrConversion)
+import Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (destroySamplerYcbcrConversion)
+import Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (BindImagePlaneMemoryInfo)
+import Vulkan.Core11.Enums.ChromaLocation (ChromaLocation)
+import Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (ImagePlaneMemoryRequirementsInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
+import Vulkan.Core11.Handles (SamplerYcbcrConversion)
+import Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionCreateInfo)
+import Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionImageFormatProperties)
+import Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (SamplerYcbcrConversionInfo)
+import Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion)
+import Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange)
+import Vulkan.Core11.Enums.ChromaLocation (ChromaLocation(CHROMA_LOCATION_COSITED_EVEN))
+import Vulkan.Core11.Enums.ChromaLocation (ChromaLocation(CHROMA_LOCATION_MIDPOINT))
+import Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_B16G16R16G16_422_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_B8G8R8G8_422_UNORM))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_DISJOINT_BIT))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT))
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlags)
+import Vulkan.Core10.Enums.FormatFeatureFlagBits (FormatFeatureFlagBits(FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G16B16G16R16_422_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G16_B16R16_2PLANE_420_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G16_B16R16_2PLANE_422_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G16_B16_R16_3PLANE_420_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G16_B16_R16_3PLANE_422_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G16_B16_R16_3PLANE_444_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G8B8G8R8_422_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G8_B8R8_2PLANE_420_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G8_B8R8_2PLANE_422_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G8_B8_R8_3PLANE_420_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G8_B8_R8_3PLANE_422_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_G8_B8_R8_3PLANE_444_UNORM))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_R10X6G10X6_UNORM_2PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_R10X6_UNORM_PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_R12X4G12X4_UNORM_2PACK16))
+import Vulkan.Core10.Enums.Format (Format(FORMAT_R12X4_UNORM_PACK16))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits(IMAGE_ASPECT_PLANE_0_BIT))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits(IMAGE_ASPECT_PLANE_1_BIT))
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlags)
+import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits(IMAGE_ASPECT_PLANE_2_BIT))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(IMAGE_CREATE_DISJOINT_BIT))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION))
+import Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY))
+import Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020))
+import Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601))
+import Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709))
+import Vulkan.Core11.Enums.SamplerYcbcrModelConversion (SamplerYcbcrModelConversion(SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY))
+import Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange(SAMPLER_YCBCR_RANGE_ITU_FULL))
+import Vulkan.Core11.Enums.SamplerYcbcrRange (SamplerYcbcrRange(SAMPLER_YCBCR_RANGE_ITU_NARROW))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO))
+import Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR"
+pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR"
+pattern STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR"
+pattern STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT
+
+
+-- No documentation found for TopLevel "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR"
+pattern OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G8B8G8R8_422_UNORM_KHR"
+pattern FORMAT_G8B8G8R8_422_UNORM_KHR = FORMAT_G8B8G8R8_422_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_B8G8R8G8_422_UNORM_KHR"
+pattern FORMAT_B8G8R8G8_422_UNORM_KHR = FORMAT_B8G8R8G8_422_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR"
+pattern FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = FORMAT_G8_B8_R8_3PLANE_420_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR"
+pattern FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = FORMAT_G8_B8R8_2PLANE_420_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR"
+pattern FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = FORMAT_G8_B8_R8_3PLANE_422_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR"
+pattern FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = FORMAT_G8_B8R8_2PLANE_422_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR"
+pattern FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = FORMAT_G8_B8_R8_3PLANE_444_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_R10X6_UNORM_PACK16_KHR"
+pattern FORMAT_R10X6_UNORM_PACK16_KHR = FORMAT_R10X6_UNORM_PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR"
+pattern FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = FORMAT_R10X6G10X6_UNORM_2PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR"
+pattern FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR"
+pattern FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR"
+pattern FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR"
+pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR"
+pattern FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR"
+pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR"
+pattern FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR"
+pattern FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_R12X4_UNORM_PACK16_KHR"
+pattern FORMAT_R12X4_UNORM_PACK16_KHR = FORMAT_R12X4_UNORM_PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR"
+pattern FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = FORMAT_R12X4G12X4_UNORM_2PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR"
+pattern FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR"
+pattern FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR"
+pattern FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR"
+pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR"
+pattern FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR"
+pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR"
+pattern FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR"
+pattern FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G16B16G16R16_422_UNORM_KHR"
+pattern FORMAT_G16B16G16R16_422_UNORM_KHR = FORMAT_G16B16G16R16_422_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_B16G16R16G16_422_UNORM_KHR"
+pattern FORMAT_B16G16R16G16_422_UNORM_KHR = FORMAT_B16G16R16G16_422_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR"
+pattern FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = FORMAT_G16_B16_R16_3PLANE_420_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR"
+pattern FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = FORMAT_G16_B16R16_2PLANE_420_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR"
+pattern FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = FORMAT_G16_B16_R16_3PLANE_422_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR"
+pattern FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = FORMAT_G16_B16R16_2PLANE_422_UNORM
+
+
+-- No documentation found for TopLevel "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR"
+pattern FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = FORMAT_G16_B16_R16_3PLANE_444_UNORM
+
+
+-- No documentation found for TopLevel "VK_IMAGE_ASPECT_PLANE_0_BIT_KHR"
+pattern IMAGE_ASPECT_PLANE_0_BIT_KHR = IMAGE_ASPECT_PLANE_0_BIT
+
+
+-- No documentation found for TopLevel "VK_IMAGE_ASPECT_PLANE_1_BIT_KHR"
+pattern IMAGE_ASPECT_PLANE_1_BIT_KHR = IMAGE_ASPECT_PLANE_1_BIT
+
+
+-- No documentation found for TopLevel "VK_IMAGE_ASPECT_PLANE_2_BIT_KHR"
+pattern IMAGE_ASPECT_PLANE_2_BIT_KHR = IMAGE_ASPECT_PLANE_2_BIT
+
+
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_DISJOINT_BIT_KHR"
+pattern IMAGE_CREATE_DISJOINT_BIT_KHR = IMAGE_CREATE_DISJOINT_BIT
+
+
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR"
+pattern FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
+
+
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR"
+pattern FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 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 FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 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 FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 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 FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
+
+
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_DISJOINT_BIT_KHR"
+pattern FORMAT_FEATURE_DISJOINT_BIT_KHR = FORMAT_FEATURE_DISJOINT_BIT
+
+
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR"
+pattern FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
+
+
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR"
+pattern SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY
+
+
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR"
+pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY
+
+
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR"
+pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
+
+
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR"
+pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
+
+
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR"
+pattern SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
+
+
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR"
+pattern SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = SAMPLER_YCBCR_RANGE_ITU_FULL
+
+
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR"
+pattern SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = SAMPLER_YCBCR_RANGE_ITU_NARROW
+
+
+-- No documentation found for TopLevel "VK_CHROMA_LOCATION_COSITED_EVEN_KHR"
+pattern CHROMA_LOCATION_COSITED_EVEN_KHR = CHROMA_LOCATION_COSITED_EVEN
+
+
+-- No documentation found for TopLevel "VK_CHROMA_LOCATION_MIDPOINT_KHR"
+pattern CHROMA_LOCATION_MIDPOINT_KHR = CHROMA_LOCATION_MIDPOINT
+
+
+-- No documentation found for TopLevel "vkCreateSamplerYcbcrConversionKHR"
+createSamplerYcbcrConversionKHR = createSamplerYcbcrConversion
+
+
+-- No documentation found for TopLevel "vkDestroySamplerYcbcrConversionKHR"
+destroySamplerYcbcrConversionKHR = destroySamplerYcbcrConversion
+
+
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionKHR"
+type SamplerYcbcrConversionKHR = SamplerYcbcrConversion
+
+
+-- No documentation found for TopLevel "VkSamplerYcbcrModelConversionKHR"
+type SamplerYcbcrModelConversionKHR = SamplerYcbcrModelConversion
+
+
+-- No documentation found for TopLevel "VkSamplerYcbcrRangeKHR"
+type SamplerYcbcrRangeKHR = SamplerYcbcrRange
+
+
+-- No documentation found for TopLevel "VkChromaLocationKHR"
+type ChromaLocationKHR = ChromaLocation
+
+
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionInfoKHR"
+type SamplerYcbcrConversionInfoKHR = SamplerYcbcrConversionInfo
+
+
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionCreateInfoKHR"
+type SamplerYcbcrConversionCreateInfoKHR = SamplerYcbcrConversionCreateInfo
+
+
+-- No documentation found for TopLevel "VkBindImagePlaneMemoryInfoKHR"
+type BindImagePlaneMemoryInfoKHR = BindImagePlaneMemoryInfo
+
+
+-- No documentation found for TopLevel "VkImagePlaneMemoryRequirementsInfoKHR"
+type ImagePlaneMemoryRequirementsInfoKHR = ImagePlaneMemoryRequirementsInfo
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR"
+type PhysicalDeviceSamplerYcbcrConversionFeaturesKHR = PhysicalDeviceSamplerYcbcrConversionFeatures
+
+
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionImageFormatPropertiesKHR"
+type SamplerYcbcrConversionImageFormatPropertiesKHR = SamplerYcbcrConversionImageFormatProperties
+
+
+type KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION = 14
+
+-- No documentation found for TopLevel "VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION"
+pattern KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION = 14
+
+
+type KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME = "VK_KHR_sampler_ycbcr_conversion"
+
+-- No documentation found for TopLevel "VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME"
+pattern KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME = "VK_KHR_sampler_ycbcr_conversion"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_separate_depth_stencil_layouts.hs b/src/Vulkan/Extensions/VK_KHR_separate_depth_stencil_layouts.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_separate_depth_stencil_layouts.hs
@@ -0,0 +1,81 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR
+                                                                , pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR
+                                                                , pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR
+                                                                , pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR
+                                                                , pattern IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR
+                                                                , pattern IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR
+                                                                , pattern IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR
+                                                                , PhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR
+                                                                , AttachmentReferenceStencilLayoutKHR
+                                                                , AttachmentDescriptionStencilLayoutKHR
+                                                                , KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION
+                                                                , pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION
+                                                                , KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME
+                                                                , pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME
+                                                                ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentDescriptionStencilLayout)
+import Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentReferenceStencilLayout)
+import Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR"
+pattern STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR = STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR"
+pattern STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT
+
+
+-- No documentation found for TopLevel "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR"
+pattern IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR = IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL
+
+
+-- No documentation found for TopLevel "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR"
+pattern IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR = IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+
+
+-- No documentation found for TopLevel "VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR"
+pattern IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR = IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
+
+
+-- No documentation found for TopLevel "VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR"
+pattern IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR = IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR"
+type PhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR = PhysicalDeviceSeparateDepthStencilLayoutsFeatures
+
+
+-- No documentation found for TopLevel "VkAttachmentReferenceStencilLayoutKHR"
+type AttachmentReferenceStencilLayoutKHR = AttachmentReferenceStencilLayout
+
+
+-- No documentation found for TopLevel "VkAttachmentDescriptionStencilLayoutKHR"
+type AttachmentDescriptionStencilLayoutKHR = AttachmentDescriptionStencilLayout
+
+
+type KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION"
+pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION = 1
+
+
+type KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME = "VK_KHR_separate_depth_stencil_layouts"
+
+-- No documentation found for TopLevel "VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME"
+pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME = "VK_KHR_separate_depth_stencil_layouts"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_atomic_int64.hs b/src/Vulkan/Extensions/VK_KHR_shader_atomic_int64.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_shader_atomic_int64.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_shader_atomic_int64  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR
+                                                     , PhysicalDeviceShaderAtomicInt64FeaturesKHR
+                                                     , KHR_SHADER_ATOMIC_INT64_SPEC_VERSION
+                                                     , pattern KHR_SHADER_ATOMIC_INT64_SPEC_VERSION
+                                                     , KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME
+                                                     , pattern KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME
+                                                     ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceShaderAtomicInt64FeaturesKHR"
+type PhysicalDeviceShaderAtomicInt64FeaturesKHR = PhysicalDeviceShaderAtomicInt64Features
+
+
+type KHR_SHADER_ATOMIC_INT64_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION"
+pattern KHR_SHADER_ATOMIC_INT64_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SHADER_ATOMIC_INT64_SPEC_VERSION = 1
+
+
+type KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME = "VK_KHR_shader_atomic_int64"
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME"
+pattern KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME = "VK_KHR_shader_atomic_int64"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_clock.hs b/src/Vulkan/Extensions/VK_KHR_shader_clock.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_shader_clock.hs
@@ -0,0 +1,108 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_shader_clock  ( PhysicalDeviceShaderClockFeaturesKHR(..)
+                                              , KHR_SHADER_CLOCK_SPEC_VERSION
+                                              , pattern KHR_SHADER_CLOCK_SPEC_VERSION
+                                              , KHR_SHADER_CLOCK_EXTENSION_NAME
+                                              , pattern KHR_SHADER_CLOCK_EXTENSION_NAME
+                                              ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR))
+-- | VkPhysicalDeviceShaderClockFeaturesKHR - Structure describing features
+-- supported by VK_KHR_shader_clock
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShaderClockFeaturesKHR' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceShaderClockFeaturesKHR' can also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderClockFeaturesKHR = PhysicalDeviceShaderClockFeaturesKHR
+  { -- | @shaderSubgroupClock@ indicates whether shaders /can/ support @Subgroup@
+    -- scoped clock reads.
+    shaderSubgroupClock :: Bool
+  , -- | @shaderDeviceClock@ indicates whether shaders /can/ support
+    -- 'Vulkan.Core10.Handles.Device' scoped clock reads.
+    shaderDeviceClock :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderClockFeaturesKHR
+
+instance ToCStruct PhysicalDeviceShaderClockFeaturesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderClockFeaturesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderSubgroupClock))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shaderDeviceClock))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShaderClockFeaturesKHR where
+  peekCStruct p = do
+    shaderSubgroupClock <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    shaderDeviceClock <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceShaderClockFeaturesKHR
+             (bool32ToBool shaderSubgroupClock) (bool32ToBool shaderDeviceClock)
+
+instance Storable PhysicalDeviceShaderClockFeaturesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderClockFeaturesKHR where
+  zero = PhysicalDeviceShaderClockFeaturesKHR
+           zero
+           zero
+
+
+type KHR_SHADER_CLOCK_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_CLOCK_SPEC_VERSION"
+pattern KHR_SHADER_CLOCK_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SHADER_CLOCK_SPEC_VERSION = 1
+
+
+type KHR_SHADER_CLOCK_EXTENSION_NAME = "VK_KHR_shader_clock"
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_CLOCK_EXTENSION_NAME"
+pattern KHR_SHADER_CLOCK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SHADER_CLOCK_EXTENSION_NAME = "VK_KHR_shader_clock"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_clock.hs-boot b/src/Vulkan/Extensions/VK_KHR_shader_clock.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_shader_clock.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_shader_clock  (PhysicalDeviceShaderClockFeaturesKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderClockFeaturesKHR
+
+instance ToCStruct PhysicalDeviceShaderClockFeaturesKHR
+instance Show PhysicalDeviceShaderClockFeaturesKHR
+
+instance FromCStruct PhysicalDeviceShaderClockFeaturesKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs b/src/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_shader_draw_parameters  ( KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION
+                                                        , pattern KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION
+                                                        , KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME
+                                                        , pattern KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME
+                                                        ) where
+
+import Data.String (IsString)
+
+type KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION"
+pattern KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION = 1
+
+
+type KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME = "VK_KHR_shader_draw_parameters"
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME"
+pattern KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME = "VK_KHR_shader_draw_parameters"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_float16_int8.hs b/src/Vulkan/Extensions/VK_KHR_shader_float16_int8.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_shader_float16_int8.hs
@@ -0,0 +1,43 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_shader_float16_int8  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR
+                                                     , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR
+                                                     , PhysicalDeviceShaderFloat16Int8FeaturesKHR
+                                                     , PhysicalDeviceFloat16Int8FeaturesKHR
+                                                     , KHR_SHADER_FLOAT16_INT8_SPEC_VERSION
+                                                     , pattern KHR_SHADER_FLOAT16_INT8_SPEC_VERSION
+                                                     , KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME
+                                                     , pattern KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME
+                                                     ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8 (PhysicalDeviceShaderFloat16Int8Features)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceShaderFloat16Int8FeaturesKHR"
+type PhysicalDeviceShaderFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceFloat16Int8FeaturesKHR"
+type PhysicalDeviceFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features
+
+
+type KHR_SHADER_FLOAT16_INT8_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION"
+pattern KHR_SHADER_FLOAT16_INT8_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SHADER_FLOAT16_INT8_SPEC_VERSION = 1
+
+
+type KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME = "VK_KHR_shader_float16_int8"
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME"
+pattern KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME = "VK_KHR_shader_float16_int8"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_float_controls.hs b/src/Vulkan/Extensions/VK_KHR_shader_float_controls.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_shader_float_controls.hs
@@ -0,0 +1,57 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_shader_float_controls  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR
+                                                       , pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR
+                                                       , pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR
+                                                       , pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR
+                                                       , ShaderFloatControlsIndependenceKHR
+                                                       , PhysicalDeviceFloatControlsPropertiesKHR
+                                                       , KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION
+                                                       , pattern KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION
+                                                       , KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME
+                                                       , pattern KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME
+                                                       ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls (PhysicalDeviceFloatControlsProperties)
+import Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence)
+import Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence(SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY))
+import Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence(SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL))
+import Vulkan.Core12.Enums.ShaderFloatControlsIndependence (ShaderFloatControlsIndependence(SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR"
+pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR = SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY
+
+
+-- No documentation found for TopLevel "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR"
+pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
+
+
+-- No documentation found for TopLevel "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR"
+pattern SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE
+
+
+-- No documentation found for TopLevel "VkShaderFloatControlsIndependenceKHR"
+type ShaderFloatControlsIndependenceKHR = ShaderFloatControlsIndependence
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceFloatControlsPropertiesKHR"
+type PhysicalDeviceFloatControlsPropertiesKHR = PhysicalDeviceFloatControlsProperties
+
+
+type KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION = 4
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION"
+pattern KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION = 4
+
+
+type KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME = "VK_KHR_shader_float_controls"
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME"
+pattern KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME = "VK_KHR_shader_float_controls"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_non_semantic_info.hs b/src/Vulkan/Extensions/VK_KHR_shader_non_semantic_info.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_shader_non_semantic_info.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_shader_non_semantic_info  ( KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION
+                                                          , pattern KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION
+                                                          , KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME
+                                                          , pattern KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME
+                                                          ) where
+
+import Data.String (IsString)
+
+type KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION"
+pattern KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION = 1
+
+
+type KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME = "VK_KHR_shader_non_semantic_info"
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME"
+pattern KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME = "VK_KHR_shader_non_semantic_info"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_shader_subgroup_extended_types.hs b/src/Vulkan/Extensions/VK_KHR_shader_subgroup_extended_types.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_shader_subgroup_extended_types.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_shader_subgroup_extended_types  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR
+                                                                , PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR
+                                                                , KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION
+                                                                , pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION
+                                                                , KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME
+                                                                , pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME
+                                                                ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types (PhysicalDeviceShaderSubgroupExtendedTypesFeatures)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR"
+type PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR = PhysicalDeviceShaderSubgroupExtendedTypesFeatures
+
+
+type KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION"
+pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION = 1
+
+
+type KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME = "VK_KHR_shader_subgroup_extended_types"
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME"
+pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME = "VK_KHR_shader_subgroup_extended_types"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs b/src/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs
@@ -0,0 +1,187 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_shared_presentable_image  ( getSwapchainStatusKHR
+                                                          , SharedPresentSurfaceCapabilitiesKHR(..)
+                                                          , KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION
+                                                          , pattern KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION
+                                                          , KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME
+                                                          , pattern KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME
+                                                          , SwapchainKHR(..)
+                                                          , PresentModeKHR(..)
+                                                          ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetSwapchainStatusKHR))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SwapchainKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR(..))
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetSwapchainStatusKHR
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> IO Result) -> Ptr Device_T -> SwapchainKHR -> IO Result
+
+-- | vkGetSwapchainStatusKHR - Get a swapchain’s status
+--
+-- = Parameters
+--
+-- -   @device@ is the device associated with @swapchain@.
+--
+-- -   @swapchain@ is the swapchain to query.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.SUBOPTIMAL_KHR'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Extensions.Handles.SwapchainKHR'
+getSwapchainStatusKHR :: forall io . MonadIO io => Device -> SwapchainKHR -> io (Result)
+getSwapchainStatusKHR device swapchain = liftIO $ do
+  let vkGetSwapchainStatusKHRPtr = pVkGetSwapchainStatusKHR (deviceCmds (device :: Device))
+  unless (vkGetSwapchainStatusKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetSwapchainStatusKHR is null" Nothing Nothing
+  let vkGetSwapchainStatusKHR' = mkVkGetSwapchainStatusKHR vkGetSwapchainStatusKHRPtr
+  r <- vkGetSwapchainStatusKHR' (deviceHandle (device)) (swapchain)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+-- | VkSharedPresentSurfaceCapabilitiesKHR - structure describing
+-- capabilities of a surface for shared presentation
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SharedPresentSurfaceCapabilitiesKHR = SharedPresentSurfaceCapabilitiesKHR
+  { -- | @sharedPresentSupportedUsageFlags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' representing
+    -- the ways the application /can/ use the shared presentable image from a
+    -- swapchain created with 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR'
+    -- set to
+    -- 'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'
+    -- or
+    -- 'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR'
+    -- for the surface on the specified device.
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
+    -- /must/ be included in the set but implementations /may/ support
+    -- additional usages.
+    sharedPresentSupportedUsageFlags :: ImageUsageFlags }
+  deriving (Typeable)
+deriving instance Show SharedPresentSurfaceCapabilitiesKHR
+
+instance ToCStruct SharedPresentSurfaceCapabilitiesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SharedPresentSurfaceCapabilitiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageUsageFlags)) (sharedPresentSupportedUsageFlags)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct SharedPresentSurfaceCapabilitiesKHR where
+  peekCStruct p = do
+    sharedPresentSupportedUsageFlags <- peek @ImageUsageFlags ((p `plusPtr` 16 :: Ptr ImageUsageFlags))
+    pure $ SharedPresentSurfaceCapabilitiesKHR
+             sharedPresentSupportedUsageFlags
+
+instance Storable SharedPresentSurfaceCapabilitiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SharedPresentSurfaceCapabilitiesKHR where
+  zero = SharedPresentSurfaceCapabilitiesKHR
+           zero
+
+
+type KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION"
+pattern KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION = 1
+
+
+type KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME = "VK_KHR_shared_presentable_image"
+
+-- No documentation found for TopLevel "VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME"
+pattern KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME = "VK_KHR_shared_presentable_image"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs-boot b/src/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_shared_presentable_image  (SharedPresentSurfaceCapabilitiesKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data SharedPresentSurfaceCapabilitiesKHR
+
+instance ToCStruct SharedPresentSurfaceCapabilitiesKHR
+instance Show SharedPresentSurfaceCapabilitiesKHR
+
+instance FromCStruct SharedPresentSurfaceCapabilitiesKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_spirv_1_4.hs b/src/Vulkan/Extensions/VK_KHR_spirv_1_4.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_spirv_1_4.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_spirv_1_4  ( KHR_SPIRV_1_4_SPEC_VERSION
+                                           , pattern KHR_SPIRV_1_4_SPEC_VERSION
+                                           , KHR_SPIRV_1_4_EXTENSION_NAME
+                                           , pattern KHR_SPIRV_1_4_EXTENSION_NAME
+                                           ) where
+
+import Data.String (IsString)
+
+type KHR_SPIRV_1_4_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SPIRV_1_4_SPEC_VERSION"
+pattern KHR_SPIRV_1_4_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SPIRV_1_4_SPEC_VERSION = 1
+
+
+type KHR_SPIRV_1_4_EXTENSION_NAME = "VK_KHR_spirv_1_4"
+
+-- No documentation found for TopLevel "VK_KHR_SPIRV_1_4_EXTENSION_NAME"
+pattern KHR_SPIRV_1_4_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SPIRV_1_4_EXTENSION_NAME = "VK_KHR_spirv_1_4"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_storage_buffer_storage_class.hs b/src/Vulkan/Extensions/VK_KHR_storage_buffer_storage_class.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_storage_buffer_storage_class.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_storage_buffer_storage_class  ( KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION
+                                                              , pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION
+                                                              , KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME
+                                                              , pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME
+                                                              ) where
+
+import Data.String (IsString)
+
+type KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION"
+pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION = 1
+
+
+type KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME = "VK_KHR_storage_buffer_storage_class"
+
+-- No documentation found for TopLevel "VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME"
+pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME = "VK_KHR_storage_buffer_storage_class"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_surface.hs b/src/Vulkan/Extensions/VK_KHR_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_surface.hs
@@ -0,0 +1,1268 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_surface  ( destroySurfaceKHR
+                                         , getPhysicalDeviceSurfaceSupportKHR
+                                         , getPhysicalDeviceSurfaceCapabilitiesKHR
+                                         , getPhysicalDeviceSurfaceFormatsKHR
+                                         , getPhysicalDeviceSurfacePresentModesKHR
+                                         , SurfaceCapabilitiesKHR(..)
+                                         , SurfaceFormatKHR(..)
+                                         , PresentModeKHR( PRESENT_MODE_IMMEDIATE_KHR
+                                                         , PRESENT_MODE_MAILBOX_KHR
+                                                         , PRESENT_MODE_FIFO_KHR
+                                                         , PRESENT_MODE_FIFO_RELAXED_KHR
+                                                         , PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
+                                                         , PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR
+                                                         , ..
+                                                         )
+                                         , ColorSpaceKHR( COLOR_SPACE_SRGB_NONLINEAR_KHR
+                                                        , COLOR_SPACE_DISPLAY_NATIVE_AMD
+                                                        , COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT
+                                                        , COLOR_SPACE_PASS_THROUGH_EXT
+                                                        , COLOR_SPACE_ADOBERGB_NONLINEAR_EXT
+                                                        , COLOR_SPACE_ADOBERGB_LINEAR_EXT
+                                                        , COLOR_SPACE_HDR10_HLG_EXT
+                                                        , COLOR_SPACE_DOLBYVISION_EXT
+                                                        , COLOR_SPACE_HDR10_ST2084_EXT
+                                                        , COLOR_SPACE_BT2020_LINEAR_EXT
+                                                        , COLOR_SPACE_BT709_NONLINEAR_EXT
+                                                        , COLOR_SPACE_BT709_LINEAR_EXT
+                                                        , COLOR_SPACE_DCI_P3_NONLINEAR_EXT
+                                                        , COLOR_SPACE_DISPLAY_P3_LINEAR_EXT
+                                                        , COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT
+                                                        , COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT
+                                                        , ..
+                                                        )
+                                         , CompositeAlphaFlagBitsKHR( COMPOSITE_ALPHA_OPAQUE_BIT_KHR
+                                                                    , COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR
+                                                                    , COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR
+                                                                    , COMPOSITE_ALPHA_INHERIT_BIT_KHR
+                                                                    , ..
+                                                                    )
+                                         , CompositeAlphaFlagsKHR
+                                         , SurfaceTransformFlagBitsKHR( SURFACE_TRANSFORM_IDENTITY_BIT_KHR
+                                                                      , SURFACE_TRANSFORM_ROTATE_90_BIT_KHR
+                                                                      , SURFACE_TRANSFORM_ROTATE_180_BIT_KHR
+                                                                      , SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
+                                                                      , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR
+                                                                      , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR
+                                                                      , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR
+                                                                      , SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR
+                                                                      , SURFACE_TRANSFORM_INHERIT_BIT_KHR
+                                                                      , ..
+                                                                      )
+                                         , SurfaceTransformFlagsKHR
+                                         , KHR_SURFACE_SPEC_VERSION
+                                         , pattern KHR_SURFACE_SPEC_VERSION
+                                         , KHR_SURFACE_EXTENSION_NAME
+                                         , pattern KHR_SURFACE_EXTENSION_NAME
+                                         , SurfaceKHR(..)
+                                         ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Bool32(..))
+import Vulkan.Core10.SharedTypes (Extent2D)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkDestroySurfaceKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceCapabilitiesKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceFormatsKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfacePresentModesKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSurfaceSupportKHR))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroySurfaceKHR
+  :: FunPtr (Ptr Instance_T -> SurfaceKHR -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> SurfaceKHR -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroySurfaceKHR - Destroy a VkSurfaceKHR object
+--
+-- = 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- = Description
+--
+-- Destroying a 'Vulkan.Extensions.Handles.SurfaceKHR' 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 'Vulkan.Extensions.Handles.SwapchainKHR' objects created for
+--     @surface@ /must/ have been destroyed prior to destroying @surface@
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @surface@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @surface@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   If @surface@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @surface@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @instance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @surface@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance', 'Vulkan.Extensions.Handles.SurfaceKHR'
+destroySurfaceKHR :: forall io . MonadIO io => Instance -> SurfaceKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroySurfaceKHR instance' surface allocator = liftIO . evalContT $ do
+  let vkDestroySurfaceKHRPtr = pVkDestroySurfaceKHR (instanceCmds (instance' :: Instance))
+  lift $ unless (vkDestroySurfaceKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroySurfaceKHR is null" Nothing Nothing
+  let vkDestroySurfaceKHR' = mkVkDestroySurfaceKHR vkDestroySurfaceKHRPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroySurfaceKHR' (instanceHandle (instance')) (surface) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSurfaceSupportKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> SurfaceKHR -> Ptr Bool32 -> IO Result) -> Ptr PhysicalDevice_T -> Word32 -> SurfaceKHR -> Ptr Bool32 -> IO Result
+
+-- | vkGetPhysicalDeviceSurfaceSupportKHR - Query if presentation is
+-- supported
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device.
+--
+-- -   @queueFamilyIndex@ is the queue family.
+--
+-- -   @surface@ is the surface.
+--
+-- -   @pSupported@ is a pointer to a 'Vulkan.Core10.BaseType.Bool32',
+--     which is set to 'Vulkan.Core10.BaseType.TRUE' to indicate support,
+--     and 'Vulkan.Core10.BaseType.FALSE' otherwise.
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
+--     returned by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
+--     for the given @physicalDevice@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle
+--
+-- -   @pSupported@ /must/ be a valid pointer to a
+--     'Vulkan.Core10.BaseType.Bool32' value
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+getPhysicalDeviceSurfaceSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> SurfaceKHR -> io (("supported" ::: Bool))
+getPhysicalDeviceSurfaceSupportKHR physicalDevice queueFamilyIndex surface = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSurfaceSupportKHRPtr = pVkGetPhysicalDeviceSurfaceSupportKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSurfaceSupportKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSurfaceSupportKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceSurfaceSupportKHR' = mkVkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHRPtr
+  pPSupported <- ContT $ bracket (callocBytes @Bool32 4) free
+  r <- lift $ vkGetPhysicalDeviceSurfaceSupportKHR' (physicalDeviceHandle (physicalDevice)) (queueFamilyIndex) (surface) (pPSupported)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSupported <- lift $ peek @Bool32 pPSupported
+  pure $ ((bool32ToBool pSupported))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSurfaceCapabilitiesKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr SurfaceCapabilitiesKHR -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr SurfaceCapabilitiesKHR -> IO Result
+
+-- | vkGetPhysicalDeviceSurfaceCapabilitiesKHR - Query surface capabilities
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @surface@ is the surface that will be associated with the swapchain.
+--
+-- -   @pSurfaceCapabilities@ is a pointer to a 'SurfaceCapabilitiesKHR'
+--     structure in which the capabilities are returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle
+--
+-- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a
+--     'SurfaceCapabilitiesKHR' structure
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'SurfaceCapabilitiesKHR',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+getPhysicalDeviceSurfaceCapabilitiesKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (SurfaceCapabilitiesKHR)
+getPhysicalDeviceSurfaceCapabilitiesKHR physicalDevice surface = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSurfaceCapabilitiesKHRPtr = pVkGetPhysicalDeviceSurfaceCapabilitiesKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSurfaceCapabilitiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSurfaceCapabilitiesKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceSurfaceCapabilitiesKHR' = mkVkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHRPtr
+  pPSurfaceCapabilities <- ContT (withZeroCStruct @SurfaceCapabilitiesKHR)
+  r <- lift $ vkGetPhysicalDeviceSurfaceCapabilitiesKHR' (physicalDeviceHandle (physicalDevice)) (surface) (pPSurfaceCapabilities)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurfaceCapabilities <- lift $ peekCStruct @SurfaceCapabilitiesKHR pPSurfaceCapabilities
+  pure $ (pSurfaceCapabilities)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSurfaceFormatsKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr SurfaceFormatKHR -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr SurfaceFormatKHR -> IO Result
+
+-- | vkGetPhysicalDeviceSurfaceFormatsKHR - Query color formats supported by
+-- surface
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @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
+--     'SurfaceFormatKHR' structures.
+--
+-- = Description
+--
+-- If @pSurfaceFormats@ is @NULL@, then the number of format pairs
+-- supported for the given @surface@ is returned in @pSurfaceFormatCount@.
+-- 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@,
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.SUCCESS' to indicate that not all the
+-- available values were returned.
+--
+-- The number of format pairs supported /must/ be greater than or equal to
+-- 1. @pSurfaceFormats@ /must/ not contain an entry whose value for
+-- @format@ is 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'.
+--
+-- If @pSurfaceFormats@ includes an entry whose value for @colorSpace@ is
+-- 'COLOR_SPACE_SRGB_NONLINEAR_KHR' and whose value for @format@ is a UNORM
+-- (or SRGB) format and the corresponding SRGB (or UNORM) format is a color
+-- renderable format for
+-- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then
+-- @pSurfaceFormats@ /must/ also contain an entry with the same value for
+-- @colorSpace@ and @format@ equal to the corresponding SRGB (or UNORM)
+-- format.
+--
+-- == Valid Usage
+--
+-- -   @surface@ /must/ be supported by @physicalDevice@, as reported by
+--     'getPhysicalDeviceSurfaceSupportKHR' or an equivalent
+--     platform-specific mechanism
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     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@ 'SurfaceFormatKHR'
+--     structures
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'SurfaceFormatKHR',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+getPhysicalDeviceSurfaceFormatsKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (Result, ("surfaceFormats" ::: Vector SurfaceFormatKHR))
+getPhysicalDeviceSurfaceFormatsKHR physicalDevice surface = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSurfaceFormatsKHRPtr = pVkGetPhysicalDeviceSurfaceFormatsKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSurfaceFormatsKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSurfaceFormatsKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceSurfaceFormatsKHR' = mkVkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPSurfaceFormatCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceSurfaceFormatsKHR' physicalDevice' (surface) (pPSurfaceFormatCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurfaceFormatCount <- lift $ peek @Word32 pPSurfaceFormatCount
+  pPSurfaceFormats <- ContT $ bracket (callocBytes @SurfaceFormatKHR ((fromIntegral (pSurfaceFormatCount)) * 8)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPSurfaceFormats `advancePtrBytes` (i * 8) :: Ptr SurfaceFormatKHR) . ($ ())) [0..(fromIntegral (pSurfaceFormatCount)) - 1]
+  r' <- lift $ vkGetPhysicalDeviceSurfaceFormatsKHR' physicalDevice' (surface) (pPSurfaceFormatCount) ((pPSurfaceFormats))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pSurfaceFormatCount' <- lift $ peek @Word32 pPSurfaceFormatCount
+  pSurfaceFormats' <- lift $ generateM (fromIntegral (pSurfaceFormatCount')) (\i -> peekCStruct @SurfaceFormatKHR (((pPSurfaceFormats) `advancePtrBytes` (8 * (i)) :: Ptr SurfaceFormatKHR)))
+  pure $ ((r'), pSurfaceFormats')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSurfacePresentModesKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr PresentModeKHR -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr PresentModeKHR -> IO Result
+
+-- | vkGetPhysicalDeviceSurfacePresentModesKHR - Query supported presentation
+-- modes
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.
+--
+-- -   @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
+--     'PresentModeKHR' values, indicating the supported presentation
+--     modes.
+--
+-- = 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@, 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
+-- instead of 'Vulkan.Core10.Enums.Result.SUCCESS' to indicate that not all
+-- the available values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     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@ 'PresentModeKHR' values
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PresentModeKHR',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+getPhysicalDeviceSurfacePresentModesKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (Result, ("presentModes" ::: Vector PresentModeKHR))
+getPhysicalDeviceSurfacePresentModesKHR physicalDevice surface = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSurfacePresentModesKHRPtr = pVkGetPhysicalDeviceSurfacePresentModesKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSurfacePresentModesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSurfacePresentModesKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceSurfacePresentModesKHR' = mkVkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPPresentModeCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceSurfacePresentModesKHR' physicalDevice' (surface) (pPPresentModeCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPresentModeCount <- lift $ peek @Word32 pPPresentModeCount
+  pPPresentModes <- ContT $ bracket (callocBytes @PresentModeKHR ((fromIntegral (pPresentModeCount)) * 4)) free
+  r' <- lift $ vkGetPhysicalDeviceSurfacePresentModesKHR' physicalDevice' (surface) (pPPresentModeCount) (pPPresentModes)
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPresentModeCount' <- lift $ peek @Word32 pPPresentModeCount
+  pPresentModes' <- lift $ generateM (fromIntegral (pPresentModeCount')) (\i -> peek @PresentModeKHR ((pPPresentModes `advancePtrBytes` (4 * (i)) :: Ptr PresentModeKHR)))
+  pure $ ((r'), pPresentModes')
+
+
+-- | VkSurfaceCapabilitiesKHR - Structure describing capabilities of a
+-- surface
+--
+-- = Description
+--
+-- Note
+--
+-- Supported usage flags of a presentable image when using
+-- 'PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR' or
+-- 'PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR' presentation mode are
+-- provided by
+-- 'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@.
+--
+-- Note
+--
+-- Formulas such as min(N, @maxImageCount@) are not correct, since
+-- @maxImageCount@ /may/ be zero.
+--
+-- = See Also
+--
+-- 'CompositeAlphaFlagsKHR', 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR',
+-- 'SurfaceTransformFlagBitsKHR', 'SurfaceTransformFlagsKHR',
+-- 'getPhysicalDeviceSurfaceCapabilitiesKHR'
+data SurfaceCapabilitiesKHR = SurfaceCapabilitiesKHR
+  { -- | @minImageCount@ is the minimum number of images the specified device
+    -- supports for a swapchain created for the surface, and will be at least
+    -- one.
+    minImageCount :: Word32
+  , -- | @maxImageCount@ is the maximum number of images the specified device
+    -- supports for a swapchain created for the surface, and will be either 0,
+    -- or greater than or equal to @minImageCount@. A value of 0 means that
+    -- there is no limit on the number of images, though there /may/ be limits
+    -- related to the total amount of memory used by presentable images.
+    maxImageCount :: Word32
+  , -- | @currentExtent@ is the current width and height of the surface, or the
+    -- special value (0xFFFFFFFF, 0xFFFFFFFF) indicating that the surface size
+    -- will be determined by the extent of a swapchain targeting the surface.
+    currentExtent :: Extent2D
+  , -- | @minImageExtent@ contains the smallest valid swapchain extent for the
+    -- surface on the specified device. The @width@ and @height@ of the extent
+    -- will each be less than or equal to the corresponding @width@ and
+    -- @height@ of @currentExtent@, unless @currentExtent@ has the special
+    -- value described above.
+    minImageExtent :: Extent2D
+  , -- | @maxImageExtent@ contains the largest valid swapchain extent for the
+    -- surface on the specified device. The @width@ and @height@ of the extent
+    -- will each be greater than or equal to the corresponding @width@ and
+    -- @height@ of @minImageExtent@. The @width@ and @height@ of the extent
+    -- will each be greater than or equal to the corresponding @width@ and
+    -- @height@ of @currentExtent@, unless @currentExtent@ has the special
+    -- value described above.
+    maxImageExtent :: Extent2D
+  , -- | @maxImageArrayLayers@ is the maximum number of layers presentable images
+    -- /can/ have for a swapchain created for this device and surface, and will
+    -- be at least one.
+    maxImageArrayLayers :: Word32
+  , -- | @supportedTransforms@ is a bitmask of 'SurfaceTransformFlagBitsKHR'
+    -- indicating the presentation transforms supported for the surface on the
+    -- specified device. At least one bit will be set.
+    supportedTransforms :: SurfaceTransformFlagsKHR
+  , -- | @currentTransform@ is 'SurfaceTransformFlagBitsKHR' value indicating the
+    -- surface’s current transform relative to the presentation engine’s
+    -- natural orientation.
+    currentTransform :: SurfaceTransformFlagBitsKHR
+  , -- | @supportedCompositeAlpha@ is a bitmask of 'CompositeAlphaFlagBitsKHR',
+    -- representing the alpha compositing modes supported by the presentation
+    -- engine for the surface on the specified device, and at least one bit
+    -- will be set. Opaque composition /can/ be achieved in any alpha
+    -- compositing mode by either using an image format that has no alpha
+    -- component, or by ensuring that all pixels in the presentable images have
+    -- an alpha value of 1.0.
+    supportedCompositeAlpha :: CompositeAlphaFlagsKHR
+  , -- | @supportedUsageFlags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' representing
+    -- the ways the application /can/ use the presentable images of a swapchain
+    -- created with 'PresentModeKHR' set to 'PRESENT_MODE_IMMEDIATE_KHR',
+    -- 'PRESENT_MODE_MAILBOX_KHR', 'PRESENT_MODE_FIFO_KHR' or
+    -- 'PRESENT_MODE_FIFO_RELAXED_KHR' for the surface on the specified device.
+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
+    -- /must/ be included in the set but implementations /may/ support
+    -- additional usages.
+    supportedUsageFlags :: ImageUsageFlags
+  }
+  deriving (Typeable)
+deriving instance Show SurfaceCapabilitiesKHR
+
+instance ToCStruct SurfaceCapabilitiesKHR where
+  withCStruct x f = allocaBytesAligned 52 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfaceCapabilitiesKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (minImageCount)
+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (maxImageCount)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (currentExtent) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (minImageExtent) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (maxImageExtent) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (maxImageArrayLayers)
+    lift $ poke ((p `plusPtr` 36 :: Ptr SurfaceTransformFlagsKHR)) (supportedTransforms)
+    lift $ poke ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR)) (currentTransform)
+    lift $ poke ((p `plusPtr` 44 :: Ptr CompositeAlphaFlagsKHR)) (supportedCompositeAlpha)
+    lift $ poke ((p `plusPtr` 48 :: Ptr ImageUsageFlags)) (supportedUsageFlags)
+    lift $ f
+  cStructSize = 52
+  cStructAlignment = 4
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr Extent2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
+    lift $ f
+
+instance FromCStruct SurfaceCapabilitiesKHR where
+  peekCStruct p = do
+    minImageCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    maxImageCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    currentExtent <- peekCStruct @Extent2D ((p `plusPtr` 8 :: Ptr Extent2D))
+    minImageExtent <- peekCStruct @Extent2D ((p `plusPtr` 16 :: Ptr Extent2D))
+    maxImageExtent <- peekCStruct @Extent2D ((p `plusPtr` 24 :: Ptr Extent2D))
+    maxImageArrayLayers <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    supportedTransforms <- peek @SurfaceTransformFlagsKHR ((p `plusPtr` 36 :: Ptr SurfaceTransformFlagsKHR))
+    currentTransform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 40 :: Ptr SurfaceTransformFlagBitsKHR))
+    supportedCompositeAlpha <- peek @CompositeAlphaFlagsKHR ((p `plusPtr` 44 :: Ptr CompositeAlphaFlagsKHR))
+    supportedUsageFlags <- peek @ImageUsageFlags ((p `plusPtr` 48 :: Ptr ImageUsageFlags))
+    pure $ SurfaceCapabilitiesKHR
+             minImageCount maxImageCount currentExtent minImageExtent maxImageExtent maxImageArrayLayers supportedTransforms currentTransform supportedCompositeAlpha supportedUsageFlags
+
+instance Zero SurfaceCapabilitiesKHR where
+  zero = SurfaceCapabilitiesKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkSurfaceFormatKHR - Structure describing a supported swapchain
+-- format-color space pair
+--
+-- = See Also
+--
+-- 'ColorSpaceKHR', 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceFormat2KHR',
+-- 'getPhysicalDeviceSurfaceFormatsKHR'
+data SurfaceFormatKHR = SurfaceFormatKHR
+  { -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' that is compatible
+    -- with the specified surface.
+    format :: Format
+  , -- | @colorSpace@ is a presentation 'ColorSpaceKHR' that is compatible with
+    -- the surface.
+    colorSpace :: ColorSpaceKHR
+  }
+  deriving (Typeable)
+deriving instance Show SurfaceFormatKHR
+
+instance ToCStruct SurfaceFormatKHR where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfaceFormatKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Format)) (format)
+    poke ((p `plusPtr` 4 :: Ptr ColorSpaceKHR)) (colorSpace)
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Format)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr ColorSpaceKHR)) (zero)
+    f
+
+instance FromCStruct SurfaceFormatKHR where
+  peekCStruct p = do
+    format <- peek @Format ((p `plusPtr` 0 :: Ptr Format))
+    colorSpace <- peek @ColorSpaceKHR ((p `plusPtr` 4 :: Ptr ColorSpaceKHR))
+    pure $ SurfaceFormatKHR
+             format colorSpace
+
+instance Storable SurfaceFormatKHR where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SurfaceFormatKHR where
+  zero = SurfaceFormatKHR
+           zero
+           zero
+
+
+-- | VkPresentModeKHR - presentation mode supported for a surface
+--
+-- = Description
+--
+-- The supported
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' of the
+-- presentable images of a swapchain created for a surface /may/ differ
+-- depending on the presentation mode, and can be determined as per the
+-- table below:
+--
+-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
+-- | Presentation mode                            | Image usage flags                                                                                                           |
+-- +==============================================+=============================================================================================================================+
+-- | 'PRESENT_MODE_IMMEDIATE_KHR'                 | 'SurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                             |
+-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
+-- | 'PRESENT_MODE_MAILBOX_KHR'                   | 'SurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                             |
+-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
+-- | 'PRESENT_MODE_FIFO_KHR'                      | 'SurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                             |
+-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
+-- | 'PRESENT_MODE_FIFO_RELAXED_KHR'              | 'SurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                             |
+-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
+-- | 'PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'     | 'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@ |
+-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
+-- | 'PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR' | 'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@ |
+-- +----------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+
+--
+-- Presentable image usage queries
+--
+-- Note
+--
+-- For reference, the mode indicated by '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
+-- '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
+--
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.getPhysicalDeviceSurfacePresentModes2EXT',
+-- 'getPhysicalDeviceSurfacePresentModesKHR'
+newtype PresentModeKHR = PresentModeKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | '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.
+pattern PRESENT_MODE_IMMEDIATE_KHR = PresentModeKHR 0
+-- | '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.
+pattern PRESENT_MODE_MAILBOX_KHR = PresentModeKHR 1
+-- | '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.
+pattern PRESENT_MODE_FIFO_KHR = PresentModeKHR 2
+-- | '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.
+pattern PRESENT_MODE_FIFO_RELAXED_KHR = PresentModeKHR 3
+-- | 'PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR' specifies that the
+-- presentation engine and application have concurrent access to a single
+-- image, which is referred to as a /shared presentable image/. The
+-- presentation engine periodically updates the current image on its
+-- regular refresh cycle. The application is only required to make one
+-- initial presentation request, after which the presentation engine /must/
+-- update the current image without any need for further presentation
+-- requests. The application /can/ indicate the image contents have been
+-- updated by making a presentation request, but this does not guarantee
+-- the timing of when it will be updated. This mode /may/ result in visible
+-- tearing if rendering to the image is not timed correctly.
+pattern PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = PresentModeKHR 1000111001
+-- | 'PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR' specifies that the presentation
+-- engine and application have concurrent access to a single image, which
+-- is referred to as a /shared presentable image/. The presentation engine
+-- is only required to update the current image after a new presentation
+-- request is received. Therefore the application /must/ make a
+-- presentation request whenever an update is required. However, the
+-- presentation engine /may/ update the current image at any point, meaning
+-- this mode /may/ result in visible tearing.
+pattern PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = PresentModeKHR 1000111000
+{-# complete PRESENT_MODE_IMMEDIATE_KHR,
+             PRESENT_MODE_MAILBOX_KHR,
+             PRESENT_MODE_FIFO_KHR,
+             PRESENT_MODE_FIFO_RELAXED_KHR,
+             PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR,
+             PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR :: PresentModeKHR #-}
+
+instance Show PresentModeKHR where
+  showsPrec p = \case
+    PRESENT_MODE_IMMEDIATE_KHR -> showString "PRESENT_MODE_IMMEDIATE_KHR"
+    PRESENT_MODE_MAILBOX_KHR -> showString "PRESENT_MODE_MAILBOX_KHR"
+    PRESENT_MODE_FIFO_KHR -> showString "PRESENT_MODE_FIFO_KHR"
+    PRESENT_MODE_FIFO_RELAXED_KHR -> showString "PRESENT_MODE_FIFO_RELAXED_KHR"
+    PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR -> showString "PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR"
+    PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR -> showString "PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR"
+    PresentModeKHR x -> showParen (p >= 11) (showString "PresentModeKHR " . showsPrec 11 x)
+
+instance Read PresentModeKHR where
+  readPrec = parens (choose [("PRESENT_MODE_IMMEDIATE_KHR", pure PRESENT_MODE_IMMEDIATE_KHR)
+                            , ("PRESENT_MODE_MAILBOX_KHR", pure PRESENT_MODE_MAILBOX_KHR)
+                            , ("PRESENT_MODE_FIFO_KHR", pure PRESENT_MODE_FIFO_KHR)
+                            , ("PRESENT_MODE_FIFO_RELAXED_KHR", pure PRESENT_MODE_FIFO_RELAXED_KHR)
+                            , ("PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR", pure PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR)
+                            , ("PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR", pure PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PresentModeKHR")
+                       v <- step readPrec
+                       pure (PresentModeKHR v)))
+
+
+-- | VkColorSpaceKHR - supported color space of the presentation engine
+--
+-- = Description
+--
+-- Note
+--
+-- In the initial release of the @VK_KHR_surface@ and @VK_KHR_swapchain@
+-- extensions, the token @VK_COLORSPACE_SRGB_NONLINEAR_KHR@ was used.
+-- Starting in the 2016-05-13 updates to the extension branches, matching
+-- release 1.0.13 of the core API specification,
+-- 'COLOR_SPACE_SRGB_NONLINEAR_KHR' is used instead for consistency with
+-- Vulkan naming rules. The older enum is still available for backwards
+-- compatibility.
+--
+-- Note
+--
+-- In older versions of this extension 'COLOR_SPACE_DISPLAY_P3_LINEAR_EXT'
+-- was misnamed
+-- 'Vulkan.Extensions.VK_EXT_swapchain_colorspace.COLOR_SPACE_DCI_P3_LINEAR_EXT'.
+-- This has been updated to indicate that it uses RGB color encoding, not
+-- XYZ. The old name is deprecated but is maintained for backwards
+-- compatibility.
+--
+-- The color components of non-linear color space swap chain images /must/
+-- have had the appropriate transfer function applied. The color space
+-- selected for the swap chain image will not affect the processing of data
+-- written into the image by the implementation. Vulkan requires that all
+-- implementations support the sRGB transfer function by use of an SRGB
+-- pixel format. Other transfer functions, such as SMPTE 170M or SMPTE2084,
+-- /can/ be performed by the application shader. This extension defines
+-- enums for 'ColorSpaceKHR' that correspond to the following color spaces:
+--
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | Name         | Red      | Green    | Blue     | White-point | Transfer   |
+-- |              | Primary  | Primary  | Primary  |             | function   |
+-- +==============+==========+==========+==========+=============+============+
+-- | DCI-P3       | 1.000,   | 0.000,   | 0.000,   | 0.3333,     | DCI P3     |
+-- |              | 0.000    | 1.000    | 0.000    | 0.3333      |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | Display-P3   | 0.680,   | 0.265,   | 0.150,   | 0.3127,     | Display-P3 |
+-- |              | 0.320    | 0.690    | 0.060    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | BT709        | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | ITU (SMPTE |
+-- |              | 0.330    | 0.600    | 0.060    | 0.3290      | 170M)      |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | sRGB         | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | sRGB       |
+-- |              | 0.330    | 0.600    | 0.060    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | extended     | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | extended   |
+-- | sRGB         | 0.330    | 0.600    | 0.060    | 0.3290      | sRGB       |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | HDR10_ST2084 | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | ST2084 PQ  |
+-- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | DOLBYVISION  | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | ST2084 PQ  |
+-- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | HDR10_HLG    | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | HLG        |
+-- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | AdobeRGB     | 0.640,   | 0.210,   | 0.150,   | 0.3127,     | AdobeRGB   |
+-- |              | 0.330    | 0.710    | 0.060    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+--
+-- Color Spaces and Attributes
+--
+-- The transfer functions are described in the “Transfer Functions” chapter
+-- of the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#data-format Khronos Data Format Specification>.
+--
+-- Except Display-P3 OETF, which is:
+--
+-- \[\begin{aligned}
+-- E & =
+--   \begin{cases}
+--     1.055 \times L^{1 \over 2.4} - 0.055 & \text{for}\  0.0030186 \leq L \leq 1 \\
+--     12.92 \times L                       & \text{for}\  0 \leq L < 0.0030186
+--   \end{cases}
+-- \end{aligned}\]
+--
+-- where L is the linear value of a color channel and E is the encoded
+-- value (as stored in the image in memory).
+--
+-- Note
+--
+-- For most uses, the sRGB OETF is equivalent.
+--
+-- = See Also
+--
+-- 'SurfaceFormatKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
+newtype ColorSpaceKHR = ColorSpaceKHR Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'COLOR_SPACE_SRGB_NONLINEAR_KHR' specifies support for the sRGB color
+-- space.
+pattern COLOR_SPACE_SRGB_NONLINEAR_KHR = ColorSpaceKHR 0
+-- | 'COLOR_SPACE_DISPLAY_NATIVE_AMD' specifies support for the display’s
+-- native color space. This matches the color space expectations of AMD’s
+-- FreeSync2 standard, for displays supporting it.
+pattern COLOR_SPACE_DISPLAY_NATIVE_AMD = ColorSpaceKHR 1000213000
+-- | 'COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT' specifies support for the
+-- extended sRGB color space to be displayed using an sRGB EOTF.
+pattern COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = ColorSpaceKHR 1000104014
+-- | 'COLOR_SPACE_PASS_THROUGH_EXT' specifies that color components are used
+-- “as is”. This is intended to allow applications to supply data for color
+-- spaces not described here.
+pattern COLOR_SPACE_PASS_THROUGH_EXT = ColorSpaceKHR 1000104013
+-- | 'COLOR_SPACE_ADOBERGB_NONLINEAR_EXT' specifies support for the AdobeRGB
+-- color space to be displayed using the Gamma 2.2 EOTF.
+pattern COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = ColorSpaceKHR 1000104012
+-- | 'COLOR_SPACE_ADOBERGB_LINEAR_EXT' specifies support for the AdobeRGB
+-- color space to be displayed using a linear EOTF.
+pattern COLOR_SPACE_ADOBERGB_LINEAR_EXT = ColorSpaceKHR 1000104011
+-- | 'COLOR_SPACE_HDR10_HLG_EXT' specifies support for the HDR10 (BT2020
+-- color space) to be displayed using the Hybrid Log Gamma (HLG) EOTF.
+pattern COLOR_SPACE_HDR10_HLG_EXT = ColorSpaceKHR 1000104010
+-- | 'COLOR_SPACE_DOLBYVISION_EXT' specifies support for the Dolby Vision
+-- (BT2020 color space), proprietary encoding, to be displayed using the
+-- SMPTE ST2084 EOTF.
+pattern COLOR_SPACE_DOLBYVISION_EXT = ColorSpaceKHR 1000104009
+-- | 'COLOR_SPACE_HDR10_ST2084_EXT' specifies support for the HDR10 (BT2020
+-- color) space to be displayed using the SMPTE ST2084 Perceptual Quantizer
+-- (PQ) EOTF.
+pattern COLOR_SPACE_HDR10_ST2084_EXT = ColorSpaceKHR 1000104008
+-- | 'COLOR_SPACE_BT2020_LINEAR_EXT' specifies support for the BT2020 color
+-- space to be displayed using a linear EOTF.
+pattern COLOR_SPACE_BT2020_LINEAR_EXT = ColorSpaceKHR 1000104007
+-- | 'COLOR_SPACE_BT709_NONLINEAR_EXT' specifies support for the BT709 color
+-- space to be displayed using the SMPTE 170M EOTF.
+pattern COLOR_SPACE_BT709_NONLINEAR_EXT = ColorSpaceKHR 1000104006
+-- | 'COLOR_SPACE_BT709_LINEAR_EXT' specifies support for the BT709 color
+-- space to be displayed using a linear EOTF.
+pattern COLOR_SPACE_BT709_LINEAR_EXT = ColorSpaceKHR 1000104005
+-- | 'COLOR_SPACE_DCI_P3_NONLINEAR_EXT' specifies support for the DCI-P3
+-- color space to be displayed using the DCI-P3 EOTF. Note that values in
+-- such an image are interpreted as XYZ encoded color data by the
+-- presentation engine.
+pattern COLOR_SPACE_DCI_P3_NONLINEAR_EXT = ColorSpaceKHR 1000104004
+-- | 'COLOR_SPACE_DISPLAY_P3_LINEAR_EXT' specifies support for the Display-P3
+-- color space to be displayed using a linear EOTF.
+pattern COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = ColorSpaceKHR 1000104003
+-- | 'COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT' specifies support for the
+-- extended sRGB color space to be displayed using a linear EOTF.
+pattern COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = ColorSpaceKHR 1000104002
+-- | 'COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT' specifies support for the
+-- Display-P3 color space to be displayed using an sRGB-like EOTF (defined
+-- below).
+pattern COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = ColorSpaceKHR 1000104001
+{-# complete COLOR_SPACE_SRGB_NONLINEAR_KHR,
+             COLOR_SPACE_DISPLAY_NATIVE_AMD,
+             COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT,
+             COLOR_SPACE_PASS_THROUGH_EXT,
+             COLOR_SPACE_ADOBERGB_NONLINEAR_EXT,
+             COLOR_SPACE_ADOBERGB_LINEAR_EXT,
+             COLOR_SPACE_HDR10_HLG_EXT,
+             COLOR_SPACE_DOLBYVISION_EXT,
+             COLOR_SPACE_HDR10_ST2084_EXT,
+             COLOR_SPACE_BT2020_LINEAR_EXT,
+             COLOR_SPACE_BT709_NONLINEAR_EXT,
+             COLOR_SPACE_BT709_LINEAR_EXT,
+             COLOR_SPACE_DCI_P3_NONLINEAR_EXT,
+             COLOR_SPACE_DISPLAY_P3_LINEAR_EXT,
+             COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT,
+             COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT :: ColorSpaceKHR #-}
+
+instance Show ColorSpaceKHR where
+  showsPrec p = \case
+    COLOR_SPACE_SRGB_NONLINEAR_KHR -> showString "COLOR_SPACE_SRGB_NONLINEAR_KHR"
+    COLOR_SPACE_DISPLAY_NATIVE_AMD -> showString "COLOR_SPACE_DISPLAY_NATIVE_AMD"
+    COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT -> showString "COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT"
+    COLOR_SPACE_PASS_THROUGH_EXT -> showString "COLOR_SPACE_PASS_THROUGH_EXT"
+    COLOR_SPACE_ADOBERGB_NONLINEAR_EXT -> showString "COLOR_SPACE_ADOBERGB_NONLINEAR_EXT"
+    COLOR_SPACE_ADOBERGB_LINEAR_EXT -> showString "COLOR_SPACE_ADOBERGB_LINEAR_EXT"
+    COLOR_SPACE_HDR10_HLG_EXT -> showString "COLOR_SPACE_HDR10_HLG_EXT"
+    COLOR_SPACE_DOLBYVISION_EXT -> showString "COLOR_SPACE_DOLBYVISION_EXT"
+    COLOR_SPACE_HDR10_ST2084_EXT -> showString "COLOR_SPACE_HDR10_ST2084_EXT"
+    COLOR_SPACE_BT2020_LINEAR_EXT -> showString "COLOR_SPACE_BT2020_LINEAR_EXT"
+    COLOR_SPACE_BT709_NONLINEAR_EXT -> showString "COLOR_SPACE_BT709_NONLINEAR_EXT"
+    COLOR_SPACE_BT709_LINEAR_EXT -> showString "COLOR_SPACE_BT709_LINEAR_EXT"
+    COLOR_SPACE_DCI_P3_NONLINEAR_EXT -> showString "COLOR_SPACE_DCI_P3_NONLINEAR_EXT"
+    COLOR_SPACE_DISPLAY_P3_LINEAR_EXT -> showString "COLOR_SPACE_DISPLAY_P3_LINEAR_EXT"
+    COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT -> showString "COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT"
+    COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT -> showString "COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT"
+    ColorSpaceKHR x -> showParen (p >= 11) (showString "ColorSpaceKHR " . showsPrec 11 x)
+
+instance Read ColorSpaceKHR where
+  readPrec = parens (choose [("COLOR_SPACE_SRGB_NONLINEAR_KHR", pure COLOR_SPACE_SRGB_NONLINEAR_KHR)
+                            , ("COLOR_SPACE_DISPLAY_NATIVE_AMD", pure COLOR_SPACE_DISPLAY_NATIVE_AMD)
+                            , ("COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT", pure COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT)
+                            , ("COLOR_SPACE_PASS_THROUGH_EXT", pure COLOR_SPACE_PASS_THROUGH_EXT)
+                            , ("COLOR_SPACE_ADOBERGB_NONLINEAR_EXT", pure COLOR_SPACE_ADOBERGB_NONLINEAR_EXT)
+                            , ("COLOR_SPACE_ADOBERGB_LINEAR_EXT", pure COLOR_SPACE_ADOBERGB_LINEAR_EXT)
+                            , ("COLOR_SPACE_HDR10_HLG_EXT", pure COLOR_SPACE_HDR10_HLG_EXT)
+                            , ("COLOR_SPACE_DOLBYVISION_EXT", pure COLOR_SPACE_DOLBYVISION_EXT)
+                            , ("COLOR_SPACE_HDR10_ST2084_EXT", pure COLOR_SPACE_HDR10_ST2084_EXT)
+                            , ("COLOR_SPACE_BT2020_LINEAR_EXT", pure COLOR_SPACE_BT2020_LINEAR_EXT)
+                            , ("COLOR_SPACE_BT709_NONLINEAR_EXT", pure COLOR_SPACE_BT709_NONLINEAR_EXT)
+                            , ("COLOR_SPACE_BT709_LINEAR_EXT", pure COLOR_SPACE_BT709_LINEAR_EXT)
+                            , ("COLOR_SPACE_DCI_P3_NONLINEAR_EXT", pure COLOR_SPACE_DCI_P3_NONLINEAR_EXT)
+                            , ("COLOR_SPACE_DISPLAY_P3_LINEAR_EXT", pure COLOR_SPACE_DISPLAY_P3_LINEAR_EXT)
+                            , ("COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT", pure COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT)
+                            , ("COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT", pure COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ColorSpaceKHR")
+                       v <- step readPrec
+                       pure (ColorSpaceKHR v)))
+
+
+-- | VkCompositeAlphaFlagBitsKHR - alpha compositing modes supported on a
+-- device
+--
+-- = Description
+--
+-- These values are described as follows:
+--
+-- = See Also
+--
+-- 'CompositeAlphaFlagsKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
+newtype CompositeAlphaFlagBitsKHR = CompositeAlphaFlagBitsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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.
+pattern COMPOSITE_ALPHA_OPAQUE_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000001
+-- | '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.
+pattern COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000002
+-- | '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.
+pattern COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000004
+-- | '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.
+pattern COMPOSITE_ALPHA_INHERIT_BIT_KHR = CompositeAlphaFlagBitsKHR 0x00000008
+
+type CompositeAlphaFlagsKHR = CompositeAlphaFlagBitsKHR
+
+instance Show CompositeAlphaFlagBitsKHR where
+  showsPrec p = \case
+    COMPOSITE_ALPHA_OPAQUE_BIT_KHR -> showString "COMPOSITE_ALPHA_OPAQUE_BIT_KHR"
+    COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR -> showString "COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"
+    COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR -> showString "COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"
+    COMPOSITE_ALPHA_INHERIT_BIT_KHR -> showString "COMPOSITE_ALPHA_INHERIT_BIT_KHR"
+    CompositeAlphaFlagBitsKHR x -> showParen (p >= 11) (showString "CompositeAlphaFlagBitsKHR 0x" . showHex x)
+
+instance Read CompositeAlphaFlagBitsKHR where
+  readPrec = parens (choose [("COMPOSITE_ALPHA_OPAQUE_BIT_KHR", pure COMPOSITE_ALPHA_OPAQUE_BIT_KHR)
+                            , ("COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR", pure COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR)
+                            , ("COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR", pure COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR)
+                            , ("COMPOSITE_ALPHA_INHERIT_BIT_KHR", pure COMPOSITE_ALPHA_INHERIT_BIT_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CompositeAlphaFlagBitsKHR")
+                       v <- step readPrec
+                       pure (CompositeAlphaFlagBitsKHR v)))
+
+
+-- | VkSurfaceTransformFlagBitsKHR - presentation transforms supported on a
+-- device
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM',
+-- 'Vulkan.Extensions.VK_KHR_display.DisplaySurfaceCreateInfoKHR',
+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',
+-- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT',
+-- 'SurfaceCapabilitiesKHR', 'SurfaceTransformFlagsKHR',
+-- 'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'
+newtype SurfaceTransformFlagBitsKHR = SurfaceTransformFlagBitsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SURFACE_TRANSFORM_IDENTITY_BIT_KHR' specifies that image content is
+-- presented without being transformed.
+pattern SURFACE_TRANSFORM_IDENTITY_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000001
+-- | 'SURFACE_TRANSFORM_ROTATE_90_BIT_KHR' specifies that image content is
+-- rotated 90 degrees clockwise.
+pattern SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000002
+-- | 'SURFACE_TRANSFORM_ROTATE_180_BIT_KHR' specifies that image content is
+-- rotated 180 degrees clockwise.
+pattern SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000004
+-- | 'SURFACE_TRANSFORM_ROTATE_270_BIT_KHR' specifies that image content is
+-- rotated 270 degrees clockwise.
+pattern SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000008
+-- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR' specifies that image
+-- content is mirrored horizontally.
+pattern SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000010
+-- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR' specifies that
+-- image content is mirrored horizontally, then rotated 90 degrees
+-- clockwise.
+pattern SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000020
+-- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR' specifies that
+-- image content is mirrored horizontally, then rotated 180 degrees
+-- clockwise.
+pattern SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000040
+-- | 'SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR' specifies that
+-- image content is mirrored horizontally, then rotated 270 degrees
+-- clockwise.
+pattern SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000080
+-- | '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 SURFACE_TRANSFORM_INHERIT_BIT_KHR = SurfaceTransformFlagBitsKHR 0x00000100
+
+type SurfaceTransformFlagsKHR = SurfaceTransformFlagBitsKHR
+
+instance Show SurfaceTransformFlagBitsKHR where
+  showsPrec p = \case
+    SURFACE_TRANSFORM_IDENTITY_BIT_KHR -> showString "SURFACE_TRANSFORM_IDENTITY_BIT_KHR"
+    SURFACE_TRANSFORM_ROTATE_90_BIT_KHR -> showString "SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"
+    SURFACE_TRANSFORM_ROTATE_180_BIT_KHR -> showString "SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"
+    SURFACE_TRANSFORM_ROTATE_270_BIT_KHR -> showString "SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"
+    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR -> showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"
+    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR -> showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"
+    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR -> showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"
+    SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR -> showString "SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"
+    SURFACE_TRANSFORM_INHERIT_BIT_KHR -> showString "SURFACE_TRANSFORM_INHERIT_BIT_KHR"
+    SurfaceTransformFlagBitsKHR x -> showParen (p >= 11) (showString "SurfaceTransformFlagBitsKHR 0x" . showHex x)
+
+instance Read SurfaceTransformFlagBitsKHR where
+  readPrec = parens (choose [("SURFACE_TRANSFORM_IDENTITY_BIT_KHR", pure SURFACE_TRANSFORM_IDENTITY_BIT_KHR)
+                            , ("SURFACE_TRANSFORM_ROTATE_90_BIT_KHR", pure SURFACE_TRANSFORM_ROTATE_90_BIT_KHR)
+                            , ("SURFACE_TRANSFORM_ROTATE_180_BIT_KHR", pure SURFACE_TRANSFORM_ROTATE_180_BIT_KHR)
+                            , ("SURFACE_TRANSFORM_ROTATE_270_BIT_KHR", pure SURFACE_TRANSFORM_ROTATE_270_BIT_KHR)
+                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR", pure SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR)
+                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR", pure SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR)
+                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR", pure SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR)
+                            , ("SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR", pure SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR)
+                            , ("SURFACE_TRANSFORM_INHERIT_BIT_KHR", pure SURFACE_TRANSFORM_INHERIT_BIT_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SurfaceTransformFlagBitsKHR")
+                       v <- step readPrec
+                       pure (SurfaceTransformFlagBitsKHR v)))
+
+
+type KHR_SURFACE_SPEC_VERSION = 25
+
+-- No documentation found for TopLevel "VK_KHR_SURFACE_SPEC_VERSION"
+pattern KHR_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SURFACE_SPEC_VERSION = 25
+
+
+type KHR_SURFACE_EXTENSION_NAME = "VK_KHR_surface"
+
+-- No documentation found for TopLevel "VK_KHR_SURFACE_EXTENSION_NAME"
+pattern KHR_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SURFACE_EXTENSION_NAME = "VK_KHR_surface"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_surface.hs-boot b/src/Vulkan/Extensions/VK_KHR_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_surface.hs-boot
@@ -0,0 +1,27 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_surface  ( SurfaceCapabilitiesKHR
+                                         , SurfaceFormatKHR
+                                         , PresentModeKHR
+                                         ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data SurfaceCapabilitiesKHR
+
+instance ToCStruct SurfaceCapabilitiesKHR
+instance Show SurfaceCapabilitiesKHR
+
+instance FromCStruct SurfaceCapabilitiesKHR
+
+
+data SurfaceFormatKHR
+
+instance ToCStruct SurfaceFormatKHR
+instance Show SurfaceFormatKHR
+
+instance FromCStruct SurfaceFormatKHR
+
+
+data PresentModeKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs b/src/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs
@@ -0,0 +1,95 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_surface_protected_capabilities  ( SurfaceProtectedCapabilitiesKHR(..)
+                                                                , KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION
+                                                                , pattern KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION
+                                                                , KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME
+                                                                , pattern KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME
+                                                                ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR))
+-- | VkSurfaceProtectedCapabilitiesKHR - Structure describing capability of a
+-- surface to be protected
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data SurfaceProtectedCapabilitiesKHR = SurfaceProtectedCapabilitiesKHR
+  { -- | @supportsProtected@ specifies whether a protected swapchain created from
+    -- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'::@surface@
+    -- for a particular windowing system /can/ be displayed on screen or not.
+    -- If @supportsProtected@ is 'Vulkan.Core10.BaseType.TRUE', then creation
+    -- of swapchains with the
+    -- 'Vulkan.Extensions.VK_KHR_swapchain.SWAPCHAIN_CREATE_PROTECTED_BIT_KHR'
+    -- flag set /must/ be supported for @surface@.
+    supportsProtected :: Bool }
+  deriving (Typeable)
+deriving instance Show SurfaceProtectedCapabilitiesKHR
+
+instance ToCStruct SurfaceProtectedCapabilitiesKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SurfaceProtectedCapabilitiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (supportsProtected))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct SurfaceProtectedCapabilitiesKHR where
+  peekCStruct p = do
+    supportsProtected <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ SurfaceProtectedCapabilitiesKHR
+             (bool32ToBool supportsProtected)
+
+instance Storable SurfaceProtectedCapabilitiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SurfaceProtectedCapabilitiesKHR where
+  zero = SurfaceProtectedCapabilitiesKHR
+           zero
+
+
+type KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION"
+pattern KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION = 1
+
+
+type KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME = "VK_KHR_surface_protected_capabilities"
+
+-- No documentation found for TopLevel "VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME"
+pattern KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME = "VK_KHR_surface_protected_capabilities"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs-boot b/src/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_surface_protected_capabilities.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_surface_protected_capabilities  (SurfaceProtectedCapabilitiesKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data SurfaceProtectedCapabilitiesKHR
+
+instance ToCStruct SurfaceProtectedCapabilitiesKHR
+instance Show SurfaceProtectedCapabilitiesKHR
+
+instance FromCStruct SurfaceProtectedCapabilitiesKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_swapchain.hs b/src/Vulkan/Extensions/VK_KHR_swapchain.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_swapchain.hs
@@ -0,0 +1,2453 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_swapchain  ( createSwapchainKHR
+                                           , withSwapchainKHR
+                                           , destroySwapchainKHR
+                                           , getSwapchainImagesKHR
+                                           , acquireNextImageKHR
+                                           , queuePresentKHR
+                                           , getDeviceGroupPresentCapabilitiesKHR
+                                           , getDeviceGroupSurfacePresentModesKHR
+                                           , acquireNextImage2KHR
+                                           , getPhysicalDevicePresentRectanglesKHR
+                                           , SwapchainCreateInfoKHR(..)
+                                           , PresentInfoKHR(..)
+                                           , DeviceGroupPresentCapabilitiesKHR(..)
+                                           , ImageSwapchainCreateInfoKHR(..)
+                                           , BindImageMemorySwapchainInfoKHR(..)
+                                           , AcquireNextImageInfoKHR(..)
+                                           , DeviceGroupPresentInfoKHR(..)
+                                           , DeviceGroupSwapchainCreateInfoKHR(..)
+                                           , DeviceGroupPresentModeFlagBitsKHR( DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR
+                                                                              , DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR
+                                                                              , DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR
+                                                                              , DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR
+                                                                              , ..
+                                                                              )
+                                           , DeviceGroupPresentModeFlagsKHR
+                                           , SwapchainCreateFlagBitsKHR( SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR
+                                                                       , SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
+                                                                       , SWAPCHAIN_CREATE_PROTECTED_BIT_KHR
+                                                                       , ..
+                                                                       )
+                                           , SwapchainCreateFlagsKHR
+                                           , KHR_SWAPCHAIN_SPEC_VERSION
+                                           , pattern KHR_SWAPCHAIN_SPEC_VERSION
+                                           , KHR_SWAPCHAIN_EXTENSION_NAME
+                                           , pattern KHR_SWAPCHAIN_EXTENSION_NAME
+                                           , SurfaceKHR(..)
+                                           , SwapchainKHR(..)
+                                           , PresentModeKHR(..)
+                                           , ColorSpaceKHR(..)
+                                           , CompositeAlphaFlagBitsKHR(..)
+                                           , CompositeAlphaFlagsKHR
+                                           , SurfaceTransformFlagBitsKHR(..)
+                                           , SurfaceTransformFlagsKHR
+                                           ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Extensions.VK_KHR_surface (ColorSpaceKHR)
+import Vulkan.Extensions.VK_KHR_surface (CompositeAlphaFlagBitsKHR)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkAcquireNextImage2KHR))
+import Vulkan.Dynamic (DeviceCmds(pVkAcquireNextImageKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateSwapchainKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroySwapchainKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceGroupPresentCapabilitiesKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceGroupSurfacePresentModesKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkGetSwapchainImagesKHR))
+import Vulkan.Dynamic (DeviceCmds(pVkQueuePresentKHR))
+import Vulkan.Core10.Handles (Device_T)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_display_swapchain (DisplayPresentInfoKHR)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.SharedTypes (Extent2D)
+import Vulkan.Core10.Handles (Fence)
+import Vulkan.Core10.Handles (Fence(..))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.Handles (Image(..))
+import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_image_format_list (ImageFormatListCreateInfo)
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDevicePresentRectanglesKHR))
+import Vulkan.Core10.APIConstants (MAX_DEVICE_GROUP_SIZE)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import {-# SOURCE #-} Vulkan.Extensions.VK_GGP_frame_token (PresentFrameTokenGGP)
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_incremental_present (PresentRegionsKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_GOOGLE_display_timing (PresentTimesInfoGOOGLE)
+import Vulkan.Core10.Handles (Queue)
+import Vulkan.Core10.Handles (Queue(..))
+import Vulkan.Core10.Handles (Queue_T)
+import Vulkan.Core10.CommandBufferBuilding (Rect2D)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Handles (Semaphore)
+import Vulkan.Core10.Handles (Semaphore(..))
+import Vulkan.Core10.Enums.SharingMode (SharingMode)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_full_screen_exclusive (SurfaceFullScreenExclusiveWin32InfoEXT)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_display_control (SwapchainCounterCreateInfoEXT)
+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_display_native_hdr (SwapchainDisplayNativeHdrCreateInfoAMD)
+import Vulkan.Extensions.Handles (SwapchainKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.APIConstants (pattern MAX_DEVICE_GROUP_SIZE)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PRESENT_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.VK_KHR_surface (ColorSpaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (CompositeAlphaFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (CompositeAlphaFlagsKHR)
+import Vulkan.Extensions.VK_KHR_surface (PresentModeKHR(..))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagsKHR)
+import Vulkan.Extensions.Handles (SwapchainKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateSwapchainKHR
+  :: FunPtr (Ptr Device_T -> Ptr (SwapchainCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr SwapchainKHR -> IO Result) -> Ptr Device_T -> Ptr (SwapchainCreateInfoKHR a) -> Ptr AllocationCallbacks -> Ptr SwapchainKHR -> IO Result
+
+-- | vkCreateSwapchainKHR - Create a swapchain
+--
+-- = Parameters
+--
+-- -   @device@ is the device to create the swapchain for.
+--
+-- -   @pCreateInfo@ is a pointer to a 'SwapchainCreateInfoKHR' 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSwapchain@ is a pointer to a
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle in which the created
+--     swapchain object will be returned.
+--
+-- = Description
+--
+-- If the @oldSwapchain@ parameter of @pCreateInfo@ is a valid swapchain,
+-- which has exclusive full-screen access, that access is released from
+-- @oldSwapchain@. If the command succeeds in this case, the newly created
+-- swapchain will automatically acquire exclusive full-screen access from
+-- @oldSwapchain@.
+--
+-- Note
+--
+-- This implicit transfer is intended to avoid exiting and entering
+-- full-screen exclusive mode, which may otherwise cause unwanted visual
+-- updates to the display.
+--
+-- In some cases, swapchain creation /may/ fail if exclusive full-screen
+-- mode is requested for application control, but for some
+-- implementation-specific reason exclusive full-screen access is
+-- unavailable for the particular combination of parameters provided. If
+-- this occurs, 'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+-- will be returned.
+--
+-- Note
+--
+-- In particular, it will fail if the @imageExtent@ member of @pCreateInfo@
+-- does not match the extents of the monitor. Other reasons for failure may
+-- include the app not being set as high-dpi aware, or if the physical
+-- device and monitor are not compatible in this mode.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'SwapchainCreateInfoKHR' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSwapchain@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pCreateInfo->surface@ /must/ be externally
+--     synchronized
+--
+-- -   Host access to @pCreateInfo->oldSwapchain@ /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'SwapchainCreateInfoKHR',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+createSwapchainKHR :: forall a io . (Extendss SwapchainCreateInfoKHR a, PokeChain a, MonadIO io) => Device -> SwapchainCreateInfoKHR a -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SwapchainKHR)
+createSwapchainKHR device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateSwapchainKHRPtr = pVkCreateSwapchainKHR (deviceCmds (device :: Device))
+  lift $ unless (vkCreateSwapchainKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateSwapchainKHR is null" Nothing Nothing
+  let vkCreateSwapchainKHR' = mkVkCreateSwapchainKHR vkCreateSwapchainKHRPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSwapchain <- ContT $ bracket (callocBytes @SwapchainKHR 8) free
+  r <- lift $ vkCreateSwapchainKHR' (deviceHandle (device)) pCreateInfo pAllocator (pPSwapchain)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSwapchain <- lift $ peek @SwapchainKHR pPSwapchain
+  pure $ (pSwapchain)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createSwapchainKHR' and 'destroySwapchainKHR'
+--
+-- To ensure that 'destroySwapchainKHR' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withSwapchainKHR :: forall a io r . (Extendss SwapchainCreateInfoKHR a, PokeChain a, MonadIO io) => Device -> SwapchainCreateInfoKHR a -> Maybe AllocationCallbacks -> (io (SwapchainKHR) -> ((SwapchainKHR) -> io ()) -> r) -> r
+withSwapchainKHR device pCreateInfo pAllocator b =
+  b (createSwapchainKHR device pCreateInfo pAllocator)
+    (\(o0) -> destroySwapchainKHR device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroySwapchainKHR
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> SwapchainKHR -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroySwapchainKHR - Destroy a swapchain object
+--
+-- = Parameters
+--
+-- -   @device@ is the 'Vulkan.Core10.Handles.Device' 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- = 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 'Vulkan.Core10.Handles.Image'
+-- handles are destroyed, and /must/ not be acquired or used any more by
+-- the application. The memory of each 'Vulkan.Core10.Handles.Image' 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
+-- 'Vulkan.Extensions.Handles.SurfaceKHR', and a new swapchain /can/ be
+-- created with it.
+--
+-- When a swapchain associated with a display surface is destroyed, if the
+-- image most recently presented to the display surface is from the
+-- swapchain being destroyed, then either any display resources modified by
+-- presenting images from any swapchain associated with the display surface
+-- /must/ be reverted by the implementation to their state prior to the
+-- first present performed on one of these swapchains, or such resources
+-- /must/ be left in their current state.
+--
+-- If @swapchain@ has exclusive full-screen access, it is released before
+-- the swapchain is destroyed.
+--
+-- == Valid Usage
+--
+-- -   All uses of presentable images acquired from @swapchain@ /must/ have
+--     completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @swapchain@ was created, a compatible set of callbacks
+--     /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @swapchain@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @swapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   Both of @device@, and @swapchain@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Instance'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Extensions.Handles.SwapchainKHR'
+destroySwapchainKHR :: forall io . MonadIO io => Device -> SwapchainKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroySwapchainKHR device swapchain allocator = liftIO . evalContT $ do
+  let vkDestroySwapchainKHRPtr = pVkDestroySwapchainKHR (deviceCmds (device :: Device))
+  lift $ unless (vkDestroySwapchainKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroySwapchainKHR is null" Nothing Nothing
+  let vkDestroySwapchainKHR' = mkVkDestroySwapchainKHR vkDestroySwapchainKHRPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroySwapchainKHR' (deviceHandle (device)) (swapchain) pAllocator
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetSwapchainImagesKHR
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Ptr Word32 -> Ptr Image -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Ptr Word32 -> Ptr Image -> IO Result
+
+-- | vkGetSwapchainImagesKHR - Obtain the array of presentable images
+-- associated with a swapchain
+--
+-- = 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
+--     'Vulkan.Core10.Handles.Image' handles.
+--
+-- = 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@, 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be
+-- returned instead of 'Vulkan.Core10.Enums.Result.SUCCESS' to indicate
+-- that not all the available values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' 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@
+--     'Vulkan.Core10.Handles.Image' handles
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+getSwapchainImagesKHR :: forall io . MonadIO io => Device -> SwapchainKHR -> io (Result, ("swapchainImages" ::: Vector Image))
+getSwapchainImagesKHR device swapchain = liftIO . evalContT $ do
+  let vkGetSwapchainImagesKHRPtr = pVkGetSwapchainImagesKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetSwapchainImagesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetSwapchainImagesKHR is null" Nothing Nothing
+  let vkGetSwapchainImagesKHR' = mkVkGetSwapchainImagesKHR vkGetSwapchainImagesKHRPtr
+  let device' = deviceHandle (device)
+  pPSwapchainImageCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetSwapchainImagesKHR' device' (swapchain) (pPSwapchainImageCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSwapchainImageCount <- lift $ peek @Word32 pPSwapchainImageCount
+  pPSwapchainImages <- ContT $ bracket (callocBytes @Image ((fromIntegral (pSwapchainImageCount)) * 8)) free
+  r' <- lift $ vkGetSwapchainImagesKHR' device' (swapchain) (pPSwapchainImageCount) (pPSwapchainImages)
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pSwapchainImageCount' <- lift $ peek @Word32 pPSwapchainImageCount
+  pSwapchainImages' <- lift $ generateM (fromIntegral (pSwapchainImageCount')) (\i -> peek @Image ((pPSwapchainImages `advancePtrBytes` (8 * (i)) :: Ptr Image)))
+  pure $ ((r'), pSwapchainImages')
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkAcquireNextImageKHR
+  :: FunPtr (Ptr Device_T -> SwapchainKHR -> Word64 -> Semaphore -> Fence -> Ptr Word32 -> IO Result) -> Ptr Device_T -> SwapchainKHR -> Word64 -> Semaphore -> Fence -> Ptr Word32 -> IO Result
+
+-- | vkAcquireNextImageKHR - Retrieve the index of the next available
+-- presentable image
+--
+-- = 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 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a
+--     semaphore to signal.
+--
+-- -   @fence@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a fence to
+--     signal.
+--
+-- -   @pImageIndex@ is a pointer to a @uint32_t@ in which the index of the
+--     next image to use (i.e. an index into the array of images returned
+--     by 'getSwapchainImagesKHR') is returned.
+--
+-- == Valid Usage
+--
+-- -   @swapchain@ /must/ not be in the retired state
+--
+-- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it
+--     /must/ be unsignaled
+--
+-- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it
+--     /must/ not have any uncompleted signal or wait operations pending
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/
+--     be unsignaled and /must/ not be associated with any other queue
+--     command that has not yet completed execution on that queue
+--
+-- -   @semaphore@ and @fence@ /must/ not both be equal to
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If the number of currently acquired images is greater than the
+--     difference between the number of images in @swapchain@ and the value
+--     of
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@minImageCount@
+--     as returned by a call to
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
+--     with the @surface@ used to create @swapchain@, @timeout@ /must/ not
+--     be @UINT64_MAX@
+--
+-- -   @semaphore@ /must/ have a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'
+--     handle
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle
+--
+-- -   @pImageIndex@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   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 of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Instance'
+--
+-- == 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
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.TIMEOUT'
+--
+--     -   'Vulkan.Core10.Enums.Result.NOT_READY'
+--
+--     -   'Vulkan.Core10.Enums.Result.SUBOPTIMAL_KHR'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Fence',
+-- 'Vulkan.Core10.Handles.Semaphore',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+acquireNextImageKHR :: forall io . MonadIO io => Device -> SwapchainKHR -> ("timeout" ::: Word64) -> Semaphore -> Fence -> io (Result, ("imageIndex" ::: Word32))
+acquireNextImageKHR device swapchain timeout semaphore fence = liftIO . evalContT $ do
+  let vkAcquireNextImageKHRPtr = pVkAcquireNextImageKHR (deviceCmds (device :: Device))
+  lift $ unless (vkAcquireNextImageKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAcquireNextImageKHR is null" Nothing Nothing
+  let vkAcquireNextImageKHR' = mkVkAcquireNextImageKHR vkAcquireNextImageKHRPtr
+  pPImageIndex <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkAcquireNextImageKHR' (deviceHandle (device)) (swapchain) (timeout) (semaphore) (fence) (pPImageIndex)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pImageIndex <- lift $ peek @Word32 pPImageIndex
+  pure $ (r, pImageIndex)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkQueuePresentKHR
+  :: FunPtr (Ptr Queue_T -> Ptr (PresentInfoKHR a) -> IO Result) -> Ptr Queue_T -> Ptr (PresentInfoKHR a) -> IO Result
+
+-- | vkQueuePresentKHR - Queue an image for presentation
+--
+-- = 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 a 'PresentInfoKHR' structure
+--     specifying parameters of the presentation.
+--
+-- = 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
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR'
+--
+-- -   If more than one member of @pSwapchains@ was created from a display
+--     surface, all display surfaces referenced that refer to the same
+--     display /must/ use the same display mode
+--
+-- -   When a semaphore wait operation referring to a binary semaphore
+--     defined by the elements of the @pWaitSemaphores@ member of
+--     @pPresentInfo@ executes on @queue@, there /must/ be no other queues
+--     waiting on the same semaphore
+--
+-- -   All elements of the @pWaitSemaphores@ member of @pPresentInfo@
+--     /must/ be semaphores that are signaled, or have
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operations>
+--     previously submitted for execution
+--
+-- -   All elements of the @pWaitSemaphores@ member of @pPresentInfo@
+--     /must/ be created with a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
+--
+-- -   All elements of the @pWaitSemaphores@ member of @pPresentInfo@
+--     /must/ reference a semaphore signal operation that has been
+--     submitted for execution and any semaphore signal operations on which
+--     it depends (if any) /must/ have also been submitted for execution
+--
+-- Any writes to memory backing the images referenced by the
+-- @pImageIndices@ and @pSwapchains@ members of @pPresentInfo@, that are
+-- available before 'queuePresentKHR' 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.
+--
+-- Note
+--
+-- The origin of the native orientation of the surface coordinate system is
+-- not specified in the Vulkan specification; it depends on the platform.
+-- For most platforms the origin is by default upper-left, meaning the
+-- pixel of the presented 'Vulkan.Core10.Handles.Image' at coordinates
+-- (0,0) would appear at the upper left pixel of the platform surface
+-- (assuming
+-- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_IDENTITY_BIT_KHR',
+-- and the display standing the right way up).
+--
+-- If 'queuePresentKHR' fails to enqueue the corresponding set of queue
+-- operations, it /may/ return
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' or
+-- 'Vulkan.Core10.Enums.Result.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 'queuePresentKHR' fails in such a way that the implementation is
+-- unable to make that guarantee, the implementation /must/ return
+-- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'.
+--
+-- However, if the presentation request is rejected by the presentation
+-- engine with an error 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR',
+-- 'Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT',
+-- or 'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR', the set of queue
+-- operations are still considered to be enqueued and thus any semaphore
+-- wait operation specified in 'PresentInfoKHR' will execute when the
+-- corresponding queue operation is complete.
+--
+-- If any @swapchain@ member of @pPresentInfo@ was created with
+-- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT',
+-- 'Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
+-- will be returned if that swapchain does not have exclusive full-screen
+-- access, possibly for implementation-specific reasons outside of the
+-- application’s control.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle
+--
+-- -   @pPresentInfo@ /must/ be a valid pointer to a valid 'PresentInfoKHR'
+--     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
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   | -                                                                                                                                   |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.SUBOPTIMAL_KHR'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
+--
+-- = See Also
+--
+-- 'PresentInfoKHR', 'Vulkan.Core10.Handles.Queue'
+queuePresentKHR :: forall a io . (Extendss PresentInfoKHR a, PokeChain a, MonadIO io) => Queue -> PresentInfoKHR a -> io (Result)
+queuePresentKHR queue presentInfo = liftIO . evalContT $ do
+  let vkQueuePresentKHRPtr = pVkQueuePresentKHR (deviceCmds (queue :: Queue))
+  lift $ unless (vkQueuePresentKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkQueuePresentKHR is null" Nothing Nothing
+  let vkQueuePresentKHR' = mkVkQueuePresentKHR vkQueuePresentKHRPtr
+  pPresentInfo <- ContT $ withCStruct (presentInfo)
+  r <- lift $ vkQueuePresentKHR' (queueHandle (queue)) pPresentInfo
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceGroupPresentCapabilitiesKHR
+  :: FunPtr (Ptr Device_T -> Ptr DeviceGroupPresentCapabilitiesKHR -> IO Result) -> Ptr Device_T -> Ptr DeviceGroupPresentCapabilitiesKHR -> IO Result
+
+-- | vkGetDeviceGroupPresentCapabilitiesKHR - Query present capabilities from
+-- other physical devices
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device.
+--
+-- -   @pDeviceGroupPresentCapabilities@ is a pointer to a
+--     'DeviceGroupPresentCapabilitiesKHR' structure in which the device’s
+--     capabilities are returned.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'DeviceGroupPresentCapabilitiesKHR'
+getDeviceGroupPresentCapabilitiesKHR :: forall io . MonadIO io => Device -> io (DeviceGroupPresentCapabilitiesKHR)
+getDeviceGroupPresentCapabilitiesKHR device = liftIO . evalContT $ do
+  let vkGetDeviceGroupPresentCapabilitiesKHRPtr = pVkGetDeviceGroupPresentCapabilitiesKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetDeviceGroupPresentCapabilitiesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceGroupPresentCapabilitiesKHR is null" Nothing Nothing
+  let vkGetDeviceGroupPresentCapabilitiesKHR' = mkVkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHRPtr
+  pPDeviceGroupPresentCapabilities <- ContT (withZeroCStruct @DeviceGroupPresentCapabilitiesKHR)
+  r <- lift $ vkGetDeviceGroupPresentCapabilitiesKHR' (deviceHandle (device)) (pPDeviceGroupPresentCapabilities)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pDeviceGroupPresentCapabilities <- lift $ peekCStruct @DeviceGroupPresentCapabilitiesKHR pPDeviceGroupPresentCapabilities
+  pure $ (pDeviceGroupPresentCapabilities)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetDeviceGroupSurfacePresentModesKHR
+  :: FunPtr (Ptr Device_T -> SurfaceKHR -> Ptr DeviceGroupPresentModeFlagsKHR -> IO Result) -> Ptr Device_T -> SurfaceKHR -> Ptr DeviceGroupPresentModeFlagsKHR -> IO Result
+
+-- | vkGetDeviceGroupSurfacePresentModesKHR - Query present capabilities for
+-- a surface
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device.
+--
+-- -   @surface@ is the surface.
+--
+-- -   @pModes@ is a pointer to a 'DeviceGroupPresentModeFlagsKHR' in which
+--     the supported device group present modes for the surface are
+--     returned.
+--
+-- = 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
+-- 'getDeviceGroupPresentCapabilitiesKHR'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle
+--
+-- -   @pModes@ /must/ be a valid pointer to a
+--     'DeviceGroupPresentModeFlagsKHR' value
+--
+-- -   Both of @device@, and @surface@ /must/ have been created, allocated,
+--     or retrieved from the same 'Vulkan.Core10.Handles.Instance'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @surface@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'DeviceGroupPresentModeFlagsKHR',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+getDeviceGroupSurfacePresentModesKHR :: forall io . MonadIO io => Device -> SurfaceKHR -> io (("modes" ::: DeviceGroupPresentModeFlagsKHR))
+getDeviceGroupSurfacePresentModesKHR device surface = liftIO . evalContT $ do
+  let vkGetDeviceGroupSurfacePresentModesKHRPtr = pVkGetDeviceGroupSurfacePresentModesKHR (deviceCmds (device :: Device))
+  lift $ unless (vkGetDeviceGroupSurfacePresentModesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceGroupSurfacePresentModesKHR is null" Nothing Nothing
+  let vkGetDeviceGroupSurfacePresentModesKHR' = mkVkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHRPtr
+  pPModes <- ContT $ bracket (callocBytes @DeviceGroupPresentModeFlagsKHR 4) free
+  r <- lift $ vkGetDeviceGroupSurfacePresentModesKHR' (deviceHandle (device)) (surface) (pPModes)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pModes <- lift $ peek @DeviceGroupPresentModeFlagsKHR pPModes
+  pure $ (pModes)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkAcquireNextImage2KHR
+  :: FunPtr (Ptr Device_T -> Ptr AcquireNextImageInfoKHR -> Ptr Word32 -> IO Result) -> Ptr Device_T -> Ptr AcquireNextImageInfoKHR -> Ptr Word32 -> IO Result
+
+-- | vkAcquireNextImage2KHR - Retrieve the index of the next available
+-- presentable image
+--
+-- = Parameters
+--
+-- -   @device@ is the device associated with @swapchain@.
+--
+-- -   @pAcquireInfo@ is a pointer to a 'AcquireNextImageInfoKHR' structure
+--     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.
+--
+-- == 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
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@minImageCount@
+--     as returned by a call to
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
+--     with the @surface@ used to create @swapchain@, the @timeout@ member
+--     of @pAcquireInfo@ /must/ not be @UINT64_MAX@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pAcquireInfo@ /must/ be a valid pointer to a valid
+--     'AcquireNextImageInfoKHR' structure
+--
+-- -   @pImageIndex@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.TIMEOUT'
+--
+--     -   'Vulkan.Core10.Enums.Result.NOT_READY'
+--
+--     -   'Vulkan.Core10.Enums.Result.SUBOPTIMAL_KHR'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_SURFACE_LOST_KHR'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT'
+--
+-- = See Also
+--
+-- 'AcquireNextImageInfoKHR', 'Vulkan.Core10.Handles.Device'
+acquireNextImage2KHR :: forall io . MonadIO io => Device -> ("acquireInfo" ::: AcquireNextImageInfoKHR) -> io (Result, ("imageIndex" ::: Word32))
+acquireNextImage2KHR device acquireInfo = liftIO . evalContT $ do
+  let vkAcquireNextImage2KHRPtr = pVkAcquireNextImage2KHR (deviceCmds (device :: Device))
+  lift $ unless (vkAcquireNextImage2KHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAcquireNextImage2KHR is null" Nothing Nothing
+  let vkAcquireNextImage2KHR' = mkVkAcquireNextImage2KHR vkAcquireNextImage2KHRPtr
+  pAcquireInfo <- ContT $ withCStruct (acquireInfo)
+  pPImageIndex <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkAcquireNextImage2KHR' (deviceHandle (device)) pAcquireInfo (pPImageIndex)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pImageIndex <- lift $ peek @Word32 pPImageIndex
+  pure $ (r, pImageIndex)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDevicePresentRectanglesKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr Rect2D -> IO Result) -> Ptr PhysicalDevice_T -> SurfaceKHR -> Ptr Word32 -> Ptr Rect2D -> IO Result
+
+-- | vkGetPhysicalDevicePresentRectanglesKHR - Query present rectangles for a
+-- surface on a physical device
+--
+-- = 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
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures.
+--
+-- = 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@,
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.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
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     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@ 'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @surface@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice',
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+getPhysicalDevicePresentRectanglesKHR :: forall io . MonadIO io => PhysicalDevice -> SurfaceKHR -> io (Result, ("rects" ::: Vector Rect2D))
+getPhysicalDevicePresentRectanglesKHR physicalDevice surface = liftIO . evalContT $ do
+  let vkGetPhysicalDevicePresentRectanglesKHRPtr = pVkGetPhysicalDevicePresentRectanglesKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDevicePresentRectanglesKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDevicePresentRectanglesKHR is null" Nothing Nothing
+  let vkGetPhysicalDevicePresentRectanglesKHR' = mkVkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHRPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPRectCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDevicePresentRectanglesKHR' physicalDevice' (surface) (pPRectCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pRectCount <- lift $ peek @Word32 pPRectCount
+  pPRects <- ContT $ bracket (callocBytes @Rect2D ((fromIntegral (pRectCount)) * 16)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPRects `advancePtrBytes` (i * 16) :: Ptr Rect2D) . ($ ())) [0..(fromIntegral (pRectCount)) - 1]
+  r' <- lift $ vkGetPhysicalDevicePresentRectanglesKHR' physicalDevice' (surface) (pPRectCount) ((pPRects))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pRectCount' <- lift $ peek @Word32 pPRectCount
+  pRects' <- lift $ generateM (fromIntegral (pRectCount')) (\i -> peekCStruct @Rect2D (((pPRects) `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
+  pure $ ((r'), pRects')
+
+
+-- | VkSwapchainCreateInfoKHR - Structure specifying parameters of a newly
+-- created swapchain object
+--
+-- = 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
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits'
+--     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
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT'.
+--
+-- -   @pQueueFamilyIndices@ is a pointer to an array of queue family
+--     indices having access to the images(s) of the swapchain when
+--     @imageSharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT'.
+--
+-- -   @preTransform@ is a
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' 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
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR',
+--     the presentation engine will transform the image content as part of
+--     the presentation operation.
+--
+-- -   @compositeAlpha@ is a
+--     'Vulkan.Extensions.VK_KHR_surface.CompositeAlphaFlagBitsKHR' 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 'Vulkan.Core10.BaseType.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. Fragment shaders /may/ not execute for
+--         these pixels, and thus any side effects they would have had will
+--         not occur. 'Vulkan.Core10.BaseType.TRUE' value does not
+--         guarantee any clipping will occur, but allows more optimal
+--         presentation methods to be used on some platforms.
+--
+--     -   If set to 'Vulkan.Core10.BaseType.FALSE', presentable images
+--         associated with the swapchain will own all of the pixels they
+--         contain.
+--
+-- Note
+--
+-- Applications /should/ set this value to 'Vulkan.Core10.BaseType.TRUE' if
+-- they do not expect to read back the content of presentable images before
+-- presenting them or after reacquiring them, and if their fragment shaders
+-- do not have any side effects that require them to run for all pixels in
+-- the presentable image.
+--
+-- -   @oldSwapchain@ is 'Vulkan.Core10.APIConstants.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 'createSwapchainKHR' with an @oldSwapchain@ that is not
+-- 'Vulkan.Core10.APIConstants.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
+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE'.
+--
+-- Upon calling 'createSwapchainKHR' with an @oldSwapchain@ that is not
+-- 'Vulkan.Core10.APIConstants.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
+-- 'Vulkan.Extensions.Handles.SurfaceKHR' through multiple uses of
+-- @oldSwapchain@ that outnumber calls to 'destroySwapchainKHR'.
+--
+-- After @oldSwapchain@ is retired, the application /can/ pass to
+-- 'queuePresentKHR' 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, 'queuePresentKHR' /may/ fail if @oldSwapchain@ has
+-- entered a state that causes
+-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR' to be returned.
+--
+-- The application /can/ continue to use a shared presentable image
+-- obtained from @oldSwapchain@ until a presentable image is acquired from
+-- the new swapchain, as long as it has not entered a state that causes it
+-- to return 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DATE_KHR'.
+--
+-- == Valid Usage
+--
+-- -   @surface@ /must/ be a surface that is supported by the device as
+--     determined using
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR'
+--
+-- -   @minImageCount@ /must/ be less than or equal to the value returned
+--     in the @maxImageCount@ member of the
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure
+--     returned by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
+--     for the surface if the returned @maxImageCount@ is not zero
+--
+-- -   If @presentMode@ is not
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'
+--     nor
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR',
+--     then @minImageCount@ /must/ be greater than or equal to the value
+--     returned in the @minImageCount@ member of the
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure
+--     returned by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
+--     for the surface
+--
+-- -   @minImageCount@ /must/ be @1@ if @presentMode@ is either
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'
+--     or
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR'
+--
+-- -   @imageFormat@ and @imageColorSpace@ /must/ match the @format@ and
+--     @colorSpace@ members, respectively, of one of the
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR' structures
+--     returned by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceFormatsKHR'
+--     for the surface
+--
+-- -   @imageExtent@ /must/ be between @minImageExtent@ and
+--     @maxImageExtent@, inclusive, where @minImageExtent@ and
+--     @maxImageExtent@ are members of the
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure
+--     returned by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
+--     for the surface
+--
+-- -   @imageExtent@ members @width@ and @height@ /must/ both be non-zero
+--
+-- -   @imageArrayLayers@ /must/ be greater than @0@ and less than or equal
+--     to the @maxImageArrayLayers@ member of the
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure
+--     returned by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
+--     for the surface
+--
+-- -   If @presentMode@ is
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_IMMEDIATE_KHR',
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_MAILBOX_KHR',
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_KHR' or
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_RELAXED_KHR',
+--     @imageUsage@ /must/ be a subset of the supported usage flags present
+--     in the @supportedUsageFlags@ member of the
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure
+--     returned by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
+--     for @surface@
+--
+-- -   If @presentMode@ is
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR'
+--     or
+--     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR',
+--     @imageUsage@ /must/ be a subset of the supported usage flags present
+--     in the @sharedPresentSupportedUsageFlags@ member of the
+--     'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR'
+--     structure returned by
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
+--     for @surface@
+--
+-- -   If @imageSharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
+--     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
+--     @queueFamilyIndexCount@ @uint32_t@ values
+--
+-- -   If @imageSharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
+--     @queueFamilyIndexCount@ /must/ be greater than @1@
+--
+-- -   If @imageSharingMode@ is
+--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', each
+--     element of @pQueueFamilyIndices@ /must/ be unique and /must/ be less
+--     than @pQueueFamilyPropertyCount@ returned by either
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
+--     or
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'
+--     for the @physicalDevice@ that was used to create @device@
+--
+-- -   @preTransform@ /must/ be one of the bits present in the
+--     @supportedTransforms@ member of the
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure
+--     returned by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
+--     for the surface
+--
+-- -   @compositeAlpha@ /must/ be one of the bits present in the
+--     @supportedCompositeAlpha@ member of the
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure
+--     returned by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'
+--     for the surface
+--
+-- -   @presentMode@ /must/ be one of the
+--     'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' values returned by
+--     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR'
+--     for the surface
+--
+-- -   If the logical device was created with
+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo'::@physicalDeviceCount@
+--     equal to 1, @flags@ /must/ not contain
+--     'SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR'
+--
+-- -   If @oldSwapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @oldSwapchain@ /must/ be a non-retired swapchain associated with
+--     native window referred to by @surface@
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#swapchain-wsi-image-create-info implied image creation parameters>
+--     of the swapchain /must/ be supported as reported by
+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties'
+--
+-- -   If @flags@ contains 'SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR' then
+--     the @pNext@ chain /must/ include a
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
+--     structure with a @viewFormatCount@ greater than zero and
+--     @pViewFormats@ /must/ have an element equal to @imageFormat@
+--
+-- -   If @flags@ contains 'SWAPCHAIN_CREATE_PROTECTED_BIT_KHR', then
+--     'Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR'::@supportsProtected@
+--     /must/ be 'Vulkan.Core10.BaseType.TRUE' in the
+--     'Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR'
+--     structure returned by
+--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'
+--     for @surface@
+--
+-- -   If the @pNext@ chain includes a
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT'
+--     structure with its @fullScreenExclusive@ member set to
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT',
+--     and @surface@ was created using
+--     'Vulkan.Extensions.VK_KHR_win32_surface.createWin32SurfaceKHR', a
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT'
+--     structure /must/ be included in the @pNext@ chain
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of 'DeviceGroupSwapchainCreateInfoKHR',
+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo',
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT',
+--     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT',
+--     'Vulkan.Extensions.VK_EXT_display_control.SwapchainCounterCreateInfoEXT',
+--     or
+--     'Vulkan.Extensions.VK_AMD_display_native_hdr.SwapchainDisplayNativeHdrCreateInfoAMD'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'SwapchainCreateFlagBitsKHR' values
+--
+-- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle
+--
+-- -   @imageFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
+--     value
+--
+-- -   @imageColorSpace@ /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_surface.ColorSpaceKHR' value
+--
+-- -   @imageUsage@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values
+--
+-- -   @imageUsage@ /must/ not be @0@
+--
+-- -   @imageSharingMode@ /must/ be a valid
+--     'Vulkan.Core10.Enums.SharingMode.SharingMode' value
+--
+-- -   @preTransform@ /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' value
+--
+-- -   @compositeAlpha@ /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_surface.CompositeAlphaFlagBitsKHR' value
+--
+-- -   @presentMode@ /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' value
+--
+-- -   If @oldSwapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @oldSwapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   If @oldSwapchain@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @surface@
+--
+-- -   Both of @oldSwapchain@, and @surface@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Instance'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Extensions.VK_KHR_surface.ColorSpaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.CompositeAlphaFlagBitsKHR',
+-- 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR',
+-- 'Vulkan.Core10.Enums.SharingMode.SharingMode',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR',
+-- 'SwapchainCreateFlagsKHR', 'Vulkan.Extensions.Handles.SwapchainKHR',
+-- 'Vulkan.Extensions.VK_KHR_display_swapchain.createSharedSwapchainsKHR',
+-- 'createSwapchainKHR'
+data SwapchainCreateInfoKHR (es :: [Type]) = SwapchainCreateInfoKHR
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of 'SwapchainCreateFlagBitsKHR' indicating
+    -- parameters of the swapchain creation.
+    flags :: SwapchainCreateFlagsKHR
+  , -- | @surface@ is the surface onto which the swapchain will present images.
+    -- If the creation succeeds, the swapchain becomes associated with
+    -- @surface@.
+    surface :: SurfaceKHR
+  , -- | @minImageCount@ is the minimum number of presentable images that the
+    -- application needs. The implementation will either create the swapchain
+    -- with at least that many images, or it will fail to create the swapchain.
+    minImageCount :: Word32
+  , -- | @imageFormat@ is a 'Vulkan.Core10.Enums.Format.Format' value specifying
+    -- the format the swapchain image(s) will be created with.
+    imageFormat :: Format
+  , -- | @imageColorSpace@ is a 'Vulkan.Extensions.VK_KHR_surface.ColorSpaceKHR'
+    -- value specifying the way the swapchain interprets image data.
+    imageColorSpace :: ColorSpaceKHR
+  , -- | @imageExtent@ is the size (in pixels) of the swapchain image(s). The
+    -- behavior is platform-dependent if the image extent does not match the
+    -- surface’s @currentExtent@ as returned by
+    -- 'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR'.
+    imageExtent :: Extent2D
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "imageArrayLayers"
+    imageArrayLayers :: Word32
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "imageUsage"
+    imageUsage :: ImageUsageFlags
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "imageSharingMode"
+    imageSharingMode :: SharingMode
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "pQueueFamilyIndices"
+    queueFamilyIndices :: Vector Word32
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "preTransform"
+    preTransform :: SurfaceTransformFlagBitsKHR
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "compositeAlpha"
+    compositeAlpha :: CompositeAlphaFlagBitsKHR
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "presentMode"
+    presentMode :: PresentModeKHR
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "clipped"
+    clipped :: Bool
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "oldSwapchain"
+    oldSwapchain :: SwapchainKHR
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (SwapchainCreateInfoKHR es)
+
+instance Extensible SwapchainCreateInfoKHR where
+  extensibleType = STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR
+  setNext x next = x{next = next}
+  getNext SwapchainCreateInfoKHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SwapchainCreateInfoKHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @SurfaceFullScreenExclusiveWin32InfoEXT = Just f
+    | Just Refl <- eqT @e @SurfaceFullScreenExclusiveInfoEXT = Just f
+    | Just Refl <- eqT @e @ImageFormatListCreateInfo = Just f
+    | Just Refl <- eqT @e @SwapchainDisplayNativeHdrCreateInfoAMD = Just f
+    | Just Refl <- eqT @e @DeviceGroupSwapchainCreateInfoKHR = Just f
+    | Just Refl <- eqT @e @SwapchainCounterCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss SwapchainCreateInfoKHR es, PokeChain es) => ToCStruct (SwapchainCreateInfoKHR es) where
+  withCStruct x f = allocaBytesAligned 104 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SwapchainCreateInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr SwapchainCreateFlagsKHR)) (flags)
+    lift $ poke ((p `plusPtr` 24 :: Ptr SurfaceKHR)) (surface)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (minImageCount)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Format)) (imageFormat)
+    lift $ poke ((p `plusPtr` 40 :: Ptr ColorSpaceKHR)) (imageColorSpace)
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent2D)) (imageExtent) . ($ ())
+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (imageArrayLayers)
+    lift $ poke ((p `plusPtr` 56 :: Ptr ImageUsageFlags)) (imageUsage)
+    lift $ poke ((p `plusPtr` 60 :: Ptr SharingMode)) (imageSharingMode)
+    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueFamilyIndices)) :: Word32))
+    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (queueFamilyIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (queueFamilyIndices)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
+    lift $ poke ((p `plusPtr` 80 :: Ptr SurfaceTransformFlagBitsKHR)) (preTransform)
+    lift $ poke ((p `plusPtr` 84 :: Ptr CompositeAlphaFlagBitsKHR)) (compositeAlpha)
+    lift $ poke ((p `plusPtr` 88 :: Ptr PresentModeKHR)) (presentMode)
+    lift $ poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (clipped))
+    lift $ poke ((p `plusPtr` 96 :: Ptr SwapchainKHR)) (oldSwapchain)
+    lift $ f
+  cStructSize = 104
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    lift $ poke ((p `plusPtr` 24 :: Ptr SurfaceKHR)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 36 :: Ptr Format)) (zero)
+    lift $ poke ((p `plusPtr` 40 :: Ptr ColorSpaceKHR)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 56 :: Ptr ImageUsageFlags)) (zero)
+    lift $ poke ((p `plusPtr` 60 :: Ptr SharingMode)) (zero)
+    pPQueueFamilyIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPQueueFamilyIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr Word32))) (pPQueueFamilyIndices')
+    lift $ poke ((p `plusPtr` 80 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
+    lift $ poke ((p `plusPtr` 84 :: Ptr CompositeAlphaFlagBitsKHR)) (zero)
+    lift $ poke ((p `plusPtr` 88 :: Ptr PresentModeKHR)) (zero)
+    lift $ poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ f
+
+instance (Extendss SwapchainCreateInfoKHR es, PeekChain es) => FromCStruct (SwapchainCreateInfoKHR es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @SwapchainCreateFlagsKHR ((p `plusPtr` 16 :: Ptr SwapchainCreateFlagsKHR))
+    surface <- peek @SurfaceKHR ((p `plusPtr` 24 :: Ptr SurfaceKHR))
+    minImageCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    imageFormat <- peek @Format ((p `plusPtr` 36 :: Ptr Format))
+    imageColorSpace <- peek @ColorSpaceKHR ((p `plusPtr` 40 :: Ptr ColorSpaceKHR))
+    imageExtent <- peekCStruct @Extent2D ((p `plusPtr` 44 :: Ptr Extent2D))
+    imageArrayLayers <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
+    imageUsage <- peek @ImageUsageFlags ((p `plusPtr` 56 :: Ptr ImageUsageFlags))
+    imageSharingMode <- peek @SharingMode ((p `plusPtr` 60 :: Ptr SharingMode))
+    queueFamilyIndexCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    pQueueFamilyIndices <- peek @(Ptr Word32) ((p `plusPtr` 72 :: Ptr (Ptr Word32)))
+    pQueueFamilyIndices' <- generateM (fromIntegral queueFamilyIndexCount) (\i -> peek @Word32 ((pQueueFamilyIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    preTransform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 80 :: Ptr SurfaceTransformFlagBitsKHR))
+    compositeAlpha <- peek @CompositeAlphaFlagBitsKHR ((p `plusPtr` 84 :: Ptr CompositeAlphaFlagBitsKHR))
+    presentMode <- peek @PresentModeKHR ((p `plusPtr` 88 :: Ptr PresentModeKHR))
+    clipped <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))
+    oldSwapchain <- peek @SwapchainKHR ((p `plusPtr` 96 :: Ptr SwapchainKHR))
+    pure $ SwapchainCreateInfoKHR
+             next flags surface minImageCount imageFormat imageColorSpace imageExtent imageArrayLayers imageUsage imageSharingMode pQueueFamilyIndices' preTransform compositeAlpha presentMode (bool32ToBool clipped) oldSwapchain
+
+instance es ~ '[] => Zero (SwapchainCreateInfoKHR es) where
+  zero = SwapchainCreateInfoKHR
+           ()
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           mempty
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPresentInfoKHR - Structure describing parameters of a queue
+-- presentation
+--
+-- = Description
+--
+-- Before an application /can/ present an image, the image’s layout /must/
+-- be transitioned to the
+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR' layout,
+-- or for a shared presentable image the
+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
+-- layout.
+--
+-- Note
+--
+-- When transitioning the image to
+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR' or
+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR', there is
+-- no need to delay subsequent processing, or perform any visibility
+-- operations (as 'queuePresentKHR' performs automatic visibility
+-- operations). To achieve this, the @dstAccessMask@ member of the
+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' /should/ be set to @0@,
+-- and the @dstStageMask@ parameter /should/ be set to
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.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
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR' or
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'
+--     layout at the time the operation is executed on a
+--     'Vulkan.Core10.Handles.Device'
+--
+-- -   All elements of the @pWaitSemaphores@ /must/ have a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_INFO_KHR'
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of 'DeviceGroupPresentInfoKHR',
+--     'Vulkan.Extensions.VK_KHR_display_swapchain.DisplayPresentInfoKHR',
+--     'Vulkan.Extensions.VK_GGP_frame_token.PresentFrameTokenGGP',
+--     'Vulkan.Extensions.VK_KHR_incremental_present.PresentRegionsKHR', or
+--     'Vulkan.Extensions.VK_GOOGLE_display_timing.PresentTimesInfoGOOGLE'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a
+--     valid pointer to an array of @waitSemaphoreCount@ valid
+--     'Vulkan.Core10.Handles.Semaphore' handles
+--
+-- -   @pSwapchains@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ valid 'Vulkan.Extensions.Handles.SwapchainKHR'
+--     handles
+--
+-- -   @pImageIndices@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ @uint32_t@ values
+--
+-- -   If @pResults@ is not @NULL@, @pResults@ /must/ be a valid pointer to
+--     an array of @swapchainCount@ 'Vulkan.Core10.Enums.Result.Result'
+--     values
+--
+-- -   @swapchainCount@ /must/ be greater than @0@
+--
+-- -   Both of the elements of @pSwapchains@, and the elements of
+--     @pWaitSemaphores@ that are valid handles of non-ignored parameters
+--     /must/ have been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Instance'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.Result.Result', 'Vulkan.Core10.Handles.Semaphore',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR', 'queuePresentKHR'
+data PresentInfoKHR (es :: [Type]) = PresentInfoKHR
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @pWaitSemaphores@ is @NULL@ or a pointer to an array of
+    -- 'Vulkan.Core10.Handles.Semaphore' objects with @waitSemaphoreCount@
+    -- entries, and specifies the semaphores to wait for before issuing the
+    -- present request.
+    waitSemaphores :: Vector Semaphore
+  , -- | @pSwapchains@ is a pointer to an array of
+    -- 'Vulkan.Extensions.Handles.SwapchainKHR' objects with @swapchainCount@
+    -- entries. A given swapchain /must/ not appear in this list more than
+    -- once.
+    swapchains :: Vector SwapchainKHR
+  , -- | @pImageIndices@ is a pointer to an array of indices into the array of
+    -- each swapchain’s presentable images, with @swapchainCount@ entries. Each
+    -- entry in this array identifies the image to present on the corresponding
+    -- entry in the @pSwapchains@ array.
+    imageIndices :: Vector Word32
+  , -- | @pResults@ is a pointer to an array of
+    -- 'Vulkan.Core10.Enums.Result.Result' typed elements with @swapchainCount@
+    -- entries. Applications that do not need per-swapchain results /can/ use
+    -- @NULL@ for @pResults@. If non-@NULL@, each entry in @pResults@ will be
+    -- set to the 'Vulkan.Core10.Enums.Result.Result' for presenting the
+    -- swapchain corresponding to the same index in @pSwapchains@.
+    results :: Ptr Result
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (PresentInfoKHR es)
+
+instance Extensible PresentInfoKHR where
+  extensibleType = STRUCTURE_TYPE_PRESENT_INFO_KHR
+  setNext x next = x{next = next}
+  getNext PresentInfoKHR{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PresentInfoKHR e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PresentFrameTokenGGP = Just f
+    | Just Refl <- eqT @e @PresentTimesInfoGOOGLE = Just f
+    | Just Refl <- eqT @e @DeviceGroupPresentInfoKHR = Just f
+    | Just Refl <- eqT @e @PresentRegionsKHR = Just f
+    | Just Refl <- eqT @e @DisplayPresentInfoKHR = Just f
+    | otherwise = Nothing
+
+instance (Extendss PresentInfoKHR es, PokeChain es) => ToCStruct (PresentInfoKHR es) where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PresentInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_INFO_KHR)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (waitSemaphores)) :: Word32))
+    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (waitSemaphores)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (waitSemaphores)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
+    let pSwapchainsLength = Data.Vector.length $ (swapchains)
+    lift $ unless ((Data.Vector.length $ (imageIndices)) == pSwapchainsLength) $
+      throwIO $ IOError Nothing InvalidArgument "" "pImageIndices and pSwapchains must have the same length" Nothing Nothing
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral pSwapchainsLength :: Word32))
+    pPSwapchains' <- ContT $ allocaBytesAligned @SwapchainKHR ((Data.Vector.length (swapchains)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSwapchains' `plusPtr` (8 * (i)) :: Ptr SwapchainKHR) (e)) (swapchains)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SwapchainKHR))) (pPSwapchains')
+    pPImageIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (imageIndices)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPImageIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (imageIndices)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPImageIndices')
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Result))) (results)
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PRESENT_INFO_KHR)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPWaitSemaphores' <- ContT $ allocaBytesAligned @Semaphore ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPWaitSemaphores' `plusPtr` (8 * (i)) :: Ptr Semaphore) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Semaphore))) (pPWaitSemaphores')
+    pPSwapchains' <- ContT $ allocaBytesAligned @SwapchainKHR ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPSwapchains' `plusPtr` (8 * (i)) :: Ptr SwapchainKHR) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SwapchainKHR))) (pPSwapchains')
+    pPImageIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPImageIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPImageIndices')
+    lift $ f
+
+instance (Extendss PresentInfoKHR es, PeekChain es) => FromCStruct (PresentInfoKHR es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    waitSemaphoreCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pWaitSemaphores <- peek @(Ptr Semaphore) ((p `plusPtr` 24 :: Ptr (Ptr Semaphore)))
+    pWaitSemaphores' <- generateM (fromIntegral waitSemaphoreCount) (\i -> peek @Semaphore ((pWaitSemaphores `advancePtrBytes` (8 * (i)) :: Ptr Semaphore)))
+    swapchainCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pSwapchains <- peek @(Ptr SwapchainKHR) ((p `plusPtr` 40 :: Ptr (Ptr SwapchainKHR)))
+    pSwapchains' <- generateM (fromIntegral swapchainCount) (\i -> peek @SwapchainKHR ((pSwapchains `advancePtrBytes` (8 * (i)) :: Ptr SwapchainKHR)))
+    pImageIndices <- peek @(Ptr Word32) ((p `plusPtr` 48 :: Ptr (Ptr Word32)))
+    pImageIndices' <- generateM (fromIntegral swapchainCount) (\i -> peek @Word32 ((pImageIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pResults <- peek @(Ptr Result) ((p `plusPtr` 56 :: Ptr (Ptr Result)))
+    pure $ PresentInfoKHR
+             next pWaitSemaphores' pSwapchains' pImageIndices' pResults
+
+instance es ~ '[] => Zero (PresentInfoKHR es) where
+  zero = PresentInfoKHR
+           ()
+           mempty
+           mempty
+           mempty
+           zero
+
+
+-- | VkDeviceGroupPresentCapabilitiesKHR - Present capabilities from other
+-- physical devices
+--
+-- = Description
+--
+-- @modes@ always has 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR' set.
+--
+-- The present mode flags are also used when presenting an image, in
+-- 'DeviceGroupPresentInfoKHR'::@mode@.
+--
+-- If a device group only includes a single physical device, then @modes@
+-- /must/ equal 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DeviceGroupPresentModeFlagsKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getDeviceGroupPresentCapabilitiesKHR'
+data DeviceGroupPresentCapabilitiesKHR = DeviceGroupPresentCapabilitiesKHR
+  { -- | @presentMask@ is an array of
+    -- 'Vulkan.Core10.APIConstants.MAX_DEVICE_GROUP_SIZE' @uint32_t@ masks,
+    -- where the mask at element i is non-zero if physical device i has a
+    -- presentation engine, and where bit j is set in element i if physical
+    -- device i /can/ present swapchain images from physical device j. If
+    -- element i is non-zero, then bit i /must/ be set.
+    presentMask :: Vector Word32
+  , -- | @modes@ is a bitmask of 'DeviceGroupPresentModeFlagBitsKHR' indicating
+    -- which device group presentation modes are supported.
+    modes :: DeviceGroupPresentModeFlagsKHR
+  }
+  deriving (Typeable)
+deriving instance Show DeviceGroupPresentCapabilitiesKHR
+
+instance ToCStruct DeviceGroupPresentCapabilitiesKHR where
+  withCStruct x f = allocaBytesAligned 152 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceGroupPresentCapabilitiesKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    unless ((Data.Vector.length $ (presentMask)) <= MAX_DEVICE_GROUP_SIZE) $
+      throwIO $ IOError Nothing InvalidArgument "" "presentMask is too long, a maximum of MAX_DEVICE_GROUP_SIZE elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE Word32)))) `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (presentMask)
+    poke ((p `plusPtr` 144 :: Ptr DeviceGroupPresentModeFlagsKHR)) (modes)
+    f
+  cStructSize = 152
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    unless ((Data.Vector.length $ (mempty)) <= MAX_DEVICE_GROUP_SIZE) $
+      throwIO $ IOError Nothing InvalidArgument "" "presentMask is too long, a maximum of MAX_DEVICE_GROUP_SIZE elements are allowed" Nothing Nothing
+    Data.Vector.imapM_ (\i e -> poke ((lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE Word32)))) `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    poke ((p `plusPtr` 144 :: Ptr DeviceGroupPresentModeFlagsKHR)) (zero)
+    f
+
+instance FromCStruct DeviceGroupPresentCapabilitiesKHR where
+  peekCStruct p = do
+    presentMask <- generateM (MAX_DEVICE_GROUP_SIZE) (\i -> peek @Word32 (((lowerArrayPtr @Word32 ((p `plusPtr` 16 :: Ptr (FixedArray MAX_DEVICE_GROUP_SIZE Word32)))) `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    modes <- peek @DeviceGroupPresentModeFlagsKHR ((p `plusPtr` 144 :: Ptr DeviceGroupPresentModeFlagsKHR))
+    pure $ DeviceGroupPresentCapabilitiesKHR
+             presentMask modes
+
+instance Storable DeviceGroupPresentCapabilitiesKHR where
+  sizeOf ~_ = 152
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceGroupPresentCapabilitiesKHR where
+  zero = DeviceGroupPresentCapabilitiesKHR
+           mempty
+           zero
+
+
+-- | VkImageSwapchainCreateInfoKHR - Specify that an image will be bound to
+-- swapchain memory
+--
+-- == Valid Usage
+--
+-- -   If @swapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the
+--     fields of 'Vulkan.Core10.Image.ImageCreateInfo' /must/ match the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#swapchain-wsi-image-create-info implied image creation parameters>
+--     of the swapchain
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR'
+--
+-- -   If @swapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+data ImageSwapchainCreateInfoKHR = ImageSwapchainCreateInfoKHR
+  { -- | @swapchain@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a handle of a
+    -- swapchain that the image will be bound to.
+    swapchain :: SwapchainKHR }
+  deriving (Typeable)
+deriving instance Show ImageSwapchainCreateInfoKHR
+
+instance ToCStruct ImageSwapchainCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageSwapchainCreateInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (swapchain)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct ImageSwapchainCreateInfoKHR where
+  peekCStruct p = do
+    swapchain <- peek @SwapchainKHR ((p `plusPtr` 16 :: Ptr SwapchainKHR))
+    pure $ ImageSwapchainCreateInfoKHR
+             swapchain
+
+instance Storable ImageSwapchainCreateInfoKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageSwapchainCreateInfoKHR where
+  zero = ImageSwapchainCreateInfoKHR
+           zero
+
+
+-- | VkBindImageMemorySwapchainInfoKHR - Structure specifying swapchain image
+-- memory to bind to
+--
+-- = 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
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'.
+--
+-- == Valid Usage
+--
+-- -   @imageIndex@ /must/ be less than the number of images in @swapchain@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR'
+--
+-- -   @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR'
+data BindImageMemorySwapchainInfoKHR = BindImageMemorySwapchainInfoKHR
+  { -- | @swapchain@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a swapchain
+    -- handle.
+    swapchain :: SwapchainKHR
+  , -- | @imageIndex@ is an image index within @swapchain@.
+    imageIndex :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show BindImageMemorySwapchainInfoKHR
+
+instance ToCStruct BindImageMemorySwapchainInfoKHR where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindImageMemorySwapchainInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (swapchain)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (imageIndex)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct BindImageMemorySwapchainInfoKHR where
+  peekCStruct p = do
+    swapchain <- peek @SwapchainKHR ((p `plusPtr` 16 :: Ptr SwapchainKHR))
+    imageIndex <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ BindImageMemorySwapchainInfoKHR
+             swapchain imageIndex
+
+instance Storable BindImageMemorySwapchainInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BindImageMemorySwapchainInfoKHR where
+  zero = BindImageMemorySwapchainInfoKHR
+           zero
+           zero
+
+
+-- | VkAcquireNextImageInfoKHR - Structure specifying parameters of the
+-- acquire
+--
+-- = Description
+--
+-- If 'acquireNextImageKHR' is used, the device mask is considered to
+-- include all physical devices in the logical device.
+--
+-- Note
+--
+-- 'acquireNextImage2KHR' 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 'Vulkan.Core10.APIConstants.NULL_HANDLE' it
+--     /must/ be unsignaled
+--
+-- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it
+--     /must/ not have any uncompleted signal or wait operations pending
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/
+--     be unsignaled and /must/ not be associated with any other queue
+--     command that has not yet completed execution on that queue
+--
+-- -   @semaphore@ and @fence@ /must/ not both be equal to
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   @deviceMask@ /must/ be a valid device mask
+--
+-- -   @deviceMask@ /must/ not be zero
+--
+-- -   @semaphore@ /must/ have a
+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
+--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @swapchain@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.SwapchainKHR' handle
+--
+-- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'
+--     handle
+--
+-- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle
+--
+-- -   Each of @fence@, @semaphore@, and @swapchain@ that are valid handles
+--     of non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Instance'
+--
+-- == 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
+--
+-- 'Vulkan.Core10.Handles.Fence', 'Vulkan.Core10.Handles.Semaphore',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.Handles.SwapchainKHR', 'acquireNextImage2KHR'
+data AcquireNextImageInfoKHR = AcquireNextImageInfoKHR
+  { -- | @swapchain@ is a non-retired swapchain from which an image is acquired.
+    swapchain :: SwapchainKHR
+  , -- | @timeout@ specifies how long the function waits, in nanoseconds, if no
+    -- image is available.
+    timeout :: Word64
+  , -- | @semaphore@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a semaphore
+    -- to signal.
+    semaphore :: Semaphore
+  , -- | @fence@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a fence to
+    -- signal.
+    fence :: Fence
+  , -- | @deviceMask@ is a mask of physical devices for which the swapchain image
+    -- will be ready to use when the semaphore or fence is signaled.
+    deviceMask :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show AcquireNextImageInfoKHR
+
+instance ToCStruct AcquireNextImageInfoKHR where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AcquireNextImageInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (swapchain)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (timeout)
+    poke ((p `plusPtr` 32 :: Ptr Semaphore)) (semaphore)
+    poke ((p `plusPtr` 40 :: Ptr Fence)) (fence)
+    poke ((p `plusPtr` 48 :: Ptr Word32)) (deviceMask)
+    f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SwapchainKHR)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct AcquireNextImageInfoKHR where
+  peekCStruct p = do
+    swapchain <- peek @SwapchainKHR ((p `plusPtr` 16 :: Ptr SwapchainKHR))
+    timeout <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
+    semaphore <- peek @Semaphore ((p `plusPtr` 32 :: Ptr Semaphore))
+    fence <- peek @Fence ((p `plusPtr` 40 :: Ptr Fence))
+    deviceMask <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pure $ AcquireNextImageInfoKHR
+             swapchain timeout semaphore fence deviceMask
+
+instance Storable AcquireNextImageInfoKHR where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AcquireNextImageInfoKHR where
+  zero = AcquireNextImageInfoKHR
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDeviceGroupPresentInfoKHR - Mode and mask controlling which physical
+-- devices\' images are presented
+--
+-- = Description
+--
+-- If @mode@ is '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 'DeviceGroupPresentCapabilitiesKHR'.
+--
+-- If @mode@ is '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 'DeviceGroupPresentCapabilitiesKHR'::@presentMask@.
+--
+-- If @mode@ is '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
+-- 'DeviceGroupPresentCapabilitiesKHR'::@presentMask@.
+--
+-- If @mode@ is '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 'DeviceGroupPresentCapabilitiesKHR'.
+--
+-- If 'DeviceGroupPresentInfoKHR' is not provided or @swapchainCount@ is
+-- zero then the masks are considered to be @1@. If
+-- 'DeviceGroupPresentInfoKHR' is not provided, @mode@ is considered to be
+-- 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR'.
+--
+-- == Valid Usage
+--
+-- -   @swapchainCount@ /must/ equal @0@ or
+--     'PresentInfoKHR'::@swapchainCount@
+--
+-- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR', then each
+--     element of @pDeviceMasks@ /must/ have exactly one bit set, and the
+--     corresponding element of
+--     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@ /must/ be
+--     non-zero
+--
+-- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR', then each
+--     element of @pDeviceMasks@ /must/ have exactly one bit set, and some
+--     physical device in the logical device /must/ include that bit in its
+--     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@
+--
+-- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR', then each
+--     element of @pDeviceMasks@ /must/ have a value for which all set bits
+--     are set in one of the elements of
+--     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@
+--
+-- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR',
+--     then for each bit set in each element of @pDeviceMasks@, the
+--     corresponding element of
+--     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@ /must/ be
+--     non-zero
+--
+-- -   The value of each element of @pDeviceMasks@ /must/ be equal to the
+--     device mask passed in 'AcquireNextImageInfoKHR'::@deviceMask@ when
+--     the image index was last acquired
+--
+-- -   @mode@ /must/ have exactly one bit set, and that bit /must/ have
+--     been included in 'DeviceGroupSwapchainCreateInfoKHR'::@modes@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.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 'DeviceGroupPresentModeFlagBitsKHR' value
+--
+-- = See Also
+--
+-- 'DeviceGroupPresentModeFlagBitsKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceGroupPresentInfoKHR = DeviceGroupPresentInfoKHR
+  { -- | @pDeviceMasks@ is a pointer to an array of device masks, one for each
+    -- element of 'PresentInfoKHR'::pSwapchains.
+    deviceMasks :: Vector Word32
+  , -- | @mode@ is the device group present mode that will be used for this
+    -- present.
+    mode :: DeviceGroupPresentModeFlagBitsKHR
+  }
+  deriving (Typeable)
+deriving instance Show DeviceGroupPresentInfoKHR
+
+instance ToCStruct DeviceGroupPresentInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceGroupPresentInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceMasks)) :: Word32))
+    pPDeviceMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (deviceMasks)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (deviceMasks)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceMasks')
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceGroupPresentModeFlagBitsKHR)) (mode)
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPDeviceMasks' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceMasks' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word32))) (pPDeviceMasks')
+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceGroupPresentModeFlagBitsKHR)) (zero)
+    lift $ f
+
+instance FromCStruct DeviceGroupPresentInfoKHR where
+  peekCStruct p = do
+    swapchainCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pDeviceMasks <- peek @(Ptr Word32) ((p `plusPtr` 24 :: Ptr (Ptr Word32)))
+    pDeviceMasks' <- generateM (fromIntegral swapchainCount) (\i -> peek @Word32 ((pDeviceMasks `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    mode <- peek @DeviceGroupPresentModeFlagBitsKHR ((p `plusPtr` 32 :: Ptr DeviceGroupPresentModeFlagBitsKHR))
+    pure $ DeviceGroupPresentInfoKHR
+             pDeviceMasks' mode
+
+instance Zero DeviceGroupPresentInfoKHR where
+  zero = DeviceGroupPresentInfoKHR
+           mempty
+           zero
+
+
+-- | VkDeviceGroupSwapchainCreateInfoKHR - Structure specifying parameters of
+-- a newly created swapchain object
+--
+-- = Description
+--
+-- If this structure is not present, @modes@ is considered to be
+-- 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DeviceGroupPresentModeFlagsKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceGroupSwapchainCreateInfoKHR = DeviceGroupSwapchainCreateInfoKHR
+  { -- | @modes@ /must/ not be @0@
+    modes :: DeviceGroupPresentModeFlagsKHR }
+  deriving (Typeable)
+deriving instance Show DeviceGroupSwapchainCreateInfoKHR
+
+instance ToCStruct DeviceGroupSwapchainCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceGroupSwapchainCreateInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceGroupPresentModeFlagsKHR)) (modes)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceGroupPresentModeFlagsKHR)) (zero)
+    f
+
+instance FromCStruct DeviceGroupSwapchainCreateInfoKHR where
+  peekCStruct p = do
+    modes <- peek @DeviceGroupPresentModeFlagsKHR ((p `plusPtr` 16 :: Ptr DeviceGroupPresentModeFlagsKHR))
+    pure $ DeviceGroupSwapchainCreateInfoKHR
+             modes
+
+instance Storable DeviceGroupSwapchainCreateInfoKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceGroupSwapchainCreateInfoKHR where
+  zero = DeviceGroupSwapchainCreateInfoKHR
+           zero
+
+
+-- | VkDeviceGroupPresentModeFlagBitsKHR - Bitmask specifying supported
+-- device group present modes
+--
+-- = See Also
+--
+-- 'DeviceGroupPresentInfoKHR', 'DeviceGroupPresentModeFlagsKHR'
+newtype DeviceGroupPresentModeFlagBitsKHR = DeviceGroupPresentModeFlagBitsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR' specifies that any physical
+-- device with a presentation engine /can/ present its own swapchain
+-- images.
+pattern DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = DeviceGroupPresentModeFlagBitsKHR 0x00000001
+-- | '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 DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = DeviceGroupPresentModeFlagBitsKHR 0x00000002
+-- | '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 DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = DeviceGroupPresentModeFlagBitsKHR 0x00000004
+-- | '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 DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = DeviceGroupPresentModeFlagBitsKHR 0x00000008
+
+type DeviceGroupPresentModeFlagsKHR = DeviceGroupPresentModeFlagBitsKHR
+
+instance Show DeviceGroupPresentModeFlagBitsKHR where
+  showsPrec p = \case
+    DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR -> showString "DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR"
+    DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR -> showString "DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR"
+    DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR -> showString "DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR"
+    DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR -> showString "DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR"
+    DeviceGroupPresentModeFlagBitsKHR x -> showParen (p >= 11) (showString "DeviceGroupPresentModeFlagBitsKHR 0x" . showHex x)
+
+instance Read DeviceGroupPresentModeFlagBitsKHR where
+  readPrec = parens (choose [("DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR", pure DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR)
+                            , ("DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR", pure DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR)
+                            , ("DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR", pure DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR)
+                            , ("DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR", pure DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DeviceGroupPresentModeFlagBitsKHR")
+                       v <- step readPrec
+                       pure (DeviceGroupPresentModeFlagBitsKHR v)))
+
+
+-- | VkSwapchainCreateFlagBitsKHR - Bitmask controlling swapchain creation
+--
+-- = See Also
+--
+-- 'SwapchainCreateFlagsKHR'
+newtype SwapchainCreateFlagBitsKHR = SwapchainCreateFlagBitsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR' specifies that the images of
+-- the swapchain /can/ be used to create a
+-- 'Vulkan.Core10.Handles.ImageView' with a different format than what the
+-- swapchain was created with. The list of allowed image view formats are
+-- specified by adding a
+-- 'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'
+-- structure to the @pNext@ chain of 'SwapchainCreateInfoKHR'. In addition,
+-- this flag also specifies that the swapchain /can/ be created with usage
+-- flags that are not supported for the format the swapchain is created
+-- with but are supported for at least one of the allowed image view
+-- formats.
+pattern SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = SwapchainCreateFlagBitsKHR 0x00000004
+-- | 'SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR' specifies that
+-- images created from the swapchain (i.e. with the @swapchain@ member of
+-- 'ImageSwapchainCreateInfoKHR' set to this swapchain’s handle) /must/ use
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT'.
+pattern SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = SwapchainCreateFlagBitsKHR 0x00000001
+-- | 'SWAPCHAIN_CREATE_PROTECTED_BIT_KHR' specifies that images created from
+-- the swapchain are protected images.
+pattern SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = SwapchainCreateFlagBitsKHR 0x00000002
+
+type SwapchainCreateFlagsKHR = SwapchainCreateFlagBitsKHR
+
+instance Show SwapchainCreateFlagBitsKHR where
+  showsPrec p = \case
+    SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR -> showString "SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR"
+    SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR -> showString "SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"
+    SWAPCHAIN_CREATE_PROTECTED_BIT_KHR -> showString "SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"
+    SwapchainCreateFlagBitsKHR x -> showParen (p >= 11) (showString "SwapchainCreateFlagBitsKHR 0x" . showHex x)
+
+instance Read SwapchainCreateFlagBitsKHR where
+  readPrec = parens (choose [("SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR", pure SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR)
+                            , ("SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR", pure SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR)
+                            , ("SWAPCHAIN_CREATE_PROTECTED_BIT_KHR", pure SWAPCHAIN_CREATE_PROTECTED_BIT_KHR)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "SwapchainCreateFlagBitsKHR")
+                       v <- step readPrec
+                       pure (SwapchainCreateFlagBitsKHR v)))
+
+
+type KHR_SWAPCHAIN_SPEC_VERSION = 70
+
+-- No documentation found for TopLevel "VK_KHR_SWAPCHAIN_SPEC_VERSION"
+pattern KHR_SWAPCHAIN_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SWAPCHAIN_SPEC_VERSION = 70
+
+
+type KHR_SWAPCHAIN_EXTENSION_NAME = "VK_KHR_swapchain"
+
+-- No documentation found for TopLevel "VK_KHR_SWAPCHAIN_EXTENSION_NAME"
+pattern KHR_SWAPCHAIN_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SWAPCHAIN_EXTENSION_NAME = "VK_KHR_swapchain"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_swapchain.hs-boot b/src/Vulkan/Extensions/VK_KHR_swapchain.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_swapchain.hs-boot
@@ -0,0 +1,90 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_swapchain  ( AcquireNextImageInfoKHR
+                                           , BindImageMemorySwapchainInfoKHR
+                                           , DeviceGroupPresentCapabilitiesKHR
+                                           , DeviceGroupPresentInfoKHR
+                                           , DeviceGroupSwapchainCreateInfoKHR
+                                           , ImageSwapchainCreateInfoKHR
+                                           , PresentInfoKHR
+                                           , SwapchainCreateInfoKHR
+                                           , DeviceGroupPresentModeFlagBitsKHR
+                                           , DeviceGroupPresentModeFlagsKHR
+                                           ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data AcquireNextImageInfoKHR
+
+instance ToCStruct AcquireNextImageInfoKHR
+instance Show AcquireNextImageInfoKHR
+
+instance FromCStruct AcquireNextImageInfoKHR
+
+
+data BindImageMemorySwapchainInfoKHR
+
+instance ToCStruct BindImageMemorySwapchainInfoKHR
+instance Show BindImageMemorySwapchainInfoKHR
+
+instance FromCStruct BindImageMemorySwapchainInfoKHR
+
+
+data DeviceGroupPresentCapabilitiesKHR
+
+instance ToCStruct DeviceGroupPresentCapabilitiesKHR
+instance Show DeviceGroupPresentCapabilitiesKHR
+
+instance FromCStruct DeviceGroupPresentCapabilitiesKHR
+
+
+data DeviceGroupPresentInfoKHR
+
+instance ToCStruct DeviceGroupPresentInfoKHR
+instance Show DeviceGroupPresentInfoKHR
+
+instance FromCStruct DeviceGroupPresentInfoKHR
+
+
+data DeviceGroupSwapchainCreateInfoKHR
+
+instance ToCStruct DeviceGroupSwapchainCreateInfoKHR
+instance Show DeviceGroupSwapchainCreateInfoKHR
+
+instance FromCStruct DeviceGroupSwapchainCreateInfoKHR
+
+
+data ImageSwapchainCreateInfoKHR
+
+instance ToCStruct ImageSwapchainCreateInfoKHR
+instance Show ImageSwapchainCreateInfoKHR
+
+instance FromCStruct ImageSwapchainCreateInfoKHR
+
+
+type role PresentInfoKHR nominal
+data PresentInfoKHR (es :: [Type])
+
+instance (Extendss PresentInfoKHR es, PokeChain es) => ToCStruct (PresentInfoKHR es)
+instance Show (Chain es) => Show (PresentInfoKHR es)
+
+instance (Extendss PresentInfoKHR es, PeekChain es) => FromCStruct (PresentInfoKHR es)
+
+
+type role SwapchainCreateInfoKHR nominal
+data SwapchainCreateInfoKHR (es :: [Type])
+
+instance (Extendss SwapchainCreateInfoKHR es, PokeChain es) => ToCStruct (SwapchainCreateInfoKHR es)
+instance Show (Chain es) => Show (SwapchainCreateInfoKHR es)
+
+instance (Extendss SwapchainCreateInfoKHR es, PeekChain es) => FromCStruct (SwapchainCreateInfoKHR es)
+
+
+data DeviceGroupPresentModeFlagBitsKHR
+
+type DeviceGroupPresentModeFlagsKHR = DeviceGroupPresentModeFlagBitsKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_swapchain_mutable_format.hs b/src/Vulkan/Extensions/VK_KHR_swapchain_mutable_format.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_swapchain_mutable_format.hs
@@ -0,0 +1,25 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_swapchain_mutable_format  ( KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION
+                                                          , pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION
+                                                          , KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME
+                                                          , pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME
+                                                          , SwapchainCreateFlagBitsKHR(..)
+                                                          , SwapchainCreateFlagsKHR
+                                                          ) where
+
+import Data.String (IsString)
+import Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_swapchain (SwapchainCreateFlagsKHR)
+type KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION"
+pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION = 1
+
+
+type KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME = "VK_KHR_swapchain_mutable_format"
+
+-- No documentation found for TopLevel "VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME"
+pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME = "VK_KHR_swapchain_mutable_format"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_timeline_semaphore.hs b/src/Vulkan/Extensions/VK_KHR_timeline_semaphore.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_timeline_semaphore.hs
@@ -0,0 +1,148 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_timeline_semaphore  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR
+                                                    , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR
+                                                    , pattern STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR
+                                                    , pattern STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR
+                                                    , pattern STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR
+                                                    , pattern STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR
+                                                    , pattern SEMAPHORE_TYPE_BINARY_KHR
+                                                    , pattern SEMAPHORE_TYPE_TIMELINE_KHR
+                                                    , pattern SEMAPHORE_WAIT_ANY_BIT_KHR
+                                                    , getSemaphoreCounterValueKHR
+                                                    , waitSemaphoresKHR
+                                                    , signalSemaphoreKHR
+                                                    , SemaphoreWaitFlagsKHR
+                                                    , SemaphoreTypeKHR
+                                                    , SemaphoreWaitFlagBitsKHR
+                                                    , PhysicalDeviceTimelineSemaphoreFeaturesKHR
+                                                    , PhysicalDeviceTimelineSemaphorePropertiesKHR
+                                                    , SemaphoreTypeCreateInfoKHR
+                                                    , TimelineSemaphoreSubmitInfoKHR
+                                                    , SemaphoreWaitInfoKHR
+                                                    , SemaphoreSignalInfoKHR
+                                                    , KHR_TIMELINE_SEMAPHORE_SPEC_VERSION
+                                                    , pattern KHR_TIMELINE_SEMAPHORE_SPEC_VERSION
+                                                    , KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME
+                                                    , pattern KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME
+                                                    ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (getSemaphoreCounterValue)
+import Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (signalSemaphore)
+import Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (waitSemaphores)
+import Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreFeatures)
+import Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreProperties)
+import Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreSignalInfo)
+import Vulkan.Core12.Enums.SemaphoreType (SemaphoreType)
+import Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreTypeCreateInfo)
+import Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlagBits)
+import Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlags)
+import Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (SemaphoreWaitInfo)
+import Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (TimelineSemaphoreSubmitInfo)
+import Vulkan.Core12.Enums.SemaphoreType (SemaphoreType(SEMAPHORE_TYPE_BINARY))
+import Vulkan.Core12.Enums.SemaphoreType (SemaphoreType(SEMAPHORE_TYPE_TIMELINE))
+import Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlags)
+import Vulkan.Core12.Enums.SemaphoreWaitFlagBits (SemaphoreWaitFlagBits(SEMAPHORE_WAIT_ANY_BIT))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR"
+pattern STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR"
+pattern STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR"
+pattern STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR"
+pattern STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO
+
+
+-- No documentation found for TopLevel "VK_SEMAPHORE_TYPE_BINARY_KHR"
+pattern SEMAPHORE_TYPE_BINARY_KHR = SEMAPHORE_TYPE_BINARY
+
+
+-- No documentation found for TopLevel "VK_SEMAPHORE_TYPE_TIMELINE_KHR"
+pattern SEMAPHORE_TYPE_TIMELINE_KHR = SEMAPHORE_TYPE_TIMELINE
+
+
+-- No documentation found for TopLevel "VK_SEMAPHORE_WAIT_ANY_BIT_KHR"
+pattern SEMAPHORE_WAIT_ANY_BIT_KHR = SEMAPHORE_WAIT_ANY_BIT
+
+
+-- No documentation found for TopLevel "vkGetSemaphoreCounterValueKHR"
+getSemaphoreCounterValueKHR = getSemaphoreCounterValue
+
+
+-- No documentation found for TopLevel "vkWaitSemaphoresKHR"
+waitSemaphoresKHR = waitSemaphores
+
+
+-- No documentation found for TopLevel "vkSignalSemaphoreKHR"
+signalSemaphoreKHR = signalSemaphore
+
+
+-- No documentation found for TopLevel "VkSemaphoreWaitFlagsKHR"
+type SemaphoreWaitFlagsKHR = SemaphoreWaitFlags
+
+
+-- No documentation found for TopLevel "VkSemaphoreTypeKHR"
+type SemaphoreTypeKHR = SemaphoreType
+
+
+-- No documentation found for TopLevel "VkSemaphoreWaitFlagBitsKHR"
+type SemaphoreWaitFlagBitsKHR = SemaphoreWaitFlagBits
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceTimelineSemaphoreFeaturesKHR"
+type PhysicalDeviceTimelineSemaphoreFeaturesKHR = PhysicalDeviceTimelineSemaphoreFeatures
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceTimelineSemaphorePropertiesKHR"
+type PhysicalDeviceTimelineSemaphorePropertiesKHR = PhysicalDeviceTimelineSemaphoreProperties
+
+
+-- No documentation found for TopLevel "VkSemaphoreTypeCreateInfoKHR"
+type SemaphoreTypeCreateInfoKHR = SemaphoreTypeCreateInfo
+
+
+-- No documentation found for TopLevel "VkTimelineSemaphoreSubmitInfoKHR"
+type TimelineSemaphoreSubmitInfoKHR = TimelineSemaphoreSubmitInfo
+
+
+-- No documentation found for TopLevel "VkSemaphoreWaitInfoKHR"
+type SemaphoreWaitInfoKHR = SemaphoreWaitInfo
+
+
+-- No documentation found for TopLevel "VkSemaphoreSignalInfoKHR"
+type SemaphoreSignalInfoKHR = SemaphoreSignalInfo
+
+
+type KHR_TIMELINE_SEMAPHORE_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION"
+pattern KHR_TIMELINE_SEMAPHORE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_TIMELINE_SEMAPHORE_SPEC_VERSION = 2
+
+
+type KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME = "VK_KHR_timeline_semaphore"
+
+-- No documentation found for TopLevel "VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME"
+pattern KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME = "VK_KHR_timeline_semaphore"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_uniform_buffer_standard_layout.hs b/src/Vulkan/Extensions/VK_KHR_uniform_buffer_standard_layout.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_uniform_buffer_standard_layout.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_uniform_buffer_standard_layout  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR
+                                                                , PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR
+                                                                , KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION
+                                                                , pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION
+                                                                , KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME
+                                                                , pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME
+                                                                ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout (PhysicalDeviceUniformBufferStandardLayoutFeatures)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR"
+type PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR = PhysicalDeviceUniformBufferStandardLayoutFeatures
+
+
+type KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION"
+pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION = 1
+
+
+type KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME = "VK_KHR_uniform_buffer_standard_layout"
+
+-- No documentation found for TopLevel "VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME"
+pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME = "VK_KHR_uniform_buffer_standard_layout"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_variable_pointers.hs b/src/Vulkan/Extensions/VK_KHR_variable_pointers.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_variable_pointers.hs
@@ -0,0 +1,43 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_variable_pointers  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR
+                                                   , pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR
+                                                   , PhysicalDeviceVariablePointersFeaturesKHR
+                                                   , PhysicalDeviceVariablePointerFeaturesKHR
+                                                   , KHR_VARIABLE_POINTERS_SPEC_VERSION
+                                                   , pattern KHR_VARIABLE_POINTERS_SPEC_VERSION
+                                                   , KHR_VARIABLE_POINTERS_EXTENSION_NAME
+                                                   , pattern KHR_VARIABLE_POINTERS_EXTENSION_NAME
+                                                   ) where
+
+import Data.String (IsString)
+import Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers (PhysicalDeviceVariablePointersFeatures)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceVariablePointersFeaturesKHR"
+type PhysicalDeviceVariablePointersFeaturesKHR = PhysicalDeviceVariablePointersFeatures
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceVariablePointerFeaturesKHR"
+type PhysicalDeviceVariablePointerFeaturesKHR = PhysicalDeviceVariablePointersFeatures
+
+
+type KHR_VARIABLE_POINTERS_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_VARIABLE_POINTERS_SPEC_VERSION"
+pattern KHR_VARIABLE_POINTERS_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_VARIABLE_POINTERS_SPEC_VERSION = 1
+
+
+type KHR_VARIABLE_POINTERS_EXTENSION_NAME = "VK_KHR_variable_pointers"
+
+-- No documentation found for TopLevel "VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME"
+pattern KHR_VARIABLE_POINTERS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_VARIABLE_POINTERS_EXTENSION_NAME = "VK_KHR_variable_pointers"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_vulkan_memory_model.hs b/src/Vulkan/Extensions/VK_KHR_vulkan_memory_model.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_vulkan_memory_model.hs
@@ -0,0 +1,33 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_vulkan_memory_model  ( pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR
+                                                     , PhysicalDeviceVulkanMemoryModelFeaturesKHR
+                                                     , KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION
+                                                     , pattern KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION
+                                                     , KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME
+                                                     , pattern KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME
+                                                     ) where
+
+import Data.String (IsString)
+import Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES))
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR"
+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceVulkanMemoryModelFeaturesKHR"
+type PhysicalDeviceVulkanMemoryModelFeaturesKHR = PhysicalDeviceVulkanMemoryModelFeatures
+
+
+type KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION"
+pattern KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION = 3
+
+
+type KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME = "VK_KHR_vulkan_memory_model"
+
+-- No documentation found for TopLevel "VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME"
+pattern KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME = "VK_KHR_vulkan_memory_model"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_wayland_surface.hs b/src/Vulkan/Extensions/VK_KHR_wayland_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_wayland_surface.hs
@@ -0,0 +1,290 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_wayland_surface  ( createWaylandSurfaceKHR
+                                                 , getPhysicalDeviceWaylandPresentationSupportKHR
+                                                 , WaylandSurfaceCreateInfoKHR(..)
+                                                 , WaylandSurfaceCreateFlagsKHR(..)
+                                                 , KHR_WAYLAND_SURFACE_SPEC_VERSION
+                                                 , pattern KHR_WAYLAND_SURFACE_SPEC_VERSION
+                                                 , KHR_WAYLAND_SURFACE_EXTENSION_NAME
+                                                 , pattern KHR_WAYLAND_SURFACE_EXTENSION_NAME
+                                                 , SurfaceKHR(..)
+                                                 , Wl_display
+                                                 , Wl_surface
+                                                 ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Bool32(..))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateWaylandSurfaceKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceWaylandPresentationSupportKHR))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Extensions.WSITypes (Wl_display)
+import Vulkan.Extensions.WSITypes (Wl_surface)
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.WSITypes (Wl_display)
+import Vulkan.Extensions.WSITypes (Wl_surface)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateWaylandSurfaceKHR
+  :: FunPtr (Ptr Instance_T -> Ptr WaylandSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr WaylandSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateWaylandSurfaceKHR - Create a
+-- 'Vulkan.Extensions.Handles.SurfaceKHR' object for a Wayland window
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to a 'WaylandSurfaceCreateInfoKHR'
+--     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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'WaylandSurfaceCreateInfoKHR' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR', 'WaylandSurfaceCreateInfoKHR'
+createWaylandSurfaceKHR :: forall io . MonadIO io => Instance -> WaylandSurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createWaylandSurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateWaylandSurfaceKHRPtr = pVkCreateWaylandSurfaceKHR (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateWaylandSurfaceKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateWaylandSurfaceKHR is null" Nothing Nothing
+  let vkCreateWaylandSurfaceKHR' = mkVkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHRPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateWaylandSurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceWaylandPresentationSupportKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Wl_display -> IO Bool32) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Wl_display -> IO Bool32
+
+-- | vkGetPhysicalDeviceWaylandPresentationSupportKHR - Query physical device
+-- for presentation to Wayland
+--
+-- = 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
+--
+-- This platform-specific function /can/ be called prior to creating a
+-- surface.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceWaylandPresentationSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> Ptr Wl_display -> io (Bool)
+getPhysicalDeviceWaylandPresentationSupportKHR physicalDevice queueFamilyIndex display = liftIO $ do
+  let vkGetPhysicalDeviceWaylandPresentationSupportKHRPtr = pVkGetPhysicalDeviceWaylandPresentationSupportKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  unless (vkGetPhysicalDeviceWaylandPresentationSupportKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceWaylandPresentationSupportKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceWaylandPresentationSupportKHR' = mkVkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHRPtr
+  r <- vkGetPhysicalDeviceWaylandPresentationSupportKHR' (physicalDeviceHandle (physicalDevice)) (queueFamilyIndex) (display)
+  pure $ ((bool32ToBool r))
+
+
+-- | VkWaylandSurfaceCreateInfoKHR - Structure specifying parameters of a
+-- newly created Wayland surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'WaylandSurfaceCreateFlagsKHR', 'createWaylandSurfaceKHR'
+data WaylandSurfaceCreateInfoKHR = WaylandSurfaceCreateInfoKHR
+  { -- | @flags@ /must/ be @0@
+    flags :: WaylandSurfaceCreateFlagsKHR
+  , -- | @display@ /must/ point to a valid Wayland @wl_display@
+    display :: Ptr Wl_display
+  , -- | @surface@ /must/ point to a valid Wayland @wl_surface@
+    surface :: Ptr Wl_surface
+  }
+  deriving (Typeable)
+deriving instance Show WaylandSurfaceCreateInfoKHR
+
+instance ToCStruct WaylandSurfaceCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p WaylandSurfaceCreateInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr WaylandSurfaceCreateFlagsKHR)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr Wl_display))) (display)
+    poke ((p `plusPtr` 32 :: Ptr (Ptr Wl_surface))) (surface)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr Wl_display))) (zero)
+    poke ((p `plusPtr` 32 :: Ptr (Ptr Wl_surface))) (zero)
+    f
+
+instance FromCStruct WaylandSurfaceCreateInfoKHR where
+  peekCStruct p = do
+    flags <- peek @WaylandSurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr WaylandSurfaceCreateFlagsKHR))
+    display <- peek @(Ptr Wl_display) ((p `plusPtr` 24 :: Ptr (Ptr Wl_display)))
+    surface <- peek @(Ptr Wl_surface) ((p `plusPtr` 32 :: Ptr (Ptr Wl_surface)))
+    pure $ WaylandSurfaceCreateInfoKHR
+             flags display surface
+
+instance Storable WaylandSurfaceCreateInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero WaylandSurfaceCreateInfoKHR where
+  zero = WaylandSurfaceCreateInfoKHR
+           zero
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkWaylandSurfaceCreateFlagsKHR"
+newtype WaylandSurfaceCreateFlagsKHR = WaylandSurfaceCreateFlagsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show WaylandSurfaceCreateFlagsKHR where
+  showsPrec p = \case
+    WaylandSurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "WaylandSurfaceCreateFlagsKHR 0x" . showHex x)
+
+instance Read WaylandSurfaceCreateFlagsKHR where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "WaylandSurfaceCreateFlagsKHR")
+                       v <- step readPrec
+                       pure (WaylandSurfaceCreateFlagsKHR v)))
+
+
+type KHR_WAYLAND_SURFACE_SPEC_VERSION = 6
+
+-- No documentation found for TopLevel "VK_KHR_WAYLAND_SURFACE_SPEC_VERSION"
+pattern KHR_WAYLAND_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_WAYLAND_SURFACE_SPEC_VERSION = 6
+
+
+type KHR_WAYLAND_SURFACE_EXTENSION_NAME = "VK_KHR_wayland_surface"
+
+-- No documentation found for TopLevel "VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME"
+pattern KHR_WAYLAND_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_WAYLAND_SURFACE_EXTENSION_NAME = "VK_KHR_wayland_surface"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_wayland_surface.hs-boot b/src/Vulkan/Extensions/VK_KHR_wayland_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_wayland_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_wayland_surface  (WaylandSurfaceCreateInfoKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data WaylandSurfaceCreateInfoKHR
+
+instance ToCStruct WaylandSurfaceCreateInfoKHR
+instance Show WaylandSurfaceCreateInfoKHR
+
+instance FromCStruct WaylandSurfaceCreateInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs b/src/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs
@@ -0,0 +1,198 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_win32_keyed_mutex  ( Win32KeyedMutexAcquireReleaseInfoKHR(..)
+                                                   , KHR_WIN32_KEYED_MUTEX_SPEC_VERSION
+                                                   , pattern KHR_WIN32_KEYED_MUTEX_SPEC_VERSION
+                                                   , KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME
+                                                   , pattern KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME
+                                                   ) where
+
+import Control.Monad (unless)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR))
+-- | VkWin32KeyedMutexAcquireReleaseInfoKHR - Use the Windows keyed mutex
+-- mechanism to synchronize work
+--
+-- == Valid Usage
+--
+-- -   Each member of @pAcquireSyncs@ and @pReleaseSyncs@ /must/ be a
+--     device memory object imported by setting
+--     'Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR'::@handleType@
+--     to
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT'
+--     or
+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR'
+--
+-- -   If @acquireCount@ is not @0@, @pAcquireSyncs@ /must/ be a valid
+--     pointer to an array of @acquireCount@ valid
+--     'Vulkan.Core10.Handles.DeviceMemory' 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
+--     'Vulkan.Core10.Handles.DeviceMemory' 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 of non-ignored parameters
+--     /must/ have been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data Win32KeyedMutexAcquireReleaseInfoKHR = Win32KeyedMutexAcquireReleaseInfoKHR
+  { -- | @pAcquireSyncs@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.DeviceMemory' objects which were imported from
+    -- Direct3D 11 resources.
+    acquireSyncs :: Vector DeviceMemory
+  , -- | @pAcquireKeys@ is a pointer to an array of mutex key values to wait for
+    -- prior to beginning the submitted work. Entries refer to the keyed mutex
+    -- associated with the corresponding entries in @pAcquireSyncs@.
+    acquireKeys :: Vector Word64
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "pAcquireTimeouts"
+    acquireTimeouts :: Vector Word32
+  , -- | @pReleaseSyncs@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.DeviceMemory' objects which were imported from
+    -- Direct3D 11 resources.
+    releaseSyncs :: Vector DeviceMemory
+  , -- | @pReleaseKeys@ is a pointer to an array of mutex key values to set when
+    -- the submitted work has completed. Entries refer to the keyed mutex
+    -- associated with the corresponding entries in @pReleaseSyncs@.
+    releaseKeys :: Vector Word64
+  }
+  deriving (Typeable)
+deriving instance Show Win32KeyedMutexAcquireReleaseInfoKHR
+
+instance ToCStruct Win32KeyedMutexAcquireReleaseInfoKHR where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p Win32KeyedMutexAcquireReleaseInfoKHR{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    let pAcquireSyncsLength = Data.Vector.length $ (acquireSyncs)
+    lift $ unless ((Data.Vector.length $ (acquireKeys)) == pAcquireSyncsLength) $
+      throwIO $ IOError Nothing InvalidArgument "" "pAcquireKeys and pAcquireSyncs must have the same length" Nothing Nothing
+    lift $ unless ((Data.Vector.length $ (acquireTimeouts)) == pAcquireSyncsLength) $
+      throwIO $ IOError Nothing InvalidArgument "" "pAcquireTimeouts and pAcquireSyncs must have the same length" Nothing Nothing
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral pAcquireSyncsLength :: Word32))
+    pPAcquireSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (acquireSyncs)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (acquireSyncs)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory))) (pPAcquireSyncs')
+    pPAcquireKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (acquireKeys)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (acquireKeys)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPAcquireKeys')
+    pPAcquireTimeouts' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (acquireTimeouts)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireTimeouts' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (acquireTimeouts)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPAcquireTimeouts')
+    let pReleaseSyncsLength = Data.Vector.length $ (releaseSyncs)
+    lift $ unless ((Data.Vector.length $ (releaseKeys)) == pReleaseSyncsLength) $
+      throwIO $ IOError Nothing InvalidArgument "" "pReleaseKeys and pReleaseSyncs must have the same length" Nothing Nothing
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral pReleaseSyncsLength :: Word32))
+    pPReleaseSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (releaseSyncs)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (releaseSyncs)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory))) (pPReleaseSyncs')
+    pPReleaseKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (releaseKeys)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (releaseKeys)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word64))) (pPReleaseKeys')
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPAcquireSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory))) (pPAcquireSyncs')
+    pPAcquireKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPAcquireKeys')
+    pPAcquireTimeouts' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireTimeouts' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPAcquireTimeouts')
+    pPReleaseSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory))) (pPReleaseSyncs')
+    pPReleaseKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word64))) (pPReleaseKeys')
+    lift $ f
+
+instance FromCStruct Win32KeyedMutexAcquireReleaseInfoKHR where
+  peekCStruct p = do
+    acquireCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pAcquireSyncs <- peek @(Ptr DeviceMemory) ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory)))
+    pAcquireSyncs' <- generateM (fromIntegral acquireCount) (\i -> peek @DeviceMemory ((pAcquireSyncs `advancePtrBytes` (8 * (i)) :: Ptr DeviceMemory)))
+    pAcquireKeys <- peek @(Ptr Word64) ((p `plusPtr` 32 :: Ptr (Ptr Word64)))
+    pAcquireKeys' <- generateM (fromIntegral acquireCount) (\i -> peek @Word64 ((pAcquireKeys `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    pAcquireTimeouts <- peek @(Ptr Word32) ((p `plusPtr` 40 :: Ptr (Ptr Word32)))
+    pAcquireTimeouts' <- generateM (fromIntegral acquireCount) (\i -> peek @Word32 ((pAcquireTimeouts `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    releaseCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pReleaseSyncs <- peek @(Ptr DeviceMemory) ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory)))
+    pReleaseSyncs' <- generateM (fromIntegral releaseCount) (\i -> peek @DeviceMemory ((pReleaseSyncs `advancePtrBytes` (8 * (i)) :: Ptr DeviceMemory)))
+    pReleaseKeys <- peek @(Ptr Word64) ((p `plusPtr` 64 :: Ptr (Ptr Word64)))
+    pReleaseKeys' <- generateM (fromIntegral releaseCount) (\i -> peek @Word64 ((pReleaseKeys `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    pure $ Win32KeyedMutexAcquireReleaseInfoKHR
+             pAcquireSyncs' pAcquireKeys' pAcquireTimeouts' pReleaseSyncs' pReleaseKeys'
+
+instance Zero Win32KeyedMutexAcquireReleaseInfoKHR where
+  zero = Win32KeyedMutexAcquireReleaseInfoKHR
+           mempty
+           mempty
+           mempty
+           mempty
+           mempty
+
+
+type KHR_WIN32_KEYED_MUTEX_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION"
+pattern KHR_WIN32_KEYED_MUTEX_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_WIN32_KEYED_MUTEX_SPEC_VERSION = 1
+
+
+type KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_KHR_win32_keyed_mutex"
+
+-- No documentation found for TopLevel "VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME"
+pattern KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_KHR_win32_keyed_mutex"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs-boot b/src/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_win32_keyed_mutex  (Win32KeyedMutexAcquireReleaseInfoKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data Win32KeyedMutexAcquireReleaseInfoKHR
+
+instance ToCStruct Win32KeyedMutexAcquireReleaseInfoKHR
+instance Show Win32KeyedMutexAcquireReleaseInfoKHR
+
+instance FromCStruct Win32KeyedMutexAcquireReleaseInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_win32_surface.hs b/src/Vulkan/Extensions/VK_KHR_win32_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_win32_surface.hs
@@ -0,0 +1,297 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_win32_surface  ( createWin32SurfaceKHR
+                                               , getPhysicalDeviceWin32PresentationSupportKHR
+                                               , Win32SurfaceCreateInfoKHR(..)
+                                               , Win32SurfaceCreateFlagsKHR(..)
+                                               , KHR_WIN32_SURFACE_SPEC_VERSION
+                                               , pattern KHR_WIN32_SURFACE_SPEC_VERSION
+                                               , KHR_WIN32_SURFACE_EXTENSION_NAME
+                                               , pattern KHR_WIN32_SURFACE_EXTENSION_NAME
+                                               , SurfaceKHR(..)
+                                               , HINSTANCE
+                                               , HWND
+                                               ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Bool32(..))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Extensions.WSITypes (HINSTANCE)
+import Vulkan.Extensions.WSITypes (HWND)
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateWin32SurfaceKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceWin32PresentationSupportKHR))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (HINSTANCE)
+import Vulkan.Extensions.WSITypes (HWND)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateWin32SurfaceKHR
+  :: FunPtr (Ptr Instance_T -> Ptr Win32SurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr Win32SurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateWin32SurfaceKHR - Create a
+-- 'Vulkan.Extensions.Handles.SurfaceKHR' object for an Win32 native window
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to a 'Win32SurfaceCreateInfoKHR'
+--     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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'Win32SurfaceCreateInfoKHR' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR', 'Win32SurfaceCreateInfoKHR'
+createWin32SurfaceKHR :: forall io . MonadIO io => Instance -> Win32SurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createWin32SurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateWin32SurfaceKHRPtr = pVkCreateWin32SurfaceKHR (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateWin32SurfaceKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateWin32SurfaceKHR is null" Nothing Nothing
+  let vkCreateWin32SurfaceKHR' = mkVkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHRPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateWin32SurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceWin32PresentationSupportKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> IO Bool32) -> Ptr PhysicalDevice_T -> Word32 -> IO Bool32
+
+-- | vkGetPhysicalDeviceWin32PresentationSupportKHR - query queue family
+-- support for presentation on a Win32 display
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device.
+--
+-- -   @queueFamilyIndex@ is the queue family index.
+--
+-- = Description
+--
+-- This platform-specific function /can/ be called prior to creating a
+-- surface.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceWin32PresentationSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> io (Bool)
+getPhysicalDeviceWin32PresentationSupportKHR physicalDevice queueFamilyIndex = liftIO $ do
+  let vkGetPhysicalDeviceWin32PresentationSupportKHRPtr = pVkGetPhysicalDeviceWin32PresentationSupportKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  unless (vkGetPhysicalDeviceWin32PresentationSupportKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceWin32PresentationSupportKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceWin32PresentationSupportKHR' = mkVkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHRPtr
+  r <- vkGetPhysicalDeviceWin32PresentationSupportKHR' (physicalDeviceHandle (physicalDevice)) (queueFamilyIndex)
+  pure $ ((bool32ToBool r))
+
+
+-- | VkWin32SurfaceCreateInfoKHR - Structure specifying parameters of a newly
+-- created Win32 surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Win32SurfaceCreateFlagsKHR', 'createWin32SurfaceKHR'
+data Win32SurfaceCreateInfoKHR = Win32SurfaceCreateInfoKHR
+  { -- | @flags@ /must/ be @0@
+    flags :: Win32SurfaceCreateFlagsKHR
+  , -- | @hinstance@ /must/ be a valid Win32
+    -- 'Vulkan.Extensions.WSITypes.HINSTANCE'
+    hinstance :: HINSTANCE
+  , -- | @hwnd@ /must/ be a valid Win32 'Vulkan.Extensions.WSITypes.HWND'
+    hwnd :: HWND
+  }
+  deriving (Typeable)
+deriving instance Show Win32SurfaceCreateInfoKHR
+
+instance ToCStruct Win32SurfaceCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p Win32SurfaceCreateInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Win32SurfaceCreateFlagsKHR)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr HINSTANCE)) (hinstance)
+    poke ((p `plusPtr` 32 :: Ptr HWND)) (hwnd)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr HINSTANCE)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr HWND)) (zero)
+    f
+
+instance FromCStruct Win32SurfaceCreateInfoKHR where
+  peekCStruct p = do
+    flags <- peek @Win32SurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr Win32SurfaceCreateFlagsKHR))
+    hinstance <- peek @HINSTANCE ((p `plusPtr` 24 :: Ptr HINSTANCE))
+    hwnd <- peek @HWND ((p `plusPtr` 32 :: Ptr HWND))
+    pure $ Win32SurfaceCreateInfoKHR
+             flags hinstance hwnd
+
+instance Storable Win32SurfaceCreateInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero Win32SurfaceCreateInfoKHR where
+  zero = Win32SurfaceCreateInfoKHR
+           zero
+           zero
+           zero
+
+
+-- | VkWin32SurfaceCreateFlagsKHR - Reserved for future use
+--
+-- = Description
+--
+-- 'Win32SurfaceCreateFlagsKHR' is a bitmask type for setting a mask, but
+-- is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'Win32SurfaceCreateInfoKHR'
+newtype Win32SurfaceCreateFlagsKHR = Win32SurfaceCreateFlagsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show Win32SurfaceCreateFlagsKHR where
+  showsPrec p = \case
+    Win32SurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "Win32SurfaceCreateFlagsKHR 0x" . showHex x)
+
+instance Read Win32SurfaceCreateFlagsKHR where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "Win32SurfaceCreateFlagsKHR")
+                       v <- step readPrec
+                       pure (Win32SurfaceCreateFlagsKHR v)))
+
+
+type KHR_WIN32_SURFACE_SPEC_VERSION = 6
+
+-- No documentation found for TopLevel "VK_KHR_WIN32_SURFACE_SPEC_VERSION"
+pattern KHR_WIN32_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_WIN32_SURFACE_SPEC_VERSION = 6
+
+
+type KHR_WIN32_SURFACE_EXTENSION_NAME = "VK_KHR_win32_surface"
+
+-- No documentation found for TopLevel "VK_KHR_WIN32_SURFACE_EXTENSION_NAME"
+pattern KHR_WIN32_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_WIN32_SURFACE_EXTENSION_NAME = "VK_KHR_win32_surface"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_win32_surface.hs-boot b/src/Vulkan/Extensions/VK_KHR_win32_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_win32_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_win32_surface  (Win32SurfaceCreateInfoKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data Win32SurfaceCreateInfoKHR
+
+instance ToCStruct Win32SurfaceCreateInfoKHR
+instance Show Win32SurfaceCreateInfoKHR
+
+instance FromCStruct Win32SurfaceCreateInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_xcb_surface.hs b/src/Vulkan/Extensions/VK_KHR_xcb_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_xcb_surface.hs
@@ -0,0 +1,293 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_xcb_surface  ( createXcbSurfaceKHR
+                                             , getPhysicalDeviceXcbPresentationSupportKHR
+                                             , XcbSurfaceCreateInfoKHR(..)
+                                             , XcbSurfaceCreateFlagsKHR(..)
+                                             , KHR_XCB_SURFACE_SPEC_VERSION
+                                             , pattern KHR_XCB_SURFACE_SPEC_VERSION
+                                             , KHR_XCB_SURFACE_EXTENSION_NAME
+                                             , pattern KHR_XCB_SURFACE_EXTENSION_NAME
+                                             , SurfaceKHR(..)
+                                             , Xcb_visualid_t
+                                             , Xcb_window_t
+                                             , Xcb_connection_t
+                                             ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Bool32(..))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateXcbSurfaceKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceXcbPresentationSupportKHR))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Extensions.WSITypes (Xcb_connection_t)
+import Vulkan.Extensions.WSITypes (Xcb_visualid_t)
+import Vulkan.Extensions.WSITypes (Xcb_window_t)
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.WSITypes (Xcb_connection_t)
+import Vulkan.Extensions.WSITypes (Xcb_visualid_t)
+import Vulkan.Extensions.WSITypes (Xcb_window_t)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateXcbSurfaceKHR
+  :: FunPtr (Ptr Instance_T -> Ptr XcbSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr XcbSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateXcbSurfaceKHR - Create a 'Vulkan.Extensions.Handles.SurfaceKHR'
+-- object for a X11 window, using the XCB client-side library
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to a 'XcbSurfaceCreateInfoKHR' 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'XcbSurfaceCreateInfoKHR' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR', 'XcbSurfaceCreateInfoKHR'
+createXcbSurfaceKHR :: forall io . MonadIO io => Instance -> XcbSurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createXcbSurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateXcbSurfaceKHRPtr = pVkCreateXcbSurfaceKHR (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateXcbSurfaceKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateXcbSurfaceKHR is null" Nothing Nothing
+  let vkCreateXcbSurfaceKHR' = mkVkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHRPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateXcbSurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceXcbPresentationSupportKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Xcb_connection_t -> Xcb_visualid_t -> IO Bool32) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Xcb_connection_t -> Xcb_visualid_t -> IO Bool32
+
+-- | vkGetPhysicalDeviceXcbPresentationSupportKHR - Query physical device for
+-- presentation to X11 server using XCB
+--
+-- = 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
+--
+-- This platform-specific function /can/ be called prior to creating a
+-- surface.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceXcbPresentationSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> Ptr Xcb_connection_t -> ("visual_id" ::: Xcb_visualid_t) -> io (Bool)
+getPhysicalDeviceXcbPresentationSupportKHR physicalDevice queueFamilyIndex connection visual_id = liftIO $ do
+  let vkGetPhysicalDeviceXcbPresentationSupportKHRPtr = pVkGetPhysicalDeviceXcbPresentationSupportKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  unless (vkGetPhysicalDeviceXcbPresentationSupportKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceXcbPresentationSupportKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceXcbPresentationSupportKHR' = mkVkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHRPtr
+  r <- vkGetPhysicalDeviceXcbPresentationSupportKHR' (physicalDeviceHandle (physicalDevice)) (queueFamilyIndex) (connection) (visual_id)
+  pure $ ((bool32ToBool r))
+
+
+-- | VkXcbSurfaceCreateInfoKHR - Structure specifying parameters of a newly
+-- created Xcb surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'XcbSurfaceCreateFlagsKHR', 'createXcbSurfaceKHR'
+data XcbSurfaceCreateInfoKHR = XcbSurfaceCreateInfoKHR
+  { -- | @flags@ /must/ be @0@
+    flags :: XcbSurfaceCreateFlagsKHR
+  , -- | @connection@ /must/ point to a valid X11 @xcb_connection_t@
+    connection :: Ptr Xcb_connection_t
+  , -- | @window@ /must/ be a valid X11 @xcb_window_t@
+    window :: Xcb_window_t
+  }
+  deriving (Typeable)
+deriving instance Show XcbSurfaceCreateInfoKHR
+
+instance ToCStruct XcbSurfaceCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p XcbSurfaceCreateInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr XcbSurfaceCreateFlagsKHR)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr Xcb_connection_t))) (connection)
+    poke ((p `plusPtr` 32 :: Ptr Xcb_window_t)) (window)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr Xcb_connection_t))) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Xcb_window_t)) (zero)
+    f
+
+instance FromCStruct XcbSurfaceCreateInfoKHR where
+  peekCStruct p = do
+    flags <- peek @XcbSurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr XcbSurfaceCreateFlagsKHR))
+    connection <- peek @(Ptr Xcb_connection_t) ((p `plusPtr` 24 :: Ptr (Ptr Xcb_connection_t)))
+    window <- peek @Xcb_window_t ((p `plusPtr` 32 :: Ptr Xcb_window_t))
+    pure $ XcbSurfaceCreateInfoKHR
+             flags connection window
+
+instance Storable XcbSurfaceCreateInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero XcbSurfaceCreateInfoKHR where
+  zero = XcbSurfaceCreateInfoKHR
+           zero
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkXcbSurfaceCreateFlagsKHR"
+newtype XcbSurfaceCreateFlagsKHR = XcbSurfaceCreateFlagsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show XcbSurfaceCreateFlagsKHR where
+  showsPrec p = \case
+    XcbSurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "XcbSurfaceCreateFlagsKHR 0x" . showHex x)
+
+instance Read XcbSurfaceCreateFlagsKHR where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "XcbSurfaceCreateFlagsKHR")
+                       v <- step readPrec
+                       pure (XcbSurfaceCreateFlagsKHR v)))
+
+
+type KHR_XCB_SURFACE_SPEC_VERSION = 6
+
+-- No documentation found for TopLevel "VK_KHR_XCB_SURFACE_SPEC_VERSION"
+pattern KHR_XCB_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_XCB_SURFACE_SPEC_VERSION = 6
+
+
+type KHR_XCB_SURFACE_EXTENSION_NAME = "VK_KHR_xcb_surface"
+
+-- No documentation found for TopLevel "VK_KHR_XCB_SURFACE_EXTENSION_NAME"
+pattern KHR_XCB_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_XCB_SURFACE_EXTENSION_NAME = "VK_KHR_xcb_surface"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_xcb_surface.hs-boot b/src/Vulkan/Extensions/VK_KHR_xcb_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_xcb_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_xcb_surface  (XcbSurfaceCreateInfoKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data XcbSurfaceCreateInfoKHR
+
+instance ToCStruct XcbSurfaceCreateInfoKHR
+instance Show XcbSurfaceCreateInfoKHR
+
+instance FromCStruct XcbSurfaceCreateInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_KHR_xlib_surface.hs b/src/Vulkan/Extensions/VK_KHR_xlib_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_xlib_surface.hs
@@ -0,0 +1,295 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_xlib_surface  ( createXlibSurfaceKHR
+                                              , getPhysicalDeviceXlibPresentationSupportKHR
+                                              , XlibSurfaceCreateInfoKHR(..)
+                                              , XlibSurfaceCreateFlagsKHR(..)
+                                              , KHR_XLIB_SURFACE_SPEC_VERSION
+                                              , pattern KHR_XLIB_SURFACE_SPEC_VERSION
+                                              , KHR_XLIB_SURFACE_EXTENSION_NAME
+                                              , pattern KHR_XLIB_SURFACE_EXTENSION_NAME
+                                              , SurfaceKHR(..)
+                                              , Display
+                                              , VisualID
+                                              , Window
+                                              ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Bool32(..))
+import Vulkan.Extensions.WSITypes (Display)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateXlibSurfaceKHR))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceXlibPresentationSupportKHR))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Extensions.WSITypes (VisualID)
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Extensions.WSITypes (Window)
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (Display)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.Extensions.WSITypes (VisualID)
+import Vulkan.Extensions.WSITypes (Window)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateXlibSurfaceKHR
+  :: FunPtr (Ptr Instance_T -> Ptr XlibSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr XlibSurfaceCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateXlibSurfaceKHR - Create a 'Vulkan.Extensions.Handles.SurfaceKHR'
+-- object for an X11 window, using the Xlib client-side library
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to a 'XlibSurfaceCreateInfoKHR' 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'XlibSurfaceCreateInfoKHR' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR', 'XlibSurfaceCreateInfoKHR'
+createXlibSurfaceKHR :: forall io . MonadIO io => Instance -> XlibSurfaceCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createXlibSurfaceKHR instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateXlibSurfaceKHRPtr = pVkCreateXlibSurfaceKHR (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateXlibSurfaceKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateXlibSurfaceKHR is null" Nothing Nothing
+  let vkCreateXlibSurfaceKHR' = mkVkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHRPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateXlibSurfaceKHR' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceXlibPresentationSupportKHR
+  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Display -> VisualID -> IO Bool32) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Display -> VisualID -> IO Bool32
+
+-- | vkGetPhysicalDeviceXlibPresentationSupportKHR - Query physical device
+-- for presentation to X11 server using Xlib
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device.
+--
+-- -   @queueFamilyIndex@ is the queue family index.
+--
+-- -   @dpy@ is a pointer to an Xlib 'Vulkan.Extensions.WSITypes.Display'
+--     connection to the server.
+--
+-- -   @visualId@ is an X11 visual ('Vulkan.Extensions.WSITypes.VisualID').
+--
+-- = Description
+--
+-- This platform-specific function /can/ be called prior to creating a
+-- surface.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceXlibPresentationSupportKHR :: forall io . MonadIO io => PhysicalDevice -> ("queueFamilyIndex" ::: Word32) -> ("dpy" ::: Ptr Display) -> VisualID -> io (Bool)
+getPhysicalDeviceXlibPresentationSupportKHR physicalDevice queueFamilyIndex dpy visualID = liftIO $ do
+  let vkGetPhysicalDeviceXlibPresentationSupportKHRPtr = pVkGetPhysicalDeviceXlibPresentationSupportKHR (instanceCmds (physicalDevice :: PhysicalDevice))
+  unless (vkGetPhysicalDeviceXlibPresentationSupportKHRPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceXlibPresentationSupportKHR is null" Nothing Nothing
+  let vkGetPhysicalDeviceXlibPresentationSupportKHR' = mkVkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHRPtr
+  r <- vkGetPhysicalDeviceXlibPresentationSupportKHR' (physicalDeviceHandle (physicalDevice)) (queueFamilyIndex) (dpy) (visualID)
+  pure $ ((bool32ToBool r))
+
+
+-- | VkXlibSurfaceCreateInfoKHR - Structure specifying parameters of a newly
+-- created Xlib surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'XlibSurfaceCreateFlagsKHR', 'createXlibSurfaceKHR'
+data XlibSurfaceCreateInfoKHR = XlibSurfaceCreateInfoKHR
+  { -- | @flags@ /must/ be @0@
+    flags :: XlibSurfaceCreateFlagsKHR
+  , -- | @dpy@ /must/ point to a valid Xlib 'Vulkan.Extensions.WSITypes.Display'
+    dpy :: Ptr Display
+  , -- | @window@ /must/ be a valid Xlib 'Vulkan.Extensions.WSITypes.Window'
+    window :: Window
+  }
+  deriving (Typeable)
+deriving instance Show XlibSurfaceCreateInfoKHR
+
+instance ToCStruct XlibSurfaceCreateInfoKHR where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p XlibSurfaceCreateInfoKHR{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr XlibSurfaceCreateFlagsKHR)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr Display))) (dpy)
+    poke ((p `plusPtr` 32 :: Ptr Window)) (window)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr Display))) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Window)) (zero)
+    f
+
+instance FromCStruct XlibSurfaceCreateInfoKHR where
+  peekCStruct p = do
+    flags <- peek @XlibSurfaceCreateFlagsKHR ((p `plusPtr` 16 :: Ptr XlibSurfaceCreateFlagsKHR))
+    dpy <- peek @(Ptr Display) ((p `plusPtr` 24 :: Ptr (Ptr Display)))
+    window <- peek @Window ((p `plusPtr` 32 :: Ptr Window))
+    pure $ XlibSurfaceCreateInfoKHR
+             flags dpy window
+
+instance Storable XlibSurfaceCreateInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero XlibSurfaceCreateInfoKHR where
+  zero = XlibSurfaceCreateInfoKHR
+           zero
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkXlibSurfaceCreateFlagsKHR"
+newtype XlibSurfaceCreateFlagsKHR = XlibSurfaceCreateFlagsKHR Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show XlibSurfaceCreateFlagsKHR where
+  showsPrec p = \case
+    XlibSurfaceCreateFlagsKHR x -> showParen (p >= 11) (showString "XlibSurfaceCreateFlagsKHR 0x" . showHex x)
+
+instance Read XlibSurfaceCreateFlagsKHR where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "XlibSurfaceCreateFlagsKHR")
+                       v <- step readPrec
+                       pure (XlibSurfaceCreateFlagsKHR v)))
+
+
+type KHR_XLIB_SURFACE_SPEC_VERSION = 6
+
+-- No documentation found for TopLevel "VK_KHR_XLIB_SURFACE_SPEC_VERSION"
+pattern KHR_XLIB_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern KHR_XLIB_SURFACE_SPEC_VERSION = 6
+
+
+type KHR_XLIB_SURFACE_EXTENSION_NAME = "VK_KHR_xlib_surface"
+
+-- No documentation found for TopLevel "VK_KHR_XLIB_SURFACE_EXTENSION_NAME"
+pattern KHR_XLIB_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern KHR_XLIB_SURFACE_EXTENSION_NAME = "VK_KHR_xlib_surface"
+
diff --git a/src/Vulkan/Extensions/VK_KHR_xlib_surface.hs-boot b/src/Vulkan/Extensions/VK_KHR_xlib_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_KHR_xlib_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_KHR_xlib_surface  (XlibSurfaceCreateInfoKHR) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data XlibSurfaceCreateInfoKHR
+
+instance ToCStruct XlibSurfaceCreateInfoKHR
+instance Show XlibSurfaceCreateInfoKHR
+
+instance FromCStruct XlibSurfaceCreateInfoKHR
+
diff --git a/src/Vulkan/Extensions/VK_MVK_ios_surface.hs b/src/Vulkan/Extensions/VK_MVK_ios_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_MVK_ios_surface.hs
@@ -0,0 +1,231 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_MVK_ios_surface  ( createIOSSurfaceMVK
+                                             , IOSSurfaceCreateInfoMVK(..)
+                                             , IOSSurfaceCreateFlagsMVK(..)
+                                             , MVK_IOS_SURFACE_SPEC_VERSION
+                                             , pattern MVK_IOS_SURFACE_SPEC_VERSION
+                                             , MVK_IOS_SURFACE_EXTENSION_NAME
+                                             , pattern MVK_IOS_SURFACE_EXTENSION_NAME
+                                             , SurfaceKHR(..)
+                                             ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateIOSSurfaceMVK))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateIOSSurfaceMVK
+  :: FunPtr (Ptr Instance_T -> Ptr IOSSurfaceCreateInfoMVK -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr IOSSurfaceCreateInfoMVK -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateIOSSurfaceMVK - Create a VkSurfaceKHR object for an iOS UIView
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance with which to associate the surface.
+--
+-- -   @pCreateInfo@ is a pointer to a 'IOSSurfaceCreateInfoMVK' 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'IOSSurfaceCreateInfoMVK' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'IOSSurfaceCreateInfoMVK', 'Vulkan.Core10.Handles.Instance',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+createIOSSurfaceMVK :: forall io . MonadIO io => Instance -> IOSSurfaceCreateInfoMVK -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createIOSSurfaceMVK instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateIOSSurfaceMVKPtr = pVkCreateIOSSurfaceMVK (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateIOSSurfaceMVKPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateIOSSurfaceMVK is null" Nothing Nothing
+  let vkCreateIOSSurfaceMVK' = mkVkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVKPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateIOSSurfaceMVK' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+-- | VkIOSSurfaceCreateInfoMVK - Structure specifying parameters of a newly
+-- created iOS surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'IOSSurfaceCreateFlagsMVK',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createIOSSurfaceMVK'
+data IOSSurfaceCreateInfoMVK = IOSSurfaceCreateInfoMVK
+  { -- | @flags@ /must/ be @0@
+    flags :: IOSSurfaceCreateFlagsMVK
+  , -- | @pView@ /must/ be a valid @UIView@ and /must/ be backed by a @CALayer@
+    -- instance of type 'Vulkan.Extensions.WSITypes.CAMetalLayer'
+    view :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show IOSSurfaceCreateInfoMVK
+
+instance ToCStruct IOSSurfaceCreateInfoMVK where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p IOSSurfaceCreateInfoMVK{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr IOSSurfaceCreateFlagsMVK)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (view)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct IOSSurfaceCreateInfoMVK where
+  peekCStruct p = do
+    flags <- peek @IOSSurfaceCreateFlagsMVK ((p `plusPtr` 16 :: Ptr IOSSurfaceCreateFlagsMVK))
+    pView <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
+    pure $ IOSSurfaceCreateInfoMVK
+             flags pView
+
+instance Storable IOSSurfaceCreateInfoMVK where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero IOSSurfaceCreateInfoMVK where
+  zero = IOSSurfaceCreateInfoMVK
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkIOSSurfaceCreateFlagsMVK"
+newtype IOSSurfaceCreateFlagsMVK = IOSSurfaceCreateFlagsMVK Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show IOSSurfaceCreateFlagsMVK where
+  showsPrec p = \case
+    IOSSurfaceCreateFlagsMVK x -> showParen (p >= 11) (showString "IOSSurfaceCreateFlagsMVK 0x" . showHex x)
+
+instance Read IOSSurfaceCreateFlagsMVK where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "IOSSurfaceCreateFlagsMVK")
+                       v <- step readPrec
+                       pure (IOSSurfaceCreateFlagsMVK v)))
+
+
+type MVK_IOS_SURFACE_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_MVK_IOS_SURFACE_SPEC_VERSION"
+pattern MVK_IOS_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern MVK_IOS_SURFACE_SPEC_VERSION = 2
+
+
+type MVK_IOS_SURFACE_EXTENSION_NAME = "VK_MVK_ios_surface"
+
+-- No documentation found for TopLevel "VK_MVK_IOS_SURFACE_EXTENSION_NAME"
+pattern MVK_IOS_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern MVK_IOS_SURFACE_EXTENSION_NAME = "VK_MVK_ios_surface"
+
diff --git a/src/Vulkan/Extensions/VK_MVK_ios_surface.hs-boot b/src/Vulkan/Extensions/VK_MVK_ios_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_MVK_ios_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_MVK_ios_surface  (IOSSurfaceCreateInfoMVK) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data IOSSurfaceCreateInfoMVK
+
+instance ToCStruct IOSSurfaceCreateInfoMVK
+instance Show IOSSurfaceCreateInfoMVK
+
+instance FromCStruct IOSSurfaceCreateInfoMVK
+
diff --git a/src/Vulkan/Extensions/VK_MVK_macos_surface.hs b/src/Vulkan/Extensions/VK_MVK_macos_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_MVK_macos_surface.hs
@@ -0,0 +1,234 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_MVK_macos_surface  ( createMacOSSurfaceMVK
+                                               , MacOSSurfaceCreateInfoMVK(..)
+                                               , MacOSSurfaceCreateFlagsMVK(..)
+                                               , MVK_MACOS_SURFACE_SPEC_VERSION
+                                               , pattern MVK_MACOS_SURFACE_SPEC_VERSION
+                                               , MVK_MACOS_SURFACE_EXTENSION_NAME
+                                               , pattern MVK_MACOS_SURFACE_EXTENSION_NAME
+                                               , SurfaceKHR(..)
+                                               ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateMacOSSurfaceMVK))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateMacOSSurfaceMVK
+  :: FunPtr (Ptr Instance_T -> Ptr MacOSSurfaceCreateInfoMVK -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr MacOSSurfaceCreateInfoMVK -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateMacOSSurfaceMVK - Create a VkSurfaceKHR object for a macOS
+-- NSView
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance with which to associate the surface.
+--
+-- -   @pCreateInfo@ is a pointer to a 'MacOSSurfaceCreateInfoMVK'
+--     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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'MacOSSurfaceCreateInfoMVK' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance', 'MacOSSurfaceCreateInfoMVK',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR'
+createMacOSSurfaceMVK :: forall io . MonadIO io => Instance -> MacOSSurfaceCreateInfoMVK -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createMacOSSurfaceMVK instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateMacOSSurfaceMVKPtr = pVkCreateMacOSSurfaceMVK (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateMacOSSurfaceMVKPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateMacOSSurfaceMVK is null" Nothing Nothing
+  let vkCreateMacOSSurfaceMVK' = mkVkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVKPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateMacOSSurfaceMVK' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+-- | VkMacOSSurfaceCreateInfoMVK - Structure specifying parameters of a newly
+-- created macOS surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'MacOSSurfaceCreateFlagsMVK',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createMacOSSurfaceMVK'
+data MacOSSurfaceCreateInfoMVK = MacOSSurfaceCreateInfoMVK
+  { -- | @flags@ /must/ be @0@
+    flags :: MacOSSurfaceCreateFlagsMVK
+  , -- | @pView@ /must/ be a valid @NSView@ and /must/ be backed by a @CALayer@
+    -- instance of type 'Vulkan.Extensions.WSITypes.CAMetalLayer'
+    view :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show MacOSSurfaceCreateInfoMVK
+
+instance ToCStruct MacOSSurfaceCreateInfoMVK where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p MacOSSurfaceCreateInfoMVK{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr MacOSSurfaceCreateFlagsMVK)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (view)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct MacOSSurfaceCreateInfoMVK where
+  peekCStruct p = do
+    flags <- peek @MacOSSurfaceCreateFlagsMVK ((p `plusPtr` 16 :: Ptr MacOSSurfaceCreateFlagsMVK))
+    pView <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
+    pure $ MacOSSurfaceCreateInfoMVK
+             flags pView
+
+instance Storable MacOSSurfaceCreateInfoMVK where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero MacOSSurfaceCreateInfoMVK where
+  zero = MacOSSurfaceCreateInfoMVK
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkMacOSSurfaceCreateFlagsMVK"
+newtype MacOSSurfaceCreateFlagsMVK = MacOSSurfaceCreateFlagsMVK Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show MacOSSurfaceCreateFlagsMVK where
+  showsPrec p = \case
+    MacOSSurfaceCreateFlagsMVK x -> showParen (p >= 11) (showString "MacOSSurfaceCreateFlagsMVK 0x" . showHex x)
+
+instance Read MacOSSurfaceCreateFlagsMVK where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "MacOSSurfaceCreateFlagsMVK")
+                       v <- step readPrec
+                       pure (MacOSSurfaceCreateFlagsMVK v)))
+
+
+type MVK_MACOS_SURFACE_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_MVK_MACOS_SURFACE_SPEC_VERSION"
+pattern MVK_MACOS_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern MVK_MACOS_SURFACE_SPEC_VERSION = 2
+
+
+type MVK_MACOS_SURFACE_EXTENSION_NAME = "VK_MVK_macos_surface"
+
+-- No documentation found for TopLevel "VK_MVK_MACOS_SURFACE_EXTENSION_NAME"
+pattern MVK_MACOS_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern MVK_MACOS_SURFACE_EXTENSION_NAME = "VK_MVK_macos_surface"
+
diff --git a/src/Vulkan/Extensions/VK_MVK_macos_surface.hs-boot b/src/Vulkan/Extensions/VK_MVK_macos_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_MVK_macos_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_MVK_macos_surface  (MacOSSurfaceCreateInfoMVK) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data MacOSSurfaceCreateInfoMVK
+
+instance ToCStruct MacOSSurfaceCreateInfoMVK
+instance Show MacOSSurfaceCreateInfoMVK
+
+instance FromCStruct MacOSSurfaceCreateInfoMVK
+
diff --git a/src/Vulkan/Extensions/VK_NN_vi_surface.hs b/src/Vulkan/Extensions/VK_NN_vi_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NN_vi_surface.hs
@@ -0,0 +1,247 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NN_vi_surface  ( createViSurfaceNN
+                                           , ViSurfaceCreateInfoNN(..)
+                                           , ViSurfaceCreateFlagsNN(..)
+                                           , NN_VI_SURFACE_SPEC_VERSION
+                                           , pattern NN_VI_SURFACE_SPEC_VERSION
+                                           , NN_VI_SURFACE_EXTENSION_NAME
+                                           , pattern NN_VI_SURFACE_EXTENSION_NAME
+                                           , SurfaceKHR(..)
+                                           ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Instance)
+import Vulkan.Core10.Handles (Instance(..))
+import Vulkan.Dynamic (InstanceCmds(pVkCreateViSurfaceNN))
+import Vulkan.Core10.Handles (Instance_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.Handles (SurfaceKHR)
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (SurfaceKHR(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateViSurfaceNN
+  :: FunPtr (Ptr Instance_T -> Ptr ViSurfaceCreateInfoNN -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result) -> Ptr Instance_T -> Ptr ViSurfaceCreateInfoNN -> Ptr AllocationCallbacks -> Ptr SurfaceKHR -> IO Result
+
+-- | vkCreateViSurfaceNN - Create a 'Vulkan.Extensions.Handles.SurfaceKHR'
+-- object for a VI layer
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance with which to associate the surface.
+--
+-- -   @pCreateInfo@ is a pointer to a 'ViSurfaceCreateInfoNN' 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
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>).
+--
+-- -   @pSurface@ is a pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'
+--     handle in which the created surface object is returned.
+--
+-- = Description
+--
+-- During the lifetime of a surface created using a particular
+-- @nn@::@vi@::@NativeWindowHandle@, applications /must/ not attempt to
+-- create another surface for the same @nn@::@vi@::@Layer@ or attempt to
+-- connect to the same @nn@::@vi@::@Layer@ through other platform
+-- mechanisms.
+--
+-- If the native window is created with a specified size, @currentExtent@
+-- will reflect that size. In this case, applications should use the same
+-- size for the swapchain’s @imageExtent@. Otherwise, the @currentExtent@
+-- will have the special value (0xFFFFFFFF, 0xFFFFFFFF), indicating that
+-- applications are expected to choose an appropriate size for the
+-- swapchain’s @imageExtent@ (e.g., by matching the result of a call to
+-- @nn@::@vi@::@GetDisplayResolution@).
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'ViSurfaceCreateInfoNN' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.SurfaceKHR' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_NATIVE_WINDOW_IN_USE_KHR'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Instance',
+-- 'Vulkan.Extensions.Handles.SurfaceKHR', 'ViSurfaceCreateInfoNN'
+createViSurfaceNN :: forall io . MonadIO io => Instance -> ViSurfaceCreateInfoNN -> ("allocator" ::: Maybe AllocationCallbacks) -> io (SurfaceKHR)
+createViSurfaceNN instance' createInfo allocator = liftIO . evalContT $ do
+  let vkCreateViSurfaceNNPtr = pVkCreateViSurfaceNN (instanceCmds (instance' :: Instance))
+  lift $ unless (vkCreateViSurfaceNNPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateViSurfaceNN is null" Nothing Nothing
+  let vkCreateViSurfaceNN' = mkVkCreateViSurfaceNN vkCreateViSurfaceNNPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPSurface <- ContT $ bracket (callocBytes @SurfaceKHR 8) free
+  r <- lift $ vkCreateViSurfaceNN' (instanceHandle (instance')) pCreateInfo pAllocator (pPSurface)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pSurface <- lift $ peek @SurfaceKHR pPSurface
+  pure $ (pSurface)
+
+
+-- | VkViSurfaceCreateInfoNN - Structure specifying parameters of a newly
+-- created VI surface object
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'ViSurfaceCreateFlagsNN', 'createViSurfaceNN'
+data ViSurfaceCreateInfoNN = ViSurfaceCreateInfoNN
+  { -- | @flags@ /must/ be @0@
+    flags :: ViSurfaceCreateFlagsNN
+  , -- | @window@ /must/ be a valid @nn@::@vi@::@NativeWindowHandle@
+    window :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show ViSurfaceCreateInfoNN
+
+instance ToCStruct ViSurfaceCreateInfoNN where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ViSurfaceCreateInfoNN{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ViSurfaceCreateFlagsNN)) (flags)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (window)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct ViSurfaceCreateInfoNN where
+  peekCStruct p = do
+    flags <- peek @ViSurfaceCreateFlagsNN ((p `plusPtr` 16 :: Ptr ViSurfaceCreateFlagsNN))
+    window <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
+    pure $ ViSurfaceCreateInfoNN
+             flags window
+
+instance Storable ViSurfaceCreateInfoNN where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ViSurfaceCreateInfoNN where
+  zero = ViSurfaceCreateInfoNN
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkViSurfaceCreateFlagsNN"
+newtype ViSurfaceCreateFlagsNN = ViSurfaceCreateFlagsNN Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show ViSurfaceCreateFlagsNN where
+  showsPrec p = \case
+    ViSurfaceCreateFlagsNN x -> showParen (p >= 11) (showString "ViSurfaceCreateFlagsNN 0x" . showHex x)
+
+instance Read ViSurfaceCreateFlagsNN where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ViSurfaceCreateFlagsNN")
+                       v <- step readPrec
+                       pure (ViSurfaceCreateFlagsNN v)))
+
+
+type NN_VI_SURFACE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NN_VI_SURFACE_SPEC_VERSION"
+pattern NN_VI_SURFACE_SPEC_VERSION :: forall a . Integral a => a
+pattern NN_VI_SURFACE_SPEC_VERSION = 1
+
+
+type NN_VI_SURFACE_EXTENSION_NAME = "VK_NN_vi_surface"
+
+-- No documentation found for TopLevel "VK_NN_VI_SURFACE_EXTENSION_NAME"
+pattern NN_VI_SURFACE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NN_VI_SURFACE_EXTENSION_NAME = "VK_NN_vi_surface"
+
diff --git a/src/Vulkan/Extensions/VK_NN_vi_surface.hs-boot b/src/Vulkan/Extensions/VK_NN_vi_surface.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NN_vi_surface.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NN_vi_surface  (ViSurfaceCreateInfoNN) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ViSurfaceCreateInfoNN
+
+instance ToCStruct ViSurfaceCreateInfoNN
+instance Show ViSurfaceCreateInfoNN
+
+instance FromCStruct ViSurfaceCreateInfoNN
+
diff --git a/src/Vulkan/Extensions/VK_NVX_image_view_handle.hs b/src/Vulkan/Extensions/VK_NVX_image_view_handle.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NVX_image_view_handle.hs
@@ -0,0 +1,312 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NVX_image_view_handle  ( getImageViewHandleNVX
+                                                   , getImageViewAddressNVX
+                                                   , ImageViewHandleInfoNVX(..)
+                                                   , ImageViewAddressPropertiesNVX(..)
+                                                   , NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION
+                                                   , pattern NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION
+                                                   , NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME
+                                                   , pattern NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME
+                                                   ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Core10.Enums.DescriptorType (DescriptorType)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Core10.BaseType (DeviceAddress)
+import Vulkan.Dynamic (DeviceCmds(pVkGetImageViewAddressNVX))
+import Vulkan.Dynamic (DeviceCmds(pVkGetImageViewHandleNVX))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (ImageView)
+import Vulkan.Core10.Handles (ImageView(..))
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Handles (Sampler)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetImageViewHandleNVX
+  :: FunPtr (Ptr Device_T -> Ptr ImageViewHandleInfoNVX -> IO Word32) -> Ptr Device_T -> Ptr ImageViewHandleInfoNVX -> IO Word32
+
+-- | vkGetImageViewHandleNVX - Get the handle for an image view for a
+-- specific descriptor type
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the image view.
+--
+-- -   @pInfo@ describes the image view to query and type of handle.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'ImageViewHandleInfoNVX'
+getImageViewHandleNVX :: forall io . MonadIO io => Device -> ImageViewHandleInfoNVX -> io (Word32)
+getImageViewHandleNVX device info = liftIO . evalContT $ do
+  let vkGetImageViewHandleNVXPtr = pVkGetImageViewHandleNVX (deviceCmds (device :: Device))
+  lift $ unless (vkGetImageViewHandleNVXPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetImageViewHandleNVX is null" Nothing Nothing
+  let vkGetImageViewHandleNVX' = mkVkGetImageViewHandleNVX vkGetImageViewHandleNVXPtr
+  pInfo <- ContT $ withCStruct (info)
+  r <- lift $ vkGetImageViewHandleNVX' (deviceHandle (device)) pInfo
+  pure $ (r)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetImageViewAddressNVX
+  :: FunPtr (Ptr Device_T -> ImageView -> Ptr ImageViewAddressPropertiesNVX -> IO Result) -> Ptr Device_T -> ImageView -> Ptr ImageViewAddressPropertiesNVX -> IO Result
+
+-- | vkGetImageViewAddressNVX - Get the device address of an image view
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the image view.
+--
+-- -   @imageView@ is a handle to the image view.
+--
+-- -   @pProperties@ contains the device address and size when the call
+--     returns.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.ImageView',
+-- 'ImageViewAddressPropertiesNVX'
+getImageViewAddressNVX :: forall io . MonadIO io => Device -> ImageView -> io (ImageViewAddressPropertiesNVX)
+getImageViewAddressNVX device imageView = liftIO . evalContT $ do
+  let vkGetImageViewAddressNVXPtr = pVkGetImageViewAddressNVX (deviceCmds (device :: Device))
+  lift $ unless (vkGetImageViewAddressNVXPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetImageViewAddressNVX is null" Nothing Nothing
+  let vkGetImageViewAddressNVX' = mkVkGetImageViewAddressNVX vkGetImageViewAddressNVXPtr
+  pPProperties <- ContT (withZeroCStruct @ImageViewAddressPropertiesNVX)
+  r <- lift $ vkGetImageViewAddressNVX' (deviceHandle (device)) (imageView) (pPProperties)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pProperties <- lift $ peekCStruct @ImageViewAddressPropertiesNVX pPProperties
+  pure $ (pProperties)
+
+
+-- | VkImageViewHandleInfoNVX - Structure specifying the image view for
+-- handle queries
+--
+-- == Valid Usage
+--
+-- -   @descriptorType@ /must/ be
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
+--
+-- -   @sampler@ /must/ be a valid 'Vulkan.Core10.Handles.Sampler' if
+--     @descriptorType@ is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'
+--
+-- -   If descriptorType is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
+--     or
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',
+--     the image that @imageView@ was created from /must/ have been created
+--     with the
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT'
+--     usage bit set
+--
+-- -   If descriptorType is
+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
+--     the image that @imageView@ was created from /must/ have been created
+--     with the
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT'
+--     usage bit set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView'
+--     handle
+--
+-- -   @descriptorType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
+--
+-- -   If @sampler@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @sampler@ /must/ be a valid 'Vulkan.Core10.Handles.Sampler' handle
+--
+-- -   Both of @imageView@, and @sampler@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType',
+-- 'Vulkan.Core10.Handles.ImageView', 'Vulkan.Core10.Handles.Sampler',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getImageViewHandleNVX'
+data ImageViewHandleInfoNVX = ImageViewHandleInfoNVX
+  { -- | @imageView@ is the image view to query.
+    imageView :: ImageView
+  , -- | @descriptorType@ is the type of descriptor for which to query a handle.
+    descriptorType :: DescriptorType
+  , -- | @sampler@ is the sampler to combine with the image view when generating
+    -- the handle.
+    sampler :: Sampler
+  }
+  deriving (Typeable)
+deriving instance Show ImageViewHandleInfoNVX
+
+instance ToCStruct ImageViewHandleInfoNVX where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageViewHandleInfoNVX{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageView)) (imageView)
+    poke ((p `plusPtr` 24 :: Ptr DescriptorType)) (descriptorType)
+    poke ((p `plusPtr` 32 :: Ptr Sampler)) (sampler)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ImageView)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DescriptorType)) (zero)
+    f
+
+instance FromCStruct ImageViewHandleInfoNVX where
+  peekCStruct p = do
+    imageView <- peek @ImageView ((p `plusPtr` 16 :: Ptr ImageView))
+    descriptorType <- peek @DescriptorType ((p `plusPtr` 24 :: Ptr DescriptorType))
+    sampler <- peek @Sampler ((p `plusPtr` 32 :: Ptr Sampler))
+    pure $ ImageViewHandleInfoNVX
+             imageView descriptorType sampler
+
+instance Storable ImageViewHandleInfoNVX where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageViewHandleInfoNVX where
+  zero = ImageViewHandleInfoNVX
+           zero
+           zero
+           zero
+
+
+-- | VkImageViewAddressPropertiesNVX - Structure specifying the image view
+-- for handle queries
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceAddress',
+-- 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getImageViewAddressNVX'
+data ImageViewAddressPropertiesNVX = ImageViewAddressPropertiesNVX
+  { -- | @deviceAddress@ is the device address of the image view.
+    deviceAddress :: DeviceAddress
+  , -- | @size@ is the size in bytes of the image view device memory.
+    size :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show ImageViewAddressPropertiesNVX
+
+instance ToCStruct ImageViewAddressPropertiesNVX where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImageViewAddressPropertiesNVX{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceAddress)) (deviceAddress)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (size)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceAddress)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct ImageViewAddressPropertiesNVX where
+  peekCStruct p = do
+    deviceAddress <- peek @DeviceAddress ((p `plusPtr` 16 :: Ptr DeviceAddress))
+    size <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    pure $ ImageViewAddressPropertiesNVX
+             deviceAddress size
+
+instance Storable ImageViewAddressPropertiesNVX where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImageViewAddressPropertiesNVX where
+  zero = ImageViewAddressPropertiesNVX
+           zero
+           zero
+
+
+type NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION"
+pattern NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION :: forall a . Integral a => a
+pattern NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION = 2
+
+
+type NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME = "VK_NVX_image_view_handle"
+
+-- No documentation found for TopLevel "VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME"
+pattern NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME = "VK_NVX_image_view_handle"
+
diff --git a/src/Vulkan/Extensions/VK_NVX_image_view_handle.hs-boot b/src/Vulkan/Extensions/VK_NVX_image_view_handle.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NVX_image_view_handle.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NVX_image_view_handle  ( ImageViewAddressPropertiesNVX
+                                                   , ImageViewHandleInfoNVX
+                                                   ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ImageViewAddressPropertiesNVX
+
+instance ToCStruct ImageViewAddressPropertiesNVX
+instance Show ImageViewAddressPropertiesNVX
+
+instance FromCStruct ImageViewAddressPropertiesNVX
+
+
+data ImageViewHandleInfoNVX
+
+instance ToCStruct ImageViewHandleInfoNVX
+instance Show ImageViewHandleInfoNVX
+
+instance FromCStruct ImageViewHandleInfoNVX
+
diff --git a/src/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs b/src/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs
@@ -0,0 +1,104 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NVX_multiview_per_view_attributes  ( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(..)
+                                                               , NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION
+                                                               , pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION
+                                                               , NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME
+                                                               , pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME
+                                                               ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX))
+-- | VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX - Structure
+-- describing multiview limits that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the
+-- 'PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX' structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX' structure
+-- is included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+  { -- | @perViewPositionAllComponents@ is 'Vulkan.Core10.BaseType.TRUE' if the
+    -- implementation supports per-view position values that differ in
+    -- components other than the X component.
+    perViewPositionAllComponents :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+
+instance ToCStruct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (perViewPositionAllComponents))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX where
+  peekCStruct p = do
+    perViewPositionAllComponents <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+             (bool32ToBool perViewPositionAllComponents)
+
+instance Storable PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX where
+  zero = PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+           zero
+
+
+type NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION"
+pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION :: forall a . Integral a => a
+pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION = 1
+
+
+type NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME = "VK_NVX_multiview_per_view_attributes"
+
+-- No documentation found for TopLevel "VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME"
+pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME = "VK_NVX_multiview_per_view_attributes"
+
diff --git a/src/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs-boot b/src/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NVX_multiview_per_view_attributes  (PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+
+instance ToCStruct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+instance Show PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+
+instance FromCStruct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+
diff --git a/src/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs b/src/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs
@@ -0,0 +1,276 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_clip_space_w_scaling  ( cmdSetViewportWScalingNV
+                                                     , ViewportWScalingNV(..)
+                                                     , PipelineViewportWScalingStateCreateInfoNV(..)
+                                                     , NV_CLIP_SPACE_W_SCALING_SPEC_VERSION
+                                                     , pattern NV_CLIP_SPACE_W_SCALING_SPEC_VERSION
+                                                     , NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME
+                                                     , pattern NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME
+                                                     ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetViewportWScalingNV))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetViewportWScalingNV
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr ViewportWScalingNV -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr ViewportWScalingNV -> IO ()
+
+-- | vkCmdSetViewportWScalingNV - Set the viewport W scaling on a command
+-- buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @firstViewport@ is the index of the first viewport whose parameters
+--     are updated by the command.
+--
+-- -   @viewportCount@ is the number of viewports whose parameters are
+--     updated by the command.
+--
+-- -   @pViewportWScalings@ is a pointer to an array of
+--     'ViewportWScalingNV' structures specifying viewport parameters.
+--
+-- = 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
+--
+-- -   @firstViewport@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
+--
+-- -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@
+--     and
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
+--     inclusive
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pViewportWScalings@ /must/ be a valid pointer to an array of
+--     @viewportCount@ 'ViewportWScalingNV' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   @viewportCount@ /must/ be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'ViewportWScalingNV'
+cmdSetViewportWScalingNV :: forall io . MonadIO io => CommandBuffer -> ("firstViewport" ::: Word32) -> ("viewportWScalings" ::: Vector ViewportWScalingNV) -> io ()
+cmdSetViewportWScalingNV commandBuffer firstViewport viewportWScalings = liftIO . evalContT $ do
+  let vkCmdSetViewportWScalingNVPtr = pVkCmdSetViewportWScalingNV (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetViewportWScalingNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetViewportWScalingNV is null" Nothing Nothing
+  let vkCmdSetViewportWScalingNV' = mkVkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNVPtr
+  pPViewportWScalings <- ContT $ allocaBytesAligned @ViewportWScalingNV ((Data.Vector.length (viewportWScalings)) * 8) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewportWScalings `plusPtr` (8 * (i)) :: Ptr ViewportWScalingNV) (e) . ($ ())) (viewportWScalings)
+  lift $ vkCmdSetViewportWScalingNV' (commandBufferHandle (commandBuffer)) (firstViewport) ((fromIntegral (Data.Vector.length $ (viewportWScalings)) :: Word32)) (pPViewportWScalings)
+  pure $ ()
+
+
+-- | VkViewportWScalingNV - Structure specifying a viewport
+--
+-- = See Also
+--
+-- 'PipelineViewportWScalingStateCreateInfoNV', 'cmdSetViewportWScalingNV'
+data ViewportWScalingNV = ViewportWScalingNV
+  { -- | @xcoeff@ and @ycoeff@ are the viewport’s W scaling factor for x and y
+    -- respectively.
+    xcoeff :: Float
+  , -- No documentation found for Nested "VkViewportWScalingNV" "ycoeff"
+    ycoeff :: Float
+  }
+  deriving (Typeable)
+deriving instance Show ViewportWScalingNV
+
+instance ToCStruct ViewportWScalingNV where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ViewportWScalingNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (xcoeff))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (ycoeff))
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))
+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))
+    f
+
+instance FromCStruct ViewportWScalingNV where
+  peekCStruct p = do
+    xcoeff <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))
+    ycoeff <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
+    pure $ ViewportWScalingNV
+             ((\(CFloat a) -> a) xcoeff) ((\(CFloat a) -> a) ycoeff)
+
+instance Storable ViewportWScalingNV where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ViewportWScalingNV where
+  zero = ViewportWScalingNV
+           zero
+           zero
+
+
+-- | VkPipelineViewportWScalingStateCreateInfoNV - Structure specifying
+-- parameters of a newly created pipeline viewport W scaling state
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'ViewportWScalingNV'
+data PipelineViewportWScalingStateCreateInfoNV = PipelineViewportWScalingStateCreateInfoNV
+  { -- | @viewportWScalingEnable@ controls whether viewport __W__ scaling is
+    -- enabled.
+    viewportWScalingEnable :: Bool
+  , -- | @viewportCount@ /must/ be greater than @0@
+    viewportCount :: Word32
+  , -- | @pViewportWScalings@ is a pointer to an array of 'ViewportWScalingNV'
+    -- structures defining the __W__ scaling parameters for the corresponding
+    -- viewports. If the viewport __W__ scaling state is dynamic, this member
+    -- is ignored.
+    viewportWScalings :: Vector ViewportWScalingNV
+  }
+  deriving (Typeable)
+deriving instance Show PipelineViewportWScalingStateCreateInfoNV
+
+instance ToCStruct PipelineViewportWScalingStateCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineViewportWScalingStateCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (viewportWScalingEnable))
+    let pViewportWScalingsLength = Data.Vector.length $ (viewportWScalings)
+    viewportCount'' <- lift $ if (viewportCount) == 0
+      then pure $ fromIntegral pViewportWScalingsLength
+      else do
+        unless (fromIntegral pViewportWScalingsLength == (viewportCount) || pViewportWScalingsLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pViewportWScalings must be empty or have 'viewportCount' elements" Nothing Nothing
+        pure (viewportCount)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (viewportCount'')
+    pViewportWScalings'' <- if Data.Vector.null (viewportWScalings)
+      then pure nullPtr
+      else do
+        pPViewportWScalings <- ContT $ allocaBytesAligned @ViewportWScalingNV (((Data.Vector.length (viewportWScalings))) * 8) 4
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewportWScalings `plusPtr` (8 * (i)) :: Ptr ViewportWScalingNV) (e) . ($ ())) ((viewportWScalings))
+        pure $ pPViewportWScalings
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ViewportWScalingNV))) pViewportWScalings''
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PipelineViewportWScalingStateCreateInfoNV where
+  peekCStruct p = do
+    viewportWScalingEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pViewportWScalings <- peek @(Ptr ViewportWScalingNV) ((p `plusPtr` 24 :: Ptr (Ptr ViewportWScalingNV)))
+    let pViewportWScalingsLength = if pViewportWScalings == nullPtr then 0 else (fromIntegral viewportCount)
+    pViewportWScalings' <- generateM pViewportWScalingsLength (\i -> peekCStruct @ViewportWScalingNV ((pViewportWScalings `advancePtrBytes` (8 * (i)) :: Ptr ViewportWScalingNV)))
+    pure $ PipelineViewportWScalingStateCreateInfoNV
+             (bool32ToBool viewportWScalingEnable) viewportCount pViewportWScalings'
+
+instance Zero PipelineViewportWScalingStateCreateInfoNV where
+  zero = PipelineViewportWScalingStateCreateInfoNV
+           zero
+           zero
+           mempty
+
+
+type NV_CLIP_SPACE_W_SCALING_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION"
+pattern NV_CLIP_SPACE_W_SCALING_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_CLIP_SPACE_W_SCALING_SPEC_VERSION = 1
+
+
+type NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME = "VK_NV_clip_space_w_scaling"
+
+-- No documentation found for TopLevel "VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME"
+pattern NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME = "VK_NV_clip_space_w_scaling"
+
diff --git a/src/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs-boot b/src/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_clip_space_w_scaling  ( PipelineViewportWScalingStateCreateInfoNV
+                                                     , ViewportWScalingNV
+                                                     ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PipelineViewportWScalingStateCreateInfoNV
+
+instance ToCStruct PipelineViewportWScalingStateCreateInfoNV
+instance Show PipelineViewportWScalingStateCreateInfoNV
+
+instance FromCStruct PipelineViewportWScalingStateCreateInfoNV
+
+
+data ViewportWScalingNV
+
+instance ToCStruct ViewportWScalingNV
+instance Show ViewportWScalingNV
+
+instance FromCStruct ViewportWScalingNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs b/src/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs
@@ -0,0 +1,118 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_compute_shader_derivatives  ( PhysicalDeviceComputeShaderDerivativesFeaturesNV(..)
+                                                           , NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION
+                                                           , pattern NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION
+                                                           , NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME
+                                                           , pattern NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME
+                                                           ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV))
+-- | VkPhysicalDeviceComputeShaderDerivativesFeaturesNV - Structure
+-- describing compute shader derivative features that can be supported by
+-- an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceComputeShaderDerivativesFeaturesNV'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#texture-derivatives-compute Compute Shader Derivatives>
+-- for more information.
+--
+-- If the 'PhysicalDeviceComputeShaderDerivativesFeaturesNV' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceComputeShaderDerivativesFeaturesNV' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceComputeShaderDerivativesFeaturesNV = PhysicalDeviceComputeShaderDerivativesFeaturesNV
+  { -- | @computeDerivativeGroupQuads@ indicates that the implementation supports
+    -- the @ComputeDerivativeGroupQuadsNV@ SPIR-V capability.
+    computeDerivativeGroupQuads :: Bool
+  , -- | @computeDerivativeGroupLinear@ indicates that the implementation
+    -- supports the @ComputeDerivativeGroupLinearNV@ SPIR-V capability.
+    computeDerivativeGroupLinear :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceComputeShaderDerivativesFeaturesNV
+
+instance ToCStruct PhysicalDeviceComputeShaderDerivativesFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceComputeShaderDerivativesFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (computeDerivativeGroupQuads))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (computeDerivativeGroupLinear))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceComputeShaderDerivativesFeaturesNV where
+  peekCStruct p = do
+    computeDerivativeGroupQuads <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    computeDerivativeGroupLinear <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceComputeShaderDerivativesFeaturesNV
+             (bool32ToBool computeDerivativeGroupQuads) (bool32ToBool computeDerivativeGroupLinear)
+
+instance Storable PhysicalDeviceComputeShaderDerivativesFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceComputeShaderDerivativesFeaturesNV where
+  zero = PhysicalDeviceComputeShaderDerivativesFeaturesNV
+           zero
+           zero
+
+
+type NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION"
+pattern NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION = 1
+
+
+type NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME = "VK_NV_compute_shader_derivatives"
+
+-- No documentation found for TopLevel "VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME"
+pattern NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME = "VK_NV_compute_shader_derivatives"
+
diff --git a/src/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs-boot b/src/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_compute_shader_derivatives  (PhysicalDeviceComputeShaderDerivativesFeaturesNV) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceComputeShaderDerivativesFeaturesNV
+
+instance ToCStruct PhysicalDeviceComputeShaderDerivativesFeaturesNV
+instance Show PhysicalDeviceComputeShaderDerivativesFeaturesNV
+
+instance FromCStruct PhysicalDeviceComputeShaderDerivativesFeaturesNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_cooperative_matrix.hs b/src/Vulkan/Extensions/VK_NV_cooperative_matrix.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_cooperative_matrix.hs
@@ -0,0 +1,552 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_cooperative_matrix  ( getPhysicalDeviceCooperativeMatrixPropertiesNV
+                                                   , PhysicalDeviceCooperativeMatrixFeaturesNV(..)
+                                                   , PhysicalDeviceCooperativeMatrixPropertiesNV(..)
+                                                   , CooperativeMatrixPropertiesNV(..)
+                                                   , ScopeNV( SCOPE_DEVICE_NV
+                                                            , SCOPE_WORKGROUP_NV
+                                                            , SCOPE_SUBGROUP_NV
+                                                            , SCOPE_QUEUE_FAMILY_NV
+                                                            , ..
+                                                            )
+                                                   , ComponentTypeNV( COMPONENT_TYPE_FLOAT16_NV
+                                                                    , COMPONENT_TYPE_FLOAT32_NV
+                                                                    , COMPONENT_TYPE_FLOAT64_NV
+                                                                    , COMPONENT_TYPE_SINT8_NV
+                                                                    , COMPONENT_TYPE_SINT16_NV
+                                                                    , COMPONENT_TYPE_SINT32_NV
+                                                                    , COMPONENT_TYPE_SINT64_NV
+                                                                    , COMPONENT_TYPE_UINT8_NV
+                                                                    , COMPONENT_TYPE_UINT16_NV
+                                                                    , COMPONENT_TYPE_UINT32_NV
+                                                                    , COMPONENT_TYPE_UINT64_NV
+                                                                    , ..
+                                                                    )
+                                                   , NV_COOPERATIVE_MATRIX_SPEC_VERSION
+                                                   , pattern NV_COOPERATIVE_MATRIX_SPEC_VERSION
+                                                   , NV_COOPERATIVE_MATRIX_EXTENSION_NAME
+                                                   , pattern NV_COOPERATIVE_MATRIX_EXTENSION_NAME
+                                                   ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceCooperativeMatrixPropertiesNV))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceCooperativeMatrixPropertiesNV
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr CooperativeMatrixPropertiesNV -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr CooperativeMatrixPropertiesNV -> IO Result
+
+-- | vkGetPhysicalDeviceCooperativeMatrixPropertiesNV - Returns properties
+-- describing what cooperative matrix types are supported
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device.
+--
+-- -   @pPropertyCount@ is a pointer to an integer related to the number of
+--     cooperative matrix properties available or queried.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     'CooperativeMatrixPropertiesNV' structures.
+--
+-- = Description
+--
+-- If @pProperties@ is @NULL@, then the number of cooperative matrix
+-- 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
+-- cooperative matrix properties available, at most @pPropertyCount@
+-- structures will be written. If @pPropertyCount@ is smaller than the
+-- number of cooperative matrix properties available,
+-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
+-- 'Vulkan.Core10.Enums.Result.SUCCESS', to indicate that not all the
+-- available cooperative matrix properties were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' 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@ 'CooperativeMatrixPropertiesNV'
+--     structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'CooperativeMatrixPropertiesNV', 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceCooperativeMatrixPropertiesNV :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("properties" ::: Vector CooperativeMatrixPropertiesNV))
+getPhysicalDeviceCooperativeMatrixPropertiesNV physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceCooperativeMatrixPropertiesNVPtr = pVkGetPhysicalDeviceCooperativeMatrixPropertiesNV (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceCooperativeMatrixPropertiesNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceCooperativeMatrixPropertiesNV is null" Nothing Nothing
+  let vkGetPhysicalDeviceCooperativeMatrixPropertiesNV' = mkVkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNVPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceCooperativeMatrixPropertiesNV' physicalDevice' (pPPropertyCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPropertyCount <- lift $ peek @Word32 pPPropertyCount
+  pPProperties <- ContT $ bracket (callocBytes @CooperativeMatrixPropertiesNV ((fromIntegral (pPropertyCount)) * 48)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPProperties `advancePtrBytes` (i * 48) :: Ptr CooperativeMatrixPropertiesNV) . ($ ())) [0..(fromIntegral (pPropertyCount)) - 1]
+  r' <- lift $ vkGetPhysicalDeviceCooperativeMatrixPropertiesNV' physicalDevice' (pPPropertyCount) ((pPProperties))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pPropertyCount' <- lift $ peek @Word32 pPPropertyCount
+  pProperties' <- lift $ generateM (fromIntegral (pPropertyCount')) (\i -> peekCStruct @CooperativeMatrixPropertiesNV (((pPProperties) `advancePtrBytes` (48 * (i)) :: Ptr CooperativeMatrixPropertiesNV)))
+  pure $ ((r'), pProperties')
+
+
+-- | VkPhysicalDeviceCooperativeMatrixFeaturesNV - Structure describing
+-- cooperative matrix features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceCooperativeMatrixFeaturesNV' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceCooperativeMatrixFeaturesNV' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceCooperativeMatrixFeaturesNV' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceCooperativeMatrixFeaturesNV = PhysicalDeviceCooperativeMatrixFeaturesNV
+  { -- | @cooperativeMatrix@ indicates that the implementation supports the
+    -- @CooperativeMatrixNV@ SPIR-V capability.
+    cooperativeMatrix :: Bool
+  , -- | @cooperativeMatrixRobustBufferAccess@ indicates that the implementation
+    -- supports robust buffer access for SPIR-V @OpCooperativeMatrixLoadNV@ and
+    -- @OpCooperativeMatrixStoreNV@ instructions.
+    cooperativeMatrixRobustBufferAccess :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceCooperativeMatrixFeaturesNV
+
+instance ToCStruct PhysicalDeviceCooperativeMatrixFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceCooperativeMatrixFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (cooperativeMatrix))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (cooperativeMatrixRobustBufferAccess))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceCooperativeMatrixFeaturesNV where
+  peekCStruct p = do
+    cooperativeMatrix <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    cooperativeMatrixRobustBufferAccess <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceCooperativeMatrixFeaturesNV
+             (bool32ToBool cooperativeMatrix) (bool32ToBool cooperativeMatrixRobustBufferAccess)
+
+instance Storable PhysicalDeviceCooperativeMatrixFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceCooperativeMatrixFeaturesNV where
+  zero = PhysicalDeviceCooperativeMatrixFeaturesNV
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceCooperativeMatrixPropertiesNV - Structure describing
+-- cooperative matrix properties supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceCooperativeMatrixPropertiesNV'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceCooperativeMatrixPropertiesNV' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceCooperativeMatrixPropertiesNV = PhysicalDeviceCooperativeMatrixPropertiesNV
+  { -- | @cooperativeMatrixSupportedStages@ is a bitfield of
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' describing
+    -- the shader stages that cooperative matrix instructions are supported in.
+    -- @cooperativeMatrixSupportedStages@ will have the
+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT' bit
+    -- set if any of the physical device’s queues support
+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.
+    cooperativeMatrixSupportedStages :: ShaderStageFlags }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceCooperativeMatrixPropertiesNV
+
+instance ToCStruct PhysicalDeviceCooperativeMatrixPropertiesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceCooperativeMatrixPropertiesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ShaderStageFlags)) (cooperativeMatrixSupportedStages)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ShaderStageFlags)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceCooperativeMatrixPropertiesNV where
+  peekCStruct p = do
+    cooperativeMatrixSupportedStages <- peek @ShaderStageFlags ((p `plusPtr` 16 :: Ptr ShaderStageFlags))
+    pure $ PhysicalDeviceCooperativeMatrixPropertiesNV
+             cooperativeMatrixSupportedStages
+
+instance Storable PhysicalDeviceCooperativeMatrixPropertiesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceCooperativeMatrixPropertiesNV where
+  zero = PhysicalDeviceCooperativeMatrixPropertiesNV
+           zero
+
+
+-- | VkCooperativeMatrixPropertiesNV - Structure specifying cooperative
+-- matrix properties
+--
+-- = Description
+--
+-- If some types are preferred over other types (e.g. for performance),
+-- they /should/ appear earlier in the list enumerated by
+-- 'getPhysicalDeviceCooperativeMatrixPropertiesNV'.
+--
+-- At least one entry in the list /must/ have power of two values for all
+-- of @MSize@, @KSize@, and @NSize@.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'ComponentTypeNV', 'ScopeNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceCooperativeMatrixPropertiesNV'
+data CooperativeMatrixPropertiesNV = CooperativeMatrixPropertiesNV
+  { -- | @MSize@ is the number of rows in matrices A, C, and D.
+    mSize :: Word32
+  , -- | @NSize@ is the number of columns in matrices B, C, D.
+    nSize :: Word32
+  , -- | @KSize@ is the number of columns in matrix A and rows in matrix B.
+    kSize :: Word32
+  , -- | @AType@ /must/ be a valid 'ComponentTypeNV' value
+    aType :: ComponentTypeNV
+  , -- | @BType@ /must/ be a valid 'ComponentTypeNV' value
+    bType :: ComponentTypeNV
+  , -- | @CType@ /must/ be a valid 'ComponentTypeNV' value
+    cType :: ComponentTypeNV
+  , -- | @DType@ /must/ be a valid 'ComponentTypeNV' value
+    dType :: ComponentTypeNV
+  , -- | @scope@ /must/ be a valid 'ScopeNV' value
+    scope :: ScopeNV
+  }
+  deriving (Typeable)
+deriving instance Show CooperativeMatrixPropertiesNV
+
+instance ToCStruct CooperativeMatrixPropertiesNV where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CooperativeMatrixPropertiesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (mSize)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (nSize)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (kSize)
+    poke ((p `plusPtr` 28 :: Ptr ComponentTypeNV)) (aType)
+    poke ((p `plusPtr` 32 :: Ptr ComponentTypeNV)) (bType)
+    poke ((p `plusPtr` 36 :: Ptr ComponentTypeNV)) (cType)
+    poke ((p `plusPtr` 40 :: Ptr ComponentTypeNV)) (dType)
+    poke ((p `plusPtr` 44 :: Ptr ScopeNV)) (scope)
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr ComponentTypeNV)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr ComponentTypeNV)) (zero)
+    poke ((p `plusPtr` 36 :: Ptr ComponentTypeNV)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr ComponentTypeNV)) (zero)
+    poke ((p `plusPtr` 44 :: Ptr ScopeNV)) (zero)
+    f
+
+instance FromCStruct CooperativeMatrixPropertiesNV where
+  peekCStruct p = do
+    mSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    nSize <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    kSize <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    aType <- peek @ComponentTypeNV ((p `plusPtr` 28 :: Ptr ComponentTypeNV))
+    bType <- peek @ComponentTypeNV ((p `plusPtr` 32 :: Ptr ComponentTypeNV))
+    cType <- peek @ComponentTypeNV ((p `plusPtr` 36 :: Ptr ComponentTypeNV))
+    dType <- peek @ComponentTypeNV ((p `plusPtr` 40 :: Ptr ComponentTypeNV))
+    scope <- peek @ScopeNV ((p `plusPtr` 44 :: Ptr ScopeNV))
+    pure $ CooperativeMatrixPropertiesNV
+             mSize nSize kSize aType bType cType dType scope
+
+instance Storable CooperativeMatrixPropertiesNV where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero CooperativeMatrixPropertiesNV where
+  zero = CooperativeMatrixPropertiesNV
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkScopeNV - Specify SPIR-V scope
+--
+-- = Description
+--
+-- All enum values match the corresponding SPIR-V value.
+--
+-- = See Also
+--
+-- 'CooperativeMatrixPropertiesNV'
+newtype ScopeNV = ScopeNV Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+-- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error
+
+-- | 'SCOPE_DEVICE_NV' corresponds to SPIR-V 'Vulkan.Core10.Handles.Device'
+-- scope.
+pattern SCOPE_DEVICE_NV = ScopeNV 1
+-- | 'SCOPE_WORKGROUP_NV' corresponds to SPIR-V @Workgroup@ scope.
+pattern SCOPE_WORKGROUP_NV = ScopeNV 2
+-- | 'SCOPE_SUBGROUP_NV' corresponds to SPIR-V @Subgroup@ scope.
+pattern SCOPE_SUBGROUP_NV = ScopeNV 3
+-- | 'SCOPE_QUEUE_FAMILY_NV' corresponds to SPIR-V @QueueFamily@ scope.
+pattern SCOPE_QUEUE_FAMILY_NV = ScopeNV 5
+{-# complete SCOPE_DEVICE_NV,
+             SCOPE_WORKGROUP_NV,
+             SCOPE_SUBGROUP_NV,
+             SCOPE_QUEUE_FAMILY_NV :: ScopeNV #-}
+
+instance Show ScopeNV where
+  showsPrec p = \case
+    SCOPE_DEVICE_NV -> showString "SCOPE_DEVICE_NV"
+    SCOPE_WORKGROUP_NV -> showString "SCOPE_WORKGROUP_NV"
+    SCOPE_SUBGROUP_NV -> showString "SCOPE_SUBGROUP_NV"
+    SCOPE_QUEUE_FAMILY_NV -> showString "SCOPE_QUEUE_FAMILY_NV"
+    ScopeNV x -> showParen (p >= 11) (showString "ScopeNV " . showsPrec 11 x)
+
+instance Read ScopeNV where
+  readPrec = parens (choose [("SCOPE_DEVICE_NV", pure SCOPE_DEVICE_NV)
+                            , ("SCOPE_WORKGROUP_NV", pure SCOPE_WORKGROUP_NV)
+                            , ("SCOPE_SUBGROUP_NV", pure SCOPE_SUBGROUP_NV)
+                            , ("SCOPE_QUEUE_FAMILY_NV", pure SCOPE_QUEUE_FAMILY_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ScopeNV")
+                       v <- step readPrec
+                       pure (ScopeNV v)))
+
+
+-- | VkComponentTypeNV - Specify SPIR-V cooperative matrix component type
+--
+-- = See Also
+--
+-- 'CooperativeMatrixPropertiesNV'
+newtype ComponentTypeNV = ComponentTypeNV Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'COMPONENT_TYPE_FLOAT16_NV' corresponds to SPIR-V @OpTypeFloat@ 16.
+pattern COMPONENT_TYPE_FLOAT16_NV = ComponentTypeNV 0
+-- | 'COMPONENT_TYPE_FLOAT32_NV' corresponds to SPIR-V @OpTypeFloat@ 32.
+pattern COMPONENT_TYPE_FLOAT32_NV = ComponentTypeNV 1
+-- | 'COMPONENT_TYPE_FLOAT64_NV' corresponds to SPIR-V @OpTypeFloat@ 64.
+pattern COMPONENT_TYPE_FLOAT64_NV = ComponentTypeNV 2
+-- | 'COMPONENT_TYPE_SINT8_NV' corresponds to SPIR-V @OpTypeInt@ 8 1.
+pattern COMPONENT_TYPE_SINT8_NV = ComponentTypeNV 3
+-- | 'COMPONENT_TYPE_SINT16_NV' corresponds to SPIR-V @OpTypeInt@ 16 1.
+pattern COMPONENT_TYPE_SINT16_NV = ComponentTypeNV 4
+-- | 'COMPONENT_TYPE_SINT32_NV' corresponds to SPIR-V @OpTypeInt@ 32 1.
+pattern COMPONENT_TYPE_SINT32_NV = ComponentTypeNV 5
+-- | 'COMPONENT_TYPE_SINT64_NV' corresponds to SPIR-V @OpTypeInt@ 64 1.
+pattern COMPONENT_TYPE_SINT64_NV = ComponentTypeNV 6
+-- | 'COMPONENT_TYPE_UINT8_NV' corresponds to SPIR-V @OpTypeInt@ 8 0.
+pattern COMPONENT_TYPE_UINT8_NV = ComponentTypeNV 7
+-- | 'COMPONENT_TYPE_UINT16_NV' corresponds to SPIR-V @OpTypeInt@ 16 0.
+pattern COMPONENT_TYPE_UINT16_NV = ComponentTypeNV 8
+-- | 'COMPONENT_TYPE_UINT32_NV' corresponds to SPIR-V @OpTypeInt@ 32 0.
+pattern COMPONENT_TYPE_UINT32_NV = ComponentTypeNV 9
+-- | 'COMPONENT_TYPE_UINT64_NV' corresponds to SPIR-V @OpTypeInt@ 64 0.
+pattern COMPONENT_TYPE_UINT64_NV = ComponentTypeNV 10
+{-# complete COMPONENT_TYPE_FLOAT16_NV,
+             COMPONENT_TYPE_FLOAT32_NV,
+             COMPONENT_TYPE_FLOAT64_NV,
+             COMPONENT_TYPE_SINT8_NV,
+             COMPONENT_TYPE_SINT16_NV,
+             COMPONENT_TYPE_SINT32_NV,
+             COMPONENT_TYPE_SINT64_NV,
+             COMPONENT_TYPE_UINT8_NV,
+             COMPONENT_TYPE_UINT16_NV,
+             COMPONENT_TYPE_UINT32_NV,
+             COMPONENT_TYPE_UINT64_NV :: ComponentTypeNV #-}
+
+instance Show ComponentTypeNV where
+  showsPrec p = \case
+    COMPONENT_TYPE_FLOAT16_NV -> showString "COMPONENT_TYPE_FLOAT16_NV"
+    COMPONENT_TYPE_FLOAT32_NV -> showString "COMPONENT_TYPE_FLOAT32_NV"
+    COMPONENT_TYPE_FLOAT64_NV -> showString "COMPONENT_TYPE_FLOAT64_NV"
+    COMPONENT_TYPE_SINT8_NV -> showString "COMPONENT_TYPE_SINT8_NV"
+    COMPONENT_TYPE_SINT16_NV -> showString "COMPONENT_TYPE_SINT16_NV"
+    COMPONENT_TYPE_SINT32_NV -> showString "COMPONENT_TYPE_SINT32_NV"
+    COMPONENT_TYPE_SINT64_NV -> showString "COMPONENT_TYPE_SINT64_NV"
+    COMPONENT_TYPE_UINT8_NV -> showString "COMPONENT_TYPE_UINT8_NV"
+    COMPONENT_TYPE_UINT16_NV -> showString "COMPONENT_TYPE_UINT16_NV"
+    COMPONENT_TYPE_UINT32_NV -> showString "COMPONENT_TYPE_UINT32_NV"
+    COMPONENT_TYPE_UINT64_NV -> showString "COMPONENT_TYPE_UINT64_NV"
+    ComponentTypeNV x -> showParen (p >= 11) (showString "ComponentTypeNV " . showsPrec 11 x)
+
+instance Read ComponentTypeNV where
+  readPrec = parens (choose [("COMPONENT_TYPE_FLOAT16_NV", pure COMPONENT_TYPE_FLOAT16_NV)
+                            , ("COMPONENT_TYPE_FLOAT32_NV", pure COMPONENT_TYPE_FLOAT32_NV)
+                            , ("COMPONENT_TYPE_FLOAT64_NV", pure COMPONENT_TYPE_FLOAT64_NV)
+                            , ("COMPONENT_TYPE_SINT8_NV", pure COMPONENT_TYPE_SINT8_NV)
+                            , ("COMPONENT_TYPE_SINT16_NV", pure COMPONENT_TYPE_SINT16_NV)
+                            , ("COMPONENT_TYPE_SINT32_NV", pure COMPONENT_TYPE_SINT32_NV)
+                            , ("COMPONENT_TYPE_SINT64_NV", pure COMPONENT_TYPE_SINT64_NV)
+                            , ("COMPONENT_TYPE_UINT8_NV", pure COMPONENT_TYPE_UINT8_NV)
+                            , ("COMPONENT_TYPE_UINT16_NV", pure COMPONENT_TYPE_UINT16_NV)
+                            , ("COMPONENT_TYPE_UINT32_NV", pure COMPONENT_TYPE_UINT32_NV)
+                            , ("COMPONENT_TYPE_UINT64_NV", pure COMPONENT_TYPE_UINT64_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ComponentTypeNV")
+                       v <- step readPrec
+                       pure (ComponentTypeNV v)))
+
+
+type NV_COOPERATIVE_MATRIX_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION"
+pattern NV_COOPERATIVE_MATRIX_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_COOPERATIVE_MATRIX_SPEC_VERSION = 1
+
+
+type NV_COOPERATIVE_MATRIX_EXTENSION_NAME = "VK_NV_cooperative_matrix"
+
+-- No documentation found for TopLevel "VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME"
+pattern NV_COOPERATIVE_MATRIX_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_COOPERATIVE_MATRIX_EXTENSION_NAME = "VK_NV_cooperative_matrix"
+
diff --git a/src/Vulkan/Extensions/VK_NV_cooperative_matrix.hs-boot b/src/Vulkan/Extensions/VK_NV_cooperative_matrix.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_cooperative_matrix.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_cooperative_matrix  ( CooperativeMatrixPropertiesNV
+                                                   , PhysicalDeviceCooperativeMatrixFeaturesNV
+                                                   , PhysicalDeviceCooperativeMatrixPropertiesNV
+                                                   ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data CooperativeMatrixPropertiesNV
+
+instance ToCStruct CooperativeMatrixPropertiesNV
+instance Show CooperativeMatrixPropertiesNV
+
+instance FromCStruct CooperativeMatrixPropertiesNV
+
+
+data PhysicalDeviceCooperativeMatrixFeaturesNV
+
+instance ToCStruct PhysicalDeviceCooperativeMatrixFeaturesNV
+instance Show PhysicalDeviceCooperativeMatrixFeaturesNV
+
+instance FromCStruct PhysicalDeviceCooperativeMatrixFeaturesNV
+
+
+data PhysicalDeviceCooperativeMatrixPropertiesNV
+
+instance ToCStruct PhysicalDeviceCooperativeMatrixPropertiesNV
+instance Show PhysicalDeviceCooperativeMatrixPropertiesNV
+
+instance FromCStruct PhysicalDeviceCooperativeMatrixPropertiesNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_corner_sampled_image.hs b/src/Vulkan/Extensions/VK_NV_corner_sampled_image.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_corner_sampled_image.hs
@@ -0,0 +1,108 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_corner_sampled_image  ( PhysicalDeviceCornerSampledImageFeaturesNV(..)
+                                                     , NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION
+                                                     , pattern NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION
+                                                     , NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME
+                                                     , pattern NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME
+                                                     ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV))
+-- | VkPhysicalDeviceCornerSampledImageFeaturesNV - Structure describing
+-- corner sampled image features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceCornerSampledImageFeaturesNV'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceCornerSampledImageFeaturesNV' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceCornerSampledImageFeaturesNV' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceCornerSampledImageFeaturesNV = PhysicalDeviceCornerSampledImageFeaturesNV
+  { -- | @cornerSampledImage@ specifies whether images can be created with a
+    -- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'.
+    -- See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-images-corner-sampled Corner-Sampled Images>.
+    cornerSampledImage :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceCornerSampledImageFeaturesNV
+
+instance ToCStruct PhysicalDeviceCornerSampledImageFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceCornerSampledImageFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (cornerSampledImage))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceCornerSampledImageFeaturesNV where
+  peekCStruct p = do
+    cornerSampledImage <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceCornerSampledImageFeaturesNV
+             (bool32ToBool cornerSampledImage)
+
+instance Storable PhysicalDeviceCornerSampledImageFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceCornerSampledImageFeaturesNV where
+  zero = PhysicalDeviceCornerSampledImageFeaturesNV
+           zero
+
+
+type NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION"
+pattern NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION = 2
+
+
+type NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME = "VK_NV_corner_sampled_image"
+
+-- No documentation found for TopLevel "VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME"
+pattern NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME = "VK_NV_corner_sampled_image"
+
diff --git a/src/Vulkan/Extensions/VK_NV_corner_sampled_image.hs-boot b/src/Vulkan/Extensions/VK_NV_corner_sampled_image.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_corner_sampled_image.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_corner_sampled_image  (PhysicalDeviceCornerSampledImageFeaturesNV) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceCornerSampledImageFeaturesNV
+
+instance ToCStruct PhysicalDeviceCornerSampledImageFeaturesNV
+instance Show PhysicalDeviceCornerSampledImageFeaturesNV
+
+instance FromCStruct PhysicalDeviceCornerSampledImageFeaturesNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs b/src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs
@@ -0,0 +1,472 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_coverage_reduction_mode  ( getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV
+                                                        , PhysicalDeviceCoverageReductionModeFeaturesNV(..)
+                                                        , PipelineCoverageReductionStateCreateInfoNV(..)
+                                                        , FramebufferMixedSamplesCombinationNV(..)
+                                                        , PipelineCoverageReductionStateCreateFlagsNV(..)
+                                                        , CoverageReductionModeNV( COVERAGE_REDUCTION_MODE_MERGE_NV
+                                                                                 , COVERAGE_REDUCTION_MODE_TRUNCATE_NV
+                                                                                 , ..
+                                                                                 )
+                                                        , NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION
+                                                        , pattern NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION
+                                                        , NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME
+                                                        , pattern NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME
+                                                        ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlags)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV
+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr FramebufferMixedSamplesCombinationNV -> IO Result) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr FramebufferMixedSamplesCombinationNV -> IO Result
+
+-- | vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV -
+-- Query supported sample count combinations
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the set
+--     of combinations.
+--
+-- -   @pCombinationCount@ is a pointer to an integer related to the number
+--     of combinations available or queried, as described below.
+--
+-- -   @pCombinations@ is either @NULL@ or a pointer to an array of
+--     'FramebufferMixedSamplesCombinationNV' values, indicating the
+--     supported combinations of coverage reduction mode, rasterization
+--     samples, and color, depth, stencil attachment sample counts.
+--
+-- = Description
+--
+-- If @pCombinations@ is @NULL@, then the number of supported combinations
+-- for the given @physicalDevice@ is returned in @pCombinationCount@.
+-- Otherwise, @pCombinationCount@ /must/ point to a variable set by the
+-- user to the number of elements in the @pCombinations@ array, and on
+-- return the variable is overwritten with the number of values actually
+-- written to @pCombinations@. If the value of @pCombinationCount@ is less
+-- than the number of combinations supported for the given
+-- @physicalDevice@, at most @pCombinationCount@ values will be written
+-- @pCombinations@ and 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be
+-- returned instead of 'Vulkan.Core10.Enums.Result.SUCCESS' to indicate
+-- that not all the supported values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PhysicalDevice' handle
+--
+-- -   @pCombinationCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pCombinationCount@ is not @0@, and
+--     @pCombinations@ is not @NULL@, @pCombinations@ /must/ be a valid
+--     pointer to an array of @pCombinationCount@
+--     'FramebufferMixedSamplesCombinationNV' structures
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'FramebufferMixedSamplesCombinationNV',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV :: forall io . MonadIO io => PhysicalDevice -> io (Result, ("combinations" ::: Vector FramebufferMixedSamplesCombinationNV))
+getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV physicalDevice = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNVPtr = pVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV is null" Nothing Nothing
+  let vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV' = mkVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNVPtr
+  let physicalDevice' = physicalDeviceHandle (physicalDevice)
+  pPCombinationCount <- ContT $ bracket (callocBytes @Word32 4) free
+  r <- lift $ vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV' physicalDevice' (pPCombinationCount) (nullPtr)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pCombinationCount <- lift $ peek @Word32 pPCombinationCount
+  pPCombinations <- ContT $ bracket (callocBytes @FramebufferMixedSamplesCombinationNV ((fromIntegral (pCombinationCount)) * 32)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPCombinations `advancePtrBytes` (i * 32) :: Ptr FramebufferMixedSamplesCombinationNV) . ($ ())) [0..(fromIntegral (pCombinationCount)) - 1]
+  r' <- lift $ vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV' physicalDevice' (pPCombinationCount) ((pPCombinations))
+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
+  pCombinationCount' <- lift $ peek @Word32 pPCombinationCount
+  pCombinations' <- lift $ generateM (fromIntegral (pCombinationCount')) (\i -> peekCStruct @FramebufferMixedSamplesCombinationNV (((pPCombinations) `advancePtrBytes` (32 * (i)) :: Ptr FramebufferMixedSamplesCombinationNV)))
+  pure $ ((r'), pCombinations')
+
+
+-- | VkPhysicalDeviceCoverageReductionModeFeaturesNV - Structure describing
+-- the coverage reduction mode features that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceCoverageReductionModeFeaturesNV'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceCoverageReductionModeFeaturesNV' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceCoverageReductionModeFeaturesNV' /can/ also be included
+-- in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
+-- enable the feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceCoverageReductionModeFeaturesNV = PhysicalDeviceCoverageReductionModeFeaturesNV
+  { -- | @coverageReductionMode@ indicates whether the implementation supports
+    -- coverage reduction modes. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-coverage-reduction Coverage Reduction>.
+    coverageReductionMode :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceCoverageReductionModeFeaturesNV
+
+instance ToCStruct PhysicalDeviceCoverageReductionModeFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceCoverageReductionModeFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (coverageReductionMode))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceCoverageReductionModeFeaturesNV where
+  peekCStruct p = do
+    coverageReductionMode <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceCoverageReductionModeFeaturesNV
+             (bool32ToBool coverageReductionMode)
+
+instance Storable PhysicalDeviceCoverageReductionModeFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceCoverageReductionModeFeaturesNV where
+  zero = PhysicalDeviceCoverageReductionModeFeaturesNV
+           zero
+
+
+-- | VkPipelineCoverageReductionStateCreateInfoNV - Structure specifying
+-- parameters controlling coverage reduction
+--
+-- = Description
+--
+-- If this structure is not present, the default coverage reduction mode is
+-- inferred as follows:
+--
+-- -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, then
+--     it is as if the @coverageReductionMode@ is
+--     'COVERAGE_REDUCTION_MODE_MERGE_NV'.
+--
+-- -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, then
+--     it is as if the @coverageReductionMode@ is
+--     'COVERAGE_REDUCTION_MODE_TRUNCATE_NV'.
+--
+-- -   If both @VK_NV_framebuffer_mixed_samples@ and
+--     @VK_AMD_mixed_attachment_samples@ are enabled, then the default
+--     coverage reduction mode is implementation-dependent.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV'
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @coverageReductionMode@ /must/ be a valid 'CoverageReductionModeNV'
+--     value
+--
+-- = See Also
+--
+-- 'CoverageReductionModeNV',
+-- 'PipelineCoverageReductionStateCreateFlagsNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineCoverageReductionStateCreateInfoNV = PipelineCoverageReductionStateCreateInfoNV
+  { -- | @flags@ is reserved for future use.
+    flags :: PipelineCoverageReductionStateCreateFlagsNV
+  , -- | @coverageReductionMode@ is a 'CoverageReductionModeNV' value controlling
+    -- how the /color sample mask/ is generated from the coverage mask.
+    coverageReductionMode :: CoverageReductionModeNV
+  }
+  deriving (Typeable)
+deriving instance Show PipelineCoverageReductionStateCreateInfoNV
+
+instance ToCStruct PipelineCoverageReductionStateCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineCoverageReductionStateCreateInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineCoverageReductionStateCreateFlagsNV)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr CoverageReductionModeNV)) (coverageReductionMode)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr CoverageReductionModeNV)) (zero)
+    f
+
+instance FromCStruct PipelineCoverageReductionStateCreateInfoNV where
+  peekCStruct p = do
+    flags <- peek @PipelineCoverageReductionStateCreateFlagsNV ((p `plusPtr` 16 :: Ptr PipelineCoverageReductionStateCreateFlagsNV))
+    coverageReductionMode <- peek @CoverageReductionModeNV ((p `plusPtr` 20 :: Ptr CoverageReductionModeNV))
+    pure $ PipelineCoverageReductionStateCreateInfoNV
+             flags coverageReductionMode
+
+instance Storable PipelineCoverageReductionStateCreateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineCoverageReductionStateCreateInfoNV where
+  zero = PipelineCoverageReductionStateCreateInfoNV
+           zero
+           zero
+
+
+-- | VkFramebufferMixedSamplesCombinationNV - Structure specifying a
+-- supported sample count combination
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'CoverageReductionModeNV',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV'
+data FramebufferMixedSamplesCombinationNV = FramebufferMixedSamplesCombinationNV
+  { -- | @coverageReductionMode@ is a 'CoverageReductionModeNV' value specifying
+    -- the coverage reduction mode.
+    coverageReductionMode :: CoverageReductionModeNV
+  , -- | @rasterizationSamples@ specifies the number of rasterization samples in
+    -- the supported combination.
+    rasterizationSamples :: SampleCountFlagBits
+  , -- | @depthStencilSamples@ specifies the number of samples in the depth
+    -- stencil attachment in the supported combination. A value of 0 indicates
+    -- the combination does not have a depth stencil attachment.
+    depthStencilSamples :: SampleCountFlags
+  , -- | @colorSamples@ specifies the number of color samples in a color
+    -- attachment in the supported combination. A value of 0 indicates the
+    -- combination does not have a color attachment.
+    colorSamples :: SampleCountFlags
+  }
+  deriving (Typeable)
+deriving instance Show FramebufferMixedSamplesCombinationNV
+
+instance ToCStruct FramebufferMixedSamplesCombinationNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p FramebufferMixedSamplesCombinationNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CoverageReductionModeNV)) (coverageReductionMode)
+    poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (rasterizationSamples)
+    poke ((p `plusPtr` 24 :: Ptr SampleCountFlags)) (depthStencilSamples)
+    poke ((p `plusPtr` 28 :: Ptr SampleCountFlags)) (colorSamples)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr CoverageReductionModeNV)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr SampleCountFlags)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr SampleCountFlags)) (zero)
+    f
+
+instance FromCStruct FramebufferMixedSamplesCombinationNV where
+  peekCStruct p = do
+    coverageReductionMode <- peek @CoverageReductionModeNV ((p `plusPtr` 16 :: Ptr CoverageReductionModeNV))
+    rasterizationSamples <- peek @SampleCountFlagBits ((p `plusPtr` 20 :: Ptr SampleCountFlagBits))
+    depthStencilSamples <- peek @SampleCountFlags ((p `plusPtr` 24 :: Ptr SampleCountFlags))
+    colorSamples <- peek @SampleCountFlags ((p `plusPtr` 28 :: Ptr SampleCountFlags))
+    pure $ FramebufferMixedSamplesCombinationNV
+             coverageReductionMode rasterizationSamples depthStencilSamples colorSamples
+
+instance Storable FramebufferMixedSamplesCombinationNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero FramebufferMixedSamplesCombinationNV where
+  zero = FramebufferMixedSamplesCombinationNV
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineCoverageReductionStateCreateFlagsNV - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineCoverageReductionStateCreateFlagsNV' is a bitmask type for
+-- setting a mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'PipelineCoverageReductionStateCreateInfoNV'
+newtype PipelineCoverageReductionStateCreateFlagsNV = PipelineCoverageReductionStateCreateFlagsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineCoverageReductionStateCreateFlagsNV where
+  showsPrec p = \case
+    PipelineCoverageReductionStateCreateFlagsNV x -> showParen (p >= 11) (showString "PipelineCoverageReductionStateCreateFlagsNV 0x" . showHex x)
+
+instance Read PipelineCoverageReductionStateCreateFlagsNV where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineCoverageReductionStateCreateFlagsNV")
+                       v <- step readPrec
+                       pure (PipelineCoverageReductionStateCreateFlagsNV v)))
+
+
+-- | VkCoverageReductionModeNV - Specify the coverage reduction mode
+--
+-- = See Also
+--
+-- 'FramebufferMixedSamplesCombinationNV',
+-- 'PipelineCoverageReductionStateCreateInfoNV'
+newtype CoverageReductionModeNV = CoverageReductionModeNV Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'COVERAGE_REDUCTION_MODE_MERGE_NV': In this mode, there is an
+-- implementation-dependent association of each coverage sample to a color
+-- sample. The reduced color sample mask is computed such that the bit for
+-- each color sample is 1 if any of the associated bits in the fragment’s
+-- coverage is on, and 0 otherwise.
+pattern COVERAGE_REDUCTION_MODE_MERGE_NV = CoverageReductionModeNV 0
+-- | 'COVERAGE_REDUCTION_MODE_TRUNCATE_NV': In this mode, only the first M
+-- coverage samples are associated with the color samples such that
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask sample index>
+-- i maps to color sample index i, where M is the number of color samples.
+pattern COVERAGE_REDUCTION_MODE_TRUNCATE_NV = CoverageReductionModeNV 1
+{-# complete COVERAGE_REDUCTION_MODE_MERGE_NV,
+             COVERAGE_REDUCTION_MODE_TRUNCATE_NV :: CoverageReductionModeNV #-}
+
+instance Show CoverageReductionModeNV where
+  showsPrec p = \case
+    COVERAGE_REDUCTION_MODE_MERGE_NV -> showString "COVERAGE_REDUCTION_MODE_MERGE_NV"
+    COVERAGE_REDUCTION_MODE_TRUNCATE_NV -> showString "COVERAGE_REDUCTION_MODE_TRUNCATE_NV"
+    CoverageReductionModeNV x -> showParen (p >= 11) (showString "CoverageReductionModeNV " . showsPrec 11 x)
+
+instance Read CoverageReductionModeNV where
+  readPrec = parens (choose [("COVERAGE_REDUCTION_MODE_MERGE_NV", pure COVERAGE_REDUCTION_MODE_MERGE_NV)
+                            , ("COVERAGE_REDUCTION_MODE_TRUNCATE_NV", pure COVERAGE_REDUCTION_MODE_TRUNCATE_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CoverageReductionModeNV")
+                       v <- step readPrec
+                       pure (CoverageReductionModeNV v)))
+
+
+type NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION"
+pattern NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION = 1
+
+
+type NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME = "VK_NV_coverage_reduction_mode"
+
+-- No documentation found for TopLevel "VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME"
+pattern NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME = "VK_NV_coverage_reduction_mode"
+
diff --git a/src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs-boot b/src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_coverage_reduction_mode  ( FramebufferMixedSamplesCombinationNV
+                                                        , PhysicalDeviceCoverageReductionModeFeaturesNV
+                                                        , PipelineCoverageReductionStateCreateInfoNV
+                                                        ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data FramebufferMixedSamplesCombinationNV
+
+instance ToCStruct FramebufferMixedSamplesCombinationNV
+instance Show FramebufferMixedSamplesCombinationNV
+
+instance FromCStruct FramebufferMixedSamplesCombinationNV
+
+
+data PhysicalDeviceCoverageReductionModeFeaturesNV
+
+instance ToCStruct PhysicalDeviceCoverageReductionModeFeaturesNV
+instance Show PhysicalDeviceCoverageReductionModeFeaturesNV
+
+instance FromCStruct PhysicalDeviceCoverageReductionModeFeaturesNV
+
+
+data PipelineCoverageReductionStateCreateInfoNV
+
+instance ToCStruct PipelineCoverageReductionStateCreateInfoNV
+instance Show PipelineCoverageReductionStateCreateInfoNV
+
+instance FromCStruct PipelineCoverageReductionStateCreateInfoNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_dedicated_allocation.hs b/src/Vulkan/Extensions/VK_NV_dedicated_allocation.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_dedicated_allocation.hs
@@ -0,0 +1,269 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_dedicated_allocation  ( DedicatedAllocationImageCreateInfoNV(..)
+                                                     , DedicatedAllocationBufferCreateInfoNV(..)
+                                                     , DedicatedAllocationMemoryAllocateInfoNV(..)
+                                                     , NV_DEDICATED_ALLOCATION_SPEC_VERSION
+                                                     , pattern NV_DEDICATED_ALLOCATION_SPEC_VERSION
+                                                     , NV_DEDICATED_ALLOCATION_EXTENSION_NAME
+                                                     , pattern NV_DEDICATED_ALLOCATION_EXTENSION_NAME
+                                                     ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Handles (Image)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV))
+-- | VkDedicatedAllocationImageCreateInfoNV - Specify that an image is bound
+-- to a dedicated memory resource
+--
+-- = 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 'Vulkan.Core10.BaseType.TRUE',
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ /must/ not include
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT',
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',
+--     or
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DedicatedAllocationImageCreateInfoNV = DedicatedAllocationImageCreateInfoNV
+  { -- | @dedicatedAllocation@ specifies whether the image will have a dedicated
+    -- allocation bound to it.
+    dedicatedAllocation :: Bool }
+  deriving (Typeable)
+deriving instance Show DedicatedAllocationImageCreateInfoNV
+
+instance ToCStruct DedicatedAllocationImageCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DedicatedAllocationImageCreateInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (dedicatedAllocation))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct DedicatedAllocationImageCreateInfoNV where
+  peekCStruct p = do
+    dedicatedAllocation <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ DedicatedAllocationImageCreateInfoNV
+             (bool32ToBool dedicatedAllocation)
+
+instance Storable DedicatedAllocationImageCreateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DedicatedAllocationImageCreateInfoNV where
+  zero = DedicatedAllocationImageCreateInfoNV
+           zero
+
+
+-- | VkDedicatedAllocationBufferCreateInfoNV - Specify that a buffer is bound
+-- to a dedicated memory resource
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DedicatedAllocationBufferCreateInfoNV = DedicatedAllocationBufferCreateInfoNV
+  { -- | @dedicatedAllocation@ specifies whether the buffer will have a dedicated
+    -- allocation bound to it.
+    dedicatedAllocation :: Bool }
+  deriving (Typeable)
+deriving instance Show DedicatedAllocationBufferCreateInfoNV
+
+instance ToCStruct DedicatedAllocationBufferCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DedicatedAllocationBufferCreateInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (dedicatedAllocation))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct DedicatedAllocationBufferCreateInfoNV where
+  peekCStruct p = do
+    dedicatedAllocation <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ DedicatedAllocationBufferCreateInfoNV
+             (bool32ToBool dedicatedAllocation)
+
+instance Storable DedicatedAllocationBufferCreateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DedicatedAllocationBufferCreateInfoNV where
+  zero = DedicatedAllocationBufferCreateInfoNV
+           zero
+
+
+-- | VkDedicatedAllocationMemoryAllocateInfoNV - Specify a dedicated memory
+-- allocation resource
+--
+-- == Valid Usage
+--
+-- -   At least one of @image@ and @buffer@ /must/ be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the
+--     image /must/ have been created with
+--     'DedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@ equal
+--     to 'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the
+--     buffer /must/ have been created with
+--     'DedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@ equal
+--     to 'Vulkan.Core10.BaseType.TRUE'
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@ /must/
+--     equal the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ of the
+--     image
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@ /must/
+--     equal the
+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ of the
+--     buffer
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import
+--     operation, the memory being imported /must/ also be a dedicated
+--     image allocation and @image@ /must/ be identical to the image
+--     associated with the imported memory
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and
+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import
+--     operation, the memory being imported /must/ also be a dedicated
+--     buffer allocation and @buffer@ /must/ be identical to the buffer
+--     associated with the imported memory
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV'
+--
+-- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
+--
+-- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   Both of @buffer@, and @image@ that are valid handles of non-ignored
+--     parameters /must/ have been created, allocated, or retrieved from
+--     the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.Image',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DedicatedAllocationMemoryAllocateInfoNV = DedicatedAllocationMemoryAllocateInfoNV
+  { -- | @image@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a handle of an
+    -- image which this memory will be bound to.
+    image :: Image
+  , -- | @buffer@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a handle of a
+    -- buffer which this memory will be bound to.
+    buffer :: Buffer
+  }
+  deriving (Typeable)
+deriving instance Show DedicatedAllocationMemoryAllocateInfoNV
+
+instance ToCStruct DedicatedAllocationMemoryAllocateInfoNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DedicatedAllocationMemoryAllocateInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Image)) (image)
+    poke ((p `plusPtr` 24 :: Ptr Buffer)) (buffer)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct DedicatedAllocationMemoryAllocateInfoNV where
+  peekCStruct p = do
+    image <- peek @Image ((p `plusPtr` 16 :: Ptr Image))
+    buffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer))
+    pure $ DedicatedAllocationMemoryAllocateInfoNV
+             image buffer
+
+instance Storable DedicatedAllocationMemoryAllocateInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DedicatedAllocationMemoryAllocateInfoNV where
+  zero = DedicatedAllocationMemoryAllocateInfoNV
+           zero
+           zero
+
+
+type NV_DEDICATED_ALLOCATION_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION"
+pattern NV_DEDICATED_ALLOCATION_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_DEDICATED_ALLOCATION_SPEC_VERSION = 1
+
+
+type NV_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_NV_dedicated_allocation"
+
+-- No documentation found for TopLevel "VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME"
+pattern NV_DEDICATED_ALLOCATION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_NV_dedicated_allocation"
+
diff --git a/src/Vulkan/Extensions/VK_NV_dedicated_allocation.hs-boot b/src/Vulkan/Extensions/VK_NV_dedicated_allocation.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_dedicated_allocation.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_dedicated_allocation  ( DedicatedAllocationBufferCreateInfoNV
+                                                     , DedicatedAllocationImageCreateInfoNV
+                                                     , DedicatedAllocationMemoryAllocateInfoNV
+                                                     ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DedicatedAllocationBufferCreateInfoNV
+
+instance ToCStruct DedicatedAllocationBufferCreateInfoNV
+instance Show DedicatedAllocationBufferCreateInfoNV
+
+instance FromCStruct DedicatedAllocationBufferCreateInfoNV
+
+
+data DedicatedAllocationImageCreateInfoNV
+
+instance ToCStruct DedicatedAllocationImageCreateInfoNV
+instance Show DedicatedAllocationImageCreateInfoNV
+
+instance FromCStruct DedicatedAllocationImageCreateInfoNV
+
+
+data DedicatedAllocationMemoryAllocateInfoNV
+
+instance ToCStruct DedicatedAllocationMemoryAllocateInfoNV
+instance Show DedicatedAllocationMemoryAllocateInfoNV
+
+instance FromCStruct DedicatedAllocationMemoryAllocateInfoNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs b/src/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs
@@ -0,0 +1,107 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing  ( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(..)
+                                                                    , NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION
+                                                                    , pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION
+                                                                    , NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME
+                                                                    , pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME
+                                                                    ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV))
+-- | VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV - Structure
+-- describing dedicated allocation image aliasing features that can be
+-- supported by an implementation
+--
+-- = Members
+--
+-- The members of the
+-- 'PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV'
+-- structure is included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+  { -- | @dedicatedAllocationImageAliasing@ indicates that the implementation
+    -- supports aliasing of compatible image objects on a dedicated allocation.
+    dedicatedAllocationImageAliasing :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+
+instance ToCStruct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (dedicatedAllocationImageAliasing))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV where
+  peekCStruct p = do
+    dedicatedAllocationImageAliasing <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+             (bool32ToBool dedicatedAllocationImageAliasing)
+
+instance Storable PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV where
+  zero = PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+           zero
+
+
+type NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION"
+pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION = 1
+
+
+type NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME = "VK_NV_dedicated_allocation_image_aliasing"
+
+-- No documentation found for TopLevel "VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME"
+pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME = "VK_NV_dedicated_allocation_image_aliasing"
+
diff --git a/src/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs-boot b/src/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing  (PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+
+instance ToCStruct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+instance Show PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+
+instance FromCStruct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs b/src/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs
@@ -0,0 +1,309 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints  ( cmdSetCheckpointNV
+                                                              , getQueueCheckpointDataNV
+                                                              , QueueFamilyCheckpointPropertiesNV(..)
+                                                              , CheckpointDataNV(..)
+                                                              , NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION
+                                                              , pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION
+                                                              , NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME
+                                                              , pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME
+                                                              ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetCheckpointNV))
+import Vulkan.Dynamic (DeviceCmds(pVkGetQueueCheckpointDataNV))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits)
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
+import Vulkan.Core10.Handles (Queue)
+import Vulkan.Core10.Handles (Queue(..))
+import Vulkan.Core10.Handles (Queue_T)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_CHECKPOINT_DATA_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetCheckpointNV
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> Ptr () -> IO ()
+
+-- | vkCmdSetCheckpointNV - insert diagnostic checkpoint in command stream
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer that will receive the marker
+--
+-- -   @pCheckpointMarker@ is an opaque application-provided value that
+--     will be associated with the checkpoint.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, compute, or transfer
+--     operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- |                                                                                                                            |                                                                                                                        | Transfer                                                                                                              |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdSetCheckpointNV :: forall io . MonadIO io => CommandBuffer -> ("checkpointMarker" ::: Ptr ()) -> io ()
+cmdSetCheckpointNV commandBuffer checkpointMarker = liftIO $ do
+  let vkCmdSetCheckpointNVPtr = pVkCmdSetCheckpointNV (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdSetCheckpointNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetCheckpointNV is null" Nothing Nothing
+  let vkCmdSetCheckpointNV' = mkVkCmdSetCheckpointNV vkCmdSetCheckpointNVPtr
+  vkCmdSetCheckpointNV' (commandBufferHandle (commandBuffer)) (checkpointMarker)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetQueueCheckpointDataNV
+  :: FunPtr (Ptr Queue_T -> Ptr Word32 -> Ptr CheckpointDataNV -> IO ()) -> Ptr Queue_T -> Ptr Word32 -> Ptr CheckpointDataNV -> IO ()
+
+-- | vkGetQueueCheckpointDataNV - retrieve diagnostic checkpoint data
+--
+-- = Parameters
+--
+-- -   @queue@ is the 'Vulkan.Core10.Handles.Queue' object the caller would
+--     like to retrieve checkpoint data for
+--
+-- -   @pCheckpointDataCount@ is a pointer to an integer related to the
+--     number of checkpoint markers available or queried, as described
+--     below.
+--
+-- -   @pCheckpointData@ is either @NULL@ or a pointer to an array of
+--     'CheckpointDataNV' structures.
+--
+-- = Description
+--
+-- If @pCheckpointData@ is @NULL@, then the number of checkpoint markers
+-- available is returned in @pCheckpointDataCount@.
+--
+-- Otherwise, @pCheckpointDataCount@ /must/ point to a variable set by the
+-- user to the number of elements in the @pCheckpointData@ array, and on
+-- return the variable is overwritten with the number of structures
+-- actually written to @pCheckpointData@.
+--
+-- If @pCheckpointDataCount@ is less than the number of checkpoint markers
+-- available, at most @pCheckpointDataCount@ structures will be written.
+--
+-- == Valid Usage
+--
+-- -   The device that @queue@ belongs to /must/ be in the lost state
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle
+--
+-- -   @pCheckpointDataCount@ /must/ be a valid pointer to a @uint32_t@
+--     value
+--
+-- -   If the value referenced by @pCheckpointDataCount@ is not @0@, and
+--     @pCheckpointData@ is not @NULL@, @pCheckpointData@ /must/ be a valid
+--     pointer to an array of @pCheckpointDataCount@ 'CheckpointDataNV'
+--     structures
+--
+-- = See Also
+--
+-- 'CheckpointDataNV', 'Vulkan.Core10.Handles.Queue'
+getQueueCheckpointDataNV :: forall io . MonadIO io => Queue -> io (("checkpointData" ::: Vector CheckpointDataNV))
+getQueueCheckpointDataNV queue = liftIO . evalContT $ do
+  let vkGetQueueCheckpointDataNVPtr = pVkGetQueueCheckpointDataNV (deviceCmds (queue :: Queue))
+  lift $ unless (vkGetQueueCheckpointDataNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetQueueCheckpointDataNV is null" Nothing Nothing
+  let vkGetQueueCheckpointDataNV' = mkVkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNVPtr
+  let queue' = queueHandle (queue)
+  pPCheckpointDataCount <- ContT $ bracket (callocBytes @Word32 4) free
+  lift $ vkGetQueueCheckpointDataNV' queue' (pPCheckpointDataCount) (nullPtr)
+  pCheckpointDataCount <- lift $ peek @Word32 pPCheckpointDataCount
+  pPCheckpointData <- ContT $ bracket (callocBytes @CheckpointDataNV ((fromIntegral (pCheckpointDataCount)) * 32)) free
+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPCheckpointData `advancePtrBytes` (i * 32) :: Ptr CheckpointDataNV) . ($ ())) [0..(fromIntegral (pCheckpointDataCount)) - 1]
+  lift $ vkGetQueueCheckpointDataNV' queue' (pPCheckpointDataCount) ((pPCheckpointData))
+  pCheckpointDataCount' <- lift $ peek @Word32 pPCheckpointDataCount
+  pCheckpointData' <- lift $ generateM (fromIntegral (pCheckpointDataCount')) (\i -> peekCStruct @CheckpointDataNV (((pPCheckpointData) `advancePtrBytes` (32 * (i)) :: Ptr CheckpointDataNV)))
+  pure $ (pCheckpointData')
+
+
+-- | VkQueueFamilyCheckpointPropertiesNV - return structure for queue family
+-- checkpoint info query
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data QueueFamilyCheckpointPropertiesNV = QueueFamilyCheckpointPropertiesNV
+  { -- | @checkpointExecutionStageMask@ is a mask indicating which pipeline
+    -- stages the implementation can execute checkpoint markers in.
+    checkpointExecutionStageMask :: PipelineStageFlags }
+  deriving (Typeable)
+deriving instance Show QueueFamilyCheckpointPropertiesNV
+
+instance ToCStruct QueueFamilyCheckpointPropertiesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p QueueFamilyCheckpointPropertiesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineStageFlags)) (checkpointExecutionStageMask)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineStageFlags)) (zero)
+    f
+
+instance FromCStruct QueueFamilyCheckpointPropertiesNV where
+  peekCStruct p = do
+    checkpointExecutionStageMask <- peek @PipelineStageFlags ((p `plusPtr` 16 :: Ptr PipelineStageFlags))
+    pure $ QueueFamilyCheckpointPropertiesNV
+             checkpointExecutionStageMask
+
+instance Storable QueueFamilyCheckpointPropertiesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero QueueFamilyCheckpointPropertiesNV where
+  zero = QueueFamilyCheckpointPropertiesNV
+           zero
+
+
+-- | VkCheckpointDataNV - return structure for command buffer checkpoint data
+--
+-- == Valid Usage (Implicit)
+--
+-- Note that the stages at which a checkpoint marker /can/ be executed are
+-- implementation-defined and /can/ be queried by calling
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'.
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getQueueCheckpointDataNV'
+data CheckpointDataNV = CheckpointDataNV
+  { -- | @stage@ indicates which pipeline stage the checkpoint marker data refers
+    -- to.
+    stage :: PipelineStageFlagBits
+  , -- | @pCheckpointMarker@ contains the value of the last checkpoint marker
+    -- executed in the stage that @stage@ refers to.
+    checkpointMarker :: Ptr ()
+  }
+  deriving (Typeable)
+deriving instance Show CheckpointDataNV
+
+instance ToCStruct CheckpointDataNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CheckpointDataNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CHECKPOINT_DATA_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineStageFlagBits)) (stage)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (checkpointMarker)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_CHECKPOINT_DATA_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineStageFlagBits)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
+    f
+
+instance FromCStruct CheckpointDataNV where
+  peekCStruct p = do
+    stage <- peek @PipelineStageFlagBits ((p `plusPtr` 16 :: Ptr PipelineStageFlagBits))
+    pCheckpointMarker <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
+    pure $ CheckpointDataNV
+             stage pCheckpointMarker
+
+instance Storable CheckpointDataNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero CheckpointDataNV where
+  zero = CheckpointDataNV
+           zero
+           zero
+
+
+type NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION"
+pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION = 2
+
+
+type NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME = "VK_NV_device_diagnostic_checkpoints"
+
+-- No documentation found for TopLevel "VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME"
+pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME = "VK_NV_device_diagnostic_checkpoints"
+
diff --git a/src/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs-boot b/src/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints  ( CheckpointDataNV
+                                                              , QueueFamilyCheckpointPropertiesNV
+                                                              ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data CheckpointDataNV
+
+instance ToCStruct CheckpointDataNV
+instance Show CheckpointDataNV
+
+instance FromCStruct CheckpointDataNV
+
+
+data QueueFamilyCheckpointPropertiesNV
+
+instance ToCStruct QueueFamilyCheckpointPropertiesNV
+instance Show QueueFamilyCheckpointPropertiesNV
+
+instance FromCStruct QueueFamilyCheckpointPropertiesNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs b/src/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs
@@ -0,0 +1,219 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_device_diagnostics_config  ( PhysicalDeviceDiagnosticsConfigFeaturesNV(..)
+                                                          , DeviceDiagnosticsConfigCreateInfoNV(..)
+                                                          , DeviceDiagnosticsConfigFlagBitsNV( DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV
+                                                                                             , DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV
+                                                                                             , DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV
+                                                                                             , ..
+                                                                                             )
+                                                          , DeviceDiagnosticsConfigFlagsNV
+                                                          , NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION
+                                                          , pattern NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION
+                                                          , NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME
+                                                          , pattern NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME
+                                                          ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV))
+-- | VkPhysicalDeviceDiagnosticsConfigFeaturesNV - Structure describing the
+-- device-generated diagnostic configuration features that can be supported
+-- by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceDiagnosticsConfigFeaturesNV' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceDiagnosticsConfigFeaturesNV' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceDiagnosticsConfigFeaturesNV' /can/ also be used in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the
+-- feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDiagnosticsConfigFeaturesNV = PhysicalDeviceDiagnosticsConfigFeaturesNV
+  { -- | @diagnosticsConfig@ indicates whether the implementation supports the
+    -- ability to configure diagnostic tools.
+    diagnosticsConfig :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceDiagnosticsConfigFeaturesNV
+
+instance ToCStruct PhysicalDeviceDiagnosticsConfigFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDiagnosticsConfigFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (diagnosticsConfig))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceDiagnosticsConfigFeaturesNV where
+  peekCStruct p = do
+    diagnosticsConfig <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceDiagnosticsConfigFeaturesNV
+             (bool32ToBool diagnosticsConfig)
+
+instance Storable PhysicalDeviceDiagnosticsConfigFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDiagnosticsConfigFeaturesNV where
+  zero = PhysicalDeviceDiagnosticsConfigFeaturesNV
+           zero
+
+
+-- | VkDeviceDiagnosticsConfigCreateInfoNV - Specify diagnostics config for a
+-- Vulkan device
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'DeviceDiagnosticsConfigFlagsNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data DeviceDiagnosticsConfigCreateInfoNV = DeviceDiagnosticsConfigCreateInfoNV
+  { -- | @flags@ /must/ be a valid combination of
+    -- 'DeviceDiagnosticsConfigFlagBitsNV' values
+    flags :: DeviceDiagnosticsConfigFlagsNV }
+  deriving (Typeable)
+deriving instance Show DeviceDiagnosticsConfigCreateInfoNV
+
+instance ToCStruct DeviceDiagnosticsConfigCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DeviceDiagnosticsConfigCreateInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr DeviceDiagnosticsConfigFlagsNV)) (flags)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct DeviceDiagnosticsConfigCreateInfoNV where
+  peekCStruct p = do
+    flags <- peek @DeviceDiagnosticsConfigFlagsNV ((p `plusPtr` 16 :: Ptr DeviceDiagnosticsConfigFlagsNV))
+    pure $ DeviceDiagnosticsConfigCreateInfoNV
+             flags
+
+instance Storable DeviceDiagnosticsConfigCreateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DeviceDiagnosticsConfigCreateInfoNV where
+  zero = DeviceDiagnosticsConfigCreateInfoNV
+           zero
+
+
+-- | VkDeviceDiagnosticsConfigFlagBitsNV - Bitmask specifying diagnostics
+-- flags
+--
+-- = See Also
+--
+-- 'DeviceDiagnosticsConfigFlagsNV'
+newtype DeviceDiagnosticsConfigFlagBitsNV = DeviceDiagnosticsConfigFlagBitsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV' enables the
+-- generation of debug information for shaders.
+pattern DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV = DeviceDiagnosticsConfigFlagBitsNV 0x00000001
+-- | 'DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV' enables
+-- driver side tracking of resources (images, buffers, etc.) used to
+-- augment the device fault information.
+pattern DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV = DeviceDiagnosticsConfigFlagBitsNV 0x00000002
+-- | 'DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV' enables
+-- automatic insertion of
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#device-diagnostic-checkpoints diagnostic checkpoints>
+-- for draw calls, dispatches, trace rays, and copies. The CPU call stack
+-- at the time of the command will be associated as the marker data for the
+-- automatically inserted checkpoints.
+pattern DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV = DeviceDiagnosticsConfigFlagBitsNV 0x00000004
+
+type DeviceDiagnosticsConfigFlagsNV = DeviceDiagnosticsConfigFlagBitsNV
+
+instance Show DeviceDiagnosticsConfigFlagBitsNV where
+  showsPrec p = \case
+    DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV -> showString "DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV"
+    DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV -> showString "DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV"
+    DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV -> showString "DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV"
+    DeviceDiagnosticsConfigFlagBitsNV x -> showParen (p >= 11) (showString "DeviceDiagnosticsConfigFlagBitsNV 0x" . showHex x)
+
+instance Read DeviceDiagnosticsConfigFlagBitsNV where
+  readPrec = parens (choose [("DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV", pure DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV)
+                            , ("DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV", pure DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV)
+                            , ("DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV", pure DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "DeviceDiagnosticsConfigFlagBitsNV")
+                       v <- step readPrec
+                       pure (DeviceDiagnosticsConfigFlagBitsNV v)))
+
+
+type NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION"
+pattern NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION = 1
+
+
+type NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME = "VK_NV_device_diagnostics_config"
+
+-- No documentation found for TopLevel "VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME"
+pattern NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME = "VK_NV_device_diagnostics_config"
+
diff --git a/src/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs-boot b/src/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_device_diagnostics_config  ( DeviceDiagnosticsConfigCreateInfoNV
+                                                          , PhysicalDeviceDiagnosticsConfigFeaturesNV
+                                                          ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DeviceDiagnosticsConfigCreateInfoNV
+
+instance ToCStruct DeviceDiagnosticsConfigCreateInfoNV
+instance Show DeviceDiagnosticsConfigCreateInfoNV
+
+instance FromCStruct DeviceDiagnosticsConfigCreateInfoNV
+
+
+data PhysicalDeviceDiagnosticsConfigFeaturesNV
+
+instance ToCStruct PhysicalDeviceDiagnosticsConfigFeaturesNV
+instance Show PhysicalDeviceDiagnosticsConfigFeaturesNV
+
+instance FromCStruct PhysicalDeviceDiagnosticsConfigFeaturesNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs b/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs
@@ -0,0 +1,2444 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_device_generated_commands  ( cmdExecuteGeneratedCommandsNV
+                                                          , cmdPreprocessGeneratedCommandsNV
+                                                          , cmdBindPipelineShaderGroupNV
+                                                          , getGeneratedCommandsMemoryRequirementsNV
+                                                          , createIndirectCommandsLayoutNV
+                                                          , withIndirectCommandsLayoutNV
+                                                          , destroyIndirectCommandsLayoutNV
+                                                          , PhysicalDeviceDeviceGeneratedCommandsFeaturesNV(..)
+                                                          , PhysicalDeviceDeviceGeneratedCommandsPropertiesNV(..)
+                                                          , GraphicsShaderGroupCreateInfoNV(..)
+                                                          , GraphicsPipelineShaderGroupsCreateInfoNV(..)
+                                                          , BindShaderGroupIndirectCommandNV(..)
+                                                          , BindIndexBufferIndirectCommandNV(..)
+                                                          , BindVertexBufferIndirectCommandNV(..)
+                                                          , SetStateFlagsIndirectCommandNV(..)
+                                                          , IndirectCommandsStreamNV(..)
+                                                          , IndirectCommandsLayoutTokenNV(..)
+                                                          , IndirectCommandsLayoutCreateInfoNV(..)
+                                                          , GeneratedCommandsInfoNV(..)
+                                                          , GeneratedCommandsMemoryRequirementsInfoNV(..)
+                                                          , IndirectCommandsLayoutUsageFlagBitsNV( INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV
+                                                                                                 , INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV
+                                                                                                 , INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV
+                                                                                                 , ..
+                                                                                                 )
+                                                          , IndirectCommandsLayoutUsageFlagsNV
+                                                          , IndirectStateFlagBitsNV( INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV
+                                                                                   , ..
+                                                                                   )
+                                                          , IndirectStateFlagsNV
+                                                          , IndirectCommandsTokenTypeNV( INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV
+                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV
+                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV
+                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV
+                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
+                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV
+                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV
+                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV
+                                                                                       , ..
+                                                                                       )
+                                                          , NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
+                                                          , pattern NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
+                                                          , NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
+                                                          , pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
+                                                          , IndirectCommandsLayoutNV(..)
+                                                          ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import Foreign.Marshal.Utils (maybePeek)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.CStruct.Extends (peekSomeCStruct)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.CStruct.Extends (withSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Bool32(..))
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Core10.BaseType (DeviceAddress)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBindPipelineShaderGroupNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdExecuteGeneratedCommandsNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdPreprocessGeneratedCommandsNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateIndirectCommandsLayoutNV))
+import Vulkan.Dynamic (DeviceCmds(pVkDestroyIndirectCommandsLayoutNV))
+import Vulkan.Dynamic (DeviceCmds(pVkGetGeneratedCommandsMemoryRequirementsNV))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.IndexType (IndexType)
+import Vulkan.Extensions.Handles (IndirectCommandsLayoutNV)
+import Vulkan.Extensions.Handles (IndirectCommandsLayoutNV(..))
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.Core10.Handles (Pipeline)
+import Vulkan.Core10.Handles (Pipeline(..))
+import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
+import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint(..))
+import Vulkan.Core10.Handles (PipelineLayout)
+import Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)
+import Vulkan.Core10.Pipeline (PipelineTessellationStateCreateInfo)
+import Vulkan.Core10.Pipeline (PipelineVertexInputStateCreateInfo)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.Handles (IndirectCommandsLayoutNV(..))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdExecuteGeneratedCommandsNV
+  :: FunPtr (Ptr CommandBuffer_T -> Bool32 -> Ptr GeneratedCommandsInfoNV -> IO ()) -> Ptr CommandBuffer_T -> Bool32 -> Ptr GeneratedCommandsInfoNV -> IO ()
+
+-- | vkCmdExecuteGeneratedCommandsNV - Performs the generation and execution
+-- of commands on the device
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @isPreprocessed@ represents whether the input data has already been
+--     preprocessed on the device. If it is 'Vulkan.Core10.BaseType.FALSE'
+--     this command will implicitly trigger the preprocessing step,
+--     otherwise not.
+--
+-- -   @pGeneratedCommandsInfo@ is a pointer to an instance of the
+--     'GeneratedCommandsInfoNV' structure containing parameters affecting
+--     the generation of commands.
+--
+-- == Valid Usage
+--
+-- -   [[VUID-{refpage}-None-02690]] If a 'Vulkan.Core10.Handles.ImageView'
+--     is sampled with 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a
+--     result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   [[VUID-{refpage}-None-02691]] If a 'Vulkan.Core10.Handles.ImageView'
+--     is accessed using atomic operations as a result of this command,
+--     then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   [[VUID-{refpage}-None-02692]] If a 'Vulkan.Core10.Handles.ImageView'
+--     is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   [[VUID-{refpage}-filterCubic-02694]] Any
+--     'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   [[VUID-{refpage}-filterCubicMinmax-02695]] Any
+--     'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   [[VUID-{refpage}-flags-02696]] Any 'Vulkan.Core10.Handles.Image'
+--     created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@
+--     containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   [[VUID-{refpage}-None-02697]] For each set /n/ that is statically
+--     used by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline
+--     bind point used by this command, a descriptor set /must/ have been
+--     bound to /n/ at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   [[VUID-{refpage}-None-02698]] For each push constant that is
+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the
+--     pipeline bind point used by this command, a push constant value
+--     /must/ have been set for the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   [[VUID-{refpage}-None-02699]] Descriptors in each bound descriptor
+--     set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   [[VUID-{refpage}-None-02700]] A valid pipeline /must/ be bound to
+--     the pipeline bind point used by this command
+--
+-- -   [[VUID-{refpage}-commandBuffer-02701]] If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command requires any dynamic state, that state
+--     /must/ have been set for @commandBuffer@, and done so after any
+--     previously bound pipeline with the corresponding state not specified
+--     as dynamic
+--
+-- -   [[VUID-{refpage}-None-02859]] There /must/ not have been any calls
+--     to dynamic state setting commands for any state not specified as
+--     dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command, since that pipeline was
+--     bound
+--
+-- -   [[VUID-{refpage}-None-02702]] If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   [[VUID-{refpage}-None-02703]] If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   [[VUID-{refpage}-None-02704]] If the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   [[VUID-{refpage}-None-02705]] If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   [[VUID-{refpage}-None-02706]] If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   [[VUID-{refpage}-commandBuffer-02707]] If @commandBuffer@ is an
+--     unprotected command buffer, any resource accessed by the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command /must/ not be a protected resource
+--
+-- -   [[VUID-{refpage}-renderPass-02684]] The current render pass /must/
+--     be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   [[VUID-{refpage}-subpass-02685]] The subpass index of the current
+--     render pass /must/ be equal to the @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   [[VUID-{refpage}-None-02686]] Every input attachment used by the
+--     current subpass /must/ be bound to the pipeline via a descriptor set
+--
+-- -   [[VUID-{refpage}-None-02687]] Image subresources used as attachments
+--     in the current render pass /must/ not be accessed in any way other
+--     than as an attachment by this command
+--
+-- -   [[VUID-{refpage}-maxMultiviewInstanceIndex-02688]] If the draw is
+--     recorded in a render pass instance with multiview enabled, the
+--     maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   [[VUID-{refpage}-sampleLocationsEnable-02689]] If the bound graphics
+--     pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   [[VUID-{refpage}-None-04007]] All vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ have either valid or
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound
+--
+-- -   [[VUID-{refpage}-None-04008]] If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
+--     feature is not enabled, all vertex input bindings accessed via
+--     vertex input variables declared in the vertex shader entry point’s
+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   [[VUID-{refpage}-None-02721]] For a given vertex buffer binding, any
+--     attribute data fetched /must/ be entirely contained within the
+--     corresponding vertex buffer binding, as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If @isPreprocessed@ is 'Vulkan.Core10.BaseType.TRUE' then
+--     'cmdPreprocessGeneratedCommandsNV' /must/ have already been executed
+--     on the device, using the same @pGeneratedCommandsInfo@ content as
+--     well as the content of the input buffers it references (all except
+--     'GeneratedCommandsInfoNV'::@preprocessBuffer@). Furthermore
+--     @pGeneratedCommandsInfo@\`s @indirectCommandsLayout@ /must/ have
+--     been created with the
+--     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' bit set
+--
+-- -   'GeneratedCommandsInfoNV'::@pipeline@ /must/ match the current bound
+--     pipeline at 'GeneratedCommandsInfoNV'::@pipelineBindPoint@
+--
+-- -   Transform feedback /must/ not be active
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid
+--     'GeneratedCommandsInfoNV' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, 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 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'GeneratedCommandsInfoNV'
+cmdExecuteGeneratedCommandsNV :: forall io . MonadIO io => CommandBuffer -> ("isPreprocessed" ::: Bool) -> GeneratedCommandsInfoNV -> io ()
+cmdExecuteGeneratedCommandsNV commandBuffer isPreprocessed generatedCommandsInfo = liftIO . evalContT $ do
+  let vkCmdExecuteGeneratedCommandsNVPtr = pVkCmdExecuteGeneratedCommandsNV (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdExecuteGeneratedCommandsNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdExecuteGeneratedCommandsNV is null" Nothing Nothing
+  let vkCmdExecuteGeneratedCommandsNV' = mkVkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNVPtr
+  pGeneratedCommandsInfo <- ContT $ withCStruct (generatedCommandsInfo)
+  lift $ vkCmdExecuteGeneratedCommandsNV' (commandBufferHandle (commandBuffer)) (boolToBool32 (isPreprocessed)) pGeneratedCommandsInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdPreprocessGeneratedCommandsNV
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr GeneratedCommandsInfoNV -> IO ()) -> Ptr CommandBuffer_T -> Ptr GeneratedCommandsInfoNV -> IO ()
+
+-- | vkCmdPreprocessGeneratedCommandsNV - Performs preprocessing for
+-- generated commands
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer which does the preprocessing.
+--
+-- -   @pGeneratedCommandsInfo@ is a pointer to an instance of the
+--     'GeneratedCommandsInfoNV' structure containing parameters affecting
+--     the preprocessing step.
+--
+-- == Valid Usage
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   @pGeneratedCommandsInfo@\`s @indirectCommandsLayout@ /must/ have
+--     been created with the
+--     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' bit set
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid
+--     'GeneratedCommandsInfoNV' structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'GeneratedCommandsInfoNV'
+cmdPreprocessGeneratedCommandsNV :: forall io . MonadIO io => CommandBuffer -> GeneratedCommandsInfoNV -> io ()
+cmdPreprocessGeneratedCommandsNV commandBuffer generatedCommandsInfo = liftIO . evalContT $ do
+  let vkCmdPreprocessGeneratedCommandsNVPtr = pVkCmdPreprocessGeneratedCommandsNV (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdPreprocessGeneratedCommandsNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPreprocessGeneratedCommandsNV is null" Nothing Nothing
+  let vkCmdPreprocessGeneratedCommandsNV' = mkVkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNVPtr
+  pGeneratedCommandsInfo <- ContT $ withCStruct (generatedCommandsInfo)
+  lift $ vkCmdPreprocessGeneratedCommandsNV' (commandBufferHandle (commandBuffer)) pGeneratedCommandsInfo
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBindPipelineShaderGroupNV
+  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> Word32 -> IO ()
+
+-- | vkCmdBindPipelineShaderGroupNV - Bind a pipeline object
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer that the pipeline will be
+--     bound to.
+--
+-- -   @pipelineBindPoint@ is a
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--     specifying to which bind point the pipeline is bound.
+--
+-- -   @pipeline@ is the pipeline to be bound.
+--
+-- -   @groupIndex@ is the shader group to be bound.
+--
+-- == Valid Usage
+--
+-- -   @groupIndex@ /must/ be @0@ or less than the effective
+--     'GraphicsPipelineShaderGroupsCreateInfoNV'::@groupCount@ including
+--     the referenced pipelines
+--
+-- -   The @pipelineBindPoint@ /must/ be
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The same restrictions as
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline' apply as if
+--     the bound pipeline was created only with the Shader Group from the
+--     @groupIndex@ information
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--
+-- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics, or compute operations
+--
+-- -   Both of @commandBuffer@, and @pipeline@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
+cmdBindPipelineShaderGroupNV :: forall io . MonadIO io => CommandBuffer -> PipelineBindPoint -> Pipeline -> ("groupIndex" ::: Word32) -> io ()
+cmdBindPipelineShaderGroupNV commandBuffer pipelineBindPoint pipeline groupIndex = liftIO $ do
+  let vkCmdBindPipelineShaderGroupNVPtr = pVkCmdBindPipelineShaderGroupNV (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdBindPipelineShaderGroupNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindPipelineShaderGroupNV is null" Nothing Nothing
+  let vkCmdBindPipelineShaderGroupNV' = mkVkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNVPtr
+  vkCmdBindPipelineShaderGroupNV' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (pipeline) (groupIndex)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetGeneratedCommandsMemoryRequirementsNV
+  :: FunPtr (Ptr Device_T -> Ptr GeneratedCommandsMemoryRequirementsInfoNV -> Ptr (MemoryRequirements2 a) -> IO ()) -> Ptr Device_T -> Ptr GeneratedCommandsMemoryRequirementsInfoNV -> Ptr (MemoryRequirements2 a) -> IO ()
+
+-- | vkGetGeneratedCommandsMemoryRequirementsNV - Retrieve the buffer
+-- allocation requirements for generated commands
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the buffer.
+--
+-- -   @pInfo@ is a pointer to an instance of the
+--     'GeneratedCommandsMemoryRequirementsInfoNV' structure containing
+--     parameters required for the memory requirements query.
+--
+-- -   @pMemoryRequirements@ points to an instance of the
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
+--     structure in which the memory requirements of the buffer object are
+--     returned.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'GeneratedCommandsMemoryRequirementsInfoNV' structure
+--
+-- -   @pMemoryRequirements@ /must/ be a valid pointer to a
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
+--     structure
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device',
+-- 'GeneratedCommandsMemoryRequirementsInfoNV',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
+getGeneratedCommandsMemoryRequirementsNV :: forall a io . (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io) => Device -> GeneratedCommandsMemoryRequirementsInfoNV -> io (MemoryRequirements2 a)
+getGeneratedCommandsMemoryRequirementsNV device info = liftIO . evalContT $ do
+  let vkGetGeneratedCommandsMemoryRequirementsNVPtr = pVkGetGeneratedCommandsMemoryRequirementsNV (deviceCmds (device :: Device))
+  lift $ unless (vkGetGeneratedCommandsMemoryRequirementsNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetGeneratedCommandsMemoryRequirementsNV is null" Nothing Nothing
+  let vkGetGeneratedCommandsMemoryRequirementsNV' = mkVkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNVPtr
+  pInfo <- ContT $ withCStruct (info)
+  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))
+  lift $ vkGetGeneratedCommandsMemoryRequirementsNV' (deviceHandle (device)) pInfo (pPMemoryRequirements)
+  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements
+  pure $ (pMemoryRequirements)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateIndirectCommandsLayoutNV
+  :: FunPtr (Ptr Device_T -> Ptr IndirectCommandsLayoutCreateInfoNV -> Ptr AllocationCallbacks -> Ptr IndirectCommandsLayoutNV -> IO Result) -> Ptr Device_T -> Ptr IndirectCommandsLayoutCreateInfoNV -> Ptr AllocationCallbacks -> Ptr IndirectCommandsLayoutNV -> IO Result
+
+-- | vkCreateIndirectCommandsLayoutNV - Create an indirect command layout
+-- object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the indirect command
+--     layout.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'IndirectCommandsLayoutCreateInfoNV' structure containing parameters
+--     affecting creation of the indirect command layout.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pIndirectCommandsLayout@ points to a
+--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle in which
+--     the resulting indirect command layout is returned.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'IndirectCommandsLayoutCreateInfoNV' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pIndirectCommandsLayout@ /must/ be a valid pointer to a
+--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'IndirectCommandsLayoutCreateInfoNV',
+-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV'
+createIndirectCommandsLayoutNV :: forall io . MonadIO io => Device -> IndirectCommandsLayoutCreateInfoNV -> ("allocator" ::: Maybe AllocationCallbacks) -> io (IndirectCommandsLayoutNV)
+createIndirectCommandsLayoutNV device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateIndirectCommandsLayoutNVPtr = pVkCreateIndirectCommandsLayoutNV (deviceCmds (device :: Device))
+  lift $ unless (vkCreateIndirectCommandsLayoutNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateIndirectCommandsLayoutNV is null" Nothing Nothing
+  let vkCreateIndirectCommandsLayoutNV' = mkVkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNVPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPIndirectCommandsLayout <- ContT $ bracket (callocBytes @IndirectCommandsLayoutNV 8) free
+  r <- lift $ vkCreateIndirectCommandsLayoutNV' (deviceHandle (device)) pCreateInfo pAllocator (pPIndirectCommandsLayout)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pIndirectCommandsLayout <- lift $ peek @IndirectCommandsLayoutNV pPIndirectCommandsLayout
+  pure $ (pIndirectCommandsLayout)
+
+-- | A convenience wrapper to make a compatible pair of calls to
+-- 'createIndirectCommandsLayoutNV' and 'destroyIndirectCommandsLayoutNV'
+--
+-- To ensure that 'destroyIndirectCommandsLayoutNV' is always called: pass
+-- 'Control.Exception.bracket' (or the allocate function from your
+-- favourite resource management library) as the first argument.
+-- To just extract the pair pass '(,)' as the first argument.
+--
+withIndirectCommandsLayoutNV :: forall io r . MonadIO io => Device -> IndirectCommandsLayoutCreateInfoNV -> Maybe AllocationCallbacks -> (io (IndirectCommandsLayoutNV) -> ((IndirectCommandsLayoutNV) -> io ()) -> r) -> r
+withIndirectCommandsLayoutNV device pCreateInfo pAllocator b =
+  b (createIndirectCommandsLayoutNV device pCreateInfo pAllocator)
+    (\(o0) -> destroyIndirectCommandsLayoutNV device o0 pAllocator)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkDestroyIndirectCommandsLayoutNV
+  :: FunPtr (Ptr Device_T -> IndirectCommandsLayoutNV -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> IndirectCommandsLayoutNV -> Ptr AllocationCallbacks -> IO ()
+
+-- | vkDestroyIndirectCommandsLayoutNV - Destroy an indirect commands layout
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that destroys the layout.
+--
+-- -   @indirectCommandsLayout@ is the layout to destroy.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @indirectCommandsLayout@ /must/
+--     have completed execution
+--
+-- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @indirectCommandsLayout@ was created, a compatible set
+--     of callbacks /must/ be provided here
+--
+-- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
+--     provided when @indirectCommandsLayout@ was created, @pAllocator@
+--     /must/ be @NULL@
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @indirectCommandsLayout@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @indirectCommandsLayout@
+--     /must/ be a valid
+--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   If @indirectCommandsLayout@ is a valid handle, it /must/ have been
+--     created, allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @indirectCommandsLayout@ /must/ be externally
+--     synchronized
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV'
+destroyIndirectCommandsLayoutNV :: forall io . MonadIO io => Device -> IndirectCommandsLayoutNV -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
+destroyIndirectCommandsLayoutNV device indirectCommandsLayout allocator = liftIO . evalContT $ do
+  let vkDestroyIndirectCommandsLayoutNVPtr = pVkDestroyIndirectCommandsLayoutNV (deviceCmds (device :: Device))
+  lift $ unless (vkDestroyIndirectCommandsLayoutNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyIndirectCommandsLayoutNV is null" Nothing Nothing
+  let vkDestroyIndirectCommandsLayoutNV' = mkVkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNVPtr
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  lift $ vkDestroyIndirectCommandsLayoutNV' (deviceHandle (device)) (indirectCommandsLayout) pAllocator
+  pure $ ()
+
+
+-- | VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV - Structure describing
+-- the device-generated commands features that can be supported by an
+-- implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceDeviceGeneratedCommandsFeaturesNV'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceDeviceGeneratedCommandsFeaturesNV' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceDeviceGeneratedCommandsFeaturesNV' /can/ also be used in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- the features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+  { -- | @deviceGeneratedCommands@ indicates whether the implementation supports
+    -- functionality to generate commands on the device. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#device-generated-commands Device-Generated Commands>.
+    deviceGeneratedCommands :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+
+instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDeviceGeneratedCommandsFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (deviceGeneratedCommands))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV where
+  peekCStruct p = do
+    deviceGeneratedCommands <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+             (bool32ToBool deviceGeneratedCommands)
+
+instance Storable PhysicalDeviceDeviceGeneratedCommandsFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDeviceGeneratedCommandsFeaturesNV where
+  zero = PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+           zero
+
+
+-- | VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV - Structure
+-- describing push descriptor limits that can be supported by an
+-- implementation
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+  { -- | @maxGraphicsShaderGroupCount@ is the maximum number of shader groups in
+    -- 'GraphicsPipelineShaderGroupsCreateInfoNV'.
+    maxGraphicsShaderGroupCount :: Word32
+  , -- | @maxIndirectSequenceCount@ is the maximum number of sequences in
+    -- 'GeneratedCommandsInfoNV' and in
+    -- 'GeneratedCommandsMemoryRequirementsInfoNV'.
+    maxIndirectSequenceCount :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV" "maxIndirectCommandsTokenCount"
+    maxIndirectCommandsTokenCount :: Word32
+  , -- | @maxIndirectCommandsStreamCount@ is the maximum number of streams in
+    -- 'IndirectCommandsLayoutCreateInfoNV'.
+    maxIndirectCommandsStreamCount :: Word32
+  , -- | @maxIndirectCommandsTokenOffset@ is the maximum offset in
+    -- 'IndirectCommandsLayoutTokenNV'.
+    maxIndirectCommandsTokenOffset :: Word32
+  , -- | @maxIndirectCommandsStreamStride@ is the maximum stream stride in
+    -- 'IndirectCommandsLayoutCreateInfoNV'.
+    maxIndirectCommandsStreamStride :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV" "minSequencesCountBufferOffsetAlignment"
+    minSequencesCountBufferOffsetAlignment :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV" "minSequencesIndexBufferOffsetAlignment"
+    minSequencesIndexBufferOffsetAlignment :: Word32
+  , -- | @minIndirectCommandsBufferOffsetAlignment@ is the minimum alignment for
+    -- memory addresses used in 'IndirectCommandsStreamNV' and as preprocess
+    -- buffer in 'GeneratedCommandsInfoNV'.
+    minIndirectCommandsBufferOffsetAlignment :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+
+instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceDeviceGeneratedCommandsPropertiesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxGraphicsShaderGroupCount)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxIndirectSequenceCount)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxIndirectCommandsTokenCount)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (maxIndirectCommandsStreamCount)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (maxIndirectCommandsTokenOffset)
+    poke ((p `plusPtr` 36 :: Ptr Word32)) (maxIndirectCommandsStreamStride)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (minSequencesCountBufferOffsetAlignment)
+    poke ((p `plusPtr` 44 :: Ptr Word32)) (minSequencesIndexBufferOffsetAlignment)
+    poke ((p `plusPtr` 48 :: Ptr Word32)) (minIndirectCommandsBufferOffsetAlignment)
+    f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
+  peekCStruct p = do
+    maxGraphicsShaderGroupCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxIndirectSequenceCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    maxIndirectCommandsTokenCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    maxIndirectCommandsStreamCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    maxIndirectCommandsTokenOffset <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    maxIndirectCommandsStreamStride <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
+    minSequencesCountBufferOffsetAlignment <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    minSequencesIndexBufferOffsetAlignment <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
+    minIndirectCommandsBufferOffsetAlignment <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pure $ PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+             maxGraphicsShaderGroupCount maxIndirectSequenceCount maxIndirectCommandsTokenCount maxIndirectCommandsStreamCount maxIndirectCommandsTokenOffset maxIndirectCommandsStreamStride minSequencesCountBufferOffsetAlignment minSequencesIndexBufferOffsetAlignment minIndirectCommandsBufferOffsetAlignment
+
+instance Storable PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
+  zero = PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkGraphicsShaderGroupCreateInfoNV - Structure specifying override
+-- parameters for each shader group
+--
+-- == Valid Usage
+--
+-- -   For @stageCount@, the same restrictions as in
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@stageCount@
+--     apply
+--
+-- -   For @pStages@, the same restrictions as in
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pStages@ apply
+--
+-- -   For @pVertexInputState@, the same restrictions as in
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pVertexInputState@
+--     apply
+--
+-- -   For @pTessellationState@, the same restrictions as in
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pTessellationState@
+--     apply
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@
+--     valid 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'
+--     structures
+--
+-- -   @stageCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'GraphicsPipelineShaderGroupsCreateInfoNV',
+-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
+-- 'Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo',
+-- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data GraphicsShaderGroupCreateInfoNV = GraphicsShaderGroupCreateInfoNV
+  { -- | @pStages@ is an array of size @stageCount@ structures of type
+    -- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' describing the
+    -- set of the shader stages to be included in this shader group.
+    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
+  , -- | @pVertexInputState@ is a pointer to an instance of the
+    -- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo' structure.
+    vertexInputState :: Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
+  , -- | @pTessellationState@ is a pointer to an instance of the
+    -- 'Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo' structure,
+    -- and is ignored if the shader group does not include a tessellation
+    -- control shader stage and tessellation evaluation shader stage.
+    tessellationState :: Maybe (SomeStruct PipelineTessellationStateCreateInfo)
+  }
+  deriving (Typeable)
+deriving instance Show GraphicsShaderGroupCreateInfoNV
+
+instance ToCStruct GraphicsShaderGroupCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GraphicsShaderGroupCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))
+    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
+    pVertexInputState'' <- case (vertexInputState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineVertexInputStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineVertexInputStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo _)))) pVertexInputState''
+    pTessellationState'' <- case (tessellationState) of
+      Nothing -> pure nullPtr
+      Just j -> ContT @_ @_ @(Ptr (PipelineTessellationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineTessellationStateCreateInfo (j) (cont . castPtr)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (PipelineTessellationStateCreateInfo _)))) pTessellationState''
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (mempty)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
+    lift $ f
+
+instance FromCStruct GraphicsShaderGroupCreateInfoNV where
+  peekCStruct p = do
+    stageCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo a))))
+    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
+    pVertexInputState <- peek @(Ptr (PipelineVertexInputStateCreateInfo _)) ((p `plusPtr` 32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo a))))
+    pVertexInputState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pVertexInputState
+    pTessellationState <- peek @(Ptr (PipelineTessellationStateCreateInfo _)) ((p `plusPtr` 40 :: Ptr (Ptr (PipelineTessellationStateCreateInfo a))))
+    pTessellationState' <- maybePeek (\j -> peekSomeCStruct (forgetExtensions (j))) pTessellationState
+    pure $ GraphicsShaderGroupCreateInfoNV
+             pStages' pVertexInputState' pTessellationState'
+
+instance Zero GraphicsShaderGroupCreateInfoNV where
+  zero = GraphicsShaderGroupCreateInfoNV
+           mempty
+           Nothing
+           Nothing
+
+
+-- | VkGraphicsPipelineShaderGroupsCreateInfoNV - Structure specifying
+-- parameters of a newly created multi shader group pipeline
+--
+-- = Description
+--
+-- When referencing shader groups by index, groups defined in the
+-- referenced pipelines are treated as if they were defined as additional
+-- entries in @pGroups@. They are appended in the order they appear in the
+-- @pPipelines@ array and in the @pGroups@ array when those pipelines were
+-- defined.
+--
+-- The application /must/ maintain the lifetime of all such referenced
+-- pipelines based on the pipelines that make use of them.
+--
+-- == Valid Usage
+--
+-- -   @groupCount@ /must/ be at least @1@ and as maximum
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxGraphicsShaderGroupCount@
+--
+-- -   The sum of @groupCount@ including those groups added from referenced
+--     @pPipelines@ /must/ also be as maximum
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxGraphicsShaderGroupCount@
+--
+-- -   The state of the first element of @pGroups@ /must/ match its
+--     equivalent within the parent’s
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
+--
+-- -   Each element of @pGroups@ /must/ in combination with the rest of the
+--     pipeline state yield a valid state configuration
+--
+-- -   All elements of @pGroups@ /must/ use the same shader stage
+--     combinations unless any mesh shader stage is used, then either
+--     combination of task and mesh or just mesh shader is valid
+--
+-- -   Mesh and regular primitive shading stages cannot be mixed across
+--     @pGroups@
+--
+-- -   Each element of the @pPipelines@ member of @libraries@ /must/ have
+--     been created with identical state to the pipeline currently created
+--     except the state that can be overriden by
+--     'GraphicsShaderGroupCreateInfoNV'
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-device-generated-commands ::deviceGeneratedCommands>
+--     feature /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV'
+--
+-- -   @pGroups@ /must/ be a valid pointer to an array of @groupCount@
+--     valid 'GraphicsShaderGroupCreateInfoNV' structures
+--
+-- -   If @pipelineCount@ is not @0@, @pPipelines@ /must/ be a valid
+--     pointer to an array of @pipelineCount@ valid
+--     'Vulkan.Core10.Handles.Pipeline' handles
+--
+-- -   @groupCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'GraphicsShaderGroupCreateInfoNV', 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data GraphicsPipelineShaderGroupsCreateInfoNV = GraphicsPipelineShaderGroupsCreateInfoNV
+  { -- | @pGroups@ is an array of 'GraphicsShaderGroupCreateInfoNV' values
+    -- specifying which state of the original
+    -- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' each shader group
+    -- overrides.
+    groups :: Vector GraphicsShaderGroupCreateInfoNV
+  , -- | @pPipelines@ is an array of graphics 'Vulkan.Core10.Handles.Pipeline',
+    -- which are referenced within the created pipeline, including all their
+    -- shader groups.
+    pipelines :: Vector Pipeline
+  }
+  deriving (Typeable)
+deriving instance Show GraphicsPipelineShaderGroupsCreateInfoNV
+
+instance ToCStruct GraphicsPipelineShaderGroupsCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GraphicsPipelineShaderGroupsCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (groups)) :: Word32))
+    pPGroups' <- ContT $ allocaBytesAligned @GraphicsShaderGroupCreateInfoNV ((Data.Vector.length (groups)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr GraphicsShaderGroupCreateInfoNV) (e) . ($ ())) (groups)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr GraphicsShaderGroupCreateInfoNV))) (pPGroups')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (pipelines)) :: Word32))
+    pPPipelines' <- ContT $ allocaBytesAligned @Pipeline ((Data.Vector.length (pipelines)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPPipelines' `plusPtr` (8 * (i)) :: Ptr Pipeline) (e)) (pipelines)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Pipeline))) (pPPipelines')
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPGroups' <- ContT $ allocaBytesAligned @GraphicsShaderGroupCreateInfoNV ((Data.Vector.length (mempty)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr GraphicsShaderGroupCreateInfoNV) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr GraphicsShaderGroupCreateInfoNV))) (pPGroups')
+    pPPipelines' <- ContT $ allocaBytesAligned @Pipeline ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPPipelines' `plusPtr` (8 * (i)) :: Ptr Pipeline) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Pipeline))) (pPPipelines')
+    lift $ f
+
+instance FromCStruct GraphicsPipelineShaderGroupsCreateInfoNV where
+  peekCStruct p = do
+    groupCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pGroups <- peek @(Ptr GraphicsShaderGroupCreateInfoNV) ((p `plusPtr` 24 :: Ptr (Ptr GraphicsShaderGroupCreateInfoNV)))
+    pGroups' <- generateM (fromIntegral groupCount) (\i -> peekCStruct @GraphicsShaderGroupCreateInfoNV ((pGroups `advancePtrBytes` (48 * (i)) :: Ptr GraphicsShaderGroupCreateInfoNV)))
+    pipelineCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pPipelines <- peek @(Ptr Pipeline) ((p `plusPtr` 40 :: Ptr (Ptr Pipeline)))
+    pPipelines' <- generateM (fromIntegral pipelineCount) (\i -> peek @Pipeline ((pPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
+    pure $ GraphicsPipelineShaderGroupsCreateInfoNV
+             pGroups' pPipelines'
+
+instance Zero GraphicsPipelineShaderGroupsCreateInfoNV where
+  zero = GraphicsPipelineShaderGroupsCreateInfoNV
+           mempty
+           mempty
+
+
+-- | VkBindShaderGroupIndirectCommandNV - Structure specifying input data for
+-- a single shader group command token
+--
+-- == Valid Usage
+--
+-- -   The current bound graphics pipeline, as well as the pipelines it may
+--     reference, /must/ have been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
+--
+-- -   The @index@ /must/ be within range of the accessible shader groups
+--     of the current bound graphics pipeline. See
+--     'cmdBindPipelineShaderGroupNV' for further details
+--
+-- = See Also
+--
+-- No cross-references are available
+data BindShaderGroupIndirectCommandNV = BindShaderGroupIndirectCommandNV
+  { -- No documentation found for Nested "VkBindShaderGroupIndirectCommandNV" "groupIndex"
+    groupIndex :: Word32 }
+  deriving (Typeable)
+deriving instance Show BindShaderGroupIndirectCommandNV
+
+instance ToCStruct BindShaderGroupIndirectCommandNV where
+  withCStruct x f = allocaBytesAligned 4 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindShaderGroupIndirectCommandNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (groupIndex)
+    f
+  cStructSize = 4
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct BindShaderGroupIndirectCommandNV where
+  peekCStruct p = do
+    groupIndex <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    pure $ BindShaderGroupIndirectCommandNV
+             groupIndex
+
+instance Storable BindShaderGroupIndirectCommandNV where
+  sizeOf ~_ = 4
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BindShaderGroupIndirectCommandNV where
+  zero = BindShaderGroupIndirectCommandNV
+           zero
+
+
+-- | VkBindIndexBufferIndirectCommandNV - Structure specifying input data for
+-- a single index buffer command token
+--
+-- == Valid Usage
+--
+-- -   The buffer’s usage flag from which the address was acquired /must/
+--     have the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT'
+--     bit set
+--
+-- -   The @bufferAddress@ /must/ be aligned to the @indexType@ used
+--
+-- -   Each element of the buffer from which the address was acquired and
+--     that is non-sparse /must/ be bound completely and contiguously to a
+--     single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @indexType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.IndexType.IndexType' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceAddress',
+-- 'Vulkan.Core10.Enums.IndexType.IndexType'
+data BindIndexBufferIndirectCommandNV = BindIndexBufferIndirectCommandNV
+  { -- | @bufferAddress@ specifies a physical address of the
+    -- 'Vulkan.Core10.Handles.Buffer' used as index buffer.
+    bufferAddress :: DeviceAddress
+  , -- | @size@ is the byte size range which is available for this operation from
+    -- the provided address.
+    size :: Word32
+  , -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' value
+    -- specifying how indices are treated. Instead of the Vulkan enum values, a
+    -- custom @uint32_t@ value /can/ be mapped to an
+    -- 'Vulkan.Core10.Enums.IndexType.IndexType' by specifying the
+    -- 'IndirectCommandsLayoutTokenNV'::@pIndexTypes@ and
+    -- 'IndirectCommandsLayoutTokenNV'::@pIndexTypeValues@ arrays.
+    indexType :: IndexType
+  }
+  deriving (Typeable)
+deriving instance Show BindIndexBufferIndirectCommandNV
+
+instance ToCStruct BindIndexBufferIndirectCommandNV where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindIndexBufferIndirectCommandNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceAddress)) (bufferAddress)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (size)
+    poke ((p `plusPtr` 12 :: Ptr IndexType)) (indexType)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceAddress)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr IndexType)) (zero)
+    f
+
+instance FromCStruct BindIndexBufferIndirectCommandNV where
+  peekCStruct p = do
+    bufferAddress <- peek @DeviceAddress ((p `plusPtr` 0 :: Ptr DeviceAddress))
+    size <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    indexType <- peek @IndexType ((p `plusPtr` 12 :: Ptr IndexType))
+    pure $ BindIndexBufferIndirectCommandNV
+             bufferAddress size indexType
+
+instance Storable BindIndexBufferIndirectCommandNV where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BindIndexBufferIndirectCommandNV where
+  zero = BindIndexBufferIndirectCommandNV
+           zero
+           zero
+           zero
+
+
+-- | VkBindVertexBufferIndirectCommandNV - Structure specifying input data
+-- for a single vertex buffer command token
+--
+-- == Valid Usage
+--
+-- -   The buffer’s usage flag from which the address was acquired /must/
+--     have the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT'
+--     bit set
+--
+-- -   Each element of the buffer from which the address was acquired and
+--     that is non-sparse /must/ be bound completely and contiguously to a
+--     single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.DeviceAddress'
+data BindVertexBufferIndirectCommandNV = BindVertexBufferIndirectCommandNV
+  { -- | @bufferAddress@ specifies a physical address of the
+    -- 'Vulkan.Core10.Handles.Buffer' used as vertex input binding.
+    bufferAddress :: DeviceAddress
+  , -- | @size@ is the byte size range which is available for this operation from
+    -- the provided address.
+    size :: Word32
+  , -- | @stride@ is the byte size stride for this vertex input binding as in
+    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription'::@stride@. It is
+    -- only used if 'IndirectCommandsLayoutTokenNV'::@vertexDynamicStride@ was
+    -- set, otherwise the stride is inherited from the current bound graphics
+    -- pipeline.
+    stride :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show BindVertexBufferIndirectCommandNV
+
+instance ToCStruct BindVertexBufferIndirectCommandNV where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p BindVertexBufferIndirectCommandNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceAddress)) (bufferAddress)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (size)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (stride)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr DeviceAddress)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct BindVertexBufferIndirectCommandNV where
+  peekCStruct p = do
+    bufferAddress <- peek @DeviceAddress ((p `plusPtr` 0 :: Ptr DeviceAddress))
+    size <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    stride <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
+    pure $ BindVertexBufferIndirectCommandNV
+             bufferAddress size stride
+
+instance Storable BindVertexBufferIndirectCommandNV where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero BindVertexBufferIndirectCommandNV where
+  zero = BindVertexBufferIndirectCommandNV
+           zero
+           zero
+           zero
+
+
+-- | VkSetStateFlagsIndirectCommandNV - Structure specifying input data for a
+-- single state flag command token
+--
+-- = See Also
+--
+-- No cross-references are available
+data SetStateFlagsIndirectCommandNV = SetStateFlagsIndirectCommandNV
+  { -- | @data@ encodes packed state that this command alters.
+    --
+    -- -   Bit @0@: If set represents
+    --     'Vulkan.Core10.Enums.FrontFace.FRONT_FACE_CLOCKWISE', otherwise
+    --     'Vulkan.Core10.Enums.FrontFace.FRONT_FACE_COUNTER_CLOCKWISE'
+    data' :: Word32 }
+  deriving (Typeable)
+deriving instance Show SetStateFlagsIndirectCommandNV
+
+instance ToCStruct SetStateFlagsIndirectCommandNV where
+  withCStruct x f = allocaBytesAligned 4 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p SetStateFlagsIndirectCommandNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (data')
+    f
+  cStructSize = 4
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct SetStateFlagsIndirectCommandNV where
+  peekCStruct p = do
+    data' <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    pure $ SetStateFlagsIndirectCommandNV
+             data'
+
+instance Storable SetStateFlagsIndirectCommandNV where
+  sizeOf ~_ = 4
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero SetStateFlagsIndirectCommandNV where
+  zero = SetStateFlagsIndirectCommandNV
+           zero
+
+
+-- | VkIndirectCommandsStreamNV - Structure specifying input streams for
+-- generated command tokens
+--
+-- == Valid Usage
+--
+-- -   The @buffer@’s usage flag /must/ have the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   The @offset@ /must/ be aligned to
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minIndirectCommandsBufferOffsetAlignment@
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'GeneratedCommandsInfoNV'
+data IndirectCommandsStreamNV = IndirectCommandsStreamNV
+  { -- | @buffer@ specifies the 'Vulkan.Core10.Handles.Buffer' storing the
+    -- functional arguments for each sequence. These arguments /can/ be written
+    -- by the device.
+    buffer :: Buffer
+  , -- | @offset@ specified an offset into @buffer@ where the arguments start.
+    offset :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show IndirectCommandsStreamNV
+
+instance ToCStruct IndirectCommandsStreamNV where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p IndirectCommandsStreamNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Buffer)) (buffer)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (offset)
+    f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Buffer)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct IndirectCommandsStreamNV where
+  peekCStruct p = do
+    buffer <- peek @Buffer ((p `plusPtr` 0 :: Ptr Buffer))
+    offset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
+    pure $ IndirectCommandsStreamNV
+             buffer offset
+
+instance Storable IndirectCommandsStreamNV where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero IndirectCommandsStreamNV where
+  zero = IndirectCommandsStreamNV
+           zero
+           zero
+
+
+-- | VkIndirectCommandsLayoutTokenNV - Struct specifying the details of an
+-- indirect command layout token
+--
+-- == Valid Usage
+--
+-- -   @stream@ /must/ be smaller than
+--     'IndirectCommandsLayoutCreateInfoNV'::@streamCount@
+--
+-- -   @offset@ /must/ be less than or equal to
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsTokenOffset@
+--
+-- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV',
+--     @vertexBindingUnit@ /must/ stay within device supported limits for
+--     the appropriate commands
+--
+-- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
+--     @pushconstantPipelineLayout@ /must/ be valid
+--
+-- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
+--     @pushconstantOffset@ /must/ be a multiple of @4@
+--
+-- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
+--     @pushconstantSize@ /must/ be a multiple of @4@
+--
+-- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
+--     @pushconstantOffset@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
+--
+-- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
+--     @pushconstantSize@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
+--     minus @pushconstantOffset@
+--
+-- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
+--     for each byte in the range specified by @pushconstantOffset@ and
+--     @pushconstantSize@ and for each shader stage in
+--     @pushconstantShaderStageFlags@, there /must/ be a push constant
+--     range in @pushconstantPipelineLayout@ that includes that byte and
+--     that stage
+--
+-- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
+--     for each byte in the range specified by @pushconstantOffset@ and
+--     @pushconstantSize@ and for each push constant range that overlaps
+--     that byte, @pushconstantShaderStageFlags@ /must/ include all stages
+--     in that push constant range’s
+--     'Vulkan.Core10.PipelineLayout.PushConstantRange'::@pushconstantShaderStageFlags@
+--
+-- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV',
+--     @indirectStateFlags@ /must/ not be ´0´
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @tokenType@ /must/ be a valid 'IndirectCommandsTokenTypeNV' value
+--
+-- -   If @pushconstantPipelineLayout@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pushconstantPipelineLayout@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineLayout' handle
+--
+-- -   @pushconstantShaderStageFlags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values
+--
+-- -   @indirectStateFlags@ /must/ be a valid combination of
+--     'IndirectStateFlagBitsNV' values
+--
+-- -   If @indexTypeCount@ is not @0@, @pIndexTypes@ /must/ be a valid
+--     pointer to an array of @indexTypeCount@ valid
+--     'Vulkan.Core10.Enums.IndexType.IndexType' values
+--
+-- -   If @indexTypeCount@ is not @0@, @pIndexTypeValues@ /must/ be a valid
+--     pointer to an array of @indexTypeCount@ @uint32_t@ values
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.IndexType.IndexType',
+-- 'IndirectCommandsLayoutCreateInfoNV', 'IndirectCommandsTokenTypeNV',
+-- 'IndirectStateFlagsNV', 'Vulkan.Core10.Handles.PipelineLayout',
+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data IndirectCommandsLayoutTokenNV = IndirectCommandsLayoutTokenNV
+  { -- | @tokenType@ specifies the token command type.
+    tokenType :: IndirectCommandsTokenTypeNV
+  , -- | @stream@ is the index of the input stream that contains the token
+    -- argument data.
+    stream :: Word32
+  , -- | @offset@ is a relative starting offset within the input stream memory
+    -- for the token argument data.
+    offset :: Word32
+  , -- | @vertexBindingUnit@ is used for the vertex buffer binding command.
+    vertexBindingUnit :: Word32
+  , -- | @vertexDynamicStride@ sets if the vertex buffer stride is provided by
+    -- the binding command rather than the current bound graphics pipeline
+    -- state.
+    vertexDynamicStride :: Bool
+  , -- | @pushconstantPipelineLayout@ is the
+    -- 'Vulkan.Core10.Handles.PipelineLayout' used for the push constant
+    -- command.
+    pushconstantPipelineLayout :: PipelineLayout
+  , -- | @pushconstantShaderStageFlags@ are the shader stage flags used for the
+    -- push constant command.
+    pushconstantShaderStageFlags :: ShaderStageFlags
+  , -- | @pushconstantOffset@ is the offset used for the push constant command.
+    pushconstantOffset :: Word32
+  , -- | @pushconstantSize@ is the size used for the push constant command.
+    pushconstantSize :: Word32
+  , -- | @indirectStateFlags@ are the active states for the state flag command.
+    indirectStateFlags :: IndirectStateFlagsNV
+  , -- | @pIndexTypes@ is the used 'Vulkan.Core10.Enums.IndexType.IndexType' for
+    -- the corresponding @uint32_t@ value entry in @pIndexTypeValues@.
+    indexTypes :: Vector IndexType
+  , -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNV" "pIndexTypeValues"
+    indexTypeValues :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show IndirectCommandsLayoutTokenNV
+
+instance ToCStruct IndirectCommandsLayoutTokenNV where
+  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p IndirectCommandsLayoutTokenNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr IndirectCommandsTokenTypeNV)) (tokenType)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (stream)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (offset)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (vertexBindingUnit)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (vertexDynamicStride))
+    lift $ poke ((p `plusPtr` 40 :: Ptr PipelineLayout)) (pushconstantPipelineLayout)
+    lift $ poke ((p `plusPtr` 48 :: Ptr ShaderStageFlags)) (pushconstantShaderStageFlags)
+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (pushconstantOffset)
+    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (pushconstantSize)
+    lift $ poke ((p `plusPtr` 60 :: Ptr IndirectStateFlagsNV)) (indirectStateFlags)
+    let pIndexTypesLength = Data.Vector.length $ (indexTypes)
+    lift $ unless ((Data.Vector.length $ (indexTypeValues)) == pIndexTypesLength) $
+      throwIO $ IOError Nothing InvalidArgument "" "pIndexTypeValues and pIndexTypes must have the same length" Nothing Nothing
+    lift $ poke ((p `plusPtr` 64 :: Ptr Word32)) ((fromIntegral pIndexTypesLength :: Word32))
+    pPIndexTypes' <- ContT $ allocaBytesAligned @IndexType ((Data.Vector.length (indexTypes)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPIndexTypes' `plusPtr` (4 * (i)) :: Ptr IndexType) (e)) (indexTypes)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr IndexType))) (pPIndexTypes')
+    pPIndexTypeValues' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (indexTypeValues)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPIndexTypeValues' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (indexTypeValues)
+    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr Word32))) (pPIndexTypeValues')
+    lift $ f
+  cStructSize = 88
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr IndirectCommandsTokenTypeNV)) (zero)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))
+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
+    pPIndexTypes' <- ContT $ allocaBytesAligned @IndexType ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPIndexTypes' `plusPtr` (4 * (i)) :: Ptr IndexType) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr IndexType))) (pPIndexTypes')
+    pPIndexTypeValues' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPIndexTypeValues' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr Word32))) (pPIndexTypeValues')
+    lift $ f
+
+instance FromCStruct IndirectCommandsLayoutTokenNV where
+  peekCStruct p = do
+    tokenType <- peek @IndirectCommandsTokenTypeNV ((p `plusPtr` 16 :: Ptr IndirectCommandsTokenTypeNV))
+    stream <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    offset <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    vertexBindingUnit <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    vertexDynamicStride <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
+    pushconstantPipelineLayout <- peek @PipelineLayout ((p `plusPtr` 40 :: Ptr PipelineLayout))
+    pushconstantShaderStageFlags <- peek @ShaderStageFlags ((p `plusPtr` 48 :: Ptr ShaderStageFlags))
+    pushconstantOffset <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
+    pushconstantSize <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    indirectStateFlags <- peek @IndirectStateFlagsNV ((p `plusPtr` 60 :: Ptr IndirectStateFlagsNV))
+    indexTypeCount <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    pIndexTypes <- peek @(Ptr IndexType) ((p `plusPtr` 72 :: Ptr (Ptr IndexType)))
+    pIndexTypes' <- generateM (fromIntegral indexTypeCount) (\i -> peek @IndexType ((pIndexTypes `advancePtrBytes` (4 * (i)) :: Ptr IndexType)))
+    pIndexTypeValues <- peek @(Ptr Word32) ((p `plusPtr` 80 :: Ptr (Ptr Word32)))
+    pIndexTypeValues' <- generateM (fromIntegral indexTypeCount) (\i -> peek @Word32 ((pIndexTypeValues `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ IndirectCommandsLayoutTokenNV
+             tokenType stream offset vertexBindingUnit (bool32ToBool vertexDynamicStride) pushconstantPipelineLayout pushconstantShaderStageFlags pushconstantOffset pushconstantSize indirectStateFlags pIndexTypes' pIndexTypeValues'
+
+instance Zero IndirectCommandsLayoutTokenNV where
+  zero = IndirectCommandsLayoutTokenNV
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           mempty
+           mempty
+
+
+-- | VkIndirectCommandsLayoutCreateInfoNV - Structure specifying the
+-- parameters of a newly created indirect commands layout object
+--
+-- = Description
+--
+-- The following code illustrates some of the flags:
+--
+-- > void cmdProcessAllSequences(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sequencesCount, indexbuffer, indexbufferOffset)
+-- > {
+-- >   for (s = 0; s < sequencesCount; s++)
+-- >   {
+-- >     sUsed = s;
+-- >
+-- >     if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV) {
+-- >       sUsed = indexbuffer.load_uint32( sUsed * sizeof(uint32_t) + indexbufferOffset);
+-- >     }
+-- >
+-- >     if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV) {
+-- >       sUsed = incoherent_implementation_dependent_permutation[ sUsed ];
+-- >     }
+-- >
+-- >     cmdProcessSequence( cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sUsed );
+-- >   }
+-- > }
+--
+-- == Valid Usage
+--
+-- -   The @pipelineBindPoint@ /must/ be
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   @tokenCount@ /must/ be greater than @0@ and less than or equal to
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsTokenCount@
+--
+-- -   If @pTokens@ contains an entry of
+--     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV' it /must/ be the
+--     first element of the array and there /must/ be only a single element
+--     of such token type
+--
+-- -   If @pTokens@ contains an entry of
+--     'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV' there /must/ be only a
+--     single element of such token type
+--
+-- -   All state tokens in @pTokens@ /must/ occur prior work provoking
+--     tokens ('INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV',
+--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV',
+--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV')
+--
+-- -   The content of @pTokens@ /must/ include one single work provoking
+--     token that is compatible with the @pipelineBindPoint@
+--
+-- -   @streamCount@ /must/ be greater than @0@ and less or equal to
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsStreamCount@
+--
+-- -   each element of @pStreamStrides@ /must/ be greater than \`0\`and
+--     less than or equal to
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsStreamStride@.
+--     Furthermore the alignment of each token input /must/ be ensured
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'IndirectCommandsLayoutUsageFlagBitsNV' values
+--
+-- -   @flags@ /must/ not be @0@
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--
+-- -   @pTokens@ /must/ be a valid pointer to an array of @tokenCount@
+--     valid 'IndirectCommandsLayoutTokenNV' structures
+--
+-- -   @pStreamStrides@ /must/ be a valid pointer to an array of
+--     @streamCount@ @uint32_t@ values
+--
+-- -   @tokenCount@ /must/ be greater than @0@
+--
+-- -   @streamCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'IndirectCommandsLayoutTokenNV', 'IndirectCommandsLayoutUsageFlagsNV',
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createIndirectCommandsLayoutNV'
+data IndirectCommandsLayoutCreateInfoNV = IndirectCommandsLayoutCreateInfoNV
+  { -- | @flags@ is a bitmask of 'IndirectCommandsLayoutUsageFlagBitsNV'
+    -- specifying usage hints of this layout.
+    flags :: IndirectCommandsLayoutUsageFlagsNV
+  , -- | @pipelineBindPoint@ is the
+    -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' that this
+    -- layout targets.
+    pipelineBindPoint :: PipelineBindPoint
+  , -- | @pTokens@ is an array describing each command token in detail. See
+    -- 'IndirectCommandsTokenTypeNV' and 'IndirectCommandsLayoutTokenNV' below
+    -- for details.
+    tokens :: Vector IndirectCommandsLayoutTokenNV
+  , -- | @pStreamStrides@ is an array defining the byte stride for each input
+    -- stream.
+    streamStrides :: Vector Word32
+  }
+  deriving (Typeable)
+deriving instance Show IndirectCommandsLayoutCreateInfoNV
+
+instance ToCStruct IndirectCommandsLayoutCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p IndirectCommandsLayoutCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr IndirectCommandsLayoutUsageFlagsNV)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (tokens)) :: Word32))
+    pPTokens' <- ContT $ allocaBytesAligned @IndirectCommandsLayoutTokenNV ((Data.Vector.length (tokens)) * 88) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPTokens' `plusPtr` (88 * (i)) :: Ptr IndirectCommandsLayoutTokenNV) (e) . ($ ())) (tokens)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr IndirectCommandsLayoutTokenNV))) (pPTokens')
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (streamStrides)) :: Word32))
+    pPStreamStrides' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (streamStrides)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPStreamStrides' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (streamStrides)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPStreamStrides')
+    lift $ f
+  cStructSize = 56
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr IndirectCommandsLayoutUsageFlagsNV)) (zero)
+    lift $ poke ((p `plusPtr` 20 :: Ptr PipelineBindPoint)) (zero)
+    pPTokens' <- ContT $ allocaBytesAligned @IndirectCommandsLayoutTokenNV ((Data.Vector.length (mempty)) * 88) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPTokens' `plusPtr` (88 * (i)) :: Ptr IndirectCommandsLayoutTokenNV) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr IndirectCommandsLayoutTokenNV))) (pPTokens')
+    pPStreamStrides' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPStreamStrides' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPStreamStrides')
+    lift $ f
+
+instance FromCStruct IndirectCommandsLayoutCreateInfoNV where
+  peekCStruct p = do
+    flags <- peek @IndirectCommandsLayoutUsageFlagsNV ((p `plusPtr` 16 :: Ptr IndirectCommandsLayoutUsageFlagsNV))
+    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 20 :: Ptr PipelineBindPoint))
+    tokenCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pTokens <- peek @(Ptr IndirectCommandsLayoutTokenNV) ((p `plusPtr` 32 :: Ptr (Ptr IndirectCommandsLayoutTokenNV)))
+    pTokens' <- generateM (fromIntegral tokenCount) (\i -> peekCStruct @IndirectCommandsLayoutTokenNV ((pTokens `advancePtrBytes` (88 * (i)) :: Ptr IndirectCommandsLayoutTokenNV)))
+    streamCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    pStreamStrides <- peek @(Ptr Word32) ((p `plusPtr` 48 :: Ptr (Ptr Word32)))
+    pStreamStrides' <- generateM (fromIntegral streamCount) (\i -> peek @Word32 ((pStreamStrides `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    pure $ IndirectCommandsLayoutCreateInfoNV
+             flags pipelineBindPoint pTokens' pStreamStrides'
+
+instance Zero IndirectCommandsLayoutCreateInfoNV where
+  zero = IndirectCommandsLayoutCreateInfoNV
+           zero
+           zero
+           mempty
+           mempty
+
+
+-- | VkGeneratedCommandsInfoNV - Structure specifying parameters for the
+-- generation of commands
+--
+-- == Valid Usage
+--
+-- -   The provided @pipeline@ /must/ match the pipeline bound at execution
+--     time
+--
+-- -   If the @indirectCommandsLayout@ uses a token of
+--     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV', then the @pipeline@
+--     /must/ have been created with multiple shader groups
+--
+-- -   If the @indirectCommandsLayout@ uses a token of
+--     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV', then the @pipeline@
+--     /must/ have been created with
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
+--     set in 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@flags@
+--
+-- -   If the @indirectCommandsLayout@ uses a token of
+--     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', then the
+--     @pipeline@\`s 'Vulkan.Core10.Handles.PipelineLayout' /must/ match
+--     the 'IndirectCommandsLayoutTokenNV'::@pushconstantPipelineLayout@
+--
+-- -   @streamCount@ /must/ match the @indirectCommandsLayout@’s
+--     @streamCount@
+--
+-- -   @sequencesCount@ /must/ be less or equal to
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectSequenceCount@
+--     and 'GeneratedCommandsMemoryRequirementsInfoNV'::@maxSequencesCount@
+--     that was used to determine the @preprocessSize@
+--
+-- -   @preprocessBuffer@ /must/ have the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set in its usage flag
+--
+-- -   @preprocessOffset@ /must/ be aligned to
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minIndirectCommandsBufferOffsetAlignment@
+--
+-- -   If @preprocessBuffer@ is non-sparse then it /must/ be bound
+--     completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @preprocessSize@ /must/ be at least equal to the memory
+--     requirement\`s size returned by
+--     'getGeneratedCommandsMemoryRequirementsNV' using the matching inputs
+--     (@indirectCommandsLayout@, …​) as within this structure
+--
+-- -   @sequencesCountBuffer@ /can/ be set if the actual used count of
+--     sequences is sourced from the provided buffer. In that case the
+--     @sequencesCount@ serves as upper bound
+--
+-- -   If @sequencesCountBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', its usage flag /must/ have
+--     the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   If @sequencesCountBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesCountOffset@
+--     /must/ be aligned to
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minSequencesCountBufferOffsetAlignment@
+--
+-- -   If @sequencesCountBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' and is non-sparse then it
+--     /must/ be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   If @indirectCommandsLayout@’s
+--     'INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV' is set,
+--     @sequencesIndexBuffer@ /must/ be set otherwise it /must/ be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @sequencesIndexBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', its usage flag /must/ have
+--     the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   If @sequencesIndexBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesIndexOffset@
+--     /must/ be aligned to
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minSequencesIndexBufferOffsetAlignment@
+--
+-- -   If @sequencesIndexBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' and is non-sparse then it
+--     /must/ be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--
+-- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
+--
+-- -   @indirectCommandsLayout@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
+--
+-- -   @pStreams@ /must/ be a valid pointer to an array of @streamCount@
+--     valid 'IndirectCommandsStreamNV' structures
+--
+-- -   @preprocessBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'
+--     handle
+--
+-- -   If @sequencesCountBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesCountBuffer@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   If @sequencesIndexBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesIndexBuffer@
+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @streamCount@ /must/ be greater than @0@
+--
+-- -   Each of @indirectCommandsLayout@, @pipeline@, @preprocessBuffer@,
+--     @sequencesCountBuffer@, and @sequencesIndexBuffer@ that are valid
+--     handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV',
+-- 'IndirectCommandsStreamNV', 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdExecuteGeneratedCommandsNV', 'cmdPreprocessGeneratedCommandsNV'
+data GeneratedCommandsInfoNV = GeneratedCommandsInfoNV
+  { -- | @pipelineBindPoint@ is the
+    -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' used for the
+    -- @pipeline@.
+    pipelineBindPoint :: PipelineBindPoint
+  , -- | @pipeline@ is the 'Vulkan.Core10.Handles.Pipeline' used in the
+    -- generation and execution process.
+    pipeline :: Pipeline
+  , -- | @indirectCommandsLayout@ is the
+    -- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' that provides the
+    -- command sequence to generate.
+    indirectCommandsLayout :: IndirectCommandsLayoutNV
+  , -- | @pStreams@ provides an array of 'IndirectCommandsStreamNV' that provide
+    -- the input data for the tokens used in @indirectCommandsLayout@.
+    streams :: Vector IndirectCommandsStreamNV
+  , -- | @sequencesCount@ is the maximum number of sequences to reserve. If
+    -- @sequencesCountBuffer@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', this
+    -- is also the actual number of sequences generated.
+    sequencesCount :: Word32
+  , -- | @preprocessBuffer@ is the 'Vulkan.Core10.Handles.Buffer' that is used
+    -- for preprocessing the input data for execution. If this structure is
+    -- used with 'cmdExecuteGeneratedCommandsNV' with its @isPreprocessed@ set
+    -- to 'Vulkan.Core10.BaseType.TRUE', then the preprocessing step is skipped
+    -- and data is only read from this buffer.
+    preprocessBuffer :: Buffer
+  , -- | @preprocessOffset@ is the byte offset into @preprocessBuffer@ where the
+    -- preprocessed data is stored.
+    preprocessOffset :: DeviceSize
+  , -- | @preprocessSize@ is the maximum byte size within the @preprocessBuffer@
+    -- after the @preprocessOffset@ that is available for preprocessing.
+    preprocessSize :: DeviceSize
+  , -- | @sequencesCountBuffer@ is a 'Vulkan.Core10.Handles.Buffer' in which the
+    -- actual number of sequences is provided as single @uint32_t@ value.
+    sequencesCountBuffer :: Buffer
+  , -- | @sequencesCountOffset@ is the byte offset into @sequencesCountBuffer@
+    -- where the count value is stored.
+    sequencesCountOffset :: DeviceSize
+  , -- | @sequencesIndexBuffer@ is a 'Vulkan.Core10.Handles.Buffer' that encodes
+    -- the used sequence indices as @uint32_t@ array.
+    sequencesIndexBuffer :: Buffer
+  , -- | @sequencesIndexOffset@ is the byte offset into @sequencesIndexBuffer@
+    -- where the index values start.
+    sequencesIndexOffset :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show GeneratedCommandsInfoNV
+
+instance ToCStruct GeneratedCommandsInfoNV where
+  withCStruct x f = allocaBytesAligned 120 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GeneratedCommandsInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Pipeline)) (pipeline)
+    lift $ poke ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV)) (indirectCommandsLayout)
+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (streams)) :: Word32))
+    pPStreams' <- ContT $ allocaBytesAligned @IndirectCommandsStreamNV ((Data.Vector.length (streams)) * 16) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPStreams' `plusPtr` (16 * (i)) :: Ptr IndirectCommandsStreamNV) (e) . ($ ())) (streams)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr IndirectCommandsStreamNV))) (pPStreams')
+    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (sequencesCount)
+    lift $ poke ((p `plusPtr` 64 :: Ptr Buffer)) (preprocessBuffer)
+    lift $ poke ((p `plusPtr` 72 :: Ptr DeviceSize)) (preprocessOffset)
+    lift $ poke ((p `plusPtr` 80 :: Ptr DeviceSize)) (preprocessSize)
+    lift $ poke ((p `plusPtr` 88 :: Ptr Buffer)) (sequencesCountBuffer)
+    lift $ poke ((p `plusPtr` 96 :: Ptr DeviceSize)) (sequencesCountOffset)
+    lift $ poke ((p `plusPtr` 104 :: Ptr Buffer)) (sequencesIndexBuffer)
+    lift $ poke ((p `plusPtr` 112 :: Ptr DeviceSize)) (sequencesIndexOffset)
+    lift $ f
+  cStructSize = 120
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineBindPoint)) (zero)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Pipeline)) (zero)
+    lift $ poke ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV)) (zero)
+    pPStreams' <- ContT $ allocaBytesAligned @IndirectCommandsStreamNV ((Data.Vector.length (mempty)) * 16) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPStreams' `plusPtr` (16 * (i)) :: Ptr IndirectCommandsStreamNV) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr IndirectCommandsStreamNV))) (pPStreams')
+    lift $ poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 64 :: Ptr Buffer)) (zero)
+    lift $ poke ((p `plusPtr` 72 :: Ptr DeviceSize)) (zero)
+    lift $ poke ((p `plusPtr` 80 :: Ptr DeviceSize)) (zero)
+    lift $ f
+
+instance FromCStruct GeneratedCommandsInfoNV where
+  peekCStruct p = do
+    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 16 :: Ptr PipelineBindPoint))
+    pipeline <- peek @Pipeline ((p `plusPtr` 24 :: Ptr Pipeline))
+    indirectCommandsLayout <- peek @IndirectCommandsLayoutNV ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV))
+    streamCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    pStreams <- peek @(Ptr IndirectCommandsStreamNV) ((p `plusPtr` 48 :: Ptr (Ptr IndirectCommandsStreamNV)))
+    pStreams' <- generateM (fromIntegral streamCount) (\i -> peekCStruct @IndirectCommandsStreamNV ((pStreams `advancePtrBytes` (16 * (i)) :: Ptr IndirectCommandsStreamNV)))
+    sequencesCount <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    preprocessBuffer <- peek @Buffer ((p `plusPtr` 64 :: Ptr Buffer))
+    preprocessOffset <- peek @DeviceSize ((p `plusPtr` 72 :: Ptr DeviceSize))
+    preprocessSize <- peek @DeviceSize ((p `plusPtr` 80 :: Ptr DeviceSize))
+    sequencesCountBuffer <- peek @Buffer ((p `plusPtr` 88 :: Ptr Buffer))
+    sequencesCountOffset <- peek @DeviceSize ((p `plusPtr` 96 :: Ptr DeviceSize))
+    sequencesIndexBuffer <- peek @Buffer ((p `plusPtr` 104 :: Ptr Buffer))
+    sequencesIndexOffset <- peek @DeviceSize ((p `plusPtr` 112 :: Ptr DeviceSize))
+    pure $ GeneratedCommandsInfoNV
+             pipelineBindPoint pipeline indirectCommandsLayout pStreams' sequencesCount preprocessBuffer preprocessOffset preprocessSize sequencesCountBuffer sequencesCountOffset sequencesIndexBuffer sequencesIndexOffset
+
+instance Zero GeneratedCommandsInfoNV where
+  zero = GeneratedCommandsInfoNV
+           zero
+           zero
+           zero
+           mempty
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkGeneratedCommandsMemoryRequirementsInfoNV - Structure specifying
+-- parameters for the reservation of preprocess buffer space
+--
+-- == Valid Usage
+--
+-- -   @maxSequencesCount@ /must/ be less or equal to
+--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectSequenceCount@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
+--
+-- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
+--
+-- -   @indirectCommandsLayout@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
+--
+-- -   Both of @indirectCommandsLayout@, and @pipeline@ /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV',
+-- 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getGeneratedCommandsMemoryRequirementsNV'
+data GeneratedCommandsMemoryRequirementsInfoNV = GeneratedCommandsMemoryRequirementsInfoNV
+  { -- | @pipelineBindPoint@ is the
+    -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' of the
+    -- @pipeline@ that this buffer memory is intended to be used with during
+    -- the execution.
+    pipelineBindPoint :: PipelineBindPoint
+  , -- | @pipeline@ is the 'Vulkan.Core10.Handles.Pipeline' that this buffer
+    -- memory is intended to be used with during the execution.
+    pipeline :: Pipeline
+  , -- | @indirectCommandsLayout@ is the
+    -- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' that this buffer
+    -- memory is intended to be used with.
+    indirectCommandsLayout :: IndirectCommandsLayoutNV
+  , -- | @maxSequencesCount@ is the maximum number of sequences that this buffer
+    -- memory in combination with the other state provided /can/ be used with.
+    maxSequencesCount :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show GeneratedCommandsMemoryRequirementsInfoNV
+
+instance ToCStruct GeneratedCommandsMemoryRequirementsInfoNV where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GeneratedCommandsMemoryRequirementsInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineBindPoint)) (pipelineBindPoint)
+    poke ((p `plusPtr` 24 :: Ptr Pipeline)) (pipeline)
+    poke ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV)) (indirectCommandsLayout)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (maxSequencesCount)
+    f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineBindPoint)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Pipeline)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct GeneratedCommandsMemoryRequirementsInfoNV where
+  peekCStruct p = do
+    pipelineBindPoint <- peek @PipelineBindPoint ((p `plusPtr` 16 :: Ptr PipelineBindPoint))
+    pipeline <- peek @Pipeline ((p `plusPtr` 24 :: Ptr Pipeline))
+    indirectCommandsLayout <- peek @IndirectCommandsLayoutNV ((p `plusPtr` 32 :: Ptr IndirectCommandsLayoutNV))
+    maxSequencesCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    pure $ GeneratedCommandsMemoryRequirementsInfoNV
+             pipelineBindPoint pipeline indirectCommandsLayout maxSequencesCount
+
+instance Storable GeneratedCommandsMemoryRequirementsInfoNV where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero GeneratedCommandsMemoryRequirementsInfoNV where
+  zero = GeneratedCommandsMemoryRequirementsInfoNV
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkIndirectCommandsLayoutUsageFlagBitsNV - Bitmask specifying allowed
+-- usage of an indirect commands layout
+--
+-- = See Also
+--
+-- 'IndirectCommandsLayoutUsageFlagsNV'
+newtype IndirectCommandsLayoutUsageFlagBitsNV = IndirectCommandsLayoutUsageFlagBitsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' specifies
+-- that the layout is always used with the manual preprocessing step
+-- through calling 'cmdPreprocessGeneratedCommandsNV' and executed by
+-- 'cmdExecuteGeneratedCommandsNV' with @isPreprocessed@ set to
+-- 'Vulkan.Core10.BaseType.TRUE'.
+pattern INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV = IndirectCommandsLayoutUsageFlagBitsNV 0x00000001
+-- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV' specifies that
+-- the input data for the sequences is not implicitly indexed from
+-- 0..sequencesUsed but a user provided 'Vulkan.Core10.Handles.Buffer'
+-- encoding the index is provided.
+pattern INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV = IndirectCommandsLayoutUsageFlagBitsNV 0x00000002
+-- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV' specifies
+-- that the processing of sequences /can/ happen at an
+-- implementation-dependent order, which is not: guaranteed to be coherent
+-- using the same input data.
+pattern INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = IndirectCommandsLayoutUsageFlagBitsNV 0x00000004
+
+type IndirectCommandsLayoutUsageFlagsNV = IndirectCommandsLayoutUsageFlagBitsNV
+
+instance Show IndirectCommandsLayoutUsageFlagBitsNV where
+  showsPrec p = \case
+    INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV -> showString "INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV"
+    INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV -> showString "INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV"
+    INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV -> showString "INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV"
+    IndirectCommandsLayoutUsageFlagBitsNV x -> showParen (p >= 11) (showString "IndirectCommandsLayoutUsageFlagBitsNV 0x" . showHex x)
+
+instance Read IndirectCommandsLayoutUsageFlagBitsNV where
+  readPrec = parens (choose [("INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV", pure INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV)
+                            , ("INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV", pure INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV)
+                            , ("INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV", pure INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "IndirectCommandsLayoutUsageFlagBitsNV")
+                       v <- step readPrec
+                       pure (IndirectCommandsLayoutUsageFlagBitsNV v)))
+
+
+-- | VkIndirectStateFlagBitsNV - Bitmask specifiying state that can be
+-- altered on the device
+--
+-- = See Also
+--
+-- 'IndirectStateFlagsNV'
+newtype IndirectStateFlagBitsNV = IndirectStateFlagBitsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV' allows to toggle the
+-- 'Vulkan.Core10.Enums.FrontFace.FrontFace' rasterization state for
+-- subsequent draw operations.
+pattern INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = IndirectStateFlagBitsNV 0x00000001
+
+type IndirectStateFlagsNV = IndirectStateFlagBitsNV
+
+instance Show IndirectStateFlagBitsNV where
+  showsPrec p = \case
+    INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV -> showString "INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV"
+    IndirectStateFlagBitsNV x -> showParen (p >= 11) (showString "IndirectStateFlagBitsNV 0x" . showHex x)
+
+instance Read IndirectStateFlagBitsNV where
+  readPrec = parens (choose [("INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV", pure INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "IndirectStateFlagBitsNV")
+                       v <- step readPrec
+                       pure (IndirectStateFlagBitsNV v)))
+
+
+-- | VkIndirectCommandsTokenTypeNV - Enum specifying token commands
+--
+-- = Description
+--
+-- \'
+--
+-- +-------------------------------------------------+------------------------------------------------------------------+
+-- | Token type                                      | Equivalent command                                               |
+-- +=================================================+==================================================================+
+-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV'  | 'cmdBindPipelineShaderGroupNV'                                   |
+-- +-------------------------------------------------+------------------------------------------------------------------+
+-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV'   | -                                                                |
+-- +-------------------------------------------------+------------------------------------------------------------------+
+-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV'  | 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'         |
+-- +-------------------------------------------------+------------------------------------------------------------------+
+-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV' | 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers'       |
+-- +-------------------------------------------------+------------------------------------------------------------------+
+-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV' | 'Vulkan.Core10.CommandBufferBuilding.cmdPushConstants'           |
+-- +-------------------------------------------------+------------------------------------------------------------------+
+-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV'  | 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'     |
+-- +-------------------------------------------------+------------------------------------------------------------------+
+-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV'          | 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect'            |
+-- +-------------------------------------------------+------------------------------------------------------------------+
+-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV'    | 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV' |
+-- +-------------------------------------------------+------------------------------------------------------------------+
+--
+-- Supported indirect command tokens
+--
+-- = See Also
+--
+-- 'IndirectCommandsLayoutTokenNV'
+newtype IndirectCommandsTokenTypeNV = IndirectCommandsTokenTypeNV Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV"
+pattern INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV = IndirectCommandsTokenTypeNV 0
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV"
+pattern INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV = IndirectCommandsTokenTypeNV 1
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV"
+pattern INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV = IndirectCommandsTokenTypeNV 2
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV"
+pattern INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV = IndirectCommandsTokenTypeNV 3
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV"
+pattern INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV = IndirectCommandsTokenTypeNV 4
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV"
+pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV = IndirectCommandsTokenTypeNV 5
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV"
+pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = IndirectCommandsTokenTypeNV 6
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV"
+pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = IndirectCommandsTokenTypeNV 7
+{-# complete INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV,
+             INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV,
+             INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV,
+             INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV,
+             INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
+             INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV,
+             INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV,
+             INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV :: IndirectCommandsTokenTypeNV #-}
+
+instance Show IndirectCommandsTokenTypeNV where
+  showsPrec p = \case
+    INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV"
+    INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV"
+    INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV"
+    INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV"
+    INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV"
+    INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV"
+    INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV"
+    INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV -> showString "INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV"
+    IndirectCommandsTokenTypeNV x -> showParen (p >= 11) (showString "IndirectCommandsTokenTypeNV " . showsPrec 11 x)
+
+instance Read IndirectCommandsTokenTypeNV where
+  readPrec = parens (choose [("INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV)
+                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV)
+                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV)
+                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV)
+                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV)
+                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV)
+                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV)
+                            , ("INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV", pure INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "IndirectCommandsTokenTypeNV")
+                       v <- step readPrec
+                       pure (IndirectCommandsTokenTypeNV v)))
+
+
+type NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION"
+pattern NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 3
+
+
+type NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_NV_device_generated_commands"
+
+-- No documentation found for TopLevel "VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME"
+pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_NV_device_generated_commands"
+
diff --git a/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs-boot b/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_device_generated_commands.hs-boot
@@ -0,0 +1,122 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_device_generated_commands  ( BindIndexBufferIndirectCommandNV
+                                                          , BindShaderGroupIndirectCommandNV
+                                                          , BindVertexBufferIndirectCommandNV
+                                                          , GeneratedCommandsInfoNV
+                                                          , GeneratedCommandsMemoryRequirementsInfoNV
+                                                          , GraphicsPipelineShaderGroupsCreateInfoNV
+                                                          , GraphicsShaderGroupCreateInfoNV
+                                                          , IndirectCommandsLayoutCreateInfoNV
+                                                          , IndirectCommandsLayoutTokenNV
+                                                          , IndirectCommandsStreamNV
+                                                          , PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+                                                          , PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+                                                          , SetStateFlagsIndirectCommandNV
+                                                          ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data BindIndexBufferIndirectCommandNV
+
+instance ToCStruct BindIndexBufferIndirectCommandNV
+instance Show BindIndexBufferIndirectCommandNV
+
+instance FromCStruct BindIndexBufferIndirectCommandNV
+
+
+data BindShaderGroupIndirectCommandNV
+
+instance ToCStruct BindShaderGroupIndirectCommandNV
+instance Show BindShaderGroupIndirectCommandNV
+
+instance FromCStruct BindShaderGroupIndirectCommandNV
+
+
+data BindVertexBufferIndirectCommandNV
+
+instance ToCStruct BindVertexBufferIndirectCommandNV
+instance Show BindVertexBufferIndirectCommandNV
+
+instance FromCStruct BindVertexBufferIndirectCommandNV
+
+
+data GeneratedCommandsInfoNV
+
+instance ToCStruct GeneratedCommandsInfoNV
+instance Show GeneratedCommandsInfoNV
+
+instance FromCStruct GeneratedCommandsInfoNV
+
+
+data GeneratedCommandsMemoryRequirementsInfoNV
+
+instance ToCStruct GeneratedCommandsMemoryRequirementsInfoNV
+instance Show GeneratedCommandsMemoryRequirementsInfoNV
+
+instance FromCStruct GeneratedCommandsMemoryRequirementsInfoNV
+
+
+data GraphicsPipelineShaderGroupsCreateInfoNV
+
+instance ToCStruct GraphicsPipelineShaderGroupsCreateInfoNV
+instance Show GraphicsPipelineShaderGroupsCreateInfoNV
+
+instance FromCStruct GraphicsPipelineShaderGroupsCreateInfoNV
+
+
+data GraphicsShaderGroupCreateInfoNV
+
+instance ToCStruct GraphicsShaderGroupCreateInfoNV
+instance Show GraphicsShaderGroupCreateInfoNV
+
+instance FromCStruct GraphicsShaderGroupCreateInfoNV
+
+
+data IndirectCommandsLayoutCreateInfoNV
+
+instance ToCStruct IndirectCommandsLayoutCreateInfoNV
+instance Show IndirectCommandsLayoutCreateInfoNV
+
+instance FromCStruct IndirectCommandsLayoutCreateInfoNV
+
+
+data IndirectCommandsLayoutTokenNV
+
+instance ToCStruct IndirectCommandsLayoutTokenNV
+instance Show IndirectCommandsLayoutTokenNV
+
+instance FromCStruct IndirectCommandsLayoutTokenNV
+
+
+data IndirectCommandsStreamNV
+
+instance ToCStruct IndirectCommandsStreamNV
+instance Show IndirectCommandsStreamNV
+
+instance FromCStruct IndirectCommandsStreamNV
+
+
+data PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+
+instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+instance Show PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+
+instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+
+
+data PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+
+instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+instance Show PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+
+instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+
+
+data SetStateFlagsIndirectCommandNV
+
+instance ToCStruct SetStateFlagsIndirectCommandNV
+instance Show SetStateFlagsIndirectCommandNV
+
+instance FromCStruct SetStateFlagsIndirectCommandNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_external_memory.hs b/src/Vulkan/Extensions/VK_NV_external_memory.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_external_memory.hs
@@ -0,0 +1,142 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_external_memory  ( ExternalMemoryImageCreateInfoNV(..)
+                                                , ExportMemoryAllocateInfoNV(..)
+                                                , NV_EXTERNAL_MEMORY_SPEC_VERSION
+                                                , pattern NV_EXTERNAL_MEMORY_SPEC_VERSION
+                                                , NV_EXTERNAL_MEMORY_EXTENSION_NAME
+                                                , pattern NV_EXTERNAL_MEMORY_EXTENSION_NAME
+                                                , ExternalMemoryHandleTypeFlagBitsNV(..)
+                                                , ExternalMemoryHandleTypeFlagsNV
+                                                ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagsNV)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV))
+import Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagBitsNV(..))
+import Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagsNV)
+-- | VkExternalMemoryImageCreateInfoNV - Specify that an image may be backed
+-- by external memory
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagsNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExternalMemoryImageCreateInfoNV = ExternalMemoryImageCreateInfoNV
+  { -- | @handleTypes@ /must/ be a valid combination of
+    -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'
+    -- values
+    handleTypes :: ExternalMemoryHandleTypeFlagsNV }
+  deriving (Typeable)
+deriving instance Show ExternalMemoryImageCreateInfoNV
+
+instance ToCStruct ExternalMemoryImageCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExternalMemoryImageCreateInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV)) (handleTypes)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct ExternalMemoryImageCreateInfoNV where
+  peekCStruct p = do
+    handleTypes <- peek @ExternalMemoryHandleTypeFlagsNV ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV))
+    pure $ ExternalMemoryImageCreateInfoNV
+             handleTypes
+
+instance Storable ExternalMemoryImageCreateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExternalMemoryImageCreateInfoNV where
+  zero = ExternalMemoryImageCreateInfoNV
+           zero
+
+
+-- | VkExportMemoryAllocateInfoNV - Specify memory handle types that may be
+-- exported
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagsNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExportMemoryAllocateInfoNV = ExportMemoryAllocateInfoNV
+  { -- | @handleTypes@ /must/ be a valid combination of
+    -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'
+    -- values
+    handleTypes :: ExternalMemoryHandleTypeFlagsNV }
+  deriving (Typeable)
+deriving instance Show ExportMemoryAllocateInfoNV
+
+instance ToCStruct ExportMemoryAllocateInfoNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExportMemoryAllocateInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV)) (handleTypes)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct ExportMemoryAllocateInfoNV where
+  peekCStruct p = do
+    handleTypes <- peek @ExternalMemoryHandleTypeFlagsNV ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV))
+    pure $ ExportMemoryAllocateInfoNV
+             handleTypes
+
+instance Storable ExportMemoryAllocateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExportMemoryAllocateInfoNV where
+  zero = ExportMemoryAllocateInfoNV
+           zero
+
+
+type NV_EXTERNAL_MEMORY_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_SPEC_VERSION"
+pattern NV_EXTERNAL_MEMORY_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_EXTERNAL_MEMORY_SPEC_VERSION = 1
+
+
+type NV_EXTERNAL_MEMORY_EXTENSION_NAME = "VK_NV_external_memory"
+
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME"
+pattern NV_EXTERNAL_MEMORY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_EXTERNAL_MEMORY_EXTENSION_NAME = "VK_NV_external_memory"
+
diff --git a/src/Vulkan/Extensions/VK_NV_external_memory.hs-boot b/src/Vulkan/Extensions/VK_NV_external_memory.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_external_memory.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_external_memory  ( ExportMemoryAllocateInfoNV
+                                                , ExternalMemoryImageCreateInfoNV
+                                                ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExportMemoryAllocateInfoNV
+
+instance ToCStruct ExportMemoryAllocateInfoNV
+instance Show ExportMemoryAllocateInfoNV
+
+instance FromCStruct ExportMemoryAllocateInfoNV
+
+
+data ExternalMemoryImageCreateInfoNV
+
+instance ToCStruct ExternalMemoryImageCreateInfoNV
+instance Show ExternalMemoryImageCreateInfoNV
+
+instance FromCStruct ExternalMemoryImageCreateInfoNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs b/src/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs
@@ -0,0 +1,338 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_external_memory_capabilities  ( getPhysicalDeviceExternalImageFormatPropertiesNV
+                                                             , ExternalImageFormatPropertiesNV(..)
+                                                             , ExternalMemoryHandleTypeFlagBitsNV( EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV
+                                                                                                 , EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV
+                                                                                                 , EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV
+                                                                                                 , EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV
+                                                                                                 , ..
+                                                                                                 )
+                                                             , ExternalMemoryHandleTypeFlagsNV
+                                                             , ExternalMemoryFeatureFlagBitsNV( EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV
+                                                                                              , EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV
+                                                                                              , EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV
+                                                                                              , ..
+                                                                                              )
+                                                             , ExternalMemoryFeatureFlagsNV
+                                                             , NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION
+                                                             , pattern NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION
+                                                             , NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
+                                                             , pattern NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
+                                                             ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.Core10.Enums.Format (Format(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlagBits(..))
+import Vulkan.Core10.Enums.ImageCreateFlagBits (ImageCreateFlags)
+import Vulkan.Core10.DeviceInitialization (ImageFormatProperties)
+import Vulkan.Core10.Enums.ImageTiling (ImageTiling)
+import Vulkan.Core10.Enums.ImageTiling (ImageTiling(..))
+import Vulkan.Core10.Enums.ImageType (ImageType)
+import Vulkan.Core10.Enums.ImageType (ImageType(..))
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlagBits(..))
+import Vulkan.Core10.Enums.ImageUsageFlagBits (ImageUsageFlags)
+import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceExternalImageFormatPropertiesNV))
+import Vulkan.Core10.Handles (PhysicalDevice)
+import Vulkan.Core10.Handles (PhysicalDevice(..))
+import Vulkan.Core10.Handles (PhysicalDevice_T)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetPhysicalDeviceExternalImageFormatPropertiesNV
+  :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ExternalMemoryHandleTypeFlagsNV -> Ptr ExternalImageFormatPropertiesNV -> IO Result) -> Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ExternalMemoryHandleTypeFlagsNV -> Ptr ExternalImageFormatPropertiesNV -> IO Result
+
+-- | vkGetPhysicalDeviceExternalImageFormatPropertiesNV - determine image
+-- capabilities compatible with external memory handle types
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     image capabilities
+--
+-- -   @format@ is the image format, corresponding to
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@format@.
+--
+-- -   @type@ is the image type, corresponding to
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@imageType@.
+--
+-- -   @tiling@ is the image tiling, corresponding to
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@tiling@.
+--
+-- -   @usage@ is the intended usage of the image, corresponding to
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@.
+--
+-- -   @flags@ is a bitmask describing additional parameters of the image,
+--     corresponding to 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@.
+--
+-- -   @externalHandleType@ is either one of the bits from
+--     'ExternalMemoryHandleTypeFlagBitsNV', or 0.
+--
+-- -   @pExternalImageFormatProperties@ is a pointer to a
+--     'ExternalImageFormatPropertiesNV' structure in which capabilities
+--     are returned.
+--
+-- = Description
+--
+-- If @externalHandleType@ is 0,
+-- @pExternalImageFormatProperties->imageFormatProperties@ will return the
+-- same values as a call to
+-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
+-- and the other members of @pExternalImageFormatProperties@ will all be 0.
+-- Otherwise, they are filled in as described for
+-- 'ExternalImageFormatPropertiesNV'.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'
+--
+-- = See Also
+--
+-- 'ExternalImageFormatPropertiesNV', 'ExternalMemoryHandleTypeFlagsNV',
+-- 'Vulkan.Core10.Enums.Format.Format',
+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',
+-- 'Vulkan.Core10.Enums.ImageTiling.ImageTiling',
+-- 'Vulkan.Core10.Enums.ImageType.ImageType',
+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',
+-- 'Vulkan.Core10.Handles.PhysicalDevice'
+getPhysicalDeviceExternalImageFormatPropertiesNV :: forall io . MonadIO io => PhysicalDevice -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> ("externalHandleType" ::: ExternalMemoryHandleTypeFlagsNV) -> io (ExternalImageFormatPropertiesNV)
+getPhysicalDeviceExternalImageFormatPropertiesNV physicalDevice format type' tiling usage flags externalHandleType = liftIO . evalContT $ do
+  let vkGetPhysicalDeviceExternalImageFormatPropertiesNVPtr = pVkGetPhysicalDeviceExternalImageFormatPropertiesNV (instanceCmds (physicalDevice :: PhysicalDevice))
+  lift $ unless (vkGetPhysicalDeviceExternalImageFormatPropertiesNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceExternalImageFormatPropertiesNV is null" Nothing Nothing
+  let vkGetPhysicalDeviceExternalImageFormatPropertiesNV' = mkVkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNVPtr
+  pPExternalImageFormatProperties <- ContT (withZeroCStruct @ExternalImageFormatPropertiesNV)
+  r <- lift $ vkGetPhysicalDeviceExternalImageFormatPropertiesNV' (physicalDeviceHandle (physicalDevice)) (format) (type') (tiling) (usage) (flags) (externalHandleType) (pPExternalImageFormatProperties)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pExternalImageFormatProperties <- lift $ peekCStruct @ExternalImageFormatPropertiesNV pPExternalImageFormatProperties
+  pure $ (pExternalImageFormatProperties)
+
+
+-- | VkExternalImageFormatPropertiesNV - Structure specifying external image
+-- format properties
+--
+-- = See Also
+--
+-- 'ExternalMemoryFeatureFlagsNV', 'ExternalMemoryHandleTypeFlagsNV',
+-- 'Vulkan.Core10.DeviceInitialization.ImageFormatProperties',
+-- 'getPhysicalDeviceExternalImageFormatPropertiesNV'
+data ExternalImageFormatPropertiesNV = ExternalImageFormatPropertiesNV
+  { -- | @imageFormatProperties@ will be filled in as when calling
+    -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties',
+    -- but the values returned /may/ vary depending on the external handle type
+    -- requested.
+    imageFormatProperties :: ImageFormatProperties
+  , -- | @externalMemoryFeatures@ is a bitmask of
+    -- 'ExternalMemoryFeatureFlagBitsNV', indicating properties of the external
+    -- memory handle type
+    -- ('getPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@)
+    -- being queried, or 0 if the external memory handle type is 0.
+    externalMemoryFeatures :: ExternalMemoryFeatureFlagsNV
+  , -- | @exportFromImportedHandleTypes@ is a bitmask of
+    -- 'ExternalMemoryHandleTypeFlagBitsNV' containing a bit set for every
+    -- external handle type that /may/ be used to create memory from which the
+    -- handles of the type specified in
+    -- 'getPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@
+    -- /can/ be exported, or 0 if the external memory handle type is 0.
+    exportFromImportedHandleTypes :: ExternalMemoryHandleTypeFlagsNV
+  , -- | @compatibleHandleTypes@ is a bitmask of
+    -- 'ExternalMemoryHandleTypeFlagBitsNV' containing a bit set for every
+    -- external handle type that /may/ be specified simultaneously with the
+    -- handle type specified by
+    -- 'getPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@
+    -- when calling 'Vulkan.Core10.Memory.allocateMemory', or 0 if the external
+    -- memory handle type is 0. @compatibleHandleTypes@ will always contain
+    -- 'getPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@
+    compatibleHandleTypes :: ExternalMemoryHandleTypeFlagsNV
+  }
+  deriving (Typeable)
+deriving instance Show ExternalImageFormatPropertiesNV
+
+instance ToCStruct ExternalImageFormatPropertiesNV where
+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExternalImageFormatPropertiesNV{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageFormatProperties)) (imageFormatProperties) . ($ ())
+    lift $ poke ((p `plusPtr` 32 :: Ptr ExternalMemoryFeatureFlagsNV)) (externalMemoryFeatures)
+    lift $ poke ((p `plusPtr` 36 :: Ptr ExternalMemoryHandleTypeFlagsNV)) (exportFromImportedHandleTypes)
+    lift $ poke ((p `plusPtr` 40 :: Ptr ExternalMemoryHandleTypeFlagsNV)) (compatibleHandleTypes)
+    lift $ f
+  cStructSize = 48
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageFormatProperties)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct ExternalImageFormatPropertiesNV where
+  peekCStruct p = do
+    imageFormatProperties <- peekCStruct @ImageFormatProperties ((p `plusPtr` 0 :: Ptr ImageFormatProperties))
+    externalMemoryFeatures <- peek @ExternalMemoryFeatureFlagsNV ((p `plusPtr` 32 :: Ptr ExternalMemoryFeatureFlagsNV))
+    exportFromImportedHandleTypes <- peek @ExternalMemoryHandleTypeFlagsNV ((p `plusPtr` 36 :: Ptr ExternalMemoryHandleTypeFlagsNV))
+    compatibleHandleTypes <- peek @ExternalMemoryHandleTypeFlagsNV ((p `plusPtr` 40 :: Ptr ExternalMemoryHandleTypeFlagsNV))
+    pure $ ExternalImageFormatPropertiesNV
+             imageFormatProperties externalMemoryFeatures exportFromImportedHandleTypes compatibleHandleTypes
+
+instance Zero ExternalImageFormatPropertiesNV where
+  zero = ExternalImageFormatPropertiesNV
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkExternalMemoryHandleTypeFlagBitsNV - Bitmask specifying external
+-- memory handle types
+--
+-- = See Also
+--
+-- 'ExternalMemoryHandleTypeFlagsNV'
+newtype ExternalMemoryHandleTypeFlagBitsNV = ExternalMemoryHandleTypeFlagBitsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV' specifies a handle to
+-- memory returned by
+-- 'Vulkan.Extensions.VK_NV_external_memory_win32.getMemoryWin32HandleNV',
+-- or one duplicated from such a handle using @DuplicateHandle()@.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = ExternalMemoryHandleTypeFlagBitsNV 0x00000001
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV' specifies a handle
+-- to memory returned by
+-- 'Vulkan.Extensions.VK_NV_external_memory_win32.getMemoryWin32HandleNV'.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = ExternalMemoryHandleTypeFlagBitsNV 0x00000002
+-- | '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 EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = ExternalMemoryHandleTypeFlagBitsNV 0x00000004
+-- | 'EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV' specifies a handle
+-- to memory returned by @IDXGIResource::GetSharedHandle()@.
+pattern EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = ExternalMemoryHandleTypeFlagBitsNV 0x00000008
+
+type ExternalMemoryHandleTypeFlagsNV = ExternalMemoryHandleTypeFlagBitsNV
+
+instance Show ExternalMemoryHandleTypeFlagBitsNV where
+  showsPrec p = \case
+    EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV"
+    EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV"
+    EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV"
+    EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV -> showString "EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV"
+    ExternalMemoryHandleTypeFlagBitsNV x -> showParen (p >= 11) (showString "ExternalMemoryHandleTypeFlagBitsNV 0x" . showHex x)
+
+instance Read ExternalMemoryHandleTypeFlagBitsNV where
+  readPrec = parens (choose [("EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV", pure EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV", pure EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV)
+                            , ("EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV", pure EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ExternalMemoryHandleTypeFlagBitsNV")
+                       v <- step readPrec
+                       pure (ExternalMemoryHandleTypeFlagBitsNV v)))
+
+
+-- | VkExternalMemoryFeatureFlagBitsNV - Bitmask specifying external memory
+-- features
+--
+-- = See Also
+--
+-- 'ExternalImageFormatPropertiesNV', 'ExternalMemoryFeatureFlagsNV',
+-- 'getPhysicalDeviceExternalImageFormatPropertiesNV'
+newtype ExternalMemoryFeatureFlagBitsNV = ExternalMemoryFeatureFlagBitsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+-- | '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 EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = ExternalMemoryFeatureFlagBitsNV 0x00000001
+-- | 'EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV' specifies that the
+-- implementation supports exporting handles of the specified type.
+pattern EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = ExternalMemoryFeatureFlagBitsNV 0x00000002
+-- | 'EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV' specifies that the
+-- implementation supports importing handles of the specified type.
+pattern EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = ExternalMemoryFeatureFlagBitsNV 0x00000004
+
+type ExternalMemoryFeatureFlagsNV = ExternalMemoryFeatureFlagBitsNV
+
+instance Show ExternalMemoryFeatureFlagBitsNV where
+  showsPrec p = \case
+    EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV -> showString "EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV"
+    EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV -> showString "EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV"
+    EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV -> showString "EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV"
+    ExternalMemoryFeatureFlagBitsNV x -> showParen (p >= 11) (showString "ExternalMemoryFeatureFlagBitsNV 0x" . showHex x)
+
+instance Read ExternalMemoryFeatureFlagBitsNV where
+  readPrec = parens (choose [("EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV", pure EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV)
+                            , ("EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV", pure EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV)
+                            , ("EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV", pure EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ExternalMemoryFeatureFlagBitsNV")
+                       v <- step readPrec
+                       pure (ExternalMemoryFeatureFlagBitsNV v)))
+
+
+type NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION"
+pattern NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION = 1
+
+
+type NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME = "VK_NV_external_memory_capabilities"
+
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME"
+pattern NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME = "VK_NV_external_memory_capabilities"
+
diff --git a/src/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs-boot b/src/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs-boot
@@ -0,0 +1,21 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_external_memory_capabilities  ( ExternalImageFormatPropertiesNV
+                                                             , ExternalMemoryHandleTypeFlagBitsNV
+                                                             , ExternalMemoryHandleTypeFlagsNV
+                                                             ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExternalImageFormatPropertiesNV
+
+instance ToCStruct ExternalImageFormatPropertiesNV
+instance Show ExternalImageFormatPropertiesNV
+
+instance FromCStruct ExternalImageFormatPropertiesNV
+
+
+data ExternalMemoryHandleTypeFlagBitsNV
+
+type ExternalMemoryHandleTypeFlagsNV = ExternalMemoryHandleTypeFlagBitsNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_external_memory_win32.hs b/src/Vulkan/Extensions/VK_NV_external_memory_win32.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_external_memory_win32.hs
@@ -0,0 +1,269 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_external_memory_win32  ( getMemoryWin32HandleNV
+                                                      , ImportMemoryWin32HandleInfoNV(..)
+                                                      , ExportMemoryWin32HandleInfoNV(..)
+                                                      , NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION
+                                                      , pattern NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION
+                                                      , NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME
+                                                      , pattern NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME
+                                                      , ExternalMemoryHandleTypeFlagBitsNV(..)
+                                                      , ExternalMemoryHandleTypeFlagsNV
+                                                      , HANDLE
+                                                      , DWORD
+                                                      , SECURITY_ATTRIBUTES
+                                                      ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.Extensions.WSITypes (DWORD)
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkGetMemoryWin32HandleNV))
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.Core10.Handles (DeviceMemory(..))
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagBitsNV(..))
+import Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagsNV)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Extensions.WSITypes (HANDLE)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.WSITypes (DWORD)
+import Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagBitsNV(..))
+import Vulkan.Extensions.VK_NV_external_memory_capabilities (ExternalMemoryHandleTypeFlagsNV)
+import Vulkan.Extensions.WSITypes (HANDLE)
+import Vulkan.Extensions.WSITypes (SECURITY_ATTRIBUTES)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetMemoryWin32HandleNV
+  :: FunPtr (Ptr Device_T -> DeviceMemory -> ExternalMemoryHandleTypeFlagsNV -> Ptr HANDLE -> IO Result) -> Ptr Device_T -> DeviceMemory -> ExternalMemoryHandleTypeFlagsNV -> Ptr HANDLE -> IO Result
+
+-- | vkGetMemoryWin32HandleNV - retrieve Win32 handle to a device memory
+-- object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @memory@ is the 'Vulkan.Core10.Handles.DeviceMemory' object.
+--
+-- -   @handleType@ is a bitmask of
+--     'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'
+--     containing a single bit specifying the type of handle requested.
+--
+-- -   @handle@ is a pointer to a Windows
+--     'Vulkan.Extensions.WSITypes.HANDLE' in which the handle is returned.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagsNV'
+getMemoryWin32HandleNV :: forall io . MonadIO io => Device -> DeviceMemory -> ExternalMemoryHandleTypeFlagsNV -> io (HANDLE)
+getMemoryWin32HandleNV device memory handleType = liftIO . evalContT $ do
+  let vkGetMemoryWin32HandleNVPtr = pVkGetMemoryWin32HandleNV (deviceCmds (device :: Device))
+  lift $ unless (vkGetMemoryWin32HandleNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetMemoryWin32HandleNV is null" Nothing Nothing
+  let vkGetMemoryWin32HandleNV' = mkVkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNVPtr
+  pPHandle <- ContT $ bracket (callocBytes @HANDLE 8) free
+  r <- lift $ vkGetMemoryWin32HandleNV' (deviceHandle (device)) (memory) (handleType) (pPHandle)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pHandle <- lift $ peek @HANDLE pPHandle
+  pure $ (pHandle)
+
+
+-- | VkImportMemoryWin32HandleInfoNV - import Win32 memory created on the
+-- same physical device
+--
+-- = Description
+--
+-- If @handleType@ is @0@, this structure is ignored by consumers of the
+-- 'Vulkan.Core10.Memory.MemoryAllocateInfo' structure it is chained from.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagsNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ImportMemoryWin32HandleInfoNV = ImportMemoryWin32HandleInfoNV
+  { -- | @handleType@ /must/ be a valid combination of
+    -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'
+    -- values
+    handleType :: ExternalMemoryHandleTypeFlagsNV
+  , -- | @handle@ /must/ be a valid handle to memory, obtained as specified by
+    -- @handleType@
+    handle :: HANDLE
+  }
+  deriving (Typeable)
+deriving instance Show ImportMemoryWin32HandleInfoNV
+
+instance ToCStruct ImportMemoryWin32HandleInfoNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ImportMemoryWin32HandleInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV)) (handleType)
+    poke ((p `plusPtr` 24 :: Ptr HANDLE)) (handle)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct ImportMemoryWin32HandleInfoNV where
+  peekCStruct p = do
+    handleType <- peek @ExternalMemoryHandleTypeFlagsNV ((p `plusPtr` 16 :: Ptr ExternalMemoryHandleTypeFlagsNV))
+    handle <- peek @HANDLE ((p `plusPtr` 24 :: Ptr HANDLE))
+    pure $ ImportMemoryWin32HandleInfoNV
+             handleType handle
+
+instance Storable ImportMemoryWin32HandleInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ImportMemoryWin32HandleInfoNV where
+  zero = ImportMemoryWin32HandleInfoNV
+           zero
+           zero
+
+
+-- | VkExportMemoryWin32HandleInfoNV - specify security attributes and access
+-- rights for Win32 memory handles
+--
+-- = 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://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV'
+--
+-- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
+--     pointer to a valid 'Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES'
+--     value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data ExportMemoryWin32HandleInfoNV = ExportMemoryWin32HandleInfoNV
+  { -- | @pAttributes@ is a pointer to a Windows
+    -- 'Vulkan.Extensions.WSITypes.SECURITY_ATTRIBUTES' structure specifying
+    -- security attributes of the handle.
+    attributes :: Ptr SECURITY_ATTRIBUTES
+  , -- | @dwAccess@ is a 'Vulkan.Extensions.WSITypes.DWORD' specifying access
+    -- rights of the handle.
+    dwAccess :: DWORD
+  }
+  deriving (Typeable)
+deriving instance Show ExportMemoryWin32HandleInfoNV
+
+instance ToCStruct ExportMemoryWin32HandleInfoNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ExportMemoryWin32HandleInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES))) (attributes)
+    poke ((p `plusPtr` 24 :: Ptr DWORD)) (dwAccess)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct ExportMemoryWin32HandleInfoNV where
+  peekCStruct p = do
+    pAttributes <- peek @(Ptr SECURITY_ATTRIBUTES) ((p `plusPtr` 16 :: Ptr (Ptr SECURITY_ATTRIBUTES)))
+    dwAccess <- peek @DWORD ((p `plusPtr` 24 :: Ptr DWORD))
+    pure $ ExportMemoryWin32HandleInfoNV
+             pAttributes dwAccess
+
+instance Storable ExportMemoryWin32HandleInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ExportMemoryWin32HandleInfoNV where
+  zero = ExportMemoryWin32HandleInfoNV
+           zero
+           zero
+
+
+type NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION"
+pattern NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1
+
+
+type NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_NV_external_memory_win32"
+
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME"
+pattern NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_NV_external_memory_win32"
+
diff --git a/src/Vulkan/Extensions/VK_NV_external_memory_win32.hs-boot b/src/Vulkan/Extensions/VK_NV_external_memory_win32.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_external_memory_win32.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_external_memory_win32  ( ExportMemoryWin32HandleInfoNV
+                                                      , ImportMemoryWin32HandleInfoNV
+                                                      ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data ExportMemoryWin32HandleInfoNV
+
+instance ToCStruct ExportMemoryWin32HandleInfoNV
+instance Show ExportMemoryWin32HandleInfoNV
+
+instance FromCStruct ExportMemoryWin32HandleInfoNV
+
+
+data ImportMemoryWin32HandleInfoNV
+
+instance ToCStruct ImportMemoryWin32HandleInfoNV
+instance Show ImportMemoryWin32HandleInfoNV
+
+instance FromCStruct ImportMemoryWin32HandleInfoNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_fill_rectangle.hs b/src/Vulkan/Extensions/VK_NV_fill_rectangle.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_fill_rectangle.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_fill_rectangle  ( NV_FILL_RECTANGLE_SPEC_VERSION
+                                               , pattern NV_FILL_RECTANGLE_SPEC_VERSION
+                                               , NV_FILL_RECTANGLE_EXTENSION_NAME
+                                               , pattern NV_FILL_RECTANGLE_EXTENSION_NAME
+                                               ) where
+
+import Data.String (IsString)
+
+type NV_FILL_RECTANGLE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_FILL_RECTANGLE_SPEC_VERSION"
+pattern NV_FILL_RECTANGLE_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_FILL_RECTANGLE_SPEC_VERSION = 1
+
+
+type NV_FILL_RECTANGLE_EXTENSION_NAME = "VK_NV_fill_rectangle"
+
+-- No documentation found for TopLevel "VK_NV_FILL_RECTANGLE_EXTENSION_NAME"
+pattern NV_FILL_RECTANGLE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_FILL_RECTANGLE_EXTENSION_NAME = "VK_NV_fill_rectangle"
+
diff --git a/src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs b/src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs
@@ -0,0 +1,184 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_fragment_coverage_to_color  ( PipelineCoverageToColorStateCreateInfoNV(..)
+                                                           , PipelineCoverageToColorStateCreateFlagsNV(..)
+                                                           , NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION
+                                                           , pattern NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION
+                                                           , NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME
+                                                           , pattern NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME
+                                                           ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV))
+-- | VkPipelineCoverageToColorStateCreateInfoNV - Structure specifying
+-- whether fragment coverage replaces a color
+--
+-- = Description
+--
+-- If @coverageToColorEnable@ is 'Vulkan.Core10.BaseType.TRUE', the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask coverage mask>
+-- 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 coverage mask, the low bits of
+-- the sample coverage mask are taken without any clamping. If the color
+-- attachment format has more bits than the coverage mask, the high bits of
+-- the sample coverage mask are filled with zeros.
+--
+-- If @coverageToColorEnable@ is 'Vulkan.Core10.BaseType.FALSE', these
+-- operations are skipped. If this structure is not present, it is as if
+-- @coverageToColorEnable@ is 'Vulkan.Core10.BaseType.FALSE'.
+--
+-- == Valid Usage
+--
+-- -   If @coverageToColorEnable@ is 'Vulkan.Core10.BaseType.TRUE', then
+--     the render pass subpass indicated by
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
+--     and 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@subpass@
+--     /must/ have a color attachment at the location selected by
+--     @coverageToColorLocation@, with a
+--     'Vulkan.Core10.Enums.Format.Format' of
+--     'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT',
+--     'Vulkan.Core10.Enums.Format.FORMAT_R8_SINT',
+--     'Vulkan.Core10.Enums.Format.FORMAT_R16_UINT',
+--     'Vulkan.Core10.Enums.Format.FORMAT_R16_SINT',
+--     'Vulkan.Core10.Enums.Format.FORMAT_R32_UINT', or
+--     'Vulkan.Core10.Enums.Format.FORMAT_R32_SINT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV'
+--
+-- -   @flags@ /must/ be @0@
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'PipelineCoverageToColorStateCreateFlagsNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineCoverageToColorStateCreateInfoNV = PipelineCoverageToColorStateCreateInfoNV
+  { -- | @flags@ is reserved for future use.
+    flags :: PipelineCoverageToColorStateCreateFlagsNV
+  , -- | @coverageToColorEnable@ controls whether the fragment coverage value
+    -- replaces a fragment color output.
+    coverageToColorEnable :: Bool
+  , -- | @coverageToColorLocation@ controls which fragment shader color output
+    -- value is replaced.
+    coverageToColorLocation :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PipelineCoverageToColorStateCreateInfoNV
+
+instance ToCStruct PipelineCoverageToColorStateCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineCoverageToColorStateCreateInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr PipelineCoverageToColorStateCreateFlagsNV)) (flags)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (coverageToColorEnable))
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (coverageToColorLocation)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PipelineCoverageToColorStateCreateInfoNV where
+  peekCStruct p = do
+    flags <- peek @PipelineCoverageToColorStateCreateFlagsNV ((p `plusPtr` 16 :: Ptr PipelineCoverageToColorStateCreateFlagsNV))
+    coverageToColorEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    coverageToColorLocation <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    pure $ PipelineCoverageToColorStateCreateInfoNV
+             flags (bool32ToBool coverageToColorEnable) coverageToColorLocation
+
+instance Storable PipelineCoverageToColorStateCreateInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineCoverageToColorStateCreateInfoNV where
+  zero = PipelineCoverageToColorStateCreateInfoNV
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineCoverageToColorStateCreateFlagsNV - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineCoverageToColorStateCreateFlagsNV' is a bitmask type for
+-- setting a mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'PipelineCoverageToColorStateCreateInfoNV'
+newtype PipelineCoverageToColorStateCreateFlagsNV = PipelineCoverageToColorStateCreateFlagsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineCoverageToColorStateCreateFlagsNV where
+  showsPrec p = \case
+    PipelineCoverageToColorStateCreateFlagsNV x -> showParen (p >= 11) (showString "PipelineCoverageToColorStateCreateFlagsNV 0x" . showHex x)
+
+instance Read PipelineCoverageToColorStateCreateFlagsNV where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineCoverageToColorStateCreateFlagsNV")
+                       v <- step readPrec
+                       pure (PipelineCoverageToColorStateCreateFlagsNV v)))
+
+
+type NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION"
+pattern NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION = 1
+
+
+type NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME = "VK_NV_fragment_coverage_to_color"
+
+-- No documentation found for TopLevel "VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME"
+pattern NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME = "VK_NV_fragment_coverage_to_color"
+
diff --git a/src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs-boot b/src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_fragment_coverage_to_color  (PipelineCoverageToColorStateCreateInfoNV) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PipelineCoverageToColorStateCreateInfoNV
+
+instance ToCStruct PipelineCoverageToColorStateCreateInfoNV
+instance Show PipelineCoverageToColorStateCreateInfoNV
+
+instance FromCStruct PipelineCoverageToColorStateCreateInfoNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs b/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs
@@ -0,0 +1,112 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_fragment_shader_barycentric  ( PhysicalDeviceFragmentShaderBarycentricFeaturesNV(..)
+                                                            , NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION
+                                                            , pattern NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION
+                                                            , NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME
+                                                            , pattern NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME
+                                                            ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV))
+-- | VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV - Structure
+-- describing barycentric support in fragment shaders that can be supported
+-- by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceFragmentShaderBarycentricFeaturesNV'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-barycentric Barycentric Interpolation>
+-- for more information.
+--
+-- If the 'PhysicalDeviceFragmentShaderBarycentricFeaturesNV' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceFragmentShaderBarycentricFeaturesNV' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceFragmentShaderBarycentricFeaturesNV = PhysicalDeviceFragmentShaderBarycentricFeaturesNV
+  { -- | @fragmentShaderBarycentric@ indicates that the implementation supports
+    -- the @BaryCoordNV@ and @BaryCoordNoPerspNV@ SPIR-V fragment shader
+    -- built-ins and supports the @PerVertexNV@ SPIR-V decoration on fragment
+    -- shader input variables.
+    fragmentShaderBarycentric :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceFragmentShaderBarycentricFeaturesNV
+
+instance ToCStruct PhysicalDeviceFragmentShaderBarycentricFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceFragmentShaderBarycentricFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (fragmentShaderBarycentric))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceFragmentShaderBarycentricFeaturesNV where
+  peekCStruct p = do
+    fragmentShaderBarycentric <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceFragmentShaderBarycentricFeaturesNV
+             (bool32ToBool fragmentShaderBarycentric)
+
+instance Storable PhysicalDeviceFragmentShaderBarycentricFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceFragmentShaderBarycentricFeaturesNV where
+  zero = PhysicalDeviceFragmentShaderBarycentricFeaturesNV
+           zero
+
+
+type NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION"
+pattern NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION = 1
+
+
+type NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME = "VK_NV_fragment_shader_barycentric"
+
+-- No documentation found for TopLevel "VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME"
+pattern NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME = "VK_NV_fragment_shader_barycentric"
+
diff --git a/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs-boot b/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_fragment_shader_barycentric  (PhysicalDeviceFragmentShaderBarycentricFeaturesNV) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceFragmentShaderBarycentricFeaturesNV
+
+instance ToCStruct PhysicalDeviceFragmentShaderBarycentricFeaturesNV
+instance Show PhysicalDeviceFragmentShaderBarycentricFeaturesNV
+
+instance FromCStruct PhysicalDeviceFragmentShaderBarycentricFeaturesNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs b/src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
@@ -0,0 +1,298 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_framebuffer_mixed_samples  ( PipelineCoverageModulationStateCreateInfoNV(..)
+                                                          , PipelineCoverageModulationStateCreateFlagsNV(..)
+                                                          , CoverageModulationModeNV( COVERAGE_MODULATION_MODE_NONE_NV
+                                                                                    , COVERAGE_MODULATION_MODE_RGB_NV
+                                                                                    , COVERAGE_MODULATION_MODE_ALPHA_NV
+                                                                                    , COVERAGE_MODULATION_MODE_RGBA_NV
+                                                                                    , ..
+                                                                                    )
+                                                          , NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION
+                                                          , pattern NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION
+                                                          , NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME
+                                                          , pattern NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME
+                                                          ) where
+
+import Control.Monad (unless)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CFloat(CFloat))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV))
+-- | VkPipelineCoverageModulationStateCreateInfoNV - Structure specifying
+-- parameters controlling coverage modulation
+--
+-- = Description
+--
+-- If @coverageModulationTableEnable@ is 'Vulkan.Core10.BaseType.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 'Vulkan.Core10.Pass.AttachmentDescription'::@samples@
+--     for any color attachments
+--
+-- -   R = popcount(associated coverage bits) \/ (N \/ M)
+--
+-- If @coverageModulationTableEnable@ is 'Vulkan.Core10.BaseType.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 'COVERAGE_MODULATION_MODE_NONE_NV'.
+--
+-- If the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-coverage-reduction coverage reduction mode>
+-- is
+-- 'Vulkan.Extensions.VK_NV_coverage_reduction_mode.COVERAGE_REDUCTION_MODE_TRUNCATE_NV',
+-- each color sample is associated with only a single coverage sample. In
+-- this case, it is as if @coverageModulationMode@ is
+-- 'COVERAGE_MODULATION_MODE_NONE_NV'.
+--
+-- == Valid Usage
+--
+-- -   If @coverageModulationTableEnable@ is 'Vulkan.Core10.BaseType.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
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV'
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @coverageModulationMode@ /must/ be a valid
+--     'CoverageModulationModeNV' value
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'CoverageModulationModeNV',
+-- 'PipelineCoverageModulationStateCreateFlagsNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineCoverageModulationStateCreateInfoNV = PipelineCoverageModulationStateCreateInfoNV
+  { -- | @flags@ is reserved for future use.
+    flags :: PipelineCoverageModulationStateCreateFlagsNV
+  , -- | @coverageModulationMode@ is a 'CoverageModulationModeNV' value
+    -- controlling which color components are modulated.
+    coverageModulationMode :: CoverageModulationModeNV
+  , -- | @coverageModulationTableEnable@ controls whether the modulation factor
+    -- is looked up from a table in @pCoverageModulationTable@.
+    coverageModulationTableEnable :: Bool
+  , -- | @coverageModulationTableCount@ is the number of elements in
+    -- @pCoverageModulationTable@.
+    coverageModulationTableCount :: Word32
+  , -- | @pCoverageModulationTable@ is a table of modulation factors containing a
+    -- value for each number of covered samples.
+    coverageModulationTable :: Vector Float
+  }
+  deriving (Typeable)
+deriving instance Show PipelineCoverageModulationStateCreateInfoNV
+
+instance ToCStruct PipelineCoverageModulationStateCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineCoverageModulationStateCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCoverageModulationStateCreateFlagsNV)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr CoverageModulationModeNV)) (coverageModulationMode)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (coverageModulationTableEnable))
+    let pCoverageModulationTableLength = Data.Vector.length $ (coverageModulationTable)
+    coverageModulationTableCount'' <- lift $ if (coverageModulationTableCount) == 0
+      then pure $ fromIntegral pCoverageModulationTableLength
+      else do
+        unless (fromIntegral pCoverageModulationTableLength == (coverageModulationTableCount) || pCoverageModulationTableLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pCoverageModulationTable must be empty or have 'coverageModulationTableCount' elements" Nothing Nothing
+        pure (coverageModulationTableCount)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (coverageModulationTableCount'')
+    pCoverageModulationTable'' <- if Data.Vector.null (coverageModulationTable)
+      then pure nullPtr
+      else do
+        pPCoverageModulationTable <- ContT $ allocaBytesAligned @CFloat (((Data.Vector.length (coverageModulationTable))) * 4) 4
+        lift $ Data.Vector.imapM_ (\i e -> poke (pPCoverageModulationTable `plusPtr` (4 * (i)) :: Ptr CFloat) (CFloat (e))) ((coverageModulationTable))
+        pure $ pPCoverageModulationTable
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CFloat))) pCoverageModulationTable''
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 20 :: Ptr CoverageModulationModeNV)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PipelineCoverageModulationStateCreateInfoNV where
+  peekCStruct p = do
+    flags <- peek @PipelineCoverageModulationStateCreateFlagsNV ((p `plusPtr` 16 :: Ptr PipelineCoverageModulationStateCreateFlagsNV))
+    coverageModulationMode <- peek @CoverageModulationModeNV ((p `plusPtr` 20 :: Ptr CoverageModulationModeNV))
+    coverageModulationTableEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
+    coverageModulationTableCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    pCoverageModulationTable <- peek @(Ptr CFloat) ((p `plusPtr` 32 :: Ptr (Ptr CFloat)))
+    let pCoverageModulationTableLength = if pCoverageModulationTable == nullPtr then 0 else (fromIntegral coverageModulationTableCount)
+    pCoverageModulationTable' <- generateM pCoverageModulationTableLength (\i -> do
+      pCoverageModulationTableElem <- peek @CFloat ((pCoverageModulationTable `advancePtrBytes` (4 * (i)) :: Ptr CFloat))
+      pure $ (\(CFloat a) -> a) pCoverageModulationTableElem)
+    pure $ PipelineCoverageModulationStateCreateInfoNV
+             flags coverageModulationMode (bool32ToBool coverageModulationTableEnable) coverageModulationTableCount pCoverageModulationTable'
+
+instance Zero PipelineCoverageModulationStateCreateInfoNV where
+  zero = PipelineCoverageModulationStateCreateInfoNV
+           zero
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkPipelineCoverageModulationStateCreateFlagsNV - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineCoverageModulationStateCreateFlagsNV' is a bitmask type for
+-- setting a mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'PipelineCoverageModulationStateCreateInfoNV'
+newtype PipelineCoverageModulationStateCreateFlagsNV = PipelineCoverageModulationStateCreateFlagsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineCoverageModulationStateCreateFlagsNV where
+  showsPrec p = \case
+    PipelineCoverageModulationStateCreateFlagsNV x -> showParen (p >= 11) (showString "PipelineCoverageModulationStateCreateFlagsNV 0x" . showHex x)
+
+instance Read PipelineCoverageModulationStateCreateFlagsNV where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineCoverageModulationStateCreateFlagsNV")
+                       v <- step readPrec
+                       pure (PipelineCoverageModulationStateCreateFlagsNV v)))
+
+
+-- | VkCoverageModulationModeNV - Specify the coverage modulation mode
+--
+-- = See Also
+--
+-- 'PipelineCoverageModulationStateCreateInfoNV'
+newtype CoverageModulationModeNV = CoverageModulationModeNV Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'COVERAGE_MODULATION_MODE_NONE_NV' specifies that no components are
+-- multiplied by the modulation factor.
+pattern COVERAGE_MODULATION_MODE_NONE_NV = CoverageModulationModeNV 0
+-- | 'COVERAGE_MODULATION_MODE_RGB_NV' specifies that the red, green, and
+-- blue components are multiplied by the modulation factor.
+pattern COVERAGE_MODULATION_MODE_RGB_NV = CoverageModulationModeNV 1
+-- | 'COVERAGE_MODULATION_MODE_ALPHA_NV' specifies that the alpha component
+-- is multiplied by the modulation factor.
+pattern COVERAGE_MODULATION_MODE_ALPHA_NV = CoverageModulationModeNV 2
+-- | 'COVERAGE_MODULATION_MODE_RGBA_NV' specifies that all components are
+-- multiplied by the modulation factor.
+pattern COVERAGE_MODULATION_MODE_RGBA_NV = CoverageModulationModeNV 3
+{-# complete COVERAGE_MODULATION_MODE_NONE_NV,
+             COVERAGE_MODULATION_MODE_RGB_NV,
+             COVERAGE_MODULATION_MODE_ALPHA_NV,
+             COVERAGE_MODULATION_MODE_RGBA_NV :: CoverageModulationModeNV #-}
+
+instance Show CoverageModulationModeNV where
+  showsPrec p = \case
+    COVERAGE_MODULATION_MODE_NONE_NV -> showString "COVERAGE_MODULATION_MODE_NONE_NV"
+    COVERAGE_MODULATION_MODE_RGB_NV -> showString "COVERAGE_MODULATION_MODE_RGB_NV"
+    COVERAGE_MODULATION_MODE_ALPHA_NV -> showString "COVERAGE_MODULATION_MODE_ALPHA_NV"
+    COVERAGE_MODULATION_MODE_RGBA_NV -> showString "COVERAGE_MODULATION_MODE_RGBA_NV"
+    CoverageModulationModeNV x -> showParen (p >= 11) (showString "CoverageModulationModeNV " . showsPrec 11 x)
+
+instance Read CoverageModulationModeNV where
+  readPrec = parens (choose [("COVERAGE_MODULATION_MODE_NONE_NV", pure COVERAGE_MODULATION_MODE_NONE_NV)
+                            , ("COVERAGE_MODULATION_MODE_RGB_NV", pure COVERAGE_MODULATION_MODE_RGB_NV)
+                            , ("COVERAGE_MODULATION_MODE_ALPHA_NV", pure COVERAGE_MODULATION_MODE_ALPHA_NV)
+                            , ("COVERAGE_MODULATION_MODE_RGBA_NV", pure COVERAGE_MODULATION_MODE_RGBA_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CoverageModulationModeNV")
+                       v <- step readPrec
+                       pure (CoverageModulationModeNV v)))
+
+
+type NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION"
+pattern NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION = 1
+
+
+type NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME = "VK_NV_framebuffer_mixed_samples"
+
+-- No documentation found for TopLevel "VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME"
+pattern NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME = "VK_NV_framebuffer_mixed_samples"
+
diff --git a/src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs-boot b/src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_framebuffer_mixed_samples  (PipelineCoverageModulationStateCreateInfoNV) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PipelineCoverageModulationStateCreateInfoNV
+
+instance ToCStruct PipelineCoverageModulationStateCreateInfoNV
+instance Show PipelineCoverageModulationStateCreateInfoNV
+
+instance FromCStruct PipelineCoverageModulationStateCreateInfoNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs b/src/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_geometry_shader_passthrough  ( NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION
+                                                            , pattern NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION
+                                                            , NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME
+                                                            , pattern NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME
+                                                            ) where
+
+import Data.String (IsString)
+
+type NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION"
+pattern NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION = 1
+
+
+type NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME = "VK_NV_geometry_shader_passthrough"
+
+-- No documentation found for TopLevel "VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME"
+pattern NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME = "VK_NV_geometry_shader_passthrough"
+
diff --git a/src/Vulkan/Extensions/VK_NV_glsl_shader.hs b/src/Vulkan/Extensions/VK_NV_glsl_shader.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_glsl_shader.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_glsl_shader  ( NV_GLSL_SHADER_SPEC_VERSION
+                                            , pattern NV_GLSL_SHADER_SPEC_VERSION
+                                            , NV_GLSL_SHADER_EXTENSION_NAME
+                                            , pattern NV_GLSL_SHADER_EXTENSION_NAME
+                                            ) where
+
+import Data.String (IsString)
+
+type NV_GLSL_SHADER_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_GLSL_SHADER_SPEC_VERSION"
+pattern NV_GLSL_SHADER_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_GLSL_SHADER_SPEC_VERSION = 1
+
+
+type NV_GLSL_SHADER_EXTENSION_NAME = "VK_NV_glsl_shader"
+
+-- No documentation found for TopLevel "VK_NV_GLSL_SHADER_EXTENSION_NAME"
+pattern NV_GLSL_SHADER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_GLSL_SHADER_EXTENSION_NAME = "VK_NV_glsl_shader"
+
diff --git a/src/Vulkan/Extensions/VK_NV_mesh_shader.hs b/src/Vulkan/Extensions/VK_NV_mesh_shader.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_mesh_shader.hs
@@ -0,0 +1,1212 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_mesh_shader  ( cmdDrawMeshTasksNV
+                                            , cmdDrawMeshTasksIndirectNV
+                                            , cmdDrawMeshTasksIndirectCountNV
+                                            , PhysicalDeviceMeshShaderFeaturesNV(..)
+                                            , PhysicalDeviceMeshShaderPropertiesNV(..)
+                                            , DrawMeshTasksIndirectCommandNV(..)
+                                            , NV_MESH_SHADER_SPEC_VERSION
+                                            , pattern NV_MESH_SHADER_SPEC_VERSION
+                                            , NV_MESH_SHADER_EXTENSION_NAME
+                                            , pattern NV_MESH_SHADER_EXTENSION_NAME
+                                            ) where
+
+import Vulkan.CStruct.Utils (FixedArray)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.CStruct.Utils (lowerArrayPtr)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawMeshTasksIndirectCountNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawMeshTasksIndirectNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawMeshTasksNV))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawMeshTasksNV
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDrawMeshTasksNV - Draw mesh task work items
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @taskCount@ is the number of local workgroups to dispatch in the X
+--     dimension. Y and Z dimension are implicitly set to one.
+--
+-- -   @firstTask@ is the X component of the first workgroup ID.
+--
+-- = Description
+--
+-- When the command is executed, a global workgroup consisting of
+-- @taskCount@ local workgroups is assembled.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   The current render pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   Image subresources used as attachments in the current render pass
+--     /must/ not be accessed in any way other than as an attachment by
+--     this command
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   If the bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   @taskCount@ /must/ be less than or equal to
+--     'PhysicalDeviceMeshShaderPropertiesNV'::@maxDrawMeshTasksCount@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdDrawMeshTasksNV :: forall io . MonadIO io => CommandBuffer -> ("taskCount" ::: Word32) -> ("firstTask" ::: Word32) -> io ()
+cmdDrawMeshTasksNV commandBuffer taskCount firstTask = liftIO $ do
+  let vkCmdDrawMeshTasksNVPtr = pVkCmdDrawMeshTasksNV (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDrawMeshTasksNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawMeshTasksNV is null" Nothing Nothing
+  let vkCmdDrawMeshTasksNV' = mkVkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNVPtr
+  vkCmdDrawMeshTasksNV' (commandBufferHandle (commandBuffer)) (taskCount) (firstTask)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawMeshTasksIndirectNV
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDrawMeshTasksIndirectNV - Issue an indirect mesh tasks draw into a
+-- command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @buffer@ is the buffer containing draw parameters.
+--
+-- -   @offset@ is the byte offset into @buffer@ where parameters begin.
+--
+-- -   @drawCount@ is the number of draws to execute, and /can/ be zero.
+--
+-- -   @stride@ is the byte stride between successive sets of draw
+--     parameters.
+--
+-- = Description
+--
+-- 'cmdDrawMeshTasksIndirectNV' behaves similarly to 'cmdDrawMeshTasksNV'
+-- 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 'DrawMeshTasksIndirectCommandNV' structures. If
+-- @drawCount@ is less than or equal to one, @stride@ is ignored.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   The current render pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   Image subresources used as attachments in the current render pass
+--     /must/ not be accessed in any way other than as an attachment by
+--     this command
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   If the bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @buffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>
+--     feature is not enabled, @drawCount@ /must/ be @0@ or @1@
+--
+-- -   @drawCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
+--
+-- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
+--     @4@ and /must/ be greater than or equal to
+--     @sizeof@('DrawMeshTasksIndirectCommandNV')
+--
+-- -   If @drawCount@ is equal to @1@, (@offset@ +
+--     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or
+--     equal to the size of @buffer@
+--
+-- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
+--     @offset@ + @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be
+--     less than or equal to the size of @buffer@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdDrawMeshTasksIndirectNV :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
+cmdDrawMeshTasksIndirectNV commandBuffer buffer offset drawCount stride = liftIO $ do
+  let vkCmdDrawMeshTasksIndirectNVPtr = pVkCmdDrawMeshTasksIndirectNV (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDrawMeshTasksIndirectNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawMeshTasksIndirectNV is null" Nothing Nothing
+  let vkCmdDrawMeshTasksIndirectNV' = mkVkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNVPtr
+  vkCmdDrawMeshTasksIndirectNV' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdDrawMeshTasksIndirectCountNV
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdDrawMeshTasksIndirectCountNV - Perform an indirect mesh tasks draw
+-- with the draw count sourced from a buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @buffer@ is the buffer containing draw parameters.
+--
+-- -   @offset@ is the byte offset into @buffer@ where parameters begin.
+--
+-- -   @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
+--
+-- 'cmdDrawMeshTasksIndirectCountNV' behaves similarly to
+-- 'cmdDrawMeshTasksIndirectNV' 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 a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   The current render pass /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
+--     with the @renderPass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the
+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
+--     to
+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   Image subresources used as attachments in the current render pass
+--     /must/ not be accessed in any way other than as an attachment by
+--     this command
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
+--
+-- -   If the bound graphics pipeline was created with
+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to 'Vulkan.Core10.BaseType.TRUE' and the current subpass has a
+--     depth\/stencil attachment, then that attachment /must/ have been
+--     created with the
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
+--     bit set
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @buffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @commandBuffer@ /must/ not be a protected command buffer
+--
+-- -   If @countBuffer@ is non-sparse then it /must/ be bound completely
+--     and contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory'
+--     object
+--
+-- -   @countBuffer@ /must/ have been created with the
+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
+--     bit set
+--
+-- -   @countBufferOffset@ /must/ be a multiple of @4@
+--
+-- -   The count stored in @countBuffer@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@
+--
+-- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or
+--     equal to @sizeof@('DrawMeshTasksIndirectCommandNV')
+--
+-- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×
+--     (@maxDrawCount@ - 1) + @offset@ +
+--     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or
+--     equal to the size of @buffer@
+--
+-- -   If the count stored in @countBuffer@ is equal to @1@, (@offset@ +
+--     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or
+--     equal to the size of @buffer@
+--
+-- -   If the count stored in @countBuffer@ is greater than @1@, (@stride@
+--     × (@drawCount@ - 1) + @offset@ +
+--     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or
+--     equal to the size of @buffer@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @countBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'
+--     handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   This command /must/ only be called inside of a render pass instance
+--
+-- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /must/ have
+--     been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdDrawMeshTasksIndirectCountNV :: forall io . MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
+cmdDrawMeshTasksIndirectCountNV commandBuffer buffer offset countBuffer countBufferOffset maxDrawCount stride = liftIO $ do
+  let vkCmdDrawMeshTasksIndirectCountNVPtr = pVkCmdDrawMeshTasksIndirectCountNV (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdDrawMeshTasksIndirectCountNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawMeshTasksIndirectCountNV is null" Nothing Nothing
+  let vkCmdDrawMeshTasksIndirectCountNV' = mkVkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNVPtr
+  vkCmdDrawMeshTasksIndirectCountNV' (commandBufferHandle (commandBuffer)) (buffer) (offset) (countBuffer) (countBufferOffset) (maxDrawCount) (stride)
+  pure $ ()
+
+
+-- | VkPhysicalDeviceMeshShaderFeaturesNV - Structure describing mesh shading
+-- features that can be supported by an implementation
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceMeshShaderFeaturesNV' structure is included in the
+-- @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with a value indicating whether the feature is supported.
+-- 'PhysicalDeviceMeshShaderFeaturesNV' /can/ also be included in @pNext@
+-- chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceMeshShaderFeaturesNV = PhysicalDeviceMeshShaderFeaturesNV
+  { -- | @taskShader@ indicates whether the task shader stage is supported.
+    taskShader :: Bool
+  , -- | @meshShader@ indicates whether the mesh shader stage is supported.
+    meshShader :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceMeshShaderFeaturesNV
+
+instance ToCStruct PhysicalDeviceMeshShaderFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMeshShaderFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (taskShader))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (meshShader))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceMeshShaderFeaturesNV where
+  peekCStruct p = do
+    taskShader <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    meshShader <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceMeshShaderFeaturesNV
+             (bool32ToBool taskShader) (bool32ToBool meshShader)
+
+instance Storable PhysicalDeviceMeshShaderFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceMeshShaderFeaturesNV where
+  zero = PhysicalDeviceMeshShaderFeaturesNV
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceMeshShaderPropertiesNV - Structure describing mesh
+-- shading properties
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceMeshShaderPropertiesNV' structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceMeshShaderPropertiesNV' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceMeshShaderPropertiesNV = PhysicalDeviceMeshShaderPropertiesNV
+  { -- | @maxDrawMeshTasksCount@ is the maximum number of local workgroups that
+    -- /can/ be launched by a single draw mesh tasks command. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-mesh-shading>.
+    maxDrawMeshTasksCount :: Word32
+  , -- | @maxTaskWorkGroupInvocations@ is the maximum total number of task shader
+    -- invocations in a single local workgroup. The product of the X, Y, and Z
+    -- sizes, as specified by the @LocalSize@ execution mode in shader modules
+    -- or by the object decorated by the @WorkgroupSize@ decoration, /must/ be
+    -- less than or equal to this limit.
+    maxTaskWorkGroupInvocations :: Word32
+  , -- | @maxTaskWorkGroupSize@[3] is the maximum size of a local task workgroup.
+    -- These three values represent the maximum local workgroup size in the X,
+    -- Y, and Z dimensions, respectively. The @x@, @y@, and @z@ sizes, as
+    -- specified by the @LocalSize@ execution mode or by the object decorated
+    -- by the @WorkgroupSize@ decoration in shader modules, /must/ be less than
+    -- or equal to the corresponding limit.
+    maxTaskWorkGroupSize :: (Word32, Word32, Word32)
+  , -- | @maxTaskTotalMemorySize@ is the maximum number of bytes that the task
+    -- shader can use in total for shared and output memory combined.
+    maxTaskTotalMemorySize :: Word32
+  , -- | @maxTaskOutputCount@ is the maximum number of output tasks a single task
+    -- shader workgroup can emit.
+    maxTaskOutputCount :: Word32
+  , -- | @maxMeshWorkGroupInvocations@ is the maximum total number of mesh shader
+    -- invocations in a single local workgroup. The product of the X, Y, and Z
+    -- sizes, as specified by the @LocalSize@ execution mode in shader modules
+    -- or by the object decorated by the @WorkgroupSize@ decoration, /must/ be
+    -- less than or equal to this limit.
+    maxMeshWorkGroupInvocations :: Word32
+  , -- | @maxMeshWorkGroupSize@[3] is the maximum size of a local mesh workgroup.
+    -- These three values represent the maximum local workgroup size in the X,
+    -- Y, and Z dimensions, respectively. The @x@, @y@, and @z@ sizes, as
+    -- specified by the @LocalSize@ execution mode or by the object decorated
+    -- by the @WorkgroupSize@ decoration in shader modules, /must/ be less than
+    -- or equal to the corresponding limit.
+    maxMeshWorkGroupSize :: (Word32, Word32, Word32)
+  , -- | @maxMeshTotalMemorySize@ is the maximum number of bytes that the mesh
+    -- shader can use in total for shared and output memory combined.
+    maxMeshTotalMemorySize :: Word32
+  , -- | @maxMeshOutputVertices@ is the maximum number of vertices a mesh shader
+    -- output can store.
+    maxMeshOutputVertices :: Word32
+  , -- | @maxMeshOutputPrimitives@ is the maximum number of primitives a mesh
+    -- shader output can store.
+    maxMeshOutputPrimitives :: Word32
+  , -- | @maxMeshMultiviewViewCount@ is the maximum number of multi-view views a
+    -- mesh shader can use.
+    maxMeshMultiviewViewCount :: Word32
+  , -- | @meshOutputPerVertexGranularity@ is the granularity with which mesh
+    -- vertex outputs are allocated. The value can be used to compute the
+    -- memory size used by the mesh shader, which must be less than or equal to
+    -- @maxMeshTotalMemorySize@.
+    meshOutputPerVertexGranularity :: Word32
+  , -- | @meshOutputPerPrimitiveGranularity@ is the granularity with which mesh
+    -- outputs qualified as per-primitive are allocated. The value can be used
+    -- to compute the memory size used by the mesh shader, which must be less
+    -- than or equal to @maxMeshTotalMemorySize@.
+    meshOutputPerPrimitiveGranularity :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceMeshShaderPropertiesNV
+
+instance ToCStruct PhysicalDeviceMeshShaderPropertiesNV where
+  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceMeshShaderPropertiesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (maxDrawMeshTasksCount)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxTaskWorkGroupInvocations)
+    let pMaxTaskWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 3 Word32)))
+    case (maxTaskWorkGroupSize) of
+      (e0, e1, e2) -> do
+        poke (pMaxTaskWorkGroupSize' :: Ptr Word32) (e0)
+        poke (pMaxTaskWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
+        poke (pMaxTaskWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
+    poke ((p `plusPtr` 36 :: Ptr Word32)) (maxTaskTotalMemorySize)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (maxTaskOutputCount)
+    poke ((p `plusPtr` 44 :: Ptr Word32)) (maxMeshWorkGroupInvocations)
+    let pMaxMeshWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 48 :: Ptr (FixedArray 3 Word32)))
+    case (maxMeshWorkGroupSize) of
+      (e0, e1, e2) -> do
+        poke (pMaxMeshWorkGroupSize' :: Ptr Word32) (e0)
+        poke (pMaxMeshWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
+        poke (pMaxMeshWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
+    poke ((p `plusPtr` 60 :: Ptr Word32)) (maxMeshTotalMemorySize)
+    poke ((p `plusPtr` 64 :: Ptr Word32)) (maxMeshOutputVertices)
+    poke ((p `plusPtr` 68 :: Ptr Word32)) (maxMeshOutputPrimitives)
+    poke ((p `plusPtr` 72 :: Ptr Word32)) (maxMeshMultiviewViewCount)
+    poke ((p `plusPtr` 76 :: Ptr Word32)) (meshOutputPerVertexGranularity)
+    poke ((p `plusPtr` 80 :: Ptr Word32)) (meshOutputPerPrimitiveGranularity)
+    f
+  cStructSize = 88
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    let pMaxTaskWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 3 Word32)))
+    case ((zero, zero, zero)) of
+      (e0, e1, e2) -> do
+        poke (pMaxTaskWorkGroupSize' :: Ptr Word32) (e0)
+        poke (pMaxTaskWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
+        poke (pMaxTaskWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
+    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
+    let pMaxMeshWorkGroupSize' = lowerArrayPtr ((p `plusPtr` 48 :: Ptr (FixedArray 3 Word32)))
+    case ((zero, zero, zero)) of
+      (e0, e1, e2) -> do
+        poke (pMaxMeshWorkGroupSize' :: Ptr Word32) (e0)
+        poke (pMaxMeshWorkGroupSize' `plusPtr` 4 :: Ptr Word32) (e1)
+        poke (pMaxMeshWorkGroupSize' `plusPtr` 8 :: Ptr Word32) (e2)
+    poke ((p `plusPtr` 60 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 64 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 68 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 72 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 76 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 80 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceMeshShaderPropertiesNV where
+  peekCStruct p = do
+    maxDrawMeshTasksCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxTaskWorkGroupInvocations <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    let pmaxTaskWorkGroupSize = lowerArrayPtr @Word32 ((p `plusPtr` 24 :: Ptr (FixedArray 3 Word32)))
+    maxTaskWorkGroupSize0 <- peek @Word32 ((pmaxTaskWorkGroupSize `advancePtrBytes` 0 :: Ptr Word32))
+    maxTaskWorkGroupSize1 <- peek @Word32 ((pmaxTaskWorkGroupSize `advancePtrBytes` 4 :: Ptr Word32))
+    maxTaskWorkGroupSize2 <- peek @Word32 ((pmaxTaskWorkGroupSize `advancePtrBytes` 8 :: Ptr Word32))
+    maxTaskTotalMemorySize <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
+    maxTaskOutputCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
+    maxMeshWorkGroupInvocations <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
+    let pmaxMeshWorkGroupSize = lowerArrayPtr @Word32 ((p `plusPtr` 48 :: Ptr (FixedArray 3 Word32)))
+    maxMeshWorkGroupSize0 <- peek @Word32 ((pmaxMeshWorkGroupSize `advancePtrBytes` 0 :: Ptr Word32))
+    maxMeshWorkGroupSize1 <- peek @Word32 ((pmaxMeshWorkGroupSize `advancePtrBytes` 4 :: Ptr Word32))
+    maxMeshWorkGroupSize2 <- peek @Word32 ((pmaxMeshWorkGroupSize `advancePtrBytes` 8 :: Ptr Word32))
+    maxMeshTotalMemorySize <- peek @Word32 ((p `plusPtr` 60 :: Ptr Word32))
+    maxMeshOutputVertices <- peek @Word32 ((p `plusPtr` 64 :: Ptr Word32))
+    maxMeshOutputPrimitives <- peek @Word32 ((p `plusPtr` 68 :: Ptr Word32))
+    maxMeshMultiviewViewCount <- peek @Word32 ((p `plusPtr` 72 :: Ptr Word32))
+    meshOutputPerVertexGranularity <- peek @Word32 ((p `plusPtr` 76 :: Ptr Word32))
+    meshOutputPerPrimitiveGranularity <- peek @Word32 ((p `plusPtr` 80 :: Ptr Word32))
+    pure $ PhysicalDeviceMeshShaderPropertiesNV
+             maxDrawMeshTasksCount maxTaskWorkGroupInvocations ((maxTaskWorkGroupSize0, maxTaskWorkGroupSize1, maxTaskWorkGroupSize2)) maxTaskTotalMemorySize maxTaskOutputCount maxMeshWorkGroupInvocations ((maxMeshWorkGroupSize0, maxMeshWorkGroupSize1, maxMeshWorkGroupSize2)) maxMeshTotalMemorySize maxMeshOutputVertices maxMeshOutputPrimitives maxMeshMultiviewViewCount meshOutputPerVertexGranularity meshOutputPerPrimitiveGranularity
+
+instance Storable PhysicalDeviceMeshShaderPropertiesNV where
+  sizeOf ~_ = 88
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceMeshShaderPropertiesNV where
+  zero = PhysicalDeviceMeshShaderPropertiesNV
+           zero
+           zero
+           (zero, zero, zero)
+           zero
+           zero
+           zero
+           (zero, zero, zero)
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkDrawMeshTasksIndirectCommandNV - Structure specifying a mesh tasks
+-- draw indirect command
+--
+-- = Description
+--
+-- The members of 'DrawMeshTasksIndirectCommandNV' have the same meaning as
+-- the similarly named parameters of 'cmdDrawMeshTasksNV'.
+--
+-- == Valid Usage
+--
+-- = See Also
+--
+-- 'cmdDrawMeshTasksIndirectNV'
+data DrawMeshTasksIndirectCommandNV = DrawMeshTasksIndirectCommandNV
+  { -- | @taskCount@ /must/ be less than or equal to
+    -- 'PhysicalDeviceMeshShaderPropertiesNV'::@maxDrawMeshTasksCount@
+    taskCount :: Word32
+  , -- | @firstTask@ is the X component of the first workgroup ID.
+    firstTask :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show DrawMeshTasksIndirectCommandNV
+
+instance ToCStruct DrawMeshTasksIndirectCommandNV where
+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p DrawMeshTasksIndirectCommandNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (taskCount)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (firstTask)
+    f
+  cStructSize = 8
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct DrawMeshTasksIndirectCommandNV where
+  peekCStruct p = do
+    taskCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    firstTask <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    pure $ DrawMeshTasksIndirectCommandNV
+             taskCount firstTask
+
+instance Storable DrawMeshTasksIndirectCommandNV where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero DrawMeshTasksIndirectCommandNV where
+  zero = DrawMeshTasksIndirectCommandNV
+           zero
+           zero
+
+
+type NV_MESH_SHADER_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_MESH_SHADER_SPEC_VERSION"
+pattern NV_MESH_SHADER_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_MESH_SHADER_SPEC_VERSION = 1
+
+
+type NV_MESH_SHADER_EXTENSION_NAME = "VK_NV_mesh_shader"
+
+-- No documentation found for TopLevel "VK_NV_MESH_SHADER_EXTENSION_NAME"
+pattern NV_MESH_SHADER_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_MESH_SHADER_EXTENSION_NAME = "VK_NV_mesh_shader"
+
diff --git a/src/Vulkan/Extensions/VK_NV_mesh_shader.hs-boot b/src/Vulkan/Extensions/VK_NV_mesh_shader.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_mesh_shader.hs-boot
@@ -0,0 +1,32 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_mesh_shader  ( DrawMeshTasksIndirectCommandNV
+                                            , PhysicalDeviceMeshShaderFeaturesNV
+                                            , PhysicalDeviceMeshShaderPropertiesNV
+                                            ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data DrawMeshTasksIndirectCommandNV
+
+instance ToCStruct DrawMeshTasksIndirectCommandNV
+instance Show DrawMeshTasksIndirectCommandNV
+
+instance FromCStruct DrawMeshTasksIndirectCommandNV
+
+
+data PhysicalDeviceMeshShaderFeaturesNV
+
+instance ToCStruct PhysicalDeviceMeshShaderFeaturesNV
+instance Show PhysicalDeviceMeshShaderFeaturesNV
+
+instance FromCStruct PhysicalDeviceMeshShaderFeaturesNV
+
+
+data PhysicalDeviceMeshShaderPropertiesNV
+
+instance ToCStruct PhysicalDeviceMeshShaderPropertiesNV
+instance Show PhysicalDeviceMeshShaderPropertiesNV
+
+instance FromCStruct PhysicalDeviceMeshShaderPropertiesNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_ray_tracing.hs b/src/Vulkan/Extensions/VK_NV_ray_tracing.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_ray_tracing.hs
@@ -0,0 +1,2641 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_ray_tracing  ( compileDeferredNV
+                                            , createAccelerationStructureNV
+                                            , getAccelerationStructureMemoryRequirementsNV
+                                            , cmdCopyAccelerationStructureNV
+                                            , cmdBuildAccelerationStructureNV
+                                            , cmdTraceRaysNV
+                                            , getAccelerationStructureHandleNV
+                                            , createRayTracingPipelinesNV
+                                            , pattern STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV
+                                            , pattern STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV
+                                            , pattern SHADER_STAGE_RAYGEN_BIT_NV
+                                            , pattern SHADER_STAGE_ANY_HIT_BIT_NV
+                                            , pattern SHADER_STAGE_CLOSEST_HIT_BIT_NV
+                                            , pattern SHADER_STAGE_MISS_BIT_NV
+                                            , pattern SHADER_STAGE_INTERSECTION_BIT_NV
+                                            , pattern SHADER_STAGE_CALLABLE_BIT_NV
+                                            , pattern PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV
+                                            , pattern PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV
+                                            , pattern BUFFER_USAGE_RAY_TRACING_BIT_NV
+                                            , pattern PIPELINE_BIND_POINT_RAY_TRACING_NV
+                                            , pattern DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV
+                                            , pattern ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV
+                                            , pattern ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV
+                                            , pattern QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
+                                            , pattern OBJECT_TYPE_ACCELERATION_STRUCTURE_NV
+                                            , pattern DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT
+                                            , pattern INDEX_TYPE_NONE_NV
+                                            , pattern RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV
+                                            , pattern RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV
+                                            , pattern RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV
+                                            , pattern GEOMETRY_TYPE_TRIANGLES_NV
+                                            , pattern GEOMETRY_TYPE_AABBS_NV
+                                            , pattern ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV
+                                            , pattern ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV
+                                            , pattern GEOMETRY_OPAQUE_BIT_NV
+                                            , pattern GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV
+                                            , pattern GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV
+                                            , pattern GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV
+                                            , pattern GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV
+                                            , pattern GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV
+                                            , pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV
+                                            , pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV
+                                            , pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV
+                                            , pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV
+                                            , pattern BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV
+                                            , pattern COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV
+                                            , pattern COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV
+                                            , pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
+                                            , pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV
+                                            , pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV
+                                            , destroyAccelerationStructureNV
+                                            , bindAccelerationStructureMemoryNV
+                                            , cmdWriteAccelerationStructuresPropertiesNV
+                                            , getRayTracingShaderGroupHandlesNV
+                                            , pattern SHADER_UNUSED_NV
+                                            , RayTracingShaderGroupCreateInfoNV(..)
+                                            , RayTracingPipelineCreateInfoNV(..)
+                                            , GeometryTrianglesNV(..)
+                                            , GeometryAABBNV(..)
+                                            , GeometryDataNV(..)
+                                            , GeometryNV(..)
+                                            , AccelerationStructureInfoNV(..)
+                                            , AccelerationStructureCreateInfoNV(..)
+                                            , AccelerationStructureMemoryRequirementsInfoNV(..)
+                                            , PhysicalDeviceRayTracingPropertiesNV(..)
+                                            , GeometryFlagsNV
+                                            , GeometryInstanceFlagsNV
+                                            , BuildAccelerationStructureFlagsNV
+                                            , AccelerationStructureNV
+                                            , GeometryFlagBitsNV
+                                            , GeometryInstanceFlagBitsNV
+                                            , BuildAccelerationStructureFlagBitsNV
+                                            , CopyAccelerationStructureModeNV
+                                            , AccelerationStructureTypeNV
+                                            , GeometryTypeNV
+                                            , RayTracingShaderGroupTypeNV
+                                            , AccelerationStructureMemoryRequirementsTypeNV
+                                            , BindAccelerationStructureMemoryInfoNV
+                                            , WriteDescriptorSetAccelerationStructureNV
+                                            , AabbPositionsNV
+                                            , TransformMatrixNV
+                                            , AccelerationStructureInstanceNV
+                                            , NV_RAY_TRACING_SPEC_VERSION
+                                            , pattern NV_RAY_TRACING_SPEC_VERSION
+                                            , NV_RAY_TRACING_EXTENSION_NAME
+                                            , pattern NV_RAY_TRACING_EXTENSION_NAME
+                                            , AccelerationStructureKHR(..)
+                                            , BindAccelerationStructureMemoryInfoKHR(..)
+                                            , WriteDescriptorSetAccelerationStructureKHR(..)
+                                            , AabbPositionsKHR(..)
+                                            , TransformMatrixKHR(..)
+                                            , AccelerationStructureInstanceKHR(..)
+                                            , destroyAccelerationStructureKHR
+                                            , bindAccelerationStructureMemoryKHR
+                                            , cmdWriteAccelerationStructuresPropertiesKHR
+                                            , getRayTracingShaderGroupHandlesKHR
+                                            , DebugReportObjectTypeEXT(..)
+                                            , GeometryInstanceFlagBitsKHR(..)
+                                            , GeometryInstanceFlagsKHR
+                                            , GeometryFlagBitsKHR(..)
+                                            , GeometryFlagsKHR
+                                            , BuildAccelerationStructureFlagBitsKHR(..)
+                                            , BuildAccelerationStructureFlagsKHR
+                                            , CopyAccelerationStructureModeKHR(..)
+                                            , AccelerationStructureTypeKHR(..)
+                                            , GeometryTypeKHR(..)
+                                            , AccelerationStructureMemoryRequirementsTypeKHR(..)
+                                            , RayTracingShaderGroupTypeKHR(..)
+                                            , SHADER_UNUSED_KHR
+                                            , pattern SHADER_UNUSED_KHR
+                                            ) where
+
+import Control.Exception.Base (bracket)
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Data.Typeable (eqT)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Marshal.Alloc (callocBytes)
+import Foreign.Marshal.Alloc (free)
+import GHC.Base (when)
+import GHC.IO (throwIO)
+import GHC.Ptr (castPtr)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Foreign.C.Types (CSize(..))
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Type.Equality ((:~:)(Refl))
+import Data.Typeable (Typeable)
+import Foreign.C.Types (CSize)
+import Foreign.C.Types (CSize(CSize))
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Extensions.VK_KHR_ray_tracing (bindAccelerationStructureMemoryKHR)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Extensions.VK_KHR_ray_tracing (cmdWriteAccelerationStructuresPropertiesKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (destroyAccelerationStructureKHR)
+import Vulkan.CStruct.Extends (forgetExtensions)
+import Vulkan.Extensions.VK_KHR_ray_tracing (getRayTracingShaderGroupHandlesKHR)
+import Vulkan.CStruct.Extends (peekSomeCStruct)
+import Vulkan.CStruct.Extends (pokeSomeCStruct)
+import Vulkan.NamedType ((:::))
+import Vulkan.Extensions.VK_KHR_ray_tracing (AabbPositionsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureInstanceKHR)
+import Vulkan.Extensions.Handles (AccelerationStructureKHR)
+import Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsTypeKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureTypeKHR)
+import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
+import Vulkan.Extensions.VK_KHR_ray_tracing (BindAccelerationStructureMemoryInfoKHR)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.BaseType (Bool32(..))
+import Vulkan.Core10.Handles (Buffer)
+import Vulkan.Core10.Handles (Buffer(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
+import Vulkan.CStruct.Extends (Chain)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR(..))
+import Vulkan.Core10.Handles (Device)
+import Vulkan.Core10.Handles (Device(..))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBuildAccelerationStructureNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyAccelerationStructureNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdTraceRaysNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCompileDeferredNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateAccelerationStructureNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCreateRayTracingPipelinesNV))
+import Vulkan.Dynamic (DeviceCmds(pVkGetAccelerationStructureHandleNV))
+import Vulkan.Dynamic (DeviceCmds(pVkGetAccelerationStructureMemoryRequirementsNV))
+import Vulkan.Core10.BaseType (DeviceSize)
+import Vulkan.Core10.Handles (Device_T)
+import Vulkan.CStruct.Extends (Extends)
+import Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct.Extends (Extensible(..))
+import Vulkan.Core10.Enums.Format (Format)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagBitsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryTypeKHR)
+import Vulkan.Core10.Enums.IndexType (IndexType)
+import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2KHR)
+import Vulkan.CStruct.Extends (PeekChain)
+import Vulkan.CStruct.Extends (PeekChain(..))
+import Vulkan.Core10.Handles (Pipeline)
+import Vulkan.Core10.Handles (Pipeline(..))
+import Vulkan.Core10.Handles (PipelineCache)
+import Vulkan.Core10.Handles (PipelineCache(..))
+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfoEXT)
+import Vulkan.Core10.Handles (PipelineLayout)
+import Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)
+import Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct.Extends (PokeChain(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupTypeKHR)
+import Vulkan.Core10.Enums.Result (Result)
+import Vulkan.Core10.Enums.Result (Result(..))
+import Vulkan.CStruct.Extends (SomeStruct)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (TransformMatrixKHR)
+import Vulkan.Exception (VulkanException(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (WriteDescriptorSetAccelerationStructureKHR)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsTypeKHR(ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsTypeKHR(ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsTypeKHR(ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureTypeKHR(ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureTypeKHR(ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR))
+import Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
+import Vulkan.Core10.Enums.AccessFlagBits (AccessFlagBits(ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR))
+import Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
+import Vulkan.Core10.Enums.AccessFlagBits (AccessFlagBits(ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR))
+import Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlags)
+import Vulkan.Core10.Enums.BufferUsageFlagBits (BufferUsageFlagBits(BUFFER_USAGE_RAY_TRACING_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR(COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR(COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR))
+import Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT))
+import Vulkan.Core10.Enums.DescriptorType (DescriptorType(DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR(GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR(GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR(GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR(GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagBitsKHR(GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagBitsKHR(GEOMETRY_OPAQUE_BIT_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryTypeKHR(GEOMETRY_TYPE_AABBS_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryTypeKHR(GEOMETRY_TYPE_TRIANGLES_KHR))
+import Vulkan.Core10.Enums.IndexType (IndexType(INDEX_TYPE_NONE_KHR))
+import Vulkan.Core10.Enums.ObjectType (ObjectType(OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR))
+import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint(PIPELINE_BIND_POINT_RAY_TRACING_KHR))
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits(PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR))
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
+import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits(PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR))
+import Vulkan.Core10.Enums.QueryType (QueryType(QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupTypeKHR(RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupTypeKHR(RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR))
+import Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupTypeKHR(RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_ANY_HIT_BIT_KHR))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_CALLABLE_BIT_KHR))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_CLOSEST_HIT_BIT_KHR))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_INTERSECTION_BIT_KHR))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_MISS_BIT_KHR))
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(SHADER_STAGE_RAYGEN_BIT_KHR))
+import Vulkan.Core10.APIConstants (pattern SHADER_UNUSED_KHR)
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GEOMETRY_AABB_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GEOMETRY_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR))
+import Vulkan.Core10.Enums.Result (Result(SUCCESS))
+import Vulkan.Extensions.VK_KHR_ray_tracing (bindAccelerationStructureMemoryKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (cmdWriteAccelerationStructuresPropertiesKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (destroyAccelerationStructureKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (getRayTracingShaderGroupHandlesKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (AabbPositionsKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureInstanceKHR(..))
+import Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureMemoryRequirementsTypeKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (AccelerationStructureTypeKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (BindAccelerationStructureMemoryInfoKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (BuildAccelerationStructureFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (CopyAccelerationStructureModeKHR(..))
+import Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryInstanceFlagsKHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (GeometryTypeKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (RayTracingShaderGroupTypeKHR(..))
+import Vulkan.Core10.APIConstants (SHADER_UNUSED_KHR)
+import Vulkan.Extensions.VK_KHR_ray_tracing (TransformMatrixKHR(..))
+import Vulkan.Extensions.VK_KHR_ray_tracing (WriteDescriptorSetAccelerationStructureKHR(..))
+import Vulkan.Core10.APIConstants (pattern SHADER_UNUSED_KHR)
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCompileDeferredNV
+  :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> IO Result
+
+-- | vkCompileDeferredNV - Deferred compilation of shaders
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device containing the ray tracing pipeline.
+--
+-- -   @pipeline@ is the ray tracing pipeline object containing the
+--     shaders.
+--
+-- -   @shader@ is the index of the shader to compile.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'
+compileDeferredNV :: forall io . MonadIO io => Device -> Pipeline -> ("shader" ::: Word32) -> io ()
+compileDeferredNV device pipeline shader = liftIO $ do
+  let vkCompileDeferredNVPtr = pVkCompileDeferredNV (deviceCmds (device :: Device))
+  unless (vkCompileDeferredNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCompileDeferredNV is null" Nothing Nothing
+  let vkCompileDeferredNV' = mkVkCompileDeferredNV vkCompileDeferredNVPtr
+  r <- vkCompileDeferredNV' (deviceHandle (device)) (pipeline) (shader)
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateAccelerationStructureNV
+  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureCreateInfoNV -> Ptr AllocationCallbacks -> Ptr AccelerationStructureNV -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureCreateInfoNV -> Ptr AllocationCallbacks -> Ptr AccelerationStructureNV -> IO Result
+
+-- | vkCreateAccelerationStructureNV - Create a new acceleration structure
+-- object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the buffer object.
+--
+-- -   @pCreateInfo@ is a pointer to a 'AccelerationStructureCreateInfoNV'
+--     structure containing parameters affecting creation of the
+--     acceleration structure.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pAccelerationStructure@ is a pointer to a 'AccelerationStructureNV'
+--     handle in which the resulting acceleration structure object is
+--     returned.
+--
+-- = Description
+--
+-- Similar to other objects in Vulkan, the acceleration structure creation
+-- merely creates an object with a specific “shape” as specified by the
+-- information in 'AccelerationStructureInfoNV' and @compactedSize@ in
+-- @pCreateInfo@. Populating the data in the object after allocating and
+-- binding memory is done with 'cmdBuildAccelerationStructureNV' and
+-- 'cmdCopyAccelerationStructureNV'.
+--
+-- Acceleration structure creation uses the count and type information from
+-- the geometries, but does not use the data references in the structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     'AccelerationStructureCreateInfoNV' structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pAccelerationStructure@ /must/ be a valid pointer to a
+--     'AccelerationStructureNV' handle
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+-- = See Also
+--
+-- 'AccelerationStructureCreateInfoNV', 'AccelerationStructureNV',
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device'
+createAccelerationStructureNV :: forall io . MonadIO io => Device -> AccelerationStructureCreateInfoNV -> ("allocator" ::: Maybe AllocationCallbacks) -> io (AccelerationStructureNV)
+createAccelerationStructureNV device createInfo allocator = liftIO . evalContT $ do
+  let vkCreateAccelerationStructureNVPtr = pVkCreateAccelerationStructureNV (deviceCmds (device :: Device))
+  lift $ unless (vkCreateAccelerationStructureNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateAccelerationStructureNV is null" Nothing Nothing
+  let vkCreateAccelerationStructureNV' = mkVkCreateAccelerationStructureNV vkCreateAccelerationStructureNVPtr
+  pCreateInfo <- ContT $ withCStruct (createInfo)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPAccelerationStructure <- ContT $ bracket (callocBytes @AccelerationStructureNV 8) free
+  r <- lift $ vkCreateAccelerationStructureNV' (deviceHandle (device)) pCreateInfo pAllocator (pPAccelerationStructure)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pAccelerationStructure <- lift $ peek @AccelerationStructureNV pPAccelerationStructure
+  pure $ (pAccelerationStructure)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetAccelerationStructureMemoryRequirementsNV
+  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoNV -> Ptr (MemoryRequirements2KHR a) -> IO ()) -> Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoNV -> Ptr (MemoryRequirements2KHR a) -> IO ()
+
+-- | vkGetAccelerationStructureMemoryRequirementsNV - Get acceleration
+-- structure memory requirements
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device on which the acceleration structure
+--     was created.
+--
+-- -   @pInfo@ specifies the acceleration structure to get memory
+--     requirements for.
+--
+-- -   @pMemoryRequirements@ returns the requested acceleration structure
+--     memory requirements.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'AccelerationStructureMemoryRequirementsInfoNV',
+-- 'Vulkan.Core10.Handles.Device',
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2KHR'
+getAccelerationStructureMemoryRequirementsNV :: forall a io . (Extendss MemoryRequirements2KHR a, PokeChain a, PeekChain a, MonadIO io) => Device -> AccelerationStructureMemoryRequirementsInfoNV -> io (MemoryRequirements2KHR a)
+getAccelerationStructureMemoryRequirementsNV device info = liftIO . evalContT $ do
+  let vkGetAccelerationStructureMemoryRequirementsNVPtr = pVkGetAccelerationStructureMemoryRequirementsNV (deviceCmds (device :: Device))
+  lift $ unless (vkGetAccelerationStructureMemoryRequirementsNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetAccelerationStructureMemoryRequirementsNV is null" Nothing Nothing
+  let vkGetAccelerationStructureMemoryRequirementsNV' = mkVkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNVPtr
+  pInfo <- ContT $ withCStruct (info)
+  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2KHR _))
+  lift $ vkGetAccelerationStructureMemoryRequirementsNV' (deviceHandle (device)) pInfo (pPMemoryRequirements)
+  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2KHR _) pPMemoryRequirements
+  pure $ (pMemoryRequirements)
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdCopyAccelerationStructureNV
+  :: FunPtr (Ptr CommandBuffer_T -> AccelerationStructureKHR -> AccelerationStructureKHR -> CopyAccelerationStructureModeKHR -> IO ()) -> Ptr CommandBuffer_T -> AccelerationStructureKHR -> AccelerationStructureKHR -> CopyAccelerationStructureModeKHR -> IO ()
+
+-- | vkCmdCopyAccelerationStructureNV - Copy an acceleration structure
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @dst@ is a pointer to the target acceleration structure for the
+--     copy.
+--
+-- -   @src@ is a pointer to the source acceleration structure for the
+--     copy.
+--
+-- -   @mode@ is a
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureModeKHR'
+--     value specifying additional operations to perform during the copy.
+--
+-- == Valid Usage
+--
+-- -   @mode@ /must/ be
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR'
+--     or
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR'
+--
+-- -   @src@ /must/ have been built with
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR'
+--     if @mode@ is
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @dst@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   @src@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   @mode@ /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureModeKHR'
+--     value
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Each of @commandBuffer@, @dst@, and @src@ /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureModeKHR'
+cmdCopyAccelerationStructureNV :: forall io . MonadIO io => CommandBuffer -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> CopyAccelerationStructureModeKHR -> io ()
+cmdCopyAccelerationStructureNV commandBuffer dst src mode = liftIO $ do
+  let vkCmdCopyAccelerationStructureNVPtr = pVkCmdCopyAccelerationStructureNV (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdCopyAccelerationStructureNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyAccelerationStructureNV is null" Nothing Nothing
+  let vkCmdCopyAccelerationStructureNV' = mkVkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNVPtr
+  vkCmdCopyAccelerationStructureNV' (commandBufferHandle (commandBuffer)) (dst) (src) (mode)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBuildAccelerationStructureNV
+  :: FunPtr (Ptr CommandBuffer_T -> Ptr AccelerationStructureInfoNV -> Buffer -> DeviceSize -> Bool32 -> AccelerationStructureKHR -> AccelerationStructureKHR -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Ptr AccelerationStructureInfoNV -> Buffer -> DeviceSize -> Bool32 -> AccelerationStructureKHR -> AccelerationStructureKHR -> Buffer -> DeviceSize -> IO ()
+
+-- | vkCmdBuildAccelerationStructureNV - Build an acceleration structure
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pInfo@ contains the shared information for the acceleration
+--     structure’s structure.
+--
+-- -   @instanceData@ is the buffer containing an array of
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.AccelerationStructureInstanceKHR'
+--     structures defining acceleration structures. This parameter /must/
+--     be @NULL@ for bottom level acceleration structures.
+--
+-- -   @instanceOffset@ is the offset in bytes (relative to the start of
+--     @instanceData@) at which the instance data is located.
+--
+-- -   @update@ specifies whether to update the @dst@ acceleration
+--     structure with the data in @src@.
+--
+-- -   @dst@ is a pointer to the target acceleration structure for the
+--     build.
+--
+-- -   @src@ is a pointer to an existing acceleration structure that is to
+--     be used to update the @dst@ acceleration structure.
+--
+-- -   @scratch@ is the 'Vulkan.Core10.Handles.Buffer' that will be used as
+--     scratch memory for the build.
+--
+-- -   @scratchOffset@ is the offset in bytes relative to the start of
+--     @scratch@ that will be used as a scratch memory.
+--
+-- == Valid Usage
+--
+-- -   @geometryCount@ /must/ be less than or equal to
+--     'PhysicalDeviceRayTracingPropertiesNV'::@maxGeometryCount@
+--
+-- -   @dst@ /must/ have been created with compatible
+--     'AccelerationStructureInfoNV' where
+--     'AccelerationStructureInfoNV'::@type@ and
+--     'AccelerationStructureInfoNV'::@flags@ are identical,
+--     'AccelerationStructureInfoNV'::@instanceCount@ and
+--     'AccelerationStructureInfoNV'::@geometryCount@ for @dst@ are greater
+--     than or equal to the build size and each geometry in
+--     'AccelerationStructureInfoNV'::@pGeometries@ for @dst@ has greater
+--     than or equal to the number of vertices, indices, and AABBs
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.TRUE', @src@ /must/ not be
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.TRUE', @src@ /must/ have been
+--     built before with 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV'
+--     set in 'AccelerationStructureInfoNV'::@flags@
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.FALSE', the @size@ member of
+--     the 'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'getAccelerationStructureMemoryRequirementsNV' with
+--     'AccelerationStructureMemoryRequirementsInfoNV'::@accelerationStructure@
+--     set to @dst@ and
+--     'AccelerationStructureMemoryRequirementsInfoNV'::@type@ set to
+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV'
+--     /must/ be less than or equal to the size of @scratch@ minus
+--     @scratchOffset@
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.TRUE', the @size@ member of
+--     the 'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
+--     returned from a call to
+--     'getAccelerationStructureMemoryRequirementsNV' with
+--     'AccelerationStructureMemoryRequirementsInfoNV'::@accelerationStructure@
+--     set to @dst@ and
+--     'AccelerationStructureMemoryRequirementsInfoNV'::@type@ set to
+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV'
+--     /must/ be less than or equal to the size of @scratch@ minus
+--     @scratchOffset@
+--
+-- -   @scratch@ /must/ have been created with
+--     'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag
+--
+-- -   If @instanceData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @instanceData@ /must/ have been created with
+--     'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.TRUE', then objects that were
+--     previously active /must/ not be made inactive as per
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims>
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.TRUE', then objects that were
+--     previously inactive /must/ not be made active as per
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims>
+--
+-- -   If @update@ is 'Vulkan.Core10.BaseType.TRUE', the @src@ and @dst@
+--     objects /must/ either be the same object or not have any
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     'AccelerationStructureInfoNV' structure
+--
+-- -   If @instanceData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @instanceData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'
+--     handle
+--
+-- -   @dst@ /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   If @src@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @src@
+--     /must/ be a valid
+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
+--
+-- -   @scratch@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Each of @commandBuffer@, @dst@, @instanceData@, @scratch@, and @src@
+--     that are valid handles of non-ignored parameters /must/ have been
+--     created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'AccelerationStructureInfoNV',
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'Vulkan.Core10.BaseType.Bool32', 'Vulkan.Core10.Handles.Buffer',
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdBuildAccelerationStructureNV :: forall io . MonadIO io => CommandBuffer -> AccelerationStructureInfoNV -> ("instanceData" ::: Buffer) -> ("instanceOffset" ::: DeviceSize) -> ("update" ::: Bool) -> ("dst" ::: AccelerationStructureKHR) -> ("src" ::: AccelerationStructureKHR) -> ("scratch" ::: Buffer) -> ("scratchOffset" ::: DeviceSize) -> io ()
+cmdBuildAccelerationStructureNV commandBuffer info instanceData instanceOffset update dst src scratch scratchOffset = liftIO . evalContT $ do
+  let vkCmdBuildAccelerationStructureNVPtr = pVkCmdBuildAccelerationStructureNV (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdBuildAccelerationStructureNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBuildAccelerationStructureNV is null" Nothing Nothing
+  let vkCmdBuildAccelerationStructureNV' = mkVkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNVPtr
+  pInfo <- ContT $ withCStruct (info)
+  lift $ vkCmdBuildAccelerationStructureNV' (commandBufferHandle (commandBuffer)) pInfo (instanceData) (instanceOffset) (boolToBool32 (update)) (dst) (src) (scratch) (scratchOffset)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdTraceRaysNV
+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> Word32 -> Word32 -> IO ()
+
+-- | vkCmdTraceRaysNV - Initialize a ray tracing dispatch
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @raygenShaderBindingTableBuffer@ is the buffer object that holds the
+--     shader binding table data for the ray generation shader stage.
+--
+-- -   @raygenShaderBindingOffset@ is the offset in bytes (relative to
+--     @raygenShaderBindingTableBuffer@) of the ray generation shader being
+--     used for the trace.
+--
+-- -   @missShaderBindingTableBuffer@ is the buffer object that holds the
+--     shader binding table data for the miss shader stage.
+--
+-- -   @missShaderBindingOffset@ is the offset in bytes (relative to
+--     @missShaderBindingTableBuffer@) of the miss shader being used for
+--     the trace.
+--
+-- -   @missShaderBindingStride@ is the size in bytes of each shader
+--     binding table record in @missShaderBindingTableBuffer@.
+--
+-- -   @hitShaderBindingTableBuffer@ is the buffer object that holds the
+--     shader binding table data for the hit shader stages.
+--
+-- -   @hitShaderBindingOffset@ is the offset in bytes (relative to
+--     @hitShaderBindingTableBuffer@) of the hit shader group being used
+--     for the trace.
+--
+-- -   @hitShaderBindingStride@ is the size in bytes of each shader binding
+--     table record in @hitShaderBindingTableBuffer@.
+--
+-- -   @callableShaderBindingTableBuffer@ is the buffer object that holds
+--     the shader binding table data for the callable shader stage.
+--
+-- -   @callableShaderBindingOffset@ is the offset in bytes (relative to
+--     @callableShaderBindingTableBuffer@) of the callable shader being
+--     used for the trace.
+--
+-- -   @callableShaderBindingStride@ is the size in bytes of each shader
+--     binding table record in @callableShaderBindingTableBuffer@.
+--
+-- -   @width@ is the width of the ray trace query dimensions.
+--
+-- -   @height@ is height of the ray trace query dimensions.
+--
+-- -   @depth@ is depth of the ray trace query dimensions.
+--
+-- = Description
+--
+-- When the command is executed, a ray generation group of @width@ ×
+-- @height@ × @depth@ rays is assembled.
+--
+-- == Valid Usage
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' as a result of this
+--     command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic
+--     operations as a result of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
+--
+-- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command, then the image view’s
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
+--     /must/ contain
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result
+--     of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering, as specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a
+--     reduction mode of either
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
+--     or
+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
+--     as a result of this command /must/ have a
+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
+--     supports cubic filtering together with minmax filtering, as
+--     specified by
+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
+--     returned by
+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
+--
+-- -   Any 'Vulkan.Core10.Handles.Image' created with a
+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
+--     sampled as a result of this command /must/ only be sampled using a
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
+--
+-- -   For each set /n/ that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a descriptor set /must/ have been bound to /n/
+--     at the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   For each push constant that is statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command, a push constant value /must/ have been set for
+--     the same pipeline bind point, with a
+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
+--     be valid if they are statically used by the
+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
+--     used by this command
+--
+-- -   A valid pipeline /must/ be bound to the pipeline bind point used by
+--     this command
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command requires any dynamic state, that
+--     state /must/ have been set for @commandBuffer@, and done so after
+--     any previously bound pipeline with the corresponding state not
+--     specified as dynamic
+--
+-- -   There /must/ not have been any calls to dynamic state setting
+--     commands for any state not specified as dynamic in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point used by this command, since that pipeline was bound
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used to sample from any
+--     'Vulkan.Core10.Handles.Image' with a
+--     'Vulkan.Core10.Handles.ImageView' of the type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
+--     any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
+--
+-- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline
+--     bind point used by this command accesses a
+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
+--     coordinates, that sampler /must/ not be used with any of the SPIR-V
+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
+--     includes a LOD bias or any offset values, in any shader stage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a uniform buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
+--     object bound to the pipeline bind point used by this command
+--     accesses a storage buffer, it /must/ not access values outside of
+--     the range of the buffer as specified in the descriptor set bound to
+--     the same pipeline bind point
+--
+-- -   If @commandBuffer@ is an unprotected command buffer, any resource
+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
+--     pipeline bind point used by this command /must/ not be a protected
+--     resource
+--
+-- -   Any shader group handle referenced by this call /must/ have been
+--     queried from the currently bound ray tracing shader pipeline
+--
+-- -   This command /must/ not cause a shader call instruction to be
+--     executed from a shader invocation with a
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth>
+--     greater than the value of @maxRecursionDepth@ used to create the
+--     bound ray tracing pipeline
+--
+-- -   If @commandBuffer@ is a protected command buffer, any resource
+--     written to by the 'Vulkan.Core10.Handles.Pipeline' object bound to
+--     the pipeline bind point used by this command /must/ not be an
+--     unprotected resource
+--
+-- -   If @commandBuffer@ is a protected command buffer, pipeline stages
+--     other than the framebuffer-space and compute stages in the
+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
+--     point /must/ not write to any resource
+--
+-- -   If @raygenShaderBindingTableBuffer@ is non-sparse then it /must/ be
+--     bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @raygenShaderBindingOffset@ /must/ be less than the size of
+--     @raygenShaderBindingTableBuffer@
+--
+-- -   @raygenShaderBindingOffset@ /must/ be a multiple of
+--     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupBaseAlignment@
+--
+-- -   If @missShaderBindingTableBuffer@ is non-sparse then it /must/ be
+--     bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @missShaderBindingOffset@ /must/ be less than the size of
+--     @missShaderBindingTableBuffer@
+--
+-- -   @missShaderBindingOffset@ /must/ be a multiple of
+--     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupBaseAlignment@
+--
+-- -   If @hitShaderBindingTableBuffer@ is non-sparse then it /must/ be
+--     bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @hitShaderBindingOffset@ /must/ be less than the size of
+--     @hitShaderBindingTableBuffer@
+--
+-- -   @hitShaderBindingOffset@ /must/ be a multiple of
+--     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupBaseAlignment@
+--
+-- -   If @callableShaderBindingTableBuffer@ is non-sparse then it /must/
+--     be bound completely and contiguously to a single
+--     'Vulkan.Core10.Handles.DeviceMemory' object
+--
+-- -   @callableShaderBindingOffset@ /must/ be less than the size of
+--     @callableShaderBindingTableBuffer@
+--
+-- -   @callableShaderBindingOffset@ /must/ be a multiple of
+--     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupBaseAlignment@
+--
+-- -   @missShaderBindingStride@ /must/ be a multiple of
+--     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupHandleSize@
+--
+-- -   @hitShaderBindingStride@ /must/ be a multiple of
+--     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupHandleSize@
+--
+-- -   @callableShaderBindingStride@ /must/ be a multiple of
+--     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupHandleSize@
+--
+-- -   @missShaderBindingStride@ /must/ be less than or equal to
+--     'PhysicalDeviceRayTracingPropertiesNV'::@maxShaderGroupStride@
+--
+-- -   @hitShaderBindingStride@ /must/ be less than or equal to
+--     'PhysicalDeviceRayTracingPropertiesNV'::@maxShaderGroupStride@
+--
+-- -   @callableShaderBindingStride@ /must/ be less than or equal to
+--     'PhysicalDeviceRayTracingPropertiesNV'::@maxShaderGroupStride@
+--
+-- -   @width@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
+--
+-- -   @height@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
+--
+-- -   @depth@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @raygenShaderBindingTableBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   If @missShaderBindingTableBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @missShaderBindingTableBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   If @hitShaderBindingTableBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @hitShaderBindingTableBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   If @callableShaderBindingTableBuffer@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @callableShaderBindingTableBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support compute operations
+--
+-- -   This command /must/ only be called outside of a render pass instance
+--
+-- -   Each of @callableShaderBindingTableBuffer@, @commandBuffer@,
+--     @hitShaderBindingTableBuffer@, @missShaderBindingTableBuffer@, and
+--     @raygenShaderBindingTableBuffer@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.BaseType.DeviceSize'
+cmdTraceRaysNV :: forall io . MonadIO io => CommandBuffer -> ("raygenShaderBindingTableBuffer" ::: Buffer) -> ("raygenShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingTableBuffer" ::: Buffer) -> ("missShaderBindingOffset" ::: DeviceSize) -> ("missShaderBindingStride" ::: DeviceSize) -> ("hitShaderBindingTableBuffer" ::: Buffer) -> ("hitShaderBindingOffset" ::: DeviceSize) -> ("hitShaderBindingStride" ::: DeviceSize) -> ("callableShaderBindingTableBuffer" ::: Buffer) -> ("callableShaderBindingOffset" ::: DeviceSize) -> ("callableShaderBindingStride" ::: DeviceSize) -> ("width" ::: Word32) -> ("height" ::: Word32) -> ("depth" ::: Word32) -> io ()
+cmdTraceRaysNV commandBuffer raygenShaderBindingTableBuffer raygenShaderBindingOffset missShaderBindingTableBuffer missShaderBindingOffset missShaderBindingStride hitShaderBindingTableBuffer hitShaderBindingOffset hitShaderBindingStride callableShaderBindingTableBuffer callableShaderBindingOffset callableShaderBindingStride width height depth = liftIO $ do
+  let vkCmdTraceRaysNVPtr = pVkCmdTraceRaysNV (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdTraceRaysNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdTraceRaysNV is null" Nothing Nothing
+  let vkCmdTraceRaysNV' = mkVkCmdTraceRaysNV vkCmdTraceRaysNVPtr
+  vkCmdTraceRaysNV' (commandBufferHandle (commandBuffer)) (raygenShaderBindingTableBuffer) (raygenShaderBindingOffset) (missShaderBindingTableBuffer) (missShaderBindingOffset) (missShaderBindingStride) (hitShaderBindingTableBuffer) (hitShaderBindingOffset) (hitShaderBindingStride) (callableShaderBindingTableBuffer) (callableShaderBindingOffset) (callableShaderBindingStride) (width) (height) (depth)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkGetAccelerationStructureHandleNV
+  :: FunPtr (Ptr Device_T -> AccelerationStructureKHR -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> AccelerationStructureKHR -> CSize -> Ptr () -> IO Result
+
+-- | vkGetAccelerationStructureHandleNV - Get opaque acceleration structure
+-- handle
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the acceleration
+--     structures.
+--
+-- -   @accelerationStructure@ is the acceleration structure.
+--
+-- -   @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.
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+-- = See Also
+--
+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
+-- 'Vulkan.Core10.Handles.Device'
+getAccelerationStructureHandleNV :: forall io . MonadIO io => Device -> AccelerationStructureKHR -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> io ()
+getAccelerationStructureHandleNV device accelerationStructure dataSize data' = liftIO $ do
+  let vkGetAccelerationStructureHandleNVPtr = pVkGetAccelerationStructureHandleNV (deviceCmds (device :: Device))
+  unless (vkGetAccelerationStructureHandleNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetAccelerationStructureHandleNV is null" Nothing Nothing
+  let vkGetAccelerationStructureHandleNV' = mkVkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNVPtr
+  r <- vkGetAccelerationStructureHandleNV' (deviceHandle (device)) (accelerationStructure) (CSize (dataSize)) (data')
+  when (r < SUCCESS) (throwIO (VulkanException r))
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCreateRayTracingPipelinesNV
+  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (RayTracingPipelineCreateInfoNV a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (RayTracingPipelineCreateInfoNV a) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result
+
+-- | vkCreateRayTracingPipelinesNV - Creates a new ray tracing pipeline
+-- object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the ray tracing
+--     pipelines.
+--
+-- -   @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     indicating that pipeline caching is disabled, or the handle of a
+--     valid
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>
+--     object, in which case use of that cache is enabled for the duration
+--     of the command.
+--
+-- -   @createInfoCount@ is the length of the @pCreateInfos@ and
+--     @pPipelines@ arrays.
+--
+-- -   @pCreateInfos@ is a pointer to an array of
+--     'RayTracingPipelineCreateInfoNV' structures.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
+--     chapter.
+--
+-- -   @pPipelines@ is a pointer to an array in which the resulting ray
+--     tracing pipeline objects are returned.
+--
+-- == Valid Usage
+--
+-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and the @basePipelineIndex@ member of that same element is not
+--     @-1@, @basePipelineIndex@ /must/ be less than the index into
+--     @pCreateInfos@ that corresponds to that element
+--
+-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, the base pipeline /must/ have been created with the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
+--     flag set
+--
+-- -   If @pipelineCache@ was created with
+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
+--     host access to @pipelineCache@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
+--
+-- -   If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @pipelineCache@ /must/ be a valid
+--     'Vulkan.Core10.Handles.PipelineCache' handle
+--
+-- -   @pCreateInfos@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ valid 'RayTracingPipelineCreateInfoNV' structures
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid
+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
+--
+-- -   @pPipelines@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles
+--
+-- -   @createInfoCount@ /must/ be greater than @0@
+--
+-- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Return Codes
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
+--
+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
+--
+--     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'
+--
+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
+--
+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Handles.PipelineCache', 'RayTracingPipelineCreateInfoNV'
+createRayTracingPipelinesNV :: forall io . MonadIO io => Device -> PipelineCache -> ("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoNV)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, ("pipelines" ::: Vector Pipeline))
+createRayTracingPipelinesNV device pipelineCache createInfos allocator = liftIO . evalContT $ do
+  let vkCreateRayTracingPipelinesNVPtr = pVkCreateRayTracingPipelinesNV (deviceCmds (device :: Device))
+  lift $ unless (vkCreateRayTracingPipelinesNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateRayTracingPipelinesNV is null" Nothing Nothing
+  let vkCreateRayTracingPipelinesNV' = mkVkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNVPtr
+  pPCreateInfos <- ContT $ allocaBytesAligned @(RayTracingPipelineCreateInfoNV _) ((Data.Vector.length (createInfos)) * 80) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (80 * (i)) :: Ptr (RayTracingPipelineCreateInfoNV _))) (e) . ($ ())) (createInfos)
+  pAllocator <- case (allocator) of
+    Nothing -> pure nullPtr
+    Just j -> ContT $ withCStruct (j)
+  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free
+  r <- lift $ vkCreateRayTracingPipelinesNV' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (pPCreateInfos) pAllocator (pPPipelines)
+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
+  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))
+  pure $ (r, pPipelines)
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV"
+pattern STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV = STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR
+
+
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV"
+pattern STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV = STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR
+
+
+-- No documentation found for TopLevel "VK_SHADER_STAGE_RAYGEN_BIT_NV"
+pattern SHADER_STAGE_RAYGEN_BIT_NV = SHADER_STAGE_RAYGEN_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_SHADER_STAGE_ANY_HIT_BIT_NV"
+pattern SHADER_STAGE_ANY_HIT_BIT_NV = SHADER_STAGE_ANY_HIT_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV"
+pattern SHADER_STAGE_CLOSEST_HIT_BIT_NV = SHADER_STAGE_CLOSEST_HIT_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_SHADER_STAGE_MISS_BIT_NV"
+pattern SHADER_STAGE_MISS_BIT_NV = SHADER_STAGE_MISS_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_SHADER_STAGE_INTERSECTION_BIT_NV"
+pattern SHADER_STAGE_INTERSECTION_BIT_NV = SHADER_STAGE_INTERSECTION_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_SHADER_STAGE_CALLABLE_BIT_NV"
+pattern SHADER_STAGE_CALLABLE_BIT_NV = SHADER_STAGE_CALLABLE_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV"
+pattern PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV"
+pattern PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_BUFFER_USAGE_RAY_TRACING_BIT_NV"
+pattern BUFFER_USAGE_RAY_TRACING_BIT_NV = BUFFER_USAGE_RAY_TRACING_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_PIPELINE_BIND_POINT_RAY_TRACING_NV"
+pattern PIPELINE_BIND_POINT_RAY_TRACING_NV = PIPELINE_BIND_POINT_RAY_TRACING_KHR
+
+
+-- No documentation found for TopLevel "VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV"
+pattern DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR
+
+
+-- No documentation found for TopLevel "VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV"
+pattern ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV"
+pattern ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV"
+pattern QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV = QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
+
+
+-- No documentation found for TopLevel "VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV"
+pattern OBJECT_TYPE_ACCELERATION_STRUCTURE_NV = OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR
+
+
+-- No documentation found for TopLevel "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT"
+pattern DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT = DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT
+
+
+-- No documentation found for TopLevel "VK_INDEX_TYPE_NONE_NV"
+pattern INDEX_TYPE_NONE_NV = INDEX_TYPE_NONE_KHR
+
+
+-- No documentation found for TopLevel "VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV"
+pattern RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV = RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR
+
+
+-- No documentation found for TopLevel "VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV"
+pattern RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV = RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR
+
+
+-- No documentation found for TopLevel "VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV"
+pattern RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV = RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR
+
+
+-- No documentation found for TopLevel "VK_GEOMETRY_TYPE_TRIANGLES_NV"
+pattern GEOMETRY_TYPE_TRIANGLES_NV = GEOMETRY_TYPE_TRIANGLES_KHR
+
+
+-- No documentation found for TopLevel "VK_GEOMETRY_TYPE_AABBS_NV"
+pattern GEOMETRY_TYPE_AABBS_NV = GEOMETRY_TYPE_AABBS_KHR
+
+
+-- No documentation found for TopLevel "VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV"
+pattern ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV = ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
+
+
+-- No documentation found for TopLevel "VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV"
+pattern ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV = ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
+
+
+-- No documentation found for TopLevel "VK_GEOMETRY_OPAQUE_BIT_NV"
+pattern GEOMETRY_OPAQUE_BIT_NV = GEOMETRY_OPAQUE_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV"
+pattern GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV = GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV"
+pattern GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV = GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV"
+pattern GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV = GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV"
+pattern GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV = GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV"
+pattern GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV = GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV"
+pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV = BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV"
+pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV = BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV"
+pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV = BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV"
+pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV = BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV"
+pattern BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV = BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR
+
+
+-- No documentation found for TopLevel "VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV"
+pattern COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV = COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR
+
+
+-- No documentation found for TopLevel "VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV"
+pattern COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV = COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR
+
+
+-- No documentation found for TopLevel "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV"
+pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV = ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR
+
+
+-- No documentation found for TopLevel "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV"
+pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV = ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR
+
+
+-- No documentation found for TopLevel "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV"
+pattern ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV = ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR
+
+
+-- No documentation found for TopLevel "vkDestroyAccelerationStructureNV"
+destroyAccelerationStructureNV = destroyAccelerationStructureKHR
+
+
+-- No documentation found for TopLevel "vkBindAccelerationStructureMemoryNV"
+bindAccelerationStructureMemoryNV = bindAccelerationStructureMemoryKHR
+
+
+-- No documentation found for TopLevel "vkCmdWriteAccelerationStructuresPropertiesNV"
+cmdWriteAccelerationStructuresPropertiesNV = cmdWriteAccelerationStructuresPropertiesKHR
+
+
+-- No documentation found for TopLevel "vkGetRayTracingShaderGroupHandlesNV"
+getRayTracingShaderGroupHandlesNV = getRayTracingShaderGroupHandlesKHR
+
+
+-- No documentation found for TopLevel "VK_SHADER_UNUSED_NV"
+pattern SHADER_UNUSED_NV = SHADER_UNUSED_KHR
+
+
+-- | VkRayTracingShaderGroupCreateInfoNV - Structure specifying shaders in a
+-- shader group
+--
+-- == Valid Usage
+--
+-- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV' then
+--     @generalShader@ /must/ be a valid index into
+--     'RayTracingPipelineCreateInfoNV'::@pStages@ referring to a shader of
+--     'SHADER_STAGE_RAYGEN_BIT_NV', 'SHADER_STAGE_MISS_BIT_NV', or
+--     'SHADER_STAGE_CALLABLE_BIT_NV'
+--
+-- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV' then
+--     @closestHitShader@, @anyHitShader@, and @intersectionShader@ /must/
+--     be 'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV'
+--
+-- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV'
+--     then @intersectionShader@ /must/ be a valid index into
+--     'RayTracingPipelineCreateInfoNV'::@pStages@ referring to a shader of
+--     'SHADER_STAGE_INTERSECTION_BIT_NV'
+--
+-- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV'
+--     then @intersectionShader@ /must/ be
+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV'
+--
+-- -   @closestHitShader@ /must/ be either
+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' or a valid index into
+--     'RayTracingPipelineCreateInfoNV'::@pStages@ referring to a shader of
+--     'SHADER_STAGE_CLOSEST_HIT_BIT_NV'
+--
+-- -   @anyHitShader@ /must/ be either
+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' or a valid index into
+--     'RayTracingPipelineCreateInfoNV'::@pStages@ referring to a shader of
+--     'SHADER_STAGE_ANY_HIT_BIT_NV'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @type@ /must/ be a valid
+--     'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingShaderGroupTypeKHR'
+--     value
+--
+-- = See Also
+--
+-- 'RayTracingPipelineCreateInfoNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingShaderGroupTypeKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data RayTracingShaderGroupCreateInfoNV = RayTracingShaderGroupCreateInfoNV
+  { -- | @type@ is the type of hit group specified in this structure.
+    type' :: RayTracingShaderGroupTypeKHR
+  , -- | @generalShader@ is the index of the ray generation, miss, or callable
+    -- shader from 'RayTracingPipelineCreateInfoNV'::@pStages@ in the group if
+    -- the shader group has @type@ of
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV', and
+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' otherwise.
+    generalShader :: Word32
+  , -- | @closestHitShader@ is the optional index of the closest hit shader from
+    -- 'RayTracingPipelineCreateInfoNV'::@pStages@ in the group if the shader
+    -- group has @type@ of
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV' or
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV', and
+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' otherwise.
+    closestHitShader :: Word32
+  , -- | @anyHitShader@ is the optional index of the any-hit shader from
+    -- 'RayTracingPipelineCreateInfoNV'::@pStages@ in the group if the shader
+    -- group has @type@ of
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV' or
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV', and
+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' otherwise.
+    anyHitShader :: Word32
+  , -- | @intersectionShader@ is the index of the intersection shader from
+    -- 'RayTracingPipelineCreateInfoNV'::@pStages@ in the group if the shader
+    -- group has @type@ of
+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV', and
+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' otherwise.
+    intersectionShader :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show RayTracingShaderGroupCreateInfoNV
+
+instance ToCStruct RayTracingShaderGroupCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RayTracingShaderGroupCreateInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (type')
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (generalShader)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (closestHitShader)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (anyHitShader)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (intersectionShader)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct RayTracingShaderGroupCreateInfoNV where
+  peekCStruct p = do
+    type' <- peek @RayTracingShaderGroupTypeKHR ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR))
+    generalShader <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    closestHitShader <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    anyHitShader <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    intersectionShader <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pure $ RayTracingShaderGroupCreateInfoNV
+             type' generalShader closestHitShader anyHitShader intersectionShader
+
+instance Storable RayTracingShaderGroupCreateInfoNV where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero RayTracingShaderGroupCreateInfoNV where
+  zero = RayTracingShaderGroupCreateInfoNV
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkRayTracingPipelineCreateInfoNV - Structure specifying parameters of a
+-- newly created ray tracing pipeline
+--
+-- = Description
+--
+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
+-- described in more detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
+--
+-- == Valid Usage
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is @-1@, @basePipelineHandle@ /must/
+--     be a valid handle to a ray tracing 'Vulkan.Core10.Handles.Pipeline'
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be a valid index into the calling command’s @pCreateInfos@ parameter
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineIndex@ is not @-1@, @basePipelineHandle@
+--     /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
+--
+-- -   If @flags@ contains the
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
+--     flag, and @basePipelineHandle@ is not
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
+--     be @-1@
+--
+-- -   The @stage@ member of at least one element of @pStages@ /must/ be
+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR'
+--
+-- -   The shader code for the entry points identified by @pStages@, and
+--     the rest of the state identified by this structure /must/ adhere to
+--     the pipeline linking rules described in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>
+--     chapter
+--
+-- -   @layout@ /must/ be
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
+--     with all shaders specified in @pStages@
+--
+-- -   The number of resources in @layout@ accessible to each shader stage
+--     that is used by the pipeline /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
+--     feature is not enabled, @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
+--     or
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'
+--
+-- -   @maxRecursionDepth@ /must/ be less than or equal to
+--     'PhysicalDeviceRayTracingPropertiesNV'::@maxRecursionDepth@
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
+--
+-- -   @flags@ /must/ not include
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
+--
+-- -   @flags@ /must/ not include both
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DEFER_COMPILE_BIT_NV'
+--     and
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'
+--     at the same time
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV'
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'
+--
+-- -   The @sType@ value of each struct in the @pNext@ chain /must/ be
+--     unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+--     values
+--
+-- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@
+--     valid 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'
+--     structures
+--
+-- -   @pGroups@ /must/ be a valid pointer to an array of @groupCount@
+--     valid 'RayTracingShaderGroupCreateInfoNV' structures
+--
+-- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'
+--     handle
+--
+-- -   @stageCount@ /must/ be greater than @0@
+--
+-- -   @groupCount@ /must/ be greater than @0@
+--
+-- -   Both of @basePipelineHandle@, and @layout@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Pipeline',
+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
+-- 'Vulkan.Core10.Handles.PipelineLayout',
+-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
+-- 'RayTracingShaderGroupCreateInfoNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createRayTracingPipelinesNV'
+data RayTracingPipelineCreateInfoNV (es :: [Type]) = RayTracingPipelineCreateInfoNV
+  { -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+    next :: Chain es
+  , -- | @flags@ is a bitmask of
+    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
+    -- specifying how the pipeline will be generated.
+    flags :: PipelineCreateFlags
+  , -- | @pStages@ is an array of size @stageCount@ structures of type
+    -- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' describing the
+    -- set of the shader stages to be included in the ray tracing pipeline.
+    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
+  , -- | @pGroups@ is an array of size @groupCount@ structures of type
+    -- 'RayTracingShaderGroupCreateInfoNV' describing the set of the shader
+    -- stages to be included in each shader group in the ray tracing pipeline.
+    groups :: Vector RayTracingShaderGroupCreateInfoNV
+  , -- | @maxRecursionDepth@ is the
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth maximum recursion depth>
+    -- of shaders executed by this pipeline.
+    maxRecursionDepth :: Word32
+  , -- | @layout@ is the description of binding locations used by both the
+    -- pipeline and descriptor sets used with the pipeline.
+    layout :: PipelineLayout
+  , -- | @basePipelineHandle@ is a pipeline to derive from.
+    basePipelineHandle :: Pipeline
+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
+    -- as a pipeline to derive from.
+    basePipelineIndex :: Int32
+  }
+  deriving (Typeable)
+deriving instance Show (Chain es) => Show (RayTracingPipelineCreateInfoNV es)
+
+instance Extensible RayTracingPipelineCreateInfoNV where
+  extensibleType = STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV
+  setNext x next = x{next = next}
+  getNext RayTracingPipelineCreateInfoNV{..} = next
+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RayTracingPipelineCreateInfoNV e => b) -> Maybe b
+  extends _ f
+    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f
+    | otherwise = Nothing
+
+instance (Extendss RayTracingPipelineCreateInfoNV es, PokeChain es) => ToCStruct (RayTracingPipelineCreateInfoNV es) where
+  withCStruct x f = allocaBytesAligned 80 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RayTracingPipelineCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV)
+    pNext'' <- fmap castPtr . ContT $ withChain (next)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))
+    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (groups)) :: Word32))
+    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoNV ((Data.Vector.length (groups)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (40 * (i)) :: Ptr RayTracingShaderGroupCreateInfoNV) (e) . ($ ())) (groups)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoNV))) (pPGroups')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (maxRecursionDepth)
+    lift $ poke ((p `plusPtr` 56 :: Ptr PipelineLayout)) (layout)
+    lift $ poke ((p `plusPtr` 64 :: Ptr Pipeline)) (basePipelineHandle)
+    lift $ poke ((p `plusPtr` 72 :: Ptr Int32)) (basePipelineIndex)
+    lift $ f
+  cStructSize = 80
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV)
+    pNext' <- fmap castPtr . ContT $ withZeroChain @es
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
+    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (mempty)) * 48) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')
+    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoNV ((Data.Vector.length (mempty)) * 40) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (40 * (i)) :: Ptr RayTracingShaderGroupCreateInfoNV) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoNV))) (pPGroups')
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 56 :: Ptr PipelineLayout)) (zero)
+    lift $ poke ((p `plusPtr` 72 :: Ptr Int32)) (zero)
+    lift $ f
+
+instance (Extendss RayTracingPipelineCreateInfoNV es, PeekChain es) => FromCStruct (RayTracingPipelineCreateInfoNV es) where
+  peekCStruct p = do
+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))
+    next <- peekChain (castPtr pNext)
+    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))
+    stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo a))))
+    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
+    groupCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    pGroups <- peek @(Ptr RayTracingShaderGroupCreateInfoNV) ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoNV)))
+    pGroups' <- generateM (fromIntegral groupCount) (\i -> peekCStruct @RayTracingShaderGroupCreateInfoNV ((pGroups `advancePtrBytes` (40 * (i)) :: Ptr RayTracingShaderGroupCreateInfoNV)))
+    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    layout <- peek @PipelineLayout ((p `plusPtr` 56 :: Ptr PipelineLayout))
+    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 64 :: Ptr Pipeline))
+    basePipelineIndex <- peek @Int32 ((p `plusPtr` 72 :: Ptr Int32))
+    pure $ RayTracingPipelineCreateInfoNV
+             next flags pStages' pGroups' maxRecursionDepth layout basePipelineHandle basePipelineIndex
+
+instance es ~ '[] => Zero (RayTracingPipelineCreateInfoNV es) where
+  zero = RayTracingPipelineCreateInfoNV
+           ()
+           zero
+           mempty
+           mempty
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkGeometryTrianglesNV - Structure specifying a triangle geometry in a
+-- bottom-level acceleration structure
+--
+-- = Description
+--
+-- If @indexType@ is 'INDEX_TYPE_NONE_NV', then this structure describes a
+-- set of triangles determined by @vertexCount@. Otherwise, this structure
+-- describes a set of indexed triangles determined by @indexCount@.
+--
+-- == Valid Usage
+--
+-- -   @vertexOffset@ /must/ be less than the size of @vertexData@
+--
+-- -   @vertexOffset@ /must/ be a multiple of the component size of
+--     @vertexFormat@
+--
+-- -   @vertexFormat@ /must/ be one of
+--     'Vulkan.Core10.Enums.Format.FORMAT_R32G32B32_SFLOAT',
+--     'Vulkan.Core10.Enums.Format.FORMAT_R32G32_SFLOAT',
+--     'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16_SFLOAT',
+--     'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SFLOAT',
+--     'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SNORM', or
+--     'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16_SNORM'
+--
+-- -   @indexOffset@ /must/ be less than the size of @indexData@
+--
+-- -   @indexOffset@ /must/ be a multiple of the element size of
+--     @indexType@
+--
+-- -   @indexType@ /must/ be
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',
+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or
+--     'INDEX_TYPE_NONE_NV'
+--
+-- -   @indexData@ /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' if
+--     @indexType@ is 'INDEX_TYPE_NONE_NV'
+--
+-- -   @indexData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--     if @indexType@ is not 'INDEX_TYPE_NONE_NV'
+--
+-- -   @indexCount@ /must/ be @0@ if @indexType@ is 'INDEX_TYPE_NONE_NV'
+--
+-- -   @transformOffset@ /must/ be less than the size of @transformData@
+--
+-- -   @transformOffset@ /must/ be a multiple of @16@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   If @vertexData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @vertexData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
+--     value
+--
+-- -   If @indexData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @indexData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- -   @indexType@ /must/ be a valid
+--     'Vulkan.Core10.Enums.IndexType.IndexType' value
+--
+-- -   If @transformData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @transformData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'
+--     handle
+--
+-- -   Each of @indexData@, @transformData@, and @vertexData@ that are
+--     valid handles of non-ignored parameters /must/ have been created,
+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.Format.Format', 'GeometryDataNV',
+-- 'Vulkan.Core10.Enums.IndexType.IndexType',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data GeometryTrianglesNV = GeometryTrianglesNV
+  { -- | @vertexData@ is the buffer containing vertex data for this geometry.
+    vertexData :: Buffer
+  , -- | @vertexOffset@ is the offset in bytes within @vertexData@ containing
+    -- vertex data for this geometry.
+    vertexOffset :: DeviceSize
+  , -- | @vertexCount@ is the number of valid vertices.
+    vertexCount :: Word32
+  , -- | @vertexStride@ is the stride in bytes between each vertex.
+    vertexStride :: DeviceSize
+  , -- | @vertexFormat@ is a 'Vulkan.Core10.Enums.Format.Format' describing the
+    -- format of each vertex element.
+    vertexFormat :: Format
+  , -- | @indexData@ is the buffer containing index data for this geometry.
+    indexData :: Buffer
+  , -- | @indexOffset@ is the offset in bytes within @indexData@ containing index
+    -- data for this geometry.
+    indexOffset :: DeviceSize
+  , -- | @indexCount@ is the number of indices to include in this geometry.
+    indexCount :: Word32
+  , -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' describing
+    -- the format of each index.
+    indexType :: IndexType
+  , -- | @transformData@ is an optional buffer containing an 'TransformMatrixNV'
+    -- structure defining a transformation to be applied to this geometry.
+    transformData :: Buffer
+  , -- | @transformOffset@ is the offset in bytes in @transformData@ of the
+    -- transform information described above.
+    transformOffset :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show GeometryTrianglesNV
+
+instance ToCStruct GeometryTrianglesNV where
+  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GeometryTrianglesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Buffer)) (vertexData)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (vertexOffset)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (vertexCount)
+    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (vertexStride)
+    poke ((p `plusPtr` 48 :: Ptr Format)) (vertexFormat)
+    poke ((p `plusPtr` 56 :: Ptr Buffer)) (indexData)
+    poke ((p `plusPtr` 64 :: Ptr DeviceSize)) (indexOffset)
+    poke ((p `plusPtr` 72 :: Ptr Word32)) (indexCount)
+    poke ((p `plusPtr` 76 :: Ptr IndexType)) (indexType)
+    poke ((p `plusPtr` 80 :: Ptr Buffer)) (transformData)
+    poke ((p `plusPtr` 88 :: Ptr DeviceSize)) (transformOffset)
+    f
+  cStructSize = 96
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr Format)) (zero)
+    poke ((p `plusPtr` 64 :: Ptr DeviceSize)) (zero)
+    poke ((p `plusPtr` 72 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 76 :: Ptr IndexType)) (zero)
+    poke ((p `plusPtr` 88 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct GeometryTrianglesNV where
+  peekCStruct p = do
+    vertexData <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
+    vertexOffset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
+    vertexCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
+    vertexStride <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
+    vertexFormat <- peek @Format ((p `plusPtr` 48 :: Ptr Format))
+    indexData <- peek @Buffer ((p `plusPtr` 56 :: Ptr Buffer))
+    indexOffset <- peek @DeviceSize ((p `plusPtr` 64 :: Ptr DeviceSize))
+    indexCount <- peek @Word32 ((p `plusPtr` 72 :: Ptr Word32))
+    indexType <- peek @IndexType ((p `plusPtr` 76 :: Ptr IndexType))
+    transformData <- peek @Buffer ((p `plusPtr` 80 :: Ptr Buffer))
+    transformOffset <- peek @DeviceSize ((p `plusPtr` 88 :: Ptr DeviceSize))
+    pure $ GeometryTrianglesNV
+             vertexData vertexOffset vertexCount vertexStride vertexFormat indexData indexOffset indexCount indexType transformData transformOffset
+
+instance Storable GeometryTrianglesNV where
+  sizeOf ~_ = 96
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero GeometryTrianglesNV where
+  zero = GeometryTrianglesNV
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkGeometryAABBNV - Structure specifying axis-aligned bounding box
+-- geometry in a bottom-level acceleration structure
+--
+-- = Description
+--
+-- The AABB data in memory is six 32-bit floats consisting of the minimum
+-- x, y, and z values followed by the maximum x, y, and z values.
+--
+-- == Valid Usage
+--
+-- -   @offset@ /must/ be less than the size of @aabbData@
+--
+-- -   @offset@ /must/ be a multiple of @8@
+--
+-- -   @stride@ /must/ be a multiple of @8@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GEOMETRY_AABB_NV'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   If @aabbData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @aabbData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'GeometryDataNV', 'Vulkan.Core10.Enums.StructureType.StructureType'
+data GeometryAABBNV = GeometryAABBNV
+  { -- | @aabbData@ is the buffer containing axis-aligned bounding box data.
+    aabbData :: Buffer
+  , -- | @numAABBs@ is the number of AABBs in this geometry.
+    numAABBs :: Word32
+  , -- | @stride@ is the stride in bytes between AABBs in @aabbData@.
+    stride :: Word32
+  , -- | @offset@ is the offset in bytes of the first AABB in @aabbData@.
+    offset :: DeviceSize
+  }
+  deriving (Typeable)
+deriving instance Show GeometryAABBNV
+
+instance ToCStruct GeometryAABBNV where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GeometryAABBNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_AABB_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Buffer)) (aabbData)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (numAABBs)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (stride)
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (offset)
+    f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_AABB_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)
+    f
+
+instance FromCStruct GeometryAABBNV where
+  peekCStruct p = do
+    aabbData <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))
+    numAABBs <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    stride <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    offset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
+    pure $ GeometryAABBNV
+             aabbData numAABBs stride offset
+
+instance Storable GeometryAABBNV where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero GeometryAABBNV where
+  zero = GeometryAABBNV
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkGeometryDataNV - Structure specifying geometry in a bottom-level
+-- acceleration structure
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'GeometryAABBNV', 'GeometryNV', 'GeometryTrianglesNV'
+data GeometryDataNV = GeometryDataNV
+  { -- | @triangles@ /must/ be a valid 'GeometryTrianglesNV' structure
+    triangles :: GeometryTrianglesNV
+  , -- | @aabbs@ /must/ be a valid 'GeometryAABBNV' structure
+    aabbs :: GeometryAABBNV
+  }
+  deriving (Typeable)
+deriving instance Show GeometryDataNV
+
+instance ToCStruct GeometryDataNV where
+  withCStruct x f = allocaBytesAligned 136 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GeometryDataNV{..} f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr GeometryTrianglesNV)) (triangles) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 96 :: Ptr GeometryAABBNV)) (aabbs) . ($ ())
+    lift $ f
+  cStructSize = 136
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr GeometryTrianglesNV)) (zero) . ($ ())
+    ContT $ pokeCStruct ((p `plusPtr` 96 :: Ptr GeometryAABBNV)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct GeometryDataNV where
+  peekCStruct p = do
+    triangles <- peekCStruct @GeometryTrianglesNV ((p `plusPtr` 0 :: Ptr GeometryTrianglesNV))
+    aabbs <- peekCStruct @GeometryAABBNV ((p `plusPtr` 96 :: Ptr GeometryAABBNV))
+    pure $ GeometryDataNV
+             triangles aabbs
+
+instance Zero GeometryDataNV where
+  zero = GeometryDataNV
+           zero
+           zero
+
+
+-- | VkGeometryNV - Structure specifying a geometry in a bottom-level
+-- acceleration structure
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'AccelerationStructureInfoNV', 'GeometryDataNV',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.GeometryFlagsKHR',
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.GeometryTypeKHR',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data GeometryNV = GeometryNV
+  { -- | @geometryType@ /must/ be a valid
+    -- 'Vulkan.Extensions.VK_KHR_ray_tracing.GeometryTypeKHR' value
+    geometryType :: GeometryTypeKHR
+  , -- | @geometry@ /must/ be a valid 'GeometryDataNV' structure
+    geometry :: GeometryDataNV
+  , -- | @flags@ /must/ be a valid combination of
+    -- 'Vulkan.Extensions.VK_KHR_ray_tracing.GeometryFlagBitsKHR' values
+    flags :: GeometryFlagsKHR
+  }
+  deriving (Typeable)
+deriving instance Show GeometryNV
+
+instance ToCStruct GeometryNV where
+  withCStruct x f = allocaBytesAligned 168 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p GeometryNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (geometryType)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr GeometryDataNV)) (geometry) . ($ ())
+    lift $ poke ((p `plusPtr` 160 :: Ptr GeometryFlagsKHR)) (flags)
+    lift $ f
+  cStructSize = 168
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_GEOMETRY_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr GeometryDataNV)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct GeometryNV where
+  peekCStruct p = do
+    geometryType <- peek @GeometryTypeKHR ((p `plusPtr` 16 :: Ptr GeometryTypeKHR))
+    geometry <- peekCStruct @GeometryDataNV ((p `plusPtr` 24 :: Ptr GeometryDataNV))
+    flags <- peek @GeometryFlagsKHR ((p `plusPtr` 160 :: Ptr GeometryFlagsKHR))
+    pure $ GeometryNV
+             geometryType geometry flags
+
+instance Zero GeometryNV where
+  zero = GeometryNV
+           zero
+           zero
+           zero
+
+
+-- | VkAccelerationStructureInfoNV - Structure specifying the parameters of
+-- acceleration structure object
+--
+-- = Description
+--
+-- 'AccelerationStructureInfoNV' contains information that is used both for
+-- acceleration structure creation with 'createAccelerationStructureNV' and
+-- in combination with the actual geometric data to build the acceleration
+-- structure with 'cmdBuildAccelerationStructureNV'.
+--
+-- == Valid Usage
+--
+-- -   @geometryCount@ /must/ be less than or equal to
+--     'PhysicalDeviceRayTracingPropertiesNV'::@maxGeometryCount@
+--
+-- -   @instanceCount@ /must/ be less than or equal to
+--     'PhysicalDeviceRayTracingPropertiesNV'::@maxInstanceCount@
+--
+-- -   The total number of triangles in all geometries /must/ be less than
+--     or equal to
+--     'PhysicalDeviceRayTracingPropertiesNV'::@maxTriangleCount@
+--
+-- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV' then
+--     @geometryCount@ /must/ be @0@
+--
+-- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV' then
+--     @instanceCount@ /must/ be @0@
+--
+-- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV' then the
+--     @geometryType@ member of each geometry in @pGeometries@ /must/ be
+--     the same
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'BuildAccelerationStructureFlagBitsNV' values
+--
+-- -   If @flags@ has the
+--     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV' bit set,
+--     then it /must/ not have the
+--     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV' bit set
+--
+-- -   @scratch@ /must/ have been created with
+--     'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag
+--
+-- -   If @instanceData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @instanceData@ /must/ have been created with
+--     'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @type@ /must/ be a valid 'AccelerationStructureTypeNV' value
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @geometryCount@ is not @0@, @pGeometries@ /must/ be a valid
+--     pointer to an array of @geometryCount@ valid 'GeometryNV' structures
+--
+-- = See Also
+--
+-- 'AccelerationStructureCreateInfoNV', 'AccelerationStructureTypeNV',
+-- 'BuildAccelerationStructureFlagsNV', 'GeometryNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'cmdBuildAccelerationStructureNV'
+data AccelerationStructureInfoNV = AccelerationStructureInfoNV
+  { -- | @type@ is a 'AccelerationStructureTypeNV' value specifying the type of
+    -- acceleration structure that will be created.
+    type' :: AccelerationStructureTypeNV
+  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsNV'
+    -- specifying additional parameters of the acceleration structure.
+    flags :: BuildAccelerationStructureFlagsNV
+  , -- | @instanceCount@ specifies the number of instances that will be in the
+    -- new acceleration structure.
+    instanceCount :: Word32
+  , -- | @pGeometries@ is a pointer to an array of @geometryCount@ 'GeometryNV'
+    -- structures containing the scene data being passed into the acceleration
+    -- structure.
+    geometries :: Vector GeometryNV
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureInfoNV
+
+instance ToCStruct AccelerationStructureInfoNV where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeNV)) (type')
+    lift $ poke ((p `plusPtr` 20 :: Ptr BuildAccelerationStructureFlagsNV)) (flags)
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (instanceCount)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (geometries)) :: Word32))
+    pPGeometries' <- ContT $ allocaBytesAligned @GeometryNV ((Data.Vector.length (geometries)) * 168) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometries' `plusPtr` (168 * (i)) :: Ptr GeometryNV) (e) . ($ ())) (geometries)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr GeometryNV))) (pPGeometries')
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeNV)) (zero)
+    pPGeometries' <- ContT $ allocaBytesAligned @GeometryNV ((Data.Vector.length (mempty)) * 168) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometries' `plusPtr` (168 * (i)) :: Ptr GeometryNV) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr GeometryNV))) (pPGeometries')
+    lift $ f
+
+instance FromCStruct AccelerationStructureInfoNV where
+  peekCStruct p = do
+    type' <- peek @AccelerationStructureTypeNV ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeNV))
+    flags <- peek @BuildAccelerationStructureFlagsNV ((p `plusPtr` 20 :: Ptr BuildAccelerationStructureFlagsNV))
+    instanceCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    geometryCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    pGeometries <- peek @(Ptr GeometryNV) ((p `plusPtr` 32 :: Ptr (Ptr GeometryNV)))
+    pGeometries' <- generateM (fromIntegral geometryCount) (\i -> peekCStruct @GeometryNV ((pGeometries `advancePtrBytes` (168 * (i)) :: Ptr GeometryNV)))
+    pure $ AccelerationStructureInfoNV
+             type' flags instanceCount pGeometries'
+
+instance Zero AccelerationStructureInfoNV where
+  zero = AccelerationStructureInfoNV
+           zero
+           zero
+           zero
+           mempty
+
+
+-- | VkAccelerationStructureCreateInfoNV - Structure specifying the
+-- parameters of a newly created acceleration structure object
+--
+-- == Valid Usage
+--
+-- -   If @compactedSize@ is not @0@ then both @info.geometryCount@ and
+--     @info.instanceCount@ /must/ be @0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV'
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @info@ /must/ be a valid 'AccelerationStructureInfoNV' structure
+--
+-- = See Also
+--
+-- 'AccelerationStructureInfoNV', 'Vulkan.Core10.BaseType.DeviceSize',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'createAccelerationStructureNV'
+data AccelerationStructureCreateInfoNV = AccelerationStructureCreateInfoNV
+  { -- | @compactedSize@ is the size from the result of
+    -- 'cmdWriteAccelerationStructuresPropertiesNV' if this acceleration
+    -- structure is going to be the target of a compacting copy.
+    compactedSize :: DeviceSize
+  , -- | @info@ is the 'AccelerationStructureInfoNV' structure specifying further
+    -- parameters of the created acceleration structure.
+    info :: AccelerationStructureInfoNV
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureCreateInfoNV
+
+instance ToCStruct AccelerationStructureCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (compactedSize)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureInfoNV)) (info) . ($ ())
+    lift $ f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureInfoNV)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct AccelerationStructureCreateInfoNV where
+  peekCStruct p = do
+    compactedSize <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))
+    info <- peekCStruct @AccelerationStructureInfoNV ((p `plusPtr` 24 :: Ptr AccelerationStructureInfoNV))
+    pure $ AccelerationStructureCreateInfoNV
+             compactedSize info
+
+instance Zero AccelerationStructureCreateInfoNV where
+  zero = AccelerationStructureCreateInfoNV
+           zero
+           zero
+
+
+-- | VkAccelerationStructureMemoryRequirementsInfoNV - Structure specifying
+-- acceleration to query for memory requirements
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'AccelerationStructureMemoryRequirementsTypeNV',
+-- 'AccelerationStructureNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'getAccelerationStructureMemoryRequirementsNV'
+data AccelerationStructureMemoryRequirementsInfoNV = AccelerationStructureMemoryRequirementsInfoNV
+  { -- | @type@ /must/ be a valid 'AccelerationStructureMemoryRequirementsTypeNV'
+    -- value
+    type' :: AccelerationStructureMemoryRequirementsTypeNV
+  , -- | @accelerationStructure@ /must/ be a valid 'AccelerationStructureNV'
+    -- handle
+    accelerationStructure :: AccelerationStructureNV
+  }
+  deriving (Typeable)
+deriving instance Show AccelerationStructureMemoryRequirementsInfoNV
+
+instance ToCStruct AccelerationStructureMemoryRequirementsInfoNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p AccelerationStructureMemoryRequirementsInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeNV)) (type')
+    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureNV)) (accelerationStructure)
+    f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeNV)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureNV)) (zero)
+    f
+
+instance FromCStruct AccelerationStructureMemoryRequirementsInfoNV where
+  peekCStruct p = do
+    type' <- peek @AccelerationStructureMemoryRequirementsTypeNV ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeNV))
+    accelerationStructure <- peek @AccelerationStructureNV ((p `plusPtr` 24 :: Ptr AccelerationStructureNV))
+    pure $ AccelerationStructureMemoryRequirementsInfoNV
+             type' accelerationStructure
+
+instance Storable AccelerationStructureMemoryRequirementsInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero AccelerationStructureMemoryRequirementsInfoNV where
+  zero = AccelerationStructureMemoryRequirementsInfoNV
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceRayTracingPropertiesNV - Properties of the physical
+-- device for ray tracing
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceRayTracingPropertiesNV' structure is included in
+-- the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- Limits specified by this structure /must/ match those specified with the
+-- same name in
+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceRayTracingPropertiesNV = PhysicalDeviceRayTracingPropertiesNV
+  { -- | @shaderGroupHandleSize@ size in bytes of the shader header.
+    shaderGroupHandleSize :: Word32
+  , -- | @maxRecursionDepth@ is the maximum number of levels of recursion allowed
+    -- in a trace command.
+    maxRecursionDepth :: Word32
+  , -- | @maxShaderGroupStride@ is the maximum stride in bytes allowed between
+    -- shader groups in the SBT.
+    maxShaderGroupStride :: Word32
+  , -- | @shaderGroupBaseAlignment@ is the required alignment in bytes for the
+    -- base of the SBTs.
+    shaderGroupBaseAlignment :: Word32
+  , -- | @maxGeometryCount@ is the maximum number of geometries in the bottom
+    -- level acceleration structure.
+    maxGeometryCount :: Word64
+  , -- | @maxInstanceCount@ is the maximum number of instances in the top level
+    -- acceleration structure.
+    maxInstanceCount :: Word64
+  , -- | @maxTriangleCount@ is the maximum number of triangles in all geometries
+    -- in the bottom level acceleration structure.
+    maxTriangleCount :: Word64
+  , -- | @maxDescriptorSetAccelerationStructures@ is the maximum number of
+    -- acceleration structure descriptors that are allowed in a descriptor set.
+    maxDescriptorSetAccelerationStructures :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceRayTracingPropertiesNV
+
+instance ToCStruct PhysicalDeviceRayTracingPropertiesNV where
+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceRayTracingPropertiesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (shaderGroupHandleSize)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxRecursionDepth)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxShaderGroupStride)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (shaderGroupBaseAlignment)
+    poke ((p `plusPtr` 32 :: Ptr Word64)) (maxGeometryCount)
+    poke ((p `plusPtr` 40 :: Ptr Word64)) (maxInstanceCount)
+    poke ((p `plusPtr` 48 :: Ptr Word64)) (maxTriangleCount)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (maxDescriptorSetAccelerationStructures)
+    f
+  cStructSize = 64
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 40 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 48 :: Ptr Word64)) (zero)
+    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceRayTracingPropertiesNV where
+  peekCStruct p = do
+    shaderGroupHandleSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    maxShaderGroupStride <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    shaderGroupBaseAlignment <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    maxGeometryCount <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))
+    maxInstanceCount <- peek @Word64 ((p `plusPtr` 40 :: Ptr Word64))
+    maxTriangleCount <- peek @Word64 ((p `plusPtr` 48 :: Ptr Word64))
+    maxDescriptorSetAccelerationStructures <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
+    pure $ PhysicalDeviceRayTracingPropertiesNV
+             shaderGroupHandleSize maxRecursionDepth maxShaderGroupStride shaderGroupBaseAlignment maxGeometryCount maxInstanceCount maxTriangleCount maxDescriptorSetAccelerationStructures
+
+instance Storable PhysicalDeviceRayTracingPropertiesNV where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceRayTracingPropertiesNV where
+  zero = PhysicalDeviceRayTracingPropertiesNV
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+           zero
+
+
+-- No documentation found for TopLevel "VkGeometryFlagsNV"
+type GeometryFlagsNV = GeometryFlagsKHR
+
+
+-- No documentation found for TopLevel "VkGeometryInstanceFlagsNV"
+type GeometryInstanceFlagsNV = GeometryInstanceFlagsKHR
+
+
+-- No documentation found for TopLevel "VkBuildAccelerationStructureFlagsNV"
+type BuildAccelerationStructureFlagsNV = BuildAccelerationStructureFlagsKHR
+
+
+-- No documentation found for TopLevel "VkAccelerationStructureNV"
+type AccelerationStructureNV = AccelerationStructureKHR
+
+
+-- No documentation found for TopLevel "VkGeometryFlagBitsNV"
+type GeometryFlagBitsNV = GeometryFlagBitsKHR
+
+
+-- No documentation found for TopLevel "VkGeometryInstanceFlagBitsNV"
+type GeometryInstanceFlagBitsNV = GeometryInstanceFlagBitsKHR
+
+
+-- No documentation found for TopLevel "VkBuildAccelerationStructureFlagBitsNV"
+type BuildAccelerationStructureFlagBitsNV = BuildAccelerationStructureFlagBitsKHR
+
+
+-- No documentation found for TopLevel "VkCopyAccelerationStructureModeNV"
+type CopyAccelerationStructureModeNV = CopyAccelerationStructureModeKHR
+
+
+-- No documentation found for TopLevel "VkAccelerationStructureTypeNV"
+type AccelerationStructureTypeNV = AccelerationStructureTypeKHR
+
+
+-- No documentation found for TopLevel "VkGeometryTypeNV"
+type GeometryTypeNV = GeometryTypeKHR
+
+
+-- No documentation found for TopLevel "VkRayTracingShaderGroupTypeNV"
+type RayTracingShaderGroupTypeNV = RayTracingShaderGroupTypeKHR
+
+
+-- No documentation found for TopLevel "VkAccelerationStructureMemoryRequirementsTypeNV"
+type AccelerationStructureMemoryRequirementsTypeNV = AccelerationStructureMemoryRequirementsTypeKHR
+
+
+-- No documentation found for TopLevel "VkBindAccelerationStructureMemoryInfoNV"
+type BindAccelerationStructureMemoryInfoNV = BindAccelerationStructureMemoryInfoKHR
+
+
+-- No documentation found for TopLevel "VkWriteDescriptorSetAccelerationStructureNV"
+type WriteDescriptorSetAccelerationStructureNV = WriteDescriptorSetAccelerationStructureKHR
+
+
+-- No documentation found for TopLevel "VkAabbPositionsNV"
+type AabbPositionsNV = AabbPositionsKHR
+
+
+-- No documentation found for TopLevel "VkTransformMatrixNV"
+type TransformMatrixNV = TransformMatrixKHR
+
+
+-- No documentation found for TopLevel "VkAccelerationStructureInstanceNV"
+type AccelerationStructureInstanceNV = AccelerationStructureInstanceKHR
+
+
+type NV_RAY_TRACING_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_NV_RAY_TRACING_SPEC_VERSION"
+pattern NV_RAY_TRACING_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_RAY_TRACING_SPEC_VERSION = 3
+
+
+type NV_RAY_TRACING_EXTENSION_NAME = "VK_NV_ray_tracing"
+
+-- No documentation found for TopLevel "VK_NV_RAY_TRACING_EXTENSION_NAME"
+pattern NV_RAY_TRACING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_RAY_TRACING_EXTENSION_NAME = "VK_NV_ray_tracing"
+
diff --git a/src/Vulkan/Extensions/VK_NV_ray_tracing.hs-boot b/src/Vulkan/Extensions/VK_NV_ray_tracing.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_ray_tracing.hs-boot
@@ -0,0 +1,106 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_ray_tracing  ( AccelerationStructureCreateInfoNV
+                                            , AccelerationStructureInfoNV
+                                            , AccelerationStructureMemoryRequirementsInfoNV
+                                            , GeometryAABBNV
+                                            , GeometryDataNV
+                                            , GeometryNV
+                                            , GeometryTrianglesNV
+                                            , PhysicalDeviceRayTracingPropertiesNV
+                                            , RayTracingPipelineCreateInfoNV
+                                            , RayTracingShaderGroupCreateInfoNV
+                                            , AccelerationStructureNV
+                                            ) where
+
+import Data.Kind (Type)
+import {-# SOURCE #-} Vulkan.Extensions.Handles (AccelerationStructureKHR)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
+import Vulkan.CStruct (FromCStruct)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
+import Vulkan.CStruct (ToCStruct)
+data AccelerationStructureCreateInfoNV
+
+instance ToCStruct AccelerationStructureCreateInfoNV
+instance Show AccelerationStructureCreateInfoNV
+
+instance FromCStruct AccelerationStructureCreateInfoNV
+
+
+data AccelerationStructureInfoNV
+
+instance ToCStruct AccelerationStructureInfoNV
+instance Show AccelerationStructureInfoNV
+
+instance FromCStruct AccelerationStructureInfoNV
+
+
+data AccelerationStructureMemoryRequirementsInfoNV
+
+instance ToCStruct AccelerationStructureMemoryRequirementsInfoNV
+instance Show AccelerationStructureMemoryRequirementsInfoNV
+
+instance FromCStruct AccelerationStructureMemoryRequirementsInfoNV
+
+
+data GeometryAABBNV
+
+instance ToCStruct GeometryAABBNV
+instance Show GeometryAABBNV
+
+instance FromCStruct GeometryAABBNV
+
+
+data GeometryDataNV
+
+instance ToCStruct GeometryDataNV
+instance Show GeometryDataNV
+
+instance FromCStruct GeometryDataNV
+
+
+data GeometryNV
+
+instance ToCStruct GeometryNV
+instance Show GeometryNV
+
+instance FromCStruct GeometryNV
+
+
+data GeometryTrianglesNV
+
+instance ToCStruct GeometryTrianglesNV
+instance Show GeometryTrianglesNV
+
+instance FromCStruct GeometryTrianglesNV
+
+
+data PhysicalDeviceRayTracingPropertiesNV
+
+instance ToCStruct PhysicalDeviceRayTracingPropertiesNV
+instance Show PhysicalDeviceRayTracingPropertiesNV
+
+instance FromCStruct PhysicalDeviceRayTracingPropertiesNV
+
+
+type role RayTracingPipelineCreateInfoNV nominal
+data RayTracingPipelineCreateInfoNV (es :: [Type])
+
+instance (Extendss RayTracingPipelineCreateInfoNV es, PokeChain es) => ToCStruct (RayTracingPipelineCreateInfoNV es)
+instance Show (Chain es) => Show (RayTracingPipelineCreateInfoNV es)
+
+instance (Extendss RayTracingPipelineCreateInfoNV es, PeekChain es) => FromCStruct (RayTracingPipelineCreateInfoNV es)
+
+
+data RayTracingShaderGroupCreateInfoNV
+
+instance ToCStruct RayTracingShaderGroupCreateInfoNV
+instance Show RayTracingShaderGroupCreateInfoNV
+
+instance FromCStruct RayTracingShaderGroupCreateInfoNV
+
+
+-- No documentation found for TopLevel "VkAccelerationStructureNV"
+type AccelerationStructureNV = AccelerationStructureKHR
+
diff --git a/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs b/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs
@@ -0,0 +1,168 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_representative_fragment_test  ( PhysicalDeviceRepresentativeFragmentTestFeaturesNV(..)
+                                                             , PipelineRepresentativeFragmentTestStateCreateInfoNV(..)
+                                                             , NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION
+                                                             , pattern NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION
+                                                             , NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME
+                                                             , pattern NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME
+                                                             ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV))
+-- | VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV - Structure
+-- describing the representative fragment test features that can be
+-- supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceRepresentativeFragmentTestFeaturesNV'
+-- structure describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceRepresentativeFragmentTestFeaturesNV' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceRepresentativeFragmentTestFeaturesNV' /can/ also be
+-- included in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
+-- to enable the feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceRepresentativeFragmentTestFeaturesNV = PhysicalDeviceRepresentativeFragmentTestFeaturesNV
+  { -- | @representativeFragmentTest@ indicates whether the implementation
+    -- supports the representative fragment test. See
+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-rep-frag-test Representative Fragment Test>.
+    representativeFragmentTest :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceRepresentativeFragmentTestFeaturesNV
+
+instance ToCStruct PhysicalDeviceRepresentativeFragmentTestFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceRepresentativeFragmentTestFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (representativeFragmentTest))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceRepresentativeFragmentTestFeaturesNV where
+  peekCStruct p = do
+    representativeFragmentTest <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceRepresentativeFragmentTestFeaturesNV
+             (bool32ToBool representativeFragmentTest)
+
+instance Storable PhysicalDeviceRepresentativeFragmentTestFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceRepresentativeFragmentTestFeaturesNV where
+  zero = PhysicalDeviceRepresentativeFragmentTestFeaturesNV
+           zero
+
+
+-- | VkPipelineRepresentativeFragmentTestStateCreateInfoNV - Structure
+-- specifying representative fragment test
+--
+-- = Description
+--
+-- If this structure is not present, @representativeFragmentTestEnable@ is
+-- considered to be 'Vulkan.Core10.BaseType.FALSE', and the representative
+-- fragment test is disabled.
+--
+-- If
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-earlytest early fragment tests>
+-- are not enabled in the active fragment shader, the representative
+-- fragment shader test has no effect, even if enabled.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineRepresentativeFragmentTestStateCreateInfoNV = PipelineRepresentativeFragmentTestStateCreateInfoNV
+  { -- | @representativeFragmentTestEnable@ controls whether the representative
+    -- fragment test is enabled.
+    representativeFragmentTestEnable :: Bool }
+  deriving (Typeable)
+deriving instance Show PipelineRepresentativeFragmentTestStateCreateInfoNV
+
+instance ToCStruct PipelineRepresentativeFragmentTestStateCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineRepresentativeFragmentTestStateCreateInfoNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (representativeFragmentTestEnable))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PipelineRepresentativeFragmentTestStateCreateInfoNV where
+  peekCStruct p = do
+    representativeFragmentTestEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PipelineRepresentativeFragmentTestStateCreateInfoNV
+             (bool32ToBool representativeFragmentTestEnable)
+
+instance Storable PipelineRepresentativeFragmentTestStateCreateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PipelineRepresentativeFragmentTestStateCreateInfoNV where
+  zero = PipelineRepresentativeFragmentTestStateCreateInfoNV
+           zero
+
+
+type NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION"
+pattern NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION = 2
+
+
+type NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME = "VK_NV_representative_fragment_test"
+
+-- No documentation found for TopLevel "VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME"
+pattern NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME = "VK_NV_representative_fragment_test"
+
diff --git a/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs-boot b/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_representative_fragment_test  ( PhysicalDeviceRepresentativeFragmentTestFeaturesNV
+                                                             , PipelineRepresentativeFragmentTestStateCreateInfoNV
+                                                             ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceRepresentativeFragmentTestFeaturesNV
+
+instance ToCStruct PhysicalDeviceRepresentativeFragmentTestFeaturesNV
+instance Show PhysicalDeviceRepresentativeFragmentTestFeaturesNV
+
+instance FromCStruct PhysicalDeviceRepresentativeFragmentTestFeaturesNV
+
+
+data PipelineRepresentativeFragmentTestStateCreateInfoNV
+
+instance ToCStruct PipelineRepresentativeFragmentTestStateCreateInfoNV
+instance Show PipelineRepresentativeFragmentTestStateCreateInfoNV
+
+instance FromCStruct PipelineRepresentativeFragmentTestStateCreateInfoNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_sample_mask_override_coverage.hs b/src/Vulkan/Extensions/VK_NV_sample_mask_override_coverage.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_sample_mask_override_coverage.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_sample_mask_override_coverage  ( NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION
+                                                              , pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION
+                                                              , NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME
+                                                              , pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME
+                                                              ) where
+
+import Data.String (IsString)
+
+type NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION"
+pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION = 1
+
+
+type NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME = "VK_NV_sample_mask_override_coverage"
+
+-- No documentation found for TopLevel "VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME"
+pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME = "VK_NV_sample_mask_override_coverage"
+
diff --git a/src/Vulkan/Extensions/VK_NV_scissor_exclusive.hs b/src/Vulkan/Extensions/VK_NV_scissor_exclusive.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_scissor_exclusive.hs
@@ -0,0 +1,360 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_scissor_exclusive  ( cmdSetExclusiveScissorNV
+                                                  , PhysicalDeviceExclusiveScissorFeaturesNV(..)
+                                                  , PipelineViewportExclusiveScissorStateCreateInfoNV(..)
+                                                  , NV_SCISSOR_EXCLUSIVE_SPEC_VERSION
+                                                  , pattern NV_SCISSOR_EXCLUSIVE_SPEC_VERSION
+                                                  , NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME
+                                                  , pattern NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME
+                                                  ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetExclusiveScissorNV))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.CommandBufferBuilding (Rect2D)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetExclusiveScissorNV
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()
+
+-- | vkCmdSetExclusiveScissorNV - Set the dynamic exclusive scissor
+-- rectangles on a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @firstExclusiveScissor@ is the index of the first exclusive scissor
+--     rectangle whose state is updated by the command.
+--
+-- -   @exclusiveScissorCount@ is the number of exclusive scissor
+--     rectangles updated by the command.
+--
+-- -   @pExclusiveScissors@ is a pointer to an array of
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures defining
+--     exclusive scissor rectangles.
+--
+-- = Description
+--
+-- The scissor rectangles taken from element i of @pExclusiveScissors@
+-- replace the current state for the scissor index @firstExclusiveScissor@
+-- + i, for i in [0, @exclusiveScissorCount@).
+--
+-- This command sets the state for a given draw when the graphics pipeline
+-- is created with
+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV'
+-- set in
+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-exclusiveScissor exclusive scissor>
+--     feature /must/ be enabled
+--
+-- -   @firstExclusiveScissor@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
+--
+-- -   The sum of @firstExclusiveScissor@ and @exclusiveScissorCount@
+--     /must/ be between @1@ and
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
+--     inclusive
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @firstExclusiveScissor@ /must/ be @0@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @exclusiveScissorCount@ /must/ be @1@
+--
+-- -   The @x@ and @y@ members of @offset@ in each member of
+--     @pExclusiveScissors@ /must/ be greater than or equal to @0@
+--
+-- -   Evaluation of (@offset.x@ + @extent.width@) for each member of
+--     @pExclusiveScissors@ /must/ not cause a signed integer addition
+--     overflow
+--
+-- -   Evaluation of (@offset.y@ + @extent.height@) for each member of
+--     @pExclusiveScissors@ /must/ not cause a signed integer addition
+--     overflow
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pExclusiveScissors@ /must/ be a valid pointer to an array of
+--     @exclusiveScissorCount@ 'Vulkan.Core10.CommandBufferBuilding.Rect2D'
+--     structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   @exclusiveScissorCount@ /must/ be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D'
+cmdSetExclusiveScissorNV :: forall io . MonadIO io => CommandBuffer -> ("firstExclusiveScissor" ::: Word32) -> ("exclusiveScissors" ::: Vector Rect2D) -> io ()
+cmdSetExclusiveScissorNV commandBuffer firstExclusiveScissor exclusiveScissors = liftIO . evalContT $ do
+  let vkCmdSetExclusiveScissorNVPtr = pVkCmdSetExclusiveScissorNV (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetExclusiveScissorNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetExclusiveScissorNV is null" Nothing Nothing
+  let vkCmdSetExclusiveScissorNV' = mkVkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNVPtr
+  pPExclusiveScissors <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (exclusiveScissors)) * 16) 4
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPExclusiveScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (exclusiveScissors)
+  lift $ vkCmdSetExclusiveScissorNV' (commandBufferHandle (commandBuffer)) (firstExclusiveScissor) ((fromIntegral (Data.Vector.length $ (exclusiveScissors)) :: Word32)) (pPExclusiveScissors)
+  pure $ ()
+
+
+-- | VkPhysicalDeviceExclusiveScissorFeaturesNV - Structure describing
+-- exclusive scissor features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceExclusiveScissorFeaturesNV' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-exclusive-scissor Exclusive Scissor Test>
+-- for more information.
+--
+-- If the 'PhysicalDeviceExclusiveScissorFeaturesNV' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceExclusiveScissorFeaturesNV' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the
+-- feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceExclusiveScissorFeaturesNV = PhysicalDeviceExclusiveScissorFeaturesNV
+  { -- | @exclusiveScissor@ indicates that the implementation supports the
+    -- exclusive scissor test.
+    exclusiveScissor :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceExclusiveScissorFeaturesNV
+
+instance ToCStruct PhysicalDeviceExclusiveScissorFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceExclusiveScissorFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (exclusiveScissor))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceExclusiveScissorFeaturesNV where
+  peekCStruct p = do
+    exclusiveScissor <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceExclusiveScissorFeaturesNV
+             (bool32ToBool exclusiveScissor)
+
+instance Storable PhysicalDeviceExclusiveScissorFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceExclusiveScissorFeaturesNV where
+  zero = PhysicalDeviceExclusiveScissorFeaturesNV
+           zero
+
+
+-- | VkPipelineViewportExclusiveScissorStateCreateInfoNV - Structure
+-- specifying parameters controlling exclusive scissor testing
+--
+-- = Description
+--
+-- If the
+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV'
+-- dynamic state is enabled for a pipeline, the @pExclusiveScissors@ member
+-- is ignored.
+--
+-- When this structure is included in the @pNext@ chain of
+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo', it defines
+-- parameters of the exclusive scissor test. If this structure is not
+-- included in the @pNext@ chain, it is equivalent to specifying this
+-- structure with a @exclusiveScissorCount@ of @0@.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @exclusiveScissorCount@ /must/ be @0@ or @1@
+--
+-- -   @exclusiveScissorCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
+--
+-- -   @exclusiveScissorCount@ /must/ be @0@ or identical to the
+--     @viewportCount@ member of
+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV'
+--     and @exclusiveScissorCount@ is not @0@, @pExclusiveScissors@ /must/
+--     be a valid pointer to an array of @exclusiveScissorCount@
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV'
+--
+-- -   If @exclusiveScissorCount@ is not @0@, and @pExclusiveScissors@ is
+--     not @NULL@, @pExclusiveScissors@ /must/ be a valid pointer to an
+--     array of @exclusiveScissorCount@
+--     'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineViewportExclusiveScissorStateCreateInfoNV = PipelineViewportExclusiveScissorStateCreateInfoNV
+  { -- | @exclusiveScissorCount@ is the number of exclusive scissor rectangles.
+    exclusiveScissorCount :: Word32
+  , -- | @pExclusiveScissors@ is a pointer to an array of
+    -- 'Vulkan.Core10.CommandBufferBuilding.Rect2D' structures defining
+    -- exclusive scissor rectangles.
+    exclusiveScissors :: Vector Rect2D
+  }
+  deriving (Typeable)
+deriving instance Show PipelineViewportExclusiveScissorStateCreateInfoNV
+
+instance ToCStruct PipelineViewportExclusiveScissorStateCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineViewportExclusiveScissorStateCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    let pExclusiveScissorsLength = Data.Vector.length $ (exclusiveScissors)
+    exclusiveScissorCount'' <- lift $ if (exclusiveScissorCount) == 0
+      then pure $ fromIntegral pExclusiveScissorsLength
+      else do
+        unless (fromIntegral pExclusiveScissorsLength == (exclusiveScissorCount) || pExclusiveScissorsLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pExclusiveScissors must be empty or have 'exclusiveScissorCount' elements" Nothing Nothing
+        pure (exclusiveScissorCount)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (exclusiveScissorCount'')
+    pExclusiveScissors'' <- if Data.Vector.null (exclusiveScissors)
+      then pure nullPtr
+      else do
+        pPExclusiveScissors <- ContT $ allocaBytesAligned @Rect2D (((Data.Vector.length (exclusiveScissors))) * 16) 4
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPExclusiveScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) ((exclusiveScissors))
+        pure $ pPExclusiveScissors
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Rect2D))) pExclusiveScissors''
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    f
+
+instance FromCStruct PipelineViewportExclusiveScissorStateCreateInfoNV where
+  peekCStruct p = do
+    exclusiveScissorCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pExclusiveScissors <- peek @(Ptr Rect2D) ((p `plusPtr` 24 :: Ptr (Ptr Rect2D)))
+    let pExclusiveScissorsLength = if pExclusiveScissors == nullPtr then 0 else (fromIntegral exclusiveScissorCount)
+    pExclusiveScissors' <- generateM pExclusiveScissorsLength (\i -> peekCStruct @Rect2D ((pExclusiveScissors `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))
+    pure $ PipelineViewportExclusiveScissorStateCreateInfoNV
+             exclusiveScissorCount pExclusiveScissors'
+
+instance Zero PipelineViewportExclusiveScissorStateCreateInfoNV where
+  zero = PipelineViewportExclusiveScissorStateCreateInfoNV
+           zero
+           mempty
+
+
+type NV_SCISSOR_EXCLUSIVE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION"
+pattern NV_SCISSOR_EXCLUSIVE_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_SCISSOR_EXCLUSIVE_SPEC_VERSION = 1
+
+
+type NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME = "VK_NV_scissor_exclusive"
+
+-- No documentation found for TopLevel "VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME"
+pattern NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME = "VK_NV_scissor_exclusive"
+
diff --git a/src/Vulkan/Extensions/VK_NV_scissor_exclusive.hs-boot b/src/Vulkan/Extensions/VK_NV_scissor_exclusive.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_scissor_exclusive.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_scissor_exclusive  ( PhysicalDeviceExclusiveScissorFeaturesNV
+                                                  , PipelineViewportExclusiveScissorStateCreateInfoNV
+                                                  ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceExclusiveScissorFeaturesNV
+
+instance ToCStruct PhysicalDeviceExclusiveScissorFeaturesNV
+instance Show PhysicalDeviceExclusiveScissorFeaturesNV
+
+instance FromCStruct PhysicalDeviceExclusiveScissorFeaturesNV
+
+
+data PipelineViewportExclusiveScissorStateCreateInfoNV
+
+instance ToCStruct PipelineViewportExclusiveScissorStateCreateInfoNV
+instance Show PipelineViewportExclusiveScissorStateCreateInfoNV
+
+instance FromCStruct PipelineViewportExclusiveScissorStateCreateInfoNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_shader_image_footprint.hs b/src/Vulkan/Extensions/VK_NV_shader_image_footprint.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_shader_image_footprint.hs
@@ -0,0 +1,105 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_shader_image_footprint  ( PhysicalDeviceShaderImageFootprintFeaturesNV(..)
+                                                       , NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION
+                                                       , pattern NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION
+                                                       , NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME
+                                                       , pattern NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME
+                                                       ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV))
+-- | VkPhysicalDeviceShaderImageFootprintFeaturesNV - Structure describing
+-- shader image footprint features that can be supported by an
+-- implementation
+--
+-- = Description
+--
+-- See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-footprint Texel Footprint Evaluation>
+-- for more information.
+--
+-- If the 'PhysicalDeviceShaderImageFootprintFeaturesNV' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- 'PhysicalDeviceShaderImageFootprintFeaturesNV' /can/ also be included in
+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderImageFootprintFeaturesNV = PhysicalDeviceShaderImageFootprintFeaturesNV
+  { -- | @imageFootprint@ specifies whether the implementation supports the
+    -- @ImageFootprintNV@ SPIR-V capability.
+    imageFootprint :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderImageFootprintFeaturesNV
+
+instance ToCStruct PhysicalDeviceShaderImageFootprintFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderImageFootprintFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (imageFootprint))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShaderImageFootprintFeaturesNV where
+  peekCStruct p = do
+    imageFootprint <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceShaderImageFootprintFeaturesNV
+             (bool32ToBool imageFootprint)
+
+instance Storable PhysicalDeviceShaderImageFootprintFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderImageFootprintFeaturesNV where
+  zero = PhysicalDeviceShaderImageFootprintFeaturesNV
+           zero
+
+
+type NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION"
+pattern NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION = 2
+
+
+type NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME = "VK_NV_shader_image_footprint"
+
+-- No documentation found for TopLevel "VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME"
+pattern NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME = "VK_NV_shader_image_footprint"
+
diff --git a/src/Vulkan/Extensions/VK_NV_shader_image_footprint.hs-boot b/src/Vulkan/Extensions/VK_NV_shader_image_footprint.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_shader_image_footprint.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_shader_image_footprint  (PhysicalDeviceShaderImageFootprintFeaturesNV) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderImageFootprintFeaturesNV
+
+instance ToCStruct PhysicalDeviceShaderImageFootprintFeaturesNV
+instance Show PhysicalDeviceShaderImageFootprintFeaturesNV
+
+instance FromCStruct PhysicalDeviceShaderImageFootprintFeaturesNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs b/src/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs
@@ -0,0 +1,174 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_shader_sm_builtins  ( PhysicalDeviceShaderSMBuiltinsPropertiesNV(..)
+                                                   , PhysicalDeviceShaderSMBuiltinsFeaturesNV(..)
+                                                   , NV_SHADER_SM_BUILTINS_SPEC_VERSION
+                                                   , pattern NV_SHADER_SM_BUILTINS_SPEC_VERSION
+                                                   , NV_SHADER_SM_BUILTINS_EXTENSION_NAME
+                                                   , pattern NV_SHADER_SM_BUILTINS_EXTENSION_NAME
+                                                   ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Kind (Type)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV))
+-- | VkPhysicalDeviceShaderSMBuiltinsPropertiesNV - Structure describing
+-- shader SM Builtins properties supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceShaderSMBuiltinsPropertiesNV'
+-- structure describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShaderSMBuiltinsPropertiesNV' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderSMBuiltinsPropertiesNV = PhysicalDeviceShaderSMBuiltinsPropertiesNV
+  { -- | @shaderSMCount@ is the number of SMs on the device.
+    shaderSMCount :: Word32
+  , -- | @shaderWarpsPerSM@ is the maximum number of simultaneously executing
+    -- warps on an SM.
+    shaderWarpsPerSM :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderSMBuiltinsPropertiesNV
+
+instance ToCStruct PhysicalDeviceShaderSMBuiltinsPropertiesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderSMBuiltinsPropertiesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (shaderSMCount)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (shaderWarpsPerSM)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct PhysicalDeviceShaderSMBuiltinsPropertiesNV where
+  peekCStruct p = do
+    shaderSMCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    shaderWarpsPerSM <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pure $ PhysicalDeviceShaderSMBuiltinsPropertiesNV
+             shaderSMCount shaderWarpsPerSM
+
+instance Storable PhysicalDeviceShaderSMBuiltinsPropertiesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderSMBuiltinsPropertiesNV where
+  zero = PhysicalDeviceShaderSMBuiltinsPropertiesNV
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceShaderSMBuiltinsFeaturesNV - Structure describing the
+-- shader SM Builtins features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceShaderSMBuiltinsFeaturesNV' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShaderSMBuiltinsFeaturesNV' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceShaderSMBuiltinsFeaturesNV' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the
+-- feature.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShaderSMBuiltinsFeaturesNV = PhysicalDeviceShaderSMBuiltinsFeaturesNV
+  { -- | @shaderSMBuiltins@ indicates whether the implementation supports the
+    -- SPIR-V @ShaderSMBuiltinsNV@ capability.
+    shaderSMBuiltins :: Bool }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShaderSMBuiltinsFeaturesNV
+
+instance ToCStruct PhysicalDeviceShaderSMBuiltinsFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShaderSMBuiltinsFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shaderSMBuiltins))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShaderSMBuiltinsFeaturesNV where
+  peekCStruct p = do
+    shaderSMBuiltins <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    pure $ PhysicalDeviceShaderSMBuiltinsFeaturesNV
+             (bool32ToBool shaderSMBuiltins)
+
+instance Storable PhysicalDeviceShaderSMBuiltinsFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShaderSMBuiltinsFeaturesNV where
+  zero = PhysicalDeviceShaderSMBuiltinsFeaturesNV
+           zero
+
+
+type NV_SHADER_SM_BUILTINS_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION"
+pattern NV_SHADER_SM_BUILTINS_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_SHADER_SM_BUILTINS_SPEC_VERSION = 1
+
+
+type NV_SHADER_SM_BUILTINS_EXTENSION_NAME = "VK_NV_shader_sm_builtins"
+
+-- No documentation found for TopLevel "VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME"
+pattern NV_SHADER_SM_BUILTINS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_SHADER_SM_BUILTINS_EXTENSION_NAME = "VK_NV_shader_sm_builtins"
+
diff --git a/src/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs-boot b/src/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_shader_sm_builtins  ( PhysicalDeviceShaderSMBuiltinsFeaturesNV
+                                                   , PhysicalDeviceShaderSMBuiltinsPropertiesNV
+                                                   ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PhysicalDeviceShaderSMBuiltinsFeaturesNV
+
+instance ToCStruct PhysicalDeviceShaderSMBuiltinsFeaturesNV
+instance Show PhysicalDeviceShaderSMBuiltinsFeaturesNV
+
+instance FromCStruct PhysicalDeviceShaderSMBuiltinsFeaturesNV
+
+
+data PhysicalDeviceShaderSMBuiltinsPropertiesNV
+
+instance ToCStruct PhysicalDeviceShaderSMBuiltinsPropertiesNV
+instance Show PhysicalDeviceShaderSMBuiltinsPropertiesNV
+
+instance FromCStruct PhysicalDeviceShaderSMBuiltinsPropertiesNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs b/src/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_shader_subgroup_partitioned  ( NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION
+                                                            , pattern NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION
+                                                            , NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME
+                                                            , pattern NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME
+                                                            ) where
+
+import Data.String (IsString)
+
+type NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION"
+pattern NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION = 1
+
+
+type NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME = "VK_NV_shader_subgroup_partitioned"
+
+-- No documentation found for TopLevel "VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME"
+pattern NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME = "VK_NV_shader_subgroup_partitioned"
+
diff --git a/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs b/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs
@@ -0,0 +1,1133 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_shading_rate_image  ( cmdBindShadingRateImageNV
+                                                   , cmdSetViewportShadingRatePaletteNV
+                                                   , cmdSetCoarseSampleOrderNV
+                                                   , ShadingRatePaletteNV(..)
+                                                   , PipelineViewportShadingRateImageStateCreateInfoNV(..)
+                                                   , PhysicalDeviceShadingRateImageFeaturesNV(..)
+                                                   , PhysicalDeviceShadingRateImagePropertiesNV(..)
+                                                   , CoarseSampleLocationNV(..)
+                                                   , CoarseSampleOrderCustomNV(..)
+                                                   , PipelineViewportCoarseSampleOrderStateCreateInfoNV(..)
+                                                   , ShadingRatePaletteEntryNV( SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV
+                                                                              , SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV
+                                                                              , ..
+                                                                              )
+                                                   , CoarseSampleOrderTypeNV( COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV
+                                                                            , COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV
+                                                                            , COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV
+                                                                            , COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV
+                                                                            , ..
+                                                                            )
+                                                   , NV_SHADING_RATE_IMAGE_SPEC_VERSION
+                                                   , pattern NV_SHADING_RATE_IMAGE_SPEC_VERSION
+                                                   , NV_SHADING_RATE_IMAGE_EXTENSION_NAME
+                                                   , pattern NV_SHADING_RATE_IMAGE_EXTENSION_NAME
+                                                   ) where
+
+import Control.Monad (unless)
+import Control.Monad.IO.Class (liftIO)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import qualified Data.Vector (null)
+import Control.Monad.IO.Class (MonadIO)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Data.Int (Int32)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (bool32ToBool)
+import Vulkan.Core10.BaseType (boolToBool32)
+import Vulkan.NamedType ((:::))
+import Vulkan.Core10.BaseType (Bool32)
+import Vulkan.Core10.Handles (CommandBuffer)
+import Vulkan.Core10.Handles (CommandBuffer(..))
+import Vulkan.Core10.Handles (CommandBuffer_T)
+import Vulkan.Dynamic (DeviceCmds(pVkCmdBindShadingRateImageNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetCoarseSampleOrderNV))
+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetViewportShadingRatePaletteNV))
+import Vulkan.Core10.SharedTypes (Extent2D)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
+import Vulkan.Core10.Enums.ImageLayout (ImageLayout(..))
+import Vulkan.Core10.Handles (ImageView)
+import Vulkan.Core10.Handles (ImageView(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV))
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdBindShadingRateImageNV
+  :: FunPtr (Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ()) -> Ptr CommandBuffer_T -> ImageView -> ImageLayout -> IO ()
+
+-- | vkCmdBindShadingRateImageNV - Bind a shading rate image on a command
+-- buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @imageView@ is an image view handle specifying the shading rate
+--     image. @imageView@ /may/ be set to
+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', which is equivalent to
+--     specifying a view of an image filled with zero values.
+--
+-- -   @imageLayout@ is the layout that the image subresources accessible
+--     from @imageView@ will be in when the shading rate image is accessed.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
+--     feature /must/ be enabled
+--
+-- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it
+--     /must/ be a valid 'Vulkan.Core10.Handles.ImageView' handle of type
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or
+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
+--
+-- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it
+--     /must/ have a format of 'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'
+--
+-- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it
+--     /must/ have been created with a @usage@ value including
+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV'
+--
+-- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @imageLayout@ /must/ match the actual
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' of each subresource
+--     accessible from @imageView@ at the time the subresource is accessed
+--
+-- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @imageLayout@ /must/ be
+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV'
+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
+--     @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView'
+--     handle
+--
+-- -   @imageLayout@ /must/ be a valid
+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   Both of @commandBuffer@, and @imageView@ that are valid handles of
+--     non-ignored parameters /must/ have been created, allocated, or
+--     retrieved from the same 'Vulkan.Core10.Handles.Device'
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer',
+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
+-- 'Vulkan.Core10.Handles.ImageView'
+cmdBindShadingRateImageNV :: forall io . MonadIO io => CommandBuffer -> ImageView -> ImageLayout -> io ()
+cmdBindShadingRateImageNV commandBuffer imageView imageLayout = liftIO $ do
+  let vkCmdBindShadingRateImageNVPtr = pVkCmdBindShadingRateImageNV (deviceCmds (commandBuffer :: CommandBuffer))
+  unless (vkCmdBindShadingRateImageNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindShadingRateImageNV is null" Nothing Nothing
+  let vkCmdBindShadingRateImageNV' = mkVkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNVPtr
+  vkCmdBindShadingRateImageNV' (commandBufferHandle (commandBuffer)) (imageView) (imageLayout)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetViewportShadingRatePaletteNV
+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr ShadingRatePaletteNV -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr ShadingRatePaletteNV -> IO ()
+
+-- | vkCmdSetViewportShadingRatePaletteNV - Set shading rate image palettes
+-- on a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @firstViewport@ is the index of the first viewport whose shading
+--     rate palette is updated by the command.
+--
+-- -   @viewportCount@ is the number of viewports whose shading rate
+--     palettes are updated by the command.
+--
+-- -   @pShadingRatePalettes@ is a pointer to an array of
+--     'ShadingRatePaletteNV' structures defining the palette for each
+--     viewport.
+--
+-- == Valid Usage
+--
+-- -   The
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
+--     feature /must/ be enabled
+--
+-- -   @firstViewport@ /must/ be less than
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
+--
+-- -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@
+--     and
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,
+--     inclusive
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @firstViewport@ /must/ be @0@
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @viewportCount@ /must/ be @1@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @pShadingRatePalettes@ /must/ be a valid pointer to an array of
+--     @viewportCount@ valid 'ShadingRatePaletteNV' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- -   @viewportCount@ /must/ be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.CommandBuffer', 'ShadingRatePaletteNV'
+cmdSetViewportShadingRatePaletteNV :: forall io . MonadIO io => CommandBuffer -> ("firstViewport" ::: Word32) -> ("shadingRatePalettes" ::: Vector ShadingRatePaletteNV) -> io ()
+cmdSetViewportShadingRatePaletteNV commandBuffer firstViewport shadingRatePalettes = liftIO . evalContT $ do
+  let vkCmdSetViewportShadingRatePaletteNVPtr = pVkCmdSetViewportShadingRatePaletteNV (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetViewportShadingRatePaletteNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetViewportShadingRatePaletteNV is null" Nothing Nothing
+  let vkCmdSetViewportShadingRatePaletteNV' = mkVkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNVPtr
+  pPShadingRatePalettes <- ContT $ allocaBytesAligned @ShadingRatePaletteNV ((Data.Vector.length (shadingRatePalettes)) * 16) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPShadingRatePalettes `plusPtr` (16 * (i)) :: Ptr ShadingRatePaletteNV) (e) . ($ ())) (shadingRatePalettes)
+  lift $ vkCmdSetViewportShadingRatePaletteNV' (commandBufferHandle (commandBuffer)) (firstViewport) ((fromIntegral (Data.Vector.length $ (shadingRatePalettes)) :: Word32)) (pPShadingRatePalettes)
+  pure $ ()
+
+
+foreign import ccall
+#if !defined(SAFE_FOREIGN_CALLS)
+  unsafe
+#endif
+  "dynamic" mkVkCmdSetCoarseSampleOrderNV
+  :: FunPtr (Ptr CommandBuffer_T -> CoarseSampleOrderTypeNV -> Word32 -> Ptr CoarseSampleOrderCustomNV -> IO ()) -> Ptr CommandBuffer_T -> CoarseSampleOrderTypeNV -> Word32 -> Ptr CoarseSampleOrderCustomNV -> IO ()
+
+-- | vkCmdSetCoarseSampleOrderNV - Set sample order for coarse fragments on a
+-- command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @sampleOrderType@ specifies the mechanism used to order coverage
+--     samples in fragments larger than one pixel.
+--
+-- -   @customSampleOrderCount@ specifies the number of custom sample
+--     orderings to use when ordering coverage samples.
+--
+-- -   @pCustomSampleOrders@ is a pointer to an array of
+--     'CoarseSampleOrderCustomNV' structures, each of which specifies the
+--     coverage sample order for a single combination of fragment area and
+--     coverage sample count.
+--
+-- = Description
+--
+-- If @sampleOrderType@ is 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV', the
+-- coverage sample order used for any combination of fragment area and
+-- coverage sample count not enumerated in @pCustomSampleOrders@ will be
+-- identical to that used for 'COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV'.
+--
+-- == Valid Usage
+--
+-- -   If @sampleOrderType@ is not 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV',
+--     @customSamplerOrderCount@ /must/ be @0@
+--
+-- -   The array @pCustomSampleOrders@ /must/ not contain two structures
+--     with matching values for both the @shadingRate@ and @sampleCount@
+--     members
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid
+--     'Vulkan.Core10.Handles.CommandBuffer' handle
+--
+-- -   @sampleOrderType@ /must/ be a valid 'CoarseSampleOrderTypeNV' value
+--
+-- -   If @customSampleOrderCount@ is not @0@, @pCustomSampleOrders@ /must/
+--     be a valid pointer to an array of @customSampleOrderCount@ valid
+--     'CoarseSampleOrderCustomNV' structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
+--
+-- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
+--     allocated from /must/ support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
+--     @commandBuffer@ was allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
+-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'CoarseSampleOrderCustomNV', 'CoarseSampleOrderTypeNV',
+-- 'Vulkan.Core10.Handles.CommandBuffer'
+cmdSetCoarseSampleOrderNV :: forall io . MonadIO io => CommandBuffer -> CoarseSampleOrderTypeNV -> ("customSampleOrders" ::: Vector CoarseSampleOrderCustomNV) -> io ()
+cmdSetCoarseSampleOrderNV commandBuffer sampleOrderType customSampleOrders = liftIO . evalContT $ do
+  let vkCmdSetCoarseSampleOrderNVPtr = pVkCmdSetCoarseSampleOrderNV (deviceCmds (commandBuffer :: CommandBuffer))
+  lift $ unless (vkCmdSetCoarseSampleOrderNVPtr /= nullFunPtr) $
+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetCoarseSampleOrderNV is null" Nothing Nothing
+  let vkCmdSetCoarseSampleOrderNV' = mkVkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNVPtr
+  pPCustomSampleOrders <- ContT $ allocaBytesAligned @CoarseSampleOrderCustomNV ((Data.Vector.length (customSampleOrders)) * 24) 8
+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCustomSampleOrders `plusPtr` (24 * (i)) :: Ptr CoarseSampleOrderCustomNV) (e) . ($ ())) (customSampleOrders)
+  lift $ vkCmdSetCoarseSampleOrderNV' (commandBufferHandle (commandBuffer)) (sampleOrderType) ((fromIntegral (Data.Vector.length $ (customSampleOrders)) :: Word32)) (pPCustomSampleOrders)
+  pure $ ()
+
+
+-- | VkShadingRatePaletteNV - Structure specifying a single shading rate
+-- palette
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PipelineViewportShadingRateImageStateCreateInfoNV',
+-- 'ShadingRatePaletteEntryNV', 'cmdSetViewportShadingRatePaletteNV'
+data ShadingRatePaletteNV = ShadingRatePaletteNV
+  { -- | @pShadingRatePaletteEntries@ /must/ be a valid pointer to an array of
+    -- @shadingRatePaletteEntryCount@ valid 'ShadingRatePaletteEntryNV' values
+    shadingRatePaletteEntries :: Vector ShadingRatePaletteEntryNV }
+  deriving (Typeable)
+deriving instance Show ShadingRatePaletteNV
+
+instance ToCStruct ShadingRatePaletteNV where
+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ShadingRatePaletteNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (shadingRatePaletteEntries)) :: Word32))
+    pPShadingRatePaletteEntries' <- ContT $ allocaBytesAligned @ShadingRatePaletteEntryNV ((Data.Vector.length (shadingRatePaletteEntries)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPShadingRatePaletteEntries' `plusPtr` (4 * (i)) :: Ptr ShadingRatePaletteEntryNV) (e)) (shadingRatePaletteEntries)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ShadingRatePaletteEntryNV))) (pPShadingRatePaletteEntries')
+    lift $ f
+  cStructSize = 16
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    pPShadingRatePaletteEntries' <- ContT $ allocaBytesAligned @ShadingRatePaletteEntryNV ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPShadingRatePaletteEntries' `plusPtr` (4 * (i)) :: Ptr ShadingRatePaletteEntryNV) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ShadingRatePaletteEntryNV))) (pPShadingRatePaletteEntries')
+    lift $ f
+
+instance FromCStruct ShadingRatePaletteNV where
+  peekCStruct p = do
+    shadingRatePaletteEntryCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    pShadingRatePaletteEntries <- peek @(Ptr ShadingRatePaletteEntryNV) ((p `plusPtr` 8 :: Ptr (Ptr ShadingRatePaletteEntryNV)))
+    pShadingRatePaletteEntries' <- generateM (fromIntegral shadingRatePaletteEntryCount) (\i -> peek @ShadingRatePaletteEntryNV ((pShadingRatePaletteEntries `advancePtrBytes` (4 * (i)) :: Ptr ShadingRatePaletteEntryNV)))
+    pure $ ShadingRatePaletteNV
+             pShadingRatePaletteEntries'
+
+instance Zero ShadingRatePaletteNV where
+  zero = ShadingRatePaletteNV
+           mempty
+
+
+-- | VkPipelineViewportShadingRateImageStateCreateInfoNV - Structure
+-- specifying parameters controlling shading rate image usage
+--
+-- = Description
+--
+-- If this structure is not present, @shadingRateImageEnable@ is considered
+-- to be 'Vulkan.Core10.BaseType.FALSE', and the shading rate image and
+-- palettes are not used.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>
+--     feature is not enabled, @viewportCount@ /must/ be @0@ or @1@
+--
+-- -   @viewportCount@ /must/ be less than or equal to
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@
+--
+-- -   If @shadingRateImageEnable@ is 'Vulkan.Core10.BaseType.TRUE',
+--     @viewportCount@ /must/ be equal to the @viewportCount@ member of
+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV',
+--     @pShadingRatePalettes@ /must/ be a valid pointer to an array of
+--     @viewportCount@ 'ShadingRatePaletteNV' structures
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV'
+--
+-- -   If @viewportCount@ is not @0@, and @pShadingRatePalettes@ is not
+--     @NULL@, @pShadingRatePalettes@ /must/ be a valid pointer to an array
+--     of @viewportCount@ valid 'ShadingRatePaletteNV' structures
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32', 'ShadingRatePaletteNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineViewportShadingRateImageStateCreateInfoNV = PipelineViewportShadingRateImageStateCreateInfoNV
+  { -- | @shadingRateImageEnable@ specifies whether shading rate image and
+    -- palettes are used during rasterization.
+    shadingRateImageEnable :: Bool
+  , -- | @viewportCount@ specifies the number of per-viewport palettes used to
+    -- translate values stored in shading rate images.
+    viewportCount :: Word32
+  , -- | @pShadingRatePalettes@ is a pointer to an array of
+    -- 'ShadingRatePaletteNV' structures defining the palette for each
+    -- viewport. If the shading rate palette state is dynamic, this member is
+    -- ignored.
+    shadingRatePalettes :: Vector ShadingRatePaletteNV
+  }
+  deriving (Typeable)
+deriving instance Show PipelineViewportShadingRateImageStateCreateInfoNV
+
+instance ToCStruct PipelineViewportShadingRateImageStateCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineViewportShadingRateImageStateCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shadingRateImageEnable))
+    let pShadingRatePalettesLength = Data.Vector.length $ (shadingRatePalettes)
+    viewportCount'' <- lift $ if (viewportCount) == 0
+      then pure $ fromIntegral pShadingRatePalettesLength
+      else do
+        unless (fromIntegral pShadingRatePalettesLength == (viewportCount) || pShadingRatePalettesLength == 0) $
+          throwIO $ IOError Nothing InvalidArgument "" "pShadingRatePalettes must be empty or have 'viewportCount' elements" Nothing Nothing
+        pure (viewportCount)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (viewportCount'')
+    pShadingRatePalettes'' <- if Data.Vector.null (shadingRatePalettes)
+      then pure nullPtr
+      else do
+        pPShadingRatePalettes <- ContT $ allocaBytesAligned @ShadingRatePaletteNV (((Data.Vector.length (shadingRatePalettes))) * 16) 8
+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPShadingRatePalettes `plusPtr` (16 * (i)) :: Ptr ShadingRatePaletteNV) (e) . ($ ())) ((shadingRatePalettes))
+        pure $ pPShadingRatePalettes
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ShadingRatePaletteNV))) pShadingRatePalettes''
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PipelineViewportShadingRateImageStateCreateInfoNV where
+  peekCStruct p = do
+    shadingRateImageEnable <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pShadingRatePalettes <- peek @(Ptr ShadingRatePaletteNV) ((p `plusPtr` 24 :: Ptr (Ptr ShadingRatePaletteNV)))
+    let pShadingRatePalettesLength = if pShadingRatePalettes == nullPtr then 0 else (fromIntegral viewportCount)
+    pShadingRatePalettes' <- generateM pShadingRatePalettesLength (\i -> peekCStruct @ShadingRatePaletteNV ((pShadingRatePalettes `advancePtrBytes` (16 * (i)) :: Ptr ShadingRatePaletteNV)))
+    pure $ PipelineViewportShadingRateImageStateCreateInfoNV
+             (bool32ToBool shadingRateImageEnable) viewportCount pShadingRatePalettes'
+
+instance Zero PipelineViewportShadingRateImageStateCreateInfoNV where
+  zero = PipelineViewportShadingRateImageStateCreateInfoNV
+           zero
+           zero
+           mempty
+
+
+-- | VkPhysicalDeviceShadingRateImageFeaturesNV - Structure describing
+-- shading rate image features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceShadingRateImageFeaturesNV' structure
+-- describe the following features:
+--
+-- = Description
+--
+-- See
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image Shading Rate Image>
+-- for more information.
+--
+-- If the 'PhysicalDeviceShadingRateImageFeaturesNV' structure is included
+-- in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
+-- it is filled with values indicating whether the feature is supported.
+-- 'PhysicalDeviceShadingRateImageFeaturesNV' /can/ also be included in the
+-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
+-- features.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.BaseType.Bool32',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShadingRateImageFeaturesNV = PhysicalDeviceShadingRateImageFeaturesNV
+  { -- | @shadingRateImage@ indicates that the implementation supports the use of
+    -- a shading rate image to derive an effective shading rate for fragment
+    -- processing. It also indicates that the implementation supports the
+    -- @ShadingRateNV@ SPIR-V execution mode.
+    shadingRateImage :: Bool
+  , -- | @shadingRateCoarseSampleOrder@ indicates that the implementation
+    -- supports a user-configurable ordering of coverage samples in fragments
+    -- larger than one pixel.
+    shadingRateCoarseSampleOrder :: Bool
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShadingRateImageFeaturesNV
+
+instance ToCStruct PhysicalDeviceShadingRateImageFeaturesNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShadingRateImageFeaturesNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (shadingRateImage))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (shadingRateCoarseSampleOrder))
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))
+    f
+
+instance FromCStruct PhysicalDeviceShadingRateImageFeaturesNV where
+  peekCStruct p = do
+    shadingRateImage <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
+    shadingRateCoarseSampleOrder <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
+    pure $ PhysicalDeviceShadingRateImageFeaturesNV
+             (bool32ToBool shadingRateImage) (bool32ToBool shadingRateCoarseSampleOrder)
+
+instance Storable PhysicalDeviceShadingRateImageFeaturesNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero PhysicalDeviceShadingRateImageFeaturesNV where
+  zero = PhysicalDeviceShadingRateImageFeaturesNV
+           zero
+           zero
+
+
+-- | VkPhysicalDeviceShadingRateImagePropertiesNV - Structure describing
+-- shading rate image limits that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the 'PhysicalDeviceShadingRateImagePropertiesNV'
+-- structure describe the following implementation-dependent properties
+-- related to the
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image shading rate image>
+-- feature:
+--
+-- = Description
+--
+-- If the 'PhysicalDeviceShadingRateImagePropertiesNV' structure is
+-- included in the @pNext@ chain of
+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.SharedTypes.Extent2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PhysicalDeviceShadingRateImagePropertiesNV = PhysicalDeviceShadingRateImagePropertiesNV
+  { -- | @shadingRateTexelSize@ indicates the width and height of the portion of
+    -- the framebuffer corresponding to each texel in the shading rate image.
+    shadingRateTexelSize :: Extent2D
+  , -- | @shadingRatePaletteSize@ indicates the maximum number of palette entries
+    -- supported for the shading rate image.
+    shadingRatePaletteSize :: Word32
+  , -- | @shadingRateMaxCoarseSamples@ specifies the maximum number of coverage
+    -- samples supported in a single fragment. If the product of the fragment
+    -- size derived from the base shading rate and the number of coverage
+    -- samples per pixel exceeds this limit, the final shading rate will be
+    -- adjusted so that its product does not exceed the limit.
+    shadingRateMaxCoarseSamples :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show PhysicalDeviceShadingRateImagePropertiesNV
+
+instance ToCStruct PhysicalDeviceShadingRateImagePropertiesNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PhysicalDeviceShadingRateImagePropertiesNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (shadingRateTexelSize) . ($ ())
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (shadingRatePaletteSize)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (shadingRateMaxCoarseSamples)
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Extent2D)) (zero) . ($ ())
+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)
+    lift $ f
+
+instance FromCStruct PhysicalDeviceShadingRateImagePropertiesNV where
+  peekCStruct p = do
+    shadingRateTexelSize <- peekCStruct @Extent2D ((p `plusPtr` 16 :: Ptr Extent2D))
+    shadingRatePaletteSize <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
+    shadingRateMaxCoarseSamples <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
+    pure $ PhysicalDeviceShadingRateImagePropertiesNV
+             shadingRateTexelSize shadingRatePaletteSize shadingRateMaxCoarseSamples
+
+instance Zero PhysicalDeviceShadingRateImagePropertiesNV where
+  zero = PhysicalDeviceShadingRateImagePropertiesNV
+           zero
+           zero
+           zero
+
+
+-- | VkCoarseSampleLocationNV - Structure specifying parameters controlling
+-- shading rate image usage
+--
+-- == Valid Usage
+--
+-- = See Also
+--
+-- 'CoarseSampleOrderCustomNV'
+data CoarseSampleLocationNV = CoarseSampleLocationNV
+  { -- | @pixelX@ /must/ be less than the width (in pixels) of the fragment
+    pixelX :: Word32
+  , -- | @pixelY@ /must/ be less than the height (in pixels) of the fragment
+    pixelY :: Word32
+  , -- | @sample@ /must/ be less than the number of coverage samples in each
+    -- pixel belonging to the fragment
+    sample :: Word32
+  }
+  deriving (Typeable)
+deriving instance Show CoarseSampleLocationNV
+
+instance ToCStruct CoarseSampleLocationNV where
+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CoarseSampleLocationNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (pixelX)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (pixelY)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (sample)
+    f
+  cStructSize = 12
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)
+    f
+
+instance FromCStruct CoarseSampleLocationNV where
+  peekCStruct p = do
+    pixelX <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))
+    pixelY <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    sample <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pure $ CoarseSampleLocationNV
+             pixelX pixelY sample
+
+instance Storable CoarseSampleLocationNV where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero CoarseSampleLocationNV where
+  zero = CoarseSampleLocationNV
+           zero
+           zero
+           zero
+
+
+-- | VkCoarseSampleOrderCustomNV - Structure specifying parameters
+-- controlling shading rate image usage
+--
+-- = Description
+--
+-- When using a custom sample ordering, element /j/ in @pSampleLocations@
+-- specifies a specific pixel location and
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask sample index>
+-- that corresponds to
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask coverage index>
+-- /j/ in the multi-pixel fragment.
+--
+-- == Valid Usage
+--
+-- -   @shadingRate@ /must/ be a shading rate that generates fragments with
+--     more than one pixel
+--
+-- -   @sampleCount@ /must/ correspond to a sample count enumerated in
+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags' whose
+--     corresponding bit is set in
+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@framebufferNoAttachmentsSampleCounts@
+--
+-- -   @sampleLocationCount@ /must/ be equal to the product of
+--     @sampleCount@, the fragment width for @shadingRate@, and the
+--     fragment height for @shadingRate@
+--
+-- -   @sampleLocationCount@ /must/ be less than or equal to the value of
+--     'PhysicalDeviceShadingRateImagePropertiesNV'::@shadingRateMaxCoarseSamples@
+--
+-- -   The array @pSampleLocations@ /must/ contain exactly one entry for
+--     every combination of valid values for @pixelX@, @pixelY@, and
+--     @sample@ in the structure 'CoarseSampleOrderCustomNV'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @shadingRate@ /must/ be a valid 'ShadingRatePaletteEntryNV' value
+--
+-- -   @pSampleLocations@ /must/ be a valid pointer to an array of
+--     @sampleLocationCount@ 'CoarseSampleLocationNV' structures
+--
+-- -   @sampleLocationCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'CoarseSampleLocationNV',
+-- 'PipelineViewportCoarseSampleOrderStateCreateInfoNV',
+-- 'ShadingRatePaletteEntryNV', 'cmdSetCoarseSampleOrderNV'
+data CoarseSampleOrderCustomNV = CoarseSampleOrderCustomNV
+  { -- | @shadingRate@ is a shading rate palette entry that identifies the
+    -- fragment width and height for the combination of fragment area and
+    -- per-pixel coverage sample count to control.
+    shadingRate :: ShadingRatePaletteEntryNV
+  , -- | @sampleCount@ identifies the per-pixel coverage sample count for the
+    -- combination of fragment area and coverage sample count to control.
+    sampleCount :: Word32
+  , -- | @pSampleLocations@ is a pointer to an array of
+    -- 'CoarseSampleOrderCustomNV' structures specifying the location of each
+    -- sample in the custom ordering.
+    sampleLocations :: Vector CoarseSampleLocationNV
+  }
+  deriving (Typeable)
+deriving instance Show CoarseSampleOrderCustomNV
+
+instance ToCStruct CoarseSampleOrderCustomNV where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CoarseSampleOrderCustomNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr ShadingRatePaletteEntryNV)) (shadingRate)
+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (sampleCount)
+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (sampleLocations)) :: Word32))
+    pPSampleLocations' <- ContT $ allocaBytesAligned @CoarseSampleLocationNV ((Data.Vector.length (sampleLocations)) * 12) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSampleLocations' `plusPtr` (12 * (i)) :: Ptr CoarseSampleLocationNV) (e) . ($ ())) (sampleLocations)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CoarseSampleLocationNV))) (pPSampleLocations')
+    lift $ f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr ShadingRatePaletteEntryNV)) (zero)
+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)
+    pPSampleLocations' <- ContT $ allocaBytesAligned @CoarseSampleLocationNV ((Data.Vector.length (mempty)) * 12) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPSampleLocations' `plusPtr` (12 * (i)) :: Ptr CoarseSampleLocationNV) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CoarseSampleLocationNV))) (pPSampleLocations')
+    lift $ f
+
+instance FromCStruct CoarseSampleOrderCustomNV where
+  peekCStruct p = do
+    shadingRate <- peek @ShadingRatePaletteEntryNV ((p `plusPtr` 0 :: Ptr ShadingRatePaletteEntryNV))
+    sampleCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
+    sampleLocationCount <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
+    pSampleLocations <- peek @(Ptr CoarseSampleLocationNV) ((p `plusPtr` 16 :: Ptr (Ptr CoarseSampleLocationNV)))
+    pSampleLocations' <- generateM (fromIntegral sampleLocationCount) (\i -> peekCStruct @CoarseSampleLocationNV ((pSampleLocations `advancePtrBytes` (12 * (i)) :: Ptr CoarseSampleLocationNV)))
+    pure $ CoarseSampleOrderCustomNV
+             shadingRate sampleCount pSampleLocations'
+
+instance Zero CoarseSampleOrderCustomNV where
+  zero = CoarseSampleOrderCustomNV
+           zero
+           zero
+           mempty
+
+
+-- | VkPipelineViewportCoarseSampleOrderStateCreateInfoNV - Structure
+-- specifying parameters controlling sample order in coarse fragments
+--
+-- = Description
+--
+-- If this structure is not present, @sampleOrderType@ is considered to be
+-- 'COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV'.
+--
+-- If @sampleOrderType@ is 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV', the
+-- coverage sample order used for any combination of fragment area and
+-- coverage sample count not enumerated in @pCustomSampleOrders@ will be
+-- identical to that used for 'COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV'.
+--
+-- If the pipeline was created with
+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV',
+-- the contents of this structure (if present) are ignored, and the
+-- coverage sample order is instead specified by
+-- 'cmdSetCoarseSampleOrderNV'.
+--
+-- == Valid Usage
+--
+-- -   If @sampleOrderType@ is not 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV',
+--     @customSamplerOrderCount@ /must/ be @0@
+--
+-- -   The array @pCustomSampleOrders@ /must/ not contain two structures
+--     with matching values for both the @shadingRate@ and @sampleCount@
+--     members
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV'
+--
+-- -   @sampleOrderType@ /must/ be a valid 'CoarseSampleOrderTypeNV' value
+--
+-- -   If @customSampleOrderCount@ is not @0@, @pCustomSampleOrders@ /must/
+--     be a valid pointer to an array of @customSampleOrderCount@ valid
+--     'CoarseSampleOrderCustomNV' structures
+--
+-- = See Also
+--
+-- 'CoarseSampleOrderCustomNV', 'CoarseSampleOrderTypeNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data PipelineViewportCoarseSampleOrderStateCreateInfoNV = PipelineViewportCoarseSampleOrderStateCreateInfoNV
+  { -- | @sampleOrderType@ specifies the mechanism used to order coverage samples
+    -- in fragments larger than one pixel.
+    sampleOrderType :: CoarseSampleOrderTypeNV
+  , -- | @pCustomSampleOrders@ is a pointer to an array of
+    -- @customSampleOrderCount@ 'CoarseSampleOrderCustomNV' structures, each of
+    -- which specifies the coverage sample order for a single combination of
+    -- fragment area and coverage sample count.
+    customSampleOrders :: Vector CoarseSampleOrderCustomNV
+  }
+  deriving (Typeable)
+deriving instance Show PipelineViewportCoarseSampleOrderStateCreateInfoNV
+
+instance ToCStruct PipelineViewportCoarseSampleOrderStateCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineViewportCoarseSampleOrderStateCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr CoarseSampleOrderTypeNV)) (sampleOrderType)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (customSampleOrders)) :: Word32))
+    pPCustomSampleOrders' <- ContT $ allocaBytesAligned @CoarseSampleOrderCustomNV ((Data.Vector.length (customSampleOrders)) * 24) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCustomSampleOrders' `plusPtr` (24 * (i)) :: Ptr CoarseSampleOrderCustomNV) (e) . ($ ())) (customSampleOrders)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr CoarseSampleOrderCustomNV))) (pPCustomSampleOrders')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr CoarseSampleOrderTypeNV)) (zero)
+    pPCustomSampleOrders' <- ContT $ allocaBytesAligned @CoarseSampleOrderCustomNV ((Data.Vector.length (mempty)) * 24) 8
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPCustomSampleOrders' `plusPtr` (24 * (i)) :: Ptr CoarseSampleOrderCustomNV) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr CoarseSampleOrderCustomNV))) (pPCustomSampleOrders')
+    lift $ f
+
+instance FromCStruct PipelineViewportCoarseSampleOrderStateCreateInfoNV where
+  peekCStruct p = do
+    sampleOrderType <- peek @CoarseSampleOrderTypeNV ((p `plusPtr` 16 :: Ptr CoarseSampleOrderTypeNV))
+    customSampleOrderCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pCustomSampleOrders <- peek @(Ptr CoarseSampleOrderCustomNV) ((p `plusPtr` 24 :: Ptr (Ptr CoarseSampleOrderCustomNV)))
+    pCustomSampleOrders' <- generateM (fromIntegral customSampleOrderCount) (\i -> peekCStruct @CoarseSampleOrderCustomNV ((pCustomSampleOrders `advancePtrBytes` (24 * (i)) :: Ptr CoarseSampleOrderCustomNV)))
+    pure $ PipelineViewportCoarseSampleOrderStateCreateInfoNV
+             sampleOrderType pCustomSampleOrders'
+
+instance Zero PipelineViewportCoarseSampleOrderStateCreateInfoNV where
+  zero = PipelineViewportCoarseSampleOrderStateCreateInfoNV
+           zero
+           mempty
+
+
+-- | VkShadingRatePaletteEntryNV - Shading rate image palette entry types
+--
+-- = Description
+--
+-- The following table indicates the width and height (in pixels) of each
+-- fragment generated using the indicated shading rate, as well as the
+-- maximum number of fragment shader invocations launched for each
+-- fragment. When processing regions of a primitive that have a shading
+-- rate of 'SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV', no fragments
+-- will be generated in that region.
+--
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | Shading Rate                                                | Width           | Height          | Invocations     |
+-- +=============================================================+=================+=================+=================+
+-- | 'SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV'              | 0               | 0               | 0               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV'    | 1               | 1               | 16              |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV'     | 1               | 1               | 8               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV'     | 1               | 1               | 4               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV'     | 1               | 1               | 2               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV'      | 1               | 1               | 1               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV' | 2               | 1               | 1               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV' | 1               | 2               | 1               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV' | 2               | 2               | 1               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV' | 4               | 2               | 1               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV' | 2               | 4               | 1               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+-- | 'SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV' | 4               | 4               | 1               |
+-- +-------------------------------------------------------------+-----------------+-----------------+-----------------+
+--
+-- = See Also
+--
+-- 'CoarseSampleOrderCustomNV', 'ShadingRatePaletteNV'
+newtype ShadingRatePaletteEntryNV = ShadingRatePaletteEntryNV Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV = ShadingRatePaletteEntryNV 0
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV = ShadingRatePaletteEntryNV 1
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV = ShadingRatePaletteEntryNV 2
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV = ShadingRatePaletteEntryNV 3
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV = ShadingRatePaletteEntryNV 4
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV = ShadingRatePaletteEntryNV 5
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV = ShadingRatePaletteEntryNV 6
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV = ShadingRatePaletteEntryNV 7
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV = ShadingRatePaletteEntryNV 8
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV = ShadingRatePaletteEntryNV 9
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV = ShadingRatePaletteEntryNV 10
+-- No documentation found for Nested "VkShadingRatePaletteEntryNV" "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV"
+pattern SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV = ShadingRatePaletteEntryNV 11
+{-# complete SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV,
+             SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV,
+             SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV,
+             SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV,
+             SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV,
+             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV,
+             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV,
+             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV,
+             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV,
+             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV,
+             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV,
+             SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV :: ShadingRatePaletteEntryNV #-}
+
+instance Show ShadingRatePaletteEntryNV where
+  showsPrec p = \case
+    SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV"
+    SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV -> showString "SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV"
+    SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV -> showString "SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV"
+    SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV -> showString "SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV"
+    SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV -> showString "SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV"
+    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV"
+    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV"
+    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV"
+    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV"
+    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV"
+    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV"
+    SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV -> showString "SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV"
+    ShadingRatePaletteEntryNV x -> showParen (p >= 11) (showString "ShadingRatePaletteEntryNV " . showsPrec 11 x)
+
+instance Read ShadingRatePaletteEntryNV where
+  readPrec = parens (choose [("SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV", pure SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV", pure SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV", pure SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV", pure SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV", pure SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV)
+                            , ("SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV", pure SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ShadingRatePaletteEntryNV")
+                       v <- step readPrec
+                       pure (ShadingRatePaletteEntryNV v)))
+
+
+-- | VkCoarseSampleOrderTypeNV - Shading rate image sample ordering types
+--
+-- = See Also
+--
+-- 'PipelineViewportCoarseSampleOrderStateCreateInfoNV',
+-- 'cmdSetCoarseSampleOrderNV'
+newtype CoarseSampleOrderTypeNV = CoarseSampleOrderTypeNV Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- | 'COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV' specifies that coverage samples
+-- will be ordered in an implementation-dependent manner.
+pattern COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV = CoarseSampleOrderTypeNV 0
+-- | 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV' specifies that coverage samples
+-- will be ordered according to the array of custom orderings provided in
+-- either the @pCustomSampleOrders@ member of
+-- 'PipelineViewportCoarseSampleOrderStateCreateInfoNV' or the
+-- @pCustomSampleOrders@ member of 'cmdSetCoarseSampleOrderNV'.
+pattern COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV = CoarseSampleOrderTypeNV 1
+-- | 'COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV' specifies that coverage
+-- samples will be ordered sequentially, sorted first by pixel coordinate
+-- (in row-major order) and then by
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask sample index>.
+pattern COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV = CoarseSampleOrderTypeNV 2
+-- | 'COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV' specifies that coverage
+-- samples will be ordered sequentially, sorted first by
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask sample index>
+-- and then by pixel coordinate (in row-major order).
+pattern COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV = CoarseSampleOrderTypeNV 3
+{-# complete COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV,
+             COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV,
+             COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV,
+             COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV :: CoarseSampleOrderTypeNV #-}
+
+instance Show CoarseSampleOrderTypeNV where
+  showsPrec p = \case
+    COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV -> showString "COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV"
+    COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV -> showString "COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV"
+    COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV -> showString "COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV"
+    COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV -> showString "COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV"
+    CoarseSampleOrderTypeNV x -> showParen (p >= 11) (showString "CoarseSampleOrderTypeNV " . showsPrec 11 x)
+
+instance Read CoarseSampleOrderTypeNV where
+  readPrec = parens (choose [("COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV", pure COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV)
+                            , ("COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV", pure COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV)
+                            , ("COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV", pure COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV)
+                            , ("COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV", pure COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "CoarseSampleOrderTypeNV")
+                       v <- step readPrec
+                       pure (CoarseSampleOrderTypeNV v)))
+
+
+type NV_SHADING_RATE_IMAGE_SPEC_VERSION = 3
+
+-- No documentation found for TopLevel "VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION"
+pattern NV_SHADING_RATE_IMAGE_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_SHADING_RATE_IMAGE_SPEC_VERSION = 3
+
+
+type NV_SHADING_RATE_IMAGE_EXTENSION_NAME = "VK_NV_shading_rate_image"
+
+-- No documentation found for TopLevel "VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME"
+pattern NV_SHADING_RATE_IMAGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_SHADING_RATE_IMAGE_EXTENSION_NAME = "VK_NV_shading_rate_image"
+
diff --git a/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs-boot b/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_shading_rate_image.hs-boot
@@ -0,0 +1,72 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_shading_rate_image  ( CoarseSampleLocationNV
+                                                   , CoarseSampleOrderCustomNV
+                                                   , PhysicalDeviceShadingRateImageFeaturesNV
+                                                   , PhysicalDeviceShadingRateImagePropertiesNV
+                                                   , PipelineViewportCoarseSampleOrderStateCreateInfoNV
+                                                   , PipelineViewportShadingRateImageStateCreateInfoNV
+                                                   , ShadingRatePaletteNV
+                                                   , CoarseSampleOrderTypeNV
+                                                   ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data CoarseSampleLocationNV
+
+instance ToCStruct CoarseSampleLocationNV
+instance Show CoarseSampleLocationNV
+
+instance FromCStruct CoarseSampleLocationNV
+
+
+data CoarseSampleOrderCustomNV
+
+instance ToCStruct CoarseSampleOrderCustomNV
+instance Show CoarseSampleOrderCustomNV
+
+instance FromCStruct CoarseSampleOrderCustomNV
+
+
+data PhysicalDeviceShadingRateImageFeaturesNV
+
+instance ToCStruct PhysicalDeviceShadingRateImageFeaturesNV
+instance Show PhysicalDeviceShadingRateImageFeaturesNV
+
+instance FromCStruct PhysicalDeviceShadingRateImageFeaturesNV
+
+
+data PhysicalDeviceShadingRateImagePropertiesNV
+
+instance ToCStruct PhysicalDeviceShadingRateImagePropertiesNV
+instance Show PhysicalDeviceShadingRateImagePropertiesNV
+
+instance FromCStruct PhysicalDeviceShadingRateImagePropertiesNV
+
+
+data PipelineViewportCoarseSampleOrderStateCreateInfoNV
+
+instance ToCStruct PipelineViewportCoarseSampleOrderStateCreateInfoNV
+instance Show PipelineViewportCoarseSampleOrderStateCreateInfoNV
+
+instance FromCStruct PipelineViewportCoarseSampleOrderStateCreateInfoNV
+
+
+data PipelineViewportShadingRateImageStateCreateInfoNV
+
+instance ToCStruct PipelineViewportShadingRateImageStateCreateInfoNV
+instance Show PipelineViewportShadingRateImageStateCreateInfoNV
+
+instance FromCStruct PipelineViewportShadingRateImageStateCreateInfoNV
+
+
+data ShadingRatePaletteNV
+
+instance ToCStruct ShadingRatePaletteNV
+instance Show ShadingRatePaletteNV
+
+instance FromCStruct ShadingRatePaletteNV
+
+
+data CoarseSampleOrderTypeNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_viewport_array2.hs b/src/Vulkan/Extensions/VK_NV_viewport_array2.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_viewport_array2.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_viewport_array2  ( NV_VIEWPORT_ARRAY2_SPEC_VERSION
+                                                , pattern NV_VIEWPORT_ARRAY2_SPEC_VERSION
+                                                , NV_VIEWPORT_ARRAY2_EXTENSION_NAME
+                                                , pattern NV_VIEWPORT_ARRAY2_EXTENSION_NAME
+                                                ) where
+
+import Data.String (IsString)
+
+type NV_VIEWPORT_ARRAY2_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION"
+pattern NV_VIEWPORT_ARRAY2_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_VIEWPORT_ARRAY2_SPEC_VERSION = 1
+
+
+type NV_VIEWPORT_ARRAY2_EXTENSION_NAME = "VK_NV_viewport_array2"
+
+-- No documentation found for TopLevel "VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME"
+pattern NV_VIEWPORT_ARRAY2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_VIEWPORT_ARRAY2_EXTENSION_NAME = "VK_NV_viewport_array2"
+
diff --git a/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs b/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
@@ -0,0 +1,287 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_viewport_swizzle  ( ViewportSwizzleNV(..)
+                                                 , PipelineViewportSwizzleStateCreateInfoNV(..)
+                                                 , PipelineViewportSwizzleStateCreateFlagsNV(..)
+                                                 , ViewportCoordinateSwizzleNV( VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV
+                                                                              , VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV
+                                                                              , VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV
+                                                                              , VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV
+                                                                              , VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV
+                                                                              , VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV
+                                                                              , VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV
+                                                                              , VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV
+                                                                              , ..
+                                                                              )
+                                                 , NV_VIEWPORT_SWIZZLE_SPEC_VERSION
+                                                 , pattern NV_VIEWPORT_SWIZZLE_SPEC_VERSION
+                                                 , NV_VIEWPORT_SWIZZLE_EXTENSION_NAME
+                                                 , pattern NV_VIEWPORT_SWIZZLE_EXTENSION_NAME
+                                                 ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import GHC.Read (choose)
+import GHC.Read (expectP)
+import GHC.Read (parens)
+import GHC.Show (showParen)
+import GHC.Show (showString)
+import GHC.Show (showsPrec)
+import Numeric (showHex)
+import Text.ParserCombinators.ReadPrec ((+++))
+import Text.ParserCombinators.ReadPrec (prec)
+import Text.ParserCombinators.ReadPrec (step)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.Bits (Bits)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Data.Int (Int32)
+import Foreign.Ptr (Ptr)
+import GHC.Read (Read(readPrec))
+import Data.Word (Word32)
+import Text.Read.Lex (Lexeme(Ident))
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.BaseType (Flags)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero)
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV))
+-- | VkViewportSwizzleNV - Structure specifying a viewport swizzle
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PipelineViewportSwizzleStateCreateInfoNV',
+-- 'ViewportCoordinateSwizzleNV'
+data ViewportSwizzleNV = ViewportSwizzleNV
+  { -- | @x@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value
+    x :: ViewportCoordinateSwizzleNV
+  , -- | @y@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value
+    y :: ViewportCoordinateSwizzleNV
+  , -- | @z@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value
+    z :: ViewportCoordinateSwizzleNV
+  , -- | @w@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value
+    w :: ViewportCoordinateSwizzleNV
+  }
+  deriving (Typeable)
+deriving instance Show ViewportSwizzleNV
+
+instance ToCStruct ViewportSwizzleNV where
+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p ViewportSwizzleNV{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr ViewportCoordinateSwizzleNV)) (x)
+    poke ((p `plusPtr` 4 :: Ptr ViewportCoordinateSwizzleNV)) (y)
+    poke ((p `plusPtr` 8 :: Ptr ViewportCoordinateSwizzleNV)) (z)
+    poke ((p `plusPtr` 12 :: Ptr ViewportCoordinateSwizzleNV)) (w)
+    f
+  cStructSize = 16
+  cStructAlignment = 4
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr ViewportCoordinateSwizzleNV)) (zero)
+    poke ((p `plusPtr` 4 :: Ptr ViewportCoordinateSwizzleNV)) (zero)
+    poke ((p `plusPtr` 8 :: Ptr ViewportCoordinateSwizzleNV)) (zero)
+    poke ((p `plusPtr` 12 :: Ptr ViewportCoordinateSwizzleNV)) (zero)
+    f
+
+instance FromCStruct ViewportSwizzleNV where
+  peekCStruct p = do
+    x <- peek @ViewportCoordinateSwizzleNV ((p `plusPtr` 0 :: Ptr ViewportCoordinateSwizzleNV))
+    y <- peek @ViewportCoordinateSwizzleNV ((p `plusPtr` 4 :: Ptr ViewportCoordinateSwizzleNV))
+    z <- peek @ViewportCoordinateSwizzleNV ((p `plusPtr` 8 :: Ptr ViewportCoordinateSwizzleNV))
+    w <- peek @ViewportCoordinateSwizzleNV ((p `plusPtr` 12 :: Ptr ViewportCoordinateSwizzleNV))
+    pure $ ViewportSwizzleNV
+             x y z w
+
+instance Storable ViewportSwizzleNV where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero ViewportSwizzleNV where
+  zero = ViewportSwizzleNV
+           zero
+           zero
+           zero
+           zero
+
+
+-- | VkPipelineViewportSwizzleStateCreateInfoNV - Structure specifying
+-- swizzle applied to primitive clip coordinates
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'PipelineViewportSwizzleStateCreateFlagsNV',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'ViewportSwizzleNV'
+data PipelineViewportSwizzleStateCreateInfoNV = PipelineViewportSwizzleStateCreateInfoNV
+  { -- | @flags@ /must/ be @0@
+    flags :: PipelineViewportSwizzleStateCreateFlagsNV
+  , -- | @pViewportSwizzles@ /must/ be a valid pointer to an array of
+    -- @viewportCount@ valid 'ViewportSwizzleNV' structures
+    viewportSwizzles :: Vector ViewportSwizzleNV
+  }
+  deriving (Typeable)
+deriving instance Show PipelineViewportSwizzleStateCreateInfoNV
+
+instance ToCStruct PipelineViewportSwizzleStateCreateInfoNV where
+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p PipelineViewportSwizzleStateCreateInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineViewportSwizzleStateCreateFlagsNV)) (flags)
+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (viewportSwizzles)) :: Word32))
+    pPViewportSwizzles' <- ContT $ allocaBytesAligned @ViewportSwizzleNV ((Data.Vector.length (viewportSwizzles)) * 16) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewportSwizzles' `plusPtr` (16 * (i)) :: Ptr ViewportSwizzleNV) (e) . ($ ())) (viewportSwizzles)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ViewportSwizzleNV))) (pPViewportSwizzles')
+    lift $ f
+  cStructSize = 32
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPViewportSwizzles' <- ContT $ allocaBytesAligned @ViewportSwizzleNV ((Data.Vector.length (mempty)) * 16) 4
+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewportSwizzles' `plusPtr` (16 * (i)) :: Ptr ViewportSwizzleNV) (e) . ($ ())) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ViewportSwizzleNV))) (pPViewportSwizzles')
+    lift $ f
+
+instance FromCStruct PipelineViewportSwizzleStateCreateInfoNV where
+  peekCStruct p = do
+    flags <- peek @PipelineViewportSwizzleStateCreateFlagsNV ((p `plusPtr` 16 :: Ptr PipelineViewportSwizzleStateCreateFlagsNV))
+    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
+    pViewportSwizzles <- peek @(Ptr ViewportSwizzleNV) ((p `plusPtr` 24 :: Ptr (Ptr ViewportSwizzleNV)))
+    pViewportSwizzles' <- generateM (fromIntegral viewportCount) (\i -> peekCStruct @ViewportSwizzleNV ((pViewportSwizzles `advancePtrBytes` (16 * (i)) :: Ptr ViewportSwizzleNV)))
+    pure $ PipelineViewportSwizzleStateCreateInfoNV
+             flags pViewportSwizzles'
+
+instance Zero PipelineViewportSwizzleStateCreateInfoNV where
+  zero = PipelineViewportSwizzleStateCreateInfoNV
+           zero
+           mempty
+
+
+-- | VkPipelineViewportSwizzleStateCreateFlagsNV - Reserved for future use
+--
+-- = Description
+--
+-- 'PipelineViewportSwizzleStateCreateFlagsNV' is a bitmask type for
+-- setting a mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'PipelineViewportSwizzleStateCreateInfoNV'
+newtype PipelineViewportSwizzleStateCreateFlagsNV = PipelineViewportSwizzleStateCreateFlagsNV Flags
+  deriving newtype (Eq, Ord, Storable, Zero, Bits)
+
+
+
+instance Show PipelineViewportSwizzleStateCreateFlagsNV where
+  showsPrec p = \case
+    PipelineViewportSwizzleStateCreateFlagsNV x -> showParen (p >= 11) (showString "PipelineViewportSwizzleStateCreateFlagsNV 0x" . showHex x)
+
+instance Read PipelineViewportSwizzleStateCreateFlagsNV where
+  readPrec = parens (choose []
+                     +++
+                     prec 10 (do
+                       expectP (Ident "PipelineViewportSwizzleStateCreateFlagsNV")
+                       v <- step readPrec
+                       pure (PipelineViewportSwizzleStateCreateFlagsNV v)))
+
+
+-- | VkViewportCoordinateSwizzleNV - Specify how a viewport coordinate is
+-- swizzled
+--
+-- = Description
+--
+-- These values are described in detail in
+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-viewport-swizzle Viewport Swizzle>.
+--
+-- = See Also
+--
+-- 'ViewportSwizzleNV'
+newtype ViewportCoordinateSwizzleNV = ViewportCoordinateSwizzleNV Int32
+  deriving newtype (Eq, Ord, Storable, Zero)
+
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV"
+pattern VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = ViewportCoordinateSwizzleNV 0
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV"
+pattern VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = ViewportCoordinateSwizzleNV 1
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV"
+pattern VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = ViewportCoordinateSwizzleNV 2
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV"
+pattern VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = ViewportCoordinateSwizzleNV 3
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV"
+pattern VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = ViewportCoordinateSwizzleNV 4
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV"
+pattern VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = ViewportCoordinateSwizzleNV 5
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV"
+pattern VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = ViewportCoordinateSwizzleNV 6
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV"
+pattern VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = ViewportCoordinateSwizzleNV 7
+{-# complete VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV,
+             VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV,
+             VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV,
+             VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV,
+             VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV,
+             VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV,
+             VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV,
+             VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV :: ViewportCoordinateSwizzleNV #-}
+
+instance Show ViewportCoordinateSwizzleNV where
+  showsPrec p = \case
+    VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV"
+    VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV"
+    VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV"
+    VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV"
+    VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV"
+    VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV"
+    VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV"
+    VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV -> showString "VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV"
+    ViewportCoordinateSwizzleNV x -> showParen (p >= 11) (showString "ViewportCoordinateSwizzleNV " . showsPrec 11 x)
+
+instance Read ViewportCoordinateSwizzleNV where
+  readPrec = parens (choose [("VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV", pure VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV)
+                            , ("VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV", pure VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV)
+                            , ("VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV", pure VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV)
+                            , ("VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV", pure VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV)
+                            , ("VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV", pure VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV)
+                            , ("VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV", pure VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV)
+                            , ("VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV", pure VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV)
+                            , ("VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV", pure VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV)]
+                     +++
+                     prec 10 (do
+                       expectP (Ident "ViewportCoordinateSwizzleNV")
+                       v <- step readPrec
+                       pure (ViewportCoordinateSwizzleNV v)))
+
+
+type NV_VIEWPORT_SWIZZLE_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION"
+pattern NV_VIEWPORT_SWIZZLE_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_VIEWPORT_SWIZZLE_SPEC_VERSION = 1
+
+
+type NV_VIEWPORT_SWIZZLE_EXTENSION_NAME = "VK_NV_viewport_swizzle"
+
+-- No documentation found for TopLevel "VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME"
+pattern NV_VIEWPORT_SWIZZLE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_VIEWPORT_SWIZZLE_EXTENSION_NAME = "VK_NV_viewport_swizzle"
+
diff --git a/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs-boot b/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_viewport_swizzle  ( PipelineViewportSwizzleStateCreateInfoNV
+                                                 , ViewportSwizzleNV
+                                                 ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data PipelineViewportSwizzleStateCreateInfoNV
+
+instance ToCStruct PipelineViewportSwizzleStateCreateInfoNV
+instance Show PipelineViewportSwizzleStateCreateInfoNV
+
+instance FromCStruct PipelineViewportSwizzleStateCreateInfoNV
+
+
+data ViewportSwizzleNV
+
+instance ToCStruct ViewportSwizzleNV
+instance Show ViewportSwizzleNV
+
+instance FromCStruct ViewportSwizzleNV
+
diff --git a/src/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs b/src/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs
@@ -0,0 +1,190 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_win32_keyed_mutex  ( Win32KeyedMutexAcquireReleaseInfoNV(..)
+                                                  , NV_WIN32_KEYED_MUTEX_SPEC_VERSION
+                                                  , pattern NV_WIN32_KEYED_MUTEX_SPEC_VERSION
+                                                  , NV_WIN32_KEYED_MUTEX_EXTENSION_NAME
+                                                  , pattern NV_WIN32_KEYED_MUTEX_EXTENSION_NAME
+                                                  ) where
+
+import Control.Monad (unless)
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import GHC.IO (throwIO)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.Vector (generateM)
+import qualified Data.Vector (imapM_)
+import qualified Data.Vector (length)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import GHC.IO.Exception (IOErrorType(..))
+import GHC.IO.Exception (IOException(..))
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Data.Vector (Vector)
+import Vulkan.CStruct.Utils (advancePtrBytes)
+import Vulkan.Core10.Handles (DeviceMemory)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV))
+-- | VkWin32KeyedMutexAcquireReleaseInfoNV - use Windows keyex mutex
+-- mechanism to synchronize work
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV'
+--
+-- -   If @acquireCount@ is not @0@, @pAcquireSyncs@ /must/ be a valid
+--     pointer to an array of @acquireCount@ valid
+--     'Vulkan.Core10.Handles.DeviceMemory' 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
+--     'Vulkan.Core10.Handles.DeviceMemory' 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 of non-ignored parameters
+--     /must/ have been created, allocated, or retrieved from the same
+--     'Vulkan.Core10.Handles.Device'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Handles.DeviceMemory',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType'
+data Win32KeyedMutexAcquireReleaseInfoNV = Win32KeyedMutexAcquireReleaseInfoNV
+  { -- | @pAcquireSyncs@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.DeviceMemory' objects which were imported from
+    -- Direct3D 11 resources.
+    acquireSyncs :: Vector DeviceMemory
+  , -- | @pAcquireKeys@ is a pointer to an array of mutex key values to wait for
+    -- prior to beginning the submitted work. Entries refer to the keyed mutex
+    -- associated with the corresponding entries in @pAcquireSyncs@.
+    acquireKeys :: Vector Word64
+  , -- | @pAcquireTimeoutMilliseconds@ is a pointer to an array of timeout
+    -- values, in millisecond units, for each acquire specified in
+    -- @pAcquireKeys@.
+    acquireTimeoutMilliseconds :: Vector Word32
+  , -- | @pReleaseSyncs@ is a pointer to an array of
+    -- 'Vulkan.Core10.Handles.DeviceMemory' objects which were imported from
+    -- Direct3D 11 resources.
+    releaseSyncs :: Vector DeviceMemory
+  , -- | @pReleaseKeys@ is a pointer to an array of mutex key values to set when
+    -- the submitted work has completed. Entries refer to the keyed mutex
+    -- associated with the corresponding entries in @pReleaseSyncs@.
+    releaseKeys :: Vector Word64
+  }
+  deriving (Typeable)
+deriving instance Show Win32KeyedMutexAcquireReleaseInfoNV
+
+instance ToCStruct Win32KeyedMutexAcquireReleaseInfoNV where
+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p Win32KeyedMutexAcquireReleaseInfoNV{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    let pAcquireSyncsLength = Data.Vector.length $ (acquireSyncs)
+    lift $ unless ((Data.Vector.length $ (acquireKeys)) == pAcquireSyncsLength) $
+      throwIO $ IOError Nothing InvalidArgument "" "pAcquireKeys and pAcquireSyncs must have the same length" Nothing Nothing
+    lift $ unless ((Data.Vector.length $ (acquireTimeoutMilliseconds)) == pAcquireSyncsLength) $
+      throwIO $ IOError Nothing InvalidArgument "" "pAcquireTimeoutMilliseconds and pAcquireSyncs must have the same length" Nothing Nothing
+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral pAcquireSyncsLength :: Word32))
+    pPAcquireSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (acquireSyncs)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (acquireSyncs)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory))) (pPAcquireSyncs')
+    pPAcquireKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (acquireKeys)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (acquireKeys)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPAcquireKeys')
+    pPAcquireTimeoutMilliseconds' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (acquireTimeoutMilliseconds)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireTimeoutMilliseconds' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (acquireTimeoutMilliseconds)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPAcquireTimeoutMilliseconds')
+    let pReleaseSyncsLength = Data.Vector.length $ (releaseSyncs)
+    lift $ unless ((Data.Vector.length $ (releaseKeys)) == pReleaseSyncsLength) $
+      throwIO $ IOError Nothing InvalidArgument "" "pReleaseKeys and pReleaseSyncs must have the same length" Nothing Nothing
+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral pReleaseSyncsLength :: Word32))
+    pPReleaseSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (releaseSyncs)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (releaseSyncs)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory))) (pPReleaseSyncs')
+    pPReleaseKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (releaseKeys)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (releaseKeys)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word64))) (pPReleaseKeys')
+    lift $ f
+  cStructSize = 72
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    pPAcquireSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory))) (pPAcquireSyncs')
+    pPAcquireKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Word64))) (pPAcquireKeys')
+    pPAcquireTimeoutMilliseconds' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAcquireTimeoutMilliseconds' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Word32))) (pPAcquireTimeoutMilliseconds')
+    pPReleaseSyncs' <- ContT $ allocaBytesAligned @DeviceMemory ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseSyncs' `plusPtr` (8 * (i)) :: Ptr DeviceMemory) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory))) (pPReleaseSyncs')
+    pPReleaseKeys' <- ContT $ allocaBytesAligned @Word64 ((Data.Vector.length (mempty)) * 8) 8
+    lift $ Data.Vector.imapM_ (\i e -> poke (pPReleaseKeys' `plusPtr` (8 * (i)) :: Ptr Word64) (e)) (mempty)
+    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr Word64))) (pPReleaseKeys')
+    lift $ f
+
+instance FromCStruct Win32KeyedMutexAcquireReleaseInfoNV where
+  peekCStruct p = do
+    acquireCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
+    pAcquireSyncs <- peek @(Ptr DeviceMemory) ((p `plusPtr` 24 :: Ptr (Ptr DeviceMemory)))
+    pAcquireSyncs' <- generateM (fromIntegral acquireCount) (\i -> peek @DeviceMemory ((pAcquireSyncs `advancePtrBytes` (8 * (i)) :: Ptr DeviceMemory)))
+    pAcquireKeys <- peek @(Ptr Word64) ((p `plusPtr` 32 :: Ptr (Ptr Word64)))
+    pAcquireKeys' <- generateM (fromIntegral acquireCount) (\i -> peek @Word64 ((pAcquireKeys `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    pAcquireTimeoutMilliseconds <- peek @(Ptr Word32) ((p `plusPtr` 40 :: Ptr (Ptr Word32)))
+    pAcquireTimeoutMilliseconds' <- generateM (fromIntegral acquireCount) (\i -> peek @Word32 ((pAcquireTimeoutMilliseconds `advancePtrBytes` (4 * (i)) :: Ptr Word32)))
+    releaseCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
+    pReleaseSyncs <- peek @(Ptr DeviceMemory) ((p `plusPtr` 56 :: Ptr (Ptr DeviceMemory)))
+    pReleaseSyncs' <- generateM (fromIntegral releaseCount) (\i -> peek @DeviceMemory ((pReleaseSyncs `advancePtrBytes` (8 * (i)) :: Ptr DeviceMemory)))
+    pReleaseKeys <- peek @(Ptr Word64) ((p `plusPtr` 64 :: Ptr (Ptr Word64)))
+    pReleaseKeys' <- generateM (fromIntegral releaseCount) (\i -> peek @Word64 ((pReleaseKeys `advancePtrBytes` (8 * (i)) :: Ptr Word64)))
+    pure $ Win32KeyedMutexAcquireReleaseInfoNV
+             pAcquireSyncs' pAcquireKeys' pAcquireTimeoutMilliseconds' pReleaseSyncs' pReleaseKeys'
+
+instance Zero Win32KeyedMutexAcquireReleaseInfoNV where
+  zero = Win32KeyedMutexAcquireReleaseInfoNV
+           mempty
+           mempty
+           mempty
+           mempty
+           mempty
+
+
+type NV_WIN32_KEYED_MUTEX_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION"
+pattern NV_WIN32_KEYED_MUTEX_SPEC_VERSION :: forall a . Integral a => a
+pattern NV_WIN32_KEYED_MUTEX_SPEC_VERSION = 2
+
+
+type NV_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_NV_win32_keyed_mutex"
+
+-- No documentation found for TopLevel "VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME"
+pattern NV_WIN32_KEYED_MUTEX_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern NV_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_NV_win32_keyed_mutex"
+
diff --git a/src/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs-boot b/src/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs-boot
@@ -0,0 +1,13 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_NV_win32_keyed_mutex  (Win32KeyedMutexAcquireReleaseInfoNV) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data Win32KeyedMutexAcquireReleaseInfoNV
+
+instance ToCStruct Win32KeyedMutexAcquireReleaseInfoNV
+instance Show Win32KeyedMutexAcquireReleaseInfoNV
+
+instance FromCStruct Win32KeyedMutexAcquireReleaseInfoNV
+
diff --git a/src/Vulkan/Extensions/VK_QCOM_render_pass_shader_resolve.hs b/src/Vulkan/Extensions/VK_QCOM_render_pass_shader_resolve.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_QCOM_render_pass_shader_resolve.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_QCOM_render_pass_shader_resolve  ( QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION
+                                                             , pattern QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION
+                                                             , QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME
+                                                             , pattern QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME
+                                                             ) where
+
+import Data.String (IsString)
+
+type QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION = 4
+
+-- No documentation found for TopLevel "VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION"
+pattern QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION :: forall a . Integral a => a
+pattern QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION = 4
+
+
+type QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME = "VK_QCOM_render_pass_shader_resolve"
+
+-- No documentation found for TopLevel "VK_QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME"
+pattern QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME = "VK_QCOM_render_pass_shader_resolve"
+
diff --git a/src/Vulkan/Extensions/VK_QCOM_render_pass_store_ops.hs b/src/Vulkan/Extensions/VK_QCOM_render_pass_store_ops.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_QCOM_render_pass_store_ops.hs
@@ -0,0 +1,22 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_QCOM_render_pass_store_ops  ( QCOM_render_pass_store_ops_SPEC_VERSION
+                                                        , pattern QCOM_render_pass_store_ops_SPEC_VERSION
+                                                        , QCOM_render_pass_store_ops_EXTENSION_NAME
+                                                        , pattern QCOM_render_pass_store_ops_EXTENSION_NAME
+                                                        ) where
+
+import Data.String (IsString)
+
+type QCOM_render_pass_store_ops_SPEC_VERSION = 2
+
+-- No documentation found for TopLevel "VK_QCOM_render_pass_store_ops_SPEC_VERSION"
+pattern QCOM_render_pass_store_ops_SPEC_VERSION :: forall a . Integral a => a
+pattern QCOM_render_pass_store_ops_SPEC_VERSION = 2
+
+
+type QCOM_render_pass_store_ops_EXTENSION_NAME = "VK_QCOM_render_pass_store_ops"
+
+-- No documentation found for TopLevel "VK_QCOM_render_pass_store_ops_EXTENSION_NAME"
+pattern QCOM_render_pass_store_ops_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern QCOM_render_pass_store_ops_EXTENSION_NAME = "VK_QCOM_render_pass_store_ops"
+
diff --git a/src/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs b/src/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs
@@ -0,0 +1,179 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_QCOM_render_pass_transform  ( RenderPassTransformBeginInfoQCOM(..)
+                                                        , CommandBufferInheritanceRenderPassTransformInfoQCOM(..)
+                                                        , QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION
+                                                        , pattern QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION
+                                                        , QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME
+                                                        , pattern QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME
+                                                        , SurfaceTransformFlagBitsKHR(..)
+                                                        , SurfaceTransformFlagsKHR
+                                                        ) where
+
+import Foreign.Marshal.Alloc (allocaBytesAligned)
+import Foreign.Ptr (nullPtr)
+import Foreign.Ptr (plusPtr)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Cont (evalContT)
+import Data.String (IsString)
+import Data.Typeable (Typeable)
+import Foreign.Storable (Storable)
+import Foreign.Storable (Storable(peek))
+import Foreign.Storable (Storable(poke))
+import qualified Foreign.Storable (Storable(..))
+import Foreign.Ptr (Ptr)
+import Data.Kind (Type)
+import Control.Monad.Trans.Cont (ContT(..))
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (FromCStruct(..))
+import Vulkan.Core10.CommandBufferBuilding (Rect2D)
+import Vulkan.Core10.Enums.StructureType (StructureType)
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR)
+import Vulkan.CStruct (ToCStruct)
+import Vulkan.CStruct (ToCStruct(..))
+import Vulkan.Zero (Zero(..))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM))
+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagBitsKHR(..))
+import Vulkan.Extensions.VK_KHR_surface (SurfaceTransformFlagsKHR)
+-- | VkRenderPassTransformBeginInfoQCOM - Structure describing transform
+-- parameters of a render pass instance
+--
+-- == Valid Usage
+--
+-- -   @transform@ /must/ be
+--     'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_IDENTITY_BIT_KHR',
+--     'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_90_BIT_KHR',
+--     'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_180_BIT_KHR',
+--     or
+--     'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_270_BIT_KHR'
+--
+-- -   The @renderpass@ /must/ have been created with
+--     'Vulkan.Core10.Pass.RenderPassCreateInfo'::@flags@ containing
+--     'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM'
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR'
+data RenderPassTransformBeginInfoQCOM = RenderPassTransformBeginInfoQCOM
+  { -- | @transform@ is a
+    -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' value
+    -- describing the transform to be applied to rasterization.
+    transform :: SurfaceTransformFlagBitsKHR }
+  deriving (Typeable)
+deriving instance Show RenderPassTransformBeginInfoQCOM
+
+instance ToCStruct RenderPassTransformBeginInfoQCOM where
+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p RenderPassTransformBeginInfoQCOM{..} f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR)) (transform)
+    f
+  cStructSize = 24
+  cStructAlignment = 8
+  pokeZeroCStruct p f = do
+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM)
+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    poke ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
+    f
+
+instance FromCStruct RenderPassTransformBeginInfoQCOM where
+  peekCStruct p = do
+    transform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR))
+    pure $ RenderPassTransformBeginInfoQCOM
+             transform
+
+instance Storable RenderPassTransformBeginInfoQCOM where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek = peekCStruct
+  poke ptr poked = pokeCStruct ptr poked (pure ())
+
+instance Zero RenderPassTransformBeginInfoQCOM where
+  zero = RenderPassTransformBeginInfoQCOM
+           zero
+
+
+-- | VkCommandBufferInheritanceRenderPassTransformInfoQCOM - Structure
+-- describing transformed render pass parameters command buffer
+--
+-- = Description
+--
+-- When the secondary is recorded to execute within a render pass instance
+-- using 'Vulkan.Core10.CommandBufferBuilding.cmdExecuteCommands', the
+-- render pass transform parameters of the secondary command buffer /must/
+-- be consistent with the render pass transform parameters specified for
+-- the render pass instance. In particular, the @transform@ and
+-- @renderArea@ for command buffer /must/ be identical to the @transform@
+-- and @renderArea@ of the render pass instance.
+--
+-- == Valid Usage (Implicit)
+--
+-- = See Also
+--
+-- 'Vulkan.Core10.CommandBufferBuilding.Rect2D',
+-- 'Vulkan.Core10.Enums.StructureType.StructureType',
+-- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR'
+data CommandBufferInheritanceRenderPassTransformInfoQCOM = CommandBufferInheritanceRenderPassTransformInfoQCOM
+  { -- | @transform@ /must/ be
+    -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_IDENTITY_BIT_KHR',
+    -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_90_BIT_KHR',
+    -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_180_BIT_KHR',
+    -- or
+    -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_270_BIT_KHR'
+    transform :: SurfaceTransformFlagBitsKHR
+  , -- | @renderArea@ is the render area that is affected by the command buffer.
+    renderArea :: Rect2D
+  }
+  deriving (Typeable)
+deriving instance Show CommandBufferInheritanceRenderPassTransformInfoQCOM
+
+instance ToCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM where
+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)
+  pokeCStruct p CommandBufferInheritanceRenderPassTransformInfoQCOM{..} f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR)) (transform)
+    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Rect2D)) (renderArea) . ($ ())
+    lift $ f
+  cStructSize = 40
+  cStructAlignment = 8
+  pokeZeroCStruct p f = evalContT $ do
+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM)
+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
+    lift $ poke ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR)) (zero)
+    ContT $ pokeCStruct ((p `plusPtr` 20 :: Ptr Rect2D)) (zero) . ($ ())
+    lift $ f
+
+instance FromCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM where
+  peekCStruct p = do
+    transform <- peek @SurfaceTransformFlagBitsKHR ((p `plusPtr` 16 :: Ptr SurfaceTransformFlagBitsKHR))
+    renderArea <- peekCStruct @Rect2D ((p `plusPtr` 20 :: Ptr Rect2D))
+    pure $ CommandBufferInheritanceRenderPassTransformInfoQCOM
+             transform renderArea
+
+instance Zero CommandBufferInheritanceRenderPassTransformInfoQCOM where
+  zero = CommandBufferInheritanceRenderPassTransformInfoQCOM
+           zero
+           zero
+
+
+type QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION = 1
+
+-- No documentation found for TopLevel "VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION"
+pattern QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION :: forall a . Integral a => a
+pattern QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION = 1
+
+
+type QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME = "VK_QCOM_render_pass_transform"
+
+-- No documentation found for TopLevel "VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME"
+pattern QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
+pattern QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME = "VK_QCOM_render_pass_transform"
+
diff --git a/src/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs-boot b/src/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs-boot
@@ -0,0 +1,23 @@
+{-# language CPP #-}
+module Vulkan.Extensions.VK_QCOM_render_pass_transform  ( CommandBufferInheritanceRenderPassTransformInfoQCOM
+                                                        , RenderPassTransformBeginInfoQCOM
+                                                        ) where
+
+import Data.Kind (Type)
+import Vulkan.CStruct (FromCStruct)
+import Vulkan.CStruct (ToCStruct)
+data CommandBufferInheritanceRenderPassTransformInfoQCOM
+
+instance ToCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM
+instance Show CommandBufferInheritanceRenderPassTransformInfoQCOM
+
+instance FromCStruct CommandBufferInheritanceRenderPassTransformInfoQCOM
+
+
+data RenderPassTransformBeginInfoQCOM
+
+instance ToCStruct RenderPassTransformBeginInfoQCOM
+instance Show RenderPassTransformBeginInfoQCOM
+
+instance FromCStruct RenderPassTransformBeginInfoQCOM
+
diff --git a/src/Vulkan/Extensions/WSITypes.hs b/src/Vulkan/Extensions/WSITypes.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/WSITypes.hs
@@ -0,0 +1,95 @@
+{-# language CPP #-}
+module Vulkan.Extensions.WSITypes  ( HINSTANCE
+                                   , HWND
+                                   , HMONITOR
+                                   , HANDLE
+                                   , DWORD
+                                   , LPCWSTR
+                                   , Display
+                                   , VisualID
+                                   , Window
+                                   , RROutput
+                                   , Xcb_visualid_t
+                                   , Xcb_window_t
+                                   , Zx_handle_t
+                                   , GgpStreamDescriptor
+                                   , GgpFrameToken
+                                   , SECURITY_ATTRIBUTES
+                                   , Xcb_connection_t
+                                   , Wl_display
+                                   , Wl_surface
+                                   , CAMetalLayer
+                                   , AHardwareBuffer
+                                   , ANativeWindow
+                                   ) where
+
+import Foreign.C.Types (CWchar)
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+
+type HINSTANCE = Ptr ()
+
+
+type HWND = Ptr ()
+
+
+type HMONITOR = Ptr ()
+
+
+type HANDLE = Ptr ()
+
+
+type DWORD = Word32
+
+
+type LPCWSTR = Ptr CWchar
+
+
+type Display = Ptr ()
+
+
+type VisualID = Word64
+
+
+type Window = Word64
+
+
+type RROutput = Word64
+
+
+type Xcb_visualid_t = Word32
+
+
+type Xcb_window_t = Word32
+
+
+type Zx_handle_t = Word32
+
+
+type GgpStreamDescriptor = Word32
+
+
+type GgpFrameToken = Word32
+
+
+data SECURITY_ATTRIBUTES
+
+
+data Xcb_connection_t
+
+
+data Wl_display
+
+
+data Wl_surface
+
+
+data CAMetalLayer
+
+
+data AHardwareBuffer
+
+
+data ANativeWindow
+
diff --git a/src/Vulkan/Extensions/WSITypes.hs-boot b/src/Vulkan/Extensions/WSITypes.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Extensions/WSITypes.hs-boot
@@ -0,0 +1,38 @@
+{-# language CPP #-}
+module Vulkan.Extensions.WSITypes  ( AHardwareBuffer
+                                   , Display
+                                   , HANDLE
+                                   , RROutput
+                                   , VisualID
+                                   , Wl_display
+                                   , Xcb_connection_t
+                                   , Xcb_visualid_t
+                                   ) where
+
+import Foreign.Ptr (Ptr)
+import Data.Word (Word32)
+import Data.Word (Word64)
+
+data AHardwareBuffer
+
+
+type Display = Ptr ()
+
+
+type HANDLE = Ptr ()
+
+
+type RROutput = Word64
+
+
+type VisualID = Word64
+
+
+data Wl_display
+
+
+data Xcb_connection_t
+
+
+type Xcb_visualid_t = Word32
+
diff --git a/src/Vulkan/NamedType.hs b/src/Vulkan/NamedType.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/NamedType.hs
@@ -0,0 +1,8 @@
+{-# language CPP #-}
+module Vulkan.NamedType  ((:::)) where
+
+
+
+-- | Annotate a type with a name
+type (name :: k) ::: a = a
+
diff --git a/src/Vulkan/Version.hs b/src/Vulkan/Version.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Version.hs
@@ -0,0 +1,37 @@
+{-# language CPP #-}
+module Vulkan.Version  ( pattern HEADER_VERSION
+                       , pattern HEADER_VERSION_COMPLETE
+                       , pattern MAKE_VERSION
+                       , _VERSION_MAJOR
+                       , _VERSION_MINOR
+                       , _VERSION_PATCH
+                       ) where
+
+import Data.Bits ((.&.))
+import Data.Bits ((.|.))
+import Data.Bits (shiftL)
+import Data.Bits (shiftR)
+import Data.Word (Word32)
+
+pattern HEADER_VERSION :: Word32
+pattern HEADER_VERSION = 140
+
+
+pattern HEADER_VERSION_COMPLETE :: Word32
+pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 140
+
+
+pattern MAKE_VERSION :: Word32 -> Word32 -> Word32 -> Word32
+pattern MAKE_VERSION major minor patch <-
+  (\v -> (_VERSION_MAJOR v, _VERSION_MINOR v, _VERSION_PATCH v) -> (major, minor, patch))
+  where MAKE_VERSION major minor patch = major `shiftL` 22 .|. minor `shiftL` 12 .|. patch
+
+_VERSION_MAJOR :: Word32 -> Word32
+_VERSION_MAJOR v = v `shiftR` 22
+
+_VERSION_MINOR :: Word32 -> Word32
+_VERSION_MINOR v = v `shiftR` 12 .&. 0x3ff
+
+_VERSION_PATCH :: Word32 -> Word32
+_VERSION_PATCH v = v .&. 0xfff
+
diff --git a/src/Vulkan/Zero.hs b/src/Vulkan/Zero.hs
new file mode 100644
--- /dev/null
+++ b/src/Vulkan/Zero.hs
@@ -0,0 +1,82 @@
+{-# language CPP #-}
+module Vulkan.Zero  (Zero(..)) where
+
+import GHC.Ptr (nullFunPtr)
+import Foreign.Ptr (nullPtr)
+import Foreign.C.Types (CChar)
+import Foreign.C.Types (CFloat)
+import Foreign.C.Types (CInt)
+import Foreign.C.Types (CSize)
+import Foreign.Storable (Storable)
+import Data.Int (Int16)
+import Data.Int (Int32)
+import Data.Int (Int64)
+import Data.Int (Int8)
+import Foreign.Ptr (FunPtr)
+import Foreign.Ptr (Ptr)
+import GHC.TypeNats (KnownNat)
+import Data.Word (Word16)
+import Data.Word (Word32)
+import Data.Word (Word64)
+import Data.Word (Word8)
+
+-- | A class for initializing things with all zero data
+--
+-- Any instance should satisfy the following law:
+--
+-- @ new zero = calloc @ or @ with zero = withZeroCStruct @
+--
+-- i.e. Marshaling @zero@ to memory yeilds only zero-valued bytes, except
+-- for structs which require a "type" tag
+--
+class Zero a where
+  zero :: a
+
+instance Zero Bool where
+  zero = False
+
+instance Zero (FunPtr a) where
+  zero = nullFunPtr
+
+instance Zero (Ptr a) where
+  zero = nullPtr
+
+instance Zero Int8 where
+  zero = 0
+
+instance Zero Int16 where
+  zero = 0
+
+instance Zero Int32 where
+  zero = 0
+
+instance Zero Int64 where
+  zero = 0
+
+instance Zero Word8 where
+  zero = 0
+
+instance Zero Word16 where
+  zero = 0
+
+instance Zero Word32 where
+  zero = 0
+
+instance Zero Word64 where
+  zero = 0
+
+instance Zero Float where
+  zero = 0
+
+instance Zero CFloat where
+  zero = 0
+
+instance Zero CChar where
+  zero = 0
+
+instance Zero CSize where
+  zero = 0
+
+instance Zero CInt where
+  zero = 0
+
diff --git a/vulkan.cabal b/vulkan.cabal
--- a/vulkan.cabal
+++ b/vulkan.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 09c9cb1a661d3ed562d3fbc971b9dbd0074bc080e9bb0830d0d25d2b13443e67
+-- hash: ada1339ea623211ed497fd1fefb1f801f9ae39ac29c1536b52e1fa722a096a82
 
 name:           vulkan
-version:        3.2.0.0
+version:        3.3
 synopsis:       Bindings to the Vulkan graphics API.
 category:       Graphics
 homepage:       https://github.com/expipiplus1/vulkan#readme
@@ -31,434 +31,436 @@
 
 library
   exposed-modules:
-      Graphics.Vulkan
-      Graphics.Vulkan.Core10
-      Graphics.Vulkan.Core10.AllocationCallbacks
-      Graphics.Vulkan.Core10.APIConstants
-      Graphics.Vulkan.Core10.BaseType
-      Graphics.Vulkan.Core10.Buffer
-      Graphics.Vulkan.Core10.BufferView
-      Graphics.Vulkan.Core10.CommandBuffer
-      Graphics.Vulkan.Core10.CommandBufferBuilding
-      Graphics.Vulkan.Core10.CommandPool
-      Graphics.Vulkan.Core10.DescriptorSet
-      Graphics.Vulkan.Core10.Device
-      Graphics.Vulkan.Core10.DeviceInitialization
-      Graphics.Vulkan.Core10.Enums
-      Graphics.Vulkan.Core10.Enums.AccessFlagBits
-      Graphics.Vulkan.Core10.Enums.AttachmentDescriptionFlagBits
-      Graphics.Vulkan.Core10.Enums.AttachmentLoadOp
-      Graphics.Vulkan.Core10.Enums.AttachmentStoreOp
-      Graphics.Vulkan.Core10.Enums.BlendFactor
-      Graphics.Vulkan.Core10.Enums.BlendOp
-      Graphics.Vulkan.Core10.Enums.BorderColor
-      Graphics.Vulkan.Core10.Enums.BufferCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.BufferUsageFlagBits
-      Graphics.Vulkan.Core10.Enums.BufferViewCreateFlags
-      Graphics.Vulkan.Core10.Enums.ColorComponentFlagBits
-      Graphics.Vulkan.Core10.Enums.CommandBufferLevel
-      Graphics.Vulkan.Core10.Enums.CommandBufferResetFlagBits
-      Graphics.Vulkan.Core10.Enums.CommandBufferUsageFlagBits
-      Graphics.Vulkan.Core10.Enums.CommandPoolCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.CommandPoolResetFlagBits
-      Graphics.Vulkan.Core10.Enums.CompareOp
-      Graphics.Vulkan.Core10.Enums.ComponentSwizzle
-      Graphics.Vulkan.Core10.Enums.CullModeFlagBits
-      Graphics.Vulkan.Core10.Enums.DependencyFlagBits
-      Graphics.Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.DescriptorPoolResetFlags
-      Graphics.Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.DescriptorType
-      Graphics.Vulkan.Core10.Enums.DeviceCreateFlags
-      Graphics.Vulkan.Core10.Enums.DeviceQueueCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.DynamicState
-      Graphics.Vulkan.Core10.Enums.EventCreateFlags
-      Graphics.Vulkan.Core10.Enums.FenceCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.Filter
-      Graphics.Vulkan.Core10.Enums.Format
-      Graphics.Vulkan.Core10.Enums.FormatFeatureFlagBits
-      Graphics.Vulkan.Core10.Enums.FramebufferCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.FrontFace
-      Graphics.Vulkan.Core10.Enums.ImageAspectFlagBits
-      Graphics.Vulkan.Core10.Enums.ImageCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.ImageLayout
-      Graphics.Vulkan.Core10.Enums.ImageTiling
-      Graphics.Vulkan.Core10.Enums.ImageType
-      Graphics.Vulkan.Core10.Enums.ImageUsageFlagBits
-      Graphics.Vulkan.Core10.Enums.ImageViewCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.ImageViewType
-      Graphics.Vulkan.Core10.Enums.IndexType
-      Graphics.Vulkan.Core10.Enums.InstanceCreateFlags
-      Graphics.Vulkan.Core10.Enums.InternalAllocationType
-      Graphics.Vulkan.Core10.Enums.LogicOp
-      Graphics.Vulkan.Core10.Enums.MemoryHeapFlagBits
-      Graphics.Vulkan.Core10.Enums.MemoryMapFlags
-      Graphics.Vulkan.Core10.Enums.MemoryPropertyFlagBits
-      Graphics.Vulkan.Core10.Enums.ObjectType
-      Graphics.Vulkan.Core10.Enums.PhysicalDeviceType
-      Graphics.Vulkan.Core10.Enums.PipelineBindPoint
-      Graphics.Vulkan.Core10.Enums.PipelineCacheCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.PipelineCacheHeaderVersion
-      Graphics.Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags
-      Graphics.Vulkan.Core10.Enums.PipelineCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags
-      Graphics.Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags
-      Graphics.Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags
-      Graphics.Vulkan.Core10.Enums.PipelineLayoutCreateFlags
-      Graphics.Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags
-      Graphics.Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags
-      Graphics.Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.PipelineStageFlagBits
-      Graphics.Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags
-      Graphics.Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags
-      Graphics.Vulkan.Core10.Enums.PipelineViewportStateCreateFlags
-      Graphics.Vulkan.Core10.Enums.PolygonMode
-      Graphics.Vulkan.Core10.Enums.PrimitiveTopology
-      Graphics.Vulkan.Core10.Enums.QueryControlFlagBits
-      Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits
-      Graphics.Vulkan.Core10.Enums.QueryPoolCreateFlags
-      Graphics.Vulkan.Core10.Enums.QueryResultFlagBits
-      Graphics.Vulkan.Core10.Enums.QueryType
-      Graphics.Vulkan.Core10.Enums.QueueFlagBits
-      Graphics.Vulkan.Core10.Enums.RenderPassCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.Result
-      Graphics.Vulkan.Core10.Enums.SampleCountFlagBits
-      Graphics.Vulkan.Core10.Enums.SamplerAddressMode
-      Graphics.Vulkan.Core10.Enums.SamplerCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.SamplerMipmapMode
-      Graphics.Vulkan.Core10.Enums.SemaphoreCreateFlags
-      Graphics.Vulkan.Core10.Enums.ShaderModuleCreateFlagBits
-      Graphics.Vulkan.Core10.Enums.ShaderStageFlagBits
-      Graphics.Vulkan.Core10.Enums.SharingMode
-      Graphics.Vulkan.Core10.Enums.SparseImageFormatFlagBits
-      Graphics.Vulkan.Core10.Enums.SparseMemoryBindFlagBits
-      Graphics.Vulkan.Core10.Enums.StencilFaceFlagBits
-      Graphics.Vulkan.Core10.Enums.StencilOp
-      Graphics.Vulkan.Core10.Enums.StructureType
-      Graphics.Vulkan.Core10.Enums.SubpassContents
-      Graphics.Vulkan.Core10.Enums.SubpassDescriptionFlagBits
-      Graphics.Vulkan.Core10.Enums.SystemAllocationScope
-      Graphics.Vulkan.Core10.Enums.VendorId
-      Graphics.Vulkan.Core10.Enums.VertexInputRate
-      Graphics.Vulkan.Core10.Event
-      Graphics.Vulkan.Core10.ExtensionDiscovery
-      Graphics.Vulkan.Core10.Fence
-      Graphics.Vulkan.Core10.FuncPointers
-      Graphics.Vulkan.Core10.Handles
-      Graphics.Vulkan.Core10.Image
-      Graphics.Vulkan.Core10.ImageView
-      Graphics.Vulkan.Core10.LayerDiscovery
-      Graphics.Vulkan.Core10.Memory
-      Graphics.Vulkan.Core10.MemoryManagement
-      Graphics.Vulkan.Core10.OtherTypes
-      Graphics.Vulkan.Core10.Pass
-      Graphics.Vulkan.Core10.Pipeline
-      Graphics.Vulkan.Core10.PipelineCache
-      Graphics.Vulkan.Core10.PipelineLayout
-      Graphics.Vulkan.Core10.Query
-      Graphics.Vulkan.Core10.Queue
-      Graphics.Vulkan.Core10.QueueSemaphore
-      Graphics.Vulkan.Core10.Sampler
-      Graphics.Vulkan.Core10.Shader
-      Graphics.Vulkan.Core10.SharedTypes
-      Graphics.Vulkan.Core10.SparseResourceMemoryManagement
-      Graphics.Vulkan.Core11
-      Graphics.Vulkan.Core11.DeviceInitialization
-      Graphics.Vulkan.Core11.Enums
-      Graphics.Vulkan.Core11.Enums.ChromaLocation
-      Graphics.Vulkan.Core11.Enums.CommandPoolTrimFlags
-      Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags
-      Graphics.Vulkan.Core11.Enums.DescriptorUpdateTemplateType
-      Graphics.Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits
-      Graphics.Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits
-      Graphics.Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits
-      Graphics.Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits
-      Graphics.Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits
-      Graphics.Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits
-      Graphics.Vulkan.Core11.Enums.FenceImportFlagBits
-      Graphics.Vulkan.Core11.Enums.MemoryAllocateFlagBits
-      Graphics.Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits
-      Graphics.Vulkan.Core11.Enums.PointClippingBehavior
-      Graphics.Vulkan.Core11.Enums.SamplerYcbcrModelConversion
-      Graphics.Vulkan.Core11.Enums.SamplerYcbcrRange
-      Graphics.Vulkan.Core11.Enums.SemaphoreImportFlagBits
-      Graphics.Vulkan.Core11.Enums.SubgroupFeatureFlagBits
-      Graphics.Vulkan.Core11.Enums.TessellationDomainOrigin
-      Graphics.Vulkan.Core11.Handles
-      Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory
-      Graphics.Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities
-      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_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_maintenance3
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_multiview
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters
-      Graphics.Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers
-      Graphics.Vulkan.Core12
-      Graphics.Vulkan.Core12.Enums
-      Graphics.Vulkan.Core12.Enums.DescriptorBindingFlagBits
-      Graphics.Vulkan.Core12.Enums.DriverId
-      Graphics.Vulkan.Core12.Enums.ResolveModeFlagBits
-      Graphics.Vulkan.Core12.Enums.SamplerReductionMode
-      Graphics.Vulkan.Core12.Enums.SemaphoreType
-      Graphics.Vulkan.Core12.Enums.SemaphoreWaitFlagBits
-      Graphics.Vulkan.Core12.Enums.ShaderFloatControlsIndependence
-      Graphics.Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing
-      Graphics.Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset
-      Graphics.Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax
-      Graphics.Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout
-      Graphics.Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_driver_properties
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_image_format_list
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout
-      Graphics.Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model
-      Graphics.Vulkan.CStruct
-      Graphics.Vulkan.CStruct.Extends
-      Graphics.Vulkan.CStruct.Utils
-      Graphics.Vulkan.Dynamic
-      Graphics.Vulkan.Exception
-      Graphics.Vulkan.Extensions
-      Graphics.Vulkan.Extensions.Handles
-      Graphics.Vulkan.Extensions.VK_AMD_buffer_marker
-      Graphics.Vulkan.Extensions.VK_AMD_device_coherent_memory
-      Graphics.Vulkan.Extensions.VK_AMD_display_native_hdr
-      Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count
-      Graphics.Vulkan.Extensions.VK_AMD_gcn_shader
-      Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_half_float
-      Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_int16
-      Graphics.Vulkan.Extensions.VK_AMD_memory_overallocation_behavior
-      Graphics.Vulkan.Extensions.VK_AMD_mixed_attachment_samples
-      Graphics.Vulkan.Extensions.VK_AMD_negative_viewport_height
-      Graphics.Vulkan.Extensions.VK_AMD_pipeline_compiler_control
-      Graphics.Vulkan.Extensions.VK_AMD_rasterization_order
-      Graphics.Vulkan.Extensions.VK_AMD_shader_ballot
-      Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties
-      Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties2
-      Graphics.Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter
-      Graphics.Vulkan.Extensions.VK_AMD_shader_fragment_mask
-      Graphics.Vulkan.Extensions.VK_AMD_shader_image_load_store_lod
-      Graphics.Vulkan.Extensions.VK_AMD_shader_info
-      Graphics.Vulkan.Extensions.VK_AMD_shader_trinary_minmax
-      Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
-      Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
-      Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display
-      Graphics.Vulkan.Extensions.VK_EXT_astc_decode_mode
-      Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced
-      Graphics.Vulkan.Extensions.VK_EXT_buffer_device_address
-      Graphics.Vulkan.Extensions.VK_EXT_calibrated_timestamps
-      Graphics.Vulkan.Extensions.VK_EXT_conditional_rendering
-      Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization
-      Graphics.Vulkan.Extensions.VK_EXT_debug_marker
-      Graphics.Vulkan.Extensions.VK_EXT_debug_report
-      Graphics.Vulkan.Extensions.VK_EXT_debug_utils
-      Graphics.Vulkan.Extensions.VK_EXT_depth_clip_enable
-      Graphics.Vulkan.Extensions.VK_EXT_depth_range_unrestricted
-      Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing
-      Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display
-      Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles
-      Graphics.Vulkan.Extensions.VK_EXT_display_control
-      Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter
-      Graphics.Vulkan.Extensions.VK_EXT_external_memory_dma_buf
-      Graphics.Vulkan.Extensions.VK_EXT_external_memory_host
-      Graphics.Vulkan.Extensions.VK_EXT_filter_cubic
-      Graphics.Vulkan.Extensions.VK_EXT_fragment_density_map
-      Graphics.Vulkan.Extensions.VK_EXT_fragment_shader_interlock
-      Graphics.Vulkan.Extensions.VK_EXT_full_screen_exclusive
-      Graphics.Vulkan.Extensions.VK_EXT_global_priority
-      Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata
-      Graphics.Vulkan.Extensions.VK_EXT_headless_surface
-      Graphics.Vulkan.Extensions.VK_EXT_host_query_reset
-      Graphics.Vulkan.Extensions.VK_EXT_image_drm_format_modifier
-      Graphics.Vulkan.Extensions.VK_EXT_index_type_uint8
-      Graphics.Vulkan.Extensions.VK_EXT_inline_uniform_block
-      Graphics.Vulkan.Extensions.VK_EXT_line_rasterization
-      Graphics.Vulkan.Extensions.VK_EXT_memory_budget
-      Graphics.Vulkan.Extensions.VK_EXT_memory_priority
-      Graphics.Vulkan.Extensions.VK_EXT_metal_surface
-      Graphics.Vulkan.Extensions.VK_EXT_pci_bus_info
-      Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control
-      Graphics.Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
-      Graphics.Vulkan.Extensions.VK_EXT_post_depth_coverage
-      Graphics.Vulkan.Extensions.VK_EXT_queue_family_foreign
-      Graphics.Vulkan.Extensions.VK_EXT_robustness2
-      Graphics.Vulkan.Extensions.VK_EXT_sample_locations
-      Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax
-      Graphics.Vulkan.Extensions.VK_EXT_scalar_block_layout
-      Graphics.Vulkan.Extensions.VK_EXT_separate_stencil_usage
-      Graphics.Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation
-      Graphics.Vulkan.Extensions.VK_EXT_shader_stencil_export
-      Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_ballot
-      Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_vote
-      Graphics.Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
-      Graphics.Vulkan.Extensions.VK_EXT_subgroup_size_control
-      Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace
-      Graphics.Vulkan.Extensions.VK_EXT_texel_buffer_alignment
-      Graphics.Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr
-      Graphics.Vulkan.Extensions.VK_EXT_tooling_info
-      Graphics.Vulkan.Extensions.VK_EXT_transform_feedback
-      Graphics.Vulkan.Extensions.VK_EXT_validation_cache
-      Graphics.Vulkan.Extensions.VK_EXT_validation_features
-      Graphics.Vulkan.Extensions.VK_EXT_validation_flags
-      Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor
-      Graphics.Vulkan.Extensions.VK_EXT_ycbcr_image_arrays
-      Graphics.Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface
-      Graphics.Vulkan.Extensions.VK_GGP_frame_token
-      Graphics.Vulkan.Extensions.VK_GGP_stream_descriptor_surface
-      Graphics.Vulkan.Extensions.VK_GOOGLE_decorate_string
-      Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing
-      Graphics.Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1
-      Graphics.Vulkan.Extensions.VK_GOOGLE_user_type
-      Graphics.Vulkan.Extensions.VK_IMG_filter_cubic
-      Graphics.Vulkan.Extensions.VK_IMG_format_pvrtc
-      Graphics.Vulkan.Extensions.VK_INTEL_performance_query
-      Graphics.Vulkan.Extensions.VK_INTEL_shader_integer_functions2
-      Graphics.Vulkan.Extensions.VK_KHR_16bit_storage
-      Graphics.Vulkan.Extensions.VK_KHR_8bit_storage
-      Graphics.Vulkan.Extensions.VK_KHR_android_surface
-      Graphics.Vulkan.Extensions.VK_KHR_bind_memory2
-      Graphics.Vulkan.Extensions.VK_KHR_buffer_device_address
-      Graphics.Vulkan.Extensions.VK_KHR_create_renderpass2
-      Graphics.Vulkan.Extensions.VK_KHR_dedicated_allocation
-      Graphics.Vulkan.Extensions.VK_KHR_deferred_host_operations
-      Graphics.Vulkan.Extensions.VK_KHR_depth_stencil_resolve
-      Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template
-      Graphics.Vulkan.Extensions.VK_KHR_device_group
-      Graphics.Vulkan.Extensions.VK_KHR_device_group_creation
-      Graphics.Vulkan.Extensions.VK_KHR_display
-      Graphics.Vulkan.Extensions.VK_KHR_display_swapchain
-      Graphics.Vulkan.Extensions.VK_KHR_draw_indirect_count
-      Graphics.Vulkan.Extensions.VK_KHR_driver_properties
-      Graphics.Vulkan.Extensions.VK_KHR_external_fence
-      Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities
-      Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd
-      Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32
-      Graphics.Vulkan.Extensions.VK_KHR_external_memory
-      Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities
-      Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd
-      Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32
-      Graphics.Vulkan.Extensions.VK_KHR_external_semaphore
-      Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities
-      Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd
-      Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32
-      Graphics.Vulkan.Extensions.VK_KHR_get_display_properties2
-      Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2
-      Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2
-      Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2
-      Graphics.Vulkan.Extensions.VK_KHR_image_format_list
-      Graphics.Vulkan.Extensions.VK_KHR_imageless_framebuffer
-      Graphics.Vulkan.Extensions.VK_KHR_incremental_present
-      Graphics.Vulkan.Extensions.VK_KHR_maintenance1
-      Graphics.Vulkan.Extensions.VK_KHR_maintenance2
-      Graphics.Vulkan.Extensions.VK_KHR_maintenance3
-      Graphics.Vulkan.Extensions.VK_KHR_multiview
-      Graphics.Vulkan.Extensions.VK_KHR_performance_query
-      Graphics.Vulkan.Extensions.VK_KHR_pipeline_executable_properties
-      Graphics.Vulkan.Extensions.VK_KHR_pipeline_library
-      Graphics.Vulkan.Extensions.VK_KHR_push_descriptor
-      Graphics.Vulkan.Extensions.VK_KHR_ray_tracing
-      Graphics.Vulkan.Extensions.VK_KHR_relaxed_block_layout
-      Graphics.Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge
-      Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion
-      Graphics.Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts
-      Graphics.Vulkan.Extensions.VK_KHR_shader_atomic_int64
-      Graphics.Vulkan.Extensions.VK_KHR_shader_clock
-      Graphics.Vulkan.Extensions.VK_KHR_shader_draw_parameters
-      Graphics.Vulkan.Extensions.VK_KHR_shader_float16_int8
-      Graphics.Vulkan.Extensions.VK_KHR_shader_float_controls
-      Graphics.Vulkan.Extensions.VK_KHR_shader_non_semantic_info
-      Graphics.Vulkan.Extensions.VK_KHR_shader_subgroup_extended_types
-      Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image
-      Graphics.Vulkan.Extensions.VK_KHR_spirv_1_4
-      Graphics.Vulkan.Extensions.VK_KHR_storage_buffer_storage_class
-      Graphics.Vulkan.Extensions.VK_KHR_surface
-      Graphics.Vulkan.Extensions.VK_KHR_surface_protected_capabilities
-      Graphics.Vulkan.Extensions.VK_KHR_swapchain
-      Graphics.Vulkan.Extensions.VK_KHR_swapchain_mutable_format
-      Graphics.Vulkan.Extensions.VK_KHR_timeline_semaphore
-      Graphics.Vulkan.Extensions.VK_KHR_uniform_buffer_standard_layout
-      Graphics.Vulkan.Extensions.VK_KHR_variable_pointers
-      Graphics.Vulkan.Extensions.VK_KHR_vulkan_memory_model
-      Graphics.Vulkan.Extensions.VK_KHR_wayland_surface
-      Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex
-      Graphics.Vulkan.Extensions.VK_KHR_win32_surface
-      Graphics.Vulkan.Extensions.VK_KHR_xcb_surface
-      Graphics.Vulkan.Extensions.VK_KHR_xlib_surface
-      Graphics.Vulkan.Extensions.VK_MVK_ios_surface
-      Graphics.Vulkan.Extensions.VK_MVK_macos_surface
-      Graphics.Vulkan.Extensions.VK_NN_vi_surface
-      Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling
-      Graphics.Vulkan.Extensions.VK_NV_compute_shader_derivatives
-      Graphics.Vulkan.Extensions.VK_NV_cooperative_matrix
-      Graphics.Vulkan.Extensions.VK_NV_corner_sampled_image
-      Graphics.Vulkan.Extensions.VK_NV_coverage_reduction_mode
-      Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation
-      Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing
-      Graphics.Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints
-      Graphics.Vulkan.Extensions.VK_NV_device_diagnostics_config
-      Graphics.Vulkan.Extensions.VK_NV_device_generated_commands
-      Graphics.Vulkan.Extensions.VK_NV_external_memory
-      Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities
-      Graphics.Vulkan.Extensions.VK_NV_external_memory_win32
-      Graphics.Vulkan.Extensions.VK_NV_fill_rectangle
-      Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color
-      Graphics.Vulkan.Extensions.VK_NV_fragment_shader_barycentric
-      Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples
-      Graphics.Vulkan.Extensions.VK_NV_geometry_shader_passthrough
-      Graphics.Vulkan.Extensions.VK_NV_glsl_shader
-      Graphics.Vulkan.Extensions.VK_NV_mesh_shader
-      Graphics.Vulkan.Extensions.VK_NV_ray_tracing
-      Graphics.Vulkan.Extensions.VK_NV_representative_fragment_test
-      Graphics.Vulkan.Extensions.VK_NV_sample_mask_override_coverage
-      Graphics.Vulkan.Extensions.VK_NV_scissor_exclusive
-      Graphics.Vulkan.Extensions.VK_NV_shader_image_footprint
-      Graphics.Vulkan.Extensions.VK_NV_shader_sm_builtins
-      Graphics.Vulkan.Extensions.VK_NV_shader_subgroup_partitioned
-      Graphics.Vulkan.Extensions.VK_NV_shading_rate_image
-      Graphics.Vulkan.Extensions.VK_NV_viewport_array2
-      Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle
-      Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex
-      Graphics.Vulkan.Extensions.VK_NVX_image_view_handle
-      Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes
-      Graphics.Vulkan.Extensions.VK_QCOM_render_pass_shader_resolve
-      Graphics.Vulkan.Extensions.VK_QCOM_render_pass_store_ops
-      Graphics.Vulkan.Extensions.VK_QCOM_render_pass_transform
-      Graphics.Vulkan.Extensions.WSITypes
-      Graphics.Vulkan.NamedType
-      Graphics.Vulkan.Version
-      Graphics.Vulkan.Zero
+      Vulkan
+      Vulkan.Core10
+      Vulkan.Core10.AllocationCallbacks
+      Vulkan.Core10.APIConstants
+      Vulkan.Core10.BaseType
+      Vulkan.Core10.Buffer
+      Vulkan.Core10.BufferView
+      Vulkan.Core10.CommandBuffer
+      Vulkan.Core10.CommandBufferBuilding
+      Vulkan.Core10.CommandPool
+      Vulkan.Core10.DescriptorSet
+      Vulkan.Core10.Device
+      Vulkan.Core10.DeviceInitialization
+      Vulkan.Core10.Enums
+      Vulkan.Core10.Enums.AccessFlagBits
+      Vulkan.Core10.Enums.AttachmentDescriptionFlagBits
+      Vulkan.Core10.Enums.AttachmentLoadOp
+      Vulkan.Core10.Enums.AttachmentStoreOp
+      Vulkan.Core10.Enums.BlendFactor
+      Vulkan.Core10.Enums.BlendOp
+      Vulkan.Core10.Enums.BorderColor
+      Vulkan.Core10.Enums.BufferCreateFlagBits
+      Vulkan.Core10.Enums.BufferUsageFlagBits
+      Vulkan.Core10.Enums.BufferViewCreateFlags
+      Vulkan.Core10.Enums.ColorComponentFlagBits
+      Vulkan.Core10.Enums.CommandBufferLevel
+      Vulkan.Core10.Enums.CommandBufferResetFlagBits
+      Vulkan.Core10.Enums.CommandBufferUsageFlagBits
+      Vulkan.Core10.Enums.CommandPoolCreateFlagBits
+      Vulkan.Core10.Enums.CommandPoolResetFlagBits
+      Vulkan.Core10.Enums.CompareOp
+      Vulkan.Core10.Enums.ComponentSwizzle
+      Vulkan.Core10.Enums.CullModeFlagBits
+      Vulkan.Core10.Enums.DependencyFlagBits
+      Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits
+      Vulkan.Core10.Enums.DescriptorPoolResetFlags
+      Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits
+      Vulkan.Core10.Enums.DescriptorType
+      Vulkan.Core10.Enums.DeviceCreateFlags
+      Vulkan.Core10.Enums.DeviceQueueCreateFlagBits
+      Vulkan.Core10.Enums.DynamicState
+      Vulkan.Core10.Enums.EventCreateFlags
+      Vulkan.Core10.Enums.FenceCreateFlagBits
+      Vulkan.Core10.Enums.Filter
+      Vulkan.Core10.Enums.Format
+      Vulkan.Core10.Enums.FormatFeatureFlagBits
+      Vulkan.Core10.Enums.FramebufferCreateFlagBits
+      Vulkan.Core10.Enums.FrontFace
+      Vulkan.Core10.Enums.ImageAspectFlagBits
+      Vulkan.Core10.Enums.ImageCreateFlagBits
+      Vulkan.Core10.Enums.ImageLayout
+      Vulkan.Core10.Enums.ImageTiling
+      Vulkan.Core10.Enums.ImageType
+      Vulkan.Core10.Enums.ImageUsageFlagBits
+      Vulkan.Core10.Enums.ImageViewCreateFlagBits
+      Vulkan.Core10.Enums.ImageViewType
+      Vulkan.Core10.Enums.IndexType
+      Vulkan.Core10.Enums.InstanceCreateFlags
+      Vulkan.Core10.Enums.InternalAllocationType
+      Vulkan.Core10.Enums.LogicOp
+      Vulkan.Core10.Enums.MemoryHeapFlagBits
+      Vulkan.Core10.Enums.MemoryMapFlags
+      Vulkan.Core10.Enums.MemoryPropertyFlagBits
+      Vulkan.Core10.Enums.ObjectType
+      Vulkan.Core10.Enums.PhysicalDeviceType
+      Vulkan.Core10.Enums.PipelineBindPoint
+      Vulkan.Core10.Enums.PipelineCacheCreateFlagBits
+      Vulkan.Core10.Enums.PipelineCacheHeaderVersion
+      Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags
+      Vulkan.Core10.Enums.PipelineCreateFlagBits
+      Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags
+      Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags
+      Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags
+      Vulkan.Core10.Enums.PipelineLayoutCreateFlags
+      Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags
+      Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags
+      Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits
+      Vulkan.Core10.Enums.PipelineStageFlagBits
+      Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags
+      Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags
+      Vulkan.Core10.Enums.PipelineViewportStateCreateFlags
+      Vulkan.Core10.Enums.PolygonMode
+      Vulkan.Core10.Enums.PrimitiveTopology
+      Vulkan.Core10.Enums.QueryControlFlagBits
+      Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits
+      Vulkan.Core10.Enums.QueryPoolCreateFlags
+      Vulkan.Core10.Enums.QueryResultFlagBits
+      Vulkan.Core10.Enums.QueryType
+      Vulkan.Core10.Enums.QueueFlagBits
+      Vulkan.Core10.Enums.RenderPassCreateFlagBits
+      Vulkan.Core10.Enums.Result
+      Vulkan.Core10.Enums.SampleCountFlagBits
+      Vulkan.Core10.Enums.SamplerAddressMode
+      Vulkan.Core10.Enums.SamplerCreateFlagBits
+      Vulkan.Core10.Enums.SamplerMipmapMode
+      Vulkan.Core10.Enums.SemaphoreCreateFlags
+      Vulkan.Core10.Enums.ShaderModuleCreateFlagBits
+      Vulkan.Core10.Enums.ShaderStageFlagBits
+      Vulkan.Core10.Enums.SharingMode
+      Vulkan.Core10.Enums.SparseImageFormatFlagBits
+      Vulkan.Core10.Enums.SparseMemoryBindFlagBits
+      Vulkan.Core10.Enums.StencilFaceFlagBits
+      Vulkan.Core10.Enums.StencilOp
+      Vulkan.Core10.Enums.StructureType
+      Vulkan.Core10.Enums.SubpassContents
+      Vulkan.Core10.Enums.SubpassDescriptionFlagBits
+      Vulkan.Core10.Enums.SystemAllocationScope
+      Vulkan.Core10.Enums.VendorId
+      Vulkan.Core10.Enums.VertexInputRate
+      Vulkan.Core10.Event
+      Vulkan.Core10.ExtensionDiscovery
+      Vulkan.Core10.Fence
+      Vulkan.Core10.FuncPointers
+      Vulkan.Core10.Handles
+      Vulkan.Core10.Image
+      Vulkan.Core10.ImageView
+      Vulkan.Core10.LayerDiscovery
+      Vulkan.Core10.Memory
+      Vulkan.Core10.MemoryManagement
+      Vulkan.Core10.OtherTypes
+      Vulkan.Core10.Pass
+      Vulkan.Core10.Pipeline
+      Vulkan.Core10.PipelineCache
+      Vulkan.Core10.PipelineLayout
+      Vulkan.Core10.Query
+      Vulkan.Core10.Queue
+      Vulkan.Core10.QueueSemaphore
+      Vulkan.Core10.Sampler
+      Vulkan.Core10.Shader
+      Vulkan.Core10.SharedTypes
+      Vulkan.Core10.SparseResourceMemoryManagement
+      Vulkan.Core11
+      Vulkan.Core11.DeviceInitialization
+      Vulkan.Core11.Enums
+      Vulkan.Core11.Enums.ChromaLocation
+      Vulkan.Core11.Enums.CommandPoolTrimFlags
+      Vulkan.Core11.Enums.DescriptorUpdateTemplateCreateFlags
+      Vulkan.Core11.Enums.DescriptorUpdateTemplateType
+      Vulkan.Core11.Enums.ExternalFenceFeatureFlagBits
+      Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits
+      Vulkan.Core11.Enums.ExternalMemoryFeatureFlagBits
+      Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits
+      Vulkan.Core11.Enums.ExternalSemaphoreFeatureFlagBits
+      Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits
+      Vulkan.Core11.Enums.FenceImportFlagBits
+      Vulkan.Core11.Enums.MemoryAllocateFlagBits
+      Vulkan.Core11.Enums.PeerMemoryFeatureFlagBits
+      Vulkan.Core11.Enums.PointClippingBehavior
+      Vulkan.Core11.Enums.SamplerYcbcrModelConversion
+      Vulkan.Core11.Enums.SamplerYcbcrRange
+      Vulkan.Core11.Enums.SemaphoreImportFlagBits
+      Vulkan.Core11.Enums.SubgroupFeatureFlagBits
+      Vulkan.Core11.Enums.TessellationDomainOrigin
+      Vulkan.Core11.Handles
+      Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory
+      Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup
+      Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage
+      Vulkan.Core11.Promoted_From_VK_KHR_bind_memory2
+      Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation
+      Vulkan.Core11.Promoted_From_VK_KHR_descriptor_update_template
+      Vulkan.Core11.Promoted_From_VK_KHR_device_group
+      Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation
+      Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2
+      Vulkan.Core11.Promoted_From_VK_KHR_external_fence
+      Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities
+      Vulkan.Core11.Promoted_From_VK_KHR_external_memory
+      Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities
+      Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore
+      Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities
+      Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2
+      Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2
+      Vulkan.Core11.Promoted_From_VK_KHR_maintenance1
+      Vulkan.Core11.Promoted_From_VK_KHR_maintenance2
+      Vulkan.Core11.Promoted_From_VK_KHR_maintenance3
+      Vulkan.Core11.Promoted_From_VK_KHR_multiview
+      Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion
+      Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters
+      Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers
+      Vulkan.Core12
+      Vulkan.Core12.Enums
+      Vulkan.Core12.Enums.DescriptorBindingFlagBits
+      Vulkan.Core12.Enums.DriverId
+      Vulkan.Core12.Enums.ResolveModeFlagBits
+      Vulkan.Core12.Enums.SamplerReductionMode
+      Vulkan.Core12.Enums.SemaphoreType
+      Vulkan.Core12.Enums.SemaphoreWaitFlagBits
+      Vulkan.Core12.Enums.ShaderFloatControlsIndependence
+      Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing
+      Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset
+      Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax
+      Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout
+      Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage
+      Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage
+      Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address
+      Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2
+      Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve
+      Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count
+      Vulkan.Core12.Promoted_From_VK_KHR_driver_properties
+      Vulkan.Core12.Promoted_From_VK_KHR_image_format_list
+      Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer
+      Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts
+      Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64
+      Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8
+      Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls
+      Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types
+      Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore
+      Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout
+      Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model
+      Vulkan.CStruct
+      Vulkan.CStruct.Extends
+      Vulkan.CStruct.Utils
+      Vulkan.Dynamic
+      Vulkan.Exception
+      Vulkan.Extensions
+      Vulkan.Extensions.Handles
+      Vulkan.Extensions.VK_AMD_buffer_marker
+      Vulkan.Extensions.VK_AMD_device_coherent_memory
+      Vulkan.Extensions.VK_AMD_display_native_hdr
+      Vulkan.Extensions.VK_AMD_draw_indirect_count
+      Vulkan.Extensions.VK_AMD_gcn_shader
+      Vulkan.Extensions.VK_AMD_gpu_shader_half_float
+      Vulkan.Extensions.VK_AMD_gpu_shader_int16
+      Vulkan.Extensions.VK_AMD_memory_overallocation_behavior
+      Vulkan.Extensions.VK_AMD_mixed_attachment_samples
+      Vulkan.Extensions.VK_AMD_negative_viewport_height
+      Vulkan.Extensions.VK_AMD_pipeline_compiler_control
+      Vulkan.Extensions.VK_AMD_rasterization_order
+      Vulkan.Extensions.VK_AMD_shader_ballot
+      Vulkan.Extensions.VK_AMD_shader_core_properties
+      Vulkan.Extensions.VK_AMD_shader_core_properties2
+      Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter
+      Vulkan.Extensions.VK_AMD_shader_fragment_mask
+      Vulkan.Extensions.VK_AMD_shader_image_load_store_lod
+      Vulkan.Extensions.VK_AMD_shader_info
+      Vulkan.Extensions.VK_AMD_shader_trinary_minmax
+      Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
+      Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
+      Vulkan.Extensions.VK_EXT_acquire_xlib_display
+      Vulkan.Extensions.VK_EXT_astc_decode_mode
+      Vulkan.Extensions.VK_EXT_blend_operation_advanced
+      Vulkan.Extensions.VK_EXT_buffer_device_address
+      Vulkan.Extensions.VK_EXT_calibrated_timestamps
+      Vulkan.Extensions.VK_EXT_conditional_rendering
+      Vulkan.Extensions.VK_EXT_conservative_rasterization
+      Vulkan.Extensions.VK_EXT_custom_border_color
+      Vulkan.Extensions.VK_EXT_debug_marker
+      Vulkan.Extensions.VK_EXT_debug_report
+      Vulkan.Extensions.VK_EXT_debug_utils
+      Vulkan.Extensions.VK_EXT_depth_clip_enable
+      Vulkan.Extensions.VK_EXT_depth_range_unrestricted
+      Vulkan.Extensions.VK_EXT_descriptor_indexing
+      Vulkan.Extensions.VK_EXT_direct_mode_display
+      Vulkan.Extensions.VK_EXT_discard_rectangles
+      Vulkan.Extensions.VK_EXT_display_control
+      Vulkan.Extensions.VK_EXT_display_surface_counter
+      Vulkan.Extensions.VK_EXT_external_memory_dma_buf
+      Vulkan.Extensions.VK_EXT_external_memory_host
+      Vulkan.Extensions.VK_EXT_filter_cubic
+      Vulkan.Extensions.VK_EXT_fragment_density_map
+      Vulkan.Extensions.VK_EXT_fragment_shader_interlock
+      Vulkan.Extensions.VK_EXT_full_screen_exclusive
+      Vulkan.Extensions.VK_EXT_global_priority
+      Vulkan.Extensions.VK_EXT_hdr_metadata
+      Vulkan.Extensions.VK_EXT_headless_surface
+      Vulkan.Extensions.VK_EXT_host_query_reset
+      Vulkan.Extensions.VK_EXT_image_drm_format_modifier
+      Vulkan.Extensions.VK_EXT_index_type_uint8
+      Vulkan.Extensions.VK_EXT_inline_uniform_block
+      Vulkan.Extensions.VK_EXT_line_rasterization
+      Vulkan.Extensions.VK_EXT_memory_budget
+      Vulkan.Extensions.VK_EXT_memory_priority
+      Vulkan.Extensions.VK_EXT_metal_surface
+      Vulkan.Extensions.VK_EXT_pci_bus_info
+      Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control
+      Vulkan.Extensions.VK_EXT_pipeline_creation_feedback
+      Vulkan.Extensions.VK_EXT_post_depth_coverage
+      Vulkan.Extensions.VK_EXT_private_data
+      Vulkan.Extensions.VK_EXT_queue_family_foreign
+      Vulkan.Extensions.VK_EXT_robustness2
+      Vulkan.Extensions.VK_EXT_sample_locations
+      Vulkan.Extensions.VK_EXT_sampler_filter_minmax
+      Vulkan.Extensions.VK_EXT_scalar_block_layout
+      Vulkan.Extensions.VK_EXT_separate_stencil_usage
+      Vulkan.Extensions.VK_EXT_shader_demote_to_helper_invocation
+      Vulkan.Extensions.VK_EXT_shader_stencil_export
+      Vulkan.Extensions.VK_EXT_shader_subgroup_ballot
+      Vulkan.Extensions.VK_EXT_shader_subgroup_vote
+      Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
+      Vulkan.Extensions.VK_EXT_subgroup_size_control
+      Vulkan.Extensions.VK_EXT_swapchain_colorspace
+      Vulkan.Extensions.VK_EXT_texel_buffer_alignment
+      Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr
+      Vulkan.Extensions.VK_EXT_tooling_info
+      Vulkan.Extensions.VK_EXT_transform_feedback
+      Vulkan.Extensions.VK_EXT_validation_cache
+      Vulkan.Extensions.VK_EXT_validation_features
+      Vulkan.Extensions.VK_EXT_validation_flags
+      Vulkan.Extensions.VK_EXT_vertex_attribute_divisor
+      Vulkan.Extensions.VK_EXT_ycbcr_image_arrays
+      Vulkan.Extensions.VK_FUCHSIA_imagepipe_surface
+      Vulkan.Extensions.VK_GGP_frame_token
+      Vulkan.Extensions.VK_GGP_stream_descriptor_surface
+      Vulkan.Extensions.VK_GOOGLE_decorate_string
+      Vulkan.Extensions.VK_GOOGLE_display_timing
+      Vulkan.Extensions.VK_GOOGLE_hlsl_functionality1
+      Vulkan.Extensions.VK_GOOGLE_user_type
+      Vulkan.Extensions.VK_IMG_filter_cubic
+      Vulkan.Extensions.VK_IMG_format_pvrtc
+      Vulkan.Extensions.VK_INTEL_performance_query
+      Vulkan.Extensions.VK_INTEL_shader_integer_functions2
+      Vulkan.Extensions.VK_KHR_16bit_storage
+      Vulkan.Extensions.VK_KHR_8bit_storage
+      Vulkan.Extensions.VK_KHR_android_surface
+      Vulkan.Extensions.VK_KHR_bind_memory2
+      Vulkan.Extensions.VK_KHR_buffer_device_address
+      Vulkan.Extensions.VK_KHR_create_renderpass2
+      Vulkan.Extensions.VK_KHR_dedicated_allocation
+      Vulkan.Extensions.VK_KHR_deferred_host_operations
+      Vulkan.Extensions.VK_KHR_depth_stencil_resolve
+      Vulkan.Extensions.VK_KHR_descriptor_update_template
+      Vulkan.Extensions.VK_KHR_device_group
+      Vulkan.Extensions.VK_KHR_device_group_creation
+      Vulkan.Extensions.VK_KHR_display
+      Vulkan.Extensions.VK_KHR_display_swapchain
+      Vulkan.Extensions.VK_KHR_draw_indirect_count
+      Vulkan.Extensions.VK_KHR_driver_properties
+      Vulkan.Extensions.VK_KHR_external_fence
+      Vulkan.Extensions.VK_KHR_external_fence_capabilities
+      Vulkan.Extensions.VK_KHR_external_fence_fd
+      Vulkan.Extensions.VK_KHR_external_fence_win32
+      Vulkan.Extensions.VK_KHR_external_memory
+      Vulkan.Extensions.VK_KHR_external_memory_capabilities
+      Vulkan.Extensions.VK_KHR_external_memory_fd
+      Vulkan.Extensions.VK_KHR_external_memory_win32
+      Vulkan.Extensions.VK_KHR_external_semaphore
+      Vulkan.Extensions.VK_KHR_external_semaphore_capabilities
+      Vulkan.Extensions.VK_KHR_external_semaphore_fd
+      Vulkan.Extensions.VK_KHR_external_semaphore_win32
+      Vulkan.Extensions.VK_KHR_get_display_properties2
+      Vulkan.Extensions.VK_KHR_get_memory_requirements2
+      Vulkan.Extensions.VK_KHR_get_physical_device_properties2
+      Vulkan.Extensions.VK_KHR_get_surface_capabilities2
+      Vulkan.Extensions.VK_KHR_image_format_list
+      Vulkan.Extensions.VK_KHR_imageless_framebuffer
+      Vulkan.Extensions.VK_KHR_incremental_present
+      Vulkan.Extensions.VK_KHR_maintenance1
+      Vulkan.Extensions.VK_KHR_maintenance2
+      Vulkan.Extensions.VK_KHR_maintenance3
+      Vulkan.Extensions.VK_KHR_multiview
+      Vulkan.Extensions.VK_KHR_performance_query
+      Vulkan.Extensions.VK_KHR_pipeline_executable_properties
+      Vulkan.Extensions.VK_KHR_pipeline_library
+      Vulkan.Extensions.VK_KHR_push_descriptor
+      Vulkan.Extensions.VK_KHR_ray_tracing
+      Vulkan.Extensions.VK_KHR_relaxed_block_layout
+      Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge
+      Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion
+      Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts
+      Vulkan.Extensions.VK_KHR_shader_atomic_int64
+      Vulkan.Extensions.VK_KHR_shader_clock
+      Vulkan.Extensions.VK_KHR_shader_draw_parameters
+      Vulkan.Extensions.VK_KHR_shader_float16_int8
+      Vulkan.Extensions.VK_KHR_shader_float_controls
+      Vulkan.Extensions.VK_KHR_shader_non_semantic_info
+      Vulkan.Extensions.VK_KHR_shader_subgroup_extended_types
+      Vulkan.Extensions.VK_KHR_shared_presentable_image
+      Vulkan.Extensions.VK_KHR_spirv_1_4
+      Vulkan.Extensions.VK_KHR_storage_buffer_storage_class
+      Vulkan.Extensions.VK_KHR_surface
+      Vulkan.Extensions.VK_KHR_surface_protected_capabilities
+      Vulkan.Extensions.VK_KHR_swapchain
+      Vulkan.Extensions.VK_KHR_swapchain_mutable_format
+      Vulkan.Extensions.VK_KHR_timeline_semaphore
+      Vulkan.Extensions.VK_KHR_uniform_buffer_standard_layout
+      Vulkan.Extensions.VK_KHR_variable_pointers
+      Vulkan.Extensions.VK_KHR_vulkan_memory_model
+      Vulkan.Extensions.VK_KHR_wayland_surface
+      Vulkan.Extensions.VK_KHR_win32_keyed_mutex
+      Vulkan.Extensions.VK_KHR_win32_surface
+      Vulkan.Extensions.VK_KHR_xcb_surface
+      Vulkan.Extensions.VK_KHR_xlib_surface
+      Vulkan.Extensions.VK_MVK_ios_surface
+      Vulkan.Extensions.VK_MVK_macos_surface
+      Vulkan.Extensions.VK_NN_vi_surface
+      Vulkan.Extensions.VK_NV_clip_space_w_scaling
+      Vulkan.Extensions.VK_NV_compute_shader_derivatives
+      Vulkan.Extensions.VK_NV_cooperative_matrix
+      Vulkan.Extensions.VK_NV_corner_sampled_image
+      Vulkan.Extensions.VK_NV_coverage_reduction_mode
+      Vulkan.Extensions.VK_NV_dedicated_allocation
+      Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing
+      Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints
+      Vulkan.Extensions.VK_NV_device_diagnostics_config
+      Vulkan.Extensions.VK_NV_device_generated_commands
+      Vulkan.Extensions.VK_NV_external_memory
+      Vulkan.Extensions.VK_NV_external_memory_capabilities
+      Vulkan.Extensions.VK_NV_external_memory_win32
+      Vulkan.Extensions.VK_NV_fill_rectangle
+      Vulkan.Extensions.VK_NV_fragment_coverage_to_color
+      Vulkan.Extensions.VK_NV_fragment_shader_barycentric
+      Vulkan.Extensions.VK_NV_framebuffer_mixed_samples
+      Vulkan.Extensions.VK_NV_geometry_shader_passthrough
+      Vulkan.Extensions.VK_NV_glsl_shader
+      Vulkan.Extensions.VK_NV_mesh_shader
+      Vulkan.Extensions.VK_NV_ray_tracing
+      Vulkan.Extensions.VK_NV_representative_fragment_test
+      Vulkan.Extensions.VK_NV_sample_mask_override_coverage
+      Vulkan.Extensions.VK_NV_scissor_exclusive
+      Vulkan.Extensions.VK_NV_shader_image_footprint
+      Vulkan.Extensions.VK_NV_shader_sm_builtins
+      Vulkan.Extensions.VK_NV_shader_subgroup_partitioned
+      Vulkan.Extensions.VK_NV_shading_rate_image
+      Vulkan.Extensions.VK_NV_viewport_array2
+      Vulkan.Extensions.VK_NV_viewport_swizzle
+      Vulkan.Extensions.VK_NV_win32_keyed_mutex
+      Vulkan.Extensions.VK_NVX_image_view_handle
+      Vulkan.Extensions.VK_NVX_multiview_per_view_attributes
+      Vulkan.Extensions.VK_QCOM_render_pass_shader_resolve
+      Vulkan.Extensions.VK_QCOM_render_pass_store_ops
+      Vulkan.Extensions.VK_QCOM_render_pass_transform
+      Vulkan.Extensions.WSITypes
+      Vulkan.NamedType
+      Vulkan.Version
+      Vulkan.Zero
   hs-source-dirs:
       src
   default-extensions: AllowAmbiguousTypes CPP DataKinds DefaultSignatures DeriveAnyClass DerivingStrategies DuplicateRecordFields FlexibleContexts FlexibleInstances GADTs GeneralizedNewtypeDeriving InstanceSigs LambdaCase MagicHash NoMonomorphismRestriction OverloadedStrings PartialTypeSignatures PatternSynonyms PolyKinds QuantifiedConstraints RankNTypes RecordWildCards RoleAnnotations ScopedTypeVariables StandaloneDeriving Strict TypeApplications TypeFamilyDependencies TypeOperators TypeSynonymInstances UndecidableInstances ViewPatterns
   ghc-options: -Wall -Wno-unticked-promoted-constructors -Wno-missing-pattern-synonym-signatures -Wno-unused-imports -Wno-missing-signatures -Wno-partial-type-signatures
   build-depends:
-      base <4.14
+      base <4.15
     , bytestring
     , transformers
     , vector
